3. REPORTING BY PROGRAM AREA
MALARIA
- Number of children under 5 years of age with confirmed malaria who received treatment for malaria from an appropriate provider in USG-supported areas [15 fee proxy]


- Percent of pregnant women who received doses of sulfadoxine/ pyrimethamine (S/P) for Intermittent Preventive Treatment (IPT) during ANC visits [2.4]


MATERNAL, NEONATAL, AND CHILD HEALTH
- Number of children under five years of age that received treatment for an acute respiratory infection from an appropriate provider [5 fee proxy]


- Number of insecticide-treated nets (ITN) distributed during antenatal and/or child immunization visits


- Number of cases of child diarrhea treated in USG-supported programs [7 fee proxy]


- Number of children less than 12 months of age who received three doses of pentavalent vaccine [9 fee proxy]


- Percent of children less than 12 months of age who received measles vaccine from USG-supported programs [10]


- Percentage of pregnant women attending at least one antenatal care (ANC) visit with a skilled provider from USG- supported health facilities


- Percentage of pregnant women attending at least one and at least 4 antenatal care (ANC) with a skilled provider from USG-supported health facilities [12 fee]


- Percentage of deliveries with an SBA in USG-supported facilities


- Number of women giving birth who received uterotonics in the third stage of labor (OR immediately after birth) through USG-supported programs [2.1.4]


- Number and percentage of newborns receiving essential newborn care through USG-supported programs


- Number of postpartum/newborn visits within three days of birth in USG-supported programs [2.1.6]


- Drop-out rate in DTP-HepB-Hib3 among children less than 12 months of age [2.1.9]
NUTRITION
Number of individuals receiving nutrition-related professional training through USG supported nutrion programs [2.1.10]
Number of children under-five (0-59 months) reached by USG-supported nutrition programs [2.1.11]


REPRODUCTIVE HEALTH/FAMILY PLANNING
- Number of new acceptors using modern contraceptive methods in USG-supported facilities [3 fee proxy]


- Number of counseling visits for FP/ RH as result of USG support [2.3]
WATER, SANITATION, AND HYGIENE
Number of people gaining access to basic drinking water services as a result of USG assistance [2.6.2]
Number of people gaining access to a basic sanitation service as a result of USG assistance [2.6.3]
4.REPORTING BY PROGRAM ACTIVITIES
cfr rapport programmatique
LS0tDQp0aXRsZTogIkFuYWx5c2VfRG9ubmVlc19BdnJpbF9ITCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLGVjaG89RixmaWcuYWxpZ249ImNlbnRlciJ9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFKQ0KYGBgDQoNCiZuYnNwOw0KDQoNCiMjIDMuIFJFUE9SVElORyBCWSBQUk9HUkFNIEFSRUENCiZuYnNwOw0KDQpgYGB7cixlY2hvPUYsbWVzc2FnZT1GfQ0KZGF0YWI8LXJlYWQuY3N2KCJEQVRBQi5jc3YiKQ0KI2RhdGFjPC1yZWFkLmNzdigiREFUQUMuY3N2IikNCiNkYXRhYjwtZGF0YWMNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQoNCiNiPC1uYW1lcyhkYXRhYikNCiNiPC1nc3ViKCJcXC4rIiwiXFwuIixiKQ0KI2Q8LSdzb21ldGhpbmcnDQojZm9yIChpIGluIDE6NSl7ZFtpXTwtYltpXX0NCiNmb3IgKGkgaW4gNjpsZW5ndGgoYikpew0KICNmPC1zdHJzcGxpdChiW2ldLCJcXC4iKQ0KICAjZjwtdW5saXN0KGYpDQogICNkW2ldPC1wYXN0ZShmWzRdLGZbNV0sZltsZW5ndGgoZildLHNlcD0iLiIpfQ0KICNkWzQ6NV08LWdzdWIoIltBXFwuMlxcLjFcXC5dIiwnJyxkWzQ6NV0pDQogDQpuYW1lcyhkYXRhYilbNjo4XTwtcGFzdGUwKCJTUCIsMTozKQ0KbmFtZXMoZGF0YWIpWzI1OjI2XTwtcGFzdGUwKCJwYWx1IixjKCJzIiwiZyIpLHNlcD0iXyIpDQpuYW1lcyhkYXRhYilbMjA6MjFdPC1wYXN0ZTAoIkRpYXJyX3NldiIsMToyKQ0KDQojZGF0YWckcGVyaW9kbmFtZTwtYXMuY2hhcmFjdGVyKGRhdGFnJHBlcmlvZG5hbWUpDQojZGF0YWckcGVyaW9kbmFtZVtkYXRhZyRwZXJpb2RuYW1lPT0iSmFudmllciJdPC0iMS5KYW52Ig0KZGF0YWIkcGVyaW9kbmFtZTwtcGFzdGUwKG1hdGNoKGRhdGFiJHBlcmlvZG5hbWUsYygiTm92ZW1icmUiLCJEw6ljZW1icmUiLCJKYW52aWVyIiwiRsOpdnJpZXIiLCJNYXJzIiwiQXZyaWwiKSksIi4iLGRhdGFiJHBlcmlvZG5hbWUpDQpkYXRhZzwtZGF0YWJbZGF0YWIkcGVyaW9kbmFtZSAlaW4lIGMoIjYuQXZyaWwiKSxdDQoNCm5hbWVzKGRhdGFiKVszMTozNV08LXBhc3RlMCgiTWlsZENwcyIsMTo1KQ0KI3NpbmsoIk5hbWVzYi50eHQiKQ0KI25hbWVzKGRhdGFiKQ0KI3NpbmsoKQ0KDQpkYXRhZzwtYWdncmVnYXRlKGRhdGFnWyw0Om5jb2woZGF0YWcpXSxsaXN0KGRhdGFnJHpzLGRhdGFnJHBlcmlvZG5hbWUpLHN1bSxuYS5ybT1UKQ0KbmFtZXMoZGF0YWcpWzE6Ml08LWMoInpzIiwicGVyaW9kbmFtZSIpDQpuYW1lcyhkYXRhZylbM108LSJDUE4iDQpuYW1lcyhkYXRhYilbNF08LSJDUE4iDQpuYW1lcyhkYXRhZylbNF08LSJDUE40Ig0KbmFtZXMoZGF0YWIpWzVdPC0iQ1BONCINCiNzaW5rKCJOYW1lc2cudHh0IikNCiNuYW1lcyhkYXRhZykNCiNzaW5rKCkNCg0KdG90MiA8LSBmdW5jdGlvbih4ZCl7DQogIHA8LWMoYXMuY2hhcmFjdGVyKHhkWywxXSksJ1RvdGFsJykNCiAgYTwtYXBwbHkoeGRbLDI6bmNvbCh4ZCldLDIsc3VtLG5hLnJtPVQpDQogIGE8LXJiaW5kKHhkWywyOm5jb2woeGQpXSxhKQ0KICB1PC1kYXRhLmZyYW1lKHAsYSkNCiAgbmFtZXModSlbMV08LSJNb2lzIg0KICBhc3NpZ24oInRvdGFsIix1LGVudmlyPS5HbG9iYWxFbnYpDQp9DQoNCmNpYmxlczwtcmVhZC5jc3YoIkM6L1VzZXJzL011eXVuZ2FQL0RvY3VtZW50cy9QUk9TQU5JIFVTQUlEL1FVQVJURVIgUkVQT1JUL1kyIFJFUE9SVC9DSUJMRVMyLmNzdiIpDQpjaWJsZWE8LXJlYWQuY3N2MigiQzovVXNlcnMvTXV5dW5nYVAvRG9jdW1lbnRzL1BST1NBTkkgVVNBSUQvQU5BTFlTSVMvWTIvY2libGVzLmNzdiIpDQoNCmNsdXM8LWRhdGEuZnJhbWUoenM9dW5pcXVlKGRhdGFiJHpzKSkNCmNsdXMkcG9wPC1pZmVsc2UoY2x1cyR6cyVpbiVjKCJCYWthIiwiS2F5YW1iYSIsIktpbmRhIiwiTHdhbWJhIiksIjFMb3ciLGlmZWxzZShjbHVzJHpzJWluJWMoIkJ1dHVtYmEiLCJLYWJvbmRvRCIsIkthbWluYSIsIktpbmtvbmRqYSIsIk11a2FuZ2EiLCJTb25nYSIpLCIyTWlkZGxlIiwiM0hpZ2giKSkNCmNsdXM8LWNsdXNbb3JkZXIoY2x1cyR6cyksXQ0KDQoNCmBgYA0KICAgIA0KDQojIyBNQUxBUklBDQoNCiZuYnNwOw0KDQoNCiZuYnNwOw0KLSAqKk51bWJlciBvZiBjaGlsZHJlbiB1bmRlciA1IHllYXJzIG9mIGFnZSB3aXRoIGNvbmZpcm1lZCBtYWxhcmlhIHdobyByZWNlaXZlZCB0cmVhdG1lbnQgZm9yIG1hbGFyaWEgZnJvbSBhbiBhcHByb3ByaWF0ZSBwcm92aWRlciBpbiBVU0ctc3VwcG9ydGVkIGFyZWFzIFsxNSBmZWUgcHJveHldKiogIA0KDQombmJzcDsNCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiOTQwNyIpLGMoIjc0NDMwIiksYygiMTI2LjQiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjcicsY29sLm5hbWVzPWMoIlJlZ2lvbiIsIlByb3ZpbmNlIiwiQWNoaWV2ZW1lbnQiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUiKSkNCg0KYGBgDQoNCiZuYnNwOw0KDQpgYGB7cixyZXN1bHRzPSJoaWRlIn0NCmE8LWRhdGFnDQphJHBhbHU8LXJvd1N1bXMoYVssMjQ6MjVdKQ0KYTwtYWdncmVnYXRlKGFbLGMoMjAsNjYpXSxsaXN0KGEkcGVyaW9kbmFtZSksc3VtKQ0KYSRjaWJsZTwtcm91bmQoY2libGVzJFBhbHVkaXNtZVszXS8xMikNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJHBhbHUqMTAwL3RvdGFsJGNpYmxlLDApDQoja25pdHI6OmthYmxlKHRvdGFsLCJwYW5kb2MiLGFsaWduPSdsY2NyJykNCmI8LWRhdGFiDQpiJHBhbHU8LXJvd1N1bXMoYlssMjU6MjZdLG5hLnJtPVQpDQojZGF0YWckUGFsdTwtcm93U3VtcyhkYXRhZ1ssMjA6MjFdLG5hLnJtPVQpDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShQYWx1PXN1bShwYWx1c18rcGFsdWdfKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1QYWx1LGZpbGw9cG9wKSkrZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLGNvbD0iZ3JleSIsYWxwaGE9LjcpK3RoZW1lX2NsYXNzaWMoKStsYWJzKHg9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2dlb21fdGV4dChhZXMobGFiZWw9UGFsdSksY2V4PTMsdmp1c3Q9Mikrc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iWWxPckJyIikNCg0KYiU+JWdyb3VwX2J5KHBlcmlvZG5hbWUpJT4lc3VtbWFyaXNlKFBhbHU9c3VtKHBhbHUpKS0+cA0KDQpnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9UGFsdSkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChQYWx1LDApKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2Nvb3JkX2NhcnRlc2lhbih5PWMoMjAwMDAsNDAwMDApKQ0KICANCiAgI2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5JyxmaWxsPSJsaWdodGJsdWUiLGNvbD0idG9tYXRvIixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1QYWx1KSxjZXg9Myx2anVzdD0yKQ0KDQpgYGANCg0KLQkqKlBlcmNlbnQgb2YgcHJlZ25hbnQgd29tZW4gd2hvIHJlY2VpdmVkIGRvc2VzIG9mIHN1bGZhZG94aW5lLyBweXJpbWV0aGFtaW5lIChTL1ApIGZvciBJbnRlcm1pdHRlbnQgUHJldmVudGl2ZSBUcmVhdG1lbnQgKElQVCkgZHVyaW5nIEFOQyB2aXNpdHMgWzIuNF0qKg0KDQombmJzcDsNCiZuYnNwOw0KDQpgYGB7cixyZXN1bHRzPSJoaWRlIn0NCmE8LWRhdGFnDQphJFNQPC1yb3dTdW1zKGFbLDU6N10pDQphPC1hZ2dyZWdhdGUoYVssYygzLDUwKV0sbGlzdChhJHBlcmlvZG5hbWUpLHN1bSkNCmEkY2libGU8LWFbLDJdKjMNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJFNQKjEwMC90b3RhbCRjaWJsZSwwKQ0KI2tuaXRyOjprYWJsZSh0b3RhbCwicGFuZG9jIixhbGlnbj0nbGNjcicpDQoNCmI8LWRhdGFiDQpiJFNQPC1yb3dTdW1zKGJbLDY6OF0sbmEucm09VCkNCg0KZGF0YWclPiVncm91cF9ieSh6cyklPiVzdW1tYXJpc2Uoc3BhPXN1bShTUDErU1AyK1NQMyxuYS5ybT1UKSxjcG5hPXN1bShDUE4sbmEucm09VCkpJT4lIG11dGF0ZShTUD1yb3VuZChzcGEqMTAwLyhjcG5hKjMpKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1TUCxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPVNQKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpiJT4lZ3JvdXBfYnkocGVyaW9kbmFtZSklPiVzdW1tYXJpc2Uoc3BhPXN1bShTUDErU1AyK1NQMyxuYS5ybT1UKSxjcG5hPXN1bShDUE4sbmEucm09VCkpJT4lIG11dGF0ZShTUD1yb3VuZChzcGEqMTAwLyhjcG5hKjMpKSktPnANCg0KZ2dwbG90KHAsYWVzKHg9cGVyaW9kbmFtZSx5PVNQKSkrZ2VvbV9saW5lKGFlcyhncm91cD0xKSxzaXplPTIsY29sb3I9ImxpZ2h0Ymx1ZSIpK2dlb21fcG9pbnQoY29sb3I9InJlZCIpK3RoZW1lX2NsYXNzaWMoKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCxzaXplPTgpKStnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKFNQLDApKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIseT0iJSBTUCIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2Nvb3JkX2NhcnRlc2lhbih5PWMoNTAsOTApKQ0KDQpgYGANCg0KDQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCI5MS4wIiksYygiMzc1MTgiKSxjKCI0MTI0NSIpLGMoIjEwMCIpLGMoJzkxLjAnKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjY2NyJyxjb2wubmFtZXM9YygiUmVnaW9uIiwiUHJvdmluY2UiLCJBY2hpZXZlbWVudCIsJ051bWVyYXRvcicsJ0Rlbm9taW5hdG9yJywiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlIikpDQoNCmBgYA0KDQombmJzcDsgIA0KJm5ic3A7ICANCg0KDQojIyBNQVRFUk5BTCwgTkVPTkFUQUwsIEFORCBDSElMRCBIRUFMVEgNCiZuYnNwOw0KJm5ic3A7DQotCSoqTnVtYmVyIG9mIGNoaWxkcmVuIHVuZGVyIGZpdmUgeWVhcnMgb2YgYWdlIHRoYXQgcmVjZWl2ZWQgdHJlYXRtZW50IGZvciBhbiBhY3V0ZSByZXNwaXJhdG9yeSBpbmZlY3Rpb24gZnJvbSBhbiBhcHByb3ByaWF0ZSBwcm92aWRlciBbNSBmZWUgcHJveHldKiogDQpgYGB7cixmaWcuYWxpZ249ImNlbnRlciJ9DQphPC1kYXRhZw0KYSRQbmV1bW9uaWU8LXJvd1N1bXMoYVssMjI6MjNdKQ0KYTwtYWdncmVnYXRlKGFbLGMoMTgsNjYpXSxsaXN0KGEkcGVyaW9kbmFtZSksc3VtKQ0KYSRjaWJsZTwtcm91bmQoY2libGVzJFBuZXVtb25pZVszXS8xMikNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJFBuZXVtb25pZSoxMDAvdG90YWwkY2libGUsMCkNCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY3InKQ0KDQpiPC1kYXRhYg0KYiRwbmV1bTwtcm93U3VtcyhiWywyMzoyNF0sbmEucm09VCkNCg0KbmFtZXMoZGF0YWcpWzIyOjIzXTwtYygiUG5ldW1vbmlzIiwiUG5ldW1vbmlnIikNCmRhdGFnJT4lZ3JvdXBfYnkoenMpJT4lc3VtbWFyaXNlKHBuZXVtPXN1bShQbmV1bW9uaXMrUG5ldW1vbmlnLG5hLnJtPVQpKS0+cA0KcCRwb3A8LWNsdXMkcG9wDQpnZ3Bsb3QocCxhZXMoeD16cyx5PXBuZXVtLGZpbGw9cG9wKSkrZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLGNvbD0iZ3JleSIsYWxwaGE9LjcpK3RoZW1lX2NsYXNzaWMoKStsYWJzKHg9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2dlb21fdGV4dChhZXMobGFiZWw9cG5ldW0pLGNleD0zLHZqdXN0PTIpK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IllsT3JCciIpDQoNCm5hbWVzKGIpWzIzOjI0XTwtYygiUG5ldW1vbmlzIiwiUG5ldW1vbmlnIikNCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShwbmV1bT1zdW0ocG5ldW0sbmEucm09VCkpLT5wDQoNCmdncGxvdChwLGFlcyh4PXBlcmlvZG5hbWUseT1wbmV1bSkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChwbmV1bSwwKSksc2l6ZT0zLHZqdXN0PS0uNSkrbGFicyh4PSIiLHk9IlBuZXVtb25pZSA8IDUiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDUwMDAsODUwMCkpDQogIA0KICAjZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLGZpbGw9ImxpZ2h0Ymx1ZSIsY29sPSJ0b21hdG8iLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPXBuZXVtKSxjZXg9Myx2anVzdD0yKQ0KYGBgDQoNCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiMTk4NzIiKSxjKCIyMTU4MSIpLGMoIjkyLjEiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjcicsY29sLm5hbWVzPWMoIlJlZ2lvbiIsIlByb3ZpbmNlIiwiQWNoaWV2ZW1lbnQiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUoJSkiKSkNCg0KYGBgDQoNCiZuYnNwOyAgDQombmJzcDsgIA0KDQoNCg0KDQombmJzcDsNCiZuYnNwOw0KDQotICoqTnVtYmVyIG9mIGluc2VjdGljaWRlLXRyZWF0ZWQgbmV0cyAoSVROKSBkaXN0cmlidXRlZCBkdXJpbmcgYW50ZW5hdGFsIGFuZC9vciBjaGlsZCBpbW11bml6YXRpb24gdmlzaXRzKioNCg0KDQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCIyMjk1OCIpLGMoIjI2MDQ1IiksYygiODguMSIpKQ0KDQoja25pdHI6OmthYmxlKGEsInBhbmRvYyIsYWxpZ249J2xjY2NyJyxjb2wubmFtZXM9YygiUmVnaW9uIiwiUHJvdmluY2UiLCJBY2hpZXZlbWVudCIsIlRhcmdldCIsIkFjaGlldm1lbnQgUmF0ZSglKSIpKQ0KDQpiPC1kYXRhYg0KYiRNaWxkPC1yb3dTdW1zKGJbLDMwOjM2XSxuYS5ybT1UKQ0KbmFtZXMoZGF0YWcpWzI5OjM1XTwtcGFzdGUwKCJtaWxkIiwxOjcpDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShNaWxkPXN1bShtaWxkMSttaWxkMittaWxkMyttaWxkNCttaWxkNSttaWxkNittaWxkNykpLT5wDQpwJHBvcDwtY2x1cyRwb3ANCmdncGxvdChwLGFlcyh4PXpzLHk9TWlsZCxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPU1pbGQpLGNleD0zLHZqdXN0PTIpK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IllsT3JCciIpDQoNCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShNaWxkPXN1bShNaWxkKSktPnANCg0KZ2dwbG90KHAsYWVzKHg9cGVyaW9kbmFtZSx5PU1pbGQpKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoTWlsZCwwKSksc2l6ZT0zLHZqdXN0PS0uNSkrbGFicyh4PSIiLHRpdGxlPSJNSUlMRCIsIHk9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2Nvb3JkX2NhcnRlc2lhbih5PWMoMCwxODAwMCkpDQoNCmBgYA0KDQombmJzcDsNCiZuYnNwOw0KDQoNCiZuYnNwOw0KDQotCSoqTnVtYmVyIG9mIGNhc2VzIG9mIGNoaWxkIGRpYXJyaGVhIHRyZWF0ZWQgaW4gVVNHLXN1cHBvcnRlZCBwcm9ncmFtcyBbNyBmZWUgcHJveHldKioNCiZuYnNwOw0KYGBge3J9DQphPC1kYXRhZw0KYSREaWFycmhlZTwtcm93U3VtcyhhWywyMToyM10pDQphPC1hZ2dyZWdhdGUoYVssYygxNSw2NildLGxpc3QoYSRwZXJpb2RuYW1lKSxzdW0pDQphJGNpYmxlPC1yb3VuZChjaWJsZXMkRGlhcnJoZWVbM10vMTIpDQp0b3QyKGEpDQp0b3RhbFssMl08LU5VTEwNCiN0b3RhbCRwZXJjZW50PC1yb3VuZCh0b3RhbCREaWFycmhlZSoxMDAvdG90YWwkY2libGUsMCkNCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY3InKQ0KDQpiPC1kYXRhYg0KYiREaWFycmg8LXJvd1N1bXMoYlssMjA6MjJdLG5hLnJtPVQpDQpuYW1lcyhiKVsyMl08LSJkaWFzIg0KbmFtZXMoZGF0YWcpWzIxXTwtImRpYXMiDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShEaWFycmg9c3VtKERpYXJyX3NldjErRGlhcnJfc2V2MitkaWFzLG5hLnJtPVQpKS0+cA0KcCRwb3A8LWNsdXMkcG9wDQpnZ3Bsb3QocCxhZXMoeD16cyx5PURpYXJyaCxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPURpYXJyaCksY2V4PTMsdmp1c3Q9Mikrc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iWWxPckJyIikNCg0KYiU+JWdyb3VwX2J5KHBlcmlvZG5hbWUpJT4lc3VtbWFyaXNlKERpYXJyaD1zdW0oRGlhcnJoKSktPnANCg0KZ2dwbG90KHAsYWVzKHg9cGVyaW9kbmFtZSx5PURpYXJyaCkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChEaWFycmgsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIix5PSIiLHRpdGxlPSJEaWFycmhlZSA8IDUgYW5zIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrY29vcmRfY2FydGVzaWFuKHk9Yyg2MDAwLDEyMDAwKSkNCg0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KYSA8LSBkYXRhLmZyYW1lKGMoIkthdGFuZ2EiKSxjKCJIYXV0IExvbWFtaSIpLGMoIjI1NTQzIiksYygiMjU0ODYiKSxjKCIxMDAuMiIpKQ0KDQoja25pdHI6OmthYmxlKGEsInBhbmRvYyIsYWxpZ249J2xjY2NyJyxjb2wubmFtZXM9YygiUmVnaW9uIiwiUHJvdmluY2UiLCJBY2hpZXZlbWVudCIsIlRhcmdldCIsIkFjaGlldm1lbnQgUmF0ZSIpKQ0KDQpgYGANCg0KDQombmJzcDsNCg0KDQombmJzcDsNCiZuYnNwOw0KDQoNCi0JKipOdW1iZXIgb2YgY2hpbGRyZW4gbGVzcyB0aGFuIDEyIG1vbnRocyBvZiBhZ2Ugd2hvIHJlY2VpdmVkIHRocmVlIGRvc2VzIG9mIHBlbnRhdmFsZW50IHZhY2NpbmUgWzkgZmVlIHByb3h5XSoqDQombmJzcDsNCmBgYHtyLGZpZy5hbGlnbj0iY2VudGVyIn0NCmE8LWRhdGFnDQphJFBlbnRhPC1yb3dTdW1zKGFbLDQxOjQzXSkNCmE8LWFnZ3JlZ2F0ZShhWyxjKDQxLDY2KV0sbGlzdChhJHBlcmlvZG5hbWUpLHN1bSxuYS5ybT1UKQ0KYSRjaWJsZTwtcm91bmQoY2libGVzJFBlbnRhWzNdLzEyKQ0KdG90MihhKQ0KdG90YWxbLDJdPC1OVUxMDQojdG90YWwkcGVyY2VudDwtcm91bmQodG90YWwkUGVudGEqMTAwL3RvdGFsJGNpYmxlLDApDQoja25pdHI6OmthYmxlKHRvdGFsLCJwYW5kb2MiLGFsaWduPSdsY2NyJykNCg0KYjwtZGF0YWINCmIkUGVudGE8LXJvd1N1bXMoYlssMjc6MjldLG5hLnJtPVQpDQpuYW1lcyhkYXRhZylbMjY6MjhdPC1wYXN0ZTAoIlBlbnRhIiwxOjMpDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShQZW50YT1zdW0oUGVudGExK1BlbnRhMitQZW50YTMpKS0+cA0KcCRwb3A8LWNsdXMkcG9wDQpnZ3Bsb3QocCxhZXMoeD16cyx5PVBlbnRhLGZpbGw9cG9wKSkrZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLGNvbD0iZ3JleSIsYWxwaGE9LjcpK3RoZW1lX2NsYXNzaWMoKStsYWJzKHg9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2dlb21fdGV4dChhZXMobGFiZWw9UGVudGEpLGNleD0zLHZqdXN0PTIpK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IllsT3JCciIpDQoNCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShQZW50YT1zdW0oUGVudGEpKS0+cA0KDQpnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9UGVudGEpKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoUGVudGEsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIix5PSIiLHRpdGxlPSJWQUNDSU4gUEVOVEFWQUxFTlQiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDEwMDAwLDE0MDAwKSkNCiAgDQpgYGANCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiMzA2NTIiKSxjKCIzMTM1MyIpLGMoIjk3LjgiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjcicsY29sLm5hbWVzPWMoIlJlZ2lvbiIsIlByb3ZpbmNlIiwiQWNoaWV2ZW1lbnQiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUiKSkNCg0KYGBgDQoNCiZuYnNwOyAgDQombmJzcDsgIA0KDQoNCi0JKipQZXJjZW50IG9mIGNoaWxkcmVuIGxlc3MgdGhhbiAxMiBtb250aHMgb2YgYWdlIHdobyByZWNlaXZlZCBtZWFzbGVzIHZhY2NpbmUgZnJvbSBVU0ctc3VwcG9ydGVkIHByb2dyYW1zIFsxMF0qKg0KJm5ic3A7DQpgYGB7cixmaWcuYWxpZ249ImNlbnRlciJ9DQphPC1kYXRhZw0KYSRWQVI8LXJvd1N1bXMoYVssMzE6MzNdKQ0KYTwtYWdncmVnYXRlKGFbLGMoMzEsNTApXSxsaXN0KGEkcGVyaW9kbmFtZSksc3VtKQ0KYSRjaWJsZTwtcm91bmQoY2libGVzJFZBUlszXS8xMikNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJFZBUioxMDAvdG90YWwkY2libGUsMCkNCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY3InKQ0KDQpiPC1kYXRhYg0KYiRWYXI8LXJvd1N1bXMoYlssNDI6NDRdLG5hLnJtPVQpDQpuYW1lcyhkYXRhZylbNDE6NDNdPC1wYXN0ZTAoIlZhciIsMTozKQ0KbmFtZXMoZGF0YWcpWzQ3XTwtInBvcCINCmRhdGFnJT4lZ3JvdXBfYnkoenMpJT4lc3VtbWFyaXNlKFZhcmE9c3VtKFZhcjErVmFyMitWYXIzLG5hLnJtPVQpLHBvcGE9c3VtKHBvcCxuYS5ybT1UKSklPiUgbXV0YXRlKFZhcj1yb3VuZChWYXJhKjEyMDAwMC8ocG9wYSo0KSkpLT5wDQpwJHBvcDwtY2x1cyRwb3ANCmdncGxvdChwLGFlcyh4PXpzLHk9VmFyLGZpbGw9cG9wKSkrZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknLGNvbD0iZ3JleSIsYWxwaGE9LjcpK3RoZW1lX2NsYXNzaWMoKStsYWJzKHg9IiIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2dlb21fdGV4dChhZXMobGFiZWw9VmFyKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpuYW1lcyhiKVs0Mjo0NF08LXBhc3RlMCgiVmFyIiwxOjMpDQpuYW1lcyhiKVs0OF08LSJwb3AiDQpiJT4lZ3JvdXBfYnkocGVyaW9kbmFtZSklPiVzdW1tYXJpc2UoVmFyYT1zdW0oVmFyLG5hLnJtPVQpLHBvcGE9c3VtKHBvcCxuYS5ybT1UKSklPiUgbXV0YXRlKFZhcj1yb3VuZChWYXJhKjEyMDAwMC8ocG9wYSo0KSkpLT5wDQoNCmdncGxvdChwLGFlcyh4PXBlcmlvZG5hbWUseT1WYXIpKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoVmFyLDApKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIseT0iIix0aXRsZT0iJSBWQVIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDQwLDkwKSkNCg0KYGBgDQoNCmBgYHtyfQ0KYSA8LSBkYXRhLmZyYW1lKGMoIkthdGFuZ2EiKSxjKCJIYXV0IExvbWFtaSIpLGMoIjMxNDA4IiksYygiMzAxNjgiKSxjKCI5Ni4xIikpDQoNCiNrbml0cjo6a2FibGUoYSwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlIikpDQoNCmBgYA0KDQombmJzcDsgIA0KIA0KJm5ic3A7DQombmJzcDsNCg0KLSAqKlBlcmNlbnRhZ2Ugb2YgcHJlZ25hbnQgd29tZW4gYXR0ZW5kaW5nIGF0IGxlYXN0IG9uZSBhbnRlbmF0YWwgY2FyZSAoQU5DKSB2aXNpdCB3aXRoIGEgc2tpbGxlZCAgcHJvdmlkZXIgZnJvbSBVU0ctIHN1cHBvcnRlZCBoZWFsdGggZmFjaWxpdGllcyoqDQombmJzcDsNCmBgYHtyLGZpZy5hbGlnbj0iY2VudGVyIn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCI5MSIpLGMoIjM3NTE4IiksYygiNDEyNDUiKSxjKCIxMDAiKSxjKCI5MSIpKQ0KDQoja25pdHI6OmthYmxlKGEsInBhbmRvYyIsYWxpZ249J2xjY2NjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiTnVtZXJhdG9yIiwiRGVub21pbmF0b3IiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUoJSkiKSkNCg0KYjwtZGF0YWINCiNiJFZhcjwtcm93U3VtcyhiWyw0Mjo0NF0sbmEucm09VCkNCiNuYW1lcyhkYXRhZylbNDE6NDNdPC1wYXN0ZTAoIlZhciIsMTozKQ0KI25hbWVzKGRhdGFnKVs0N108LSJwb3AiDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShjcG5hPXN1bShDUE4sbmEucm09VCkscG9wYT1zdW0ocG9wLG5hLnJtPVQpKSU+JSBtdXRhdGUoQ1BOPXJvdW5kKGNwbmEqMTIwMDAwLyhwb3BhKjQpKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1DUE4sZmlsbD1wb3ApKStnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsY29sPSJncmV5IixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1DUE4pLGNleD0zLHZqdXN0PTIpK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IllsT3JCciIpDQoNCiNuYW1lcyhiKVs0Mjo0NF08LXBhc3RlMCgiVmFyIiwxOjMpDQpuYW1lcyhiKVs0OF08LSJwb3AiDQpiJT4lZ3JvdXBfYnkocGVyaW9kbmFtZSklPiVzdW1tYXJpc2UoY3BuYT1zdW0oQ1BOLG5hLnJtPVQpLHBvcGE9c3VtKHBvcCxuYS5ybT1UKSklPiUgbXV0YXRlKENQTj1yb3VuZChjcG5hKjEyMDAwMC8ocG9wYSo0KSkpLT5wDQoNCmdncGxvdChwLGFlcyh4PXBlcmlvZG5hbWUseT1DUE4pKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoQ1BOLDApKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIseT0iIix0aXRsZT0iJSBDUE4xIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrY29vcmRfY2FydGVzaWFuKHk9Yyg4MCwxNDApKQ0KDQpgYGANCg0KJm5ic3A7ICANCiZuYnNwOyAgDQoNCiZuYnNwOw0KDQotCSoqUGVyY2VudGFnZSBvZiBwcmVnbmFudCB3b21lbiBhdHRlbmRpbmcgYXQgbGVhc3Qgb25lIGFuZCBhdCBsZWFzdCA0IGFudGVuYXRhbCBjYXJlIChBTkMpIHdpdGggYSBza2lsbGVkIHByb3ZpZGVyIGZyb20gVVNHLXN1cHBvcnRlZCBoZWFsdGggZmFjaWxpdGllcyBbMTIgZmVlXSoqDQombmJzcDsNCmBgYHtyfQ0KYTwtZGF0YWcNCmEkQ1BOXzQ8LWFbLDRdDQphPC1hZ2dyZWdhdGUoYVssYyg0LDUwKV0sbGlzdChhJHBlcmlvZG5hbWUpLHN1bSkNCmEkY2libGU8LXJvdW5kKGNpYmxlcyRDUE40WzNdLzEyKQ0KdG90MihhKQ0KdG90YWxbLDJdPC1OVUxMDQojdG90YWwkcGVyY2VudDwtcm91bmQodG90YWwkQ1BOXzQqMTAwL3RvdGFsJGNpYmxlLDApDQoja25pdHI6OmthYmxlKHRvdGFsLCJwYW5kb2MiLGFsaWduPSdsY2NyJykNCg0KYjwtZGF0YWINCiNiJFZhcjwtcm93U3VtcyhiWyw0Mjo0NF0sbmEucm09VCkNCiNuYW1lcyhkYXRhZylbNDE6NDNdPC1wYXN0ZTAoIlZhciIsMTozKQ0KI25hbWVzKGRhdGFnKVs0N108LSJwb3AiDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShjcG5hPXN1bShDUE40LG5hLnJtPVQpLHBvcGE9c3VtKHBvcCxuYS5ybT1UKSklPiUgbXV0YXRlKENQTjQ9cm91bmQoY3BuYSoxMjAwMDAvKHBvcGEqNCkpKS0+cA0KcCRwb3A8LWNsdXMkcG9wDQpnZ3Bsb3QocCxhZXMoeD16cyx5PUNQTjQsZmlsbD1wb3ApKStnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsY29sPSJncmV5IixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1DUE40KSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQojbmFtZXMoYilbNDI6NDRdPC1wYXN0ZTAoIlZhciIsMTozKQ0KbmFtZXMoYilbNDhdPC0icG9wIg0KYiU+JWdyb3VwX2J5KHBlcmlvZG5hbWUpJT4lc3VtbWFyaXNlKGNwbmE9c3VtKENQTjQsbmEucm09VCkscG9wYT1zdW0ocG9wLG5hLnJtPVQpKSU+JSBtdXRhdGUoQ1BOND1yb3VuZChjcG5hKjEyMDAwMC8ocG9wYSo0KSkpLT5wDQoNCmdncGxvdChwLGFlcyh4PXBlcmlvZG5hbWUseT1DUE40KSkrZ2VvbV9saW5lKGFlcyhncm91cD0xKSxzaXplPTIsY29sb3I9ImxpZ2h0Ymx1ZSIpK2dlb21fcG9pbnQoY29sb3I9InJlZCIpK3RoZW1lX2NsYXNzaWMoKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCxzaXplPTgpKStnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKENQTjQsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIix5PSIiLHRpdGxlPSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDQwLDYwKSkNCg0KYGBgDQoNCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiMTk4NjAiKSxjKCIxNzg5NyIpLGMoIjExMSIpKQ0KDQoja25pdHI6OmthYmxlKGEsInBhbmRvYyIsYWxpZ249J2xjY2NyJyxjb2wubmFtZXM9YygiUmVnaW9uIiwiUHJvdmluY2UiLCJBY2hpZXZlbWVudCIsIlRhcmdldCIsIkFjaGlldm1lbnQgUmF0ZSIpKQ0KDQpgYGANCg0KJm5ic3A7DQoNCi0JKipQZXJjZW50YWdlIG9mIGRlbGl2ZXJpZXMgd2l0aCBhbiBTQkEgaW4gVVNHLXN1cHBvcnRlZCBmYWNpbGl0aWVzKiogIA0KDQpgYGB7cn0NCmE8LWRhdGFnDQphJEFjYzwtYVssOF0NCmE8LWFnZ3JlZ2F0ZShhWyxjKDgsMzcsNTApXSxsaXN0KGEkcGVyaW9kbmFtZSksc3VtKQ0KdG90MihhKQ0KI3RvdGFsJEFjY19QPC1yb3VuZCh0b3RhbCRBY2MqMTIwMC8odG90YWxbLDNdKi4wNCksMCkNCnRvdGFsJGNpYmxlNDwtcm91bmQodG90YWxbLDNdKi4wNC8xMikNCnRvdGFsWywyOjNdPC1OVUxMDQp0b3RhbCRjaWJsZT05MA0KI3RvdGFsPC10b3RhbFssYygxLDIsNCw1LDMpXQ0KI2tuaXRyOjprYWJsZSh0b3RhbCwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJNb2lzIiwiQWNjQXNzaXN0IiwiQ2libGU0IiwiQ2libGU5MCIsIiUiKSkNCg0KYjwtZGF0YWINCiNiJFZhcjwtcm93U3VtcyhiWyw0Mjo0NF0sbmEucm09VCkNCm5hbWVzKGRhdGFnKVs4XTwtIkFjY291Y2hfYXNzIg0KbmFtZXMoZGF0YWcpWzYyXTwtIkFjY291Y2giDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShBY2NvdWNoYT1zdW0oQWNjb3VjaF9hc3MsbmEucm09VCksYWNjYT1zdW0oQWNjb3VjaCxuYS5ybT1UKSklPiUgbXV0YXRlKEFjY291Y2hfYXNzPXJvdW5kKEFjY291Y2hhKjEwMC9hY2NhKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1BY2NvdWNoX2FzcyxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPUFjY291Y2hfYXNzKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpuYW1lcyhiKVs5XTwtIkFjY291Y2hfYXNzIg0KbmFtZXMoYilbNjNdPC0iQWNjb3VjaCINCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShBY2NvdWNoYT1zdW0oQWNjb3VjaF9hc3MsbmEucm09VCksYWNjYT1zdW0oQWNjb3VjaCxuYS5ybT1UKSklPiUgbXV0YXRlKEFjY291Y2hfYXNzPXJvdW5kKEFjY291Y2hhKjEwMC9hY2NhKSktPnANCg0KZ2dwbG90KHAsYWVzKHg9cGVyaW9kbmFtZSx5PUFjY291Y2hfYXNzKSkrZ2VvbV9saW5lKGFlcyhncm91cD0xKSxzaXplPTIsY29sb3I9ImxpZ2h0Ymx1ZSIpK2dlb21fcG9pbnQoY29sb3I9InJlZCIpK3RoZW1lX2NsYXNzaWMoKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCxzaXplPTgpKStnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKEFjY291Y2hfYXNzLDApKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIseT0iIix0aXRsZT0iJSBBY2NvdWNoZW1lbnRzIGFzc2lzdMOpcyIpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT05MCkpK2Nvb3JkX2NhcnRlc2lhbih5PWMoNDAsMTQwKSkNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCI3NiIpLGMoIjMxMzY0IiksYygiNDEyNDUiKSxjKCI5MCIpLGMoIjg0LjUiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjY2NyJyxjb2wubmFtZXM9YygiUmVnaW9uIiwiUHJvdmluY2UiLCJRMSBBY2hpZXZlbWVudCIsIk51bWVyYXRvciIsIkRlbm9taW5hdG9yIiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlIikpDQoNCmBgYA0KDQombmJzcDsNCg0KJm5ic3A7DQoNCi0JKipOdW1iZXIgb2Ygd29tZW4gZ2l2aW5nIGJpcnRoIHdobyByZWNlaXZlZCB1dGVyb3RvbmljcyBpbiB0aGUgdGhpcmQgc3RhZ2Ugb2YgbGFib3IgKE9SIGltbWVkaWF0ZWx5IGFmdGVyIGJpcnRoKSB0aHJvdWdoIFVTRy1zdXBwb3J0ZWQgcHJvZ3JhbXMgWzIuMS40XSoqDQombmJzcDsNCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiMTU4NCIpLGMoIjIxNzgiKSxjKCI3Mi43IikpDQoNCiNrbml0cjo6a2FibGUoYSwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlIikpDQoNCmI8LWRhdGFiDQpuYW1lcyhiKVsxMF08LSJHQVRQQSINCm5hbWVzKGRhdGFnKVs5XTwtIkdBVFBBIg0KZGF0YWclPiVncm91cF9ieSh6cyklPiVzdW1tYXJpc2UoR0FUUEE9c3VtKEdBVFBBKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1HQVRQQSxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPUdBVFBBKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpiJT4lZ3JvdXBfYnkocGVyaW9kbmFtZSklPiVzdW1tYXJpc2UoR0FUUEE9c3VtKEdBVFBBLG5hLnJtPVQpKS0+cA0KDQpnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9R0FUUEEpKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoR0FUUEEsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIiwgeT0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrY29vcmRfY2FydGVzaWFuKHk9YygxMDAsMTAwMCkpDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KDQotCSoqTnVtYmVyIGFuZCBwZXJjZW50YWdlIG9mIG5ld2Jvcm5zIHJlY2VpdmluZyBlc3NlbnRpYWwgbmV3Ym9ybiBjYXJlIHRocm91Z2ggVVNHLXN1cHBvcnRlZCBwcm9ncmFtcyoqDQoNCmBgYHtyfQ0KYTwtZGF0YWcNCmEkU29pbnNfZXNzPC1hWywyOV0NCmE8LWFnZ3JlZ2F0ZShhWyxjKDksMjksNTApXSxsaXN0KGEkcGVyaW9kbmFtZSksc3VtKQ0KdG90MihhKQ0KdG90YWwkY2libGU8LTEwMA0KI3RvdGFsJFNvZXNzX1A8LXJvdW5kKHRvdGFsJFNvaW5zX2VzcyoxMDAvdG90YWxbLDJdKQ0KdG90YWxbLDNdPC1OVUxMDQp0b3RhbCRjaWJsZT0xMDANCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY2NyJyxjb2wubmFtZXM9YygiTW9pcyIsIk5haXNzVml2IiwiU29pbnNFc3MiLCJDaWJsZSIsIiUiKSkNCg0KYjwtZGF0YWINCiNiJFZhcjwtcm93U3VtcyhiWyw0Mjo0NF0sbmEucm09VCkNCm5hbWVzKGRhdGFnKVszOF08LSJTb2VzcyINCm5hbWVzKGRhdGFnKVsxMV08LSJOYWlzc3YiDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShTb2Vzc2E9c3VtKFNvZXNzLG5hLnJtPVQpLG5haXNzdmE9c3VtKE5haXNzdixuYS5ybT1UKSklPiUgbXV0YXRlKFNvZXNzPXJvdW5kKFNvZXNzYSoxMDAvbmFpc3N2YSkpLT5wDQpwJHBvcDwtY2x1cyRwb3ANCmdncGxvdChwLGFlcyh4PXpzLHk9U29lc3MsZmlsbD1wb3ApKStnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsY29sPSJncmV5IixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1Tb2VzcyksY2V4PTMsdmp1c3Q9Mikrc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iWWxPckJyIikNCg0KbmFtZXMoYilbMzldPC0iU29lc3MiDQpuYW1lcyhiKVsxMl08LSJOYWlzc3YiDQpiJT4lZ3JvdXBfYnkocGVyaW9kbmFtZSklPiVzdW1tYXJpc2UoU29lc3NhPXN1bShTb2VzcyxuYS5ybT1UKSxuYWlzc3ZhPXN1bShOYWlzc3YsbmEucm09VCkpJT4lIG11dGF0ZShTb2Vzcz1yb3VuZChTb2Vzc2EqMTAwL25haXNzdmEpKS0+cA0KDQpnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9U29lc3MpKStnZW9tX2xpbmUoYWVzKGdyb3VwPTEpLHNpemU9Mixjb2xvcj0ibGlnaHRibHVlIikrZ2VvbV9wb2ludChjb2xvcj0icmVkIikrdGhlbWVfY2xhc3NpYygpK3RoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZT0wLHNpemU9OCkpK2dlb21fdGV4dChhZXMobGFiZWw9cm91bmQoU29lc3MsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIix5PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDQwLDEwMCkpDQoNCmBgYA0KDQoNCg0KYGBge3J9DQphIDwtIGRhdGEuZnJhbWUoYygiS2F0YW5nYSIpLGMoIkhhdXQgTG9tYW1pIiksYygiOTAiKSxjKCIxMDAiKSxjKCI4OS45IikpDQoNCiNrbml0cjo6a2FibGUoYSwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlIikpDQoNCmBgYA0KDQombmJzcDsNCg0KDQombmJzcDsNCiZuYnNwOw0KDQoNCi0JKipOdW1iZXIgb2YgcG9zdHBhcnR1bS9uZXdib3JuIHZpc2l0cyB3aXRoaW4gdGhyZWUgZGF5cyBvZiBiaXJ0aCBpbiBVU0ctc3VwcG9ydGVkIHByb2dyYW1zIFsyLjEuNl0qKg0KDQpgYGB7cn0NCmE8LWRhdGFnDQphJENQT05fMTwtYVssMjhdDQphPC1hZ2dyZWdhdGUoYVssYygyOCw1MCldLGxpc3QoYSRwZXJpb2RuYW1lKSxzdW0pDQphJGNpYmxlPC1yb3VuZChhcy5udW1lcmljKGFzLmNoYXJhY3RlcihjaWJsZXMkQ1BvTjFbM10pKS8xMikNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJENQT05fMSoxMDAvdG90YWwkY2libGUsMCkNCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY3InKQ0KDQpiPC1kYXRhYg0KbmFtZXMoZGF0YWcpWzM3XTwtIkNwb24xIg0KZGF0YWclPiVncm91cF9ieSh6cyklPiVzdW1tYXJpc2UoQ3BvbjE9c3VtKENwb24xKSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1DcG9uMSxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPUNwb24xKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpuYW1lcyhiKVszOF08LSJDcG9uMSINCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShDcG9uMT1zdW0oQ3BvbjEsbmEucm09VCkpLT5wDQoNCmdncGxvdChwLGFlcyh4PXBlcmlvZG5hbWUseT1DcG9uMSkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChDcG9uMSwwKSksc2l6ZT0zLHZqdXN0PS0uNSkrbGFicyh4PSIiLCB5PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDgwMDAsMTMwMDApKQ0KDQpgYGANCg0KJm5ic3A7DQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCIyODAyOCIpLGMoIjIzNTU5IiksYygiMTE5IikpDQoNCiNrbml0cjo6a2FibGUoYSwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlKCUpIikpDQoNCmBgYA0KDQombmJzcDsNCiAgIA0KJm5ic3A7DQoNCi0JKipEcm9wLW91dCByYXRlIGluIERUUC1IZXBCLUhpYjMgYW1vbmcgY2hpbGRyZW4gbGVzcyB0aGFuIDEyIG1vbnRocyBvZiBhZ2UgWzIuMS45XSoqDQoNCiZuYnNwOw0KDQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCIyLjMiKSxjKCI0IiksYygiMTQyLjgiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjcicsY29sLm5hbWVzPWMoIlJlZ2lvbiIsIlByb3ZpbmNlIiwiQWNoaWV2ZW1lbnQiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUoJSkiKSkNCg0KYjwtZGF0YWINCiNiJFZhcjwtcm93U3VtcyhiWyw0Mjo0NF0sbmEucm09VCkNCm5hbWVzKGRhdGFnKVs3NTo3N108LXBhc3RlMCgiUGVudGFfMSIsMTozKQ0KbmFtZXMoZGF0YWcpWzI2OjI4XTwtcGFzdGUwKCJQZW50YV8zIiwxOjMpDQpkYXRhZyU+JWdyb3VwX2J5KHpzKSU+JXN1bW1hcmlzZShQZW50YTE9c3VtKFBlbnRhXzExK1BlbnRhXzEyK1BlbnRhXzEzLG5hLnJtPVQpLFBlbnRhMz1zdW0oUGVudGFfMzErUGVudGFfMzIrUGVudGFfMzMsbmEucm09VCkpJT4lIG11dGF0ZShEcm9wPXJvdW5kKChQZW50YTEtUGVudGEzKS9QZW50YTEsMikpLT5wDQpwJHBvcDwtY2x1cyRwb3ANCiNnZ3Bsb3QocCxhZXMoeD16cyx5PURyb3AsZmlsbD1wb3ApKStnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsY29sPSJncmV5IixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1Ecm9wKSxjZXg9Myx2anVzdD0yKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJZbE9yQnIiKQ0KDQpuYW1lcyhiKVs3Njo3OF08LXBhc3RlMCgiUGVudGFfMSIsMTozKQ0KbmFtZXMoYilbMjc6MjldPC1wYXN0ZTAoIlBlbnRhXzMiLDE6MykNCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShQZW50YTE9c3VtKFBlbnRhXzExK1BlbnRhXzEyK1BlbnRhXzEzLG5hLnJtPVQpLFBlbnRhMz1zdW0oUGVudGFfMzErUGVudGFfMzIrUGVudGFfMzMsbmEucm09VCkpJT4lIG11dGF0ZShEcm9wPXJvdW5kKChQZW50YTEtUGVudGEzKS9QZW50YTEsMikpLT5wDQoNCiNnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9RHJvcCkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChEcm9wLDIpKSxzaXplPTMsdmp1c3Q9LS41KStsYWJzKHg9IiIseT0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrY29vcmRfY2FydGVzaWFuKHk9YygwLDEuNSkpDQoNCmBgYA0KDQombmJzcDsgIA0KDQoNCiZuYnNwOw0KJm5ic3A7DQombmJzcDsNCg0KIyMgTlVUUklUSU9ODQoNCi0JTnVtYmVyIG9mIGluZGl2aWR1YWxzIHJlY2VpdmluZyBudXRyaXRpb24tcmVsYXRlZCBwcm9mZXNzaW9uYWwgdHJhaW5pbmcgdGhyb3VnaCBVU0cgc3VwcG9ydGVkIG51dHJpb24gcHJvZ3JhbXMgWzIuMS4xMF0NCg0KLQlOdW1iZXIgb2YgY2hpbGRyZW4gdW5kZXItZml2ZSAoMC01OSBtb250aHMpIHJlYWNoZWQgYnkgVVNHLXN1cHBvcnRlZCBudXRyaXRpb24gcHJvZ3JhbXMgWzIuMS4xMV0NCg0KJm5ic3A7DQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCIzNTMwOTEiKSxjKCIxNTg0NTYiKSxjKCI0NC45IikpDQoNCiNrbml0cjo6a2FibGUoYSwicGFuZG9jIixhbGlnbj0nbGNjY3InLGNvbC5uYW1lcz1jKCJSZWdpb24iLCJQcm92aW5jZSIsIkFjaGlldmVtZW50IiwiVGFyZ2V0IiwiQWNoaWV2bWVudCBSYXRlKCUpIikpDQoNCmI8LWRhdGFiDQpuYW1lcyhkYXRhZylbNDBdPC0iQ1BTIg0KZGF0YWclPiVncm91cF9ieSh6cyklPiVzdW1tYXJpc2UoQ1BTPXN1bShDUFMpKS0+cA0KcCRwb3A8LWNsdXMkcG9wDQpnZ3Bsb3QocCxhZXMoeD16cyx5PUNQUyxmaWxsPXBvcCkpK2dlb21fYmFyKHN0YXQ9J2lkZW50aXR5Jyxjb2w9ImdyZXkiLGFscGhhPS43KSt0aGVtZV9jbGFzc2ljKCkrbGFicyh4PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStnZW9tX3RleHQoYWVzKGxhYmVsPUNQUyksY2V4PTMsdmp1c3Q9Mikrc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iWWxPckJyIikNCg0KbmFtZXMoYilbNDFdPC0iQ1BTIg0KYiU+JWdyb3VwX2J5KHBlcmlvZG5hbWUpJT4lc3VtbWFyaXNlKENQUz1zdW0oQ1BTLG5hLnJtPVQpKS0+cA0KDQpnZ3Bsb3QocCxhZXMoeD1wZXJpb2RuYW1lLHk9Q1BTKSkrZ2VvbV9saW5lKGFlcyhncm91cD0xKSxzaXplPTIsY29sb3I9ImxpZ2h0Ymx1ZSIpK2dlb21fcG9pbnQoY29sb3I9InJlZCIpK3RoZW1lX2NsYXNzaWMoKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9MCxzaXplPTgpKStnZW9tX3RleHQoYWVzKGxhYmVsPXJvdW5kKENQUywwKSksc2l6ZT0zLHZqdXN0PS0uNSkrbGFicyh4PSIiLCB5PSIiKSt0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9OTApKStjb29yZF9jYXJ0ZXNpYW4oeT1jKDUwMDAwLDgwMDAwKSkNCg0KYGBgDQoNCiZuYnNwOw0KDQombmJzcDsNCiZuYnNwOw0KJm5ic3A7DQoNCiMjIFJFUFJPRFVDVElWRSBIRUFMVEgvRkFNSUxZIFBMQU5OSU5HDQombmJzcDsNCi0JKipOdW1iZXIgb2YgbmV3IGFjY2VwdG9ycyB1c2luZyBtb2Rlcm4gY29udHJhY2VwdGl2ZSBtZXRob2RzIGluIFVTRy1zdXBwb3J0ZWQgZmFjaWxpdGllcyBbMyBmZWUgcHJveHldKioNCg0KYGBge3J9DQphPC1kYXRhZw0KYSRBY2NlcHQ8LShhWywxMF0pDQphPC1hZ2dyZWdhdGUoYVssYygxMCw1MCldLGxpc3QoYSRwZXJpb2RuYW1lKSxzdW0pDQphJGNpYmxlPC1yb3VuZChjaWJsZXMkTm91dmVsbGUuYWNjZXB0YW50ZVszXS8xMikNCnRvdDIoYSkNCnRvdGFsWywyXTwtTlVMTA0KI3RvdGFsJHBlcmNlbnQ8LXJvdW5kKHRvdGFsJEFjY2VwdCoxMDAvdG90YWwkY2libGUsMCkNCiNrbml0cjo6a2FibGUodG90YWwsInBhbmRvYyIsYWxpZ249J2xjY3InKQ0KDQpiPC1kYXRhYg0KbmFtZXMoZGF0YWcpWzEyXTwtIkFjY2VwdCINCmRhdGFnJT4lZ3JvdXBfYnkoenMpJT4lc3VtbWFyaXNlKEFjY2VwdD1zdW0oQWNjZXB0KSktPnANCnAkcG9wPC1jbHVzJHBvcA0KZ2dwbG90KHAsYWVzKHg9enMseT1BY2NlcHQsZmlsbD1wb3ApKStnZW9tX2JhcihzdGF0PSdpZGVudGl0eScsY29sPSJncmV5IixhbHBoYT0uNykrdGhlbWVfY2xhc3NpYygpK2xhYnMoeD0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1BY2NlcHQpLGNleD0zLHZqdXN0PTIpK3NjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGU9IllsT3JCciIpDQoNCm5hbWVzKGIpWzEzXTwtIkFjY2VwdCINCmIlPiVncm91cF9ieShwZXJpb2RuYW1lKSU+JXN1bW1hcmlzZShBY2NlcHQ9c3VtKEFjY2VwdCxuYS5ybT1UKSktPnANCg0KZ2dwbG90KHAsYWVzKHg9cGVyaW9kbmFtZSx5PUFjY2VwdCkpK2dlb21fbGluZShhZXMoZ3JvdXA9MSksc2l6ZT0yLGNvbG9yPSJsaWdodGJsdWUiKStnZW9tX3BvaW50KGNvbG9yPSJyZWQiKSt0aGVtZV9jbGFzc2ljKCkrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTAsc2l6ZT04KSkrZ2VvbV90ZXh0KGFlcyhsYWJlbD1yb3VuZChBY2NlcHQsMCkpLHNpemU9Myx2anVzdD0tLjUpK2xhYnMoeD0iIiwgeT0iIikrdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTkwKSkrY29vcmRfY2FydGVzaWFuKHk9YygxMDAwMCwyMzAwMCkpDQoNCmBgYA0KDQpgYGB7cn0NCmEgPC0gZGF0YS5mcmFtZShjKCJLYXRhbmdhIiksYygiSGF1dCBMb21hbWkiKSxjKCIzMzM3MiIpLGMoIjIwNDA1IiksYygiMTYzLjUiKSkNCg0KI2tuaXRyOjprYWJsZShhLCJwYW5kb2MiLGFsaWduPSdsY2NjcicsY29sLm5hbWVzPWMoIlJlZ2lvbiIsIlByb3ZpbmNlIiwiQWNoaWV2ZW1lbnQiLCJUYXJnZXQiLCJBY2hpZXZtZW50IFJhdGUoJSkiKSkNCg0KYGBgDQoNCiZuYnNwOw0KDQombmJzcDsNCg0KLQkqKk51bWJlciBvZiBjb3Vuc2VsaW5nIHZpc2l0cyBmb3IgRlAvIFJIIGFzIHJlc3VsdCBvZiBVU0cgc3VwcG9ydCBbMi4zXSoqDQoNCg0KDQoNCiMjIFRVQkVSQ1VMT1NJUw0KDQotCVRCIG5vdGlmaWNhdGlvbiByYXRlIHRocm91Z2ggVVNHLSBzdXBwb3J0ZWQgcHJvZ3JhbXMgWzIuMS4xN10NCg0KLQlOdW1iZXIgb2YgbXVsdGktZHJ1ZyByZXNpc3RhbnQgVEIgKE1EUi1UQikgY2FzZXMgZGV0ZWN0ZWQgWzIuMS4yMF0NCg0KIyMgV0FURVIsIFNBTklUQVRJT04sIEFORCBIWUdJRU5FDQoNCi0JTnVtYmVyIG9mIHBlb3BsZSBnYWluaW5nIGFjY2VzcyB0byBiYXNpYyBkcmlua2luZyB3YXRlciBzZXJ2aWNlcyBhcyBhIHJlc3VsdCBvZiBVU0cgYXNzaXN0YW5jZSBbMi42LjJdDQoNCi0JTnVtYmVyIG9mIHBlb3BsZSBnYWluaW5nIGFjY2VzcyB0byBhIGJhc2ljIHNhbml0YXRpb24gc2VydmljZSBhcyBhIHJlc3VsdCBvZiBVU0cgYXNzaXN0YW5jZSBbMi42LjNdDQoNCiMgNC5SRVBPUlRJTkcgQlkgUFJPR1JBTSBBQ1RJVklUSUVTDQoNCiMjIGNmciByYXBwb3J0IHByb2dyYW1tYXRpcXVlDQoNCg==