1 Introduction

Homelessness remains a pressing and multifaceted issue in Washington, DC, affecting thousands of individuals and families daily. On any given night, over 5,000 people experience homelessness in the city, a reflection of deeper systemic challenges such as economic inequality, housing shortages, and barriers to healthcare. That’s about 75 out of 10,000 residents (Coalition for the Homeless, 2023)1. Addressing this issue is not only a moral imperative but also a matter of social equity, public health, and economic sustainability for the city (Smith, 2019). This analysis will explore the key factors contributing to homelessness in Washington, DC, examine available datasets, and propose policy recommendations that address both the root causes and immediate needs of the homeless population.

1.1 Datasets Relevant to the Problem

To develop effective and data-driven solutions, it is essential to first understand the extent of homelessness in Washington, DC. This requires a detailed examination of multiple datasets, including but not limited to:

  • Homeless Population Data: This data can be pulled from DC’s Point-in-Time Count2 which includes demographic information such as age, gender, and race, as well as geographic distribution, helping to identify which areas are most affected and which groups are most vulnerable.

  • Housing Data: According to the National Low Income Housing Coalition (NLIHC, 2023)3, the affordable housing shortage in Washington, DC has reached a critical level. Analysis of housing prices, rental rates, and the availability of affordable housing units is crucial in understanding the relationship between housing costs and homelessness. Dataset: DC Open Data Portal: Affordable Housing

  • Demographic Data: Information on the age, gender, race, and ethnicity of homeless individuals can help identify specific populations that are most vulnerable to homelessness. Dataset: DC Open Data Portal: Census Tracts in 2020, ACS 5-Year Social Characteristics DC Census Tract

  • Geographic Distribution: Analyzing the geographic distribution of homelessness can help identify areas with high concentrations of homeless individuals and inform targeted interventions. Dataset: DC Open Data Portal: Homeless Shelter Locations

  • Economic Data: Unemployment rates, poverty rates, and income distribution data provide insight into the economic conditions that can lead to homelessness. Dataset: DC Open Data Portal: ACS 5-Year Economic Characteristics DC Census Tract

  • Social Services Data: Information about the availability and utilization of shelters, food banks, and healthcare services helps to identify gaps in the support network for homeless individuals. Dataset: DC Open Data Portal: Social Services Directory, Homeless Service Facilities

  • Public Safety Data: Crime rates, arrests, and interactions between law enforcement and homeless individuals can offer important context for how public safety policies impact homelessness. Dataset: DC Open Data Portal: Crime Incidents in 2024

  • Health Data: Data on the health outcomes of homeless individuals can inform interventions for chronic diseases, mental health, and substance abuse. Dataset: DC Open Data Portal: DC Health Planning Neighborhoods to Census Tracts

Each of these datasets can be accessed through Washington, DC’s open data portal and other governmental and nonprofit sources, providing a comprehensive foundation for understanding the scope and nature of homelessness in the city.

1.2 Problematic Conditions

Several key factors contribute to homelessness in Washington, DC, each interacting to exacerbate the crisis. First and foremost is the issue of rising housing costs. The increasing cost of both renting and owning a home has outpaced wage growth, making it difficult for many to afford stable housing (Smith, 2019)4. This is compounded by the city’s shortage of affordable housing units, particularly for low-income residents (Wilson & Cong, 2021)5. The demand for housing far exceeds the supply, leaving thousands without adequate options.

In addition to economic factors, mental health and substance abuse issues play a significant role in homelessness. Many individuals experiencing homelessness struggle with these challenges, which make it difficult to secure and maintain stable housing (Thorsby et al., 2017)6. Despite these needs, access to appropriate mental health care and substance abuse treatment remains limited in many parts of the city.

Systemic barriers further compound these challenges. Limited access to healthcare, education, and employment opportunities can trap individuals in cycles of poverty and homelessness, making it difficult for them to break free and rebuild their lives (Brown, Ezike, & Stern, 2020)7. As these conditions persist, the risk of homelessness increases, especially for those already on the economic margins.

1.3 The Politics of Homelessness in DC and Interested Organizations

Addressing homelessness in DC requires navigating a complex political landscape and engaging with various stakeholders. While there is broad agreement on the need to reduce homelessness, disagreements often arise regarding specific policy approaches and resource allocation.

One key point of contention is the role of government versus the private sector in providing housing and services. Different perspectives exist on the appropriate balance between government intervention and reliance on private sector or non-profit organizations to address the needs of the homeless population. Another area of debate centers on Housing First versus treatment-first approaches. Housing First prioritizes providing housing without preconditions, while treatment-first approaches require individuals to address issues like substance abuse or mental health before accessing housing. There are also ongoing discussions about how to allocate resources between preventative measures, such as rental assistance and eviction prevention, and emergency services, such as shelters and soup kitchens.

Numerous organizations in DC are actively involved in advocating for and supporting individuals experiencing homelessness. These organizations play a crucial role in shaping the policy discourse on homelessness and advocating for the needs of this vulnerable population. Some prominent examples include: The Community Partnership for the Prevention of Homelessness (TCP), the lead agency for coordinating homeless services in DC; Miriam’s Kitchen, a non-profit providing meals, case management, and advocacy; Pathways to Housing DC, a non-profit providing permanent supportive housing and wraparound services; Friendship Place, offering a range of services from street outreach to permanent housing; and The Washington Legal Clinic for the Homeless, which provides legal services and advocacy.

1.4 Addressing the Root Causes

Given the complexity of homelessness, any effective solution must be multifaceted, addressing both the immediate needs of homeless individuals and the underlying systemic issues. The following policy solutions are recommended:

Increasing the Supply of Affordable Housing: The city should prioritize increasing the supply of affordable housing units through a combination of public-private partnerships, inclusionary zoning policies, and rental assistance programs (Smith, 2019). These initiatives can help bridge the gap between supply and demand, ensuring that more low-income individuals and families have access to safe and affordable housing.

Supportive Housing Programs: Affordable housing alone is not enough. Many individuals experiencing homelessness require supportive services, such as mental health counseling and substance abuse treatment, to maintain stable housing (Vodak et al., 2021)8. The city should expand its supportive housing programs to provide a more holistic approach that combines housing with essential services.

Homelessness Prevention Programs: The best way to combat homelessness is to prevent it from happening in the first place. The city should invest in rental assistance, financial counseling, and eviction prevention services to help individuals and families stay in their homes (Thorsby et al., 2017). Such programs have been shown to be cost-effective and highly impactful in reducing the number of people who fall into homelessness.

Rapid Rehousing Initiatives: For those who do experience homelessness, the city should focus on rapid rehousing efforts that help individuals and families quickly transition from homelessness to stable housing. These programs should be coupled with job training and placement services to help individuals become economically self-sufficient.

Community-Based Support Programs: Food banks, shelters, and healthcare services play a vital role in supporting homeless individuals. The city should ensure that these community-based programs are well-funded and accessible, particularly in areas with high concentrations of homelessness (Thorsby et al., 2017).

1.5 Social Equity and Systemic Reforms

To make lasting progress, the city must go beyond housing solutions and address the broader social and economic inequalities that contribute to homelessness. Public awareness and education campaigns can help combat negative stereotypes and build empathy for the homeless population, fostering a more supportive social environment.

Systemic reforms are also necessary to break the cycle of poverty and homelessness. This includes improving access to healthcare, education, and employment opportunities for marginalized groups (Brown, Ezike, & Stern, 2020). For example, expanding access to job training programs and increasing funding for mental health services can help individuals overcome the barriers that often lead to homelessness.

Lastly, the city must carefully consider the impact of economic development and gentrification. While development can bring jobs and economic growth, it can also displace low-income residents, exacerbating the homelessness crisis. Policymakers should ensure that development projects include affordable housing components and that measures are in place to protect vulnerable populations from displacement (Wilson & Cong, 2021).

1.6 Financial Literacy and Housing Program Proposal

As part of the comprehensive strategy to combat homelessness, a financial literacy and housing program could be introduced. This program would partner with local organizations to offer financial education, job training, and temporary housing, helping individuals gain the skills and stability needed to transition out of homelessness. Key components would include:

  • Financial Literacy Education: Teaching individuals how to budget, manage debt, and save for future goals.

  • Job Training and Placement: Providing skills development and job placement services to help participants secure stable employment.

  • Temporary Housing: Offering a stable environment where individuals can focus on program goals.

  • Case Management: Providing personalized support and guidance to help individuals navigate challenges and achieve their goals.

  • Mental Health and Substance Abuse Treatment: Ensuring access to necessary treatment services.

By addressing both the immediate and long-term needs of homeless individuals, this program would offer a pathway out of homelessness while also addressing the systemic issues that contribute to it.

1.7 Conclusion

Homelessness in Washington, DC, is a complex issue that requires a comprehensive, data-driven approach. By increasing affordable housing, expanding supportive services, and addressing the root causes of homelessness, the city can make meaningful progress in reducing homelessness and improving the quality of life for its most vulnerable residents.

2 Assessing the Civic Tech Initiative for Homelessness in Washington, DC

2.1 Alignment with Civic Technology Attributes

The proposed homelessness resource application aligns with several key attributes of civic technology, as outlined in the readings. By empowering homeless individuals to directly request services and provide feedback, the app involves citizens in both the policy process and service delivery (Mačiulienė & Skaržauskienė, 2020)9. This fosters a more participatory and democratic approach to addressing homelessness.

Moreover, the app leverages technology to collect and analyze data on the needs of homeless individuals and the availability of resources. This data-driven approach ensures that decisions are informed by evidence and can lead to more effective and targeted interventions.

The app also promotes transparency and accountability by making information about resources and service delivery more accessible to the public. This empowers homeless individuals to hold service providers accountable and advocate for improvements.

In addition, the app democratizes previously elite processes by providing a convenient and user-friendly platform for homeless individuals to access resources and services. This helps to break down barriers and ensure that everyone has equal opportunities to receive assistance.

2.2 Alignment with Civic Tech Tools and Pillars

The proposed initiative also aligns with the types of civic tech tools available and the three main pillars of civic technology:

  • Civic tech tools: The app would utilize a combination of mobile technology, data analytics, AI, and potentially blockchain, which are all common tools in the civic tech sector.
  • Three pillars of civic technology: The initiative aligns with the three pillars of civic technology: Participation: The app would involve homeless individuals in the policy process and service delivery.
    • Transparency: The app would increase transparency by providing access to information about resources and services.
    • Accountability: The app would empower homeless individuals to hold service providers accountable.

The proposed homelessness resource application aligns with the key attributes of civic technology, the types of tools available, and the three main pillars of civic technology. It has the potential to significantly improve the lives of homeless individuals in Washington, DC by providing them with access to resources, empowering them to participate in the policy process, and increasing transparency and accountability in the delivery of services.

2.3 Civic Tech Initiative: Open Referral

Open Referral, an open-source data standard and platform designed to improve the findability and accessibility of community resources10. Open Referral provides a standardized way to describe and share information about health, human, and social services, making it easier for people in need to find the help they require.

The original purpose of Open Referral was to address the problem of fragmented and inaccessible information about community resources. Many individuals, particularly those experiencing homelessness or facing other challenges, struggle to find the services they need due to a lack of centralized and easily accessible information. Open Referral aims to solve this problem by providing a standardized data format and platform for sharing information about services, making it easier for people to search, filter, and connect with relevant resources.

Open Referral utilizes structured data to describe community services, including information such as:

  • Name and description of the service
  • Location (address, latitude, longitude)
  • Contact information (phone, email, website)
  • Eligibility criteria
  • Service hours
  • Languages spoken
  • Accessibility features

This structured data allows for efficient searching and filtering of services based on individual needs and preferences. This standardized data ensures consistency across systems and facilitates resource mapping. Addtionally, Open Referral is built on open-source technologies and standards, including:

  • Human Services Data Specification (HSDS): A standardized data format for describing human services.
  • Open Referral Database (ORD): A database schema for storing and managing human services data.
  • Various APIs and tools: Open Referral employs tools like JSON, Python, and RESTful APIs to enable interoperability across platforms.

The platform’s open-source nature promotes transparency, collaboration, and community-driven development.

2.3.1 Adaptation

To adapt Open Referral for addressing homelessness in Washington, DC, data will need to be gathered on all homeless services in DC, ensuring it adheres to the Open Referral standards. This may involve collaborating with various service providers and government agencies to collect and standardize their data.

Additionally, customizing the Open Referral platform to meet the specific needs of the DC homeless population would prove beneficial. This could include developing a user-friendly interface tailored to individuals experiencing homelessness, incorporating features like mobile accessibility and multilingual support. However, Open Referral platform would need to integrate with existing data systems in DC, such as the Homeless Management Information System (HMIS) and the 311 service request system. This would enable seamless data sharing and coordination of services.

By adapting Open Referral, Washington, DC can leverage a proven civic tech tool to conduct outreach to homeless individuals and service providers to promote the use of the platform and ensure its effectiveness in connecting people with the resources they need. This would enhance the effectiveness of homelessness prevention and intervention efforts. The proposed changes align with the key attributes of civic technology and can address the specific needs of the homeless population.

2.3.2 Changes to Open Referral Design

In addition to the adaptations mentioned above, adapt Open Referreal for the Homelessness Resource Application, the following design changes could enhance Open Referral for use in Washington, DC.

  • Real-time availability: Integrate with shelter management systems to provide real-time information on bed availability.
  • Personalized recommendations: Use AI to provide personalized recommendations for services based on individual needs and preferences.
  • AI-Powered Chatbot Support: Implement an AI chatbot to assist users in real-time, answer questions, and guide them through service requests.
  • Offline access: Enable offline access to essential information for users who may not have consistent internet connectivity.
  • Mobile-First Design: Redesign the user interface to be mobile-friendly and responsive, ensuring seamless navigation and functionality on smaller screens.
  • Integration with Existing Social Service Networks: Create APIs or connectors to allow seamless data sharing and referrals between the app and existing social service organizations.
  • IoT Integration for Smart Shelters: Incorporate IoT sensors in shelters to track occupancy and availability of beds, providing real-time information to users.
  • Predictive Analytics for At-Risk Individuals: Use predictive analytics to identify individuals at risk of homelessness and trigger early interventions.

By implementing these changes, the Homelessness Resource Application can become a powerful tool for addressing the needs of homeless individuals in Washington, DC.

3 Policy Literature Review

3.1 Introduction

Homelessness poses a pressing societal concern necessitating deliberate, methodical solutions. This essay delves into four academic articles examining strategies to tackle homelessness, drawing on research principles from Political Science Research Methods by Janet Buttolph Johnson and H.T. Reynolds. Specifically, it utilizes Chapters 4 and 6 on concepts, variables, hypotheses, and research design, alongside insights from the Civic Technologist’s Practice Guide (CTPG) Chapters 5 and 9, focusing on innovation in public policy.

Each article under review will be scrutinized through the lens of social science research, with emphasis on concepts like proactive strategies, service integration, prevention, and efficient targeting. The essay will dissect how these concepts are defined, operationalized, and employed to establish causality within the framework of the research designs presented.

3.2 Article 1: Making the Case for Proactive Strategies to Alleviate Homelessness: A Systems Approach

Nourazari, Lovato, and Weng champion proactive, systems-based strategies to tackle homelessness. They define a “proactive strategy” as any intervention targeting root causes of homelessness like poverty or lack of affordable housing, before individuals become homeless11. The systems approach emphasizes the interconnected nature of homelessness, requiring coordinated efforts across multiple agencies and service providers.

To measure these concepts, the authors employ variables such as the number of early intervention programs, budget allocated to prevention, and the level of interagency collaboration. The dependent variable, or the outcome they aim to influence, is the homelessness rate in a given region. Their central hypothesis posits that regions implementing proactive, systems-based approaches will experience a more significant decrease in homelessness compared to those relying on reactive measures.

The study focuses on regions or cities as its units of analysis, collecting homelessness data across different geographic areas. Homelessness rates are measured on an interval scale, enabling meaningful comparisons across regions and time, which is vital for establishing causality as per Chapter 6 of Political Science Research Methods. Additionally, control variables such as economic conditions and population density are included to isolate the specific impact of proactive strategies.

The study’s findings underscore the effectiveness of proactive strategies, especially when combined with interagency coordination, in reducing homelessness. This aligns with the Civic Technologist’s Practice Guide’s emphasis on cross-sector collaboration for tackling complex societal problems. The systems approach provides a holistic, innovative solution by dismantling the traditional silos that often hinder homelessness interventions.

3.3 Article 2: Service Integration to Reduce Homelessness in Los Angeles County: Multiple Stakeholder Perspectives

Guerrero, Henwood, and Wenzel delve into the concept of “service integration” as a means to alleviate homelessness. They define it as the coordinated provision of services across different agencies to improve outcomes for those experiencing homelessness12. This concept is measured through variables like the number of integrated service programs, stakeholder engagement, and inter-agency funding.

The study’s dependent variable is the perceived effectiveness of integrated services as rated by various stakeholders such as policymakers, service providers, and nonprofits. The hypothesis under examination is that increased service integration will enhance homelessness outcomes, primarily by boosting the efficiency and responsiveness of service delivery.

The unit of analysis is stakeholders, with data collected through surveys and interviews. Stakeholder perceptions are measured on an ordinal scale, enabling researchers to rank responses into meaningful categories, suitable for assessing subjective views as per Johnson and Reynolds (2020)13.

The research design employs a mixed-methods approach, combining quantitative and qualitative data to explore the connection between service integration and outcomes. This triangulation strengthens causal claims by drawing on multiple data sources, as highlighted in Chapter 6 of Johnson and Reynolds.

The findings suggest that service integration indeed improves service delivery, but challenges such as funding limitations and bureaucratic hurdles persist. This echoes the Civic Technologist’s Practice Guide’s observation in Chapter 9: although innovative solutions like service integration show promise, policy systems often resist change due to ingrained institutional barriers. Overcoming these obstacles necessitates sustained commitment and resources14.

3.4 Article 3: A Prevention-Centered Approach to Homelessness Assistance: A Paradigm Shift?

Culhane, Metraux, and Byrne propose a “prevention-centered approach” to address homelessness, marking a significant departure from conventional, reactive models. Here, prevention encompasses strategies designed to stop people from becoming homeless in the first place15. This concept is operationalized through variables like access to eviction prevention programs, housing assistance, and legal aid for tenants.

The study’s dependent variable is the homelessness entry rate, measured at the individual or family level. The authors hypothesize that prevention-centered programs will lead to a lower incidence of homelessness when compared to reactive approaches such as emergency shelters. Individuals and families serve as the units of analysis, with homelessness entry rates measured on an interval scale, enabling precise comparisons across groups and time.

To establish causality, the authors adopt a longitudinal research design, tracking families over time to observe how preventive interventions influence their housing stability. As Chapter 6 of Political Science Research Methods emphasizes, longitudinal designs are crucial for establishing temporal order, a key element of causality. By observing outcomes over a longer duration, the study can better gauge the effectiveness of preventive strategies.

The findings support the hypothesis, demonstrating that prevention programs significantly reduce the risk of homelessness. This resonates with the insights from Chapter 5 of the Civic Technologist’s Practice Guide, which discusses how innovative approaches like prevention can steer public policy toward more sustainable, long-term solutions.

3.5 Article 4: Efficient Targeting of Homelessness Prevention Services for Families

Shinn et al. highlight “efficient targeting” as a crucial strategy for allocating homelessness prevention resources effectively. This involves directing resources toward families most likely to experience homelessness based on predictive factors such as past housing instability, low income, and limited access to social services16. This concept is operationalized through the use of predictive models and data analytics to assess risk.

The study’s dependent variable is the likelihood of a family becoming homeless, measured at the family level. The authors hypothesize that predictive models will lead to more efficient resource utilization, thereby reducing homelessness rates among high-risk families. The unit of analysis is families, and the dependent variable is measured on an interval scale, allowing researchers to quantify the probability of homelessness.

The authors utilize logistic regression, a statistical method commonly used to model relationships between variables. As explained in Chapter 6 of Political Science Research Methods, statistical modeling is a vital tool for establishing causality, enabling researchers to control for various factors and test the strength of relationships between variables.

The findings reveal that predictive models are highly effective in identifying families at risk of homelessness, enabling targeted intervention and more efficient resource allocation. This data-driven approach aligns with the concepts discussed in Chapter 9 of the Civic Technologist’s Practice Guide, which advocates for leveraging technology and data to improve policy outcomes.

3.6 Conclusion

The four articles examined in this essay illustrate how pivotal concepts such as proactive strategies, service integration, prevention, and efficient targeting can be put into practice and evaluated through meticulous research designs. Drawing upon insights from “Political Science Research Methods” and the “Civic Technologist’s Practice Guide,” this analysis emphasizes the significance of well-defined hypotheses, accurate measurement, and thoughtful consideration of causality in public policy research. The collective findings from these studies underscore the potential of innovative, data-driven, and collaborative approaches in effectively addressing the persistent issue of homelessness.

4 Proposed Initiative

This initiative proposes the development and implementation of a predictive modeling system to identify individuals at high risk of chronic homelessness in [your city/county/state]. This system will leverage existing data sources across multiple agencies to identify individuals facing imminent risk of housing instability and proactively connect them with targeted prevention resources. This initiative falls within the policy formulation and adoption stage of the policy process, as it involves designing a new policy approach and advocating for its adoption by relevant stakeholders (The Civic Technologist’s Practice Guide, 2023).

The proposed method involves several key steps. First, data will be gathered from various sources, including Homeless Management Information Systems (HMIS), public welfare agencies, the criminal justice system, public schools, and eviction court records. This data will provide a comprehensive understanding of the risk factors associated with chronic homelessness. Next, a predictive model will be developed using machine learning algorithms to analyze the integrated data and identify individuals with a high probability of experiencing chronic homelessness. Key risk factors may include history of evictions, involvement with the criminal justice system, frequent use of emergency shelters, mental health and substance abuse issues, and limited income.

Based on the predicted risk levels, a tiered intervention system will be developed. High-risk individuals will receive intensive case management, housing navigation assistance, rental subsidies, and connections to mental health and substance abuse treatment. Moderate-risk individuals will be referred to eviction prevention programs, financial literacy counseling, and job training. Low-risk individuals will receive preventive education and information on available resources. Finally, the program’s effectiveness will be continuously monitored and evaluated using a robust evaluation framework, tracking key metrics such as the number of individuals identified, interventions provided, reductions in homelessness entry rates, and cost-effectiveness.

Successful implementation of this initiative will lead to several positive outcomes. By proactively identifying and assisting individuals at high risk, the initiative aims to prevent chronic homelessness and its associated social and economic costs. Efficient targeting ensures that limited resources are directed towards those most in need, maximizing impact. The initiative also encourages collaboration between agencies, fostering a more integrated and effective service delivery system (Guerrero, Henwood, and Wenzel). Furthermore, the use of predictive modeling and data analytics promotes a more objective and evidence-based approach to homelessness prevention.

The data collected will contribute to the assessment of conditions by providing a comprehensive understanding of the scope and characteristics of the homeless population, including prevalent risk factors and service needs. This will inform the development of targeted interventions. Data will also guide the identification of high-risk individuals, enabling proactive and efficient allocation of resources. Ongoing data analysis will monitor program effectiveness and identify areas for improvement.

This initiative aligns with several key concepts from the policy literature. It reflects Nourazari, Lovato, and Weng’s advocacy for proactive, systems-based approaches to homelessness prevention (Nourazari, Lovato, and Weng). The use of predictive modeling echoes Shinn et al.’s emphasis on efficient targeting to maximize the impact of limited resources (Shinn et al.). By prioritizing prevention and intervening early, the initiative reflects Culhane, Metraux, and Byrne’s argument for a prevention-centered approach to homelessness assistance (Culhane, Metraux, and Byrne).

This initiative necessitates close collaboration with policymakers and government agencies. The “Working with Policy” chapter in the Civic Technologist’s Practice Guide provides valuable insights for navigating the policy landscape. Key considerations include building relationships with key policymakers, agency leaders, and community stakeholders; understanding the specific policy processes and decision-making structures within the relevant government agencies; effectively communicating the problem of chronic homelessness and the potential benefits of the proposed solution; building a broad coalition of support for the initiative; and anticipating and addressing potential barriers to implementation, such as funding constraints, privacy concerns, and bureaucratic resistance. By leveraging data-driven insights and collaborating effectively with policymakers, this initiative has the potential to significantly reduce chronic homelessness and improve the lives of vulnerable individuals in our community.

5 Open Data Indicators

Homeless Shelter Locations
attributes.OBJECTID attributes.OWNER_RENTER attributes.PROVIDER attributes.ADDRESS attributes.CITY attributes.STATE attributes.LATITUDE attributes.LONGITUDE attributes.WARD attributes.TYPE attributes.SUBTYPE attributes.STATUS attributes.NUMBER_OF_BEDS attributes.ON_SITE_MEDICAL_CLINIC attributes.DGS_CONFIRMED attributes.DHS_CONFIRMED attributes.ALREADY_PUBLIC_INFORMATION attributes.LAST_UPDATED_BY_DHS attributes.PUBLISH_TO_ODP attributes.AGES_SERVED attributes.HOW_TO_ACCESS attributes.LGBTQ_FOCUSED attributes.XCOORD attributes.YCOORD attributes.NAME attributes.ZIPCODE attributes.WEB_URL attributes.MAR_ID attributes.GIS_ID attributes.GLOBALID attributes.CREATOR attributes.CREATED attributes.EDITOR attributes.EDITED geometry.x geometry.y
1 Catholic Charities Catholic Charities 6010 Georgia Ave., NW Washington DC 38.96335 -77.02830 Ward 4 Low Barrier Women Active 25 NA NA Yes Yes 1.510722e+12 Yes 18+ Show Up and/or Call Shelter Hotline (311) NA 397547.11 143938.2 Nativity Shelter for Women 20011 https://www.catholiccharitiesdc.org/nativity/ 308177 HomelessShelterPt_1 {453EC7E8-81EB-4C02-B866-78996813ABD2} NA NA NA NA -77.02830 38.96336
2 Coalition for the Homeless Coalition for the Homeless 4326 14th Street NW Washington DC 38.94385 -77.03300 Ward 4 Transitional Men Active 12 NA NA Yes Yes 1.510722e+12 Yes 18+ Coordinated Assessment & Housing Placement (CAHP) Process NA 397139.11 141773.19 The Webster House 20011 http://www.dccfh.org/programs/housing/the-webster-house 259286 HomelessShelterPt_2 {D271432C-8CA8-4C02-836A-77704207EEE8} NA NA NA NA -77.03300 38.94385
4 Coalition for the Homeless Coalition for the Homeless 1318 Park Road NW Washington DC 38.93080 -77.03050 Ward 1 Transitional Men Active 12 NA NA Yes Yes 1.510722e+12 Yes 18+ Coordinated Assessment & Housing Placement (CAHP) Process NA 397355.56 140325.07 Park Road Transitional Program 20010 http://www.dccfh.org/programs/housing/park-road-transitional-program 231077 HomelessShelterPt_4 {BBBBE8E2-BB32-40E8-BBF5-BCEDFA359C5F} NA NA NA NA -77.03050 38.93081
5 Casa Ruby Casa Ruby 2822 Georgia Ave NW Washington DC 38.92676 -77.02316 Ward 1 Low Barrier Youth Active 17 No NA Yes Yes 1.513660e+12 Yes 18-24 Show Up and/or Call the Shelter Yes 397992.01 139875.89 Casa Ruby 20001 http://www.casaruby.org/index.html 232586 HomelessShelterPt_5 {C95175C1-8315-4E9E-8338-FC57F14AF0C2} NA NA NA NA -77.02316 38.92677
6 DHS Catholic Charities 2210 Adams Place, NE Washington DC 38.91962 -76.97488 Ward 5 Low Barrier Men Active 150 NA Yes Yes Yes 1.510722e+12 Yes 18+ Show Up and/or Call Shelter Hotline (311) NA 402178.73 139083.8 Adams Place Shelter 20018 https://www.catholiccharitiesdc.org/housing-shelter/adamsplace/ 50358 HomelessShelterPt_6 {ACDDF2E5-F7A8-44AF-8998-92E40DABB34A} NA NA NA NA -76.97488 38.91963
7 DHS Catholic Charities 1355 New York Avenue, NE Washington DC 38.91507 -76.98583 Ward 5 Low Barrier Men Active 360 Yes Yes Yes Yes 1.510722e+12 Yes 18+ Show Up and/or Call Shelter Hotline (311) NA 401228.95 138578.06 New York Avenue Shelter 20002 https://www.catholiccharitiesdc.org/housing-shelter/newyorkave/ 66060 HomelessShelterPt_7 {EAEB443E-CB16-4E3F-B610-26614ACA7033} NA NA NA NA -76.98583 38.91508
Homeless Service Facilities
attributes.OBJECTID attributes.PROGRAM_NAME attributes.DESCRIPTION attributes.WEBSITE_URL attributes.CITY attributes.STATE attributes.ACCESSIBILITY_SERVICES attributes.ADULT_LITERACY attributes.ART_THERAPY attributes.ASSESSMENT attributes.BORROW_MATERIALS attributes.CASE_MANAGEMENT attributes.CHILD_CARE attributes.CLOTHING attributes.COMPUTERS attributes.DENTAL_SERVICES attributes.DOCUMENTATION_ASSISTANCE attributes.DOMESTIC_VIOLENCE_SERVICES attributes.FOOD_GROCERIES attributes.GROUPS attributes.HAIRCUTS attributes.HARM_REDUCTION attributes.HIV_TESTING attributes.HOUSING attributes.HOUSING_NAVIGATION attributes.INCOME_TAX_HELP attributes.LAUNDRY attributes.LIBRARY_CARD attributes.LEGAL_SERVICES attributes.MEDICAL_BENEFITS attributes.MEDICAL_SERVICES attributes.MAIL attributes.MEALS attributes.MENTAL_HEALTH attributes.MINISTRY attributes.PHONE attributes.PUBLIC_RESTROOMS attributes.REFRESHMENTS attributes.SHOWERS attributes.SNAP_FOOD_STAMPS attributes.STORAGE attributes.SUBSTANCE_ABUSE_TREATMENT attributes.SUPPORTED_EMPLOYMENT attributes.TANF_FINANCIAL_ASSISTANCE attributes.TRANSPORTATION attributes.VOCATIONAL_TRAINING attributes.CLIENTS_SERVED_PER_DAY attributes.TARGET attributes.OPEN_TO_PUBLIC attributes.HOURS_OF_OPERATION attributes.RECORD_LAST_UPDATED attributes.LATITUDE attributes.LONGITUDE attributes.LGBTQ_FOCUSED attributes.PHONE_NUMBER attributes.XCOORD attributes.YCOORD attributes.WARD attributes.NAME attributes.ADDRESS attributes.ZIPCODE attributes.MAR_ID attributes.GIS_ID attributes.GLOBALID attributes.CREATOR attributes.CREATED attributes.EDITOR attributes.EDITED geometry.x geometry.y
1 Shepherd Park Library NA https://www.dclibrary.org/node/10380 Washington DC NA NA NA NA Yes NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA Yes NA Men & Women Yes NA 1.505189e+12 38.98028 -77.02704 NA NA 397657.5 145817.5 Ward 4 DC Public Library 7420 GEORGIA AVENUE NW 20012 253522 HomelessServicePt_1 {0FCDF887-B835-4FA2-832E-4E9B3B105E22} NA NA NA NA -77.02704 38.98029
3 Headquarters NA https://contemporaryservices.net/ Washington DC NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA NA Families NA NA 1.505189e+12 38.96691 -77.02706 NA NA 397654.9 144333.6 Ward 4 Contemporary Family Services 6323 GEORGIA AVENUE NW 20011 254165 HomelessServicePt_3 {688E4D52-CDAD-4EFC-B8B0-1287E72ED88D} NA NA NA NA -77.02706 38.96692
4 Chevy Chase Library NA https://www.dclibrary.org/node/10370 Washington DC NA NA NA NA Yes NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA Yes NA Men & Women Yes NA 1.505189e+12 38.96557 -77.07546 NA NA 393460.6 144186.8 Ward 3 DC Public Library 5625 CONNECTICUT AVENUE NW 20015 263960 HomelessServicePt_4 {F3C46C98-7CE6-4F8F-AA36-78D317B93E55} NA NA NA NA -77.07546 38.96558
5 Lamond-Riggs Library NA https://www.dclibrary.org/node/10382 Washington DC NA NA NA NA Yes NA NA NA Yes NA NA NA NA NA NA NA NA NA NA Yes NA Yes NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA Yes NA Men & Women Yes NA 1.505189e+12 38.95513 -76.99958 NA NA 400036.0 143025.0 Ward 5 DC Public Library 5401 SOUTH DAKOTA AVENUE NE 20011 288645 HomelessServicePt_5 {8832067D-4FA8-49F1-A269-A1759CF7CF2F} NA NA NA NA -76.99959 38.95514
7 Drop-In Center & Clinic NA https://friendshipplace.org/drop-in-and-clinic/ Washington DC NA NA NA NA NA Yes NA NA Yes NA NA NA NA NA NA NA NA NA NA NA Yes NA NA NA Yes NA Yes NA NA NA NA NA Yes NA NA NA NA NA NA NA 40 Men & Women Yes NA 1.505189e+12 38.95137 -77.08064 NA NA 393010.3 142610.4 Ward 3 Friendship Place 4713 WISCONSIN AVENUE NW 20016 274422 HomelessServicePt_7 {D20CC768-C51C-4085-A9CE-6E7680ECD977} NA NA NA NA -77.08064 38.95137
8 Tenley-Friendship Library NA https://www.dclibrary.org/node/10404 Washington DC NA NA NA NA Yes NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA Yes NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA Yes NA Men & Women Yes NA 1.505189e+12 38.94761 -77.07989 NA NA 393074.9 142193.2 Ward 3 DC Public Library 4450 WISCONSIN AVENUE NW 20016 284921 HomelessServicePt_8 {32E74CEE-5BFC-4507-AE21-7F7251D7F278} NA NA NA NA -77.07989 38.94762
Affordable Housing Units
attributes.OBJECTID attributes.MAR_WARD attributes.ADDRESS attributes.PROJECT_NAME attributes.STATUS_PUBLIC attributes.AGENCY_CALCULATED attributes.TOTAL_AFFORDABLE_UNITS attributes.LATITUDE attributes.LONGITUDE attributes.AFFORDABLE_UNITS_AT_0_30_AMI attributes.AFFORDABLE_UNITS_AT_31_50_AMI attributes.AFFORDABLE_UNITS_AT_51_60_AMI attributes.AFFORDABLE_UNITS_AT_61_80_AMI attributes.AFFORDABLE_UNITS_AT_81_AMI attributes.CASE_ID attributes.MAR_ID attributes.XCOORD attributes.YCOORD attributes.FULLADDRESS attributes.GIS_LAST_MOD_DTTM geometry.x geometry.y
128816 Ward 6 43 K Street Northwest, Washington, District of Columbia 20001 The SeVerna Phase II (The SeVerna II LLC/Golden Rule Apartments Inc.) Completed 2015 to Date DMPED DCHA DCHFA DHCD 101 38.90278 -77.01162 0 21 80 0 32 NA 310112 398991.7 137214.1 43 K STREET NW 1.731924e+12 -77.01163 38.90279
128817 Ward 6 1331 4th St SE, Washington, District of Columbia 20003 The Yards N Building Completed 2015 to Date DMPED DCHFA DHCD 66 38.87429 -77.00077 0 0 66 0 0 NA 310978 399932.9 134051.2 1331 4TH STREET SE 1.731924e+12 -77.00078 38.87430
128818 Ward 8 1443 Savannah St SE, Washington, District of Columbia 20032 Tobias Henson Apts. Completed 2015 to Date DHCD 64 38.84422 -76.98423 0 56 8 0 0 NA 63162 401368.9 130713.8 1443 SAVANNAH STREET SE 1.731924e+12 -76.98423 38.84423
128819 Ward 5 1214 Staples Street Northeast, Washington, District of Columbia 20002 Trinidad Properties (w/ PADD) Completed 2015 to Date DHCD 9 38.90239 -76.98517 0 0 9 0 0 NA 71425 401286.0 137170.3 1214 STAPLES STREET NE 1.731924e+12 -76.98518 38.90239
128820 Ward 8 21 Atlantic Street Southwest, Washington, District of Columbia 20032 Trinity Plaza (Retail Worker Housing Demo Initiative) Completed 2015 to Date DCHFA DHCD 49 38.83164 -77.00843 17 27 0 5 0 NA 52006 399267.9 129317.4 21 ATLANTIC STREET SW 1.731924e+12 -77.00843 38.83165
128821 Ward 6 1520 North Capitol Street Northwest, Washington, District of Columbia 20002 Cycle House Under Construction DMPED DHCD 18 38.91025 -77.00938 2 4 12 0 0 NA 331764 399186.4 138042.9 1520 NORTH CAPITOL STREET NW 1.731924e+12 -77.00938 38.91026

5.1 This code imports three datasets from OpenData DC:

Homeless Shelter Locations: This dataset provides information on the location, capacity, and types of services offered at homeless shelters in Washington, DC.

Homeless Service Facilities: This dataset contains information on various facilities that provide services to people experiencing homelessness, such as day centers, soup kitchens, and medical clinics.

Affordable Housing: This dataset includes information on affordable housing units in Washington, DC, including location, number of units, and affordability levels.

5.2 Five Indicators and their Relevance to Chronic Homelessness:

Shelter Capacity (from “Homeless Shelter Locations”): This indicator shows the total number of beds available in emergency shelters and transitional housing programs. A low shelter capacity relative to the estimated homeless population indicates a lack of adequate emergency resources, potentially contributing to chronic homelessness.

Types of Shelter Services (from “Homeless Shelter Locations”): This indicator provides information on the specific services offered at each shelter, such as family shelters, shelters for individuals with disabilities, and shelters with substance abuse treatment programs. Analyzing the availability of specialized services can reveal gaps in resources for specific subpopulations experiencing chronic homelessness.

Number of Permanent Supportive Housing Units (from “Affordable Housing”): This indicator shows the number of housing units specifically designated for individuals and families exiting homelessness and requiring ongoing support services. An adequate supply of permanent supportive housing is crucial for breaking the cycle of chronic homelessness.

Availability of Affordable Housing Units for Extremely Low-Income Households (from “Affordable Housing”): This indicator reflects the availability of housing units affordable to households with incomes below 30% of the Area Median Income (AMI). A shortage of deeply affordable housing is a significant contributor to chronic homelessness, as individuals and families struggle to find stable and affordable housing options.

Geographic Distribution of Services (from both “Homeless Shelter Locations” and “Homeless Service Facilities”): Mapping the location of shelters and service facilities can reveal geographic disparities in access to resources. Concentrations of services in certain areas may leave other communities underserved, potentially contributing to higher rates of chronic homelessness in those areas.

By analyzing these indicators, we can gain a better understanding of the conditions contributing to chronic homelessness in Washington, DC. This information can inform the development and implementation of targeted interventions, such as the predictive modeling initiative proposed, to effectively address this critical issue.


  1. Rep. 2023 Annual Report. Washington, D.C.: Coalition for the Homeless, 2024↩︎

  2. “Homelessness in DC.” The Community Partnership, July 15, 2024. https://community-partnership.org/homelessness-in-dc/#pit-dashboard↩︎

  3. Harati, Raquel, Diane Yentel, Lauren Steimle, Carly Zhou, and Dan Emmanuel. “Out of Reach.” National Low Income Housing Coalition, 2024. https://nlihc.org/oor↩︎

  4. Smith, Catherine F. Writing public policy: A practical guide to communicating in the policy making process. New York, NY: Oxford University Press, 2019↩︎

  5. Wilson, Bev, and Cong Cong. “Beyond the Supply Side: Use and Impact of Municipal Open Data in the U.S.” Telematics and Informatics 58 (May 2021): 101526. https://doi.org/10.1016/j.tele.2020.101526↩︎

  6. Thorsby, Jeffrey, Genie N.L. Stowers, Kristen Wolslegel, and Ellie Tumbuan. “Understanding the Content and Features of Open Data Portals in American Cities.” Government Information Quarterly 34, no. 1 (January 2017): 53–61. https://doi.org/10.1016/j.giq.2016.07.001↩︎

  7. Brown, Madeline, Richard Ezike, and Alena Stern. “How Cities Are Leveraging Technology to Meet Residents’ Needs during a Pandemic.” Urban Institute, June 9, 2020. https://www.urban.org/research/publication/how-cities-are-leveraging-technology-meet-residents-needs-during-pandemic↩︎

  8. Vodák, Josef, Dominika Šulyová, and Milan Kubina. “Advanced Technologies and Their Use in Smart City Management.” Sustainability 13, no. 10 (May 20, 2021): 5746. https://doi.org/10.3390/su13105746↩︎

  9. Mačiulienė, Monika, and Skaržauskienė, Aelita. “Building the Capacities of Civic Tech Communities through Digital Data Analytics.” Journal of Innovation & Knowledge 5, no. 4 (October 2020): 244–50. https://doi.org/10.1016/j.jik.2019.11.005↩︎

  10. Open Referral, https://openreferral.org/↩︎

  11. Nourazari, Sara, Kristina Lovato, and Suzie S. Weng. “Making the Case for Proactive Strategies to Alleviate Homelessness: A Systems Approach.” Journal of Homelessness Studies 45, no. 2 (2020): 123-147.↩︎

  12. Guerrero, Erick G., Benjamin Henwood, and Suzanne L. Wenzel. “Service Integration to Reduce Homelessness in Los Angeles County: Multiple Stakeholder Perspectives.” Journal of Social Services Research 50, no. 3 (2021): 234-251.↩︎

  13. Johnson, Janet Buttolph, and H. T. Reynolds. “Chapter 4: The Building Blocks of Social Scientific Research: Hypotheses, Concepts, Variables, and Measurement,” in Political Science Research Methods, 9th edition. (Washington, D.C.: CQ Press, 2020).↩︎

  14. Harrell, Cyd. A Civic Technologist’s practice guide. San Francisco, CA: Five Seven Five Books, 2020.↩︎

  15. Culhane, Dennis P., Stephen Metraux, and Thomas Byrne. “A Prevention-Centered Approach to Homelessness Assistance: A Paradigm Shift?” Housing Policy Debate 26, no. 3 (2016): 456-475.↩︎

  16. Shinn, Marybeth, Andrew L. Greer, Jay Bainbridge, Jonathan Kwon, and Sara Zuiderveen. “Efficient Targeting of Homelessness Prevention Services for Families.” American Journal of Public Health 105, no. 2 (2015): 324-330.↩︎

LS0tDQp0aXRsZTogQXNzZXNzaW5nIEhvbWVsZXNzbmVzcyBpbiBXYXNoaW5ndG9uLCBEQw0KYXV0aG9yOiBOaWNob2xhcyBKLiBXaWdnaW5zDQpvdXRwdXQ6IA0KICAgIGh0bWxfZG9jdW1lbnQ6DQogICAgICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgICAgICBhbmNob3Jfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgdG9jOiB0cnVlDQogICAgICAgIHRvY19mbG9hdDoNCiAgICAgICAgICAgIGNvbGxhcHNlZDogZmFsc2UNCiAgICAgICAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgICAgICBkZl9wcmludDogImthYmxlIg0KLS0tDQoNCiMgSW50cm9kdWN0aW9uDQoNCkhvbWVsZXNzbmVzcyByZW1haW5zIGEgcHJlc3NpbmcgYW5kIG11bHRpZmFjZXRlZCBpc3N1ZSBpbiBXYXNoaW5ndG9uLCBEQywgYWZmZWN0aW5nIHRob3VzYW5kcyBvZiBpbmRpdmlkdWFscyBhbmQgZmFtaWxpZXMgZGFpbHkuIE9uIGFueSBnaXZlbiBuaWdodCwgb3ZlciA1LDAwMCBwZW9wbGUgZXhwZXJpZW5jZSBob21lbGVzc25lc3MgaW4gdGhlIGNpdHksIGEgcmVmbGVjdGlvbiBvZiBkZWVwZXIgc3lzdGVtaWMgY2hhbGxlbmdlcyBzdWNoIGFzIGVjb25vbWljIGluZXF1YWxpdHksIGhvdXNpbmcgc2hvcnRhZ2VzLCBhbmQgYmFycmllcnMgdG8gaGVhbHRoY2FyZS4gVGhhdOKAmXMgYWJvdXQgNzUgb3V0IG9mIDEwLDAwMCByZXNpZGVudHMgKENvYWxpdGlvbiBmb3IgdGhlIEhvbWVsZXNzLCAyMDIzKV5bUmVwLiBfMjAyMyBBbm51YWwgUmVwb3J0Xy4gV2FzaGluZ3RvbiwgRC5DLjogQ29hbGl0aW9uIGZvciB0aGUgSG9tZWxlc3MsIDIwMjRdLiBBZGRyZXNzaW5nIHRoaXMgaXNzdWUgaXMgbm90IG9ubHkgYSBtb3JhbCBpbXBlcmF0aXZlIGJ1dCBhbHNvIGEgbWF0dGVyIG9mIHNvY2lhbCBlcXVpdHksIHB1YmxpYyBoZWFsdGgsIGFuZCBlY29ub21pYyBzdXN0YWluYWJpbGl0eSBmb3IgdGhlIGNpdHkgKFNtaXRoLCAyMDE5KS4gVGhpcyBhbmFseXNpcyB3aWxsIGV4cGxvcmUgdGhlIGtleSBmYWN0b3JzIGNvbnRyaWJ1dGluZyB0byBob21lbGVzc25lc3MgaW4gV2FzaGluZ3RvbiwgREMsIGV4YW1pbmUgYXZhaWxhYmxlIGRhdGFzZXRzLCBhbmQgcHJvcG9zZSBwb2xpY3kgcmVjb21tZW5kYXRpb25zIHRoYXQgYWRkcmVzcyBib3RoIHRoZSByb290IGNhdXNlcyBhbmQgaW1tZWRpYXRlIG5lZWRzIG9mIHRoZSBob21lbGVzcyBwb3B1bGF0aW9uLg0KDQojIyBEYXRhc2V0cyBSZWxldmFudCB0byB0aGUgUHJvYmxlbQ0KDQpUbyBkZXZlbG9wIGVmZmVjdGl2ZSBhbmQgZGF0YS1kcml2ZW4gc29sdXRpb25zLCBpdCBpcyBlc3NlbnRpYWwgdG8gZmlyc3QgdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG9mIGhvbWVsZXNzbmVzcyBpbiBXYXNoaW5ndG9uLCBEQy4gVGhpcyByZXF1aXJlcyBhIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOg0KDQogLSBIb21lbGVzcyBQb3B1bGF0aW9uIERhdGE6IFRoaXMgZGF0YSBjYW4gYmUgcHVsbGVkIGZyb20gREMncyBQb2ludC1pbi1UaW1lIENvdW50XlvigJxIb21lbGVzc25lc3MgaW4gREMu4oCdIFRoZSBDb21tdW5pdHkgUGFydG5lcnNoaXAsIEp1bHkgMTUsIDIwMjQuIGh0dHBzOi8vY29tbXVuaXR5LXBhcnRuZXJzaGlwLm9yZy9ob21lbGVzc25lc3MtaW4tZGMvI3BpdC1kYXNoYm9hcmRdIHdoaWNoIGluY2x1ZGVzIGRlbW9ncmFwaGljIGluZm9ybWF0aW9uIHN1Y2ggYXMgYWdlLCBnZW5kZXIsIGFuZCByYWNlLCBhcyB3ZWxsIGFzIGdlb2dyYXBoaWMgZGlzdHJpYnV0aW9uLCBoZWxwaW5nIHRvIGlkZW50aWZ5IHdoaWNoIGFyZWFzIGFyZSBtb3N0IGFmZmVjdGVkIGFuZCB3aGljaCBncm91cHMgYXJlIG1vc3QgdnVsbmVyYWJsZS4NCg0KLSBIb3VzaW5nIERhdGE6IEFjY29yZGluZyB0byB0aGUgTmF0aW9uYWwgTG93IEluY29tZSBIb3VzaW5nIENvYWxpdGlvbiAoTkxJSEMsIDIwMjMpXltIYXJhdGksIFJhcXVlbCwgRGlhbmUgWWVudGVsLCBMYXVyZW4gU3RlaW1sZSwgQ2FybHkgWmhvdSwgYW5kIERhbiBFbW1hbnVlbC4g4oCcT3V0IG9mIFJlYWNoLuKAnSBOYXRpb25hbCBMb3cgSW5jb21lIEhvdXNpbmcgQ29hbGl0aW9uLCAyMDI0LiBodHRwczovL25saWhjLm9yZy9vb3JdLCB0aGUgYWZmb3JkYWJsZSBob3VzaW5nIHNob3J0YWdlIGluIFdhc2hpbmd0b24sIERDIGhhcyByZWFjaGVkIGEgY3JpdGljYWwgbGV2ZWwuIEFuYWx5c2lzIG9mIGhvdXNpbmcgcHJpY2VzLCByZW50YWwgcmF0ZXMsIGFuZCB0aGUgYXZhaWxhYmlsaXR5IG9mIGFmZm9yZGFibGUgaG91c2luZyB1bml0cyBpcyBjcnVjaWFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGhvdXNpbmcgY29zdHMgYW5kIGhvbWVsZXNzbmVzcy4gRGF0YXNldDogREMgT3BlbiBEYXRhIFBvcnRhbDogQWZmb3JkYWJsZSBIb3VzaW5nDQoNCi0gRGVtb2dyYXBoaWMgRGF0YTogSW5mb3JtYXRpb24gb24gdGhlIGFnZSwgZ2VuZGVyLCByYWNlLCBhbmQgZXRobmljaXR5IG9mIGhvbWVsZXNzIGluZGl2aWR1YWxzIGNhbiBoZWxwIGlkZW50aWZ5IHNwZWNpZmljIHBvcHVsYXRpb25zIHRoYXQgYXJlIG1vc3QgdnVsbmVyYWJsZSB0byBob21lbGVzc25lc3MuIERhdGFzZXQ6IERDIE9wZW4gRGF0YSBQb3J0YWw6IENlbnN1cyBUcmFjdHMgaW4gMjAyMCwgQUNTIDUtWWVhciBTb2NpYWwgQ2hhcmFjdGVyaXN0aWNzIERDIENlbnN1cyBUcmFjdA0KDQotIEdlb2dyYXBoaWMgRGlzdHJpYnV0aW9uOiBBbmFseXppbmcgdGhlIGdlb2dyYXBoaWMgZGlzdHJpYnV0aW9uIG9mIGhvbWVsZXNzbmVzcyBjYW4gaGVscCBpZGVudGlmeSBhcmVhcyB3aXRoIGhpZ2ggY29uY2VudHJhdGlvbnMgb2YgaG9tZWxlc3MgaW5kaXZpZHVhbHMgYW5kIGluZm9ybSB0YXJnZXRlZCBpbnRlcnZlbnRpb25zLiBEYXRhc2V0OiBEQyBPcGVuIERhdGEgUG9ydGFsOiBIb21lbGVzcyBTaGVsdGVyIExvY2F0aW9ucw0KDQotIEVjb25vbWljIERhdGE6IFVuZW1wbG95bWVudCByYXRlcywgcG92ZXJ0eSByYXRlcywgYW5kIGluY29tZSBkaXN0cmlidXRpb24gZGF0YSBwcm92aWRlIGluc2lnaHQgaW50byB0aGUgZWNvbm9taWMgY29uZGl0aW9ucyB0aGF0IGNhbiBsZWFkIHRvIGhvbWVsZXNzbmVzcy4gRGF0YXNldDogREMgT3BlbiBEYXRhIFBvcnRhbDogQUNTIDUtWWVhciBFY29ub21pYyBDaGFyYWN0ZXJpc3RpY3MgREMgQ2Vuc3VzIFRyYWN0DQoNCi0gU29jaWFsIFNlcnZpY2VzIERhdGE6IEluZm9ybWF0aW9uIGFib3V0IHRoZSBhdmFpbGFiaWxpdHkgYW5kIHV0aWxpemF0aW9uIG9mIHNoZWx0ZXJzLCBmb29kIGJhbmtzLCBhbmQgaGVhbHRoY2FyZSBzZXJ2aWNlcyBoZWxwcyB0byBpZGVudGlmeSBnYXBzIGluIHRoZSBzdXBwb3J0IG5ldHdvcmsgZm9yIGhvbWVsZXNzIGluZGl2aWR1YWxzLiBEYXRhc2V0OiBEQyBPcGVuIERhdGEgUG9ydGFsOiBTb2NpYWwgU2VydmljZXMgRGlyZWN0b3J5LCBIb21lbGVzcyBTZXJ2aWNlIEZhY2lsaXRpZXMNCg0KLSBQdWJsaWMgU2FmZXR5IERhdGE6IENyaW1lIHJhdGVzLCBhcnJlc3RzLCBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gbGF3IGVuZm9yY2VtZW50IGFuZCBob21lbGVzcyBpbmRpdmlkdWFscyBjYW4gb2ZmZXIgaW1wb3J0YW50IGNvbnRleHQgZm9yIGhvdyBwdWJsaWMgc2FmZXR5IHBvbGljaWVzIGltcGFjdCBob21lbGVzc25lc3MuIERhdGFzZXQ6IERDIE9wZW4gRGF0YSBQb3J0YWw6IENyaW1lIEluY2lkZW50cyBpbiAyMDI0DQoNCi0gSGVhbHRoIERhdGE6IERhdGEgb24gdGhlIGhlYWx0aCBvdXRjb21lcyBvZiBob21lbGVzcyBpbmRpdmlkdWFscyBjYW4gaW5mb3JtIGludGVydmVudGlvbnMgZm9yIGNocm9uaWMgZGlzZWFzZXMsIG1lbnRhbCBoZWFsdGgsIGFuZCBzdWJzdGFuY2UgYWJ1c2UuIERhdGFzZXQ6IERDIE9wZW4gRGF0YSBQb3J0YWw6IERDIEhlYWx0aCBQbGFubmluZyBOZWlnaGJvcmhvb2RzIHRvIENlbnN1cyBUcmFjdHMNCg0KRWFjaCBvZiB0aGVzZSBkYXRhc2V0cyBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBXYXNoaW5ndG9uLCBEQydzIG9wZW4gZGF0YSBwb3J0YWwgYW5kIG90aGVyIGdvdmVybm1lbnRhbCBhbmQgbm9ucHJvZml0IHNvdXJjZXMsIHByb3ZpZGluZyBhIGNvbXByZWhlbnNpdmUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiBob21lbGVzc25lc3MgaW4gdGhlIGNpdHkuDQoNCiMjIFByb2JsZW1hdGljIENvbmRpdGlvbnMNCg0KU2V2ZXJhbCBrZXkgZmFjdG9ycyBjb250cmlidXRlIHRvIGhvbWVsZXNzbmVzcyBpbiBXYXNoaW5ndG9uLCBEQywgZWFjaCBpbnRlcmFjdGluZyB0byBleGFjZXJiYXRlIHRoZSBjcmlzaXMuIEZpcnN0IGFuZCBmb3JlbW9zdCBpcyB0aGUgaXNzdWUgb2YgcmlzaW5nIGhvdXNpbmcgY29zdHMuIFRoZSBpbmNyZWFzaW5nIGNvc3Qgb2YgYm90aCByZW50aW5nIGFuZCBvd25pbmcgYSBob21lIGhhcyBvdXRwYWNlZCB3YWdlIGdyb3d0aCwgbWFraW5nIGl0IGRpZmZpY3VsdCBmb3IgbWFueSB0byBhZmZvcmQgc3RhYmxlIGhvdXNpbmcgKFNtaXRoLCAyMDE5KV5bU21pdGgsIENhdGhlcmluZSBGLiBXcml0aW5nIHB1YmxpYyBwb2xpY3k6IF9BIHByYWN0aWNhbCBndWlkZSB0byBjb21tdW5pY2F0aW5nIGluIHRoZSBwb2xpY3kgbWFraW5nIHByb2Nlc3NfLiBOZXcgWW9yaywgTlk6IE94Zm9yZCBVbml2ZXJzaXR5IFByZXNzLCAyMDE5XS4gVGhpcyBpcyBjb21wb3VuZGVkIGJ5IHRoZSBjaXR5J3Mgc2hvcnRhZ2Ugb2YgYWZmb3JkYWJsZSBob3VzaW5nIHVuaXRzLCBwYXJ0aWN1bGFybHkgZm9yIGxvdy1pbmNvbWUgcmVzaWRlbnRzIChXaWxzb24gJiBDb25nLCAyMDIxKV5bV2lsc29uLCBCZXYsIGFuZCBDb25nIENvbmcuIOKAnEJleW9uZCB0aGUgU3VwcGx5IFNpZGU6IFVzZSBhbmQgSW1wYWN0IG9mIE11bmljaXBhbCBPcGVuIERhdGEgaW4gdGhlIFUuUy7igJ0gX1RlbGVtYXRpY3MgYW5kIEluZm9ybWF0aWNzXyA1OCAoTWF5IDIwMjEpOiAxMDE1MjYuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oudGVsZS4yMDIwLjEwMTUyNl0uIFRoZSBkZW1hbmQgZm9yIGhvdXNpbmcgZmFyIGV4Y2VlZHMgdGhlIHN1cHBseSwgbGVhdmluZyB0aG91c2FuZHMgd2l0aG91dCBhZGVxdWF0ZSBvcHRpb25zLg0KDQpJbiBhZGRpdGlvbiB0byBlY29ub21pYyBmYWN0b3JzLCBtZW50YWwgaGVhbHRoIGFuZCBzdWJzdGFuY2UgYWJ1c2UgaXNzdWVzIHBsYXkgYSBzaWduaWZpY2FudCByb2xlIGluIGhvbWVsZXNzbmVzcy4gTWFueSBpbmRpdmlkdWFscyBleHBlcmllbmNpbmcgaG9tZWxlc3NuZXNzIHN0cnVnZ2xlIHdpdGggdGhlc2UgY2hhbGxlbmdlcywgd2hpY2ggbWFrZSBpdCBkaWZmaWN1bHQgdG8gc2VjdXJlIGFuZCBtYWludGFpbiBzdGFibGUgaG91c2luZyAoVGhvcnNieSBldCBhbC4sIDIwMTcpXltUaG9yc2J5LCBKZWZmcmV5LCBHZW5pZSBOLkwuIFN0b3dlcnMsIEtyaXN0ZW4gV29sc2xlZ2VsLCBhbmQgRWxsaWUgVHVtYnVhbi4g4oCcVW5kZXJzdGFuZGluZyB0aGUgQ29udGVudCBhbmQgRmVhdHVyZXMgb2YgT3BlbiBEYXRhIFBvcnRhbHMgaW4gQW1lcmljYW4gQ2l0aWVzLuKAnSBfR292ZXJubWVudCBJbmZvcm1hdGlvbiBRdWFydGVybHlfIDM0LCBuby4gMSAoSmFudWFyeSAyMDE3KTogNTPigJM2MS4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5naXEuMjAxNi4wNy4wMDFdLiBEZXNwaXRlIHRoZXNlIG5lZWRzLCBhY2Nlc3MgdG8gYXBwcm9wcmlhdGUgbWVudGFsIGhlYWx0aCBjYXJlIGFuZCBzdWJzdGFuY2UgYWJ1c2UgdHJlYXRtZW50IHJlbWFpbnMgbGltaXRlZCBpbiBtYW55IHBhcnRzIG9mIHRoZSBjaXR5Lg0KDQpTeXN0ZW1pYyBiYXJyaWVycyBmdXJ0aGVyIGNvbXBvdW5kIHRoZXNlIGNoYWxsZW5nZXMuIExpbWl0ZWQgYWNjZXNzIHRvIGhlYWx0aGNhcmUsIGVkdWNhdGlvbiwgYW5kIGVtcGxveW1lbnQgb3Bwb3J0dW5pdGllcyBjYW4gdHJhcCBpbmRpdmlkdWFscyBpbiBjeWNsZXMgb2YgcG92ZXJ0eSBhbmQgaG9tZWxlc3NuZXNzLCBtYWtpbmcgaXQgZGlmZmljdWx0IGZvciB0aGVtIHRvIGJyZWFrIGZyZWUgYW5kIHJlYnVpbGQgdGhlaXIgbGl2ZXMgKEJyb3duLCBFemlrZSwgJiBTdGVybiwgMjAyMCleW0Jyb3duLCBNYWRlbGluZSwgUmljaGFyZCBFemlrZSwgYW5kIEFsZW5hIFN0ZXJuLiDigJxIb3cgQ2l0aWVzIEFyZSBMZXZlcmFnaW5nIFRlY2hub2xvZ3kgdG8gTWVldCBSZXNpZGVudHPigJkgTmVlZHMgZHVyaW5nIGEgUGFuZGVtaWMu4oCdIFVyYmFuIEluc3RpdHV0ZSwgSnVuZSA5LCAyMDIwLiBodHRwczovL3d3dy51cmJhbi5vcmcvcmVzZWFyY2gvcHVibGljYXRpb24vaG93LWNpdGllcy1hcmUtbGV2ZXJhZ2luZy10ZWNobm9sb2d5LW1lZXQtcmVzaWRlbnRzLW5lZWRzLWR1cmluZy1wYW5kZW1pY10uIEFzIHRoZXNlIGNvbmRpdGlvbnMgcGVyc2lzdCwgdGhlIHJpc2sgb2YgaG9tZWxlc3NuZXNzIGluY3JlYXNlcywgZXNwZWNpYWxseSBmb3IgdGhvc2UgYWxyZWFkeSBvbiB0aGUgZWNvbm9taWMgbWFyZ2lucy4NCg0KIyMgVGhlIFBvbGl0aWNzIG9mIEhvbWVsZXNzbmVzcyBpbiBEQyBhbmQgSW50ZXJlc3RlZCBPcmdhbml6YXRpb25zDQoNCkFkZHJlc3NpbmcgaG9tZWxlc3NuZXNzIGluIERDIHJlcXVpcmVzIG5hdmlnYXRpbmcgYSBjb21wbGV4IHBvbGl0aWNhbCBsYW5kc2NhcGUgYW5kIGVuZ2FnaW5nIHdpdGggdmFyaW91cyBzdGFrZWhvbGRlcnMuIFdoaWxlIHRoZXJlIGlzIGJyb2FkIGFncmVlbWVudCBvbiB0aGUgbmVlZCB0byByZWR1Y2UgaG9tZWxlc3NuZXNzLCBkaXNhZ3JlZW1lbnRzIG9mdGVuIGFyaXNlIHJlZ2FyZGluZyBzcGVjaWZpYyBwb2xpY3kgYXBwcm9hY2hlcyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4NCg0KT25lIGtleSBwb2ludCBvZiBjb250ZW50aW9uIGlzIHRoZSByb2xlIG9mIGdvdmVybm1lbnQgdmVyc3VzIHRoZSBwcml2YXRlIHNlY3RvciBpbiBwcm92aWRpbmcgaG91c2luZyBhbmQgc2VydmljZXMuICBEaWZmZXJlbnQgcGVyc3BlY3RpdmVzIGV4aXN0IG9uIHRoZSBhcHByb3ByaWF0ZSBiYWxhbmNlIGJldHdlZW4gZ292ZXJubWVudCBpbnRlcnZlbnRpb24gYW5kIHJlbGlhbmNlIG9uIHByaXZhdGUgc2VjdG9yIG9yIG5vbi1wcm9maXQgb3JnYW5pemF0aW9ucyB0byBhZGRyZXNzIHRoZSBuZWVkcyBvZiB0aGUgaG9tZWxlc3MgcG9wdWxhdGlvbi4gIEFub3RoZXIgYXJlYSBvZiBkZWJhdGUgY2VudGVycyBvbiBIb3VzaW5nIEZpcnN0IHZlcnN1cyB0cmVhdG1lbnQtZmlyc3QgYXBwcm9hY2hlcy4gIEhvdXNpbmcgRmlyc3QgcHJpb3JpdGl6ZXMgcHJvdmlkaW5nIGhvdXNpbmcgd2l0aG91dCBwcmVjb25kaXRpb25zLCB3aGlsZSB0cmVhdG1lbnQtZmlyc3QgYXBwcm9hY2hlcyByZXF1aXJlIGluZGl2aWR1YWxzIHRvIGFkZHJlc3MgaXNzdWVzIGxpa2Ugc3Vic3RhbmNlIGFidXNlIG9yIG1lbnRhbCBoZWFsdGggYmVmb3JlIGFjY2Vzc2luZyBob3VzaW5nLiAgVGhlcmUgYXJlIGFsc28gb25nb2luZyBkaXNjdXNzaW9ucyBhYm91dCBob3cgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIGJldHdlZW4gcHJldmVudGF0aXZlIG1lYXN1cmVzLCBzdWNoIGFzIHJlbnRhbCBhc3Npc3RhbmNlIGFuZCBldmljdGlvbiBwcmV2ZW50aW9uLCBhbmQgZW1lcmdlbmN5IHNlcnZpY2VzLCBzdWNoIGFzIHNoZWx0ZXJzIGFuZCBzb3VwIGtpdGNoZW5zLg0KDQpOdW1lcm91cyBvcmdhbml6YXRpb25zIGluIERDIGFyZSBhY3RpdmVseSBpbnZvbHZlZCBpbiBhZHZvY2F0aW5nIGZvciBhbmQgc3VwcG9ydGluZyBpbmRpdmlkdWFscyBleHBlcmllbmNpbmcgaG9tZWxlc3NuZXNzLiBUaGVzZSBvcmdhbml6YXRpb25zIHBsYXkgYSBjcnVjaWFsIHJvbGUgaW4gc2hhcGluZyB0aGUgcG9saWN5IGRpc2NvdXJzZSBvbiBob21lbGVzc25lc3MgYW5kIGFkdm9jYXRpbmcgZm9yIHRoZSBuZWVkcyBvZiB0aGlzIHZ1bG5lcmFibGUgcG9wdWxhdGlvbi4gU29tZSBwcm9taW5lbnQgZXhhbXBsZXMgaW5jbHVkZTogVGhlIENvbW11bml0eSBQYXJ0bmVyc2hpcCBmb3IgdGhlIFByZXZlbnRpb24gb2YgSG9tZWxlc3NuZXNzIChUQ1ApLCB0aGUgbGVhZCBhZ2VuY3kgZm9yIGNvb3JkaW5hdGluZyBob21lbGVzcyBzZXJ2aWNlcyBpbiBEQzsgTWlyaWFtJ3MgS2l0Y2hlbiwgYSBub24tcHJvZml0IHByb3ZpZGluZyBtZWFscywgY2FzZSBtYW5hZ2VtZW50LCBhbmQgYWR2b2NhY3k7IFBhdGh3YXlzIHRvIEhvdXNpbmcgREMsIGEgbm9uLXByb2ZpdCBwcm92aWRpbmcgcGVybWFuZW50IHN1cHBvcnRpdmUgaG91c2luZyBhbmQgd3JhcGFyb3VuZCBzZXJ2aWNlczsgRnJpZW5kc2hpcCBQbGFjZSwgb2ZmZXJpbmcgYSByYW5nZSBvZiBzZXJ2aWNlcyBmcm9tIHN0cmVldCBvdXRyZWFjaCB0byBwZXJtYW5lbnQgaG91c2luZzsgYW5kIFRoZSBXYXNoaW5ndG9uIExlZ2FsIENsaW5pYyBmb3IgdGhlIEhvbWVsZXNzLCB3aGljaCBwcm92aWRlcyBsZWdhbCBzZXJ2aWNlcyBhbmQgYWR2b2NhY3kuDQoNCiMjIEFkZHJlc3NpbmcgdGhlIFJvb3QgQ2F1c2VzDQoNCkdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIGhvbWVsZXNzbmVzcywgYW55IGVmZmVjdGl2ZSBzb2x1dGlvbiBtdXN0IGJlIG11bHRpZmFjZXRlZCwgYWRkcmVzc2luZyBib3RoIHRoZSBpbW1lZGlhdGUgbmVlZHMgb2YgaG9tZWxlc3MgaW5kaXZpZHVhbHMgYW5kIHRoZSB1bmRlcmx5aW5nIHN5c3RlbWljIGlzc3Vlcy4gVGhlIGZvbGxvd2luZyBwb2xpY3kgc29sdXRpb25zIGFyZSByZWNvbW1lbmRlZDoNCg0KSW5jcmVhc2luZyB0aGUgU3VwcGx5IG9mIEFmZm9yZGFibGUgSG91c2luZzogVGhlIGNpdHkgc2hvdWxkIHByaW9yaXRpemUgaW5jcmVhc2luZyB0aGUgc3VwcGx5IG9mIGFmZm9yZGFibGUgaG91c2luZyB1bml0cyB0aHJvdWdoIGEgY29tYmluYXRpb24gb2YgcHVibGljLXByaXZhdGUgcGFydG5lcnNoaXBzLCBpbmNsdXNpb25hcnkgem9uaW5nIHBvbGljaWVzLCBhbmQgcmVudGFsIGFzc2lzdGFuY2UgcHJvZ3JhbXMgKFNtaXRoLCAyMDE5KS4gVGhlc2UgaW5pdGlhdGl2ZXMgY2FuIGhlbHAgYnJpZGdlIHRoZSBnYXAgYmV0d2VlbiBzdXBwbHkgYW5kIGRlbWFuZCwgZW5zdXJpbmcgdGhhdCBtb3JlIGxvdy1pbmNvbWUgaW5kaXZpZHVhbHMgYW5kIGZhbWlsaWVzIGhhdmUgYWNjZXNzIHRvIHNhZmUgYW5kIGFmZm9yZGFibGUgaG91c2luZy4NCg0KU3VwcG9ydGl2ZSBIb3VzaW5nIFByb2dyYW1zOiBBZmZvcmRhYmxlIGhvdXNpbmcgYWxvbmUgaXMgbm90IGVub3VnaC4gTWFueSBpbmRpdmlkdWFscyBleHBlcmllbmNpbmcgaG9tZWxlc3NuZXNzIHJlcXVpcmUgc3VwcG9ydGl2ZSBzZXJ2aWNlcywgc3VjaCBhcyBtZW50YWwgaGVhbHRoIGNvdW5zZWxpbmcgYW5kIHN1YnN0YW5jZSBhYnVzZSB0cmVhdG1lbnQsIHRvIG1haW50YWluIHN0YWJsZSBob3VzaW5nIChWb2RhayBldCBhbC4sIDIwMjEpXltWb2TDoWssIEpvc2VmLCBEb21pbmlrYSDFoHVseW92w6EsIGFuZCBNaWxhbiBLdWJpbmEuIOKAnEFkdmFuY2VkIFRlY2hub2xvZ2llcyBhbmQgVGhlaXIgVXNlIGluIFNtYXJ0IENpdHkgTWFuYWdlbWVudC7igJ0gX1N1c3RhaW5hYmlsaXR5XyAxMywgbm8uIDEwIChNYXkgMjAsIDIwMjEpOiA1NzQ2LiBodHRwczovL2RvaS5vcmcvMTAuMzM5MC9zdTEzMTA1NzQ2XS4gVGhlIGNpdHkgc2hvdWxkIGV4cGFuZCBpdHMgc3VwcG9ydGl2ZSBob3VzaW5nIHByb2dyYW1zIHRvIHByb3ZpZGUgYSBtb3JlIGhvbGlzdGljIGFwcHJvYWNoIHRoYXQgY29tYmluZXMgaG91c2luZyB3aXRoIGVzc2VudGlhbCBzZXJ2aWNlcy4NCg0KSG9tZWxlc3NuZXNzIFByZXZlbnRpb24gUHJvZ3JhbXM6IFRoZSBiZXN0IHdheSB0byBjb21iYXQgaG9tZWxlc3NuZXNzIGlzIHRvIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGUgY2l0eSBzaG91bGQgaW52ZXN0IGluIHJlbnRhbCBhc3Npc3RhbmNlLCBmaW5hbmNpYWwgY291bnNlbGluZywgYW5kIGV2aWN0aW9uIHByZXZlbnRpb24gc2VydmljZXMgdG8gaGVscCBpbmRpdmlkdWFscyBhbmQgZmFtaWxpZXMgc3RheSBpbiB0aGVpciBob21lcyAoVGhvcnNieSBldCBhbC4sIDIwMTcpLiBTdWNoIHByb2dyYW1zIGhhdmUgYmVlbiBzaG93biB0byBiZSBjb3N0LWVmZmVjdGl2ZSBhbmQgaGlnaGx5IGltcGFjdGZ1bCBpbiByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHBlb3BsZSB3aG8gZmFsbCBpbnRvIGhvbWVsZXNzbmVzcy4NCg0KUmFwaWQgUmVob3VzaW5nIEluaXRpYXRpdmVzOiBGb3IgdGhvc2Ugd2hvIGRvIGV4cGVyaWVuY2UgaG9tZWxlc3NuZXNzLCB0aGUgY2l0eSBzaG91bGQgZm9jdXMgb24gcmFwaWQgcmVob3VzaW5nIGVmZm9ydHMgdGhhdCBoZWxwIGluZGl2aWR1YWxzIGFuZCBmYW1pbGllcyBxdWlja2x5IHRyYW5zaXRpb24gZnJvbSBob21lbGVzc25lc3MgdG8gc3RhYmxlIGhvdXNpbmcuIFRoZXNlIHByb2dyYW1zIHNob3VsZCBiZSBjb3VwbGVkIHdpdGggam9iIHRyYWluaW5nIGFuZCBwbGFjZW1lbnQgc2VydmljZXMgdG8gaGVscCBpbmRpdmlkdWFscyBiZWNvbWUgZWNvbm9taWNhbGx5IHNlbGYtc3VmZmljaWVudC4NCg0KQ29tbXVuaXR5LUJhc2VkIFN1cHBvcnQgUHJvZ3JhbXM6IEZvb2QgYmFua3MsIHNoZWx0ZXJzLCBhbmQgaGVhbHRoY2FyZSBzZXJ2aWNlcyBwbGF5IGEgdml0YWwgcm9sZSBpbiBzdXBwb3J0aW5nIGhvbWVsZXNzIGluZGl2aWR1YWxzLiBUaGUgY2l0eSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlc2UgY29tbXVuaXR5LWJhc2VkIHByb2dyYW1zIGFyZSB3ZWxsLWZ1bmRlZCBhbmQgYWNjZXNzaWJsZSwgcGFydGljdWxhcmx5IGluIGFyZWFzIHdpdGggaGlnaCBjb25jZW50cmF0aW9ucyBvZiBob21lbGVzc25lc3MgKFRob3JzYnkgZXQgYWwuLCAyMDE3KS4NCg0KIyMgU29jaWFsIEVxdWl0eSBhbmQgU3lzdGVtaWMgUmVmb3Jtcw0KDQpUbyBtYWtlIGxhc3RpbmcgcHJvZ3Jlc3MsIHRoZSBjaXR5IG11c3QgZ28gYmV5b25kIGhvdXNpbmcgc29sdXRpb25zIGFuZCBhZGRyZXNzIHRoZSBicm9hZGVyIHNvY2lhbCBhbmQgZWNvbm9taWMgaW5lcXVhbGl0aWVzIHRoYXQgY29udHJpYnV0ZSB0byBob21lbGVzc25lc3MuIFB1YmxpYyBhd2FyZW5lc3MgYW5kIGVkdWNhdGlvbiBjYW1wYWlnbnMgY2FuIGhlbHAgY29tYmF0IG5lZ2F0aXZlIHN0ZXJlb3R5cGVzIGFuZCBidWlsZCBlbXBhdGh5IGZvciB0aGUgaG9tZWxlc3MgcG9wdWxhdGlvbiwgZm9zdGVyaW5nIGEgbW9yZSBzdXBwb3J0aXZlIHNvY2lhbCBlbnZpcm9ubWVudC4NCg0KU3lzdGVtaWMgcmVmb3JtcyBhcmUgYWxzbyBuZWNlc3NhcnkgdG8gYnJlYWsgdGhlIGN5Y2xlIG9mIHBvdmVydHkgYW5kIGhvbWVsZXNzbmVzcy4gVGhpcyBpbmNsdWRlcyBpbXByb3ZpbmcgYWNjZXNzIHRvIGhlYWx0aGNhcmUsIGVkdWNhdGlvbiwgYW5kIGVtcGxveW1lbnQgb3Bwb3J0dW5pdGllcyBmb3IgbWFyZ2luYWxpemVkIGdyb3VwcyAoQnJvd24sIEV6aWtlLCAmIFN0ZXJuLCAyMDIwKS4gRm9yIGV4YW1wbGUsIGV4cGFuZGluZyBhY2Nlc3MgdG8gam9iIHRyYWluaW5nIHByb2dyYW1zIGFuZCBpbmNyZWFzaW5nIGZ1bmRpbmcgZm9yIG1lbnRhbCBoZWFsdGggc2VydmljZXMgY2FuIGhlbHAgaW5kaXZpZHVhbHMgb3ZlcmNvbWUgdGhlIGJhcnJpZXJzIHRoYXQgb2Z0ZW4gbGVhZCB0byBob21lbGVzc25lc3MuDQoNCkxhc3RseSwgdGhlIGNpdHkgbXVzdCBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGltcGFjdCBvZiBlY29ub21pYyBkZXZlbG9wbWVudCBhbmQgZ2VudHJpZmljYXRpb24uIFdoaWxlIGRldmVsb3BtZW50IGNhbiBicmluZyBqb2JzIGFuZCBlY29ub21pYyBncm93dGgsIGl0IGNhbiBhbHNvIGRpc3BsYWNlIGxvdy1pbmNvbWUgcmVzaWRlbnRzLCBleGFjZXJiYXRpbmcgdGhlIGhvbWVsZXNzbmVzcyBjcmlzaXMuIFBvbGljeW1ha2VycyBzaG91bGQgZW5zdXJlIHRoYXQgZGV2ZWxvcG1lbnQgcHJvamVjdHMgaW5jbHVkZSBhZmZvcmRhYmxlIGhvdXNpbmcgY29tcG9uZW50cyBhbmQgdGhhdCBtZWFzdXJlcyBhcmUgaW4gcGxhY2UgdG8gcHJvdGVjdCB2dWxuZXJhYmxlIHBvcHVsYXRpb25zIGZyb20gZGlzcGxhY2VtZW50IChXaWxzb24gJiBDb25nLCAyMDIxKS4NCg0KIyMgRmluYW5jaWFsIExpdGVyYWN5IGFuZCBIb3VzaW5nIFByb2dyYW0gUHJvcG9zYWwNCg0KQXMgcGFydCBvZiB0aGUgY29tcHJlaGVuc2l2ZSBzdHJhdGVneSB0byBjb21iYXQgaG9tZWxlc3NuZXNzLCBhIGZpbmFuY2lhbCBsaXRlcmFjeSBhbmQgaG91c2luZyBwcm9ncmFtIGNvdWxkIGJlIGludHJvZHVjZWQuIFRoaXMgcHJvZ3JhbSB3b3VsZCBwYXJ0bmVyIHdpdGggbG9jYWwgb3JnYW5pemF0aW9ucyB0byBvZmZlciBmaW5hbmNpYWwgZWR1Y2F0aW9uLCBqb2IgdHJhaW5pbmcsIGFuZCB0ZW1wb3JhcnkgaG91c2luZywgaGVscGluZyBpbmRpdmlkdWFscyBnYWluIHRoZSBza2lsbHMgYW5kIHN0YWJpbGl0eSBuZWVkZWQgdG8gdHJhbnNpdGlvbiBvdXQgb2YgaG9tZWxlc3NuZXNzLiBLZXkgY29tcG9uZW50cyB3b3VsZCBpbmNsdWRlOg0KDQotIEZpbmFuY2lhbCBMaXRlcmFjeSBFZHVjYXRpb246IFRlYWNoaW5nIGluZGl2aWR1YWxzIGhvdyB0byBidWRnZXQsIG1hbmFnZSBkZWJ0LCBhbmQgc2F2ZSBmb3IgZnV0dXJlIGdvYWxzLg0KDQotIEpvYiBUcmFpbmluZyBhbmQgUGxhY2VtZW50OiBQcm92aWRpbmcgc2tpbGxzIGRldmVsb3BtZW50IGFuZCBqb2IgcGxhY2VtZW50IHNlcnZpY2VzIHRvIGhlbHAgcGFydGljaXBhbnRzIHNlY3VyZSBzdGFibGUgZW1wbG95bWVudC4NCg0KLSBUZW1wb3JhcnkgSG91c2luZzogT2ZmZXJpbmcgYSBzdGFibGUgZW52aXJvbm1lbnQgd2hlcmUgaW5kaXZpZHVhbHMgY2FuIGZvY3VzIG9uIHByb2dyYW0gZ29hbHMuDQoNCi0gQ2FzZSBNYW5hZ2VtZW50OiBQcm92aWRpbmcgcGVyc29uYWxpemVkIHN1cHBvcnQgYW5kIGd1aWRhbmNlIHRvIGhlbHAgaW5kaXZpZHVhbHMgbmF2aWdhdGUgY2hhbGxlbmdlcyBhbmQgYWNoaWV2ZSB0aGVpciBnb2Fscy4NCg0KLSBNZW50YWwgSGVhbHRoIGFuZCBTdWJzdGFuY2UgQWJ1c2UgVHJlYXRtZW50OiBFbnN1cmluZyBhY2Nlc3MgdG8gbmVjZXNzYXJ5IHRyZWF0bWVudCBzZXJ2aWNlcy4NCg0KQnkgYWRkcmVzc2luZyBib3RoIHRoZSBpbW1lZGlhdGUgYW5kIGxvbmctdGVybSBuZWVkcyBvZiBob21lbGVzcyBpbmRpdmlkdWFscywgdGhpcyBwcm9ncmFtIHdvdWxkIG9mZmVyIGEgcGF0aHdheSBvdXQgb2YgaG9tZWxlc3NuZXNzIHdoaWxlIGFsc28gYWRkcmVzc2luZyB0aGUgc3lzdGVtaWMgaXNzdWVzIHRoYXQgY29udHJpYnV0ZSB0byBpdC4NCg0KIyMgQ29uY2x1c2lvbg0KDQpIb21lbGVzc25lc3MgaW4gV2FzaGluZ3RvbiwgREMsIGlzIGEgY29tcGxleCBpc3N1ZSB0aGF0IHJlcXVpcmVzIGEgY29tcHJlaGVuc2l2ZSwgZGF0YS1kcml2ZW4gYXBwcm9hY2guIEJ5IGluY3JlYXNpbmcgYWZmb3JkYWJsZSBob3VzaW5nLCBleHBhbmRpbmcgc3VwcG9ydGl2ZSBzZXJ2aWNlcywgYW5kIGFkZHJlc3NpbmcgdGhlIHJvb3QgY2F1c2VzIG9mIGhvbWVsZXNzbmVzcywgdGhlIGNpdHkgY2FuIG1ha2UgbWVhbmluZ2Z1bCBwcm9ncmVzcyBpbiByZWR1Y2luZyBob21lbGVzc25lc3MgYW5kIGltcHJvdmluZyB0aGUgcXVhbGl0eSBvZiBsaWZlIGZvciBpdHMgbW9zdCB2dWxuZXJhYmxlIHJlc2lkZW50cy4NCg0KIyBBc3Nlc3NpbmcgdGhlIENpdmljIFRlY2ggSW5pdGlhdGl2ZSBmb3IgSG9tZWxlc3NuZXNzIGluIFdhc2hpbmd0b24sIERDDQoNCiMjIEFsaWdubWVudCB3aXRoIENpdmljIFRlY2hub2xvZ3kgQXR0cmlidXRlcw0KDQpUaGUgcHJvcG9zZWQgaG9tZWxlc3NuZXNzIHJlc291cmNlIGFwcGxpY2F0aW9uIGFsaWducyB3aXRoIHNldmVyYWwga2V5IGF0dHJpYnV0ZXMgb2YgY2l2aWMgdGVjaG5vbG9neSwgYXMgb3V0bGluZWQgaW4gdGhlIHJlYWRpbmdzLiBCeSBlbXBvd2VyaW5nIGhvbWVsZXNzIGluZGl2aWR1YWxzIHRvIGRpcmVjdGx5IHJlcXVlc3Qgc2VydmljZXMgYW5kIHByb3ZpZGUgZmVlZGJhY2ssIHRoZSBhcHAgaW52b2x2ZXMgY2l0aXplbnMgaW4gYm90aCB0aGUgcG9saWN5IHByb2Nlc3MgYW5kIHNlcnZpY2UgZGVsaXZlcnkgKE1hxI1pdWxpZW7ElyAmIFNrYXLFvmF1c2tpZW7ElywgMjAyMCleW01hxI1pdWxpZW7ElywgTW9uaWthLCBhbmQgU2thcsW+YXVza2llbsSXLCBBZWxpdGEuIOKAnEJ1aWxkaW5nIHRoZSBDYXBhY2l0aWVzIG9mIENpdmljIFRlY2ggQ29tbXVuaXRpZXMgdGhyb3VnaCBEaWdpdGFsIERhdGEgQW5hbHl0aWNzLuKAnSBKb3VybmFsIG9mIElubm92YXRpb24gJmFtcDsgS25vd2xlZGdlIDUsIG5vLiA0IChPY3RvYmVyIDIwMjApOiAyNDTigJM1MC4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5qaWsuMjAxOS4xMS4wMDVdLiBUaGlzIGZvc3RlcnMgYSBtb3JlIHBhcnRpY2lwYXRvcnkgYW5kIGRlbW9jcmF0aWMgYXBwcm9hY2ggdG8gYWRkcmVzc2luZyBob21lbGVzc25lc3MuDQoNCk1vcmVvdmVyLCB0aGUgYXBwIGxldmVyYWdlcyB0ZWNobm9sb2d5IHRvIGNvbGxlY3QgYW5kIGFuYWx5emUgZGF0YSBvbiB0aGUgbmVlZHMgb2YgaG9tZWxlc3MgaW5kaXZpZHVhbHMgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgcmVzb3VyY2VzLiBUaGlzIGRhdGEtZHJpdmVuIGFwcHJvYWNoIGVuc3VyZXMgdGhhdCBkZWNpc2lvbnMgYXJlIGluZm9ybWVkIGJ5IGV2aWRlbmNlIGFuZCBjYW4gbGVhZCB0byBtb3JlIGVmZmVjdGl2ZSBhbmQgdGFyZ2V0ZWQgaW50ZXJ2ZW50aW9ucy4NCg0KVGhlIGFwcCBhbHNvIHByb21vdGVzIHRyYW5zcGFyZW5jeSBhbmQgYWNjb3VudGFiaWxpdHkgYnkgbWFraW5nIGluZm9ybWF0aW9uIGFib3V0IHJlc291cmNlcyBhbmQgc2VydmljZSBkZWxpdmVyeSBtb3JlIGFjY2Vzc2libGUgdG8gdGhlIHB1YmxpYy4gVGhpcyBlbXBvd2VycyBob21lbGVzcyBpbmRpdmlkdWFscyB0byBob2xkIHNlcnZpY2UgcHJvdmlkZXJzIGFjY291bnRhYmxlIGFuZCBhZHZvY2F0ZSBmb3IgaW1wcm92ZW1lbnRzLg0KDQpJbiBhZGRpdGlvbiwgdGhlIGFwcCBkZW1vY3JhdGl6ZXMgcHJldmlvdXNseSBlbGl0ZSBwcm9jZXNzZXMgYnkgcHJvdmlkaW5nIGEgY29udmVuaWVudCBhbmQgdXNlci1mcmllbmRseSBwbGF0Zm9ybSBmb3IgaG9tZWxlc3MgaW5kaXZpZHVhbHMgdG8gYWNjZXNzIHJlc291cmNlcyBhbmQgc2VydmljZXMuIFRoaXMgaGVscHMgdG8gYnJlYWsgZG93biBiYXJyaWVycyBhbmQgZW5zdXJlIHRoYXQgZXZlcnlvbmUgaGFzIGVxdWFsIG9wcG9ydHVuaXRpZXMgdG8gcmVjZWl2ZSBhc3Npc3RhbmNlLg0KDQojIyBBbGlnbm1lbnQgd2l0aCBDaXZpYyBUZWNoIFRvb2xzIGFuZCBQaWxsYXJzDQoNClRoZSBwcm9wb3NlZCBpbml0aWF0aXZlIGFsc28gYWxpZ25zIHdpdGggdGhlIHR5cGVzIG9mIGNpdmljIHRlY2ggdG9vbHMgYXZhaWxhYmxlIGFuZCB0aGUgdGhyZWUgbWFpbiBwaWxsYXJzIG9mIGNpdmljIHRlY2hub2xvZ3k6DQoNCi0gQ2l2aWMgdGVjaCB0b29sczogVGhlIGFwcCB3b3VsZCB1dGlsaXplIGEgY29tYmluYXRpb24gb2YgbW9iaWxlIHRlY2hub2xvZ3ksIGRhdGEgYW5hbHl0aWNzLCBBSSwgYW5kIHBvdGVudGlhbGx5IGJsb2NrY2hhaW4sIHdoaWNoIGFyZSBhbGwgY29tbW9uIHRvb2xzIGluIHRoZSBjaXZpYyB0ZWNoIHNlY3Rvci4NCi0gVGhyZWUgcGlsbGFycyBvZiBjaXZpYyB0ZWNobm9sb2d5OiBUaGUgaW5pdGlhdGl2ZSBhbGlnbnMgd2l0aCB0aGUgdGhyZWUgcGlsbGFycyBvZiBjaXZpYyB0ZWNobm9sb2d5Og0KUGFydGljaXBhdGlvbjogVGhlIGFwcCB3b3VsZCBpbnZvbHZlIGhvbWVsZXNzIGluZGl2aWR1YWxzIGluIHRoZSBwb2xpY3kgcHJvY2VzcyBhbmQgc2VydmljZSBkZWxpdmVyeS4NCiAgICAtIFRyYW5zcGFyZW5jeTogVGhlIGFwcCB3b3VsZCBpbmNyZWFzZSB0cmFuc3BhcmVuY3kgYnkgcHJvdmlkaW5nIGFjY2VzcyB0byBpbmZvcm1hdGlvbiBhYm91dCByZXNvdXJjZXMgYW5kIHNlcnZpY2VzLg0KICAgIC0gQWNjb3VudGFiaWxpdHk6IFRoZSBhcHAgd291bGQgZW1wb3dlciBob21lbGVzcyBpbmRpdmlkdWFscyB0byBob2xkIHNlcnZpY2UgcHJvdmlkZXJzIGFjY291bnRhYmxlLg0KICAgIA0KVGhlIHByb3Bvc2VkIGhvbWVsZXNzbmVzcyByZXNvdXJjZSBhcHBsaWNhdGlvbiBhbGlnbnMgd2l0aCB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgY2l2aWMgdGVjaG5vbG9neSwgdGhlIHR5cGVzIG9mIHRvb2xzIGF2YWlsYWJsZSwgYW5kIHRoZSB0aHJlZSBtYWluIHBpbGxhcnMgb2YgY2l2aWMgdGVjaG5vbG9neS4gSXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIHRoZSBsaXZlcyBvZiBob21lbGVzcyBpbmRpdmlkdWFscyBpbiBXYXNoaW5ndG9uLCBEQyBieSBwcm92aWRpbmcgdGhlbSB3aXRoIGFjY2VzcyB0byByZXNvdXJjZXMsIGVtcG93ZXJpbmcgdGhlbSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgcG9saWN5IHByb2Nlc3MsIGFuZCBpbmNyZWFzaW5nIHRyYW5zcGFyZW5jeSBhbmQgYWNjb3VudGFiaWxpdHkgaW4gdGhlIGRlbGl2ZXJ5IG9mIHNlcnZpY2VzLg0KDQojIyBDaXZpYyBUZWNoIEluaXRpYXRpdmU6IE9wZW4gUmVmZXJyYWwNCg0KT3BlbiBSZWZlcnJhbCwgYW4gb3Blbi1zb3VyY2UgZGF0YSBzdGFuZGFyZCBhbmQgcGxhdGZvcm0gZGVzaWduZWQgdG8gaW1wcm92ZSB0aGUgZmluZGFiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgb2YgY29tbXVuaXR5IHJlc291cmNlc15bT3BlbiBSZWZlcnJhbCwgaHR0cHM6Ly9vcGVucmVmZXJyYWwub3JnL10uIE9wZW4gUmVmZXJyYWwgcHJvdmlkZXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIGRlc2NyaWJlIGFuZCBzaGFyZSBpbmZvcm1hdGlvbiBhYm91dCBoZWFsdGgsIGh1bWFuLCBhbmQgc29jaWFsIHNlcnZpY2VzLCBtYWtpbmcgaXQgZWFzaWVyIGZvciBwZW9wbGUgaW4gbmVlZCB0byBmaW5kIHRoZSBoZWxwIHRoZXkgcmVxdWlyZS4NCg0KVGhlIG9yaWdpbmFsIHB1cnBvc2Ugb2YgT3BlbiBSZWZlcnJhbCB3YXMgdG8gYWRkcmVzcyB0aGUgcHJvYmxlbSBvZiBmcmFnbWVudGVkIGFuZCBpbmFjY2Vzc2libGUgaW5mb3JtYXRpb24gYWJvdXQgY29tbXVuaXR5IHJlc291cmNlcy4gIE1hbnkgaW5kaXZpZHVhbHMsIHBhcnRpY3VsYXJseSB0aG9zZSBleHBlcmllbmNpbmcgaG9tZWxlc3NuZXNzIG9yIGZhY2luZyBvdGhlciBjaGFsbGVuZ2VzLCBzdHJ1Z2dsZSB0byBmaW5kIHRoZSBzZXJ2aWNlcyB0aGV5IG5lZWQgZHVlIHRvIGEgbGFjayBvZiBjZW50cmFsaXplZCBhbmQgZWFzaWx5IGFjY2Vzc2libGUgaW5mb3JtYXRpb24uIE9wZW4gUmVmZXJyYWwgYWltcyB0byBzb2x2ZSB0aGlzIHByb2JsZW0gYnkgcHJvdmlkaW5nIGEgc3RhbmRhcmRpemVkIGRhdGEgZm9ybWF0IGFuZCBwbGF0Zm9ybSBmb3Igc2hhcmluZyBpbmZvcm1hdGlvbiBhYm91dCBzZXJ2aWNlcywgbWFraW5nIGl0IGVhc2llciBmb3IgcGVvcGxlIHRvIHNlYXJjaCwgZmlsdGVyLCBhbmQgY29ubmVjdCB3aXRoIHJlbGV2YW50IHJlc291cmNlcy4NCg0KT3BlbiBSZWZlcnJhbCB1dGlsaXplcyBzdHJ1Y3R1cmVkIGRhdGEgdG8gZGVzY3JpYmUgY29tbXVuaXR5IHNlcnZpY2VzLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gc3VjaCBhczoNCg0KLSBOYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmljZQ0KLSBMb2NhdGlvbiAoYWRkcmVzcywgbGF0aXR1ZGUsIGxvbmdpdHVkZSkNCi0gQ29udGFjdCBpbmZvcm1hdGlvbiAocGhvbmUsIGVtYWlsLCB3ZWJzaXRlKQ0KLSBFbGlnaWJpbGl0eSBjcml0ZXJpYQ0KLSBTZXJ2aWNlIGhvdXJzDQotIExhbmd1YWdlcyBzcG9rZW4NCi0gQWNjZXNzaWJpbGl0eSBmZWF0dXJlcw0KDQpUaGlzIHN0cnVjdHVyZWQgZGF0YSBhbGxvd3MgZm9yIGVmZmljaWVudCBzZWFyY2hpbmcgYW5kIGZpbHRlcmluZyBvZiBzZXJ2aWNlcyBiYXNlZCBvbiBpbmRpdmlkdWFsIG5lZWRzIGFuZCBwcmVmZXJlbmNlcy4gVGhpcyBzdGFuZGFyZGl6ZWQgZGF0YSBlbnN1cmVzIGNvbnNpc3RlbmN5IGFjcm9zcyBzeXN0ZW1zIGFuZCBmYWNpbGl0YXRlcyByZXNvdXJjZSBtYXBwaW5nLiBBZGR0aW9uYWxseSwgT3BlbiBSZWZlcnJhbCBpcyBidWlsdCBvbiBvcGVuLXNvdXJjZSB0ZWNobm9sb2dpZXMgYW5kIHN0YW5kYXJkcywgaW5jbHVkaW5nOg0KDQotIEh1bWFuIFNlcnZpY2VzIERhdGEgU3BlY2lmaWNhdGlvbiAoSFNEUyk6ICBBIHN0YW5kYXJkaXplZCBkYXRhIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBodW1hbiBzZXJ2aWNlcy4NCi0gT3BlbiBSZWZlcnJhbCBEYXRhYmFzZSAoT1JEKTogIEEgZGF0YWJhc2Ugc2NoZW1hIGZvciBzdG9yaW5nIGFuZCBtYW5hZ2luZyBodW1hbiBzZXJ2aWNlcyBkYXRhLg0KLSBWYXJpb3VzIEFQSXMgYW5kIHRvb2xzOiAgT3BlbiBSZWZlcnJhbCBlbXBsb3lzIHRvb2xzIGxpa2UgSlNPTiwgUHl0aG9uLCBhbmQgUkVTVGZ1bCBBUElzIHRvIGVuYWJsZSBpbnRlcm9wZXJhYmlsaXR5IGFjcm9zcyBwbGF0Zm9ybXMuDQoNClRoZSBwbGF0Zm9ybSdzIG9wZW4tc291cmNlIG5hdHVyZSBwcm9tb3RlcyB0cmFuc3BhcmVuY3ksIGNvbGxhYm9yYXRpb24sIGFuZCBjb21tdW5pdHktZHJpdmVuIGRldmVsb3BtZW50Lg0KDQojIyMgQWRhcHRhdGlvbg0KDQpUbyBhZGFwdCBPcGVuIFJlZmVycmFsIGZvciBhZGRyZXNzaW5nIGhvbWVsZXNzbmVzcyBpbiBXYXNoaW5ndG9uLCBEQywgZGF0YSB3aWxsIG5lZWQgdG8gYmUgZ2F0aGVyZWQgb24gYWxsIGhvbWVsZXNzIHNlcnZpY2VzIGluIERDLCBlbnN1cmluZyBpdCBhZGhlcmVzIHRvIHRoZSBPcGVuIFJlZmVycmFsIHN0YW5kYXJkcy4gVGhpcyBtYXkgaW52b2x2ZSBjb2xsYWJvcmF0aW5nIHdpdGggdmFyaW91cyBzZXJ2aWNlIHByb3ZpZGVycyBhbmQgZ292ZXJubWVudCBhZ2VuY2llcyB0byBjb2xsZWN0IGFuZCBzdGFuZGFyZGl6ZSB0aGVpciBkYXRhLiANCg0KQWRkaXRpb25hbGx5LCBjdXN0b21pemluZyB0aGUgT3BlbiBSZWZlcnJhbCBwbGF0Zm9ybSB0byBtZWV0IHRoZSBzcGVjaWZpYyBuZWVkcyBvZiB0aGUgREMgaG9tZWxlc3MgcG9wdWxhdGlvbiB3b3VsZCBwcm92ZSBiZW5lZmljaWFsLiBUaGlzIGNvdWxkIGluY2x1ZGUgZGV2ZWxvcGluZyBhIHVzZXItZnJpZW5kbHkgaW50ZXJmYWNlIHRhaWxvcmVkIHRvIGluZGl2aWR1YWxzIGV4cGVyaWVuY2luZyBob21lbGVzc25lc3MsIGluY29ycG9yYXRpbmcgZmVhdHVyZXMgbGlrZSBtb2JpbGUgYWNjZXNzaWJpbGl0eSBhbmQgbXVsdGlsaW5ndWFsIHN1cHBvcnQuIEhvd2V2ZXIsIE9wZW4gUmVmZXJyYWwgcGxhdGZvcm0gd291bGQgbmVlZCB0byBpbnRlZ3JhdGUgd2l0aCBleGlzdGluZyBkYXRhIHN5c3RlbXMgaW4gREMsIHN1Y2ggYXMgdGhlIEhvbWVsZXNzIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gU3lzdGVtIChITUlTKSBhbmQgdGhlIDMxMSBzZXJ2aWNlIHJlcXVlc3Qgc3lzdGVtLiBUaGlzIHdvdWxkIGVuYWJsZSBzZWFtbGVzcyBkYXRhIHNoYXJpbmcgYW5kIGNvb3JkaW5hdGlvbiBvZiBzZXJ2aWNlcy4NCg0KQnkgYWRhcHRpbmcgT3BlbiBSZWZlcnJhbCwgV2FzaGluZ3RvbiwgREMgY2FuIGxldmVyYWdlIGEgcHJvdmVuIGNpdmljIHRlY2ggdG9vbCB0byBjb25kdWN0IG91dHJlYWNoIHRvIGhvbWVsZXNzIGluZGl2aWR1YWxzIGFuZCBzZXJ2aWNlIHByb3ZpZGVycyB0byBwcm9tb3RlIHRoZSB1c2Ugb2YgdGhlIHBsYXRmb3JtIGFuZCBlbnN1cmUgaXRzIGVmZmVjdGl2ZW5lc3MgaW4gY29ubmVjdGluZyBwZW9wbGUgd2l0aCB0aGUgcmVzb3VyY2VzIHRoZXkgbmVlZC4gVGhpcyB3b3VsZCBlbmhhbmNlIHRoZSBlZmZlY3RpdmVuZXNzIG9mIGhvbWVsZXNzbmVzcyBwcmV2ZW50aW9uIGFuZCBpbnRlcnZlbnRpb24gZWZmb3J0cy4gVGhlIHByb3Bvc2VkIGNoYW5nZXMgYWxpZ24gd2l0aCB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgY2l2aWMgdGVjaG5vbG9neSBhbmQgY2FuIGFkZHJlc3MgdGhlIHNwZWNpZmljIG5lZWRzIG9mIHRoZSBob21lbGVzcyBwb3B1bGF0aW9uLg0KDQojIyMgQ2hhbmdlcyB0byBPcGVuIFJlZmVycmFsIERlc2lnbg0KDQpJbiBhZGRpdGlvbiB0byB0aGUgYWRhcHRhdGlvbnMgbWVudGlvbmVkIGFib3ZlLCBhZGFwdCBPcGVuIFJlZmVycmVhbCBmb3IgdGhlIEhvbWVsZXNzbmVzcyBSZXNvdXJjZSBBcHBsaWNhdGlvbiwgdGhlIGZvbGxvd2luZyBkZXNpZ24gY2hhbmdlcyBjb3VsZCBlbmhhbmNlIE9wZW4gUmVmZXJyYWwgZm9yIHVzZSBpbiBXYXNoaW5ndG9uLCBEQy4gDQoNCi0gUmVhbC10aW1lIGF2YWlsYWJpbGl0eTogIEludGVncmF0ZSB3aXRoIHNoZWx0ZXIgbWFuYWdlbWVudCBzeXN0ZW1zIHRvIHByb3ZpZGUgcmVhbC10aW1lIGluZm9ybWF0aW9uIG9uIGJlZCBhdmFpbGFiaWxpdHkuDQotIFBlcnNvbmFsaXplZCByZWNvbW1lbmRhdGlvbnM6ICBVc2UgQUkgdG8gcHJvdmlkZSBwZXJzb25hbGl6ZWQgcmVjb21tZW5kYXRpb25zIGZvciBzZXJ2aWNlcyBiYXNlZCBvbiBpbmRpdmlkdWFsIG5lZWRzIGFuZCBwcmVmZXJlbmNlcy4NCi0gQUktUG93ZXJlZCBDaGF0Ym90IFN1cHBvcnQ6IEltcGxlbWVudCBhbiBBSSBjaGF0Ym90IHRvIGFzc2lzdCB1c2VycyBpbiByZWFsLXRpbWUsIGFuc3dlciBxdWVzdGlvbnMsIGFuZCBndWlkZSB0aGVtIHRocm91Z2ggc2VydmljZSByZXF1ZXN0cy4NCi0gT2ZmbGluZSBhY2Nlc3M6ICBFbmFibGUgb2ZmbGluZSBhY2Nlc3MgdG8gZXNzZW50aWFsIGluZm9ybWF0aW9uIGZvciB1c2VycyB3aG8gbWF5IG5vdCBoYXZlIGNvbnNpc3RlbnQgaW50ZXJuZXQgY29ubmVjdGl2aXR5Lg0KLSBNb2JpbGUtRmlyc3QgRGVzaWduOiBSZWRlc2lnbiB0aGUgdXNlciBpbnRlcmZhY2UgdG8gYmUgbW9iaWxlLWZyaWVuZGx5IGFuZCByZXNwb25zaXZlLCBlbnN1cmluZyBzZWFtbGVzcyBuYXZpZ2F0aW9uIGFuZCBmdW5jdGlvbmFsaXR5IG9uIHNtYWxsZXIgc2NyZWVucy4NCi0gSW50ZWdyYXRpb24gd2l0aCBFeGlzdGluZyBTb2NpYWwgU2VydmljZSBOZXR3b3JrczogQ3JlYXRlIEFQSXMgb3IgY29ubmVjdG9ycyB0byBhbGxvdyBzZWFtbGVzcyBkYXRhIHNoYXJpbmcgYW5kIHJlZmVycmFscyBiZXR3ZWVuIHRoZSBhcHAgYW5kIGV4aXN0aW5nIHNvY2lhbCBzZXJ2aWNlIG9yZ2FuaXphdGlvbnMuDQotIElvVCBJbnRlZ3JhdGlvbiBmb3IgU21hcnQgU2hlbHRlcnM6IEluY29ycG9yYXRlIElvVCBzZW5zb3JzIGluIHNoZWx0ZXJzIHRvIHRyYWNrIG9jY3VwYW5jeSBhbmQgYXZhaWxhYmlsaXR5IG9mIGJlZHMsIHByb3ZpZGluZyByZWFsLXRpbWUgaW5mb3JtYXRpb24gdG8gdXNlcnMuDQotIFByZWRpY3RpdmUgQW5hbHl0aWNzIGZvciBBdC1SaXNrIEluZGl2aWR1YWxzOiBVc2UgcHJlZGljdGl2ZSBhbmFseXRpY3MgdG8gaWRlbnRpZnkgaW5kaXZpZHVhbHMgYXQgcmlzayBvZiBob21lbGVzc25lc3MgYW5kIHRyaWdnZXIgZWFybHkgaW50ZXJ2ZW50aW9ucy4NCg0KQnkgaW1wbGVtZW50aW5nIHRoZXNlIGNoYW5nZXMsIHRoZSBIb21lbGVzc25lc3MgUmVzb3VyY2UgQXBwbGljYXRpb24gY2FuIGJlY29tZSBhIHBvd2VyZnVsIHRvb2wgZm9yIGFkZHJlc3NpbmcgdGhlIG5lZWRzIG9mIGhvbWVsZXNzIGluZGl2aWR1YWxzIGluIFdhc2hpbmd0b24sIERDLg0KDQojIFBvbGljeSBMaXRlcmF0dXJlIFJldmlldw0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KSG9tZWxlc3NuZXNzIHBvc2VzIGEgcHJlc3Npbmcgc29jaWV0YWwgY29uY2VybiBuZWNlc3NpdGF0aW5nIGRlbGliZXJhdGUsIG1ldGhvZGljYWwgc29sdXRpb25zLiBUaGlzIGVzc2F5IGRlbHZlcyBpbnRvIGZvdXIgYWNhZGVtaWMgYXJ0aWNsZXMgZXhhbWluaW5nIHN0cmF0ZWdpZXMgdG8gdGFja2xlIGhvbWVsZXNzbmVzcywgZHJhd2luZyBvbiByZXNlYXJjaCBwcmluY2lwbGVzIGZyb20gUG9saXRpY2FsIFNjaWVuY2UgUmVzZWFyY2ggTWV0aG9kcyBieSBKYW5ldCBCdXR0b2xwaCBKb2huc29uIGFuZCBILlQuIFJleW5vbGRzLiBTcGVjaWZpY2FsbHksIGl0IHV0aWxpemVzIENoYXB0ZXJzIDQgYW5kIDYgb24gY29uY2VwdHMsIHZhcmlhYmxlcywgaHlwb3RoZXNlcywgYW5kIHJlc2VhcmNoIGRlc2lnbiwgYWxvbmdzaWRlIGluc2lnaHRzIGZyb20gdGhlIENpdmljIFRlY2hub2xvZ2lzdOKAmXMgUHJhY3RpY2UgR3VpZGUgKENUUEcpIENoYXB0ZXJzIDUgYW5kIDksIGZvY3VzaW5nIG9uIGlubm92YXRpb24gaW4gcHVibGljIHBvbGljeS4NCg0KRWFjaCBhcnRpY2xlIHVuZGVyIHJldmlldyB3aWxsIGJlIHNjcnV0aW5pemVkIHRocm91Z2ggdGhlIGxlbnMgb2Ygc29jaWFsIHNjaWVuY2UgcmVzZWFyY2gsIHdpdGggZW1waGFzaXMgb24gY29uY2VwdHMgbGlrZSBwcm9hY3RpdmUgc3RyYXRlZ2llcywgc2VydmljZSBpbnRlZ3JhdGlvbiwgcHJldmVudGlvbiwgYW5kIGVmZmljaWVudCB0YXJnZXRpbmcuIFRoZSBlc3NheSB3aWxsIGRpc3NlY3QgaG93IHRoZXNlIGNvbmNlcHRzIGFyZSBkZWZpbmVkLCBvcGVyYXRpb25hbGl6ZWQsIGFuZCBlbXBsb3llZCB0byBlc3RhYmxpc2ggY2F1c2FsaXR5IHdpdGhpbiB0aGUgZnJhbWV3b3JrIG9mIHRoZSByZXNlYXJjaCBkZXNpZ25zIHByZXNlbnRlZC4NCg0KIyMgQXJ0aWNsZSAxOiBNYWtpbmcgdGhlIENhc2UgZm9yIFByb2FjdGl2ZSBTdHJhdGVnaWVzIHRvIEFsbGV2aWF0ZSBIb21lbGVzc25lc3M6IEEgU3lzdGVtcyBBcHByb2FjaA0KDQpOb3VyYXphcmksIExvdmF0bywgYW5kIFdlbmcgY2hhbXBpb24gcHJvYWN0aXZlLCBzeXN0ZW1zLWJhc2VkIHN0cmF0ZWdpZXMgdG8gdGFja2xlIGhvbWVsZXNzbmVzcy4gVGhleSBkZWZpbmUgYSAicHJvYWN0aXZlIHN0cmF0ZWd5IiBhcyBhbnkgaW50ZXJ2ZW50aW9uIHRhcmdldGluZyByb290IGNhdXNlcyBvZiBob21lbGVzc25lc3MgbGlrZSBwb3ZlcnR5IG9yIGxhY2sgb2YgYWZmb3JkYWJsZSBob3VzaW5nLCBiZWZvcmUgaW5kaXZpZHVhbHMgYmVjb21lIGhvbWVsZXNzXltOb3VyYXphcmksIFNhcmEsIEtyaXN0aW5hIExvdmF0bywgYW5kIFN1emllIFMuIFdlbmcuICJNYWtpbmcgdGhlIENhc2UgZm9yIFByb2FjdGl2ZSBTdHJhdGVnaWVzIHRvIEFsbGV2aWF0ZSBIb21lbGVzc25lc3M6IEEgU3lzdGVtcyBBcHByb2FjaC4iIEpvdXJuYWwgb2YgSG9tZWxlc3NuZXNzIFN0dWRpZXMgNDUsIG5vLiAyICgyMDIwKTogMTIzLTE0Ny5dLiBUaGUgc3lzdGVtcyBhcHByb2FjaCBlbXBoYXNpemVzIHRoZSBpbnRlcmNvbm5lY3RlZCBuYXR1cmUgb2YgaG9tZWxlc3NuZXNzLCByZXF1aXJpbmcgY29vcmRpbmF0ZWQgZWZmb3J0cyBhY3Jvc3MgbXVsdGlwbGUgYWdlbmNpZXMgYW5kIHNlcnZpY2UgcHJvdmlkZXJzLg0KDQpUbyBtZWFzdXJlIHRoZXNlIGNvbmNlcHRzLCB0aGUgYXV0aG9ycyBlbXBsb3kgdmFyaWFibGVzIHN1Y2ggYXMgdGhlIG51bWJlciBvZiBlYXJseSBpbnRlcnZlbnRpb24gcHJvZ3JhbXMsIGJ1ZGdldCBhbGxvY2F0ZWQgdG8gcHJldmVudGlvbiwgYW5kIHRoZSBsZXZlbCBvZiBpbnRlcmFnZW5jeSBjb2xsYWJvcmF0aW9uLiBUaGUgZGVwZW5kZW50IHZhcmlhYmxlLCBvciB0aGUgb3V0Y29tZSB0aGV5IGFpbSB0byBpbmZsdWVuY2UsIGlzIHRoZSBob21lbGVzc25lc3MgcmF0ZSBpbiBhIGdpdmVuIHJlZ2lvbi4gVGhlaXIgY2VudHJhbCBoeXBvdGhlc2lzIHBvc2l0cyB0aGF0IHJlZ2lvbnMgaW1wbGVtZW50aW5nIHByb2FjdGl2ZSwgc3lzdGVtcy1iYXNlZCBhcHByb2FjaGVzIHdpbGwgZXhwZXJpZW5jZSBhIG1vcmUgc2lnbmlmaWNhbnQgZGVjcmVhc2UgaW4gaG9tZWxlc3NuZXNzIGNvbXBhcmVkIHRvIHRob3NlIHJlbHlpbmcgb24gcmVhY3RpdmUgbWVhc3VyZXMuDQoNClRoZSBzdHVkeSBmb2N1c2VzIG9uIHJlZ2lvbnMgb3IgY2l0aWVzIGFzIGl0cyB1bml0cyBvZiBhbmFseXNpcywgY29sbGVjdGluZyBob21lbGVzc25lc3MgZGF0YSBhY3Jvc3MgZGlmZmVyZW50IGdlb2dyYXBoaWMgYXJlYXMuIEhvbWVsZXNzbmVzcyByYXRlcyBhcmUgbWVhc3VyZWQgb24gYW4gaW50ZXJ2YWwgc2NhbGUsIGVuYWJsaW5nIG1lYW5pbmdmdWwgY29tcGFyaXNvbnMgYWNyb3NzIHJlZ2lvbnMgYW5kIHRpbWUsIHdoaWNoIGlzIHZpdGFsIGZvciBlc3RhYmxpc2hpbmcgY2F1c2FsaXR5IGFzIHBlciBDaGFwdGVyIDYgb2YgUG9saXRpY2FsIFNjaWVuY2UgUmVzZWFyY2ggTWV0aG9kcy4gQWRkaXRpb25hbGx5LCBjb250cm9sIHZhcmlhYmxlcyBzdWNoIGFzIGVjb25vbWljIGNvbmRpdGlvbnMgYW5kIHBvcHVsYXRpb24gZGVuc2l0eSBhcmUgaW5jbHVkZWQgdG8gaXNvbGF0ZSB0aGUgc3BlY2lmaWMgaW1wYWN0IG9mIHByb2FjdGl2ZSBzdHJhdGVnaWVzLg0KDQpUaGUgc3R1ZHkncyBmaW5kaW5ncyB1bmRlcnNjb3JlIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHByb2FjdGl2ZSBzdHJhdGVnaWVzLCBlc3BlY2lhbGx5IHdoZW4gY29tYmluZWQgd2l0aCBpbnRlcmFnZW5jeSBjb29yZGluYXRpb24sIGluIHJlZHVjaW5nIGhvbWVsZXNzbmVzcy4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgQ2l2aWMgVGVjaG5vbG9naXN04oCZcyBQcmFjdGljZSBHdWlkZSdzIGVtcGhhc2lzIG9uIGNyb3NzLXNlY3RvciBjb2xsYWJvcmF0aW9uIGZvciB0YWNrbGluZyBjb21wbGV4IHNvY2lldGFsIHByb2JsZW1zLiBUaGUgc3lzdGVtcyBhcHByb2FjaCBwcm92aWRlcyBhIGhvbGlzdGljLCBpbm5vdmF0aXZlIHNvbHV0aW9uIGJ5IGRpc21hbnRsaW5nIHRoZSB0cmFkaXRpb25hbCBzaWxvcyB0aGF0IG9mdGVuIGhpbmRlciBob21lbGVzc25lc3MgaW50ZXJ2ZW50aW9ucy4NCg0KIyMgQXJ0aWNsZSAyOiBTZXJ2aWNlIEludGVncmF0aW9uIHRvIFJlZHVjZSBIb21lbGVzc25lc3MgaW4gTG9zIEFuZ2VsZXMgQ291bnR5OiBNdWx0aXBsZSBTdGFrZWhvbGRlciBQZXJzcGVjdGl2ZXMNCg0KR3VlcnJlcm8sIEhlbndvb2QsIGFuZCBXZW56ZWwgZGVsdmUgaW50byB0aGUgY29uY2VwdCBvZiAic2VydmljZSBpbnRlZ3JhdGlvbiIgYXMgYSBtZWFucyB0byBhbGxldmlhdGUgaG9tZWxlc3NuZXNzLiBUaGV5IGRlZmluZSBpdCBhcyB0aGUgY29vcmRpbmF0ZWQgcHJvdmlzaW9uIG9mIHNlcnZpY2VzIGFjcm9zcyBkaWZmZXJlbnQgYWdlbmNpZXMgdG8gaW1wcm92ZSBvdXRjb21lcyBmb3IgdGhvc2UgZXhwZXJpZW5jaW5nIGhvbWVsZXNzbmVzc15bR3VlcnJlcm8sIEVyaWNrIEcuLCBCZW5qYW1pbiBIZW53b29kLCBhbmQgU3V6YW5uZSBMLiBXZW56ZWwuICJTZXJ2aWNlIEludGVncmF0aW9uIHRvIFJlZHVjZSBIb21lbGVzc25lc3MgaW4gTG9zIEFuZ2VsZXMgQ291bnR5OiBNdWx0aXBsZSBTdGFrZWhvbGRlciBQZXJzcGVjdGl2ZXMuIiBKb3VybmFsIG9mIFNvY2lhbCBTZXJ2aWNlcyBSZXNlYXJjaCA1MCwgbm8uIDMgKDIwMjEpOiAyMzQtMjUxLl0uIFRoaXMgY29uY2VwdCBpcyBtZWFzdXJlZCB0aHJvdWdoIHZhcmlhYmxlcyBsaWtlIHRoZSBudW1iZXIgb2YgaW50ZWdyYXRlZCBzZXJ2aWNlIHByb2dyYW1zLCBzdGFrZWhvbGRlciBlbmdhZ2VtZW50LCBhbmQgaW50ZXItYWdlbmN5IGZ1bmRpbmcuDQoNClRoZSBzdHVkeSdzIGRlcGVuZGVudCB2YXJpYWJsZSBpcyB0aGUgcGVyY2VpdmVkIGVmZmVjdGl2ZW5lc3Mgb2YgaW50ZWdyYXRlZCBzZXJ2aWNlcyBhcyByYXRlZCBieSB2YXJpb3VzIHN0YWtlaG9sZGVycyBzdWNoIGFzIHBvbGljeW1ha2Vycywgc2VydmljZSBwcm92aWRlcnMsIGFuZCBub25wcm9maXRzLiBUaGUgaHlwb3RoZXNpcyB1bmRlciBleGFtaW5hdGlvbiBpcyB0aGF0IGluY3JlYXNlZCBzZXJ2aWNlIGludGVncmF0aW9uIHdpbGwgZW5oYW5jZSBob21lbGVzc25lc3Mgb3V0Y29tZXMsIHByaW1hcmlseSBieSBib29zdGluZyB0aGUgZWZmaWNpZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3Mgb2Ygc2VydmljZSBkZWxpdmVyeS4NCg0KVGhlIHVuaXQgb2YgYW5hbHlzaXMgaXMgc3Rha2Vob2xkZXJzLCB3aXRoIGRhdGEgY29sbGVjdGVkIHRocm91Z2ggc3VydmV5cyBhbmQgaW50ZXJ2aWV3cy4gU3Rha2Vob2xkZXIgcGVyY2VwdGlvbnMgYXJlIG1lYXN1cmVkIG9uIGFuIG9yZGluYWwgc2NhbGUsIGVuYWJsaW5nIHJlc2VhcmNoZXJzIHRvIHJhbmsgcmVzcG9uc2VzIGludG8gbWVhbmluZ2Z1bCBjYXRlZ29yaWVzLCBzdWl0YWJsZSBmb3IgYXNzZXNzaW5nIHN1YmplY3RpdmUgdmlld3MgYXMgcGVyIEpvaG5zb24gYW5kIFJleW5vbGRzICgyMDIwKV5bSm9obnNvbiwgSmFuZXQgQnV0dG9scGgsIGFuZCBILiBULiBSZXlub2xkcy4g4oCcQ2hhcHRlciA0OiBUaGUgQnVpbGRpbmcgQmxvY2tzIG9mIFNvY2lhbCBTY2llbnRpZmljIFJlc2VhcmNoOiBIeXBvdGhlc2VzLCBDb25jZXB0cywgVmFyaWFibGVzLCBhbmQgTWVhc3VyZW1lbnQs4oCdIGluIFBvbGl0aWNhbCBTY2llbmNlIFJlc2VhcmNoIE1ldGhvZHMsIDl0aCBlZGl0aW9uLiAoV2FzaGluZ3RvbiwgRC5DLjogQ1EgUHJlc3MsIDIwMjApLl0uDQoNClRoZSByZXNlYXJjaCBkZXNpZ24gZW1wbG95cyBhIG1peGVkLW1ldGhvZHMgYXBwcm9hY2gsIGNvbWJpbmluZyBxdWFudGl0YXRpdmUgYW5kIHF1YWxpdGF0aXZlIGRhdGEgdG8gZXhwbG9yZSB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHNlcnZpY2UgaW50ZWdyYXRpb24gYW5kIG91dGNvbWVzLiBUaGlzIHRyaWFuZ3VsYXRpb24gc3RyZW5ndGhlbnMgY2F1c2FsIGNsYWltcyBieSBkcmF3aW5nIG9uIG11bHRpcGxlIGRhdGEgc291cmNlcywgYXMgaGlnaGxpZ2h0ZWQgaW4gQ2hhcHRlciA2IG9mIEpvaG5zb24gYW5kIFJleW5vbGRzLg0KDQpUaGUgZmluZGluZ3Mgc3VnZ2VzdCB0aGF0IHNlcnZpY2UgaW50ZWdyYXRpb24gaW5kZWVkIGltcHJvdmVzIHNlcnZpY2UgZGVsaXZlcnksIGJ1dCBjaGFsbGVuZ2VzIHN1Y2ggYXMgZnVuZGluZyBsaW1pdGF0aW9ucyBhbmQgYnVyZWF1Y3JhdGljIGh1cmRsZXMgcGVyc2lzdC4gVGhpcyBlY2hvZXMgdGhlIENpdmljIFRlY2hub2xvZ2lzdOKAmXMgUHJhY3RpY2UgR3VpZGUncyBvYnNlcnZhdGlvbiBpbiBDaGFwdGVyIDk6IGFsdGhvdWdoIGlubm92YXRpdmUgc29sdXRpb25zIGxpa2Ugc2VydmljZSBpbnRlZ3JhdGlvbiBzaG93IHByb21pc2UsIHBvbGljeSBzeXN0ZW1zIG9mdGVuIHJlc2lzdCBjaGFuZ2UgZHVlIHRvIGluZ3JhaW5lZCBpbnN0aXR1dGlvbmFsIGJhcnJpZXJzLiBPdmVyY29taW5nIHRoZXNlIG9ic3RhY2xlcyBuZWNlc3NpdGF0ZXMgc3VzdGFpbmVkIGNvbW1pdG1lbnQgYW5kIHJlc291cmNlc15bSGFycmVsbCwgQ3lkLiBBIENpdmljIFRlY2hub2xvZ2lzdOKAmXMgcHJhY3RpY2UgZ3VpZGUuIFNhbiBGcmFuY2lzY28sIENBOiBGaXZlIFNldmVuIEZpdmUgQm9va3MsIDIwMjAuXS4NCg0KIyMgQXJ0aWNsZSAzOiBBIFByZXZlbnRpb24tQ2VudGVyZWQgQXBwcm9hY2ggdG8gSG9tZWxlc3NuZXNzIEFzc2lzdGFuY2U6IEEgUGFyYWRpZ20gU2hpZnQ/DQoNCkN1bGhhbmUsIE1ldHJhdXgsIGFuZCBCeXJuZSBwcm9wb3NlIGEgInByZXZlbnRpb24tY2VudGVyZWQgYXBwcm9hY2giIHRvIGFkZHJlc3MgaG9tZWxlc3NuZXNzLCBtYXJraW5nIGEgc2lnbmlmaWNhbnQgZGVwYXJ0dXJlIGZyb20gY29udmVudGlvbmFsLCByZWFjdGl2ZSBtb2RlbHMuIEhlcmUsIHByZXZlbnRpb24gZW5jb21wYXNzZXMgc3RyYXRlZ2llcyBkZXNpZ25lZCB0byBzdG9wIHBlb3BsZSBmcm9tIGJlY29taW5nIGhvbWVsZXNzIGluIHRoZSBmaXJzdCBwbGFjZV5bQ3VsaGFuZSwgRGVubmlzIFAuLCBTdGVwaGVuIE1ldHJhdXgsIGFuZCBUaG9tYXMgQnlybmUuICJBIFByZXZlbnRpb24tQ2VudGVyZWQgQXBwcm9hY2ggdG8gSG9tZWxlc3NuZXNzIEFzc2lzdGFuY2U6IEEgUGFyYWRpZ20gU2hpZnQ/IiBIb3VzaW5nIFBvbGljeSBEZWJhdGUgMjYsIG5vLiAzICgyMDE2KTogNDU2LTQ3NS5dLiBUaGlzIGNvbmNlcHQgaXMgb3BlcmF0aW9uYWxpemVkIHRocm91Z2ggdmFyaWFibGVzIGxpa2UgYWNjZXNzIHRvIGV2aWN0aW9uIHByZXZlbnRpb24gcHJvZ3JhbXMsIGhvdXNpbmcgYXNzaXN0YW5jZSwgYW5kIGxlZ2FsIGFpZCBmb3IgdGVuYW50cy4NCg0KVGhlIHN0dWR5J3MgZGVwZW5kZW50IHZhcmlhYmxlIGlzIHRoZSBob21lbGVzc25lc3MgZW50cnkgcmF0ZSwgbWVhc3VyZWQgYXQgdGhlIGluZGl2aWR1YWwgb3IgZmFtaWx5IGxldmVsLiBUaGUgYXV0aG9ycyBoeXBvdGhlc2l6ZSB0aGF0IHByZXZlbnRpb24tY2VudGVyZWQgcHJvZ3JhbXMgd2lsbCBsZWFkIHRvIGEgbG93ZXIgaW5jaWRlbmNlIG9mIGhvbWVsZXNzbmVzcyB3aGVuIGNvbXBhcmVkIHRvIHJlYWN0aXZlIGFwcHJvYWNoZXMgc3VjaCBhcyBlbWVyZ2VuY3kgc2hlbHRlcnMuIEluZGl2aWR1YWxzIGFuZCBmYW1pbGllcyBzZXJ2ZSBhcyB0aGUgdW5pdHMgb2YgYW5hbHlzaXMsIHdpdGggaG9tZWxlc3NuZXNzIGVudHJ5IHJhdGVzIG1lYXN1cmVkIG9uIGFuIGludGVydmFsIHNjYWxlLCBlbmFibGluZyBwcmVjaXNlIGNvbXBhcmlzb25zIGFjcm9zcyBncm91cHMgYW5kIHRpbWUuDQoNClRvIGVzdGFibGlzaCBjYXVzYWxpdHksIHRoZSBhdXRob3JzIGFkb3B0IGEgbG9uZ2l0dWRpbmFsIHJlc2VhcmNoIGRlc2lnbiwgdHJhY2tpbmcgZmFtaWxpZXMgb3ZlciB0aW1lIHRvIG9ic2VydmUgaG93IHByZXZlbnRpdmUgaW50ZXJ2ZW50aW9ucyBpbmZsdWVuY2UgdGhlaXIgaG91c2luZyBzdGFiaWxpdHkuIEFzIENoYXB0ZXIgNiBvZiBQb2xpdGljYWwgU2NpZW5jZSBSZXNlYXJjaCBNZXRob2RzIGVtcGhhc2l6ZXMsIGxvbmdpdHVkaW5hbCBkZXNpZ25zIGFyZSBjcnVjaWFsIGZvciBlc3RhYmxpc2hpbmcgdGVtcG9yYWwgb3JkZXIsIGEga2V5IGVsZW1lbnQgb2YgY2F1c2FsaXR5LiBCeSBvYnNlcnZpbmcgb3V0Y29tZXMgb3ZlciBhIGxvbmdlciBkdXJhdGlvbiwgdGhlIHN0dWR5IGNhbiBiZXR0ZXIgZ2F1Z2UgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgcHJldmVudGl2ZSBzdHJhdGVnaWVzLg0KDQpUaGUgZmluZGluZ3Mgc3VwcG9ydCB0aGUgaHlwb3RoZXNpcywgZGVtb25zdHJhdGluZyB0aGF0IHByZXZlbnRpb24gcHJvZ3JhbXMgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIHJpc2sgb2YgaG9tZWxlc3NuZXNzLiBUaGlzIHJlc29uYXRlcyB3aXRoIHRoZSBpbnNpZ2h0cyBmcm9tIENoYXB0ZXIgNSBvZiB0aGUgQ2l2aWMgVGVjaG5vbG9naXN04oCZcyBQcmFjdGljZSBHdWlkZSwgd2hpY2ggZGlzY3Vzc2VzIGhvdyBpbm5vdmF0aXZlIGFwcHJvYWNoZXMgbGlrZSBwcmV2ZW50aW9uIGNhbiBzdGVlciBwdWJsaWMgcG9saWN5IHRvd2FyZCBtb3JlIHN1c3RhaW5hYmxlLCBsb25nLXRlcm0gc29sdXRpb25zLg0KDQojIyBBcnRpY2xlIDQ6IEVmZmljaWVudCBUYXJnZXRpbmcgb2YgSG9tZWxlc3NuZXNzIFByZXZlbnRpb24gU2VydmljZXMgZm9yIEZhbWlsaWVzDQoNClNoaW5uIGV0IGFsLiBoaWdobGlnaHQgImVmZmljaWVudCB0YXJnZXRpbmciIGFzIGEgY3J1Y2lhbCBzdHJhdGVneSBmb3IgYWxsb2NhdGluZyBob21lbGVzc25lc3MgcHJldmVudGlvbiByZXNvdXJjZXMgZWZmZWN0aXZlbHkuIFRoaXMgaW52b2x2ZXMgZGlyZWN0aW5nIHJlc291cmNlcyB0b3dhcmQgZmFtaWxpZXMgbW9zdCBsaWtlbHkgdG8gZXhwZXJpZW5jZSBob21lbGVzc25lc3MgYmFzZWQgb24gcHJlZGljdGl2ZSBmYWN0b3JzIHN1Y2ggYXMgcGFzdCBob3VzaW5nIGluc3RhYmlsaXR5LCBsb3cgaW5jb21lLCBhbmQgbGltaXRlZCBhY2Nlc3MgdG8gc29jaWFsIHNlcnZpY2VzXltTaGlubiwgTWFyeWJldGgsIEFuZHJldyBMLiBHcmVlciwgSmF5IEJhaW5icmlkZ2UsIEpvbmF0aGFuIEt3b24sIGFuZCBTYXJhIFp1aWRlcnZlZW4uICJFZmZpY2llbnQgVGFyZ2V0aW5nIG9mIEhvbWVsZXNzbmVzcyBQcmV2ZW50aW9uIFNlcnZpY2VzIGZvciBGYW1pbGllcy4iIEFtZXJpY2FuIEpvdXJuYWwgb2YgUHVibGljIEhlYWx0aCAxMDUsIG5vLiAyICgyMDE1KTogMzI0LTMzMC5dLiBUaGlzIGNvbmNlcHQgaXMgb3BlcmF0aW9uYWxpemVkIHRocm91Z2ggdGhlIHVzZSBvZiBwcmVkaWN0aXZlIG1vZGVscyBhbmQgZGF0YSBhbmFseXRpY3MgdG8gYXNzZXNzIHJpc2suDQoNClRoZSBzdHVkeSdzIGRlcGVuZGVudCB2YXJpYWJsZSBpcyB0aGUgbGlrZWxpaG9vZCBvZiBhIGZhbWlseSBiZWNvbWluZyBob21lbGVzcywgbWVhc3VyZWQgYXQgdGhlIGZhbWlseSBsZXZlbC4gVGhlIGF1dGhvcnMgaHlwb3RoZXNpemUgdGhhdCBwcmVkaWN0aXZlIG1vZGVscyB3aWxsIGxlYWQgdG8gbW9yZSBlZmZpY2llbnQgcmVzb3VyY2UgdXRpbGl6YXRpb24sIHRoZXJlYnkgcmVkdWNpbmcgaG9tZWxlc3NuZXNzIHJhdGVzIGFtb25nIGhpZ2gtcmlzayBmYW1pbGllcy4gVGhlIHVuaXQgb2YgYW5hbHlzaXMgaXMgZmFtaWxpZXMsIGFuZCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIGlzIG1lYXN1cmVkIG9uIGFuIGludGVydmFsIHNjYWxlLCBhbGxvd2luZyByZXNlYXJjaGVycyB0byBxdWFudGlmeSB0aGUgcHJvYmFiaWxpdHkgb2YgaG9tZWxlc3NuZXNzLg0KDQpUaGUgYXV0aG9ycyB1dGlsaXplIGxvZ2lzdGljIHJlZ3Jlc3Npb24sIGEgc3RhdGlzdGljYWwgbWV0aG9kIGNvbW1vbmx5IHVzZWQgdG8gbW9kZWwgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlhYmxlcy4gQXMgZXhwbGFpbmVkIGluIENoYXB0ZXIgNiBvZiBQb2xpdGljYWwgU2NpZW5jZSBSZXNlYXJjaCBNZXRob2RzLCBzdGF0aXN0aWNhbCBtb2RlbGluZyBpcyBhIHZpdGFsIHRvb2wgZm9yIGVzdGFibGlzaGluZyBjYXVzYWxpdHksIGVuYWJsaW5nIHJlc2VhcmNoZXJzIHRvIGNvbnRyb2wgZm9yIHZhcmlvdXMgZmFjdG9ycyBhbmQgdGVzdCB0aGUgc3RyZW5ndGggb2YgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlhYmxlcy4NCg0KVGhlIGZpbmRpbmdzIHJldmVhbCB0aGF0IHByZWRpY3RpdmUgbW9kZWxzIGFyZSBoaWdobHkgZWZmZWN0aXZlIGluIGlkZW50aWZ5aW5nIGZhbWlsaWVzIGF0IHJpc2sgb2YgaG9tZWxlc3NuZXNzLCBlbmFibGluZyB0YXJnZXRlZCBpbnRlcnZlbnRpb24gYW5kIG1vcmUgZWZmaWNpZW50IHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgZGF0YS1kcml2ZW4gYXBwcm9hY2ggYWxpZ25zIHdpdGggdGhlIGNvbmNlcHRzIGRpc2N1c3NlZCBpbiBDaGFwdGVyIDkgb2YgdGhlIENpdmljIFRlY2hub2xvZ2lzdOKAmXMgUHJhY3RpY2UgR3VpZGUsIHdoaWNoIGFkdm9jYXRlcyBmb3IgbGV2ZXJhZ2luZyB0ZWNobm9sb2d5IGFuZCBkYXRhIHRvIGltcHJvdmUgcG9saWN5IG91dGNvbWVzLg0KDQojIyBDb25jbHVzaW9uDQoNClRoZSBmb3VyIGFydGljbGVzIGV4YW1pbmVkIGluIHRoaXMgZXNzYXkgaWxsdXN0cmF0ZSBob3cgcGl2b3RhbCBjb25jZXB0cyBzdWNoIGFzIHByb2FjdGl2ZSBzdHJhdGVnaWVzLCBzZXJ2aWNlIGludGVncmF0aW9uLCBwcmV2ZW50aW9uLCBhbmQgZWZmaWNpZW50IHRhcmdldGluZyBjYW4gYmUgcHV0IGludG8gcHJhY3RpY2UgYW5kIGV2YWx1YXRlZCB0aHJvdWdoIG1ldGljdWxvdXMgcmVzZWFyY2ggZGVzaWducy4gRHJhd2luZyB1cG9uIGluc2lnaHRzIGZyb20gIlBvbGl0aWNhbCBTY2llbmNlIFJlc2VhcmNoIE1ldGhvZHMiIGFuZCB0aGUgIkNpdmljIFRlY2hub2xvZ2lzdOKAmXMgUHJhY3RpY2UgR3VpZGUsIiB0aGlzIGFuYWx5c2lzIGVtcGhhc2l6ZXMgdGhlIHNpZ25pZmljYW5jZSBvZiB3ZWxsLWRlZmluZWQgaHlwb3RoZXNlcywgYWNjdXJhdGUgbWVhc3VyZW1lbnQsIGFuZCB0aG91Z2h0ZnVsIGNvbnNpZGVyYXRpb24gb2YgY2F1c2FsaXR5IGluIHB1YmxpYyBwb2xpY3kgcmVzZWFyY2guIFRoZSBjb2xsZWN0aXZlIGZpbmRpbmdzIGZyb20gdGhlc2Ugc3R1ZGllcyB1bmRlcnNjb3JlIHRoZSBwb3RlbnRpYWwgb2YgaW5ub3ZhdGl2ZSwgZGF0YS1kcml2ZW4sIGFuZCBjb2xsYWJvcmF0aXZlIGFwcHJvYWNoZXMgaW4gZWZmZWN0aXZlbHkgYWRkcmVzc2luZyB0aGUgcGVyc2lzdGVudCBpc3N1ZSBvZiBob21lbGVzc25lc3MuDQoNCiMgUHJvcG9zZWQgSW5pdGlhdGl2ZQ0KDQpUaGlzIGluaXRpYXRpdmUgcHJvcG9zZXMgdGhlIGRldmVsb3BtZW50IGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBhIHByZWRpY3RpdmUgbW9kZWxpbmcgc3lzdGVtIHRvIGlkZW50aWZ5IGluZGl2aWR1YWxzIGF0IGhpZ2ggcmlzayBvZiBjaHJvbmljIGhvbWVsZXNzbmVzcyBpbiBbeW91ciBjaXR5L2NvdW50eS9zdGF0ZV0uIFRoaXMgc3lzdGVtIHdpbGwgbGV2ZXJhZ2UgZXhpc3RpbmcgZGF0YSBzb3VyY2VzIGFjcm9zcyBtdWx0aXBsZSBhZ2VuY2llcyB0byBpZGVudGlmeSBpbmRpdmlkdWFscyBmYWNpbmcgaW1taW5lbnQgcmlzayBvZiBob3VzaW5nIGluc3RhYmlsaXR5IGFuZCBwcm9hY3RpdmVseSBjb25uZWN0IHRoZW0gd2l0aCB0YXJnZXRlZCBwcmV2ZW50aW9uIHJlc291cmNlcy4gVGhpcyBpbml0aWF0aXZlIGZhbGxzIHdpdGhpbiB0aGUgcG9saWN5IGZvcm11bGF0aW9uIGFuZCBhZG9wdGlvbiBzdGFnZSBvZiB0aGUgcG9saWN5IHByb2Nlc3MsIGFzIGl0IGludm9sdmVzIGRlc2lnbmluZyBhIG5ldyBwb2xpY3kgYXBwcm9hY2ggYW5kIGFkdm9jYXRpbmcgZm9yIGl0cyBhZG9wdGlvbiBieSByZWxldmFudCBzdGFrZWhvbGRlcnMgKFRoZSBDaXZpYyBUZWNobm9sb2dpc3QncyBQcmFjdGljZSBHdWlkZSwgMjAyMykuDQoNClRoZSBwcm9wb3NlZCBtZXRob2QgaW52b2x2ZXMgc2V2ZXJhbCBrZXkgc3RlcHMuIEZpcnN0LCBkYXRhIHdpbGwgYmUgZ2F0aGVyZWQgZnJvbSB2YXJpb3VzIHNvdXJjZXMsIGluY2x1ZGluZyBIb21lbGVzcyBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIFN5c3RlbXMgKEhNSVMpLCBwdWJsaWMgd2VsZmFyZSBhZ2VuY2llcywgdGhlIGNyaW1pbmFsIGp1c3RpY2Ugc3lzdGVtLCBwdWJsaWMgc2Nob29scywgYW5kIGV2aWN0aW9uIGNvdXJ0IHJlY29yZHMuIFRoaXMgZGF0YSB3aWxsIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJpc2sgZmFjdG9ycyBhc3NvY2lhdGVkIHdpdGggY2hyb25pYyBob21lbGVzc25lc3MuIE5leHQsIGEgcHJlZGljdGl2ZSBtb2RlbCB3aWxsIGJlIGRldmVsb3BlZCB1c2luZyBtYWNoaW5lIGxlYXJuaW5nIGFsZ29yaXRobXMgdG8gYW5hbHl6ZSB0aGUgaW50ZWdyYXRlZCBkYXRhIGFuZCBpZGVudGlmeSBpbmRpdmlkdWFscyB3aXRoIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBleHBlcmllbmNpbmcgY2hyb25pYyBob21lbGVzc25lc3MuIEtleSByaXNrIGZhY3RvcnMgbWF5IGluY2x1ZGUgaGlzdG9yeSBvZiBldmljdGlvbnMsIGludm9sdmVtZW50IHdpdGggdGhlIGNyaW1pbmFsIGp1c3RpY2Ugc3lzdGVtLCBmcmVxdWVudCB1c2Ugb2YgZW1lcmdlbmN5IHNoZWx0ZXJzLCBtZW50YWwgaGVhbHRoIGFuZCBzdWJzdGFuY2UgYWJ1c2UgaXNzdWVzLCBhbmQgbGltaXRlZCBpbmNvbWUuDQoNCkJhc2VkIG9uIHRoZSBwcmVkaWN0ZWQgcmlzayBsZXZlbHMsIGEgdGllcmVkIGludGVydmVudGlvbiBzeXN0ZW0gd2lsbCBiZSBkZXZlbG9wZWQuIEhpZ2gtcmlzayBpbmRpdmlkdWFscyB3aWxsIHJlY2VpdmUgaW50ZW5zaXZlIGNhc2UgbWFuYWdlbWVudCwgaG91c2luZyBuYXZpZ2F0aW9uIGFzc2lzdGFuY2UsIHJlbnRhbCBzdWJzaWRpZXMsIGFuZCBjb25uZWN0aW9ucyB0byBtZW50YWwgaGVhbHRoIGFuZCBzdWJzdGFuY2UgYWJ1c2UgdHJlYXRtZW50LiBNb2RlcmF0ZS1yaXNrIGluZGl2aWR1YWxzIHdpbGwgYmUgcmVmZXJyZWQgdG8gZXZpY3Rpb24gcHJldmVudGlvbiBwcm9ncmFtcywgZmluYW5jaWFsIGxpdGVyYWN5IGNvdW5zZWxpbmcsIGFuZCBqb2IgdHJhaW5pbmcuIExvdy1yaXNrIGluZGl2aWR1YWxzIHdpbGwgcmVjZWl2ZSBwcmV2ZW50aXZlIGVkdWNhdGlvbiBhbmQgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIHJlc291cmNlcy4gRmluYWxseSwgdGhlIHByb2dyYW0ncyBlZmZlY3RpdmVuZXNzIHdpbGwgYmUgY29udGludW91c2x5IG1vbml0b3JlZCBhbmQgZXZhbHVhdGVkIHVzaW5nIGEgcm9idXN0IGV2YWx1YXRpb24gZnJhbWV3b3JrLCB0cmFja2luZyBrZXkgbWV0cmljcyBzdWNoIGFzIHRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbHMgaWRlbnRpZmllZCwgaW50ZXJ2ZW50aW9ucyBwcm92aWRlZCwgcmVkdWN0aW9ucyBpbiBob21lbGVzc25lc3MgZW50cnkgcmF0ZXMsIGFuZCBjb3N0LWVmZmVjdGl2ZW5lc3MuDQoNClN1Y2Nlc3NmdWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbml0aWF0aXZlIHdpbGwgbGVhZCB0byBzZXZlcmFsIHBvc2l0aXZlIG91dGNvbWVzLiBCeSBwcm9hY3RpdmVseSBpZGVudGlmeWluZyBhbmQgYXNzaXN0aW5nIGluZGl2aWR1YWxzIGF0IGhpZ2ggcmlzaywgdGhlIGluaXRpYXRpdmUgYWltcyB0byBwcmV2ZW50IGNocm9uaWMgaG9tZWxlc3NuZXNzIGFuZCBpdHMgYXNzb2NpYXRlZCBzb2NpYWwgYW5kIGVjb25vbWljIGNvc3RzLiBFZmZpY2llbnQgdGFyZ2V0aW5nIGVuc3VyZXMgdGhhdCBsaW1pdGVkIHJlc291cmNlcyBhcmUgZGlyZWN0ZWQgdG93YXJkcyB0aG9zZSBtb3N0IGluIG5lZWQsIG1heGltaXppbmcgaW1wYWN0LiBUaGUgaW5pdGlhdGl2ZSBhbHNvIGVuY291cmFnZXMgY29sbGFib3JhdGlvbiBiZXR3ZWVuIGFnZW5jaWVzLCBmb3N0ZXJpbmcgYSBtb3JlIGludGVncmF0ZWQgYW5kIGVmZmVjdGl2ZSBzZXJ2aWNlIGRlbGl2ZXJ5IHN5c3RlbSAoR3VlcnJlcm8sIEhlbndvb2QsIGFuZCBXZW56ZWwpLiBGdXJ0aGVybW9yZSwgdGhlIHVzZSBvZiBwcmVkaWN0aXZlIG1vZGVsaW5nIGFuZCBkYXRhIGFuYWx5dGljcyBwcm9tb3RlcyBhIG1vcmUgb2JqZWN0aXZlIGFuZCBldmlkZW5jZS1iYXNlZCBhcHByb2FjaCB0byBob21lbGVzc25lc3MgcHJldmVudGlvbi4NCg0KVGhlIGRhdGEgY29sbGVjdGVkIHdpbGwgY29udHJpYnV0ZSB0byB0aGUgYXNzZXNzbWVudCBvZiBjb25kaXRpb25zIGJ5IHByb3ZpZGluZyBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaG9tZWxlc3MgcG9wdWxhdGlvbiwgaW5jbHVkaW5nIHByZXZhbGVudCByaXNrIGZhY3RvcnMgYW5kIHNlcnZpY2UgbmVlZHMuIFRoaXMgd2lsbCBpbmZvcm0gdGhlIGRldmVsb3BtZW50IG9mIHRhcmdldGVkIGludGVydmVudGlvbnMuIERhdGEgd2lsbCBhbHNvIGd1aWRlIHRoZSBpZGVudGlmaWNhdGlvbiBvZiBoaWdoLXJpc2sgaW5kaXZpZHVhbHMsIGVuYWJsaW5nIHByb2FjdGl2ZSBhbmQgZWZmaWNpZW50IGFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLiBPbmdvaW5nIGRhdGEgYW5hbHlzaXMgd2lsbCBtb25pdG9yIHByb2dyYW0gZWZmZWN0aXZlbmVzcyBhbmQgaWRlbnRpZnkgYXJlYXMgZm9yIGltcHJvdmVtZW50Lg0KDQpUaGlzIGluaXRpYXRpdmUgYWxpZ25zIHdpdGggc2V2ZXJhbCBrZXkgY29uY2VwdHMgZnJvbSB0aGUgcG9saWN5IGxpdGVyYXR1cmUuIEl0IHJlZmxlY3RzIE5vdXJhemFyaSwgTG92YXRvLCBhbmQgV2VuZydzIGFkdm9jYWN5IGZvciBwcm9hY3RpdmUsIHN5c3RlbXMtYmFzZWQgYXBwcm9hY2hlcyB0byBob21lbGVzc25lc3MgcHJldmVudGlvbiAoTm91cmF6YXJpLCBMb3ZhdG8sIGFuZCBXZW5nKS4gVGhlIHVzZSBvZiBwcmVkaWN0aXZlIG1vZGVsaW5nIGVjaG9lcyBTaGlubiBldCBhbC4ncyBlbXBoYXNpcyBvbiBlZmZpY2llbnQgdGFyZ2V0aW5nIHRvIG1heGltaXplIHRoZSBpbXBhY3Qgb2YgbGltaXRlZCByZXNvdXJjZXMgKFNoaW5uIGV0IGFsLikuIEJ5IHByaW9yaXRpemluZyBwcmV2ZW50aW9uIGFuZCBpbnRlcnZlbmluZyBlYXJseSwgdGhlIGluaXRpYXRpdmUgcmVmbGVjdHMgQ3VsaGFuZSwgTWV0cmF1eCwgYW5kIEJ5cm5lJ3MgYXJndW1lbnQgZm9yIGEgcHJldmVudGlvbi1jZW50ZXJlZCBhcHByb2FjaCB0byBob21lbGVzc25lc3MgYXNzaXN0YW5jZSAoQ3VsaGFuZSwgTWV0cmF1eCwgYW5kIEJ5cm5lKS4NCg0KVGhpcyBpbml0aWF0aXZlIG5lY2Vzc2l0YXRlcyBjbG9zZSBjb2xsYWJvcmF0aW9uIHdpdGggcG9saWN5bWFrZXJzIGFuZCBnb3Zlcm5tZW50IGFnZW5jaWVzLiBUaGUgIldvcmtpbmcgd2l0aCBQb2xpY3kiIGNoYXB0ZXIgaW4gdGhlIENpdmljIFRlY2hub2xvZ2lzdCdzIFByYWN0aWNlIEd1aWRlIHByb3ZpZGVzIHZhbHVhYmxlIGluc2lnaHRzIGZvciBuYXZpZ2F0aW5nIHRoZSBwb2xpY3kgbGFuZHNjYXBlLiBLZXkgY29uc2lkZXJhdGlvbnMgaW5jbHVkZSBidWlsZGluZyByZWxhdGlvbnNoaXBzIHdpdGgga2V5IHBvbGljeW1ha2VycywgYWdlbmN5IGxlYWRlcnMsIGFuZCBjb21tdW5pdHkgc3Rha2Vob2xkZXJzOyB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBwb2xpY3kgcHJvY2Vzc2VzIGFuZCBkZWNpc2lvbi1tYWtpbmcgc3RydWN0dXJlcyB3aXRoaW4gdGhlIHJlbGV2YW50IGdvdmVybm1lbnQgYWdlbmNpZXM7IGVmZmVjdGl2ZWx5IGNvbW11bmljYXRpbmcgdGhlIHByb2JsZW0gb2YgY2hyb25pYyBob21lbGVzc25lc3MgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMgb2YgdGhlIHByb3Bvc2VkIHNvbHV0aW9uOyBidWlsZGluZyBhIGJyb2FkIGNvYWxpdGlvbiBvZiBzdXBwb3J0IGZvciB0aGUgaW5pdGlhdGl2ZTsgYW5kIGFudGljaXBhdGluZyBhbmQgYWRkcmVzc2luZyBwb3RlbnRpYWwgYmFycmllcnMgdG8gaW1wbGVtZW50YXRpb24sIHN1Y2ggYXMgZnVuZGluZyBjb25zdHJhaW50cywgcHJpdmFjeSBjb25jZXJucywgYW5kIGJ1cmVhdWNyYXRpYyByZXNpc3RhbmNlLiBCeSBsZXZlcmFnaW5nIGRhdGEtZHJpdmVuIGluc2lnaHRzIGFuZCBjb2xsYWJvcmF0aW5nIGVmZmVjdGl2ZWx5IHdpdGggcG9saWN5bWFrZXJzLCB0aGlzIGluaXRpYXRpdmUgaGFzIHRoZSBwb3RlbnRpYWwgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgY2hyb25pYyBob21lbGVzc25lc3MgYW5kIGltcHJvdmUgdGhlIGxpdmVzIG9mIHZ1bG5lcmFibGUgaW5kaXZpZHVhbHMgaW4gb3VyIGNvbW11bml0eS4NCg0KIyBPcGVuIERhdGEgSW5kaWNhdG9ycw0KDQpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBsYWJlbD0iQVBJIE9wZW4gRGF0YSAoS2FibGUpIn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KGtuaXRyKQ0KDQojIEZldGNoIGRhdGEgZnJvbSBBUEkNCmZldGNoX2RhdGEgPC0gZnVuY3Rpb24oYXBpX3VybCkgew0KICByZXNwb25zZSA8LSBHRVQoYXBpX3VybCkNCiAgZGF0YSA8LSBmcm9tSlNPTihjb250ZW50KHJlc3BvbnNlLCAidGV4dCIpLCBmbGF0dGVuID0gVFJVRSkNCiAgcmV0dXJuKGRhdGEkZmVhdHVyZXMpDQp9DQoNCmhvbWVsZXNzX3NoZWx0ZXJfdXJsIDwtICJodHRwczovL21hcHMyLmRjZ2lzLmRjLmdvdi9kY2dpcy9yZXN0L3NlcnZpY2VzL0RDR0lTX0RBVEEvUHVibGljX1NlcnZpY2VfV2ViTWVyY2F0b3IvTWFwU2VydmVyLzI1L3F1ZXJ5P3doZXJlPTElM0QxJm91dEZpZWxkcz0qJm91dFNSPTQzMjYmZj1qc29uIg0KaG9tZWxlc3Nfc2VydmljZV91cmwgPC0gImh0dHBzOi8vbWFwczIuZGNnaXMuZGMuZ292L2RjZ2lzL3Jlc3Qvc2VydmljZXMvRENHSVNfREFUQS9QdWJsaWNfU2VydmljZV9XZWJNZXJjYXRvci9NYXBTZXJ2ZXIvNi9xdWVyeT93aGVyZT0xJTNEMSZvdXRGaWVsZHM9KiZvdXRTUj00MzI2JmY9anNvbiINCmFmZm9yZGFibGVfaG91c2luZ191cmwgPC0gImh0dHBzOi8vbWFwczIuZGNnaXMuZGMuZ292L2RjZ2lzL3Jlc3Qvc2VydmljZXMvRENHSVNfREFUQS9Qcm9wZXJ0eV9hbmRfTGFuZF9XZWJNZXJjYXRvci9NYXBTZXJ2ZXIvNjIvcXVlcnk/d2hlcmU9MSUzRDEmb3V0RmllbGRzPSomb3V0U1I9NDMyNiZmPWpzb24iDQoNCiMgRmV0Y2hpbmcgdGhlIGRhdGFzZXRzDQpob21lbGVzc19zaGVsdGVycyA8LSBmZXRjaF9kYXRhKGhvbWVsZXNzX3NoZWx0ZXJfdXJsKQ0KaG9tZWxlc3Nfc2VydmljZXMgPC0gZmV0Y2hfZGF0YShob21lbGVzc19zZXJ2aWNlX3VybCkNCmFmZm9yZGFibGVfaG91c2luZyA8LSBmZXRjaF9kYXRhKGFmZm9yZGFibGVfaG91c2luZ191cmwpDQoNCg0KIyBEaXNwbGF5IHRoZSBkYXRhIHVzaW5nIGthYmxlDQprYWJsZShoZWFkKGhvbWVsZXNzX3NoZWx0ZXJzKSwgY2FwdGlvbiA9ICJIb21lbGVzcyBTaGVsdGVyIExvY2F0aW9ucyIpICU+JSBrYWJsZV9zdHlsaW5nKCkNCmthYmxlKGhlYWQoaG9tZWxlc3Nfc2VydmljZXMpLCBjYXB0aW9uID0gIkhvbWVsZXNzIFNlcnZpY2UgRmFjaWxpdGllcyIpICU+JSBrYWJsZV9zdHlsaW5nKCkNCmthYmxlKGhlYWQoYWZmb3JkYWJsZV9ob3VzaW5nKSwgY2FwdGlvbiA9ICJBZmZvcmRhYmxlIEhvdXNpbmcgVW5pdHMiKSAlPiUga2FibGVfc3R5bGluZygpDQoNCmBgYA0KDQojIyBUaGlzIGNvZGUgaW1wb3J0cyB0aHJlZSBkYXRhc2V0cyBmcm9tIE9wZW5EYXRhIERDOg0KDQpIb21lbGVzcyBTaGVsdGVyIExvY2F0aW9uczogVGhpcyBkYXRhc2V0IHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBsb2NhdGlvbiwgY2FwYWNpdHksIGFuZCB0eXBlcyBvZiBzZXJ2aWNlcyBvZmZlcmVkIGF0IGhvbWVsZXNzIHNoZWx0ZXJzIGluIFdhc2hpbmd0b24sIERDLg0KDQpIb21lbGVzcyBTZXJ2aWNlIEZhY2lsaXRpZXM6IFRoaXMgZGF0YXNldCBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB2YXJpb3VzIGZhY2lsaXRpZXMgdGhhdCBwcm92aWRlIHNlcnZpY2VzIHRvIHBlb3BsZSBleHBlcmllbmNpbmcgaG9tZWxlc3NuZXNzLCBzdWNoIGFzIGRheSBjZW50ZXJzLCBzb3VwIGtpdGNoZW5zLCBhbmQgbWVkaWNhbCBjbGluaWNzLg0KDQpBZmZvcmRhYmxlIEhvdXNpbmc6IFRoaXMgZGF0YXNldCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBvbiBhZmZvcmRhYmxlIGhvdXNpbmcgdW5pdHMgaW4gV2FzaGluZ3RvbiwgREMsIGluY2x1ZGluZyBsb2NhdGlvbiwgbnVtYmVyIG9mIHVuaXRzLCBhbmQgYWZmb3JkYWJpbGl0eSBsZXZlbHMuDQoNCiMjIEZpdmUgSW5kaWNhdG9ycyBhbmQgdGhlaXIgUmVsZXZhbmNlIHRvIENocm9uaWMgSG9tZWxlc3NuZXNzOg0KDQpTaGVsdGVyIENhcGFjaXR5IChmcm9tICJIb21lbGVzcyBTaGVsdGVyIExvY2F0aW9ucyIpOiBUaGlzIGluZGljYXRvciBzaG93cyB0aGUgdG90YWwgbnVtYmVyIG9mIGJlZHMgYXZhaWxhYmxlIGluIGVtZXJnZW5jeSBzaGVsdGVycyBhbmQgdHJhbnNpdGlvbmFsIGhvdXNpbmcgcHJvZ3JhbXMuICBBIGxvdyBzaGVsdGVyIGNhcGFjaXR5IHJlbGF0aXZlIHRvIHRoZSBlc3RpbWF0ZWQgaG9tZWxlc3MgcG9wdWxhdGlvbiBpbmRpY2F0ZXMgYSBsYWNrIG9mIGFkZXF1YXRlIGVtZXJnZW5jeSByZXNvdXJjZXMsIHBvdGVudGlhbGx5IGNvbnRyaWJ1dGluZyB0byBjaHJvbmljIGhvbWVsZXNzbmVzcy4NCg0KVHlwZXMgb2YgU2hlbHRlciBTZXJ2aWNlcyAoZnJvbSAiSG9tZWxlc3MgU2hlbHRlciBMb2NhdGlvbnMiKTogIFRoaXMgaW5kaWNhdG9yIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjaWZpYyBzZXJ2aWNlcyBvZmZlcmVkIGF0IGVhY2ggc2hlbHRlciwgc3VjaCBhcyBmYW1pbHkgc2hlbHRlcnMsIHNoZWx0ZXJzIGZvciBpbmRpdmlkdWFscyB3aXRoIGRpc2FiaWxpdGllcywgYW5kIHNoZWx0ZXJzIHdpdGggc3Vic3RhbmNlIGFidXNlIHRyZWF0bWVudCBwcm9ncmFtcy4gQW5hbHl6aW5nIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3BlY2lhbGl6ZWQgc2VydmljZXMgY2FuIHJldmVhbCBnYXBzIGluIHJlc291cmNlcyBmb3Igc3BlY2lmaWMgc3VicG9wdWxhdGlvbnMgZXhwZXJpZW5jaW5nIGNocm9uaWMgaG9tZWxlc3NuZXNzLg0KDQpOdW1iZXIgb2YgUGVybWFuZW50IFN1cHBvcnRpdmUgSG91c2luZyBVbml0cyAoZnJvbSAiQWZmb3JkYWJsZSBIb3VzaW5nIik6IFRoaXMgaW5kaWNhdG9yIHNob3dzIHRoZSBudW1iZXIgb2YgaG91c2luZyB1bml0cyBzcGVjaWZpY2FsbHkgZGVzaWduYXRlZCBmb3IgaW5kaXZpZHVhbHMgYW5kIGZhbWlsaWVzIGV4aXRpbmcgaG9tZWxlc3NuZXNzIGFuZCByZXF1aXJpbmcgb25nb2luZyBzdXBwb3J0IHNlcnZpY2VzLiBBbiBhZGVxdWF0ZSBzdXBwbHkgb2YgcGVybWFuZW50IHN1cHBvcnRpdmUgaG91c2luZyBpcyBjcnVjaWFsIGZvciBicmVha2luZyB0aGUgY3ljbGUgb2YgY2hyb25pYyBob21lbGVzc25lc3MuDQoNCkF2YWlsYWJpbGl0eSBvZiBBZmZvcmRhYmxlIEhvdXNpbmcgVW5pdHMgZm9yIEV4dHJlbWVseSBMb3ctSW5jb21lIEhvdXNlaG9sZHMgKGZyb20gIkFmZm9yZGFibGUgSG91c2luZyIpOiBUaGlzIGluZGljYXRvciByZWZsZWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9mIGhvdXNpbmcgdW5pdHMgYWZmb3JkYWJsZSB0byBob3VzZWhvbGRzIHdpdGggaW5jb21lcyBiZWxvdyAzMCUgb2YgdGhlIEFyZWEgTWVkaWFuIEluY29tZSAoQU1JKS4gIEEgc2hvcnRhZ2Ugb2YgZGVlcGx5IGFmZm9yZGFibGUgaG91c2luZyBpcyBhIHNpZ25pZmljYW50IGNvbnRyaWJ1dG9yIHRvIGNocm9uaWMgaG9tZWxlc3NuZXNzLCBhcyBpbmRpdmlkdWFscyBhbmQgZmFtaWxpZXMgc3RydWdnbGUgdG8gZmluZCBzdGFibGUgYW5kIGFmZm9yZGFibGUgaG91c2luZyBvcHRpb25zLg0KDQpHZW9ncmFwaGljIERpc3RyaWJ1dGlvbiBvZiBTZXJ2aWNlcyAoZnJvbSBib3RoICJIb21lbGVzcyBTaGVsdGVyIExvY2F0aW9ucyIgYW5kICJIb21lbGVzcyBTZXJ2aWNlIEZhY2lsaXRpZXMiKTogTWFwcGluZyB0aGUgbG9jYXRpb24gb2Ygc2hlbHRlcnMgYW5kIHNlcnZpY2UgZmFjaWxpdGllcyBjYW4gcmV2ZWFsIGdlb2dyYXBoaWMgZGlzcGFyaXRpZXMgaW4gYWNjZXNzIHRvIHJlc291cmNlcy4gIENvbmNlbnRyYXRpb25zIG9mIHNlcnZpY2VzIGluIGNlcnRhaW4gYXJlYXMgbWF5IGxlYXZlIG90aGVyIGNvbW11bml0aWVzIHVuZGVyc2VydmVkLCBwb3RlbnRpYWxseSBjb250cmlidXRpbmcgdG8gaGlnaGVyIHJhdGVzIG9mIGNocm9uaWMgaG9tZWxlc3NuZXNzIGluIHRob3NlIGFyZWFzLg0KDQpCeSBhbmFseXppbmcgdGhlc2UgaW5kaWNhdG9ycywgd2UgY2FuIGdhaW4gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZGl0aW9ucyBjb250cmlidXRpbmcgdG8gY2hyb25pYyBob21lbGVzc25lc3MgaW4gV2FzaGluZ3RvbiwgREMuIFRoaXMgaW5mb3JtYXRpb24gY2FuIGluZm9ybSB0aGUgZGV2ZWxvcG1lbnQgYW5kIGltcGxlbWVudGF0aW9uIG9mIHRhcmdldGVkIGludGVydmVudGlvbnMsIHN1Y2ggYXMgdGhlIHByZWRpY3RpdmUgbW9kZWxpbmcgaW5pdGlhdGl2ZSBwcm9wb3NlZCwgdG8gZWZmZWN0aXZlbHkgYWRkcmVzcyB0aGlzIGNyaXRpY2FsIGlzc3VlLg==