1 Abstract

This study initially attempted to model the growth of higher education in Thailand by using a simple list of the year of founding for all the accredited colleges and universities in Thailand. However, the pattern of enrollment has changed in recent years creating a climate of rumors and speculation. Changes in the number of applicants, growing competition from satellite programs of foreign universities and career interests of Thai university students has impacted the growth of higher education in Thailand. Expanding the mathematical model to include these factors provides an opportunity to elucidate the nature of the current crisis and create a realistic prediction for higher education in Thailand within the next decade.

2 Introduction

The Ministry of University Affairs publishing lists of all institutes of higher education in Thailand.1 This information has has been combined with the year of founding resulting in a dataset that traces the history of higher education in Thailand starting with opening of Chulachomklao Royal Military Academy and Mahachulalongkornrajavidyalaya University in 1887 to the present.2

While the initial years saw the founding of national and public institutions, the last 2 decades has been dominated by the founding of new private instituions.

3 Initial mathematical model

The growth represented in Figure 1 is a textbook example of a timeseries could be modelled by a simple polynomial relationship. For nearly 100 years, the grow of higher education in Thai has conformed to a second or third order polynomical curve with an average doubling time of 24.3 \(\pm\) 6.

It is remarkable that despite the significant political changes that occurred over that period of history, the standard error in the predicted values for both 2nd and 3rd order polynomials are is 5 institutes. The total range of residual errors for the predicted numbers by either models is \(\pm\) 12 institutions. This consistency is remarkable and serves as a testimony to the long standing commitment within Thai for developing higher education system.

While there has been a sustained committed effort to build a system of higher education, plotting the effective doubling rate over time clearly demonstrates that historical events did have effect on the development. The gaps, slowdowns and surges shown in Fig. 3 appear to correspond to important historical events which have impacted both the country and its higher education system:3

  • 1912: The Prince Revolt plotted by young military officers in an unsuccessful attempt to overthrow and replace the King.

  • 1932: Siamese coup d’etat which resulted in the transitions of from an absolute monarchy to a constitutional monarchy

  • 1976: a violent clash with student protesters that lead to a bloody crackdown followed by numerous measures to reduce any chance for future student uprisings

  • 1984: Payap University was the first private college to be granted university status paving the way for other private universities to arise as shown in Figure 2.

  • 1997: the value of the baht was devalued from 25 baht/USD to 56 baht/USD triggering the 1997 Asian Financial Crisis as well as a sudden drop in the birth rate causing both short and long term changes in student enrollments.

However in the past 15 years, the rate of opening new institutions has significantly slowed in a fashion typical for phenomena nearing the limits to growth.4 In 2014, there were newspaper reports that number of applications fell below the number of entrance positions available. In 2015, universities could accommodate 156,216 but only 105,046 applied to take the entrance exams corresponding to 67% of the capacity. The Office of Higher Education Commission has also reported that the number of university students in Thailand peaked in 2013 and more recent years have fallen short of what the previous models would suggest.5 As shown in Fig. 5, Thailand has entered an era where the supply of opportunities for higher education exceeds demand and can no longer depend on the legency of the previous century as it looks to the future.The foreseeable future will be dominated by the following relationship:

\[Num_{Seats} > Num_{Applicants}\]

Changing demographics play a major part in this change. According to both the World Bank6 and the CIA7, birth rate will continue to drop over the next decade. In fact as shown by following graph, the overall drop over the next ten year period is expected to be 30%.

Thailand Population Pyramid8

In May 2017, several cabinet minister announced their intentions to open the Special Economic Zones for locating satellite campuses of foreign universities.9 Adding new institutes in a season of oversupply has rightfully sparked concern. It was even been suggested that in the worst case within the next decade 75% of the current institutions of higher education could be closed.10 However, the sakes are high as a wrong decision will either deprive the country of important new economic and academic opportunities or will drive a large number of the current institutions of higher learning into bankrupcy. The purpose of this report is to use mathematical modeling to attempt to provide insights into this question.

4 Forecasting the next decade

Mathematical modelling was attempted using a shorted time period with data more representative of the current conditions. Fig 2 shows that a progressive deviation from the general trend that first appears at the turn of the century. Fig 6 shows the models based growth of higher education since the year 2000. The Standard Error and \(R^2\) for this model are 1.6 and 0.967, respectively.

Even though the list of the year of founding for accredited institutes of higher education in Thailand is an indirect measure, timeseries analysis of this information correctly identifies 2014 as the tipping point at which the number of places exceeded the number of applicants. The prediction curve does suggest that with 95% confidence it is unlikely that new institutions will be opened any time soon. At the same time there is no support for the suggestion that 75% of the institutions will go bankrupt.

Another approach would be needed to quantify the expected pending loss due to changing demographics. The fact sheet of the Office of Higher Education Commission states that there are currently 2,025,234 students studying in 18,834 educational programs taught by 189,375 instructors working at 155 institutions in Thailand. These statistics represent accredited programs that meet the standards of the OHEC and represent the general nature of instiutes of higher education in Thailand. In addition, private institutes represent 75 (or 40%) of the institutes and 283,532 (or 14%) of the students. These figures provide the basis of key ratios used to calculate the expected futures.

Parameters Calculation Ratio
Average enrollment per private institute \(283,532\over 75\) 3,780
Average enrollment per public institute \(1,741,701\over 80\) 321,771
Average enrollment per study program \(2,025,234\over 18,834\) 107
Average enrollment per staff person \(2,025,234 \over 189,375\) 10.5
Average staff per study program \(189,375\over 18,834\) 10.1

Fig 7. is a simulated distribution based on the OHEC information combined with tuition data found for 3 private and 3 public institutions. The idea is to demonstrate the ranges of fees paid by students in various departments within private and public institututions. While it was possible to identify the tuition for various degree programs, there was no way to determine the numbers enrolled in each department. This graphic was draw assuming the equal distribution for each department.

Table 2 provides a forecast based on the expected 30% reduction in student population as suggested by demographic information cited above.11 and an assumption is students will continue to show the same 3 fold preference in choosing subsidized public education over private education whenever they can.

Parameter 2015
(actual)
2020
(expected)
2025
(expected)
Total enrollment 2,025,234 1,721,449
(-15%)
1,417,664
(-30%)
Public enrollement 1,741,701 1,566,029
(-10%)
1332183
(-24%)
Private enrollment 282,532 155,421
(-45%)
85481
(-70%)
Public staff 165,876 149,145 126,875
Private staff 26,907 14,802 8,141
Public degree programs 16,423 14,767 12,562
Private degree programs 2,664 1,465 806
Expected public program closure 10% 24%
Expected private program closure 45% 70%

Professional degrees such as medicine account for the higher cost public programs and they would be expected to continue to enjoy nearly constant enrollment. As illustrated in Fig 7, private institutions and programs are expected to be subject to higher risk of closure due their smaller pool of students and their higher tuitions compared to public institutions whose tuitions is lowered by government substidies and grants. These data would suggest that 70% of the academic programs of the private sector are at risk.

Under such conditions, any successful new academic program will compete with existing programs and over time will result in the closure of another similar program. At the same time opening new programs will provide new opportunities to upgrade instruction and open new disciplines to support changes in the workplace.

5 Other factors to be considered

  • Financal conditions have been hard for a number of years. While the conditions would have forced better tigher financial planning, it is not know if this has also delayed regular maintenance of facilities, and equipment. Depletion of financial reserves will eventually have an impact on the quality of the academic program.

  • Market success and sustainability will depend on careful financial planning and development of distinctive marketable programs. As increasing competition reduces margins, institutions will be forced to forge new links and joint projects between departments and institutions.

  • Institutions need to seek ways to improve the value and reputation of their programs. With the raising cost of higher education students have become leary of being saddled with a large educational loan for a degree which has no job market. They are particularly interest in programs that are valued in one of 2 ways:

  • Top school: known for producing alumni of distinction.
  • Value-added school: known for motivating ordinary students to do exceptional work

  • Institutes will need to adjust their currently programs to address changes in student attitudes and career preferences.

  • Top students will be more discerning as they enter university with a wider range of skills having participated in robot competitions, science fairs and art and sporting events. The most enterprizing are already familar with the course material because of courses they have taken as MOOC’s or Advanced placement.

  • Less motivated students have found less incentives to do well in high school. High school teachers tell their students that the current situation makes it easier for students to enter university with less effort. The lack of entrance exams has made it easier for weaker students to gain entrance into university.

  • Special assistance is required from the government to process and approve the new curriculum in a timely manner. Delays in gaining approval will directly contribute to the demise of institutions. Fast track introduction of new programs will give new initiative an unfair advantage over programs that are awaiting approval.

  • The nature of the Thai economy continues to emerge. While Bangkok is exploring the cutting edge of Thailand 4.0, the rest of the country is attempting to integrate key aspects of the entire spectrum of Thailand 1.0 through Thailand 4.0. Institutes of Higher Education empower their students to create and use applications of new technologies and paradigms within their communities and businesses.

  • The Thai economy continues to evolve with the changing economic climate. However, each new opportunity creates new training requirements and research opportunities. The following conditions are creating new challenges on the near horizon: and illustrate the need for institutes of higher education provide a timely response to the changing business environment.

  • Development of ASEAN Economic Community. The Thai economy finds itself entering a global market which needs workers with new skills.
  • Chinese tourism is still growing exponentially and outpacing the local resources to communicate and provide adequate support for this lucritive tourist market.

  • Changing in technology make it more cost-effective for institutions to share resources, instructors and courses. These changes include the use of MOOC, webinars and chatroom hangouts. Students will benefit from exposure to good teaching resources and Institutions who have developed the alliances have found that this will reduces the cost of instruction by increasing the effective enrollemnt of speciality courses.

  • The development of satellite campuses of foreign top univerisity in collaboration with local institutions is an approach that is being embraced by members of the Cabinet and local universities.12 This will introduce new cutting edge study programs and will not significantly increase the threats to existing program beyond the current risk due to changing demographics because of the limited number, remote location and cost of building new infrastructure.

6 Summary

A simple dataset listing the year of founding for each accredited institute of higher education has been useful to show the limitation and potential of mathematical forecasting. While the growth of the higher education system in Thailand could be modelled by a second order polynomal, this model was not useful for forecasting the future as the trend that dominated the grow during the past century of data was changed when the number of applicaned the number of students.

Using the data post 2000 to model the growth, resulted in curve that correctly predicted the cross over date and suggeste that there will be no new institutions.

Unfortunately the 2 models also seem to describe the two main views of current Thai administrators of higher education. There are some who look at the long history of higher education hope that things will turn around and there are others who recognize the current situation as the beginning of a major crisis. As more data becomes available, the true model will become self-evident at the expense of those who chose incorrectly. The current dataset highly suggests that the model based on recent data is more correct (MAD=4.27) than the model which depends on data collected over a century (MAD = 10.20).

However, determining the magnitude of the crisis requires more input than that provided by this dataset. Looking at population growth and cost of tuition and assuming normal Thai economic behavoir, higher priced programs are more likely to disappear than cheaper (subsidized) alternatives. Applying this logic to current data would suggest that the number of study programs would decrease by 70% and 10% for private and public institutions, respectively.

This situation will require assist by the government as institutions need to upgrade and adjust the study programs offered especially since new programs will be introduced from abroad into the Special Economic Zones.

7 Bibliography


  1. Office of the Higher Education Commission (2015) Directory of Thai Higher Education Institutions. Dated September 2015. Available online at http://inter.mua.go.th/wp-content/uploads/2014/03/Thai-HEIs-name-list.-updated.September2015.pdf

  2. List of universities and colleges in Thailand. (2017, June 16). In Wikipedia, The Free Encyclopedia. Retrieved June 19, 2017 from https://en.wikipedia.org/w/index.php?title=List_of_universities_and_colleges_in_Thailand&oldid=785894145

  3. Baker, Christopher; Phongpaichit, Pasuk (2005). A History of Thailand. United Kingdom: Cambridge University Press.

  4. Donella Meadows, Jorgen Randers and Dennis Meadows (2004) Limits to Growth: The 30-Year Update. Chelsea Green Publishing

  5. Office of the Higher Education Commission (2016) Thai Higher Education: Fact and Figures. Bureau of International Cooperation Strategy, Office of the Higher Education Commission (OHEC) July 2016 Available online at 9 June 2017 http://inter.mua.go.th/wp-content/uploads/2016/07/Thai-HE-fact-figures_edited.pdf

  6. The World Bank (2016) World Development Indicators: Thailand Retrieved June 20, 2017 from http://data.worldbank.org/country/thailand

  7. Central Intelligence Agency (2016) The World Factbook: Thailand age structure. Retrieved June 20, 2017 from https://www.cia.gov/library/publications/the-world-factbook/geos/th.html

  8. Central Intelligence Agency (2016) The World Factbook: Thailand age structure. Retrieved June 20, 2017 from https://www.cia.gov/library/publications/the-world-factbook/geos/th.html

  9. Royal Thai Embassy (2017) Top U.S. universities show interest in opening Thai campuses. Available online at http://thaiembdc.org/2017/05/29/top-u-s-universities-show-interest-in-opening-thai-campuses/

  10. Dumrongkiat Mala (2017). 75% of Thai universities could close as enrollment falls and foreign competition heats up Fall in enrolment numbers a ‘wake-up call’ Bangkok Post 22 May 2017 Posted online at https://t.co/TetAZT8yhh

  11. Office of the Higher Education Commission (2016) Thai Higher Education: Fact and Figures. Bureau of International Cooperation Strategy, Office of the Higher Education Commission (OHEC) July 2016 Available online at 9 June 2017 http://inter.mua.go.th/wp-content/uploads/2016/07/Thai-HE-fact-figures_edited.pdf

  12. Dumrongkiat Mala (2017) Foreign varsities ‘not a threat’ Bangkok Post 17 Jun 2017 Available online at http://www.bangkokpost.com/news/general/1270419/foreign-varsities-not-a-threat

LS0tDQp0aXRsZTogIjxiPlRoYWkgQWNjcmVkaXRlZCBVbml2ZXJzaXRpZXMgYW5kIENvbGxlZ2VzOjwvYj48YnIvPjxzbWFsbD5BIHRpbWVzZXJpZXMgc3R1ZHk8L3NtYWxsPiINCmF1dGhvcjogIkRyLiBSb2JlcnQgUC4gQmF0emluZ2VyLEluc3RydWN0b3IgRW1lcml0dXM8YnIvPiBQYXlhcCBVbml2ZXJzaXR5IEZhY3VsdHkgb2YgU2NpZW5jZSINCmRhdGU6ICIyNiBKdW5lIDIwMTciDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogeWVzDQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIGZpZ19oZWlnaHQ6IDYNCiAgICBmaWdfd2lkdGg6IDcNCiAgICBoaWdobGlnaHQ6IGhhZGRvY2sNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiBzYW5kc3RvbmUNCi0tLQ0KDQojIEFic3RyYWN0DQoNClRoaXMgc3R1ZHkgaW5pdGlhbGx5IGF0dGVtcHRlZCB0byBtb2RlbCB0aGUgZ3Jvd3RoIG9mIGhpZ2hlciBlZHVjYXRpb24gaW4gVGhhaWxhbmQgYnkgdXNpbmcgYSBzaW1wbGUgbGlzdCBvZiB0aGUgeWVhciBvZiBmb3VuZGluZyBmb3IgYWxsIHRoZSBhY2NyZWRpdGVkIGNvbGxlZ2VzIGFuZCB1bml2ZXJzaXRpZXMgaW4gVGhhaWxhbmQuIEhvd2V2ZXIsIHRoZSBwYXR0ZXJuIG9mIGVucm9sbG1lbnQgaGFzIGNoYW5nZWQgaW4gcmVjZW50IHllYXJzIGNyZWF0aW5nIGEgY2xpbWF0ZSBvZiBydW1vcnMgYW5kIHNwZWN1bGF0aW9uLiBDaGFuZ2VzIGluIHRoZSBudW1iZXIgb2YgYXBwbGljYW50cywgZ3Jvd2luZyBjb21wZXRpdGlvbiBmcm9tIHNhdGVsbGl0ZSBwcm9ncmFtcyBvZiBmb3JlaWduIHVuaXZlcnNpdGllcyBhbmQgY2FyZWVyIGludGVyZXN0cyBvZiBUaGFpIHVuaXZlcnNpdHkgc3R1ZGVudHMgaGFzIGltcGFjdGVkIHRoZSBncm93dGggb2YgaGlnaGVyIGVkdWNhdGlvbiBpbiBUaGFpbGFuZC4gRXhwYW5kaW5nIHRoZSBtYXRoZW1hdGljYWwgbW9kZWwgdG8gaW5jbHVkZSB0aGVzZSBmYWN0b3JzIHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IHRvIGVsdWNpZGF0ZSB0aGUgbmF0dXJlIG9mIHRoZSBjdXJyZW50IGNyaXNpcyBhbmQgY3JlYXRlIGEgcmVhbGlzdGljIHByZWRpY3Rpb24gZm9yIGhpZ2hlciBlZHVjYXRpb24gaW4gVGhhaWxhbmQgd2l0aGluIHRoZSBuZXh0IGRlY2FkZS4NCg0KIyBJbnRyb2R1Y3Rpb24NCg0KVGhlIE1pbmlzdHJ5IG9mIFVuaXZlcnNpdHkgQWZmYWlycyBwdWJsaXNoaW5nIGxpc3RzIG9mIGFsbCBpbnN0aXR1dGVzIG9mIGhpZ2hlciBlZHVjYXRpb24gaW4gVGhhaWxhbmQuW14xXSBUaGlzIGluZm9ybWF0aW9uIGhhcyBoYXMgYmVlbiBjb21iaW5lZCB3aXRoIHRoZSB5ZWFyIG9mIGZvdW5kaW5nIHJlc3VsdGluZyBpbiBhIGRhdGFzZXQgdGhhdCB0cmFjZXMgdGhlIGhpc3Rvcnkgb2YgaGlnaGVyIGVkdWNhdGlvbiBpbiBUaGFpbGFuZCBzdGFydGluZyB3aXRoIG9wZW5pbmcgb2YgQ2h1bGFjaG9ta2xhbyBSb3lhbCBNaWxpdGFyeSBBY2FkZW15IGFuZCBNYWhhY2h1bGFsb25na29ybnJhamF2aWR5YWxheWEgVW5pdmVyc2l0eSBpbiAxODg3IHRvIHRoZSBwcmVzZW50LlteMl0gDQoNClteMV06IE9mZmljZSBvZiB0aGUgSGlnaGVyIEVkdWNhdGlvbiBDb21taXNzaW9uICgyMDE1KSBEaXJlY3Rvcnkgb2YgVGhhaSBIaWdoZXIgRWR1Y2F0aW9uIEluc3RpdHV0aW9ucy4gRGF0ZWQgU2VwdGVtYmVyIDIwMTUuIEF2YWlsYWJsZSBvbmxpbmUgYXQgaHR0cDovL2ludGVyLm11YS5nby50aC93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8wMy9UaGFpLUhFSXMtbmFtZS1saXN0Li11cGRhdGVkLlNlcHRlbWJlcjIwMTUucGRmDQoNClteMl06IExpc3Qgb2YgdW5pdmVyc2l0aWVzIGFuZCBjb2xsZWdlcyBpbiBUaGFpbGFuZC4gKDIwMTcsIEp1bmUgMTYpLiBJbiBXaWtpcGVkaWEsIFRoZSBGcmVlIEVuY3ljbG9wZWRpYS4gUmV0cmlldmVkIEp1bmUgMTksIDIwMTcgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvdy9pbmRleC5waHA/dGl0bGU9TGlzdF9vZl91bml2ZXJzaXRpZXNfYW5kX2NvbGxlZ2VzX2luX1RoYWlsYW5kJm9sZGlkPTc4NTg5NDE0NQ0KDQoNCmBgYHtyLGZpZy5oZWlnaHQ9NCxlY2hvPUZBTFNFfQ0KdW5pdiA9IHJlYWQuY3N2KCJkYXRhc2V0cy90aGFpdW5pdjIuY3N2IikNCmlueCA9IG9yZGVyKHVuaXYkeWVhcikNCmNudCA9IDE6MTY4DQpjb2xvcnMgPSBjKCIjRkYwMDAwRkYiLCAiI0ZGNjYwMEZGIiwNCiAgIiNGRkNDMDBGRiIsICIjOTlGRjAwRkYiLCAiIzAwOTkwMEZGIiwNCiAgIiMwMEZGOTlGRiIsICIjMDA5OUZGRkYiLCAiIzAwMDBGRkZGIiwNCiAgIiNDQzAwRkZGRiIsICIjRkYwMENDRkYiKQ0KcGxvdCh1bml2JHllYXJbaW54XSxjbnQsY29sPWNvbG9yc1t1bml2JHR5cGVbaW54XV0scGNoPTIwLA0KICAgICB4bGFiPSJZZWFyIG9mIEZvdW5kaW5nIiwNCiAgICAgeWxhYj0iTnVtYmVyIG9mIEluc3RpdHV0aW9ucyIsDQogICAgIG1haW49IkZpZy4gMTogR3Jvd3RoIG9mIEhpZ2hlciBFZHVjYXRpb24gaW4gVGhhaWxhbmQiKQ0KbGVnZW5kKDE4ODUsMTY1LA0KICAgICAgIGMoIlB1YmxpYyB1bml2IiwiTmF0aW9uYWwgdW5pdiIsDQogICAgICAgICAiUmFqYWJoYXQgVW5pdiIsIlJhamFtYW5nYWxhIHVuaXYiLA0KICAgICAgICAgIlB1YmxpYyBjb2xsZWdlcyIsIlByaXZhdGUgVW5pdiIsDQogICAgICAgICAiUHJpdmF0ZSBJbnN0aXQiLCJQcml2YXRlIGNvbGxlZ2VzIiwNCiAgICAgICAgICJJbnRlcmdvdiBpbnN0aXQiKSxmaWxsPWNvbG9yc1sxOjldLGJ0eT0ibiIpDQpkb3VibGluZyA9IHJlcCgwLDE2OCkNCnlyID0gdW5pdiR5ZWFyW2lueF0NCnkgPSByZXAoMTg5NywxNjgpDQpmb3IgKGkgaW4gMjoxNjgpIHsNCiBoYWxmID0gcm91bmQoaSAvIDIpDQogeVtpXSA9ICh5cltoYWxmXSArIHlyW2ldKSAvIDINCiBkb3VibGluZ1tpXSA9IHlyW2ldIC0geXJbaGFsZl0gIA0KfQ0KYGBgDQpXaGlsZSB0aGUgaW5pdGlhbCB5ZWFycyBzYXcgdGhlIGZvdW5kaW5nIG9mIG5hdGlvbmFsIGFuZCBwdWJsaWMgaW5zdGl0dXRpb25zLCB0aGUgbGFzdCAyIGRlY2FkZXMgaGFzIGJlZW4gZG9taW5hdGVkIGJ5IHRoZSBmb3VuZGluZyBvZiBuZXcgcHJpdmF0ZSBpbnN0aXR1aW9ucy4NCg0KIyBJbml0aWFsIG1hdGhlbWF0aWNhbCBtb2RlbA0KDQpUaGUgZ3Jvd3RoIHJlcHJlc2VudGVkIGluIEZpZ3VyZSAxIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIHRpbWVzZXJpZXMgY291bGQgYmUgbW9kZWxsZWQgYnkgYSBzaW1wbGUgcG9seW5vbWlhbCByZWxhdGlvbnNoaXAuIEZvciBuZWFybHkgMTAwIHllYXJzLCB0aGUgZ3JvdyBvZiBoaWdoZXIgZWR1Y2F0aW9uIGluIFRoYWkgaGFzIGNvbmZvcm1lZCB0byBhIHNlY29uZCBvciB0aGlyZCBvcmRlciBwb2x5bm9taWNhbCBjdXJ2ZSB3aXRoIGFuIGF2ZXJhZ2UgZG91YmxpbmcgdGltZSBvZiBgciByb3VuZChtZWFuKGRvdWJsaW5nWzI6MTY4XSksIDEpYCANCiRccG0kIGByIHJvdW5kKHNkKGRvdWJsaW5nWzI6MTY4XSksMSlgLiANCg0KYGBge3IsZmlnLmhlaWdodD01LGVjaG89RkFMU0V9DQp1bml2ID0gcmVhZC5jc3YoImRhdGFzZXRzL3RoYWl1bml2Mi5jc3YiKQ0KaW54ID0gb3JkZXIodW5pdiR5ZWFyKQ0KY250ID0gMToxNjgNCmNvbG9ycyA9IGMocmVwKCIjRkYwMDAwRkYiLDUpLA0KICAgICAgICAgICByZXAoIiMwMDAwRkZGRiIsMyksDQogICIjRkYwMDAwRkYiLCAiI0ZGMDAwMEZGIikNCnBsb3QodW5pdiR5ZWFyW2lueF0sY250LGNvbD1jb2xvcnNbdW5pdiR0eXBlW2lueF1dLHBjaD0yMCwNCiAgICAgeGxhYj0iWWVhciBvZiBGb3VuZGluZyIsDQogICAgIHlsYWI9Ik51bWJlciBvZiBJbnN0aXR1dGlvbnMiLA0KICAgICBtYWluPSJGaWcuIDI6IEdyb3d0aCBvZiBIaWdoZXIgRWR1Y2F0aW9uIGluIFRoYWlsYW5kIikNCnkgPSB1bml2JHllYXJbaW54XQ0KeTIgPSB5IF4yDQp5MyA9IHkgXiAzDQp5NCA9IHkgXiA0DQpsbTEgPSBsbShjbnQgfiB5KQ0KbG0gPSBsbShjbnQgfiB5ICsgeTIpDQpsbTMgPSBsbShjbnQgfiB5ICsgeTIrIHkzKQ0KbGVnZW5kKDE4ODUsMTYwLA0KICAgICAgIGMoIlB1YmxpYy9uYXRpb25hbCB1bml2IiwiUHJpdmF0ZSBpbnN0aXR1dGlvbnMiKSwNCiAgICAgICAgIGZpbGw9Y29sb3JzWzU6Nl0sYnR5PSJuIikNCg0KbSA9IGNiaW5kKHJlcCgxLDE2OCkseSx5MikNCmxpbmVzKHksIG0gJSolIGxtJGNvZWZmaWNpZW50cyxsd2Q9NCxjb2w9IiM2NjMzMDA5OSIpDQp0ZXh0KDE5NzUsMTAsDQogICAgIGV4cHJlc3Npb24obnVtID09IDUuMzYzJSolMTBeMyAtIDUuNjIxJSolMTBeMSAqIHlyICsgMS40NyAlKiUgMTBeey0yfSp5cl4yKSwNCiAgICAgY29sPSIjNjYzMzAwIikNCg0KbSA9IGNiaW5kKHJlcCgxLDE2OCkseSx5Mix5MykNCmxpbmVzKHksIG0gJSolIGxtMyRjb2VmZmljaWVudHMsbHdkPTQsY29sPSIjMDAwMDk5OTkiKQ0KdGV4dCgxOTM1LDExMCwNCiAgICAgZXhwcmVzc2lvbihudW0gPT0gLTUuNDkyICUqJSAxMF41ICsgOC42OTcgJSolIDEwXjIgKiB5ciAtIDAuNDU5MiAlKiUgMTBeey0xfSAqIHlyXjIgKyA4LjA4ICUqJSAxMF57LTV9ICogeXJeMyksDQogICAgIGNvbD0iZGFya2JsdWUiKQ0KYGBgDQpJdCBpcyByZW1hcmthYmxlIHRoYXQgZGVzcGl0ZSB0aGUgc2lnbmlmaWNhbnQgcG9saXRpY2FsIGNoYW5nZXMgdGhhdCBvY2N1cnJlZCBvdmVyIHRoYXQgcGVyaW9kIG9mIGhpc3RvcnksIHRoZSBzdGFuZGFyZCBlcnJvciBpbiB0aGUgcHJlZGljdGVkIHZhbHVlcyBmb3IgYm90aCAybmQgYW5kIDNyZCBvcmRlciBwb2x5bm9taWFscyBhcmUgaXMgNSBpbnN0aXR1dGVzLg0KVGhlIHRvdGFsIHJhbmdlIG9mIHJlc2lkdWFsIGVycm9ycyBmb3IgdGhlIHByZWRpY3RlZCBudW1iZXJzIGJ5IGVpdGhlciBtb2RlbHMgaXMgJFxwbSQgMTIgaW5zdGl0dXRpb25zLiBUaGlzIGNvbnNpc3RlbmN5IGlzIHJlbWFya2FibGUgYW5kIHNlcnZlcyBhcyBhIHRlc3RpbW9ueSB0byB0aGUgbG9uZyBzdGFuZGluZyBjb21taXRtZW50IHdpdGhpbiBUaGFpIGZvciBkZXZlbG9waW5nIGhpZ2hlciBlZHVjYXRpb24gc3lzdGVtLg0KDQpgYGB7cixlY2hvPUZBTFNFfQ0KcGxvdCh5cixkb3VibGluZyxjb2w9Y29sb3JzW3VuaXYkdHlwZV0scGNoPTE5LA0KICAgICB4bGFiPSJZZWFyIG9mIEZvdW5kaW5nIix5bGFiPSJEb3VibGluZyB0aW1lICh5cnMpIiwNCiAgICAgbWFpbj0iRmlnLiAzOiBEb3VibGluZyByYXRlIG9mIEhpZ2hlciBFZHVjYXRpb24gaW4gVGhhaWxhbmQiKQ0KDQpsZWdlbmQoMTg4NSwzNSwNCiAgICAgICBjKCJQdWJsaWMvbmF0aW9uYWwgdW5pdiIsIlByaXZhdGUgaW5zdGl0dXRpb25zIiksDQogICAgICAgICBmaWxsPWNvbG9yc1s1OjZdLGJ0eT0ibiIpDQpgYGANCg0KV2hpbGUgdGhlcmUgaGFzIGJlZW4gYSBzdXN0YWluZWQgY29tbWl0dGVkIGVmZm9ydCB0byBidWlsZCBhIHN5c3RlbSBvZiBoaWdoZXIgZWR1Y2F0aW9uLCBwbG90dGluZyB0aGUgZWZmZWN0aXZlIGRvdWJsaW5nIHJhdGUgb3ZlciB0aW1lIGNsZWFybHkgZGVtb25zdHJhdGVzIHRoYXQgaGlzdG9yaWNhbCBldmVudHMgZGlkIGhhdmUgZWZmZWN0IG9uIHRoZSBkZXZlbG9wbWVudC4gVGhlIGdhcHMsIHNsb3dkb3ducyBhbmQgc3VyZ2VzIHNob3duIGluIEZpZy4gMyBhcHBlYXIgdG8gY29ycmVzcG9uZCB0byBpbXBvcnRhbnQgaGlzdG9yaWNhbCBldmVudHMgd2hpY2ggaGF2ZSBpbXBhY3RlZCBib3RoIHRoZSBjb3VudHJ5IGFuZCBpdHMgaGlnaGVyIGVkdWNhdGlvbiBzeXN0ZW06W14zXQ0KDQpbXjNdOiBCYWtlciwgQ2hyaXN0b3BoZXI7IFBob25ncGFpY2hpdCwgUGFzdWsgKDIwMDUpLiBBIEhpc3Rvcnkgb2YgVGhhaWxhbmQuIFVuaXRlZCBLaW5nZG9tOiBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcy4NCg0KKiAxOTEyOiBUaGUgUHJpbmNlIFJldm9sdCBwbG90dGVkIGJ5IHlvdW5nIG1pbGl0YXJ5IG9mZmljZXJzIGluIGFuIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0IHRvIG92ZXJ0aHJvdyBhbmQgcmVwbGFjZSB0aGUgS2luZy4NCg0KKiAxOTMyOiBTaWFtZXNlIGNvdXAgZCdldGF0IHdoaWNoIHJlc3VsdGVkIGluIHRoZSB0cmFuc2l0aW9ucyBvZiBmcm9tIGFuIGFic29sdXRlIG1vbmFyY2h5IHRvIGEgY29uc3RpdHV0aW9uYWwgbW9uYXJjaHkNCg0KKiAxOTc2OiBhIHZpb2xlbnQgY2xhc2ggd2l0aCBzdHVkZW50IHByb3Rlc3RlcnMgdGhhdCBsZWFkIHRvIGEgYmxvb2R5IGNyYWNrZG93biBmb2xsb3dlZCBieSBudW1lcm91cyBtZWFzdXJlcyB0byByZWR1Y2UgYW55IGNoYW5jZSBmb3IgZnV0dXJlIHN0dWRlbnQgdXByaXNpbmdzDQoNCiogMTk4NDogUGF5YXAgVW5pdmVyc2l0eSB3YXMgdGhlIGZpcnN0IHByaXZhdGUgY29sbGVnZSB0byBiZSBncmFudGVkIHVuaXZlcnNpdHkgc3RhdHVzIHBhdmluZyB0aGUgd2F5IGZvciBvdGhlciBwcml2YXRlIHVuaXZlcnNpdGllcyB0byBhcmlzZSBhcyBzaG93biBpbiBGaWd1cmUgMi4NCg0KKiAxOTk3OiB0aGUgdmFsdWUgb2YgdGhlIGJhaHQgd2FzIGRldmFsdWVkIGZyb20gMjUgYmFodC9VU0QgdG8gNTYgYmFodC9VU0QgdHJpZ2dlcmluZyB0aGUgMTk5NyBBc2lhbiBGaW5hbmNpYWwgQ3Jpc2lzIGFzIHdlbGwgYXMgYSBzdWRkZW4gZHJvcCBpbiB0aGUgYmlydGggcmF0ZSBjYXVzaW5nIGJvdGggc2hvcnQgYW5kIGxvbmcgdGVybSBjaGFuZ2VzIGluIHN0dWRlbnQgZW5yb2xsbWVudHMuDQoNCg0KSG93ZXZlciBpbiB0aGUgcGFzdCAxNSB5ZWFycywgdGhlIHJhdGUgb2Ygb3BlbmluZyBuZXcgaW5zdGl0dXRpb25zIGhhcyBzaWduaWZpY2FudGx5IHNsb3dlZCBpbiBhIGZhc2hpb24gdHlwaWNhbCBmb3IgcGhlbm9tZW5hIG5lYXJpbmcgdGhlICBsaW1pdHMgdG8gZ3Jvd3RoLlteNF0gSW4gMjAxNCwgdGhlcmUgd2VyZSBuZXdzcGFwZXIgcmVwb3J0cyB0aGF0IG51bWJlciBvZiBhcHBsaWNhdGlvbnMgZmVsbCBiZWxvdyB0aGUgbnVtYmVyIG9mIGVudHJhbmNlIHBvc2l0aW9ucyBhdmFpbGFibGUuIEluIDIwMTUsIHVuaXZlcnNpdGllcyBjb3VsZCBhY2NvbW1vZGF0ZSAxNTYsMjE2IGJ1dCBvbmx5IDEwNSwwNDYgYXBwbGllZCB0byB0YWtlIHRoZSBlbnRyYW5jZSBleGFtcyBjb3JyZXNwb25kaW5nIHRvIDY3JSBvZiB0aGUgY2FwYWNpdHkuIA0KVGhlIE9mZmljZSBvZiBIaWdoZXIgRWR1Y2F0aW9uIENvbW1pc3Npb24gaGFzIGFsc28gcmVwb3J0ZWQgdGhhdCB0aGUgbnVtYmVyIG9mIHVuaXZlcnNpdHkgc3R1ZGVudHMgaW4gVGhhaWxhbmQgcGVha2VkIGluIDIwMTMgYW5kIG1vcmUgcmVjZW50IHllYXJzIGhhdmUgZmFsbGVuIHNob3J0IG9mIHdoYXQgdGhlICBwcmV2aW91cyBtb2RlbHMgd291bGQgc3VnZ2VzdC5bXjZdIEFzIHNob3duIGluIEZpZy4gNSwgVGhhaWxhbmQgaGFzIGVudGVyZWQgYW4gZXJhIHdoZXJlIHRoZSBzdXBwbHkgb2Ygb3Bwb3J0dW5pdGllcyBmb3IgaGlnaGVyIGVkdWNhdGlvbiBleGNlZWRzIGRlbWFuZCBhbmQgY2FuIG5vIGxvbmdlciBkZXBlbmQgb24gdGhlIGxlZ2VuY3kgb2YgdGhlIHByZXZpb3VzIGNlbnR1cnkgYXMgaXQgbG9va3MgdG8gdGhlIGZ1dHVyZS5UaGUgZm9yZXNlZWFibGUgZnV0dXJlIHdpbGwgYmUgZG9taW5hdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVsYXRpb25zaGlwOiANCg0KJCROdW1fe1NlYXRzfSA+IE51bV97QXBwbGljYW50c30kJA0KDQpbXjRdOiBEb25lbGxhIE1lYWRvd3MsIEpvcmdlbiBSYW5kZXJzIGFuZCBEZW5uaXMgTWVhZG93cyAoMjAwNCkgTGltaXRzIHRvIEdyb3d0aDogVGhlIDMwLVllYXIgVXBkYXRlLiBDaGVsc2VhIEdyZWVuIFB1Ymxpc2hpbmcNClteNV06IER1bXJvbmdraWF0IE1hbGEgKDIwMTYpLiAiVW5pcyBmYWNlIGNyaXNpcyBhcyBzdHVkZW50cyB0dXJuIGF3YXkiLiBCYW5na29rIFBvc3QuIFJldHJpZXZlZCAxMyBKdW5lIDIwMTYuDQpbXjZdOiBPZmZpY2Ugb2YgdGhlIEhpZ2hlciBFZHVjYXRpb24gQ29tbWlzc2lvbiAoMjAxNikgVGhhaSBIaWdoZXIgRWR1Y2F0aW9uOiBGYWN0IGFuZCBGaWd1cmVzLiBCdXJlYXUgb2YgSW50ZXJuYXRpb25hbCBDb29wZXJhdGlvbiBTdHJhdGVneSwgT2ZmaWNlIG9mIHRoZSBIaWdoZXIgRWR1Y2F0aW9uIENvbW1pc3Npb24gKE9IRUMpIEp1bHkgMjAxNiBBdmFpbGFibGUgb25saW5lIGF0IDkgSnVuZSAyMDE3IGh0dHA6Ly9pbnRlci5tdWEuZ28udGgvd3AtY29udGVudC91cGxvYWRzLzIwMTYvMDcvVGhhaS1IRS1mYWN0LWZpZ3VyZXNfZWRpdGVkLnBkZg0KDQoNCmBgYHtyLGVjaG89RkFMU0V9DQp5ZWFycyA9IGMoMjAxMToyMDE1KQ0Ka3N0dWRlbnRzID0gYygyMTUwLDIyMjIsMjI5OCwyMDI0LDIwMjUpDQoNCnBsb3QoeWVhcnMsa3N0dWRlbnRzLA0KICAgICBtYWluPSJGaWcuIDU6IFN0dWRlbnRzIGluIFRoYWkgSGlnaGVyIEVkdWNhdGlvbiIsDQogICAgIGNvbD0iYmx1ZSIseGxhYj0iWWVhciIseWxhYj0iVGhvdXNhbmRzIG9mIHN0dWRlbnRzIiwNCiAgICAgdHlwZT0iYiIscGNoPTE5LGx3ZD00LA0KICAgICB5bGltPWMoMTk3NSwyNDAwKSx4bGltPWMoMjAxMC43NSwyMDE1LjI1KSkNCiAgICAgdGV4dCh5ZWFycyxjKDIxNTAsMjIyMiwgMjI5OCwNCiAgICAgICAgICAgICAgICAgIDIwMjQtOTAsMjAyNS05MCkrNTAsDQogICAgICAgICAga3N0dWRlbnRzLGNvbD0iZGFya2JsdWUiKQ0KDQpgYGANCg0KQ2hhbmdpbmcgZGVtb2dyYXBoaWNzIHBsYXkgYSBtYWpvciBwYXJ0IGluIHRoaXMgY2hhbmdlLg0KQWNjb3JkaW5nIHRvIGJvdGggdGhlIFdvcmxkIEJhbmtbXjddIGFuZCB0aGUgQ0lBW144XSwgYmlydGggcmF0ZSB3aWxsIGNvbnRpbnVlIHRvIGRyb3Agb3ZlciB0aGUgbmV4dCBkZWNhZGUuIEluIGZhY3QgYXMgc2hvd24gYnkgZm9sbG93aW5nIGdyYXBoLCB0aGUgb3ZlcmFsbCBkcm9wIG92ZXIgdGhlIG5leHQgdGVuIHllYXIgcGVyaW9kIGlzIGV4cGVjdGVkIHRvIGJlIDMwJS4NCg0KW143XTogVGhlIFdvcmxkIEJhbmsgKDIwMTYpIFdvcmxkIERldmVsb3BtZW50IEluZGljYXRvcnM6IFRoYWlsYW5kIFJldHJpZXZlZCBKdW5lIDIwLCAyMDE3IGZyb20gaHR0cDovL2RhdGEud29ybGRiYW5rLm9yZy9jb3VudHJ5L3RoYWlsYW5kDQoNClteOF06IENlbnRyYWwgSW50ZWxsaWdlbmNlIEFnZW5jeSAoMjAxNikgVGhlIFdvcmxkIEZhY3Rib29rOiBUaGFpbGFuZCBhZ2Ugc3RydWN0dXJlLiBSZXRyaWV2ZWQgSnVuZSAyMCwgMjAxNyBmcm9tIGh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rL2dlb3MvdGguaHRtbA0KDQohW1RoYWlsYW5kIFBvcHVsYXRpb24gUHlyYW1pZF0oaW1nL3RoYWlsYW5kLXBvcC1weXJhbWlkLTIwMTYuZ2lmKVteOF0NCg0KSW4gTWF5IDIwMTcsIHNldmVyYWwgY2FiaW5ldCBtaW5pc3RlciBhbm5vdW5jZWQgdGhlaXIgaW50ZW50aW9ucyB0byBvcGVuIHRoZSBTcGVjaWFsIEVjb25vbWljIFpvbmVzIGZvciBsb2NhdGluZyBzYXRlbGxpdGUgY2FtcHVzZXMgb2YgZm9yZWlnbiB1bml2ZXJzaXRpZXMuW145XSBBZGRpbmcgbmV3IGluc3RpdHV0ZXMgaW4gYSBzZWFzb24gb2Ygb3ZlcnN1cHBseSBoYXMgcmlnaHRmdWxseSBzcGFya2VkIGNvbmNlcm4uIEl0IHdhcyBldmVuIGJlZW4gc3VnZ2VzdGVkIHRoYXQgaW4gdGhlIHdvcnN0IGNhc2Ugd2l0aGluIHRoZSBuZXh0IGRlY2FkZSA3NSUgb2YgdGhlIGN1cnJlbnQgaW5zdGl0dXRpb25zIG9mIGhpZ2hlciBlZHVjYXRpb24gY291bGQgYmUgY2xvc2VkLlteMTBdIEhvd2V2ZXIsIA0KdGhlIHNha2VzIGFyZSBoaWdoIGFzIGEgd3JvbmcgZGVjaXNpb24gd2lsbCBlaXRoZXIgZGVwcml2ZSB0aGUgY291bnRyeSBvZiBpbXBvcnRhbnQgbmV3IGVjb25vbWljIGFuZCBhY2FkZW1pYyBvcHBvcnR1bml0aWVzIG9yIHdpbGwgZHJpdmUgYSBsYXJnZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgaW5zdGl0dXRpb25zIG9mIGhpZ2hlciBsZWFybmluZyBpbnRvIGJhbmtydXBjeS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyByZXBvcnQgaXMgdG8gdXNlIG1hdGhlbWF0aWNhbCBtb2RlbGluZyB0byBhdHRlbXB0IHRvIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGlzIHF1ZXN0aW9uLiAgDQoNClteOV06IFJveWFsIFRoYWkgRW1iYXNzeSAoMjAxNykgVG9wIFUuUy4gdW5pdmVyc2l0aWVzIHNob3cgaW50ZXJlc3QgaW4gb3BlbmluZyBUaGFpIGNhbXB1c2VzLiBBdmFpbGFibGUgb25saW5lIGF0IGh0dHA6Ly90aGFpZW1iZGMub3JnLzIwMTcvMDUvMjkvdG9wLXUtcy11bml2ZXJzaXRpZXMtc2hvdy1pbnRlcmVzdC1pbi1vcGVuaW5nLXRoYWktY2FtcHVzZXMvDQoNClteMTBdOiAgRHVtcm9uZ2tpYXQgTWFsYSAgKDIwMTcpLiA3NSUgb2YgVGhhaSB1bml2ZXJzaXRpZXMgY291bGQgY2xvc2UgYXMgZW5yb2xsbWVudCBmYWxscyBhbmQgZm9yZWlnbiBjb21wZXRpdGlvbiBoZWF0cyB1cCBGYWxsIGluIGVucm9sbWVudCBudW1iZXJzIGEgJ3dha2UtdXAgY2FsbCcgQmFuZ2tvayBQb3N0IDIyIE1heSAyMDE3IFBvc3RlZCBvbmxpbmUgYXQgaHR0cHM6Ly90LmNvL1RldEFaVDh5aGgNCg0KIyBGb3JlY2FzdGluZyB0aGUgbmV4dCBkZWNhZGUNCg0KTWF0aGVtYXRpY2FsIG1vZGVsbGluZyB3YXMgYXR0ZW1wdGVkIHVzaW5nIGEgc2hvcnRlZCB0aW1lIHBlcmlvZCB3aXRoIGRhdGEgbW9yZSByZXByZXNlbnRhdGl2ZSBvZiB0aGUgY3VycmVudCBjb25kaXRpb25zLg0KRmlnIDIgc2hvd3MgdGhhdCBhIHByb2dyZXNzaXZlIGRldmlhdGlvbiBmcm9tIHRoZSBnZW5lcmFsIHRyZW5kIHRoYXQgZmlyc3QgYXBwZWFycyBhdCB0aGUgdHVybiBvZiB0aGUgY2VudHVyeS4gRmlnIDYgc2hvd3MgdGhlIG1vZGVscyBiYXNlZCBncm93dGggb2YgaGlnaGVyIGVkdWNhdGlvbiBzaW5jZSB0aGUgeWVhciAyMDAwLiBUaGUgU3RhbmRhcmQgRXJyb3IgYW5kICRSXjIkIGZvciB0aGlzIG1vZGVsIGFyZSAxLjYgYW5kIDAuOTY3LCByZXNwZWN0aXZlbHkuIA0KDQpgYGB7cixmaWcuaGVpZ2h0PTUsZWNobz1GQUxTRX0NCmlueCA9IG9yZGVyKHVuaXYkeWVhcikNCnkgPSB1bml2JHllYXJbaW54XQ0KbDI3eSA9IHlbeSA+IDIwMDBdDQpsMjdjbnQgPSBjKDE6MTY4KVt5ID4gMjAwMF0NCmwyN3R5cGUgPSB1bml2JHR5cGVbaW54XVt5PjIwMDBdDQpsMjdsZW4gPSBsZW5ndGgobDI3eSkNCmNvbG9ycyA9IGMocmVwKCIjRkYwMDAwRkYiLDUpLA0KICAgICAgICAgICByZXAoIiMwMDAwRkZGRiIsMyksDQogICIjRkYwMDAwRkYiLCAiI0ZGMDAwMEZGIikNCnBsb3QobDI3eSxsMjdjbnQsY29sPWNvbG9yc1tsMjd0eXBlXSxwY2g9MjAsDQogICAgIHhsYWI9IlllYXIgb2YgRm91bmRpbmciLHhsaW09YygyMDAxLDIwMjUpLA0KICAgICB5bGFiPSJOdW1iZXIgb2YgSW5zdGl0dXRpb25zIix5bGltPWMoMTMwLDE3NSksDQogICAgIG1haW49IkZpZy4gNjogR3Jvd3RoIG9mIEhpZ2hlciBFZHVjYXRpb24gaW4gVGhhaWxhbmQiLHN1Yj0iRG90dGVkIGxpbmVzIHJlcHJlc2VudCA5NSUgY29uZmlkZW5jZSBsaW1pdHMiKQ0KbDI3eTIgPSBsMjd5IF4yDQpsMjdsbSA9IGxtKGwyN2NudCB+IGwyN3kgKyBsMjd5MikNCmxlZ2VuZCgyMDAxLDE3NSwNCiAgICAgICBjKCJQdWJsaWMvbmF0aW9uYWwgdW5pdiIsIlByaXZhdGUgaW5zdGl0dXRpb25zIiksDQogICAgICAgICBmaWxsPWNvbG9yc1s1OjZdLGJ0eT0ibiIpDQp0eSA9IHNlcSgyMDAxLDIwMjUsMC4xKQ0KDQptID0gY2JpbmQocmVwKDEsbGVuZ3RoKHR5KSksdHksdHleMikNCnZhbCA9IG0gJSolIGwyN2xtJGNvZWZmaWNpZW50cw0KZXJyID0gbSAlKiUgKGwyN2xtJGNvZWZmaWNpZW50cyAqIDAuMDIpICsgKGFicyh0eS0yMDEwKSowLjAxLzYpXjIqKHR5LTIwMTUpKih0eS0yMDE1KSoxMjANCmxpbmVzKHR5LHZhbCxsd2Q9Myxjb2w9IiMwMDAwNjY5OSIpDQpsaW5lcyh0eSx2YWwgKyBlcnIsbHdkPTEsY29sPSIjNjYwMDY2Q0MiLGx0eT0yKQ0KbGluZXModHksdmFsIC0gZXJyLGx3ZD0xLGNvbD0iIzY2MDA2NkNDIixsdHk9MikNCg0KdGV4dCgyMDE1LDE1MCwNCiAgICAgZXhwcmVzc2lvbihudW0gPT0gLTUuMjIlKiUxMF41ICsgNS4xOCUqJTEwXjIgKiB5ciAtIDEuMjkgJSolIDEwXnstMX0qeXJeMiksDQogICAgIGNvbD0iZGFya2JsdWUiKQ0KYGBgDQoNCkV2ZW4gdGhvdWdoIHRoZSBsaXN0IG9mIHRoZSB5ZWFyIG9mIGZvdW5kaW5nIGZvciBhY2NyZWRpdGVkIGluc3RpdHV0ZXMgb2YgaGlnaGVyIGVkdWNhdGlvbiBpbiBUaGFpbGFuZCBpcyBhbiBpbmRpcmVjdCBtZWFzdXJlLCB0aW1lc2VyaWVzIGFuYWx5c2lzIG9mIHRoaXMgaW5mb3JtYXRpb24gY29ycmVjdGx5IGlkZW50aWZpZXMgMjAxNCBhcyB0aGUgdGlwcGluZyBwb2ludCBhdCB3aGljaCB0aGUgbnVtYmVyIG9mIHBsYWNlcyBleGNlZWRlZCB0aGUgbnVtYmVyIG9mIGFwcGxpY2FudHMuIFRoZSBwcmVkaWN0aW9uIGN1cnZlIGRvZXMgc3VnZ2VzdCB0aGF0DQp3aXRoIDk1JSBjb25maWRlbmNlIGl0IGlzIHVubGlrZWx5IHRoYXQgbmV3IGluc3RpdHV0aW9ucyB3aWxsIGJlIG9wZW5lZCBhbnkgdGltZSBzb29uLiBBdCB0aGUgc2FtZSB0aW1lIHRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHRoZSBzdWdnZXN0aW9uIHRoYXQgNzUlIG9mIHRoZSBpbnN0aXR1dGlvbnMgd2lsbCBnbyBiYW5rcnVwdC4NCg0KQW5vdGhlciBhcHByb2FjaCB3b3VsZCBiZSBuZWVkZWQgdG8gcXVhbnRpZnkgdGhlIGV4cGVjdGVkIHBlbmRpbmcgbG9zcyBkdWUgdG8gY2hhbmdpbmcgZGVtb2dyYXBoaWNzLiBUaGUgZmFjdCBzaGVldCBvZiB0aGUgT2ZmaWNlIG9mIEhpZ2hlciBFZHVjYXRpb24gQ29tbWlzc2lvbiBzdGF0ZXMgdGhhdCB0aGVyZSBhcmUgY3VycmVudGx5IDIsMDI1LDIzNCBzdHVkZW50cyBzdHVkeWluZyBpbiAxOCw4MzQgZWR1Y2F0aW9uYWwgcHJvZ3JhbXMgdGF1Z2h0IGJ5IDE4OSwzNzUgaW5zdHJ1Y3RvcnMgd29ya2luZyBhdCAxNTUgaW5zdGl0dXRpb25zIGluIFRoYWlsYW5kLiBUaGVzZSBzdGF0aXN0aWNzIHJlcHJlc2VudCBhY2NyZWRpdGVkIHByb2dyYW1zIHRoYXQgbWVldCB0aGUgc3RhbmRhcmRzIG9mIHRoZSBPSEVDIGFuZCByZXByZXNlbnQgdGhlIGdlbmVyYWwgbmF0dXJlIG9mIA0KaW5zdGl1dGVzIG9mIGhpZ2hlciBlZHVjYXRpb24gaW4gVGhhaWxhbmQuIEluIGFkZGl0aW9uLCBwcml2YXRlIGluc3RpdHV0ZXMgcmVwcmVzZW50IDc1IChvciA0MCUpIG9mIHRoZSBpbnN0aXR1dGVzIGFuZCAgMjgzLDUzMiAob3IgMTQlKSBvZiB0aGUgc3R1ZGVudHMuIFRoZXNlIGZpZ3VyZXMgcHJvdmlkZSB0aGUgYmFzaXMgb2Yga2V5IHJhdGlvcyB1c2VkIHRvICBjYWxjdWxhdGUgdGhlIGV4cGVjdGVkIGZ1dHVyZXMuDQoNCnxQYXJhbWV0ZXJzIHwgQ2FsY3VsYXRpb24gfCBSYXRpbyB8DQp8Oi0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS06fA0KfCBBdmVyYWdlIGVucm9sbG1lbnQgcGVyIHByaXZhdGUgaW5zdGl0dXRlIHwgJDI4Myw1MzJcb3ZlciA3NSQgfCAzLDc4MCB8DQp8IEF2ZXJhZ2UgZW5yb2xsbWVudCBwZXIgcHVibGljIGluc3RpdHV0ZSB8ICQxLDc0MSw3MDFcb3ZlciA4MCQgfCAzMjEsNzcxIHwNCkF2ZXJhZ2UgZW5yb2xsbWVudCBwZXIgc3R1ZHkgcHJvZ3JhbSB8ICQyLDAyNSwyMzRcb3ZlciAxOCw4MzQkIHwgIDEwNyAgfA0KQXZlcmFnZSBlbnJvbGxtZW50IHBlciBzdGFmZiBwZXJzb24gfCAkMiwwMjUsMjM0IFxvdmVyIDE4OSwzNzUkIHwgMTAuNSB8DQpBdmVyYWdlIHN0YWZmIHBlciBzdHVkeSBwcm9ncmFtIHwgJDE4OSwzNzVcb3ZlciAxOCw4MzQkIHwgMTAuMSB8DQoNCkZpZyA3LiBpcyBhIHNpbXVsYXRlZCBkaXN0cmlidXRpb24gYmFzZWQgb24gdGhlIE9IRUMgaW5mb3JtYXRpb24gY29tYmluZWQgd2l0aCB0dWl0aW9uIGRhdGEgZm91bmQgZm9yIDMgcHJpdmF0ZSBhbmQgMyBwdWJsaWMgaW5zdGl0dXRpb25zLiBUaGUgaWRlYSBpcyB0byBkZW1vbnN0cmF0ZSB0aGUgcmFuZ2VzIG9mIGZlZXMgcGFpZCBieSBzdHVkZW50cyBpbiB2YXJpb3VzIGRlcGFydG1lbnRzIHdpdGhpbiBwcml2YXRlIGFuZCBwdWJsaWMgaW5zdGl0dXR1dGlvbnMuIFdoaWxlIGl0IHdhcyBwb3NzaWJsZSB0byBpZGVudGlmeSB0aGUgdHVpdGlvbiBmb3IgdmFyaW91cyBkZWdyZWUgcHJvZ3JhbXMsIHRoZXJlIHdhcyBubyB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXJzIGVucm9sbGVkIGluIGVhY2ggZGVwYXJ0bWVudC4gVGhpcyBncmFwaGljIHdhcyBkcmF3IGFzc3VtaW5nIHRoZSBlcXVhbCBkaXN0cmlidXRpb24gZm9yIGVhY2ggZGVwYXJ0bWVudC4NCg0KYGBge3IsZWNobz1GQUxTRX0NCnJwdWIgPSBjKHJub3JtKDEwMDAsMjUsNSksIHJub3JtKDc0MSw0MCwxNSkpDQpycHJpID0gYyhybm9ybSgyMDAsNTAsMTIpLCBybm9ybSg4Myw3MCwxMCkpDQoNCnR1aXQgPSBhcy5pbnRlZ2VyKGMocnB1YixycHJpKS8xMCkqMTANCnR1aXRbdHVpdCA8IDEwXSA9IDEwDQp0dWl0W3R1aXQgPiA5MF0gPSA5MA0KZGF0ID0gYXMuZGF0YS5mcmFtZSgNCiAgY2JpbmQodHVpdCwNCiAgICAgICAgYyhyZXAoIlB1YiIsMTc0MSkscmVwKCJQcmkiLDI4MykpKSkNCmNvbG5hbWVzKGRhdCk9YygiVHVpdGlvbiIsIlR5cGUiKQ0KDQp0ID0gdGFibGUoZGF0JFR1aXRpb24sZGF0JFR5cGUpDQptb3NhaWNwbG90KHQsIGNvbD1jKCJibHVlIiwicmVkIiksDQogICAgICBtYWluPSJGaWcgNy4gVHVpdGlvbiBwYWlkIGZvciBoaWdoZXIgZWR1Y2F0aW9uIiwgDQogICAgICkNCmBgYA0KDQpUYWJsZSAyIHByb3ZpZGVzIGEgZm9yZWNhc3QgYmFzZWQgb24gdGhlIGV4cGVjdGVkIDMwJSByZWR1Y3Rpb24gaW4gc3R1ZGVudCBwb3B1bGF0aW9uIGFzIHN1Z2dlc3RlZCBieSBkZW1vZ3JhcGhpYyBpbmZvcm1hdGlvbiBjaXRlZCBhYm92ZS5bXjZdIGFuZCBhbiAgYXNzdW1wdGlvbiBpcyBzdHVkZW50cyB3aWxsIGNvbnRpbnVlIHRvIHNob3cgdGhlIHNhbWUgMyBmb2xkIHByZWZlcmVuY2UgaW4gY2hvb3Npbmcgc3Vic2lkaXplZCBwdWJsaWMgZWR1Y2F0aW9uIG92ZXIgcHJpdmF0ZSBlZHVjYXRpb24gd2hlbmV2ZXIgdGhleSBjYW4uIA0KDQp8IFBhcmFtZXRlciB8IDIwMTU8YnI+KGFjdHVhbCkgfCAyMDIwPGJyPihleHBlY3RlZCkgfCAyMDI1PGJyPihleHBlY3RlZCl8DQp8Oi0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tOnw6LS0tLS0tLS06fDotLS0tLS0tLTp8DQp8IFRvdGFsIGVucm9sbG1lbnQgfCAyLDAyNSwyMzQgfCAxLDcyMSw0NDk8YnI+KC0xNSUpIHwgMSw0MTcsNjY0IDxicj4oLTMwJSl8DQp8IFB1YmxpYyBlbnJvbGxlbWVudCB8IDEsNzQxLDcwMXwxLDU2NiwwMjk8YnI+KC0xMCUpIHwgIDEzMzIxODMgPGJyPiAoLTI0JSl8DQp8IFByaXZhdGUgZW5yb2xsbWVudCB8IDI4Miw1MzIgfCAxNTUsNDIxPGJyPigtNDUlKSB8IDg1NDgxPGJyPigtNzAlKSB8DQp8UHVibGljIHN0YWZmIHwgMTY1LDg3NiB8ICAxNDksMTQ1IHwgMTI2LDg3NSB8DQp8UHJpdmF0ZSBzdGFmZiB8IDI2LDkwNyB8IDE0LDgwMiB8IDgsMTQxIHwNCnxQdWJsaWMgZGVncmVlIHByb2dyYW1zIHwgMTYsNDIzIHwgMTQsNzY3IHwgMTIsNTYyIHwNCnxQcml2YXRlIGRlZ3JlZSBwcm9ncmFtcyB8IDIsNjY0IHwgMSw0NjUgfCA4MDYgDQp8IEV4cGVjdGVkIHB1YmxpYyBwcm9ncmFtIGNsb3N1cmUgfCB8IDEwJSB8IDI0JSB8DQp8IEV4cGVjdGVkIHByaXZhdGUgcHJvZ3JhbSBjbG9zdXJlIHwgfCA0NSUgfCA3MCUgfA0KDQpQcm9mZXNzaW9uYWwgZGVncmVlcyBzdWNoIGFzIG1lZGljaW5lIGFjY291bnQgZm9yIHRoZSBoaWdoZXIgY29zdCBwdWJsaWMgcHJvZ3JhbXMgYW5kIHRoZXkgd291bGQgYmUgZXhwZWN0ZWQgdG8gY29udGludWUgdG8gZW5qb3kgbmVhcmx5IGNvbnN0YW50IGVucm9sbG1lbnQuIEFzIGlsbHVzdHJhdGVkIGluIEZpZyA3LCBwcml2YXRlIGluc3RpdHV0aW9ucyBhbmQgcHJvZ3JhbXMgYXJlIGV4cGVjdGVkIHRvIGJlIHN1YmplY3QgdG8gaGlnaGVyIHJpc2sgb2YgY2xvc3VyZSBkdWUgdGhlaXIgc21hbGxlciBwb29sIG9mIHN0dWRlbnRzIGFuZCB0aGVpciBoaWdoZXIgdHVpdGlvbnMgY29tcGFyZWQgdG8gcHVibGljIGluc3RpdHV0aW9ucyB3aG9zZSB0dWl0aW9ucyBpcyBsb3dlcmVkIGJ5ICBnb3Zlcm5tZW50IHN1YnN0aWRpZXMgYW5kIGdyYW50cy4gVGhlc2UgZGF0YSB3b3VsZCBzdWdnZXN0IHRoYXQgNzAlIG9mIHRoZSBhY2FkZW1pYyBwcm9ncmFtcyBvZiB0aGUgcHJpdmF0ZSBzZWN0b3IgYXJlIGF0IHJpc2suDQoNClVuZGVyIHN1Y2ggY29uZGl0aW9ucywgYW55IHN1Y2Nlc3NmdWwgbmV3IGFjYWRlbWljIHByb2dyYW0gd2lsbCBjb21wZXRlIHdpdGggZXhpc3RpbmcgcHJvZ3JhbXMgYW5kIG92ZXIgdGltZSB3aWxsIHJlc3VsdCBpbiB0aGUgY2xvc3VyZSBvZiBhbm90aGVyIHNpbWlsYXIgcHJvZ3JhbS4gQXQgdGhlIHNhbWUgdGltZSBvcGVuaW5nIG5ldyBwcm9ncmFtcyB3aWxsIHByb3ZpZGUgbmV3IG9wcG9ydHVuaXRpZXMgdG8gdXBncmFkZSBpbnN0cnVjdGlvbiBhbmQgb3BlbiBuZXcgZGlzY2lwbGluZXMgdG8gc3VwcG9ydCBjaGFuZ2VzIGluIHRoZSB3b3JrcGxhY2UuIA0KDQojIE90aGVyIGZhY3RvcnMgdG8gYmUgY29uc2lkZXJlZA0KDQoqIEZpbmFuY2FsIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGhhcmQgZm9yIGEgbnVtYmVyIG9mIHllYXJzLiBXaGlsZSB0aGUgY29uZGl0aW9ucyB3b3VsZCBoYXZlIGZvcmNlZCBiZXR0ZXIgdGlnaGVyIGZpbmFuY2lhbCBwbGFubmluZywgaXQgaXMgbm90IGtub3cgaWYgdGhpcyBoYXMgYWxzbyBkZWxheWVkIHJlZ3VsYXIgbWFpbnRlbmFuY2Ugb2YgZmFjaWxpdGllcywgYW5kIA0KZXF1aXBtZW50LiBEZXBsZXRpb24gb2YgZmluYW5jaWFsIHJlc2VydmVzIHdpbGwgZXZlbnR1YWxseSBoYXZlIGFuIGltcGFjdCBvbiB0aGUgcXVhbGl0eSBvZiB0aGUgYWNhZGVtaWMgcHJvZ3JhbS4NCg0KKiBNYXJrZXQgc3VjY2VzcyBhbmQgc3VzdGFpbmFiaWxpdHkgd2lsbCBkZXBlbmQgb24gY2FyZWZ1bCBmaW5hbmNpYWwgcGxhbm5pbmcgYW5kIGRldmVsb3BtZW50IG9mIGRpc3RpbmN0aXZlIG1hcmtldGFibGUgcHJvZ3JhbXMuIEFzIGluY3JlYXNpbmcgY29tcGV0aXRpb24gcmVkdWNlcyBtYXJnaW5zLCBpbnN0aXR1dGlvbnMgd2lsbCBiZSBmb3JjZWQgdG8gZm9yZ2UgbmV3IGxpbmtzIGFuZCBqb2ludCBwcm9qZWN0cyBiZXR3ZWVuIGRlcGFydG1lbnRzIGFuZCBpbnN0aXR1dGlvbnMuIA0KDQoqIEluc3RpdHV0aW9ucyBuZWVkIHRvIHNlZWsgd2F5cyB0byBpbXByb3ZlIHRoZSB2YWx1ZSBhbmQgcmVwdXRhdGlvbiBvZiB0aGVpciBwcm9ncmFtcy4gV2l0aCB0aGUgcmFpc2luZyBjb3N0IG9mIGhpZ2hlciBlZHVjYXRpb24gc3R1ZGVudHMgaGF2ZSBiZWNvbWUgbGVhcnkgb2YgYmVpbmcgc2FkZGxlZCB3aXRoIGEgbGFyZ2UgZWR1Y2F0aW9uYWwgbG9hbiBmb3IgYSBkZWdyZWUgd2hpY2ggaGFzIG5vIGpvYiBtYXJrZXQuIFRoZXkgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdCBpbiBwcm9ncmFtcyB0aGF0IGFyZSB2YWx1ZWQgIGluIG9uZSBvZiAyIHdheXM6DQoNCiAgKiBUb3Agc2Nob29sOiBrbm93biBmb3IgcHJvZHVjaW5nIGFsdW1uaSBvZiBkaXN0aW5jdGlvbi4NCiAgKiBWYWx1ZS1hZGRlZCBzY2hvb2w6IGtub3duIGZvciBtb3RpdmF0aW5nIG9yZGluYXJ5IHN0dWRlbnRzIHRvIGRvIGV4Y2VwdGlvbmFsIHdvcmsNCg0KDQoqIEluc3RpdHV0ZXMgd2lsbCBuZWVkIHRvIGFkanVzdCB0aGVpciBjdXJyZW50bHkgcHJvZ3JhbXMgdG8gYWRkcmVzcyBjaGFuZ2VzIGluIHN0dWRlbnQgYXR0aXR1ZGVzIGFuZCBjYXJlZXIgcHJlZmVyZW5jZXMuIA0KDQogICogVG9wIHN0dWRlbnRzIHdpbGwgYmUgbW9yZSBkaXNjZXJuaW5nIGFzIHRoZXkgZW50ZXIgdW5pdmVyc2l0eSB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2Ygc2tpbGxzIGhhdmluZyBwYXJ0aWNpcGF0ZWQgaW4gcm9ib3QgY29tcGV0aXRpb25zLCBzY2llbmNlIGZhaXJzIGFuZCBhcnQgYW5kIHNwb3J0aW5nIGV2ZW50cy4gVGhlIG1vc3QgZW50ZXJwcml6aW5nIGFyZSBhbHJlYWR5IGZhbWlsYXIgd2l0aCB0aGUgY291cnNlIG1hdGVyaWFsIGJlY2F1c2Ugb2YgY291cnNlcyB0aGV5IGhhdmUgdGFrZW4gYXMgTU9PQydzIG9yIEFkdmFuY2VkIHBsYWNlbWVudC4gDQogIA0KICAqIExlc3MgbW90aXZhdGVkIHN0dWRlbnRzIGhhdmUgZm91bmQgbGVzcyBpbmNlbnRpdmVzIHRvIGRvIHdlbGwgaW4gaGlnaCBzY2hvb2wuIEhpZ2ggc2Nob29sIHRlYWNoZXJzIHRlbGwgdGhlaXIgc3R1ZGVudHMgdGhhdCB0aGUgY3VycmVudCBzaXR1YXRpb24gbWFrZXMgaXQgZWFzaWVyIGZvciBzdHVkZW50cyB0byBlbnRlciB1bml2ZXJzaXR5IHdpdGggbGVzcyBlZmZvcnQuIFRoZSBsYWNrIG9mIGVudHJhbmNlIGV4YW1zIGhhcyBtYWRlIGl0IGVhc2llciBmb3Igd2Vha2VyIHN0dWRlbnRzIHRvIGdhaW4gZW50cmFuY2UgaW50byB1bml2ZXJzaXR5LiANCg0KKiBTcGVjaWFsIGFzc2lzdGFuY2UgaXMgcmVxdWlyZWQgZnJvbSB0aGUgZ292ZXJubWVudCB0byBwcm9jZXNzIGFuZCBhcHByb3ZlIHRoZSBuZXcgY3VycmljdWx1bSBpbiBhIHRpbWVseSBtYW5uZXIuIERlbGF5cyBpbiBnYWluaW5nIGFwcHJvdmFsIHdpbGwgZGlyZWN0bHkgY29udHJpYnV0ZSB0byB0aGUgZGVtaXNlIG9mIGluc3RpdHV0aW9ucy4gRmFzdCB0cmFjayBpbnRyb2R1Y3Rpb24gb2YgbmV3IHByb2dyYW1zIHdpbGwgZ2l2ZSBuZXcgaW5pdGlhdGl2ZSBhbiB1bmZhaXIgYWR2YW50YWdlIG92ZXIgcHJvZ3JhbXMgdGhhdCBhcmUgYXdhaXRpbmcgYXBwcm92YWwuDQoNCiogVGhlIG5hdHVyZSBvZiB0aGUgVGhhaSBlY29ub215IGNvbnRpbnVlcyB0byBlbWVyZ2UuIFdoaWxlIEJhbmdrb2sgaXMgZXhwbG9yaW5nIHRoZSBjdXR0aW5nIGVkZ2Ugb2YgVGhhaWxhbmQgNC4wLCB0aGUgcmVzdCBvZiB0aGUgY291bnRyeSBpcyBhdHRlbXB0aW5nIHRvIGludGVncmF0ZSBrZXkgYXNwZWN0cyBvZiB0aGUgZW50aXJlIHNwZWN0cnVtIG9mIFRoYWlsYW5kIDEuMCB0aHJvdWdoIFRoYWlsYW5kIDQuMC4gSW5zdGl0dXRlcyBvZiBIaWdoZXIgRWR1Y2F0aW9uIGVtcG93ZXIgdGhlaXIgc3R1ZGVudHMgdG8gY3JlYXRlIGFuZCB1c2UgYXBwbGljYXRpb25zIG9mIG5ldyB0ZWNobm9sb2dpZXMgYW5kIHBhcmFkaWdtcyB3aXRoaW4gdGhlaXIgY29tbXVuaXRpZXMgYW5kIGJ1c2luZXNzZXMuDQoNCiogVGhlIFRoYWkgZWNvbm9teSBjb250aW51ZXMgdG8gZXZvbHZlIHdpdGggdGhlIGNoYW5naW5nIGVjb25vbWljIGNsaW1hdGUuIEhvd2V2ZXIsIGVhY2ggbmV3IG9wcG9ydHVuaXR5IGNyZWF0ZXMgbmV3IHRyYWluaW5nIHJlcXVpcmVtZW50cyBhbmQgcmVzZWFyY2ggb3Bwb3J0dW5pdGllcy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBjcmVhdGluZyBuZXcgY2hhbGxlbmdlcyBvbiB0aGUgbmVhciBob3Jpem9uOiBhbmQgaWxsdXN0cmF0ZSB0aGUgbmVlZCBmb3IgaW5zdGl0dXRlcyBvZiBoaWdoZXIgZWR1Y2F0aW9uIHByb3ZpZGUgYSB0aW1lbHkgcmVzcG9uc2UgdG8gdGhlIGNoYW5naW5nIGJ1c2luZXNzIGVudmlyb25tZW50Lg0KDQogICogRGV2ZWxvcG1lbnQgb2YgQVNFQU4gRWNvbm9taWMgQ29tbXVuaXR5LiBUaGUgVGhhaSBlY29ub215IGZpbmRzIGl0c2VsZiBlbnRlcmluZyBhIGdsb2JhbCBtYXJrZXQgd2hpY2ggbmVlZHMgd29ya2VycyB3aXRoIG5ldyBza2lsbHMuDQogICogQ2hpbmVzZSB0b3VyaXNtIGlzIHN0aWxsIGdyb3dpbmcgZXhwb25lbnRpYWxseSBhbmQgb3V0cGFjaW5nIHRoZSBsb2NhbCByZXNvdXJjZXMgdG8gY29tbXVuaWNhdGUgYW5kIHByb3ZpZGUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgdGhpcyBsdWNyaXRpdmUgdG91cmlzdCBtYXJrZXQuDQoNCiogQ2hhbmdpbmcgaW4gdGVjaG5vbG9neSBtYWtlIGl0IG1vcmUgY29zdC1lZmZlY3RpdmUgZm9yIGluc3RpdHV0aW9ucyB0byBzaGFyZSByZXNvdXJjZXMsIGluc3RydWN0b3JzIGFuZCBjb3Vyc2VzLiBUaGVzZSBjaGFuZ2VzIGluY2x1ZGUgdGhlIHVzZSBvZiBNT09DLCB3ZWJpbmFycyBhbmQgY2hhdHJvb20gaGFuZ291dHMuIFN0dWRlbnRzIHdpbGwgYmVuZWZpdCBmcm9tIGV4cG9zdXJlIHRvIGdvb2QgdGVhY2hpbmcgcmVzb3VyY2VzIGFuZCBJbnN0aXR1dGlvbnMgd2hvIGhhdmUgZGV2ZWxvcGVkIHRoZSBhbGxpYW5jZXMgaGF2ZSBmb3VuZCB0aGF0IHRoaXMgd2lsbCByZWR1Y2VzIHRoZSBjb3N0IG9mIGluc3RydWN0aW9uIGJ5IGluY3JlYXNpbmcgdGhlIGVmZmVjdGl2ZSBlbnJvbGxlbW50IG9mIHNwZWNpYWxpdHkgY291cnNlcy4NCg0KKiBUaGUgZGV2ZWxvcG1lbnQgb2Ygc2F0ZWxsaXRlIGNhbXB1c2VzIG9mIGZvcmVpZ24gdG9wIHVuaXZlcmlzaXR5IGluIGNvbGxhYm9yYXRpb24gd2l0aCBsb2NhbCBpbnN0aXR1dGlvbnMgaXMgYW4gYXBwcm9hY2ggdGhhdCBpcyBiZWluZyBlbWJyYWNlZCBieSBtZW1iZXJzIG9mIHRoZSBDYWJpbmV0IGFuZCBsb2NhbCB1bml2ZXJzaXRpZXMuW14xMV0gVGhpcyB3aWxsIGludHJvZHVjZSBuZXcgY3V0dGluZyBlZGdlIHN0dWR5IHByb2dyYW1zIGFuZCB3aWxsIG5vdCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSB0aHJlYXRzIHRvIGV4aXN0aW5nIHByb2dyYW0gYmV5b25kIHRoZSBjdXJyZW50IHJpc2sgZHVlIHRvIGNoYW5naW5nIGRlbW9ncmFwaGljcyBiZWNhdXNlIG9mIHRoZSBsaW1pdGVkIG51bWJlciwgcmVtb3RlIGxvY2F0aW9uIGFuZCBjb3N0IG9mIGJ1aWxkaW5nIG5ldyBpbmZyYXN0cnVjdHVyZS4NCg0KW14xMV06IER1bXJvbmdraWF0IE1hbGEgKDIwMTcpIEZvcmVpZ24gdmFyc2l0aWVzICdub3QgYSB0aHJlYXQnIEJhbmdrb2sgUG9zdCAxNyBKdW4gMjAxNyBBdmFpbGFibGUgb25saW5lIGF0IGh0dHA6Ly93d3cuYmFuZ2tva3Bvc3QuY29tL25ld3MvZ2VuZXJhbC8xMjcwNDE5L2ZvcmVpZ24tdmFyc2l0aWVzLW5vdC1hLXRocmVhdA0KDQoNCiMgU3VtbWFyeQ0KDQpBIHNpbXBsZSBkYXRhc2V0IGxpc3RpbmcgdGhlIHllYXIgb2YgZm91bmRpbmcgZm9yIGVhY2ggYWNjcmVkaXRlZCBpbnN0aXR1dGUgb2YgaGlnaGVyIGVkdWNhdGlvbiBoYXMgYmVlbiB1c2VmdWwgdG8gc2hvdyB0aGUgbGltaXRhdGlvbiBhbmQgcG90ZW50aWFsIG9mIG1hdGhlbWF0aWNhbCBmb3JlY2FzdGluZy4gV2hpbGUgdGhlIGdyb3d0aCBvZiB0aGUgaGlnaGVyIGVkdWNhdGlvbiBzeXN0ZW0gaW4gVGhhaWxhbmQgY291bGQgYmUgbW9kZWxsZWQgYnkgYSBzZWNvbmQgb3JkZXIgcG9seW5vbWFsLCAgdGhpcyBtb2RlbCB3YXMgbm90IHVzZWZ1bCBmb3IgIGZvcmVjYXN0aW5nIHRoZSBmdXR1cmUgYXMgdGhlIHRyZW5kIHRoYXQgZG9taW5hdGVkIHRoZSBncm93IGR1cmluZyB0aGUgcGFzdCBjZW50dXJ5IG9mIGRhdGEgd2FzIGNoYW5nZWQgd2hlbiB0aGUgbnVtYmVyIG9mIGFwcGxpY2FuZWQgdGhlIG51bWJlciBvZiBzdHVkZW50cy4NCg0KVXNpbmcgdGhlIGRhdGEgcG9zdCAyMDAwIHRvIG1vZGVsIHRoZSBncm93dGgsIHJlc3VsdGVkIGluIGN1cnZlIHRoYXQgY29ycmVjdGx5IHByZWRpY3RlZCB0aGUgY3Jvc3Mgb3ZlciBkYXRlIGFuZCBzdWdnZXN0ZSB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbmV3IGluc3RpdHV0aW9ucy4gDQoNClVuZm9ydHVuYXRlbHkgdGhlIDIgbW9kZWxzIGFsc28gc2VlbSB0byBkZXNjcmliZSB0aGUgdHdvIG1haW4gdmlld3Mgb2YgY3VycmVudCBUaGFpIGFkbWluaXN0cmF0b3JzIG9mIGhpZ2hlciBlZHVjYXRpb24uICBUaGVyZSBhcmUgc29tZSB3aG8gbG9vayBhdCB0aGUgbG9uZyBoaXN0b3J5IG9mIGhpZ2hlciBlZHVjYXRpb24gaG9wZSB0aGF0IHRoaW5ncyB3aWxsIHR1cm4gYXJvdW5kICBhbmQgdGhlcmUgYXJlIG90aGVycyB3aG8gcmVjb2duaXplIHRoZSBjdXJyZW50IHNpdHVhdGlvbiBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgbWFqb3IgY3Jpc2lzLiBBcyBtb3JlIGRhdGEgYmVjb21lcyBhdmFpbGFibGUsIHRoZSB0cnVlIG1vZGVsIHdpbGwgYmVjb21lIHNlbGYtZXZpZGVudCBhdCB0aGUgZXhwZW5zZSBvZiB0aG9zZSB3aG8gY2hvc2UgaW5jb3JyZWN0bHkuIFRoZSBjdXJyZW50IGRhdGFzZXQgaGlnaGx5IHN1Z2dlc3RzIHRoYXQgdGhlIG1vZGVsIGJhc2VkIG9uIHJlY2VudCBkYXRhIGlzIG1vcmUgY29ycmVjdCAoTUFEPTQuMjcpIHRoYW4gdGhlIG1vZGVsIHdoaWNoIGRlcGVuZHMgb24gZGF0YSBjb2xsZWN0ZWQgb3ZlciBhIGNlbnR1cnkgKE1BRCA9IDEwLjIwKS4gIA0KDQpIb3dldmVyLCBkZXRlcm1pbmluZyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjcmlzaXMgcmVxdWlyZXMgbW9yZSBpbnB1dCB0aGFuIHRoYXQgcHJvdmlkZWQgYnkgdGhpcyBkYXRhc2V0Lg0KTG9va2luZyBhdCBwb3B1bGF0aW9uIGdyb3d0aCBhbmQgY29zdCBvZiB0dWl0aW9uIGFuZCBhc3N1bWluZyBub3JtYWwgVGhhaSBlY29ub21pYyBiZWhhdm9pciwgaGlnaGVyIHByaWNlZCBwcm9ncmFtcyBhcmUgbW9yZSBsaWtlbHkgdG8gZGlzYXBwZWFyIHRoYW4gY2hlYXBlciAoc3Vic2lkaXplZCkgYWx0ZXJuYXRpdmVzLiBBcHBseWluZyB0aGlzIGxvZ2ljIHRvIGN1cnJlbnQgZGF0YSB3b3VsZCBzdWdnZXN0IHRoYXQgdGhlIG51bWJlciBvZiBzdHVkeSBwcm9ncmFtcyB3b3VsZCBkZWNyZWFzZSBieSA3MCUgYW5kIDEwJSBmb3IgcHJpdmF0ZSBhbmQgcHVibGljIGluc3RpdHV0aW9ucywgcmVzcGVjdGl2ZWx5Lg0KDQpUaGlzIHNpdHVhdGlvbiB3aWxsIHJlcXVpcmUgYXNzaXN0IGJ5IHRoZSBnb3Zlcm5tZW50IGFzIGluc3RpdHV0aW9ucyBuZWVkIHRvIHVwZ3JhZGUgYW5kIGFkanVzdCB0aGUgc3R1ZHkgcHJvZ3JhbXMgb2ZmZXJlZCBlc3BlY2lhbGx5IHNpbmNlIG5ldyBwcm9ncmFtcyB3aWxsIGJlIGludHJvZHVjZWQgZnJvbSBhYnJvYWQgaW50byB0aGUgU3BlY2lhbCBFY29ub21pYyBab25lcy4NCg0KDQoNCg0KIyBCaWJsaW9ncmFwaHkNCg0K