Bibliografía
ALONSO, Carmelo; MORENO, Victoriano y RODRÍGUEZ, Elías (1993). Determinación experimental de la firma espectral de la vegetación. una sencilla práctica de introducción a la teledetección. en: teledetección. avances y aplicaciones. En: Memorias VIII Congreso Nacional de Teledetección. p. 429-432.
Chuvieco, E. (2008). Teledetección ambiental, la observación de la tierra desde el espacio. Barcelona, España, Editorial Ariel.
Congalton, R. G. (1991). A review of assessing the accuracy of classifications of remotely sensed data. Remote sensing of environment, 37(1), 35-46.
Emilio Chuvieco. (2010). “Teledetección Ambiental”. Edición 2010, Editorial Ariel, pag 18,46,55.
Ferreira, M. T. (2013). Calidad ecológica en la Demarcación Hidrográfica del Tajo: Una perspectiva integrada. El Tajo. Historia de un río ignorado, 145-171.
GARCÍA-MELÉNDEZ, E. D. U. A. R. D. O. (2006). Análisis visual de imágenes. Área de Geodinámico Externa.
Gómez, C., White, J. C., & Wulder, M. A. (2016). Optical remotely sensed time series data for land cover classification: A review. ISPRS Journal of Photogrammetry and Remote Sensing, 116, 55-72.
Han, K. S., Champeaux, J. L., & Roujean, J. L. (2004). A land cover classification product over France at 1 km resolution using SPOT4/VEGETATION data. Remote sensing of Environment, 92(1), 52-66.
Hernández, C. G., Escribano, J. A., & TARQUIS, Y. (2014). COMPARACIÓN DEL ÍNDICE DE VEGETACIÓN DE DIFERENCIA NORMALIZADA OBTENIDO A DIFERENTES ESCALAS EN PASTOS DE DEHESA. PASTOS Y PAC, 121-128.
Jensen, John R. (2015). Introductory Digital Image Processing: A Remote Sensing Perspective. USA. Prentice Hall Press.
Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. biometrics, 159-174.
Lu, D., & Weng, Q. (2007). A survey of image classification methods and techniques for improving classification performance. International journal of Remote sensing, 28(5), 823-870.
Malik, M. S., Shukla, J. P., & Mishra, S. (2019). Relationship of LST, NDBI and NDVI using Landsat-8 data in Kandaihimmat Watershed, Hoshangabad, India.
McFeeters, S. K. (1996). The use of the Normalized Difference Water Index (NDWI) in the delineation of open water features. International journal of remote sensing, 17(7), 1425-1432.
Pattanayak, S. P., & Diwakar, S. K. (2018). Seasonal Comparative Study of NDVI, NDBI and NDWI of Hyderabad City (Telangana) Based on LISS-III Image Using Remote Sensing and DIP. Khoj: An International Peer Reviewed Journal of Geography, 5(1), 78-86.
Reis, I., Baron, D., & Shahaf, S. (2018). Probabilistic Random Forest.
Serbin, G., Daughtry, C. S., Hunt, E. R., Brown, D. J., & McCarty, G. W. (2009). Effect of soil spectral properties on remote sensing of crop residue cover. Soil Science Society of America Journal, 73(5), 1545-1558.
Young, N. E., Anderson, R. S., Chignell, S. M., Vorster, A. G., Lawrence, R., & Evangelista, P. H. (2017). A survival guide to Landsat preprocessing. Ecology, 98(4), 920-932.
Zhang, Y., Guo, L., Chen, Y., Shi, T., Luo, M., Ju, Q., … & Wang, S. (2019). Prediction of Soil Organic Carbon based on Landsat 8 Monthly NDVI Data for the Jianghan Plain in Hubei Province, China. Remote Sensing, 11(14), 1683.
LS0tDQp0aXRsZTogQ2xhc2lmaWNhY2nDs24gc3VwZXJ2aXNhZGEgZGUgbGEgY29iZXJ0dXJhIGRlIHN1ZWxvIG1lZGlhbnRlIGVsIGFsZ29yaXRtbyBSYW5kb20gRm9yZXN0IGVuIHVuIMOhcmVhIGRlIGxhIHByb3ZpbmNpYSBkZSBUb2xlZG8gKEVzcGHDsWEpIA0KYXV0aG9yOiAiUGVkcm8gUGFibG8gUGxhdGVybyBQYXBhc2VpdCINCmRhdGU6ICIyMCBBYnJpbCAyMDIwIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBJbnRyb2R1Y2Npw7NuDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpDb21vIG5vcm1hIGdlbmVyYWwsIGxhcyBjbGFzaWZpY2FjaW9uZXMgZGUgY29iZXJ0dXJhIGRlIHN1ZWxvIHByb3BvcmNpb25hbiBpbmZvcm1hY2nDs24gZWxlbWVudGFsIHBhcmEgZXZhbHVhciBlbCBpbXBhY3RvIGRlIGxhcyBpbnRlcmFjY2lvbmVzIGh1bWFuYXMgZGVudHJvIGRlbCBtZWRpbyBhbWJpZW50ZSB5IGV2YWx1YXIgbG9zIGZ1bmRhbWVudG9zIGNpZW50w61maWNvcyBwYXJhIGxhIHNvc3RlbmliaWxpZGFkLCBsYSB2dWxuZXJhYmlsaWRhZCB5IGxhIHJlc2lsaWVuY2lhIGRlIGxvcyBzaXN0ZW1hcyBkZSB0aWVycmFzIHkgc3UgdXNvIChIYW4gZXQgYWwuLCAyMDA0KS4gU2luIGVtYmFyZ28sIGNsYXNpZmljYXIgbG9zIGRhdG9zIGRlIGRldGVjY2nDs24gcmVtb3RhIGVuIHVuIG1hcGEgdGVtw6F0aWNvIHNpZ3VlIHNpZW5kbyB1biBkZXNhZsOtbyBkZWJpZG8gYSBxdWUgbXVjaG9zIGZhY3RvcmVzLCBjb21vIGxhIGNvbXBsZWppZGFkIGRlbCBwYWlzYWplIGVuIHVuIMOhcmVhIGRlIGVzdHVkaW8sIGxvcyBkYXRvcyBkZSBkZXRlY2Npw7NuIHJlbW90YSBzZWxlY2Npb25hZG9zIHkgbG9zIGVuZm9xdWVzIGRlIHByb2Nlc2FtaWVudG8gZGUgaW3DoWdlbmVzIHkgY2xhc2lmaWNhY2nDs24sIHB1ZWRlbiBhZmVjdGFyIGVsIMOpeGl0byBkZSB1bmEgY2xhc2lmaWNhY2nDs24gKEx1ICYgV2VuZywgMjAwNykuDQoNClNlZ8O6biBHw7NtZXogZXQgYWwuLCAoMjAxNiksIGxhIGNvYmVydHVyYSB0ZXJyZXN0cmUgc2UgcmVsYWNpb25hIGNvbiBsYSBjb2JlcnR1cmEgYmlvZsOtc2ljYSBkZSBsYSBzdXBlcmZpY2llIGRlIGxhIFRpZXJyYSwgaWRlbnRpZmljYW5kbyB2ZWdldGFjacOzbiwgYWd1YXMgY29udGluZW50YWxlcywgc3VlbG8gZGVzbnVkbyBvIGluZnJhZXN0cnVjdHVyYSBodW1hbmEuIFVuYSBkaWZpY3VsdGFkIGVuIGxhIGNsYXNpZmljYWNpw7NuIGRlIGxhIGN1YmllcnRhIHRlcnJlc3RyZSBlbiBhbWJpZW50ZXMgc2VtacOhcmlkb3MgY29tbyBlbCBkZSBsYSB6b25hIGRlIFRvbGVkbywgZXMgbGEgc2ltaWxpdHVkIGVzcGVjdHJhbCBkZSBhbGd1bm9zIGRlIHN1cyB0aXBvcyBkZSBjb2JlcnR1cmEuIEVzdGEgc2l0dWFjacOzbiBwdWVkZSBkaWZpY3VsdGFyIGxhIGRpc2NyaW1pbmFjacOzbiBkZSBsYXMgZGlmZXJlbnRlcyBjb2JlcnR1cmFzIGRlIHN1ZWxvLCBsbGV2YW5kbyBhIHVuYSBjbGFzaWZpY2FjacOzbiBlcnLDs25lYS4gDQoNCkVsIMOhcmVhIGRlIGVzdHVkaW8gcGVydGVuZWNlIGEgbGEgQ3VlbmNhIGhpZHJvZ3LDoWZpY2EgZGVsIFRham8uIEVsIHLDrW8gVGFqbyBjb25zdGl0dXllIHVuYSBpbXBvcnRhbnRlIGRlbWFyY2FjacOzbiBoaWRyb2dyw6FmaWNhLCBsYSBxdWludGEgZGUgbWF5b3IgZGltZW5zacOzbiBhIG5pdmVsIGV1cm9wZW8geSBsYSB0ZXJjZXJhIGRlIGxhIFBlbsOtbnN1bGEgSWLDqXJpY2EsIGNvbiB1bmEgc3VwZXJmaWNpZSBkZSA4MC42Mjkga21eMl4sIGRlIGxvcyBxdWUgYXByb3hpbWFkYW1lbnRlIHVuIDMwJSBlc3TDoW4gc2l0dWFkb3MgZW4gdGVycml0b3JpbyBwb3J0dWd1w6lzICgyNC44MDAga21eMl4pIChGZXJyZWlyYSwgMjAxMykuIERlYmlkbyBhIGxhIGltcG9ydGFuY2lhIGVjb2zDs2dpY2EsIGRlbW9ncsOhZmljYSwgZWNvbsOzbWljYSB5IHNvY2lhbCBxdWUgcmVwcmVzZW50YSBsYSBjdWVuY2EsIGVzIHByZWNpc28gZWwgYW7DoWxpc2lzIHkgbW9uaXRvcmVvIGRlbCB1c28geSBldm9sdWNpw7NuIGRlIGxhcyBjb2JlcnR1cmFzIGRlbCBzdWVsbyBwYXJhIGdhcmFudGl6YXIgc3Ugc29zdGVuaWJpbGlkYWQuDQoNCkVsIHByZXNlbnRlIGFydMOtY3VsbyB0aWVuZSBjb21vIG9iamV0aXZvIGxhIGVsYWJvcmFjacOzbiBkZSB1bmEgY2xhc2lmaWNhY2nDs24gc3VwZXJ2aXNhZGEgZGUgbGFzIGNvYmVydHVyYXMgZGUgc3VlbG8gZW4gZWwgw6FyZWEgZGUgZXN0dWRpbywgbWVkaWFudGUgbGEgdXRpbGl6YWNpw7NuIGRlIHTDqWNuaWNhcyBkZSBkZXRlY2Npw7NuIHJlbW90YS4NCg0KPGRpdi8+DQoNCiMgRGF0b3MgeSBtw6l0b2RvDQoNCiMjIFpvbmEgZGUgZXN0dWRpbw0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KRWwgw6FyZWEgc2VsZWNjaW9uYWRhIGNvbXByZW5kZSB1bmEgc3VwZXJmaWNpZSByZWN0YW5ndWxhciBkZSA4ODEsNzAga21eMl4gcXVlIGNvbXByZW5kZSBsYXMgZsOpcnRpbGVzIHZlZ2FzIGRlbCByw61vIFRham8gZW4gbGFzIGlubWVkaWFjaW9uZXMgZGUgbGEgY2l1ZGFkIGRlIFRvbGVkbywgZW4gbGEgY29tdW5pZGFkIGF1dMOzbm9tYSBkZSBDYXN0aWxsYSBsYSBNYW5jaGEuIEVzdGEgc2l0dWFkbyBlbiBsYSBzdWJtZXNldGEgc3VyIGRlIGxhIFBlbsOtbnN1bGEgSWLDqXJpY2EgZW50cmUgbGFzIGVzdHJpYmFjaW9uZXMgZGUgbGEgU2llcnJhIGRlIEdyZWRvcyBhbCBOb3J0ZSB5IGxvcyBNb250ZXMgZGUgVG9sZWRvIGFsIFN1ci4NCg0KPGRpdi8+DQoNClwNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGxlYWZsZXQpDQoNCmxlYWZsZXQod2lkdGggPSAiMTAwJSIpICU+JSANCmFkZFRpbGVzKCkgJT4lDQpzZXRWaWV3KGxuZyA9IC00LjE1LCBsYXQgPSAzOS44Nywgem9vbSA9IDExKSAlPiUNCmFkZE1hcmtlcnMobG5nID0gLTQuMTUsIGxhdCA9IDM5Ljg3LCBwb3B1cCA9ICJUaGUgTGFuZHNhdCBzY2VuZSBjZW50ZXIiKSAlPiUNCmFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXAuSE9ULCBvcHRpb25zPSBwcm92aWRlclRpbGVPcHRpb25zKG9wYWNpdHkgPSAxKSkNCmBgYA0KDQpcDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KTG9zIGzDrW1pdGVzIGRlbCDDoXJlYSBzb24gMzg3NDM1LjAwLCA0MjU1MDUuMDAgcGFyYSBsYSBsb25naXR1ZCB5IDQ0MDE1NTUuMDAsIDQ0MjQ3MTUuMDAgcGFyYSBsYSBsYXRpdHVkLCBjb24gZWwgc2lzdGVtYSBkZSByZWZlcmVuY2lhIGRlIGNvb3JkZW5hZGFzIEVQU0c6MzI2MzAgLSBXR1MgODQgLyBVVE0gem9uZSAzME4uDQoNCkxvcyBkYXRvcyByYWRpb21ldHJpY29zIHkgZXNwZWN0cmFsZXMgc2UgaGFuIG9idGVuaWRvIGRlIHVuYSBpbWFnZW4gc2F0ZWxpdGFsIExhbmRzYXQgOCBuaXZlbCAxLCBjb3JyZXNwb25kaWVudGUgYWwgMTQgZGUgTWFyem8gZGUgMjAyMCBjdXlvIGlkZW50aWZpY2Fkb3IgZGUgcHJvZHVjdG8gZXMgTEMwOF9MMVRQXzIwMTAzMl8yMDIwMDMxNF8yMDIwMDMyNV8wMV9UMS4gDQoNCkxhIGNsYXNpZmljYWNpw7NuIHN1cGVydmlzYWRhIHNlIGhhIGxsZXZhZG8gYSBjYWJvIG1lZGlhbnRlIGVsIGFsZ29yaXRtbyBSYW5kb20gRm9yZXN0LiBFc3RlIGFsZ29yaXRtbyBlcyB1bmEgZm9ybWEgZGUgY2xhc2lmaWNhY2nDs24gY29uanVudGEgZGUgw6FyYm9sZXMgZGUgZGVjaXNpw7NuLiBVbiDDoXJib2wgZGUgZGVjaXNpw7NuIGVzIHVuIG1vZGVsbyBubyBwYXJhbcOpdHJpY28sIHF1ZSBzZSBkZXNjcmliZSBtZWRpYW50ZSB1biBncsOhZmljbyBzaW1pbGFyIGEgdW4gw6FyYm9sLCB5IHNlIHV0aWxpemEgdGFudG8gZW4gdGFyZWFzIGRlIGNsYXNpZmljYWNpw7NuIGNvbW8gZGUgcmVncmVzacOzbiAoUmVpcyBldCBhbC4sIDIwMTgpLiBDYWRhIMOhcmJvbCBpbmRpdmlkdWFsIGRlbCBSYW5kb20gRm9yZXN0IHJlYWxpemEgdW5hIHByZWRpY2Npw7NuIGRlIGNsYXNlIHkgbGEgY2xhc2UgY29uIG3DoXMgdm90b3Mgc2UgY29udmllcnRlIGVuIGxhIHByZWRpY2Npw7NuIGRlIG51ZXN0cm8gbW9kZWxvLg0KDQpQYXJhIGxsZXZhciBhIGNhYm8gbGEgZXZhbHVhY2nDs24gZGUgcHJlY2lzacOzbiwgc2UgYXNpZ25hcm9uIHkgZXhhbWluYXJvbiBhbCBhemFyIHVuIHRvdGFsIGRlIDY1IHBvbMOtZ29ub3MgZGUgbXVlc3RyYSBxdWUgY3VicmVuIGRpZmVyZW50ZXMgdGlwb3MgZGUgY29iZXJ0dXJhIHRlcnJlc3RyZSwgdXRpbGl6YW5kbyBkYXRvcyBkZWwgU2lzdGVtYSBkZSBJbmZvcm1hY2nDs24gc29icmUgT2N1cGFjacOzbiBkZWwgU3VlbG8gZGUgRXNwYcOxYSAoU0lPU0UpLCBlbCBTaXN0ZW1hIGRlIEluZm9ybWFjacOzbiBHZW9ncsOhZmljYSBkZSBQYXJjZWxhcyBBZ3LDrWNvbGFzIChTSUdQQUMpLCBlbCBTaXN0ZW1hIGRlIEluZm9ybWFjacOzbiBHZW9ncsOhZmljYSBkZSBEYXRvcyBBZ3JhcmlvcyAoU0lHQSkgZSBpbWFnZW5lcyBkZSBhbHRhIHJlc29sdWNpw7NuIGRlbCBtYXBhIGRlIEdvb2dsZSBFYXJ0aC4gRXN0b3MgbWlzbW9zIHBvbMOtZ29ub3MgZnVlcm9uIHV0aWxpemFkb3MgcGFyYSBsYSBvYnRlbmNpw7NuIGRlIGxvcyBwZXJmaWxlcyBlc3BlY3RyYWxlcyBkZSBsYXMgY29iZXJ0dXJhcyBkZSBzdWVsby4gTG9zIHDDrXhlbGVzIGRlIG11ZXN0cmVvIHV0aWxpemFkb3MgcGFyYSBsYSBldmFsdWFjacOzbiBkZSBwcmVjaXNpw7NuIHNlIHNlbGVjY2lvbmFyb24gdXRpbGl6YW5kbyBlbCBtw6l0b2RvIGRlIG11ZXN0cmVvIGVzdHJhdGlmaWNhZG8gYWxlYXRvcmlhbWVudGUuDQpcDQo8ZGl2Lz4NCg0KXA0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoc3ApDQpsaWJyYXJ5KHJhc3RlcikNCmxpYnJhcnkoUlN0b29sYm94KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkocmdkYWwpDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkobGVhZmxldCkNCg0KcG9seWdvbnMgPC0gc2hhcGVmaWxlKCJDOi9Vc2Vycy9VU1MvRGVza3RvcC9QZWRyby8yMDE5IC0gMjAyMC9QZXJjZXBjaW9uIHJlbW90YS9JbmZvcm1lIDEvQ29iZXJ0dXJhcy9jb2JlcnR1cmFzLnNocCIpDQpwcm9qNHN0cmluZyhwb2x5Z29ucykNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBSZXByb3llY3RhbW9zIGxvcyBwb2zDrWdvbm9zIHBhcmEgcG9kZXIgdmlzdWFsaXphcmxvcyBjb3JyZWN0YW1lbnRlDQoNCnBvbF9yZXAgPC0gc3BUcmFuc2Zvcm0ocG9seWdvbnMsIENSUygiK2luaXQ9ZXBzZzo0MzI2IikpDQpwcm9qNHN0cmluZyhwb2xfcmVwKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpsZWFmbGV0KHdpZHRoID0gIjEwMCUiKSAlPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkRXNyaS5Xb3JsZEltYWdlcnksIG9wdGlvbnM9IHByb3ZpZGVyVGlsZU9wdGlvbnMob3BhY2l0eSA9IDAuOTkpKSAlPiUNCiAgYWRkUG9seWdvbnMoZGF0YSA9IHBvbF9yZXAsIHBvcHVwPXBvbF9yZXAkY2xhc3MsDQogIHN0cm9rZSA9IEZBTFNFLCBmaWxsT3BhY2l0eSA9IDAuNSwgc21vb3RoRmFjdG9yID0gMC41KSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtNC4wOCwgbGF0ID0gMzkuODcsIHpvb20gPSAxMSkNCmBgYA0KDQpcDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KTGEgY2xhc2lmaWNhY2nDs24gdXRpbGl6YWRhIHBhcmEgbG9zIHBvbMOtZ29ub3MgZGUgbXVlc3RyYSBzZSBkZXNjcmliZSBhIGNvbnRpbnVhY2nDs246DQoNCi1BZ3VhOiBNYXNhcyBkZSBhZ3VhIGNvbnRpbmVudGFsZXMgcXVpZXRhcyBvIGNvcnJpZW50ZXMgZGUgbGEgc3VwZXJmaWNpZSBkZWwgc3VlbG8uIFByaW5jaXBhbG1lbnRlIG1hc2FzIGRlIGFndWEgcGVydGVuZWNpZW50ZXMgYWwgcmlvIFRham8sIGVtYmFsc2VzIG5hdHVyYWxlcyB5IGJhbHNhcyBkZSByaWVnby4NCg0KLUJhcmJlY2hvOiBUZXJyZW5vIGRlIGxhYm9yIHF1ZSBubyBlcyBzZW1icmFkbyBkdXJhbnRlIGNpZXJ0byBuw7ptZXJvIGRlIGNpY2xvcyB2ZWdldGF0aXZvcyBjb24gZWwgZmluIGRlIHBlcm1pdGlyIHN1IHJlZ2VuZXJhY2nDs24geSBlbCBhbG1hY2VuYW1pZW50byBow61kcmljby4gIA0KDQotQ3VsdGl2b3MgaGVyYsOhY2VvczogUHJpbmNpcGFsbWVudGUgY3VsdGl2b3MgYW51YWxlcyBkZSBzZWNhbm8geSByZWdhZMOtbywgZW50cmUgbG9zIHF1ZSBwcmVkb21pbmFuIGxvcyBjZXJlYWxlcyBkZSBncmFubyBjb21vIG1haXosIHRyaWdvIHkgY2ViYWRhLg0KDQotQ3VsdGl2b3MgcGVybWFuZW50ZXM6IEN1bHRpdm9zIGxlw7Fvc29zIGVudHJlIGxvcyBxdWUgcHJlZG9taW5hbiBlbCBvbGl2YXIgeSBlbCB2acOxZWRvLg0KDQotRGVoZXNhOiBFc3RhIGNsYXNlIGNvbXByZW5kZSB1bmEgbWV6Y2xhIGRlIGxhcyBjb2JlcnR1cmFzIGRlZmluaWRhcyBwb3IgZWwgU0lPU0UgY29tbyBwYXN0aXphbCwgYXJib2xhZG8gZm9yZXN0YWwgeSBtYXRvcnJhbC4gUHJlZG9taW5hbiBsb3MgZW5jaW5hcmVzIHkgbGEgbWV6Y2xhIGRlIGNvbsOtZmVyYXMgeSBmcm9uZG9zYXMgYXV0w7NjdG9uYXMgZGVsIGfDqW5lcm8gcXVlcmN1cy4gVGFtYmnDqW4gZGVzdGFjYSBsYSBwcmVzZW5jaWEgZGUgcGFzdGl6YWwgbWF0b3JyYWwgY29uIGVzcGVjaWVzIGF1dMOzY3RvbmFzIGRlbCBnZW5lcm8gcmV0YW1hLCBsYXZhbmR1bGEsIHJvc21hcmludXMgeSB0aHltdXMgZW50cmUgb3RyYXMuDQoNCi1JbmR1c3RyaWFsOiBFZGlmaWNhY2lvbmVzIGRlIHRpcG8gaW5kdXN0cmlhbCBlbiBsYXMgcXVlIHByZWRvbWluYW4gbGFzIGN1YmllcnRhcyBhbXBsaWFzIGRlIGNvbG9yZXMgY2xhcm9zLCBnZW5lcmFsbWVudGUgYmxhbmNvIG8gbWV0w6FsaWNvIGNhcmFjdGVyw61zdGljbyBkZSBsYXMgY2hhcGFzIG1ldMOhbGljYXMgbyBwYW5lbGVzIHPDoW5kd2ljaC4gDQoNCi1SZXNpZGVuY2lhbDogRWRpZmljYWNpb25lcyBkZSB0aXBvIHJlc2lkZW5jaWFsIGVuIGxhcyBxdWUgcHJlZG9taW5hbiBsb3MgY29sb3JlcyBtYXJyb25lcywgcm9qaXpvcyB5IG9jcmVzIGNhcmFjdGVyw61zdGljb3MgZGUgbGFzIGN1YmllcnRhcyBjZXLDoW1pY2FzLg0KDQpQYXJhIGVsIHByb2Nlc2FtaWVudG8geSBhbsOhbGlzaXMgZGUgbG9zIGRhdG9zIHNhdGVsaXRhbGVzIHNlIGhhIGVtcGxlYWRvIHNvZnR3YXJlIG9wZW4gc291cmNlIFJzdHVkaW8uIFBhcmEgbGEgZGlnaXRhbGl6YWNpw7NuIGRlIGxvcyBwb2zDrWdvbm9zIGRlIG11ZXN0cmEgc2UgaGEgdXRpbGl6YWRvIG90cm8gc29mdHdhcmUgbGlicmUgeSBkZSBjb2TDrWdvIGFiaWVydG8sIFFnaXMuDQoNCjxkaXYvPg0KDQojIyBNZXRvZG9sb2fDrWENCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkVuIGVsIHNpZ3VpZW50ZSBncsOhZmljbyBzZSBtdWVzdHJhIGxhIG1ldG9kb2xvZ8OtYSBsbGV2YWRhIGEgY2FibyBwYXJhIGVsIGFuw6FsaXNpcyBkZSBsYXMgaW3DoWdlbmVzIHNhdGVsaXRhbGVzIHkgbGEgZWxhYm9yYWNpw7NuIGRlIGxhIGNsYXNpZmljYWNpw7NuIHN1cGVydmlzYWRhOg0KDQo8ZGl2Lz4NCg0KYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZWNobyA9IEZBTFNFLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL1VTUy9EZXNrdG9wL1BlZHJvLzIwMTkgLSAyMDIwL1BlcmNlcGNpb24gcmVtb3RhL0luZm9ybWUgMS9kaWFncmFtYTIucG5nIikNCg0KYGBgDQoNCg0KIyBSZXN1bHRhZG9zDQoNCiMjIFByZXByb2Nlc2FtaWVudG8NCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhcyBpbcOhZ2VuZXMgYWRxdWlyaWRhcyBwb3IgbG9zIHNlbnNvcmVzIExhbmRzYXQgZXN0w6FuIHN1amV0YXMgYSBkaXN0b3JzacOzbiBjb21vIHJlc3VsdGFkbyBkZSBsb3Mgc2Vuc29yZXMsIGxvcyBlZmVjdG9zIHNvbGFyZXMsIGF0bW9zZsOpcmljb3MgeSB0b3BvZ3LDoWZpY29zLiBFbCBwcmVwcm9jZXNhbWllbnRvIGludGVudGEgbWluaW1pemFyIGVzdG9zIGVmZWN0b3MgZW4gbGEgbWVkaWRhIGRlc2VhZGEgcGFyYSB1bmEgYXBsaWNhY2nDs24gcGFydGljdWxhci4gKFlvdW5nIGV0IGFsLiwgMjAxNykNCg0KPGRpdi8+DQoNCiMjIyBDb3JyZWNjacOzbiByYWRpb23DqXRyaWNhDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbiBlbCBwcmVzZW50ZSBlc3R1ZGlvIHNlIHZhbiBhIHV0aWxpemFyIHZhbG9yZXMgZGUgcmVmbGVjdGFuY2lhIFRPQSAoKnRvcC1vZi1hdG1vc3BoZXJlKikgcGFyYSByZWFsaXphciBsb3MgYW7DoWxpc2lzIHBlcnRpbmVudGVzIHBhcmEgbGEgb2J0ZW5jacOzbiBkZSBsYSBjbGFzaWZpY2FjacOzbiBzdXBlcnZpc2FkYSBkZSBzdWVsb3MuIExhIGNvcnJlY2Npw7NuIHJhZGlvbcOpdHJpY2EgbmVjZXNhcmlhIHBhcmEgb2J0ZW5lciBlc3RvcyB2YWxvcmVzIGVzIGxhIGNvcnJlY2Npw7NuIHNvbGFyLiBMYSBjb3JyZWNjacOzbiBzb2xhciBjb252aWVydGUgbGEgcmFkaWFuY2lhIGVuIGVsIHNlbnNvciBlbiByZWZsZWN0YW5jaWEgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGUgbGEgYXRtw7NzZmVyYSAoVE9BKSBpbmNvcnBvcmFuZG8gbGEgaXJyYWRpYW5jaWEgc29sYXIgZXhvYXRtb3Nmw6lyaWNhLCBsYSBkaXN0YW5jaWEgVGllcnJhLVNvbCB5IGVsIMOhbmd1bG8gZGUgZWxldmFjacOzbiBzb2xhciAoWW91bmcgZXQgYWwuLCAyMDE3KS4NCg0KU2luIGVtYmFyZ28sIGxvcyBwcm9kdWN0b3MgTGFuZHNhdCA4IHByb3BvcmNpb25hbiBjb2VmaWNpZW50ZXMgcGFyYSBjb252ZXJ0aXIgbG9zIG5pdmVsZXMgZGlnaXRhbGVzICgqRE4sIGRpZ2l0YWwgbnVtYmVyKikgZGlyZWN0YW1lbnRlIGEgcmVmbGVjdGFuY2lhIFRPQSBzaW4gbmVjZXNpZGFkIGRlIG9idGVuZXIgbGEgcmFkaWFuY2lhIGVuIGVsIHNlbnNvciBtZWRpYW50ZSBsYSBleHByZXNpw7NuIHByb3BvcmNpb25hZGEgcG9yIGVsIFNlcnZpY2lvIEdlb2zDs2dpY28gZGUgbG9zIEVzdGFkb3MgVW5pZG9zIChVU0dTKToNCg0KPGRpdi8+DQoNCiQkXHJob19cbGFtYmRhPVxmcmFje01fcMK3UV97Y2FsfStBX3B9e3NpbihcdGhldGFfe1NFfSl9JCQNCkRvbmRlOiANCg0KIyMjIyMjICRccmhvX1xsYW1iZGEkID0gUmVmbGVjdGFuY2lhIHBsYW5ldGFyaWEgVE9BXA0KIyMjIyMjICRNX3AkID0gRmFjdG9yIGRlIHJlZXNjYWxhbWllbnRvIG11bHRpcGxpY2F0aXZvIGVzcGVjw61maWNvIGRlIGJhbmRhIGRlIGxvcyBtZXRhZGF0b3MgKFJFRkxFQ1RBTkNFX01VTFRfQkFORF94LCBkb25kZSB4IGVzIGVsIG7Dum1lcm8gZGUgYmFuZGEpXA0KIyMjIyMjICRRX3tjYWx9JCA9IFZhbG9yZXMgZGUgcMOteGVsZXMgZGUgcHJvZHVjdG8gZXN0w6FuZGFyIGN1YW50aWZpY2Fkb3MgeSBjYWxpYnJhZG9zIChETilcDQojIyMjIyMgJEFfcCQgPSBGYWN0b3IgZGUgcmVlc2NhbGFkbyBhZGl0aXZvIGVzcGVjw61maWNvIGRlIGJhbmRhIGRlIGxvcyBtZXRhZGF0b3MgKFJFRkxFQ1RBTkNFX0FERF9CQU5EX3gsIGRvbmRlIHggZXMgZWwgbsO6bWVybyBkZSBiYW5kYSlcDQojIyMjIyMgJFx0aGV0YV97U0V9JCA9IMOBbmd1bG8gbG9jYWwgZGUgZWxldmFjacOzbiBkZWwgc29sLkVsIMOhbmd1bG8gZGUgZWxldmFjacOzbiBkZWwgc29sIGRlbCBjZW50cm8gZGUgbGEgZXNjZW5hIGVuIGdyYWRvcyBzZSBwcm9wb3JjaW9uYSBlbiBsb3MgbWV0YWRhdG9zIChTVU5fRUxFVkFUSU9OKQ0KXA0KTG9zIGNvZWZpY2llbnRlcyBzZSBwdWVkZW4gb2J0ZW5lciBkaXJlY3RhbWVudGUgZGUgbG9zIG1hdGFkYXRvczoNCg0KQmFuZCAgICAgICB8IEF+cH4gICB8IE1+cH4gICAgfCAgICDOuH5TRX4gICAgfA0KLS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18DQpVbHRyYS1ibHVlIHwgLTAuMSAgIHwgMmUtMDUgICB8IDQyLjgxNjE4MTg5IHwNCkJsdWUgICAgICAgfCAtMC4xICAgfCAyZS0wNQkgIHwgNDIuODE2MTgxODkgfA0KR3JlZW4gICAgICB8IC0wLjEgICB8IDJlLTA1CSAgfCA0Mi44MTYxODE4OSB8DQpSZWQgICAgICAgIHwgLTAuMSAgIHwgMmUtMDUJICB8IDQyLjgxNjE4MTg5IHwNCk5JUiAgICAgICAgfCAtMC4xICAgfCAyZS0wNQkgIHwgNDIuODE2MTgxODkgfA0KU1dJUjEgICAgICB8IC0wLjEgICB8IDJlLTA1CSAgfCA0Mi44MTYxODE4OSB8DQpTV0lSMiAgICAgIHwgLTAuMSAgIHwgMmUtMDUJICB8IDQyLjgxNjE4MTg5IHwNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCnNldHdkKCJDOi9Vc2Vycy9VU1MvRGVza3RvcC9QZWRyby8yMDE5IC0gMjAyMC9QZXJjZXBjaW9uIHJlbW90YS9JbmZvcm1lIDEvTGFuZHNhdF9zaW5fcmVjb3J0YXIiKQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpnZXR3ZCgpDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCm10bGZpbGUgPC0gIkxDMDhfTDFUUF8yMDEwMzJfMjAyMDAzMTRfMjAyMDAzMjVfMDFfVDFfTVRMLnR4dCINCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbWV0YWRhdGEgPC0gcmVhZE1ldGEobXRsZmlsZSkNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbHNhdCA8LSBzdGFja01ldGEobXRsZmlsZSkNCmxzYXQNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBDcmVhbW9zIHVuIHN1YmdydXBvIHNpbiBsYXMgYmFuZGFzIDEwIHkgMTEsIHlhIHF1ZSBhbCBzZXIgYmFuZGFzIHRlcm1hbGVzIG5vIHRpZW5lbiBkYXRvcyBkZSBjb3JyZWNjacOzbiBkZSByZWZsZWN0YW5jaWEgZW4gbG9zIG1ldGFkYXRvcw0KDQpsc2F0c3ViIDwtIGxzYXRbWzE6OF1dDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMgQWNjZWRlbW9zIGEgbG9zIGRhdG9zIGRlIFJFRkxFQ1RBTkNFX0FERF9CQU5EIHkgUkVGTEVDVEFOQ0VfTVVMVF9CQU5EIGVuIGxvcyBtZXRhZGF0b3MNCg0KZ2V0TWV0YShsc2F0c3ViLCBtZXRhRGF0YSA9IG1ldGFkYXRhLCB3aGF0ID0gIkNBTFJFRiIpDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxzYXRfcmVmIDwtIHJhZENvcihsc2F0LCBtZXRhRGF0YSA9IG1ldGFkYXRhLCBtZXRob2QgPSAiYXByZWYiKQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojdHJlIGVzIGxhIHJlZmxlY3RhbmNpYSBUT0EsIGJ0IGVzIGxhIHRlbXBlcmF0dXJhIGRlIGJyaWxsbw0KDQpuYW1lcyhsc2F0X3JlZikNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbmFtZXMobHNhdF9yZWYpIDwtIGMoJ1VsdHJhLWJsdWUnLCAnQmx1ZScsICdHcmVlbicsICdSZWQnLCAnTklSJywgJ1NXSVIxJywgJ1NXSVIyJywgJ0NpcnJ1cycsICdUSVJTMScsICdUSVJTMicpDQpgYGANCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhIHJlZmxlY3RhbmNpYSBlcyB1biByYXRpbywgcG9yIGxvIHF1ZSB0cmFzIGxhIGNvcnJlY2Npw7NuIHNvbGFyLCBsb3MgdmFsb3JlcyBkZSByZWZsZWN0YW5jaWEgVE9BIHF1ZWRhbiBjb21vIHVuIHBvcmNlbnRhamUgKGVudHJlIDAgeSAxKSBxdWUgcmVsYWNpb25hIGxhIHJhZGlhY2nDs24gcmVmbGVqYWRhIHBvciBjYWRhIHBpeGVsIHJlc3BlY3RvIGEgbGEgcmFkaWFjacOzbiBxdWUgcmVjaWJlLiBMYSBzaWd1aWVudGUgdGFibGEgbXVlc3RyYSB1biByZXN1bWVuIGVzdGFkw61zdGljbyBkZSBsYXMgYmFuZGFzIGRlIGludGVyw6lzOg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxzYXRfNyA8LSBsc2F0X3JlZltbMTo3XV0NCmtuaXRyOjprYWJsZShzdW1tYXJ5KGxzYXRfNykpDQpgYGANCg0KDQpgYGB7ciBpbmNsdWRlID0gRkFMU0V9DQpwbG90UkdCKGxzYXQsIDQsIDMsIDIsIHN0cmV0Y2ggPSAibGluIikNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBSZWNvcnRhbW9zIGxhIGltYWdlbg0KDQpleHRlbnQobHNhdF9yZWYpDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmUgPC0gZXh0ZW50KDM4NzQzNSwgNDI1NTA1LCA0NDAxNTU1LCA0NDI0NzE1KQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpjbGlwX2xzYXQgPC0gY3JvcChsc2F0X3JlZixlKQ0KY2xpcF9sc2F0DQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxhbmRzYXRSR0IgPC0gY2xpcF9sc2F0W1tjKDQsMywyKV1dDQpwbG90UkdCKGxhbmRzYXRSR0IsIGF4ZXMgPSBUUlVFLCBzdHJldGNoID0gImxpbiIsIG1haW4gPSAiTGFuZHNhdCBUcnVlIENvbG9yIENvbXBvc2l0ZSIpDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxheWVyX2ZpbGVuYW1lcyA8LSBjKCJVbHRyYS1ibHVlLnRpZiIsICJCbHVlLnRpZiIsICJHcmVlbi50aWYiLCAiUmVkLnRpZiIsICJOSVIudGlmIiwgIlNXSVIxLnRpZiIsICJTV0lSMi50aWYiLCAiQ2lycnVzLnRpZiIsICJUSVJTMS50aWYiLCAiVElSUzIudGlmIikNCmZvcihpIGluIDE6MTApIHsNCiAgTGF5ZXIgPC0gcmFzdGVyKGNsaXBfbHNhdCwgbGF5ZXIgPSBpKQ0KICB3cml0ZVJhc3RlcihMYXllciwgbGF5ZXJfZmlsZW5hbWVzW2ldLCBvdmVyd3JpdGU9VFJVRSkNCn0NCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBMYXMgYmFuZGFzICJDaXJydXMiLCAiVElSUzEiIHkgIlRJUlMyIiBubyBzZSB2YW4gYSB1dGlsaXphciBwYXJhIGVsIGFuw6FsaXNpcy4gU2UgY3JlYSB1biBvYmpldG8gY29uIHVuIHN1YmNvbmp1bnRvIGRlIGJhbmRhcy4NCmxhbmRzYXQgPC0gY2xpcF9sc2F0W1sxOjddXQ0Kc3VtbWFyeShsYW5kc2F0KQ0KYGBgDQoNCiMjIFBlcmZpbGVzIGVzcGVjdHJhbGVzDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbCBwZXJmaWwgZXNwZWN0cmFsIGVzIGxhIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBkZWwgY29tcG9ydGFtaWVudG8gZXNwZWN0cmFsIGRlIGNpZXJ0YSBzdXBlcmZpY2llLiBMb3MgZGlzdGludG9zIHRpcG9zIGRlIGNvYmVydHVyYXMgdGVycmVzdHJlcyAoYm9zcXVlcywgc3VlbG9zIGN1bHRpdmFkb3MsIGzDoW1pbmFzIGRlIGFndWEsIGV0Yy4pIHNlIGRpc3Rpbmd1ZW4gcG9yIGxhIGVuZXJnw61hIHF1ZSByZWZsZWphbiB5IGVtaXRlbiAoQWxvbnNvIGV0IGFsLiwgMTk5MykuIE1lZGlhbnRlIGxhIGNvbXBhcmFjacOzbiBkZSBwZXJmaWxlcyBlc3BlY3RyYWxlcyBzZSBwdWVkZSByZWNvbm9jZXIgY3ViaWVydGFzIGRlIGludGVyw6lzIHkgZGlzY3JpbWluYXJsYXMgZGUgb3RyYXMgc2ltaWxhcmVzLCBwb3IgbG8gcXVlIGxhIG9idGVuY2nDs24gZGUgbGFzIGZpcm1hcyBlc3BlY3RyYWxlcyBzZSByZWNvbWllbmRhbiBjb21vIHB1bnRvIGRlIHBhcnRpZGEgZW4gdHJhYmFqb3MgZGUgdGVsZWRldGVjY2nDs24gKENodXZpZWNvLCAyMDEwKS4NCg0KUGFyYSBwb2RlciBjbGFzaWZpY2FyIGxhcyBzdXBlcmZpY2llcyBlbiBmdW5jacOzbiBkZSBsb3MgdmFsb3JlcyBkZSByZWZsZWN0YW5jaWEgVE9BLCBlcyBuZWNlc2FyaW8gdXRpbGl6YXIgaW5mb3JtYWNpb24gYXV4aWxpYXIsIGVzIGRlY2lyLCBpbmZvcm1hY2nDs24gZ2VvZ3LDoWZpY2Egbm8gZXNwZWN0cmFsLiBMb3MgbXVlc3RyZW9zIGFsZWF0b3Jpb3MgcmVhbGl6YWRvcyBlbiBsb3MgcG9sw61nb25vcyBjbGFzaWZpY2Fkb3MgZW4gZnVuY2nDs24gZGUgbGEgY29iZXJ0dXJhIGRlbCBzdWVsbyBzZSByZXByZXNlbnRhbiBhIGNvbnRpbnVhY2nDs246ICANCg0KPGRpdi8+DQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpzZXQuc2VlZCgxMDEpDQpzYW1wbGVzIDwtIHNwc2FtcGxlKHBvbHlnb25zLCAyMDAwLCB0eXBlPSdyZWd1bGFyJykNCnNhbXBsZXMNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KZGZfc2FtcGxlcyA8LSBhcyhzYW1wbGVzLCJTcGF0aWFsUG9pbnRzRGF0YUZyYW1lIikNCm51bWVybyA8LSBsZW5ndGgoc2FtcGxlcykNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KZGZfc2FtcGxlc0BkYXRhID0gZGF0YS5mcmFtZShJRD0xOm51bWVybywgc2l6ZT0xKQ0KZGZfc2FtcGxlcw0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpsaWJyYXJ5KHpvb20pDQpwbG90UkdCKGxhbmRzYXRSR0IsIGF4ZXMgPSBUUlVFLCBzdHJldGNoID0gImxpbiIsIG1haW4gPSAiUmVwcmVzZW50YWNpw7NuIGRlIGxvcyBtdWVzdHJlb3MgZW4gbG9zIHBvbMOtZ29ub3MgZGUgY2xhc2lmaWNhY2nDs24gIikNCnBsb3QocG9seWdvbnMsIGNvbCA9ICJ5ZWxsb3ciLCBhZGQgPSBUUlVFKQ0KcGxvdChkZl9zYW1wbGVzLCBwY2ggPSAxLCBjb2wgPSAiYmxhY2siLCBjZXggPSAoZGZfc2FtcGxlcyRzaXplKS8zLCBhZGQ9VFJVRSkNCnpvb21wbG90Lnpvb20oeGxpbSA9IE5VTEwsIHlsaW0gPSBOVUxMLCBmYWN0ID0gMikNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBBZ3JlZ2Ftb3MgbGEgY2xhc2UgZGUgY29iZXJ0dXJhIGRlbCBzdWVsbyBhIGxvcyBwdW50b3MNCg0KZGZfc2FtcGxlcyRjbGFzZSA8LSBvdmVyKGRmX3NhbXBsZXMsIHBvbHlnb25zKSRDb2JlcnR1cmENCmRmX3NhbXBsZXMNCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KZGYgPC0gcmFzdGVyOjpleHRyYWN0KGxhbmRzYXQsIGRmX3NhbXBsZXMpDQpoZWFkKGRmKQ0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KRWwgdmFsb3IgbWVkaW8gZGUgcmVmbGVjdGFuY2lhIFRPQSBkZSBsb3MgcHVudG9zIG11ZXN0cmVhZG9zIGVuIGNhZGEgcG9sw61nb25vIGRlIGNsYXNpZmljYWNpw7NuIHNlIHJlY29nZSBlbiBsYSBzaWd1aWVudGUgdGFibGE6IA0KDQo8ZGl2Lz4NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCm1zIDwtIGFnZ3JlZ2F0ZShkZiwgbGlzdChkZl9zYW1wbGVzJGNsYXNlKSwgbWVhbikNCm1zDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRX0NCiMgaW5zdGVhZCBvZiB0aGUgZmlyc3QgY29sdW1uLCB3ZSB1c2Ugcm93IG5hbWVzDQoNCnJvd25hbWVzKG1zKSA8LSBtc1ssMV0NCm1zIDwtIG1zWywtMV0NCm1zDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFc3RvcyB2YWxvcmVzIHNlIG11ZXN0cmFuIGRlIHVuIG1vZG8gbcOhcyBpbHVzdHJhdGl2byBhIHRyYXZlcyBkZSB1biBncsOhZmljbyBkZSBwZXJmw61sIGVzcGVjdHJhbCwgZW4gZWwgcXVlIHNlIHJlcHJlc2VudGEgbGEgcmVmbGVjdGFuY2lhIFRPQSBkZSBjYWRhIGNvYmVydHVyYSBlbiBmdW5jacOzbiBkZSBsYSBiYW5kYSBlc3BlY3RyYWwuDQoNCjxkaXYvPg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBDcmVhdGUgYSB2ZWN0b3Igb2YgY29sb3IgZm9yIHRoZSBsYW5kIGNvdmVyIGNsYXNzZXMgZm9yIHVzZSBpbiBwbG90dGluZw0KDQpteWNvbG9yIDwtIGMoJ2JsdWU0JywgJ3JlZCcsICdsYXduZ3JlZW4nLCAnZGFya2dyZWVuJywgJ3llbGxvdycsICd2aW9sZXRyZWQnLCAnY3lhbicpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRX0NCiN0cmFuc2Zvcm0gbXMgZnJvbSBhIGRhdGEuZnJhbWUgdG8gYSBtYXRyaXgNCg0KbXMgPC0gYXMubWF0cml4KG1zKQ0KcGxvdCgwLCB5bGltPWMoMCwwLjYpLCANCiAgICAgICAgeGxpbSA9IGMoMSw3KSwgdHlwZT0nbicsIHhsYWI9IkJhbmRhcyIsIHlsYWIgPSAiUmVmbGVjdGFuY2lhIFRPQSIsIGF4ZXMgPSBGQUxTRSkNCg0KIyBhZGQgdGhlIGRpZmZlcmVudCBjbGFzc2VzDQoNCmZvciAoaSBpbiAxOm5yb3cobXMpKXsNCiAgICBsaW5lcyhtc1tpLF0sIHR5cGUgPSAibCIsIGx3ZCA9IDMsIGx0eSA9IDEsIGNvbCA9IG15Y29sb3JbaV0pDQp9DQoNCnRpdGxlKG1haW49KCJQZXJmaWwgZXNwZWN0cmFsIGRlIGxhcyBjb2JlcnR1cmFzIGRlIHN1ZWxvIiksIGZvbnQubWFpbiA9IDIpDQpsZWdlbmQoInRvcGxlZnQiLCByb3duYW1lcyhtcyksDQogICAgICAgY2V4PTAuOCwgY29sPW15Y29sb3IsIGx0eSA9IDEsIGx3ZCA9MywgYnR5ID0gIm4iKQ0KYXhpcyhzaWRlID0gMSwgYXQgPSAxOjcsIGxhYmVscyA9IGMoJ1VsdHJhLWJsdWUnLCAnQmx1ZScsICdHcmVlbicsICdSZWQnLCAnTklSJywgJ1NXSVIxJywgJ1NXSVIyJykpDQpheGlzKHNpZGUgPSAyLCBhdCA9IGMoMCwgMC4xLCAwLjIsIDAuMywgMC40LCAwLjUsIDAuNiksIGxhYmVscyA9IGMoMCwgMC4xLCAwLjIsIDAuMywgMC40LCAwLjUsIDAuNikpDQpgYGANCg0KIyMgw41uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYQ0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KRGViaWRvIGEgbGFzIGRpZmVyZW5jaWFzIGVuIGxhIHJlZmxlY3RhbmNpYSBkZSBsYXMgZGlzdGludGFzIGNvYmVydHVyYXMgZGVsIHN1ZWxvLCBzZSBwdWVkZW4gZW1wbGVhciDDrW5kaWNlcyBkZSBkaWZlcmVuY2lhIG5vcm1hbGl6YWRhIHF1ZSBwZXJtaXRlbiBvYnRlbmVyIGluZm9ybWFjacOzbiBzb2JyZSBsYSBvY3VwYWNpw7NuIGRlbCBzdWVsby4gRXN0YSBpbmZvcm1hY2nDs24gcHVlZGUgdXRpbGl6YXJzZSBwYXJhIGFtcGxpYXIgZWwgY29ub2NpbWllbnRvIHNvYnJlIGxhIHpvbmEgZGUgZXN0dWRpbyB5IGNvbW8gdW5hIGNsYXNpZmljYWNpw7NuIHByZXZpYSBhIGxhIGNsYXNpZmljYWNpw7NuIHN1cGVydmlzYWRhIGRlIGNvYmVydHVyYSBkZWwgc3VlbG8uDQoNCkVsIGNhbGN1bG8gZGUgbGEgY29ycmVsYWNpw7NuIGVudHJlIGxvcyBkYXRvcyBkZSBkaXN0aW50YXMgYmFuZGFzIHBlcm1pdGUgc2FiZXIgc2kgcG9zZWVuIG8gbm8gY2llcnRhIGluZGVwZW5kZW5jaWEgZXN0YWTDrXN0aWNhLiBFcyBkZWNpciwgdW5hIGFsdGEgY29ycmVsYWNpw7NuIHN1Z2llcmUgdW5hIHJlZHVuZGFuY2lhIHN1c3RhbmNpYWwgZW4gZWwgY29udGVuaWRvIGRlIGxhIGluZm9ybWFjacOzbiBlbnRyZSBlc2FzIGJhbmRhcyAoSmVuc2VuLCAyMDE1KS4gTG9zIGRhdG9zIGRlIGNvcnJlbGFjacOzbiBzb24gaW1wb3J0YW50ZXMgYSBsYSBob3JhIGRlIGVsYWJvcmFyIMOtbmRpY2VzIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEsIHlhIHF1ZSBlc3RvcyDDrW5kaWNlcyBzb24gcmF0aW9zLCBwb3IgbG8gcXVlIGludGVyZXNhIHF1ZSBsYSBpbmZvcm1hY2nDs24gY29tcGFyYWRhIHRlbmdhIGxhIG1heW9yIGluZGVwZW5kZW5jaWEgZXN0YWTDrXN0aWNhIHBvc2libGUuIA0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRX0NCnBhaXJzKGxhbmRzYXRbWzI6N11dLCBtYWluID0gIkNvcnJlbGFjacOzbiBlbnRyZSBiYW5kYXMiKQ0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KUGFyYSB0b2RvcyBsb3Mgw61uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYSAoTkRWSSwgTkRXSSB5IE5EQkkpIHNlIHV0aWxpemEgdW5hIGV4cHJlc2nDs24gY29uIHNlbWVqYW50ZSBlc3RydWN0dXJhLCBlbiBsYSBxdWUgw7puaWNhbWVudGUgY2FtYmlhbiBsYXMgY29tYmluYWNpb25lcyBkZSBjYXBhcyBhIHV0aWxpemFyLiBMYSBleHByZXNpw7NuIHNlIGRlZmluZSBkZSBsYSBzaXF1aWVudGUgZm9ybWE6DQoNCjxkaXYvPg0KXA0KJCROREk9XGZyYWN7YmFuZGFfaS1iYW5kYV9qfXtiYW5kYV9pK2JhbmRhX2p9JCQNClwNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCnZpIDwtIGZ1bmN0aW9uKGltZywgaywgaSkgew0KICBiayA8LSBpbWdbW2tdXQ0KICBiaSA8LSBpbWdbW2ldXQ0KICB2aSA8LSAoYmsgLSBiaSkgLyAoYmsgKyBiaSkNCiAgcmV0dXJuKHZpKQ0KfQ0KYGBgDQoNCiMjIyDDjW5kaWNlIGRlIHZlZ2V0YWNpw7NuIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEgKE5EVkkpDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFbCDDjW5kaWNlIGRlIFZlZ2V0YWNpw7NuIGRlIERpZmVyZW5jaWEgTm9ybWFsaXphZGEgKE5EVkkpIGVzIHVuIMOtbmRpY2UgcXVlIGRlc2NyaWJlIGxhIHByb3BvcmNpw7NuIGRlIHZlZ2V0YWNpw7NuIG1pZGllbmRvIGxhIGRpZmVyZW5jaWEgZW4gbGEgcG9yY2nDs24gaW5mcmFycm9qYSBjZXJjYW5hIGRlbCBlc3BlY3RybyBlbGVjdHJvbWFnbsOpdGljbywgcXVlIHNlIHJlZmxlamEgZnVlcnRlbWVudGUgZW4gbGEgdmVnZXRhY2nDs24gdmVyZGUgeSBsYSBwb3JjacOzbiByb2phIGRlbCBlc3BlY3RybyBxdWUgZXMgYWJzb3JiaWRhIHBvciBsYSB2ZWdldGFjacOzbiAoTWFsaWsgZXQgYWwuLCAyMDE5KS4gUG9yIGxvIHRhbnRvLCBsYXMgYmFuZGFzIHV0aWxpemFkYXMgcGFyYSBsYSBvYnRlbmNpw7NuIGRlbCBORFZJIHNvbiBsYSBiYW5kYSA1IGRlIGluZnJhcnJvam8gY2VyY2FubyAoODQ14oCTODg1IG5tKSB5IGxhIGJhbmRhIDQsIGRlbCByb2pvIHZpc2libGUgKDYzMOKAkzY4MCBubSkuDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KbmR2aSA8LSB2aShsYW5kc2F0LCA1LCA0KQ0KcGxvdChuZHZpLCBjb2wgPSByZXYodGVycmFpbi5jb2xvcnMoMjU1KSksIG1haW4gPSAiTkRWSSIpDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpEaXNjcmltaW5hbmRvIGxhcyB6b25hcyBxdWUgbm8gcG9zZWVuIChwcmVzdW1pYmxlbWVudGUpIHZlZ2V0YWNpw7NuLCBzZSBwdWVkZSBvYnRlbmVyIHVuYSBtZWpvciB2aXN1YWxpemFjacOzbiBkZSBsYXMgem9uYXMgY29uIGNvYmVydHVyYSB2ZWdldGFsLiBPYnNlcnZhbmRvIGVsIG1hcGEgZGUgTkRWSSwgc2UgcHVlZGUgY29uc2lkZXJhciBxdWUgdmFsb3JlcyBkZSBORFZJIHBvciBlbmNpbWEgZGUgMCwzNSBwZXJ0ZW5lY2VuIGEgc3VwZXJmaWNpZXMgY29uIGFsIG1lbm9zLCBjaWVydGEgZmxvcmEuDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdmVnIDwtIHJlY2xhc3NpZnkobmR2aSwgY2JpbmQoLUluZiwgMC4zNSwgTkEpKQ0KY29sdmVnIDwtIGNvbG9yUmFtcFBhbGV0dGUoYygieWVsbG93IiwiY2hhcnRyZXVzZTIiLCJkYXJrZ3JlZW4iKSkNCnBsb3QodmVnLCBtYWluPSdWZWdldGFjacOzbicsIGNvbCA9IGNvbHZlZyg1MCkpDQpgYGANCg0KIyMjIMONbmRpY2UgZGUgYWd1YSBkZSBkaWZlcmVuY2lhIG5vcm1hbGl6YWRhIChORFdJKQ0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KTWNGZWV0ZXJzIChNY0ZlZXRlcnMsIDE5OTYpIHByb3B1c28gZWwgw61uZGljZSBkZSBhZ3VhIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEgKE5EV0kpIG3DoXMgY29ub2NpZG8sIHV0aWxpemFuZG8gbGEgYmFuZGEgdmVyZGUgeSBsYSBiYW5kYSBkZWwgaW5mcmFycm9qbyBjZXJjYW5vIChOSVIpLiBSZWxhY2lvbmEgbGEgZ3JhbiByZWZsZWN0YW5jaWEgZGUgbGFzIG1hc2FzIGRlIGFndWEgZW4gbGEgYmFuZGEgdmVyZGUgY29uIHN1IGJhamEgcmVsZmVjdGFuY2lhIGVuIGxhIGJhbmRhIE5JUi4gTGFzIGJhbmRhcyB1dGlsaXphZGFzIHBhcmEgbGEgb2J0ZW5jacOzbiBkZWwgTkRXSSBzb24gbGEgYmFuZGEgMywgdmVyZGUgdmlzaWJsZSAoNTI14oCTNjAwIG5tKSB5IGxhIGJhbmRhIDUgZGUgaW5mcmFycm9qbyBjZXJjYW5vICg4NDXigJM4ODUgbm0pLg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRX0NCm5kd2kgPC0gdmkobGFuZHNhdCwgMywgNSkNCnBsb3QobmR3aSwgY29sID0gYnB5LmNvbG9ycyg1MCksIG1haW4gPSAiTkRXSSIpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRX0NCndhdGVyIDwtIHJlY2xhc3NpZnkobmR3aSwgY2JpbmQoLUluZiwgMCwgTkEpKQ0KY29sd2F0IDwtIGNvbG9yUmFtcFBhbGV0dGUoYygiYmx1ZSIsImRhcmtibHVlIiwiY3lhbiIpKQ0KcGxvdCh3YXRlcixjb2wgPSBjb2x3YXQoNTApLCBtYWluID0gJ0FndWEnKQ0KYGBgDQoNCiMjIyDDjW5kaWNlIGRlIGNvbnN0cnVjY2nDs24gZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYSAoTkRCSSkNCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkVuIGNvbXBhcmFjacOzbiBjb24gb3RyYXMgc3VwZXJmaWNpZXMgZGUgY29iZXJ0dXJhIGRlbCBzdWVsbywgbG9zIHRlcnJlbm9zIHVyYmFuaXphZG9zIHRpZW5lbiBtYXlvciByZWZsZWN0YW5jaWEgZW4gZWwgcmFuZ28gZGUgbG9uZ2l0dWQgZGUgb25kYSBNSVIgcXVlIGVuIGVsIHJhbmdvIGRlIGxvbmdpdHVkIGRlIG9uZGEgTklSIChQYXR0YW5heWFrICYgRGl3YWthciAoMjAxOCksIE1hbGlrIGV0IGFsLiwgKDIwMTkpKS4gRGViaWRvIGEgZXN0bywgcGFyYSBlbCBjw6FsY3VsbyBkZWwgw41uZGljZSBkZSBjb25zdHJ1Y2Npw7NuIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEgKE5EQkkpIGdlbmVyYWxtZW50ZSBzZSB1dGlsaXphIGxhIGJhbmRhIDYgKFNXSVIxKSwgZGVsIGluZnJhcnJvam8gbWVkaW8gKDE1NjDigJMxNjYwIG5tKSB5IGxhIGJhbmRhIDUgKE5JUikgZGUgaW5mcmFycm9qbyBjZXJjYW5vICg4NDXigJM4ODUgbm0pLiBTaW4gZW1iYXJnbywgZGViaWRvIGEgbGEgZGlmaWN1bHRhZCBkZSBkaXNjcmltaW5hciBsYXMgem9uYXMgcmVzaWRlbmNpYWxlcyBkZSBsYXMgc3VwZXJmaWNpZXMgZGUgYmFyYmVjaG8gdXRpbGl6YW5kbyBlc2FzIGRvcyBiYW5kYXMsIGVuIGVsIHByZXNlbnRlIGFyZWEgZGUgZXN0dWRpbywgc2UgaGEgdXRpbGl6YWRvIGxhIGJhbmRhIDQsIHJvam8gdmlzaWJsZSAoNjMw4oCTNjgwIG5tKSB5IGxhIGJhbmRhIDYgKFNXSVIxKSBkZSBpbmZyYXJyb2pvIG1lZGlvLiANCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0V9DQpuZGJpIDwtIHZpKGxhbmRzYXQsIDQsIDYpDQpwbG90KG5kYmksIGNvbCA9IHRvcG8uY29sb3JzKDUwKSwgbWFpbiA9ICJOREJJIikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KYnVpbHQgPC0gcmVjbGFzc2lmeShuZGJpLCBjKC1JbmYsIC0wLjI2LCBOQSwgLTAuMjYsIDAsIDEsIDAsIEluZiwgTkEpKQ0KcGxvdChidWlsdCwgY29sID0gInJlZDQiLCBtYWluID0gJ1N1ZWxvIGNvbnN0cnVpZG8nLCBsZWdlbmQgPSBUUlVFKQ0KYGBgDQoNCiMjIEhpc3RvZ3JhbWENCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNClVuIGhpc3RvZ3JhbWEgZXMgbGEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIGRlIGxhIGRpc3RyaWJ1Y2nDs24gZGUgZnJlY3VlbmNpYXMgZGUgdW5hIHZhcmlhYmxlLiBBcG9ydGEgaW5mb3JtYWNpw7NuIHZhbGlvc2EgY29tbyBndcOtYSwgZXMgZGVjaXIsIGVzIHVuIGluZGljYXRpdm8gcGFyYSBkZWR1Y2lyIGVsIG7Dum1lcm8gZGUgcmVnaW9uZXMgZGlmZXJlbmNpYWRhcyBlbiB1bmEgdmFyaWFibGUgeSBhc8OtIHBvZGVyIGJ1c2NhciB1biBzaWduaWZpY2FkbyBhIGNhZGEgem9uYSBkaWZlcmVuY2lhZGEuIFRhbWJpw6luIGVzIMO6dGlsIGEgbGEgaG9yYSBkZSBsb2NhbGl6YXIgdW1icmFsZXMgcGFyYSByZWNsYXNpZmljYXIgaW3DoWdlbmVzIGVuIGxvcyBhbsOhbGlzaXMgZGUgw61uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYS4NCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0V9DQphenVsIDwtIHJnYigwLCAwLCAxLCAwLjMpIA0Kcm9qbyA8LSByZ2IoMSwgMCwgMCwgMC4zKQ0KdmVyZGUgPC0gcmdiKDAsIDEsIDAsIDAuMykNCg0KaGlzdChuZHZpLA0KICAgICBtYWluID0gIkRpc3RyaWJ1Y2nDs24gZGUgbG9zIHZhbG9yZXMgZGUgbG9zIMONbmRpY2VzIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEgIiwNCiAgICAgeGxhYiA9ICJWYWxvcmVzIiwNCiAgICAgeWxhYj0gIkZyZWN1ZW5jaWEiLA0KICAgICBjb2wgPSB2ZXJkZSwNCiAgICAgeGxpbSA9IGMoLTAuNSwgMSksDQogICAgIGJyZWFrcyA9IDMwLA0KICAgICB4YXh0ID0gJ24nKQ0KDQpoaXN0KG5kd2ksDQogICAgIGNvbCA9IGF6dWwsDQogICAgIGJyZWFrcyA9IDMwLA0KICAgICB4YXh0ID0gJ24nLA0KICAgICBhZGQgPSBUUlVFKQ0KDQpoaXN0KG5kYmksDQogICAgIGNvbCA9IHJvam8sDQogICAgIGJyZWFrcyA9IDMwLA0KICAgICB4YXh0ID0gJ24nLA0KICAgICBhZGQgPSBUUlVFKQ0KDQpheGlzKHNpZGU9MSwgYXQgPSBzZXEoLTAuNSwxLCAwLjA1KSwgbGFiZWxzID0gc2VxKC0wLjUsMSwgMC4wNSkpDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiTkRWSSIsIk5EV0kiLCJOREJJIiksIGZpbGwgPSBjKHZlcmRlLCBhenVsLCByb2pvKSwgYm94LmNvbCA9ICJ3aGl0ZSIpDQpgYGANCg0KIyMgQ29tcG9zaWNpb25lcyBkZSBjb2xvcg0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KQ29uIGxhcyBjb21wb3NpY2lvbmVzIGRlIGNvbG9yIHNlIHB1ZWRlIGxvZ3JhciByZXNhbHRhciBjaWVydG9zIGNvbXBvbmVudGVzIG8gY2FyYWN0ZXLDrXRpY2FzIGRlbCDDoXJlYSBkZSBlc3R1ZGlvIHBhcmEgcG9kZXIgcmVhbGl6YXIgdW4gYW7DoWxpc2lzIHZpc3VhbCBkZSBsYXMgaW3DoWdlbmVzIHNhdGVsaXRhbGVzLiBMYSBjb21iaW5hY2nDs24gZGUgYmFuZGFzIGEgdXRpbGl6YXIgZGVwZW5kZXLDoSBwcmluY2lwYWxtZW50ZSBkZSBsYXMgZGlzdGludGFzIGNvYmVydHVyYXMgZGUgc3VlbG8gcXVlIHNlIGRlc2VlbiByZXNhbHRhciBlbiBsYSB6b25hIGRlIGludGVyw6lzLg0KDQo8ZGl2Lz4NCg0KIyMjIENvbXBvc2ljacOzbiBkZSBjb2xvciBuYXR1cmFsDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFc3RhIGNvbXBvc2ljacOzbiBtdWVzdHJhIGxhIGltYWdlbiB0YWwgeSBjb21vIGxhIHBlcmNlYmlyw61hIGVsIG9qbyBodW1hbm8sIGVzIGRlY2lyLCBzZSBhc2lnbmEgbGEgYmFuZGEgZGVsIHJvam8gdmlzaWJsZSAoYmFuZGEgNCkgYWwgY2FuYWwgcm9qbyBkZWwgbW9uaXRvciwgbGEgYmFuZGEgZGVsIHZlcmRlIHZpc2libGUgKGJhbmRhIDMpIGFsIGNhbmFsIHZlcmRlIHkgbGEgYmFuZGEgYXp1bCAoYmFuZGEgMikgYWwgY2FuYWwgYXp1bC4NCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0V9DQpsYW5kc2F0UkdCIDwtIGxhbmRzYXRbW2MoNCwzLDIpXV0NCnBsb3RSR0IobGFuZHNhdFJHQiwgYXhlcyA9IFRSVUUsIHN0cmV0Y2ggPSAibGluIikNCnRpdGxlKG1haW49KCJDb21wb3NpY2nDs24gZGUgY29sb3IgbmF0dXJhbCIpLCBmb250Lm1haW4gPSAyLCBzdWIgPSAiUkdCICg0LCAzLCAyKSIsIGZvbnQuc3ViID0gMiAsIGNleC5zdWIgPSAwLjkgKQ0KYGBgDQoNCg0KIyMjIENvbXBvc2ljacOzbiBlbiBmYWxzbyBjb2xvcg0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KVW5hIGVsZWNjacOzbiBtdXkgdXRpbGl6YWRhIGVzIGxhIGNvbXBvc2ljacOzbiBlbiBmYWxzbyBjb2xvciBxdWUgYXNpZ25hIGEgbG9zIGNhbmFsZXMgcm9qbywgdmVyZGUgeSBhenVsIGRlbCBtb25pdG9yIGxhcyBiYW5kYXMgY29ycmVzcG9uZGllbnRlcyBhbCBpbmZyYXJyb2pvIGNlcmNhbm8sIGFsIHJvam8geSBhbCB2ZXJkZSBkZWwgZXNwZWN0cm8gZWxlY3Ryb21hZ27DqXRpY28gcmVzcGVjdGl2YW1lbnRlLiBFbiBlc3RhcyBpbcOhZ2VuZXMgZGUgZmFsc28gY29sb3IgdW5hIGRlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIHByaW5jaXBhbGVzIGVzIHF1ZSBsYSB2ZWdldGFjacOzbiBhcGFyZWNlIGVuIGNvbG9yIHJvam8uIChHYXJjw61hLU1lbMOpbmRleiwgMjAwNikNCg0KPGRpdi8+DQoNCmBgYHtyIGVjaG89RkFMU0V9DQpsYW5kc2F0RkNDIDwtIGxhbmRzYXRbW2MoNSw0LDMpXV0NCnBsb3RSR0IobGFuZHNhdEZDQywgYXhlcyA9IFRSVUUsIHN0cmV0Y2ggPSAibGluIikNCnRpdGxlKG1haW49KCJDb21wb3NpY2nDs24gZW4gZmFsc28gY29sb3IgLSBWZWdldGFjacOzbiIpLCBmb250Lm1haW4gPSAyLCBzdWIgPSAiUkdCICg1LCA0LCAzKSIsIGZvbnQuc3ViID0gMiAsIGNleC5zdWIgPSAwLjkgKQ0KYGBgDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KT3RyYSBjb21wb3NpY2nDs24gZW4gZmFsc28gY29sb3IgdXRpbGl6YWRhIHBhcmEgcmVzYWx0YXIgbGFzIHN1cGVyZmljaWVzIGFncsOtY29sYXMgZXMgbGEgcXVlIGNvbWJpbmEgbGFzIGJhbmRhcyA2IChTV0lSMSksIDUgKE5JUikgeSAyIChBenVsKS4gDQoNCjxkaXYvPg0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KbGFuZHNhdEFHIDwtIGxhbmRzYXRbW2MoNiw1LDIpXV0NCnBsb3RSR0IobGFuZHNhdEFHLCBheGVzID0gVFJVRSwgc3RyZXRjaCA9ICJsaW4iKQ0KdGl0bGUobWFpbj0oIkNvbXBvc2ljacOzbiBlbiBmYWxzbyBjb2xvciAtIEFncmljdWx0dXJhIiksIGZvbnQubWFpbiA9IDIsIHN1YiA9ICJSR0IgKDYsIDUsIDIpIiwgZm9udC5zdWIgPSAyICwgY2V4LnN1YiA9IDAuOSApDQpgYGANCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpDb24gbGEgY29tcG9zaWNpw7NuIGVuIGZhbHNvIGNvbG9yIHF1ZSBjb21iaW5hIGxhcyBiYW5kYXMgNywgNiB5IDQgc2UgbG9ncmEgcmVzYWx0YXIgbGFzIHpvbmFzIHVyYmFuYXMgY29uIGNpZXJ0YSB0b25hbGlkYWQgbW9yYWRhLg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmxhbmRzYXRGQ1UgPC0gbGFuZHNhdFtbYyg3LDYsNCldXQ0KcGxvdFJHQihsYW5kc2F0RkNVLCBheGVzID0gVFJVRSwgc3RyZXRjaCA9ICJsaW4iKQ0KdGl0bGUobWFpbj0oIkNvbXBvc2ljacOzbiBkZSBmYWxzbyBjb2xvciAtIFpvbmFzIHVyYmFuYXMiKSwgZm9udC5tYWluID0gMiwgc3ViID0gIlJHQiAoNywgNiwgNSkiLCBmb250LnN1YiA9IDIgLCBjZXguc3ViID0gMC45ICkNCmBgYA0KDQojIyBDbGFzaWZpY2FjacOzbiBzdXBlcnZpc2FkYQ0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KTGFzIHTDqWNuaWNhcyBkZSBjbGFzaWZpY2FjacOzbiBkZSBpbcOhZ2VuZXMgc2F0ZWxpdGFsZXMgc2UgdXRpbGl6YW4gcGFyYSBhZ3J1cGFyIHBpeGVsZXMgY29uIHZhbG9yZXMgc2ltaWxhcmVzIGVuIHZhcmlhcyBjbGFzZXMuIEVuIGxhIGNsYXNpZmljYWNpw7NuIHN1cGVydmlzYWRhLCBzZSBwYXJ0ZSBjb24gdW5hIHNlcmllIGNsYXNlcyBwcmV2aWFtZW50ZSBwcmVkZWZpbmlkYXMgKHNpdGlvcyBkZSBlbnRyZW5hbWllbnRvKS4gRWwgYWxnb3JpdG1vIGRlIGNsYXNpZmljYWNpw7NuIGRlIGltw6FnZW5lcyB1c2EgbG9zIHNpdGlvcyBkZSBlbnRyZW5hbWllbnRvIHBhcmEgaWRlbnRpZmljYXIgbGFzIGNvYmVydHVyYXMgZGUgc3VlbG8gZW4gbGEgaW1hZ2VuIGNvbXBsZXRhLiBDb21vIHNpdGlvcyBkZSBlbnRyZW5hbWllbnRvIHNlIHZhbiBhIHV0aWxpemFyIGxvcyBwb2zDrWdvbm9zIGVtcGxlYWRvcyBhbnRlcmlvcm1lbnRlIHBhcmEgbGEgb2J0ZW5jacOzbiBkZSBsb3MgcGVyZmlsZXMgZXNwZWN0cmFsZXMuDQoNCjxkaXYvPg0KDQpgYGB7ciBpbmNsdWRlID0gRkFMU0V9DQpzYW1wbGV2YWwgPC0gZGZfc2FtcGxlcw0Kc2FtcGxldmFsDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KIyBBZ3JlZ2Ftb3MgbG9zIHZhbG9yZXMgZGUgY2xhc2UgKFZhbG9yZXMpIGRlIGxvcyBwb2xpZ29ub3MgZGUgY29iZXJ0dXJhIGEgc2FtcGxldmFsDQoNCnNhbXBsZXZhbCRjbGFzc3ZhbHVlIDwtIG92ZXIoc2FtcGxldmFsLCBwb2x5Z29ucykkVmFsb3INCnNhbXBsZXZhbA0KYGBgDQoNCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0NCiMgRXh0cmFlbW9zIGxvcyB2YWxvcmVzIGRlIHBpeGVsIGRlIGNhZGEgYmFuZGEgZGUgbGFuZHNhdCBxdWUgY29ycmVzcG9udGVuIGNvbiBsb3MgbXVlc3RyZW9zDQoNCnNhbXB2YWxzIDwtIGV4dHJhY3QobGFuZHNhdCwgc2FtcGxldmFsLCBkZiA9IFRSVUUpDQpoZWFkKHNhbXB2YWxzKQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0NCiMgUXVpdGFtb3MgbGEgcHJpbWVyYSBjb2x1bW5hDQoNCnNhbXB2YWxzIDwtIHNhbXB2YWxzWywgLTFdDQpzYW1wdmFscw0KYGBgDQoNCmBgYHtyIGluY2x1ZGUgPSBGQUxTRX0NCiMgQ3JlYW1vcyB1biBkYXRhLmZyYW1lIGNvbiBsYSBwcmltZXJhIGNvbHVtbmEgY29tbyBsb3MgdmFsb3JlcyBkZSBjbGFzZSB5IGxhcyBkZW3DoXMgY29uIGxvcyB2YWxvcmVzIGRlIHBpeGVsIGV4dHJhaWRvcw0KDQpzYW1wZGF0YSA8LSBkYXRhLmZyYW1lKGNsYXNzdmFsdWUgPSBzYW1wbGV2YWxAZGF0YSRjbGFzc3ZhbHVlLCBzYW1wdmFscykNCnNhbXBkYXRhICANCmBgYA0KDQpgYGB7ciBpbmNsdWRlID0gRkFMU0V9DQpjbGFzc2RmIDwtIGRhdGEuZnJhbWUoSUQgPSBjKDEsMiwzLDQsNSw2LDcpLCBsZWdlbmQgPSBjKCJBZ3VhIiwgIkJhcmJlY2hvIiwgIkN1bHRpdm8gaGVyYmFjZW8iLCAiQ3VsdGl2byBwZXJtYW5lbnRlIiwgIkRlaGVzYSIsICJJbmR1c3RyaWFsIiwgIlJlc2lkZW5jaWFsIikpDQpjbGFzc2RmDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KY2xhc3Njb2xvciA8LSBjKCJkYXJrYmx1ZSIsICJjaG9jb2xhdGUxIiwgImRhcmtncmVlbiIsICJjaGFydHJldXNlMiIsICJ5ZWxsb3ciLCAiY3lhbiIsICJkYXJrcmVkIikNCmBgYA0KDQojIyMgUmFuZG9tIEZvcmVzdA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KQ29tbyBzdSBwcm9waW8gbm9tYnJlIGluZGljYSwgUmFuZG9tIEZvcmVzdCBjb25zaXN0ZSBlbiB1bmEgZ3JhbiBjYW50aWRhZCBkZSDDoXJib2xlcyBkZSBkZWNpc2nDs24gaW5kaXZpZHVhbGVzIHF1ZSBvcGVyYW4gY29tbyB1biBjb25qdW50by4gRXN0ZSBhbGdvcml0bW8gcHVlZGUgc2VyIG1lbm9zIHNlbnNpYmxlIGFsIHJ1aWRvIHkgcHVlZGUgc2VyIG3DoXMgZWZpY2llbnRlIHF1ZSBvdHJvcyBjbGFzaWZpY2Fkb3JlcyBubyBwYXJhbcOpdHJpY29zIGRlIHVzbyBjb23Dum4sIGNvbW8gbGFzIG3DoXF1aW5hcyBkZSBzb3BvcnRlIHZlY3RvcmlhbCAoUGVsbGV0aWVyIGV0IGFsLiwgMjAxNikuIFNlIGhhbiB1dGlsaXphZG8gMTk5MyBwdW50b3MgZGUgbXVlc3RyZW8gZGlzdHJpYnVpZG9zIGFsZWF0b3JpYW1lbnRlIGVuIGxvcyA2NSBwb2zDrWdvbm9zIGNsYXNpZmljYWRvcyBwcmV2aWFtZW50ZS4gRWwgbWFwYSBkZSBjbGFzaWZpY2FjacOzbiBwcmVkaWNobyBtZWRpYW50ZSBlbCBtb2RlbG8gb2J0ZW5pZG8gcG9yIGVsIGFsZ29yaXRtbyBSYW5kb20gRm9yZXN0IHNlIG11ZXN0cmEgYSBjb250aW51YWNpw7NuOg0KDQo8ZGl2Lz4NCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KbGlicmFyeShyYW5kb21Gb3Jlc3QpDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KbW9kZWwgPC0gcmFuZG9tRm9yZXN0KGFzLmZhY3RvcihjbGFzc3ZhbHVlKX4uLCBkYXRhID0gc2FtcGRhdGEsICkNCm1vZGVsDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KcHJsYW5kc2F0MiA8LSBwcmVkaWN0KGxhbmRzYXQsIG1vZGVsLCB0eXBlPSdjbGFzcycpDQpwcmxhbmRzYXQyDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KbGlicmFyeShsYXR0aWNlKQ0KbGlicmFyeShyYXN0ZXJWaXMpDQpgYGANCg0KYGBge3IgZWNobyA9IEZBTFNFLCBvdXQud2lkdGggPSAiMTAwJSJ9DQpwcmxhbmRzYXQyIDwtIHJhdGlmeShwcmxhbmRzYXQyKQ0KbGV2ZWxzKHBybGFuZHNhdDIpIDwtIGNsYXNzZGYNCmxldmVscGxvdChwcmxhbmRzYXQyLA0KICAgICAgICAgIG1heHBpeGVscyA9IDFlNiwgDQogICAgICAgICAgeGxhYj0gTlVMTCwNCiAgICAgICAgICB5bGFiPSBOVUxMLA0KICAgICAgICAgIG1haW49ICJDbGFzaWZpY2FjacOzbiBvYnRlbmlkYSBtZWRpYW50ZSBSYW5kb20gRm9yZXN0IiwNCiAgICAgICAgICBjb2xvcmtleSA9IFRSVUUsDQogICAgICAgICAgc2NhbGVzPWxpc3QoZHJhdz1UUlVFKSwNCiAgICAgICAgICBjb2wucmVnaW9ucyA9IGNsYXNzY29sb3IsDQogICAgICAgICAgbGFiZWxzID0gRkFMU0UpDQpgYGANCg0KYGBge3IsIGVjaG8gPSBGQUxTRX0NCg0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIkM6L1VzZXJzL1VTUy9EZXNrdG9wL1BlZHJvLzIwMTkgLSAyMDIwL1BlcmNlcGNpb24gcmVtb3RhL0luZm9ybWUgMS9tYXBhMi5wbmciKQ0KDQpgYGANCg0KXA0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhIG1hdHJpeiBkZSBjb25mdXNpw7NuIHBlcm1pdGUgbGEgdmlzdWFsaXphY2nDs24gZGUgbGEgZWZlY3RpdmlkYWQgZGVsIGFsZ29yaXRtbyBkZSBjbGFzaWZpY2FjacOzbiB1dGlsaXphZG8uIExhcyBjb2x1bW5hcyBkZSBsYSBtYXRyaXogcmVwcmVzZW50YW4gZWwgbsO6bWVybyBkZSBwcmVkaWNjaW9uZXMgZGUgY2FkYSBjbGFzZSwgbWllbnRyYXMgcXVlIGxhcyBmaWxhcyByZXByZXNlbnRhbiBsYXMgb2JzZXJ2YWNpb25lcyByZWFsZXMgZW4gY2FkYSBjYXRlZ29yw61hLg0KDQo8ZGl2Lz4NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCndyaXRlUmFzdGVyKHBybGFuZHNhdDIsICJwcmVkaWNjaW9uIiwgb3ZlcndyaXRlPVRSVUUpDQpgYGANCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFfQ0KdGFibGEgPC0gZGF0YS5mcmFtZShtb2RlbCRjb25mdXNpb24pDQpuYW1lcyh0YWJsYSkgPSBjKCJBZ3VhIiwiQmFyYmVjaG8iLCJDdWx0aXZvIGhlcmJhY2VvIiwiQ3VsdGl2byBwZXJtYW5lbnRlIiwiRGVoZXNhIiwiSW5kdXN0cmlhbCIsIlJlc2lkZW5jaWFsIiwgIkVycm9yIGRlIGNsYXNlIikNCnRhYmxhDQpgYGANCg0KYGBge3IgZWNobyA9IEZBTFNFfQ0KQ2xhc2UgPC0gYygiQWd1YSIsIkJhcmJlY2hvIiwiQ3VsdGl2byBoZXJiYWNlbyIsIkN1bHRpdm8gcGVybWFuZW50ZSIsIkRlaGVzYSIsIkluZHVzdHJpYWwiLCJSZXNpZGVuY2lhbCIpDQp4IDwtIGNiaW5kKENsYXNlLCB0YWJsYSkNCmtuaXRyOjprYWJsZSh4KQ0KYGBgDQoNCiMjIEV2YWx1YWNpw7NuIGRlbCBtb2RlbG8NCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhIGV2YWx1YWNpw7NuIGRlIHByZWNpc2nDs24gZXMgZWwgcGFzbyBmaW5hbCBlbiBlbCBhbsOhbGlzaXMgZGUgbG9zIGRhdG9zIGRlIHRlbGVkZXRlY2Npw7NuLiBBeXVkYSBhIHZlcmlmaWNhciBsYSBwcmVjaXNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcy4gU2UgaGEgZWxlZ2lkbyBsYSBwcmVjaXNpw7NuIGdlbmVyYWwsIGVsIGNvZWZpY2llbnRlIEthcHBhIHkgbGEgcHJlY2lzacOzbiBkZWwgcHJvZHVjdG9yIHkgZGVsIHVzdWFyaW8gY29tbyBldmFsdWFjaW9uZXMgY3VhbnRpdGF0aXZhcyBwYXJhIGRldGVybWluYXIgbGEgcHJlY2lzacOzbiBmaW5hbCBkZSBsYSBjbGFzaWZpY2FjacOzbiBzdXBlcnZpc2FkYSBkZSBsYSBjdWJpZXJ0YSB0ZXJyZXN0cmUuICANCg0KPGRpdi8+DQoNCiMjIyBQcmVjaXNpw7NuIGdlbmVyYWwNCg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjoganVzdGlmeSI+DQoNCkxhIHByZWNpc2nDs24gZ2VuZXJhbCBlcyBsYSBtZWRpZGEgZGUgcHJlY2lzacOzbiBtw6FzIHNpbXBsZSB5IHVuYSBkZSBsYXMgbcOhcyBwb3B1bGFyZXMuIFNlIGNhbGN1bGEgZGl2aWRpZW5kbyBlbCBlbCBuw7ptZXJvIHRvdGFsIGRlIHDDrXhlbGVzIGNsYXNpZmljYWRvcyBjb3JyZWN0YW1lbnRlIChlcyBkZWNpciwgbGEgc3VtYSBkZSBsYSBkaWFnb25hbCBwcmluY2lwYWwpIHBvciBlbCBuw7ptZXJvIHRvdGFsIGRlIHDDrXhlbGVzIGVuIGxhIG1hdHJpeiBkZSBjb25mdXNpw7NuIChDb25nYWx0b24sIDE5OTEpLg0KDQo8ZGl2Lz4NCg0KJCRPdmVyYWxsXCBhY2N1cmFjeVwgKE9BKT1cZnJhY3tcc3Vte0RpYWdvbmFsfX17XHN1bXttYXRyaXh9fSQkDQoNCkRvbmRlOiANCg0KIyMjIyMjICRcc3Vte0RpYWdvbmFsfSQgPSBTdW1hIGRlIGxvcyB2YWxvcmVzIGRlIGxhIGRpYWdvbmFsIHByaW5jaXBhbCBkZSBsYSBtYXRyaXogZGUgY29uZnVzacOzblwNCiMjIyMjIyAkXHN1bXttYXRyaXh9JCA9IFN1bWEgZGUgdG9kb3MgbG9zIHZhbG9yZXMgZGUgbGEgbWF0cml6IGRlIGNvbmZ1c2nDs25cDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojIG51bWJlciBvZiBjYXNlcw0KbiA8LSBjb2xTdW1zICh0YWJsYVsgLCAxOjddKQ0Kbg0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpuMiA8LSBzdW0obikNCm4yDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmRpYWcgPC0gZGlhZyhtb2RlbCRjb25mdXNpb24pDQpkaWFnDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMgT3ZlcmFsbCBBY2N1cmFjeQ0KT0EgPC0gc3VtKGRpYWcpIC8gbjINCk9BDQpgYGANCg0KIyMjIEthcHBhDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpFc3RhIGV2YWx1YWNpw7NuIGNvcnJpZ2UgbGEgcHJlY2lzacOzbiBnZW5lcmFsIGRlIGxhcyBwcmVkaWNjaW9uZXMgZGVsIG1vZGVsbyBwb3IgbGEgcHJlY2lzacOzbiBxdWUgc2UgZXNwZXJhIHF1ZSBvY3VycmEgcG9yIGNhc3VhbGlkYWQ6DQoNCjxkaXYvPg0KDQokJEthcHBhXCAoSyk9XGZyYWN7T3ZlcmFsbFwgYWNjdXJhY3ktY2hhbmNlXCBhZ3JlZW1lbnR9ezEtY2hhbmNlXCBhZ3JlZW1lbnR9JCQNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpEb25kZToNCg0KIyMjIyMjICRPdmVyYWxsXCBhY2N1cmFjeSQgPSBEZXRlcm1pbmFkbyBwb3IgbGEgZGlhZ29uYWwgcHJpbmNpcGFsIGRlIGxhIG1hdHJpeiBkZSBjb25mdXNpw7NuXA0KIyMjIyMjICRjaGFuY2VcIGFncmVlbWVudCQgPSBTdW1hIGRlbCBwcm9kdWN0byBkZSBsb3MgdG90YWxlcyBkZSBjYWRhIGZpbGEgeSBjb2x1bW5hIGRpdmlkaWRvcyBwb3IgZWwgbsO6bWVybyB0b3RhbCBkZSBwaXhlbGVzIG11ZXN0cmVhZG9zIHBhcmEgY2FkYSBjbGFzZS4NCg0KPGRpdi8+DQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTIgPC0gdGFibGFbLCAtOF0NCnRhYmxhMg0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpwIDwtIHJvd1N1bXModGFibGEyWzE6NywgXSkNCnAgPC0gcC9uMg0KcA0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpxIDwtIGNvbFN1bXModGFibGFbICwgMTo3XSkNCnEgPC0gcS9uMg0KcQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpleHBBY2N1cmFjeSA8LSBzdW0ocCpxKQ0Ka2FwcGEgPC0gKE9BIC0gZXhwQWNjdXJhY3kpIC8gKDEgLSBleHBBY2N1cmFjeSkNCmthcHBhDQpgYGANCg0KXA0KTG9zIHZhbG9yZXMgZGUgZXZhbHVhY2nDs24gZGUgbGEgcHJlY2lzacOzbiBnZW5lcmFsIHkga2FwcGEgc2UgbXVlc3RyYW4gYSBjb250aW51YWNpw7NuOg0KDQpgYGB7ciBlY2hvID0gRkFMU0V9DQpvayA8LSBkYXRhLmZyYW1lKE92ZXJhbGxfYWNjdXJhY3kgPSBPQSwgS2FwcGEgPSBrYXBwYSkNCmtuaXRyOjprYWJsZShvaykNCmBgYA0KDQoNCiMjIyBQcmVjaXNpw7NuIGRlbCBwcm9kdWN0b3IgeSBkZWwgdXN1YXJpbw0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KU2UgcHJvZHVjZSB1biBlcnJvciBkZSBjbGFzaWZpY2FjacOzbiBjdWFuZG8gYSB1biBwaXhlbCBwZXJ0ZW5lY2llbnRlIGEgdW5hIGNsYXNlIHNlIGxlIGFzaWduYSB1bmEgY2xhc2UgZGlzdGludGEuIExhIHByZWNpc8OzbiBkZWwgUHJvZHVjdG9yIG1pZGUgZXJyb3JlcyBkZSBvbWlzacOzbiwgZXMgZGVjaXIsIGN1YW5kbyBzZSBleGNsdXllIHVuIHBpeGVsIGRlIGxhIGNhdGVnb3LDrWEgcXVlIGVzdMOhIHNpZW5kbyBldmFsdWFkYS4gRW4gY2FtYmlvLCBsYSBwcmVjaXNpw7NuIGRlbCB1c3VhcmlvIG1pZGUgbG9zIGVycm9yZXMgZGUgY29taXNpw7NuLCBlc3RvIGVzLCBjdWFuZG8gc2UgaW5jbHV5ZSB1biBwaXhlbCBpbmNvcnJlY3RhbWVudGUgZW4gbGEgY2F0ZWdvcsOtYSBxdWUgZXN0w6Egc2llbmRvIGV2YWx1YWRhLiANCg0KTGEgcHJlY2lzacOzbiBkZWwgcHJvZHVjdG9yIChQQSkgc2Ugb2J0aWVuZSBkZSBkaXZpZGlyIGVsIG7Dum1lcm8gZGUgcMOteGVsZXMgY29ycmVjdGFtZW50ZSBjbGFzaWZpY2Fkb3MgZW4gY2FkYSBjYXRlZ29yw61hIChkaWFnb25hbCBwcmluY2lwYWwgZGUgbGEgbWF0cml6IGRlIGNvbmZ1c2nDs24pIHBvciBlbCBuw7ptZXJvIGRlIHDDrXhlbGVzIGRlIHJlZmVyZW5jaWEgZGUgZXNhIGNhdGVnb3LDrWEgKGVsIHRvdGFsIGRlIGxhIGNvbHVtbmEpOg0KDQokJFByb2R1Y3RvclwgYWNjdXJhY3lcIChQQSk9XGZyYWN7RGlhZ29uYWx9e1xzdW17Y29sfX0kJA0KRG9uZGU6DQoNCiMjIyMjIyAkRGlhZ29uYWwkID0gVmFsb3IgZGUgbGEgY29sdW1uYSBwZXJ0ZW5lY2llbnRlIGEgbGEgZGlhZ29uYWwgcHJpbmNpcGFsIGRlIGxhIG1hdHJpeiBkZSBjb25mdXNpw7NuXA0KIyMjIyMjICRcc3Vte2NvbH0kID0gU3VtYSBkZSBjYWRhIGNvbHVtbmEgZGUgbGEgbWF0cml6IGRlIGNvbmZ1c2nDs25cDQoNCjxkaXYvPg0KDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpcDQpNaWVudHJhcyBxdWUgbGEgcHJlY2lzacOzbiBkZWwgdXN1YXJpbyAoVUEpIHNlIGNhbGN1bGEgZGl2aWRpZW5kbyBlbCBuw7ptZXJvIGRlIHDDrXhlbGVzIGNvcnJlY3RhbWVudGUgY2xhc2lmaWNhZG9zIGVuIGNhZGEgY2F0ZWdvcsOtYSBwb3IgZWwgbsO6bWVybyB0b3RhbCBkZSBww614ZWxlcyBxdWUgc2UgY2xhc2lmaWNhcm9uIGVuIGVzYSBjYXRlZ29yw61hIChlbCB0b3RhbCBkZSBsYSBmaWxhKToNCg0KPGRpdi8+DQoNCiQkVXNlclwgYWNjdXJhY3lcIChVQSk9XGZyYWN7RGlhZ29uYWx9e1xzdW17cm93fX0kJA0KRG9uZGU6DQoNCiMjIyMjIyAkRGlhZ29uYWwkID0gVmFsb3IgZGUgbGEgZmlsYSBwZXJ0ZW5lY2llbnRlIGEgbGEgZGlhZ29uYWwgcHJpbmNpcGFsIGRlIGxhIG1hdHJpeiBkZSBjb25mdXNpw7NuXA0KIyMjIyMjICRcc3Vte2NvbH0kID0gU3VtYSBkZSBjYWRhIGZpbGEgZGUgbGEgbWF0cml6IGRlIGNvbmZ1c2nDs25cDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpQQSA8LSBkaWFnL2NvbFN1bXModGFibGFbICwgMTo3XSkNClBBDQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NClVBIDwtIGRpYWcgLyByb3dTdW1zKHRhYmxhMlsxOjcsIF0pDQpVQQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpvdXRBY2MgPC0gZGF0YS5mcmFtZShQcmVjaXNpb25fcHJvZHVjdG9yID0gUEEsIFByZWNpc2lvbl91c3VhcmlvID0gVUEpDQpvdXRBY2MNCmBgYA0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NClwNCg0KTG9zIHZhbG9yZXMgZGUgcHJlY2lzacOzbiBkZWwgcHJvZHVjdG9yIHkgZGVsIHVzdWFyaW8gcGFyYSBjYWRhIHRpcG8gZGUgY29iZXJ0dXJhIHNlIGFncnVwYW4gZW4gbGEgc2lndWllbnRlIHRhYmxhOg0KDQo8ZGl2Lz4NCg0KYGBge3IgZWNobz1GQUxTRX0NCmhoIDwtIGNiaW5kKENsYXNlLCBvdXRBY2MpDQprbml0cjo6a2FibGUoaGgpDQpgYGANCg0KIyBEaXNjdXNpw7NuDQoNCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnkiPg0KDQpPYnNlcnZhbmRvIGxvcyBwZXJmaWxlcyBlc3BlY3RyYWxlcywgc2UgcHVlZGVuIHByZXZlciBsYXMgZGlmaWN1bHRhZGVzIHF1ZSBzZSB2YW4gYSBwcmVzZW50YXIgZW4gdG9ybm8gYSBsYSBjbGFzaWZpY2FjacOzbiBkZSBsYXMgc3VwZXJmaWNpZXMgZGUgYmFyYmVjaG8sIGN1bHRpdm9zIHBlcm1hbmVudGVzIHkgcmVzaWRlbmNpYWxlcyBjdXlhIHNlbWVqYW56YSBlc3BlY3RyYWwgY29tcGxpY2Egc3UgZGlzY3JpbWluYWNpw7NuLiBFc3RhIHNlbWVqYW56YSBwdWVkZSBlc3RhciBvY2FzaW9uYWRhIHBvciBlbCBzaXN0ZW1hIGRlIGV4cGxvdGFjacOzbiBleHRlbnNpdm8gdHJhZGljaW9uYWwgZGUgbGEgem9uYSwgZG9uZGUsIGFtcGxpb3MgbWFyY29zIGRlIHBsYW50YWNpw7NuIHVuaWRvIGEgdW5hIGxhYnJhbnphIGNvbnN0YW50ZSBkZWwgdGVycmVubywgaGFjZSBxdWUgbGFzIHN1cGVyZmljaWVzIGRlc3RpbmFkYXMgYSBjdWx0aXZvcyBwZXJtYW5lbnRlcyByZWZsZWplbiBsYSByYWRpYWNpw7NuIGRlIGZvcm1hIHNpbWlsYXIgYSBsb3MgdGVycmVub3MgZW4gYmFyYmVjaG8gKHRhbWJpw6luIGludGVuc2FtZW50ZSBsYWJyYWRvcykuIEFtYmFzIHN1cGVyZmljaWVzIGRpZmllcmVuIMO6bmljYW1lbnRlIGVuIGxhIG1heW9yIHJlZmxlY3RhbmNpYSBkZSBsb3MgY3VsdGl2b3MgcGVybWFuZW50ZXMgZGViaWRvIGEgbGEgbWF5b3IgcHJlc2VuY2lhIGRlIHZlZ2V0YWNpw7NuLiBMYSBzaW1pbGl0dWQgZXNwZWN0cmFsIGVudHJlIGVzdGFzIGRvcyBjbGFzZXMgeSBsYXMgc3VwZXJmaWNpZXMgcmVzaWRlbmNpYWxlcyBwdWVkZSBkZWJlcnNlIGEgcXVlIGVsIGNvbXBvbmVudGUgcHJpbmNpcGFsIGVuIGxhIGZhYnJpY2FjacOzbiBkZWwgbWF0ZXJpYWwgY2Vyw6FtaWNvLCB1dGlsaXphZG8gZ2VuZXJhbG1lbnRlIGVuIGVzdGUgdGlwbyBkZSBjb25zdHJ1Y2Npb25lcywgZXMgbGEgYXJjaWxsYSwgbWluZXJhbCBwcmVkb21pbmFudGUgZW4gZWwgw6FyZWEgZGUgZXN0dWRpby4gU2luIGVtYmFyZ28sIGVzdGFzIGZpcm1hcyBlc3BlY3RyYWxlcyBkaWZpZXJlbiBkZSBsYXMgb2J0ZW5pZGFzIGVuIGxhcyBzdXBlcmZpY2llcyBpbmR1c3RyaWFsZXMsIHRhbWJpZW4gZGVkaWNhZGFzIGEgbGEgZWRpZmljYWNpw7NuLCBwZXJvIGRvbmRlIHNlIHV0aWxpemFuIG1hdGVyaWFsZXMgbWV0w6FsaWNvcyBwYXJhIHN1IGNvbnN0cnVjY2nDs24uDQoNCkxhcyBzdXBlcmZpY2llcyBkZXN0aW5hZGFzIGEgY3VsdGl2b3MgaGVyYsOhY2VvcyBtYW50aWVuZW4gZWwgcGVyZmlsIGhhYml0dWFsIHBhcmEgZXNlIHRpcG8gZGUgdmVnZXRhY2nDs24sIGJhamEgcmVsZmVjdGFuY2lhIGVuIGVsIGVzcGVjdHJvIHZpc2libGUgeSB1biBwaWNvIHByb251bmNpYWRvIGVuIGVsIGluZnJhcnJvam8gY2VyY2FubyAoTklSKS4gRW4gZWwgY2FzbyBkZSBsb3MgY3VsdGl2b3MgcGVybWFuZW50ZXMsIGxhIG1lbm9yIHJlZmxlY3RhbmNpYSBlbiBlbCBOSVIgcHVlZGUgZGViZXJzZSBhIHN1IGJhamEgZGVuc2lkYWQgZGUgcGxhbnRhY2nDs24sIGRvbmRlIGdyYW4gcGFydGUgZGUgbGEgZW5lcmfDrWEgcmVjaWJpZGEgZW4gZWwgc2Vuc29yIGVzIHJlZmxlamFkYSBwb3IgZWwgc3VlbG8gc3VieWFjZW50ZS4gQWxnbyBkaXN0aW50byBzdWNlZGUgZW4gbGFzIMOhcmVhcyBkZSBkZWhlc2EsIGRvbmRlIGVsIHRlcnJlbm8gZXN0YSBjb21wbGV0YW1lbnRlIGN1YmllcnRvIGRlIHZlZ2V0YWNpw7NuLiBFbiBlc3RlIGNhc28gbGEgYmFqYSByZWZsZWN0YW5jaWEgZW4gZWwgaW5mcmFycm9qbyBjZXJjYW5vIHB1ZWRlIGVzdGFyIHByb2R1Y2lkYSBwb3IgZWwgdGlwbyBkZSB2ZWdldGFjacOzbiBwcmVzZW50ZSBlbiBsYSB6b25hLCBjb24gZnJhY2Npb25lcyBzZWNhcyB5IGxlw7Fvc2FzIHF1ZSBwb3NlZW4gZXNjYXNhIGNhbnRpZGFkIGRlIGNsb3JvZmlsYXMuIA0KDQpMYSByZWZsZWN0YW5jaWEgZW4gbGEgcG9yY2nDs24gZGVsIGluZnJhcnJvam8gbWVkaW8gKFNXSVIxKSBkZSBsYXMgZGlzdGludGFzIGNsYXNlcyBkZSB2ZWdldGFjacOzbiBlc3TDoSBpbmZsdWVuY2lhZGEgcG9yIGxhIGNhbnRpZGFkIGRlIGh1bWVkYWQgcHJlc2VudGUgZW4gc3VzIHRlamlkb3MuIEEgbWVkaWRhIHF1ZSBhdW1lbnRhIGVsIGNvbnRlbmlkbyBkZSBhZ3VhIGVuIGxhIGhvamEsIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGFic29yY2nDs24gZGUgcmFkaWFjacOzbiBTV0lSIHNlIHZlbiBhZmVjdGFkYXMgcG9yIGxhcyBwcm9waWVkYWRlcyBlc3BlY3RyYWxlcyBkZWwgYWd1YSAoU2VyYmluIGV0IGFsLiwgMjAwOSkuIEVzdG8gZXhwbGljYXLDrWEgbGEgbWVub3IgcmVmbGVjdGFuY2lhIGRlIGxvcyBjdWx0aXZvcyBhbnVhbGVzIGVuIGVzdGEgcG9yY2nDs24gZGVsIGVzcGVjdHJvLCBkZWJpZG8gYSBxdWUsIHN1cyBlc3RydWN0dXJhcyBkZWJlbiBhbG1hY2VuYXIgbWF5b3IgY2FudGlkYWQgZGUgYWd1YSBwYXJhIG1hbnRlbmVyIGxhIHR1cmdlbmNpYS4gVW5pZG8gYSBlc3RvLCBtdWNob3MgYWdyaWN1bHRvcmVzIGF1bWVudGFuIGxhIGRpc3BvbmliaWxpZGFkIGRlIGFndWEgcGFyYSBlc29zIGN1bHRpdm9zIG1lZGlhbnRlIGxhIHV0aWxpemFjacOzbiBzaXN0ZW1hcyBkZSByaWVnby4NCg0KRW4gbGEgbWF0cml6IGRlIGNvcnJlbGFjacOzbiBzZSBwdWVkZSBvYnNlcnZhciBxdWUgbGEgYmFuZGEgZGVsIGluZnJhcnJvam8gY2VyY2FubyAoTklSKSBlcyBsYSBtZW5vcyBjb3JyZWxhY2lvbmFkYSBjb24gZWwgcmVzdG8sIHNpZW5kbyBsYSBxdWUgcG9zZWUgbWVub3IgaW5mb3JtYWNpw7NuIHJlZHVuZGFudGUgZGUgbGFzIG90cmFzIGJhbmRhcy4gRXMgcG9yIGVzdG8gcXVlIHNlIHV0aWxpemEgZW4gbGEgZ3JhbiBtYXlvcsOtYSBkZSBsb3Mgw61uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYS4gRWwgcmVzdG8gZGUgYmFuZGFzIHBvc2VlbiB1bmEgY29ycmVsYWNpw7NuIGFsdGEsIHN1cGVyaW9yIGFsIDcwJS4NCg0KRWwgw61uZGljZSBkZSB2ZWdldGFjacOzbiBkZSBkaWZlcmVuY2lhIG5vcm1hbGl6YWRhIChORFZJKSBtdWVzdHJhIHZhbG9yZXMgYmFzdGFudGUgZGlzcGFyZXMgZW50cmUgbGFzIGRpZmVyZW50ZXMgw6FyZWFzIGRlIHZlZ2V0YWNpw7NuLiBMb3MgY3VsdGl2b3MgaGVyYsOhY2VvcyB1YmljYWRvcyBlbiBsYSByaWJlcmEgZGVsIHLDrW8gVGFqbyB5IGVuIGxhIHpvbmEgbm9yb2VzdGUgZGVsIMOhcmVhIGRlIGVzdHVkaW8gcHJlc2VudGFuIHZhbG9yZXMgY2VyY2Fub3MgYSAxLCBsbyBxdWUgZXN0w6EgYXNvY2lhZG8gYSB1bmEgdmVnZXRhY2nDs24gbcOhcyBhY3RpdmEgKENodXZpZWNvLCAyMDA4KS4gU2kgYmllbiBlbCB2YWxvciBkZWwgTkRWSSBwdWVkZSB2YXJpYXIgZW4gZnVuY2nDs24gZGUgZGl2ZXJzb3MgZmFjdG9yZXMgY29tbyBlbCBlc3RhZG8gZmVub2zDs2dpY28gZGUgbGEgdmVnZXRhY2nDs24gbyBzaXR1YWNpw7NuIGjDrWRyaWNhIGRlbCBzdWVsbywgcHVlZGUgdXRpbGl6YXJzZSBjb21vIGNyaXRlcmlvIGRlIGNsYXNpZmljYWNpw7NuIHNpIHNlIGRpc3BvbmUgZGUgdmFsb3JlcyBkZSByZWZlcmVuY2lhLiBIZXJuw6FuZGV6IGV0IGFsLiwgKDIwMTQpIG9idGl2aWVyb24gdmFsb3JlcyBkZSBORFZJIHF1ZSBvc2NpbGFuIGVudHJlIDAsMyB5IDAsNCBwYXJhIG90cmFzIGRlaGVzYXMgZGUgbGEgUGVuw61uc3VsYSBJYsOpcmljYSwgbG8gcXVlIGNvbmN1ZXJkYSBjb24gbG8gb2J0ZW5pZG8gZW4gZWwgcHJlc2VudGUgdHJhYmFqby4NCg0KTWVkaWFudGUgZWwgw61uZGljZSBkZSBhZ3VhIGRlIGRpZmVyZW5jaWEgbm9ybWFsaXphZGEgKE5EV0kpIHNlIGxvZ3LDsyBpZGVudGlmaWNhciBsYXMgbWFzYXMgZGUgYWd1YSBwcmVzZW50ZXMgZW4gZWwgw6FyZWEgZGUgZXN0dWRpby4gRWwgw61uZGljZSBwZXJtaXRlLCBpbmNsdXNvIGEgc2ltcGxlIHZpc3RhLCByZWNvbm9jZXIgcGVxdWXDsWFzIGJhbHNhcyBkZSByaWVnby4gU2luIGVtYmFyZ28sIG5vIHNlIG9idHV2aWVyb24gbG9zIG1pc21vcyByZXN1bHRhZG9zIGFsIGludGVudGFyIGlkZW50aWZpY2FyIGVsIHRlcnJlbm8gY29uc3RydWlkbyBtZWRpYW50ZSBlbCBOREJJLiBMYSBkaXNjcmltaW5hY2nDs24gZGUgY2xhc2VzIG5vIGZ1ZSBkZWwgdG9kbyBlZmVjdGl2YSBkZWJpZG8gYSBsYXMgc2ltaWxpdHVkZXMgZXNwZWN0cmFsZXMgY29tZW50YWRhcyBhbnRlcmlvcm1lbnRlLiANCg0KSnVudG8gY29uIGxvcyDDrW5kaWNlcyBkZSBkaWZlcmVuY2lhIG5vcm1hbGl6YWRhLCBsYXMgY29tcG9zaWNpb25lcyBkZSBjb2xvciBwZXJtaXRpZXJvbiBsYSBpZGVudGlmaWNhY2nDs24gcHJldmlhIGRlIGxhcyBjb2JlcnR1cmFzIGRlIHN1ZWxvLiBFcyBwcmVjaXNvIGRlc3RhY2FyIHF1ZSBsYXMgY29tcG9zaWNpb25lcyBlbiBmYWxzbyBjb2xvciBzb24gZXNwZWNpYWxtZW50ZSDDunRpbGVzIHBhcmEgZWwgcmVjb25vY2ltaWVudG8gZGUgc3VwZXJmaWNpZXMgY29uIGNpZXJ0YXMgY2FyYWN0ZXLDrXN0aWNhcyBlc3BlY3RyYWxlcywgY29tbyBsYSB2ZWdldGFjacOzbi4gDQoNCk1lZGlhbnRlIGVsIGFsZ29yaXRtbyBkZSBjbGFzaWZpY2FjacOzbiBzdXBlcnZpc2FkYSBSYW5kb20gRm9yZXN0IHNlIG9idHV2byB1biBidWVuIG1hcGEgZGUgY29iZXJ0dXJhIGRlIHN1ZWxvcywgZG9uZGUgc2UgcHVlZGVuIGlkZW50aWZpY2FyIGxhIG1heW9yw61hIGRlIHN1cGVyZmljaWVzIGRlc3RhY2FkYXMgYW50ZXJpb3JtZW50ZSBtZWRpYW50ZSBsb3Mgw61uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYSB5IGxhcyBjb21wb3NpY2lvbmVzIGRlIGNvbG9yLiBUcmFzIGNhbGN1bGFyIGxhIHByZWNpc2nDs24gZ2VuZXJhbCBkZWwgbW9kZWxvLCBzZSBvYnR1dm8gcXVlIGVsIDkxLDM3JSBkZSBsYXMgbXVlc3RyYXMgZXN0YWJhbiBjb3JyZWN0YW1lbnRlIGNsYXNpZmljYWRhcywgY29uIHVuIGNvZWZpY2llbnRlIGthcHBhIGRlIDAsODk0LCBlbCBjdWFsIHNlIGNvbnNpZGVyYSBjYXNpIHBlcmZlY3RvIChMYW5kaXMgJiBLb2NoLCAxOTc3KS4gDQoNCkxhIGNhdGVnb3LDrWEgcGVvciBjbGFzaWZpY2FkYSBwb3IgZWwgbW9kZWxvIGVzIGN1bHRpdm9zIHBlcm1hbmVudGVzLCBjb24gdW5hIHByZWNpc2nDs24gZGUgcHJvZHVjdG9yIHkgZGUgdXN1YXJpbyBkZSAwLDc3NTMgeSAwLDc4MTEgcmVzcGVjdGl2YW1lbnRlLiBFc3RvIHF1aWVyZSBkZWNpciBxdWUgZWwgNzcsNTMlIGRlIGxvcyBwaXhlbGVzIGNsYXNpZmljYWRvcyBwcmV2aWFtZW50ZSBlbiBlc2EgY2F0ZWdvcsOtYSB0YW1iacOpbiBhcGFyZWNlbiBjb24gZXNhIGNsYXNpZmljYWNpw7NuIGVuIGVsIG1hcGEgKHByZWNpc2nDs24gZGVsIHByb2R1Y3RvcikgeSBxdWUgZWwgNzgsMTElIGRlIGxvcyBww614ZWxlcyBxdWUgYXBhcmVjZW4gY29uIGVzYSBjbGFzZSBlbiBlbCBtYXBhIHJlYWxtZW50ZSBzb24gY3VsdGl2b3MgcGVybWFuZW50ZXMgKHByZWNpc2nDs24gZGVsIHVzdWFyaW8pLiBBZGVtYXMgZGUgw6lzdGEsIGxhcyDDum5pY2FzIGNsYXNlcyBjb24gdW5hIHByZWNpc2nDs24gbWVub3IgYWwgOTAlIHNvbiBiYXJiZWNobyAoMC44Mzg2IHkJMC44MjQxKSB5IHJlc2lkZW5jaWFsICgwLjg3MDIgeQkwLjc3NTUpLiBPYnNlcnZhbmRvIGxhIG1hdHJpeiBkZSBjb25mdXNpw7NuLCBzZSBwdWVkZSBhcHJlY2lhciBxdWUgbGEgbWF5b3LDrWEgZGUgbG9zIHDDrXhlbGVzIGNsYXNpZmljYWRvcyBpbmNvcnJlY3RhbWVudGUgZW4gZXN0YXMgY2F0ZWdvcsOtYXMgaGFuIHNpZG8gYWRqdWRpY2FkbyBlbnRyZSBlc3RhcyBtaXNtYXMgY2F0ZWdvcsOtYXMsIGNvbW8gc2UgcHJlZGlqbyBhbCBhbmFsaXphciBlbCBncsOhZmljbyBkZSBwZXJmaWxlcyBlc3BlY3RyYWxlcy4gUG9yIGVqZW1wbG8sIGEgbGEgY2F0ZWdvcsOtYSBkZSBiYXJiZWNobyBzZSBsZSBoYW4gaW5jbHVpZG8gMzMgcGl4ZWxlcyBkZSBjdWx0aXZvcyBwZXJtYW5lbnRlcyB5IDEyIGRlIHJlc2lkZW5jaWFsLCBtaWVudHJhcyBxdWUgYSBsYSBjbGFzZSBDdWx0aXZvcyBwZXJtYW5lbnRlcyBzZSBsZSBoYW4gYWRqdWRpY2FkbyAzMCBwaXhlbGVzIHBlcnRlbmVjaWVudGVzIGEgYmFyYmVjaG8geSAxMyBwZXJ0ZW5lY2llbnRlcyBhIHJlc2lkZW5jaWFsLg0KDQo8ZGl2Lz4NCg0KIyBDb25jbHVzacOzbg0KDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBqdXN0aWZ5Ij4NCg0KTGFzIHJlZ2lvbmVzIHNlbWnDoXJpZGFzIGRlIGxhIHByb3ZpbmNpYSBkZSB0b2xlZG8gcHJlc2VudGFuLCBlbiBhbGd1bmFzIGRlIHN1cyBjdWJpZXJ0YXMsIHNlbWVqYW56YXMgZXNwZWN0cmFsZXMgeSByYWRpb23DqXRyaWNhcyBxdWUgcmVkdWNlbiBsYSBwcmVjaXNpw7NuIGNvbiBsYSBxdWUgc2UgcHVlZGUgZWxhYm9yYXIgdW5hIGNsYXNpZmljYWNpw7NuIHN1cGVydmlzYWRhIGRlIGNvYmVydHVyYSBkZSBzdWVsby4gDQoNCkRlYmlkbyBhIGxhIGdyYW4gY2FudGlkYWQgZGUgaW5mb3JtYWNpw7NuIHF1ZSBhcG9ydGEsIGVsIGdyw6FmaWNvIGRlIHBlcmZpbGVzIGVzcGVjdHJhbGVzIGVzIHVuIHByaW1lciBwYXNvIGZ1bmRhbWVudGFsIHBhcmEgbGEgZWxhYm9yYWNpw7NuIGRlIHVuYSBjbGFzaWZpY2FjacOzbiBzdXBlcnZpc2FkYSBkZSBjb2JlcnR1cmFzLiBUYW1iacOpbiBlcyByZWNvbWVuZGFibGUgbGEgYXBsaWNhY2nDs24gZGUgw61uZGljZXMgZGUgZGlmZXJlbmNpYSBub3JtYWxpemFkYSB5IGNvbXBvc2ljaW9uZXMgZGUgY29sb3IgY29tbyBoZXJyYW1pZW50YXMgcGFyYSBsYSBjb21wcmVuc2nDs24gZXNwZWN0cmFsIGRlIGxhcyBzdXBlcmZpY2llcyBldmFsdWFkYXMuIA0KDQpDb24gZWwgYWxnb3JpdG1vIFJhbmRvbSBGb3Jlc3Qgc2Ugb2J0aWVuZW4gYnVlbm9zIG1vZGVsb3MgZGUgY2xhc2lmaWNhY2nDs24gc3VwZXJ2aXNhZGEsIGEgcGVzYXIgZGUgbGFzIHNpbWlsaXR1ZGVzIGVzcGVjdHJhbGVzIHByZXNlbnRlcyBlbiBsYXMgY29iZXJ0dXJhcyBkZWwgw6FyZWEgZGUgZXN0dWRpby4gTm8gb2JzdGFudGUsIGVzIHByZWNpc28gdGVuZXIgZW4gY3VlbnRhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBlbiBsYSBldmFsdWFjacOzbiBkZSBwcmVjaXNpw7NuIGRlbCBtb2RlbG8gYSBsYSBob3JhIGRlIGxsZXZhciBhIGNhYm8gdW5hIGludGVycHJldGFjacOzbiBkZWwgbWFwYSBkZSBjbGFzaWZpY2FjacOzbi4NCg0KPGRpdi8+DQoNCiMgQmlibGlvZ3JhZsOtYQ0KDQpBTE9OU08sIENhcm1lbG87IE1PUkVOTywgVmljdG9yaWFubyB5IFJPRFLDjUdVRVosIEVsw61hcyAoMTk5MykuIERldGVybWluYWNpw7NuIGV4cGVyaW1lbnRhbCBkZSBsYSBmaXJtYSBlc3BlY3RyYWwgZGUgbGEgdmVnZXRhY2nDs24uIHVuYSBzZW5jaWxsYSBwcsOhY3RpY2EgZGUgaW50cm9kdWNjacOzbiBhIGxhIHRlbGVkZXRlY2Npw7NuLiBlbjogdGVsZWRldGVjY2nDs24uIGF2YW5jZXMgeSBhcGxpY2FjaW9uZXMuIEVuOiBNZW1vcmlhcyBWSUlJIENvbmdyZXNvIE5hY2lvbmFsIGRlIFRlbGVkZXRlY2Npw7NuLiBwLiA0MjktNDMyLg0KDQpDaHV2aWVjbywgRS4gKDIwMDgpLiBUZWxlZGV0ZWNjacOzbiBhbWJpZW50YWwsIGxhIG9ic2VydmFjacOzbiBkZSBsYSB0aWVycmEgZGVzZGUgZWwgZXNwYWNpby4gQmFyY2Vsb25hLCBFc3Bhw7FhLCBFZGl0b3JpYWwgQXJpZWwuDQoNCkNvbmdhbHRvbiwgUi4gRy4gKDE5OTEpLiBBIHJldmlldyBvZiBhc3Nlc3NpbmcgdGhlIGFjY3VyYWN5IG9mIGNsYXNzaWZpY2F0aW9ucyBvZiByZW1vdGVseSBzZW5zZWQgZGF0YS4gUmVtb3RlIHNlbnNpbmcgb2YgZW52aXJvbm1lbnQsIDM3KDEpLCAzNS00Ni4NCg0KRW1pbGlvIENodXZpZWNvLiAoMjAxMCkuIOKAnFRlbGVkZXRlY2Npw7NuIEFtYmllbnRhbOKAnS4gRWRpY2nDs24gMjAxMCwNCkVkaXRvcmlhbCBBcmllbCwgcGFnIDE4LDQ2LDU1Lg0KDQpGZXJyZWlyYSwgTS4gVC4gKDIwMTMpLiBDYWxpZGFkIGVjb2zDs2dpY2EgZW4gbGEgRGVtYXJjYWNpw7NuIEhpZHJvZ3LDoWZpY2EgZGVsIFRham86IFVuYSBwZXJzcGVjdGl2YSBpbnRlZ3JhZGEuIEVsIFRham8uIEhpc3RvcmlhIGRlIHVuIHLDrW8gaWdub3JhZG8sIDE0NS0xNzEuDQoNCkdBUkPDjUEtTUVMw4lOREVaLCBFLiBELiBVLiBBLiBSLiBELiBPLiAoMjAwNikuIEFuw6FsaXNpcyB2aXN1YWwgZGUgaW3DoWdlbmVzLiDDgXJlYSBkZSBHZW9kaW7DoW1pY28gRXh0ZXJuYS4NCg0KR8OzbWV6LCBDLiwgV2hpdGUsIEouIEMuLCAmIFd1bGRlciwgTS4gQS4gKDIwMTYpLiBPcHRpY2FsIHJlbW90ZWx5IHNlbnNlZCB0aW1lIHNlcmllcyBkYXRhIGZvciBsYW5kIGNvdmVyIGNsYXNzaWZpY2F0aW9uOiBBIHJldmlldy4gSVNQUlMgSm91cm5hbCBvZiBQaG90b2dyYW1tZXRyeSBhbmQgUmVtb3RlIFNlbnNpbmcsIDExNiwgNTUtNzIuDQoNCkhhbiwgSy4gUy4sIENoYW1wZWF1eCwgSi4gTC4sICYgUm91amVhbiwgSi4gTC4gKDIwMDQpLiBBIGxhbmQgY292ZXIgY2xhc3NpZmljYXRpb24gcHJvZHVjdCBvdmVyIEZyYW5jZSBhdCAxIGttIHJlc29sdXRpb24gdXNpbmcgU1BPVDQvVkVHRVRBVElPTiBkYXRhLiBSZW1vdGUgc2Vuc2luZyBvZiBFbnZpcm9ubWVudCwgOTIoMSksIDUyLTY2Lg0KDQpIZXJuw6FuZGV6LCBDLiBHLiwgRXNjcmliYW5vLCBKLiBBLiwgJiBUQVJRVUlTLCBZLiAoMjAxNCkuIENPTVBBUkFDScOTTiBERUwgw41ORElDRSBERSBWRUdFVEFDScOTTiBERSBESUZFUkVOQ0lBIE5PUk1BTElaQURBIE9CVEVOSURPIEEgRElGRVJFTlRFUyBFU0NBTEFTIEVOIFBBU1RPUyBERSBERUhFU0EuIFBBU1RPUyBZIFBBQywgMTIxLTEyOC4NCg0KSmVuc2VuLCBKb2huIFIuICgyMDE1KS4gSW50cm9kdWN0b3J5IERpZ2l0YWwgSW1hZ2UgUHJvY2Vzc2luZzogQSBSZW1vdGUgU2Vuc2luZyBQZXJzcGVjdGl2ZS4gVVNBLiBQcmVudGljZSBIYWxsIFByZXNzLg0KDQpMYW5kaXMsIEouIFIuLCAmIEtvY2gsIEcuIEcuICgxOTc3KS4gVGhlIG1lYXN1cmVtZW50IG9mIG9ic2VydmVyIGFncmVlbWVudCBmb3IgY2F0ZWdvcmljYWwgZGF0YS4gYmlvbWV0cmljcywgMTU5LTE3NC4NCg0KTHUsIEQuLCAmIFdlbmcsIFEuICgyMDA3KS4gQSBzdXJ2ZXkgb2YgaW1hZ2UgY2xhc3NpZmljYXRpb24gbWV0aG9kcyBhbmQgdGVjaG5pcXVlcyBmb3IgaW1wcm92aW5nIGNsYXNzaWZpY2F0aW9uIHBlcmZvcm1hbmNlLiBJbnRlcm5hdGlvbmFsIGpvdXJuYWwgb2YgUmVtb3RlIHNlbnNpbmcsIDI4KDUpLCA4MjMtODcwLg0KDQpNYWxpaywgTS4gUy4sIFNodWtsYSwgSi4gUC4sICYgTWlzaHJhLCBTLiAoMjAxOSkuIFJlbGF0aW9uc2hpcCBvZiBMU1QsIE5EQkkgYW5kIE5EVkkgdXNpbmcgTGFuZHNhdC04IGRhdGEgaW4gS2FuZGFpaGltbWF0IFdhdGVyc2hlZCwgSG9zaGFuZ2FiYWQsIEluZGlhLg0KDQpNY0ZlZXRlcnMsIFMuIEsuICgxOTk2KS4gVGhlIHVzZSBvZiB0aGUgTm9ybWFsaXplZCBEaWZmZXJlbmNlIFdhdGVyIEluZGV4IChORFdJKSBpbiB0aGUgZGVsaW5lYXRpb24gb2Ygb3BlbiB3YXRlciBmZWF0dXJlcy4gSW50ZXJuYXRpb25hbCBqb3VybmFsIG9mIHJlbW90ZSBzZW5zaW5nLCAxNyg3KSwgMTQyNS0xNDMyLiANCg0KUGF0dGFuYXlhaywgUy4gUC4sICYgRGl3YWthciwgUy4gSy4gKDIwMTgpLiBTZWFzb25hbCBDb21wYXJhdGl2ZSBTdHVkeSBvZiBORFZJLCBOREJJIGFuZCBORFdJIG9mIEh5ZGVyYWJhZCBDaXR5IChUZWxhbmdhbmEpIEJhc2VkIG9uIExJU1MtSUlJIEltYWdlIFVzaW5nIFJlbW90ZSBTZW5zaW5nIGFuZCBESVAuIEtob2o6IEFuIEludGVybmF0aW9uYWwgUGVlciBSZXZpZXdlZCBKb3VybmFsIG9mIEdlb2dyYXBoeSwgNSgxKSwgNzgtODYuDQoNClJlaXMsIEkuLCBCYXJvbiwgRC4sICYgU2hhaGFmLCBTLiAoMjAxOCkuIFByb2JhYmlsaXN0aWMgUmFuZG9tIEZvcmVzdC4NCg0KU2VyYmluLCBHLiwgRGF1Z2h0cnksIEMuIFMuLCBIdW50LCBFLiBSLiwgQnJvd24sIEQuIEouLCAmIE1jQ2FydHksIEcuIFcuICgyMDA5KS4gRWZmZWN0IG9mIHNvaWwgc3BlY3RyYWwgcHJvcGVydGllcyBvbiByZW1vdGUgc2Vuc2luZyBvZiBjcm9wIHJlc2lkdWUgY292ZXIuIFNvaWwgU2NpZW5jZSBTb2NpZXR5IG9mIEFtZXJpY2EgSm91cm5hbCwgNzMoNSksIDE1NDUtMTU1OC4NCg0KWW91bmcsIE4uIEUuLCBBbmRlcnNvbiwgUi4gUy4sIENoaWduZWxsLCBTLiBNLiwgVm9yc3RlciwgQS4gRy4sIExhd3JlbmNlLCBSLiwgJiBFdmFuZ2VsaXN0YSwgUC4gSC4gKDIwMTcpLiBBIHN1cnZpdmFsIGd1aWRlIHRvIExhbmRzYXQgcHJlcHJvY2Vzc2luZy4gRWNvbG9neSwgOTgoNCksIDkyMC05MzIuDQoNClpoYW5nLCBZLiwgR3VvLCBMLiwgQ2hlbiwgWS4sIFNoaSwgVC4sIEx1bywgTS4sIEp1LCBRLiwgLi4uICYgV2FuZywgUy4gKDIwMTkpLiBQcmVkaWN0aW9uIG9mIFNvaWwgT3JnYW5pYyBDYXJib24gYmFzZWQgb24gTGFuZHNhdCA4IE1vbnRobHkgTkRWSSBEYXRhIGZvciB0aGUgSmlhbmdoYW4gUGxhaW4gaW4gSHViZWkgUHJvdmluY2UsIENoaW5hLiBSZW1vdGUgU2Vuc2luZywgMTEoMTQpLCAxNjgzLg0K