ZGlmZiAtLWdpdCBhL1RoaXJkUGFydHlQcm9qZWN0LnByb3AgYi9UaGlyZFBhcnR5UHJvamVjdC5wcm9wCmluZGV4IDljMTdmNzAuLjM4OThlNDAgMTAwNjQ0Ci0tLSBhL1RoaXJkUGFydHlQcm9qZWN0LnByb3AKKysrIGIvVGhpcmRQYXJ0eVByb2plY3QucHJvcApAQCAtMSw3ICsxLDcgQEAKICMgQ29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICNGcmkgSnVsIDE2IDEwOjAzOjA5IFBEVCAyMDEwCi1jdXJyZW50VmVyc2lvbj0xLjAuMGgKLXZlcnNpb249MS4wLjBoCitjdXJyZW50VmVyc2lvbj0xLjAuMQordmVyc2lvbj0xLjAuMQogaXNOYXRpdmU9dHJ1ZQogZmVlZHVybD1odHRwXDovL3d3dy5vcGVuc3NsLm9yZy8KIG5hbWU9b3BlbnNzbApkaWZmIC0tZ2l0IGEvYW5kcm9pZC1jb25maWcubWsgYi9hbmRyb2lkLWNvbmZpZy5tawppbmRleCA4MmEwZWQ3Li4yMTk4ZWY2IDEwMDY0NAotLS0gYS9hbmRyb2lkLWNvbmZpZy5taworKysgYi9hbmRyb2lkLWNvbmZpZy5tawpAQCAtMTEsNyArMTEsNyBAQAogTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9OT19DQU1FTExJQSAtRE9QRU5TU0xfTk9fQ0FQSUVORyAtRE9QRU5TU0xfTk9fQ0FTVCAtRE9QRU5TU0xfTk9fQ01TIC1ET1BFTlNTTF9OT19HTVAgLURPUEVOU1NMX05PX0lERUEgLURPUEVOU1NMX05PX0pQQUtFIC1ET1BFTlNTTF9OT19NRDIgLURPUEVOU1NMX05PX01EQzIgLURPUEVOU1NMX05PX1JDNSAtRE9QRU5TU0xfTk9fU0hBMCAtRE9QRU5TU0xfTk9fUkZDMzc3OSAtRE9QRU5TU0xfTk9fU0VFRCAtRE9QRU5TU0xfTk9fU1RPUkUgLURPUEVOU1NMX05PX1dISVJMUE9PTAogCiAjIEV4dHJhCi1MT0NBTF9DRkxBR1MgKz0gLURPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkUgLURPUEVOU1NMX05PX0dPU1QgLURaTElCIC1ET1BFTlNTTF9OT19EVExTMQorTE9DQUxfQ0ZMQUdTICs9IC1ET1BFTlNTTF9OT19TVEFUSUNfRU5HSU5FIC1ET1BFTlNTTF9OT19HT1NUIC1EWkxJQiAtRE9QRU5TU0xfTk9fRFRMUzEgLURPUEVOU1NMX05PX1JTQVggLURPUEVOU1NMX05PX1JEUkFORCAtRE9QRU5TU0xfTk9fU0NUUAogCiAjIERpcmVjdG9yaWVzCiBMT0NBTF9DRkxBR1MgKz0gLURPUEVOU1NMRElSPSJcIi9zeXN0ZW0vbGliL3NzbFwiIiAtREVOR0lORVNESVI9IlwiL3N5c3RlbS9saWIvc3NsL2VuZ2luZXNcIiIKZGlmZiAtLWdpdCBhL2FuZHJvaWQudGVzdHNzbC9DQXNzLmNuZiBiL2FuZHJvaWQudGVzdHNzbC9DQXNzLmNuZgppbmRleCAxMTczYzA4Li43N2MwMWMzIDEwMDY0NAotLS0gYS9hbmRyb2lkLnRlc3Rzc2wvQ0Fzcy5jbmYKKysrIGIvYW5kcm9pZC50ZXN0c3NsL0NBc3MuY25mCkBAIC03LDcgKzcsNyBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogWyByZXEgXQotZGVmYXVsdF9iaXRzCQk9IDUxMgorZGVmYXVsdF9iaXRzCQk9IDIwNDgKIGRlZmF1bHRfa2V5ZmlsZSAJPSBrZXlTUy5wZW0KIGRpc3Rpbmd1aXNoZWRfbmFtZQk9IHJlcV9kaXN0aW5ndWlzaGVkX25hbWUKIGVuY3J5cHRfcnNhX2tleQkJPSBubwpkaWZmIC0tZ2l0IGEvYW5kcm9pZC50ZXN0c3NsL1Vzcy5jbmYgYi9hbmRyb2lkLnRlc3Rzc2wvVXNzLmNuZgppbmRleCA1NmRjZGQ1Li4zMTdhYjZkIDEwMDY0NAotLS0gYS9hbmRyb2lkLnRlc3Rzc2wvVXNzLmNuZgorKysgYi9hbmRyb2lkLnRlc3Rzc2wvVXNzLmNuZgpAQCAtNywxMSArNywxMSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogWyByZXEgXQotZGVmYXVsdF9iaXRzCQk9IDUxMgorZGVmYXVsdF9iaXRzCQk9IDIwNDgKIGRlZmF1bHRfa2V5ZmlsZSAJPSBrZXlTUy5wZW0KIGRpc3Rpbmd1aXNoZWRfbmFtZQk9IHJlcV9kaXN0aW5ndWlzaGVkX25hbWUKIGVuY3J5cHRfcnNhX2tleQkJPSBubwotZGVmYXVsdF9tZAkJPSBtZDIKK2RlZmF1bHRfbWQJCT0gc2hhMjU2CiAKIFsgcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZSBdCiBjb3VudHJ5TmFtZQkJCT0gQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKQpkaWZmIC0tZ2l0IGEvYW5kcm9pZC50ZXN0c3NsL3NlcnZlcjIucGVtIGIvYW5kcm9pZC50ZXN0c3NsL3NlcnZlcjIucGVtCmluZGV4IDhiYjY2NDEuLmEzOTI3Y2YgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQudGVzdHNzbC9zZXJ2ZXIyLnBlbQorKysgYi9hbmRyb2lkLnRlc3Rzc2wvc2VydmVyMi5wZW0KQEAgLTEsMzc2ICsxLDUyIEBACi1pc3N1ZXI9IC9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IENBICgxMDI0IGJpdCkKLXN1YmplY3Q9L0M9QVUvU1Q9UXVlZW5zbGFuZC9PPUNyeXB0U29mdCBQdHkgTHRkL0NOPVNlcnZlciB0ZXN0IGNlcnQgKDEwMjQgYml0KQorc3ViamVjdD0gQyA9IFVLLCBPID0gT3BlblNTTCBHcm91cCwgT1UgPSBGT1IgVEVTVElORyBQVVJQT1NFUyBPTkxZLCBDTiA9IFRlc3QgU2VydmVyIENlcnQgIzIKK2lzc3Vlcj0gQyA9IFVLLCBPID0gT3BlblNTTCBHcm91cCwgT1UgPSBGT1IgVEVTVElORyBQVVJQT1NFUyBPTkxZLCBDTiA9IE9wZW5TU0wgVGVzdCBJbnRlcm1lZGlhdGUgQ0EKIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ0xqQ0NBWmNDQVFFd0RRWUpLb1pJaHZjTkFRRUVCUUF3V3pFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVgotQkFnVENsRjFaV1Z1YzJ4aGJtUXhHakFZQmdOVkJBb1RFVU55ZVhCMFUyOW1kQ0JRZEhrZ1RIUmtNUnN3R1FZRAotVlFRREV4SlVaWE4wSUVOQklDZ3hNREkwSUdKcGRDa3dIaGNOT1Rjd05qQTVNVE0xTnpVMFdoY05PVGd3TmpBNQotTVRNMU56VTBXakJrTVFzd0NRWURWUVFHRXdKQlZURVRNQkVHQTFVRUNCTUtVWFZsWlc1emJHRnVaREVhTUJnRwotQTFVRUNoTVJRM0o1Y0hSVGIyWjBJRkIwZVNCTWRHUXhKREFpQmdOVkJBTVRHMU5sY25abGNpQjBaWE4wSUdObAotY25RZ0tERXdNalFnWW1sMEtUQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUFzeEgxUEJQbQotUmt4clIxMWVWNGJ6Tmk0TjluMTFDSThuVjI5K0FSbFQxK3FEZS9talZVdlhsbXNyMXYvdmY3MUc5R2dxb3BTYQotNlJYcklDTFZkay9GWVlZemhQdmwxTStPcmphWERGTzhCekJBRjFMbno2YzdhUlp2R1JKTnJSU3IyblpFa3FEZgotSlc5ZFk3cjJWWkVwRDVRZXVhUllVbnVFQ2txZWllQjY1R01DQXdFQUFUQU5CZ2txaGtpRzl3MEJBUVFGQUFPQgotZ1FDV3NPdGE2QzB3aVZ6WHo4d1BtSkt5VHJ1ck1sZ1VzczJpU3VXOTM2Nml3b2ZaZGRzTmc3RlhuaU16a0lmNgotZHA3am5tV1p3S1o5Y1hzTlVTMm80T0wwN3FPazJIT3l3QzBZc05aUXNPQnUxQ0JUWVlrSWVmRGlLRkwxelFIaAotOGx3d05kNE5QK09FM056VU5rQ2ZoNERuRmZnOVdIa1hVbEQ1VXB4TlJKNGdKQT09CitNSUlENmpDQ0F0S2dBd0lCQWdJSkFMbnUxTmxWcFo2ME1BMEdDU3FHU0liM0RRRUJCUVVBTUhBeEN6QUpCZ05WCitCQVlUQWxWTE1SWXdGQVlEVlFRS0RBMVBjR1Z1VTFOTUlFZHliM1Z3TVNJd0lBWURWUVFMREJsR1QxSWdWRVZUCitWRWxPUnlCUVZWSlFUMU5GVXlCUFRreFpNU1V3SXdZRFZRUUREQnhQY0dWdVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFeE1USXdPREUwTURFME9Gb1hEVEl4TVRBeE5qRTBNREUwT0Zvd1p6RUxNQWtHCitBMVVFQmhNQ1ZVc3hGakFVQmdOVkJBb01EVTl3Wlc1VFUwd2dSM0p2ZFhBeElqQWdCZ05WQkFzTUdVWlBVaUJVCitSVk5VU1U1SElGQlZVbEJQVTBWVElFOU9URmt4SERBYUJnTlZCQU1NRTFSbGMzUWdVMlZ5ZG1WeUlFTmxjblFnCitJekl3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRHJkaTdqOXljdEcrTDRFakJ5CitnalBtRXFaek9KRVFiYTI2TW9RR3pnbFU3ZTVYZjU5UmIvaGdWUXVLQW9pWmU3L1I4cks0eko0VzdpWGRYdzBMCitxQnB5RzhCNWFHS2VJMzJ3K0E5VGNCQXBvWFhMMkNyWVFFUWpad1VJcExsWUJJaTJOa0pqM25Wa3E1ZGdsMWdPCitBTGlRK1c4amcza3pnNUVjOXJpbXA5cjkzTjh3c1NMM2F3c2FmdXJtWUN2T2Y3bGVIYU1QMVdKL3pEUkdVTkhHCisvV3REalhjOFpVRzErNkVYVTlKYzJGcysyT21mN2ZjTjBsMDBBSy93UGc4T2FOUzByS3lHcTlKZElUOUZSR1YxCitiWGUvcng1OEZhRTVDSXRkd0NTWWhKdkYvTzk1TFdRb3hKWHllNWJDRkxtdkRURXlWcTlGTVNDcHRmc21iWGpFCitaR3NYQWdNQkFBR2pnWTh3Z1l3d0RBWURWUjBUQVFIL0JBSXdBREFPQmdOVkhROEJBZjhFQkFNQ0JlQXdMQVlKCitZSVpJQVliNFFnRU5CQjhXSFU5d1pXNVRVMHdnUjJWdVpYSmhkR1ZrSUVObGNuUnBabWxqWVhSbE1CMEdBMVVkCitEZ1FXQkJSNTJVYVdXVEt6WkdESC9YNG1XTmN1cWVRVmF6QWZCZ05WSFNNRUdEQVdnQlEydzJ5STU1WCtzTDNzCit6ajQ5aHFzaGdZZmEyakFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBTkJXK1hZTGxIQnFWWS8zMWllKzNnUmxTCitMUGZ5NFNJcW4wdDNSSmphZ1QyOU1YcHJibEJPMmNiTU84Vkdqa1FkS0dwbU1YanhiaHQyYXJPT1VYUkhYNG4vCitYVHluL1FIRWYwYmN3SUlUTVJlTzNEWlVQQUV3OGhTam45eEVPTTBJUlZPQ1ArbUg1Zmk3NFF6elFhWlZDeVlnCis1VnRMS2R3dy8rc2MwbkNiS2wyS1dnRGx1cmlIMG5mVng5NXFnVzNtZzlkaFhScjB6bWYxdzJ6a0JIWXBBUllMCitEZXc2WjhFRTR0UzNISnU4L3FNNm1lV3pOdHJmb25RM2VpaU14alpCeHpWNDZqY2hCd2EyejlYWWhQNkFtcFBiCitvZVRTemNRTmJXc3hhR1l6V280Nm9MRFVabUpPd1NCYXdiUzMxYlpOTUNvUElZNnVrb2VzQ3pGU3NVS1p3dz09CiAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAtLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1NSUlDWGdJQkFBS0JnUUN6RWZVOEUrWkdUR3RIWFY1WGh2TTJMZzMyZlhVSWp5ZFhiMzRCR1ZQWDZvTjcrYU5WCi1TOWVXYXl2Vy8rOS92VWIwYUNxaWxKcnBGZXNnSXRWMlQ4Vmhoak9FKytYVXo0NnVOcGNNVTd3SE1FQVhVdWZQCi1wenRwRm04WkVrMnRGS3ZhZGtTU29OOGxiMTFqdXZaVmtTa1BsQjY1cEZoU2U0UUtTcDZKNEhya1l3SURBUUFCCi1Bb0dCQUt5OGp2YjBMemJ5OHExMXlOTGY3Kzc4d0NWZFlpN3VnTUhjWUExSlZGSzgremIxV2ZTbTQ0RkxRby8wCi1kU0NoQWpnejM2VFRleGVMT0RQWXhsZUpuZGpWY09NVnpzTEpqU004ZExwWHNUUzRGQ2VNYmh3MnMydSt4cUtZCi1iYlBXZmsrSE9UeUpqZm5rY0M1TmJnNDRlT21ydXEwZ1NtQmVVWFZNNVVudGxUbnhBa0VBN1RHQ0EzaDdreDVFCi1CbDR6bDJwYzNnUEFHdCtkeWZrNVBvOW1HSlVVWGhGNXAyenVlR21ZV1c3NFRtT1dCMWt6dDRRUmRZTXpGZVBxCi16ZkROWEVhMUN3SkJBTUZFcmRZMHhwMFVKMTNXd0JiVVRrOHJ1anFRZEh0ancwa2xocGJ1S2tqeHUyaE4wd3dNCi02cDBEOXF4RjdKSGFnaHFWUkkwZkFXL0VFME96ZEhNUjlRa0NRUUROUjI2ZE1GWEtzb1B1K3ZJdGxqai9VRUdmCi1RRzdnRVJpUTR5eGFGQlBIZ2RwR28wa1QzMWVoOXg5aFFHRGt4VGUwR05HL1lTZ0NSdm04K0MzVE1jS1hBa0JECi1kaEduMzZ3a1VGQ2RkTVNBTTROU0oxVk44L1oweTVIekNtSThkTTNWd0d0R01VUWx4S3h3T2wzMExFUXpkUzVNCi0wU1dvak5ZWGlUMmdPQmZCd3RiaEFrRUFoYWZsNVFFT0lnVXorWGF6Uy9JbFo4Z29OS2REVmZZZ0szbUhIanZ2Ci1uWTVHK0F1R2ViZE5rWEpyNEtTV3hEY04rQzJpNDd6dWo0UVhBMTZNQU9hbmRBPT0KK01JSUVvd0lCQUFLQ0FRRUE2M1l1NC9jbkxSdmkrQkl3Y29JejVoS21jemlSRUcydHVqS0VCczRKVk8zdVYzK2YKK1VXLzRZRlVMaWdLSW1YdS8wZkt5dU15ZUZ1NGwzVjhOQzZnYWNodkFlV2hpbmlOOXNQZ1BVM0FRS2FGMXk5Z3EKKzJFQkVJMmNGQ0tTNVdBU0l0alpDWTk1MVpLdVhZSmRZRGdDNGtQbHZJNE41TTRPUkhQYTRwcWZhL2R6Zk1MRWkKKzkyc0xHbjdxNW1BcnpuKzVYaDJqRDlWaWY4dzBSbERSeHYxclE0MTNQR1ZCdGZ1aEYxUFNYTmhiUHRqcG4rMzMKK0RkSmROQUN2OEQ0UERtalV0S3lzaHF2U1hTRS9SVVJsZFcxM3Y2OGVmQldoT1FpTFhjQWttSVNieGZ6dmVTMWsKK0tNU1Y4bnVXd2hTNXJ3MHhNbGF2UlRFZ3FiWDdKbTE0eEdSckZ3SURBUUFCQW9JQkFITHNUUGloSWZMbllJRTUKK3g0R3NRUTV6WGVCdzVJVERNMzdrdHdIblFEQytySXp5VWwxYUxEMUFaUkJvS2luWGQ0bE9UcUxaNC9OSEt4NEEKK0RZcjU4bVp0V3lVbXFMT01tUVZ1SFhUWkJscDdYdFl1WE1NTm92UXdqUWxwOUxpY0Jlb0JVNmdRNVBWTXR1YkQKK0Y0eEdGODlTbjBjVEhXM2lNa3FUdFE1S2NSMWo1N09jSk8wRkViMXZQdmsyTVhJNVp5QWF0VVlFN1lhY2JFemQKK3JnMDJ1SXd4M0ZxTlNrdVNJNzl1ejRoTWRWNVRQdHVoeHg5blR3ajlhTFVoWEZlWjBtbjJQVmdWekVubk1vSmIKKyt6bmxzWkRnekRsSnFkYUQ3NDRZR1doOFozT0Vzc0IzNUtmekZjZE9lTzZ5SDhsbXYyWmZ6bms3cE5QVDdMVGIKK0xhZTlWZ2tDZ1lFQTkycDFxbkFCM050SnROY2FXNTNpMFM1V0pnUzFoeFdLdlVEeDNsVEI5czhYOWZIcHFMMWEKK0U5NGZEZld6cC9oYXg2RmVmVUtJdkJPdWtQTFE2YllqVE1pRm9PSHpWaXJnaEFJdUlVb01JNVZ0TGh3RDFoS3MKK0xyN2wvZHB0TWdLYjFuWkh5WG9LSFJCdGhzeTNLNCt1ZHNQaThUek12WUVsZ0VxeVFJZS9SazBDZ1lFQTg2R0wKKzhIQzZ6THN6ektFUkRQQnhyYm9SbW9GdlZVQ1RRRGhzZmoxTThhUjNuUThWNUxrZElKYzdXcW0vR2dmazlRUmYKK3JKOE0yV1VNbFU1Q05uQ24vS0NyS3pDTlpJUmV6ZTNmVitIbktkYmNYR0x2Z2JIUHJobno4eVllaFVGRytSR3EKK2JWeURXUlU5NFQzOGl6eTJzNXFNWXJNSldaRVl5WG5jU1BiZmNQTUNnWUF0YVhmeGNaK1Y1eFlQUUZBUk10aVgKKzVuWmZnZ3ZEb0p1WGd4MGgzdEsvTjJIQmZjYVNkemJhWUxHNGdUbVpnZ2MvandubDJkbDVFKys5b1NQaFVkSUcKKzNPTlNGVWJ4c09zR3I5UEJ2bktkOFdaWnlVQ1hBVlJqUEJ6QXpGK3doelFOV0NaeS81aHRuejlMTjdZREk5czAKKzUxMTNROTZjaGVEWlBGeWRaWTBoSFFLQmdRRFZiRWhOdWtNNXhDaU5jdStmMlNhTW5McDlFalE0aDVnM0l2YVAKKzVCMTZkYXcvRHc4THpjb2hXYm9xSXhlQXN6ZTBHRC9EMVpVSkFFZDBxQmpDM2crYTlCamVmZXJ2Q2pLT3pYbmcKKzM4bUVVbSs2RXdWakpTUWNqU215Y0VzK1NyL2t3ci84aTVXWXZVMzIrams0dEZnTW9DK282dFFlL1Vlc2Y2OGsKK3ovZFBWd0tCZ0diRjdWdjEvM1NtaGxPeSt6WXl2SjBDcld0S3hIOVFQNnRMSUVnRXBkOHg3WVRTdUNIOTR5b2sKK2tUb01YWUEzc1dOUHQyMkdiUkRaK3JjcDRjN0hrRHg2STZ2cGRQOWFRRXdKVHAwRVB5MHNnV3IyWHdZbXJlSVEKK05GbWtrOEl0bjlFWTJSOVZCYVA3R0x2NWt2d3hEZExBbm13R216VnRibWFWZHhDYUJ3VWsKIC0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1zdWJqZWN0PS9DPVVTL089QVQmVCBCZWxsIExhYm9yYXRvcmllcy9PVT1Qcm90b3R5cGUgUmVzZWFyY2ggQ0EKLWlzc3Vlcj0gL0M9VVMvTz1BVCZUIEJlbGwgTGFib3JhdG9yaWVzL09VPVByb3RvdHlwZSBSZXNlYXJjaCBDQQotbm90QmVmb3JlPTk1MDQxMzIxMDY1NloKLW5vdEFmdGVyID05NzA0MTIyMTA2NTZaCi0tLS0tLUJFR0lOIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotCi1NSUlDQ0RDQ0FYRUNBUUF3RFFZSktvWklodmNOQVFFRUJRQXdUakVMTUFrR0ExVUVCaE1DVlZNeEh6QWRCZ05WCi1CQW9VRmtGVUpsUWdRbVZzYkNCTVlXSnZjbUYwYjNKcFpYTXhIakFjQmdOVkJBc1VGVkJ5YjNSdmRIbHdaU0JTCi1aWE5sWVhKamFDQkRRVEFlRncwNU5UQTBNVE15TVRBMk5UWmFGdzA1TnpBME1USXlNVEEyTlRaYU1FNHhDekFKCi1CZ05WQkFZVEFsVlRNUjh3SFFZRFZRUUtGQlpCVkNaVUlFSmxiR3dnVEdGaWIzSmhkRzl5YVdWek1SNHdIQVlECi1WUVFMRkJWUWNtOTBiM1I1Y0dVZ1VtVnpaV0Z5WTJnZ1EwRXdnWnd3RFFZSktvWklodmNOQVFFQkJRQURnWW9BCi1NSUdHQW9HQWViT21ndFNDbCt3Q1laYzg2VUdZZVRMWThjam1XMlAwRk44VG9UL3UycEVDQ29GZHJseWNYME9SCi0zd3QwWmhwRlhMVk5lRG5Id0VFOXZlTlVpaDdwQ0wyWkJGcW9Jb1FrQjFsWm1YUmlWdGpHb256OEJMbS9xckZNCi1ZSGIwbG1lL09sK3MxMThtd0tWeG5uNmJTQWVJL09YS2hMYVZkWVpXaythRWF4RURrVmtDQVE4d0RRWUpLb1pJCi1odmNOQVFFRUJRQURnWUVBQVpNRzE0bFptWjhiYWhrYUhhVFY5ZFFmNHAyRlppUVRGd0hQOVp5R3NYUEMrTFQ1Ci1kRzVpVGFSbXlqTklKZFBXb2haRGw5N2tBY2k3OWFCbmR2dUV2UktPakxIczNXUkdCSXdFUm5BY25ZOU16OHUvCi16SUhLMjNQallWeEdHYVpkNjY5T0p3RDBDWXlxSDIySEg5bkZVR2FvSmRzdjM5Q2hXME5SZExFOSt5OD0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotaXNzdWVyPSAvQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049VGVzdCBQQ0EgKDEwMjQgYml0KQotc3ViamVjdD0vQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049VGVzdCBDQSAoMTAyNCBiaXQpCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNKakNDQVk4Q0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd1hERUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlYKLUJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJ3d0dnWUQKLVZRUURFeE5VWlhOMElGQkRRU0FvTVRBeU5DQmlhWFFwTUI0WERUazNNRFl3T1RFek5UYzBNMW9YRFRBeE1EWXcKLU9URXpOVGMwTTFvd1d6RUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xGMVpXVnVjMnhoYm1ReEdqQVkKLUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJzd0dRWURWUVFERXhKVVpYTjBJRU5CSUNneE1ESTAKLUlHSnBkQ2t3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQUtPN284dDExNlZQNmNneWJUc1oKLURDWmhyOTVuWWxadXlhM2FDaTFJS296dHF3V25qYm1ERklyaU9xR0ZQclpRK21vTUVUQzlENTlpUlcvZEZYU3YKLTFGNjVrYS9YWTJoTGg5ZXhDQ283WHVVY0RzNTNRcDNiSTNBbU1xSGpnekU4b08zYWp5SkF6SmtUVE9VZWNRVTIKLW13L2dJNHRNTTBMcVdNUVM3bHVUeTQreEFnTUJBQUV3RFFZSktvWklodmNOQVFFRUJRQURnWUVBTTdhY2h2M3YKLWhMUUpjdi82NWVHRXBCWE00MFpEVm9GUUZGSldhWTVwODgzSFRxTEIxeDRGZHpzWEhIMFFLQlRjS3BXd3F5dTQKLVlEbTNmYjhvRHVndzcyYkN6ZnlaSy96VlpQUi9oVmxxSS9mdlUxMDlRb2MrN29QdklYV2t5NzFIZmNLNlpCQ0EKLXEzMEtJcUdNL3VvTTYwSU5xOTdxakRtQ0phcGFnY05CR1FzPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJQ1hRSUJBQUtCZ1FDanU2UExkZGVsVCtuSU1tMDdHUXdtWWEvZVoySldic210MmdvdFNDcU03YXNGcDQyNQotZ3hTSzRqcWhoVDYyVVBwcURCRXd2UStmWWtWdjNSVjByOVJldVpHdjEyTm9TNGZYc1FncU8xN2xIQTdPZDBLZAotMnlOd0pqS2g0NE14UEtEdDJvOGlRTXlaRTB6bEhuRUZOcHNQNENPTFRETkM2bGpFRXU1Yms4dVBzUUlEQVFBQgotQW9HQVZabXBGWnNEWmZyMGwyUzl0TEx3cGpSV05PbEtBVFFrbm82cTJXZXNUMGVHTFF1ZlRjaVkrYzh5cGZVNgotaHlpbzhyNWlVbC9WaGhkamhBdEt4MW1ScGlvdGZ0SG8vZVlmOHJ0c3JucHJPbldHMGJXakxqdElvTWJjeEduMgotSjNiTjZMSm1iSk1qRHMwZUozS25UdTY0NkYzbkRVdzJvR0F3bXB6S1hBMUtBUDBDUVFEUnZRaHhrMkQzUGVocwotSHZHNjY1dTJwQjVpcFlRbmdFRmxaTzdSSEpaekpPWkVXU0x1dU1xYUYvN3BUZkE1amlCdldxQ2dKZUNSUkluTAotMjFydTRkbFBBa0VBeDlqajdCZ0tuNVRZbk1vQlNTZTBhZmpzVjlvQXBWcE4xTmFjYjFZRHRDd3krc2NwMysrcwotbkZ4bHY5OHd4SWxTZHB3TVVuK0FVV2ZqaVdSN1R1L0cvd0pCQUovS2p3WklyRlZ4ZXdQMHgySUxZc1RSWUx6egotTVM0UERzTzdGQitJMGk3RGJCT2lmWFMyb05TcGQzSTBDTk13cnhGblVIenlucGJPU3RWZk4zWkw1dzBDUVFDYQotcHdGYWh4QlJoa0pLc3hoam9GSkJYOXlsNzVKb1k0V3ZtNVRibzlpaDZVSmFSeDNrcWZrTjE0TDJCS1ljc1pnYgotS1k5dm1ET1l5NmlOZmpEZVdUZkpBa0JrZlBVYjhvVEovblNQNXpONnNxR3hTWTRrcmM0eEx4cFJteG9KOEhMMgotWGZocVhrVHpiVTEzUlg5SkovTlo4dlFOOVZtMk5oeFJHSm9jUWttY2RWdEoKLS0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCi0tLS0tLUJFR0lOIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotTUlJQ1lEQ0NBaUFDQWdFb01Ba0dCU3NPQXdJTkJRQXdmREVMTUFrR0ExVUVCaE1DVlZNeE5qQTBCZ05WQkFvVAotTFU1aGRHbHZibUZzSUVGbGNtOXVZWFYwYVdOeklHRnVaQ0JUY0dGalpTQkJaRzFwYm1semRISmhkR2x2YmpFWgotTUJjR0ExVUVDeE1RVkdWemRDQkZiblpwY205dWJXVnVkREVhTUJnR0ExVUVDeE1SUkZOVExVNUJVMEV0VUdscwotYjNRdFEwRXdIaGNOT1RZd01qSTJNVFl6TWpRMVdoY05PVGN3TWpJMU1UWXpNalExV2pCOE1Rc3dDUVlEVlFRRwotRXdKVlV6RTJNRFFHQTFVRUNoTXRUbUYwYVc5dVlXd2dRV1Z5YjI1aGRYUnBZM01nWVc1a0lGTndZV05sSUVGawotYldsdWFYTjBjbUYwYVc5dU1Sa3dGd1lEVlFRTEV4QlVaWE4wSUVWdWRtbHliMjV0Wlc1ME1Sb3dHQVlEVlFRTAotRXhGRVUxTXRUa0ZUUVMxUWFXeHZkQzFEUVRDQjhqQUpCZ1VyRGdNQ0RBVUFBNEhrQURDQjRBSkJBTUEvc3NLYgotaFBOVUc3WmxBU2ZWd0VKVTIxTzVPeUYvaXlCemdISTFPOGVPaEpHVVlPOGNjOHdETWpSNTA4TXI5Y3A2VWhsLwotWkI3RlY1R2tMTkVuUkhZQ1FRRFVFYVNnNDVQMnFyRHdpeFRSaEZobVd6NU52YzRsUkZRLzQyWFBjY2hpSkJMYgotYm4zUUs3NFQySXhZMXlZK2tDTnE4WHJJcWY1ZkpKeklIMEoveFVQM0FoVUFzZzJ3c1FIZkRHWWsvQk9TdWxYMwotZlZkMGdlVUNRUUN6Q0ZVUUFoK1prRW1wNTgwNGNzNlpXQmhyVUFmbnJhOGxKSXRZbzl4UGNYZ2RJZkxmaWJjWAotUjcxVXN5Tzc3TVJEN0IwK0FnMnRxNzk0SWxlQ1ZjRUVNQWtHQlNzT0F3SU5CUUFETHdBd0xBSVVVYXlEZnJlUgotWWgyV2VVODYvcEhOZGtVQzFJZ0NGRWZ4ZTFmMG9NcHhKeXJKNVhJeFRpN3ZHZG9LCi0tLS0tLUVORCBYNTA5IENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNHVENDQWRnQ0F3Q3FUREFKQmdVckRnTUNEUVVBTUh3eEN6QUpCZ05WQkFZVEFsVlRNVFl3TkFZRFZRUUsKLUV5MU9ZWFJwYjI1aGJDQkJaWEp2Ym1GMWRHbGpjeUJoYm1RZ1UzQmhZMlVnUVdSdGFXNXBjM1J5WVhScGIyNHgKLUdUQVhCZ05WQkFzVEVGUmxjM1FnUlc1MmFYSnZibTFsYm5ReEdqQVlCZ05WQkFzVEVVUlRVeTFPUVZOQkxWQnAKLWJHOTBMVU5CTUI0WERUazJNRFV4TkRFM01ERTBNVm9YRFRrM01EVXhOREUzTURFME1Wb3dNekVMTUFrR0ExVUUKLUJoTUNRVlV4RHpBTkJnTlZCQW9UQmsxcGJtTnZiVEVUTUJFR0ExVUVBeE1LUlhKcFl5QlpiM1Z1WnpDQjhqQUoKLUJnVXJEZ01DREFVQUE0SGtBRENCNEFKQkFLYmZIejZ2RTZwWFhNVHBzd3RHVWVjMnR2bmZMSlVzb3hFOXFzNCsKLU9iWlg3TG1MdnJhZ05QVWVpVEp4N1VPV1o1RGZCajZiWExjOGVZbmUwbFAxZzNBQ1FRRFVFYVNnNDVQMnFyRHcKLWl4VFJoRmhtV3o1TnZjNGxSRlEvNDJYUGNjaGlKQkxiYm4zUUs3NFQySXhZMXlZK2tDTnE4WHJJcWY1ZkpKekkKLUgwSi94VVAzQWhVQXNnMndzUUhmREdZay9CT1N1bFgzZlZkMGdlVUNRUUN6Q0ZVUUFoK1prRW1wNTgwNGNzNloKLVdCaHJVQWZucmE4bEpJdFlvOXhQY1hnZElmTGZpYmNYUjcxVXN5Tzc3TVJEN0IwK0FnMnRxNzk0SWxlQ1ZjRUUKLU1Ba0dCU3NPQXdJTkJRQURNQUF3TFFJVVdzdXVKUkUzVlQ0dWVXa1dNQUpNSmFaamoxRUNGUUNZWTB6WDRiek0KLUxDN29ic3JIRDhYQUhHK1pSRz09Ci0tLS0tLUVORCBYNTA5IENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ1RUQ0NBYmFnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQk1NUXN3Q1FZRFZRUUdFd0pIUWpFTQotTUFvR0ExVUVDaE1EVlVOTU1SZ3dGZ1lEVlFRTEV3OUpRMFV0VkVWTUlGQnliMnBsWTNReEZUQVRCZ05WQkFNVAotREZSeWRYTjBSbUZqZEc5eWVUQWVGdzA1TnpBME1qSXhORE01TVRSYUZ3MDVPREEwTWpJeE5ETTVNVFJhTUV3eAotQ3pBSkJnTlZCQVlUQWtkQ01Rd3dDZ1lEVlFRS0V3TlZRMHd4R0RBV0JnTlZCQXNURDBsRFJTMVVSVXdnVUhKdgotYW1WamRERVZNQk1HQTFVRUF4TU1WSEoxYzNSR1lXTjBiM0o1TUlHY01Bb0dCRlVJQVFFQ0FnUUFBNEdOQURDQgotaVFLQmdRQ0VpZVI4TmNYa1VXMWYwRzZhQzZ1MGk4cS85OEpxUzZSeEs1WW1ISUdLQ2t1VFdBVWp6TGZVYTRkdAotVTlpZ0dDalR1eGFEcWx6RWltK3QvMDJwbWlCWlQ5SGFYKyszNU1qUVBVV21zQ2hjWVU1V3l6R0VyWGkrclFhdwotemx3Uzczek04cWlQai85N2xYWXljV2hnTDBWYWlEU1B4UlhFVWRXb2FHcnVvbTRtTlFJREFRQUJvMEl3UURBZAotQmdOVkhRNEVGZ1FVSGFsMUxacjdvVmc1ejZsWXpyaFRnWlJDbWNVd0RnWURWUjBQQVFIL0JBUURBZ0gyTUE4RwotQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFmYWdnZmw2RlpvaW9lY2p2MGRxOAotL0RYby91MTFpTVp2WG4wOGdqWC96bDJiNHd0UGJTaE9TWTVGaGtTbThHZXlTYXN6Ky9Od2IvdXpmbklob2tXaQotbGZQWkh0bENXdFhiSXkvVE41MWVKeXEwNGNlRENRRFd2TEMyZW5WZzlLQitHSjM0YjVjNVZhUFJ6cThNQnhzQQotUzdFTHVZR3RtWWdZbTlOWk9Jcjd5VTA9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI2akNDQVpRQ0FnRXRNQTBHQ1NxR1NJYjNEUUVCQkFVQU1JR0FNUXN3Q1FZRFZRUUdFd0pWVXpFMk1EUUcKLUExVUVDaE10VG1GMGFXOXVZV3dnUVdWeWIyNWhkWFJwWTNNZ1lXNWtJRk53WVdObElFRmtiV2x1YVhOMGNtRjAKLWFXOXVNUmt3RndZRFZRUUxFeEJVWlhOMElFVnVkbWx5YjI1dFpXNTBNUjR3SEFZRFZRUUxFeFZOUkRVdFVsTkIKLUxVNUJVMEV0VUdsc2IzUXRRMEV3SGhjTk9UWXdORE13TWpJd05UQXdXaGNOT1Rjd05ETXdNakl3TlRBd1dqQ0IKLWdERUxNQWtHQTFVRUJoTUNWVk14TmpBMEJnTlZCQW9UTFU1aGRHbHZibUZzSUVGbGNtOXVZWFYwYVdOeklHRnUKLVpDQlRjR0ZqWlNCQlpHMXBibWx6ZEhKaGRHbHZiakVaTUJjR0ExVUVDeE1RVkdWemRDQkZiblpwY205dWJXVnUKLWRERWVNQndHQTFVRUN4TVZUVVExTFZKVFFTMU9RVk5CTFZCcGJHOTBMVU5CTUZrd0NnWUVWUWdCQVFJQ0FnQUQKLVN3QXdTQUpCQUxtbVg1K0dxQXZjcldLMTNyZkRyTlg5VWZlQTdmK2lqeUJnZUZRallVb0RwRnFhcHc0bnpRQkwKLWJBWHVnOHBLa1J3YTJaaDhZT0RoWHNSV3UyRi9VY2tDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUVFGQUFOQkFIOWEKLU9CQStRQ3NqeFhnblNxSHgwNGdjVThTNDlEVlViMWYyWFZvTG5IbEliOFJuWDBrNU82bXBIVDVldGk5YkxraVcKLUdKTk1KNEwwQUovYWMrU21IWmM9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNhakNDQWRNQ0JER0EwUVV3RFFZSktvWklodmNOQVFFRUJRQXdmVEVMTUFrR0ExVUVCaE1DUTJFeER6QU4KLUJnTlZCQWNUQms1bGNHVmhiakVlTUJ3R0ExVUVDeE1WVG04Z1RHbGhZbWxzYVhSNUlFRmpZMlZ3ZEdWa01SOHcKLUhRWURWUVFLRXhaR2IzSWdSR1Z0YnlCUWRYSndiM05sY3lCUGJteDVNUnd3R2dZRFZRUURFeE5GYm5SeWRYTjAKLUlFUmxiVzhnVjJWaUlFTkJNQjRYRFRrMk1EUXlOakV6TXpVd01Wb1hEVEEyTURReU5qRXpNelV3TVZvd2ZURUwKLU1Ba0dBMVVFQmhNQ1EyRXhEekFOQmdOVkJBY1RCazVsY0dWaGJqRWVNQndHQTFVRUN4TVZUbThnVEdsaFltbHMKLWFYUjVJRUZqWTJWd2RHVmtNUjh3SFFZRFZRUUtFeFpHYjNJZ1JHVnRieUJRZFhKd2IzTmxjeUJQYm14NU1Sd3cKLUdnWURWUVFERXhORmJuUnlkWE4wSUVSbGJXOGdWMlZpSUVOQk1JR2RNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R0wKLUFEQ0Jod0tCZ1FDYXJvUzdPMURBMGhtNEllZk5ZVTFjeC9ucU9tekVuazI5MWQxWHF6bkRlRjR3RWdha2JrQ2MKLXpUS3hLNzkxeU5wWEc1Um1uZ3FIN2N5Z0RSVEhaSjZtZkNSbjB3R0MrQUkwMEYydllUR3FQR1JRTDFOM2xaVDAKLVlES0ZDMFNRZU1NakZJWjFhZVFpZ3JvRlFuSG8wVkIzeldJTXBOa2thOFBZOWx4SFpBbVd3UUlCQXpBTkJna3EKLWhraUc5dzBCQVFRRkFBT0JnUUJBeDBVTVZBMXM1NGxNUXlYak1YNWtqOTlGSk41aXRiOGJLMVJrK2NlZ1BRUEYKLWNXTzlTRVd5RWpqQmpJa2pqekF3QmthRXN6RnNOR3hlbXh0WHZ3akltMXhFVU1UVmxQRVdUczJxbkR2QVVBOVcKLVlxaFdiaEgwdG9HVDM2MjM2UUFzcUNaNzZyYlRSVlNTWDJCSHlKd0pNRzJ0Q1J2N2tSSi8vTklneGozSDR3PT0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLQotaXNzdWVyPSAvQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049VGVzdCBQQ0EgKDEwMjQgYml0KQotc3ViamVjdD0vQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049VGVzdCBQQ0EgKDEwMjQgYml0KQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDSnpDQ0FaQUNBUUF3RFFZSktvWklodmNOQVFFRUJRQXdYREVMTUFrR0ExVUVCaE1DUVZVeEV6QVJCZ05WCi1CQWdUQ2xGMVpXVnVjMnhoYm1ReEdqQVlCZ05WQkFvVEVVTnllWEIwVTI5bWRDQlFkSGtnVEhSa01Sd3dHZ1lECi1WUVFERXhOVVpYTjBJRkJEUVNBb01UQXlOQ0JpYVhRcE1CNFhEVGszTURZd09URXpOVGN6TjFvWERUQXhNRFl3Ci1PVEV6TlRjek4xb3dYREVMTUFrR0ExVUVCaE1DUVZVeEV6QVJCZ05WQkFnVENsRjFaV1Z1YzJ4aGJtUXhHakFZCi1CZ05WQkFvVEVVTnllWEIwVTI5bWRDQlFkSGtnVEhSa01Sd3dHZ1lEVlFRREV4TlVaWE4wSUZCRFFTQW9NVEF5Ci1OQ0JpYVhRcE1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ2RvV2svMytXY01sZmpJcmtnCi00MGtldG1uUWFFb2dRZTFMTGN1T0pWNnJLZlVTQXNQZ3dnc2FiSi93bjhUeEExeXkzZUtKYkZsM09pVVhNUnNwCi0yMkpwODVQbWVtaUR6eVVJU3R3azcycWhwMWltYkFOWnZsbWxDRktpUXJqVXl1RGZ1NFRBQm1uK2trdDN2UjFZCi1CRU9HdCtJRnllMVVCVlNBVFZkUkoyVVZod0lEQVFBQk1BMEdDU3FHU0liM0RRRUJCQVVBQTRHQkFCTkExdS9TCi1DZy9MSlpXYjdHbGlpS0pzdnVoeGxFNEU1SnhRRjJ6TXViL0NTTmJGOTcvL3RZU3lqOTZzeGVGUXhaWGJjam05Ci14dDZtci94TkxBNHN6TlFNSjRQK0w3YjVlL2pDNURTcWx3UytDVVlKZ2FGcy9TUCtxSm9DU3UxYlIzSU05WFdPCi1jUkJwRG1jQmJZTGtTeUI5MldVUnZzWjFMdGpFY24rY2RRVkkKLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUNYQUlCQUFLQmdRQ2RvV2svMytXY01sZmpJcmtnNDBrZXRtblFhRW9nUWUxTExjdU9KVjZyS2ZVU0FzUGcKLXdnc2FiSi93bjhUeEExeXkzZUtKYkZsM09pVVhNUnNwMjJKcDg1UG1lbWlEenlVSVN0d2s3MnFocDFpbWJBTloKLXZsbWxDRktpUXJqVXl1RGZ1NFRBQm1uK2trdDN2UjFZQkVPR3QrSUZ5ZTFVQlZTQVRWZFJKMlVWaHdJREFRQUIKLUFvR0FiYTRmVHR1YXA1bDcvOFpzYkU3WjFPMzJLSlk0WmNPWnVrTE9MVVVoWHhYZHVUK0ZUZ0dXdWpjMC9yZ2MKLXo5cVlDTGxOWkhPb3VNWVRndFNmWXZ1TXVMWjExVkl0MEdZSCtuUmlvTFNoRTU5WXkrekNSeUMrZ1BpZ1Mxa3oKLXh2bzE0QXNPSVBZVjE0VGsvU3NIeXE2RTBlVGs3VnphSUUxOTdnaWlJTlVFUlBFQ1FRRFNLbXRQVGgvbFJLdzcKLUhTWlNNMEkxbUZXbi8xenFyQWJvbnRSUVk1dzk4UVdJT2U1cW16WXlGYlBYWVQzZDlCemxzTXloZ2lSTm9CYkQKLXl2b2hTSFhKQWtFQXdBSHg2ZXpBWmVXV3pENXlYRDM2bnlqcGtWQ3c3VGs3VFNtT2NlTEpNV3QxUWNyQ2ZxbFMKLXhBNWpqcFE2WjhzdVU1RGR0V0FyeU0yc0FpcjFXaXNZendKQWQ2WmN4NTZqdkFRM3hjUFhzRTZzY0JUVkZ6cmoKLTdGcVo2RStjY2xQemZMUStRUXN5T0JFN2JwSTZlL0ZKcHBZMjZYR1pYbzNZR3pWOElHWHJ0NDBvT1FKQUxFVEcKLWg4NkVGWG8zcUdPRmJtc0R5NHBkUDVuQkVSQ3U4WDF4VUNTZmludGlENGMyRElueGdTNW9HY2xuSmVNY2pUdkwKLVFqUW9KQ1gzVUpDaS9PVU8xUUpCQUtnY0RIV2pNdnQrbDFwakpCc1NFWjBIWDlBQUlJVngwUlFtYkZHUytGMlEKLWhodTVsNzdXbm5aT1E5dnZoVjV1N05QQ1VGOW5oVTNqaDYwcVdXTzhta2M9Ci0tLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQotc3ViamVjdD0vQz1VUy9PPVJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuL09VPUNvbW1lcmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLWlzc3Vlcj0gL0M9VVMvTz1SU0EgRGF0YSBTZWN1cml0eSwgSW5jLi9PVT1Db21tZXJjaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci1ub3RCZWZvcmU9OTQxMTA0MTg1ODM0Wgotbm90QWZ0ZXIgPTk5MTEwMzE4NTgzNFoKLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNJekNDQVpBQ0JRSkJBQUFXTUEwR0NTcUdTSWIzRFFFQkFnVUFNRnd4Q3pBSkJnTlZCQVlUQWxWVE1TQXcKLUhnWURWUVFLRXhkU1UwRWdSR0YwWVNCVFpXTjFjbWwwZVN3Z1NXNWpMakVyTUNrR0ExVUVDeE1pUTI5dGJXVnkKLVkybGhiQ0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQWVGdzA1TkRFeE1EUXhPRFU0TXpSYUZ3MDUKLU9URXhNRE14T0RVNE16UmFNRnd4Q3pBSkJnTlZCQVlUQWxWVE1TQXdIZ1lEVlFRS0V4ZFNVMEVnUkdGMFlTQlQKLVpXTjFjbWwwZVN3Z1NXNWpMakVyTUNrR0ExVUVDeE1pUTI5dGJXVnlZMmxoYkNCRFpYSjBhV1pwWTJGMGFXOXUKLUlFRjFkR2h2Y21sMGVUQ0JtekFOQmdrcWhraUc5dzBCQVFFRkFBT0JpUUF3Z1lVQ2ZnQ2srNEZpZTg0UUo5M28KLTk3NXNic1p3bWR1NDFRVURhU2lDbkhKL2xqK083S3dwa2orS0ZQaENkcjY5WFFPNWtOVFF2QWF5VVROZnhNSy8KLXRvdVBtYlppSW1EZDI5OGdnclRLb2k4dFVPMlVNdDdnVlkzVWFPTGdUTkxOQlJZdWxXWmNZVkk0SGxHb2dxSEUKLTd5WHBDdWFMSzQ0eFp0bjQyZjI5TzJuWjZ3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFBMzRBZHJXMkVQNGoKLTkvZFpZa3V3WDV6QmFMeEp1N05KYnlGSFhTdWRWTVFBS0QrWXVmS0tnNXRnZit0UXg2c0ZFQzA5N1RnQ3dhVkkKLTB2NWxvTUM4NnFZakZtWnNHeVNwOCt4NU5SaFBKc2pqcjFCS3g2Y3hhOUI4R0oxUXY2a20raVlyUnB3VXFidGIKLU1KaENLTFZMVTd0RENaSkF1cWlxV3FUR3RvdFhUY1U9Ci0tLS0tLUVORCBYNTA5IENFUlRJRklDQVRFLS0tLS0KLXN1YmplY3Q9L0M9VVMvTz1SU0EgRGF0YSBTZWN1cml0eSwgSW5jLi9PVT1TZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci1pc3N1ZXI9IC9DPVVTL089UlNBIERhdGEgU2VjdXJpdHksIEluYy4vT1U9U2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotbm90QmVmb3JlPTk0MTEwOTIzNTQxN1oKLW5vdEFmdGVyID05OTEyMzEyMzU0MTdaCi0tLS0tLUJFR0lOIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotCi1NSUlDS1RDQ0FaWUNCUUpCQUFBQk1BMEdDU3FHU0liM0RRRUJBZ1VBTUY4eEN6QUpCZ05WQkFZVEFsVlRNU0F3Ci1IZ1lEVlFRS0V4ZFNVMEVnUkdGMFlTQlRaV04xY21sMGVTd2dTVzVqTGpFdU1Dd0dBMVVFQ3hNbFUyVmpkWEpsCi1JRk5sY25abGNpQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MDVOREV4TURreU16VTBNVGRhCi1GdzA1T1RFeU16RXlNelUwTVRkYU1GOHhDekFKQmdOVkJBWVRBbFZUTVNBd0hnWURWUVFLRXhkU1UwRWdSR0YwCi1ZU0JUWldOMWNtbDBlU3dnU1c1akxqRXVNQ3dHQTFVRUN4TWxVMlZqZFhKbElGTmxjblpsY2lCRFpYSjBhV1pwCi1ZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQ0JtekFOQmdrcWhraUc5dzBCQVFFRkFBT0JpUUF3Z1lVQ2ZnQ1N6bnJCCi1yb00rV3FxSmcxZXNKUUYyREsydWppdzN6dXMxZUdSVUErV0VRRkhKdjQ4STRvcUNDTklXaGpkVjZiRWhBcTEyCi1hSUdhQmFKTHlVc2xaaUpXYklnSGovZUJXVzJFQjJWd0UzRjJQcHQzVE9OUWlWYVlTTGtkcHlrYUV5NUtFVm1jCi1IaFhWU1ZRc2N6cHBnckdYT1p4dGNHZEk1ZDB0MXNnZWV3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFBMzRBCi1pTkhSZVNITzRvdm8rTUY5TkZNL1lZUFp0Z3M0Rjdib3ZpR05qd0M0aTFOK1JHY2VJcjJYSitDY2hjeEs5b1U3Ci1zdUsra3RQbERlbXZYQTRNUnBYL29SeGVQdWcyV0hwenBncjRJaEZyd3drNGZpYTdjKzhBdlFLazh4UU5NRDloCi1jSHNnL2pLam43UDBaMUxjdE82RWpKWTJJTjZCQ0lOeElZb1BucWs9Ci0tLS0tLUVORCBYNTA5IENFUlRJRklDQVRFLS0tLS0KLXN1YmplY3Q9L0M9WkEvU1A9V2VzdGVybiBDYXBlL0w9Q2FwZSBUb3duL089VGhhd3RlIENvbnN1bHRpbmcgY2MKLQkvT1U9Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbi9DTj1UaGF3dGUgU2VydmVyIENBCi0JL0VtYWlsPXNlcnZlci1jZXJ0c0B0aGF3dGUuY29tCi1pc3N1ZXI9IC9DPVpBL1NQPVdlc3Rlcm4gQ2FwZS9MPUNhcGUgVG93bi9PPVRoYXd0ZSBDb25zdWx0aW5nIGNjCi0JL09VPUNlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24vQ049VGhhd3RlIFNlcnZlciBDQQotCS9FbWFpbD1zZXJ2ZXItY2VydHNAdGhhd3RlLmNvbQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDK1RDQ0FtSUNBUUF3RFFZSktvWklodmNOQVFFRUJRQXdnY1F4Q3pBSkJnTlZCQVlUQWxwQk1SVXdFd1lECi1WUVFJRXd4WFpYTjBaWEp1SUVOaGNHVXhFakFRQmdOVkJBY1RDVU5oY0dVZ1ZHOTNiakVkTUJzR0ExVUVDaE1VCi1WR2hoZDNSbElFTnZibk4xYkhScGJtY2dZMk14S0RBbUJnTlZCQXNUSDBObGNuUnBabWxqWVhScGIyNGdVMlZ5Ci1kbWxqWlhNZ1JHbDJhWE5wYjI0eEdUQVhCZ05WQkFNVEVGUm9ZWGQwWlNCVFpYSjJaWElnUTBFeEpqQWtCZ2txCi1oa2lHOXcwQkNRRVdGM05sY25abGNpMWpaWEowYzBCMGFHRjNkR1V1WTI5dE1CNFhEVGsyTURjeU56RTRNRGMxCi1OMW9YRFRrNE1EY3lOekU0TURjMU4xb3dnY1F4Q3pBSkJnTlZCQVlUQWxwQk1SVXdFd1lEVlFRSUV3eFhaWE4wCi1aWEp1SUVOaGNHVXhFakFRQmdOVkJBY1RDVU5oY0dVZ1ZHOTNiakVkTUJzR0ExVUVDaE1VVkdoaGQzUmxJRU52Ci1ibk4xYkhScGJtY2dZMk14S0RBbUJnTlZCQXNUSDBObGNuUnBabWxqWVhScGIyNGdVMlZ5ZG1salpYTWdSR2wyCi1hWE5wYjI0eEdUQVhCZ05WQkFNVEVGUm9ZWGQwWlNCVFpYSjJaWElnUTBFeEpqQWtCZ2txaGtpRzl3MEJDUUVXCi1GM05sY25abGNpMWpaWEowYzBCMGFHRjNkR1V1WTI5dE1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCCi1pUUtCZ1FEVHBGQnV5UDlXYStiUFhiYnFER2gxUjZLcXd0cUVKZnlvOUVkUjJvVzFJSFNVaGg0UGRjbnBDR0gxCi1CbTB3YmhVWkF1bFN3R0xiVFptZTRtb01SRGpOL3I3alpBbHd4ZjZ4YXltMkwwbklPOVFuQkNVUWx5L25rRzNBCi1LRUtaMTB4RDNzUDFJVzFVbjEzRFdPSEE1Tmxic0xqY3RIdmZOanJDdFdZaUV0YUhEUUlEQVFBQk1BMEdDU3FHCi1TSWIzRFFFQkJBVUFBNEdCQUlzdm43aWZYM1JVSXJ2WVh0cEk0RE9mQVJrVG9nd202bzdPd1ZkbDkzeUZoRGNYCi03aDV0MFhaMTFNVUFNemlLZGRlM3JtVHZ6VVlJVUNZb1k1YjAzMkl3R01UdmRpY2xLK1NUTjZOUDJtNW52RkFNCi1xSlQ1Z0M1TytqL2pCdVpSUTRpMEFNWVFyNUY0bFQ4b0JKbmhnYWZ3NlBMOGFEWTJ2TUhHU1BsOSs3dWYKLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlERFRDQ0FuWUNBUUF3RFFZSktvWklodmNOQVFFRUJRQXdnYzR4Q3pBSkJnTlZCQVlUQWxwQk1SVXdFd1lECi1WUVFJRXd4WFpYTjBaWEp1SUVOaGNHVXhFakFRQmdOVkJBY1RDVU5oY0dVZ1ZHOTNiakVkTUJzR0ExVUVDaE1VCi1WR2hoZDNSbElFTnZibk4xYkhScGJtY2dZMk14S0RBbUJnTlZCQXNUSDBObGNuUnBabWxqWVhScGIyNGdVMlZ5Ci1kbWxqWlhNZ1JHbDJhWE5wYjI0eElUQWZCZ05WQkFNVEdGUm9ZWGQwWlNCUWNtVnRhWFZ0SUZObGNuWmxjaUJECi1RVEVvTUNZR0NTcUdTSWIzRFFFSkFSWVpjSEpsYldsMWJTMXpaWEoyWlhKQWRHaGhkM1JsTG1OdmJUQWVGdzA1Ci1OakEzTWpjeE9EQTNNVFJhRncwNU9EQTNNamN4T0RBM01UUmFNSUhPTVFzd0NRWURWUVFHRXdKYVFURVZNQk1HCi1BMVVFQ0JNTVYyVnpkR1Z5YmlCRFlYQmxNUkl3RUFZRFZRUUhFd2xEWVhCbElGUnZkMjR4SFRBYkJnTlZCQW9UCi1GRlJvWVhkMFpTQkRiMjV6ZFd4MGFXNW5JR05qTVNnd0pnWURWUVFMRXg5RFpYSjBhV1pwWTJGMGFXOXVJRk5sCi1jblpwWTJWeklFUnBkbWx6YVc5dU1TRXdId1lEVlFRREV4aFVhR0YzZEdVZ1VISmxiV2wxYlNCVFpYSjJaWElnCi1RMEV4S0RBbUJna3Foa2lHOXcwQkNRRVdHWEJ5WlcxcGRXMHRjMlZ5ZG1WeVFIUm9ZWGQwWlM1amIyMHdnWjh3Ci1EUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOSTJObXFMMThKYm50cUJRV0tQT081SkJGWFcwTzhjCi1HNVVXUis4WVNEVTZVdlFyYWdhUE95L3FWdU92aG8yZUYvZWV0R1YxQWszdnl3bWlJVkhZbTlCbjBMb05rZ1lVCi1jOVNUeTVjcUFKeGNUZ3k4K2hWUy9QSkVidG9SU200SW55OHQ0L21xT29aenRrWlRXTWlKQmIyREViaHpQNm9ICi1qZlJDVGVkQW5SdzNBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUVCUUFEZ1lFQXV0RklnVFJaVlllcklaZkw5bHZSCi13OUVpZnZ2bzVLVFozaCtCaitWek5ueXc0UWMvSXlYa1BPdTZTSWlIOUxRM3NDbVdCZHhwZStxcjRsNzdyTGoyCi1HWXVNdEVTRmZuMVhWQUx6a1lnQzdKY1B1VE9qTWZJaU1CeXQrdUZmOEFWOHgwSVcvUWt1ditoRVFjeU05dnhLCi0zVlpkTGJDVkloTm9Fc3lzcnhDcHhjST0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLVRpbXMgdGVzdCBHQ0kgQ0EKLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlCOERDQ0Fab0NBUUF3RFFZSktvWklodmNOQVFFRUJRQXdnWUl4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlECi1WUVFJRXdwUmRXVmxibk5zWVc1a01SRXdEd1lEVlFRSEV3aENjbWx6WW1GdVpURWFNQmdHQTFVRUNoTVJRM0o1Ci1jSFJUYjJaMElGQjBlU0JNZEdReEZEQVNCZ05WQkFzVEMyUmxkbVZzYjNCdFpXNTBNUmt3RndZRFZRUURFeEJECi1jbmx3ZEZOdlpuUWdSR1YySUVOQk1CNFhEVGszTURNeU1qRXpNelF3TkZvWERUazRNRE15TWpFek16UXdORm93Ci1nWUl4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSUV3cFJkV1ZsYm5Oc1lXNWtNUkV3RHdZRFZRUUhFd2hDCi1jbWx6WW1GdVpURWFNQmdHQTFVRUNoTVJRM0o1Y0hSVGIyWjBJRkIwZVNCTWRHUXhGREFTQmdOVkJBc1RDMlJsCi1kbVZzYjNCdFpXNTBNUmt3RndZRFZRUURFeEJEY25sd2RGTnZablFnUkdWMklFTkJNRnd3RFFZSktvWklodmNOCi1BUUVCQlFBRFN3QXdTQUpCQU9BT0Fxb2dHNVF3QW1MaHp5TzRDb1JueC93Vnk0TlpQNGR4Snk4M08xRW5MMHJ3Ci1PZHNhbUpLdlBPTEhnU1hvM2dEdTl1Vnl2Q2YvUUptWkFtQzVtbDhDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUVFGCi1BQU5CQURSUlMvR1ZkZDdyQXFSVzZTZG1nTEpkdU9VMnlxM2F2QnU5OWtScWJwOUEvZEx1NnI2alUrZVA0b09BCi1UZmRiRlp0QUFEMkh4OWpVdFkzdGZkckpPYjg9IAotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNWakNDQWdBQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2diVXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWUQKLVZRUUlFd3BSZFdWbGJuTnNZVzVrTVJFd0R3WURWUVFIRXdoQ2NtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjUKLWNIUlRiMlowSUZCMGVTQk1kR1F4TERBcUJnTlZCQXNUSTFkUFVsUklURVZUVXlCRFJWSlVTVVpKUTBGVVNVOU8KLUlFRlZWRWhQVWtsVVNVVlRNVFF3TWdZRFZRUURFeXRhUlZKUElGWkJURlZGSUVOQklDMGdSRVZOVDA1VFZGSkIKLVZFbFBUaUJRVlZKUVQxTkZVeUJQVGt4Wk1CNFhEVGszTURRd016RXpNakkxTkZvWERUazRNRFF3TXpFek1qSTEKLU5Gb3dnYlV4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSUV3cFJkV1ZsYm5Oc1lXNWtNUkV3RHdZRFZRUUgKLUV3aENjbWx6WW1GdVpURWFNQmdHQTFVRUNoTVJRM0o1Y0hSVGIyWjBJRkIwZVNCTWRHUXhMREFxQmdOVkJBc1QKLUkxZFBVbFJJVEVWVFV5QkRSVkpVU1VaSlEwRlVTVTlPSUVGVlZFaFBVa2xVU1VWVE1UUXdNZ1lEVlFRREV5dGEKLVJWSlBJRlpCVEZWRklFTkJJQzBnUkVWTlQwNVRWRkpCVkVsUFRpQlFWVkpRVDFORlV5QlBUa3haTUZ3d0RRWUoKLUtvWklodmNOQVFFQkJRQURTd0F3U0FKQkFPWjdUN3lxUC90eXNwY2tvM3lQWTF5MENtMkVtd052elc0UWdWWFIKLUZqczNIbUo0eHRTcFhkbzZtd2NHZXpMM0FidC9hUVhheHY5UFU4eHQrSnIwT0ZVQ0F3RUFBVEFOQmdrcWhraUcKLTl3MEJBUVFGQUFOQkFPUXBZbUdneUNxQ3kxT2xqZ0poQ3FRT3U2MjdvVmxIeksxTCt0OXZCYU1mbjQwQVZVUjQKLVd6UVZXTzMxS1RnaTV2VEsxVSszaDQ2ZmdVV3FRMGgrNnJVPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUF3Z0tBREFnRUNBZ0VBTUEwR0NTcUdTSWIzRFFFQkJBVUFNR0l4RVRBUEJnTlZCQWNUQ0VsdWRHVnlibVYwCi1NUmN3RlFZRFZRUUtFdzVXWlhKcFUybG5iaXdnU1c1akxqRTBNRElHQTFVRUN4TXJWbVZ5YVZOcFoyNGdRMnhoCi1jM01nTVNCRFFTQXRJRWx1WkdsMmFXUjFZV3dnVTNWaWMyTnlhV0psY2pBZUZ3MDVOakEwTURneE1ESXdNamRhCi1GdzA1TnpBME1EZ3hNREl3TWpkYU1HSXhFVEFQQmdOVkJBY1RDRWx1ZEdWeWJtVjBNUmN3RlFZRFZRUUtFdzVXCi1aWEpwVTJsbmJpd2dTVzVqTGpFME1ESUdBMVVFQ3hNclZtVnlhVk5wWjI0Z1EyeGhjM01nTVNCRFFTQXRJRWx1Ci1aR2wyYVdSMVlXd2dVM1ZpYzJOeWFXSmxjakNBTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUMyCi1GS2JQVGRBRkRkaktJOUJ2cXJRcGttT09MUGh2bHRjdW5YWkxFYkUyalZmSncvMGN4cnIrSGdpNk04cVY2cjdqCi1XODBHcUxkNUhVUXE3WFB5c1ZLRGFCQndaSkhYUG12NTkxMmRGRU9iYnBkRm1JRkgwUzNMM2J0eTEwdy9jYXJpCi1RUEpVT2J3VzdzOTg3THJiUDJ3cXN4YXhoaEtkcnBNMDFialYwUGMrcVFJREFRQUJBQUFBQURBTkJna3Foa2lHCi05dzBCQVFRRkFBT0JnUUErMW5KcnlOdDhWQlJqUnIwN0FyREFWLzNqQUg3R2pEYzlqc3J4WlM2OG9zdDl2MDZDCi1UdlROS0dMK0xJU05tRkxYbCtKWGhnR0IwSlo5ZnZ5WXpOZ0hRNDZIQlVuZzFINnZvYWxmSmdTMktkRW81MHdXCi04RUZaWU1Ea1QxazR1eW53SnFrVk4yUUpLLzJxNC9BL1ZDb3Y1aDZTbE04QWZmZzJXKzFUTHF2cWt3QUEKLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLQotIHN1YmplY3Q9L0w9SW50ZXJuZXQvTz1WZXJpU2lnbiwgSW5jLi9PVT1WZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyCi0gaXNzdWVyPSAvTD1JbnRlcm5ldC9PPVZlcmlTaWduLCBJbmMuL09VPVZlcmlTaWduIENsYXNzIDIgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIKLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlFa3pDQ0EveWdBd0lCQWdJUkFORFRVcFNSTDNuVEZlTXJNYXlGU1BBd0RRWUpLb1pJaHZjTkFRRUNCUUF3Ci1ZakVSTUE4R0ExVUVCeE1JU1c1MFpYSnVaWFF4RnpBVkJnTlZCQW9URGxabGNtbFRhV2R1TENCSmJtTXVNVFF3Ci1NZ1lEVlFRTEV5dFdaWEpwVTJsbmJpQkRiR0Z6Y3lBeUlFTkJJQzBnU1c1a2FYWnBaSFZoYkNCVGRXSnpZM0pwCi1ZbVZ5TUI0WERUazJNRFl3TkRBd01EQXdNRm9YRFRrNE1EWXdOREl6TlRrMU9Wb3dZakVSTUE4R0ExVUVCeE1JCi1TVzUwWlhKdVpYUXhGekFWQmdOVkJBb1REbFpsY21sVGFXZHVMQ0JKYm1NdU1UUXdNZ1lEVlFRTEV5dFdaWEpwCi1VMmxuYmlCRGJHRnpjeUF5SUVOQklDMGdTVzVrYVhacFpIVmhiQ0JUZFdKelkzSnBZbVZ5TUlHZk1BMEdDU3FHCi1TSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUM2QSsyY3pLR1JjWU1mbThnZG5rKzBkZTk5VEREenNxbzB2NW5iCi1Sc2JVbU1jZFJRN25zTWJSV2UwU0FiLzlRb0xUWi9jSjBpT0JxZHJrejdVcHFxS2FyVm9UU2RsU01WTTkydFdwCi0zYkpuY1pIUUQxdDR4ZDZsUVZkSTEvVDZSKzVKMFQxdWtPZHNJOUptZitGMjhTNmczUjNMMVNGd2lIS2VaS1p2Ci16Kzc5M3dJREFRQUJvNElDUnpDQ0FrTXdnZ0lwQmdOVkhRTUJBZjhFZ2dJZE1JSUNHVENDQWhVd2dnSVJCZ3RnCi1oa2dCaHZoRkFRY0JBVENDQWdBV2dnR3JWR2hwY3lCalpYSjBhV1pwWTJGMFpTQnBibU52Y25CdmNtRjBaWE1nCi1ZbmtnY21WbVpYSmxibU5sTENCaGJtUWdhWFJ6SUhWelpTQnBjeUJ6ZEhKcFkzUnNlU0J6ZFdKcVpXTjBJSFJ2Ci1MQ0IwYUdVZ1ZtVnlhVk5wWjI0Z1EyVnlkR2xtYVdOaGRHbHZiaUJRY21GamRHbGpaU0JUZEdGMFpXMWxiblFnCi1LRU5RVXlrc0lHRjJZV2xzWVdKc1pTQmhkRG9nYUhSMGNITTZMeTkzZDNjdWRtVnlhWE5wWjI0dVkyOXRMME5RCi1VeTB4TGpBN0lHSjVJRVV0YldGcGJDQmhkQ0JEVUZNdGNtVnhkV1Z6ZEhOQWRtVnlhWE5wWjI0dVkyOXRPeUJ2Ci1jaUJpZVNCdFlXbHNJR0YwSUZabGNtbFRhV2R1TENCSmJtTXVMQ0F5TlRreklFTnZZWE4wSUVGMlpTNHNJRTF2Ci1kVzUwWVdsdUlGWnBaWGNzSUVOQklEazBNRFF6SUZWVFFTQlVaV3d1SUNzeElDZzBNVFVwSURrMk1TMDRPRE13Ci1JRU52Y0hseWFXZG9kQ0FvWXlrZ01UazVOaUJXWlhKcFUybG5iaXdnU1c1akxpQWdRV3hzSUZKcFoyaDBjeUJTCi1aWE5sY25abFpDNGdRMFZTVkVGSlRpQlhRVkpTUVU1VVNVVlRJRVJKVTBOTVFVbE5SVVFnWVc1a0lFeEpRVUpKCi1URWxVV1NCTVNVMUpWRVZFTHFBT0JneGdoa2dCaHZoRkFRY0JBUUdoRGdZTVlJWklBWWI0UlFFSEFRRUNNQzh3Ci1MUllyYUhSMGNITTZMeTkzZDNjdWRtVnlhWE5wWjI0dVkyOXRMM0psY0c5emFYUnZjbmt2UTFCVExURXVNREFVCi1CZ2xnaGtnQmh2aENBUUVCQWY4RUJBTUNBZ1F3RFFZSktvWklodmNOQVFFQ0JRQURnWUVBcFJKUmtOQnFMTGdzCi01M0lSL2QxOE9EZExPV01UWitRT094QnJxNDYwaUJFZFV3Z0Y4dm1QUlgxa3U3VWlEZU56YUxsdXJFNmVGcUhxCi0yelB5SzVqNjB6ZlRMVkpNV0tjUVd3VEpMakh0WHJXOHB4aE50RmM2RmR2eTVaa0huQy85TklsNy90NFU2V3FCCi1wNHkrcDdTZE1Ja0V3SVpmZHMwVmJuUXlYNU1SVUpZPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0gc3ViamVjdD0vQz1VUy9PPVZlcmlTaWduLCBJbmMuL09VPUNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLSBpc3N1ZXI9IC9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDTVRDQ0Fab0NCUUtoQUFBQk1BMEdDU3FHU0liM0RRRUJBZ1VBTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3Ci1GUVlEVlFRS0V3NVdaWEpwVTJsbmJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTXlCUWRXSnNhV01nCi1VSEpwYldGeWVTQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MDVOakF4TWprd01EQXdNREJhCi1GdzA1T1RFeU16RXlNelU1TlRsYU1GOHhDekFKQmdOVkJBWVRBbFZUTVJjd0ZRWURWUVFLRXc1V1pYSnBVMmxuCi1iaXdnU1c1akxqRTNNRFVHQTFVRUN4TXVRMnhoYzNNZ015QlFkV0pzYVdNZ1VISnBiV0Z5ZVNCRFpYSjBhV1pwCi1ZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUF5VnhaCi1udkliaWdFVXRCRGZCRURiNDFldmFrVkFqNFFNQzlFejJka1J6KzRDV0I4bDl5cW9SQVdxN0FNZmVIK2VrN21hCi1BS29qZmRhc2hhSmpSY2R5Sjh6MFRNWjFjZEk1NzA5QzhIWGZDcERHamlCdm1BLzRyQ05mY0NrMnBNbUc1N0dhCi1JTXRUcFlYblBiNTltdjRrUlRQY2RoWHRENkp4WkV4bExvRm9SYWNDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUUlGCi1BQU9CZ1FCMVptdyswYzJCMjdYNEx6WlJ0dmRDdk0xQ3I5d08raFZzK0dlVFZ6cnJ0cExvdGdIS2pMZU9RN1JKCi1aZmsrN3IxMVJpN0ovQ1ZkcU1jdmk1dVBhTSswbkpjWXdFM3ZIOW12Z3JQbVpMaUVYSXFhQjFKRFlmdDBubHM2Ci1OdnhNc3Z3YVB4VXVwVnM4RzVEc2lDbmtXUmI1emdldDdPbmQydEl4aWsvVzJPOFhqUT09Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0gc3ViamVjdD0vQz1VUy9PPVZlcmlTaWduLCBJbmMuL09VPUNsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLSBpc3N1ZXI9IC9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDTVRDQ0Fab0NCUUttQUFBQk1BMEdDU3FHU0liM0RRRUJBZ1VBTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3Ci1GUVlEVlFRS0V3NVdaWEpwVTJsbmJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTkNCUWRXSnNhV01nCi1VSEpwYldGeWVTQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MDVOakF4TWprd01EQXdNREJhCi1GdzA1T1RFeU16RXlNelU1TlRsYU1GOHhDekFKQmdOVkJBWVRBbFZUTVJjd0ZRWURWUVFLRXc1V1pYSnBVMmxuCi1iaXdnU1c1akxqRTNNRFVHQTFVRUN4TXVRMnhoYzNNZ05DQlFkV0pzYVdNZ1VISnBiV0Z5ZVNCRFpYSjBhV1pwCi1ZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEwTEoxCi05bmpRcmxwUTlPbFFxWitNMSsrUmxIRG8waVNRZG9tRjF0K3M1Z0VYTW9Ed25aTkh2SnBsblIrWHJyL3BoblZqCi1JSW05Z0ZpZEJBeWRxTUVrNlF2bE1YaTkvQzBNTjJxZWVJRHBSblg1N2FQN0Uzdkl3VXpTbysvMVBMQmlqMHBkCi1POTJWWjQ4VHVjRTgxcWNtbSt6RE8zclpUYnh0bStnVkFlUHdSNmtDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUUlGCi1BQU9CZ1FCVDNkUHduQ1IrUUtyaS9BQWExOW9NL0RKaHVCVU5sdlA2Vnh0L00zeXY2WmlhWWNoNnM3Zi9zZHlaCi1nOXlzRXZ4d3lSODRRdTFFOW9BdVcyc3phYXljMDF6blgxb1l4N0V0ZVFTV1FaR1pRYkU4RGJxRU9jWTdsL0FtCi15WTd1dmN4Q2xmOGV4d0kvVkF4NDlieXFZSHdDYWVqY3JPSUNkbUhFUGdQcTBvb2swUT09Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9hbmRyb2lkLnRlc3Rzc2wvdGVzdHNzbCBiL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCmluZGV4IDBlZWU5MmQuLjk2YTkwZDEgMTAwNzU1Ci0tLSBhL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCisrKyBiL2FuZHJvaWQudGVzdHNzbC90ZXN0c3NsCkBAIC0xNjAsNCArMTYwLDE0IEBACiBlY2hvIHRlc3QgdGxzMSB3aXRoIFBTSyB2aWEgQklPIHBhaXIKICRzc2x0ZXN0IC1iaW9fcGFpciAtdGxzMSAtY2lwaGVyIFBTSyAtcHNrIGFiYzEyMyAkZXh0cmEgfHwgZXhpdCAxCiAKK2lmIGFkYiBzaGVsbCAvc3lzdGVtL2Jpbi9vcGVuc3NsIG5vLXNycDsgdGhlbgorICBlY2hvIHNraXBwaW5nIFNSUCB0ZXN0cworZWxzZQorICBlY2hvIHRlc3QgdGxzMSB3aXRoIFNSUAorICAkc3NsdGVzdCAtdGxzMSAtY2lwaGVyIFNSUCAtc3JwdXNlciB0ZXN0IC1zcnBwYXNzIGFiYzEyMworCisgIGVjaG8gdGVzdCB0bHMxIHdpdGggU1JQIHZpYSBCSU8gcGFpcgorICAkc3NsdGVzdCAtYmlvX3BhaXIgLXRsczEgLWNpcGhlciBTUlAgLXNycHVzZXIgdGVzdCAtc3JwcGFzcyBhYmMxMjMKK2ZpCisKIGV4aXQgMApkaWZmIC0tZ2l0IGEvYXBwcy9BbmRyb2lkLm1rIGIvYXBwcy9BbmRyb2lkLm1rCmluZGV4IGMyZGMyZDcuLjkxMTA0OTAgMTAwNjQ0Ci0tLSBhL2FwcHMvQW5kcm9pZC5taworKysgYi9hcHBzL0FuZHJvaWQubWsKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlzbWltZS5jIFwKIAlzcGVlZC5jIFwKIAlzcGthYy5jIFwKKwlzcnAuYyBcCiAJdmVyaWZ5LmMgXAogCXZlcnNpb24uYyBcCiAJeDUwOS5jCmRpZmYgLS1naXQgYS9hcHBzL2FwcHMuYyBiL2FwcHMvYXBwcy5jCmluZGV4IDI3MmZkNzguLjRlMTE5MTUgMTAwNjQ0Ci0tLSBhL2FwcHMvYXBwcy5jCisrKyBiL2FwcHMvYXBwcy5jCkBAIC0yMjU4LDYgKzIyNTgsNyBAQAogCWludCBwdXJwb3NlID0gMCwgZGVwdGggPSAtMTsKIAljaGFyICoqb2xkYXJncyA9ICpwYXJnczsKIAljaGFyICphcmcgPSAqKnBhcmdzLCAqYXJnbiA9ICgqcGFyZ3MpWzFdOworCXRpbWVfdCBhdF90aW1lID0gMDsKIAlpZiAoIXN0cmNtcChhcmcsICItcG9saWN5IikpCiAJCXsKIAkJaWYgKCFhcmduKQpAQCAtMjMxMCw2ICsyMzExLDI3IEBACiAJCQl9CiAJCSgqcGFyZ3MpKys7CiAJCX0KKwllbHNlIGlmIChzdHJjbXAoYXJnLCItYXR0aW1lIikgPT0gMCkKKwkJeworCQlpZiAoIWFyZ24pCisJCQkqYmFkYXJnID0gMTsKKwkJZWxzZQorCQkJeworCQkJbG9uZyB0aW1lc3RhbXA7CisJCQkvKiBpbnRlcnByZXQgdGhlIC1hdHRpbWUgYXJndW1lbnQgYXMgc2Vjb25kcyBzaW5jZQorCQkJICogRXBvY2ggKi8KKwkJCWlmIChzc2NhbmYoYXJnbiwgIiVsaSIsICZ0aW1lc3RhbXApICE9IDEpCisJCQkJeworCQkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkJCSJFcnJvciBwYXJzaW5nIHRpbWVzdGFtcCAlc1xuIiwKKwkJCQkJICAgCWFyZ24pOworCQkJCSpiYWRhcmcgPSAxOworCQkJCX0KKwkJCS8qIG9uIHNvbWUgcGxhdGZvcm1zIHRpbWVfdCBtYXkgYmUgYSBmbG9hdCAqLworCQkJYXRfdGltZSA9ICh0aW1lX3QpIHRpbWVzdGFtcDsKKwkJCX0KKwkJKCpwYXJncykrKzsKKwkJfQogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWlnbm9yZV9jcml0aWNhbCIpKQogCQlmbGFncyB8PSBYNTA5X1ZfRkxBR19JR05PUkVfQ1JJVElDQUw7CiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItaXNzdWVyX2NoZWNrcyIpKQpAQCAtMjM2NCw2ICsyMzg2LDkgQEAKIAlpZiAoZGVwdGggPj0gMCkKIAkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X2RlcHRoKCpwbSwgZGVwdGgpOwogCisJaWYgKGF0X3RpbWUpIAorCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZSgqcG0sIGF0X3RpbWUpOworCiAJZW5kOgogCiAJKCpwYXJncykrKzsKQEAgLTI2OTUsNiArMjcyMCw1MCBAQAogCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKKy8qIG5leHRfcHJvdG9zX3BhcnNlIHBhcnNlcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgaW50byBhIHN0cmluZworICogaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZC4KKyAqICAgb3V0bGVuOiAob3V0cHV0KSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBvbiBzdWNjZXNzLgorICogICBlcnI6IChtYXliZSBOVUxMKSBvbiBmYWlsdXJlLCBhbiBlcnJvciBtZXNzYWdlIGxpbmUgaXMgd3JpdHRlbiB0byB0aGlzIEJJTy4KKyAqICAgaW46IGEgTlVMIHRlcm1pYW50ZWQgc3RyaW5nIGxpa2UgImFiYyxkZWYsZ2hpIgorICoKKyAqICAgcmV0dXJuczogYSBtYWxsb2NlZCBidWZmZXIgb3IgTlVMTCBvbiBmYWlsdXJlLgorICovCit1bnNpZ25lZCBjaGFyICpuZXh0X3Byb3Rvc19wYXJzZSh1bnNpZ25lZCBzaG9ydCAqb3V0bGVuLCBjb25zdCBjaGFyICppbikKKwl7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBjaGFyICpvdXQ7CisJc2l6ZV90IGksIHN0YXJ0ID0gMDsKKworCWxlbiA9IHN0cmxlbihpbik7CisJaWYgKGxlbiA+PSA2NTUzNSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvdXQgPSBPUEVOU1NMX21hbGxvYyhzdHJsZW4oaW4pICsgMSk7CisJaWYgKCFvdXQpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8PSBsZW47ICsraSkKKwkJeworCQlpZiAoaSA9PSBsZW4gfHwgaW5baV0gPT0gJywnKQorCQkJeworCQkJaWYgKGkgLSBzdGFydCA+IDI1NSkKKwkJCQl7CisJCQkJT1BFTlNTTF9mcmVlKG91dCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJb3V0W3N0YXJ0XSA9IGkgLSBzdGFydDsKKwkJCXN0YXJ0ID0gaSArIDE7CisJCQl9CisJCWVsc2UKKwkJCW91dFtpKzFdID0gaW5baV07CisJCX0KKworCSpvdXRsZW4gPSBsZW4gKyAxOworCXJldHVybiBvdXQ7CisJfQorI2VuZGlmICAvKiAhT1BFTlNTTF9OT19UTFNFWFQgJiYgIU9QRU5TU0xfTk9fTkVYVFBST1RPTkVHICovCisKIC8qCiAgKiBQbGF0Zm9ybS1zcGVjaWZpYyBzZWN0aW9ucwogICovCkBAIC0zMDIwLDQ2ICszMDg5LDMgQEAKIGludCByYXdfd3JpdGVfc3Rkb3V0KGNvbnN0IHZvaWQgKmJ1ZixpbnQgc2l6KQogCXsJcmV0dXJuIHdyaXRlKGZpbGVubyhzdGRvdXQpLGJ1ZixzaXopOwl9CiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLS8qIG5leHRfcHJvdG9zX3BhcnNlIHBhcnNlcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgaW50byBhIHN0cmluZwotICogaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZC4KLSAqICAgb3V0bGVuOiAob3V0cHV0KSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBvbiBzdWNjZXNzLgotICogICBpbjogYSBOVUwgdGVybWlhbnRlZCBzdHJpbmcgbGlrZSAiYWJjLGRlZixnaGkiCi0gKgotICogICByZXR1cm5zOiBhIG1hbGxvY2VkIGJ1ZmZlciBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLXVuc2lnbmVkIGNoYXIgKm5leHRfcHJvdG9zX3BhcnNlKHVuc2lnbmVkIHNob3J0ICpvdXRsZW4sIGNvbnN0IGNoYXIgKmluKQotCXsKLQlzaXplX3QgbGVuOwotCXVuc2lnbmVkIGNoYXIgKm91dDsKLQlzaXplX3QgaSwgc3RhcnQgPSAwOwotCi0JbGVuID0gc3RybGVuKGluKTsKLQlpZiAobGVuID49IDY1NTM1KQotCQlyZXR1cm4gTlVMTDsKLQotCW91dCA9IE9QRU5TU0xfbWFsbG9jKHN0cmxlbihpbikgKyAxKTsKLQlpZiAoIW91dCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IGxlbjsgKytpKQotCQl7Ci0JCWlmIChpID09IGxlbiB8fCBpbltpXSA9PSAnLCcpCi0JCQl7Ci0JCQlpZiAoaSAtIHN0YXJ0ID4gMjU1KQotCQkJCXsKLQkJCQlPUEVOU1NMX2ZyZWUob3V0KTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCQl9Ci0JCQlvdXRbc3RhcnRdID0gaSAtIHN0YXJ0OwotCQkJc3RhcnQgPSBpICsgMTsKLQkJCX0KLQkJZWxzZQotCQkJb3V0W2krMV0gPSBpbltpXTsKLQkJfQotCi0JKm91dGxlbiA9IGxlbiArIDE7Ci0JcmV0dXJuIG91dDsKLQl9Ci0jZW5kaWYgIC8qICFPUEVOU1NMX05PX1RMU0VYVCAmJiAhT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcgKi8KZGlmZiAtLWdpdCBhL2FwcHMvYXBwcy5oIGIvYXBwcy9hcHBzLmgKaW5kZXggNDIwNzJlYy4uYzFjYTk5ZCAxMDA2NDQKLS0tIGEvYXBwcy9hcHBzLmgKKysrIGIvYXBwcy9hcHBzLmgKQEAgLTMxNyw2ICszMTcsMTIgQEAKIGludCBwa2V5X2N0cmxfc3RyaW5nKEVWUF9QS0VZX0NUWCAqY3R4LCBjaGFyICp2YWx1ZSk7CiBpbnQgaW5pdF9nZW5fc3RyKEJJTyAqZXJyLCBFVlBfUEtFWV9DVFggKipwY3R4LAogCQkJY29uc3QgY2hhciAqYWxnbmFtZSwgRU5HSU5FICplLCBpbnQgZG9fcGFyYW0pOworaW50IGRvX1g1MDlfc2lnbihCSU8gKmVyciwgWDUwOSAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQsCisJCQlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMpOworaW50IGRvX1g1MDlfUkVRX3NpZ24oQklPICplcnIsIFg1MDlfUkVRICp4LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCwKKwkJCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cyk7CitpbnQgZG9fWDUwOV9DUkxfc2lnbihCSU8gKmVyciwgWDUwOV9DUkwgKngsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kLAorCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzKTsKICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKIGV4dGVybiBjaGFyICpwc2tfa2V5OwogI2VuZGlmCkBAIC0zMjUsNiArMzMxLDEwIEBACiB2b2lkIGpwYWtlX3NlcnZlcl9hdXRoKEJJTyAqb3V0LCBCSU8gKmNvbm4sIGNvbnN0IGNoYXIgKnNlY3JldCk7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKK3Vuc2lnbmVkIGNoYXIgKm5leHRfcHJvdG9zX3BhcnNlKHVuc2lnbmVkIHNob3J0ICpvdXRsZW4sIGNvbnN0IGNoYXIgKmluKTsKKyNlbmRpZiAgLyogIU9QRU5TU0xfTk9fVExTRVhUICYmICFPUEVOU1NMX05PX05FWFRQUk9UT05FRyAqLworCiAjZGVmaW5lIEZPUk1BVF9VTkRFRiAgICAwCiAjZGVmaW5lIEZPUk1BVF9BU04xICAgICAxCiAjZGVmaW5lIEZPUk1BVF9URVhUICAgICAyCkBAIC0zNTcsOCArMzY3LDcgQEAKICNkZWZpbmUgVE1fU1RBUlQJMAogI2RlZmluZSBUTV9TVE9QCQkxCiBkb3VibGUgYXBwX3RtaW50ZXJ2YWwgKGludCBzdG9wLGludCB1c2VydGltZSk7Ci0jZW5kaWYKIAotI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotdW5zaWduZWQgY2hhciAqbmV4dF9wcm90b3NfcGFyc2UodW5zaWduZWQgc2hvcnQgKm91dGxlbiwgY29uc3QgY2hhciAqaW4pOworI2RlZmluZSBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL2NhLmMgYi9hcHBzL2NhLmMKaW5kZXggNWQxMTk0OC4uMmE4M2QxOSAxMDA2NDQKLS0tIGEvYXBwcy9jYS5jCisrKyBiL2FwcHMvY2EuYwpAQCAtMTk3LDI2ICsxOTcsMzAgQEAKIAogc3RhdGljIHZvaWQgbG9va3VwX2ZhaWwoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdGFnKTsKIHN0YXRpYyBpbnQgY2VydGlmeShYNTA5ICoqeHJldCwgY2hhciAqaW5maWxlLEVWUF9QS0VZICpwa2V5LFg1MDkgKng1MDksCi0JCSAgIGNvbnN0IEVWUF9NRCAqZGdzdCxTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LENBX0RCICpkYiwKKwkJICAgY29uc3QgRVZQX01EICpkZ3N0LFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cywKKwkJICAgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnBvbGljeSxDQV9EQiAqZGIsCiAJCSAgIEJJR05VTSAqc2VyaWFsLCBjaGFyICpzdWJqLHVuc2lnbmVkIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4sIGludCBlbWFpbF9kbiwgY2hhciAqc3RhcnRkYXRlLAogCQkgICBjaGFyICplbmRkYXRlLCBsb25nIGRheXMsIGludCBiYXRjaCwgY2hhciAqZXh0X3NlY3QsIENPTkYgKmNvbmYsCiAJCSAgIGludCB2ZXJib3NlLCB1bnNpZ25lZCBsb25nIGNlcnRvcHQsIHVuc2lnbmVkIGxvbmcgbmFtZW9wdCwKIAkJICAgaW50IGRlZmF1bHRfb3AsIGludCBleHRfY29weSwgaW50IHNlbGZzaWduKTsKIHN0YXRpYyBpbnQgY2VydGlmeV9jZXJ0KFg1MDkgKip4cmV0LCBjaGFyICppbmZpbGUsRVZQX1BLRVkgKnBrZXksWDUwOSAqeDUwOSwKLQkJCWNvbnN0IEVWUF9NRCAqZGdzdCxTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LAorCQkJY29uc3QgRVZQX01EICpkZ3N0LFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cywKKwkJCVNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksCiAJCQlDQV9EQiAqZGIsIEJJR05VTSAqc2VyaWFsLCBjaGFyICpzdWJqLHVuc2lnbmVkIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4sIGludCBlbWFpbF9kbiwKIAkJCWNoYXIgKnN0YXJ0ZGF0ZSwgY2hhciAqZW5kZGF0ZSwgbG9uZyBkYXlzLCBpbnQgYmF0Y2gsCiAJCQljaGFyICpleHRfc2VjdCwgQ09ORiAqY29uZixpbnQgdmVyYm9zZSwgdW5zaWduZWQgbG9uZyBjZXJ0b3B0LAogCQkJdW5zaWduZWQgbG9uZyBuYW1lb3B0LCBpbnQgZGVmYXVsdF9vcCwgaW50IGV4dF9jb3B5LAogCQkJRU5HSU5FICplKTsKIHN0YXRpYyBpbnQgY2VydGlmeV9zcGthYyhYNTA5ICoqeHJldCwgY2hhciAqaW5maWxlLEVWUF9QS0VZICpwa2V5LFg1MDkgKng1MDksCi0JCQkgY29uc3QgRVZQX01EICpkZ3N0LFNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksCisJCQkgY29uc3QgRVZQX01EICpkZ3N0LFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cywKKwkJCSBTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LAogCQkJIENBX0RCICpkYiwgQklHTlVNICpzZXJpYWwsY2hhciAqc3Viaix1bnNpZ25lZCBsb25nIGNodHlwZSwgaW50IG11bHRpcmRuLCBpbnQgZW1haWxfZG4sCiAJCQkgY2hhciAqc3RhcnRkYXRlLCBjaGFyICplbmRkYXRlLCBsb25nIGRheXMsIGNoYXIgKmV4dF9zZWN0LAogCQkJIENPTkYgKmNvbmYsIGludCB2ZXJib3NlLCB1bnNpZ25lZCBsb25nIGNlcnRvcHQsIAogCQkJIHVuc2lnbmVkIGxvbmcgbmFtZW9wdCwgaW50IGRlZmF1bHRfb3AsIGludCBleHRfY29weSk7CiBzdGF0aWMgdm9pZCB3cml0ZV9uZXdfY2VydGlmaWNhdGUoQklPICpicCwgWDUwOSAqeCwgaW50IG91dHB1dF9kZXIsIGludCBub3RleHQpOwogc3RhdGljIGludCBkb19ib2R5KFg1MDkgKip4cmV0LCBFVlBfUEtFWSAqcGtleSwgWDUwOSAqeDUwOSwgY29uc3QgRVZQX01EICpkZ3N0LAorCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cywKIAlTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LCBDQV9EQiAqZGIsIEJJR05VTSAqc2VyaWFsLGNoYXIgKnN1YmosdW5zaWduZWQgbG9uZyBjaHR5cGUsIGludCBtdWx0aXJkbiwKIAlpbnQgZW1haWxfZG4sIGNoYXIgKnN0YXJ0ZGF0ZSwgY2hhciAqZW5kZGF0ZSwgbG9uZyBkYXlzLCBpbnQgYmF0Y2gsCiAgICAgICAgCWludCB2ZXJib3NlLCBYNTA5X1JFUSAqcmVxLCBjaGFyICpleHRfc2VjdCwgQ09ORiAqY29uZiwKQEAgLTMxMSw2ICszMTUsNyBAQAogCWNvbnN0IEVWUF9NRCAqZGdzdD1OVUxMOwogCVNUQUNLX09GKENPTkZfVkFMVUUpICphdHRyaWJzPU5VTEw7CiAJU1RBQ0tfT0YoWDUwOSkgKmNlcnRfc2s9TlVMTDsKKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMgPSBOVUxMOwogI3VuZGVmIEJTSVpFCiAjZGVmaW5lIEJTSVpFIDI1NgogCU1TX1NUQVRJQyBjaGFyIGJ1ZlszXVtCU0laRV07CkBAIC00MzUsNiArNDQwLDE1IEBACiAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CiAJCQlvdXRkaXI9ICooKythcmd2KTsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc2lnb3B0IikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKQorCQkJCWdvdG8gYmFkOworCQkJaWYgKCFzaWdvcHRzKQorCQkJCXNpZ29wdHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJaWYgKCFzaWdvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKHNpZ29wdHMsICooKythcmd2KSkpCisJCQkJZ290byBiYWQ7CisJCQl9CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLW5vdGV4dCIpID09IDApCiAJCQlub3RleHQ9MTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItYmF0Y2giKSA9PSAwKQpAQCAtMTE3MCw4ICsxMTg0LDkgQEAKIAkJaWYgKHNwa2FjX2ZpbGUgIT0gTlVMTCkKIAkJCXsKIAkJCXRvdGFsKys7Ci0JCQlqPWNlcnRpZnlfc3BrYWMoJngsc3BrYWNfZmlsZSxwa2V5LHg1MDksZGdzdCxhdHRyaWJzLGRiLAotCQkJCXNlcmlhbCxzdWJqLGNodHlwZSxtdWx0aXJkbixlbWFpbF9kbixzdGFydGRhdGUsZW5kZGF0ZSxkYXlzLGV4dGVuc2lvbnMsCisJCQlqPWNlcnRpZnlfc3BrYWMoJngsc3BrYWNfZmlsZSxwa2V5LHg1MDksZGdzdCxzaWdvcHRzLAorCQkJCWF0dHJpYnMsZGIsIHNlcmlhbCxzdWJqLGNodHlwZSxtdWx0aXJkbiwKKwkJCQllbWFpbF9kbixzdGFydGRhdGUsZW5kZGF0ZSxkYXlzLGV4dGVuc2lvbnMsCiAJCQkJY29uZix2ZXJib3NlLGNlcnRvcHQsbmFtZW9wdCxkZWZhdWx0X29wLGV4dF9jb3B5KTsKIAkJCWlmIChqIDwgMCkgZ290byBlcnI7CiAJCQlpZiAoaiA+IDApCkBAIC0xMTk0LDcgKzEyMDksOCBAQAogCQlpZiAoc3NfY2VydF9maWxlICE9IE5VTEwpCiAJCQl7CiAJCQl0b3RhbCsrOwotCQkJaj1jZXJ0aWZ5X2NlcnQoJngsc3NfY2VydF9maWxlLHBrZXkseDUwOSxkZ3N0LGF0dHJpYnMsCisJCQlqPWNlcnRpZnlfY2VydCgmeCxzc19jZXJ0X2ZpbGUscGtleSx4NTA5LGRnc3Qsc2lnb3B0cywKKwkJCQlhdHRyaWJzLAogCQkJCWRiLHNlcmlhbCxzdWJqLGNodHlwZSxtdWx0aXJkbixlbWFpbF9kbixzdGFydGRhdGUsZW5kZGF0ZSxkYXlzLGJhdGNoLAogCQkJCWV4dGVuc2lvbnMsY29uZix2ZXJib3NlLCBjZXJ0b3B0LCBuYW1lb3B0LAogCQkJCWRlZmF1bHRfb3AsIGV4dF9jb3B5LCBlKTsKQEAgLTEyMTQsNyArMTIzMCw3IEBACiAJCWlmIChpbmZpbGUgIT0gTlVMTCkKIAkJCXsKIAkJCXRvdGFsKys7Ci0JCQlqPWNlcnRpZnkoJngsaW5maWxlLHBrZXkseDUwOXAsZGdzdCxhdHRyaWJzLGRiLAorCQkJaj1jZXJ0aWZ5KCZ4LGluZmlsZSxwa2V5LHg1MDlwLGRnc3Qsc2lnb3B0cywgYXR0cmlicyxkYiwKIAkJCQlzZXJpYWwsc3ViaixjaHR5cGUsbXVsdGlyZG4sZW1haWxfZG4sc3RhcnRkYXRlLGVuZGRhdGUsZGF5cyxiYXRjaCwKIAkJCQlleHRlbnNpb25zLGNvbmYsdmVyYm9zZSwgY2VydG9wdCwgbmFtZW9wdCwKIAkJCQlkZWZhdWx0X29wLCBleHRfY29weSwgc2VsZnNpZ24pOwpAQCAtMTIzNCw3ICsxMjUwLDcgQEAKIAkJZm9yIChpPTA7IGk8YXJnYzsgaSsrKQogCQkJewogCQkJdG90YWwrKzsKLQkJCWo9Y2VydGlmeSgmeCxhcmd2W2ldLHBrZXkseDUwOXAsZGdzdCxhdHRyaWJzLGRiLAorCQkJaj1jZXJ0aWZ5KCZ4LGFyZ3ZbaV0scGtleSx4NTA5cCxkZ3N0LHNpZ29wdHMsYXR0cmlicyxkYiwKIAkJCQlzZXJpYWwsc3ViaixjaHR5cGUsbXVsdGlyZG4sZW1haWxfZG4sc3RhcnRkYXRlLGVuZGRhdGUsZGF5cyxiYXRjaCwKIAkJCQlleHRlbnNpb25zLGNvbmYsdmVyYm9zZSwgY2VydG9wdCwgbmFtZW9wdCwKIAkJCQlkZWZhdWx0X29wLCBleHRfY29weSwgc2VsZnNpZ24pOwpAQCAtMTQ4Myw3ICsxNDk5LDcgQEAKIAkJCWNybG51bWJlciA9IE5VTEw7CiAJCQl9CiAKLQkJaWYgKCFYNTA5X0NSTF9zaWduKGNybCxwa2V5LGRnc3QpKSBnb3RvIGVycjsKKwkJaWYgKCFkb19YNTA5X0NSTF9zaWduKGJpb19lcnIsY3JsLHBrZXksZGdzdCxzaWdvcHRzKSkgZ290byBlcnI7CiAKIAkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTChTb3V0LGNybCk7CiAKQEAgLTE1MzcsNiArMTU1Myw4IEBACiAJQk5fZnJlZShzZXJpYWwpOwogCUJOX2ZyZWUoY3JsbnVtYmVyKTsKIAlmcmVlX2luZGV4KGRiKTsKKwlpZiAoc2lnb3B0cykKKwkJc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShzaWdvcHRzKTsKIAlFVlBfUEtFWV9mcmVlKHBrZXkpOwogCWlmICh4NTA5KSBYNTA5X2ZyZWUoeDUwOSk7CiAJWDUwOV9DUkxfZnJlZShjcmwpOwpAQCAtMTU1Myw4ICsxNTcxLDEwIEBACiAJfQogCiBzdGF0aWMgaW50IGNlcnRpZnkoWDUwOSAqKnhyZXQsIGNoYXIgKmluZmlsZSwgRVZQX1BLRVkgKnBrZXksIFg1MDkgKng1MDksCi0JICAgICBjb25zdCBFVlBfTUQgKmRnc3QsIFNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksIENBX0RCICpkYiwKLQkgICAgIEJJR05VTSAqc2VyaWFsLCBjaGFyICpzdWJqLHVuc2lnbmVkIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4sIGludCBlbWFpbF9kbiwgY2hhciAqc3RhcnRkYXRlLCBjaGFyICplbmRkYXRlLAorCSAgICAgY29uc3QgRVZQX01EICpkZ3N0LCBTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMsCisJICAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LCBDQV9EQiAqZGIsCisJICAgICBCSUdOVU0gKnNlcmlhbCwgY2hhciAqc3Viaix1bnNpZ25lZCBsb25nIGNodHlwZSwgaW50IG11bHRpcmRuLAorCSAgICAgaW50IGVtYWlsX2RuLCBjaGFyICpzdGFydGRhdGUsIGNoYXIgKmVuZGRhdGUsCiAJICAgICBsb25nIGRheXMsIGludCBiYXRjaCwgY2hhciAqZXh0X3NlY3QsIENPTkYgKmxjb25mLCBpbnQgdmVyYm9zZSwKIAkgICAgIHVuc2lnbmVkIGxvbmcgY2VydG9wdCwgdW5zaWduZWQgbG9uZyBuYW1lb3B0LCBpbnQgZGVmYXVsdF9vcCwKIAkgICAgIGludCBleHRfY29weSwgaW50IHNlbGZzaWduKQpAQCAtMTYxMCw3ICsxNjMwLDggQEAKIAllbHNlCiAJCUJJT19wcmludGYoYmlvX2VyciwiU2lnbmF0dXJlIG9rXG4iKTsKIAotCW9rPWRvX2JvZHkoeHJldCxwa2V5LHg1MDksZGdzdCxwb2xpY3ksZGIsc2VyaWFsLHN1YmosY2h0eXBlLG11bHRpcmRuLCBlbWFpbF9kbiwKKwlvaz1kb19ib2R5KHhyZXQscGtleSx4NTA5LGRnc3Qsc2lnb3B0cywgcG9saWN5LGRiLHNlcmlhbCxzdWJqLGNodHlwZSwKKwkJbXVsdGlyZG4sIGVtYWlsX2RuLAogCQlzdGFydGRhdGUsZW5kZGF0ZSxkYXlzLGJhdGNoLHZlcmJvc2UscmVxLGV4dF9zZWN0LGxjb25mLAogCQljZXJ0b3B0LCBuYW1lb3B0LCBkZWZhdWx0X29wLCBleHRfY29weSwgc2VsZnNpZ24pOwogCkBAIC0xNjIxLDcgKzE2NDIsOCBAQAogCX0KIAogc3RhdGljIGludCBjZXJ0aWZ5X2NlcnQoWDUwOSAqKnhyZXQsIGNoYXIgKmluZmlsZSwgRVZQX1BLRVkgKnBrZXksIFg1MDkgKng1MDksCi0JICAgICBjb25zdCBFVlBfTUQgKmRnc3QsIFNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksIENBX0RCICpkYiwKKwkgICAgIGNvbnN0IEVWUF9NRCAqZGdzdCwgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzLAorCSAgICAgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnBvbGljeSwgQ0FfREIgKmRiLAogCSAgICAgQklHTlVNICpzZXJpYWwsIGNoYXIgKnN1YmosIHVuc2lnbmVkIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4sIGludCBlbWFpbF9kbiwgY2hhciAqc3RhcnRkYXRlLCBjaGFyICplbmRkYXRlLAogCSAgICAgbG9uZyBkYXlzLCBpbnQgYmF0Y2gsIGNoYXIgKmV4dF9zZWN0LCBDT05GICpsY29uZiwgaW50IHZlcmJvc2UsCiAJICAgICB1bnNpZ25lZCBsb25nIGNlcnRvcHQsIHVuc2lnbmVkIGxvbmcgbmFtZW9wdCwgaW50IGRlZmF1bHRfb3AsCkBAIC0xNjY0LDcgKzE2ODYsNyBAQAogCWlmICgocnJlcT1YNTA5X3RvX1g1MDlfUkVRKHJlcSxOVUxMLEVWUF9tZDUoKSkpID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCi0Jb2s9ZG9fYm9keSh4cmV0LHBrZXkseDUwOSxkZ3N0LHBvbGljeSxkYixzZXJpYWwsc3ViaixjaHR5cGUsbXVsdGlyZG4sZW1haWxfZG4sc3RhcnRkYXRlLGVuZGRhdGUsCisJb2s9ZG9fYm9keSh4cmV0LHBrZXkseDUwOSxkZ3N0LHNpZ29wdHMscG9saWN5LGRiLHNlcmlhbCxzdWJqLGNodHlwZSxtdWx0aXJkbixlbWFpbF9kbixzdGFydGRhdGUsZW5kZGF0ZSwKIAkJZGF5cyxiYXRjaCx2ZXJib3NlLHJyZXEsZXh0X3NlY3QsbGNvbmYsIGNlcnRvcHQsIG5hbWVvcHQsIGRlZmF1bHRfb3AsCiAJCWV4dF9jb3B5LCAwKTsKIApAQCAtMTY3NSw3ICsxNjk3LDggQEAKIAl9CiAKIHN0YXRpYyBpbnQgZG9fYm9keShYNTA5ICoqeHJldCwgRVZQX1BLRVkgKnBrZXksIFg1MDkgKng1MDksIGNvbnN0IEVWUF9NRCAqZGdzdCwKLQkgICAgIFNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksIENBX0RCICpkYiwgQklHTlVNICpzZXJpYWwsIGNoYXIgKnN1YmosCisJICAgICBTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMsIFNUQUNLX09GKENPTkZfVkFMVUUpICpwb2xpY3ksCisgICAgICAgICAgICAgQ0FfREIgKmRiLCBCSUdOVU0gKnNlcmlhbCwgY2hhciAqc3ViaiwKIAkgICAgIHVuc2lnbmVkIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4sCiAJICAgICBpbnQgZW1haWxfZG4sIGNoYXIgKnN0YXJ0ZGF0ZSwgY2hhciAqZW5kZGF0ZSwgbG9uZyBkYXlzLCBpbnQgYmF0Y2gsCiAJICAgICBpbnQgdmVyYm9zZSwgWDUwOV9SRVEgKnJlcSwgY2hhciAqZXh0X3NlY3QsIENPTkYgKmxjb25mLApAQCAtMjE0Niw3ICsyMTY5LDcgQEAKIAkJRVZQX1BLRVlfY29weV9wYXJhbWV0ZXJzKHBrdG1wLHBrZXkpOwogCUVWUF9QS0VZX2ZyZWUocGt0bXApOwogCi0JaWYgKCFYNTA5X3NpZ24ocmV0LHBrZXksZGdzdCkpCisJaWYgKCFkb19YNTA5X3NpZ24oYmlvX2VyciwgcmV0LHBrZXksZGdzdCwgc2lnb3B0cykpCiAJCWdvdG8gZXJyOwogCiAJLyogV2Ugbm93IGp1c3QgYWRkIGl0IHRvIHRoZSBkYXRhYmFzZSAqLwpAQCAtMjI0MCw3ICsyMjYzLDggQEAKIAl9CiAKIHN0YXRpYyBpbnQgY2VydGlmeV9zcGthYyhYNTA5ICoqeHJldCwgY2hhciAqaW5maWxlLCBFVlBfUEtFWSAqcGtleSwgWDUwOSAqeDUwOSwKLQkgICAgIGNvbnN0IEVWUF9NRCAqZGdzdCwgU1RBQ0tfT0YoQ09ORl9WQUxVRSkgKnBvbGljeSwgQ0FfREIgKmRiLAorCSAgICAgY29uc3QgRVZQX01EICpkZ3N0LCBTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMsCisJICAgICBTVEFDS19PRihDT05GX1ZBTFVFKSAqcG9saWN5LCBDQV9EQiAqZGIsCiAJICAgICBCSUdOVU0gKnNlcmlhbCwgY2hhciAqc3Viaix1bnNpZ25lZCBsb25nIGNodHlwZSwgaW50IG11bHRpcmRuLCBpbnQgZW1haWxfZG4sIGNoYXIgKnN0YXJ0ZGF0ZSwgY2hhciAqZW5kZGF0ZSwKIAkgICAgIGxvbmcgZGF5cywgY2hhciAqZXh0X3NlY3QsIENPTkYgKmxjb25mLCBpbnQgdmVyYm9zZSwgdW5zaWduZWQgbG9uZyBjZXJ0b3B0LAogCSAgICAgdW5zaWduZWQgbG9uZyBuYW1lb3B0LCBpbnQgZGVmYXVsdF9vcCwgaW50IGV4dF9jb3B5KQpAQCAtMjM2Niw5ICsyMzkwLDkgQEAKIAogCVg1MDlfUkVRX3NldF9wdWJrZXkocmVxLHBrdG1wKTsKIAlFVlBfUEtFWV9mcmVlKHBrdG1wKTsKLQlvaz1kb19ib2R5KHhyZXQscGtleSx4NTA5LGRnc3QscG9saWN5LGRiLHNlcmlhbCxzdWJqLGNodHlwZSxtdWx0aXJkbixlbWFpbF9kbixzdGFydGRhdGUsZW5kZGF0ZSwKLQkJICAgZGF5cywxLHZlcmJvc2UscmVxLGV4dF9zZWN0LGxjb25mLCBjZXJ0b3B0LCBuYW1lb3B0LCBkZWZhdWx0X29wLAotCQkJZXh0X2NvcHksIDApOworCW9rPWRvX2JvZHkoeHJldCxwa2V5LHg1MDksZGdzdCxzaWdvcHRzLHBvbGljeSxkYixzZXJpYWwsc3ViaixjaHR5cGUsCisJCSAgIG11bHRpcmRuLGVtYWlsX2RuLHN0YXJ0ZGF0ZSxlbmRkYXRlLCBkYXlzLDEsdmVyYm9zZSxyZXEsCisJCSAgIGV4dF9zZWN0LGxjb25mLCBjZXJ0b3B0LCBuYW1lb3B0LCBkZWZhdWx0X29wLCBleHRfY29weSwgMCk7CiBlcnI6CiAJaWYgKHJlcSAhPSBOVUxMKSBYNTA5X1JFUV9mcmVlKHJlcSk7CiAJaWYgKHBhcm1zICE9IE5VTEwpIENPTkZfZnJlZShwYXJtcyk7CmRpZmYgLS1naXQgYS9hcHBzL2NpcGhlcnMuYyBiL2FwcHMvY2lwaGVycy5jCmluZGV4IDNkNGM2MGQuLjVmMmI3MzkgMTAwNjQ0Ci0tLSBhL2FwcHMvY2lwaGVycy5jCisrKyBiL2FwcHMvY2lwaGVycy5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJCQogCQkJaWYgKFZlcmJvc2UpCiAJCQkJewotCQkJCXVuc2lnbmVkIGxvbmcgaWQgPSBjLT5pZDsKKwkJCQl1bnNpZ25lZCBsb25nIGlkID0gU1NMX0NJUEhFUl9nZXRfaWQoYyk7CiAJCQkJaW50IGlkMCA9IChpbnQpKGlkID4+IDI0KTsKIAkJCQlpbnQgaWQxID0gKGludCkoKGlkID4+IDE2KSAmIDB4ZmZMKTsKIAkJCQlpbnQgaWQyID0gKGludCkoKGlkID4+IDgpICYgMHhmZkwpOwpkaWZmIC0tZ2l0IGEvYXBwcy9jbGllbnQucGVtIGIvYXBwcy9jbGllbnQucGVtCmluZGV4IDMwNzkxMGUuLmU3YTQ3YTcgMTAwNjQ0Ci0tLSBhL2FwcHMvY2xpZW50LnBlbQorKysgYi9hcHBzL2NsaWVudC5wZW0KQEAgLTEsMjQgKzEsNTIgQEAKLWlzc3Vlcj0gL0M9QVUvU1Q9UXVlZW5zbGFuZC9PPUNyeXB0U29mdCBQdHkgTHRkL0NOPVRlc3QgQ0EgKDEwMjQgYml0KQotc3ViamVjdD0vQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049Q2xpZW50IHRlc3QgY2VydCAoNTEyIGJpdCkKK3N1YmplY3Q9IEMgPSBVSywgTyA9IE9wZW5TU0wgR3JvdXAsIE9VID0gRk9SIFRFU1RJTkcgUFVSUE9TRVMgT05MWSwgQ04gPSBUZXN0IENsaWVudCBDZXJ0Citpc3N1ZXI9IEMgPSBVSywgTyA9IE9wZW5TU0wgR3JvdXAsIE9VID0gRk9SIFRFU1RJTkcgUFVSUE9TRVMgT05MWSwgQ04gPSBPcGVuU1NMIFRlc3QgSW50ZXJtZWRpYXRlIENBCiAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI2VENDQVZJQ0FRSXdEUVlKS29aSWh2Y05BUUVFQlFBd1d6RUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlYKLUJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJzd0dRWUQKLVZRUURFeEpVWlhOMElFTkJJQ2d4TURJMElHSnBkQ2t3SGhjTk9UY3dOakE1TVRNMU56VTJXaGNOT1Rnd05qQTUKLU1UTTFOelUyV2pCak1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVVhWbFpXNXpiR0Z1WkRFYU1CZ0cKLUExVUVDaE1SUTNKNWNIUlRiMlowSUZCMGVTQk1kR1F4SXpBaEJnTlZCQU1UR2tOc2FXVnVkQ0IwWlhOMElHTmwKLWNuUWdLRFV4TWlCaWFYUXBNRnd3RFFZSktvWklodmNOQVFFQkJRQURTd0F3U0FKQkFMdHY1NVF5ekc2aTJQbHcKLVoxcGFoNysrR3Y4TDVqNkhueXIvdVRaRTFOTEcwQUJERGV4bXEvUjRLZWRMakZFSVlqb2NEdWkrSVhzNjJOTnQKLVhyVDhvZGtDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUVFGQUFPQmdRQnd0TW1JN29HVUc4bkttZnRRc3NBVFZpSDUKLU5SUnRvRXcwN0R4SnAvTGZhdEhkcmhxUUI3M2VHZEw1V0lMWkpYazQ2WHoyZTlXTVNValZDU1loZEt4dGZsVTMKLVVSMkFqdjFPbzBzVE5kZnowd0RxSk5pckxOdHp5aGhzYXE4cU1Uckx3WHJDUDMxVnhCaWlnRlNRU1VGblp5VEUKLTlUS3doUzRHbHdidENmeFNLUT09CitNSUlENXpDQ0FzK2dBd0lCQWdJSkFMbnUxTmxWcFo2eU1BMEdDU3FHU0liM0RRRUJCUVVBTUhBeEN6QUpCZ05WCitCQVlUQWxWTE1SWXdGQVlEVlFRS0RBMVBjR1Z1VTFOTUlFZHliM1Z3TVNJd0lBWURWUVFMREJsR1QxSWdWRVZUCitWRWxPUnlCUVZWSlFUMU5GVXlCUFRreFpNU1V3SXdZRFZRUUREQnhQY0dWdVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFeE1USXdPREUwTURFME9Gb1hEVEl4TVRBeE5qRTBNREUwT0Zvd1pERUxNQWtHCitBMVVFQmhNQ1ZVc3hGakFVQmdOVkJBb01EVTl3Wlc1VFUwd2dSM0p2ZFhBeElqQWdCZ05WQkFzTUdVWlBVaUJVCitSVk5VU1U1SElGQlZVbEJQVTBWVElFOU9URmt4R1RBWEJnTlZCQU1NRUZSbGMzUWdRMnhwWlc1MElFTmxjblF3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDMHJhbmJIUkxjTFZxTiswQnpjWnBZCisreU9McXh6RFdUMUxEOWVXMXN0QzROelhYOS9EQ3RTSVZ5TjdZSUhkR0xySVByNjRJRGRYWGFNUnpnWjJyT0tzCitsbUhDQWlGcE8vamE5OWdHQ0pSeEgweHdRYXRxQVVMZkpWSGVVaHM3T0VHT1pjMm5XaWZqcUt2R2ZOVGlsUDdECitud2k2OWlwUUZxOW9TMTlGbWh3VkhrMndnN0taR0hJMXFEeUcwNFVyZkNaTVJpdHZTOStVVmhQcElQanVpQmkyCit4My9GWklwTDVnWEp2dkZLNnhIWTYzb3EyYXN5ekJBVG50QmduUDRxSkZXV2N2UngyNHdGMVBuWmFieHVWb0wyCitiUG5RL0t2T05EcnczSWRxa0toWU5UdWw3akVjdTNPbGNaSU13KzdEaWFLSkxBektiL2JCRjVnbS9wd1c2QXM5CitBZ01CQUFHamdZOHdnWXd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQmVBd0xBWUpZSVpJCitBWWI0UWdFTkJCOFdIVTl3Wlc1VFUwd2dSMlZ1WlhKaGRHVmtJRU5sY25ScFptbGpZWFJsTUIwR0ExVWREZ1FXCitCQlNaSEt5TG9UaDdNYjQwOVpuL21LMWNlU0RBakRBZkJnTlZIU01FR0RBV2dCUTJ3MnlJNTVYK3NMM3N6ajQ5CitocXNoZ1lmYTJqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFEMG1MN1B0UFlnQ0V1RHlPUVNiTHBlTkQ1aFZTCitjdXJ4UWRHbnJKNkFjcmhvZGI3RTljY0FUb2tlYjBQTHg2SEJMUVVpY3hoVFpJUTlGYk80M1lrUWNPVTZDM0JCCitJbHdza3FtdE42K1ZtclF6Tm9sSENEenZ4TlpzOWxZTDJWYkdQR3FWUnlqWmVIcG9BbGY5Y1FyOFBnRGI0ZDRiCit2VXgyS0FoSFF2VjJua21Zdkt5WGNnblJ1SGdndW1GODdta3hpZHJpR0FFRndINHFmT3FldFVnNjRXeXhQN1AyCitRTGlwbTA0U3lRYTdPTnRJQXBmVlhnSGNFNDJQeTQvZjRhcnpDek1qS2UzVnloR2tTN25zVDU1WC9mV2dUYVJtCitDUVBrTytIOTRQOTU4V1R2UUR0NzdiUStEM0l2WWFWdmZpbDhuNkhKTU9KZkZUMExKdVNVYnBTWEpnPT0KIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KIC0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUJPd0lCQUFKQkFMdHY1NVF5ekc2aTJQbHdaMXBhaDcrK0d2OEw1ajZIbnlyL3VUWkUxTkxHMEFCRERleG0KLXEvUjRLZWRMakZFSVlqb2NEdWkrSVhzNjJOTnRYclQ4b2RrQ0F3RUFBUUpBYndYcTB2Si8rdXlFdnNOZ3hMa28KLS9WODZtR1hRL0tyU2tlS2xMMHI0RU54amN5ZU1BR29LdTZKOXlNWTcrWDkrWm00bnhTaE5mVHNmLytGcmVvZTEKLUhRSWhBUE9TbTVRMVlJK0tJc0lJMkdlVkp4MVU2OSt3bmQ3MU9hc0lQYWtTMUwxWEFpRUF4UUFXK0ozL0pXRTAKLWZ0RVlha2JoVU9LTDh0RDFPYUZaUzcxLzVHZEc3RThDSVFDZWZVTW15U1N2d2Q2a0MwVmxBVFNXYlcrZCtqcC8KLW5XbU0xS3ZxbkFvNXVRSWhBTHFFQUR1NVUxV3Z0OFVOOFVER0JSUFF1bEhXTnljdU5WNDVkM25uc2tXUEFpQXcKLXVlVHlyNldzWjUrU0Q4Zy9IeTN4dXZGM25QbUpSSCtyd3ZWaWhsY0ZPZz09CitNSUlFcFFJQkFBS0NBUUVBdEsycDJ4MFMzQzFhamZ0QWMzR2FXUHNqaTZzY3cxazlTdy9YbHRiTFF1RGMxMS9mCit3d3JVaUZjamUyQ0IzUmk2eUQ2K3VDQTNWMTJqRWM0R2RxemlySlpod2dJaGFUdjQydmZZQmdpVWNSOU1jRUdyCithZ0ZDM3lWUjNsSWJPemhCam1YTnAxb240NmlyeG56VTRwVCt3NThJdXZZcVVCYXZhRXRmUlpvY0ZSNU5zSU95CittUmh5TmFnOGh0T0ZLM3dtVEVZcmIwdmZsRllUNlNENDdvZ1l0c2QveFdTS1MrWUZ5Yjd4U3VzUjJPdDZLdG1yCitNc3dRRTU3UVlKeitLaVJWbG5MMGNkdU1CZFQ1MldtOGJsYUM5bXo1MFB5cnpqUTY4TnlIYXBDb1dEVTdwZTR4CitITHR6cFhHU0RNUHV3NG1paVN3TXltLzJ3UmVZSnY2Y0Z1Z0xQUUlEQVFBQkFvSUJBQVpPeWM5TWhJd0xTVTRMCitwNFJnUXZNNFVWVmU4L0lkKzNYVFo4TnNYRXhKYld4WGZJaGlxR2phSWZMOHU0dnNnUmpjbCt2MXMvam8yL2lUCitLTWFiNG80RDhnWEQ3VWF2UVZEanRqYi90YTc5V0wzU2pSbDJVYzlZampNa3lxNldtRE5RZW8yTktEZGFmQ1RCCisxdXpTSnRMTmlwQjhaNTNFTFB1SEpoeFg5UU1Ick1udWhhNDlyaVFnWFo3YnVQOWlRckhKRmhJbUJqU3pieEp4CitMK1RJNnJreUxTZjlXaTBQZDNMMjdPYjNRV05mTlJZTlNlVEUrMDhlU1JDaGt1cjVXMFJ1WEFjdUFJQ2RRbENsCitMQnZXTy9MbW12YnpDcWlEY2d5L1RsaVNiNkNHR3dnaU5HN0xKWm1sa1lOajhsYUd3YWxObFlaczNVclZ2Nk5PCitCcjJsb0FFQ2dZRUEya3ZDdlBHajBEZy82ZzdXaFhEdkFrRWJjYUwxdFNlQ3hCYk5IKzZIUzJVV01XdnlUdENuCisvYmJENTE5UUlka3ZheXkxUWpFZjMyR1YvVWpVVm1sVUxNTEJjRHkwREdqdEwzK1hwSWhMS1dETnhOMXYxL2FpCisxb3oyM1pKQ09nbms2SzRxdEZ0bFJTMVh0eW5qQStyQmV0dll2TFA5U0tlRnJucHpDZ2FBMnIwQ2dZRUEwK0tYCisxQUNYRFROSDV5U1gza01qU1M5eGRJTmYrT093NEN2UEhGd2J0YzlhcWsySGVQbEVzQlR6NUkvVzNyS3dYdmEzCitOcVovYlJxVlZlWkIvaEhLRnl3Z2RVUWsyVWM1ei9TN0x3NzAvdzFIdWJOVFhHVTA2TmdiNnpPRkFvL28vVHdaCit6VFAxQk1JS1NPQjZQQVpQUzNsK2FMTzRGUklSb3RmRmhnUkhPb0VDZ1lFQW1pWmJxdDhjSmFKREIvNVlZRHpDCittcDN0U2s2Z0liOTM2UTZNNVZxa01ZcDlwSUtzeGhrME44YURDblRVK2tJSzZTeldCcHIzL2Q5RWNtcW1meXE3Cis1U3ZXTzNLeVZmMFdXSzlLSDBhYmhPbTJCS20ySEJRdkkwREI1dThzVXgyL2hzdk9ualBZRElTYloxMXQwTXRLCit1MzVaeTg5eU1ZY1NzSVlKakcvUk9DVUNnWUVBZ0kyUDlHNVBOeEVQNU90TXdPc1c4NFkzWGF0L2hQQVFGbEkrCitIRVMrQXpiRkdXSmtlVDh6TDJubTk1dFZrRlAxc2dnWjdLeGp6M3c3Y3B4N0dYME5rYldTRTlPK1Q1MXBOQVNWCit0TjFzUTNwNU0rL2ErY25scWdmRUdKVnZjN2lBY1hRUGEzTEVpNWgyeVBSNDlRWVhBZ0c2Y2lmbjNkRFNwbXduCitTVUk3UFFFQ2dZRUFwR0NJSXBTUlBMQUVIVEdtUDg3UkJMMXNtdXJod215MnMvcGdoa3ZVa1dlaHR4ZzBzR0hoCitrdWFxRFdjc2tvZ3YrUUMwc1ZkeXRpTFN6OEcwRHdjRWNzSEsxRmt5YjhBK2F5aXc2aldKRG8ybTkrSUY0Rnd3CisxVGU2akZQWURFU25iaHE3K1RMR2dIR2h0d2N1NWNuYjR2U3VZWEdYS3VwWkd6b0xPQmJ2MVp3PQogLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL2FwcHMvY21zLmMgYi9hcHBzL2Ntcy5jCmluZGV4IGQxNTkyNWEuLmQ3NTQxNDAgMTAwNjQ0Ci0tLSBhL2FwcHMvY21zLmMKKysrIGIvYXBwcy9jbXMuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJY2hhciAqZW5naW5lPU5VTEw7CiAjZW5kaWYKIAl1bnNpZ25lZCBjaGFyICpzZWNyZXRfa2V5ID0gTlVMTCwgKnNlY3JldF9rZXlpZCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqcHdyaV9wYXNzID0gTlVMTCwgKnB3cmlfdG1wID0gTlVMTDsKIAlzaXplX3Qgc2VjcmV0X2tleWxlbiA9IDAsIHNlY3JldF9rZXlpZGxlbiA9IDA7CiAKIAlBU04xX09CSkVDVCAqZWNvbnRlbnRfdHlwZSA9IE5VTEw7CkBAIC0zMjYsNiArMzI3LDEzIEBACiAJCQkJfQogCQkJc2VjcmV0X2tleWlkbGVuID0gKHNpemVfdClsdG1wOwogCQkJfQorCQllbHNlIGlmICghc3RyY21wKCphcmdzLCItcHdyaV9wYXNzd29yZCIpKQorCQkJeworCQkJaWYgKCFhcmdzWzFdKQorCQkJCWdvdG8gYXJnZXJyOworCQkJYXJncysrOworCQkJcHdyaV9wYXNzID0gKHVuc2lnbmVkIGNoYXIgKikqYXJnczsKKwkJCX0KIAkJZWxzZSBpZiAoIXN0cmNtcCgqYXJncywiLWVjb250ZW50X3R5cGUiKSkKIAkJCXsKIAkJCWlmICghYXJnc1sxXSkKQEAgLTU1OSw3ICs1NjcsNyBAQAogCiAJZWxzZSBpZiAob3BlcmF0aW9uID09IFNNSU1FX0RFQ1JZUFQpCiAJCXsKLQkJaWYgKCFyZWNpcGZpbGUgJiYgIWtleWZpbGUgJiYgIXNlY3JldF9rZXkpCisJCWlmICghcmVjaXBmaWxlICYmICFrZXlmaWxlICYmICFzZWNyZXRfa2V5ICYmICFwd3JpX3Bhc3MpCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJObyByZWNpcGllbnQgY2VydGlmaWNhdGUgb3Iga2V5IHNwZWNpZmllZFxuIik7CiAJCQliYWRhcmcgPSAxOwpAQCAtNTY3LDcgKzU3NSw3IEBACiAJCX0KIAllbHNlIGlmIChvcGVyYXRpb24gPT0gU01JTUVfRU5DUllQVCkKIAkJewotCQlpZiAoISphcmdzICYmICFzZWNyZXRfa2V5KQorCQlpZiAoISphcmdzICYmICFzZWNyZXRfa2V5ICYmICFwd3JpX3Bhc3MpCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJObyByZWNpcGllbnQocykgY2VydGlmaWNhdGUocykgc3BlY2lmaWVkXG4iKTsKIAkJCWJhZGFyZyA9IDE7CkBAIC05MTcsNiArOTI1LDE3IEBACiAJCQlzZWNyZXRfa2V5ID0gTlVMTDsKIAkJCXNlY3JldF9rZXlpZCA9IE5VTEw7CiAJCQl9CisJCWlmIChwd3JpX3Bhc3MpCisJCQl7CisJCQlwd3JpX3RtcCA9ICh1bnNpZ25lZCBjaGFyICopQlVGX3N0cmR1cCgoY2hhciAqKXB3cmlfcGFzcyk7CisJCQlpZiAoIXB3cmlfdG1wKQorCQkJCWdvdG8gZW5kOworCQkJaWYgKCFDTVNfYWRkMF9yZWNpcGllbnRfcGFzc3dvcmQoY21zLAorCQkJCQkJLTEsIE5JRF91bmRlZiwgTklEX3VuZGVmLAorCQkJCQkJIHB3cmlfdG1wLCAtMSwgTlVMTCkpCisJCQkJZ290byBlbmQ7CisJCQlwd3JpX3RtcCA9IE5VTEw7CisJCQl9CiAJCWlmICghKGZsYWdzICYgQ01TX1NUUkVBTSkpCiAJCQl7CiAJCQlpZiAoIUNNU19maW5hbChjbXMsIGluLCBOVUxMLCBmbGFncykpCkBAIC0xMDQzLDYgKzEwNjIsMTYgQEAKIAkJCQl9CiAJCQl9CiAKKwkJaWYgKHB3cmlfcGFzcykKKwkJCXsKKwkJCWlmICghQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZChjbXMsIHB3cmlfcGFzcywgLTEpKQorCQkJCXsKKwkJCQlCSU9fcHV0cyhiaW9fZXJyLAorCQkJCQkiRXJyb3IgZGVjcnlwdGluZyBDTVMgdXNpbmcgcGFzc3dvcmRcbiIpOworCQkJCWdvdG8gZW5kOworCQkJCX0KKwkJCX0KKwogCQlpZiAoIUNNU19kZWNyeXB0KGNtcywgTlVMTCwgTlVMTCwgaW5kYXRhLCBvdXQsIGZsYWdzKSkKIAkJCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGRlY3J5cHRpbmcgQ01TIHN0cnVjdHVyZVxuIik7CkBAIC0xMTY3LDYgKzExOTYsOCBAQAogCQlPUEVOU1NMX2ZyZWUoc2VjcmV0X2tleSk7CiAJaWYgKHNlY3JldF9rZXlpZCkKIAkJT1BFTlNTTF9mcmVlKHNlY3JldF9rZXlpZCk7CisJaWYgKHB3cmlfdG1wKQorCQlPUEVOU1NMX2ZyZWUocHdyaV90bXApOwogCWlmIChlY29udGVudF90eXBlKQogCQlBU04xX09CSkVDVF9mcmVlKGVjb250ZW50X3R5cGUpOwogCWlmIChycikKZGlmZiAtLWdpdCBhL2FwcHMvZGdzdC5jIGIvYXBwcy9kZ3N0LmMKaW5kZXggOWJmMzhjZS4uYjA4ZTlhNyAxMDA2NDQKLS0tIGEvYXBwcy9kZ3N0LmMKKysrIGIvYXBwcy9kZ3N0LmMKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2VuZGlmCiAJY2hhciAqaG1hY19rZXk9TlVMTDsKIAljaGFyICptYWNfbmFtZT1OVUxMOworCWludCBub25fZmlwc19hbGxvdyA9IDA7CiAJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzID0gTlVMTCwgKm1hY29wdHMgPSBOVUxMOwogCiAJYXBwc19zdGFydHVwKCk7CkBAIC0yMTUsNiArMjE2LDEwIEBACiAJCQlvdXRfYmluID0gMTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItZCIpID09IDApCiAJCQlkZWJ1Zz0xOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1ub24tZmlwcy1hbGxvdyIpID09IDApCisJCQlub25fZmlwc19hbGxvdz0xOworCQllbHNlIGlmICghc3RyY21wKCphcmd2LCItZmlwcy1maW5nZXJwcmludCIpKQorCQkJaG1hY19rZXkgPSAiZXRhb25yaXNoZGxjdXBmbSI7CiAJCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsIi1obWFjIikpCiAJCQl7CiAJCQlpZiAoLS1hcmdjIDwgMSkKQEAgLTM5NSw2ICs0MDAsMTMgQEAKIAkJCWdvdG8gZW5kOwogCQl9CiAKKwlpZiAobm9uX2ZpcHNfYWxsb3cpCisJCXsKKwkJRVZQX01EX0NUWCAqbWRfY3R4OworCQlCSU9fZ2V0X21kX2N0eChibWQsJm1kX2N0eCk7CisJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKG1kX2N0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKwkJfQorCiAJaWYgKGhtYWNfa2V5KQogCQl7CiAJCXNpZ2tleSA9IEVWUF9QS0VZX25ld19tYWNfa2V5KEVWUF9QS0VZX0hNQUMsIGUsCmRpZmYgLS1naXQgYS9hcHBzL2VuYy5jIGIvYXBwcy9lbmMuYwppbmRleCAwNzYyMjVjLi43MTlhY2MzIDEwMDY0NAotLS0gYS9hcHBzL2VuYy5jCisrKyBiL2FwcHMvZW5jLmMKQEAgLTEyOSw2ICsxMjksNyBAQAogCWNoYXIgKmVuZ2luZSA9IE5VTEw7CiAjZW5kaWYKIAljb25zdCBFVlBfTUQgKmRnc3Q9TlVMTDsKKwlpbnQgbm9uX2ZpcHNfYWxsb3cgPSAwOwogCiAJYXBwc19zdGFydHVwKCk7CiAKQEAgLTI4MSw2ICsyODIsOCBAQAogCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwogCQkJbWQ9ICooKythcmd2KTsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9uLWZpcHMtYWxsb3ciKSA9PSAwKQorCQkJbm9uX2ZpcHNfYWxsb3cgPSAxOwogCQllbHNlIGlmCSgoYXJndlswXVswXSA9PSAnLScpICYmCiAJCQkoKGM9RVZQX2dldF9jaXBoZXJieW5hbWUoJihhcmd2WzBdWzFdKSkpICE9IE5VTEwpKQogCQkJewpAQCAtNTg5LDYgKzU5MiwxMSBAQAogCQkgKi8KIAogCQlCSU9fZ2V0X2NpcGhlcl9jdHgoYmVuYywgJmN0eCk7CisKKwkJaWYgKG5vbl9maXBzX2FsbG93KQorCQkJRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwKKwkJCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKwogCQlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBlbmMpKQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiRXJyb3Igc2V0dGluZyBjaXBoZXIgJXNcbiIsCmRpZmYgLS1naXQgYS9hcHBzL29wZW5zc2wuYyBiL2FwcHMvb3BlbnNzbC5jCmluZGV4IDEwNjg5NTcuLjMzYjE2NTUgMTAwNjQ0Ci0tLSBhL2FwcHMvb3BlbnNzbC5jCisrKyBiL2FwcHMvb3BlbnNzbC5jCkBAIC0xMjksNiArMTI5LDkgQEAKICNpbmNsdWRlICJwcm9ncy5oIgogI2luY2x1ZGUgInNfYXBwcy5oIgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKIAogLyogVGhlIExIQVNIIGNhbGxiYWNrcyAoImhhc2giICYgImNtcCIpIGhhdmUgYmVlbiByZXBsYWNlZCBieSBmdW5jdGlvbnMgd2l0aCB0aGUKICAqIGJhc2UgcHJvdG90eXBlcyAod2UgY2FzdCBlYWNoIHZhcmlhYmxlIGluc2lkZSB0aGUgZnVuY3Rpb24gdG8gdGhlIHJlcXVpcmVkCkBAIC0zMTAsNiArMzEzLDE5IEBACiAJCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhsb2NrX2RiZ19jYik7CiAJCX0KIAorCWlmKGdldGVudigiT1BFTlNTTF9GSVBTIikpIHsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwkJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7CisJCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOworCQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2ZwKHN0ZGVycixCSU9fTk9DTE9TRSkpOworCQkJRVhJVCgxKTsKKwkJfQorI2Vsc2UKKwkJZnByaW50ZihzdGRlcnIsICJGSVBTIG1vZGUgbm90IHN1cHBvcnRlZC5cbiIpOworCQlFWElUKDEpOworI2VuZGlmCisJCX0KKwogCWFwcHNfc3RhcnR1cCgpOwogCiAJLyogTGV0cyBsb2FkIHVwIG91ciBlbnZpcm9ubWVudCBhIGxpdHRsZSAqLwpkaWZmIC0tZ2l0IGEvYXBwcy9wcm9ncy5oIGIvYXBwcy9wcm9ncy5oCmluZGV4IDcyOGJiNmQuLmRkMjI5OGIgMTAwNjQ0Ci0tLSBhL2FwcHMvcHJvZ3MuaAorKysgYi9hcHBzL3Byb2dzLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIGV4dGVybiBpbnQgb2NzcF9tYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSk7CiBleHRlcm4gaW50IHByaW1lX21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKTsKIGV4dGVybiBpbnQgdHNfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOworZXh0ZXJuIGludCBzcnBfbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pOwogCiAjZGVmaW5lIEZVTkNfVFlQRV9HRU5FUkFMCTEKICNkZWZpbmUgRlVOQ19UWVBFX01ECQkyCkBAIC0xNDksNiArMTUwLDkgQEAKICNpZiAwIC8qIEFORFJPSUQgKi8KIAl7RlVOQ19UWVBFX0dFTkVSQUwsInRzIix0c19tYWlufSwKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCXtGVU5DX1RZUEVfR0VORVJBTCwic3JwIixzcnBfbWFpbn0sCisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19NRDIKIAl7RlVOQ19UWVBFX01ELCJtZDIiLGRnc3RfbWFpbn0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvcHJvZ3MucGwgYi9hcHBzL3Byb2dzLnBsCmluZGV4IGRlNmZkZWEuLjM5Y2E4ZjcgMTAwNjQ0Ci0tLSBhL2FwcHMvcHJvZ3MucGwKKysrIGIvYXBwcy9wcm9ncy5wbApAQCAtNTEsNiArNTEsOCBAQAogCQl7IHByaW50ICIjaWZuZGVmIE9QRU5TU0xfTk9fQ01TXG4ke3N0cn0jZW5kaWZcbiI7IH0KIAllbHNpZiAoICgkXyA9fiAvXm9jc3AkLykpCiAJCXsgcHJpbnQgIiNpZm5kZWYgT1BFTlNTTF9OT19PQ1NQXG4ke3N0cn0jZW5kaWZcbiI7IH0KKwllbHNpZiAoICgkXyA9fiAvXnNycCQvKSkKKwkJeyBwcmludCAiI2lmbmRlZiBPUEVOU1NMX05PX1NSUFxuJHtzdHJ9I2VuZGlmXG4iOyB9CiAJZWxzZQogCQl7IHByaW50ICRzdHI7IH0KIAl9CmRpZmYgLS1naXQgYS9hcHBzL3JlcS5jIGIvYXBwcy9yZXEuYwppbmRleCA4MjBjZDE4Li44NTUyNjU4IDEwMDY0NAotLS0gYS9hcHBzL3JlcS5jCisrKyBiL2FwcHMvcmVxLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCUVWUF9QS0VZX0NUWCAqZ2VuY3R4ID0gTlVMTDsKIAljb25zdCBjaGFyICprZXlhbGcgPSBOVUxMOwogCWNoYXIgKmtleWFsZ3N0ciA9IE5VTEw7Ci0JU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpwa2V5b3B0cyA9IE5VTEw7CisJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpwa2V5b3B0cyA9IE5VTEwsICpzaWdvcHRzID0gTlVMTDsKIAlFVlBfUEtFWSAqcGtleT1OVUxMOwogCWludCBpPTAsYmFkb3BzPTAsbmV3cmVxPTAsdmVyYm9zZT0wLHBrZXlfdHlwZT0tMTsKIAlsb25nIG5ld2tleSA9IC0xOwpAQCAtMzEwLDYgKzMxMCwxNSBAQAogCQkJaWYgKCFwa2V5b3B0cyB8fCAhc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChwa2V5b3B0cywgKigrK2FyZ3YpKSkKIAkJCQlnb3RvIGJhZDsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc2lnb3B0IikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKQorCQkJCWdvdG8gYmFkOworCQkJaWYgKCFzaWdvcHRzKQorCQkJCXNpZ29wdHMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOworCQkJaWYgKCFzaWdvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKHNpZ29wdHMsICooKythcmd2KSkpCisJCQkJZ290byBiYWQ7CisJCQl9CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWJhdGNoIikgPT0gMCkKIAkJCWJhdGNoPTE7CiAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLW5ld2hkciIpID09IDApCkBAIC04NTgsOCArODY3LDkgQEAKIAkJCQkJZXh0ZW5zaW9ucyk7CiAJCQkJZ290byBlbmQ7CiAJCQkJfQotCQkJCi0JCQlpZiAoIShpPVg1MDlfc2lnbih4NTA5c3MscGtleSxkaWdlc3QpKSkKKworCQkJaT1kb19YNTA5X3NpZ24oYmlvX2VyciwgeDUwOXNzLCBwa2V5LCBkaWdlc3QsIHNpZ29wdHMpOworCQkJaWYgKCFpKQogCQkJCXsKIAkJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJCWdvdG8gZW5kOwpAQCAtODgzLDcgKzg5Myw4IEBACiAJCQkJCXJlcV9leHRzKTsKIAkJCQlnb3RvIGVuZDsKIAkJCQl9Ci0JCQlpZiAoIShpPVg1MDlfUkVRX3NpZ24ocmVxLHBrZXksZGlnZXN0KSkpCisJCQlpPWRvX1g1MDlfUkVRX3NpZ24oYmlvX2VyciwgcmVxLCBwa2V5LCBkaWdlc3QsIHNpZ29wdHMpOworCQkJaWYgKCFpKQogCQkJCXsKIAkJCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwogCQkJCWdvdG8gZW5kOwpAQCAtMTA4NCw2ICsxMDk1LDggQEAKIAkJRVZQX1BLRVlfQ1RYX2ZyZWUoZ2VuY3R4KTsKIAlpZiAocGtleW9wdHMpCiAJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocGtleW9wdHMpOworCWlmIChzaWdvcHRzKQorCQlza19PUEVOU1NMX1NUUklOR19mcmVlKHNpZ29wdHMpOwogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCWlmIChnZW5fZW5nKQogCQlFTkdJTkVfZnJlZShnZW5fZW5nKTsKQEAgLTE3NTYsMyArMTc2OSw2OCBAQAogI2VuZGlmCiAJcmV0dXJuIDE7CiAJfQorCitzdGF0aWMgaW50IGRvX3NpZ25faW5pdChCSU8gKmVyciwgRVZQX01EX0NUWCAqY3R4LCBFVlBfUEtFWSAqcGtleSwKKwkJCWNvbnN0IEVWUF9NRCAqbWQsIFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cykKKwl7CisJRVZQX1BLRVlfQ1RYICpwa2N0eCA9IE5VTEw7CisJaW50IGk7CisJRVZQX01EX0NUWF9pbml0KGN0eCk7CisJaWYgKCFFVlBfRGlnZXN0U2lnbkluaXQoY3R4LCAmcGtjdHgsIG1kLCBOVUxMLCBwa2V5KSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShzaWdvcHRzKTsgaSsrKQorCQl7CisJCWNoYXIgKnNpZ29wdCA9IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKHNpZ29wdHMsIGkpOworCQlpZiAocGtleV9jdHJsX3N0cmluZyhwa2N0eCwgc2lnb3B0KSA8PSAwKQorCQkJeworCQkJQklPX3ByaW50ZihlcnIsICJwYXJhbWV0ZXIgZXJyb3IgXCIlc1wiXG4iLCBzaWdvcHQpOworCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKwkJCXJldHVybiAwOworCQkJfQorCQl9CisJcmV0dXJuIDE7CisJfQorCitpbnQgZG9fWDUwOV9zaWduKEJJTyAqZXJyLCBYNTA5ICp4LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCwKKwkJCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cykKKwl7CisJaW50IHJ2OworCUVWUF9NRF9DVFggbWN0eDsKKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworCXJ2ID0gZG9fc2lnbl9pbml0KGVyciwgJm1jdHgsIHBrZXksIG1kLCBzaWdvcHRzKTsKKwlpZiAocnYgPiAwKQorCQlydiA9IFg1MDlfc2lnbl9jdHgoeCwgJm1jdHgpOworCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisJcmV0dXJuIHJ2ID4gMCA/IDEgOiAwOworCX0KKworCitpbnQgZG9fWDUwOV9SRVFfc2lnbihCSU8gKmVyciwgWDUwOV9SRVEgKngsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kLAorCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzKQorCXsKKwlpbnQgcnY7CisJRVZQX01EX0NUWCBtY3R4OworCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisJcnYgPSBkb19zaWduX2luaXQoZXJyLCAmbWN0eCwgcGtleSwgbWQsIHNpZ29wdHMpOworCWlmIChydiA+IDApCisJCXJ2ID0gWDUwOV9SRVFfc2lnbl9jdHgoeCwgJm1jdHgpOworCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisJcmV0dXJuIHJ2ID4gMCA/IDEgOiAwOworCX0KKwkJCisJCisKK2ludCBkb19YNTA5X0NSTF9zaWduKEJJTyAqZXJyLCBYNTA5X0NSTCAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQsCisJCQlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMpCisJeworCWludCBydjsKKwlFVlBfTURfQ1RYIG1jdHg7CisJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKwlydiA9IGRvX3NpZ25faW5pdChlcnIsICZtY3R4LCBwa2V5LCBtZCwgc2lnb3B0cyk7CisJaWYgKHJ2ID4gMCkKKwkJcnYgPSBYNTA5X0NSTF9zaWduX2N0eCh4LCAmbWN0eCk7CisJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKwlyZXR1cm4gcnYgPiAwID8gMSA6IDA7CisJfQorCQkKKwkKZGlmZiAtLWdpdCBhL2FwcHMvc19jYi5jIGIvYXBwcy9zX2NiLmMKaW5kZXggYzRmNTUxMi4uMmNkNzMzNyAxMDA2NDQKLS0tIGEvYXBwcy9zX2NiLmMKKysrIGIvYXBwcy9zX2NiLmMKQEAgLTM1Nyw2ICszNTcsMTIgQEAKIAljYXNlIFRMUzFfVkVSU0lPTjoKIAkJc3RyX3ZlcnNpb24gPSAiVExTIDEuMCAiOwogCQlicmVhazsKKwljYXNlIFRMUzFfMV9WRVJTSU9OOgorCQlzdHJfdmVyc2lvbiA9ICJUTFMgMS4xICI7CisJCWJyZWFrOworCWNhc2UgVExTMV8yX1ZFUlNJT046CisJCXN0cl92ZXJzaW9uID0gIlRMUyAxLjIgIjsKKwkJYnJlYWs7CiAJY2FzZSBEVExTMV9WRVJTSU9OOgogCQlzdHJfdmVyc2lvbiA9ICJEVExTIDEuMCAiOwogCQlicmVhazsKQEAgLTU0OSw2ICs1NTUsOSBAQAogCQkJCWNhc2UgMTE0OgogCQkJCQlzdHJfZGV0YWlsczIgPSAiIGJhZF9jZXJ0aWZpY2F0ZV9oYXNoX3ZhbHVlIjsKIAkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMTU6CisJCQkJCXN0cl9kZXRhaWxzMiA9ICIgdW5rbm93bl9wc2tfaWRlbnRpdHkiOworCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTU5Nyw2ICs2MDYsMjYgQEAKIAkJCQkJfQogCQkJCX0KIAkJCX0KKworI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwkJaWYgKGNvbnRlbnRfdHlwZSA9PSAyNCkgLyogSGVhcnRiZWF0ICovCisJCQl7CisJCQlzdHJfZGV0YWlsczEgPSAiLCBIZWFydGJlYXQiOworCQkJCisJCQlpZiAobGVuID4gMCkKKwkJCQl7CisJCQkJc3dpdGNoICgoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWJ1ZilbMF0pCisJCQkJCXsKKwkJCQljYXNlIDE6CisJCQkJCXN0cl9kZXRhaWxzMSA9ICIsIEhlYXJ0YmVhdFJlcXVlc3QiOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCXN0cl9kZXRhaWxzMSA9ICIsIEhlYXJ0YmVhdFJlc3BvbnNlIjsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisjZW5kaWYKIAkJfQogCiAJQklPX3ByaW50ZihiaW8sICIlcyAlcyVzIFtsZW5ndGggJTA0bHhdJXMlc1xuIiwgc3RyX3dyaXRlX3AsIHN0cl92ZXJzaW9uLCBzdHJfY29udGVudF90eXBlLCAodW5zaWduZWQgbG9uZylsZW4sIHN0cl9kZXRhaWxzMSwgc3RyX2RldGFpbHMyKTsKQEAgLTY1Nyw2ICs2ODYsMjIgQEAKIAkJZXh0bmFtZSA9ICJzdGF0dXMgcmVxdWVzdCI7CiAJCWJyZWFrOwogCisJCWNhc2UgVExTRVhUX1RZUEVfdXNlcl9tYXBwaW5nOgorCQlleHRuYW1lID0gInVzZXIgbWFwcGluZyI7CisJCWJyZWFrOworCisJCWNhc2UgVExTRVhUX1RZUEVfY2xpZW50X2F1dGh6OgorCQlleHRuYW1lID0gImNsaWVudCBhdXRoeiI7CisJCWJyZWFrOworCisJCWNhc2UgVExTRVhUX1RZUEVfc2VydmVyX2F1dGh6OgorCQlleHRuYW1lID0gInNlcnZlciBhdXRoeiI7CisJCWJyZWFrOworCisJCWNhc2UgVExTRVhUX1RZUEVfY2VydF90eXBlOgorCQlleHRuYW1lID0gImNlcnQgdHlwZSI7CisJCWJyZWFrOworCiAJCWNhc2UgVExTRVhUX1RZUEVfZWxsaXB0aWNfY3VydmVzOgogCQlleHRuYW1lID0gImVsbGlwdGljIGN1cnZlcyI7CiAJCWJyZWFrOwpAQCAtNjY1LDEyICs3MTAsMjggQEAKIAkJZXh0bmFtZSA9ICJFQyBwb2ludCBmb3JtYXRzIjsKIAkJYnJlYWs7CiAKLQkJY2FzZSBUTFNFWFRfVFlQRV9zZXNzaW9uX3RpY2tldDoKLQkJZXh0bmFtZSA9ICJzZXJ2ZXIgdGlja2V0IjsKKwkJY2FzZSBUTFNFWFRfVFlQRV9zcnA6CisJCWV4dG5hbWUgPSAiU1JQIjsKIAkJYnJlYWs7CiAKLQkJY2FzZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZToKLQkJZXh0bmFtZSA9ICJyZW5lZ290aWF0ZSI7CisJCWNhc2UgVExTRVhUX1RZUEVfc2lnbmF0dXJlX2FsZ29yaXRobXM6CisJCWV4dG5hbWUgPSAic2lnbmF0dXJlIGFsZ29yaXRobXMiOworCQlicmVhazsKKworCQljYXNlIFRMU0VYVF9UWVBFX3VzZV9zcnRwOgorCQlleHRuYW1lID0gInVzZSBTUlRQIjsKKwkJYnJlYWs7CisKKwkJY2FzZSBUTFNFWFRfVFlQRV9oZWFydGJlYXQ6CisJCWV4dG5hbWUgPSAiaGVhcnRiZWF0IjsKKwkJYnJlYWs7CisKKwkJY2FzZSBUTFNFWFRfVFlQRV9zZXNzaW9uX3RpY2tldDoKKwkJZXh0bmFtZSA9ICJzZXNzaW9uIHRpY2tldCI7CisJCWJyZWFrOworCisJCWNhc2UgVExTRVhUX1RZUEVfcmVuZWdvdGlhdGU6IAorCQlleHRuYW1lID0gInJlbmVnb3RpYXRpb24gaW5mbyI7CiAJCWJyZWFrOwogCiAjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dApAQCAtNjc4LDYgKzczOSwxMSBAQAogCQlleHRuYW1lID0gIm9wYXF1ZSBQUkYgaW5wdXQiOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnCisJCWNhc2UgVExTRVhUX1RZUEVfbmV4dF9wcm90b19uZWc6CisJCWV4dG5hbWUgPSAibmV4dCBwcm90b2NvbCI7CisJCWJyZWFrOworI2VuZGlmCiAKIAkJZGVmYXVsdDoKIAkJZXh0bmFtZSA9ICJ1bmtub3duIjsKZGlmZiAtLWdpdCBhL2FwcHMvc19jbGllbnQuYyBiL2FwcHMvc19jbGllbnQuYwppbmRleCA4MTIyZTNkLi5mMmFhY2FmIDEwMDY0NAotLS0gYS9hcHBzL3NfY2xpZW50LmMKKysrIGIvYXBwcy9zX2NsaWVudC5jCkBAIC0xNjMsNiArMTYzLDkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisjaW5jbHVkZSA8b3BlbnNzbC9zcnAuaD4KKyNlbmRpZgogI2luY2x1ZGUgInNfYXBwcy5oIgogI2luY2x1ZGUgInRpbWVvdXRzLmgiCiAKQEAgLTIwMyw2ICsyMDYsOSBAQAogc3RhdGljIGludCBjX21zZz0wOwogc3RhdGljIGludCBjX3Nob3djZXJ0cz0wOwogCitzdGF0aWMgY2hhciAqa2V5bWF0ZXhwb3J0bGFiZWw9TlVMTDsKK3N0YXRpYyBpbnQga2V5bWF0ZXhwb3J0bGVuPTIwOworCiBzdGF0aWMgdm9pZCBzY191c2FnZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHByaW50X3N0dWZmKEJJTyAqYmVycixTU0wgKmNvbixpbnQgZnVsbCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCkBAIC0zMTYsMTIgKzMyMiwyMSBAQAogCUJJT19wcmludGYoYmlvX2VyciwiIC1qcGFrZSBhcmcgICAgLSBKUEFLRSBzZWNyZXQgdG8gdXNlXG4iKTsKICMgZW5kaWYKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCUJJT19wcmludGYoYmlvX2VyciwiIC1zcnB1c2VyIHVzZXIgICAgIC0gU1JQIGF1dGhlbnRpZmljYXRpb24gZm9yICd1c2VyJ1xuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCIgLXNycHBhc3MgYXJnICAgICAgLSBwYXNzd29yZCBmb3IgJ3VzZXInXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3JwX2xhdGV1c2VyICAgICAtIFNSUCB1c2VybmFtZSBpbnRvIHNlY29uZCBDbGllbnRIZWxsbyBtZXNzYWdlXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3JwX21vcmVncm91cHMgICAtIFRvbGVyYXRlIG90aGVyIHRoYW4gdGhlIGtub3duIGcgTiB2YWx1ZXMuXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3JwX3N0cmVuZ3RoIGludCAtIG1pbmltYWwgbWVuZ3RoIGluIGJpdHMgZm9yIE4gKGRlZmF1bHQgJWQpLlxuIixTUlBfTUlOSU1BTF9OKTsKKyNlbmRpZgogCUJJT19wcmludGYoYmlvX2VyciwiIC1zc2wyICAgICAgICAgLSBqdXN0IHVzZSBTU0x2MlxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXNzbDMgICAgICAgICAtIGp1c3QgdXNlIFNTTHYzXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzMV8yICAgICAgIC0ganVzdCB1c2UgVExTdjEuMlxuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCIgLXRsczFfMSAgICAgICAtIGp1c3QgdXNlIFRMU3YxLjFcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC10bHMxICAgICAgICAgLSBqdXN0IHVzZSBUTFN2MVxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWR0bHMxICAgICAgICAtIGp1c3QgdXNlIERUTFN2MVxuIik7ICAgIAogCUJJT19wcmludGYoYmlvX2VyciwiIC1tdHUgICAgICAgICAgLSBzZXQgdGhlIGxpbmsgbGF5ZXIgTVRVXG4iKTsKLQlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbm9fdGxzMS8tbm9fc3NsMy8tbm9fc3NsMiAtIHR1cm4gb2ZmIHRoYXQgcHJvdG9jb2xcbiIpOworCUJJT19wcmludGYoYmlvX2VyciwiIC1ub190bHMxXzIvLW5vX3RsczFfMS8tbm9fdGxzMS8tbm9fc3NsMy8tbm9fc3NsMiAtIHR1cm4gb2ZmIHRoYXQgcHJvdG9jb2xcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1idWdzICAgICAgICAgLSBTd2l0Y2ggb24gYWxsIFNTTCBpbXBsZW1lbnRhdGlvbiBidWcgd29ya2Fyb3VuZHNcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1zZXJ2ZXJwcmVmICAgLSBVc2Ugc2VydmVyJ3MgY2lwaGVyIHByZWZlcmVuY2VzIChvbmx5IFNTTHYyKVxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWNpcGhlciAgICAgICAtIHByZWZlcnJlZCBjaXBoZXIgdG8gdXNlLCB1c2UgdGhlICdvcGVuc3NsIGNpcGhlcnMnXG4iKTsKQEAgLTM0MiwxMiArMzU3LDE1IEBACiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXRsc2V4dGRlYnVnICAgICAgLSBoZXggZHVtcCBvZiBhbGwgVExTIGV4dGVuc2lvbnMgcmVjZWl2ZWRcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1zdGF0dXMgICAgICAgICAgIC0gcmVxdWVzdCBjZXJ0aWZpY2F0ZSBzdGF0dXMgZnJvbSBzZXJ2ZXJcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub190aWNrZXQgICAgICAgIC0gZGlzYWJsZSB1c2Ugb2YgUkZDNDUwN2JpcyBzZXNzaW9uIHRpY2tldHNcbiIpOwotIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtY3V0dGhyb3VnaCAgICAgICAtIGVuYWJsZSAxLVJUVCBmdWxsLWhhbmRzaGFrZSBmb3Igc3Ryb25nIGNpcGhlcnNcbiIpOworIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbmV4dHByb3RvbmVnIGFyZyAtIGVuYWJsZSBOUE4gZXh0ZW5zaW9uLCBjb25zaWRlcmluZyBuYW1lZCBwcm90b2NvbHMgc3VwcG9ydGVkIChjb21tYS1zZXBhcmF0ZWQgbGlzdClcbiIpOwogIyBlbmRpZgotCUJJT19wcmludGYoYmlvX2VyciwiIC1jdXR0aHJvdWdoICAgICAgIC0gZW5hYmxlIDEtUlRUIGZ1bGwtaGFuZHNoYWtlIGZvciBzdHJvbmcgY2lwaGVyc1xuIik7CiAjZW5kaWYKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbGVnYWN5X3JlbmVnb3RpYXRpb24gLSBlbmFibGUgdXNlIG9mIGxlZ2FjeSByZW5lZ290aWF0aW9uIChkYW5nZXJvdXMpXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdXNlX3NydHAgcHJvZmlsZXMgLSBPZmZlciBTUlRQIGtleSBtYW5hZ2VtZW50IHdpdGggYSBjb2xvbi1zZXBhcmF0ZWQgcHJvZmlsZSBsaXN0XG4iKTsKKyAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWtleW1hdGV4cG9ydCBsYWJlbCAgIC0gRXhwb3J0IGtleWluZyBtYXRlcmlhbCB1c2luZyBsYWJlbFxuIik7CisgCUJJT19wcmludGYoYmlvX2VyciwiIC1rZXltYXRleHBvcnRsZW4gbGVuICAtIEV4cG9ydCBsZW4gYnl0ZXMgb2Yga2V5aW5nIG1hdGVyaWFsIChkZWZhdWx0IDIwKVxuIik7CiAJfQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCkBAIC0zNzEsNiArMzg5LDEyMiBAQAogCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKIAl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKworLyogVGhpcyBpcyBhIGNvbnRleHQgdGhhdCB3ZSBwYXNzIHRvIGFsbCBjYWxsYmFja3MgKi8KK3R5cGVkZWYgc3RydWN0IHNycF9hcmdfc3QKKwl7CisJY2hhciAqc3JwcGFzc2luOworCWNoYXIgKnNycGxvZ2luOworCWludCBtc2c7ICAgLyogY29weSBmcm9tIGNfbXNnICovCisJaW50IGRlYnVnOyAvKiBjb3B5IGZyb20gY19kZWJ1ZyAqLworCWludCBhbXA7ICAgLyogYWxsb3cgbW9yZSBncm91cHMgKi8KKwlpbnQgc3RyZW5ndGggLyogbWluaW1hbCBzaXplIGZvciBOICovIDsKKwl9IFNSUF9BUkc7CisKKyNkZWZpbmUgU1JQX05VTUJFUl9JVEVSQVRJT05TX0ZPUl9QUklNRSA2NAorCitzdGF0aWMgaW50IHNycF9WZXJpZnlfTl9hbmRfZyhCSUdOVU0gKk4sIEJJR05VTSAqZykKKwl7CisJQk5fQ1RYICpibl9jdHggPSBCTl9DVFhfbmV3KCk7CisJQklHTlVNICpwID0gQk5fbmV3KCk7CisJQklHTlVNICpyID0gQk5fbmV3KCk7CisJaW50IHJldCA9CisJCWcgIT0gTlVMTCAmJiBOICE9IE5VTEwgJiYgYm5fY3R4ICE9IE5VTEwgJiYgQk5faXNfb2RkKE4pICYmCisJCUJOX2lzX3ByaW1lX2V4KE4sIFNSUF9OVU1CRVJfSVRFUkFUSU9OU19GT1JfUFJJTUUsIGJuX2N0eCwgTlVMTCkgJiYKKwkJcCAhPSBOVUxMICYmIEJOX3JzaGlmdDEocCwgTikgJiYKKworCQkvKiBwID0gKE4tMSkvMiAqLworCQlCTl9pc19wcmltZV9leChwLCBTUlBfTlVNQkVSX0lURVJBVElPTlNfRk9SX1BSSU1FLCBibl9jdHgsIE5VTEwpICYmCisJCXIgIT0gTlVMTCAmJgorCisJCS8qIHZlcmlmeSBnXigoTi0xKS8yKSA9PSAtMSAobW9kIE4pICovCisJCUJOX21vZF9leHAociwgZywgcCwgTiwgYm5fY3R4KSAmJgorCQlCTl9hZGRfd29yZChyLCAxKSAmJgorCQlCTl9jbXAociwgTikgPT0gMDsKKworCWlmKHIpCisJCUJOX2ZyZWUocik7CisJaWYocCkKKwkJQk5fZnJlZShwKTsKKwlpZihibl9jdHgpCisJCUJOX0NUWF9mcmVlKGJuX2N0eCk7CisJcmV0dXJuIHJldDsKKwl9CisKKy8qIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCBoZXJlIGZvciB0d28gcHVycG9zZXM6CisgICAtIGV4dGVuZGVkIGRlYnVnZ2luZworICAgLSBtYWtpbmcgc29tZSBwcmltYWxpdHkgdGVzdHMgZm9yIHVua25vd24gZ3JvdXBzCisgICBUaGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgZm9yIGEgbm9uIGRlZmF1bHQgZ3JvdXAuCisKKyAgIEFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IG5lZWQgdGhlIGNhbGwgYmFjayBhdCBhbGwgaWYKKyAgIG9ubHkgdGhlIHN0YW5hcmQgZ3JvdXBzIGFyZSB1c2VkLiAgSW4gcmVhbCBsaWZlIHNpdHVhdGlvbnMsIAorICAgY2xpZW50IGFuZCBzZXJ2ZXIgYWxyZWFkeSBzaGFyZSB3ZWxsIGtub3duIGdyb3VwcywgCisgICB0aHVzIHRoZXJlIGlzIG5vIG5lZWQgdG8gdmVyaWZ5IHRoZW0uIAorICAgRnVydGhlcm1vcmUsIGluIGNhc2UgdGhhdCBhIHNlcnZlciBhY3R1YWxseSBwcm9wb3NlcyBhIGdyb3VwIHRoYXQKKyAgIGlzIG5vdCBvbmUgb2YgdGhvc2UgZGVmaW5lZCBpbiBSRkMgNTA1NCwgaXQgaXMgbW9yZSBhcHByb3ByaWF0ZSAKKyAgIHRvIGFkZCB0aGUgZ3JvdXAgdG8gYSBzdGF0aWMgbGlzdCBhbmQgdGhlbiBjb21wYXJlIHNpbmNlIAorICAgcHJpbWFsaXR5IHRlc3RzIGFyZSByYXRoZXIgY3B1IGNvbnN1bWluZy4KKyovCisKK3N0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgc3NsX3NycF92ZXJpZnlfcGFyYW1fY2IoU1NMICpzLCB2b2lkICphcmcpCisJeworCVNSUF9BUkcgKnNycF9hcmcgPSAoU1JQX0FSRyAqKWFyZzsKKwlCSUdOVU0gKk4gPSBOVUxMLCAqZyA9IE5VTEw7CisJaWYgKCEoTiA9IFNTTF9nZXRfc3JwX04ocykpIHx8ICEoZyA9IFNTTF9nZXRfc3JwX2cocykpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3JwX2FyZy0+ZGVidWcgfHwgc3JwX2FyZy0+bXNnIHx8IHNycF9hcmctPmFtcCA9PSAxKQorCQl7CisgICAgCQlCSU9fcHJpbnRmKGJpb19lcnIsICJTUlAgcGFyYW1ldGVyczpcbiIpOyAKKwkJQklPX3ByaW50ZihiaW9fZXJyLCJcdE49Iik7IEJOX3ByaW50KGJpb19lcnIsTik7CisJCUJJT19wcmludGYoYmlvX2VyciwiXG5cdGc9Iik7IEJOX3ByaW50KGJpb19lcnIsZyk7CisJCUJJT19wcmludGYoYmlvX2VyciwiXG4iKTsKKwkJfQorCisJaWYgKFNSUF9jaGVja19rbm93bl9nTl9wYXJhbShnLE4pKQorCQlyZXR1cm4gMTsKKworCWlmIChzcnBfYXJnLT5hbXAgPT0gMSkKKwkJeworCQlpZiAoc3JwX2FyZy0+ZGVidWcpCisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJTUlAgcGFyYW0gTiBhbmQgZyBhcmUgbm90IGtub3duIHBhcmFtcywgZ29pbmcgdG8gY2hlY2sgZGVlcGVyLlxuIik7CisKKy8qIFRoZSBzcnBfbW9yZWdyb3VwcyBpcyBhIHJlYWwgZGVidWdnaW5nIGZlYXR1cmUuCisgICBJbXBsZW1lbnRvcnMgc2hvdWxkIHJhdGhlciBhZGQgdGhlIHZhbHVlIHRvIHRoZSBrbm93biBvbmVzLgorICAgVGhlIG1pbmltYWwgc2l6ZSBoYXMgYWxyZWFkeSBiZWVuIHRlc3RlZC4KKyovCisJCWlmIChCTl9udW1fYml0cyhnKSA8PSBCTl9CSVRTICYmIHNycF9WZXJpZnlfTl9hbmRfZyhOLGcpKQorCQkJcmV0dXJuIDE7CisJCX0JCisJQklPX3ByaW50ZihiaW9fZXJyLCAiU1JQIHBhcmFtIE4gYW5kIGcgcmVqZWN0ZWQuXG4iKTsKKwlyZXR1cm4gMDsKKwl9CisKKyNkZWZpbmUgUFdEX1NUUkxFTiAxMDI0CisKK3N0YXRpYyBjaGFyICogTVNfQ0FMTEJBQ0sgc3NsX2dpdmVfc3JwX2NsaWVudF9wd2RfY2IoU1NMICpzLCB2b2lkICphcmcpCisJeworCVNSUF9BUkcgKnNycF9hcmcgPSAoU1JQX0FSRyAqKWFyZzsKKwljaGFyICpwYXNzID0gKGNoYXIgKilPUEVOU1NMX21hbGxvYyhQV0RfU1RSTEVOKzEpOworCVBXX0NCX0RBVEEgY2JfdG1wOworCWludCBsOworCisJY2JfdG1wLnBhc3N3b3JkID0gKGNoYXIgKilzcnBfYXJnLT5zcnBwYXNzaW47CisJY2JfdG1wLnByb21wdF9pbmZvID0gIlNSUCB1c2VyIjsKKwlpZiAoKGwgPSBwYXNzd29yZF9jYWxsYmFjayhwYXNzLCBQV0RfU1RSTEVOLCAwLCAmY2JfdG1wKSk8MCkKKwkJeworCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiQ2FuJ3QgcmVhZCBQYXNzd29yZFxuIik7CisJCU9QRU5TU0xfZnJlZShwYXNzKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwkqKHBhc3MrbCk9ICdcMCc7CisKKwlyZXR1cm4gcGFzczsKKwl9CisKKyNlbmRpZgorCWNoYXIgKnNydHBfcHJvZmlsZXMgPSBOVUxMOworCiAjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwogLyogVGhpcyB0aGUgY29udGV4dCB0aGF0IHdlIHBhc3MgdG8gbmV4dF9wcm90b19jYiAqLwogdHlwZWRlZiBzdHJ1Y3QgdGxzZXh0bmV4dHByb3RvY3R4X3N0IHsKQEAgLTQwMyw3ICs1MzcsNyBAQAogCWN0eC0+c3RhdHVzID0gU1NMX3NlbGVjdF9uZXh0X3Byb3RvKG91dCwgb3V0bGVuLCBpbiwgaW5sZW4sIGN0eC0+ZGF0YSwgY3R4LT5sZW4pOwogCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKIAl9Ci0jIGVuZGlmICAvKiBuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHICovCisjIGVuZGlmCiAjZW5kaWYKIAogZW51bQpAQCAtNDIyLDYgKzU1Niw5IEBACiAJewogCXVuc2lnbmVkIGludCBvZmY9MCwgY2xyPTA7CiAJU1NMICpjb249TlVMTDsKKyNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CisJS1NTTF9DVFggKmtjdHg7CisjZW5kaWYKIAlpbnQgcyxrLHdpZHRoLHN0YXRlPTA7CiAJY2hhciAqY2J1Zj1OVUxMLCpzYnVmPU5VTEwsKm1idWY9TlVMTDsKIAlpbnQgY2J1Zl9sZW4sY2J1Zl9vZmY7CkBAIC00ODEsNiArNjE4LDExIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fSlBBS0UKIAljaGFyICpqcGFrZV9zZWNyZXQgPSBOVUxMOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJY2hhciAqIHNycHBhc3MgPSBOVUxMOworCWludCBzcnBfbGF0ZXVzZXIgPSAwOworCVNSUF9BUkcgc3JwX2FyZyA9IHtOVUxMLE5VTEwsMCwwLDAsMTAyNH07CisjZW5kaWYKIAogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TU0wzKQogCW1ldGg9U1NMdjIzX2NsaWVudF9tZXRob2QoKTsKQEAgLTYzMCw2ICs3NzIsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCQkJfQogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNycHVzZXIiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJc3JwX2FyZy5zcnBsb2dpbj0gKigrK2FyZ3YpOworCQkJbWV0aD1UTFN2MV9jbGllbnRfbWV0aG9kKCk7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNycHBhc3MiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJc3JwcGFzcz0gKigrK2FyZ3YpOworCQkJbWV0aD1UTFN2MV9jbGllbnRfbWV0aG9kKCk7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNycF9zdHJlbmd0aCIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlzcnBfYXJnLnN0cmVuZ3RoPWF0b2koKigrK2FyZ3YpKTsKKwkJCUJJT19wcmludGYoYmlvX2VyciwiU1JQIG1pbmltYWwgbGVuZ3RoIGZvciBOIGlzICVkXG4iLHNycF9hcmcuc3RyZW5ndGgpOworCQkJbWV0aD1UTFN2MV9jbGllbnRfbWV0aG9kKCk7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNycF9sYXRldXNlciIpID09IDApCisJCQl7CisJCQlzcnBfbGF0ZXVzZXI9IDE7CisJCQltZXRoPVRMU3YxX2NsaWVudF9tZXRob2QoKTsKKwkJCX0KKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc3JwX21vcmVncm91cHMiKSA9PSAwKQorCQkJeworCQkJc3JwX2FyZy5hbXA9MTsKKwkJCW1ldGg9VExTdjFfY2xpZW50X21ldGhvZCgpOworCQkJfQorI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1zc2wyIikgPT0gMCkKIAkJCW1ldGg9U1NMdjJfY2xpZW50X21ldGhvZCgpOwpAQCAtNjM5LDYgKzgxMiwxMCBAQAogCQkJbWV0aD1TU0x2M19jbGllbnRfbWV0aG9kKCk7CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19UTFMxCisJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXRsczFfMiIpID09IDApCisJCQltZXRoPVRMU3YxXzJfY2xpZW50X21ldGhvZCgpOworCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi10bHMxXzEiKSA9PSAwKQorCQkJbWV0aD1UTFN2MV8xX2NsaWVudF9tZXRob2QoKTsKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItdGxzMSIpID09IDApCiAJCQltZXRoPVRMU3YxX2NsaWVudF9tZXRob2QoKTsKICNlbmRpZgpAQCAtNjg3LDYgKzg2NCwxMCBAQAogCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwogCQkJQ0FmaWxlPSAqKCsrYXJndik7CiAJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLW5vX3RsczFfMiIpID09IDApCisJCQlvZmZ8PVNTTF9PUF9OT19UTFN2MV8yOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1ub190bHMxXzEiKSA9PSAwKQorCQkJb2ZmfD1TU0xfT1BfTk9fVExTdjFfMTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9fdGxzMSIpID09IDApCiAJCQlvZmZ8PVNTTF9PUF9OT19UTFN2MTsKIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbm9fc3NsMyIpID09IDApCkBAIC03NzQsNyArOTU1LDIzIEBACiAJCQlqcGFrZV9zZWNyZXQgPSAqKythcmd2OwogCQkJfQogI2VuZGlmCi0JCWVsc2UKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItdXNlX3NydHAiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJc3J0cF9wcm9maWxlcyA9ICooKythcmd2KTsKKwkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCIta2V5bWF0ZXhwb3J0IikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCWtleW1hdGV4cG9ydGxhYmVsPSAqKCsrYXJndik7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWtleW1hdGV4cG9ydGxlbiIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlrZXltYXRleHBvcnRsZW49YXRvaSgqKCsrYXJndikpOworCQkJaWYgKGtleW1hdGV4cG9ydGxlbiA9PSAwKSBnb3RvIGJhZDsKKwkJCX0KKyAgICAgICAgICAgICAgICBlbHNlCiAJCQl7CiAJCQlCSU9fcHJpbnRmKGJpb19lcnIsInVua25vd24gb3B0aW9uICVzXG4iLCphcmd2KTsKIAkJCWJhZG9wPTE7CkBAIC04MDAsMTQgKzk5NywxMyBAQAogCQkJZ290byBlbmQ7CiAJCQl9CiAJCXBza19pZGVudGl0eSA9ICJKUEFLRSI7CisJCWlmIChjaXBoZXIpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJKUEFLRSBzZXRzIGNpcGhlciB0byBQU0tcbiIpOworCQkJZ290byBlbmQ7CisJCQl9CisJCWNpcGhlciA9ICJQU0siOwogCQl9Ci0KLQlpZiAoY2lwaGVyKQotCQl7Ci0JCUJJT19wcmludGYoYmlvX2VyciwgIkpQQUtFIHNldHMgY2lwaGVyIHRvIFBTS1xuIik7Ci0JCWdvdG8gZW5kOwotCQl9Ci0JY2lwaGVyID0gIlBTSyI7CiAjZW5kaWYKIAogCU9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCk7CkBAIC05MDEsNiArMTA5NywxNCBAQAogCQkJfQogCQl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlpZighYXBwX3Bhc3N3ZChiaW9fZXJyLCBzcnBwYXNzLCBOVUxMLCAmc3JwX2FyZy5zcnBwYXNzaW4sIE5VTEwpKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGdldHRpbmcgcGFzc3dvcmRcbiIpOworCQlnb3RvIGVuZDsKKwkJfQorI2VuZGlmCisKIAljdHg9U1NMX0NUWF9uZXcobWV0aCk7CiAJaWYgKGN0eCA9PSBOVUxMKQogCQl7CkBAIC05MzYsNiArMTE0MCw4IEBACiAJCQlCSU9fcHJpbnRmKGJpb19jX291dCwgIlBTSyBrZXkgZ2l2ZW4gb3IgSlBBS0UgaW4gdXNlLCBzZXR0aW5nIGNsaWVudCBjYWxsYmFja1xuIik7CiAJCVNTTF9DVFhfc2V0X3Bza19jbGllbnRfY2FsbGJhY2soY3R4LCBwc2tfY2xpZW50X2NiKTsKIAkJfQorCWlmIChzcnRwX3Byb2ZpbGVzICE9IE5VTEwpCisJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cChjdHgsIHNydHBfcHJvZmlsZXMpOwogI2VuZGlmCiAJaWYgKGJ1Z3MpCiAJCVNTTF9DVFhfc2V0X29wdGlvbnMoY3R4LFNTTF9PUF9BTEx8b2ZmKTsKQEAgLTk0OSw2ICsxMTU1LDExIEBACiAJICovCiAJaWYgKHNvY2tldF90eXBlID09IFNPQ0tfREdSQU0pIFNTTF9DVFhfc2V0X3JlYWRfYWhlYWQoY3R4LCAxKTsKIAorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKKwlpZiAobmV4dF9wcm90by5kYXRhKQorCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihjdHgsIG5leHRfcHJvdG9fY2IsICZuZXh0X3Byb3RvKTsKKyNlbmRpZgorCiAJLyogRW5hYmxlIGhhbmRzaGFrZSBjdXR0aHJvdWdoIGZvciBjbGllbnQgY29ubmVjdGlvbnMgdXNpbmcKIAkgKiBzdHJvbmcgY2lwaGVycy4gKi8KIAlpZiAoY3V0dGhyb3VnaCkKQEAgLTk1OCwxMSArMTE2OSw2IEBACiAJCVNTTF9DVFhfc2V0X21vZGUoY3R4LCBzc2xfbW9kZSk7CiAJCX0KIAotI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLQlpZiAobmV4dF9wcm90by5kYXRhKQotCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihjdHgsIG5leHRfcHJvdG9fY2IsICZuZXh0X3Byb3RvKTsKLSNlbmRpZgotCiAJaWYgKHN0YXRlKSBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrKGN0eCxhcHBzX3NzbF9pbmZvX2NhbGxiYWNrKTsKIAlpZiAoY2lwaGVyICE9IE5VTEwpCiAJCWlmKCFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsY2lwaGVyKSkgewpAQCAtOTk0LDYgKzEyMDAsMjQgQEAKIAkJU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soY3R4LCBzc2xfc2VydmVybmFtZV9jYik7CiAJCVNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2FyZyhjdHgsICZ0bHNleHRjYnApOwogCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisgICAgICAgIGlmIChzcnBfYXJnLnNycGxvZ2luKQorCQl7CisJCWlmICghc3JwX2xhdGV1c2VyICYmICFTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWUoY3R4LCBzcnBfYXJnLnNycGxvZ2luKSkKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwiVW5hYmxlIHRvIHNldCBTUlAgdXNlcm5hbWVcbiIpOworCQkJZ290byBlbmQ7CisJCQl9CisJCXNycF9hcmcubXNnID0gY19tc2c7CisJCXNycF9hcmcuZGVidWcgPSBjX2RlYnVnIDsKKwkJU1NMX0NUWF9zZXRfc3JwX2NiX2FyZyhjdHgsJnNycF9hcmcpOworCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayhjdHgsIHNzbF9naXZlX3NycF9jbGllbnRfcHdkX2NiKTsKKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoKGN0eCwgc3JwX2FyZy5zdHJlbmd0aCk7CisJCWlmIChjX21zZyB8fCBjX2RlYnVnIHx8IHNycF9hcmcuYW1wID09IDApCisJCQlTU0xfQ1RYX3NldF9zcnBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrKGN0eCwgc3NsX3NycF92ZXJpZnlfcGFyYW1fY2IpOworCQl9CisKKyNlbmRpZgogI2VuZGlmCiAKIAljb249U1NMX25ldyhjdHgpOwpAQCAtMTAzMiw5ICsxMjU2LDEwIEBACiAJCX0KICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQlpZiAoY29uICAmJiAgKGNvbi0+a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKSkgIT0gTlVMTCkKKwlpZiAoY29uICAmJiAgKGtjdHggPSBrc3NsX2N0eF9uZXcoKSkgIT0gTlVMTCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKGNvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVkVSLCBob3N0KTsKKwkJU1NMX3NldDBfa3NzbF9jdHgoY29uLCBrY3R4KTsKKyAgICAgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcoa2N0eCwgS1NTTF9TRVJWRVIsIGhvc3QpOwogCQl9CiAjZW5kaWYJLyogT1BFTlNTTF9OT19LUkI1ICAqLwogLyoJU1NMX3NldF9jaXBoZXJfbGlzdChjb24sIlJDNC1NRDUiKTsgKi8KQEAgLTEwNjYsNyArMTI5MSw3IEBACiAJCQl9CiAJCX0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlpZiAoY19QYXVzZSAmIDB4MDEpIGNvbi0+ZGVidWc9MTsKKwlpZiAoY19QYXVzZSAmIDB4MDEpIFNTTF9zZXRfZGVidWcoY29uLCAxKTsKIAogCWlmICggU1NMX3ZlcnNpb24oY29uKSA9PSBEVExTMV9WRVJTSU9OKQogCQl7CkBAIC0xMTE1LDcgKzEzNDAsNyBAQAogCiAJaWYgKGNfZGVidWcpCiAJCXsKLQkJY29uLT5kZWJ1Zz0xOworCQlTU0xfc2V0X2RlYnVnKGNvbiwgMSk7CiAJCUJJT19zZXRfY2FsbGJhY2soc2JpbyxiaW9fZHVtcF9jYWxsYmFjayk7CiAJCUJJT19zZXRfY2FsbGJhY2tfYXJnKHNiaW8sKGNoYXIgKiliaW9fY19vdXQpOwogCQl9CkBAIC0xNjQ5LDYgKzE4NzQsMTQgQEAKIAkJCQlTU0xfcmVuZWdvdGlhdGUoY29uKTsKIAkJCQljYnVmX2xlbj0wOwogCQkJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisJCQllbHNlIGlmICgoIWNfaWduX2VvZikgJiYgKGNidWZbMF0gPT0gJ0InKSkKKyAJCQkJeworCQkJCUJJT19wcmludGYoYmlvX2VyciwiSEVBUlRCRUFUSU5HXG4iKTsKKwkJCQlTU0xfaGVhcnRiZWF0KGNvbik7CisJCQkJY2J1Zl9sZW49MDsKKwkJCQl9CisjZW5kaWYKIAkJCWVsc2UKIAkJCQl7CiAJCQkJY2J1Zl9sZW49aTsKQEAgLTE3MTAsNiArMTk0Myw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAogCWNvbnN0IENPTVBfTUVUSE9EICpjb21wLCAqZXhwYW5zaW9uOwogI2VuZGlmCisJdW5zaWduZWQgY2hhciAqZXhwb3J0ZWRrZXltYXQ7CiAKIAlpZiAoZnVsbCkKIAkJewpAQCAtMTgwMCw3ICsyMDM0LDcgQEAKIAkJCUJJT19udW1iZXJfcmVhZChTU0xfZ2V0X3JiaW8ocykpLAogCQkJQklPX251bWJlcl93cml0dGVuKFNTTF9nZXRfd2JpbyhzKSkpOwogCQl9Ci0JQklPX3ByaW50ZihiaW8sKChzLT5oaXQpPyItLS1cblJldXNlZCwgIjoiLS0tXG5OZXcsICIpKTsKKwlCSU9fcHJpbnRmKGJpbywoU1NMX2NhY2hlX2hpdChzKT8iLS0tXG5SZXVzZWQsICI6Ii0tLVxuTmV3LCAiKSk7CiAJYz1TU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHMpOwogCUJJT19wcmludGYoYmlvLCIlcywgQ2lwaGVyIGlzICVzXG4iLAogCQlTU0xfQ0lQSEVSX2dldF92ZXJzaW9uKGMpLApAQCAtMTgyMiw2ICsyMDU2LDE4IEBACiAJQklPX3ByaW50ZihiaW8sIkV4cGFuc2lvbjogJXNcbiIsCiAJCWV4cGFuc2lvbiA/IFNTTF9DT01QX2dldF9uYW1lKGV4cGFuc2lvbikgOiAiTk9ORSIpOwogI2VuZGlmCisgCisjaWZkZWYgU1NMX0RFQlVHCisJeworCS8qIFByaW50IG91dCBsb2NhbCBwb3J0IG9mIGNvbm5lY3Rpb246IHVzZWZ1bCBmb3IgZGVidWdnaW5nICovCisJaW50IHNvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIGxhZGQ7CisJc29ja2xlbl90IGxhZGRfc2l6ZSA9IHNpemVvZihsYWRkKTsKKwlzb2NrID0gU1NMX2dldF9mZChzKTsKKwlnZXRzb2NrbmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmxhZGQsICZsYWRkX3NpemUpOworCUJJT19wcmludGYoYmlvX2Nfb3V0LCAiTE9DQUwgUE9SVCBpcyAldVxuIiwgbnRvaHMobGFkZC5zaW5fcG9ydCkpOworCX0KKyNlbmRpZgogCiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQogCWlmIChuZXh0X3Byb3RvLnN0YXR1cyAhPSAtMSkgewpAQCAtMTgzNCw3ICsyMDgwLDQyIEBACiAJfQogI2VuZGlmCiAKKyAJeworIAlTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqc3J0cF9wcm9maWxlPVNTTF9nZXRfc2VsZWN0ZWRfc3J0cF9wcm9maWxlKHMpOworIAorCWlmKHNydHBfcHJvZmlsZSkKKwkJQklPX3ByaW50ZihiaW8sIlNSVFAgRXh0ZW5zaW9uIG5lZ290aWF0ZWQsIHByb2ZpbGU9JXNcbiIsCisJCQkgICBzcnRwX3Byb2ZpbGUtPm5hbWUpOworCX0KKyAKIAlTU0xfU0VTU0lPTl9wcmludChiaW8sU1NMX2dldF9zZXNzaW9uKHMpKTsKKwlpZiAoa2V5bWF0ZXhwb3J0bGFiZWwgIT0gTlVMTCkKKwkJeworCQlCSU9fcHJpbnRmKGJpbywgIktleWluZyBtYXRlcmlhbCBleHBvcnRlcjpcbiIpOworCQlCSU9fcHJpbnRmKGJpbywgIiAgICBMYWJlbDogJyVzJ1xuIiwga2V5bWF0ZXhwb3J0bGFiZWwpOworCQlCSU9fcHJpbnRmKGJpbywgIiAgICBMZW5ndGg6ICVpIGJ5dGVzXG4iLCBrZXltYXRleHBvcnRsZW4pOworCQlleHBvcnRlZGtleW1hdCA9IE9QRU5TU0xfbWFsbG9jKGtleW1hdGV4cG9ydGxlbik7CisJCWlmIChleHBvcnRlZGtleW1hdCAhPSBOVUxMKQorCQkJeworCQkJaWYgKCFTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbChzLCBleHBvcnRlZGtleW1hdCwKKwkJCQkJCSAgICAgICAga2V5bWF0ZXhwb3J0bGVuLAorCQkJCQkJICAgICAgICBrZXltYXRleHBvcnRsYWJlbCwKKwkJCQkJCSAgICAgICAgc3RybGVuKGtleW1hdGV4cG9ydGxhYmVsKSwKKwkJCQkJCSAgICAgICAgTlVMTCwgMCwgMCkpCisJCQkJeworCQkJCUJJT19wcmludGYoYmlvLCAiICAgIEVycm9yXG4iKTsKKwkJCQl9CisJCQllbHNlCisJCQkJeworCQkJCUJJT19wcmludGYoYmlvLCAiICAgIEtleWluZyBtYXRlcmlhbDogIik7CisJCQkJZm9yIChpPTA7IGk8a2V5bWF0ZXhwb3J0bGVuOyBpKyspCisJCQkJCUJJT19wcmludGYoYmlvLCAiJTAyWCIsCisJCQkJCQkgICBleHBvcnRlZGtleW1hdFtpXSk7CisJCQkJQklPX3ByaW50ZihiaW8sICJcbiIpOworCQkJCX0KKwkJCU9QRU5TU0xfZnJlZShleHBvcnRlZGtleW1hdCk7CisJCQl9CisJCX0KIAlCSU9fcHJpbnRmKGJpbywiLS0tXG4iKTsKIAlpZiAocGVlciAhPSBOVUxMKQogCQlYNTA5X2ZyZWUocGVlcik7CmRpZmYgLS1naXQgYS9hcHBzL3Nfc2VydmVyLmMgYi9hcHBzL3Nfc2VydmVyLmMKaW5kZXggYTQzYmQ3NC4uZmUyOWI0YyAxMDA2NDQKLS0tIGEvYXBwcy9zX3NlcnZlci5jCisrKyBiL2FwcHMvc19zZXJ2ZXIuYwpAQCAtMTg2LDYgKzE4Niw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorI2luY2x1ZGUgPG9wZW5zc2wvc3JwLmg+CisjZW5kaWYKICNpbmNsdWRlICJzX2FwcHMuaCIKICNpbmNsdWRlICJ0aW1lb3V0cy5oIgogCkBAIC0yOTAsNiArMjkzLDkgQEAKIHN0YXRpYyBpbnQgc19tc2c9MDsKIHN0YXRpYyBpbnQgc19xdWlldD0wOwogCitzdGF0aWMgY2hhciAqa2V5bWF0ZXhwb3J0bGFiZWw9TlVMTDsKK3N0YXRpYyBpbnQga2V5bWF0ZXhwb3J0bGVuPTIwOworCiBzdGF0aWMgaW50IGhhY2s9MDsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIHN0YXRpYyBjaGFyICplbmdpbmVfaWQ9TlVMTDsKQEAgLTMwMiw2ICszMDgsNyBAQAogc3RhdGljIGludCBjZXJ0X2NoYWluID0gMDsKICNlbmRpZgogCisKICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKIHN0YXRpYyBjaGFyICpwc2tfaWRlbnRpdHk9IkNsaWVudF9pZGVudGl0eSI7CiBjaGFyICpwc2tfa2V5PU5VTEw7IC8qIGJ5IGRlZmF1bHQgUFNLIGlzIG5vdCB1c2VkICovCkBAIC0zNjksNiArMzc2LDUyIEBACiAgICAgICAgIH0KICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisvKiBUaGlzIGlzIGEgY29udGV4dCB0aGF0IHdlIHBhc3MgdG8gY2FsbGJhY2tzICovCit0eXBlZGVmIHN0cnVjdCBzcnBzcnZwYXJtX3N0CisJeworCWNoYXIgKmxvZ2luOworCVNSUF9WQkFTRSAqdmI7CisJU1JQX3VzZXJfcHdkICp1c2VyOworCX0gc3Jwc3J2cGFybTsKKworLyogVGhpcyBjYWxsYmFjayBwcmV0ZW5kcyB0byByZXF1aXJlIHNvbWUgYXN5bmNocm9ub3VzIGxvZ2ljIGluIG9yZGVyIHRvIG9idGFpbgorICAgYSB2ZXJpZmllci4gV2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGZvciBhIG5ldyBjb25uZWN0aW9uIHdlIHJldHVybgorICAgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlLiBUaGlzIHdpbGwgcHJvdm9rZSB0aGUgYWNjZXB0IGV0YyB0byByZXR1cm4gd2l0aAorICAgYW4gTE9PS1VQX1g1MDkuIFRoZSBtYWluIGxvZ2ljIG9mIHRoZSByZWludm9rZXMgdGhlIHN1c3BlbmRlZCBjYWxsIAorICAgKHdoaWNoIHdvdWxkIG5vcm1hbGx5IG9jY3VyIGFmdGVyIGEgd29ya2VyIGhhcyBmaW5pc2hlZCkgYW5kIHdlCisgICBzZXQgdGhlIHVzZXIgcGFyYW1ldGVycy4gCisqLworc3RhdGljIGludCBNU19DQUxMQkFDSyBzc2xfc3JwX3NlcnZlcl9wYXJhbV9jYihTU0wgKnMsIGludCAqYWQsIHZvaWQgKmFyZykKKwl7CisJc3Jwc3J2cGFybSAqcCA9IChzcnBzcnZwYXJtICopYXJnOworCWlmIChwLT5sb2dpbiA9PSBOVUxMICYmIHAtPnVzZXIgPT0gTlVMTCApCisJCXsKKwkJcC0+bG9naW4gPSBTU0xfZ2V0X3NycF91c2VybmFtZShzKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiU1JQIHVzZXJuYW1lID0gXCIlc1wiXG4iLCBwLT5sb2dpbik7CisJCXJldHVybiAoLTEpIDsKKwkJfQorCisJaWYgKHAtPnVzZXIgPT0gTlVMTCkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsICJVc2VyICVzIGRvZXNuJ3QgZXhpc3RcbiIsIHAtPmxvZ2luKTsKKwkJcmV0dXJuIFNTTDNfQUxfRkFUQUw7CisJCX0KKwlpZiAoU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtKHMsIHAtPnVzZXItPk4sIHAtPnVzZXItPmcsIHAtPnVzZXItPnMsIHAtPnVzZXItPnYsCisJCQkJICAgICBwLT51c2VyLT5pbmZvKSA8IDApCisJCXsKKwkJKmFkID0gU1NMX0FEX0lOVEVSTkFMX0VSUk9SOworCQlyZXR1cm4gU1NMM19BTF9GQVRBTDsKKwkJfQorCUJJT19wcmludGYoYmlvX2VyciwgIlNSUCBwYXJhbWV0ZXJzIHNldDogdXNlcm5hbWUgPSBcIiVzXCIgaW5mbz1cIiVzXCIgXG4iLCBwLT5sb2dpbixwLT51c2VyLT5pbmZvKTsKKwkvKiBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIG1lbW9yeSBsZWFrcyAqLworCXAtPnVzZXIgPSBOVUxMOworCXAtPmxvZ2luID0gTlVMTDsKKwlyZXR1cm4gU1NMX0VSUk9SX05PTkU7CisJfQorCisjZW5kaWYKKwogI2lmZGVmIE1PTk9MSVRICiBzdGF0aWMgdm9pZCBzX3NlcnZlcl9pbml0KHZvaWQpCiAJewpAQCAtNDU2LDggKzUwOSwxNCBAQAogCUJJT19wcmludGYoYmlvX2VyciwiIC1qcGFrZSBhcmcgICAgLSBKUEFLRSBzZWNyZXQgdG8gdXNlXG4iKTsKICMgZW5kaWYKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCUJJT19wcmludGYoYmlvX2VyciwiIC1zcnB2ZmlsZSBmaWxlICAgICAgLSBUaGUgdmVyaWZpZXIgZmlsZSBmb3IgU1JQXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3JwdXNlcnNlZWQgc3RyaW5nIC0gQSBzZWVkIHN0cmluZyBmb3IgYSBkZWZhdWx0IHVzZXIgc2FsdC5cbiIpOworI2VuZGlmCiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXNzbDIgICAgICAgICAtIEp1c3QgdGFsayBTU0x2MlxuIik7CiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXNzbDMgICAgICAgICAtIEp1c3QgdGFsayBTU0x2M1xuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCIgLXRsczFfMiAgICAgICAtIEp1c3QgdGFsayBUTFN2MS4yXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzMV8xICAgICAgIC0gSnVzdCB0YWxrIFRMU3YxLjFcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC10bHMxICAgICAgICAgLSBKdXN0IHRhbGsgVExTdjFcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1kdGxzMSAgICAgICAgLSBKdXN0IHRhbGsgRFRMU3YxXG4iKTsKIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGltZW91dCAgICAgIC0gRW5hYmxlIHRpbWVvdXRzXG4iKTsKQEAgLTQ2Niw2ICs1MjUsOCBAQAogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub19zc2wyICAgICAgLSBKdXN0IGRpc2FibGUgU1NMdjJcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub19zc2wzICAgICAgLSBKdXN0IGRpc2FibGUgU1NMdjNcbiIpOwogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub190bHMxICAgICAgLSBKdXN0IGRpc2FibGUgVExTdjFcbiIpOworCUJJT19wcmludGYoYmlvX2VyciwiIC1ub190bHMxXzEgICAgLSBKdXN0IGRpc2FibGUgVExTdjEuMVxuIik7CisJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5vX3RsczFfMiAgICAtIEp1c3QgZGlzYWJsZSBUTFN2MS4yXG4iKTsKICNpZm5kZWYgT1BFTlNTTF9OT19ESAogCUJJT19wcmludGYoYmlvX2VyciwiIC1ub19kaGUgICAgICAgLSBEaXNhYmxlIGVwaGVtZXJhbCBESFxuIik7CiAjZW5kaWYKQEAgLTQ5NSw3ICs1NTYsMTAgQEAKICMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5leHRwcm90b25lZyBhcmcgLSBzZXQgdGhlIGFkdmVydGlzZWQgcHJvdG9jb2xzIGZvciB0aGUgTlBOIGV4dGVuc2lvbiAoY29tbWEtc2VwYXJhdGVkIGxpc3QpXG4iKTsKICMgZW5kaWYKKyAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCIgLXVzZV9zcnRwIHByb2ZpbGVzIC0gT2ZmZXIgU1JUUCBrZXkgbWFuYWdlbWVudCB3aXRoIGEgY29sb24tc2VwYXJhdGVkIHByb2ZpbGUgbGlzdFxuIik7CiAjZW5kaWYKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAta2V5bWF0ZXhwb3J0IGxhYmVsICAgLSBFeHBvcnQga2V5aW5nIG1hdGVyaWFsIHVzaW5nIGxhYmVsXG4iKTsKKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAta2V5bWF0ZXhwb3J0bGVuIGxlbiAgLSBFeHBvcnQgbGVuIGJ5dGVzIG9mIGtleWluZyBtYXRlcmlhbCAoZGVmYXVsdCAyMClcbiIpOwogCX0KIAogc3RhdGljIGludCBsb2NhbF9hcmdjPTA7CkBAIC04NDYsNyArOTEwLDkgQEAKIAogCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKIAl9Ci0jIGVuZGlmICAvKiBuZGVmIE9QRU5TU0xfTk9fTlBOICovCisjIGVuZGlmICAvKiBuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHICovCisKKwogI2VuZGlmCiAKIGludCBNQUlOKGludCwgY2hhciAqKik7CkBAIC04NTQsNiArOTIwLDEwIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fSlBBS0UKIHN0YXRpYyBjaGFyICpqcGFrZV9zZWNyZXQgPSBOVUxMOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJc3RhdGljIHNycHNydnBhcm0gc3JwX2NhbGxiYWNrX3Bhcm07CisjZW5kaWYKK3N0YXRpYyBjaGFyICpzcnRwX3Byb2ZpbGVzID0gTlVMTDsKIAogaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl7CkBAIC04ODUsOCArOTU1LDYgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKIAlFVlBfUEtFWSAqc19rZXkyID0gTlVMTDsKIAlYNTA5ICpzX2NlcnQyID0gTlVMTDsKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogICAgICAgICB0bHNleHRjdHggdGxzZXh0Y2JwID0ge05VTEwsIE5VTEwsIFNTTF9UTFNFWFRfRVJSX0FMRVJUX1dBUk5JTkd9OwogIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKIAljb25zdCBjaGFyICpuZXh0X3Byb3RvX25lZ19pbiA9IE5VTEw7CkBAIC04OTcsMTIgKzk2NSwyMCBAQAogCS8qIGJ5IGRlZmF1bHQgZG8gbm90IHNlbmQgYSBQU0sgaWRlbnRpdHkgaGludCAqLwogCXN0YXRpYyBjaGFyICpwc2tfaWRlbnRpdHlfaGludD1OVUxMOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJY2hhciAqc3JwdXNlcnNlZWQgPSBOVUxMOworCWNoYXIgKnNycF92ZXJpZmllcl9maWxlID0gTlVMTDsKKyNlbmRpZgogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TU0wzKQogCW1ldGg9U1NMdjIzX3NlcnZlcl9tZXRob2QoKTsKICNlbGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMykKIAltZXRoPVNTTHYzX3NlcnZlcl9tZXRob2QoKTsKICNlbGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMikKIAltZXRoPVNTTHYyX3NlcnZlcl9tZXRob2QoKTsKKyNlbGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTMSkKKwltZXRoPVRMU3YxX3NlcnZlcl9tZXRob2QoKTsKKyNlbHNlCisgIC8qICAjZXJyb3Igbm8gU1NMIHZlcnNpb24gZW5hYmxlZCAqLwogI2VuZGlmCiAKIAlsb2NhbF9hcmdjPWFyZ2M7CkBAIC0xMTM1LDYgKzEyMTEsMjAgQEAKIAkJCQl9CiAJCQl9CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiLXNycHZmaWxlIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXNycF92ZXJpZmllcl9maWxlID0gKigrK2FyZ3YpOworCQkJbWV0aD1UTFN2MV9zZXJ2ZXJfbWV0aG9kKCk7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi1zcnB1c2Vyc2VlZCIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlzcnB1c2Vyc2VlZCA9ICooKythcmd2KTsKKwkJCW1ldGg9VExTdjFfc2VydmVyX21ldGhvZCgpOworCQkJfQorI2VuZGlmCiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXd3dyIpID09IDApCiAJCQl7IHd3dz0xOyB9CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLVdXVyIpID09IDApCkBAIC0xMTQ3LDYgKzEyMzcsMTAgQEAKIAkJCXsgb2ZmfD1TU0xfT1BfTk9fU1NMdjM7IH0KIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItbm9fdGxzMSIpID09IDApCiAJCQl7IG9mZnw9U1NMX09QX05PX1RMU3YxOyB9CisJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLW5vX3RsczFfMSIpID09IDApCisJCQl7IG9mZnw9U1NMX09QX05PX1RMU3YxXzE7IH0KKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItbm9fdGxzMV8yIikgPT0gMCkKKwkJCXsgb2ZmfD1TU0xfT1BfTk9fVExTdjFfMjsgfQogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1ub19jb21wIikgPT0gMCkKIAkJCXsgb2ZmfD1TU0xfT1BfTk9fQ09NUFJFU1NJT047IH0KICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKQEAgLTExNjQsNiArMTI1OCwxMCBAQAogI2lmbmRlZiBPUEVOU1NMX05PX1RMUzEKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItdGxzMSIpID09IDApCiAJCQl7IG1ldGg9VExTdjFfc2VydmVyX21ldGhvZCgpOyB9CisJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXRsczFfMSIpID09IDApCisJCQl7IG1ldGg9VExTdjFfMV9zZXJ2ZXJfbWV0aG9kKCk7IH0KKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItdGxzMV8yIikgPT0gMCkKKwkJCXsgbWV0aD1UTFN2MV8yX3NlcnZlcl9tZXRob2QoKTsgfQogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fRFRMUzEKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItZHRsczEiKSA9PSAwKQpAQCAtMTIzMSw2ICsxMzI5LDIyIEBACiAJCQlqcGFrZV9zZWNyZXQgPSAqKCsrYXJndik7CiAJCQl9CiAjZW5kaWYKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItdXNlX3NydHAiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJc3J0cF9wcm9maWxlcyA9ICooKythcmd2KTsKKwkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCIta2V5bWF0ZXhwb3J0IikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCWtleW1hdGV4cG9ydGxhYmVsPSAqKCsrYXJndik7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWtleW1hdGV4cG9ydGxlbiIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlrZXltYXRleHBvcnRsZW49YXRvaSgqKCsrYXJndikpOworCQkJaWYgKGtleW1hdGV4cG9ydGxlbiA9PSAwKSBnb3RvIGJhZDsKKwkJCX0KIAkJZWxzZQogCQkJewogCQkJQklPX3ByaW50ZihiaW9fZXJyLCJ1bmtub3duIG9wdGlvbiAlc1xuIiwqYXJndik7CkBAIC0xMzI3LDYgKzE0NDEsMjIgQEAKIAkJCQlnb3RvIGVuZDsKIAkJCQl9CiAJCQl9CisKKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCisJCWlmIChuZXh0X3Byb3RvX25lZ19pbikKKwkJCXsKKwkJCXVuc2lnbmVkIHNob3J0IGxlbjsKKwkJCW5leHRfcHJvdG8uZGF0YSA9IG5leHRfcHJvdG9zX3BhcnNlKCZsZW4sCisJCQkJbmV4dF9wcm90b19uZWdfaW4pOworCQkJaWYgKG5leHRfcHJvdG8uZGF0YSA9PSBOVUxMKQorCQkJCWdvdG8gZW5kOworCQkJbmV4dF9wcm90by5sZW4gPSBsZW47CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCW5leHRfcHJvdG8uZGF0YSA9IE5VTEw7CisJCQl9CisjIGVuZGlmCiAjZW5kaWYKIAkJfQogCkBAIC0xNDMwLDYgKzE1NjAsOSBAQAogCWVsc2UKIAkJU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXplKGN0eCwxMjgpOwogCisJaWYgKHNydHBfcHJvZmlsZXMgIT0gTlVMTCkKKwkJU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwKGN0eCwgc3J0cF9wcm9maWxlcyk7CisKICNpZiAwCiAJaWYgKGNpcGhlciA9PSBOVUxMKSBjaXBoZXI9Z2V0ZW52KCJTU0xfQ0lQSEVSIik7CiAjZW5kaWYKQEAgLTE2NTMsMjEgKzE3ODYsNiBAQAogCQkJCQlnb3RvIGVuZDsKIAkJCQkJfQogCQkJCX0KLSMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0JCWlmIChuZXh0X3Byb3RvX25lZ19pbikKLQkJCXsKLQkJCXVuc2lnbmVkIHNob3J0IGxlbjsKLQkJCW5leHRfcHJvdG8uZGF0YSA9IG5leHRfcHJvdG9zX3BhcnNlKCZsZW4sCi0JCQkJbmV4dF9wcm90b19uZWdfaW4pOwotCQkJaWYgKG5leHRfcHJvdG8uZGF0YSA9PSBOVUxMKQotCQkJCWdvdG8gZW5kOwotCQkJbmV4dF9wcm90by5sZW4gPSBsZW47Ci0JCQl9Ci0JCWVsc2UKLQkJCXsKLQkJCW5leHRfcHJvdG8uZGF0YSA9IE5VTEw7Ci0JCQl9Ci0jIGVuZGlmCiAjZW5kaWYKIAkJUlNBX2ZyZWUocnNhKTsKIAkJQklPX3ByaW50ZihiaW9fc19vdXQsIlxuIik7CkBAIC0xNzM1LDYgKzE4NTMsMjUgQEAKIAkJfQogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlpZiAoc3JwX3ZlcmlmaWVyX2ZpbGUgIT0gTlVMTCkKKwkJeworCQlzcnBfY2FsbGJhY2tfcGFybS52YiA9IFNSUF9WQkFTRV9uZXcoc3JwdXNlcnNlZWQpOworCQlzcnBfY2FsbGJhY2tfcGFybS51c2VyID0gTlVMTDsKKwkJc3JwX2NhbGxiYWNrX3Bhcm0ubG9naW4gPSBOVUxMOworCQlpZiAoKHJldCA9IFNSUF9WQkFTRV9pbml0KHNycF9jYWxsYmFja19wYXJtLnZiLCBzcnBfdmVyaWZpZXJfZmlsZSkpICE9IFNSUF9OT19FUlJPUikKKwkJCXsKKwkJCUJJT19wcmludGYoYmlvX2VyciwKKwkJCQkgICAiQ2Fubm90IGluaXRpYWxpemUgU1JQIHZlcmlmaWVyIGZpbGUgXCIlc1wiOnJldD0lZFxuIiwKKwkJCQkgICBzcnBfdmVyaWZpZXJfZmlsZSwgcmV0KTsKKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NMX1ZFUklGWV9OT05FLHZlcmlmeV9jYWxsYmFjayk7CisJCVNTTF9DVFhfc2V0X3NycF9jYl9hcmcoY3R4LCAmc3JwX2NhbGxiYWNrX3Bhcm0pOyAgCQkJCisJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjayhjdHgsIHNzbF9zcnBfc2VydmVyX3BhcmFtX2NiKTsKKwkJfQorCWVsc2UKKyNlbmRpZgogCWlmIChDQWZpbGUgIT0gTlVMTCkKIAkJewogCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdChjdHgsU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGUoQ0FmaWxlKSk7CkBAIC0xODE2LDYgKzE5NTMsOSBAQAogCXVuc2lnbmVkIGxvbmcgbDsKIAlTU0wgKmNvbj1OVUxMOwogCUJJTyAqc2JpbzsKKyNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CisJS1NTTF9DVFggKmtjdHg7CisjZW5kaWYKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwogI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVRXQVJFKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX0JFT1NfUjUpCiAJc3RydWN0IHRpbWV2YWwgdHY7CkBAIC0xODU2LDEyICsxOTk2LDExIEBACiAJCX0KICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQkJaWYgKChjb24tPmtzc2xfY3R4ID0ga3NzbF9jdHhfbmV3KCkpICE9IE5VTEwpCisJCWlmICgoa2N0eCA9IGtzc2xfY3R4X25ldygpKSAhPSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKGNvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVklDRSwKLQkJCQkJCQkJS1JCNVNWQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcoY29uLT5rc3NsX2N0eCwgS1NTTF9LRVlUQUIsCi0JCQkJCQkJCUtSQjVLRVlUQUIpOworCQkJU1NMX3NldDBfa3NzbF9jdHgoY29uLCBrY3R4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtzc2xfY3R4X3NldHN0cmluZyhrY3R4LCBLU1NMX1NFUlZJQ0UsIEtSQjVTVkMpOworICAgICAgICAgICAgICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKGtjdHgsIEtTU0xfS0VZVEFCLCBLUkI1S0VZVEFCKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgkvKiBPUEVOU1NMX05PX0tSQjUgKi8KIAkJaWYoY29udGV4dCkKQEAgLTE5MjQsNyArMjA2Myw3IEBACiAKIAlpZiAoc19kZWJ1ZykKIAkJewotCQljb24tPmRlYnVnPTE7CisJCVNTTF9zZXRfZGVidWcoY29uLCAxKTsKIAkJQklPX3NldF9jYWxsYmFjayhTU0xfZ2V0X3JiaW8oY29uKSxiaW9fZHVtcF9jYWxsYmFjayk7CiAJCUJJT19zZXRfY2FsbGJhY2tfYXJnKFNTTF9nZXRfcmJpbyhjb24pLChjaGFyICopYmlvX3Nfb3V0KTsKIAkJfQpAQCAtMjA1Myw2ICsyMTkyLDE2IEBACiAJCQkJCWdvdG8gZXJyOwogCQkJCQl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisJCQkJaWYgKChidWZbMF0gPT0gJ0InKSAmJgorCQkJCQkoKGJ1ZlsxXSA9PSAnXG4nKSB8fCAoYnVmWzFdID09ICdccicpKSkKKwkJCQkJeworCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIkhFQVJUQkVBVElOR1xuIik7CisJCQkJCVNTTF9oZWFydGJlYXQoY29uKTsKKwkJCQkJaT0wOworCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlmCiAJCQkJaWYgKChidWZbMF0gPT0gJ3InKSAmJiAKIAkJCQkJKChidWZbMV0gPT0gJ1xuJykgfHwgKGJ1ZlsxXSA9PSAnXHInKSkpCiAJCQkJCXsKQEAgLTIwOTYsNiArMjI0NSwxOCBAQAogeyBzdGF0aWMgY291bnQ9MDsgaWYgKCsrY291bnQgPT0gMTAwKSB7IGNvdW50PTA7IFNTTF9yZW5lZ290aWF0ZShjb24pOyB9IH0KICNlbmRpZgogCQkJCWs9U1NMX3dyaXRlKGNvbiwmKGJ1ZltsXSksKHVuc2lnbmVkIGludClpKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJCQl3aGlsZSAoU1NMX2dldF9lcnJvcihjb24saykgPT0gU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVApCisJCQkJCXsKKwkJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCByZW5lZ28gZHVyaW5nIHdyaXRlXG4iKTsKKwkJCQkJc3JwX2NhbGxiYWNrX3Bhcm0udXNlciA9IFNSUF9WQkFTRV9nZXRfYnlfdXNlcihzcnBfY2FsbGJhY2tfcGFybS52Yiwgc3JwX2NhbGxiYWNrX3Bhcm0ubG9naW4pOyAKKwkJCQkJaWYgKHNycF9jYWxsYmFja19wYXJtLnVzZXIpIAorCQkJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBkb25lICVzXG4iLHNycF9jYWxsYmFja19wYXJtLnVzZXItPmluZm8pOworCQkJCQllbHNlIAorCQkJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxuIik7CisJCQkJCQlrPVNTTF93cml0ZShjb24sJihidWZbbF0pLCh1bnNpZ25lZCBpbnQpaSk7CisJCQkJCX0KKyNlbmRpZgogCQkJCXN3aXRjaCAoU1NMX2dldF9lcnJvcihjb24saykpCiAJCQkJCXsKIAkJCQljYXNlIFNTTF9FUlJPUl9OT05FOgpAQCAtMjE0Myw2ICsyMzA0LDE4IEBACiAJCQkJewogYWdhaW46CQogCQkJCWk9U1NMX3JlYWQoY29uLChjaGFyICopYnVmLGJ1ZnNpemUpOworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCQkJCXdoaWxlIChTU0xfZ2V0X2Vycm9yKGNvbixpKSA9PSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCkKKwkJCQkJeworCQkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiTE9PS1VQIHJlbmVnbyBkdXJpbmcgcmVhZFxuIik7CisJCQkJCXNycF9jYWxsYmFja19wYXJtLnVzZXIgPSBTUlBfVkJBU0VfZ2V0X2J5X3VzZXIoc3JwX2NhbGxiYWNrX3Bhcm0udmIsIHNycF9jYWxsYmFja19wYXJtLmxvZ2luKTsgCisJCQkJCWlmIChzcnBfY2FsbGJhY2tfcGFybS51c2VyKSAKKwkJCQkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJMT09LVVAgZG9uZSAlc1xuIixzcnBfY2FsbGJhY2tfcGFybS51c2VyLT5pbmZvKTsKKwkJCQkJZWxzZSAKKwkJCQkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJMT09LVVAgbm90IHN1Y2Nlc3NmdWxcbiIpOworCQkJCQlpPVNTTF9yZWFkKGNvbiwoY2hhciAqKWJ1ZixidWZzaXplKTsKKwkJCQkJfQorI2VuZGlmCiAJCQkJc3dpdGNoIChTU0xfZ2V0X2Vycm9yKGNvbixpKSkKIAkJCQkJewogCQkJCWNhc2UgU1NMX0VSUk9SX05PTkU6CkBAIC0yMTU1LDcgKzIzMjgsNiBAQAogCQkJCQlicmVhazsKIAkJCQljYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgogCQkJCWNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKLQkJCQljYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgogCQkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiUmVhZCBCTE9DS1xuIik7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CkBAIC0yMjEwLDEyICsyMzgyLDMwIEBACiAJWDUwOSAqcGVlcjsKIAlsb25nIHZlcmlmeV9lcnJvcjsKIAlNU19TVEFUSUMgY2hhciBidWZbQlVGU0laXTsKKyNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CisJY2hhciAqY2xpZW50X3ByaW5jOworI2VuZGlmCiAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHRfcHJvdG9fbmVnOwogCXVuc2lnbmVkIG5leHRfcHJvdG9fbmVnX2xlbjsKICNlbmRpZgorCXVuc2lnbmVkIGNoYXIgKmV4cG9ydGVka2V5bWF0OwogCi0JaWYgKChpPVNTTF9hY2NlcHQoY29uKSkgPD0gMCkKKworCWk9U1NMX2FjY2VwdChjb24pOworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCXdoaWxlIChpIDw9IDAgJiYgIFNTTF9nZXRfZXJyb3IoY29uLGkpID09IFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQKSAKKwkJeworCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBkdXJpbmcgYWNjZXB0ICVzXG4iLHNycF9jYWxsYmFja19wYXJtLmxvZ2luKTsKKwkJCXNycF9jYWxsYmFja19wYXJtLnVzZXIgPSBTUlBfVkJBU0VfZ2V0X2J5X3VzZXIoc3JwX2NhbGxiYWNrX3Bhcm0udmIsIHNycF9jYWxsYmFja19wYXJtLmxvZ2luKTsgCisJCQlpZiAoc3JwX2NhbGxiYWNrX3Bhcm0udXNlcikgCisJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBkb25lICVzXG4iLHNycF9jYWxsYmFja19wYXJtLnVzZXItPmluZm8pOworCQkJZWxzZSAKKwkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiTE9PS1VQIG5vdCBzdWNjZXNzZnVsXG4iKTsKKwkJCWk9U1NMX2FjY2VwdChjb24pOworCQl9CisjZW5kaWYKKwlpZiAoaSA8PSAwKQogCQl7CiAJCWlmIChCSU9fc29ja19zaG91bGRfcmV0cnkoaSkpCiAJCQl7CkBAIC0yMjYyLDE5ICsyNDUyLDU4IEBACiAJCUJJT19wcmludGYoYmlvX3Nfb3V0LCAiXG4iKTsKIAkJfQogI2VuZGlmCi0JaWYgKGNvbi0+aGl0KSBCSU9fcHJpbnRmKGJpb19zX291dCwiUmV1c2VkIHNlc3Npb24taWRcbiIpOworCXsKKwlTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqc3J0cF9wcm9maWxlCisJICA9IFNTTF9nZXRfc2VsZWN0ZWRfc3J0cF9wcm9maWxlKGNvbik7CisKKwlpZihzcnRwX3Byb2ZpbGUpCisJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJTUlRQIEV4dGVuc2lvbiBuZWdvdGlhdGVkLCBwcm9maWxlPSVzXG4iLAorCQkJICAgc3J0cF9wcm9maWxlLT5uYW1lKTsKKwl9CisJaWYgKFNTTF9jYWNoZV9oaXQoY29uKSkgQklPX3ByaW50ZihiaW9fc19vdXQsIlJldXNlZCBzZXNzaW9uLWlkXG4iKTsKIAlpZiAoU1NMX2N0cmwoY29uLFNTTF9DVFJMX0dFVF9GTEFHUywwLE5VTEwpICYKIAkJVExTMV9GTEFHU19UTFNfUEFERElOR19CVUcpCi0JCUJJT19wcmludGYoYmlvX3Nfb3V0LCJQZWVyIGhhcyBpbmNvcnJlY3QgVExTdjEgYmxvY2sgcGFkZGluZ1xuIik7CisJCUJJT19wcmludGYoYmlvX3Nfb3V0LAorCQkJICAgIlBlZXIgaGFzIGluY29ycmVjdCBUTFN2MSBibG9jayBwYWRkaW5nXG4iKTsKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1Ci0JaWYgKGNvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmluYyAhPSBOVUxMKQorCWNsaWVudF9wcmluYyA9IGtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jKFNTTF9nZXQwX2tzc2xfY3R4KGNvbikpOworCWlmIChjbGllbnRfcHJpbmMgIT0gTlVMTCkKIAkJewogCQlCSU9fcHJpbnRmKGJpb19zX291dCwiS2VyYmVyb3MgcGVlciBwcmluY2lwYWwgaXMgJXNcbiIsCi0JCQljb24tPmtzc2xfY3R4LT5jbGllbnRfcHJpbmMpOworCQkJCQkJCQljbGllbnRfcHJpbmMpOwogCQl9CiAjZW5kaWYgLyogT1BFTlNTTF9OT19LUkI1ICovCiAJQklPX3ByaW50ZihiaW9fc19vdXQsICJTZWN1cmUgUmVuZWdvdGlhdGlvbiBJUyVzIHN1cHBvcnRlZFxuIiwKIAkJICAgICAgU1NMX2dldF9zZWN1cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0KGNvbikgPyAiIiA6ICIgTk9UIik7CisJaWYgKGtleW1hdGV4cG9ydGxhYmVsICE9IE5VTEwpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fc19vdXQsICJLZXlpbmcgbWF0ZXJpYWwgZXhwb3J0ZXI6XG4iKTsKKwkJQklPX3ByaW50ZihiaW9fc19vdXQsICIgICAgTGFiZWw6ICclcydcbiIsIGtleW1hdGV4cG9ydGxhYmVsKTsKKwkJQklPX3ByaW50ZihiaW9fc19vdXQsICIgICAgTGVuZ3RoOiAlaSBieXRlc1xuIiwKKwkJCSAgIGtleW1hdGV4cG9ydGxlbik7CisJCWV4cG9ydGVka2V5bWF0ID0gT1BFTlNTTF9tYWxsb2Moa2V5bWF0ZXhwb3J0bGVuKTsKKwkJaWYgKGV4cG9ydGVka2V5bWF0ICE9IE5VTEwpCisJCQl7CisJCQlpZiAoIVNTTF9leHBvcnRfa2V5aW5nX21hdGVyaWFsKGNvbiwgZXhwb3J0ZWRrZXltYXQsCisJCQkJCQkgICAgICAgIGtleW1hdGV4cG9ydGxlbiwKKwkJCQkJCSAgICAgICAga2V5bWF0ZXhwb3J0bGFiZWwsCisJCQkJCQkgICAgICAgIHN0cmxlbihrZXltYXRleHBvcnRsYWJlbCksCisJCQkJCQkgICAgICAgIE5VTEwsIDAsIDApKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwgIiAgICBFcnJvclxuIik7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwgIiAgICBLZXlpbmcgbWF0ZXJpYWw6ICIpOworCQkJCWZvciAoaT0wOyBpPGtleW1hdGV4cG9ydGxlbjsgaSsrKQorCQkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwgIiUwMlgiLAorCQkJCQkJICAgZXhwb3J0ZWRrZXltYXRbaV0pOworCQkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCAiXG4iKTsKKwkJCQl9CisJCQlPUEVOU1NMX2ZyZWUoZXhwb3J0ZWRrZXltYXQpOworCQkJfQorCQl9CisKIAlyZXR1cm4oMSk7CiAJfQogCkBAIC0yMjkyLDYgKzI1MjEsOSBAQAogCXJldHVybihyZXQpOwogCX0KICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKKwljaGFyICpjbGllbnRfcHJpbmM7CisjZW5kaWYKIAogI2lmIDAKIHN0YXRpYyBpbnQgbG9hZF9DQShTU0xfQ1RYICpjdHgsIGNoYXIgKmZpbGUpCkBAIC0yMzIyLDYgKzI1NTQsOSBAQAogCVNTTCAqY29uOwogCWNvbnN0IFNTTF9DSVBIRVIgKmM7CiAJQklPICppbywqc3NsX2Jpbywqc2JpbzsKKyNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CisJS1NTTF9DVFggKmtjdHg7CisjZW5kaWYKIAogCWJ1Zj1PUEVOU1NMX21hbGxvYyhidWZzaXplKTsKIAlpZiAoYnVmID09IE5VTEwpIHJldHVybigwKTsKQEAgLTIzNTMsMTAgKzI1ODgsMTAgQEAKIAkJCX0KICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKLQlpZiAoKGNvbi0+a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKSkgIT0gTlVMTCkKKwlpZiAoKGtjdHggPSBrc3NsX2N0eF9uZXcoKSkgIT0gTlVMTCkKIAkJewotCQlrc3NsX2N0eF9zZXRzdHJpbmcoY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWSUNFLCBLUkI1U1ZDKTsKLQkJa3NzbF9jdHhfc2V0c3RyaW5nKGNvbi0+a3NzbF9jdHgsIEtTU0xfS0VZVEFCLCBLUkI1S0VZVEFCKTsKKwkJa3NzbF9jdHhfc2V0c3RyaW5nKGtjdHgsIEtTU0xfU0VSVklDRSwgS1JCNVNWQyk7CisJCWtzc2xfY3R4X3NldHN0cmluZyhrY3R4LCBLU1NMX0tFWVRBQiwgS1JCNUtFWVRBQik7CiAJCX0KICNlbmRpZgkvKiBPUEVOU1NMX05PX0tSQjUgKi8KIAlpZihjb250ZXh0KSBTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dChjb24sIGNvbnRleHQsCkBAIC0yMzgyLDcgKzI2MTcsNyBAQAogCiAJaWYgKHNfZGVidWcpCiAJCXsKLQkJY29uLT5kZWJ1Zz0xOworCQlTU0xfc2V0X2RlYnVnKGNvbiwgMSk7CiAJCUJJT19zZXRfY2FsbGJhY2soU1NMX2dldF9yYmlvKGNvbiksYmlvX2R1bXBfY2FsbGJhY2spOwogCQlCSU9fc2V0X2NhbGxiYWNrX2FyZyhTU0xfZ2V0X3JiaW8oY29uKSwoY2hhciAqKWJpb19zX291dCk7CiAJCX0KQEAgLTIzOTcsNyArMjYzMiwxOCBAQAogCQlpZiAoaGFjaykKIAkJCXsKIAkJCWk9U1NMX2FjY2VwdChjb24pOwotCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJCQl3aGlsZSAoaSA8PSAwICYmICBTU0xfZ2V0X2Vycm9yKGNvbixpKSA9PSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCkgCisJCXsKKwkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJMT09LVVAgZHVyaW5nIGFjY2VwdCAlc1xuIixzcnBfY2FsbGJhY2tfcGFybS5sb2dpbik7CisJCQlzcnBfY2FsbGJhY2tfcGFybS51c2VyID0gU1JQX1ZCQVNFX2dldF9ieV91c2VyKHNycF9jYWxsYmFja19wYXJtLnZiLCBzcnBfY2FsbGJhY2tfcGFybS5sb2dpbik7IAorCQkJaWYgKHNycF9jYWxsYmFja19wYXJtLnVzZXIpIAorCQkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJMT09LVVAgZG9uZSAlc1xuIixzcnBfY2FsbGJhY2tfcGFybS51c2VyLT5pbmZvKTsKKwkJCWVsc2UgCisJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxuIik7CisJCQlpPVNTTF9hY2NlcHQoY29uKTsKKwkJfQorI2VuZGlmCiAJCQlzd2l0Y2ggKFNTTF9nZXRfZXJyb3IoY29uLGkpKQogCQkJCXsKIAkJCWNhc2UgU1NMX0VSUk9SX05PTkU6CkBAIC0yNTAzLDcgKzI3NDksNyBAQAogCQkJCQl9CiAJCQkJQklPX3B1dHMoaW8sIlxuIik7CiAJCQkJfQotCQkJQklPX3ByaW50ZihpbywoKGNvbi0+aGl0KQorCQkJQklPX3ByaW50ZihpbywoU1NMX2NhY2hlX2hpdChjb24pCiAJCQkJPyItLS1cblJldXNlZCwgIgogCQkJCToiLS0tXG5OZXcsICIpKTsKIAkJCWM9U1NMX2dldF9jdXJyZW50X2NpcGhlcihjb24pOwpkaWZmIC0tZ2l0IGEvYXBwcy9zX3NvY2tldC5jIGIvYXBwcy9zX3NvY2tldC5jCmluZGV4IGMwODU0NGEuLjM4MGVmZGIgMTAwNjQ0Ci0tLSBhL2FwcHMvc19zb2NrZXQuYworKysgYi9hcHBzL3Nfc29ja2V0LmMKQEAgLTIzOCwxMSArMjM4LDEwIEBACiAJewogCXVuc2lnbmVkIGNoYXIgaXBbNF07CiAKKwltZW1zZXQoaXAsICdcMCcsIHNpemVvZiBpcCk7CiAJaWYgKCFob3N0X2lwKGhvc3QsJihpcFswXSkpKQotCQl7Ci0JCXJldHVybigwKTsKLQkJfQotCXJldHVybihpbml0X2NsaWVudF9pcChzb2NrLGlwLHBvcnQsdHlwZSkpOworCQlyZXR1cm4gMDsKKwlyZXR1cm4gaW5pdF9jbGllbnRfaXAoc29jayxpcCxwb3J0LHR5cGUpOwogCX0KIAogc3RhdGljIGludCBpbml0X2NsaWVudF9pcChpbnQgKnNvY2ssIHVuc2lnbmVkIGNoYXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSkKZGlmZiAtLWdpdCBhL2FwcHMvc2VydmVyLnBlbSBiL2FwcHMvc2VydmVyLnBlbQppbmRleCA1NjI0OGU1Li5kMGZjMjY1IDEwMDY0NAotLS0gYS9hcHBzL3NlcnZlci5wZW0KKysrIGIvYXBwcy9zZXJ2ZXIucGVtCkBAIC0xLDM2OSArMSw1MiBAQAotaXNzdWVyPSAvQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049VGVzdCBDQSAoMTAyNCBiaXQpCi1zdWJqZWN0PSAvQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049U2VydmVyIHRlc3QgY2VydCAoNTEyIGJpdCkKK3N1YmplY3Q9IEMgPSBVSywgTyA9IE9wZW5TU0wgR3JvdXAsIE9VID0gRk9SIFRFU1RJTkcgUFVSUE9TRVMgT05MWSwgQ04gPSBUZXN0IFNlcnZlciBDZXJ0Citpc3N1ZXI9IEMgPSBVSywgTyA9IE9wZW5TU0wgR3JvdXAsIE9VID0gRk9SIFRFU1RJTkcgUFVSUE9TRVMgT05MWSwgQ04gPSBPcGVuU1NMIFRlc3QgSW50ZXJtZWRpYXRlIENBCiAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI2VENDQVZJQ0FRWXdEUVlKS29aSWh2Y05BUUVFQlFBd1d6RUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlYKLUJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJzd0dRWUQKLVZRUURFeEpVWlhOMElFTkJJQ2d4TURJMElHSnBkQ2t3SGhjTk1EQXhNREUyTWpJek1UQXpXaGNOTURNd01URTAKLU1qSXpNVEF6V2pCak1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVVhWbFpXNXpiR0Z1WkRFYU1CZ0cKLUExVUVDaE1SUTNKNWNIUlRiMlowSUZCMGVTQk1kR1F4SXpBaEJnTlZCQU1UR2xObGNuWmxjaUIwWlhOMElHTmwKLWNuUWdLRFV4TWlCaWFYUXBNRnd3RFFZSktvWklodmNOQVFFQkJRQURTd0F3U0FKQkFKK3p3NFFubGY4U01WSVAKLUZlOUdFY1N0Z09ZMld3L2RnTmRoamVEOGNrVUpOUDVWWmtWRFRHaVhhdjZvb0tYZlgzai83dGRrdUQ4RXkyLy8KLUt2Nyt1ZTBDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUVFGQUFPQmdRQ1QwZ3JGUWVaYXFZYjVFWWZrMjBYaXhaVjQKLUdteUFiWE1mdEcxRW83cUdpTWhZelJ3R05XeEVZb2pmNVBaa1laWHZTcVovWlhIWGE0ZzU5aksvckpObmFWR00KLWsreElYOG14UXZsVjBuNU85UEloYTVCWDV0ZVpua0hLZ0w4YUtLTEtXMUJLN1lUbmdzZlN6emFlYW1lNWlLZnoKLWl0QUUrT2pHRitQRktid1g4UT09CitNSUlENXpDQ0FzK2dBd0lCQWdJSkFMbnUxTmxWcFo2ek1BMEdDU3FHU0liM0RRRUJCUVVBTUhBeEN6QUpCZ05WCitCQVlUQWxWTE1SWXdGQVlEVlFRS0RBMVBjR1Z1VTFOTUlFZHliM1Z3TVNJd0lBWURWUVFMREJsR1QxSWdWRVZUCitWRWxPUnlCUVZWSlFUMU5GVXlCUFRreFpNU1V3SXdZRFZRUUREQnhQY0dWdVUxTk1JRlJsYzNRZ1NXNTBaWEp0CitaV1JwWVhSbElFTkJNQjRYRFRFeE1USXdPREUwTURFME9Gb1hEVEl4TVRBeE5qRTBNREUwT0Zvd1pERUxNQWtHCitBMVVFQmhNQ1ZVc3hGakFVQmdOVkJBb01EVTl3Wlc1VFUwd2dSM0p2ZFhBeElqQWdCZ05WQkFzTUdVWlBVaUJVCitSVk5VU1U1SElGQlZVbEJQVTBWVElFOU9URmt4R1RBWEJnTlZCQU1NRUZSbGMzUWdVMlZ5ZG1WeUlFTmxjblF3CitnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEemhQT1NOdHl5UnNwbWV1VXB4Zk5KCitLQ0xUdWY3ZzN1UTR6dTRpSE9tUk81VFFjaStIaFZsTFpySEY5WHFGWGNJUDB5NHBXRGJNU0d1aW9yVW16bWZpCitSN2JmU2RJLytxSVF0OEtYUkg2SE5HMXQ4b3UwVlN2V0lkNVRTNURxL2VyNU9EVXI5T2FhRHZhN0VxdUhJY012Cit2UFFHdUkrT0VBY25sZVZDeTlIVkVJeVNyTzRQM0NOSWljbkdrd3dpQXVkMDV5VUFxL2dQWEJDMWhUdG1sUEQ3CitUVmNHVlNFaUpkdnpxcWxndjAycWVkR3Jra2k2R1k0UzdHalp4cnJmN0ZvYzJFUCs1MUxKendMUXgzL0pmckNVCis0MU5FV0FzdS9TbDB0UWFiWEVTTit6SjFwRHFvWjN1SE1ncFFqZUdpRTBvbHIrWWNzU1cvdEptaVU5T2lBcjhSCitBZ01CQUFHamdZOHdnWXd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQmVBd0xBWUpZSVpJCitBWWI0UWdFTkJCOFdIVTl3Wlc1VFUwd2dSMlZ1WlhKaGRHVmtJRU5sY25ScFptbGpZWFJsTUIwR0ExVWREZ1FXCitCQlNDdk04QUFCUFI5emtsbWlmbnI5THZJQnR1ckRBZkJnTlZIU01FR0RBV2dCUTJ3MnlJNTVYK3NMM3N6ajQ5CitocXNoZ1lmYTJqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFxYjFOVjBCMC9wYnBLOVo0L2JOanpQUUxUUkxLCitXblNObS9KaDV2MEdFVU9FL0JlZzdHTmpOcm1lTm1xeEFscHFXejlxb2VvRlpheCtRQnBJWllqUk9VM1RTM2ZwCit5THNybmxyMENEUTVSN2tDQ0RHYThka1h4ZW1tcFpaTGJVQ3BXMlVveThzQUE0SmpOOU90c1pZN2R2VVhGZ0o3Cit2Vk5UUm5JMDFnaGtuYnREKzJTeFNRZDNDV0Y2UWhjUk1BelpKMXoxY2Jid0dERHpmdkdGUHpKK1NxK3pFUGRzCit4b1ZMTFNldENpQmMrNDBaY0RTNWRWOThoOVhEN0pNVFFmeHpBN21OR3Y3M0pvWkpBNm5GZ2orQURTbEpzWS90CitKQnYrejFpUVJ1ZW9oOVFlZWUrWmJSaWZQb3VDQjhGRHgrQWx0dkhUQU5kQXEwdC9LM28rcHBsTVZBPT0KIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KIC0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUJQQUlCQUFKQkFKK3p3NFFubGY4U01WSVBGZTlHRWNTdGdPWTJXdy9kZ05kaGplRDhja1VKTlA1VlprVkQKLVRHaVhhdjZvb0tYZlgzai83dGRrdUQ4RXkyLy9LdjcrdWUwQ0F3RUFBUUpBTjZXMzF2REVQMkRqZHFoekNERHUKLU9BNE5BQ3FvaUZxeWJsbzd5YzJ0TTRoNHhNYkMzWXg1VUtNTjlaa0N0WDBnenJ6NkR5RjQ3YmRLY1dCek5XQ2oKLWdRSWhBTkVvb2pWdDdocStTUTZNQ042RlRBeXNHZ1FmNTZRM1RZb0pNb1d2ZGlYVkFpRUF3M2UzcmMrVkpwT3oKLXJIdURvNmJncGpVQUFYTSt2M2ZjcHNmWlNOTzZWN2tDSVFDdGJWamFucFV3dlprTUk5YnkwMm9Vazl0YWtpM2IKLVB6UGZBZk5QWUFiQ0pRSWhBSlhOUURXeXF3bi9sR21SMTFjcVkyeTluWjErNXczeUhHYXRMcmNEblFIeEFpRUEKLXZubEVHbzhLODV1K0t3SU9pbU00OFpHOG9UazdpRmRrcUxKUjF1dFQzYVU9CitNSUlFcEFJQkFBS0NBUUVBODRUemtqYmNza2JLWm5ybEtjWHpTU2dpMDduKzRON2tPTTd1SWh6cGtUdVUwSEl2CitoNFZaUzJheHhmVjZoVjNDRDlNdUtWZzJ6RWhyb3FLMUpzNW40a2UyMzBuU1AvcWlFTGZDbDBSK2h6UnRiZktMCit0RlVyMWlIZVUwdVE2djNxK1RnMUsvVG1tZzcydXhLcmh5SERMN3owQnJpUGpoQUhKNVhsUXN2UjFSQ01rcXp1CitEOXdqU0luSnhwTU1JZ0xuZE9jbEFLdjREMXdRdFlVN1pwVHcrMDFYQmxVaElpWGI4NnFwWUw5TnFublJxNUpJCit1aG1PRXV4bzJjYTYzK3hhSE5oRC91ZFN5YzhDME1kL3lYNndsT05UUkZnTEx2MHBkTFVHbTF4RWpmc3lkYVE2CitxR2Q3aHpJS1VJM2hvaE5LSmEvbUhMRWx2N1Nab2xQVG9nSy9FUUlEQVFBQkFvSUJBQURxOUZ3TnR1RTVJUlFuCit6R3RPNHE3WTV1Q3paOEdETllyOVJLcCtQMmNidVdEYnZWQWVjWXEyTlY5UW9JaVdKT0FZWktrbE92ZWtJanUzCityMFVaTEEwUFJpSXJUZzZOckVTeDNKcmpXREs4UU5sVU83Q1BUWjM5L0srRnJtTWtWOWxlbTl5eGpKanlDMzRECitBUUIrWVJUeCtsMTRIcHBqZHhOd0hqQVZRcEl4L3VPMkY1eEFNdWszMiszSytwcTlDWlV0cm9mZTFxNEFnajlSCis1czhtU3k5cGJSbzlrVzl3bDV4ZEVvdHoxTGl2Rk9FaXFQVUpUVXE1SjVQZU1LYW8zdmRLNzI2WEk0WjQ1NU5tCitXMi9NQTBZVjB1ZzJGWWluSGNaZHZLTTZkaW1IOEdMZmEzWDh4S1JmempHalRpTVN3c2RqZ01hNGF3WTN0RUhICis2NzRqaEFFQ2dZRUEvenFNcmMwenNiTms4M3NqZ2FZSXVnNWt6RXBONGljMDIwclNac21ReFNDZXJKVGdOaG1nCit1dEtTQ3QwUmUwOUp0M0xxRzQ4bXNhaFg4eWNxRHNITnZsRUdQUVNiTXU5SVllTzNXcjNmQW03NUdFdEZXZVBZCitCaE03M0k3Z2tSdDRzOGJVaVVlcE1HL3dZNDVjNXRSRjIzeGk4Zm9SZUhGRmU5TUR6aDhmSkZFQ2dZRUE5RUZYCis0cUFpazFwT0pHTmVpOUJNd214MEkwZ2ZWRUlndTB0emVWcVQ0NXZjeGJ4cjdSa1RFYURvQUc2UGxiV1A2RDlhCitXUU5McDRnc2dSTTkwWlhPSjR1cDVEc0FXRGx1dmFGNC9vbWFiTUErTUpKNWtHWjBnQ2o1cmJaYktxVXdzN3g4CiticCs2aUJmVVBKVWJjcU5xRm1pLzA4WXQ3dnJEbk1ueU13MkEvc0VDZ1lFQWlpdVJNeG51elZtMzRoUWNzYmhICis2eW1WcWY3ajBQVzJxSzBGNEgxb2NUOXFoeldGZCtSQjNrSFdyQ2pucU9EUW9JNkdiR3IvNEplcEhVcHJlMWV4Cis0VUVONW9TUzNHMHJ1MHJDM1U0QzU5ZFo1S3dESEZtN2ZmWjFwcjUybGpmUURVc3JqaklNUnR1aXdOSzJPb1JhCitXU3NxaWFMK1NEelNCK25CbXBuQWl6RUNnWUJkdC95NnJlcldVeDRNaER3d3RUbmVsN0p3SHlvMk1ERlM2LzVnCituOHFDMkxqNi9mTURSRTIydytDQTJlc3A3RUpOUUpHditiMjdpRnBiSkVEaCsvTGY1WXpJVDRNd1Zza1E1YllCCitKRmNtUnhVVm1mNGUwOUQ3bzcwNVUvRGpDZ01IMDlpQ3NiTG1xUTM4T05JUlNIWmFKdE1EdE5USEQxeWkrakYrCitPVDQzZ1FLQmdRQy8yT0hab2tvNmlSbE5PQVEvdE1WRk5xN2ZMODFHaXZvUTlGMVUwUXIrREgzWmZhSDhlSWtYCit4VDBUb01QSlV6V0FuOHBadjBzbkEwdW02U0lndmtDdXhPODRPa0FOQ1ZidHR6WEltSXNMN3BGemZjd1YvRVJLCitVTTZqMFp1U01GT0NyL2xHUEFvT1FVMGZza2lkR0VIaTEva1crc3VTcjI4VHFzeVlacHdCRFE9PQogLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KLXN1YmplY3Q9L0M9VVMvTz1BVCZUIEJlbGwgTGFib3JhdG9yaWVzL09VPVByb3RvdHlwZSBSZXNlYXJjaCBDQQotaXNzdWVyPSAvQz1VUy9PPUFUJlQgQmVsbCBMYWJvcmF0b3JpZXMvT1U9UHJvdG90eXBlIFJlc2VhcmNoIENBCi1ub3RCZWZvcmU9OTUwNDEzMjEwNjU2Wgotbm90QWZ0ZXIgPTk3MDQxMjIxMDY1NloKLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNDRENDQVhFQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd1RqRUxNQWtHQTFVRUJoTUNWVk14SHpBZEJnTlYKLUJBb1VGa0ZVSmxRZ1FtVnNiQ0JNWVdKdmNtRjBiM0pwWlhNeEhqQWNCZ05WQkFzVUZWQnliM1J2ZEhsd1pTQlMKLVpYTmxZWEpqYUNCRFFUQWVGdzA1TlRBME1UTXlNVEEyTlRaYUZ3MDVOekEwTVRJeU1UQTJOVFphTUU0eEN6QUoKLUJnTlZCQVlUQWxWVE1SOHdIUVlEVlFRS0ZCWkJWQ1pVSUVKbGJHd2dUR0ZpYjNKaGRHOXlhV1Z6TVI0d0hBWUQKLVZRUUxGQlZRY205MGIzUjVjR1VnVW1WelpXRnlZMmdnUTBFd2dad3dEUVlKS29aSWh2Y05BUUVCQlFBRGdZb0EKLU1JR0dBb0dBZWJPbWd0U0NsK3dDWVpjODZVR1llVExZOGNqbVcyUDBGTjhUb1QvdTJwRUNDb0Zkcmx5Y1gwT1IKLTN3dDBaaHBGWExWTmVEbkh3RUU5dmVOVWloN3BDTDJaQkZxb0lvUWtCMWxabVhSaVZ0akdvbno4QkxtL3FyRk0KLVlIYjBsbWUvT2wrczExOG13S1Z4bm42YlNBZUkvT1hLaExhVmRZWldrK2FFYXhFRGtWa0NBUTh3RFFZSktvWkkKLWh2Y05BUUVFQlFBRGdZRUFBWk1HMTRsWm1aOGJhaGthSGFUVjlkUWY0cDJGWmlRVEZ3SFA5WnlHc1hQQytMVDUKLWRHNWlUYVJteWpOSUpkUFdvaFpEbDk3a0FjaTc5YUJuZHZ1RXZSS09qTEhzM1dSR0JJd0VSbkFjblk5TXo4dS8KLXpJSEsyM1BqWVZ4R0dhWmQ2NjlPSndEMENZeXFIMjJISDluRlVHYW9KZHN2MzlDaFcwTlJkTEU5K3k4PQotLS0tLS1FTkQgWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi1pc3N1ZXI9IC9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi1zdWJqZWN0PS9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IENBICgxMDI0IGJpdCkKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ0pqQ0NBWThDQVFBd0RRWUpLb1pJaHZjTkFRRUVCUUF3WERFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVgotQkFnVENsRjFaV1Z1YzJ4aGJtUXhHakFZQmdOVkJBb1RFVU55ZVhCMFUyOW1kQ0JRZEhrZ1RIUmtNUnd3R2dZRAotVlFRREV4TlVaWE4wSUZCRFFTQW9NVEF5TkNCaWFYUXBNQjRYRFRrM01EWXdPVEV6TlRjME0xb1hEVEF4TURZdwotT1RFek5UYzBNMW93V3pFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWQotQmdOVkJBb1RFVU55ZVhCMFUyOW1kQ0JRZEhrZ1RIUmtNUnN3R1FZRFZRUURFeEpVWlhOMElFTkJJQ2d4TURJMAotSUdKcGRDa3dnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBS083bzh0MTE2VlA2Y2d5YlRzWgotRENaaHI5NW5ZbFp1eWEzYUNpMUlLb3p0cXdXbmpibURGSXJpT3FHRlByWlErbW9NRVRDOUQ1OWlSVy9kRlhTdgotMUY2NWthL1hZMmhMaDlleENDbzdYdVVjRHM1M1FwM2JJM0FtTXFIamd6RThvTzNhanlKQXpKa1RUT1VlY1FVMgotbXcvZ0k0dE1NMExxV01RUzdsdVR5NCt4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFNN2FjaHYzdgotaExRSmN2LzY1ZUdFcEJYTTQwWkRWb0ZRRkZKV2FZNXA4ODNIVHFMQjF4NEZkenNYSEgwUUtCVGNLcFd3cXl1NAotWURtM2ZiOG9EdWd3NzJiQ3pmeVpLL3pWWlBSL2hWbHFJL2Z2VTEwOVFvYys3b1B2SVhXa3k3MUhmY0s2WkJDQQotcTMwS0lxR00vdW9NNjBJTnE5N3FqRG1DSmFwYWdjTkJHUXM9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1NSUlDWFFJQkFBS0JnUUNqdTZQTGRkZWxUK25JTW0wN0dRd21ZYS9lWjJKV2JzbXQyZ290U0NxTTdhc0ZwNDI1Ci1neFNLNGpxaGhUNjJVUHBxREJFd3ZRK2ZZa1Z2M1JWMHI5UmV1Wkd2MTJOb1M0ZlhzUWdxTzE3bEhBN09kMEtkCi0yeU53SmpLaDQ0TXhQS0R0Mm84aVFNeVpFMHpsSG5FRk5wc1A0Q09MVEROQzZsakVFdTViazh1UHNRSURBUUFCCi1Bb0dBVlptcEZac0RaZnIwbDJTOXRMTHdwalJXTk9sS0FUUWtubzZxMldlc1QwZUdMUXVmVGNpWStjOHlwZlU2Ci1oeWlvOHI1aVVsL1ZoaGRqaEF0S3gxbVJwaW90ZnRIby9lWWY4cnRzcm5wck9uV0cwYldqTGp0SW9NYmN4R24yCi1KM2JONkxKbWJKTWpEczBlSjNLblR1NjQ2RjNuRFV3Mm9HQXdtcHpLWEExS0FQMENRUURSdlFoeGsyRDNQZWhzCi1Idkc2NjV1MnBCNWlwWVFuZ0VGbFpPN1JISlp6Sk9aRVdTTHV1TXFhRi83cFRmQTVqaUJ2V3FDZ0plQ1JSSW5MCi0yMXJ1NGRsUEFrRUF4OWpqN0JnS241VFluTW9CU1NlMGFmanNWOW9BcFZwTjFOYWNiMVlEdEN3eStzY3AzKytzCi1uRnhsdjk4d3hJbFNkcHdNVW4rQVVXZmppV1I3VHUvRy93SkJBSi9LandaSXJGVnhld1AweDJJTFlzVFJZTHp6Ci1NUzRQRHNPN0ZCK0kwaTdEYkJPaWZYUzJvTlNwZDNJMENOTXdyeEZuVUh6eW5wYk9TdFZmTjNaTDV3MENRUUNhCi1wd0ZhaHhCUmhrSktzeGhqb0ZKQlg5eWw3NUpvWTRXdm01VGJvOWloNlVKYVJ4M2txZmtOMTRMMkJLWWNzWmdiCi1LWTl2bURPWXk2aU5makRlV1RmSkFrQmtmUFViOG9USi9uU1A1ek42c3FHeFNZNGtyYzR4THhwUm14b0o4SEwyCi1YZmhxWGtUemJVMTNSWDlKSi9OWjh2UU45Vm0yTmh4UkdKb2NRa21jZFZ0SgotLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDWURDQ0FpQUNBZ0VvTUFrR0JTc09Bd0lOQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14TmpBMEJnTlZCQW9UCi1MVTVoZEdsdmJtRnNJRUZsY205dVlYVjBhV056SUdGdVpDQlRjR0ZqWlNCQlpHMXBibWx6ZEhKaGRHbHZiakVaCi1NQmNHQTFVRUN4TVFWR1Z6ZENCRmJuWnBjbTl1YldWdWRERWFNQmdHQTFVRUN4TVJSRk5UTFU1QlUwRXRVR2xzCi1iM1F0UTBFd0hoY05PVFl3TWpJMk1UWXpNalExV2hjTk9UY3dNakkxTVRZek1qUTFXakI4TVFzd0NRWURWUVFHCi1Fd0pWVXpFMk1EUUdBMVVFQ2hNdFRtRjBhVzl1WVd3Z1FXVnliMjVoZFhScFkzTWdZVzVrSUZOd1lXTmxJRUZrCi1iV2x1YVhOMGNtRjBhVzl1TVJrd0Z3WURWUVFMRXhCVVpYTjBJRVZ1ZG1seWIyNXRaVzUwTVJvd0dBWURWUVFMCi1FeEZFVTFNdFRrRlRRUzFRYVd4dmRDMURRVENCOGpBSkJnVXJEZ01DREFVQUE0SGtBRENCNEFKQkFNQS9zc0tiCi1oUE5VRzdabEFTZlZ3RUpVMjFPNU95Ri9peUJ6Z0hJMU84ZU9oSkdVWU84Y2M4d0RNalI1MDhNcjljcDZVaGwvCi1aQjdGVjVHa0xORW5SSFlDUVFEVUVhU2c0NVAycXJEd2l4VFJoRmhtV3o1TnZjNGxSRlEvNDJYUGNjaGlKQkxiCi1ibjNRSzc0VDJJeFkxeVkra0NOcThYcklxZjVmSkp6SUgwSi94VVAzQWhVQXNnMndzUUhmREdZay9CT1N1bFgzCi1mVmQwZ2VVQ1FRQ3pDRlVRQWgrWmtFbXA1ODA0Y3M2WldCaHJVQWZucmE4bEpJdFlvOXhQY1hnZElmTGZpYmNYCi1SNzFVc3lPNzdNUkQ3QjArQWcydHE3OTRJbGVDVmNFRU1Ba0dCU3NPQXdJTkJRQURMd0F3TEFJVVVheURmcmVSCi1ZaDJXZVU4Ni9wSE5ka1VDMUlnQ0ZFZnhlMWYwb01weEp5cko1WEl4VGk3dkdkb0sKLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBYNTA5IENFUlRJRklDQVRFLS0tLS0KLQotTUlJQ0dUQ0NBZGdDQXdDcVREQUpCZ1VyRGdNQ0RRVUFNSHd4Q3pBSkJnTlZCQVlUQWxWVE1UWXdOQVlEVlFRSwotRXkxT1lYUnBiMjVoYkNCQlpYSnZibUYxZEdsamN5QmhibVFnVTNCaFkyVWdRV1J0YVc1cGMzUnlZWFJwYjI0eAotR1RBWEJnTlZCQXNURUZSbGMzUWdSVzUyYVhKdmJtMWxiblF4R2pBWUJnTlZCQXNURVVSVFV5MU9RVk5CTFZCcAotYkc5MExVTkJNQjRYRFRrMk1EVXhOREUzTURFME1Wb1hEVGszTURVeE5ERTNNREUwTVZvd016RUxNQWtHQTFVRQotQmhNQ1FWVXhEekFOQmdOVkJBb1RCazFwYm1OdmJURVRNQkVHQTFVRUF4TUtSWEpwWXlCWmIzVnVaekNCOGpBSgotQmdVckRnTUNEQVVBQTRIa0FEQ0I0QUpCQUtiZkh6NnZFNnBYWE1UcHN3dEdVZWMydHZuZkxKVXNveEU5cXM0KwotT2JaWDdMbUx2cmFnTlBVZWlUSng3VU9XWjVEZkJqNmJYTGM4ZVluZTBsUDFnM0FDUVFEVUVhU2c0NVAycXJEdwotaXhUUmhGaG1XejVOdmM0bFJGUS80MlhQY2NoaUpCTGJibjNRSzc0VDJJeFkxeVkra0NOcThYcklxZjVmSkp6SQotSDBKL3hVUDNBaFVBc2cyd3NRSGZER1lrL0JPU3VsWDNmVmQwZ2VVQ1FRQ3pDRlVRQWgrWmtFbXA1ODA0Y3M2WgotV0JoclVBZm5yYThsSkl0WW85eFBjWGdkSWZMZmliY1hSNzFVc3lPNzdNUkQ3QjArQWcydHE3OTRJbGVDVmNFRQotTUFrR0JTc09Bd0lOQlFBRE1BQXdMUUlVV3N1dUpSRTNWVDR1ZVdrV01BSk1KYVpqajFFQ0ZRQ1lZMHpYNGJ6TQotTEM3b2JzckhEOFhBSEcrWlJHPT0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDVFRDQ0FiYWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVFGQURCTU1Rc3dDUVlEVlFRR0V3SkhRakVNCi1NQW9HQTFVRUNoTURWVU5NTVJnd0ZnWURWUVFMRXc5SlEwVXRWRVZNSUZCeWIycGxZM1F4RlRBVEJnTlZCQU1UCi1ERlJ5ZFhOMFJtRmpkRzl5ZVRBZUZ3MDVOekEwTWpJeE5ETTVNVFJhRncwNU9EQTBNakl4TkRNNU1UUmFNRXd4Ci1DekFKQmdOVkJBWVRBa2RDTVF3d0NnWURWUVFLRXdOVlEwd3hHREFXQmdOVkJBc1REMGxEUlMxVVJVd2dVSEp2Ci1hbVZqZERFVk1CTUdBMVVFQXhNTVZISjFjM1JHWVdOMGIzSjVNSUdjTUFvR0JGVUlBUUVDQWdRQUE0R05BRENCCi1pUUtCZ1FDRWllUjhOY1hrVVcxZjBHNmFDNnUwaThxLzk4SnFTNlJ4SzVZbUhJR0tDa3VUV0FVanpMZlVhNGR0Ci1VOWlnR0NqVHV4YURxbHpFaW0rdC8wMnBtaUJaVDlIYVgrKzM1TWpRUFVXbXNDaGNZVTVXeXpHRXJYaStyUWF3Ci16bHdTNzN6TThxaVBqLzk3bFhZeWNXaGdMMFZhaURTUHhSWEVVZFdvYUdydW9tNG1OUUlEQVFBQm8wSXdRREFkCi1CZ05WSFE0RUZnUVVIYWwxTFpyN29WZzV6NmxZenJoVGdaUkNtY1V3RGdZRFZSMFBBUUgvQkFRREFnSDJNQThHCi1BMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUVCUUFEZ1lFQWZhZ2dmbDZGWm9pb2VjanYwZHE4Ci0vRFhvL3UxMWlNWnZYbjA4Z2pYL3psMmI0d3RQYlNoT1NZNUZoa1NtOEdleVNhc3orL053Yi91emZuSWhva1dpCi1sZlBaSHRsQ1d0WGJJeS9UTjUxZUp5cTA0Y2VEQ1FEV3ZMQzJlblZnOUtCK0dKMzRiNWM1VmFQUnpxOE1CeHNBCi1TN0VMdVlHdG1ZZ1ltOU5aT0lyN3lVMD0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQjZqQ0NBWlFDQWdFdE1BMEdDU3FHU0liM0RRRUJCQVVBTUlHQU1Rc3dDUVlEVlFRR0V3SlZVekUyTURRRwotQTFVRUNoTXRUbUYwYVc5dVlXd2dRV1Z5YjI1aGRYUnBZM01nWVc1a0lGTndZV05sSUVGa2JXbHVhWE4wY21GMAotYVc5dU1Sa3dGd1lEVlFRTEV4QlVaWE4wSUVWdWRtbHliMjV0Wlc1ME1SNHdIQVlEVlFRTEV4Vk5SRFV0VWxOQgotTFU1QlUwRXRVR2xzYjNRdFEwRXdIaGNOT1RZd05ETXdNakl3TlRBd1doY05PVGN3TkRNd01qSXdOVEF3V2pDQgotZ0RFTE1Ba0dBMVVFQmhNQ1ZWTXhOakEwQmdOVkJBb1RMVTVoZEdsdmJtRnNJRUZsY205dVlYVjBhV056SUdGdQotWkNCVGNHRmpaU0JCWkcxcGJtbHpkSEpoZEdsdmJqRVpNQmNHQTFVRUN4TVFWR1Z6ZENCRmJuWnBjbTl1YldWdQotZERFZU1Cd0dBMVVFQ3hNVlRVUTFMVkpUUVMxT1FWTkJMVkJwYkc5MExVTkJNRmt3Q2dZRVZRZ0JBUUlDQWdBRAotU3dBd1NBSkJBTG1tWDUrR3FBdmNyV0sxM3JmRHJOWDlVZmVBN2YraWp5QmdlRlFqWVVvRHBGcWFwdzRuelFCTAotYkFYdWc4cEtrUndhMlpoOFlPRGhYc1JXdTJGL1Vja0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRUUZBQU5CQUg5YQotT0JBK1FDc2p4WGduU3FIeDA0Z2NVOFM0OURWVWIxZjJYVm9MbkhsSWI4Um5YMGs1TzZtcEhUNWV0aTliTGtpVwotR0pOTUo0TDBBSi9hYytTbUhaYz0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ2FqQ0NBZE1DQkRHQTBRVXdEUVlKS29aSWh2Y05BUUVFQlFBd2ZURUxNQWtHQTFVRUJoTUNRMkV4RHpBTgotQmdOVkJBY1RCazVsY0dWaGJqRWVNQndHQTFVRUN4TVZUbThnVEdsaFltbHNhWFI1SUVGalkyVndkR1ZrTVI4dwotSFFZRFZRUUtFeFpHYjNJZ1JHVnRieUJRZFhKd2IzTmxjeUJQYm14NU1Sd3dHZ1lEVlFRREV4TkZiblJ5ZFhOMAotSUVSbGJXOGdWMlZpSUVOQk1CNFhEVGsyTURReU5qRXpNelV3TVZvWERUQTJNRFF5TmpFek16VXdNVm93ZlRFTAotTUFrR0ExVUVCaE1DUTJFeER6QU5CZ05WQkFjVEJrNWxjR1ZoYmpFZU1Cd0dBMVVFQ3hNVlRtOGdUR2xoWW1scwotYVhSNUlFRmpZMlZ3ZEdWa01SOHdIUVlEVlFRS0V4WkdiM0lnUkdWdGJ5QlFkWEp3YjNObGN5QlBibXg1TVJ3dwotR2dZRFZRUURFeE5GYm5SeWRYTjBJRVJsYlc4Z1YyVmlJRU5CTUlHZE1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTAotQURDQmh3S0JnUUNhcm9TN08xREEwaG00SWVmTllVMWN4L25xT216RW5rMjkxZDFYcXpuRGVGNHdFZ2FrYmtDYwotelRLeEs3OTF5TnBYRzVSbW5ncUg3Y3lnRFJUSFpKNm1mQ1JuMHdHQytBSTAwRjJ2WVRHcVBHUlFMMU4zbFpUMAotWURLRkMwU1FlTU1qRklaMWFlUWlncm9GUW5IbzBWQjN6V0lNcE5ra2E4UFk5bHhIWkFtV3dRSUJBekFOQmdrcQotaGtpRzl3MEJBUVFGQUFPQmdRQkF4MFVNVkExczU0bE1ReVhqTVg1a2o5OUZKTjVpdGI4YksxUmsrY2VnUFFQRgotY1dPOVNFV3lFampCaklramp6QXdCa2FFc3pGc05HeGVteHRYdndqSW0xeEVVTVRWbFBFV1RzMnFuRHZBVUE5VwotWXFoV2JoSDB0b0dUMzYyMzZRQXNxQ1o3NnJiVFJWU1NYMkJIeUp3Sk1HMnRDUnY3a1JKLy9OSWd4ajNINHc9PQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi1pc3N1ZXI9IC9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi1zdWJqZWN0PS9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNKekNDQVpBQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd1hERUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlYKLUJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJ3d0dnWUQKLVZRUURFeE5VWlhOMElGQkRRU0FvTVRBeU5DQmlhWFFwTUI0WERUazNNRFl3T1RFek5UY3pOMW9YRFRBeE1EWXcKLU9URXpOVGN6TjFvd1hERUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xGMVpXVnVjMnhoYm1ReEdqQVkKLUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJ3d0dnWURWUVFERXhOVVpYTjBJRkJEUVNBb01UQXkKLU5DQmlhWFFwTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDZG9Xay8zK1djTWxmaklya2cKLTQwa2V0bW5RYUVvZ1FlMUxMY3VPSlY2cktmVVNBc1Bnd2dzYWJKL3duOFR4QTF5eTNlS0piRmwzT2lVWE1Sc3AKLTIySnA4NVBtZW1pRHp5VUlTdHdrNzJxaHAxaW1iQU5admxtbENGS2lRcmpVeXVEZnU0VEFCbW4ra2t0M3ZSMVkKLUJFT0d0K0lGeWUxVUJWU0FUVmRSSjJVVmh3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkJBVUFBNEdCQUJOQTF1L1MKLUNnL0xKWldiN0dsaWlLSnN2dWh4bEU0RTVKeFFGMnpNdWIvQ1NOYkY5Ny8vdFlTeWo5NnN4ZUZReFpYYmNqbTkKLXh0Nm1yL3hOTEE0c3pOUU1KNFArTDdiNWUvakM1RFNxbHdTK0NVWUpnYUZzL1NQK3FKb0NTdTFiUjNJTTlYV08KLWNSQnBEbWNCYllMa1N5QjkyV1VSdnNaMUx0akVjbitjZFFWSQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJQ1hBSUJBQUtCZ1FDZG9Xay8zK1djTWxmaklya2c0MGtldG1uUWFFb2dRZTFMTGN1T0pWNnJLZlVTQXNQZwotd2dzYWJKL3duOFR4QTF5eTNlS0piRmwzT2lVWE1Sc3AyMkpwODVQbWVtaUR6eVVJU3R3azcycWhwMWltYkFOWgotdmxtbENGS2lRcmpVeXVEZnU0VEFCbW4ra2t0M3ZSMVlCRU9HdCtJRnllMVVCVlNBVFZkUkoyVVZod0lEQVFBQgotQW9HQWJhNGZUdHVhcDVsNy84WnNiRTdaMU8zMktKWTRaY09adWtMT0xVVWhYeFhkdVQrRlRnR1d1amMwL3JnYwotejlxWUNMbE5aSE9vdU1ZVGd0U2ZZdnVNdUxaMTFWSXQwR1lIK25SaW9MU2hFNTlZeSt6Q1J5QytnUGlnUzFregoteHZvMTRBc09JUFlWMTRUay9Tc0h5cTZFMGVUazdWemFJRTE5N2dpaUlOVUVSUEVDUVFEU0ttdFBUaC9sUkt3NwotSFNaU00wSTFtRlduLzF6cXJBYm9udFJRWTV3OThRV0lPZTVxbXpZeUZiUFhZVDNkOUJ6bHNNeWhnaVJOb0JiRAoteXZvaFNIWEpBa0VBd0FIeDZlekFaZVdXekQ1eVhEMzZueWpwa1ZDdzdUazdUU21PY2VMSk1XdDFRY3JDZnFsUwoteEE1ampwUTZaOHN1VTVEZHRXQXJ5TTJzQWlyMVdpc1l6d0pBZDZaY3g1Nmp2QVEzeGNQWHNFNnNjQlRWRnpyagotN0ZxWjZFK2NjbFB6ZkxRK1FRc3lPQkU3YnBJNmUvRkpwcFkyNlhHWlhvM1lHelY4SUdYcnQ0MG9PUUpBTEVURwotaDg2RUZYbzNxR09GYm1zRHk0cGRQNW5CRVJDdThYMXhVQ1NmaW50aUQ0YzJESW54Z1M1b0djbG5KZU1jalR2TAotUWpRb0pDWDNVSkNpL09VTzFRSkJBS2djREhXak12dCtsMXBqSkJzU0VaMEhYOUFBSUlWeDBSUW1iRkdTK0YyUQotaGh1NWw3N1dublpPUTl2dmhWNXU3TlBDVUY5bmhVM2poNjBxV1dPOG1rYz0KLS0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1zdWJqZWN0PS9DPVVTL089UlNBIERhdGEgU2VjdXJpdHksIEluYy4vT1U9Q29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotaXNzdWVyPSAvQz1VUy9PPVJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuL09VPUNvbW1lcmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLW5vdEJlZm9yZT05NDExMDQxODU4MzRaCi1ub3RBZnRlciA9OTkxMTAzMTg1ODM0WgotLS0tLS1CRUdJTiBYNTA5IENFUlRJRklDQVRFLS0tLS0KLQotTUlJQ0l6Q0NBWkFDQlFKQkFBQVdNQTBHQ1NxR1NJYjNEUUVCQWdVQU1Gd3hDekFKQmdOVkJBWVRBbFZUTVNBdwotSGdZRFZRUUtFeGRTVTBFZ1JHRjBZU0JUWldOMWNtbDBlU3dnU1c1akxqRXJNQ2tHQTFVRUN4TWlRMjl0YldWeQotWTJsaGJDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MDVOREV4TURReE9EVTRNelJhRncwNQotT1RFeE1ETXhPRFU0TXpSYU1Gd3hDekFKQmdOVkJBWVRBbFZUTVNBd0hnWURWUVFLRXhkU1UwRWdSR0YwWVNCVAotWldOMWNtbDBlU3dnU1c1akxqRXJNQ2tHQTFVRUN4TWlRMjl0YldWeVkybGhiQ0JEWlhKMGFXWnBZMkYwYVc5dQotSUVGMWRHaHZjbWwwZVRDQm16QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmlRQXdnWVVDZmdDays0RmllODRRSjkzbwotOTc1c2JzWndtZHU0MVFVRGFTaUNuSEovbGorTzdLd3BraitLRlBoQ2RyNjlYUU81a05UUXZBYXlVVE5meE1LLwotdG91UG1iWmlJbURkMjk4Z2dyVEtvaTh0VU8yVU10N2dWWTNVYU9MZ1ROTE5CUll1bFdaY1lWSTRIbEdvZ3FIRQotN3lYcEN1YUxLNDR4WnRuNDJmMjlPMm5aNndJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQWdVQUEzNEFkclcyRVA0agotOS9kWllrdXdYNXpCYUx4SnU3TkpieUZIWFN1ZFZNUUFLRCtZdWZLS2c1dGdmK3RReDZzRkVDMDk3VGdDd2FWSQotMHY1bG9NQzg2cVlqRm1ac0d5U3A4K3g1TlJoUEpzampyMUJLeDZjeGE5QjhHSjFRdjZrbStpWXJScHdVcWJ0YgotTUpoQ0tMVkxVN3REQ1pKQXVxaXFXcVRHdG90WFRjVT0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotc3ViamVjdD0vQz1VUy9PPVJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuL09VPVNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLWlzc3Vlcj0gL0M9VVMvTz1SU0EgRGF0YSBTZWN1cml0eSwgSW5jLi9PVT1TZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci1ub3RCZWZvcmU9OTQxMTA5MjM1NDE3Wgotbm90QWZ0ZXIgPTk5MTIzMTIzNTQxN1oKLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNLVENDQVpZQ0JRSkJBQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1TQXcKLUhnWURWUVFLRXhkU1UwRWdSR0YwWVNCVFpXTjFjbWwwZVN3Z1NXNWpMakV1TUN3R0ExVUVDeE1sVTJWamRYSmwKLUlGTmxjblpsY2lCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5ERXhNRGt5TXpVME1UZGEKLUZ3MDVPVEV5TXpFeU16VTBNVGRhTUY4eEN6QUpCZ05WQkFZVEFsVlRNU0F3SGdZRFZRUUtFeGRTVTBFZ1JHRjAKLVlTQlRaV04xY21sMGVTd2dTVzVqTGpFdU1Dd0dBMVVFQ3hNbFUyVmpkWEpsSUZObGNuWmxjaUJEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm16QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmlRQXdnWVVDZmdDU3puckIKLXJvTStXcXFKZzFlc0pRRjJESzJ1aml3M3p1czFlR1JVQStXRVFGSEp2NDhJNG9xQ0NOSVdoamRWNmJFaEFxMTIKLWFJR2FCYUpMeVVzbFppSldiSWdIai9lQldXMkVCMlZ3RTNGMlBwdDNUT05RaVZhWVNMa2RweWthRXk1S0VWbWMKLUhoWFZTVlFzY3pwcGdyR1hPWnh0Y0dkSTVkMHQxc2dlZXdJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQWdVQUEzNEEKLWlOSFJlU0hPNG92bytNRjlORk0vWVlQWnRnczRGN2JvdmlHTmp3QzRpMU4rUkdjZUlyMlhKK0NjaGN4SzlvVTcKLXN1SytrdFBsRGVtdlhBNE1ScFgvb1J4ZVB1ZzJXSHB6cGdyNEloRnJ3d2s0ZmlhN2MrOEF2UUtrOHhRTk1EOWgKLWNIc2cvaktqbjdQMFoxTGN0TzZFakpZMklONkJDSU54SVlvUG5xaz0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotc3ViamVjdD0vQz1aQS9TUD1XZXN0ZXJuIENhcGUvTD1DYXBlIFRvd24vTz1UaGF3dGUgQ29uc3VsdGluZyBjYwotCS9PVT1DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uL0NOPVRoYXd0ZSBTZXJ2ZXIgQ0EKLQkvRW1haWw9c2VydmVyLWNlcnRzQHRoYXd0ZS5jb20KLWlzc3Vlcj0gL0M9WkEvU1A9V2VzdGVybiBDYXBlL0w9Q2FwZSBUb3duL089VGhhd3RlIENvbnN1bHRpbmcgY2MKLQkvT1U9Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbi9DTj1UaGF3dGUgU2VydmVyIENBCi0JL0VtYWlsPXNlcnZlci1jZXJ0c0B0aGF3dGUuY29tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUMrVENDQW1JQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2djUXhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WUQKLVZRUUlFd3hYWlhOMFpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVUKLVZHaGhkM1JsSUVOdmJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnkKLWRtbGpaWE1nUkdsMmFYTnBiMjR4R1RBWEJnTlZCQU1URUZSb1lYZDBaU0JUWlhKMlpYSWdRMEV4SmpBa0Jna3EKLWhraUc5dzBCQ1FFV0YzTmxjblpsY2kxalpYSjBjMEIwYUdGM2RHVXVZMjl0TUI0WERUazJNRGN5TnpFNE1EYzEKLU4xb1hEVGs0TURjeU56RTRNRGMxTjFvd2djUXhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WURWUVFJRXd4WFpYTjAKLVpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVVWR2hoZDNSbElFTnYKLWJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnlkbWxqWlhNZ1JHbDIKLWFYTnBiMjR4R1RBWEJnTlZCQU1URUZSb1lYZDBaU0JUWlhKMlpYSWdRMEV4SmpBa0Jna3Foa2lHOXcwQkNRRVcKLUYzTmxjblpsY2kxalpYSjBjMEIwYUdGM2RHVXVZMjl0TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0IKLWlRS0JnUURUcEZCdXlQOVdhK2JQWGJicURHaDFSNktxd3RxRUpmeW85RWRSMm9XMUlIU1VoaDRQZGNucENHSDEKLUJtMHdiaFVaQXVsU3dHTGJUWm1lNG1vTVJEak4vcjdqWkFsd3hmNnhheW0yTDBuSU85UW5CQ1VRbHkvbmtHM0EKLUtFS1oxMHhEM3NQMUlXMVVuMTNEV09IQTVObGJzTGpjdEh2Zk5qckN0V1lpRXRhSERRSURBUUFCTUEwR0NTcUcKLVNJYjNEUUVCQkFVQUE0R0JBSXN2bjdpZlgzUlVJcnZZWHRwSTRET2ZBUmtUb2d3bTZvN093VmRsOTN5RmhEY1gKLTdoNXQwWFoxMU1VQU16aUtkZGUzcm1UdnpVWUlVQ1lvWTViMDMySXdHTVR2ZGljbEsrU1RONk5QMm01bnZGQU0KLXFKVDVnQzVPK2ovakJ1WlJRNGkwQU1ZUXI1RjRsVDhvQkpuaGdhZnc2UEw4YURZMnZNSEdTUGw5Kzd1ZgotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUREVENDQW5ZQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2djNHhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WUQKLVZRUUlFd3hYWlhOMFpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVUKLVZHaGhkM1JsSUVOdmJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnkKLWRtbGpaWE1nUkdsMmFYTnBiMjR4SVRBZkJnTlZCQU1UR0ZSb1lYZDBaU0JRY21WdGFYVnRJRk5sY25abGNpQkQKLVFURW9NQ1lHQ1NxR1NJYjNEUUVKQVJZWmNISmxiV2wxYlMxelpYSjJaWEpBZEdoaGQzUmxMbU52YlRBZUZ3MDUKLU5qQTNNamN4T0RBM01UUmFGdzA1T0RBM01qY3hPREEzTVRSYU1JSE9NUXN3Q1FZRFZRUUdFd0phUVRFVk1CTUcKLUExVUVDQk1NVjJWemRHVnliaUJEWVhCbE1SSXdFQVlEVlFRSEV3bERZWEJsSUZSdmQyNHhIVEFiQmdOVkJBb1QKLUZGUm9ZWGQwWlNCRGIyNXpkV3gwYVc1bklHTmpNU2d3SmdZRFZRUUxFeDlEWlhKMGFXWnBZMkYwYVc5dUlGTmwKLWNuWnBZMlZ6SUVScGRtbHphVzl1TVNFd0h3WURWUVFERXhoVWFHRjNkR1VnVUhKbGJXbDFiU0JUWlhKMlpYSWcKLVEwRXhLREFtQmdrcWhraUc5dzBCQ1FFV0dYQnlaVzFwZFcwdGMyVnlkbVZ5UUhSb1lYZDBaUzVqYjIwd2daOHcKLURRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5JMk5tcUwxOEpibnRxQlFXS1BPTzVKQkZYVzBPOGMKLUc1VVdSKzhZU0RVNlV2UXJhZ2FQT3kvcVZ1T3ZobzJlRi9lZXRHVjFBazN2eXdtaUlWSFltOUJuMExvTmtnWVUKLWM5U1R5NWNxQUp4Y1RneTgraFZTL1BKRWJ0b1JTbTRJbnk4dDQvbXFPb1p6dGtaVFdNaUpCYjJERWJoelA2b0gKLWpmUkNUZWRBblJ3M0FnTUJBQUV3RFFZSktvWklodmNOQVFFRUJRQURnWUVBdXRGSWdUUlpWWWVySVpmTDlsdlIKLXc5RWlmdnZvNUtUWjNoK0JqK1Z6Tm55dzRRYy9JeVhrUE91NlNJaUg5TFEzc0NtV0JkeHBlK3FyNGw3N3JMajIKLUdZdU10RVNGZm4xWFZBTHprWWdDN0pjUHVUT2pNZklpTUJ5dCt1RmY4QVY4eDBJVy9Ra3V2K2hFUWN5TTl2eEsKLTNWWmRMYkNWSWhOb0VzeXNyeENweGNJPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotVGltcyB0ZXN0IEdDSSBDQQotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI4RENDQVpvQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2dZSXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWUQKLVZRUUlFd3BSZFdWbGJuTnNZVzVrTVJFd0R3WURWUVFIRXdoQ2NtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjUKLWNIUlRiMlowSUZCMGVTQk1kR1F4RkRBU0JnTlZCQXNUQzJSbGRtVnNiM0J0Wlc1ME1Sa3dGd1lEVlFRREV4QkQKLWNubHdkRk52Wm5RZ1JHVjJJRU5CTUI0WERUazNNRE15TWpFek16UXdORm9YRFRrNE1ETXlNakV6TXpRd05Gb3cKLWdZSXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01SRXdEd1lEVlFRSEV3aEMKLWNtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjVjSFJUYjJaMElGQjBlU0JNZEdReEZEQVNCZ05WQkFzVEMyUmwKLWRtVnNiM0J0Wlc1ME1Sa3dGd1lEVlFRREV4QkRjbmx3ZEZOdlpuUWdSR1YySUVOQk1Gd3dEUVlKS29aSWh2Y04KLUFRRUJCUUFEU3dBd1NBSkJBT0FPQXFvZ0c1UXdBbUxoenlPNENvUm54L3dWeTROWlA0ZHhKeTgzTzFFbkwwcncKLU9kc2FtSkt2UE9MSGdTWG8zZ0R1OXVWeXZDZi9RSm1aQW1DNW1sOENBd0VBQVRBTkJna3Foa2lHOXcwQkFRUUYKLUFBTkJBRFJSUy9HVmRkN3JBcVJXNlNkbWdMSmR1T1UyeXEzYXZCdTk5a1JxYnA5QS9kTHU2cjZqVStlUDRvT0EKLVRmZGJGWnRBQUQySHg5alV0WTN0ZmRySk9iOD0gCi0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ1ZqQ0NBZ0FDQVFBd0RRWUpLb1pJaHZjTkFRRUVCUUF3Z2JVeEN6QUpCZ05WQkFZVEFrRlZNUk13RVFZRAotVlFRSUV3cFJkV1ZsYm5Oc1lXNWtNUkV3RHdZRFZRUUhFd2hDY21selltRnVaVEVhTUJnR0ExVUVDaE1SUTNKNQotY0hSVGIyWjBJRkIwZVNCTWRHUXhMREFxQmdOVkJBc1RJMWRQVWxSSVRFVlRVeUJEUlZKVVNVWkpRMEZVU1U5TwotSUVGVlZFaFBVa2xVU1VWVE1UUXdNZ1lEVlFRREV5dGFSVkpQSUZaQlRGVkZJRU5CSUMwZ1JFVk5UMDVUVkZKQgotVkVsUFRpQlFWVkpRVDFORlV5QlBUa3haTUI0WERUazNNRFF3TXpFek1qSTFORm9YRFRrNE1EUXdNekV6TWpJMQotTkZvd2diVXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01SRXdEd1lEVlFRSAotRXdoQ2NtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjVjSFJUYjJaMElGQjBlU0JNZEdReExEQXFCZ05WQkFzVAotSTFkUFVsUklURVZUVXlCRFJWSlVTVVpKUTBGVVNVOU9JRUZWVkVoUFVrbFVTVVZUTVRRd01nWURWUVFERXl0YQotUlZKUElGWkJURlZGSUVOQklDMGdSRVZOVDA1VFZGSkJWRWxQVGlCUVZWSlFUMU5GVXlCUFRreFpNRnd3RFFZSgotS29aSWh2Y05BUUVCQlFBRFN3QXdTQUpCQU9aN1Q3eXFQL3R5c3Bja28zeVBZMXkwQ20yRW13TnZ6VzRRZ1ZYUgotRmpzM0htSjR4dFNwWGRvNm13Y0dlekwzQWJ0L2FRWGF4djlQVTh4dCtKcjBPRlVDQXdFQUFUQU5CZ2txaGtpRwotOXcwQkFRUUZBQU5CQU9RcFltR2d5Q3FDeTFPbGpnSmhDcVFPdTYyN29WbEh6SzFMK3Q5dkJhTWZuNDBBVlVSNAotV3pRVldPMzFLVGdpNXZUSzFVKzNoNDZmZ1VXcVEwaCs2clU9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JQXdnS0FEQWdFQ0FnRUFNQTBHQ1NxR1NJYjNEUUVCQkFVQU1HSXhFVEFQQmdOVkJBY1RDRWx1ZEdWeWJtVjAKLU1SY3dGUVlEVlFRS0V3NVdaWEpwVTJsbmJpd2dTVzVqTGpFME1ESUdBMVVFQ3hNclZtVnlhVk5wWjI0Z1EyeGgKLWMzTWdNU0JEUVNBdElFbHVaR2wyYVdSMVlXd2dVM1ZpYzJOeWFXSmxjakFlRncwNU5qQTBNRGd4TURJd01qZGEKLUZ3MDVOekEwTURneE1ESXdNamRhTUdJeEVUQVBCZ05WQkFjVENFbHVkR1Z5Ym1WME1SY3dGUVlEVlFRS0V3NVcKLVpYSnBVMmxuYml3Z1NXNWpMakUwTURJR0ExVUVDeE1yVm1WeWFWTnBaMjRnUTJ4aGMzTWdNU0JEUVNBdElFbHUKLVpHbDJhV1IxWVd3Z1UzVmljMk55YVdKbGNqQ0FNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQzIKLUZLYlBUZEFGRGRqS0k5QnZxclFwa21PT0xQaHZsdGN1blhaTEViRTJqVmZKdy8wY3hycitIZ2k2TThxVjZyN2oKLVc4MEdxTGQ1SFVRcTdYUHlzVktEYUJCd1pKSFhQbXY1OTEyZEZFT2JicGRGbUlGSDBTM0wzYnR5MTB3L2NhcmkKLVFQSlVPYndXN3M5ODdMcmJQMndxc3hheGhoS2RycE0wMWJqVjBQYytxUUlEQVFBQkFBQUFBREFOQmdrcWhraUcKLTl3MEJBUVFGQUFPQmdRQSsxbkpyeU50OFZCUmpScjA3QXJEQVYvM2pBSDdHakRjOWpzcnhaUzY4b3N0OXYwNkMKLVR2VE5LR0wrTElTTm1GTFhsK0pYaGdHQjBKWjlmdnlZek5nSFE0NkhCVW5nMUg2dm9hbGZKZ1MyS2RFbzUwd1cKLThFRlpZTURrVDFrNHV5bndKcWtWTjJRSksvMnE0L0EvVkNvdjVoNlNsTThBZmZnMlcrMVRMcXZxa3dBQQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0gc3ViamVjdD0vTD1JbnRlcm5ldC9PPVZlcmlTaWduLCBJbmMuL09VPVZlcmlTaWduIENsYXNzIDIgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIKLSBpc3N1ZXI9IC9MPUludGVybmV0L089VmVyaVNpZ24sIEluYy4vT1U9VmVyaVNpZ24gQ2xhc3MgMiBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcgotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUVrekNDQS95Z0F3SUJBZ0lSQU5EVFVwU1JMM25URmVNck1heUZTUEF3RFFZSktvWklodmNOQVFFQ0JRQXcKLVlqRVJNQThHQTFVRUJ4TUlTVzUwWlhKdVpYUXhGekFWQmdOVkJBb1REbFpsY21sVGFXZHVMQ0JKYm1NdU1UUXcKLU1nWURWUVFMRXl0V1pYSnBVMmxuYmlCRGJHRnpjeUF5SUVOQklDMGdTVzVrYVhacFpIVmhiQ0JUZFdKelkzSnAKLVltVnlNQjRYRFRrMk1EWXdOREF3TURBd01Gb1hEVGs0TURZd05ESXpOVGsxT1Zvd1lqRVJNQThHQTFVRUJ4TUkKLVNXNTBaWEp1WlhReEZ6QVZCZ05WQkFvVERsWmxjbWxUYVdkdUxDQkpibU11TVRRd01nWURWUVFMRXl0V1pYSnAKLVUybG5iaUJEYkdGemN5QXlJRU5CSUMwZ1NXNWthWFpwWkhWaGJDQlRkV0p6WTNKcFltVnlNSUdmTUEwR0NTcUcKLVNJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQzZBKzJjektHUmNZTWZtOGdkbmsrMGRlOTlURER6c3FvMHY1bmIKLVJzYlVtTWNkUlE3bnNNYlJXZTBTQWIvOVFvTFRaL2NKMGlPQnFkcmt6N1VwcXFLYXJWb1RTZGxTTVZNOTJ0V3AKLTNiSm5jWkhRRDF0NHhkNmxRVmRJMS9UNlIrNUowVDF1a09kc0k5Sm1mK0YyOFM2ZzNSM0wxU0Z3aUhLZVpLWnYKLXorNzkzd0lEQVFBQm80SUNSekNDQWtNd2dnSXBCZ05WSFFNQkFmOEVnZ0lkTUlJQ0dUQ0NBaFV3Z2dJUkJndGcKLWhrZ0JodmhGQVFjQkFUQ0NBZ0FXZ2dHclZHaHBjeUJqWlhKMGFXWnBZMkYwWlNCcGJtTnZjbkJ2Y21GMFpYTWcKLVlua2djbVZtWlhKbGJtTmxMQ0JoYm1RZ2FYUnpJSFZ6WlNCcGN5QnpkSEpwWTNSc2VTQnpkV0pxWldOMElIUnYKLUxDQjBhR1VnVm1WeWFWTnBaMjRnUTJWeWRHbG1hV05oZEdsdmJpQlFjbUZqZEdsalpTQlRkR0YwWlcxbGJuUWcKLUtFTlFVeWtzSUdGMllXbHNZV0pzWlNCaGREb2dhSFIwY0hNNkx5OTNkM2N1ZG1WeWFYTnBaMjR1WTI5dEwwTlEKLVV5MHhMakE3SUdKNUlFVXRiV0ZwYkNCaGRDQkRVRk10Y21WeGRXVnpkSE5BZG1WeWFYTnBaMjR1WTI5dE95QnYKLWNpQmllU0J0WVdsc0lHRjBJRlpsY21sVGFXZHVMQ0JKYm1NdUxDQXlOVGt6SUVOdllYTjBJRUYyWlM0c0lFMXYKLWRXNTBZV2x1SUZacFpYY3NJRU5CSURrME1EUXpJRlZUUVNCVVpXd3VJQ3N4SUNnME1UVXBJRGsyTVMwNE9ETXcKLUlFTnZjSGx5YVdkb2RDQW9ZeWtnTVRrNU5pQldaWEpwVTJsbmJpd2dTVzVqTGlBZ1FXeHNJRkpwWjJoMGN5QlMKLVpYTmxjblpsWkM0Z1EwVlNWRUZKVGlCWFFWSlNRVTVVU1VWVElFUkpVME5NUVVsTlJVUWdZVzVrSUV4SlFVSkoKLVRFbFVXU0JNU1UxSlZFVkVMcUFPQmd4Z2hrZ0JodmhGQVFjQkFRR2hEZ1lNWUlaSUFZYjRSUUVIQVFFQ01DOHcKLUxSWXJhSFIwY0hNNkx5OTNkM2N1ZG1WeWFYTnBaMjR1WTI5dEwzSmxjRzl6YVhSdmNua3ZRMUJUTFRFdU1EQVUKLUJnbGdoa2dCaHZoQ0FRRUJBZjhFQkFNQ0FnUXdEUVlKS29aSWh2Y05BUUVDQlFBRGdZRUFwUkpSa05CcUxMZ3MKLTUzSVIvZDE4T0RkTE9XTVRaK1FPT3hCcnE0NjBpQkVkVXdnRjh2bVBSWDFrdTdVaURlTnphTGx1ckU2ZUZxSHEKLTJ6UHlLNWo2MHpmVExWSk1XS2NRV3dUSkxqSHRYclc4cHhoTnRGYzZGZHZ5NVprSG5DLzlOSWw3L3Q0VTZXcUIKLXA0eStwN1NkTUlrRXdJWmZkczBWYm5ReVg1TVJVSlk9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0KLSBzdWJqZWN0PS9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotIGlzc3Vlcj0gL0M9VVMvTz1WZXJpU2lnbiwgSW5jLi9PVT1DbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNNVENDQVpvQ0JRS2hBQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1SY3cKLUZRWURWUVFLRXc1V1pYSnBVMmxuYml3Z1NXNWpMakUzTURVR0ExVUVDeE11UTJ4aGMzTWdNeUJRZFdKc2FXTWcKLVVISnBiV0Z5ZVNCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5qQXhNamt3TURBd01EQmEKLUZ3MDVPVEV5TXpFeU16VTVOVGxhTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3RlFZRFZRUUtFdzVXWlhKcFUybG4KLWJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTXlCUWRXSnNhV01nVUhKcGJXRnllU0JEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXlWeFoKLW52SWJpZ0VVdEJEZkJFRGI0MWV2YWtWQWo0UU1DOUV6MmRrUnorNENXQjhsOXlxb1JBV3E3QU1mZUgrZWs3bWEKLUFLb2pmZGFzaGFKalJjZHlKOHowVE1aMWNkSTU3MDlDOEhYZkNwREdqaUJ2bUEvNHJDTmZjQ2sycE1tRzU3R2EKLUlNdFRwWVhuUGI1OW12NGtSVFBjZGhYdEQ2SnhaRXhsTG9Gb1JhY0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRSUYKLUFBT0JnUUIxWm13KzBjMkIyN1g0THpaUnR2ZEN2TTFDcjl3TytoVnMrR2VUVnpycnRwTG90Z0hLakxlT1E3UkoKLVpmays3cjExUmk3Si9DVmRxTWN2aTV1UGFNKzBuSmNZd0Uzdkg5bXZnclBtWkxpRVhJcWFCMUpEWWZ0MG5sczYKLU52eE1zdndhUHhVdXBWczhHNURzaUNua1dSYjV6Z2V0N09uZDJ0SXhpay9XMk84WGpRPT0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLSBzdWJqZWN0PS9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotIGlzc3Vlcj0gL0M9VVMvTz1WZXJpU2lnbiwgSW5jLi9PVT1DbGFzcyA0IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNNVENDQVpvQ0JRS21BQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1SY3cKLUZRWURWUVFLRXc1V1pYSnBVMmxuYml3Z1NXNWpMakUzTURVR0ExVUVDeE11UTJ4aGMzTWdOQ0JRZFdKc2FXTWcKLVVISnBiV0Z5ZVNCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5qQXhNamt3TURBd01EQmEKLUZ3MDVPVEV5TXpFeU16VTVOVGxhTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3RlFZRFZRUUtFdzVXWlhKcFUybG4KLWJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTkNCUWRXSnNhV01nVUhKcGJXRnllU0JEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQTBMSjEKLTlualFybHBROU9sUXFaK00xKytSbEhEbzBpU1Fkb21GMXQrczVnRVhNb0R3blpOSHZKcGxuUitYcnIvcGhuVmoKLUlJbTlnRmlkQkF5ZHFNRWs2UXZsTVhpOS9DME1OMnFlZUlEcFJuWDU3YVA3RTN2SXdVelNvKy8xUExCaWowcGQKLU85MlZaNDhUdWNFODFxY21tK3pETzNyWlRieHRtK2dWQWVQd1I2a0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRSUYKLUFBT0JnUUJUM2RQd25DUitRS3JpL0FBYTE5b00vREpodUJVTmx2UDZWeHQvTTN5djZaaWFZY2g2czdmL3NkeVoKLWc5eXNFdnh3eVI4NFF1MUU5b0F1VzJzemFheWMwMXpuWDFvWXg3RXRlUVNXUVpHWlFiRThEYnFFT2NZN2wvQW0KLXlZN3V2Y3hDbGY4ZXh3SS9WQXg0OWJ5cVlId0NhZWpjck9JQ2RtSEVQZ1BxMG9vazBRPT0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2FwcHMvc2VydmVyMi5wZW0gYi9hcHBzL3NlcnZlcjIucGVtCmluZGV4IDhiYjY2NDEuLmEzOTI3Y2YgMTAwNjQ0Ci0tLSBhL2FwcHMvc2VydmVyMi5wZW0KKysrIGIvYXBwcy9zZXJ2ZXIyLnBlbQpAQCAtMSwzNzYgKzEsNTIgQEAKLWlzc3Vlcj0gL0M9QVUvU1Q9UXVlZW5zbGFuZC9PPUNyeXB0U29mdCBQdHkgTHRkL0NOPVRlc3QgQ0EgKDEwMjQgYml0KQotc3ViamVjdD0vQz1BVS9TVD1RdWVlbnNsYW5kL089Q3J5cHRTb2Z0IFB0eSBMdGQvQ049U2VydmVyIHRlc3QgY2VydCAoMTAyNCBiaXQpCitzdWJqZWN0PSBDID0gVUssIE8gPSBPcGVuU1NMIEdyb3VwLCBPVSA9IEZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFksIENOID0gVGVzdCBTZXJ2ZXIgQ2VydCAjMgoraXNzdWVyPSBDID0gVUssIE8gPSBPcGVuU1NMIEdyb3VwLCBPVSA9IEZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFksIENOID0gT3BlblNTTCBUZXN0IEludGVybWVkaWF0ZSBDQQogLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDTGpDQ0FaY0NBUUV3RFFZSktvWklodmNOQVFFRUJRQXdXekVMTUFrR0ExVUVCaE1DUVZVeEV6QVJCZ05WCi1CQWdUQ2xGMVpXVnVjMnhoYm1ReEdqQVlCZ05WQkFvVEVVTnllWEIwVTI5bWRDQlFkSGtnVEhSa01Sc3dHUVlECi1WUVFERXhKVVpYTjBJRU5CSUNneE1ESTBJR0pwZENrd0hoY05PVGN3TmpBNU1UTTFOelUwV2hjTk9UZ3dOakE1Ci1NVE0xTnpVMFdqQmtNUXN3Q1FZRFZRUUdFd0pCVlRFVE1CRUdBMVVFQ0JNS1VYVmxaVzV6YkdGdVpERWFNQmdHCi1BMVVFQ2hNUlEzSjVjSFJUYjJaMElGQjBlU0JNZEdReEpEQWlCZ05WQkFNVEcxTmxjblpsY2lCMFpYTjBJR05sCi1jblFnS0RFd01qUWdZbWwwS1RDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXN4SDFQQlBtCi1Sa3hyUjExZVY0YnpOaTROOW4xMUNJOG5WMjkrQVJsVDErcURlL21qVlV2WGxtc3Ixdi92ZjcxRzlHZ3FvcFNhCi02UlhySUNMVmRrL0ZZWVl6aFB2bDFNK09yamFYREZPOEJ6QkFGMUxuejZjN2FSWnZHUkpOclJTcjJuWkVrcURmCi1KVzlkWTdyMlZaRXBENVFldWFSWVVudUVDa3FlaWVCNjVHTUNBd0VBQVRBTkJna3Foa2lHOXcwQkFRUUZBQU9CCi1nUUNXc090YTZDMHdpVnpYejh3UG1KS3lUcnVyTWxnVXNzMmlTdVc5MzY2aXdvZlpkZHNOZzdGWG5pTXprSWY2Ci1kcDdqbm1XWndLWjljWHNOVVMybzRPTDA3cU9rMkhPeXdDMFlzTlpRc09CdTFDQlRZWWtJZWZEaUtGTDF6UUhoCi04bHd3TmQ0TlArT0UzTnpVTmtDZmg0RG5GZmc5V0hrWFVsRDVVcHhOUko0Z0pBPT0KK01JSUQ2akNDQXRLZ0F3SUJBZ0lKQUxudTFObFZwWjYwTUEwR0NTcUdTSWIzRFFFQkJRVUFNSEF4Q3pBSkJnTlYKK0JBWVRBbFZMTVJZd0ZBWURWUVFLREExUGNHVnVVMU5NSUVkeWIzVndNU0l3SUFZRFZRUUxEQmxHVDFJZ1ZFVlQKK1ZFbE9SeUJRVlZKUVQxTkZVeUJQVGt4Wk1TVXdJd1lEVlFRRERCeFBjR1Z1VTFOTUlGUmxjM1FnU1c1MFpYSnQKK1pXUnBZWFJsSUVOQk1CNFhEVEV4TVRJd09ERTBNREUwT0ZvWERUSXhNVEF4TmpFME1ERTBPRm93WnpFTE1Ba0cKK0ExVUVCaE1DVlVzeEZqQVVCZ05WQkFvTURVOXdaVzVUVTB3Z1IzSnZkWEF4SWpBZ0JnTlZCQXNNR1VaUFVpQlUKK1JWTlVTVTVISUZCVlVsQlBVMFZUSUU5T1RGa3hIREFhQmdOVkJBTU1FMVJsYzNRZ1UyVnlkbVZ5SUVObGNuUWcKK0l6SXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEcmRpN2o5eWN0RytMNEVqQnkKK2dqUG1FcVp6T0pFUWJhMjZNb1FHemdsVTdlNVhmNTlSYi9oZ1ZRdUtBb2laZTcvUjhySzR6SjRXN2lYZFh3MEwKK3FCcHlHOEI1YUdLZUkzMncrQTlUY0JBcG9YWEwyQ3JZUUVRalp3VUlwTGxZQklpMk5rSmozblZrcTVkZ2wxZ08KK0FMaVErVzhqZzNremc1RWM5cmltcDlyOTNOOHdzU0wzYXdzYWZ1cm1ZQ3ZPZjdsZUhhTVAxV0ovekRSR1VOSEcKKy9XdERqWGM4WlVHMSs2RVhVOUpjMkZzKzJPbWY3ZmNOMGwwMEFLL3dQZzhPYU5TMHJLeUdxOUpkSVQ5RlJHVjEKK2JYZS9yeDU4RmFFNUNJdGR3Q1NZaEp2Ri9POTVMV1FveEpYeWU1YkNGTG12RFRFeVZxOUZNU0NwdGZzbWJYakUKK1pHc1hBZ01CQUFHamdZOHdnWXd3REFZRFZSMFRBUUgvQkFJd0FEQU9CZ05WSFE4QkFmOEVCQU1DQmVBd0xBWUoKK1lJWklBWWI0UWdFTkJCOFdIVTl3Wlc1VFUwd2dSMlZ1WlhKaGRHVmtJRU5sY25ScFptbGpZWFJsTUIwR0ExVWQKK0RnUVdCQlI1MlVhV1dUS3paR0RIL1g0bVdOY3VxZVFWYXpBZkJnTlZIU01FR0RBV2dCUTJ3MnlJNTVYK3NMM3MKK3pqNDlocXNoZ1lmYTJqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFOQlcrWFlMbEhCcVZZLzMxaWUrM2dSbFMKK0xQZnk0U0lxbjB0M1JKamFnVDI5TVhwcmJsQk8yY2JNTzhWR2prUWRLR3BtTVhqeGJodDJhck9PVVhSSFg0bi8KK1hUeW4vUUhFZjBiY3dJSVRNUmVPM0RaVVBBRXc4aFNqbjl4RU9NMElSVk9DUCttSDVmaTc0UXp6UWFaVkN5WWcKKzVWdExLZHd3LytzYzBuQ2JLbDJLV2dEbHVyaUgwbmZWeDk1cWdXM21nOWRoWFJyMHptZjF3MnprQkhZcEFSWUwKK0RldzZaOEVFNHRTM0hKdTgvcU02bWVXek50cmZvblEzZWlpTXhqWkJ4elY0NmpjaEJ3YTJ6OVhZaFA2QW1wUGIKK29lVFN6Y1FOYldzeGFHWXpXbzQ2b0xEVVptSk93U0Jhd2JTMzFiWk5NQ29QSVk2dWtvZXNDekZTc1VLWnd3PT0KIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KIC0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUNYZ0lCQUFLQmdRQ3pFZlU4RStaR1RHdEhYVjVYaHZNMkxnMzJmWFVJanlkWGIzNEJHVlBYNm9ONythTlYKLVM5ZVdheXZXLys5L3ZVYjBhQ3FpbEpycEZlc2dJdFYyVDhWaGhqT0UrK1hVejQ2dU5wY01VN3dITUVBWFV1ZlAKLXB6dHBGbThaRWsydEZLdmFka1NTb044bGIxMWp1dlpWa1NrUGxCNjVwRmhTZTRRS1NwNko0SHJrWXdJREFRQUIKLUFvR0JBS3k4anZiMEx6Ynk4cTExeU5MZjcrNzh3Q1ZkWWk3dWdNSGNZQTFKVkZLOCt6YjFXZlNtNDRGTFFvLzAKLWRTQ2hBamd6MzZUVGV4ZUxPRFBZeGxlSm5kalZjT01WenNMSmpTTThkTHBYc1RTNEZDZU1iaHcyczJ1K3hxS1kKLWJiUFdmaytIT1R5SmpmbmtjQzVOYmc0NGVPbXJ1cTBnU21CZVVYVk01VW50bFRueEFrRUE3VEdDQTNoN2t4NUUKLUJsNHpsMnBjM2dQQUd0K2R5Zms1UG85bUdKVVVYaEY1cDJ6dWVHbVlXVzc0VG1PV0Ixa3p0NFFSZFlNekZlUHEKLXpmRE5YRWExQ3dKQkFNRkVyZFkweHAwVUoxM1d3QmJVVGs4cnVqcVFkSHRqdzBrbGhwYnVLa2p4dTJoTjB3d00KLTZwMEQ5cXhGN0pIYWdocVZSSTBmQVcvRUUwT3pkSE1SOVFrQ1FRRE5SMjZkTUZYS3NvUHUrdkl0bGpqL1VFR2YKLVFHN2dFUmlRNHl4YUZCUEhnZHBHbzBrVDMxZWg5eDloUUdEa3hUZTBHTkcvWVNnQ1J2bTgrQzNUTWNLWEFrQkQKLWRoR24zNndrVUZDZGRNU0FNNE5TSjFWTjgvWjB5NUh6Q21JOGRNM1Z3R3RHTVVRbHhLeHdPbDMwTEVRemRTNU0KLTBTV29qTllYaVQyZ09CZkJ3dGJoQWtFQWhhZmw1UUVPSWdVeitYYXpTL0lsWjhnb05LZERWZllnSzNtSEhqdnYKLW5ZNUcrQXVHZWJkTmtYSnI0S1NXeERjTitDMmk0N3p1ajRRWEExNk1BT2FuZEE9PQorTUlJRW93SUJBQUtDQVFFQTYzWXU0L2NuTFJ2aStCSXdjb0l6NWhLbWN6aVJFRzJ0dWpLRUJzNEpWTzN1VjMrZgorVVcvNFlGVUxpZ0tJbVh1LzBmS3l1TXllRnU0bDNWOE5DNmdhY2h2QWVXaGluaU45c1BnUFUzQVFLYUYxeTlncQorMkVCRUkyY0ZDS1M1V0FTSXRqWkNZOTUxWkt1WFlKZFlEZ0M0a1Bsdkk0TjVNNE9SSFBhNHBxZmEvZHpmTUxFaQorOTJzTEduN3E1bUFyem4rNVhoMmpEOVZpZjh3MFJsRFJ4djFyUTQxM1BHVkJ0ZnVoRjFQU1hOaGJQdGpwbiszMworRGRKZE5BQ3Y4RDRQRG1qVXRLeXNocXZTWFNFL1JVUmxkVzEzdjY4ZWZCV2hPUWlMWGNBa21JU2J4Znp2ZVMxaworS01TVjhudVd3aFM1cncweE1sYXZSVEVncWJYN0ptMTR4R1JyRndJREFRQUJBb0lCQUhMc1RQaWhJZkxuWUlFNQoreDRHc1FRNXpYZUJ3NUlURE0zN2t0d0huUURDK3JJenlVbDFhTEQxQVpSQm9LaW5YZDRsT1RxTFo0L05IS3g0QQorRFlyNThtWnRXeVVtcUxPTW1RVnVIWFRaQmxwN1h0WXVYTU1Ob3ZRd2pRbHA5TGljQmVvQlU2Z1E1UFZNdHViRAorRjR4R0Y4OVNuMGNUSFczaU1rcVR0UTVLY1IxajU3T2NKTzBGRWIxdlB2azJNWEk1WnlBYXRVWUU3WWFjYkV6ZAorcmcwMnVJd3gzRnFOU2t1U0k3OXV6NGhNZFY1VFB0dWh4eDluVHdqOWFMVWhYRmVaMG1uMlBWZ1Z6RW5uTW9KYgorK3pubHNaRGd6RGxKcWRhRDc0NFlHV2g4WjNPRXNzQjM1S2Z6RmNkT2VPNnlIOGxtdjJaZnpuazdwTlBUN0xUYgorTGFlOVZna0NnWUVBOTJwMXFuQUIzTnRKdE5jYVc1M2kwUzVXSmdTMWh4V0t2VUR4M2xUQjlzOFg5ZkhwcUwxYQorRTk0ZkRmV3pwL2hheDZGZWZVS0l2Qk91a1BMUTZiWWpUTWlGb09IelZpcmdoQUl1SVVvTUk1VnRMaHdEMWhLcworTHI3bC9kcHRNZ0tiMW5aSHlYb0tIUkJ0aHN5M0s0K3Vkc1BpOFR6TXZZRWxnRXF5UUllL1JrMENnWUVBODZHTAorOEhDNnpMc3p6S0VSRFBCeHJib1Jtb0Z2VlVDVFFEaHNmajFNOGFSM25ROFY1TGtkSUpjN1dxbS9HZ2ZrOVFSZgorcko4TTJXVU1sVTVDTm5Dbi9LQ3JLekNOWklSZXplM2ZWK0huS2RiY1hHTHZnYkhQcmhuejh5WWVoVUZHK1JHcQorYlZ5RFdSVTk0VDM4aXp5MnM1cU1Zck1KV1pFWXlYbmNTUGJmY1BNQ2dZQXRhWGZ4Y1orVjV4WVBRRkFSTXRpWAorNW5aZmdndkRvSnVYZ3gwaDN0Sy9OMkhCZmNhU2R6YmFZTEc0Z1RtWmdnYy9qd25sMmRsNUUrKzlvU1BoVWRJRworM09OU0ZVYnhzT3NHcjlQQnZuS2Q4V1paeVVDWEFWUmpQQnpBekYrd2h6UU5XQ1p5LzVodG56OUxON1lESTlzMAorNTExM1E5NmNoZURaUEZ5ZFpZMGhIUUtCZ1FEVmJFaE51a001eENpTmN1K2YyU2FNbkxwOUVqUTRoNWczSXZhUAorNUIxNmRhdy9EdzhMemNvaFdib3FJeGVBc3plMEdEL0QxWlVKQUVkMHFCakMzZythOUJqZWZlcnZDaktPelhuZworMzhtRVVtKzZFd1ZqSlNRY2pTbXljRXMrU3Iva3dyLzhpNVdZdlUzMitqazR0RmdNb0MrbzZ0UWUvVWVzZjY4aworei9kUFZ3S0JnR2JGN1Z2MS8zU21obE95K3pZeXZKMENyV3RLeEg5UVA2dExJRWdFcGQ4eDdZVFN1Q0g5NHlvawora1RvTVhZQTNzV05QdDIyR2JSRForcmNwNGM3SGtEeDZJNnZwZFA5YVFFd0pUcDBFUHkwc2dXcjJYd1ltcmVJUQorTkZta2s4SXRuOUVZMlI5VkJhUDdHTHY1a3Z3eERkTEFubXdHbXpWdGJtYVZkeENhQndVawogLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KLXN1YmplY3Q9L0M9VVMvTz1BVCZUIEJlbGwgTGFib3JhdG9yaWVzL09VPVByb3RvdHlwZSBSZXNlYXJjaCBDQQotaXNzdWVyPSAvQz1VUy9PPUFUJlQgQmVsbCBMYWJvcmF0b3JpZXMvT1U9UHJvdG90eXBlIFJlc2VhcmNoIENBCi1ub3RCZWZvcmU9OTUwNDEzMjEwNjU2Wgotbm90QWZ0ZXIgPTk3MDQxMjIxMDY1NloKLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNDRENDQVhFQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd1RqRUxNQWtHQTFVRUJoTUNWVk14SHpBZEJnTlYKLUJBb1VGa0ZVSmxRZ1FtVnNiQ0JNWVdKdmNtRjBiM0pwWlhNeEhqQWNCZ05WQkFzVUZWQnliM1J2ZEhsd1pTQlMKLVpYTmxZWEpqYUNCRFFUQWVGdzA1TlRBME1UTXlNVEEyTlRaYUZ3MDVOekEwTVRJeU1UQTJOVFphTUU0eEN6QUoKLUJnTlZCQVlUQWxWVE1SOHdIUVlEVlFRS0ZCWkJWQ1pVSUVKbGJHd2dUR0ZpYjNKaGRHOXlhV1Z6TVI0d0hBWUQKLVZRUUxGQlZRY205MGIzUjVjR1VnVW1WelpXRnlZMmdnUTBFd2dad3dEUVlKS29aSWh2Y05BUUVCQlFBRGdZb0EKLU1JR0dBb0dBZWJPbWd0U0NsK3dDWVpjODZVR1llVExZOGNqbVcyUDBGTjhUb1QvdTJwRUNDb0Zkcmx5Y1gwT1IKLTN3dDBaaHBGWExWTmVEbkh3RUU5dmVOVWloN3BDTDJaQkZxb0lvUWtCMWxabVhSaVZ0akdvbno4QkxtL3FyRk0KLVlIYjBsbWUvT2wrczExOG13S1Z4bm42YlNBZUkvT1hLaExhVmRZWldrK2FFYXhFRGtWa0NBUTh3RFFZSktvWkkKLWh2Y05BUUVFQlFBRGdZRUFBWk1HMTRsWm1aOGJhaGthSGFUVjlkUWY0cDJGWmlRVEZ3SFA5WnlHc1hQQytMVDUKLWRHNWlUYVJteWpOSUpkUFdvaFpEbDk3a0FjaTc5YUJuZHZ1RXZSS09qTEhzM1dSR0JJd0VSbkFjblk5TXo4dS8KLXpJSEsyM1BqWVZ4R0dhWmQ2NjlPSndEMENZeXFIMjJISDluRlVHYW9KZHN2MzlDaFcwTlJkTEU5K3k4PQotLS0tLS1FTkQgWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi1pc3N1ZXI9IC9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi1zdWJqZWN0PS9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IENBICgxMDI0IGJpdCkKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ0pqQ0NBWThDQVFBd0RRWUpLb1pJaHZjTkFRRUVCUUF3WERFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVgotQkFnVENsRjFaV1Z1YzJ4aGJtUXhHakFZQmdOVkJBb1RFVU55ZVhCMFUyOW1kQ0JRZEhrZ1RIUmtNUnd3R2dZRAotVlFRREV4TlVaWE4wSUZCRFFTQW9NVEF5TkNCaWFYUXBNQjRYRFRrM01EWXdPVEV6TlRjME0xb1hEVEF4TURZdwotT1RFek5UYzBNMW93V3pFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWQotQmdOVkJBb1RFVU55ZVhCMFUyOW1kQ0JRZEhrZ1RIUmtNUnN3R1FZRFZRUURFeEpVWlhOMElFTkJJQ2d4TURJMAotSUdKcGRDa3dnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBS083bzh0MTE2VlA2Y2d5YlRzWgotRENaaHI5NW5ZbFp1eWEzYUNpMUlLb3p0cXdXbmpibURGSXJpT3FHRlByWlErbW9NRVRDOUQ1OWlSVy9kRlhTdgotMUY2NWthL1hZMmhMaDlleENDbzdYdVVjRHM1M1FwM2JJM0FtTXFIamd6RThvTzNhanlKQXpKa1RUT1VlY1FVMgotbXcvZ0k0dE1NMExxV01RUzdsdVR5NCt4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVFQlFBRGdZRUFNN2FjaHYzdgotaExRSmN2LzY1ZUdFcEJYTTQwWkRWb0ZRRkZKV2FZNXA4ODNIVHFMQjF4NEZkenNYSEgwUUtCVGNLcFd3cXl1NAotWURtM2ZiOG9EdWd3NzJiQ3pmeVpLL3pWWlBSL2hWbHFJL2Z2VTEwOVFvYys3b1B2SVhXa3k3MUhmY0s2WkJDQQotcTMwS0lxR00vdW9NNjBJTnE5N3FqRG1DSmFwYWdjTkJHUXM9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1NSUlDWFFJQkFBS0JnUUNqdTZQTGRkZWxUK25JTW0wN0dRd21ZYS9lWjJKV2JzbXQyZ290U0NxTTdhc0ZwNDI1Ci1neFNLNGpxaGhUNjJVUHBxREJFd3ZRK2ZZa1Z2M1JWMHI5UmV1Wkd2MTJOb1M0ZlhzUWdxTzE3bEhBN09kMEtkCi0yeU53SmpLaDQ0TXhQS0R0Mm84aVFNeVpFMHpsSG5FRk5wc1A0Q09MVEROQzZsakVFdTViazh1UHNRSURBUUFCCi1Bb0dBVlptcEZac0RaZnIwbDJTOXRMTHdwalJXTk9sS0FUUWtubzZxMldlc1QwZUdMUXVmVGNpWStjOHlwZlU2Ci1oeWlvOHI1aVVsL1ZoaGRqaEF0S3gxbVJwaW90ZnRIby9lWWY4cnRzcm5wck9uV0cwYldqTGp0SW9NYmN4R24yCi1KM2JONkxKbWJKTWpEczBlSjNLblR1NjQ2RjNuRFV3Mm9HQXdtcHpLWEExS0FQMENRUURSdlFoeGsyRDNQZWhzCi1Idkc2NjV1MnBCNWlwWVFuZ0VGbFpPN1JISlp6Sk9aRVdTTHV1TXFhRi83cFRmQTVqaUJ2V3FDZ0plQ1JSSW5MCi0yMXJ1NGRsUEFrRUF4OWpqN0JnS241VFluTW9CU1NlMGFmanNWOW9BcFZwTjFOYWNiMVlEdEN3eStzY3AzKytzCi1uRnhsdjk4d3hJbFNkcHdNVW4rQVVXZmppV1I3VHUvRy93SkJBSi9LandaSXJGVnhld1AweDJJTFlzVFJZTHp6Ci1NUzRQRHNPN0ZCK0kwaTdEYkJPaWZYUzJvTlNwZDNJMENOTXdyeEZuVUh6eW5wYk9TdFZmTjNaTDV3MENRUUNhCi1wd0ZhaHhCUmhrSktzeGhqb0ZKQlg5eWw3NUpvWTRXdm01VGJvOWloNlVKYVJ4M2txZmtOMTRMMkJLWWNzWmdiCi1LWTl2bURPWXk2aU5makRlV1RmSkFrQmtmUFViOG9USi9uU1A1ek42c3FHeFNZNGtyYzR4THhwUm14b0o4SEwyCi1YZmhxWGtUemJVMTNSWDlKSi9OWjh2UU45Vm0yTmh4UkdKb2NRa21jZFZ0SgotLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDWURDQ0FpQUNBZ0VvTUFrR0JTc09Bd0lOQlFBd2ZERUxNQWtHQTFVRUJoTUNWVk14TmpBMEJnTlZCQW9UCi1MVTVoZEdsdmJtRnNJRUZsY205dVlYVjBhV056SUdGdVpDQlRjR0ZqWlNCQlpHMXBibWx6ZEhKaGRHbHZiakVaCi1NQmNHQTFVRUN4TVFWR1Z6ZENCRmJuWnBjbTl1YldWdWRERWFNQmdHQTFVRUN4TVJSRk5UTFU1QlUwRXRVR2xzCi1iM1F0UTBFd0hoY05PVFl3TWpJMk1UWXpNalExV2hjTk9UY3dNakkxTVRZek1qUTFXakI4TVFzd0NRWURWUVFHCi1Fd0pWVXpFMk1EUUdBMVVFQ2hNdFRtRjBhVzl1WVd3Z1FXVnliMjVoZFhScFkzTWdZVzVrSUZOd1lXTmxJRUZrCi1iV2x1YVhOMGNtRjBhVzl1TVJrd0Z3WURWUVFMRXhCVVpYTjBJRVZ1ZG1seWIyNXRaVzUwTVJvd0dBWURWUVFMCi1FeEZFVTFNdFRrRlRRUzFRYVd4dmRDMURRVENCOGpBSkJnVXJEZ01DREFVQUE0SGtBRENCNEFKQkFNQS9zc0tiCi1oUE5VRzdabEFTZlZ3RUpVMjFPNU95Ri9peUJ6Z0hJMU84ZU9oSkdVWU84Y2M4d0RNalI1MDhNcjljcDZVaGwvCi1aQjdGVjVHa0xORW5SSFlDUVFEVUVhU2c0NVAycXJEd2l4VFJoRmhtV3o1TnZjNGxSRlEvNDJYUGNjaGlKQkxiCi1ibjNRSzc0VDJJeFkxeVkra0NOcThYcklxZjVmSkp6SUgwSi94VVAzQWhVQXNnMndzUUhmREdZay9CT1N1bFgzCi1mVmQwZ2VVQ1FRQ3pDRlVRQWgrWmtFbXA1ODA0Y3M2WldCaHJVQWZucmE4bEpJdFlvOXhQY1hnZElmTGZpYmNYCi1SNzFVc3lPNzdNUkQ3QjArQWcydHE3OTRJbGVDVmNFRU1Ba0dCU3NPQXdJTkJRQURMd0F3TEFJVVVheURmcmVSCi1ZaDJXZVU4Ni9wSE5ka1VDMUlnQ0ZFZnhlMWYwb01weEp5cko1WEl4VGk3dkdkb0sKLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBYNTA5IENFUlRJRklDQVRFLS0tLS0KLQotTUlJQ0dUQ0NBZGdDQXdDcVREQUpCZ1VyRGdNQ0RRVUFNSHd4Q3pBSkJnTlZCQVlUQWxWVE1UWXdOQVlEVlFRSwotRXkxT1lYUnBiMjVoYkNCQlpYSnZibUYxZEdsamN5QmhibVFnVTNCaFkyVWdRV1J0YVc1cGMzUnlZWFJwYjI0eAotR1RBWEJnTlZCQXNURUZSbGMzUWdSVzUyYVhKdmJtMWxiblF4R2pBWUJnTlZCQXNURVVSVFV5MU9RVk5CTFZCcAotYkc5MExVTkJNQjRYRFRrMk1EVXhOREUzTURFME1Wb1hEVGszTURVeE5ERTNNREUwTVZvd016RUxNQWtHQTFVRQotQmhNQ1FWVXhEekFOQmdOVkJBb1RCazFwYm1OdmJURVRNQkVHQTFVRUF4TUtSWEpwWXlCWmIzVnVaekNCOGpBSgotQmdVckRnTUNEQVVBQTRIa0FEQ0I0QUpCQUtiZkh6NnZFNnBYWE1UcHN3dEdVZWMydHZuZkxKVXNveEU5cXM0KwotT2JaWDdMbUx2cmFnTlBVZWlUSng3VU9XWjVEZkJqNmJYTGM4ZVluZTBsUDFnM0FDUVFEVUVhU2c0NVAycXJEdwotaXhUUmhGaG1XejVOdmM0bFJGUS80MlhQY2NoaUpCTGJibjNRSzc0VDJJeFkxeVkra0NOcThYcklxZjVmSkp6SQotSDBKL3hVUDNBaFVBc2cyd3NRSGZER1lrL0JPU3VsWDNmVmQwZ2VVQ1FRQ3pDRlVRQWgrWmtFbXA1ODA0Y3M2WgotV0JoclVBZm5yYThsSkl0WW85eFBjWGdkSWZMZmliY1hSNzFVc3lPNzdNUkQ3QjArQWcydHE3OTRJbGVDVmNFRQotTUFrR0JTc09Bd0lOQlFBRE1BQXdMUUlVV3N1dUpSRTNWVDR1ZVdrV01BSk1KYVpqajFFQ0ZRQ1lZMHpYNGJ6TQotTEM3b2JzckhEOFhBSEcrWlJHPT0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDVFRDQ0FiYWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVFGQURCTU1Rc3dDUVlEVlFRR0V3SkhRakVNCi1NQW9HQTFVRUNoTURWVU5NTVJnd0ZnWURWUVFMRXc5SlEwVXRWRVZNSUZCeWIycGxZM1F4RlRBVEJnTlZCQU1UCi1ERlJ5ZFhOMFJtRmpkRzl5ZVRBZUZ3MDVOekEwTWpJeE5ETTVNVFJhRncwNU9EQTBNakl4TkRNNU1UUmFNRXd4Ci1DekFKQmdOVkJBWVRBa2RDTVF3d0NnWURWUVFLRXdOVlEwd3hHREFXQmdOVkJBc1REMGxEUlMxVVJVd2dVSEp2Ci1hbVZqZERFVk1CTUdBMVVFQXhNTVZISjFjM1JHWVdOMGIzSjVNSUdjTUFvR0JGVUlBUUVDQWdRQUE0R05BRENCCi1pUUtCZ1FDRWllUjhOY1hrVVcxZjBHNmFDNnUwaThxLzk4SnFTNlJ4SzVZbUhJR0tDa3VUV0FVanpMZlVhNGR0Ci1VOWlnR0NqVHV4YURxbHpFaW0rdC8wMnBtaUJaVDlIYVgrKzM1TWpRUFVXbXNDaGNZVTVXeXpHRXJYaStyUWF3Ci16bHdTNzN6TThxaVBqLzk3bFhZeWNXaGdMMFZhaURTUHhSWEVVZFdvYUdydW9tNG1OUUlEQVFBQm8wSXdRREFkCi1CZ05WSFE0RUZnUVVIYWwxTFpyN29WZzV6NmxZenJoVGdaUkNtY1V3RGdZRFZSMFBBUUgvQkFRREFnSDJNQThHCi1BMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUVCUUFEZ1lFQWZhZ2dmbDZGWm9pb2VjanYwZHE4Ci0vRFhvL3UxMWlNWnZYbjA4Z2pYL3psMmI0d3RQYlNoT1NZNUZoa1NtOEdleVNhc3orL053Yi91emZuSWhva1dpCi1sZlBaSHRsQ1d0WGJJeS9UTjUxZUp5cTA0Y2VEQ1FEV3ZMQzJlblZnOUtCK0dKMzRiNWM1VmFQUnpxOE1CeHNBCi1TN0VMdVlHdG1ZZ1ltOU5aT0lyN3lVMD0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQjZqQ0NBWlFDQWdFdE1BMEdDU3FHU0liM0RRRUJCQVVBTUlHQU1Rc3dDUVlEVlFRR0V3SlZVekUyTURRRwotQTFVRUNoTXRUbUYwYVc5dVlXd2dRV1Z5YjI1aGRYUnBZM01nWVc1a0lGTndZV05sSUVGa2JXbHVhWE4wY21GMAotYVc5dU1Sa3dGd1lEVlFRTEV4QlVaWE4wSUVWdWRtbHliMjV0Wlc1ME1SNHdIQVlEVlFRTEV4Vk5SRFV0VWxOQgotTFU1QlUwRXRVR2xzYjNRdFEwRXdIaGNOT1RZd05ETXdNakl3TlRBd1doY05PVGN3TkRNd01qSXdOVEF3V2pDQgotZ0RFTE1Ba0dBMVVFQmhNQ1ZWTXhOakEwQmdOVkJBb1RMVTVoZEdsdmJtRnNJRUZsY205dVlYVjBhV056SUdGdQotWkNCVGNHRmpaU0JCWkcxcGJtbHpkSEpoZEdsdmJqRVpNQmNHQTFVRUN4TVFWR1Z6ZENCRmJuWnBjbTl1YldWdQotZERFZU1Cd0dBMVVFQ3hNVlRVUTFMVkpUUVMxT1FWTkJMVkJwYkc5MExVTkJNRmt3Q2dZRVZRZ0JBUUlDQWdBRAotU3dBd1NBSkJBTG1tWDUrR3FBdmNyV0sxM3JmRHJOWDlVZmVBN2YraWp5QmdlRlFqWVVvRHBGcWFwdzRuelFCTAotYkFYdWc4cEtrUndhMlpoOFlPRGhYc1JXdTJGL1Vja0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRUUZBQU5CQUg5YQotT0JBK1FDc2p4WGduU3FIeDA0Z2NVOFM0OURWVWIxZjJYVm9MbkhsSWI4Um5YMGs1TzZtcEhUNWV0aTliTGtpVwotR0pOTUo0TDBBSi9hYytTbUhaYz0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ2FqQ0NBZE1DQkRHQTBRVXdEUVlKS29aSWh2Y05BUUVFQlFBd2ZURUxNQWtHQTFVRUJoTUNRMkV4RHpBTgotQmdOVkJBY1RCazVsY0dWaGJqRWVNQndHQTFVRUN4TVZUbThnVEdsaFltbHNhWFI1SUVGalkyVndkR1ZrTVI4dwotSFFZRFZRUUtFeFpHYjNJZ1JHVnRieUJRZFhKd2IzTmxjeUJQYm14NU1Sd3dHZ1lEVlFRREV4TkZiblJ5ZFhOMAotSUVSbGJXOGdWMlZpSUVOQk1CNFhEVGsyTURReU5qRXpNelV3TVZvWERUQTJNRFF5TmpFek16VXdNVm93ZlRFTAotTUFrR0ExVUVCaE1DUTJFeER6QU5CZ05WQkFjVEJrNWxjR1ZoYmpFZU1Cd0dBMVVFQ3hNVlRtOGdUR2xoWW1scwotYVhSNUlFRmpZMlZ3ZEdWa01SOHdIUVlEVlFRS0V4WkdiM0lnUkdWdGJ5QlFkWEp3YjNObGN5QlBibXg1TVJ3dwotR2dZRFZRUURFeE5GYm5SeWRYTjBJRVJsYlc4Z1YyVmlJRU5CTUlHZE1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTAotQURDQmh3S0JnUUNhcm9TN08xREEwaG00SWVmTllVMWN4L25xT216RW5rMjkxZDFYcXpuRGVGNHdFZ2FrYmtDYwotelRLeEs3OTF5TnBYRzVSbW5ncUg3Y3lnRFJUSFpKNm1mQ1JuMHdHQytBSTAwRjJ2WVRHcVBHUlFMMU4zbFpUMAotWURLRkMwU1FlTU1qRklaMWFlUWlncm9GUW5IbzBWQjN6V0lNcE5ra2E4UFk5bHhIWkFtV3dRSUJBekFOQmdrcQotaGtpRzl3MEJBUVFGQUFPQmdRQkF4MFVNVkExczU0bE1ReVhqTVg1a2o5OUZKTjVpdGI4YksxUmsrY2VnUFFQRgotY1dPOVNFV3lFampCaklramp6QXdCa2FFc3pGc05HeGVteHRYdndqSW0xeEVVTVRWbFBFV1RzMnFuRHZBVUE5VwotWXFoV2JoSDB0b0dUMzYyMzZRQXNxQ1o3NnJiVFJWU1NYMkJIeUp3Sk1HMnRDUnY3a1JKLy9OSWd4ajNINHc9PQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi1pc3N1ZXI9IC9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi1zdWJqZWN0PS9DPUFVL1NUPVF1ZWVuc2xhbmQvTz1DcnlwdFNvZnQgUHR5IEx0ZC9DTj1UZXN0IFBDQSAoMTAyNCBiaXQpCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNKekNDQVpBQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd1hERUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlYKLUJBZ1RDbEYxWldWdWMyeGhibVF4R2pBWUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJ3d0dnWUQKLVZRUURFeE5VWlhOMElGQkRRU0FvTVRBeU5DQmlhWFFwTUI0WERUazNNRFl3T1RFek5UY3pOMW9YRFRBeE1EWXcKLU9URXpOVGN6TjFvd1hERUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xGMVpXVnVjMnhoYm1ReEdqQVkKLUJnTlZCQW9URVVOeWVYQjBVMjltZENCUWRIa2dUSFJrTVJ3d0dnWURWUVFERXhOVVpYTjBJRkJEUVNBb01UQXkKLU5DQmlhWFFwTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDZG9Xay8zK1djTWxmaklya2cKLTQwa2V0bW5RYUVvZ1FlMUxMY3VPSlY2cktmVVNBc1Bnd2dzYWJKL3duOFR4QTF5eTNlS0piRmwzT2lVWE1Sc3AKLTIySnA4NVBtZW1pRHp5VUlTdHdrNzJxaHAxaW1iQU5admxtbENGS2lRcmpVeXVEZnU0VEFCbW4ra2t0M3ZSMVkKLUJFT0d0K0lGeWUxVUJWU0FUVmRSSjJVVmh3SURBUUFCTUEwR0NTcUdTSWIzRFFFQkJBVUFBNEdCQUJOQTF1L1MKLUNnL0xKWldiN0dsaWlLSnN2dWh4bEU0RTVKeFFGMnpNdWIvQ1NOYkY5Ny8vdFlTeWo5NnN4ZUZReFpYYmNqbTkKLXh0Nm1yL3hOTEE0c3pOUU1KNFArTDdiNWUvakM1RFNxbHdTK0NVWUpnYUZzL1NQK3FKb0NTdTFiUjNJTTlYV08KLWNSQnBEbWNCYllMa1N5QjkyV1VSdnNaMUx0akVjbitjZFFWSQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJQ1hBSUJBQUtCZ1FDZG9Xay8zK1djTWxmaklya2c0MGtldG1uUWFFb2dRZTFMTGN1T0pWNnJLZlVTQXNQZwotd2dzYWJKL3duOFR4QTF5eTNlS0piRmwzT2lVWE1Sc3AyMkpwODVQbWVtaUR6eVVJU3R3azcycWhwMWltYkFOWgotdmxtbENGS2lRcmpVeXVEZnU0VEFCbW4ra2t0M3ZSMVlCRU9HdCtJRnllMVVCVlNBVFZkUkoyVVZod0lEQVFBQgotQW9HQWJhNGZUdHVhcDVsNy84WnNiRTdaMU8zMktKWTRaY09adWtMT0xVVWhYeFhkdVQrRlRnR1d1amMwL3JnYwotejlxWUNMbE5aSE9vdU1ZVGd0U2ZZdnVNdUxaMTFWSXQwR1lIK25SaW9MU2hFNTlZeSt6Q1J5QytnUGlnUzFregoteHZvMTRBc09JUFlWMTRUay9Tc0h5cTZFMGVUazdWemFJRTE5N2dpaUlOVUVSUEVDUVFEU0ttdFBUaC9sUkt3NwotSFNaU00wSTFtRlduLzF6cXJBYm9udFJRWTV3OThRV0lPZTVxbXpZeUZiUFhZVDNkOUJ6bHNNeWhnaVJOb0JiRAoteXZvaFNIWEpBa0VBd0FIeDZlekFaZVdXekQ1eVhEMzZueWpwa1ZDdzdUazdUU21PY2VMSk1XdDFRY3JDZnFsUwoteEE1ampwUTZaOHN1VTVEZHRXQXJ5TTJzQWlyMVdpc1l6d0pBZDZaY3g1Nmp2QVEzeGNQWHNFNnNjQlRWRnpyagotN0ZxWjZFK2NjbFB6ZkxRK1FRc3lPQkU3YnBJNmUvRkpwcFkyNlhHWlhvM1lHelY4SUdYcnQ0MG9PUUpBTEVURwotaDg2RUZYbzNxR09GYm1zRHk0cGRQNW5CRVJDdThYMXhVQ1NmaW50aUQ0YzJESW54Z1M1b0djbG5KZU1jalR2TAotUWpRb0pDWDNVSkNpL09VTzFRSkJBS2djREhXak12dCtsMXBqSkJzU0VaMEhYOUFBSUlWeDBSUW1iRkdTK0YyUQotaGh1NWw3N1dublpPUTl2dmhWNXU3TlBDVUY5bmhVM2poNjBxV1dPOG1rYz0KLS0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1zdWJqZWN0PS9DPVVTL089UlNBIERhdGEgU2VjdXJpdHksIEluYy4vT1U9Q29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotaXNzdWVyPSAvQz1VUy9PPVJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuL09VPUNvbW1lcmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLW5vdEJlZm9yZT05NDExMDQxODU4MzRaCi1ub3RBZnRlciA9OTkxMTAzMTg1ODM0WgotLS0tLS1CRUdJTiBYNTA5IENFUlRJRklDQVRFLS0tLS0KLQotTUlJQ0l6Q0NBWkFDQlFKQkFBQVdNQTBHQ1NxR1NJYjNEUUVCQWdVQU1Gd3hDekFKQmdOVkJBWVRBbFZUTVNBdwotSGdZRFZRUUtFeGRTVTBFZ1JHRjBZU0JUWldOMWNtbDBlU3dnU1c1akxqRXJNQ2tHQTFVRUN4TWlRMjl0YldWeQotWTJsaGJDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MDVOREV4TURReE9EVTRNelJhRncwNQotT1RFeE1ETXhPRFU0TXpSYU1Gd3hDekFKQmdOVkJBWVRBbFZUTVNBd0hnWURWUVFLRXhkU1UwRWdSR0YwWVNCVAotWldOMWNtbDBlU3dnU1c1akxqRXJNQ2tHQTFVRUN4TWlRMjl0YldWeVkybGhiQ0JEWlhKMGFXWnBZMkYwYVc5dQotSUVGMWRHaHZjbWwwZVRDQm16QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmlRQXdnWVVDZmdDays0RmllODRRSjkzbwotOTc1c2JzWndtZHU0MVFVRGFTaUNuSEovbGorTzdLd3BraitLRlBoQ2RyNjlYUU81a05UUXZBYXlVVE5meE1LLwotdG91UG1iWmlJbURkMjk4Z2dyVEtvaTh0VU8yVU10N2dWWTNVYU9MZ1ROTE5CUll1bFdaY1lWSTRIbEdvZ3FIRQotN3lYcEN1YUxLNDR4WnRuNDJmMjlPMm5aNndJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQWdVQUEzNEFkclcyRVA0agotOS9kWllrdXdYNXpCYUx4SnU3TkpieUZIWFN1ZFZNUUFLRCtZdWZLS2c1dGdmK3RReDZzRkVDMDk3VGdDd2FWSQotMHY1bG9NQzg2cVlqRm1ac0d5U3A4K3g1TlJoUEpzampyMUJLeDZjeGE5QjhHSjFRdjZrbStpWXJScHdVcWJ0YgotTUpoQ0tMVkxVN3REQ1pKQXVxaXFXcVRHdG90WFRjVT0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotc3ViamVjdD0vQz1VUy9PPVJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuL09VPVNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKLWlzc3Vlcj0gL0M9VVMvTz1SU0EgRGF0YSBTZWN1cml0eSwgSW5jLi9PVT1TZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci1ub3RCZWZvcmU9OTQxMTA5MjM1NDE3Wgotbm90QWZ0ZXIgPTk5MTIzMTIzNTQxN1oKLS0tLS0tQkVHSU4gWDUwOSBDRVJUSUZJQ0FURS0tLS0tCi0KLU1JSUNLVENDQVpZQ0JRSkJBQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1TQXcKLUhnWURWUVFLRXhkU1UwRWdSR0YwWVNCVFpXTjFjbWwwZVN3Z1NXNWpMakV1TUN3R0ExVUVDeE1sVTJWamRYSmwKLUlGTmxjblpsY2lCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5ERXhNRGt5TXpVME1UZGEKLUZ3MDVPVEV5TXpFeU16VTBNVGRhTUY4eEN6QUpCZ05WQkFZVEFsVlRNU0F3SGdZRFZRUUtFeGRTVTBFZ1JHRjAKLVlTQlRaV04xY21sMGVTd2dTVzVqTGpFdU1Dd0dBMVVFQ3hNbFUyVmpkWEpsSUZObGNuWmxjaUJEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm16QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmlRQXdnWVVDZmdDU3puckIKLXJvTStXcXFKZzFlc0pRRjJESzJ1aml3M3p1czFlR1JVQStXRVFGSEp2NDhJNG9xQ0NOSVdoamRWNmJFaEFxMTIKLWFJR2FCYUpMeVVzbFppSldiSWdIai9lQldXMkVCMlZ3RTNGMlBwdDNUT05RaVZhWVNMa2RweWthRXk1S0VWbWMKLUhoWFZTVlFzY3pwcGdyR1hPWnh0Y0dkSTVkMHQxc2dlZXdJREFRQUJNQTBHQ1NxR1NJYjNEUUVCQWdVQUEzNEEKLWlOSFJlU0hPNG92bytNRjlORk0vWVlQWnRnczRGN2JvdmlHTmp3QzRpMU4rUkdjZUlyMlhKK0NjaGN4SzlvVTcKLXN1SytrdFBsRGVtdlhBNE1ScFgvb1J4ZVB1ZzJXSHB6cGdyNEloRnJ3d2s0ZmlhN2MrOEF2UUtrOHhRTk1EOWgKLWNIc2cvaktqbjdQMFoxTGN0TzZFakpZMklONkJDSU54SVlvUG5xaz0KLS0tLS0tRU5EIFg1MDkgQ0VSVElGSUNBVEUtLS0tLQotc3ViamVjdD0vQz1aQS9TUD1XZXN0ZXJuIENhcGUvTD1DYXBlIFRvd24vTz1UaGF3dGUgQ29uc3VsdGluZyBjYwotCS9PVT1DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uL0NOPVRoYXd0ZSBTZXJ2ZXIgQ0EKLQkvRW1haWw9c2VydmVyLWNlcnRzQHRoYXd0ZS5jb20KLWlzc3Vlcj0gL0M9WkEvU1A9V2VzdGVybiBDYXBlL0w9Q2FwZSBUb3duL089VGhhd3RlIENvbnN1bHRpbmcgY2MKLQkvT1U9Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbi9DTj1UaGF3dGUgU2VydmVyIENBCi0JL0VtYWlsPXNlcnZlci1jZXJ0c0B0aGF3dGUuY29tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUMrVENDQW1JQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2djUXhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WUQKLVZRUUlFd3hYWlhOMFpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVUKLVZHaGhkM1JsSUVOdmJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnkKLWRtbGpaWE1nUkdsMmFYTnBiMjR4R1RBWEJnTlZCQU1URUZSb1lYZDBaU0JUWlhKMlpYSWdRMEV4SmpBa0Jna3EKLWhraUc5dzBCQ1FFV0YzTmxjblpsY2kxalpYSjBjMEIwYUdGM2RHVXVZMjl0TUI0WERUazJNRGN5TnpFNE1EYzEKLU4xb1hEVGs0TURjeU56RTRNRGMxTjFvd2djUXhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WURWUVFJRXd4WFpYTjAKLVpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVVWR2hoZDNSbElFTnYKLWJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnlkbWxqWlhNZ1JHbDIKLWFYTnBiMjR4R1RBWEJnTlZCQU1URUZSb1lYZDBaU0JUWlhKMlpYSWdRMEV4SmpBa0Jna3Foa2lHOXcwQkNRRVcKLUYzTmxjblpsY2kxalpYSjBjMEIwYUdGM2RHVXVZMjl0TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0IKLWlRS0JnUURUcEZCdXlQOVdhK2JQWGJicURHaDFSNktxd3RxRUpmeW85RWRSMm9XMUlIU1VoaDRQZGNucENHSDEKLUJtMHdiaFVaQXVsU3dHTGJUWm1lNG1vTVJEak4vcjdqWkFsd3hmNnhheW0yTDBuSU85UW5CQ1VRbHkvbmtHM0EKLUtFS1oxMHhEM3NQMUlXMVVuMTNEV09IQTVObGJzTGpjdEh2Zk5qckN0V1lpRXRhSERRSURBUUFCTUEwR0NTcUcKLVNJYjNEUUVCQkFVQUE0R0JBSXN2bjdpZlgzUlVJcnZZWHRwSTRET2ZBUmtUb2d3bTZvN093VmRsOTN5RmhEY1gKLTdoNXQwWFoxMU1VQU16aUtkZGUzcm1UdnpVWUlVQ1lvWTViMDMySXdHTVR2ZGljbEsrU1RONk5QMm01bnZGQU0KLXFKVDVnQzVPK2ovakJ1WlJRNGkwQU1ZUXI1RjRsVDhvQkpuaGdhZnc2UEw4YURZMnZNSEdTUGw5Kzd1ZgotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUREVENDQW5ZQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2djNHhDekFKQmdOVkJBWVRBbHBCTVJVd0V3WUQKLVZRUUlFd3hYWlhOMFpYSnVJRU5oY0dVeEVqQVFCZ05WQkFjVENVTmhjR1VnVkc5M2JqRWRNQnNHQTFVRUNoTVUKLVZHaGhkM1JsSUVOdmJuTjFiSFJwYm1jZ1kyTXhLREFtQmdOVkJBc1RIME5sY25ScFptbGpZWFJwYjI0Z1UyVnkKLWRtbGpaWE1nUkdsMmFYTnBiMjR4SVRBZkJnTlZCQU1UR0ZSb1lYZDBaU0JRY21WdGFYVnRJRk5sY25abGNpQkQKLVFURW9NQ1lHQ1NxR1NJYjNEUUVKQVJZWmNISmxiV2wxYlMxelpYSjJaWEpBZEdoaGQzUmxMbU52YlRBZUZ3MDUKLU5qQTNNamN4T0RBM01UUmFGdzA1T0RBM01qY3hPREEzTVRSYU1JSE9NUXN3Q1FZRFZRUUdFd0phUVRFVk1CTUcKLUExVUVDQk1NVjJWemRHVnliaUJEWVhCbE1SSXdFQVlEVlFRSEV3bERZWEJsSUZSdmQyNHhIVEFiQmdOVkJBb1QKLUZGUm9ZWGQwWlNCRGIyNXpkV3gwYVc1bklHTmpNU2d3SmdZRFZRUUxFeDlEWlhKMGFXWnBZMkYwYVc5dUlGTmwKLWNuWnBZMlZ6SUVScGRtbHphVzl1TVNFd0h3WURWUVFERXhoVWFHRjNkR1VnVUhKbGJXbDFiU0JUWlhKMlpYSWcKLVEwRXhLREFtQmdrcWhraUc5dzBCQ1FFV0dYQnlaVzFwZFcwdGMyVnlkbVZ5UUhSb1lYZDBaUzVqYjIwd2daOHcKLURRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5JMk5tcUwxOEpibnRxQlFXS1BPTzVKQkZYVzBPOGMKLUc1VVdSKzhZU0RVNlV2UXJhZ2FQT3kvcVZ1T3ZobzJlRi9lZXRHVjFBazN2eXdtaUlWSFltOUJuMExvTmtnWVUKLWM5U1R5NWNxQUp4Y1RneTgraFZTL1BKRWJ0b1JTbTRJbnk4dDQvbXFPb1p6dGtaVFdNaUpCYjJERWJoelA2b0gKLWpmUkNUZWRBblJ3M0FnTUJBQUV3RFFZSktvWklodmNOQVFFRUJRQURnWUVBdXRGSWdUUlpWWWVySVpmTDlsdlIKLXc5RWlmdnZvNUtUWjNoK0JqK1Z6Tm55dzRRYy9JeVhrUE91NlNJaUg5TFEzc0NtV0JkeHBlK3FyNGw3N3JMajIKLUdZdU10RVNGZm4xWFZBTHprWWdDN0pjUHVUT2pNZklpTUJ5dCt1RmY4QVY4eDBJVy9Ra3V2K2hFUWN5TTl2eEsKLTNWWmRMYkNWSWhOb0VzeXNyeENweGNJPQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotVGltcyB0ZXN0IEdDSSBDQQotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUI4RENDQVpvQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2dZSXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWUQKLVZRUUlFd3BSZFdWbGJuTnNZVzVrTVJFd0R3WURWUVFIRXdoQ2NtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjUKLWNIUlRiMlowSUZCMGVTQk1kR1F4RkRBU0JnTlZCQXNUQzJSbGRtVnNiM0J0Wlc1ME1Sa3dGd1lEVlFRREV4QkQKLWNubHdkRk52Wm5RZ1JHVjJJRU5CTUI0WERUazNNRE15TWpFek16UXdORm9YRFRrNE1ETXlNakV6TXpRd05Gb3cKLWdZSXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01SRXdEd1lEVlFRSEV3aEMKLWNtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjVjSFJUYjJaMElGQjBlU0JNZEdReEZEQVNCZ05WQkFzVEMyUmwKLWRtVnNiM0J0Wlc1ME1Sa3dGd1lEVlFRREV4QkRjbmx3ZEZOdlpuUWdSR1YySUVOQk1Gd3dEUVlKS29aSWh2Y04KLUFRRUJCUUFEU3dBd1NBSkJBT0FPQXFvZ0c1UXdBbUxoenlPNENvUm54L3dWeTROWlA0ZHhKeTgzTzFFbkwwcncKLU9kc2FtSkt2UE9MSGdTWG8zZ0R1OXVWeXZDZi9RSm1aQW1DNW1sOENBd0VBQVRBTkJna3Foa2lHOXcwQkFRUUYKLUFBTkJBRFJSUy9HVmRkN3JBcVJXNlNkbWdMSmR1T1UyeXEzYXZCdTk5a1JxYnA5QS9kTHU2cjZqVStlUDRvT0EKLVRmZGJGWnRBQUQySHg5alV0WTN0ZmRySk9iOD0gCi0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0KLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ1ZqQ0NBZ0FDQVFBd0RRWUpLb1pJaHZjTkFRRUVCUUF3Z2JVeEN6QUpCZ05WQkFZVEFrRlZNUk13RVFZRAotVlFRSUV3cFJkV1ZsYm5Oc1lXNWtNUkV3RHdZRFZRUUhFd2hDY21selltRnVaVEVhTUJnR0ExVUVDaE1SUTNKNQotY0hSVGIyWjBJRkIwZVNCTWRHUXhMREFxQmdOVkJBc1RJMWRQVWxSSVRFVlRVeUJEUlZKVVNVWkpRMEZVU1U5TwotSUVGVlZFaFBVa2xVU1VWVE1UUXdNZ1lEVlFRREV5dGFSVkpQSUZaQlRGVkZJRU5CSUMwZ1JFVk5UMDVUVkZKQgotVkVsUFRpQlFWVkpRVDFORlV5QlBUa3haTUI0WERUazNNRFF3TXpFek1qSTFORm9YRFRrNE1EUXdNekV6TWpJMQotTkZvd2diVXhDekFKQmdOVkJBWVRBa0ZWTVJNd0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01SRXdEd1lEVlFRSAotRXdoQ2NtbHpZbUZ1WlRFYU1CZ0dBMVVFQ2hNUlEzSjVjSFJUYjJaMElGQjBlU0JNZEdReExEQXFCZ05WQkFzVAotSTFkUFVsUklURVZUVXlCRFJWSlVTVVpKUTBGVVNVOU9JRUZWVkVoUFVrbFVTVVZUTVRRd01nWURWUVFERXl0YQotUlZKUElGWkJURlZGSUVOQklDMGdSRVZOVDA1VFZGSkJWRWxQVGlCUVZWSlFUMU5GVXlCUFRreFpNRnd3RFFZSgotS29aSWh2Y05BUUVCQlFBRFN3QXdTQUpCQU9aN1Q3eXFQL3R5c3Bja28zeVBZMXkwQ20yRW13TnZ6VzRRZ1ZYUgotRmpzM0htSjR4dFNwWGRvNm13Y0dlekwzQWJ0L2FRWGF4djlQVTh4dCtKcjBPRlVDQXdFQUFUQU5CZ2txaGtpRwotOXcwQkFRUUZBQU5CQU9RcFltR2d5Q3FDeTFPbGpnSmhDcVFPdTYyN29WbEh6SzFMK3Q5dkJhTWZuNDBBVlVSNAotV3pRVldPMzFLVGdpNXZUSzFVKzNoNDZmZ1VXcVEwaCs2clU9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JQXdnS0FEQWdFQ0FnRUFNQTBHQ1NxR1NJYjNEUUVCQkFVQU1HSXhFVEFQQmdOVkJBY1RDRWx1ZEdWeWJtVjAKLU1SY3dGUVlEVlFRS0V3NVdaWEpwVTJsbmJpd2dTVzVqTGpFME1ESUdBMVVFQ3hNclZtVnlhVk5wWjI0Z1EyeGgKLWMzTWdNU0JEUVNBdElFbHVaR2wyYVdSMVlXd2dVM1ZpYzJOeWFXSmxjakFlRncwNU5qQTBNRGd4TURJd01qZGEKLUZ3MDVOekEwTURneE1ESXdNamRhTUdJeEVUQVBCZ05WQkFjVENFbHVkR1Z5Ym1WME1SY3dGUVlEVlFRS0V3NVcKLVpYSnBVMmxuYml3Z1NXNWpMakUwTURJR0ExVUVDeE1yVm1WeWFWTnBaMjRnUTJ4aGMzTWdNU0JEUVNBdElFbHUKLVpHbDJhV1IxWVd3Z1UzVmljMk55YVdKbGNqQ0FNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQzIKLUZLYlBUZEFGRGRqS0k5QnZxclFwa21PT0xQaHZsdGN1blhaTEViRTJqVmZKdy8wY3hycitIZ2k2TThxVjZyN2oKLVc4MEdxTGQ1SFVRcTdYUHlzVktEYUJCd1pKSFhQbXY1OTEyZEZFT2JicGRGbUlGSDBTM0wzYnR5MTB3L2NhcmkKLVFQSlVPYndXN3M5ODdMcmJQMndxc3hheGhoS2RycE0wMWJqVjBQYytxUUlEQVFBQkFBQUFBREFOQmdrcWhraUcKLTl3MEJBUVFGQUFPQmdRQSsxbkpyeU50OFZCUmpScjA3QXJEQVYvM2pBSDdHakRjOWpzcnhaUzY4b3N0OXYwNkMKLVR2VE5LR0wrTElTTm1GTFhsK0pYaGdHQjBKWjlmdnlZek5nSFE0NkhCVW5nMUg2dm9hbGZKZ1MyS2RFbzUwd1cKLThFRlpZTURrVDFrNHV5bndKcWtWTjJRSksvMnE0L0EvVkNvdjVoNlNsTThBZmZnMlcrMVRMcXZxa3dBQQotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotCi0gc3ViamVjdD0vTD1JbnRlcm5ldC9PPVZlcmlTaWduLCBJbmMuL09VPVZlcmlTaWduIENsYXNzIDIgQ0EgLSBJbmRpdmlkdWFsIFN1YnNjcmliZXIKLSBpc3N1ZXI9IC9MPUludGVybmV0L089VmVyaVNpZ24sIEluYy4vT1U9VmVyaVNpZ24gQ2xhc3MgMiBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcgotCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUVrekNDQS95Z0F3SUJBZ0lSQU5EVFVwU1JMM25URmVNck1heUZTUEF3RFFZSktvWklodmNOQVFFQ0JRQXcKLVlqRVJNQThHQTFVRUJ4TUlTVzUwWlhKdVpYUXhGekFWQmdOVkJBb1REbFpsY21sVGFXZHVMQ0JKYm1NdU1UUXcKLU1nWURWUVFMRXl0V1pYSnBVMmxuYmlCRGJHRnpjeUF5SUVOQklDMGdTVzVrYVhacFpIVmhiQ0JUZFdKelkzSnAKLVltVnlNQjRYRFRrMk1EWXdOREF3TURBd01Gb1hEVGs0TURZd05ESXpOVGsxT1Zvd1lqRVJNQThHQTFVRUJ4TUkKLVNXNTBaWEp1WlhReEZ6QVZCZ05WQkFvVERsWmxjbWxUYVdkdUxDQkpibU11TVRRd01nWURWUVFMRXl0V1pYSnAKLVUybG5iaUJEYkdGemN5QXlJRU5CSUMwZ1NXNWthWFpwWkhWaGJDQlRkV0p6WTNKcFltVnlNSUdmTUEwR0NTcUcKLVNJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQzZBKzJjektHUmNZTWZtOGdkbmsrMGRlOTlURER6c3FvMHY1bmIKLVJzYlVtTWNkUlE3bnNNYlJXZTBTQWIvOVFvTFRaL2NKMGlPQnFkcmt6N1VwcXFLYXJWb1RTZGxTTVZNOTJ0V3AKLTNiSm5jWkhRRDF0NHhkNmxRVmRJMS9UNlIrNUowVDF1a09kc0k5Sm1mK0YyOFM2ZzNSM0wxU0Z3aUhLZVpLWnYKLXorNzkzd0lEQVFBQm80SUNSekNDQWtNd2dnSXBCZ05WSFFNQkFmOEVnZ0lkTUlJQ0dUQ0NBaFV3Z2dJUkJndGcKLWhrZ0JodmhGQVFjQkFUQ0NBZ0FXZ2dHclZHaHBjeUJqWlhKMGFXWnBZMkYwWlNCcGJtTnZjbkJ2Y21GMFpYTWcKLVlua2djbVZtWlhKbGJtTmxMQ0JoYm1RZ2FYUnpJSFZ6WlNCcGN5QnpkSEpwWTNSc2VTQnpkV0pxWldOMElIUnYKLUxDQjBhR1VnVm1WeWFWTnBaMjRnUTJWeWRHbG1hV05oZEdsdmJpQlFjbUZqZEdsalpTQlRkR0YwWlcxbGJuUWcKLUtFTlFVeWtzSUdGMllXbHNZV0pzWlNCaGREb2dhSFIwY0hNNkx5OTNkM2N1ZG1WeWFYTnBaMjR1WTI5dEwwTlEKLVV5MHhMakE3SUdKNUlFVXRiV0ZwYkNCaGRDQkRVRk10Y21WeGRXVnpkSE5BZG1WeWFYTnBaMjR1WTI5dE95QnYKLWNpQmllU0J0WVdsc0lHRjBJRlpsY21sVGFXZHVMQ0JKYm1NdUxDQXlOVGt6SUVOdllYTjBJRUYyWlM0c0lFMXYKLWRXNTBZV2x1SUZacFpYY3NJRU5CSURrME1EUXpJRlZUUVNCVVpXd3VJQ3N4SUNnME1UVXBJRGsyTVMwNE9ETXcKLUlFTnZjSGx5YVdkb2RDQW9ZeWtnTVRrNU5pQldaWEpwVTJsbmJpd2dTVzVqTGlBZ1FXeHNJRkpwWjJoMGN5QlMKLVpYTmxjblpsWkM0Z1EwVlNWRUZKVGlCWFFWSlNRVTVVU1VWVElFUkpVME5NUVVsTlJVUWdZVzVrSUV4SlFVSkoKLVRFbFVXU0JNU1UxSlZFVkVMcUFPQmd4Z2hrZ0JodmhGQVFjQkFRR2hEZ1lNWUlaSUFZYjRSUUVIQVFFQ01DOHcKLUxSWXJhSFIwY0hNNkx5OTNkM2N1ZG1WeWFYTnBaMjR1WTI5dEwzSmxjRzl6YVhSdmNua3ZRMUJUTFRFdU1EQVUKLUJnbGdoa2dCaHZoQ0FRRUJBZjhFQkFNQ0FnUXdEUVlKS29aSWh2Y05BUUVDQlFBRGdZRUFwUkpSa05CcUxMZ3MKLTUzSVIvZDE4T0RkTE9XTVRaK1FPT3hCcnE0NjBpQkVkVXdnRjh2bVBSWDFrdTdVaURlTnphTGx1ckU2ZUZxSHEKLTJ6UHlLNWo2MHpmVExWSk1XS2NRV3dUSkxqSHRYclc4cHhoTnRGYzZGZHZ5NVprSG5DLzlOSWw3L3Q0VTZXcUIKLXA0eStwN1NkTUlrRXdJWmZkczBWYm5ReVg1TVJVSlk9Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0KLSBzdWJqZWN0PS9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotIGlzc3Vlcj0gL0M9VVMvTz1WZXJpU2lnbiwgSW5jLi9PVT1DbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNNVENDQVpvQ0JRS2hBQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1SY3cKLUZRWURWUVFLRXc1V1pYSnBVMmxuYml3Z1NXNWpMakUzTURVR0ExVUVDeE11UTJ4aGMzTWdNeUJRZFdKc2FXTWcKLVVISnBiV0Z5ZVNCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5qQXhNamt3TURBd01EQmEKLUZ3MDVPVEV5TXpFeU16VTVOVGxhTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3RlFZRFZRUUtFdzVXWlhKcFUybG4KLWJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTXlCUWRXSnNhV01nVUhKcGJXRnllU0JEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQXlWeFoKLW52SWJpZ0VVdEJEZkJFRGI0MWV2YWtWQWo0UU1DOUV6MmRrUnorNENXQjhsOXlxb1JBV3E3QU1mZUgrZWs3bWEKLUFLb2pmZGFzaGFKalJjZHlKOHowVE1aMWNkSTU3MDlDOEhYZkNwREdqaUJ2bUEvNHJDTmZjQ2sycE1tRzU3R2EKLUlNdFRwWVhuUGI1OW12NGtSVFBjZGhYdEQ2SnhaRXhsTG9Gb1JhY0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRSUYKLUFBT0JnUUIxWm13KzBjMkIyN1g0THpaUnR2ZEN2TTFDcjl3TytoVnMrR2VUVnpycnRwTG90Z0hLakxlT1E3UkoKLVpmays3cjExUmk3Si9DVmRxTWN2aTV1UGFNKzBuSmNZd0Uzdkg5bXZnclBtWkxpRVhJcWFCMUpEWWZ0MG5sczYKLU52eE1zdndhUHhVdXBWczhHNURzaUNua1dSYjV6Z2V0N09uZDJ0SXhpay9XMk84WGpRPT0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLSBzdWJqZWN0PS9DPVVTL089VmVyaVNpZ24sIEluYy4vT1U9Q2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQotIGlzc3Vlcj0gL0M9VVMvTz1WZXJpU2lnbiwgSW5jLi9PVT1DbGFzcyA0IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Ci0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNNVENDQVpvQ0JRS21BQUFCTUEwR0NTcUdTSWIzRFFFQkFnVUFNRjh4Q3pBSkJnTlZCQVlUQWxWVE1SY3cKLUZRWURWUVFLRXc1V1pYSnBVMmxuYml3Z1NXNWpMakUzTURVR0ExVUVDeE11UTJ4aGMzTWdOQ0JRZFdKc2FXTWcKLVVISnBiV0Z5ZVNCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEFlRncwNU5qQXhNamt3TURBd01EQmEKLUZ3MDVPVEV5TXpFeU16VTVOVGxhTUY4eEN6QUpCZ05WQkFZVEFsVlRNUmN3RlFZRFZRUUtFdzVXWlhKcFUybG4KLWJpd2dTVzVqTGpFM01EVUdBMVVFQ3hNdVEyeGhjM01nTkNCUWRXSnNhV01nVUhKcGJXRnllU0JEWlhKMGFXWnAKLVkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXdnWWtDZ1lFQTBMSjEKLTlualFybHBROU9sUXFaK00xKytSbEhEbzBpU1Fkb21GMXQrczVnRVhNb0R3blpOSHZKcGxuUitYcnIvcGhuVmoKLUlJbTlnRmlkQkF5ZHFNRWs2UXZsTVhpOS9DME1OMnFlZUlEcFJuWDU3YVA3RTN2SXdVelNvKy8xUExCaWowcGQKLU85MlZaNDhUdWNFODFxY21tK3pETzNyWlRieHRtK2dWQWVQd1I2a0NBd0VBQVRBTkJna3Foa2lHOXcwQkFRSUYKLUFBT0JnUUJUM2RQd25DUitRS3JpL0FBYTE5b00vREpodUJVTmx2UDZWeHQvTTN5djZaaWFZY2g2czdmL3NkeVoKLWc5eXNFdnh3eVI4NFF1MUU5b0F1VzJzemFheWMwMXpuWDFvWXg3RXRlUVNXUVpHWlFiRThEYnFFT2NZN2wvQW0KLXlZN3V2Y3hDbGY4ZXh3SS9WQXg0OWJ5cVlId0NhZWpjck9JQ2RtSEVQZ1BxMG9vazBRPT0KLS0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2FwcHMvc2Vzc19pZC5jIGIvYXBwcy9zZXNzX2lkLmMKaW5kZXggYjk5MTc5Zi4uYjE2Njg2YyAxMDA2NDQKLS0tIGEvYXBwcy9zZXNzX2lkLmMKKysrIGIvYXBwcy9zZXNzX2lkLmMKQEAgLTkwLDYgKzkwLDcgQEAKIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKIAl7CiAJU1NMX1NFU1NJT04gKng9TlVMTDsKKwlYNTA5ICpwZWVyID0gTlVMTDsKIAlpbnQgcmV0PTEsaSxudW0sYmFkb3BzPTA7CiAJQklPICpvdXQ9TlVMTDsKIAlpbnQgaW5mb3JtYXQsb3V0Zm9ybWF0OwpAQCAtMTYzLDE2ICsxNjQsMTcgQEAKIAlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwogCXg9bG9hZF9zZXNzX2lkKGluZmlsZSxpbmZvcm1hdCk7CiAJaWYgKHggPT0gTlVMTCkgeyBnb3RvIGVuZDsgfQorCXBlZXIgPSBTU0xfU0VTU0lPTl9nZXQwX3BlZXIoeCk7CiAKIAlpZihjb250ZXh0KQogCSAgICB7Ci0JICAgIHgtPnNpZF9jdHhfbGVuZ3RoPXN0cmxlbihjb250ZXh0KTsKLQkgICAgaWYoeC0+c2lkX2N0eF9sZW5ndGggPiBTU0xfTUFYX1NJRF9DVFhfTEVOR1RIKQorCSAgICBzaXplX3QgY3R4X2xlbiA9IHN0cmxlbihjb250ZXh0KTsKKwkgICAgaWYoY3R4X2xlbiA+IFNTTF9NQVhfU0lEX0NUWF9MRU5HVEgpCiAJCXsKIAkJQklPX3ByaW50ZihiaW9fZXJyLCJDb250ZXh0IHRvbyBsb25nXG4iKTsKIAkJZ290byBlbmQ7CiAJCX0KLQkgICAgbWVtY3B5KHgtPnNpZF9jdHgsY29udGV4dCx4LT5zaWRfY3R4X2xlbmd0aCk7CisJICAgIFNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dCh4LCAodW5zaWduZWQgY2hhciAqKWNvbnRleHQsIGN0eF9sZW4pOwogCSAgICB9CiAKICNpZmRlZiB1bmRlZgpAQCAtMjMxLDEwICsyMzMsMTAgQEAKIAogCQlpZiAoY2VydCkKIAkJCXsKLQkJCWlmICh4LT5wZWVyID09IE5VTEwpCisJCQlpZiAocGVlciA9PSBOVUxMKQogCQkJCUJJT19wdXRzKG91dCwiTm8gY2VydGlmaWNhdGUgcHJlc2VudFxuIik7CiAJCQllbHNlCi0JCQkJWDUwOV9wcmludChvdXQseC0+cGVlcik7CisJCQkJWDUwOV9wcmludChvdXQscGVlcik7CiAJCQl9CiAJCX0KIApAQCAtMjUzLDEyICsyNTUsMTIgQEAKIAkJCWdvdG8gZW5kOwogCQkJfQogCQl9Ci0JZWxzZSBpZiAoIW5vb3V0ICYmICh4LT5wZWVyICE9IE5VTEwpKSAvKiBqdXN0IHByaW50IHRoZSBjZXJ0aWZpY2F0ZSAqLworCWVsc2UgaWYgKCFub291dCAmJiAocGVlciAhPSBOVUxMKSkgLyoganVzdCBwcmludCB0aGUgY2VydGlmaWNhdGUgKi8KIAkJewogCQlpZiAJKG91dGZvcm1hdCA9PSBGT1JNQVRfQVNOMSkKLQkJCWk9KGludClpMmRfWDUwOV9iaW8ob3V0LHgtPnBlZXIpOworCQkJaT0oaW50KWkyZF9YNTA5X2JpbyhvdXQscGVlcik7CiAJCWVsc2UgaWYgKG91dGZvcm1hdCA9PSBGT1JNQVRfUEVNKQotCQkJaT1QRU1fd3JpdGVfYmlvX1g1MDkob3V0LHgtPnBlZXIpOworCQkJaT1QRU1fd3JpdGVfYmlvX1g1MDkob3V0LHBlZXIpOwogCQllbHNlCXsKIAkJCUJJT19wcmludGYoYmlvX2VyciwiYmFkIG91dHB1dCBmb3JtYXQgc3BlY2lmaWVkIGZvciBvdXRmaWxlXG4iKTsKIAkJCWdvdG8gZW5kOwpkaWZmIC0tZ2l0IGEvYXBwcy9zcGVlZC5jIGIvYXBwcy9zcGVlZC5jCmluZGV4IGIzYzU0NDIuLmFiNjJlMDEgMTAwNjQ0Ci0tLSBhL2FwcHMvc3BlZWQuYworKysgYi9hcHBzL3NwZWVkLmMKQEAgLTEwOCw4ICsxMDgsMTQgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNlbmRpZgogCi0jaWZkZWYgX1dJTjMyCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjIGlmIGRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoX1dJTjMyKQorICAvKiA8d2luZG93cy5oPiBzaG91bGQgZGVmaW5lIF9XSU4zMiwgd2hpY2ggbm9ybWFsbHkgaXMgbXV0dWFsbHkKKyAgICogZXhjbHVzaXZlIHdpdGggX19DWUdXSU5fXywgYnV0IGlmIGl0IGRpZG4ndC4uLiAqLworIyAgZGVmaW5lIF9XSU4zMgorICAvKiB0aGlzIGlzIGRvbmUgYmVjYXVzZSBDeWd3aW4gYWxhcm0oKSBmYWlscyBzb21ldGltZXMuICovCisjIGVuZGlmCiAjZW5kaWYKIAogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KQEAgLTE4Myw2ICsxODksMjUgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICiAjaW5jbHVkZSA8b3BlbnNzbC9lY2RoLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxvcGVuc3NsL21vZGVzLmg+CisKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKyN1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5CisjdW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQorI3VuZGVmIERFU19zZXRfa2V5X3VuY2hlY2tlZAorI2VuZGlmCisjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQorI2RlZmluZSBpZGVhX3NldF9lbmNyeXB0X2tleQlwcml2YXRlX2lkZWFfc2V0X2VuY3J5cHRfa2V5CisjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5CisjZGVmaW5lIFJDNF9zZXRfa2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKyNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisjZGVmaW5lIEFFU19zZXRfZW5jcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisjZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CisjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisjZW5kaWYKIAogI2lmbmRlZiBIQVZFX0ZPUksKICMgaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfV0lORE9XUykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNJTlRPU0hfQ0xBU1NJQykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19PUzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfTkVUV0FSRSkKQEAgLTIxNCw3ICsyMzksNyBAQAogc3RhdGljIGludCBkb19tdWx0aShpbnQgbXVsdGkpOwogI2VuZGlmCiAKLSNkZWZpbmUgQUxHT1JfTlVNCTI5CisjZGVmaW5lIEFMR09SX05VTQkzMAogI2RlZmluZSBTSVpFX05VTQk1CiAjZGVmaW5lIFJTQV9OVU0JCTQKICNkZWZpbmUgRFNBX05VTQkJMwpAQCAtMjI5LDcgKzI1NCw3IEBACiAgICJhZXMtMTI4IGNiYyIsImFlcy0xOTIgY2JjIiwiYWVzLTI1NiBjYmMiLAogICAiY2FtZWxsaWEtMTI4IGNiYyIsImNhbWVsbGlhLTE5MiBjYmMiLCJjYW1lbGxpYS0yNTYgY2JjIiwKICAgImV2cCIsInNoYTI1NiIsInNoYTUxMiIsIndoaXJscG9vbCIsCi0gICJhZXMtMTI4IGlnZSIsImFlcy0xOTIgaWdlIiwiYWVzLTI1NiBpZ2UifTsKKyAgImFlcy0xMjggaWdlIiwiYWVzLTE5MiBpZ2UiLCJhZXMtMjU2IGlnZSIsImdoYXNoIn07CiBzdGF0aWMgZG91YmxlIHJlc3VsdHNbQUxHT1JfTlVNXVtTSVpFX05VTV07CiBzdGF0aWMgaW50IGxlbmd0aHNbU0laRV9OVU1dPXsxNiw2NCwyNTYsMTAyNCw4KjEwMjR9OwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQpAQCAtMjczLDkgKzI5OCwxMiBAQAogCiAjaWYgZGVmaW5lZChfV0lOMzIpCiAKKyNpZiAhZGVmaW5lZChTSUdBTFJNKQogI2RlZmluZSBTSUdBTFJNCisjZW5kaWYKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGFwc2Usc2NobG9jazsKLXN0YXRpYyB2b2lkIGFsYXJtKHVuc2lnbmVkIGludCBzZWNzKSB7IGxhcHNlID0gc2VjcyoxMDAwOyB9CitzdGF0aWMgdm9pZCBhbGFybV93aW4zMih1bnNpZ25lZCBpbnQgc2VjcykgeyBsYXBzZSA9IHNlY3MqMTAwMDsgfQorI2RlZmluZSBhbGFybSBhbGFybV93aW4zMgogCiBzdGF0aWMgRFdPUkQgV0lOQVBJIHNsZWVweShWT0lEICphcmcpCiAJewpAQCAtNDY5LDYgKzQ5Nyw3IEBACiAjZGVmaW5lIERfSUdFXzEyOF9BRVMgICAyNgogI2RlZmluZSBEX0lHRV8xOTJfQUVTICAgMjcKICNkZWZpbmUgRF9JR0VfMjU2X0FFUyAgIDI4CisjZGVmaW5lIERfR0hBU0gJCTI5CiAJZG91YmxlIGQ9MC4wOwogCWxvbmcgY1tBTEdPUl9OVU1dW1NJWkVfTlVNXTsKICNkZWZpbmUJUl9EU0FfNTEyCTAKQEAgLTg5NCw2ICs5MjMsMTAgQEAKIAkJCWRvaXRbRF9DQkNfMTkyX0FFU109MTsKIAkJCWRvaXRbRF9DQkNfMjU2X0FFU109MTsKIAkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJnaGFzaCIpID09IDApCisJCQl7CisJCQlkb2l0W0RfR0hBU0hdPTE7CisJCQl9CiAJCWVsc2UKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCkBAIC0xMjY0LDYgKzEyOTcsNyBAQAogCWNbRF9JR0VfMTI4X0FFU11bMF09Y291bnQ7CiAJY1tEX0lHRV8xOTJfQUVTXVswXT1jb3VudDsKIAljW0RfSUdFXzI1Nl9BRVNdWzBdPWNvdW50OworCWNbRF9HSEFTSF1bMF09Y291bnQ7CiAKIAlmb3IgKGk9MTsgaTxTSVpFX05VTTsgaSsrKQogCQl7CkBAIC0xNDU4LDcgKzE0OTIsNyBAQAogIyBlcnJvciAiWW91IGNhbm5vdCBkaXNhYmxlIERFUyBvbiBzeXN0ZW1zIHdpdGhvdXQgU0lHQUxSTS4iCiAjZW5kaWYgLyogT1BFTlNTTF9OT19ERVMgKi8KICNlbHNlCi0jZGVmaW5lIENPTkQoYykJKHJ1bikKKyNkZWZpbmUgQ09ORChjKQkocnVuICYmIGNvdW50PDB4N2ZmZmZmZmYpCiAjZGVmaW5lIENPVU5UKGQpIChjb3VudCkKICNpZm5kZWYgX1dJTjMyCiAJc2lnbmFsKFNJR0FMUk0sc2lnX2RvbmUpOwpAQCAtMTc1NSw3ICsxNzg5LDIyIEBACiAJCQlwcmludF9yZXN1bHQoRF9JR0VfMjU2X0FFUyxqLGNvdW50LGQpOwogCQkJfQogCQl9CisJaWYgKGRvaXRbRF9HSEFTSF0pCisJCXsKKwkJR0NNMTI4X0NPTlRFWFQgKmN0eCA9IENSWVBUT19nY20xMjhfbmV3KCZhZXNfa3MxLChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKwkJQ1JZUFRPX2djbTEyOF9zZXRpdiAoY3R4LCh1bnNpZ25lZCBjaGFyICopIjAxMjM0NTY3ODlhYiIsMTIpOwogCisJCWZvciAoaj0wOyBqPFNJWkVfTlVNOyBqKyspCisJCQl7CisJCQlwcmludF9tZXNzYWdlKG5hbWVzW0RfR0hBU0hdLGNbRF9HSEFTSF1bal0sbGVuZ3Roc1tqXSk7CisJCQlUaW1lX0YoU1RBUlQpOworCQkJZm9yIChjb3VudD0wLHJ1bj0xOyBDT05EKGNbRF9HSEFTSF1bal0pOyBjb3VudCsrKQorCQkJCUNSWVBUT19nY20xMjhfYWFkKGN0eCxidWYsbGVuZ3Roc1tqXSk7CisJCQlkPVRpbWVfRihTVE9QKTsKKwkJCXByaW50X3Jlc3VsdChEX0dIQVNILGosY291bnQsZCk7CisJCQl9CisJCUNSWVBUT19nY20xMjhfcmVsZWFzZShjdHgpOworCQl9CiAKICNlbmRpZgogI2VuZGlmCkBAIC0yNTUwLDcgKzI1OTksNyBAQAogCUJJT19wcmludGYoYmlvX2VycixtciA/ICIrRFRQOiVkOiVzOiVzOiVkXG4iCiAJCQkgICA6ICJEb2luZyAlZCBiaXQgJXMgJXMncyBmb3IgJWRzOiAiLGJpdHMsc3RyLHN0cjIsdG0pOwogCSh2b2lkKUJJT19mbHVzaChiaW9fZXJyKTsKLQlhbGFybShSU0FfU0VDT05EUyk7CisJYWxhcm0odG0pOwogI2Vsc2UKIAlCSU9fcHJpbnRmKGJpb19lcnIsbXIgPyAiK0ROUDolbGQ6JWQ6JXM6JXNcbiIKIAkJCSAgIDogIkRvaW5nICVsZCAlZCBiaXQgJXMgJXMnczogIixudW0sYml0cyxzdHIsc3RyMik7CkBAIC0yNjEwLDcgKzI2NTksMTEgQEAKIAlmZHM9bWFsbG9jKG11bHRpKnNpemVvZiAqZmRzKTsKIAlmb3Iobj0wIDsgbiA8IG11bHRpIDsgKytuKQogCQl7Ci0JCXBpcGUoZmQpOworCQlpZiAocGlwZShmZCkgPT0gLTEpCisJCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgInBpcGUgZmFpbHVyZVxuIik7CisJCQlleGl0KDEpOworCQkJfQogCQlmZmx1c2goc3Rkb3V0KTsKIAkJZmZsdXNoKHN0ZGVycik7CiAJCWlmKGZvcmsoKSkKQEAgLTI2MjIsNyArMjY3NSwxMSBAQAogCQkJewogCQkJY2xvc2UoZmRbMF0pOwogCQkJY2xvc2UoMSk7Ci0JCQlkdXAoZmRbMV0pOworCQkJaWYgKGR1cChmZFsxXSkgPT0gLTEpCisJCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAiZHVwIGZhaWxlZFxuIik7CisJCQkJZXhpdCgxKTsKKwkJCQl9CiAJCQljbG9zZShmZFsxXSk7CiAJCQltcj0xOwogCQkJdXNlcnRpbWU9MDsKZGlmZiAtLWdpdCBhL2FwcHMvc3JwLmMgYi9hcHBzL3NycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZTFiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL3NycC5jCkBAIC0wLDAgKzEsNzU2IEBACisvKiBhcHBzL3NycC5jICovCisvKiBXcml0dGVuIGJ5IFBldGVyIFN5bHZlc3RlciAocGV0ZXIuc3lsdmVzdGVyQGVkZWx3ZWIuZnIpICAKKyAqIGZvciB0aGUgRWRlbEtleSBwcm9qZWN0IGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0IDIwMDQuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY29uZi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3R4dF9kYi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zcnAuaD4KKworI2luY2x1ZGUgImFwcHMuaCIKKworI3VuZGVmIFBST0cKKyNkZWZpbmUgUFJPRyBzcnBfbWFpbgorCisjZGVmaW5lIEJBU0VfU0VDVElPTgkic3JwIgorI2RlZmluZSBDT05GSUdfRklMRSAib3BlbnNzbC5jbmYiCisKKyNkZWZpbmUgRU5WX1JBTkRGSUxFCQkiUkFOREZJTEUiCisKKyNkZWZpbmUgRU5WX0RBVEFCQVNFCQkic3JwdmZpbGUiCisjZGVmaW5lIEVOVl9ERUZBVUxUX1NSUAkJImRlZmF1bHRfc3JwIgorCitzdGF0aWMgY2hhciAqc3JwX3VzYWdlW109eworInVzYWdlOiBzcnAgW2FyZ3NdIFt1c2VyXSBcbiIsCisiXG4iLAorIiAtdmVyYm9zZSAgICAgICAgVGFsayBhbG90IHdoaWxlIGRvaW5nIHRoaW5nc1xuIiwKKyIgLWNvbmZpZyBmaWxlICAgIEEgY29uZmlnIGZpbGVcbiIsCisiIC1uYW1lIGFyZyAgICAgICBUaGUgcGFydGljdWxhciBzcnAgZGVmaW5pdGlvbiB0byB1c2VcbiIsCisiIC1zcnB2ZmlsZSBhcmcgICBUaGUgc3JwIHZlcmlmaWVyIGZpbGUgbmFtZVxuIiwKKyIgLWFkZCAgICAgICAgICAgIGFkZCBhbiB1c2VyIGFuZCBzcnAgdmVyaWZpZXJcbiIsCisiIC1tb2RpZnkgICAgICAgICBtb2RpZnkgdGhlIHNycCB2ZXJpZmllciBvZiBhbiBleGlzdGluZyB1c2VyXG4iLAorIiAtZGVsZXRlICAgICAgICAgZGVsZXRlIHVzZXIgZnJvbSB2ZXJpZmllciBmaWxlXG4iLAorIiAtbGlzdCAgICAgICAgICAgbGlzdCB1c2VyXG4iLAorIiAtZ24gYXJnICAgICAgICAgZyBhbmQgTiB2YWx1ZXMgdG8gYmUgdXNlZCBmb3IgbmV3IHZlcmlmaWVyXG4iLAorIiAtdXNlcmluZm8gYXJnICAgYWRkaXRpb25hbCBpbmZvIHRvIGJlIHNldCBmb3IgdXNlclxuIiwKKyIgLXBhc3NpbiBhcmcgICAgIGlucHV0IGZpbGUgcGFzcyBwaHJhc2Ugc291cmNlXG4iLAorIiAtcGFzc291dCBhcmcgICAgb3V0cHV0IGZpbGUgcGFzcyBwaHJhc2Ugc291cmNlXG4iLAorI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIiAtZW5naW5lIGUgICAgICAgICAtIHVzZSBlbmdpbmUgZSwgcG9zc2libHkgYSBoYXJkd2FyZSBkZXZpY2UuXG4iLAorI2VuZGlmCitOVUxMCit9OworCisjaWZkZWYgRUZFTkNFCitleHRlcm4gaW50IEVGX1BST1RFQ1RfRlJFRTsKK2V4dGVybiBpbnQgRUZfUFJPVEVDVF9CRUxPVzsKK2V4dGVybiBpbnQgRUZfQUxJR05NRU5UOworI2VuZGlmCisKK3N0YXRpYyBDT05GICpjb25mPU5VTEw7CitzdGF0aWMgY2hhciAqc2VjdGlvbj1OVUxMOworCisjZGVmaW5lIFZFUkJPU0UgaWYgKHZlcmJvc2UpIAorI2RlZmluZSBWVkVSQk9TRSBpZiAodmVyYm9zZT4xKSAKKworCitpbnQgTUFJTihpbnQsIGNoYXIgKiopOworCitzdGF0aWMgaW50IGdldF9pbmRleChDQV9EQiAqZGIsIGNoYXIqIGlkLCBjaGFyIHR5cGUpCisJeworCWNoYXIgKiogcHA7CisJaW50IGk7CisJaWYgKGlkID09IE5VTEwpIHJldHVybiAtMTsKKwlpZiAodHlwZSA9PSBEQl9TUlBfSU5ERVgpIAorCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKKwkJeworCQlwcCA9IChjaGFyICoqKXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsIGkpOworCQlpZiAocHBbREJfc3JwdHlwZV1bMF0gPT0gREJfU1JQX0lOREVYICAmJiAhc3RyY21wKGlkLCBwcFtEQl9zcnBpZF0pKSAKKwkJCXJldHVybiBpOworCQl9CisJZWxzZSBmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKyspCisJCXsKKwkJcHAgPSAoY2hhciAqKilza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLCBpKTsKKworCQlpZiAocHBbREJfc3JwdHlwZV1bMF0gIT0gREJfU1JQX0lOREVYICYmICFzdHJjbXAoaWQscHBbREJfc3JwaWRdKSkgCisJCQlyZXR1cm4gaTsKKwkJfQorCisJcmV0dXJuIC0xIDsgCisJfQorCitzdGF0aWMgdm9pZCBwcmludF9lbnRyeShDQV9EQiAqZGIsIEJJTyAqYmlvLCBpbnQgaW5keCwgaW50IHZlcmJvc2UsIGNoYXIgKnMpCisJeworCWlmIChpbmR4ID49IDAgJiYgdmVyYm9zZSkKKwkJeworCQlpbnQgajsKKwkJY2hhciAqKnBwID0gKGNoYXIgKiopc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaW5keCk7CisJCUJJT19wcmludGYoYmlvLCAiJXMgXCIlc1wiXG4iLCBzLCBwcFtEQl9zcnBpZF0pOworCQlmb3IgKGogPSAwOyBqIDwgREJfTlVNQkVSOyBqKyspCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsIiAgJWQgPSBcIiVzXCJcbiIsIGosIHBwW2pdKTsKKwkJCX0KKwkJfQorCX0KKworc3RhdGljIHZvaWQgcHJpbnRfaW5kZXgoQ0FfREIgKmRiLCBCSU8gKmJpbywgaW50IGluZGV4aW5kZXgsIGludCB2ZXJib3NlKQorCXsKKwlwcmludF9lbnRyeShkYiwgYmlvLCBpbmRleGluZGV4LCB2ZXJib3NlLCAiZyBOIGVudHJ5IikgOworCX0KKworc3RhdGljIHZvaWQgcHJpbnRfdXNlcihDQV9EQiAqZGIsIEJJTyAqYmlvLCBpbnQgdXNlcmluZGV4LCBpbnQgdmVyYm9zZSkKKwl7CisJaWYgKHZlcmJvc2UgPiAwKQorCQl7CisJCWNoYXIgKipwcCA9IChjaGFyICoqKXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsIHVzZXJpbmRleCk7CisKKwkJaWYgKHBwW0RCX3NycHR5cGVdWzBdICE9ICdJJykKKwkJCXsKKwkJCXByaW50X2VudHJ5KGRiLCBiaW8sIHVzZXJpbmRleCwgdmVyYm9zZSwgIlVzZXIgZW50cnkiKTsKKwkJCXByaW50X2VudHJ5KGRiLCBiaW8sIGdldF9pbmRleChkYiwgcHBbREJfc3JwZ05dLCAnSScpLCB2ZXJib3NlLCAiZyBOIGVudHJ5Iik7CisJCQl9CisKKwkJfQorCX0KKworc3RhdGljIGludCB1cGRhdGVfaW5kZXgoQ0FfREIgKmRiLCBCSU8gKmJpbywgY2hhciAqKnJvdykKKwl7CisJY2hhciAqKiBpcm93OworCWludCBpOworCisJaWYgKChpcm93PShjaGFyICoqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihjaGFyICopKihEQl9OVU1CRVIrMSkpKSA9PSBOVUxMKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCXJldHVybiAwOworCQl9CisKKwlmb3IgKGk9MDsgaTxEQl9OVU1CRVI7IGkrKykKKwkJeworCQlpcm93W2ldPXJvd1tpXTsKKwkJcm93W2ldPU5VTEw7CisJCX0KKwlpcm93W0RCX05VTUJFUl09TlVMTDsKKworCWlmICghVFhUX0RCX2luc2VydChkYi0+ZGIsaXJvdykpCisJCXsKKwkJQklPX3ByaW50ZihiaW8sImZhaWxlZCB0byB1cGRhdGUgc3JwdmZpbGVcbiIpOworCQlCSU9fcHJpbnRmKGJpbywiVFhUX0RCIGVycm9yIG51bWJlciAlbGRcbiIsZGItPmRiLT5lcnJvcik7CisJCU9QRU5TU0xfZnJlZShpcm93KTsKKwkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyB2b2lkIGxvb2t1cF9mYWlsKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhZykKKwl7CisJQklPX3ByaW50ZihiaW9fZXJyLCJ2YXJpYWJsZSBsb29rdXAgZmFpbGVkIGZvciAlczo6JXNcbiIsbmFtZSx0YWcpOworCX0KKworCitzdGF0aWMgY2hhciAqc3JwX3ZlcmlmeV91c2VyKGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnNycF92ZXJpZmllciwKKwkJCSAgICAgY2hhciAqc3JwX3VzZXJzYWx0LCBjb25zdCBjaGFyICpnLCBjb25zdCBjaGFyICpOLAorCQkJICAgICBjb25zdCBjaGFyICpwYXNzaW4sIEJJTyAqYmlvLCBpbnQgdmVyYm9zZSkKKwl7CisJY2hhciBwYXNzd29yZFsxMDI0XTsKKwlQV19DQl9EQVRBIGNiX3RtcDsKKwljaGFyICp2ZXJpZmllciA9IE5VTEw7CisJY2hhciAqZ05pZCA9IE5VTEw7CisKKwljYl90bXAucHJvbXB0X2luZm8gPSB1c2VyOworCWNiX3RtcC5wYXNzd29yZCA9IHBhc3NpbjsKKworIAlpZiAocGFzc3dvcmRfY2FsbGJhY2socGFzc3dvcmQsIDEwMjQsIDAsICZjYl90bXApID4wKQorCQl7CisJCVZFUkJPU0UgQklPX3ByaW50ZihiaW8sIlZhbGlkYXRpbmdcbiAgIHVzZXI9XCIlc1wiXG4gc3JwX3ZlcmlmaWVyPVwiJXNcIlxuIHNycF91c2Vyc2FsdD1cIiVzXCJcbiBnPVwiJXNcIlxuIE49XCIlc1wiXG4iLHVzZXIsc3JwX3ZlcmlmaWVyLHNycF91c2Vyc2FsdCwgZywgTik7CisJCUJJT19wcmludGYoYmlvLCAiUGFzcyAlc1xuIiwgcGFzc3dvcmQpOworCisJCWlmICghKGdOaWQ9U1JQX2NyZWF0ZV92ZXJpZmllcih1c2VyLCBwYXNzd29yZCwgJnNycF91c2Vyc2FsdCwgJnZlcmlmaWVyLCBOLCBnKSkpCisJCQl7CisJCQlCSU9fcHJpbnRmKGJpbywgIkludGVybmFsIGVycm9yIHZhbGlkYXRpbmcgU1JQIHZlcmlmaWVyXG4iKTsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJaWYgKHN0cmNtcCh2ZXJpZmllciwgc3JwX3ZlcmlmaWVyKSkKKwkJCQlnTmlkID0gTlVMTDsKKwkJCU9QRU5TU0xfZnJlZSh2ZXJpZmllcik7CisJCQl9CisJCX0KKwlyZXR1cm4gZ05pZDsKKwl9CisKK3N0YXRpYyBjaGFyICpzcnBfY3JlYXRlX3VzZXIoY2hhciAqdXNlciwgY2hhciAqKnNycF92ZXJpZmllciwKKwkJCSAgICAgY2hhciAqKnNycF91c2Vyc2FsdCwgY2hhciAqZywgY2hhciAqTiwKKwkJCSAgICAgY2hhciAqcGFzc291dCwgQklPICpiaW8sIGludCB2ZXJib3NlKQorCXsKKyAJY2hhciBwYXNzd29yZFsxMDI0XTsKKyAgICAgICAgUFdfQ0JfREFUQSBjYl90bXA7CisJY2hhciAqZ05pZCA9IE5VTEw7CisJY2hhciAqc2FsdCA9IE5VTEw7CisgICAgICAgIGNiX3RtcC5wcm9tcHRfaW5mbyA9IHVzZXI7CisgICAgICAgIGNiX3RtcC5wYXNzd29yZCA9IHBhc3NvdXQ7CisKKwlpZiAocGFzc3dvcmRfY2FsbGJhY2socGFzc3dvcmQsMTAyNCwxLCZjYl90bXApID4wKQorCQl7CisJCVZFUkJPU0UgQklPX3ByaW50ZihiaW8sIkNyZWF0aW5nXG4gdXNlcj1cIiVzXCJcbiBnPVwiJXNcIlxuIE49XCIlc1wiXG4iLHVzZXIsZyxOKTsKKwkJaWYgKCEoZ05pZCA9U1JQX2NyZWF0ZV92ZXJpZmllcih1c2VyLCBwYXNzd29yZCwgJnNhbHQsIHNycF92ZXJpZmllciwgTiwgZykpKQorCQkJeworCQkJQklPX3ByaW50ZihiaW8sIkludGVybmFsIGVycm9yIGNyZWF0aW5nIFNSUCB2ZXJpZmllclxuIik7CisJCQl9CisJCWVsc2UgCisJCQkqc3JwX3VzZXJzYWx0ID0gc2FsdDsKKwkJVlZFUkJPU0UgQklPX3ByaW50ZihiaW8sImdOaWQ9JXMgc2FsdCA9XCIlc1wiXG4gdmVyaWZpZXIgPVwiJXNcIlxuIiwgZ05pZCxzYWx0LCAqc3JwX3ZlcmlmaWVyKTsKKworCQl9CisJcmV0dXJuIGdOaWQ7CisJfQorCitpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisJeworCWludCBhZGRfdXNlciA9IDA7CisJaW50IGxpc3RfdXNlcj0gMDsKKwlpbnQgZGVsZXRlX3VzZXI9IDA7CisJaW50IG1vZGlmeV91c2VyPSAwOworCWNoYXIgKiB1c2VyID0gTlVMTDsKKworCWNoYXIgKnBhc3NhcmdpbiA9IE5VTEwsICpwYXNzYXJnb3V0ID0gTlVMTDsKKwljaGFyICpwYXNzaW4gPSBOVUxMLCAqcGFzc291dCA9IE5VTEw7CisgICAgICAgIGNoYXIgKiBnTiA9IE5VTEw7CisJaW50IGdOaW5kZXggPSAtMTsKKwljaGFyICoqIGdOcm93ID0gTlVMTDsKKwlpbnQgbWF4Z04gPSAtMTsKKworCWNoYXIgKiB1c2VyaW5mbyA9IE5VTEw7CisKKwlpbnQgYmFkb3BzPTA7CisJaW50IHJldD0xOworCWludCBlcnJvcnM9MDsKKwlpbnQgdmVyYm9zZT0wOworCWludCBkb3VwZGF0ZWRiPTA7CisJY2hhciAqY29uZmlnZmlsZT1OVUxMOworCWNoYXIgKmRiZmlsZT1OVUxMOworCUNBX0RCICpkYj1OVUxMOworCWNoYXIgKipwcCA7CisJaW50IGk7CisJbG9uZyBlcnJvcmxpbmUgPSAtMTsKKwljaGFyICpyYW5kZmlsZT1OVUxMOworI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorCWNoYXIgKmVuZ2luZSA9IE5VTEw7CisjZW5kaWYKKwljaGFyICp0b2ZyZWU9TlVMTDsKKwlEQl9BVFRSIGRiX2F0dHI7CisKKyNpZmRlZiBFRkVOQ0UKK0VGX1BST1RFQ1RfRlJFRT0xOworRUZfUFJPVEVDVF9CRUxPVz0xOworRUZfQUxJR05NRU5UPTA7CisjZW5kaWYKKworCWFwcHNfc3RhcnR1cCgpOworCisJY29uZiA9IE5VTEw7CisJc2VjdGlvbiA9IE5VTEw7CisKKwlpZiAoYmlvX2VyciA9PSBOVUxMKQorCQlpZiAoKGJpb19lcnI9QklPX25ldyhCSU9fc19maWxlKCkpKSAhPSBOVUxMKQorCQkJQklPX3NldF9mcChiaW9fZXJyLHN0ZGVycixCSU9fTk9DTE9TRXxCSU9fRlBfVEVYVCk7CisKKwlhcmdjLS07CisJYXJndisrOworCXdoaWxlIChhcmdjID49IDEgJiYgYmFkb3BzID09IDApCisJCXsKKwkJaWYJKHN0cmNtcCgqYXJndiwiLXZlcmJvc2UiKSA9PSAwKQorCQkJdmVyYm9zZSsrOworCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jb25maWciKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJY29uZmlnZmlsZT0gKigrK2FyZ3YpOworCQkJfQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1uYW1lIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXNlY3Rpb249ICooKythcmd2KTsKKwkJCX0KKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc3JwdmZpbGUiKSA9PSAwKQorCQkJeworCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworCQkJZGJmaWxlPSAqKCsrYXJndik7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWFkZCIpID09IDApCisJCQlhZGRfdXNlcj0xOworCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1kZWxldGUiKSA9PSAwKQorCQkJZGVsZXRlX3VzZXI9MTsKKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItbW9kaWZ5IikgPT0gMCkKKwkJCW1vZGlmeV91c2VyPTE7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxpc3QiKSA9PSAwKQorCQkJbGlzdF91c2VyPTE7CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWduIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCWdOPSAqKCsrYXJndik7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXVzZXJpbmZvIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXVzZXJpbmZvPSAqKCsrYXJndik7CisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXBhc3NpbiIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlwYXNzYXJnaW49ICooKythcmd2KTsKKwkJCX0KKwkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItcGFzc291dCIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQlwYXNzYXJnb3V0PSAqKCsrYXJndik7CisJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWVuZ2luZSIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CisJCQllbmdpbmU9ICooKythcmd2KTsKKwkJCX0KKyNlbmRpZgorCisJCWVsc2UgaWYgKCoqYXJndiA9PSAnLScpCisJCQl7CitiYWQ6CisJCQlCSU9fcHJpbnRmKGJpb19lcnIsInVua25vd24gb3B0aW9uICVzXG4iLCphcmd2KTsKKwkJCWJhZG9wcz0xOworCQkJYnJlYWs7CisJCQl9CisJCWVsc2UgCisJCQlicmVhazsKKwkKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJCX0KKworCWlmIChkYmZpbGUgJiYgY29uZmlnZmlsZSkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1kYmZpbGUgYW5kIC1jb25maWdmaWxlIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIuXG4iKTsKKwkJYmFkb3BzID0gMTsKKwkJfQorCWlmIChhZGRfdXNlcitkZWxldGVfdXNlcittb2RpZnlfdXNlcitsaXN0X3VzZXIgIT0gMSkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIkV4YWN0bHkgb25lIG9mIHRoZSBvcHRpb25zIC1hZGQsIC1kZWxldGUsIC1tb2RpZnkgLWxpc3QgbXVzdCBiZSBzcGVjaWZpZWQuXG4iKTsKKwkJYmFkb3BzID0gMTsKKwkJfQorCWlmIChkZWxldGVfdXNlcittb2RpZnlfdXNlcitkZWxldGVfdXNlcj09IDEgJiYgYXJnYyA8PSAwKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwiTmVlZCBhdCBsZWFzdCBvbmUgdXNlciBmb3Igb3B0aW9ucyAtYWRkLCAtZGVsZXRlLCAtbW9kaWZ5LiBcbiIpOworCQliYWRvcHMgPSAxOworCQl9CisJaWYgKChwYXNzaW4gfHwgcGFzc291dCkgJiYgYXJnYyAhPSAxICkKKwkJeworCQlCSU9fcHJpbnRmKGJpb19lcnIsIi1wYXNzaW4sIC1wYXNzb3V0IGFyZ3VtZW50cyBvbmx5IHZhbGlkIHdpdGggb25lIHVzZXIuXG4iKTsKKwkJYmFkb3BzID0gMTsKKwkJfQorCisJaWYgKGJhZG9wcykKKwkJeworCQlmb3IgKHBwPXNycF91c2FnZTsgKCpwcCAhPSBOVUxMKTsgcHArKykKKwkJCUJJT19wcmludGYoYmlvX2VyciwiJXMiLCpwcCk7CisKKwkJQklPX3ByaW50ZihiaW9fZXJyLCIgLXJhbmQgZmlsZSVjZmlsZSVjLi4uXG4iLCBMSVNUX1NFUEFSQVRPUl9DSEFSLCBMSVNUX1NFUEFSQVRPUl9DSEFSKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCIgICAgICAgICAgICAgICAgIGxvYWQgdGhlIGZpbGUgKG9yIHRoZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5KSBpbnRvXG4iKTsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCIgICAgICAgICAgICAgICAgIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuIik7CisJCWdvdG8gZXJyOworCQl9CisKKwlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOworCisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisJc2V0dXBfZW5naW5lKGJpb19lcnIsIGVuZ2luZSwgMCk7CisjZW5kaWYKKworCWlmKCFhcHBfcGFzc3dkKGJpb19lcnIsIHBhc3NhcmdpbiwgcGFzc2FyZ291dCwgJnBhc3NpbiwgJnBhc3NvdXQpKQorCQl7CisJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIGdldHRpbmcgcGFzc3dvcmRzXG4iKTsKKwkJZ290byBlcnI7CisJCX0KKworICAgICAgICBpZiAoIWRiZmlsZSkKKwkJeworCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXRvZnJlZT1OVUxMOworCQlpZiAoY29uZmlnZmlsZSA9PSBOVUxMKSBjb25maWdmaWxlID0gZ2V0ZW52KCJPUEVOU1NMX0NPTkYiKTsKKwkJaWYgKGNvbmZpZ2ZpbGUgPT0gTlVMTCkgY29uZmlnZmlsZSA9IGdldGVudigiU1NMRUFZX0NPTkYiKTsKKwkJaWYgKGNvbmZpZ2ZpbGUgPT0gTlVMTCkKKwkJCXsKKwkJCWNvbnN0IGNoYXIgKnM9WDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2FyZWEoKTsKKwkJCXNpemVfdCBsZW47CisKKyNpZmRlZiBPUEVOU1NMX1NZU19WTVMKKwkJCWxlbiA9IHN0cmxlbihzKStzaXplb2YoQ09ORklHX0ZJTEUpOworCQkJdG9mcmVlPU9QRU5TU0xfbWFsbG9jKGxlbik7CisJCQlzdHJjcHkodG9mcmVlLHMpOworI2Vsc2UKKwkJCWxlbiA9IHN0cmxlbihzKStzaXplb2YoQ09ORklHX0ZJTEUpKzE7CisJCQl0b2ZyZWU9T1BFTlNTTF9tYWxsb2MobGVuKTsKKwkJCUJVRl9zdHJsY3B5KHRvZnJlZSxzLGxlbik7CisJCQlCVUZfc3RybGNhdCh0b2ZyZWUsIi8iLGxlbik7CisjZW5kaWYKKwkJCUJVRl9zdHJsY2F0KHRvZnJlZSxDT05GSUdfRklMRSxsZW4pOworCQkJY29uZmlnZmlsZT10b2ZyZWU7CisJCQl9CisKKwkJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlVzaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSAlc1xuIixjb25maWdmaWxlKTsKKwkJY29uZiA9IE5DT05GX25ldyhOVUxMKTsKKwkJaWYgKE5DT05GX2xvYWQoY29uZixjb25maWdmaWxlLCZlcnJvcmxpbmUpIDw9IDApCisJCQl7CisJCQlpZiAoZXJyb3JsaW5lIDw9IDApCisJCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlcnJvciBsb2FkaW5nIHRoZSBjb25maWcgZmlsZSAnJXMnXG4iLAorCQkJCQljb25maWdmaWxlKTsKKwkJCWVsc2UKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIG9uIGxpbmUgJWxkIG9mIGNvbmZpZyBmaWxlICclcydcbiIKKwkJCQkJLGVycm9ybGluZSxjb25maWdmaWxlKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlpZih0b2ZyZWUpCisJCQl7CisJCQlPUEVOU1NMX2ZyZWUodG9mcmVlKTsKKwkJCXRvZnJlZSA9IE5VTEw7CisJCQl9CisKKwkJaWYgKCFsb2FkX2NvbmZpZyhiaW9fZXJyLCBjb25mKSkKKwkJCWdvdG8gZXJyOworCisJLyogTGV0cyBnZXQgdGhlIGNvbmZpZyBzZWN0aW9uIHdlIGFyZSB1c2luZyAqLworCQlpZiAoc2VjdGlvbiA9PSBOVUxMKQorCQkJeworCQkJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsInRyeWluZyB0byByZWFkICIgRU5WX0RFRkFVTFRfU1JQICIgaW4gXCIgQkFTRV9TRUNUSU9OIFwiXG4iKTsKKworCQkJc2VjdGlvbj1OQ09ORl9nZXRfc3RyaW5nKGNvbmYsQkFTRV9TRUNUSU9OLEVOVl9ERUZBVUxUX1NSUCk7CisJCQlpZiAoc2VjdGlvbiA9PSBOVUxMKQorCQkJCXsKKwkJCQlsb29rdXBfZmFpbChCQVNFX1NFQ1RJT04sRU5WX0RFRkFVTFRfU1JQKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl9CisgICAgICAgICAKKwkJaWYgKHJhbmRmaWxlID09IE5VTEwgJiYgY29uZikKKwkgICAgICAgIAlyYW5kZmlsZSA9IE5DT05GX2dldF9zdHJpbmcoY29uZiwgQkFTRV9TRUNUSU9OLCAiUkFOREZJTEUiKTsKKworCQorCQlWRVJCT1NFIEJJT19wcmludGYoYmlvX2VyciwidHJ5aW5nIHRvIHJlYWQgIiBFTlZfREFUQUJBU0UgIiBpbiBzZWN0aW9uIFwiJXNcIlxuIixzZWN0aW9uKTsKKworCQlpZiAoKGRiZmlsZT1OQ09ORl9nZXRfc3RyaW5nKGNvbmYsc2VjdGlvbixFTlZfREFUQUJBU0UpKSA9PSBOVUxMKQorCQkJeworCQkJbG9va3VwX2ZhaWwoc2VjdGlvbixFTlZfREFUQUJBU0UpOworCQkJZ290byBlcnI7CisJCQl9CisKKyAgICAgICAgCX0KKwlpZiAocmFuZGZpbGUgPT0gTlVMTCkKKwkJRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgCWVsc2UgCisJCWFwcF9SQU5EX2xvYWRfZmlsZShyYW5kZmlsZSwgYmlvX2VyciwgMCk7CisKKwlWRVJCT1NFIEJJT19wcmludGYoYmlvX2VyciwiVHJ5aW5nIHRvIHJlYWQgU1JQIHZlcmlmaWVyIGZpbGUgXCIlc1wiXG4iLGRiZmlsZSk7CisKKwlkYiA9IGxvYWRfaW5kZXgoZGJmaWxlLCAmZGJfYXR0cik7CisJaWYgKGRiID09IE5VTEwpIGdvdG8gZXJyOworCisJLyogTGV0cyBjaGVjayBzb21lIGZpZWxkcyAqLworCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKKwkJeworCQlwcCA9IChjaGFyICoqKXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsIGkpOworCQorCQlpZiAocHBbREJfc3JwdHlwZV1bMF0gPT0gREJfU1JQX0lOREVYKQorCQkJeworCQkJbWF4Z04gPSBpOworCQkJaWYgKGdOaW5kZXggPCAwICYmIGdOICE9IE5VTEwgJiYgIXN0cmNtcChnTiwgcHBbREJfc3JwaWRdKSkKKwkJCQlnTmluZGV4ID0gaTsKKworCQkJcHJpbnRfaW5kZXgoZGIsIGJpb19lcnIsIGksIHZlcmJvc2UgPiAxKTsKKwkJCX0KKwkJfQorCQorCVZFUkJPU0UgQklPX3ByaW50ZihiaW9fZXJyLCAiRGF0YWJhc2UgaW5pdGlhbGlzZWRcbiIpOworCisJaWYgKGdOaW5kZXggPj0gMCkKKwkJeworCQlnTnJvdyA9IChjaGFyICoqKXNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsIGdOaW5kZXgpOworCQlwcmludF9lbnRyeShkYiwgYmlvX2VyciwgZ05pbmRleCwgdmVyYm9zZSA+IDEsICJEZWZhdWx0IGcgYW5kIE4iKSA7CisJCX0KKwllbHNlIGlmIChtYXhnTiA+IDAgJiYgIVNSUF9nZXRfZGVmYXVsdF9nTihnTikpCisJCXsKKwkJQklPX3ByaW50ZihiaW9fZXJyLCAiTm8gZyBhbmQgTiB2YWx1ZSBmb3IgaW5kZXggXCIlc1wiXG4iLCBnTik7CisJCWdvdG8gZXJyOworCQl9CisJZWxzZQorCQl7CisJCVZFUkJPU0UgQklPX3ByaW50ZihiaW9fZXJyLCAiRGF0YWJhc2UgaGFzIG5vIGcgTiBpbmZvcm1hdGlvbi5cbiIpOworCQlnTnJvdyA9IE5VTEw7CisJCX0KKwkKKworCVZWRVJCT1NFIEJJT19wcmludGYoYmlvX2VyciwiU3RhcnRpbmcgdXNlciBwcm9jZXNzaW5nXG4iKTsKKworCWlmIChhcmdjID4gMCkKKwkJdXNlciA9ICooYXJndisrKSA7CisKKwl3aGlsZSAobGlzdF91c2VyIHx8IHVzZXIpCisJCXsKKwkJaW50IHVzZXJpbmRleCA9IC0xOworCQlpZiAodXNlcikgCisJCQlWVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsICJQcm9jZXNzaW5nIHVzZXIgXCIlc1wiXG4iLCB1c2VyKTsKKwkJaWYgKCh1c2VyaW5kZXggPSBnZXRfaW5kZXgoZGIsIHVzZXIsICdVJykpID49IDApCisJCQl7CisJCQlwcmludF91c2VyKGRiLCBiaW9fZXJyLCB1c2VyaW5kZXgsICh2ZXJib3NlID4gMCkgfHwgbGlzdF91c2VyKTsKKwkJCX0KKwkJCisJCWlmIChsaXN0X3VzZXIpCisJCQl7CisJCQlpZiAodXNlciA9PSBOVUxMKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsIkxpc3QgYWxsIHVzZXJzXG4iKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7IGkrKykKKwkJCQkJeworCQkJCQlwcmludF91c2VyKGRiLGJpb19lcnIsIGksIDEpOworCQkJCQl9CisJCQkJbGlzdF91c2VyID0gMDsKKwkJCQl9CisJCQllbHNlIGlmICh1c2VyaW5kZXggPCAwKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJ1c2VyIFwiJXNcIiBkb2VzIG5vdCBleGlzdCwgaWdub3JlZC4gdFxuIiwKKwkJCQkJICAgdXNlcik7CisJCQkJZXJyb3JzKys7CisJCQkJfQorCQkJfQorCQllbHNlIGlmIChhZGRfdXNlcikKKwkJCXsKKwkJCWlmICh1c2VyaW5kZXggPj0gMCkKKwkJCQl7CisJCQkJLyogcmVhY3RpdmF0aW9uIG9mIGEgbmV3IHVzZXIgKi8KKwkJCQljaGFyICoqcm93ID0gKGNoYXIgKiopc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgdXNlcmluZGV4KTsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJ1c2VyIFwiJXNcIiByZWFjdGl2YXRlZC5cbiIsIHVzZXIpOworCQkJCXJvd1tEQl9zcnB0eXBlXVswXSA9ICdWJzsKKworCQkJCWRvdXBkYXRlZGIgPSAxOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJY2hhciAqcm93W0RCX05VTUJFUl0gOyBjaGFyICpnTmlkOworCQkJCXJvd1tEQl9zcnB2ZXJpZmllcl0gPSBOVUxMOworCQkJCXJvd1tEQl9zcnBzYWx0XSA9IE5VTEw7CisJCQkJcm93W0RCX3NycGluZm9dID0gTlVMTDsKKwkJCQlpZiAoIShnTmlkID0gc3JwX2NyZWF0ZV91c2VyKHVzZXIsJihyb3dbREJfc3JwdmVyaWZpZXJdKSwgJihyb3dbREJfc3Jwc2FsdF0pLGdOcm93P2dOcm93W0RCX3NycHNhbHRdOmdOLGdOcm93P2dOcm93W0RCX3NycHZlcmlmaWVyXTpOVUxMLCBwYXNzb3V0LCBiaW9fZXJyLHZlcmJvc2UpKSkKKwkJCQkJeworCQkJCQkJQklPX3ByaW50ZihiaW9fZXJyLCAiQ2Fubm90IGNyZWF0ZSBzcnAgdmVyaWZpZXIgZm9yIHVzZXIgXCIlc1wiLCBvcGVyYXRpb24gYWJhbmRvbmVkIC5cbiIsIHVzZXIpOworCQkJCQkJZXJyb3JzKys7CisJCQkJCQlnb3RvIGVycjsKKwkJCQkJfQorCQkJCXJvd1tEQl9zcnBpZF0gPSBCVUZfc3RyZHVwKHVzZXIpOworCQkJCXJvd1tEQl9zcnB0eXBlXSA9IEJVRl9zdHJkdXAoInYiKTsKKwkJCQlyb3dbREJfc3JwZ05dID0gQlVGX3N0cmR1cChnTmlkKTsKKworCQkJCWlmICghcm93W0RCX3NycGlkXSB8fCAhcm93W0RCX3NycGdOXSB8fCAhcm93W0RCX3NycHR5cGVdIHx8ICFyb3dbREJfc3JwdmVyaWZpZXJdIHx8ICFyb3dbREJfc3Jwc2FsdF0gfHwKKwkJCQkJKHVzZXJpbmZvICYmICghKHJvd1tEQl9zcnBpbmZvXSA9IEJVRl9zdHJkdXAodXNlcmluZm8pKSkpIHx8IAorCQkJCQkhdXBkYXRlX2luZGV4KGRiLCBiaW9fZXJyLCByb3cpKQorCQkJCQl7CisJCQkJCWlmIChyb3dbREJfc3JwaWRdKSBPUEVOU1NMX2ZyZWUocm93W0RCX3NycGlkXSk7CisJCQkJCWlmIChyb3dbREJfc3JwZ05dKSBPUEVOU1NMX2ZyZWUocm93W0RCX3NycGdOXSk7CisJCQkJCWlmIChyb3dbREJfc3JwaW5mb10pIE9QRU5TU0xfZnJlZShyb3dbREJfc3JwaW5mb10pOworCQkJCQlpZiAocm93W0RCX3NycHR5cGVdKSBPUEVOU1NMX2ZyZWUocm93W0RCX3NycHR5cGVdKTsKKwkJCQkJaWYgKHJvd1tEQl9zcnB2ZXJpZmllcl0pIE9QRU5TU0xfZnJlZShyb3dbREJfc3JwdmVyaWZpZXJdKTsKKwkJCQkJaWYgKHJvd1tEQl9zcnBzYWx0XSkgT1BFTlNTTF9mcmVlKHJvd1tEQl9zcnBzYWx0XSk7CisJCQkJCWdvdG8gZXJyOworCQkJCQl9CisJCQkJZG91cGRhdGVkYiA9IDE7CisJCQkJfQorCQkJfQorCQllbHNlIGlmIChtb2RpZnlfdXNlcikKKwkJCXsKKwkJCWlmICh1c2VyaW5kZXggPCAwKQorCQkJCXsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsInVzZXIgXCIlc1wiIGRvZXMgbm90IGV4aXN0LCBvcGVyYXRpb24gaWdub3JlZC5cbiIsdXNlcik7CisJCQkJZXJyb3JzKys7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKworCQkJCWNoYXIgKipyb3cgPSAoY2hhciAqKilza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLCB1c2VyaW5kZXgpOworCQkJCWNoYXIgdHlwZSA9IHJvd1tEQl9zcnB0eXBlXVswXTsKKwkJCQlpZiAodHlwZSA9PSAndicpCisJCQkJCXsKKwkJCQkJQklPX3ByaW50ZihiaW9fZXJyLCJ1c2VyIFwiJXNcIiBhbHJlYWR5IHVwZGF0ZWQsIG9wZXJhdGlvbiBpZ25vcmVkLlxuIix1c2VyKTsKKwkJCQkJZXJyb3JzKys7CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJY2hhciAqZ05pZDsKKworCQkJCQlpZiAocm93W0RCX3NycHR5cGVdWzBdID09ICdWJykKKwkJCQkJCXsKKwkJCQkJCWludCB1c2VyX2dOOworCQkJCQkJY2hhciAqKmlyb3cgPSBOVUxMOworCQkJCQkJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlZlcmlmeWluZyBwYXNzd29yZCBmb3IgdXNlciBcIiVzXCJcbiIsdXNlcik7CisJCQkJCQlpZiAoICh1c2VyX2dOID0gZ2V0X2luZGV4KGRiLCByb3dbREJfc3JwZ05dLCBEQl9TUlBfSU5ERVgpKSA+PSAwKQorCQkJCQkJCWlyb3cgPSAoY2hhciAqKilza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLCB1c2VyaW5kZXgpOworCisgCQkJCQkJaWYgKCFzcnBfdmVyaWZ5X3VzZXIodXNlciwgcm93W0RCX3NycHZlcmlmaWVyXSwgcm93W0RCX3NycHNhbHRdLCBpcm93ID8gaXJvd1tEQl9zcnBzYWx0XSA6IHJvd1tEQl9zcnBnTl0sIGlyb3cgPyBpcm93W0RCX3NycHZlcmlmaWVyXSA6IE5VTEwsIHBhc3NpbiwgYmlvX2VyciwgdmVyYm9zZSkpCisJCQkJCQkJeworCQkJCQkJCUJJT19wcmludGYoYmlvX2VyciwgIkludmFsaWQgcGFzc3dvcmQgZm9yIHVzZXIgXCIlc1wiLCBvcGVyYXRpb24gYWJhbmRvbmVkLlxuIiwgdXNlcik7CisJCQkJCQkJZXJyb3JzKys7CisJCQkJCQkJZ290byBlcnI7CisJCQkJCQkJfQorCQkJCQkJfSAKKwkJCQkJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlBhc3N3b3JkIGZvciB1c2VyIFwiJXNcIiBvay5cbiIsdXNlcik7CisKKwkJCQkJaWYgKCEoZ05pZD1zcnBfY3JlYXRlX3VzZXIodXNlciwmKHJvd1tEQl9zcnB2ZXJpZmllcl0pLCAmKHJvd1tEQl9zcnBzYWx0XSksZ05yb3c/Z05yb3dbREJfc3Jwc2FsdF06TlVMTCwgZ05yb3c/Z05yb3dbREJfc3JwdmVyaWZpZXJdOk5VTEwsIHBhc3NvdXQsIGJpb19lcnIsdmVyYm9zZSkpKQorCQkJCQkJeworCQkJCQkJCUJJT19wcmludGYoYmlvX2VyciwgIkNhbm5vdCBjcmVhdGUgc3JwIHZlcmlmaWVyIGZvciB1c2VyIFwiJXNcIiwgb3BlcmF0aW9uIGFiYW5kb25lZC5cbiIsIHVzZXIpOworCQkJCQkJCWVycm9ycysrOworCQkJCQkJCWdvdG8gZXJyOworCQkJCQkJfQorCisJCQkJCXJvd1tEQl9zcnB0eXBlXVswXSA9ICd2JzsKKwkJCQkJcm93W0RCX3NycGdOXSA9IEJVRl9zdHJkdXAoZ05pZCk7CisgCisJCQkJCWlmICghcm93W0RCX3NycGlkXSB8fCAhcm93W0RCX3NycGdOXSB8fCAhcm93W0RCX3NycHR5cGVdIHx8ICFyb3dbREJfc3JwdmVyaWZpZXJdIHx8ICFyb3dbREJfc3Jwc2FsdF0gfHwKKwkJCQkJCSh1c2VyaW5mbyAmJiAoIShyb3dbREJfc3JwaW5mb10gPSBCVUZfc3RyZHVwKHVzZXJpbmZvKSkpKSkgIAorCQkJCQkJZ290byBlcnI7CisKKwkJCQkJZG91cGRhdGVkYiA9IDE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCWVsc2UgaWYgKGRlbGV0ZV91c2VyKQorCQkJeworCQkJaWYgKHVzZXJpbmRleCA8IDApCisJCQkJeworCQkJCUJJT19wcmludGYoYmlvX2VyciwgInVzZXIgXCIlc1wiIGRvZXMgbm90IGV4aXN0LCBvcGVyYXRpb24gaWdub3JlZC4gdFxuIiwgdXNlcik7CisJCQkJZXJyb3JzKys7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQljaGFyICoqeHBwID0gKGNoYXIgKiopc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgdXNlcmluZGV4KTsKKwkJCQlCSU9fcHJpbnRmKGJpb19lcnIsICJ1c2VyIFwiJXNcIiByZXZva2VkLiB0XG4iLCB1c2VyKTsKKworCQkJCXhwcFtEQl9zcnB0eXBlXVswXSA9ICdSJzsKKwkJCQkKKwkJCQlkb3VwZGF0ZWRiID0gMTsKKwkJCQl9CisJCQl9CisJCWlmICgtLWFyZ2MgPiAwKQorCQkJdXNlciA9ICooYXJndisrKSA7CisJCWVsc2UKKwkJCXsKKwkJCXVzZXIgPSBOVUxMOworCQkJbGlzdF91c2VyID0gMDsKKwkJCX0KKwkJfQorCisJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlVzZXIgcHJvY2Vzc2lvbiBkb25lLlxuIik7CisKKworCWlmIChkb3VwZGF0ZWRiKQorCQl7CisJCS8qIExldHMgY2hlY2sgc29tZSBmaWVsZHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfUFNUUklOR19udW0oZGItPmRiLT5kYXRhKTsgaSsrKQorCQkJeworCQkJcHAgPSAoY2hhciAqKilza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLCBpKTsKKwkKKwkJCWlmIChwcFtEQl9zcnB0eXBlXVswXSA9PSAndicpCisJCQkJeworCQkJCXBwW0RCX3NycHR5cGVdWzBdID0gJ1YnOworCQkJCXByaW50X3VzZXIoZGIsIGJpb19lcnIsIGksIHZlcmJvc2UpOworCQkJCX0KKwkJCX0KKworCQlWRVJCT1NFIEJJT19wcmludGYoYmlvX2VyciwgIlRyeWluZyB0byB1cGRhdGUgc3JwdmZpbGUuXG4iKTsKKwkJaWYgKCFzYXZlX2luZGV4KGRiZmlsZSwgIm5ldyIsIGRiKSkgZ290byBlcnI7CisJCQkJCisJCVZFUkJPU0UgQklPX3ByaW50ZihiaW9fZXJyLCAiVGVtcG9yYXJ5IHNycHZmaWxlIGNyZWF0ZWQuXG4iKTsKKwkJaWYgKCFyb3RhdGVfaW5kZXgoZGJmaWxlLCAibmV3IiwgIm9sZCIpKSBnb3RvIGVycjsKKworCQlWRVJCT1NFIEJJT19wcmludGYoYmlvX2VyciwgInNycHZmaWxlIHVwZGF0ZWQuXG4iKTsKKwkJfQorCisJcmV0ID0gKGVycm9ycyAhPSAwKTsKK2VycjoKKwlpZiAoZXJyb3JzICE9IDApCisJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlVzZXIgZXJyb3JzICVkLlxuIixlcnJvcnMpOworCisJVkVSQk9TRSBCSU9fcHJpbnRmKGJpb19lcnIsIlNSUCB0ZXJtaW5hdGluZyB3aXRoIGNvZGUgJWQuXG4iLHJldCk7CisJaWYodG9mcmVlKQorCQlPUEVOU1NMX2ZyZWUodG9mcmVlKTsKKwlpZiAocmV0KSBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworCWlmIChyYW5kZmlsZSkgYXBwX1JBTkRfd3JpdGVfZmlsZShyYW5kZmlsZSwgYmlvX2Vycik7CisJaWYgKGNvbmYpIE5DT05GX2ZyZWUoY29uZik7CisJaWYgKGRiKSBmcmVlX2luZGV4KGRiKTsKKworCU9CSl9jbGVhbnVwKCk7CisJYXBwc19zaHV0ZG93bigpOworCU9QRU5TU0xfRVhJVChyZXQpOworCX0KKworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcHBzL3ZlcmlmeS5jIGIvYXBwcy92ZXJpZnkuYwppbmRleCA5MTYzOTk3Li5iOTc0OWRjIDEwMDY0NAotLS0gYS9hcHBzL3ZlcmlmeS5jCisrKyBiL2FwcHMvdmVyaWZ5LmMKQEAgLTIzMCw2ICsyMzAsNyBAQAogZW5kOgogCWlmIChyZXQgPT0gMSkgewogCQlCSU9fcHJpbnRmKGJpb19lcnIsInVzYWdlOiB2ZXJpZnkgWy12ZXJib3NlXSBbLUNBcGF0aCBwYXRoXSBbLUNBZmlsZSBmaWxlXSBbLXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hlY2tdIik7CisJCUJJT19wcmludGYoYmlvX2VyciwiIFstYXR0aW1lIHRpbWVzdGFtcF0iKTsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAkJQklPX3ByaW50ZihiaW9fZXJyLCIgWy1lbmdpbmUgZV0iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBwcy94NTA5LmMgYi9hcHBzL3g1MDkuYwppbmRleCA5ZjVlYWViLi5lNmU1ZTBkIDEwMDY0NAotLS0gYS9hcHBzL3g1MDkuYworKysgYi9hcHBzL3g1MDkuYwpAQCAtMTU3LDkgKzE1NywxMCBAQAogc3RhdGljIGludCBzaWduIChYNTA5ICp4LCBFVlBfUEtFWSAqcGtleSxpbnQgZGF5cyxpbnQgY2xyZXh0LCBjb25zdCBFVlBfTUQgKmRpZ2VzdCwKIAkJCQkJCUNPTkYgKmNvbmYsIGNoYXIgKnNlY3Rpb24pOwogc3RhdGljIGludCB4NTA5X2NlcnRpZnkgKFg1MDlfU1RPUkUgKmN0eCxjaGFyICpDQWZpbGUsY29uc3QgRVZQX01EICpkaWdlc3QsCi0JCQkgWDUwOSAqeCxYNTA5ICp4Y2EsRVZQX1BLRVkgKnBrZXksY2hhciAqc2VyaWFsLAotCQkJIGludCBjcmVhdGUsaW50IGRheXMsIGludCBjbHJleHQsIENPTkYgKmNvbmYsIGNoYXIgKnNlY3Rpb24sCi0JCQkJCQlBU04xX0lOVEVHRVIgKnNubyk7CisJCQkgWDUwOSAqeCxYNTA5ICp4Y2EsRVZQX1BLRVkgKnBrZXksCisJCQkgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpzaWdvcHRzLAorCQkJIGNoYXIgKnNlcmlhbCwgaW50IGNyZWF0ZSAsaW50IGRheXMsIGludCBjbHJleHQsCisJCQkgQ09ORiAqY29uZiwgY2hhciAqc2VjdGlvbiwgQVNOMV9JTlRFR0VSICpzbm8pOwogc3RhdGljIGludCBwdXJwb3NlX3ByaW50KEJJTyAqYmlvLCBYNTA5ICpjZXJ0LCBYNTA5X1BVUlBPU0UgKnB0KTsKIHN0YXRpYyBpbnQgcmVxZmlsZT0wOwogCkBAIC0xNzIsNiArMTczLDcgQEAKIAlYNTA5X1JFUSAqcmVxPU5VTEw7CiAJWDUwOSAqeD1OVUxMLCp4Y2E9TlVMTDsKIAlBU04xX09CSkVDVCAqb2JqdG1wOworCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cyA9IE5VTEw7CiAJRVZQX1BLRVkgKlVwa2V5PU5VTEwsKkNBcGtleT1OVUxMOwogCUFTTjFfSU5URUdFUiAqc25vID0gTlVMTDsKIAlpbnQgaSxudW0sYmFkb3BzPTA7CkBAIC0yNzEsNiArMjczLDE1IEBACiAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CiAJCQlDQWtleWZvcm1hdD1zdHIyZm10KCooKythcmd2KSk7CiAJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNpZ29wdCIpID09IDApCisJCQl7CisJCQlpZiAoLS1hcmdjIDwgMSkKKwkJCQlnb3RvIGJhZDsKKwkJCWlmICghc2lnb3B0cykKKwkJCQlzaWdvcHRzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKKwkJCWlmICghc2lnb3B0cyB8fCAhc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChzaWdvcHRzLCAqKCsrYXJndikpKQorCQkJCWdvdG8gYmFkOworCQkJfQogCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1kYXlzIikgPT0gMCkKIAkJCXsKIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKQEAgLTk3MCw3ICs5ODEsOCBAQAogCQkJCQogCQkJCWFzc2VydChuZWVkX3JhbmQpOwogCQkJCWlmICgheDUwOV9jZXJ0aWZ5KGN0eCxDQWZpbGUsZGlnZXN0LHgseGNhLAotCQkJCQlDQXBrZXksIENBc2VyaWFsLENBX2NyZWF0ZXNlcmlhbCxkYXlzLCBjbHJleHQsCisJCQkJCUNBcGtleSwgc2lnb3B0cywKKwkJCQkJQ0FzZXJpYWwsQ0FfY3JlYXRlc2VyaWFsLGRheXMsIGNscmV4dCwKIAkJCQkJZXh0Y29uZiwgZXh0c2VjdCwgc25vKSkKIAkJCQkJZ290byBlbmQ7CiAJCQkJfQpAQCAtMTA4MSw2ICsxMDkzLDggQEAKIAlYNTA5X2ZyZWUoeGNhKTsKIAlFVlBfUEtFWV9mcmVlKFVwa2V5KTsKIAlFVlBfUEtFWV9mcmVlKENBcGtleSk7CisJaWYgKHNpZ29wdHMpCisJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2lnb3B0cyk7CiAJWDUwOV9SRVFfZnJlZShycSk7CiAJQVNOMV9JTlRFR0VSX2ZyZWUoc25vKTsKIAlza19BU04xX09CSkVDVF9wb3BfZnJlZSh0cnVzdCwgQVNOMV9PQkpFQ1RfZnJlZSk7CkBAIC0xMTMxLDggKzExNDUsMTEgQEAKIAl9CiAKIHN0YXRpYyBpbnQgeDUwOV9jZXJ0aWZ5KFg1MDlfU1RPUkUgKmN0eCwgY2hhciAqQ0FmaWxlLCBjb25zdCBFVlBfTUQgKmRpZ2VzdCwKLQkgICAgIFg1MDkgKngsIFg1MDkgKnhjYSwgRVZQX1BLRVkgKnBrZXksIGNoYXIgKnNlcmlhbGZpbGUsIGludCBjcmVhdGUsCi0JICAgICBpbnQgZGF5cywgaW50IGNscmV4dCwgQ09ORiAqY29uZiwgY2hhciAqc2VjdGlvbiwgQVNOMV9JTlRFR0VSICpzbm8pCisJICAgICAJCVg1MDkgKngsIFg1MDkgKnhjYSwgRVZQX1BLRVkgKnBrZXksCisJCQlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnNpZ29wdHMsCisJICAJCWNoYXIgKnNlcmlhbGZpbGUsIGludCBjcmVhdGUsCisJICAgICAJCWludCBkYXlzLCBpbnQgY2xyZXh0LCBDT05GICpjb25mLCBjaGFyICpzZWN0aW9uLAorCQkJQVNOMV9JTlRFR0VSICpzbm8pCiAJewogCWludCByZXQ9MDsKIAlBU04xX0lOVEVHRVIgKmJzPU5VTEw7CkBAIC0xMTkxLDcgKzEyMDgsOCBAQAogICAgICAgICAgICAgICAgIGlmICghWDUwOVYzX0VYVF9hZGRfbmNvbmYoY29uZiwgJmN0eDIsIHNlY3Rpb24sIHgpKSBnb3RvIGVuZDsKIAkJfQogCi0JaWYgKCFYNTA5X3NpZ24oeCxwa2V5LGRpZ2VzdCkpIGdvdG8gZW5kOworCWlmICghZG9fWDUwOV9zaWduKGJpb19lcnIsIHgsIHBrZXksIGRpZ2VzdCwgc2lnb3B0cykpCisJCWdvdG8gZW5kOwogCXJldD0xOwogZW5kOgogCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXAoJnhzYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vQW5kcm9pZC5tayBiL2NyeXB0by9BbmRyb2lkLm1rCmluZGV4IDgwOTBjMTIuLmZiNTk5Y2UgMTAwNjQ0Ci0tLSBhL2NyeXB0by9BbmRyb2lkLm1rCisrKyBiL2NyeXB0by9BbmRyb2lkLm1rCkBAIC0xNjksNyArMTY5LDExIEBACiAJYm4vYm5fc3FydC5jIFwKIAlibi9ibl93b3JkLmMgXAogCWJ1ZmZlci9idWZfZXJyLmMgXAorCWJ1ZmZlci9idWZfc3RyLmMgXAogCWJ1ZmZlci9idWZmZXIuYyBcCisJY21hYy9jbV9hbWV0aC5jIFwKKwljbWFjL2NtX3BtZXRoLmMgXAorCWNtYWMvY21hYy5jIFwKIAljb21wL2NfcmxlLmMgXAogCWNvbXAvY196bGliLmMgXAogCWNvbXAvY29tcF9lcnIuYyBcCkBAIC0yMzUsNiArMjM5LDcgQEAKIAlkc28vZHNvX251bGwuYyBcCiAJZHNvL2Rzb19vcGVuc3NsLmMgXAogCWVjL2VjMl9tdWx0LmMgXAorCWVjL2VjMl9vY3QuYyBcCiAJZWMvZWMyX3NtcGwuYyBcCiAJZWMvZWNfYW1ldGguYyBcCiAJZWMvZWNfYXNuMS5jIFwKQEAgLTI0NSwxMSArMjUwLDEzIEBACiAJZWMvZWNfa2V5LmMgXAogCWVjL2VjX2xpYi5jIFwKIAllYy9lY19tdWx0LmMgXAorCWVjL2VjX29jdC5jIFwKIAllYy9lY19wbWV0aC5jIFwKIAllYy9lY19wcmludC5jIFwKIAllYy9lY2tfcHJuLmMgXAogCWVjL2VjcF9tb250LmMgXAogCWVjL2VjcF9uaXN0LmMgXAorCWVjL2VjcF9vY3QuYyBcCiAJZWMvZWNwX3NtcGwuYyBcCiAJZWNkaC9lY2hfZXJyLmMgXAogCWVjZGgvZWNoX2tleS5jIFwKQEAgLTI5NSw2ICszMDIsNyBAQAogCWV2cC9jX2FsbGQuYyBcCiAJZXZwL2RpZ2VzdC5jIFwKIAlldnAvZV9hZXMuYyBcCisJZXZwL2VfYWVzX2NiY19obWFjX3NoYTEuYyBcCiAJZXZwL2VfYmYuYyBcCiAJZXZwL2VfZGVzLmMgXAogCWV2cC9lX2RlczMuYyBcCkBAIC0zMDIsNiArMzEwLDcgQEAKIAlldnAvZV9vbGQuYyBcCiAJZXZwL2VfcmMyLmMgXAogCWV2cC9lX3JjNC5jIFwKKwlldnAvZV9yYzRfaG1hY19tZDUuYyBcCiAJZXZwL2VfcmM1LmMgXAogCWV2cC9lX3hjYmNfZC5jIFwKIAlldnAvZW5jb2RlLmMgXApAQCAtMzQ3LDkgKzM1NiwxMyBAQAogCW1kNS9tZDVfZGdzdC5jIFwKIAltZDUvbWQ1X29uZS5jIFwKIAltb2Rlcy9jYmMxMjguYyBcCisJbW9kZXMvY2NtMTI4LmMgXAogCW1vZGVzL2NmYjEyOC5jIFwKIAltb2Rlcy9jdHIxMjguYyBcCisJbW9kZXMvZ2NtMTI4LmMgXAogCW1vZGVzL29mYjEyOC5jIFwKKwltb2Rlcy94dHMxMjguYyBcCisJb19pbml0LmMgXAogCW9iamVjdHMvb19uYW1lcy5jIFwKIAlvYmplY3RzL29ial9kYXQuYyBcCiAJb2JqZWN0cy9vYmpfZXJyLmMgXApAQCAtMzk4LDYgKzQxMSw3IEBACiAJcGtjczcvcGs3X21pbWUuYyBcCiAJcGtjczcvcGs3X3NtaW1lLmMgXAogCXBrY3M3L3BrY3M3ZXJyLmMgXAorCXBxdWV1ZS9wcXVldWUuYyBcCiAJcmFuZC9tZF9yYW5kLmMgXAogCXJhbmQvcmFuZF9lZ2QuYyBcCiAJcmFuZC9yYW5kX2Vyci5jIFwKQEAgLTQxMSwxMSArNDI1LDEzIEBACiAJcmMyL3JjMm9mYjY0LmMgXAogCXJjNC9yYzRfZW5jLmMgXAogCXJjNC9yYzRfc2tleS5jIFwKKwlyYzQvcmM0X3V0bC5jIFwKIAlyaXBlbWQvcm1kX2Rnc3QuYyBcCiAJcmlwZW1kL3JtZF9vbmUuYyBcCiAJcnNhL3JzYV9hbWV0aC5jIFwKIAlyc2EvcnNhX2FzbjEuYyBcCiAJcnNhL3JzYV9jaGsuYyBcCisJcnNhL3JzYV9jcnB0LmMgXAogCXJzYS9yc2FfZWF5LmMgXAogCXJzYS9yc2FfZXJyLmMgXAogCXJzYS9yc2FfZ2VuLmMgXApAQCAtNDM2LDYgKzQ1Miw4IEBACiAJc2hhL3NoYTI1Ni5jIFwKIAlzaGEvc2hhNTEyLmMgXAogCXNoYS9zaGFfZGdzdC5jIFwKKwlzcnAvc3JwX2xpYi5jIFwKKwlzcnAvc3JwX3ZmeS5jIFwKIAlzdGFjay9zdGFjay5jIFwKIAl0cy90c19lcnIuYyBcCiAJdHh0X2RiL3R4dF9kYi5jIFwKQEAgLTUwNywxMiArNTI1LDE1IEBACiAJZXh0ZXJuYWwvb3BlbnNzbCBcCiAJZXh0ZXJuYWwvb3BlbnNzbC9jcnlwdG8vYXNuMSBcCiAJZXh0ZXJuYWwvb3BlbnNzbC9jcnlwdG8vZXZwIFwKKwlleHRlcm5hbC9vcGVuc3NsL2NyeXB0by9tb2RlcyBcCiAJZXh0ZXJuYWwvb3BlbnNzbC9pbmNsdWRlIFwKIAlleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUvb3BlbnNzbCBcCiAJZXh0ZXJuYWwvemxpYgogCiBsb2NhbF9jX2ZsYWdzIDo9IC1ETk9fV0lORE9XU19CUkFJTkRFQVRICiAKK2xvY2FsX2FzX2ZsYWdzIDo9IC14IGFzc2VtYmxlci13aXRoLWNwcAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdGFyZ2V0IHN0YXRpYyBsaWJyYXJ5CiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKQEAgLTUyNSw2ICs1NDYsNyBAQAogCiBMT0NBTF9TUkNfRklMRVMgKz0gJChsb2NhbF9zcmNfZmlsZXMpCiBMT0NBTF9DRkxBR1MgKz0gJChsb2NhbF9jX2ZsYWdzKQorTE9DQUxfQVNGTEFHUyArPSAkKGxvY2FsX2FzX2ZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyArPSAkKGxvY2FsX2NfaW5jbHVkZXMpCiBpZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCiAJTE9DQUxfU1JDX0ZJTEVTICs9ICQoYXJtX3NyY19maWxlcykKQEAgLTU2MSw2ICs1ODMsNyBAQAogCiBMT0NBTF9TUkNfRklMRVMgKz0gJChsb2NhbF9zcmNfZmlsZXMpCiBMT0NBTF9DRkxBR1MgKz0gJChsb2NhbF9jX2ZsYWdzKQorTE9DQUxfQVNGTEFHUyArPSAkKGxvY2FsX2FzX2ZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyArPSAkKGxvY2FsX2NfaW5jbHVkZXMpCiBpZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCiAJTE9DQUxfU1JDX0ZJTEVTICs9ICQoYXJtX3NyY19maWxlcykKQEAgLTU4Nyw2ICs2MTAsNyBAQAogaW5jbHVkZSAkKExPQ0FMX1BBVEgpLy4uL2FuZHJvaWQtY29uZmlnLm1rCiBMT0NBTF9TUkNfRklMRVMgKz0gJChsb2NhbF9zcmNfZmlsZXMpCiBMT0NBTF9DRkxBR1MgKz0gJChsb2NhbF9jX2ZsYWdzKSAtRFBVUklGWQorTE9DQUxfQVNGTEFHUyArPSAkKGxvY2FsX2FzX2ZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyArPSAkKGxvY2FsX2NfaW5jbHVkZXMpCiBMT0NBTF9TUkNfRklMRVMgKz0gJChvdGhlcl9hcmNoX3NyY19maWxlcykKIExPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGliegpAQCAtNjAyLDYgKzYyNiw3IEBACiBpbmNsdWRlICQoTE9DQUxfUEFUSCkvLi4vYW5kcm9pZC1jb25maWcubWsKIExPQ0FMX1NSQ19GSUxFUyArPSAkKGxvY2FsX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyArPSAkKGxvY2FsX2NfZmxhZ3MpIC1EUFVSSUZZCitMT0NBTF9BU0ZMQUdTICs9ICQobG9jYWxfYXNfZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTICs9ICQobG9jYWxfY19pbmNsdWRlcykKIExPQ0FMX1NSQ19GSUxFUyArPSAkKG90aGVyX2FyY2hfc3JjX2ZpbGVzKQogTE9DQUxfU1RBVElDX0xJQlJBUklFUyArPSBsaWJ6CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flcy5oIGIvY3J5cHRvL2Flcy9hZXMuaAppbmRleCBkMmM5OTczLi4wMzFhYmYwIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL2Flcy5oCisrKyBiL2NyeXB0by9hZXMvYWVzLmgKQEAgLTkwLDYgKzkwLDExIEBACiBpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIAlBRVNfS0VZICprZXkpOwogCitpbnQgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CitpbnQgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CisKIHZvaWQgQUVTX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKIAljb25zdCBBRVNfS0VZICprZXkpOwogdm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hZXNfY29yZS5jIGIvY3J5cHRvL2Flcy9hZXNfY29yZS5jCmluZGV4IGE3ZWM1NGYuLjhmNTIxMGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYWVzX2NvcmUuYworKysgYi9jcnlwdG8vYWVzL2Flc19jb3JlLmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogLyoqCiAgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZW5jcnlwdGlvbiBrZXkgc2NoZWR1bGUuCiAgKi8KLWludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAoraW50IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIAkJCUFFU19LRVkgKmtleSkgewogCiAJdTMyICpyazsKQEAgLTcyNiw3ICs3MjYsNyBAQAogLyoqCiAgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZGVjcnlwdGlvbiBrZXkgc2NoZWR1bGUuCiAgKi8KLWludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAoraW50IHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIAkJCSBBRVNfS0VZICprZXkpIHsKIAogICAgICAgICB1MzIgKnJrOwpAQCAtNzM0LDcgKzczNCw3IEBACiAJdTMyIHRlbXA7CiAKIAkvKiBmaXJzdCwgc3RhcnQgd2l0aCBhbiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCi0Jc3RhdHVzID0gQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworCXN0YXR1cyA9IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogLyoqCiAgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZW5jcnlwdGlvbiBrZXkgc2NoZWR1bGUuCiAgKi8KLWludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAoraW50IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIAkJCUFFU19LRVkgKmtleSkgewogCXUzMiAqcms7CiAgICAJaW50IGkgPSAwOwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKIC8qKgogICogRXhwYW5kIHRoZSBjaXBoZXIga2V5IGludG8gdGhlIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlLgogICovCi1pbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKK2ludCBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCiAJCQkgQUVTX0tFWSAqa2V5KSB7CiAKICAgICAgICAgdTMyICpyazsKQEAgLTEzMDksNyArMTMwOSw3IEBACiAJdTMyIHRlbXA7CiAKIAkvKiBmaXJzdCwgc3RhcnQgd2l0aCBhbiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCi0Jc3RhdHVzID0gQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworCXN0YXR1cyA9IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2Flc19taXNjLmMgYi9jcnlwdG8vYWVzL2Flc19taXNjLmMKaW5kZXggNGZlYWQxYi4uZjA4MzQ4OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCisrKyBiL2NyeXB0by9hZXMvYWVzX21pc2MuYwpAQCAtNTAsNiArNTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgogI2luY2x1ZGUgImFlc19sb2NsLmgiCiAKQEAgLTYyLDMgKzYzLDIzIEBACiAgICAgICAgIHJldHVybiAiYWVzKHBhcnRpYWwpIjsKICNlbmRpZgogfQorCisvKiBGSVBTIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGJsb2NrIGxvdyBsZXZlbCBBRVMgY2FsbHMgaW4gRklQUyBtb2RlICovCisKK2ludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCQkJQUVTX0tFWSAqa2V5KQorCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOworI2VuZGlmCisJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworCX0KKworaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpCisJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7CisjZW5kaWYKKwlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLTU4Ni5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy01ODYucGwKaW5kZXggYWFiNDBlNi4uNjg3ZWQ4MSAxMDA3NTUKLS0tIGEvY3J5cHRvL2Flcy9hc20vYWVzLTU4Ni5wbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMtNTg2LnBsCkBAIC0zOSw3ICszOSw3IEBACiAjIGJ1dCBleGhpYml0cyB1cCB0byAxMCUgaW1wcm92ZW1lbnQgb24gb3RoZXIgY29yZXMuCiAjCiAjIFNlY29uZCB2ZXJzaW9uIGlzICJtb25vbGl0aGljIiByZXBsYWNlbWVudCBmb3IgYWVzX2NvcmUuYywgd2hpY2ggaW4KLSMgYWRkaXRpb24gdG8gQUVTX1tkZXxlbl1jcnlwdCBpbXBsZW1lbnRzIEFFU19zZXRfW2RlfGVuXWNyeXB0aW9uX2tleS4KKyMgYWRkaXRpb24gdG8gQUVTX1tkZXxlbl1jcnlwdCBpbXBsZW1lbnRzIHByaXZhdGVfQUVTX3NldF9bZGV8ZW5dY3J5cHRpb25fa2V5LgogIyBUaGlzIG1hZGUgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGxpdHRsZS1lbmRpYW4gdmFyaWFudCBvZiB0aGUKICMgYWxnb3JpdGhtIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBiYXNlIEMgY29kZS4gTW90aXZhdGluZyBmYWN0b3IgZm9yCiAjIHRoZSB1bmRlcnRha2VuIGVmZm9ydCB3YXMgdGhhdCBpdCBhcHBlYXJlZCB0aGF0IGluIHRpZ2h0IElBLTMyCkBAIC0yODU0LDEyICsyODU0LDEyIEBACiAgICAgJnNldF9sYWJlbCgiZXhpdCIpOwogJmZ1bmN0aW9uX2VuZCgiX3g4Nl9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CiAKLSMgaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisjIGludCBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCiAjICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQotJmZ1bmN0aW9uX2JlZ2luX0IoIkFFU19zZXRfZW5jcnlwdF9rZXkiKTsKKyZmdW5jdGlvbl9iZWdpbl9CKCJwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkiKTsKIAkmY2FsbAkoIl94ODZfQUVTX3NldF9lbmNyeXB0X2tleSIpOwogCSZyZXQJKCk7Ci0mZnVuY3Rpb25fZW5kX0IoIkFFU19zZXRfZW5jcnlwdF9rZXkiKTsKKyZmdW5jdGlvbl9lbmRfQigicHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5Iik7CiAKIHN1YiBkZWNrZXkoKQogeyBteSAoJGksJGtleSwkdHAxLCR0cDIsJHRwNCwkdHA4KSA9IEBfOwpAQCAtMjkxNiw5ICsyOTE2LDkgQEAKIAkmbW92CSgmRFdQKDQqJGksJGtleSksJHRwMSk7CiB9CiAKLSMgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisjIGludCBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCiAjICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQotJmZ1bmN0aW9uX2JlZ2luX0IoIkFFU19zZXRfZGVjcnlwdF9rZXkiKTsKKyZmdW5jdGlvbl9iZWdpbl9CKCJwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkiKTsKIAkmY2FsbAkoIl94ODZfQUVTX3NldF9lbmNyeXB0X2tleSIpOwogCSZjbXAJKCJlYXgiLDApOwogCSZqZQkoJmxhYmVsKCJwcm9jZWVkIikpOwpAQCAtMjk3NCw3ICsyOTc0LDcgQEAKIAkmamIJKCZsYWJlbCgicGVybXV0ZSIpKTsKIAogCSZ4b3IJKCJlYXgiLCJlYXgiKTsJCQkjIHJldHVybiBzdWNjZXNzCi0mZnVuY3Rpb25fZW5kKCJBRVNfc2V0X2RlY3J5cHRfa2V5Iik7CismZnVuY3Rpb25fZW5kKCJwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkiKTsKICZhc2NpeigiQUVTIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKIAogJmFzbV9maW5pc2goKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy1hcm12NC5wbAppbmRleCBjNTFlZTFmLi45NDNjZTQ1IDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwKKysrIGIvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnBsCkBAIC0yNyw2ICsyNywxMSBAQAogIyBSZXNjaGVkdWxpbmcgZm9yIGR1YWwtaXNzdWUgcGlwZWxpbmUgcmVzdWx0ZWQgaW4gMTIlIGltcHJvdmVtZW50IG9uCiAjIENvcnRleCBBOCBjb3JlIGFuZCB+MjUgY3ljbGVzIHBlciBieXRlIHByb2Nlc3NlZCB3aXRoIDEyOC1iaXQga2V5LgogCisjIEZlYnJ1YXJ5IDIwMTEuCisjCisjIFByb2ZpbGVyLWFzc2lzdGVkIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gcmVzdWx0ZWQgaW4gMTYlCisjIGltcHJvdmVtZW50IG9uIENvcnRleCBBOCBjb3JlIGFuZCB+MjEuNSBjeWNsZXMgcGVyIGJ5dGUuCisKIHdoaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CiBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwogCkBAIC00Niw2ICs1MSw3IEBACiAkcm91bmRzPSJyMTIiOwogCiAkY29kZT08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgogLnRleHQKIC5jb2RlCTMyCiAKQEAgLTE2Niw3ICsxNzIsNyBAQAogCW1vdgkkcm91bmRzLHIwCQlAIGlucAogCW1vdgkka2V5LHIyCiAJc3ViCSR0YmwscjMsI0FFU19lbmNyeXB0LUFFU19UZQlAIFRlCi0KKyNpZiBfX0FSTV9BUkNIX188NwogCWxkcmIJJHMwLFskcm91bmRzLCMzXQlAIGxvYWQgaW5wdXQgZGF0YSBpbiBlbmRpYW4tbmV1dHJhbAogCWxkcmIJJHQxLFskcm91bmRzLCMyXQlAIG1hbm5lci4uLgogCWxkcmIJJHQyLFskcm91bmRzLCMxXQpAQCAtMTk1LDEwICsyMDEsMzMgQEAKIAlvcnIJJHMzLCRzMywkdDEsbHNsIzgKIAlvcnIJJHMzLCRzMywkdDIsbHNsIzE2CiAJb3JyCSRzMywkczMsJHQzLGxzbCMyNAotCisjZWxzZQorCWxkcgkkczAsWyRyb3VuZHMsIzBdCisJbGRyCSRzMSxbJHJvdW5kcywjNF0KKwlsZHIJJHMyLFskcm91bmRzLCM4XQorCWxkcgkkczMsWyRyb3VuZHMsIzEyXQorI2lmZGVmIF9fQVJNRUxfXworCXJldgkkczAsJHMwCisJcmV2CSRzMSwkczEKKwlyZXYJJHMyLCRzMgorCXJldgkkczMsJHMzCisjZW5kaWYKKyNlbmRpZgogCWJsCV9hcm12NF9BRVNfZW5jcnlwdAogCiAJbGRyCSRyb3VuZHMsW3NwXSwjNAkJQCBwb3Agb3V0CisjaWYgX19BUk1fQVJDSF9fPj03CisjaWZkZWYgX19BUk1FTF9fCisJcmV2CSRzMCwkczAKKwlyZXYJJHMxLCRzMQorCXJldgkkczIsJHMyCisJcmV2CSRzMywkczMKKyNlbmRpZgorCXN0cgkkczAsWyRyb3VuZHMsIzBdCisJc3RyCSRzMSxbJHJvdW5kcywjNF0KKwlzdHIJJHMyLFskcm91bmRzLCM4XQorCXN0cgkkczMsWyRyb3VuZHMsIzEyXQorI2Vsc2UKIAltb3YJJHQxLCRzMCxsc3IjMjQJCUAgd3JpdGUgb3V0cHV0IGluIGVuZGlhbi1uZXV0cmFsCiAJbW92CSR0MiwkczAsbHNyIzE2CQlAIG1hbm5lci4uLgogCW1vdgkkdDMsJHMwLGxzciM4CkBAIC0yMjcsMTEgKzI1NiwxNSBAQAogCXN0cmIJJHQyLFskcm91bmRzLCMxM10KIAlzdHJiCSR0MyxbJHJvdW5kcywjMTRdCiAJc3RyYgkkczMsWyRyb3VuZHMsIzE1XQotCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKyNlbHNlCiAJbGRtaWEgICBzcCEse3I0LXIxMixscn0KIAl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgogLnNpemUJQUVTX2VuY3J5cHQsLi1BRVNfZW5jcnlwdAogCiAudHlwZSAgIF9hcm12NF9BRVNfZW5jcnlwdCwlZnVuY3Rpb24KQEAgLTI3MSwxMSArMzA0LDExIEBACiAJYW5kCSRpMixsciwkczIsbHNyIzE2CUAgaTEKIAllb3IJJHQzLCR0MywkaTMscm9yIzgKIAlhbmQJJGkzLGxyLCRzMgotCWVvcgkkczEsJHMxLCR0MSxyb3IjMjQKIAlsZHIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTJbczI+PjhdCisJZW9yCSRzMSwkczEsJHQxLHJvciMyNAorCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlMVtzMj4+MTZdCiAJbW92CSRzMiwkczIsbHNyIzI0CiAKLQlsZHIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZTFbczI+PjE2XQogCWxkcgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRlM1tzMj4+MF0KIAllb3IJJHMwLCRzMCwkaTEscm9yIzE2CiAJbGRyCSRzMixbJHRibCwkczIsbHNsIzJdCUAgVGUwW3MyPj4yNF0KQEAgLTI4NCwxNiArMzE3LDE2IEBACiAJYW5kCSRpMixsciwkczMsbHNyIzgJQCBpMQogCWVvcgkkdDMsJHQzLCRpMyxyb3IjMTYKIAlhbmQJJGkzLGxyLCRzMyxsc3IjMTYJQCBpMgotCWVvcgkkczIsJHMyLCR0Mixyb3IjMTYKIAlsZHIJJGkxLFskdGJsLCRpMSxsc2wjMl0JQCBUZTNbczM+PjBdCisJZW9yCSRzMiwkczIsJHQyLHJvciMxNgorCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlMltzMz4+OF0KIAltb3YJJHMzLCRzMyxsc3IjMjQKIAotCWxkcgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlMltzMz4+OF0KIAlsZHIJJGkzLFskdGJsLCRpMyxsc2wjMl0JQCBUZTFbczM+PjE2XQogCWVvcgkkczAsJHMwLCRpMSxyb3IjMjQKLQlsZHIJJHMzLFskdGJsLCRzMyxsc2wjMl0JQCBUZTBbczM+PjI0XQotCWVvcgkkczEsJHMxLCRpMixyb3IjMTYKIAlsZHIJJGkxLFska2V5XSwjMTYKKwllb3IJJHMxLCRzMSwkaTIscm9yIzE2CisJbGRyCSRzMyxbJHRibCwkczMsbHNsIzJdCUAgVGUwW3MzPj4yNF0KIAllb3IJJHMyLCRzMiwkaTMscm9yIzgKIAlsZHIJJHQxLFska2V5LCMtMTJdCiAJZW9yCSRzMywkczMsJHQzLHJvciM4CkBAIC0zMzMsMTEgKzM2NiwxMSBAQAogCWFuZAkkaTIsbHIsJHMyLGxzciMxNglAIGkxCiAJZW9yCSR0MywkaTMsJHQzLGxzbCM4CiAJYW5kCSRpMyxsciwkczIKLQllb3IJJHMxLCR0MSwkczEsbHNsIzI0CiAJbGRyYgkkaTEsWyR0YmwsJGkxLGxzbCMyXQlAIFRlNFtzMj4+OF0KKwllb3IJJHMxLCR0MSwkczEsbHNsIzI0CisJbGRyYgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlNFtzMj4+MTZdCiAJbW92CSRzMiwkczIsbHNyIzI0CiAKLQlsZHJiCSRpMixbJHRibCwkaTIsbHNsIzJdCUAgVGU0W3MyPj4xNl0KIAlsZHJiCSRpMyxbJHRibCwkaTMsbHNsIzJdCUAgVGU0W3MyPj4wXQogCWVvcgkkczAsJGkxLCRzMCxsc2wjOAogCWxkcmIJJHMyLFskdGJsLCRzMixsc2wjMl0JQCBUZTRbczI+PjI0XQpAQCAtMzQ2LDE1ICszNzksMTUgQEAKIAlhbmQJJGkyLGxyLCRzMyxsc3IjOAlAIGkxCiAJZW9yCSR0MywkaTMsJHQzLGxzbCM4CiAJYW5kCSRpMyxsciwkczMsbHNyIzE2CUAgaTIKLQllb3IJJHMyLCR0MiwkczIsbHNsIzI0CiAJbGRyYgkkaTEsWyR0YmwsJGkxLGxzbCMyXQlAIFRlNFtzMz4+MF0KKwllb3IJJHMyLCR0MiwkczIsbHNsIzI0CisJbGRyYgkkaTIsWyR0YmwsJGkyLGxzbCMyXQlAIFRlNFtzMz4+OF0KIAltb3YJJHMzLCRzMyxsc3IjMjQKIAotCWxkcmIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZTRbczM+PjhdCiAJbGRyYgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRlNFtzMz4+MTZdCiAJZW9yCSRzMCwkaTEsJHMwLGxzbCM4Ci0JbGRyYgkkczMsWyR0YmwsJHMzLGxzbCMyXQlAIFRlNFtzMz4+MjRdCiAJbGRyCSRpMSxbJGtleSwjMF0KKwlsZHJiCSRzMyxbJHRibCwkczMsbHNsIzJdCUAgVGU0W3MzPj4yNF0KIAllb3IJJHMxLCRzMSwkaTIsbHNsIzgKIAlsZHIJJHQxLFska2V5LCM0XQogCWVvcgkkczIsJHMyLCRpMyxsc2wjMTYKQEAgLTM3MSwxMCArNDA0LDEwIEBACiAJbGRyCXBjLFtzcF0sIzQJCUAgcG9wIGFuZCByZXR1cm4KIC5zaXplCV9hcm12NF9BRVNfZW5jcnlwdCwuLV9hcm12NF9BRVNfZW5jcnlwdAogCi0uZ2xvYmFsIEFFU19zZXRfZW5jcnlwdF9rZXkKLS50eXBlICAgQUVTX3NldF9lbmNyeXB0X2tleSwlZnVuY3Rpb24KKy5nbG9iYWwgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisudHlwZSAgIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSwlZnVuY3Rpb24KIC5hbGlnbgk1Ci1BRVNfc2V0X2VuY3J5cHRfa2V5OgorcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5OgogCXN1YglyMyxwYywjOAkJQCBBRVNfc2V0X2VuY3J5cHRfa2V5CiAJdGVxCXIwLCMwCiAJbW92ZXEJcjAsIy0xCkBAIC0zOTIsMTIgKzQyNSwxMyBAQAogCWJuZQkuTGFicnQKIAogLkxvazoJc3RtZGIgICBzcCEse3I0LXIxMixscn0KLQlzdWIJJHRibCxyMywjQUVTX3NldF9lbmNyeXB0X2tleS1BRVNfVGUtMTAyNAlAIFRlNAorCXN1YgkkdGJsLHIzLCNwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXktQUVTX1RlLTEwMjQJQCBUZTQKIAogCW1vdgkkcm91bmRzLHIwCQlAIGlucAogCW1vdglscixyMQkJCUAgYml0cwogCW1vdgkka2V5LHIyCQkJQCBrZXkKIAorI2lmIF9fQVJNX0FSQ0hfXzw3CiAJbGRyYgkkczAsWyRyb3VuZHMsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCiAJbGRyYgkkdDEsWyRyb3VuZHMsIzJdCUAgbWFubmVyLi4uCiAJbGRyYgkkdDIsWyRyb3VuZHMsIzFdCkBAIC00MzAsNiArNDY0LDIyIEBACiAJb3JyCSRzMywkczMsJHQzLGxzbCMyNAogCXN0cgkkczIsWyRrZXksIy04XQogCXN0cgkkczMsWyRrZXksIy00XQorI2Vsc2UKKwlsZHIJJHMwLFskcm91bmRzLCMwXQorCWxkcgkkczEsWyRyb3VuZHMsIzRdCisJbGRyCSRzMixbJHJvdW5kcywjOF0KKwlsZHIJJHMzLFskcm91bmRzLCMxMl0KKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJJHMwLCRzMAorCXJldgkkczEsJHMxCisJcmV2CSRzMiwkczIKKwlyZXYJJHMzLCRzMworI2VuZGlmCisJc3RyCSRzMCxbJGtleV0sIzE2CisJc3RyCSRzMSxbJGtleSwjLTEyXQorCXN0cgkkczIsWyRrZXksIy04XQorCXN0cgkkczMsWyRrZXksIy00XQorI2VuZGlmCiAKIAl0ZXEJbHIsIzEyOAogCWJuZQkuTG5vdDEyOApAQCAtNDY2LDYgKzUxNiw3IEBACiAJYgkuTGRvbmUKIAogLkxub3QxMjg6CisjaWYgX19BUk1fQVJDSF9fPDcKIAlsZHJiCSRpMixbJHJvdW5kcywjMTldCiAJbGRyYgkkdDEsWyRyb3VuZHMsIzE4XQogCWxkcmIJJHQyLFskcm91bmRzLCMxN10KQEAgLTQ4Miw2ICs1MzMsMTYgQEAKIAlzdHIJJGkyLFska2V5XSwjOAogCW9ycgkkaTMsJGkzLCR0Myxsc2wjMjQKIAlzdHIJJGkzLFska2V5LCMtNF0KKyNlbHNlCisJbGRyCSRpMixbJHJvdW5kcywjMTZdCisJbGRyCSRpMyxbJHJvdW5kcywjMjBdCisjaWZkZWYgX19BUk1FTF9fCisJcmV2CSRpMiwkaTIKKwlyZXYJJGkzLCRpMworI2VuZGlmCisJc3RyCSRpMixbJGtleV0sIzgKKwlzdHIJJGkzLFska2V5LCMtNF0KKyNlbmRpZgogCiAJdGVxCWxyLCMxOTIKIAlibmUJLkxub3QxOTIKQEAgLTUyNiw2ICs1ODcsNyBAQAogCWIJLkwxOTJfbG9vcAogCiAuTG5vdDE5MjoKKyNpZiBfX0FSTV9BUkNIX188NwogCWxkcmIJJGkyLFskcm91bmRzLCMyN10KIAlsZHJiCSR0MSxbJHJvdW5kcywjMjZdCiAJbGRyYgkkdDIsWyRyb3VuZHMsIzI1XQpAQCAtNTQyLDYgKzYwNCwxNiBAQAogCXN0cgkkaTIsWyRrZXldLCM4CiAJb3JyCSRpMywkaTMsJHQzLGxzbCMyNAogCXN0cgkkaTMsWyRrZXksIy00XQorI2Vsc2UKKwlsZHIJJGkyLFskcm91bmRzLCMyNF0KKwlsZHIJJGkzLFskcm91bmRzLCMyOF0KKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJJGkyLCRpMgorCXJldgkkaTMsJGkzCisjZW5kaWYKKwlzdHIJJGkyLFska2V5XSwjOAorCXN0cgkkaTMsWyRrZXksIy00XQorI2VuZGlmCiAKIAltb3YJJHJvdW5kcywjMTQKIAlzdHIJJHJvdW5kcyxbJGtleSwjMjQwLTMyXQpAQCAtNjA2LDE0ICs2NzgsMTQgQEAKIC5MYWJydDoJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCi0uc2l6ZQlBRVNfc2V0X2VuY3J5cHRfa2V5LC4tQUVTX3NldF9lbmNyeXB0X2tleQorLnNpemUJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5LC4tcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CiAKLS5nbG9iYWwgQUVTX3NldF9kZWNyeXB0X2tleQotLnR5cGUgICBBRVNfc2V0X2RlY3J5cHRfa2V5LCVmdW5jdGlvbgorLmdsb2JhbCBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKy50eXBlICAgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5LCVmdW5jdGlvbgogLmFsaWduCTUKLUFFU19zZXRfZGVjcnlwdF9rZXk6Citwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXk6CiAJc3RyCWxyLFtzcCwjLTRdISAgICAgICAgICAgIEAgcHVzaCBscgotCWJsCUFFU19zZXRfZW5jcnlwdF9rZXkKKwlibAlwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKIAl0ZXEJcjAsIzAKIAlsZHJuZQlscixbc3BdLCM0ICAgICAgICAgICAgICBAIHBvcCBscgogCWJuZQkuTGFicnQKQEAgLTY5MiwxMSArNzY0LDE1IEBACiAJYm5lCS5MbWl4CiAKIAltb3YJcjAsIzAKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKyNlbHNlCiAJbGRtaWEgICBzcCEse3I0LXIxMixscn0KIAl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLS5zaXplCUFFU19zZXRfZGVjcnlwdF9rZXksLi1BRVNfc2V0X2RlY3J5cHRfa2V5CisjZW5kaWYKKy5zaXplCXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSwuLXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQogCiAudHlwZQlBRVNfVGQsJW9iamVjdAogLmFsaWduCTUKQEAgLTgxMSw3ICs4ODcsNyBAQAogCW1vdgkkcm91bmRzLHIwCQlAIGlucAogCW1vdgkka2V5LHIyCiAJc3ViCSR0YmwscjMsI0FFU19kZWNyeXB0LUFFU19UZAkJQCBUZAotCisjaWYgX19BUk1fQVJDSF9fPDcKIAlsZHJiCSRzMCxbJHJvdW5kcywjM10JQCBsb2FkIGlucHV0IGRhdGEgaW4gZW5kaWFuLW5ldXRyYWwKIAlsZHJiCSR0MSxbJHJvdW5kcywjMl0JQCBtYW5uZXIuLi4KIAlsZHJiCSR0MixbJHJvdW5kcywjMV0KQEAgLTg0MCwxMCArOTE2LDMzIEBACiAJb3JyCSRzMywkczMsJHQxLGxzbCM4CiAJb3JyCSRzMywkczMsJHQyLGxzbCMxNgogCW9ycgkkczMsJHMzLCR0Myxsc2wjMjQKLQorI2Vsc2UKKwlsZHIJJHMwLFskcm91bmRzLCMwXQorCWxkcgkkczEsWyRyb3VuZHMsIzRdCisJbGRyCSRzMixbJHJvdW5kcywjOF0KKwlsZHIJJHMzLFskcm91bmRzLCMxMl0KKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJJHMwLCRzMAorCXJldgkkczEsJHMxCisJcmV2CSRzMiwkczIKKwlyZXYJJHMzLCRzMworI2VuZGlmCisjZW5kaWYKIAlibAlfYXJtdjRfQUVTX2RlY3J5cHQKIAogCWxkcgkkcm91bmRzLFtzcF0sIzQJCUAgcG9wIG91dAorI2lmIF9fQVJNX0FSQ0hfXz49NworI2lmZGVmIF9fQVJNRUxfXworCXJldgkkczAsJHMwCisJcmV2CSRzMSwkczEKKwlyZXYJJHMyLCRzMgorCXJldgkkczMsJHMzCisjZW5kaWYKKwlzdHIJJHMwLFskcm91bmRzLCMwXQorCXN0cgkkczEsWyRyb3VuZHMsIzRdCisJc3RyCSRzMixbJHJvdW5kcywjOF0KKwlzdHIJJHMzLFskcm91bmRzLCMxMl0KKyNlbHNlCiAJbW92CSR0MSwkczAsbHNyIzI0CQlAIHdyaXRlIG91dHB1dCBpbiBlbmRpYW4tbmV1dHJhbAogCW1vdgkkdDIsJHMwLGxzciMxNgkJQCBtYW5uZXIuLi4KIAltb3YJJHQzLCRzMCxsc3IjOApAQCAtODcyLDExICs5NzEsMTUgQEAKIAlzdHJiCSR0MixbJHJvdW5kcywjMTNdCiAJc3RyYgkkdDMsWyRyb3VuZHMsIzE0XQogCXN0cmIJJHMzLFskcm91bmRzLCMxNV0KLQorI2VuZGlmCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTIscGN9CisjZWxzZQogCWxkbWlhICAgc3AhLHtyNC1yMTIsbHJ9CiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisjZW5kaWYKIC5zaXplCUFFU19kZWNyeXB0LC4tQUVTX2RlY3J5cHQKIAogLnR5cGUgICBfYXJtdjRfQUVTX2RlY3J5cHQsJWZ1bmN0aW9uCkBAIC05MTYsMTEgKzEwMTksMTEgQEAKIAlhbmQJJGkyLGxyLCRzMgkJQCBpMQogCWVvcgkkdDMsJGkzLCR0Myxyb3IjOAogCWFuZAkkaTMsbHIsJHMyLGxzciMxNgotCWVvcgkkczEsJHMxLCR0MSxyb3IjOAogCWxkcgkkaTEsWyR0YmwsJGkxLGxzbCMyXQlAIFRkMltzMj4+OF0KKwllb3IJJHMxLCRzMSwkdDEscm9yIzgKKwlsZHIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZDNbczI+PjBdCiAJbW92CSRzMiwkczIsbHNyIzI0CiAKLQlsZHIJJGkyLFskdGJsLCRpMixsc2wjMl0JQCBUZDNbczI+PjBdCiAJbGRyCSRpMyxbJHRibCwkaTMsbHNsIzJdCUAgVGQxW3MyPj4xNl0KIAllb3IJJHMwLCRzMCwkaTEscm9yIzE2CiAJbGRyCSRzMixbJHRibCwkczIsbHNsIzJdCUAgVGQwW3MyPj4yNF0KQEAgLTkyOSwyMiArMTAzMiwyMiBAQAogCWFuZAkkaTIsbHIsJHMzLGxzciM4CUAgaTEKIAllb3IJJHQzLCRpMywkdDMscm9yIzgKIAlhbmQJJGkzLGxyLCRzMwkJQCBpMgotCWVvcgkkczIsJHMyLCR0Mixyb3IjOAogCWxkcgkkaTEsWyR0YmwsJGkxLGxzbCMyXQlAIFRkMVtzMz4+MTZdCisJZW9yCSRzMiwkczIsJHQyLHJvciM4CisJbGRyCSRpMixbJHRibCwkaTIsbHNsIzJdCUAgVGQyW3MzPj44XQogCW1vdgkkczMsJHMzLGxzciMyNAogCi0JbGRyCSRpMixbJHRibCwkaTIsbHNsIzJdCUAgVGQyW3MzPj44XQogCWxkcgkkaTMsWyR0YmwsJGkzLGxzbCMyXQlAIFRkM1tzMz4+MF0KIAllb3IJJHMwLCRzMCwkaTEscm9yIzgKLQlsZHIJJHMzLFskdGJsLCRzMyxsc2wjMl0JQCBUZDBbczM+PjI0XQotCWVvcgkkczEsJHMxLCRpMixyb3IjMTYKLQllb3IJJHMyLCRzMiwkaTMscm9yIzI0CiAJbGRyCSRpMSxbJGtleV0sIzE2Ci0JZW9yCSRzMywkczMsJHQzLHJvciM4CisJZW9yCSRzMSwkczEsJGkyLHJvciMxNgorCWxkcgkkczMsWyR0YmwsJHMzLGxzbCMyXQlAIFRkMFtzMz4+MjRdCisJZW9yCSRzMiwkczIsJGkzLHJvciMyNAogCiAJbGRyCSR0MSxbJGtleSwjLTEyXQotCWxkcgkkdDIsWyRrZXksIy04XQogCWVvcgkkczAsJHMwLCRpMQorCWxkcgkkdDIsWyRrZXksIy04XQorCWVvcgkkczMsJHMzLCR0Myxyb3IjOAogCWxkcgkkdDMsWyRrZXksIy00XQogCWFuZAkkaTEsbHIsJHMwLGxzciMxNgogCWVvcgkkczEsJHMxLCR0MQpAQCAtOTg1LDExICsxMDg4LDExIEBACiAJYW5kCSRpMSxsciwkczIsbHNyIzgJQCBpMAogCWVvcgkkdDIsJHQyLCRpMixsc2wjOAogCWFuZAkkaTIsbHIsJHMyCQlAIGkxCi0JZW9yCSR0MywkdDMsJGkzLGxzbCM4CiAJbGRyYgkkaTEsWyR0YmwsJGkxXQkJQCBUZDRbczI+PjhdCisJZW9yCSR0MywkdDMsJGkzLGxzbCM4CisJbGRyYgkkaTIsWyR0YmwsJGkyXQkJQCBUZDRbczI+PjBdCiAJYW5kCSRpMyxsciwkczIsbHNyIzE2CiAKLQlsZHJiCSRpMixbJHRibCwkaTJdCQlAIFRkNFtzMj4+MF0KIAlsZHJiCSRzMixbJHRibCwkczIsbHNyIzI0XQlAIFRkNFtzMj4+MjRdCiAJZW9yCSRzMCwkczAsJGkxLGxzbCM4CiAJbGRyYgkkaTMsWyR0YmwsJGkzXQkJQCBUZDRbczI+PjE2XQpAQCAtOTk3LDExICsxMTAwLDExIEBACiAJYW5kCSRpMSxsciwkczMsbHNyIzE2CUAgaTAKIAllb3IJJHMyLCR0MiwkczIsbHNsIzE2CiAJYW5kCSRpMixsciwkczMsbHNyIzgJQCBpMQotCWVvcgkkdDMsJHQzLCRpMyxsc2wjMTYKIAlsZHJiCSRpMSxbJHRibCwkaTFdCQlAIFRkNFtzMz4+MTZdCisJZW9yCSR0MywkdDMsJGkzLGxzbCMxNgorCWxkcmIJJGkyLFskdGJsLCRpMl0JCUAgVGQ0W3MzPj44XQogCWFuZAkkaTMsbHIsJHMzCQlAIGkyCiAKLQlsZHJiCSRpMixbJHRibCwkaTJdCQlAIFRkNFtzMz4+OF0KIAlsZHJiCSRpMyxbJHRibCwkaTNdCQlAIFRkNFtzMz4+MF0KIAlsZHJiCSRzMyxbJHRibCwkczMsbHNyIzI0XQlAIFRkNFtzMz4+MjRdCiAJZW9yCSRzMCwkczAsJGkxLGxzbCMxNgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnMgYi9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucwppbmRleCAyN2M2ODFjLi5lNTdlMGQwIDEwMDY0NAotLS0gYS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucworKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucwpAQCAtMSwzICsxLDQgQEAKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgogLnRleHQKIC5jb2RlCTMyCiAKQEAgLTExOCw3ICsxMTksNyBAQAogCW1vdglyMTIscjAJCUAgaW5wCiAJbW92CXIxMSxyMgogCXN1YglyMTAscjMsI0FFU19lbmNyeXB0LUFFU19UZQlAIFRlCi0KKyNpZiBfX0FSTV9BUkNIX188NwogCWxkcmIJcjAsW3IxMiwjM10JQCBsb2FkIGlucHV0IGRhdGEgaW4gZW5kaWFuLW5ldXRyYWwKIAlsZHJiCXI0LFtyMTIsIzJdCUAgbWFubmVyLi4uCiAJbGRyYglyNSxbcjEyLCMxXQpAQCAtMTQ3LDEwICsxNDgsMzMgQEAKIAlvcnIJcjMscjMscjQsbHNsIzgKIAlvcnIJcjMscjMscjUsbHNsIzE2CiAJb3JyCXIzLHIzLHI2LGxzbCMyNAotCisjZWxzZQorCWxkcglyMCxbcjEyLCMwXQorCWxkcglyMSxbcjEyLCM0XQorCWxkcglyMixbcjEyLCM4XQorCWxkcglyMyxbcjEyLCMxMl0KKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJcjAscjAKKwlyZXYJcjEscjEKKwlyZXYJcjIscjIKKwlyZXYJcjMscjMKKyNlbmRpZgorI2VuZGlmCiAJYmwJX2FybXY0X0FFU19lbmNyeXB0CiAKIAlsZHIJcjEyLFtzcF0sIzQJCUAgcG9wIG91dAorI2lmIF9fQVJNX0FSQ0hfXz49NworI2lmZGVmIF9fQVJNRUxfXworCXJldglyMCxyMAorCXJldglyMSxyMQorCXJldglyMixyMgorCXJldglyMyxyMworI2VuZGlmCisJc3RyCXIwLFtyMTIsIzBdCisJc3RyCXIxLFtyMTIsIzRdCisJc3RyCXIyLFtyMTIsIzhdCisJc3RyCXIzLFtyMTIsIzEyXQorI2Vsc2UKIAltb3YJcjQscjAsbHNyIzI0CQlAIHdyaXRlIG91dHB1dCBpbiBlbmRpYW4tbmV1dHJhbAogCW1vdglyNSxyMCxsc3IjMTYJCUAgbWFubmVyLi4uCiAJbW92CXI2LHIwLGxzciM4CkBAIC0xNzksMTEgKzIwMywxNSBAQAogCXN0cmIJcjUsW3IxMiwjMTNdCiAJc3RyYglyNixbcjEyLCMxNF0KIAlzdHJiCXIzLFtyMTIsIzE1XQotCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKyNlbHNlCiAJbGRtaWEgICBzcCEse3I0LXIxMixscn0KIAl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQorI2VuZGlmCiAuc2l6ZQlBRVNfZW5jcnlwdCwuLUFFU19lbmNyeXB0CiAKIC50eXBlICAgX2FybXY0X0FFU19lbmNyeXB0LCVmdW5jdGlvbgpAQCAtMjIzLDExICsyNTEsMTEgQEAKIAlhbmQJcjgsbHIscjIsbHNyIzE2CUAgaTEKIAllb3IJcjYscjYscjkscm9yIzgKIAlhbmQJcjksbHIscjIKLQllb3IJcjEscjEscjQscm9yIzI0CiAJbGRyCXI3LFtyMTAscjcsbHNsIzJdCUAgVGUyW3MyPj44XQorCWVvcglyMSxyMSxyNCxyb3IjMjQKKwlsZHIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZTFbczI+PjE2XQogCW1vdglyMixyMixsc3IjMjQKIAotCWxkcglyOCxbcjEwLHI4LGxzbCMyXQlAIFRlMVtzMj4+MTZdCiAJbGRyCXI5LFtyMTAscjksbHNsIzJdCUAgVGUzW3MyPj4wXQogCWVvcglyMCxyMCxyNyxyb3IjMTYKIAlsZHIJcjIsW3IxMCxyMixsc2wjMl0JQCBUZTBbczI+PjI0XQpAQCAtMjM2LDE2ICsyNjQsMTYgQEAKIAlhbmQJcjgsbHIscjMsbHNyIzgJQCBpMQogCWVvcglyNixyNixyOSxyb3IjMTYKIAlhbmQJcjksbHIscjMsbHNyIzE2CUAgaTIKLQllb3IJcjIscjIscjUscm9yIzE2CiAJbGRyCXI3LFtyMTAscjcsbHNsIzJdCUAgVGUzW3MzPj4wXQorCWVvcglyMixyMixyNSxyb3IjMTYKKwlsZHIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZTJbczM+PjhdCiAJbW92CXIzLHIzLGxzciMyNAogCi0JbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGUyW3MzPj44XQogCWxkcglyOSxbcjEwLHI5LGxzbCMyXQlAIFRlMVtzMz4+MTZdCiAJZW9yCXIwLHIwLHI3LHJvciMyNAotCWxkcglyMyxbcjEwLHIzLGxzbCMyXQlAIFRlMFtzMz4+MjRdCi0JZW9yCXIxLHIxLHI4LHJvciMxNgogCWxkcglyNyxbcjExXSwjMTYKKwllb3IJcjEscjEscjgscm9yIzE2CisJbGRyCXIzLFtyMTAscjMsbHNsIzJdCUAgVGUwW3MzPj4yNF0KIAllb3IJcjIscjIscjkscm9yIzgKIAlsZHIJcjQsW3IxMSwjLTEyXQogCWVvcglyMyxyMyxyNixyb3IjOApAQCAtMjg1LDExICszMTMsMTEgQEAKIAlhbmQJcjgsbHIscjIsbHNyIzE2CUAgaTEKIAllb3IJcjYscjkscjYsbHNsIzgKIAlhbmQJcjksbHIscjIKLQllb3IJcjEscjQscjEsbHNsIzI0CiAJbGRyYglyNyxbcjEwLHI3LGxzbCMyXQlAIFRlNFtzMj4+OF0KKwllb3IJcjEscjQscjEsbHNsIzI0CisJbGRyYglyOCxbcjEwLHI4LGxzbCMyXQlAIFRlNFtzMj4+MTZdCiAJbW92CXIyLHIyLGxzciMyNAogCi0JbGRyYglyOCxbcjEwLHI4LGxzbCMyXQlAIFRlNFtzMj4+MTZdCiAJbGRyYglyOSxbcjEwLHI5LGxzbCMyXQlAIFRlNFtzMj4+MF0KIAllb3IJcjAscjcscjAsbHNsIzgKIAlsZHJiCXIyLFtyMTAscjIsbHNsIzJdCUAgVGU0W3MyPj4yNF0KQEAgLTI5OCwxNSArMzI2LDE1IEBACiAJYW5kCXI4LGxyLHIzLGxzciM4CUAgaTEKIAllb3IJcjYscjkscjYsbHNsIzgKIAlhbmQJcjksbHIscjMsbHNyIzE2CUAgaTIKLQllb3IJcjIscjUscjIsbHNsIzI0CiAJbGRyYglyNyxbcjEwLHI3LGxzbCMyXQlAIFRlNFtzMz4+MF0KKwllb3IJcjIscjUscjIsbHNsIzI0CisJbGRyYglyOCxbcjEwLHI4LGxzbCMyXQlAIFRlNFtzMz4+OF0KIAltb3YJcjMscjMsbHNyIzI0CiAKLQlsZHJiCXI4LFtyMTAscjgsbHNsIzJdCUAgVGU0W3MzPj44XQogCWxkcmIJcjksW3IxMCxyOSxsc2wjMl0JQCBUZTRbczM+PjE2XQogCWVvcglyMCxyNyxyMCxsc2wjOAotCWxkcmIJcjMsW3IxMCxyMyxsc2wjMl0JQCBUZTRbczM+PjI0XQogCWxkcglyNyxbcjExLCMwXQorCWxkcmIJcjMsW3IxMCxyMyxsc2wjMl0JQCBUZTRbczM+PjI0XQogCWVvcglyMSxyMSxyOCxsc2wjOAogCWxkcglyNCxbcjExLCM0XQogCWVvcglyMixyMixyOSxsc2wjMTYKQEAgLTMyMywxMCArMzUxLDEwIEBACiAJbGRyCXBjLFtzcF0sIzQJCUAgcG9wIGFuZCByZXR1cm4KIC5zaXplCV9hcm12NF9BRVNfZW5jcnlwdCwuLV9hcm12NF9BRVNfZW5jcnlwdAogCi0uZ2xvYmFsIEFFU19zZXRfZW5jcnlwdF9rZXkKLS50eXBlICAgQUVTX3NldF9lbmNyeXB0X2tleSwlZnVuY3Rpb24KKy5nbG9iYWwgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisudHlwZSAgIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSwlZnVuY3Rpb24KIC5hbGlnbgk1Ci1BRVNfc2V0X2VuY3J5cHRfa2V5OgorcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5OgogCXN1YglyMyxwYywjOAkJQCBBRVNfc2V0X2VuY3J5cHRfa2V5CiAJdGVxCXIwLCMwCiAJbW92ZXEJcjAsIy0xCkBAIC0zNDQsMTIgKzM3MiwxMyBAQAogCWJuZQkuTGFicnQKIAogLkxvazoJc3RtZGIgICBzcCEse3I0LXIxMixscn0KLQlzdWIJcjEwLHIzLCNBRVNfc2V0X2VuY3J5cHRfa2V5LUFFU19UZS0xMDI0CUAgVGU0CisJc3ViCXIxMCxyMywjcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5LUFFU19UZS0xMDI0CUAgVGU0CiAKIAltb3YJcjEyLHIwCQlAIGlucAogCW1vdglscixyMQkJCUAgYml0cwogCW1vdglyMTEscjIJCQlAIGtleQogCisjaWYgX19BUk1fQVJDSF9fPDcKIAlsZHJiCXIwLFtyMTIsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCiAJbGRyYglyNCxbcjEyLCMyXQlAIG1hbm5lci4uLgogCWxkcmIJcjUsW3IxMiwjMV0KQEAgLTM4Miw2ICs0MTEsMjIgQEAKIAlvcnIJcjMscjMscjYsbHNsIzI0CiAJc3RyCXIyLFtyMTEsIy04XQogCXN0cglyMyxbcjExLCMtNF0KKyNlbHNlCisJbGRyCXIwLFtyMTIsIzBdCisJbGRyCXIxLFtyMTIsIzRdCisJbGRyCXIyLFtyMTIsIzhdCisJbGRyCXIzLFtyMTIsIzEyXQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyMCxyMAorCXJldglyMSxyMQorCXJldglyMixyMgorCXJldglyMyxyMworI2VuZGlmCisJc3RyCXIwLFtyMTFdLCMxNgorCXN0cglyMSxbcjExLCMtMTJdCisJc3RyCXIyLFtyMTEsIy04XQorCXN0cglyMyxbcjExLCMtNF0KKyNlbmRpZgogCiAJdGVxCWxyLCMxMjgKIAlibmUJLkxub3QxMjgKQEAgLTQxOCw2ICs0NjMsNyBAQAogCWIJLkxkb25lCiAKIC5Mbm90MTI4OgorI2lmIF9fQVJNX0FSQ0hfXzw3CiAJbGRyYglyOCxbcjEyLCMxOV0KIAlsZHJiCXI0LFtyMTIsIzE4XQogCWxkcmIJcjUsW3IxMiwjMTddCkBAIC00MzQsNiArNDgwLDE2IEBACiAJc3RyCXI4LFtyMTFdLCM4CiAJb3JyCXI5LHI5LHI2LGxzbCMyNAogCXN0cglyOSxbcjExLCMtNF0KKyNlbHNlCisJbGRyCXI4LFtyMTIsIzE2XQorCWxkcglyOSxbcjEyLCMyMF0KKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJcjgscjgKKwlyZXYJcjkscjkKKyNlbmRpZgorCXN0cglyOCxbcjExXSwjOAorCXN0cglyOSxbcjExLCMtNF0KKyNlbmRpZgogCiAJdGVxCWxyLCMxOTIKIAlibmUJLkxub3QxOTIKQEAgLTQ3OCw2ICs1MzQsNyBAQAogCWIJLkwxOTJfbG9vcAogCiAuTG5vdDE5MjoKKyNpZiBfX0FSTV9BUkNIX188NwogCWxkcmIJcjgsW3IxMiwjMjddCiAJbGRyYglyNCxbcjEyLCMyNl0KIAlsZHJiCXI1LFtyMTIsIzI1XQpAQCAtNDk0LDYgKzU1MSwxNiBAQAogCXN0cglyOCxbcjExXSwjOAogCW9ycglyOSxyOSxyNixsc2wjMjQKIAlzdHIJcjksW3IxMSwjLTRdCisjZWxzZQorCWxkcglyOCxbcjEyLCMyNF0KKwlsZHIJcjksW3IxMiwjMjhdCisjaWZkZWYgX19BUk1FTF9fCisJcmV2CXI4LHI4CisJcmV2CXI5LHI5CisjZW5kaWYKKwlzdHIJcjgsW3IxMV0sIzgKKwlzdHIJcjksW3IxMSwjLTRdCisjZW5kaWYKIAogCW1vdglyMTIsIzE0CiAJc3RyCXIxMixbcjExLCMyNDAtMzJdCkBAIC01NTgsMTQgKzYyNSwxNCBAQAogLkxhYnJ0Ogl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotLnNpemUJQUVTX3NldF9lbmNyeXB0X2tleSwuLUFFU19zZXRfZW5jcnlwdF9rZXkKKy5zaXplCXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSwuLXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQogCi0uZ2xvYmFsIEFFU19zZXRfZGVjcnlwdF9rZXkKLS50eXBlICAgQUVTX3NldF9kZWNyeXB0X2tleSwlZnVuY3Rpb24KKy5nbG9iYWwgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CisudHlwZSAgIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSwlZnVuY3Rpb24KIC5hbGlnbgk1Ci1BRVNfc2V0X2RlY3J5cHRfa2V5OgorcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5OgogCXN0cglscixbc3AsIy00XSEgICAgICAgICAgICBAIHB1c2ggbHIKLQlibAlBRVNfc2V0X2VuY3J5cHRfa2V5CisJYmwJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CiAJdGVxCXIwLCMwCiAJbGRybmUJbHIsW3NwXSwjNCAgICAgICAgICAgICAgQCBwb3AgbHIKIAlibmUJLkxhYnJ0CkBAIC02MzksMTEgKzcwNiwxNSBAQAogCWJuZQkuTG1peAogCiAJbW92CXIwLCMwCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTIscGN9CisjZWxzZQogCWxkbWlhICAgc3AhLHtyNC1yMTIsbHJ9CiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKLS5zaXplCUFFU19zZXRfZGVjcnlwdF9rZXksLi1BRVNfc2V0X2RlY3J5cHRfa2V5CisjZW5kaWYKKy5zaXplCXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSwuLXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQogCiAudHlwZQlBRVNfVGQsJW9iamVjdAogLmFsaWduCTUKQEAgLTc1OCw3ICs4MjksNyBAQAogCW1vdglyMTIscjAJCUAgaW5wCiAJbW92CXIxMSxyMgogCXN1YglyMTAscjMsI0FFU19kZWNyeXB0LUFFU19UZAkJQCBUZAotCisjaWYgX19BUk1fQVJDSF9fPDcKIAlsZHJiCXIwLFtyMTIsIzNdCUAgbG9hZCBpbnB1dCBkYXRhIGluIGVuZGlhbi1uZXV0cmFsCiAJbGRyYglyNCxbcjEyLCMyXQlAIG1hbm5lci4uLgogCWxkcmIJcjUsW3IxMiwjMV0KQEAgLTc4NywxMCArODU4LDMzIEBACiAJb3JyCXIzLHIzLHI0LGxzbCM4CiAJb3JyCXIzLHIzLHI1LGxzbCMxNgogCW9ycglyMyxyMyxyNixsc2wjMjQKLQorI2Vsc2UKKwlsZHIJcjAsW3IxMiwjMF0KKwlsZHIJcjEsW3IxMiwjNF0KKwlsZHIJcjIsW3IxMiwjOF0KKwlsZHIJcjMsW3IxMiwjMTJdCisjaWZkZWYgX19BUk1FTF9fCisJcmV2CXIwLHIwCisJcmV2CXIxLHIxCisJcmV2CXIyLHIyCisJcmV2CXIzLHIzCisjZW5kaWYKKyNlbmRpZgogCWJsCV9hcm12NF9BRVNfZGVjcnlwdAogCiAJbGRyCXIxMixbc3BdLCM0CQlAIHBvcCBvdXQKKyNpZiBfX0FSTV9BUkNIX18+PTcKKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJcjAscjAKKwlyZXYJcjEscjEKKwlyZXYJcjIscjIKKwlyZXYJcjMscjMKKyNlbmRpZgorCXN0cglyMCxbcjEyLCMwXQorCXN0cglyMSxbcjEyLCM0XQorCXN0cglyMixbcjEyLCM4XQorCXN0cglyMyxbcjEyLCMxMl0KKyNlbHNlCiAJbW92CXI0LHIwLGxzciMyNAkJQCB3cml0ZSBvdXRwdXQgaW4gZW5kaWFuLW5ldXRyYWwKIAltb3YJcjUscjAsbHNyIzE2CQlAIG1hbm5lci4uLgogCW1vdglyNixyMCxsc3IjOApAQCAtODE5LDExICs5MTMsMTUgQEAKIAlzdHJiCXI1LFtyMTIsIzEzXQogCXN0cmIJcjYsW3IxMiwjMTRdCiAJc3RyYglyMyxbcjEyLCMxNV0KLQorI2VuZGlmCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTIscGN9CisjZWxzZQogCWxkbWlhICAgc3AhLHtyNC1yMTIsbHJ9CiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgogLnNpemUJQUVTX2RlY3J5cHQsLi1BRVNfZGVjcnlwdAogCiAudHlwZSAgIF9hcm12NF9BRVNfZGVjcnlwdCwlZnVuY3Rpb24KQEAgLTg2MywxMSArOTYxLDExIEBACiAJYW5kCXI4LGxyLHIyCQlAIGkxCiAJZW9yCXI2LHI5LHI2LHJvciM4CiAJYW5kCXI5LGxyLHIyLGxzciMxNgotCWVvcglyMSxyMSxyNCxyb3IjOAogCWxkcglyNyxbcjEwLHI3LGxzbCMyXQlAIFRkMltzMj4+OF0KKwllb3IJcjEscjEscjQscm9yIzgKKwlsZHIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZDNbczI+PjBdCiAJbW92CXIyLHIyLGxzciMyNAogCi0JbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGQzW3MyPj4wXQogCWxkcglyOSxbcjEwLHI5LGxzbCMyXQlAIFRkMVtzMj4+MTZdCiAJZW9yCXIwLHIwLHI3LHJvciMxNgogCWxkcglyMixbcjEwLHIyLGxzbCMyXQlAIFRkMFtzMj4+MjRdCkBAIC04NzYsMjIgKzk3NCwyMiBAQAogCWFuZAlyOCxscixyMyxsc3IjOAlAIGkxCiAJZW9yCXI2LHI5LHI2LHJvciM4CiAJYW5kCXI5LGxyLHIzCQlAIGkyCi0JZW9yCXIyLHIyLHI1LHJvciM4CiAJbGRyCXI3LFtyMTAscjcsbHNsIzJdCUAgVGQxW3MzPj4xNl0KKwllb3IJcjIscjIscjUscm9yIzgKKwlsZHIJcjgsW3IxMCxyOCxsc2wjMl0JQCBUZDJbczM+PjhdCiAJbW92CXIzLHIzLGxzciMyNAogCi0JbGRyCXI4LFtyMTAscjgsbHNsIzJdCUAgVGQyW3MzPj44XQogCWxkcglyOSxbcjEwLHI5LGxzbCMyXQlAIFRkM1tzMz4+MF0KIAllb3IJcjAscjAscjcscm9yIzgKLQlsZHIJcjMsW3IxMCxyMyxsc2wjMl0JQCBUZDBbczM+PjI0XQotCWVvcglyMSxyMSxyOCxyb3IjMTYKLQllb3IJcjIscjIscjkscm9yIzI0CiAJbGRyCXI3LFtyMTFdLCMxNgotCWVvcglyMyxyMyxyNixyb3IjOAorCWVvcglyMSxyMSxyOCxyb3IjMTYKKwlsZHIJcjMsW3IxMCxyMyxsc2wjMl0JQCBUZDBbczM+PjI0XQorCWVvcglyMixyMixyOSxyb3IjMjQKIAogCWxkcglyNCxbcjExLCMtMTJdCi0JbGRyCXI1LFtyMTEsIy04XQogCWVvcglyMCxyMCxyNworCWxkcglyNSxbcjExLCMtOF0KKwllb3IJcjMscjMscjYscm9yIzgKIAlsZHIJcjYsW3IxMSwjLTRdCiAJYW5kCXI3LGxyLHIwLGxzciMxNgogCWVvcglyMSxyMSxyNApAQCAtOTMyLDExICsxMDMwLDExIEBACiAJYW5kCXI3LGxyLHIyLGxzciM4CUAgaTAKIAllb3IJcjUscjUscjgsbHNsIzgKIAlhbmQJcjgsbHIscjIJCUAgaTEKLQllb3IJcjYscjYscjksbHNsIzgKIAlsZHJiCXI3LFtyMTAscjddCQlAIFRkNFtzMj4+OF0KKwllb3IJcjYscjYscjksbHNsIzgKKwlsZHJiCXI4LFtyMTAscjhdCQlAIFRkNFtzMj4+MF0KIAlhbmQJcjksbHIscjIsbHNyIzE2CiAKLQlsZHJiCXI4LFtyMTAscjhdCQlAIFRkNFtzMj4+MF0KIAlsZHJiCXIyLFtyMTAscjIsbHNyIzI0XQlAIFRkNFtzMj4+MjRdCiAJZW9yCXIwLHIwLHI3LGxzbCM4CiAJbGRyYglyOSxbcjEwLHI5XQkJQCBUZDRbczI+PjE2XQpAQCAtOTQ0LDExICsxMDQyLDExIEBACiAJYW5kCXI3LGxyLHIzLGxzciMxNglAIGkwCiAJZW9yCXIyLHI1LHIyLGxzbCMxNgogCWFuZAlyOCxscixyMyxsc3IjOAlAIGkxCi0JZW9yCXI2LHI2LHI5LGxzbCMxNgogCWxkcmIJcjcsW3IxMCxyN10JCUAgVGQ0W3MzPj4xNl0KKwllb3IJcjYscjYscjksbHNsIzE2CisJbGRyYglyOCxbcjEwLHI4XQkJQCBUZDRbczM+PjhdCiAJYW5kCXI5LGxyLHIzCQlAIGkyCiAKLQlsZHJiCXI4LFtyMTAscjhdCQlAIFRkNFtzMz4+OF0KIAlsZHJiCXI5LFtyMTAscjldCQlAIFRkNFtzMz4+MF0KIAlsZHJiCXIzLFtyMTAscjMsbHNyIzI0XQlAIFRkNFtzMz4+MjRdCiAJZW9yCXIwLHIwLHI3LGxzbCMxNgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLXBhcmlzYy5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy1wYXJpc2MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2YjZhMgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flcy1wYXJpc2MucGwKQEAgLTAsMCArMSwxMDIxIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgQUVTIGZvciBQQS1SSVNDLgorIworIyBKdW5lIDIwMDkuCisjCisjIFRoZSBtb2R1bGUgaXMgbWVjaGFuaWNhbCB0cmFuc2xpdGVyYXRpb24gb2YgYWVzLXNwYXJjdjkucGwsIGJ1dCB3aXRoCisjIGEgdHdpc3Q6IFMtYm94ZXMgYXJlIGNvbXByZXNzZWQgZXZlbiBmdXJ0aGVyIGRvd24gdG8gMUsrMjU2Qi4gT24KKyMgUEEtNzEwMExDIHBlcmZvcm1hbmNlIGlzIH40MCUgYmV0dGVyIHRoYW4gZ2NjIDMuMiBnZW5lcmF0ZWQgY29kZSBhbmQKKyMgaXMgYWJvdXQgMzMgY3ljbGVzIHBlciBieXRlIHByb2Nlc3NlZCB3aXRoIDEyOC1iaXQga2V5LiBOZXdlciBDUFVzCisjIHBlcmZvcm0gYXQgMTYgY3ljbGVzIHBlciBieXRlLiBJdCdzIG5vdCBmYXN0ZXIgdGhhbiBjb2RlIGdlbmVyYXRlZAorIyBieSB2ZW5kb3IgY29tcGlsZXIsIGJ1dCByZWNhbGwgdGhhdCBpdCBoYXMgY29tcHJlc3NlZCBTLWJveGVzLCB3aGljaAorIyByZXF1aXJlcyBleHRyYSBwcm9jZXNzaW5nLgorIworIyBTcGVjaWFsIHRoYW5rcyB0byBwb2xhcmhvbWUuY29tIGZvciBwcm92aWRpbmcgSFAtVVggYWNjb3VudC4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgPSBzaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJExFVkVMCQk9IjIuMFciOworCSRTSVpFX1QJCT04OworCSRGUkFNRV9NQVJLRVIJPTgwOworCSRTQVZFRF9SUAk9MTY7CisJJFBVU0gJCT0ic3RkIjsKKwkkUFVTSE1BCQk9InN0ZCxtYSI7CisJJFBPUAkJPSJsZGQiOworCSRQT1BNQgkJPSJsZGQsbWIiOworfSBlbHNlIHsKKwkkTEVWRUwJCT0iMS4wIjsKKwkkU0laRV9UCQk9NDsKKwkkRlJBTUVfTUFSS0VSCT00ODsKKwkkU0FWRURfUlAJPTIwOworCSRQVVNICQk9InN0dyI7CisJJFBVU0hNQQkJPSJzdHdtIjsKKwkkUE9QCQk9ImxkdyI7CisJJFBPUE1CCQk9Imxkd20iOworfQorCiskRlJBTUU9MTYqJFNJWkVfVCskRlJBTUVfTUFSS0VSOyMgMTYgc2F2ZWQgcmVncyArIGZyYW1lIG1hcmtlcgorCQkJCSMgICAgICAgICAgICAgICAgIFsrIGFyZ3VtZW50IHRyYW5zZmVyXQorJGlucD0iJXIyNiI7CSMgYXJnMAorJG91dD0iJXIyNSI7CSMgYXJnMQorJGtleT0iJXIyNCI7CSMgYXJnMgorCisoJHMwLCRzMSwkczIsJHMzKSA9ICgiJXIxIiwiJXIyIiwiJXIzIiwiJXI0Iik7CisoJHQwLCR0MSwkdDIsJHQzKSA9ICgiJXI1IiwiJXI2IiwiJXI3IiwiJXI4Iik7CisKKygkYWNjMCwgJGFjYzEsICRhY2MyLCAkYWNjMywgJGFjYzQsICRhY2M1LCAkYWNjNiwgJGFjYzcsCisgJGFjYzgsICRhY2M5LCRhY2MxMCwkYWNjMTEsJGFjYzEyLCRhY2MxMywkYWNjMTQsJGFjYzE1KSA9CisoIiVyOSIsIiVyMTAiLCIlcjExIiwiJXIxMiIsIiVyMTMiLCIlcjE0IiwiJXIxNSIsIiVyMTYiLAorIiVyMTciLCIlcjE4IiwiJXIxOSIsIiVyMjAiLCIlcjIxIiwiJXIyMiIsIiVyMjMiLCIlcjI2Iik7CisKKyR0Ymw9IiVyMjgiOworJHJvdW5kcz0iJXIyOSI7CisKKyRjb2RlPTw8X19fOworCS5MRVZFTAkkTEVWRUwKKwkuU1BBQ0UJXCRURVhUXCQKKwkuU1VCU1BBCVwkQ09ERVwkLFFVQUQ9MCxBTElHTj04LEFDQ0VTUz0weDJDLENPREVfT05MWQorCisJLkVYUE9SVAlBRVNfZW5jcnlwdCxFTlRSWSxBUkdXMD1HUixBUkdXMT1HUixBUkdXMj1HUgorCS5BTElHTgk2NAorQUVTX2VuY3J5cHQKKwkuUFJPQworCS5DQUxMSU5GTwlGUkFNRT1gJEZSQU1FLTE2KiRTSVpFX1RgLE5PX0NBTExTLFNBVkVfUlAsRU5UUllfR1I9MTgKKwkuRU5UUlkKKwkkUFVTSAklcjIsLSRTQVZFRF9SUCglc3ApCTsgc3RhbmRhcmQgcHJvbG9ndWUKKwkkUFVTSE1BCSVyMywkRlJBTUUoJXNwKQorCSRQVVNICSVyNCxgLSRGUkFNRSsxKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjUsYC0kRlJBTUUrMiokU0laRV9UYCglc3ApCisJJFBVU0gJJXI2LGAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNyxgLSRGUkFNRSs0KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjgsYC0kRlJBTUUrNSokU0laRV9UYCglc3ApCisJJFBVU0gJJXI5LGAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTAsYC0kRlJBTUUrNyokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMSxgLSRGUkFNRSs4KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjEyLGAtJEZSQU1FKzkqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTMsYC0kRlJBTUUrMTAqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTQsYC0kRlJBTUUrMTEqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTUsYC0kRlJBTUUrMTIqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTYsYC0kRlJBTUUrMTMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTcsYC0kRlJBTUUrMTQqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTgsYC0kRlJBTUUrMTUqJFNJWkVfVGAoJXNwKQorCisJYmxyCSVyMCwkdGJsCisJbGRpCTMsJHQwCitMXCRlbmNfcGljCisJYW5kY20JJHRibCwkdDAsJHRibAorCWxkbwlMXCRBRVNfVGUtTFwkZW5jX3BpYygkdGJsKSwkdGJsCisKKwlhbmQJJGlucCwkdDAsJHQwCisJc3ViCSRpbnAsJHQwLCRpbnAKKwlsZHcJMCgkaW5wKSwkczAKKwlsZHcJNCgkaW5wKSwkczEKKwlsZHcJOCgkaW5wKSwkczIKKwljb21pYiw9CTAsJHQwLExcJGVuY19pbnBfYWxpZ25lZAorCWxkdwkxMigkaW5wKSwkczMKKworCXNoM2FkZGwJJHQwLCVyMCwkdDAKKwlzdWJpCTMyLCR0MCwkdDAKKwltdGN0bAkkdDAsJWNyMTEKKwlsZHcJMTYoJGlucCksJHQxCisJdnNoZAkkczAsJHMxLCRzMAorCXZzaGQJJHMxLCRzMiwkczEKKwl2c2hkCSRzMiwkczMsJHMyCisJdnNoZAkkczMsJHQxLCRzMworCitMXCRlbmNfaW5wX2FsaWduZWQKKwlibAlfcGFyaXNjX0FFU19lbmNyeXB0LCVyMzEKKwlub3AKKworCWV4dHJ1LDw+ICRvdXQsMzEsMiwlcjAKKwliCUxcJGVuY19vdXRfYWxpZ25lZAorCW5vcAorCisJX3NybQkkczAsMjQsJGFjYzAKKwlfc3JtCSRzMCwxNiwkYWNjMQorCXN0YgkkYWNjMCwwKCRvdXQpCisJX3NybQkkczAsOCwkYWNjMgorCXN0YgkkYWNjMSwxKCRvdXQpCisJX3NybQkkczEsMjQsJGFjYzQKKwlzdGIJJGFjYzIsMigkb3V0KQorCV9zcm0JJHMxLDE2LCRhY2M1CisJc3RiCSRzMCwzKCRvdXQpCisJX3NybQkkczEsOCwkYWNjNgorCXN0YgkkYWNjNCw0KCRvdXQpCisJX3NybQkkczIsMjQsJGFjYzAKKwlzdGIJJGFjYzUsNSgkb3V0KQorCV9zcm0JJHMyLDE2LCRhY2MxCisJc3RiCSRhY2M2LDYoJG91dCkKKwlfc3JtCSRzMiw4LCRhY2MyCisJc3RiCSRzMSw3KCRvdXQpCisJX3NybQkkczMsMjQsJGFjYzQKKwlzdGIJJGFjYzAsOCgkb3V0KQorCV9zcm0JJHMzLDE2LCRhY2M1CisJc3RiCSRhY2MxLDkoJG91dCkKKwlfc3JtCSRzMyw4LCRhY2M2CisJc3RiCSRhY2MyLDEwKCRvdXQpCisJc3RiCSRzMiwxMSgkb3V0KQorCXN0YgkkYWNjNCwxMigkb3V0KQorCXN0YgkkYWNjNSwxMygkb3V0KQorCXN0YgkkYWNjNiwxNCgkb3V0KQorCWIJTFwkZW5jX2RvbmUKKwlzdGIJJHMzLDE1KCRvdXQpCisKK0xcJGVuY19vdXRfYWxpZ25lZAorCXN0dwkkczAsMCgkb3V0KQorCXN0dwkkczEsNCgkb3V0KQorCXN0dwkkczIsOCgkb3V0KQorCXN0dwkkczMsMTIoJG91dCkKKworTFwkZW5jX2RvbmUKKwkkUE9QCWAtJEZSQU1FLSRTQVZFRF9SUGAoJXNwKSwlcjIJOyBzdGFuZGFyZCBlcGlsb2d1ZQorCSRQT1AJYC0kRlJBTUUrMSokU0laRV9UYCglc3ApLCVyNAorCSRQT1AJYC0kRlJBTUUrMiokU0laRV9UYCglc3ApLCVyNQorCSRQT1AJYC0kRlJBTUUrMyokU0laRV9UYCglc3ApLCVyNgorCSRQT1AJYC0kRlJBTUUrNCokU0laRV9UYCglc3ApLCVyNworCSRQT1AJYC0kRlJBTUUrNSokU0laRV9UYCglc3ApLCVyOAorCSRQT1AJYC0kRlJBTUUrNiokU0laRV9UYCglc3ApLCVyOQorCSRQT1AJYC0kRlJBTUUrNyokU0laRV9UYCglc3ApLCVyMTAKKwkkUE9QCWAtJEZSQU1FKzgqJFNJWkVfVGAoJXNwKSwlcjExCisJJFBPUAlgLSRGUkFNRSs5KiRTSVpFX1RgKCVzcCksJXIxMgorCSRQT1AJYC0kRlJBTUUrMTAqJFNJWkVfVGAoJXNwKSwlcjEzCisJJFBPUAlgLSRGUkFNRSsxMSokU0laRV9UYCglc3ApLCVyMTQKKwkkUE9QCWAtJEZSQU1FKzEyKiRTSVpFX1RgKCVzcCksJXIxNQorCSRQT1AJYC0kRlJBTUUrMTMqJFNJWkVfVGAoJXNwKSwlcjE2CisJJFBPUAlgLSRGUkFNRSsxNCokU0laRV9UYCglc3ApLCVyMTcKKwkkUE9QCWAtJEZSQU1FKzE1KiRTSVpFX1RgKCVzcCksJXIxOAorCWJ2CSglcjIpCisJLkVYSVQKKwkkUE9QTUIJLSRGUkFNRSglc3ApLCVyMworCS5QUk9DRU5ECisKKwkuQUxJR04JMTYKK19wYXJpc2NfQUVTX2VuY3J5cHQKKwkuUFJPQworCS5DQUxMSU5GTwlNSUxMSUNPREUKKwkuRU5UUlkKKwlsZHcJMjQwKCRrZXkpLCRyb3VuZHMKKwlsZHcJMCgka2V5KSwkdDAKKwlsZHcJNCgka2V5KSwkdDEKKwlsZHcJOCgka2V5KSwkdDIKKwlfc3JtCSRyb3VuZHMsMSwkcm91bmRzCisJeG9yCSR0MCwkczAsJHMwCisJbGR3CTEyKCRrZXkpLCR0MworCV9zcm0JJHMwLDI0LCRhY2MwCisJeG9yCSR0MSwkczEsJHMxCisJbGR3CTE2KCRrZXkpLCR0MAorCV9zcm0JJHMxLDE2LCRhY2MxCisJeG9yCSR0MiwkczIsJHMyCisJbGR3CTIwKCRrZXkpLCR0MQorCXhvcgkkdDMsJHMzLCRzMworCWxkdwkyNCgka2V5KSwkdDIKKwlsZHcJMjgoJGtleSksJHQzCitMXCRlbmNfbG9vcAorCV9zcm0JJHMyLDgsJGFjYzIKKwlsZHd4LHMJJGFjYzAoJHRibCksJGFjYzAKKwlfc3JtCSRzMywwLCRhY2MzCisJbGR3eCxzCSRhY2MxKCR0YmwpLCRhY2MxCisJX3NybQkkczEsMjQsJGFjYzQKKwlsZHd4LHMJJGFjYzIoJHRibCksJGFjYzIKKwlfc3JtCSRzMiwxNiwkYWNjNQorCWxkd3gscwkkYWNjMygkdGJsKSwkYWNjMworCV9zcm0JJHMzLDgsJGFjYzYKKwlsZHd4LHMJJGFjYzQoJHRibCksJGFjYzQKKwlfc3JtCSRzMCwwLCRhY2M3CisJbGR3eCxzCSRhY2M1KCR0YmwpLCRhY2M1CisJX3NybQkkczIsMjQsJGFjYzgKKwlsZHd4LHMJJGFjYzYoJHRibCksJGFjYzYKKwlfc3JtCSRzMywxNiwkYWNjOQorCWxkd3gscwkkYWNjNygkdGJsKSwkYWNjNworCV9zcm0JJHMwLDgsJGFjYzEwCisJbGR3eCxzCSRhY2M4KCR0YmwpLCRhY2M4CisJX3NybQkkczEsMCwkYWNjMTEKKwlsZHd4LHMJJGFjYzkoJHRibCksJGFjYzkKKwlfc3JtCSRzMywyNCwkYWNjMTIKKwlsZHd4LHMJJGFjYzEwKCR0YmwpLCRhY2MxMAorCV9zcm0JJHMwLDE2LCRhY2MxMworCWxkd3gscwkkYWNjMTEoJHRibCksJGFjYzExCisJX3NybQkkczEsOCwkYWNjMTQKKwlsZHd4LHMJJGFjYzEyKCR0YmwpLCRhY2MxMgorCV9zcm0JJHMyLDAsJGFjYzE1CisJbGR3eCxzCSRhY2MxMygkdGJsKSwkYWNjMTMKKwlsZHd4LHMJJGFjYzE0KCR0YmwpLCRhY2MxNAorCWxkd3gscwkkYWNjMTUoJHRibCksJGFjYzE1CisJYWRkaWIsPSAtMSwkcm91bmRzLExcJGVuY19sYXN0CisJbGRvCTMyKCRrZXkpLCRrZXkKKworCQlfcm9yCSRhY2MxLDgsJGFjYzEKKwkJeG9yCSRhY2MwLCR0MCwkdDAKKwlsZHcJMCgka2V5KSwkczAKKwkJX3JvcgkkYWNjMiwxNiwkYWNjMgorCQl4b3IJJGFjYzEsJHQwLCR0MAorCWxkdwk0KCRrZXkpLCRzMQorCQlfcm9yCSRhY2MzLDI0LCRhY2MzCisJCXhvcgkkYWNjMiwkdDAsJHQwCisJbGR3CTgoJGtleSksJHMyCisJCV9yb3IJJGFjYzUsOCwkYWNjNQorCQl4b3IJJGFjYzMsJHQwLCR0MAorCWxkdwkxMigka2V5KSwkczMKKwkJX3JvcgkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzQsJHQxLCR0MQorCQlfcm9yCSRhY2M3LDI0LCRhY2M3CisJCXhvcgkkYWNjNSwkdDEsJHQxCisJCV9yb3IJJGFjYzksOCwkYWNjOQorCQl4b3IJJGFjYzYsJHQxLCR0MQorCQlfcm9yCSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M3LCR0MSwkdDEKKwkJX3JvcgkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjOCwkdDIsJHQyCisJCV9yb3IJJGFjYzEzLDgsJGFjYzEzCisJCXhvcgkkYWNjOSwkdDIsJHQyCisJCV9yb3IJJGFjYzE0LDE2LCRhY2MxNAorCQl4b3IJJGFjYzEwLCR0MiwkdDIKKwkJX3JvcgkkYWNjMTUsMjQsJGFjYzE1CisJCXhvcgkkYWNjMTEsJHQyLCR0MgorCQl4b3IJJGFjYzEyLCRhY2MxNCwkYWNjMTQKKwkJeG9yCSRhY2MxMywkdDMsJHQzCisJX3NybQkkdDAsMjQsJGFjYzAKKwkJeG9yCSRhY2MxNCwkdDMsJHQzCisJX3NybQkkdDEsMTYsJGFjYzEKKwkJeG9yCSRhY2MxNSwkdDMsJHQzCisKKwlfc3JtCSR0Miw4LCRhY2MyCisJbGR3eCxzCSRhY2MwKCR0YmwpLCRhY2MwCisJX3NybQkkdDMsMCwkYWNjMworCWxkd3gscwkkYWNjMSgkdGJsKSwkYWNjMQorCV9zcm0JJHQxLDI0LCRhY2M0CisJbGR3eCxzCSRhY2MyKCR0YmwpLCRhY2MyCisJX3NybQkkdDIsMTYsJGFjYzUKKwlsZHd4LHMJJGFjYzMoJHRibCksJGFjYzMKKwlfc3JtCSR0Myw4LCRhY2M2CisJbGR3eCxzCSRhY2M0KCR0YmwpLCRhY2M0CisJX3NybQkkdDAsMCwkYWNjNworCWxkd3gscwkkYWNjNSgkdGJsKSwkYWNjNQorCV9zcm0JJHQyLDI0LCRhY2M4CisJbGR3eCxzCSRhY2M2KCR0YmwpLCRhY2M2CisJX3NybQkkdDMsMTYsJGFjYzkKKwlsZHd4LHMJJGFjYzcoJHRibCksJGFjYzcKKwlfc3JtCSR0MCw4LCRhY2MxMAorCWxkd3gscwkkYWNjOCgkdGJsKSwkYWNjOAorCV9zcm0JJHQxLDAsJGFjYzExCisJbGR3eCxzCSRhY2M5KCR0YmwpLCRhY2M5CisJX3NybQkkdDMsMjQsJGFjYzEyCisJbGR3eCxzCSRhY2MxMCgkdGJsKSwkYWNjMTAKKwlfc3JtCSR0MCwxNiwkYWNjMTMKKwlsZHd4LHMJJGFjYzExKCR0YmwpLCRhY2MxMQorCV9zcm0JJHQxLDgsJGFjYzE0CisJbGR3eCxzCSRhY2MxMigkdGJsKSwkYWNjMTIKKwlfc3JtCSR0MiwwLCRhY2MxNQorCWxkd3gscwkkYWNjMTMoJHRibCksJGFjYzEzCisJCV9yb3IJJGFjYzEsOCwkYWNjMQorCWxkd3gscwkkYWNjMTQoJHRibCksJGFjYzE0CisKKwkJX3JvcgkkYWNjMiwxNiwkYWNjMgorCQl4b3IJJGFjYzAsJHMwLCRzMAorCWxkd3gscwkkYWNjMTUoJHRibCksJGFjYzE1CisJCV9yb3IJJGFjYzMsMjQsJGFjYzMKKwkJeG9yCSRhY2MxLCRzMCwkczAKKwlsZHcJMTYoJGtleSksJHQwCisJCV9yb3IJJGFjYzUsOCwkYWNjNQorCQl4b3IJJGFjYzIsJHMwLCRzMAorCWxkdwkyMCgka2V5KSwkdDEKKwkJX3JvcgkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzMsJHMwLCRzMAorCWxkdwkyNCgka2V5KSwkdDIKKwkJX3JvcgkkYWNjNywyNCwkYWNjNworCQl4b3IJJGFjYzQsJHMxLCRzMQorCWxkdwkyOCgka2V5KSwkdDMKKwkJX3JvcgkkYWNjOSw4LCRhY2M5CisJCXhvcgkkYWNjNSwkczEsJHMxCisJbGR3CTEwMjQrMCgkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGU0CisJCV9yb3IJJGFjYzEwLDE2LCRhY2MxMAorCQl4b3IJJGFjYzYsJHMxLCRzMQorCWxkdwkxMDI0KzMyKCR0YmwpLCVyMAkJOyBwcmVmZXRjaCB0ZTQKKwkJX3JvcgkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjNywkczEsJHMxCisJbGR3CTEwMjQrNjQoJHRibCksJXIwCQk7IHByZWZldGNoIHRlNAorCQlfcm9yCSRhY2MxMyw4LCRhY2MxMworCQl4b3IJJGFjYzgsJHMyLCRzMgorCWxkdwkxMDI0Kzk2KCR0YmwpLCVyMAkJOyBwcmVmZXRjaCB0ZTQKKwkJX3JvcgkkYWNjMTQsMTYsJGFjYzE0CisJCXhvcgkkYWNjOSwkczIsJHMyCisJbGR3CTEwMjQrMTI4KCR0YmwpLCVyMAkJOyBwcmVmZXRjaCB0ZTQKKwkJX3JvcgkkYWNjMTUsMjQsJGFjYzE1CisJCXhvcgkkYWNjMTAsJHMyLCRzMgorCWxkdwkxMDI0KzE2MCgkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGU0CisJX3NybQkkczAsMjQsJGFjYzAKKwkJeG9yCSRhY2MxMSwkczIsJHMyCisJbGR3CTEwMjQrMTkyKCR0YmwpLCVyMAkJOyBwcmVmZXRjaCB0ZTQKKwkJeG9yCSRhY2MxMiwkYWNjMTQsJGFjYzE0CisJCXhvcgkkYWNjMTMsJHMzLCRzMworCWxkdwkxMDI0KzIyNCgkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGU0CisJX3NybQkkczEsMTYsJGFjYzEKKwkJeG9yCSRhY2MxNCwkczMsJHMzCisJYglMXCRlbmNfbG9vcAorCQl4b3IJJGFjYzE1LCRzMywkczMKKworCS5BTElHTgkxNgorTFwkZW5jX2xhc3QKKwlsZG8JMTAyNCgkdGJsKSwkcm91bmRzCisJCV9yb3IJJGFjYzEsOCwkYWNjMQorCQl4b3IJJGFjYzAsJHQwLCR0MAorCWxkdwkwKCRrZXkpLCRzMAorCQlfcm9yCSRhY2MyLDE2LCRhY2MyCisJCXhvcgkkYWNjMSwkdDAsJHQwCisJbGR3CTQoJGtleSksJHMxCisJCV9yb3IJJGFjYzMsMjQsJGFjYzMKKwkJeG9yCSRhY2MyLCR0MCwkdDAKKwlsZHcJOCgka2V5KSwkczIKKwkJX3JvcgkkYWNjNSw4LCRhY2M1CisJCXhvcgkkYWNjMywkdDAsJHQwCisJbGR3CTEyKCRrZXkpLCRzMworCQlfcm9yCSRhY2M2LDE2LCRhY2M2CisJCXhvcgkkYWNjNCwkdDEsJHQxCisJCV9yb3IJJGFjYzcsMjQsJGFjYzcKKwkJeG9yCSRhY2M1LCR0MSwkdDEKKwkJX3JvcgkkYWNjOSw4LCRhY2M5CisJCXhvcgkkYWNjNiwkdDEsJHQxCisJCV9yb3IJJGFjYzEwLDE2LCRhY2MxMAorCQl4b3IJJGFjYzcsJHQxLCR0MQorCQlfcm9yCSRhY2MxMSwyNCwkYWNjMTEKKwkJeG9yCSRhY2M4LCR0MiwkdDIKKwkJX3JvcgkkYWNjMTMsOCwkYWNjMTMKKwkJeG9yCSRhY2M5LCR0MiwkdDIKKwkJX3JvcgkkYWNjMTQsMTYsJGFjYzE0CisJCXhvcgkkYWNjMTAsJHQyLCR0MgorCQlfcm9yCSRhY2MxNSwyNCwkYWNjMTUKKwkJeG9yCSRhY2MxMSwkdDIsJHQyCisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCR0MywkdDMKKwlfc3JtCSR0MCwyNCwkYWNjMAorCQl4b3IJJGFjYzE0LCR0MywkdDMKKwlfc3JtCSR0MSwxNiwkYWNjMQorCQl4b3IJJGFjYzE1LCR0MywkdDMKKworCV9zcm0JJHQyLDgsJGFjYzIKKwlsZGJ4CSRhY2MwKCRyb3VuZHMpLCRhY2MwCisJX3NybQkkdDEsMjQsJGFjYzQKKwlsZGJ4CSRhY2MxKCRyb3VuZHMpLCRhY2MxCisJX3NybQkkdDIsMTYsJGFjYzUKKwlfc3JtCSR0MywwLCRhY2MzCisJbGRieAkkYWNjMigkcm91bmRzKSwkYWNjMgorCWxkYngJJGFjYzMoJHJvdW5kcyksJGFjYzMKKwlfc3JtCSR0Myw4LCRhY2M2CisJbGRieAkkYWNjNCgkcm91bmRzKSwkYWNjNAorCV9zcm0JJHQyLDI0LCRhY2M4CisJbGRieAkkYWNjNSgkcm91bmRzKSwkYWNjNQorCV9zcm0JJHQzLDE2LCRhY2M5CisJX3NybQkkdDAsMCwkYWNjNworCWxkYngJJGFjYzYoJHJvdW5kcyksJGFjYzYKKwlsZGJ4CSRhY2M3KCRyb3VuZHMpLCRhY2M3CisJX3NybQkkdDAsOCwkYWNjMTAKKwlsZGJ4CSRhY2M4KCRyb3VuZHMpLCRhY2M4CisJX3NybQkkdDMsMjQsJGFjYzEyCisJbGRieAkkYWNjOSgkcm91bmRzKSwkYWNjOQorCV9zcm0JJHQwLDE2LCRhY2MxMworCV9zcm0JJHQxLDAsJGFjYzExCisJbGRieAkkYWNjMTAoJHJvdW5kcyksJGFjYzEwCisJX3NybQkkdDEsOCwkYWNjMTQKKwlsZGJ4CSRhY2MxMSgkcm91bmRzKSwkYWNjMTEKKwlsZGJ4CSRhY2MxMigkcm91bmRzKSwkYWNjMTIKKwlsZGJ4CSRhY2MxMygkcm91bmRzKSwkYWNjMTMKKwlfc3JtCSR0MiwwLCRhY2MxNQorCWxkYngJJGFjYzE0KCRyb3VuZHMpLCRhY2MxNAorCisJCWRlcAkkYWNjMCw3LDgsJGFjYzMKKwlsZGJ4CSRhY2MxNSgkcm91bmRzKSwkYWNjMTUKKwkJZGVwCSRhY2M0LDcsOCwkYWNjNworCQlkZXAJJGFjYzEsMTUsOCwkYWNjMworCQlkZXAJJGFjYzUsMTUsOCwkYWNjNworCQlkZXAJJGFjYzIsMjMsOCwkYWNjMworCQlkZXAJJGFjYzYsMjMsOCwkYWNjNworCQl4b3IJJGFjYzMsJHMwLCRzMAorCQl4b3IJJGFjYzcsJHMxLCRzMQorCQlkZXAJJGFjYzgsNyw4LCRhY2MxMQorCQlkZXAJJGFjYzEyLDcsOCwkYWNjMTUKKwkJZGVwCSRhY2M5LDE1LDgsJGFjYzExCisJCWRlcAkkYWNjMTMsMTUsOCwkYWNjMTUKKwkJZGVwCSRhY2MxMCwyMyw4LCRhY2MxMQorCQlkZXAJJGFjYzE0LDIzLDgsJGFjYzE1CisJCXhvcgkkYWNjMTEsJHMyLCRzMgorCisJYnYJKCVyMzEpCisJLkVYSVQKKwkJeG9yCSRhY2MxNSwkczMsJHMzCisJLlBST0NFTkQKKworCS5BTElHTgk2NAorTFwkQUVTX1RlCisJLldPUkQJMHhjNjYzNjNhNSwgMHhmODdjN2M4NCwgMHhlZTc3Nzc5OSwgMHhmNjdiN2I4ZAorCS5XT1JECTB4ZmZmMmYyMGQsIDB4ZDY2YjZiYmQsIDB4ZGU2ZjZmYjEsIDB4OTFjNWM1NTQKKwkuV09SRAkweDYwMzAzMDUwLCAweDAyMDEwMTAzLCAweGNlNjc2N2E5LCAweDU2MmIyYjdkCisJLldPUkQJMHhlN2ZlZmUxOSwgMHhiNWQ3ZDc2MiwgMHg0ZGFiYWJlNiwgMHhlYzc2NzY5YQorCS5XT1JECTB4OGZjYWNhNDUsIDB4MWY4MjgyOWQsIDB4ODljOWM5NDAsIDB4ZmE3ZDdkODcKKwkuV09SRAkweGVmZmFmYTE1LCAweGIyNTk1OWViLCAweDhlNDc0N2M5LCAweGZiZjBmMDBiCisJLldPUkQJMHg0MWFkYWRlYywgMHhiM2Q0ZDQ2NywgMHg1ZmEyYTJmZCwgMHg0NWFmYWZlYQorCS5XT1JECTB4MjM5YzljYmYsIDB4NTNhNGE0ZjcsIDB4ZTQ3MjcyOTYsIDB4OWJjMGMwNWIKKwkuV09SRAkweDc1YjdiN2MyLCAweGUxZmRmZDFjLCAweDNkOTM5M2FlLCAweDRjMjYyNjZhCisJLldPUkQJMHg2YzM2MzY1YSwgMHg3ZTNmM2Y0MSwgMHhmNWY3ZjcwMiwgMHg4M2NjY2M0ZgorCS5XT1JECTB4NjgzNDM0NWMsIDB4NTFhNWE1ZjQsIDB4ZDFlNWU1MzQsIDB4ZjlmMWYxMDgKKwkuV09SRAkweGUyNzE3MTkzLCAweGFiZDhkODczLCAweDYyMzEzMTUzLCAweDJhMTUxNTNmCisJLldPUkQJMHgwODA0MDQwYywgMHg5NWM3Yzc1MiwgMHg0NjIzMjM2NSwgMHg5ZGMzYzM1ZQorCS5XT1JECTB4MzAxODE4MjgsIDB4Mzc5Njk2YTEsIDB4MGEwNTA1MGYsIDB4MmY5YTlhYjUKKwkuV09SRAkweDBlMDcwNzA5LCAweDI0MTIxMjM2LCAweDFiODA4MDliLCAweGRmZTJlMjNkCisJLldPUkQJMHhjZGViZWIyNiwgMHg0ZTI3Mjc2OSwgMHg3ZmIyYjJjZCwgMHhlYTc1NzU5ZgorCS5XT1JECTB4MTIwOTA5MWIsIDB4MWQ4MzgzOWUsIDB4NTgyYzJjNzQsIDB4MzQxYTFhMmUKKwkuV09SRAkweDM2MWIxYjJkLCAweGRjNmU2ZWIyLCAweGI0NWE1YWVlLCAweDViYTBhMGZiCisJLldPUkQJMHhhNDUyNTJmNiwgMHg3NjNiM2I0ZCwgMHhiN2Q2ZDY2MSwgMHg3ZGIzYjNjZQorCS5XT1JECTB4NTIyOTI5N2IsIDB4ZGRlM2UzM2UsIDB4NWUyZjJmNzEsIDB4MTM4NDg0OTcKKwkuV09SRAkweGE2NTM1M2Y1LCAweGI5ZDFkMTY4LCAweDAwMDAwMDAwLCAweGMxZWRlZDJjCisJLldPUkQJMHg0MDIwMjA2MCwgMHhlM2ZjZmMxZiwgMHg3OWIxYjFjOCwgMHhiNjViNWJlZAorCS5XT1JECTB4ZDQ2YTZhYmUsIDB4OGRjYmNiNDYsIDB4NjdiZWJlZDksIDB4NzIzOTM5NGIKKwkuV09SRAkweDk0NGE0YWRlLCAweDk4NGM0Y2Q0LCAweGIwNTg1OGU4LCAweDg1Y2ZjZjRhCisJLldPUkQJMHhiYmQwZDA2YiwgMHhjNWVmZWYyYSwgMHg0ZmFhYWFlNSwgMHhlZGZiZmIxNgorCS5XT1JECTB4ODY0MzQzYzUsIDB4OWE0ZDRkZDcsIDB4NjYzMzMzNTUsIDB4MTE4NTg1OTQKKwkuV09SRAkweDhhNDU0NWNmLCAweGU5ZjlmOTEwLCAweDA0MDIwMjA2LCAweGZlN2Y3ZjgxCisJLldPUkQJMHhhMDUwNTBmMCwgMHg3ODNjM2M0NCwgMHgyNTlmOWZiYSwgMHg0YmE4YThlMworCS5XT1JECTB4YTI1MTUxZjMsIDB4NWRhM2EzZmUsIDB4ODA0MDQwYzAsIDB4MDU4ZjhmOGEKKwkuV09SRAkweDNmOTI5MmFkLCAweDIxOWQ5ZGJjLCAweDcwMzgzODQ4LCAweGYxZjVmNTA0CisJLldPUkQJMHg2M2JjYmNkZiwgMHg3N2I2YjZjMSwgMHhhZmRhZGE3NSwgMHg0MjIxMjE2MworCS5XT1JECTB4MjAxMDEwMzAsIDB4ZTVmZmZmMWEsIDB4ZmRmM2YzMGUsIDB4YmZkMmQyNmQKKwkuV09SRAkweDgxY2RjZDRjLCAweDE4MGMwYzE0LCAweDI2MTMxMzM1LCAweGMzZWNlYzJmCisJLldPUkQJMHhiZTVmNWZlMSwgMHgzNTk3OTdhMiwgMHg4ODQ0NDRjYywgMHgyZTE3MTczOQorCS5XT1JECTB4OTNjNGM0NTcsIDB4NTVhN2E3ZjIsIDB4ZmM3ZTdlODIsIDB4N2EzZDNkNDcKKwkuV09SRAkweGM4NjQ2NGFjLCAweGJhNWQ1ZGU3LCAweDMyMTkxOTJiLCAweGU2NzM3Mzk1CisJLldPUkQJMHhjMDYwNjBhMCwgMHgxOTgxODE5OCwgMHg5ZTRmNGZkMSwgMHhhM2RjZGM3ZgorCS5XT1JECTB4NDQyMjIyNjYsIDB4NTQyYTJhN2UsIDB4M2I5MDkwYWIsIDB4MGI4ODg4ODMKKwkuV09SRAkweDhjNDY0NmNhLCAweGM3ZWVlZTI5LCAweDZiYjhiOGQzLCAweDI4MTQxNDNjCisJLldPUkQJMHhhN2RlZGU3OSwgMHhiYzVlNWVlMiwgMHgxNjBiMGIxZCwgMHhhZGRiZGI3NgorCS5XT1JECTB4ZGJlMGUwM2IsIDB4NjQzMjMyNTYsIDB4NzQzYTNhNGUsIDB4MTQwYTBhMWUKKwkuV09SRAkweDkyNDk0OWRiLCAweDBjMDYwNjBhLCAweDQ4MjQyNDZjLCAweGI4NWM1Y2U0CisJLldPUkQJMHg5ZmMyYzI1ZCwgMHhiZGQzZDM2ZSwgMHg0M2FjYWNlZiwgMHhjNDYyNjJhNgorCS5XT1JECTB4Mzk5MTkxYTgsIDB4MzE5NTk1YTQsIDB4ZDNlNGU0MzcsIDB4ZjI3OTc5OGIKKwkuV09SRAkweGQ1ZTdlNzMyLCAweDhiYzhjODQzLCAweDZlMzczNzU5LCAweGRhNmQ2ZGI3CisJLldPUkQJMHgwMThkOGQ4YywgMHhiMWQ1ZDU2NCwgMHg5YzRlNGVkMiwgMHg0OWE5YTllMAorCS5XT1JECTB4ZDg2YzZjYjQsIDB4YWM1NjU2ZmEsIDB4ZjNmNGY0MDcsIDB4Y2ZlYWVhMjUKKwkuV09SRAkweGNhNjU2NWFmLCAweGY0N2E3YThlLCAweDQ3YWVhZWU5LCAweDEwMDgwODE4CisJLldPUkQJMHg2ZmJhYmFkNSwgMHhmMDc4Nzg4OCwgMHg0YTI1MjU2ZiwgMHg1YzJlMmU3MgorCS5XT1JECTB4MzgxYzFjMjQsIDB4NTdhNmE2ZjEsIDB4NzNiNGI0YzcsIDB4OTdjNmM2NTEKKwkuV09SRAkweGNiZThlODIzLCAweGExZGRkZDdjLCAweGU4NzQ3NDljLCAweDNlMWYxZjIxCisJLldPUkQJMHg5NjRiNGJkZCwgMHg2MWJkYmRkYywgMHgwZDhiOGI4NiwgMHgwZjhhOGE4NQorCS5XT1JECTB4ZTA3MDcwOTAsIDB4N2MzZTNlNDIsIDB4NzFiNWI1YzQsIDB4Y2M2NjY2YWEKKwkuV09SRAkweDkwNDg0OGQ4LCAweDA2MDMwMzA1LCAweGY3ZjZmNjAxLCAweDFjMGUwZTEyCisJLldPUkQJMHhjMjYxNjFhMywgMHg2YTM1MzU1ZiwgMHhhZTU3NTdmOSwgMHg2OWI5YjlkMAorCS5XT1JECTB4MTc4Njg2OTEsIDB4OTljMWMxNTgsIDB4M2ExZDFkMjcsIDB4Mjc5ZTllYjkKKwkuV09SRAkweGQ5ZTFlMTM4LCAweGViZjhmODEzLCAweDJiOTg5OGIzLCAweDIyMTExMTMzCisJLldPUkQJMHhkMjY5NjliYiwgMHhhOWQ5ZDk3MCwgMHgwNzhlOGU4OSwgMHgzMzk0OTRhNworCS5XT1JECTB4MmQ5YjliYjYsIDB4M2MxZTFlMjIsIDB4MTU4Nzg3OTIsIDB4YzllOWU5MjAKKwkuV09SRAkweDg3Y2VjZTQ5LCAweGFhNTU1NWZmLCAweDUwMjgyODc4LCAweGE1ZGZkZjdhCisJLldPUkQJMHgwMzhjOGM4ZiwgMHg1OWExYTFmOCwgMHgwOTg5ODk4MCwgMHgxYTBkMGQxNworCS5XT1JECTB4NjViZmJmZGEsIDB4ZDdlNmU2MzEsIDB4ODQ0MjQyYzYsIDB4ZDA2ODY4YjgKKwkuV09SRAkweDgyNDE0MWMzLCAweDI5OTk5OWIwLCAweDVhMmQyZDc3LCAweDFlMGYwZjExCisJLldPUkQJMHg3YmIwYjBjYiwgMHhhODU0NTRmYywgMHg2ZGJiYmJkNiwgMHgyYzE2MTYzYQorCS5CWVRFCTB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUKKwkuQllURQkweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2CisJLkJZVEUJMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMAorCS5CWVRFCTB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAKKwkuQllURQkweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjCisJLkJZVEUJMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNQorCS5CWVRFCTB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEKKwkuQllURQkweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1CisJLkJZVEUJMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMAorCS5CWVRFCTB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQKKwkuQllURQkweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViCisJLkJZVEUJMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZgorCS5CWVRFCTB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUKKwkuQllURQkweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4CisJLkJZVEUJMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNQorCS5CWVRFCTB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIKKwkuQllURQkweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3CisJLkJZVEUJMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MworCS5CWVRFCTB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgKKwkuQllURQkweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiCisJLkJZVEUJMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YworCS5CWVRFCTB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzkKKwkuQllURQkweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5CisJLkJZVEUJMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOAorCS5CWVRFCTB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYKKwkuQllURQkweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhCisJLkJZVEUJMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZQorCS5CWVRFCTB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUKKwkuQllURQkweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0CisJLkJZVEUJMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZgorCS5CWVRFCTB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgKKwkuQllURQkweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2CitfX18KKworJGNvZGUuPTw8X19fOworCS5FWFBPUlQJQUVTX2RlY3J5cHQsRU5UUlksQVJHVzA9R1IsQVJHVzE9R1IsQVJHVzI9R1IKKwkuQUxJR04JMTYKK0FFU19kZWNyeXB0CisJLlBST0MKKwkuQ0FMTElORk8JRlJBTUU9YCRGUkFNRS0xNiokU0laRV9UYCxOT19DQUxMUyxTQVZFX1JQLEVOVFJZX0dSPTE4CisJLkVOVFJZCisJJFBVU0gJJXIyLC0kU0FWRURfUlAoJXNwKQk7IHN0YW5kYXJkIHByb2xvZ3VlCisJJFBVU0hNQQklcjMsJEZSQU1FKCVzcCkKKwkkUFVTSAklcjQsYC0kRlJBTUUrMSokU0laRV9UYCglc3ApCisJJFBVU0gJJXI1LGAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNixgLSRGUkFNRSszKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjcsYC0kRlJBTUUrNCokU0laRV9UYCglc3ApCisJJFBVU0gJJXI4LGAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyOSxgLSRGUkFNRSs2KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjEwLGAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTEsYC0kRlJBTUUrOCokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMixgLSRGUkFNRSs5KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjEzLGAtJEZSQU1FKzEwKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjE0LGAtJEZSQU1FKzExKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjE1LGAtJEZSQU1FKzEyKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjE2LGAtJEZSQU1FKzEzKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjE3LGAtJEZSQU1FKzE0KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjE4LGAtJEZSQU1FKzE1KiRTSVpFX1RgKCVzcCkKKworCWJscgklcjAsJHRibAorCWxkaQkzLCR0MAorTFwkZGVjX3BpYworCWFuZGNtCSR0YmwsJHQwLCR0YmwKKwlsZG8JTFwkQUVTX1RkLUxcJGRlY19waWMoJHRibCksJHRibAorCisJYW5kCSRpbnAsJHQwLCR0MAorCXN1YgkkaW5wLCR0MCwkaW5wCisJbGR3CTAoJGlucCksJHMwCisJbGR3CTQoJGlucCksJHMxCisJbGR3CTgoJGlucCksJHMyCisJY29taWIsPQkwLCR0MCxMXCRkZWNfaW5wX2FsaWduZWQKKwlsZHcJMTIoJGlucCksJHMzCisKKwlzaDNhZGRsCSR0MCwlcjAsJHQwCisJc3ViaQkzMiwkdDAsJHQwCisJbXRjdGwJJHQwLCVjcjExCisJbGR3CTE2KCRpbnApLCR0MQorCXZzaGQJJHMwLCRzMSwkczAKKwl2c2hkCSRzMSwkczIsJHMxCisJdnNoZAkkczIsJHMzLCRzMgorCXZzaGQJJHMzLCR0MSwkczMKKworTFwkZGVjX2lucF9hbGlnbmVkCisJYmwJX3BhcmlzY19BRVNfZGVjcnlwdCwlcjMxCisJbm9wCisKKwlleHRydSw8PiAkb3V0LDMxLDIsJXIwCisJYglMXCRkZWNfb3V0X2FsaWduZWQKKwlub3AKKworCV9zcm0JJHMwLDI0LCRhY2MwCisJX3NybQkkczAsMTYsJGFjYzEKKwlzdGIJJGFjYzAsMCgkb3V0KQorCV9zcm0JJHMwLDgsJGFjYzIKKwlzdGIJJGFjYzEsMSgkb3V0KQorCV9zcm0JJHMxLDI0LCRhY2M0CisJc3RiCSRhY2MyLDIoJG91dCkKKwlfc3JtCSRzMSwxNiwkYWNjNQorCXN0YgkkczAsMygkb3V0KQorCV9zcm0JJHMxLDgsJGFjYzYKKwlzdGIJJGFjYzQsNCgkb3V0KQorCV9zcm0JJHMyLDI0LCRhY2MwCisJc3RiCSRhY2M1LDUoJG91dCkKKwlfc3JtCSRzMiwxNiwkYWNjMQorCXN0YgkkYWNjNiw2KCRvdXQpCisJX3NybQkkczIsOCwkYWNjMgorCXN0YgkkczEsNygkb3V0KQorCV9zcm0JJHMzLDI0LCRhY2M0CisJc3RiCSRhY2MwLDgoJG91dCkKKwlfc3JtCSRzMywxNiwkYWNjNQorCXN0YgkkYWNjMSw5KCRvdXQpCisJX3NybQkkczMsOCwkYWNjNgorCXN0YgkkYWNjMiwxMCgkb3V0KQorCXN0YgkkczIsMTEoJG91dCkKKwlzdGIJJGFjYzQsMTIoJG91dCkKKwlzdGIJJGFjYzUsMTMoJG91dCkKKwlzdGIJJGFjYzYsMTQoJG91dCkKKwliCUxcJGRlY19kb25lCisJc3RiCSRzMywxNSgkb3V0KQorCitMXCRkZWNfb3V0X2FsaWduZWQKKwlzdHcJJHMwLDAoJG91dCkKKwlzdHcJJHMxLDQoJG91dCkKKwlzdHcJJHMyLDgoJG91dCkKKwlzdHcJJHMzLDEyKCRvdXQpCisKK0xcJGRlY19kb25lCisJJFBPUAlgLSRGUkFNRS0kU0FWRURfUlBgKCVzcCksJXIyCTsgc3RhbmRhcmQgZXBpbG9ndWUKKwkkUE9QCWAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKSwlcjQKKwkkUE9QCWAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKSwlcjUKKwkkUE9QCWAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKSwlcjYKKwkkUE9QCWAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKSwlcjcKKwkkUE9QCWAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKSwlcjgKKwkkUE9QCWAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKSwlcjkKKwkkUE9QCWAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKSwlcjEwCisJJFBPUAlgLSRGUkFNRSs4KiRTSVpFX1RgKCVzcCksJXIxMQorCSRQT1AJYC0kRlJBTUUrOSokU0laRV9UYCglc3ApLCVyMTIKKwkkUE9QCWAtJEZSQU1FKzEwKiRTSVpFX1RgKCVzcCksJXIxMworCSRQT1AJYC0kRlJBTUUrMTEqJFNJWkVfVGAoJXNwKSwlcjE0CisJJFBPUAlgLSRGUkFNRSsxMiokU0laRV9UYCglc3ApLCVyMTUKKwkkUE9QCWAtJEZSQU1FKzEzKiRTSVpFX1RgKCVzcCksJXIxNgorCSRQT1AJYC0kRlJBTUUrMTQqJFNJWkVfVGAoJXNwKSwlcjE3CisJJFBPUAlgLSRGUkFNRSsxNSokU0laRV9UYCglc3ApLCVyMTgKKwlidgkoJXIyKQorCS5FWElUCisJJFBPUE1CCS0kRlJBTUUoJXNwKSwlcjMKKwkuUFJPQ0VORAorCisJLkFMSUdOCTE2CitfcGFyaXNjX0FFU19kZWNyeXB0CisJLlBST0MKKwkuQ0FMTElORk8JTUlMTElDT0RFCisJLkVOVFJZCisJbGR3CTI0MCgka2V5KSwkcm91bmRzCisJbGR3CTAoJGtleSksJHQwCisJbGR3CTQoJGtleSksJHQxCisJbGR3CTgoJGtleSksJHQyCisJbGR3CTEyKCRrZXkpLCR0MworCV9zcm0JJHJvdW5kcywxLCRyb3VuZHMKKwl4b3IJJHQwLCRzMCwkczAKKwlsZHcJMTYoJGtleSksJHQwCisJeG9yCSR0MSwkczEsJHMxCisJbGR3CTIwKCRrZXkpLCR0MQorCV9zcm0JJHMwLDI0LCRhY2MwCisJeG9yCSR0MiwkczIsJHMyCisJbGR3CTI0KCRrZXkpLCR0MgorCXhvcgkkdDMsJHMzLCRzMworCWxkdwkyOCgka2V5KSwkdDMKKwlfc3JtCSRzMywxNiwkYWNjMQorTFwkZGVjX2xvb3AKKwlfc3JtCSRzMiw4LCRhY2MyCisJbGR3eCxzCSRhY2MwKCR0YmwpLCRhY2MwCisJX3NybQkkczEsMCwkYWNjMworCWxkd3gscwkkYWNjMSgkdGJsKSwkYWNjMQorCV9zcm0JJHMxLDI0LCRhY2M0CisJbGR3eCxzCSRhY2MyKCR0YmwpLCRhY2MyCisJX3NybQkkczAsMTYsJGFjYzUKKwlsZHd4LHMJJGFjYzMoJHRibCksJGFjYzMKKwlfc3JtCSRzMyw4LCRhY2M2CisJbGR3eCxzCSRhY2M0KCR0YmwpLCRhY2M0CisJX3NybQkkczIsMCwkYWNjNworCWxkd3gscwkkYWNjNSgkdGJsKSwkYWNjNQorCV9zcm0JJHMyLDI0LCRhY2M4CisJbGR3eCxzCSRhY2M2KCR0YmwpLCRhY2M2CisJX3NybQkkczEsMTYsJGFjYzkKKwlsZHd4LHMJJGFjYzcoJHRibCksJGFjYzcKKwlfc3JtCSRzMCw4LCRhY2MxMAorCWxkd3gscwkkYWNjOCgkdGJsKSwkYWNjOAorCV9zcm0JJHMzLDAsJGFjYzExCisJbGR3eCxzCSRhY2M5KCR0YmwpLCRhY2M5CisJX3NybQkkczMsMjQsJGFjYzEyCisJbGR3eCxzCSRhY2MxMCgkdGJsKSwkYWNjMTAKKwlfc3JtCSRzMiwxNiwkYWNjMTMKKwlsZHd4LHMJJGFjYzExKCR0YmwpLCRhY2MxMQorCV9zcm0JJHMxLDgsJGFjYzE0CisJbGR3eCxzCSRhY2MxMigkdGJsKSwkYWNjMTIKKwlfc3JtCSRzMCwwLCRhY2MxNQorCWxkd3gscwkkYWNjMTMoJHRibCksJGFjYzEzCisJbGR3eCxzCSRhY2MxNCgkdGJsKSwkYWNjMTQKKwlsZHd4LHMJJGFjYzE1KCR0YmwpLCRhY2MxNQorCWFkZGliLD0gLTEsJHJvdW5kcyxMXCRkZWNfbGFzdAorCWxkbwkzMigka2V5KSwka2V5CisKKwkJX3JvcgkkYWNjMSw4LCRhY2MxCisJCXhvcgkkYWNjMCwkdDAsJHQwCisJbGR3CTAoJGtleSksJHMwCisJCV9yb3IJJGFjYzIsMTYsJGFjYzIKKwkJeG9yCSRhY2MxLCR0MCwkdDAKKwlsZHcJNCgka2V5KSwkczEKKwkJX3JvcgkkYWNjMywyNCwkYWNjMworCQl4b3IJJGFjYzIsJHQwLCR0MAorCWxkdwk4KCRrZXkpLCRzMgorCQlfcm9yCSRhY2M1LDgsJGFjYzUKKwkJeG9yCSRhY2MzLCR0MCwkdDAKKwlsZHcJMTIoJGtleSksJHMzCisJCV9yb3IJJGFjYzYsMTYsJGFjYzYKKwkJeG9yCSRhY2M0LCR0MSwkdDEKKwkJX3JvcgkkYWNjNywyNCwkYWNjNworCQl4b3IJJGFjYzUsJHQxLCR0MQorCQlfcm9yCSRhY2M5LDgsJGFjYzkKKwkJeG9yCSRhY2M2LCR0MSwkdDEKKwkJX3JvcgkkYWNjMTAsMTYsJGFjYzEwCisJCXhvcgkkYWNjNywkdDEsJHQxCisJCV9yb3IJJGFjYzExLDI0LCRhY2MxMQorCQl4b3IJJGFjYzgsJHQyLCR0MgorCQlfcm9yCSRhY2MxMyw4LCRhY2MxMworCQl4b3IJJGFjYzksJHQyLCR0MgorCQlfcm9yCSRhY2MxNCwxNiwkYWNjMTQKKwkJeG9yCSRhY2MxMCwkdDIsJHQyCisJCV9yb3IJJGFjYzE1LDI0LCRhY2MxNQorCQl4b3IJJGFjYzExLCR0MiwkdDIKKwkJeG9yCSRhY2MxMiwkYWNjMTQsJGFjYzE0CisJCXhvcgkkYWNjMTMsJHQzLCR0MworCV9zcm0JJHQwLDI0LCRhY2MwCisJCXhvcgkkYWNjMTQsJHQzLCR0MworCQl4b3IJJGFjYzE1LCR0MywkdDMKKwlfc3JtCSR0MywxNiwkYWNjMQorCisJX3NybQkkdDIsOCwkYWNjMgorCWxkd3gscwkkYWNjMCgkdGJsKSwkYWNjMAorCV9zcm0JJHQxLDAsJGFjYzMKKwlsZHd4LHMJJGFjYzEoJHRibCksJGFjYzEKKwlfc3JtCSR0MSwyNCwkYWNjNAorCWxkd3gscwkkYWNjMigkdGJsKSwkYWNjMgorCV9zcm0JJHQwLDE2LCRhY2M1CisJbGR3eCxzCSRhY2MzKCR0YmwpLCRhY2MzCisJX3NybQkkdDMsOCwkYWNjNgorCWxkd3gscwkkYWNjNCgkdGJsKSwkYWNjNAorCV9zcm0JJHQyLDAsJGFjYzcKKwlsZHd4LHMJJGFjYzUoJHRibCksJGFjYzUKKwlfc3JtCSR0MiwyNCwkYWNjOAorCWxkd3gscwkkYWNjNigkdGJsKSwkYWNjNgorCV9zcm0JJHQxLDE2LCRhY2M5CisJbGR3eCxzCSRhY2M3KCR0YmwpLCRhY2M3CisJX3NybQkkdDAsOCwkYWNjMTAKKwlsZHd4LHMJJGFjYzgoJHRibCksJGFjYzgKKwlfc3JtCSR0MywwLCRhY2MxMQorCWxkd3gscwkkYWNjOSgkdGJsKSwkYWNjOQorCV9zcm0JJHQzLDI0LCRhY2MxMgorCWxkd3gscwkkYWNjMTAoJHRibCksJGFjYzEwCisJX3NybQkkdDIsMTYsJGFjYzEzCisJbGR3eCxzCSRhY2MxMSgkdGJsKSwkYWNjMTEKKwlfc3JtCSR0MSw4LCRhY2MxNAorCWxkd3gscwkkYWNjMTIoJHRibCksJGFjYzEyCisJX3NybQkkdDAsMCwkYWNjMTUKKwlsZHd4LHMJJGFjYzEzKCR0YmwpLCRhY2MxMworCQlfcm9yCSRhY2MxLDgsJGFjYzEKKwlsZHd4LHMJJGFjYzE0KCR0YmwpLCRhY2MxNAorCisJCV9yb3IJJGFjYzIsMTYsJGFjYzIKKwkJeG9yCSRhY2MwLCRzMCwkczAKKwlsZHd4LHMJJGFjYzE1KCR0YmwpLCRhY2MxNQorCQlfcm9yCSRhY2MzLDI0LCRhY2MzCisJCXhvcgkkYWNjMSwkczAsJHMwCisJbGR3CTE2KCRrZXkpLCR0MAorCQlfcm9yCSRhY2M1LDgsJGFjYzUKKwkJeG9yCSRhY2MyLCRzMCwkczAKKwlsZHcJMjAoJGtleSksJHQxCisJCV9yb3IJJGFjYzYsMTYsJGFjYzYKKwkJeG9yCSRhY2MzLCRzMCwkczAKKwlsZHcJMjQoJGtleSksJHQyCisJCV9yb3IJJGFjYzcsMjQsJGFjYzcKKwkJeG9yCSRhY2M0LCRzMSwkczEKKwlsZHcJMjgoJGtleSksJHQzCisJCV9yb3IJJGFjYzksOCwkYWNjOQorCQl4b3IJJGFjYzUsJHMxLCRzMQorCWxkdwkxMDI0KzAoJHRibCksJXIwCQk7IHByZWZldGNoIHRkNAorCQlfcm9yCSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M2LCRzMSwkczEKKwlsZHcJMTAyNCszMigkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGQ0CisJCV9yb3IJJGFjYzExLDI0LCRhY2MxMQorCQl4b3IJJGFjYzcsJHMxLCRzMQorCWxkdwkxMDI0KzY0KCR0YmwpLCVyMAkJOyBwcmVmZXRjaCB0ZDQKKwkJX3JvcgkkYWNjMTMsOCwkYWNjMTMKKwkJeG9yCSRhY2M4LCRzMiwkczIKKwlsZHcJMTAyNCs5NigkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGQ0CisJCV9yb3IJJGFjYzE0LDE2LCRhY2MxNAorCQl4b3IJJGFjYzksJHMyLCRzMgorCWxkdwkxMDI0KzEyOCgkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGQ0CisJCV9yb3IJJGFjYzE1LDI0LCRhY2MxNQorCQl4b3IJJGFjYzEwLCRzMiwkczIKKwlsZHcJMTAyNCsxNjAoJHRibCksJXIwCQk7IHByZWZldGNoIHRkNAorCV9zcm0JJHMwLDI0LCRhY2MwCisJCXhvcgkkYWNjMTEsJHMyLCRzMgorCWxkdwkxMDI0KzE5MigkdGJsKSwlcjAJCTsgcHJlZmV0Y2ggdGQ0CisJCXhvcgkkYWNjMTIsJGFjYzE0LCRhY2MxNAorCQl4b3IJJGFjYzEzLCRzMywkczMKKwlsZHcJMTAyNCsyMjQoJHRibCksJXIwCQk7IHByZWZldGNoIHRkNAorCQl4b3IJJGFjYzE0LCRzMywkczMKKwkJeG9yCSRhY2MxNSwkczMsJHMzCisJYglMXCRkZWNfbG9vcAorCV9zcm0JJHMzLDE2LCRhY2MxCisKKwkuQUxJR04JMTYKK0xcJGRlY19sYXN0CisJbGRvCTEwMjQoJHRibCksJHJvdW5kcworCQlfcm9yCSRhY2MxLDgsJGFjYzEKKwkJeG9yCSRhY2MwLCR0MCwkdDAKKwlsZHcJMCgka2V5KSwkczAKKwkJX3JvcgkkYWNjMiwxNiwkYWNjMgorCQl4b3IJJGFjYzEsJHQwLCR0MAorCWxkdwk0KCRrZXkpLCRzMQorCQlfcm9yCSRhY2MzLDI0LCRhY2MzCisJCXhvcgkkYWNjMiwkdDAsJHQwCisJbGR3CTgoJGtleSksJHMyCisJCV9yb3IJJGFjYzUsOCwkYWNjNQorCQl4b3IJJGFjYzMsJHQwLCR0MAorCWxkdwkxMigka2V5KSwkczMKKwkJX3JvcgkkYWNjNiwxNiwkYWNjNgorCQl4b3IJJGFjYzQsJHQxLCR0MQorCQlfcm9yCSRhY2M3LDI0LCRhY2M3CisJCXhvcgkkYWNjNSwkdDEsJHQxCisJCV9yb3IJJGFjYzksOCwkYWNjOQorCQl4b3IJJGFjYzYsJHQxLCR0MQorCQlfcm9yCSRhY2MxMCwxNiwkYWNjMTAKKwkJeG9yCSRhY2M3LCR0MSwkdDEKKwkJX3JvcgkkYWNjMTEsMjQsJGFjYzExCisJCXhvcgkkYWNjOCwkdDIsJHQyCisJCV9yb3IJJGFjYzEzLDgsJGFjYzEzCisJCXhvcgkkYWNjOSwkdDIsJHQyCisJCV9yb3IJJGFjYzE0LDE2LCRhY2MxNAorCQl4b3IJJGFjYzEwLCR0MiwkdDIKKwkJX3JvcgkkYWNjMTUsMjQsJGFjYzE1CisJCXhvcgkkYWNjMTEsJHQyLCR0MgorCQl4b3IJJGFjYzEyLCRhY2MxNCwkYWNjMTQKKwkJeG9yCSRhY2MxMywkdDMsJHQzCisJX3NybQkkdDAsMjQsJGFjYzAKKwkJeG9yCSRhY2MxNCwkdDMsJHQzCisJCXhvcgkkYWNjMTUsJHQzLCR0MworCV9zcm0JJHQzLDE2LCRhY2MxCisKKwlfc3JtCSR0Miw4LCRhY2MyCisJbGRieAkkYWNjMCgkcm91bmRzKSwkYWNjMAorCV9zcm0JJHQxLDI0LCRhY2M0CisJbGRieAkkYWNjMSgkcm91bmRzKSwkYWNjMQorCV9zcm0JJHQwLDE2LCRhY2M1CisJX3NybQkkdDEsMCwkYWNjMworCWxkYngJJGFjYzIoJHJvdW5kcyksJGFjYzIKKwlsZGJ4CSRhY2MzKCRyb3VuZHMpLCRhY2MzCisJX3NybQkkdDMsOCwkYWNjNgorCWxkYngJJGFjYzQoJHJvdW5kcyksJGFjYzQKKwlfc3JtCSR0MiwyNCwkYWNjOAorCWxkYngJJGFjYzUoJHJvdW5kcyksJGFjYzUKKwlfc3JtCSR0MSwxNiwkYWNjOQorCV9zcm0JJHQyLDAsJGFjYzcKKwlsZGJ4CSRhY2M2KCRyb3VuZHMpLCRhY2M2CisJbGRieAkkYWNjNygkcm91bmRzKSwkYWNjNworCV9zcm0JJHQwLDgsJGFjYzEwCisJbGRieAkkYWNjOCgkcm91bmRzKSwkYWNjOAorCV9zcm0JJHQzLDI0LCRhY2MxMgorCWxkYngJJGFjYzkoJHJvdW5kcyksJGFjYzkKKwlfc3JtCSR0MiwxNiwkYWNjMTMKKwlfc3JtCSR0MywwLCRhY2MxMQorCWxkYngJJGFjYzEwKCRyb3VuZHMpLCRhY2MxMAorCV9zcm0JJHQxLDgsJGFjYzE0CisJbGRieAkkYWNjMTEoJHJvdW5kcyksJGFjYzExCisJbGRieAkkYWNjMTIoJHJvdW5kcyksJGFjYzEyCisJbGRieAkkYWNjMTMoJHJvdW5kcyksJGFjYzEzCisJX3NybQkkdDAsMCwkYWNjMTUKKwlsZGJ4CSRhY2MxNCgkcm91bmRzKSwkYWNjMTQKKworCQlkZXAJJGFjYzAsNyw4LCRhY2MzCisJbGRieAkkYWNjMTUoJHJvdW5kcyksJGFjYzE1CisJCWRlcAkkYWNjNCw3LDgsJGFjYzcKKwkJZGVwCSRhY2MxLDE1LDgsJGFjYzMKKwkJZGVwCSRhY2M1LDE1LDgsJGFjYzcKKwkJZGVwCSRhY2MyLDIzLDgsJGFjYzMKKwkJZGVwCSRhY2M2LDIzLDgsJGFjYzcKKwkJeG9yCSRhY2MzLCRzMCwkczAKKwkJeG9yCSRhY2M3LCRzMSwkczEKKwkJZGVwCSRhY2M4LDcsOCwkYWNjMTEKKwkJZGVwCSRhY2MxMiw3LDgsJGFjYzE1CisJCWRlcAkkYWNjOSwxNSw4LCRhY2MxMQorCQlkZXAJJGFjYzEzLDE1LDgsJGFjYzE1CisJCWRlcAkkYWNjMTAsMjMsOCwkYWNjMTEKKwkJZGVwCSRhY2MxNCwyMyw4LCRhY2MxNQorCQl4b3IJJGFjYzExLCRzMiwkczIKKworCWJ2CSglcjMxKQorCS5FWElUCisJCXhvcgkkYWNjMTUsJHMzLCRzMworCS5QUk9DRU5ECisKKwkuQUxJR04JNjQKK0xcJEFFU19UZAorCS5XT1JECTB4NTFmNGE3NTAsIDB4N2U0MTY1NTMsIDB4MWExN2E0YzMsIDB4M2EyNzVlOTYKKwkuV09SRAkweDNiYWI2YmNiLCAweDFmOWQ0NWYxLCAweGFjZmE1OGFiLCAweDRiZTMwMzkzCisJLldPUkQJMHgyMDMwZmE1NSwgMHhhZDc2NmRmNiwgMHg4OGNjNzY5MSwgMHhmNTAyNGMyNQorCS5XT1JECTB4NGZlNWQ3ZmMsIDB4YzUyYWNiZDcsIDB4MjYzNTQ0ODAsIDB4YjU2MmEzOGYKKwkuV09SRAkweGRlYjE1YTQ5LCAweDI1YmExYjY3LCAweDQ1ZWEwZTk4LCAweDVkZmVjMGUxCisJLldPUkQJMHhjMzJmNzUwMiwgMHg4MTRjZjAxMiwgMHg4ZDQ2OTdhMywgMHg2YmQzZjljNgorCS5XT1JECTB4MDM4ZjVmZTcsIDB4MTU5MjljOTUsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEKKwkuV09SRAkweGQ0YmU4MzJkLCAweDU4NzQyMWQzLCAweDQ5ZTA2OTI5LCAweDhlYzljODQ0CisJLldPUkQJMHg3NWMyODk2YSwgMHhmNDhlNzk3OCwgMHg5OTU4M2U2YiwgMHgyN2I5NzFkZAorCS5XT1JECTB4YmVlMTRmYjYsIDB4ZjA4OGFkMTcsIDB4YzkyMGFjNjYsIDB4N2RjZTNhYjQKKwkuV09SRAkweDYzZGY0YTE4LCAweGU1MWEzMTgyLCAweDk3NTEzMzYwLCAweDYyNTM3ZjQ1CisJLldPUkQJMHhiMTY0NzdlMCwgMHhiYjZiYWU4NCwgMHhmZTgxYTAxYywgMHhmOTA4MmI5NAorCS5XT1JECTB4NzA0ODY4NTgsIDB4OGY0NWZkMTksIDB4OTRkZTZjODcsIDB4NTI3YmY4YjcKKwkuV09SRAkweGFiNzNkMzIzLCAweDcyNGIwMmUyLCAweGUzMWY4ZjU3LCAweDY2NTVhYjJhCisJLldPUkQJMHhiMmViMjgwNywgMHgyZmI1YzIwMywgMHg4NmM1N2I5YSwgMHhkMzM3MDhhNQorCS5XT1JECTB4MzAyODg3ZjIsIDB4MjNiZmE1YjIsIDB4MDIwMzZhYmEsIDB4ZWQxNjgyNWMKKwkuV09SRAkweDhhY2YxYzJiLCAweGE3NzliNDkyLCAweGYzMDdmMmYwLCAweDRlNjllMmExCisJLldPUkQJMHg2NWRhZjRjZCwgMHgwNjA1YmVkNSwgMHhkMTM0NjIxZiwgMHhjNGE2ZmU4YQorCS5XT1JECTB4MzQyZTUzOWQsIDB4YTJmMzU1YTAsIDB4MDU4YWUxMzIsIDB4YTRmNmViNzUKKwkuV09SRAkweDBiODNlYzM5LCAweDQwNjBlZmFhLCAweDVlNzE5ZjA2LCAweGJkNmUxMDUxCisJLldPUkQJMHgzZTIxOGFmOSwgMHg5NmRkMDYzZCwgMHhkZDNlMDVhZSwgMHg0ZGU2YmQ0NgorCS5XT1JECTB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4MDQwNmQ0NmYsIDB4NjA1MDE1ZmYKKwkuV09SRAkweDE5OThmYjI0LCAweGQ2YmRlOTk3LCAweDg5NDA0M2NjLCAweDY3ZDk5ZTc3CisJLldPUkQJMHhiMGU4NDJiZCwgMHgwNzg5OGI4OCwgMHhlNzE5NWIzOCwgMHg3OWM4ZWVkYgorCS5XT1JECTB4YTE3YzBhNDcsIDB4N2M0MjBmZTksIDB4Zjg4NDFlYzksIDB4MDAwMDAwMDAKKwkuV09SRAkweDA5ODA4NjgzLCAweDMyMmJlZDQ4LCAweDFlMTE3MGFjLCAweDZjNWE3MjRlCisJLldPUkQJMHhmZDBlZmZmYiwgMHgwZjg1Mzg1NiwgMHgzZGFlZDUxZSwgMHgzNjJkMzkyNworCS5XT1JECTB4MGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EKKwkuV09SRAkweDBjMGE2N2IxLCAweDkzNTdlNzBmLCAweGI0ZWU5NmQyLCAweDFiOWI5MTllCisJLldPUkQJMHg4MGMwYzU0ZiwgMHg2MWRjMjBhMiwgMHg1YTc3NGI2OSwgMHgxYzEyMWExNgorCS5XT1JECTB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsIDB4M2MyMmUwNDMsIDB4MTIxYjE3MWQKKwkuV09SRAkweDBlMDkwZDBiLCAweGYyOGJjN2FkLCAweDJkYjZhOGI5LCAweDE0MWVhOWM4CisJLldPUkQJMHg1N2YxMTk4NSwgMHhhZjc1MDc0YywgMHhlZTk5ZGRiYiwgMHhhMzdmNjBmZAorCS5XT1JECTB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsIDB4NDQ2NjNiYzUsIDB4NWJmYjdlMzQKKwkuV09SRAkweDhiNDMyOTc2LCAweGNiMjNjNmRjLCAweGI2ZWRmYzY4LCAweGI4ZTRmMTYzCisJLldPUkQJMHhkNzMxZGNjYSwgMHg0MjYzODUxMCwgMHgxMzk3MjI0MCwgMHg4NGM2MTEyMAorCS5XT1JECTB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsIDB4YWVmOTMyMTEsIDB4YzcyOWExNmQKKwkuV09SRAkweDFkOWUyZjRiLCAweGRjYjIzMGYzLCAweDBkODY1MmVjLCAweDc3YzFlM2QwCisJLldPUkQJMHgyYmIzMTY2YywgMHhhOTcwYjk5OSwgMHgxMTk0NDhmYSwgMHg0N2U5NjQyMgorCS5XT1JECTB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYKKwkuV09SRAkweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAweDhjY2FhMmZlLCAweDk4ZDQwYjM2CisJLldPUkQJMHhhNmY1ODFjZiwgMHhhNTdhZGUyOCwgMHhkYWI3OGUyNiwgMHgzZmFkYmZhNAorCS5XT1JECTB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIKKwkuV09SRAkweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAweDJlMzlmNzVlLCAweDgyYzNhZmY1CisJLldPUkQJMHg5ZjVkODBiZSwgMHg2OWQwOTM3YywgMHg2ZmQ1MmRhOSwgMHhjZjI1MTJiMworCS5XT1JECTB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IKKwkuV09SRAkweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAweGVjOWFiNzAxLCAweDgzNGY5YWE4CisJLldPUkQJMHhlNjk1NmU2NSwgMHhhYWZmZTY3ZSwgMHgyMWJjY2YwOCwgMHhlZjE1ZThlNgorCS5XT1JECTB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYKKwkuV09SRAkweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAweGM2YTU5NDMwLCAweDM1YTI2NmMwCisJLldPUkQJMHg3NDRlYmMzNywgMHhmYzgyY2FhNiwgMHhlMDkwZDBiMCwgMHgzM2E3ZDgxNQorCS5XT1JECTB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYKKwkuV09SRAkweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAweGNjYWE0ZDU0LCAweGU0OTYwNGRmCisJLldPUkQJMHg5ZWQxYjVlMywgMHg0YzZhODgxYiwgMHhjMTJjMWZiOCwgMHg0NjY1NTE3ZgorCS5XT1JECTB4OWQ1ZWVhMDQsIDB4MDE4YzM1NWQsIDB4ZmE4Nzc0NzMsIDB4ZmIwYjQxMmUKKwkuV09SRAkweGIzNjcxZDVhLCAweDkyZGJkMjUyLCAweGU5MTA1NjMzLCAweDZkZDY0NzEzCisJLldPUkQJMHg5YWQ3NjE4YywgMHgzN2ExMGM3YSwgMHg1OWY4MTQ4ZSwgMHhlYjEzM2M4OQorCS5XT1JECTB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsIDB4ZTExY2U1ZWQsIDB4N2E0N2IxM2MKKwkuV09SRAkweDljZDJkZjU5LCAweDU1ZjI3MzNmLCAweDE4MTRjZTc5LCAweDczYzczN2JmCisJLldPUkQJMHg1M2Y3Y2RlYSwgMHg1ZmZkYWE1YiwgMHhkZjNkNmYxNCwgMHg3ODQ0ZGI4NgorCS5XT1JECTB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsIDB4MzgyNDM0MmMsIDB4YzJhMzQwNWYKKwkuV09SRAkweDE2MWRjMzcyLCAweGJjZTIyNTBjLCAweDI4M2M0OThiLCAweGZmMGQ5NTQxCisJLldPUkQJMHgzOWE4MDE3MSwgMHgwODBjYjNkZSwgMHhkOGI0ZTQ5YywgMHg2NDU2YzE5MAorCS5XT1JECTB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsIDB4NDg2YzVjNzQsIDB4ZDBiODU3NDIKKwkuQllURQkweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4CisJLkJZVEUJMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYgorCS5CWVRFCTB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcKKwkuQllURQkweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiCisJLkJZVEUJMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZAorCS5CWVRFCTB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUKKwkuQllURQkweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyCisJLkJZVEUJMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNQorCS5CWVRFCTB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYKKwkuQllURQkweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyCisJLkJZVEUJMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYQorCS5CWVRFCTB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQKKwkuQllURQkweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhCisJLkJZVEUJMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNgorCS5CWVRFCTB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIKKwkuQllURQkweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiCisJLkJZVEUJMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYQorCS5CWVRFCTB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMKKwkuQllURQkweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1CisJLkJZVEUJMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZQorCS5CWVRFCTB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODkKKwkuQllURQkweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiCisJLkJZVEUJMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMAorCS5CWVRFCTB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQKKwkuQllURQkweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxCisJLkJZVEUJMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZgorCS5CWVRFCTB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQKKwkuQllURQkweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmCisJLkJZVEUJMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMAorCS5CWVRFCTB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEKKwkuQllURQkweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2CisJLkJZVEUJMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZAorCS5TVFJJTkdaICJBRVMgZm9yIFBBLVJJU0MsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKKwlzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlOworCisJIyB0cmFuc2xhdGUgbWFkZSB1cCBpbnN0cnVjdG9uczogX3JvciwgX3NybQorCXMvX3JvcihccyspKCVyWzAtOV0rKSwvc2hkJDEkMiwkMiwvCQkJCW9yCisKKwlzL19zcm0oXHMrJXJbMC05XSspLChbMC05XSspLC8KKwkJJFNJWkVfVD09NCA/IHNwcmludGYoImV4dHJ1JXMsJWQsOCwiLCQxLDMxLSQyKQorCQk6ICAgICAgICAgICAgc3ByaW50ZigiZXh0cmQsdSVzLCVkLDgsIiwkMSw2My0kMikvZTsKKworCXMvLFwqLywvIGlmICgkU0laRV9UPT00KTsKKwlwcmludCAkXywiXG4iOworfQorY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLXBwYy5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy1wcGMucGwKaW5kZXggZjgyYzVlMS4uN2M1MmNiZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Flcy9hc20vYWVzLXBwYy5wbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMtcHBjLnBsCkBAIC03LDcgKzcsNyBAQAogIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotIyBOZWVkcyBtb3JlIHdvcms6IGtleSBzZXR1cCwgcGFnZSBib3VuZGFyaWVzLCBDQkMgcm91dGluZS4uLgorIyBOZWVkcyBtb3JlIHdvcms6IGtleSBzZXR1cCwgQ0JDIHJvdXRpbmUuLi4KICMKICMgcHBjX0FFU19bZW58ZGVdY3J5cHQgcGVyZm9ybSBhdCAxOCBjeWNsZXMgcGVyIGJ5dGUgcHJvY2Vzc2VkIHdpdGgKICMgMTI4LWJpdCBrZXksIHdoaWNoIGlzIH40MCUgYmV0dGVyIHRoYW4gNjQtYml0IGNvZGUgZ2VuZXJhdGVkIGJ5IGdjYwpAQCAtMTgsNyArMTgsNyBAQAogCiAjIEZlYnJ1YXJ5IDIwMTAKICMKLSMgUmVzY2hlZHVsaW5nIGluc3RydWN0aW9ucyB0byBmYXZvdXIgUG93ZXI2IHBpcGVsaW5lIGdpdmVzIDEwJQorIyBSZXNjaGVkdWxpbmcgaW5zdHJ1Y3Rpb25zIHRvIGZhdm91ciBQb3dlcjYgcGlwZWxpbmUgZ2F2ZSAxMCUKICMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gdGhlIHBsYXRmcm9tIGluIHF1ZXN0aW9uIChhbmQgbWFyZ2luYWwKICMgaW1wcm92ZW1lbnQgZXZlbiBvbiBvdGhlcnMpLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBQb3dlcjYgZmFpbHMKICMgdG8gcHJvY2VzcyBieXRlIGluIDE4IGN5Y2xlcywgb25seSBpbiAyMywgYmVjYXVzZSBpdCBmYWlscyB0byBpc3N1ZQpAQCAtMzMsMTEgKzMzLDEzIEBACiAKIGlmICgkZmxhdm91ciA9fiAvNjQvKSB7CiAJJFNJWkVfVAk9ODsKKwkkTFJTQVZFCT0yKiRTSVpFX1Q7CiAJJFNUVQk9InN0ZHUiOwogCSRQT1AJPSJsZCI7CiAJJFBVU0gJPSJzdGQiOwogfSBlbHNpZiAoJGZsYXZvdXIgPX4gLzMyLykgewogCSRTSVpFX1QJPTQ7CisJJExSU0FWRQk9JFNJWkVfVDsKIAkkU1RVCT0ic3R3dSI7CiAJJFBPUAk9Imx3eiI7CiAJJFBVU0gJPSJzdHciOwpAQCAtMTE2LDE1ICsxMTgsMTkgQEAKIAlhZGRpCSRUYmwwLCRUYmwwLGAxMjgtOGAKIAltdGxyCXIwCiAJYmxyCi0JLnNwYWNlCWAzMi0yNGAKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAorCS5zcGFjZQlgNjQtOSo0YAogTEFFU19UZDoKIAltZmxyCXIwCiAJYmNsCTIwLDMxLFwkKzQKIAltZmxyCSRUYmwwCTsgICAgdnZ2dnZ2dnYgImRpc3RhbmNlIiBiZXR3ZWVuIC4gYW5kIDFzdCBkYXRhIGVudHJ5Ci0JYWRkaQkkVGJsMCwkVGJsMCxgMTI4LTgtMzIrMjA0OCsyNTZgCisJYWRkaQkkVGJsMCwkVGJsMCxgMTI4LTY0LTgrMjA0OCsyNTZgCiAJbXRscglyMAogCWJscgotCS5zcGFjZQlgMTI4LTMyLTI0YAorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMCwwCisJLnNwYWNlCWAxMjgtNjQtOSo0YAogX19fCiAmX2RhdGFfd29yZCgKIAkweGM2NjM2M2E1LCAweGY4N2M3Yzg0LCAweGVlNzc3Nzk5LCAweGY2N2I3YjhkLApAQCAtMzI4LDEwICszMzQsOSBAQAogLmdsb2JsCS5BRVNfZW5jcnlwdAogLmFsaWduCTcKIC5BRVNfZW5jcnlwdDoKLQltZmxyCXIwCiAJJFNUVQkkc3AsLSRGUkFNRSgkc3ApCisJbWZscglyMAogCi0JJFBVU0gJcjAsYCRGUkFNRS0kU0laRV9UKjIxYCgkc3ApCiAJJFBVU0gJJHRvYyxgJEZSQU1FLSRTSVpFX1QqMjBgKCRzcCkKIAkkUFVTSAlyMTMsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCiAJJFBVU0gJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQpAQCAtMzUyLDcgKzM1NywxNCBAQAogCSRQVVNICXIyOSxgJEZSQU1FLSRTSVpFX1QqM2AoJHNwKQogCSRQVVNICXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQogCSRQVVNICXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCSRQVVNICXIwLGAkRlJBTUUrJExSU0FWRWAoJHNwKQogCisJYW5kaS4JJHQwLCRpbnAsMworCWFuZGkuCSR0MSwkb3V0LDMKKwlvci4JJHQwLCR0MCwkdDEKKwlibmUJTGVuY191bmFsaWduZWQKKworTGVuY191bmFsaWduZWRfb2s6CiAJbHd6CSRzMCwwKCRpbnApCiAJbHd6CSRzMSw0KCRpbnApCiAJbHd6CSRzMiw4KCRpbnApCkBAIC0zNjMsOCArMzc1LDgwIEBACiAJc3R3CSRzMSw0KCRvdXQpCiAJc3R3CSRzMiw4KCRvdXQpCiAJc3R3CSRzMywxMigkb3V0KQorCWIJTGVuY19kb25lCiAKLQkkUE9QCXIwLGAkRlJBTUUtJFNJWkVfVCoyMWAoJHNwKQorTGVuY191bmFsaWduZWQ6CisJc3ViZmljCSR0MCwkaW5wLDQwOTYKKwlzdWJmaWMJJHQxLCRvdXQsNDA5NgorCWFuZGkuCSR0MCwkdDAsNDA5Ni0xNgorCWJlcQlMZW5jX3hwYWdlCisJYW5kaS4JJHQxLCR0MSw0MDk2LTE2CisJYm5lCUxlbmNfdW5hbGlnbmVkX29rCisKK0xlbmNfeHBhZ2U6CisJbGJ6CSRhY2MwMCwwKCRpbnApCisJbGJ6CSRhY2MwMSwxKCRpbnApCisJbGJ6CSRhY2MwMiwyKCRpbnApCisJbGJ6CSRzMCwzKCRpbnApCisJbGJ6CSRhY2MwNCw0KCRpbnApCisJbGJ6CSRhY2MwNSw1KCRpbnApCisJbGJ6CSRhY2MwNiw2KCRpbnApCisJbGJ6CSRzMSw3KCRpbnApCisJbGJ6CSRhY2MwOCw4KCRpbnApCisJbGJ6CSRhY2MwOSw5KCRpbnApCisJbGJ6CSRhY2MxMCwxMCgkaW5wKQorCWluc3J3aQkkczAsJGFjYzAwLDgsMAorCWxiegkkczIsMTEoJGlucCkKKwlpbnNyd2kJJHMxLCRhY2MwNCw4LDAKKwlsYnoJJGFjYzEyLDEyKCRpbnApCisJaW5zcndpCSRzMCwkYWNjMDEsOCw4CisJbGJ6CSRhY2MxMywxMygkaW5wKQorCWluc3J3aQkkczEsJGFjYzA1LDgsOAorCWxiegkkYWNjMTQsMTQoJGlucCkKKwlpbnNyd2kJJHMwLCRhY2MwMiw4LDE2CisJbGJ6CSRzMywxNSgkaW5wKQorCWluc3J3aQkkczEsJGFjYzA2LDgsMTYKKwlpbnNyd2kJJHMyLCRhY2MwOCw4LDAKKwlpbnNyd2kJJHMzLCRhY2MxMiw4LDAKKwlpbnNyd2kJJHMyLCRhY2MwOSw4LDgKKwlpbnNyd2kJJHMzLCRhY2MxMyw4LDgKKwlpbnNyd2kJJHMyLCRhY2MxMCw4LDE2CisJaW5zcndpCSRzMywkYWNjMTQsOCwxNgorCisJYmwJTEFFU19UZQorCWJsCUxwcGNfQUVTX2VuY3J5cHRfY29tcGFjdAorCisJZXh0cndpCSRhY2MwMCwkczAsOCwwCisJZXh0cndpCSRhY2MwMSwkczAsOCw4CisJc3RiCSRhY2MwMCwwKCRvdXQpCisJZXh0cndpCSRhY2MwMiwkczAsOCwxNgorCXN0YgkkYWNjMDEsMSgkb3V0KQorCXN0YgkkYWNjMDIsMigkb3V0KQorCWV4dHJ3aQkkYWNjMDQsJHMxLDgsMAorCXN0YgkkczAsMygkb3V0KQorCWV4dHJ3aQkkYWNjMDUsJHMxLDgsOAorCXN0YgkkYWNjMDQsNCgkb3V0KQorCWV4dHJ3aQkkYWNjMDYsJHMxLDgsMTYKKwlzdGIJJGFjYzA1LDUoJG91dCkKKwlzdGIJJGFjYzA2LDYoJG91dCkKKwlleHRyd2kJJGFjYzA4LCRzMiw4LDAKKwlzdGIJJHMxLDcoJG91dCkKKwlleHRyd2kJJGFjYzA5LCRzMiw4LDgKKwlzdGIJJGFjYzA4LDgoJG91dCkKKwlleHRyd2kJJGFjYzEwLCRzMiw4LDE2CisJc3RiCSRhY2MwOSw5KCRvdXQpCisJc3RiCSRhY2MxMCwxMCgkb3V0KQorCWV4dHJ3aQkkYWNjMTIsJHMzLDgsMAorCXN0YgkkczIsMTEoJG91dCkKKwlleHRyd2kJJGFjYzEzLCRzMyw4LDgKKwlzdGIJJGFjYzEyLDEyKCRvdXQpCisJZXh0cndpCSRhY2MxNCwkczMsOCwxNgorCXN0YgkkYWNjMTMsMTMoJG91dCkKKwlzdGIJJGFjYzE0LDE0KCRvdXQpCisJc3RiCSRzMywxNSgkb3V0KQorCitMZW5jX2RvbmU6CisJJFBPUAlyMCxgJEZSQU1FKyRMUlNBVkVgKCRzcCkKIAkkUE9QCSR0b2MsYCRGUkFNRS0kU0laRV9UKjIwYCgkc3ApCiAJJFBPUAlyMTMsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCiAJJFBPUAlyMTQsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCkBAIC0zODgsMTggKzQ3MiwyMSBAQAogCW10bHIJcjAKIAlhZGRpCSRzcCwkc3AsJEZSQU1FCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsNCwxLDB4ODAsMTgsMywwCisJLmxvbmcJMAogCiAuYWxpZ24JNQogTHBwY19BRVNfZW5jcnlwdDoKIAlsd3oJJGFjYzAwLDI0MCgka2V5KQotCWx3egkkdDAsMCgka2V5KQotCWx3egkkdDEsNCgka2V5KQotCWx3egkkdDIsOCgka2V5KQotCWx3egkkdDMsMTIoJGtleSkKIAlhZGRpCSRUYmwxLCRUYmwwLDMKKwlsd3oJJHQwLDAoJGtleSkKIAlhZGRpCSRUYmwyLCRUYmwwLDIKKwlsd3oJJHQxLDQoJGtleSkKIAlhZGRpCSRUYmwzLCRUYmwwLDEKKwlsd3oJJHQyLDgoJGtleSkKIAlhZGRpCSRhY2MwMCwkYWNjMDAsLTEKKwlsd3oJJHQzLDEyKCRrZXkpCiAJYWRkaQkka2V5LCRrZXksMTYKIAl4b3IJJHMwLCRzMCwkdDAKIAl4b3IJJHMxLCRzMSwkdDEKQEAgLTQxMyw0NCArNTAwLDQ0IEBACiAJcmx3aW5tCSRhY2MwMiwkczIsYDMyLTI0KzNgLDIxLDI4CiAJcmx3aW5tCSRhY2MwMywkczMsYDMyLTI0KzNgLDIxLDI4CiAJbHd6CSR0MCwwKCRrZXkpCi0JbHd6CSR0MSw0KCRrZXkpCiAJcmx3aW5tCSRhY2MwNCwkczEsYDMyLTE2KzNgLDIxLDI4CisJbHd6CSR0MSw0KCRrZXkpCiAJcmx3aW5tCSRhY2MwNSwkczIsYDMyLTE2KzNgLDIxLDI4CiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCXJsd2lubQkkYWNjMDYsJHMzLGAzMi0xNiszYCwyMSwyOAorCWx3egkkdDMsMTIoJGtleSkKIAlybHdpbm0JJGFjYzA3LCRzMCxgMzItMTYrM2AsMjEsMjgKIAlsd3p4CSRhY2MwMCwkVGJsMCwkYWNjMDAKLQlsd3p4CSRhY2MwMSwkVGJsMCwkYWNjMDEKIAlybHdpbm0JJGFjYzA4LCRzMixgMzItOCszYCwyMSwyOAorCWx3engJJGFjYzAxLCRUYmwwLCRhY2MwMQogCXJsd2lubQkkYWNjMDksJHMzLGAzMi04KzNgLDIxLDI4CiAJbHd6eAkkYWNjMDIsJFRibDAsJGFjYzAyCi0JbHd6eAkkYWNjMDMsJFRibDAsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMCwkczAsYDMyLTgrM2AsMjEsMjgKKwlsd3p4CSRhY2MwMywkVGJsMCwkYWNjMDMKIAlybHdpbm0JJGFjYzExLCRzMSxgMzItOCszYCwyMSwyOAogCWx3engJJGFjYzA0LCRUYmwxLCRhY2MwNAotCWx3engJJGFjYzA1LCRUYmwxLCRhY2MwNQogCXJsd2lubQkkYWNjMTIsJHMzLGAwKzNgLDIxLDI4CisJbHd6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMywkczAsYDArM2AsMjEsMjgKIAlsd3p4CSRhY2MwNiwkVGJsMSwkYWNjMDYKLQlsd3p4CSRhY2MwNywkVGJsMSwkYWNjMDcKIAlybHdpbm0JJGFjYzE0LCRzMSxgMCszYCwyMSwyOAorCWx3engJJGFjYzA3LCRUYmwxLCRhY2MwNwogCXJsd2lubQkkYWNjMTUsJHMyLGAwKzNgLDIxLDI4CiAJbHd6eAkkYWNjMDgsJFRibDIsJGFjYzA4Ci0JbHd6eAkkYWNjMDksJFRibDIsJGFjYzA5CiAJeG9yCSR0MCwkdDAsJGFjYzAwCisJbHd6eAkkYWNjMDksJFRibDIsJGFjYzA5CiAJeG9yCSR0MSwkdDEsJGFjYzAxCiAJbHd6eAkkYWNjMTAsJFRibDIsJGFjYzEwCi0JbHd6eAkkYWNjMTEsJFRibDIsJGFjYzExCiAJeG9yCSR0MiwkdDIsJGFjYzAyCisJbHd6eAkkYWNjMTEsJFRibDIsJGFjYzExCiAJeG9yCSR0MywkdDMsJGFjYzAzCiAJbHd6eAkkYWNjMTIsJFRibDMsJGFjYzEyCi0JbHd6eAkkYWNjMTMsJFRibDMsJGFjYzEzCiAJeG9yCSR0MCwkdDAsJGFjYzA0CisJbHd6eAkkYWNjMTMsJFRibDMsJGFjYzEzCiAJeG9yCSR0MSwkdDEsJGFjYzA1CiAJbHd6eAkkYWNjMTQsJFRibDMsJGFjYzE0Ci0JbHd6eAkkYWNjMTUsJFRibDMsJGFjYzE1CiAJeG9yCSR0MiwkdDIsJGFjYzA2CisJbHd6eAkkYWNjMTUsJFRibDMsJGFjYzE1CiAJeG9yCSR0MywkdDMsJGFjYzA3CiAJeG9yCSR0MCwkdDAsJGFjYzA4CiAJeG9yCSR0MSwkdDEsJGFjYzA5CkBAIC00NjYsNjAgKzU1Myw2MCBAQAogCWFkZGkJJFRibDIsJFRibDAsMjA0OAogCW5vcAogCWx3egkkdDAsMCgka2V5KQotCWx3egkkdDEsNCgka2V5KQogCXJsd2lubQkkYWNjMDAsJHMwLGAzMi0yNGAsMjQsMzEKKwlsd3oJJHQxLDQoJGtleSkKIAlybHdpbm0JJGFjYzAxLCRzMSxgMzItMjRgLDI0LDMxCiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNGAsMjQsMzEKKwlsd3oJJHQzLDEyKCRrZXkpCiAJcmx3aW5tCSRhY2MwMywkczMsYDMyLTI0YCwyNCwzMQogCWx3egkkYWNjMDgsYDIwNDgrMGAoJFRibDApCSEgcHJlZmV0Y2ggVGU0Ci0JbHd6CSRhY2MwOSxgMjA0OCszMmAoJFRibDApCiAJcmx3aW5tCSRhY2MwNCwkczEsYDMyLTE2YCwyNCwzMQorCWx3egkkYWNjMDksYDIwNDgrMzJgKCRUYmwwKQogCXJsd2lubQkkYWNjMDUsJHMyLGAzMi0xNmAsMjQsMzEKIAlsd3oJJGFjYzEwLGAyMDQ4KzY0YCgkVGJsMCkKLQlsd3oJJGFjYzExLGAyMDQ4Kzk2YCgkVGJsMCkKIAlybHdpbm0JJGFjYzA2LCRzMyxgMzItMTZgLDI0LDMxCisJbHd6CSRhY2MxMSxgMjA0OCs5NmAoJFRibDApCiAJcmx3aW5tCSRhY2MwNywkczAsYDMyLTE2YCwyNCwzMQogCWx3egkkYWNjMTIsYDIwNDgrMTI4YCgkVGJsMCkKLQlsd3oJJGFjYzEzLGAyMDQ4KzE2MGAoJFRibDApCiAJcmx3aW5tCSRhY2MwOCwkczIsYDMyLThgLDI0LDMxCisJbHd6CSRhY2MxMyxgMjA0OCsxNjBgKCRUYmwwKQogCXJsd2lubQkkYWNjMDksJHMzLGAzMi04YCwyNCwzMQogCWx3egkkYWNjMTQsYDIwNDgrMTkyYCgkVGJsMCkKLQlsd3oJJGFjYzE1LGAyMDQ4KzIyNGAoJFRibDApCiAJcmx3aW5tCSRhY2MxMCwkczAsYDMyLThgLDI0LDMxCisJbHd6CSRhY2MxNSxgMjA0OCsyMjRgKCRUYmwwKQogCXJsd2lubQkkYWNjMTEsJHMxLGAzMi04YCwyNCwzMQogCWxiengJJGFjYzAwLCRUYmwyLCRhY2MwMAotCWxiengJJGFjYzAxLCRUYmwyLCRhY2MwMQogCXJsd2lubQkkYWNjMTIsJHMzLGAwYCwyNCwzMQorCWxiengJJGFjYzAxLCRUYmwyLCRhY2MwMQogCXJsd2lubQkkYWNjMTMsJHMwLGAwYCwyNCwzMQogCWxiengJJGFjYzAyLCRUYmwyLCRhY2MwMgotCWxiengJJGFjYzAzLCRUYmwyLCRhY2MwMwogCXJsd2lubQkkYWNjMTQsJHMxLGAwYCwyNCwzMQorCWxiengJJGFjYzAzLCRUYmwyLCRhY2MwMwogCXJsd2lubQkkYWNjMTUsJHMyLGAwYCwyNCwzMQogCWxiengJJGFjYzA0LCRUYmwyLCRhY2MwNAotCWxiengJJGFjYzA1LCRUYmwyLCRhY2MwNQogCXJsd2lubQkkczAsJGFjYzAwLDI0LDAsNworCWxiengJJGFjYzA1LCRUYmwyLCRhY2MwNQogCXJsd2lubQkkczEsJGFjYzAxLDI0LDAsNwogCWxiengJJGFjYzA2LCRUYmwyLCRhY2MwNgotCWxiengJJGFjYzA3LCRUYmwyLCRhY2MwNwogCXJsd2lubQkkczIsJGFjYzAyLDI0LDAsNworCWxiengJJGFjYzA3LCRUYmwyLCRhY2MwNwogCXJsd2lubQkkczMsJGFjYzAzLDI0LDAsNwogCWxiengJJGFjYzA4LCRUYmwyLCRhY2MwOAotCWxiengJJGFjYzA5LCRUYmwyLCRhY2MwOQogCXJsd2ltaQkkczAsJGFjYzA0LDE2LDgsMTUKKwlsYnp4CSRhY2MwOSwkVGJsMiwkYWNjMDkKIAlybHdpbWkJJHMxLCRhY2MwNSwxNiw4LDE1CiAJbGJ6eAkkYWNjMTAsJFRibDIsJGFjYzEwCi0JbGJ6eAkkYWNjMTEsJFRibDIsJGFjYzExCiAJcmx3aW1pCSRzMiwkYWNjMDYsMTYsOCwxNQorCWxiengJJGFjYzExLCRUYmwyLCRhY2MxMQogCXJsd2ltaQkkczMsJGFjYzA3LDE2LDgsMTUKIAlsYnp4CSRhY2MxMiwkVGJsMiwkYWNjMTIKLQlsYnp4CSRhY2MxMywkVGJsMiwkYWNjMTMKIAlybHdpbWkJJHMwLCRhY2MwOCw4LDE2LDIzCisJbGJ6eAkkYWNjMTMsJFRibDIsJGFjYzEzCiAJcmx3aW1pCSRzMSwkYWNjMDksOCwxNiwyMwogCWxiengJJGFjYzE0LCRUYmwyLCRhY2MxNAotCWxiengJJGFjYzE1LCRUYmwyLCRhY2MxNQogCXJsd2ltaQkkczIsJGFjYzEwLDgsMTYsMjMKKwlsYnp4CSRhY2MxNSwkVGJsMiwkYWNjMTUKIAlybHdpbWkJJHMzLCRhY2MxMSw4LDE2LDIzCiAJb3IJJHMwLCRzMCwkYWNjMTIKIAlvcgkkczEsJHMxLCRhY2MxMwpAQCAtNTMwLDI5ICs2MTcsMzEgQEAKIAl4b3IJJHMyLCRzMiwkdDIKIAl4b3IJJHMzLCRzMywkdDMKIAlibHIKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAogCiAuYWxpZ24JNAogTHBwY19BRVNfZW5jcnlwdF9jb21wYWN0OgogCWx3egkkYWNjMDAsMjQwKCRrZXkpCi0JbHd6CSR0MCwwKCRrZXkpCi0JbHd6CSR0MSw0KCRrZXkpCi0JbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCWFkZGkJJFRibDEsJFRibDAsMjA0OAorCWx3egkkdDAsMCgka2V5KQogCWxpcwkkbWFzazgwLDB4ODA4MAorCWx3egkkdDEsNCgka2V5KQogCWxpcwkkbWFzazFiLDB4MWIxYgotCWFkZGkJJGtleSwka2V5LDE2CisJbHd6CSR0Miw4KCRrZXkpCiAJb3JpCSRtYXNrODAsJG1hc2s4MCwweDgwODAKKwlsd3oJJHQzLDEyKCRrZXkpCiAJb3JpCSRtYXNrMWIsJG1hc2sxYiwweDFiMWIKKwlhZGRpCSRrZXksJGtleSwxNgogCW10Y3RyCSRhY2MwMAogLmFsaWduCTQKIExlbmNfY29tcGFjdF9sb29wOgogCXhvcgkkczAsJHMwLCR0MAogCXhvcgkkczEsJHMxLCR0MQotCXhvcgkkczIsJHMyLCR0MgotCXhvcgkkczMsJHMzLCR0MwogCXJsd2lubQkkYWNjMDAsJHMwLGAzMi0yNGAsMjQsMzEKKwl4b3IJJHMyLCRzMiwkdDIKIAlybHdpbm0JJGFjYzAxLCRzMSxgMzItMjRgLDI0LDMxCisJeG9yCSRzMywkczMsJHQzCiAJcmx3aW5tCSRhY2MwMiwkczIsYDMyLTI0YCwyNCwzMQogCXJsd2lubQkkYWNjMDMsJHMzLGAzMi0yNGAsMjQsMzEKIAlybHdpbm0JJGFjYzA0LCRzMSxgMzItMTZgLDI0LDMxCkBAIC01NjAsNDggKzY0OSw0OCBAQAogCXJsd2lubQkkYWNjMDYsJHMzLGAzMi0xNmAsMjQsMzEKIAlybHdpbm0JJGFjYzA3LCRzMCxgMzItMTZgLDI0LDMxCiAJbGJ6eAkkYWNjMDAsJFRibDEsJGFjYzAwCi0JbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCiAJcmx3aW5tCSRhY2MwOCwkczIsYDMyLThgLDI0LDMxCisJbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCiAJcmx3aW5tCSRhY2MwOSwkczMsYDMyLThgLDI0LDMxCiAJbGJ6eAkkYWNjMDIsJFRibDEsJGFjYzAyCi0JbGJ6eAkkYWNjMDMsJFRibDEsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMCwkczAsYDMyLThgLDI0LDMxCisJbGJ6eAkkYWNjMDMsJFRibDEsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMSwkczEsYDMyLThgLDI0LDMxCiAJbGJ6eAkkYWNjMDQsJFRibDEsJGFjYzA0Ci0JbGJ6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMiwkczMsYDBgLDI0LDMxCisJbGJ6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMywkczAsYDBgLDI0LDMxCiAJbGJ6eAkkYWNjMDYsJFRibDEsJGFjYzA2Ci0JbGJ6eAkkYWNjMDcsJFRibDEsJGFjYzA3CiAJcmx3aW5tCSRhY2MxNCwkczEsYDBgLDI0LDMxCisJbGJ6eAkkYWNjMDcsJFRibDEsJGFjYzA3CiAJcmx3aW5tCSRhY2MxNSwkczIsYDBgLDI0LDMxCiAJbGJ6eAkkYWNjMDgsJFRibDEsJGFjYzA4Ci0JbGJ6eAkkYWNjMDksJFRibDEsJGFjYzA5CiAJcmx3aW5tCSRzMCwkYWNjMDAsMjQsMCw3CisJbGJ6eAkkYWNjMDksJFRibDEsJGFjYzA5CiAJcmx3aW5tCSRzMSwkYWNjMDEsMjQsMCw3CiAJbGJ6eAkkYWNjMTAsJFRibDEsJGFjYzEwCi0JbGJ6eAkkYWNjMTEsJFRibDEsJGFjYzExCiAJcmx3aW5tCSRzMiwkYWNjMDIsMjQsMCw3CisJbGJ6eAkkYWNjMTEsJFRibDEsJGFjYzExCiAJcmx3aW5tCSRzMywkYWNjMDMsMjQsMCw3CiAJbGJ6eAkkYWNjMTIsJFRibDEsJGFjYzEyCi0JbGJ6eAkkYWNjMTMsJFRibDEsJGFjYzEzCiAJcmx3aW1pCSRzMCwkYWNjMDQsMTYsOCwxNQorCWxiengJJGFjYzEzLCRUYmwxLCRhY2MxMwogCXJsd2ltaQkkczEsJGFjYzA1LDE2LDgsMTUKIAlsYnp4CSRhY2MxNCwkVGJsMSwkYWNjMTQKLQlsYnp4CSRhY2MxNSwkVGJsMSwkYWNjMTUKIAlybHdpbWkJJHMyLCRhY2MwNiwxNiw4LDE1CisJbGJ6eAkkYWNjMTUsJFRibDEsJGFjYzE1CiAJcmx3aW1pCSRzMywkYWNjMDcsMTYsOCwxNQogCXJsd2ltaQkkczAsJGFjYzA4LDgsMTYsMjMKIAlybHdpbWkJJHMxLCRhY2MwOSw4LDE2LDIzCiAJcmx3aW1pCSRzMiwkYWNjMTAsOCwxNiwyMwogCXJsd2ltaQkkczMsJGFjYzExLDgsMTYsMjMKIAlsd3oJJHQwLDAoJGtleSkKLQlsd3oJJHQxLDQoJGtleSkKIAlvcgkkczAsJHMwLCRhY2MxMgorCWx3egkkdDEsNCgka2V5KQogCW9yCSRzMSwkczEsJGFjYzEzCiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCW9yCSRzMiwkczIsJGFjYzE0CisJbHd6CSR0MywxMigka2V5KQogCW9yCSRzMywkczMsJGFjYzE1CiAKIAlhZGRpCSRrZXksJGtleSwxNgpAQCAtNjEyLDEyICs3MDEsMTIgQEAKIAlhbmQJJGFjYzAyLCRzMiwkbWFzazgwCiAJYW5kCSRhY2MwMywkczMsJG1hc2s4MAogCXNyd2kJJGFjYzA0LCRhY2MwMCw3CQkjIHIxPj43Ci0Jc3J3aQkkYWNjMDUsJGFjYzAxLDcKLQlzcndpCSRhY2MwNiwkYWNjMDIsNwotCXNyd2kJJGFjYzA3LCRhY2MwMyw3CiAJYW5kYwkkYWNjMDgsJHMwLCRtYXNrODAJIyByMCYweDdmN2Y3ZjdmCisJc3J3aQkkYWNjMDUsJGFjYzAxLDcKIAlhbmRjCSRhY2MwOSwkczEsJG1hc2s4MAorCXNyd2kJJGFjYzA2LCRhY2MwMiw3CiAJYW5kYwkkYWNjMTAsJHMyLCRtYXNrODAKKwlzcndpCSRhY2MwNywkYWNjMDMsNwogCWFuZGMJJGFjYzExLCRzMywkbWFzazgwCiAJc3ViCSRhY2MwMCwkYWNjMDAsJGFjYzA0CSMgcjEtKHIxPj43KQogCXN1YgkkYWNjMDEsJGFjYzAxLCRhY2MwNQpAQCAtNjMzLDMyICs3MjIsMzIgQEAKIAlhbmQJJGFjYzAzLCRhY2MwMywkbWFzazFiCiAJeG9yCSRhY2MwMCwkYWNjMDAsJGFjYzA4CSMgcjIKIAl4b3IJJGFjYzAxLCRhY2MwMSwkYWNjMDkKKwkgcm90bHdpCSRhY2MxMiwkczAsMTYJCSMgUk9UQVRFKHIwLDE2KQogCXhvcgkkYWNjMDIsJGFjYzAyLCRhY2MxMAorCSByb3Rsd2kJJGFjYzEzLCRzMSwxNgogCXhvcgkkYWNjMDMsJGFjYzAzLCRhY2MxMQorCSByb3Rsd2kJJGFjYzE0LCRzMiwxNgogCi0Jcm90bHdpCSRhY2MxMiwkczAsMTYJCSMgUk9UQVRFKHIwLDE2KQotCXJvdGx3aQkkYWNjMTMsJHMxLDE2Ci0Jcm90bHdpCSRhY2MxNCwkczIsMTYKLQlyb3Rsd2kJJGFjYzE1LCRzMywxNgogCXhvcgkkczAsJHMwLCRhY2MwMAkJIyByMF5yMgorCXJvdGx3aQkkYWNjMTUsJHMzLDE2CiAJeG9yCSRzMSwkczEsJGFjYzAxCi0JeG9yCSRzMiwkczIsJGFjYzAyCi0JeG9yCSRzMywkczMsJGFjYzAzCiAJcm90cndpCSRzMCwkczAsMjQJCSMgUk9UQVRFKHIyXnIwLDI0KQorCXhvcgkkczIsJHMyLCRhY2MwMgogCXJvdHJ3aQkkczEsJHMxLDI0CisJeG9yCSRzMywkczMsJGFjYzAzCiAJcm90cndpCSRzMiwkczIsMjQKLQlyb3Ryd2kJJHMzLCRzMywyNAogCXhvcgkkczAsJHMwLCRhY2MwMAkJIyBST1RBVEUocjJecjAsMjQpXnIyCisJcm90cndpCSRzMywkczMsMjQKIAl4b3IJJHMxLCRzMSwkYWNjMDEKIAl4b3IJJHMyLCRzMiwkYWNjMDIKIAl4b3IJJHMzLCRzMywkYWNjMDMKIAlyb3Rsd2kJJGFjYzA4LCRhY2MxMiw4CQkjIFJPVEFURShyMCwyNCkKLQlyb3Rsd2kJJGFjYzA5LCRhY2MxMyw4Ci0Jcm90bHdpCSRhY2MxMCwkYWNjMTQsOAotCXJvdGx3aQkkYWNjMTEsJGFjYzE1LDgKIAl4b3IJJHMwLCRzMCwkYWNjMTIJCSMKKwlyb3Rsd2kJJGFjYzA5LCRhY2MxMyw4CiAJeG9yCSRzMSwkczEsJGFjYzEzCisJcm90bHdpCSRhY2MxMCwkYWNjMTQsOAogCXhvcgkkczIsJHMyLCRhY2MxNAorCXJvdGx3aQkkYWNjMTEsJGFjYzE1LDgKIAl4b3IJJHMzLCRzMywkYWNjMTUKIAl4b3IJJHMwLCRzMCwkYWNjMDgJCSMKIAl4b3IJJHMxLCRzMSwkYWNjMDkKQEAgLTY3MywxNCArNzYyLDE1IEBACiAJeG9yCSRzMiwkczIsJHQyCiAJeG9yCSRzMywkczMsJHQzCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwwLDAKIAogLmdsb2JsCS5BRVNfZGVjcnlwdAogLmFsaWduCTcKIC5BRVNfZGVjcnlwdDoKLQltZmxyCXIwCiAJJFNUVQkkc3AsLSRGUkFNRSgkc3ApCisJbWZscglyMAogCi0JJFBVU0gJcjAsYCRGUkFNRS0kU0laRV9UKjIxYCgkc3ApCiAJJFBVU0gJJHRvYyxgJEZSQU1FLSRTSVpFX1QqMjBgKCRzcCkKIAkkUFVTSAlyMTMsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCiAJJFBVU0gJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQpAQCAtNzAxLDcgKzc5MSwxNCBAQAogCSRQVVNICXIyOSxgJEZSQU1FLSRTSVpFX1QqM2AoJHNwKQogCSRQVVNICXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQogCSRQVVNICXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCSRQVVNICXIwLGAkRlJBTUUrJExSU0FWRWAoJHNwKQogCisJYW5kaS4JJHQwLCRpbnAsMworCWFuZGkuCSR0MSwkb3V0LDMKKwlvci4JJHQwLCR0MCwkdDEKKwlibmUJTGRlY191bmFsaWduZWQKKworTGRlY191bmFsaWduZWRfb2s6CiAJbHd6CSRzMCwwKCRpbnApCiAJbHd6CSRzMSw0KCRpbnApCiAJbHd6CSRzMiw4KCRpbnApCkBAIC03MTIsOCArODA5LDgwIEBACiAJc3R3CSRzMSw0KCRvdXQpCiAJc3R3CSRzMiw4KCRvdXQpCiAJc3R3CSRzMywxMigkb3V0KQorCWIJTGRlY19kb25lCiAKLQkkUE9QCXIwLGAkRlJBTUUtJFNJWkVfVCoyMWAoJHNwKQorTGRlY191bmFsaWduZWQ6CisJc3ViZmljCSR0MCwkaW5wLDQwOTYKKwlzdWJmaWMJJHQxLCRvdXQsNDA5NgorCWFuZGkuCSR0MCwkdDAsNDA5Ni0xNgorCWJlcQlMZGVjX3hwYWdlCisJYW5kaS4JJHQxLCR0MSw0MDk2LTE2CisJYm5lCUxkZWNfdW5hbGlnbmVkX29rCisKK0xkZWNfeHBhZ2U6CisJbGJ6CSRhY2MwMCwwKCRpbnApCisJbGJ6CSRhY2MwMSwxKCRpbnApCisJbGJ6CSRhY2MwMiwyKCRpbnApCisJbGJ6CSRzMCwzKCRpbnApCisJbGJ6CSRhY2MwNCw0KCRpbnApCisJbGJ6CSRhY2MwNSw1KCRpbnApCisJbGJ6CSRhY2MwNiw2KCRpbnApCisJbGJ6CSRzMSw3KCRpbnApCisJbGJ6CSRhY2MwOCw4KCRpbnApCisJbGJ6CSRhY2MwOSw5KCRpbnApCisJbGJ6CSRhY2MxMCwxMCgkaW5wKQorCWluc3J3aQkkczAsJGFjYzAwLDgsMAorCWxiegkkczIsMTEoJGlucCkKKwlpbnNyd2kJJHMxLCRhY2MwNCw4LDAKKwlsYnoJJGFjYzEyLDEyKCRpbnApCisJaW5zcndpCSRzMCwkYWNjMDEsOCw4CisJbGJ6CSRhY2MxMywxMygkaW5wKQorCWluc3J3aQkkczEsJGFjYzA1LDgsOAorCWxiegkkYWNjMTQsMTQoJGlucCkKKwlpbnNyd2kJJHMwLCRhY2MwMiw4LDE2CisJbGJ6CSRzMywxNSgkaW5wKQorCWluc3J3aQkkczEsJGFjYzA2LDgsMTYKKwlpbnNyd2kJJHMyLCRhY2MwOCw4LDAKKwlpbnNyd2kJJHMzLCRhY2MxMiw4LDAKKwlpbnNyd2kJJHMyLCRhY2MwOSw4LDgKKwlpbnNyd2kJJHMzLCRhY2MxMyw4LDgKKwlpbnNyd2kJJHMyLCRhY2MxMCw4LDE2CisJaW5zcndpCSRzMywkYWNjMTQsOCwxNgorCisJYmwJTEFFU19UZAorCWJsCUxwcGNfQUVTX2RlY3J5cHRfY29tcGFjdAorCisJZXh0cndpCSRhY2MwMCwkczAsOCwwCisJZXh0cndpCSRhY2MwMSwkczAsOCw4CisJc3RiCSRhY2MwMCwwKCRvdXQpCisJZXh0cndpCSRhY2MwMiwkczAsOCwxNgorCXN0YgkkYWNjMDEsMSgkb3V0KQorCXN0YgkkYWNjMDIsMigkb3V0KQorCWV4dHJ3aQkkYWNjMDQsJHMxLDgsMAorCXN0YgkkczAsMygkb3V0KQorCWV4dHJ3aQkkYWNjMDUsJHMxLDgsOAorCXN0YgkkYWNjMDQsNCgkb3V0KQorCWV4dHJ3aQkkYWNjMDYsJHMxLDgsMTYKKwlzdGIJJGFjYzA1LDUoJG91dCkKKwlzdGIJJGFjYzA2LDYoJG91dCkKKwlleHRyd2kJJGFjYzA4LCRzMiw4LDAKKwlzdGIJJHMxLDcoJG91dCkKKwlleHRyd2kJJGFjYzA5LCRzMiw4LDgKKwlzdGIJJGFjYzA4LDgoJG91dCkKKwlleHRyd2kJJGFjYzEwLCRzMiw4LDE2CisJc3RiCSRhY2MwOSw5KCRvdXQpCisJc3RiCSRhY2MxMCwxMCgkb3V0KQorCWV4dHJ3aQkkYWNjMTIsJHMzLDgsMAorCXN0YgkkczIsMTEoJG91dCkKKwlleHRyd2kJJGFjYzEzLCRzMyw4LDgKKwlzdGIJJGFjYzEyLDEyKCRvdXQpCisJZXh0cndpCSRhY2MxNCwkczMsOCwxNgorCXN0YgkkYWNjMTMsMTMoJG91dCkKKwlzdGIJJGFjYzE0LDE0KCRvdXQpCisJc3RiCSRzMywxNSgkb3V0KQorCitMZGVjX2RvbmU6CisJJFBPUAlyMCxgJEZSQU1FKyRMUlNBVkVgKCRzcCkKIAkkUE9QCSR0b2MsYCRGUkFNRS0kU0laRV9UKjIwYCgkc3ApCiAJJFBPUAlyMTMsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCiAJJFBPUAlyMTQsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCkBAIC03MzcsMTggKzkwNiwyMSBAQAogCW10bHIJcjAKIAlhZGRpCSRzcCwkc3AsJEZSQU1FCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsNCwxLDB4ODAsMTgsMywwCisJLmxvbmcJMAogCiAuYWxpZ24JNQogTHBwY19BRVNfZGVjcnlwdDoKIAlsd3oJJGFjYzAwLDI0MCgka2V5KQotCWx3egkkdDAsMCgka2V5KQotCWx3egkkdDEsNCgka2V5KQotCWx3egkkdDIsOCgka2V5KQotCWx3egkkdDMsMTIoJGtleSkKIAlhZGRpCSRUYmwxLCRUYmwwLDMKKwlsd3oJJHQwLDAoJGtleSkKIAlhZGRpCSRUYmwyLCRUYmwwLDIKKwlsd3oJJHQxLDQoJGtleSkKIAlhZGRpCSRUYmwzLCRUYmwwLDEKKwlsd3oJJHQyLDgoJGtleSkKIAlhZGRpCSRhY2MwMCwkYWNjMDAsLTEKKwlsd3oJJHQzLDEyKCRrZXkpCiAJYWRkaQkka2V5LCRrZXksMTYKIAl4b3IJJHMwLCRzMCwkdDAKIAl4b3IJJHMxLCRzMSwkdDEKQEAgLTc2Miw0NCArOTM0LDQ0IEBACiAJcmx3aW5tCSRhY2MwMiwkczIsYDMyLTI0KzNgLDIxLDI4CiAJcmx3aW5tCSRhY2MwMywkczMsYDMyLTI0KzNgLDIxLDI4CiAJbHd6CSR0MCwwKCRrZXkpCi0JbHd6CSR0MSw0KCRrZXkpCiAJcmx3aW5tCSRhY2MwNCwkczMsYDMyLTE2KzNgLDIxLDI4CisJbHd6CSR0MSw0KCRrZXkpCiAJcmx3aW5tCSRhY2MwNSwkczAsYDMyLTE2KzNgLDIxLDI4CiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCXJsd2lubQkkYWNjMDYsJHMxLGAzMi0xNiszYCwyMSwyOAorCWx3egkkdDMsMTIoJGtleSkKIAlybHdpbm0JJGFjYzA3LCRzMixgMzItMTYrM2AsMjEsMjgKIAlsd3p4CSRhY2MwMCwkVGJsMCwkYWNjMDAKLQlsd3p4CSRhY2MwMSwkVGJsMCwkYWNjMDEKIAlybHdpbm0JJGFjYzA4LCRzMixgMzItOCszYCwyMSwyOAorCWx3engJJGFjYzAxLCRUYmwwLCRhY2MwMQogCXJsd2lubQkkYWNjMDksJHMzLGAzMi04KzNgLDIxLDI4CiAJbHd6eAkkYWNjMDIsJFRibDAsJGFjYzAyCi0JbHd6eAkkYWNjMDMsJFRibDAsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMCwkczAsYDMyLTgrM2AsMjEsMjgKKwlsd3p4CSRhY2MwMywkVGJsMCwkYWNjMDMKIAlybHdpbm0JJGFjYzExLCRzMSxgMzItOCszYCwyMSwyOAogCWx3engJJGFjYzA0LCRUYmwxLCRhY2MwNAotCWx3engJJGFjYzA1LCRUYmwxLCRhY2MwNQogCXJsd2lubQkkYWNjMTIsJHMxLGAwKzNgLDIxLDI4CisJbHd6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMywkczIsYDArM2AsMjEsMjgKIAlsd3p4CSRhY2MwNiwkVGJsMSwkYWNjMDYKLQlsd3p4CSRhY2MwNywkVGJsMSwkYWNjMDcKIAlybHdpbm0JJGFjYzE0LCRzMyxgMCszYCwyMSwyOAorCWx3engJJGFjYzA3LCRUYmwxLCRhY2MwNwogCXJsd2lubQkkYWNjMTUsJHMwLGAwKzNgLDIxLDI4CiAJbHd6eAkkYWNjMDgsJFRibDIsJGFjYzA4Ci0JbHd6eAkkYWNjMDksJFRibDIsJGFjYzA5CiAJeG9yCSR0MCwkdDAsJGFjYzAwCisJbHd6eAkkYWNjMDksJFRibDIsJGFjYzA5CiAJeG9yCSR0MSwkdDEsJGFjYzAxCiAJbHd6eAkkYWNjMTAsJFRibDIsJGFjYzEwCi0JbHd6eAkkYWNjMTEsJFRibDIsJGFjYzExCiAJeG9yCSR0MiwkdDIsJGFjYzAyCisJbHd6eAkkYWNjMTEsJFRibDIsJGFjYzExCiAJeG9yCSR0MywkdDMsJGFjYzAzCiAJbHd6eAkkYWNjMTIsJFRibDMsJGFjYzEyCi0JbHd6eAkkYWNjMTMsJFRibDMsJGFjYzEzCiAJeG9yCSR0MCwkdDAsJGFjYzA0CisJbHd6eAkkYWNjMTMsJFRibDMsJGFjYzEzCiAJeG9yCSR0MSwkdDEsJGFjYzA1CiAJbHd6eAkkYWNjMTQsJFRibDMsJGFjYzE0Ci0JbHd6eAkkYWNjMTUsJFRibDMsJGFjYzE1CiAJeG9yCSR0MiwkdDIsJGFjYzA2CisJbHd6eAkkYWNjMTUsJFRibDMsJGFjYzE1CiAJeG9yCSR0MywkdDMsJGFjYzA3CiAJeG9yCSR0MCwkdDAsJGFjYzA4CiAJeG9yCSR0MSwkdDEsJGFjYzA5CkBAIC04MTUsNTYgKzk4Nyw1NiBAQAogCWFkZGkJJFRibDIsJFRibDAsMjA0OAogCW5vcAogCWx3egkkdDAsMCgka2V5KQotCWx3egkkdDEsNCgka2V5KQogCXJsd2lubQkkYWNjMDAsJHMwLGAzMi0yNGAsMjQsMzEKKwlsd3oJJHQxLDQoJGtleSkKIAlybHdpbm0JJGFjYzAxLCRzMSxgMzItMjRgLDI0LDMxCiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCXJsd2lubQkkYWNjMDIsJHMyLGAzMi0yNGAsMjQsMzEKKwlsd3oJJHQzLDEyKCRrZXkpCiAJcmx3aW5tCSRhY2MwMywkczMsYDMyLTI0YCwyNCwzMQogCWx3egkkYWNjMDgsYDIwNDgrMGAoJFRibDApCSEgcHJlZmV0Y2ggVGQ0Ci0JbHd6CSRhY2MwOSxgMjA0OCszMmAoJFRibDApCiAJcmx3aW5tCSRhY2MwNCwkczMsYDMyLTE2YCwyNCwzMQorCWx3egkkYWNjMDksYDIwNDgrMzJgKCRUYmwwKQogCXJsd2lubQkkYWNjMDUsJHMwLGAzMi0xNmAsMjQsMzEKIAlsd3oJJGFjYzEwLGAyMDQ4KzY0YCgkVGJsMCkKLQlsd3oJJGFjYzExLGAyMDQ4Kzk2YCgkVGJsMCkKIAlsYnp4CSRhY2MwMCwkVGJsMiwkYWNjMDAKKwlsd3oJJGFjYzExLGAyMDQ4Kzk2YCgkVGJsMCkKIAlsYnp4CSRhY2MwMSwkVGJsMiwkYWNjMDEKIAlsd3oJJGFjYzEyLGAyMDQ4KzEyOGAoJFRibDApCi0JbHd6CSRhY2MxMyxgMjA0OCsxNjBgKCRUYmwwKQogCXJsd2lubQkkYWNjMDYsJHMxLGAzMi0xNmAsMjQsMzEKKwlsd3oJJGFjYzEzLGAyMDQ4KzE2MGAoJFRibDApCiAJcmx3aW5tCSRhY2MwNywkczIsYDMyLTE2YCwyNCwzMQogCWx3egkkYWNjMTQsYDIwNDgrMTkyYCgkVGJsMCkKLQlsd3oJJGFjYzE1LGAyMDQ4KzIyNGAoJFRibDApCiAJcmx3aW5tCSRhY2MwOCwkczIsYDMyLThgLDI0LDMxCisJbHd6CSRhY2MxNSxgMjA0OCsyMjRgKCRUYmwwKQogCXJsd2lubQkkYWNjMDksJHMzLGAzMi04YCwyNCwzMQogCWxiengJJGFjYzAyLCRUYmwyLCRhY2MwMgotCWxiengJJGFjYzAzLCRUYmwyLCRhY2MwMwogCXJsd2lubQkkYWNjMTAsJHMwLGAzMi04YCwyNCwzMQorCWxiengJJGFjYzAzLCRUYmwyLCRhY2MwMwogCXJsd2lubQkkYWNjMTEsJHMxLGAzMi04YCwyNCwzMQogCWxiengJJGFjYzA0LCRUYmwyLCRhY2MwNAotCWxiengJJGFjYzA1LCRUYmwyLCRhY2MwNQogCXJsd2lubQkkYWNjMTIsJHMxLGAwYCwyNCwzMQorCWxiengJJGFjYzA1LCRUYmwyLCRhY2MwNQogCXJsd2lubQkkYWNjMTMsJHMyLGAwYCwyNCwzMQogCWxiengJJGFjYzA2LCRUYmwyLCRhY2MwNgotCWxiengJJGFjYzA3LCRUYmwyLCRhY2MwNwogCXJsd2lubQkkYWNjMTQsJHMzLGAwYCwyNCwzMQorCWxiengJJGFjYzA3LCRUYmwyLCRhY2MwNwogCXJsd2lubQkkYWNjMTUsJHMwLGAwYCwyNCwzMQogCWxiengJJGFjYzA4LCRUYmwyLCRhY2MwOAotCWxiengJJGFjYzA5LCRUYmwyLCRhY2MwOQogCXJsd2lubQkkczAsJGFjYzAwLDI0LDAsNworCWxiengJJGFjYzA5LCRUYmwyLCRhY2MwOQogCXJsd2lubQkkczEsJGFjYzAxLDI0LDAsNwogCWxiengJJGFjYzEwLCRUYmwyLCRhY2MxMAotCWxiengJJGFjYzExLCRUYmwyLCRhY2MxMQogCXJsd2lubQkkczIsJGFjYzAyLDI0LDAsNworCWxiengJJGFjYzExLCRUYmwyLCRhY2MxMQogCXJsd2lubQkkczMsJGFjYzAzLDI0LDAsNwogCWxiengJJGFjYzEyLCRUYmwyLCRhY2MxMgotCWxiengJJGFjYzEzLCRUYmwyLCRhY2MxMwogCXJsd2ltaQkkczAsJGFjYzA0LDE2LDgsMTUKKwlsYnp4CSRhY2MxMywkVGJsMiwkYWNjMTMKIAlybHdpbWkJJHMxLCRhY2MwNSwxNiw4LDE1CiAJbGJ6eAkkYWNjMTQsJFRibDIsJGFjYzE0Ci0JbGJ6eAkkYWNjMTUsJFRibDIsJGFjYzE1CiAJcmx3aW1pCSRzMiwkYWNjMDYsMTYsOCwxNQorCWxiengJJGFjYzE1LCRUYmwyLCRhY2MxNQogCXJsd2ltaQkkczMsJGFjYzA3LDE2LDgsMTUKIAlybHdpbWkJJHMwLCRhY2MwOCw4LDE2LDIzCiAJcmx3aW1pCSRzMSwkYWNjMDksOCwxNiwyMwpAQCAtODc5LDIwICsxMDUxLDIyIEBACiAJeG9yCSRzMiwkczIsJHQyCiAJeG9yCSRzMywkczMsJHQzCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwwLDAKIAogLmFsaWduCTQKIExwcGNfQUVTX2RlY3J5cHRfY29tcGFjdDoKIAlsd3oJJGFjYzAwLDI0MCgka2V5KQotCWx3egkkdDAsMCgka2V5KQotCWx3egkkdDEsNCgka2V5KQotCWx3egkkdDIsOCgka2V5KQotCWx3egkkdDMsMTIoJGtleSkKIAlhZGRpCSRUYmwxLCRUYmwwLDIwNDgKKwlsd3oJJHQwLDAoJGtleSkKIAlsaXMJJG1hc2s4MCwweDgwODAKKwlsd3oJJHQxLDQoJGtleSkKIAlsaXMJJG1hc2sxYiwweDFiMWIKLQlhZGRpCSRrZXksJGtleSwxNgorCWx3egkkdDIsOCgka2V5KQogCW9yaQkkbWFzazgwLCRtYXNrODAsMHg4MDgwCisJbHd6CSR0MywxMigka2V5KQogCW9yaQkkbWFzazFiLCRtYXNrMWIsMHgxYjFiCisJYWRkaQkka2V5LCRrZXksMTYKIF9fXwogJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT04KTsKIAlpbnNyZGkJJG1hc2s4MCwkbWFzazgwLDMyLDAKQEAgLTkwNCwxMCArMTA3OCwxMCBAQAogTGRlY19jb21wYWN0X2xvb3A6CiAJeG9yCSRzMCwkczAsJHQwCiAJeG9yCSRzMSwkczEsJHQxCi0JeG9yCSRzMiwkczIsJHQyCi0JeG9yCSRzMywkczMsJHQzCiAJcmx3aW5tCSRhY2MwMCwkczAsYDMyLTI0YCwyNCwzMQorCXhvcgkkczIsJHMyLCR0MgogCXJsd2lubQkkYWNjMDEsJHMxLGAzMi0yNGAsMjQsMzEKKwl4b3IJJHMzLCRzMywkdDMKIAlybHdpbm0JJGFjYzAyLCRzMixgMzItMjRgLDI0LDMxCiAJcmx3aW5tCSRhY2MwMywkczMsYDMyLTI0YCwyNCwzMQogCXJsd2lubQkkYWNjMDQsJHMzLGAzMi0xNmAsMjQsMzEKQEAgLTkxNSw0OCArMTA4OSw0OCBAQAogCXJsd2lubQkkYWNjMDYsJHMxLGAzMi0xNmAsMjQsMzEKIAlybHdpbm0JJGFjYzA3LCRzMixgMzItMTZgLDI0LDMxCiAJbGJ6eAkkYWNjMDAsJFRibDEsJGFjYzAwCi0JbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCiAJcmx3aW5tCSRhY2MwOCwkczIsYDMyLThgLDI0LDMxCisJbGJ6eAkkYWNjMDEsJFRibDEsJGFjYzAxCiAJcmx3aW5tCSRhY2MwOSwkczMsYDMyLThgLDI0LDMxCiAJbGJ6eAkkYWNjMDIsJFRibDEsJGFjYzAyCi0JbGJ6eAkkYWNjMDMsJFRibDEsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMCwkczAsYDMyLThgLDI0LDMxCisJbGJ6eAkkYWNjMDMsJFRibDEsJGFjYzAzCiAJcmx3aW5tCSRhY2MxMSwkczEsYDMyLThgLDI0LDMxCiAJbGJ6eAkkYWNjMDQsJFRibDEsJGFjYzA0Ci0JbGJ6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMiwkczEsYDBgLDI0LDMxCisJbGJ6eAkkYWNjMDUsJFRibDEsJGFjYzA1CiAJcmx3aW5tCSRhY2MxMywkczIsYDBgLDI0LDMxCiAJbGJ6eAkkYWNjMDYsJFRibDEsJGFjYzA2Ci0JbGJ6eAkkYWNjMDcsJFRibDEsJGFjYzA3CiAJcmx3aW5tCSRhY2MxNCwkczMsYDBgLDI0LDMxCisJbGJ6eAkkYWNjMDcsJFRibDEsJGFjYzA3CiAJcmx3aW5tCSRhY2MxNSwkczAsYDBgLDI0LDMxCiAJbGJ6eAkkYWNjMDgsJFRibDEsJGFjYzA4Ci0JbGJ6eAkkYWNjMDksJFRibDEsJGFjYzA5CiAJcmx3aW5tCSRzMCwkYWNjMDAsMjQsMCw3CisJbGJ6eAkkYWNjMDksJFRibDEsJGFjYzA5CiAJcmx3aW5tCSRzMSwkYWNjMDEsMjQsMCw3CiAJbGJ6eAkkYWNjMTAsJFRibDEsJGFjYzEwCi0JbGJ6eAkkYWNjMTEsJFRibDEsJGFjYzExCiAJcmx3aW5tCSRzMiwkYWNjMDIsMjQsMCw3CisJbGJ6eAkkYWNjMTEsJFRibDEsJGFjYzExCiAJcmx3aW5tCSRzMywkYWNjMDMsMjQsMCw3CiAJbGJ6eAkkYWNjMTIsJFRibDEsJGFjYzEyCi0JbGJ6eAkkYWNjMTMsJFRibDEsJGFjYzEzCiAJcmx3aW1pCSRzMCwkYWNjMDQsMTYsOCwxNQorCWxiengJJGFjYzEzLCRUYmwxLCRhY2MxMwogCXJsd2ltaQkkczEsJGFjYzA1LDE2LDgsMTUKIAlsYnp4CSRhY2MxNCwkVGJsMSwkYWNjMTQKLQlsYnp4CSRhY2MxNSwkVGJsMSwkYWNjMTUKIAlybHdpbWkJJHMyLCRhY2MwNiwxNiw4LDE1CisJbGJ6eAkkYWNjMTUsJFRibDEsJGFjYzE1CiAJcmx3aW1pCSRzMywkYWNjMDcsMTYsOCwxNQogCXJsd2ltaQkkczAsJGFjYzA4LDgsMTYsMjMKIAlybHdpbWkJJHMxLCRhY2MwOSw4LDE2LDIzCiAJcmx3aW1pCSRzMiwkYWNjMTAsOCwxNiwyMwogCXJsd2ltaQkkczMsJGFjYzExLDgsMTYsMjMKIAlsd3oJJHQwLDAoJGtleSkKLQlsd3oJJHQxLDQoJGtleSkKIAlvcgkkczAsJHMwLCRhY2MxMgorCWx3egkkdDEsNCgka2V5KQogCW9yCSRzMSwkczEsJGFjYzEzCiAJbHd6CSR0Miw4KCRrZXkpCi0JbHd6CSR0MywxMigka2V5KQogCW9yCSRzMiwkczIsJGFjYzE0CisJbHd6CSR0MywxMigka2V5KQogCW9yCSRzMywkczMsJGFjYzE1CiAKIAlhZGRpCSRrZXksJGtleSwxNgpAQCAtMTAzMCwxMiArMTIwNCwxMiBAQAogCWFuZAkkYWNjMDIsJHMyLCRtYXNrODAKIAlhbmQJJGFjYzAzLCRzMywkbWFzazgwCiAJc3J3aQkkYWNjMDQsJGFjYzAwLDcJCSMgcjE+PjcKLQlzcndpCSRhY2MwNSwkYWNjMDEsNwotCXNyd2kJJGFjYzA2LCRhY2MwMiw3Ci0Jc3J3aQkkYWNjMDcsJGFjYzAzLDcKIAlhbmRjCSRhY2MwOCwkczAsJG1hc2s4MAkjIHIwJjB4N2Y3ZjdmN2YKKwlzcndpCSRhY2MwNSwkYWNjMDEsNwogCWFuZGMJJGFjYzA5LCRzMSwkbWFzazgwCisJc3J3aQkkYWNjMDYsJGFjYzAyLDcKIAlhbmRjCSRhY2MxMCwkczIsJG1hc2s4MAorCXNyd2kJJGFjYzA3LCRhY2MwMyw3CiAJYW5kYwkkYWNjMTEsJHMzLCRtYXNrODAKIAlzdWIJJGFjYzAwLCRhY2MwMCwkYWNjMDQJIyByMS0ocjE+PjcpCiAJc3ViCSRhY2MwMSwkYWNjMDEsJGFjYzA1CkBAIC0xMDU5LDEyICsxMjMzLDEyIEBACiAJYW5kCSRhY2MwNiwkYWNjMDIsJG1hc2s4MAogCWFuZAkkYWNjMDcsJGFjYzAzLCRtYXNrODAKIAlzcndpCSRhY2MwOCwkYWNjMDQsNwkJIyByMT4+NwotCXNyd2kJJGFjYzA5LCRhY2MwNSw3Ci0Jc3J3aQkkYWNjMTAsJGFjYzA2LDcKLQlzcndpCSRhY2MxMSwkYWNjMDcsNwogCWFuZGMJJGFjYzEyLCRhY2MwMCwkbWFzazgwCSMgcjImMHg3ZjdmN2Y3ZgorCXNyd2kJJGFjYzA5LCRhY2MwNSw3CiAJYW5kYwkkYWNjMTMsJGFjYzAxLCRtYXNrODAKKwlzcndpCSRhY2MxMCwkYWNjMDYsNwogCWFuZGMJJGFjYzE0LCRhY2MwMiwkbWFzazgwCisJc3J3aQkkYWNjMTEsJGFjYzA3LDcKIAlhbmRjCSRhY2MxNSwkYWNjMDMsJG1hc2s4MAogCXN1YgkkYWNjMDQsJGFjYzA0LCRhY2MwOAkjIHIxLShyMT4+NykKIAlzdWIJJGFjYzA1LCRhY2MwNSwkYWNjMDkKQEAgLTEwODUsMTMgKzEyNTksMTMgQEAKIAogCWFuZAkkYWNjMDgsJGFjYzA0LCRtYXNrODAJIyByMT1yNCYweDgwODA4MDgwCiAJYW5kCSRhY2MwOSwkYWNjMDUsJG1hc2s4MAotCWFuZAkkYWNjMTAsJGFjYzA2LCRtYXNrODAKLQlhbmQJJGFjYzExLCRhY2MwNywkbWFzazgwCiAJc3J3aQkkYWNjMTIsJGFjYzA4LDcJCSMgcjE+PjcKKwlhbmQJJGFjYzEwLCRhY2MwNiwkbWFzazgwCiAJc3J3aQkkYWNjMTMsJGFjYzA5LDcKKwlhbmQJJGFjYzExLCRhY2MwNywkbWFzazgwCiAJc3J3aQkkYWNjMTQsJGFjYzEwLDcKLQlzcndpCSRhY2MxNSwkYWNjMTEsNwogCXN1YgkkYWNjMDgsJGFjYzA4LCRhY2MxMgkjIHIxLShyMT4+NykKKwlzcndpCSRhY2MxNSwkYWNjMTEsNwogCXN1YgkkYWNjMDksJGFjYzA5LCRhY2MxMwogCXN1YgkkYWNjMTAsJGFjYzEwLCRhY2MxNAogCXN1YgkkYWNjMTEsJGFjYzExLCRhY2MxNQpAQCAtMTEyNCwxMCArMTI5OCwxMCBAQAogJGNvZGUuPTw8X19fOwogCXJvdHJ3aQkkczAsJHMwLDgJCSMgPSBST1RBVEUocjAsOCkKIAlyb3Ryd2kJJHMxLCRzMSw4Ci0Jcm90cndpCSRzMiwkczIsOAotCXJvdHJ3aQkkczMsJHMzLDgKIAl4b3IJJHMwLCRzMCwkYWNjMDAJCSMgXj0gcjJecjAKKwlyb3Ryd2kJJHMyLCRzMiw4CiAJeG9yCSRzMSwkczEsJGFjYzAxCisJcm90cndpCSRzMywkczMsOAogCXhvcgkkczIsJHMyLCRhY2MwMgogCXhvcgkkczMsJHMzLCRhY2MwMwogCXhvcgkkYWNjMDAsJGFjYzAwLCRhY2MwOApAQCAtMTEzNSwzMiArMTMwOSwzMiBAQAogCXhvcgkkYWNjMDIsJGFjYzAyLCRhY2MxMAogCXhvcgkkYWNjMDMsJGFjYzAzLCRhY2MxMQogCXhvcgkkczAsJHMwLCRhY2MwNAkJIyBePSByNF5yMAotCXhvcgkkczEsJHMxLCRhY2MwNQotCXhvcgkkczIsJHMyLCRhY2MwNgotCXhvcgkkczMsJHMzLCRhY2MwNwogCXJvdHJ3aQkkYWNjMDAsJGFjYzAwLDI0CisJeG9yCSRzMSwkczEsJGFjYzA1CiAJcm90cndpCSRhY2MwMSwkYWNjMDEsMjQKKwl4b3IJJHMyLCRzMiwkYWNjMDYKIAlyb3Ryd2kJJGFjYzAyLCRhY2MwMiwyNAorCXhvcgkkczMsJHMzLCRhY2MwNwogCXJvdHJ3aQkkYWNjMDMsJGFjYzAzLDI0CiAJeG9yCSRhY2MwNCwkYWNjMDQsJGFjYzA4CiAJeG9yCSRhY2MwNSwkYWNjMDUsJGFjYzA5CiAJeG9yCSRhY2MwNiwkYWNjMDYsJGFjYzEwCiAJeG9yCSRhY2MwNywkYWNjMDcsJGFjYzExCiAJeG9yCSRzMCwkczAsJGFjYzA4CQkjIF49IHI4IFteKChyNF5yMCleKHIyXnIwKT1yNF5yMildCi0JeG9yCSRzMSwkczEsJGFjYzA5Ci0JeG9yCSRzMiwkczIsJGFjYzEwCi0JeG9yCSRzMywkczMsJGFjYzExCiAJcm90cndpCSRhY2MwNCwkYWNjMDQsMTYKKwl4b3IJJHMxLCRzMSwkYWNjMDkKIAlyb3Ryd2kJJGFjYzA1LCRhY2MwNSwxNgorCXhvcgkkczIsJHMyLCRhY2MxMAogCXJvdHJ3aQkkYWNjMDYsJGFjYzA2LDE2CisJeG9yCSRzMywkczMsJGFjYzExCiAJcm90cndpCSRhY2MwNywkYWNjMDcsMTYKIAl4b3IJJHMwLCRzMCwkYWNjMDAJCSMgXj0gUk9UQVRFKHI4XnIyXnIwLDI0KQotCXhvcgkkczEsJHMxLCRhY2MwMQotCXhvcgkkczIsJHMyLCRhY2MwMgotCXhvcgkkczMsJHMzLCRhY2MwMwogCXJvdHJ3aQkkYWNjMDgsJGFjYzA4LDgKKwl4b3IJJHMxLCRzMSwkYWNjMDEKIAlyb3Ryd2kJJGFjYzA5LCRhY2MwOSw4CisJeG9yCSRzMiwkczIsJGFjYzAyCiAJcm90cndpCSRhY2MxMCwkYWNjMTAsOAorCXhvcgkkczMsJHMzLCRhY2MwMwogCXJvdHJ3aQkkYWNjMTEsJGFjYzExLDgKIAl4b3IJJHMwLCRzMCwkYWNjMDQJCSMgXj0gUk9UQVRFKHI4XnI0XnIwLDE2KQogCXhvcgkkczEsJHMxLCRhY2MwNQpAQCAtMTE3OSw3ICsxMzUzLDkgQEAKIAl4b3IJJHMyLCRzMiwkdDIKIAl4b3IJJHMzLCRzMywkdDMKIAlibHIKLS5sb25nCTAKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAorCiAuYXNjaXoJIkFFUyBmb3IgUFBDLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgogLmFsaWduCTcKIF9fXwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLXMzOTB4LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzLXMzOTB4LnBsCmluZGV4IDdlMDE4ODkuLmY3NDlhNTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMvYXNtL2Flcy1zMzkweC5wbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMtczM5MHgucGwKQEAgLTQ0LDEyICs0NCw1NyBAQAogIyBVbmxpa2UgcHJldmlvdXMgdmVyc2lvbiBoYXJkd2FyZSBzdXBwb3J0IGRldGVjdGlvbiB0YWtlcyBwbGFjZSBvbmx5CiAjIGF0IHRoZSBtb21lbnQgb2Yga2V5IHNjaGVkdWxlIHNldHVwLCB3aGljaCBpcyBkZW5vdGVkIGluIGtleS0+cm91bmRzLgogIyBUaGlzIGlzIGRvbmUsIGJlY2F1c2UgZGVmZXJyZWQga2V5IHNldHVwIGNhbid0IGJlIG1hZGUgTVQtc2FmZSwgbm90Ci0jIGZvciBrZXkgbGVuZ3RoZXMgbG9uZ2VyIHRoYW4gMTI4IGJpdHMuCisjIGZvciBrZXlzIGxvbmdlciB0aGFuIDEyOCBiaXRzLgogIwogIyBBZGQgQUVTX2NiY19lbmNyeXB0LCB3aGljaCBnaXZlcyBpbmNyZWRpYmxlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LAogIyBpdCB3YXMgbWVhc3VyZWQgdG8gYmUgfjYuNnguIEl0J3MgbGVzcyB0aGFuIHByZXZpb3VzbHkgbWVudGlvbmVkIDh4LAogIyBiZWNhdXNlIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIHdhcyBvcHRpbWl6ZWQuCiAKKyMgTWF5IDIwMTAuCisjCisjIEFkZCBBRVNfY3RyMzJfZW5jcnlwdC4gSWYgaGFyZHdhcmUtYXNzaXN0ZWQsIGl0IHByb3ZpZGVzIHVwIHRvIDQuM3gKKyMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3ZlciAiZ2VuZXJpYyIgY291bnRlciBtb2RlIHJvdXRpbmUgcmVseWluZworIyBvbiBzaW5nbGUtYmxvY2ssIGFsc28gaGFyZHdhcmUtYXNzaXN0ZWQsIEFFU19lbmNyeXB0LiAiVXAgdG8iIHJlZmVycworIyB0byB0aGUgZmFjdCB0aGF0IGV4YWN0IHRocm91Z2hwdXQgdmFsdWUgZGVwZW5kcyBvbiBjdXJyZW50IHN0YWNrCisjIGZyYW1lIGFsaWdubWVudCB3aXRoaW4gNEtCIHBhZ2UuIEluIHdvcnN0IGNhc2UgeW91IGdldCB+NzUlIG9mIHRoZQorIyBtYXhpbXVtLCBidXQgKm9uIGF2ZXJhZ2UqIGl0IHdvdWxkIGJlIGFzIG11Y2ggYXMgfjk4JS4gTWVhbmluZyB0aGF0CisjIHdvcnN0IGNhc2UgaXMgdW5saWtlLCBpdCdzIGxpa2UgaGl0dGluZyByYXZpbmUgb24gcGxhdGVhdS4KKworIyBOb3ZlbWJlciAyMDEwLgorIworIyBBZGFwdCBmb3IgLW0zMSBidWlsZC4gSWYga2VybmVsIHN1cHBvcnRzIHdoYXQncyBjYWxsZWQgImhpZ2hncHJzIgorIyBmZWF0dXJlIG9uIExpbnV4IFtzZWUgL3Byb2MvY3B1aW5mb10sIGl0J3MgcG9zc2libGUgdG8gdXNlIDY0LWJpdAorIyBpbnN0cnVjdGlvbnMgYW5kIGFjaGlldmUgIjY0LWJpdCIgcGVyZm9ybWFuY2UgZXZlbiBpbiAzMS1iaXQgbGVnYWN5CisjIGFwcGxpY2F0aW9uIGNvbnRleHQuIFRoZSBmZWF0dXJlIGlzIG5vdCBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhcgorIyBwcm9jZXNzb3IsIGFzIGxvbmcgYXMgaXQncyAiei1DUFUiLiBMYXR0ZXIgaW1wbGllcyB0aGF0IHRoZSBjb2RlCisjIHJlbWFpbnMgei9BcmNoaXRlY3R1cmUgc3BlY2lmaWMuIE9uIHo5OTAgaXQgd2FzIG1lYXN1cmVkIHRvIHBlcmZvcm0KKyMgMnggYmV0dGVyIHRoYW4gY29kZSBnZW5lcmF0ZWQgYnkgZ2NjIDQuMy4KKworIyBEZWNlbWJlciAyMDEwLgorIworIyBBZGQgc3VwcG9ydCBmb3IgejE5NiAiY2lwaGVyIG1lc3NhZ2Ugd2l0aCBjb3VudGVyIiBpbnN0cnVjdGlvbi4KKyMgTm90ZSBob3dldmVyIHRoYXQgaXQncyBkaXNlbmdhZ2VkLCBiZWNhdXNlIGl0IHdhcyBtZWFzdXJlZCB0bworIyBwZXJmb3JtIH4xMiUgd29yc2UgdGhhbiB2YW5pbGxhIGttLWJhc2VkIGNvZGUuLi4KKworIyBGZWJydWFyeSAyMDExLgorIworIyBBZGQgQUVTX3h0c19bZW58ZGVdY3J5cHQuIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCBmb3IgejE5NiBrbS14dHMtYWVzCisjIGluc3RydWN0aW9ucywgd2hpY2ggZGVsaXZlciB+NzAlIGltcHJvdmVtZW50IGF0IDhLQiBibG9jayBzaXplIG92ZXIKKyMgdmFuaWxsYSBrbS1iYXNlZCBjb2RlLCAzNyUgLSBhdCBtb3N0IGxpa2UgNTEyLWJ5dGVzIGJsb2NrIHNpemUuCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvM1sxMl0vKSB7CisJJFNJWkVfVD00OworCSRnPSIiOworfSBlbHNlIHsKKwkkU0laRV9UPTg7CisJJGc9ImciOworfQorCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKwogJHNvZnRvbmx5PTA7CSMgYWxsb3cgaGFyZHdhcmUgc3VwcG9ydAogCiAkdDA9IiVyMCI7CSRtYXNrPSIlcjAiOwpAQCAtNjksNiArMTE0LDggQEAKICRyYT0iJXIxNCI7CiAkc3A9IiVyMTUiOwogCiskc3RkZnJhbWU9MTYqJFNJWkVfVCs0Kjg7CisKIHN1YiBfZGF0YV93b3JkKCkKIHsgbXkgJGk7CiAgICAgd2hpbGUoZGVmaW5lZCgkaT1zaGlmdCkpIHsgJGNvZGUuPXNwcmludGYiLmxvbmdcdDB4JTA4eCwweCUwOHhcbiIsJGksJGk7IH0KQEAgLTIxMCw3ICsyNTcsNyBAQAogLkxlc29mdDoKIF9fXwogJGNvZGUuPTw8X19fOwotCXN0bWcJJXIzLCRyYSwyNCgkc3ApCisJc3RtJHtnfQklcjMsJHJhLDMqJFNJWkVfVCgkc3ApCiAKIAlsbGdmCSRzMCwwKCRpbnApCiAJbGxnZgkkczEsNCgkaW5wKQpAQCAtMjIwLDIwICsyNjcsMjAgQEAKIAlsYXJsCSR0YmwsQUVTX1RlCiAJYnJhcwkkcmEsX3MzOTB4X0FFU19lbmNyeXB0CiAKLQlsZwkkb3V0LDI0KCRzcCkKKwlsJHtnfQkkb3V0LDMqJFNJWkVfVCgkc3ApCiAJc3QJJHMwLDAoJG91dCkKIAlzdAkkczEsNCgkb3V0KQogCXN0CSRzMiw4KCRvdXQpCiAJc3QJJHMzLDEyKCRvdXQpCiAKLQlsbWcJJXI2LCRyYSw0OCgkc3ApCisJbG0ke2d9CSVyNiwkcmEsNiokU0laRV9UKCRzcCkKIAlicgkkcmEKIC5zaXplCUFFU19lbmNyeXB0LC4tQUVTX2VuY3J5cHQKIAogLnR5cGUgICBfczM5MHhfQUVTX2VuY3J5cHQsXEBmdW5jdGlvbgogLmFsaWduCTE2CiBfczM5MHhfQUVTX2VuY3J5cHQ6Ci0Jc3RnCSRyYSwxNTIoJHNwKQorCXN0JHtnfQkkcmEsMTUqJFNJWkVfVCgkc3ApCiAJeAkkczAsMCgka2V5KQogCXgJJHMxLDQoJGtleSkKIAl4CSRzMiw4KCRrZXkpCkBAIC0zOTcsNyArNDQ0LDcgQEAKIAlvcgkkczIsJGkzCiAJb3IJJHMzLCR0MwogCi0JbGcJJHJhLDE1Migkc3ApCisJbCR7Z30JJHJhLDE1KiRTSVpFX1QoJHNwKQogCXhyCSRzMCwkdDAKIAl4cgkkczEsJHQyCiAJeAkkczIsMjQoJGtleSkKQEAgLTUzNiw3ICs1ODMsNyBAQAogLkxkc29mdDoKIF9fXwogJGNvZGUuPTw8X19fOwotCXN0bWcJJXIzLCRyYSwyNCgkc3ApCisJc3RtJHtnfQklcjMsJHJhLDMqJFNJWkVfVCgkc3ApCiAKIAlsbGdmCSRzMCwwKCRpbnApCiAJbGxnZgkkczEsNCgkaW5wKQpAQCAtNTQ2LDIwICs1OTMsMjAgQEAKIAlsYXJsCSR0YmwsQUVTX1RkCiAJYnJhcwkkcmEsX3MzOTB4X0FFU19kZWNyeXB0CiAKLQlsZwkkb3V0LDI0KCRzcCkKKwlsJHtnfQkkb3V0LDMqJFNJWkVfVCgkc3ApCiAJc3QJJHMwLDAoJG91dCkKIAlzdAkkczEsNCgkb3V0KQogCXN0CSRzMiw4KCRvdXQpCiAJc3QJJHMzLDEyKCRvdXQpCiAKLQlsbWcJJXI2LCRyYSw0OCgkc3ApCisJbG0ke2d9CSVyNiwkcmEsNiokU0laRV9UKCRzcCkKIAlicgkkcmEKIC5zaXplCUFFU19kZWNyeXB0LC4tQUVTX2RlY3J5cHQKIAogLnR5cGUgICBfczM5MHhfQUVTX2RlY3J5cHQsXEBmdW5jdGlvbgogLmFsaWduCTE2CiBfczM5MHhfQUVTX2RlY3J5cHQ6Ci0Jc3RnCSRyYSwxNTIoJHNwKQorCXN0JHtnfQkkcmEsMTUqJFNJWkVfVCgkc3ApCiAJeAkkczAsMCgka2V5KQogCXgJJHMxLDQoJGtleSkKIAl4CSRzMiw4KCRrZXkpCkBAIC03MDMsNyArNzUwLDcgQEAKIAlucgkkaTEsJG1hc2sKIAlucgkkaTIsJG1hc2sKIAotCWxnCSRyYSwxNTIoJHNwKQorCWwke2d9CSRyYSwxNSokU0laRV9UKCRzcCkKIAlvcgkkczEsJHQxCiAJbAkkdDAsMTYoJGtleSkKIAlsCSR0MSwyMCgka2V5KQpAQCAtNzMyLDE0ICs3NzksMTQgQEAKICRjb2RlLj08PF9fXzsKICMgdm9pZCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgYml0cywKICMgCQkgQUVTX0tFWSAqa2V5KSB7Ci0uZ2xvYmwJQUVTX3NldF9lbmNyeXB0X2tleQotLnR5cGUJQUVTX3NldF9lbmNyeXB0X2tleSxcQGZ1bmN0aW9uCisuZ2xvYmwJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisudHlwZQlwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXksXEBmdW5jdGlvbgogLmFsaWduCTE2Ci1BRVNfc2V0X2VuY3J5cHRfa2V5OgorcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5OgogCWxnaGkJJHQwLDAKLQljbGdyCSRpbnAsJHQwCisJY2wke2d9cgkkaW5wLCR0MAogCWplCS5MbWludXMxCi0JY2xncgkka2V5LCR0MAorCWNsJHtnfXIJJGtleSwkdDAKIAlqZQkuTG1pbnVzMQogCiAJbGdoaQkkdDAsMTI4CkBAIC03OTcsNyArODQ0LDcgQEAKICRjb2RlLj08PF9fXzsKIC5hbGlnbgkxNgogLkxla2V5X2ludGVybmFsOgotCXN0bWcJJXI2LCVyMTMsNDgoJHNwKQkjIGFsbCBub24tdm9sYXRpbGUgcmVncworCXN0bSR7Z30JJXI2LCVyMTMsNiokU0laRV9UKCRzcCkJIyBhbGwgbm9uLXZvbGF0aWxlIHJlZ3MKIAogCWxhcmwJJHRibCxBRVNfVGUrMjA0OAogCkBAIC04NTgsNyArOTA1LDcgQEAKIAlsYQkkdDMsNCgkdDMpCQkjIGkrKwogCWJyY3QJJHJvdW5kcywuTDEyOF9sb29wCiAJbGdoaQklcjIsMAotCWxtZwklcjYsJXIxMyw0OCgkc3ApCisJbG0ke2d9CSVyNiwlcjEzLDYqJFNJWkVfVCgkc3ApCiAJYnIJJHJhCiAKIC5hbGlnbgkxNgpAQCAtOTA2LDcgKzk1Myw3IEBACiAJc3QJJHMzLDM2KCRrZXkpCiAJYnJjdAkkcm91bmRzLC5MMTkyX2NvbnRpbnVlCiAJbGdoaQklcjIsMAotCWxtZwklcjYsJXIxMyw0OCgkc3ApCisJbG0ke2d9CSVyNiwlcjEzLDYqJFNJWkVfVCgkc3ApCiAJYnIJJHJhCiAKIC5hbGlnbgkxNgpAQCAtOTY4LDcgKzEwMTUsNyBAQAogCXN0CSRzMyw0NCgka2V5KQogCWJyY3QJJHJvdW5kcywuTDI1Nl9jb250aW51ZQogCWxnaGkJJXIyLDAKLQlsbWcJJXI2LCVyMTMsNDgoJHNwKQorCWxtJHtnfQklcjYsJXIxMyw2KiRTSVpFX1QoJHNwKQogCWJyCSRyYQogCiAuYWxpZ24JMTYKQEAgLTEwMTEsMTkgKzEwNTgsMTkgQEAKIC5MbWludXMxOgogCWxnaGkJJXIyLC0xCiAJYnIJJHJhCi0uc2l6ZQlBRVNfc2V0X2VuY3J5cHRfa2V5LC4tQUVTX3NldF9lbmNyeXB0X2tleQorLnNpemUJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5LC4tcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CiAKICMgdm9pZCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgYml0cywKICMgCQkgQUVTX0tFWSAqa2V5KSB7Ci0uZ2xvYmwJQUVTX3NldF9kZWNyeXB0X2tleQotLnR5cGUJQUVTX3NldF9kZWNyeXB0X2tleSxcQGZ1bmN0aW9uCisuZ2xvYmwJcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CisudHlwZQlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXksXEBmdW5jdGlvbgogLmFsaWduCTE2Ci1BRVNfc2V0X2RlY3J5cHRfa2V5OgotCXN0Zwkka2V5LDMyKCRzcCkJCSMgSSByZWx5IG9uIEFFU19zZXRfZW5jcnlwdF9rZXkgdG8KLQlzdGcJJHJhLDExMigkc3ApCQkjIHNhdmUgbm9uLXZvbGF0aWxlIHJlZ2lzdGVycyEKK3ByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleToKKwlzdCR7Z30JJGtleSw0KiRTSVpFX1QoJHNwKQkjIEkgcmVseSBvbiBBRVNfc2V0X2VuY3J5cHRfa2V5IHRvCisJc3Qke2d9CSRyYSwxNCokU0laRV9UKCRzcCkJIyBzYXZlIG5vbi12b2xhdGlsZSByZWdpc3RlcnMhCiAJYnJhcwkkcmEsQUVTX3NldF9lbmNyeXB0X2tleQotCWxnCSRrZXksMzIoJHNwKQotCWxnCSRyYSwxMTIoJHNwKQorCWwke2d9CSRrZXksNCokU0laRV9UKCRzcCkKKwlsJHtnfQkkcmEsMTQqJFNJWkVfVCgkc3ApCiAJbHRncgklcjIsJXIyCiAJYm56cgkkcmEKIF9fXwpAQCAtMTAzOCwxMSArMTA4NSwxMSBAQAogCiAuYWxpZ24JMTYKIC5MZGtleV9pbnRlcm5hbDoKLQlzdGcJJGtleSwzMigkc3ApCi0Jc3RnCSRyYSw0MCgkc3ApCisJc3Qke2d9CSRrZXksNCokU0laRV9UKCRzcCkKKwlzdCR7Z30JJHJhLDE0KiRTSVpFX1QoJHNwKQogCWJyYXMJJHJhLC5MZWtleV9pbnRlcm5hbAotCWxnCSRrZXksMzIoJHNwKQotCWxnCSRyYSw0MCgkc3ApCisJbCR7Z30JJGtleSw0KiRTSVpFX1QoJHNwKQorCWwke2d9CSRyYSwxNCokU0laRV9UKCRzcCkKIF9fXwogJGNvZGUuPTw8X19fOwogCkBAIC0xMTIzLDEzICsxMTcwLDE0IEBACiAJbGEJJGtleSw0KCRrZXkpCiAJYnJjdAkkcm91bmRzLC5MbWl4CiAKLQlsbWcJJXI2LCVyMTMsNDgoJHNwKSMgYXMgd2FzIHNhdmVkIGJ5IEFFU19zZXRfZW5jcnlwdF9rZXkhCisJbG0ke2d9CSVyNiwlcjEzLDYqJFNJWkVfVCgkc3ApIyBhcyB3YXMgc2F2ZWQgYnkgQUVTX3NldF9lbmNyeXB0X2tleSEKIAlsZ2hpCSVyMiwwCiAJYnIJJHJhCi0uc2l6ZQlBRVNfc2V0X2RlY3J5cHRfa2V5LC4tQUVTX3NldF9kZWNyeXB0X2tleQorLnNpemUJcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5LC4tcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CiBfX18KIAotI3ZvaWQgQUVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBBRVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKICMgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCiAjICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYykKIHsKQEAgLTExNjMsNyArMTIxMSw3IEBACiAJbAklcjAsMjQwKCRrZXkpCSMgbG9hZCBrbWMgY29kZQogCWxnaGkJJGtleSwxNQkJIyByZXM9bGVuJTE2LCBsZW4tPXJlczsKIAluZ3IJJGtleSwkbGVuCi0Jc2xncgkkbGVuLCRrZXkKKwlzbCR7Z31yCSRsZW4sJGtleQogCWxhCSVyMSwxNigkc3ApCSMgcGFyYW1ldGVyIGJsb2NrIC0gaXZlYyB8fCBrZXkKIAlqegkuTGttY190cnVuY2F0ZWQKIAkubG9uZwkweGI5MmYwMDQyCSMga21jICVyNCwlcjIKQEAgLTExODEsMzQgKzEyMjksMzQgQEAKIAl0bWxsCSVyMCwweDgwCiAJam56CS5Ma21jX3RydW5jYXRlZF9kZWMKIAlsZ2hpCSVyMSwwCi0Jc3RnCSVyMSwxMjgoJHNwKQotCXN0ZwklcjEsMTM2KCRzcCkKKwlzdGcJJXIxLDE2KiRTSVpFX1QoJHNwKQorCXN0ZwklcjEsMTYqJFNJWkVfVCs4KCRzcCkKIAlicmFzCSVyMSwxZgotCW12YwkxMjgoMSwkc3ApLDAoJGlucCkKKwltdmMJMTYqJFNJWkVfVCgxLCRzcCksMCgkaW5wKQogMToJZXgJJGtleSwwKCVyMSkKIAlsYQklcjEsMTYoJHNwKQkjIHJlc3RvcmUgcGFyYW1ldGVyIGJsb2NrCi0JbGEJJGlucCwxMjgoJHNwKQorCWxhCSRpbnAsMTYqJFNJWkVfVCgkc3ApCiAJbGdoaQkkbGVuLDE2CiAJLmxvbmcJMHhiOTJmMDA0MgkjIGttYyAlcjQsJXIyCiAJagkuTGttY19kb25lCiAuYWxpZ24JMTYKIC5Ma21jX3RydW5jYXRlZF9kZWM6Ci0Jc3RnCSRvdXQsNjQoJHNwKQotCWxhCSRvdXQsMTI4KCRzcCkKKwlzdCR7Z30JJG91dCw0KiRTSVpFX1QoJHNwKQorCWxhCSRvdXQsMTYqJFNJWkVfVCgkc3ApCiAJbGdoaQkkbGVuLDE2CiAJLmxvbmcJMHhiOTJmMDA0MgkjIGttYyAlcjQsJXIyCi0JbGcJJG91dCw2NCgkc3ApCisJbCR7Z30JJG91dCw0KiRTSVpFX1QoJHNwKQogCWJyYXMJJXIxLDJmCi0JbXZjCTAoMSwkb3V0KSwxMjgoJHNwKQorCW12YwkwKDEsJG91dCksMTYqJFNJWkVfVCgkc3ApCiAyOglleAkka2V5LDAoJXIxKQogCWoJLkxrbWNfZG9uZQogLmFsaWduCTE2CiAuTGNiY19zb2Z0d2FyZToKIF9fXwogJGNvZGUuPTw8X19fOwotCXN0bWcJJGtleSwkcmEsNDAoJHNwKQorCXN0bSR7Z30JJGtleSwkcmEsNSokU0laRV9UKCRzcCkKIAlsaGkJJXIwLDAKLQljbAklcjAsMTY0KCRzcCkKKwljbAklcjAsYCRzdGRmcmFtZSskU0laRV9ULTRgKCRzcCkKIAlqZQkuTGNiY19kZWNyeXB0CiAKIAlsYXJsCSR0YmwsQUVTX1RlCkBAIC0xMjE5LDEwICsxMjY3LDEwIEBACiAJbGxnZgkkczMsMTIoJGl2cCkKIAogCWxnaGkJJHQwLDE2Ci0Jc2xncgkkbGVuLCR0MAorCXNsJHtnfXIJJGxlbiwkdDAKIAlicmMJNCwuTGNiY19lbmNfdGFpbAkjIGlmIGJvcnJvdwogLkxjYmNfZW5jX2xvb3A6Ci0Jc3RtZwkkaW5wLCRvdXQsMTYoJHNwKQorCXN0bSR7Z30JJGlucCwkb3V0LDIqJFNJWkVfVCgkc3ApCiAJeAkkczAsMCgkaW5wKQogCXgJJHMxLDQoJGlucCkKIAl4CSRzMiw4KCRpbnApCkBAIC0xMjMxLDcgKzEyNzksNyBAQAogCiAJYnJhcwkkcmEsX3MzOTB4X0FFU19lbmNyeXB0CiAKLQlsbWcJJGlucCwka2V5LDE2KCRzcCkKKwlsbSR7Z30JJGlucCwka2V5LDIqJFNJWkVfVCgkc3ApCiAJc3QJJHMwLDAoJG91dCkKIAlzdAkkczEsNCgkb3V0KQogCXN0CSRzMiw4KCRvdXQpCkBAIC0xMjQwLDMzICsxMjg4LDMzIEBACiAJbGEJJGlucCwxNigkaW5wKQogCWxhCSRvdXQsMTYoJG91dCkKIAlsZ2hpCSR0MCwxNgotCWx0Z3IJJGxlbiwkbGVuCisJbHQke2d9cgkkbGVuLCRsZW4KIAlqegkuTGNiY19lbmNfZG9uZQotCXNsZ3IJJGxlbiwkdDAKKwlzbCR7Z31yCSRsZW4sJHQwCiAJYnJjCTQsLkxjYmNfZW5jX3RhaWwJIyBpZiBib3Jyb3cKIAlqCS5MY2JjX2VuY19sb29wCiAuYWxpZ24JMTYKIC5MY2JjX2VuY19kb25lOgotCWxnCSRpdnAsNDgoJHNwKQorCWwke2d9CSRpdnAsNiokU0laRV9UKCRzcCkKIAlzdAkkczAsMCgkaXZwKQogCXN0CSRzMSw0KCRpdnApCQogCXN0CSRzMiw4KCRpdnApCiAJc3QJJHMzLDEyKCRpdnApCiAKLQlsbWcJJXI3LCRyYSw1Nigkc3ApCisJbG0ke2d9CSVyNywkcmEsNyokU0laRV9UKCRzcCkKIAlicgkkcmEKIAogLmFsaWduCTE2CiAuTGNiY19lbmNfdGFpbDoKIAlhZ2hpCSRsZW4sMTUKIAlsZ2hpCSR0MCwwCi0Jc3RnCSR0MCwxMjgoJHNwKQotCXN0ZwkkdDAsMTM2KCRzcCkKKwlzdGcJJHQwLDE2KiRTSVpFX1QoJHNwKQorCXN0ZwkkdDAsMTYqJFNJWkVfVCs4KCRzcCkKIAlicmFzCSR0MSwzZgotCW12YwkxMjgoMSwkc3ApLDAoJGlucCkKKwltdmMJMTYqJFNJWkVfVCgxLCRzcCksMCgkaW5wKQogMzoJZXgJJGxlbiwwKCR0MSkKIAlsZ2hpCSRsZW4sMAotCWxhCSRpbnAsMTI4KCRzcCkKKwlsYQkkaW5wLDE2KiRTSVpFX1QoJHNwKQogCWoJLkxjYmNfZW5jX2xvb3AKIAogLmFsaWduCTE2CkBAIC0xMjc1LDEwICsxMzIzLDEwIEBACiAKIAlsZwkkdDAsMCgkaXZwKQogCWxnCSR0MSw4KCRpdnApCi0Jc3RtZwkkdDAsJHQxLDEyOCgkc3ApCisJc3RtZwkkdDAsJHQxLDE2KiRTSVpFX1QoJHNwKQogCiAuTGNiY19kZWNfbG9vcDoKLQlzdG1nCSRpbnAsJG91dCwxNigkc3ApCisJc3RtJHtnfQkkaW5wLCRvdXQsMiokU0laRV9UKCRzcCkKIAlsbGdmCSRzMCwwKCRpbnApCiAJbGxnZgkkczEsNCgkaW5wKQogCWxsZ2YJJHMyLDgoJGlucCkKQEAgLTEyODcsNyArMTMzNSw3IEBACiAKIAlicmFzCSRyYSxfczM5MHhfQUVTX2RlY3J5cHQKIAotCWxtZwkkaW5wLCRrZXksMTYoJHNwKQorCWxtJHtnfQkkaW5wLCRrZXksMiokU0laRV9UKCRzcCkKIAlzbGxnCSRzMCwkczAsMzIKIAlzbGxnCSRzMiwkczIsMzIKIAlscgkkczAsJHMxCkBAIC0xMjk1LDE1ICsxMzQzLDE1IEBACiAKIAlsZwkkdDAsMCgkaW5wKQogCWxnCSR0MSw4KCRpbnApCi0JeGcJJHMwLDEyOCgkc3ApCi0JeGcJJHMyLDEzNigkc3ApCisJeGcJJHMwLDE2KiRTSVpFX1QoJHNwKQorCXhnCSRzMiwxNiokU0laRV9UKzgoJHNwKQogCWxnaGkJJHMxLDE2Ci0Jc2xncgkkbGVuLCRzMQorCXNsJHtnfXIJJGxlbiwkczEKIAlicmMJNCwuTGNiY19kZWNfdGFpbAkjIGlmIGJvcnJvdwogCWJyYwkyLC5MY2JjX2RlY19kb25lCSMgaWYgemVybwogCXN0ZwkkczAsMCgkb3V0KQogCXN0ZwkkczIsOCgkb3V0KQotCXN0bWcJJHQwLCR0MSwxMjgoJHNwKQorCXN0bWcJJHQwLCR0MSwxNiokU0laRV9UKCRzcCkKIAogCWxhCSRpbnAsMTYoJGlucCkKIAlsYQkkb3V0LDE2KCRvdXQpCkBAIC0xMzEzLDcgKzEzNjEsNyBAQAogCXN0ZwkkczAsMCgkb3V0KQogCXN0ZwkkczIsOCgkb3V0KQogLkxjYmNfZGVjX2V4aXQ6Ci0JbG1nCSRpdnAsJHJhLDQ4KCRzcCkKKwlsbSR7Z30JJXI2LCRyYSw2KiRTSVpFX1QoJHNwKQogCXN0bWcJJHQwLCR0MSwwKCRpdnApCiAKIAlicgkkcmEKQEAgLTEzMjEsMTkgKzEzNjksODg5IEBACiAuYWxpZ24JMTYKIC5MY2JjX2RlY190YWlsOgogCWFnaGkJJGxlbiwxNQotCXN0ZwkkczAsMTI4KCRzcCkKLQlzdGcJJHMyLDEzNigkc3ApCisJc3RnCSRzMCwxNiokU0laRV9UKCRzcCkKKwlzdGcJJHMyLDE2KiRTSVpFX1QrOCgkc3ApCiAJYnJhcwkkczEsNGYKLQltdmMJMCgxLCRvdXQpLDEyOCgkc3ApCisJbXZjCTAoMSwkb3V0KSwxNiokU0laRV9UKCRzcCkKIDQ6CWV4CSRsZW4sMCgkczEpCiAJagkuTGNiY19kZWNfZXhpdAogLnNpemUJQUVTX2NiY19lbmNyeXB0LC4tQUVTX2NiY19lbmNyeXB0Ci0uY29tbSAgT1BFTlNTTF9zMzkweGNhcF9QLDgsOAorX19fCit9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBBRVNfY3RyMzJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorIyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBibG9ja3MsIGNvbnN0IEFFU19LRVkgKmtleSwKKyMgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdmVjKQoreworbXkgJGlucD0iJXIyIjsKK215ICRvdXQ9IiVyNCI7CSMgYmxvY2tzIGFuZCBvdXQgYXJlIHN3YXBwZWQKK215ICRsZW49IiVyMyI7CitteSAka2V5PSIlcjUiOwlteSAkaXYwPSIlcjUiOworbXkgJGl2cD0iJXI2IjsKK215ICRmcCA9IiVyNyI7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlBRVNfY3RyMzJfZW5jcnlwdAorLnR5cGUJQUVTX2N0cjMyX2VuY3J5cHQsXEBmdW5jdGlvbgorLmFsaWduCTE2CitBRVNfY3RyMzJfZW5jcnlwdDoKKwl4Z3IJJXIzLCVyNAkJIyBmbGlwICVyMyBhbmQgJXI0LCAkb3V0IGFuZCAkbGVuCisJeGdyCSVyNCwlcjMKKwl4Z3IJJXIzLCVyNAorCWxsZ2ZyCSRsZW4sJGxlbgkjIHNhZmUgaW4gY3RyMzIgc3Vicm91dGluZSBldmVuIGluIDY0LWJpdCBjYXNlCitfX18KKyRjb2RlLj08PF9fXyBpZiAoISRzb2Z0b25seSk7CisJbAklcjAsMjQwKCRrZXkpCisJbGhpCSVyMSwxNgorCWNscgklcjAsJXIxCisJamwJLkxjdHIzMl9zb2Z0d2FyZQorCisJc3RtJHtnfQklcjYsJHMzLDYqJFNJWkVfVCgkc3ApCisKKwlzbGdyCSRvdXQsJGlucAorCWxhCSVyMSwwKCRrZXkpCSMgJXIxIGlzIHBlcm1hbmVudCBjb3B5IG9mICRrZXkKKwlsZwkkaXYwLDAoJGl2cCkJIyBsb2FkIGl2ZWMKKwlsZwkkaXZwLDgoJGl2cCkKKworCSMgcHJlcGFyZSBhbmQgYWxsb2NhdGUgc3RhY2sgZnJhbWUgYXQgdGhlIHRvcCBvZiA0SyBwYWdlCisJIyB3aXRoIDFLIHJlc2VydmVkIGZvciBldmVudHVhbCBzaWduYWwgaGFuZGxpbmcKKwlsZ2hpCSRzMCwtMTAyNC0yNTYtMTYjIGd1YXJhbnRlZSBhdCBsZWFzdCAyNTYtYnl0ZXMgYnVmZmVyCisJbGdoaQkkczEsLTQwOTYKKwlhbGdyCSRzMCwkc3AKKwlsZ3IJJGZwLCRzcAorCW5ncgkkczAsJHMxCQkjIGFsaWduIGF0IHBhZ2UgYm91bmRhcnkKKwlzbGdyCSRmcCwkczAJCSMgdG90YWwgYnVmZmVyIHNpemUKKwlsZ3IJJHMyLCRzcAorCWxnaGkJJHMxLDEwMjQrMTYJIyBzbFtnXWZpIGlzIGV4dGVuZGVkLWltbWVkaWF0ZSBmYWNpbGl0eQorCXNsZ3IJJGZwLCRzMQkJIyBkZWR1Y3QgcmVzZXJ2YXRpb24gdG8gZ2V0IHVzYWJsZSBidWZmZXIgc2l6ZQorCSMgYnVmZmVyIHNpemUgaXMgYXQgbGVzdCAyNTYgYW5kIGF0IG1vc3QgMzA3MisyNTYtMTYKKworCWxhCSRzcCwxMDI0KCRzMCkJIyBhbGxvY2EKKwlzcmxnCSRmcCwkZnAsNAkjIGNvbnZlcnQgYnl0ZXMgdG8gYmxvY2tzLCBtaW5pbXVtIDE2CisJc3Qke2d9CSRzMiwwKCRzcCkJIyBiYWNrLWNoYWluCisJc3Qke2d9CSRmcCwkU0laRV9UKCRzcCkKKworCXNsZ3IJJGxlbiwkZnAKKwlicmMJMSwuTGN0cjMyX2h3X3N3aXRjaAkjIG5vdCB6ZXJvLCBubyBib3Jyb3cKKwlhbGdyCSRmcCwkbGVuCSMgaW5wdXQgaXMgc2hvcnRlciB0aGFuIGFsbG9jYXRlZCBidWZmZXIKKwlsZ2hpCSRsZW4sMAorCXN0JHtnfQkkZnAsJFNJWkVfVCgkc3ApCisKKy5MY3RyMzJfaHdfc3dpdGNoOgorX19fCiskY29kZS49PDxfX18gaWYgKDApOwkjIyMjIyMjIyMga21jdHIgY29kZSB3YXMgbWVhc3VyZWQgdG8gYmUgfjEyJSBzbG93ZXIKKwlsYXJsCSRzMCxPUEVOU1NMX3MzOTB4Y2FwX1AKKwlsZwkkczAsOCgkczApCisJdG1oaAkkczAsMHgwMDA0CSMgY2hlY2sgZm9yIG1lc3NhZ2Vfc2VjdXJpdHktYXNzaXN0LTQKKwlqegkuTGN0cjMyX2ttX2xvb3AKKworCWxsZ2ZyCSRzMCwlcjAKKwlsZ3IJJHMxLCVyMQorCWxnaGkJJXIwLDAKKwlsYQklcjEsMTYoJHNwKQorCS5sb25nCTB4YjkyZDIwNDIJIyBrbWN0ciAlcjQsJXIyLCVyMgorCisJbGxpaGgJJXIwLDB4ODAwMAkjIGNoZWNrIGlmIGttY3RyIHN1cHBvcnRzIHRoZSBmdW5jdGlvbiBjb2RlCisJc3JsZwklcjAsJXIwLDAoJHMwKQorCW5nCSVyMCwxNigkc3ApCisJbGdyCSVyMCwkczAKKwlsZ3IJJXIxLCRzMQorCWp6CS5MY3RyMzJfa21fbG9vcAorCisjIyMjIyMjIGttY3RyIGNvZGUKKwlhbGdyCSRvdXQsJGlucAkjIHJlc3RvcmUgJG91dAorCWxncgkkczEsJGxlbgkjICRzMSB1bmRlcnRha2VzICRsZW4KKwlqCS5MY3RyMzJfa21jdHJfbG9vcAorLmFsaWduCTE2CisuTGN0cjMyX2ttY3RyX2xvb3A6CisJbGEJJHMyLDE2KCRzcCkKKwlsZ3IJJHMzLCRmcAorLkxjdHIzMl9rbWN0cl9wcmVwYXJlOgorCXN0ZwkkaXYwLDAoJHMyKQorCXN0ZwkkaXZwLDgoJHMyKQorCWxhCSRzMiwxNigkczIpCisJYWhpCSRpdnAsMQkJIyAzMi1iaXQgaW5jcmVtZW50LCBwcmVzZXJ2ZXMgdXBwZXIgaGFsZgorCWJyY3QJJHMzLC5MY3RyMzJfa21jdHJfcHJlcGFyZQorCisJI2xhCSRpbnAsMCgkaW5wKQkjIGlucAorCXNsbGcJJGxlbiwkZnAsNAkjIGxlbgorCSNsYQkkb3V0LDAoJG91dCkJIyBvdXQKKwlsYQkkczIsMTYoJHNwKQkjIGl2CisJLmxvbmcJMHhiOTJkYTA0MgkjIGttY3RyICRvdXQsJHMyLCRpbnAKKwlicmMJMSwuLTQJCSMgcGF5IGF0dGVudGlvbiB0byAicGFydGlhbCBjb21wbGV0aW9uIgorCisJc2xncgkkczEsJGZwCisJYnJjCTEsLkxjdHIzMl9rbWN0cl9sb29wCSMgbm90IHplcm8sIG5vIGJvcnJvdworCWFsZ3IJJGZwLCRzMQorCWxnaGkJJHMxLDAKKwlicmMJNCsxLC5MY3RyMzJfa21jdHJfbG9vcAkjIG5vdCB6ZXJvCisKKwlsJHtnfQkkc3AsMCgkc3ApCisJbG0ke2d9CSVyNiwkczMsNiokU0laRV9UKCRzcCkKKwlicgkkcmEKKy5hbGlnbgkxNgorX19fCiskY29kZS49PDxfX187CisuTGN0cjMyX2ttX2xvb3A6CisJbGEJJHMyLDE2KCRzcCkKKwlsZ3IJJHMzLCRmcAorLkxjdHIzMl9rbV9wcmVwYXJlOgorCXN0ZwkkaXYwLDAoJHMyKQorCXN0ZwkkaXZwLDgoJHMyKQorCWxhCSRzMiwxNigkczIpCisJYWhpCSRpdnAsMQkJIyAzMi1iaXQgaW5jcmVtZW50LCBwcmVzZXJ2ZXMgdXBwZXIgaGFsZgorCWJyY3QJJHMzLC5MY3RyMzJfa21fcHJlcGFyZQorCisJbGEJJHMwLDE2KCRzcCkJIyBpbnAKKwlzbGxnCSRzMSwkZnAsNAkjIGxlbgorCWxhCSRzMiwxNigkc3ApCSMgb3V0CisJLmxvbmcJMHhiOTJlMDBhOAkjIGttICVyMTAsJXI4CisJYnJjCTEsLi00CQkjIHBheSBhdHRlbnRpb24gdG8gInBhcnRpYWwgY29tcGxldGlvbiIKKworCWxhCSRzMiwxNigkc3ApCisJbGdyCSRzMywkZnAKKwlzbGdyCSRzMiwkaW5wCisuTGN0cjMyX2ttX3hvcjoKKwlsZwkkczAsMCgkaW5wKQorCWxnCSRzMSw4KCRpbnApCisJeGcJJHMwLDAoJHMyLCRpbnApCisJeGcJJHMxLDgoJHMyLCRpbnApCisJc3RnCSRzMCwwKCRvdXQsJGlucCkKKwlzdGcJJHMxLDgoJG91dCwkaW5wKQorCWxhCSRpbnAsMTYoJGlucCkKKwlicmN0CSRzMywuTGN0cjMyX2ttX3hvcgorCisJc2xncgkkbGVuLCRmcAorCWJyYwkxLC5MY3RyMzJfa21fbG9vcAkjIG5vdCB6ZXJvLCBubyBib3Jyb3cKKwlhbGdyCSRmcCwkbGVuCisJbGdoaQkkbGVuLDAKKwlicmMJNCsxLC5MY3RyMzJfa21fbG9vcAkjIG5vdCB6ZXJvCisKKwlsJHtnfQkkczAsMCgkc3ApCisJbCR7Z30JJHMxLCRTSVpFX1QoJHNwKQorCWxhCSRzMiwxNigkc3ApCisuTGN0cjMyX2ttX3phcDoKKwlzdGcJJHMwLDAoJHMyKQorCXN0ZwkkczAsOCgkczIpCisJbGEJJHMyLDE2KCRzMikKKwlicmN0CSRzMSwuTGN0cjMyX2ttX3phcAorCisJbGEJJHNwLDAoJHMwKQorCWxtJHtnfQklcjYsJHMzLDYqJFNJWkVfVCgkc3ApCisJYnIJJHJhCisuYWxpZ24JMTYKKy5MY3RyMzJfc29mdHdhcmU6CitfX18KKyRjb2RlLj08PF9fXzsKKwlzdG0ke2d9CSRrZXksJHJhLDUqJFNJWkVfVCgkc3ApCisJc2wke2d9cgkkaW5wLCRvdXQKKwlsYXJsCSR0YmwsQUVTX1RlCisJbGxnZgkkdDEsMTIoJGl2cCkKKworLkxjdHIzMl9sb29wOgorCXN0bSR7Z30JJGlucCwkb3V0LDIqJFNJWkVfVCgkc3ApCisJbGxnZgkkczAsMCgkaXZwKQorCWxsZ2YJJHMxLDQoJGl2cCkKKwlsbGdmCSRzMiw4KCRpdnApCisJbGdyCSRzMywkdDEKKwlzdAkkdDEsMTYqJFNJWkVfVCgkc3ApCisJbGdyCSVyNCwka2V5CisKKwlicmFzCSRyYSxfczM5MHhfQUVTX2VuY3J5cHQKKworCWxtJHtnfQkkaW5wLCRpdnAsMiokU0laRV9UKCRzcCkKKwlsbGdmCSR0MSwxNiokU0laRV9UKCRzcCkKKwl4CSRzMCwwKCRpbnAsJG91dCkKKwl4CSRzMSw0KCRpbnAsJG91dCkKKwl4CSRzMiw4KCRpbnAsJG91dCkKKwl4CSRzMywxMigkaW5wLCRvdXQpCisJc3RtCSRzMCwkczMsMCgkb3V0KQorCisJbGEJJG91dCwxNigkb3V0KQorCWFoaQkkdDEsMQkJIyAzMi1iaXQgaW5jcmVtZW50CisJYnJjdAkkbGVuLC5MY3RyMzJfbG9vcAorCisJbG0ke2d9CSVyNiwkcmEsNiokU0laRV9UKCRzcCkKKwlicgkkcmEKKy5zaXplCUFFU19jdHIzMl9lbmNyeXB0LC4tQUVTX2N0cjMyX2VuY3J5cHQKK19fXworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBBRVNfeHRzX2VuY3J5cHQoY29uc3QgY2hhciAqaW5wLGNoYXIgKm91dCxzaXplX3QgbGVuLAorIwljb25zdCBBRVNfS0VZICprZXkxLCBjb25zdCBBRVNfS0VZICprZXkyLAorIwljb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSk7CisjCit7CitteSAkaW5wPSIlcjIiOworbXkgJG91dD0iJXI0IjsJIyBsZW4gYW5kIG91dCBhcmUgc3dhcHBlZAorbXkgJGxlbj0iJXIzIjsKK215ICRrZXkxPSIlcjUiOwkjICRpMQorbXkgJGtleTI9IiVyNiI7CSMgJGkyCitteSAkZnA9IiVyNyI7CSMgJGkzCitteSAkdHdlYWs9MTYqJFNJWkVfVCsxNjsJIyBvciAkc3RkZnJhbWUtMTYsIGJvdHRvbSBvZiB0aGUgZnJhbWUuLi4KKworJGNvZGUuPTw8X19fOworLnR5cGUJX3MzOTB4X3h0c19rbSxcQGZ1bmN0aW9uCisuYWxpZ24JMTYKK19zMzkweF94dHNfa206CitfX18KKyRjb2RlLj08PF9fXyBpZigxKTsKKwlsbGdmcgkkczAsJXIwCQkJIyBwdXQgYXNpZGUgdGhlIGZ1bmN0aW9uIGNvZGUKKwlsZ2hpCSRzMSwweDdmCisJbnIJJHMxLCVyMAorCWxnaGkJJXIwLDAJCQkjIHF1ZXJ5IGNhcGFiaWxpdHkgdmVjdG9yCisJbGEJJXIxLDIqJFNJWkVfVCgkc3ApCisJLmxvbmcJMHhiOTJlMDA0MgkJIyBrbSAlcjQsJXIyCisJbGxpaGgJJXIxLDB4ODAwMAorCXNybGcJJXIxLCVyMSwzMigkczEpCQkjIGNoZWNrIGZvciAzMitmdW5jdGlvbiBjb2RlCisJbmcJJXIxLDIqJFNJWkVfVCgkc3ApCisJbGdyCSVyMCwkczAJCQkjIHJlc3RvcmUgdGhlIGZ1bmN0aW9uIGNvZGUKKwlsYQklcjEsMCgka2V5MSkJCSMgcmVzdG9yZSAka2V5MQorCWp6CS5MeHRzX2ttX3ZhbmlsbGEKKworCWxtZwkkaTIsJGkzLCR0d2Vhaygkc3ApCSMgcHV0IGFzaWRlIHRoZSB0d2VhayB2YWx1ZQorCWFsZ3IJJG91dCwkaW5wCisKKwlvaWxsCSVyMCwzMgkJCSMgc3dpdGNoIHRvIHh0cyBmdW5jdGlvbiBjb2RlCisJYWdoaQkkczEsLTE4CQkJIworCXNsbGcJJHMxLCRzMSwzCQkjIChmdW5jdGlvbiBjb2RlIC0gMTgpKjgsIDAgb3IgMTYKKwlsYQklcjEsJHR3ZWFrLTE2KCRzcCkKKwlzbGdyCSVyMSwkczEJCQkjIHBhcmFtZXRlciBibG9jayBwb3NpdGlvbgorCWxtZwkkczAsJHMzLDAoJGtleTEpCSMgbG9hZCAyNTYgYml0cyBvZiBrZXkgbWF0ZXJpYWwsCisJc3RtZwkkczAsJHMzLDAoJXIxKQkJIyBhbmQgY29weSBpdCB0byBwYXJhbWV0ZXIgYmxvY2suCisJCQkJCSMgeWVzLCBpdCBjb250YWlucyBqdW5rIGFuZCBvdmVybGFwcworCQkJCQkjIHdpdGggdGhlIHR3ZWFrIGluIDEyOC1iaXQgY2FzZS4KKwkJCQkJIyBpdCdzIGRvbmUgdG8gYXZvaWQgY29uZGl0aW9uYWwKKwkJCQkJIyBicmFuY2guCisJc3RtZwkkaTIsJGkzLCR0d2Vhaygkc3ApCSMgInJlLXNlYXQiIHRoZSB0d2VhayB2YWx1ZQorCisJLmxvbmcJMHhiOTJlMDA0MgkJIyBrbSAlcjQsJXIyCisJYnJjCTEsLi00CQkJIyBwYXkgYXR0ZW50aW9uIHRvICJwYXJ0aWFsIGNvbXBsZXRpb24iCisKKwlscnZnCSRzMCwkdHdlYWsrMCgkc3ApCSMgbG9hZCB0aGUgbGFzdCB0d2VhaworCWxydmcJJHMxLCR0d2Vhays4KCRzcCkKKwlzdG1nCSVyMCwlcjMsJHR3ZWFrLTMyKCVyMSkJIyB3aXBlIGNvcHkgb2YgdGhlIGtleQorCisJbmlsbAklcjAsMHhmZmRmCQkjIHN3aXRjaCBiYWNrIHRvIG9yaWdpbmFsIGZ1bmN0aW9uIGNvZGUKKwlsYQklcjEsMCgka2V5MSkJCSMgcmVzdG9yZSBwb2ludGVyIHRvICRrZXkxCisJc2xncgkkb3V0LCRpbnAKKworCWxsZ2MJJGxlbiwyKiRTSVpFX1QtMSgkc3ApCisJbmlsbAkkbGVuLDB4MGYJCSMgJGxlbiU9MTYKKwlicgkkcmEKKwkKKy5hbGlnbgkxNgorLkx4dHNfa21fdmFuaWxsYToKK19fXworJGNvZGUuPTw8X19fOworCSMgcHJlcGFyZSBhbmQgYWxsb2NhdGUgc3RhY2sgZnJhbWUgYXQgdGhlIHRvcCBvZiA0SyBwYWdlCisJIyB3aXRoIDFLIHJlc2VydmVkIGZvciBldmVudHVhbCBzaWduYWwgaGFuZGxpbmcKKwlsZ2hpCSRzMCwtMTAyNC0yNTYtMTYjIGd1YXJhbnRlZSBhdCBsZWFzdCAyNTYtYnl0ZXMgYnVmZmVyCisJbGdoaQkkczEsLTQwOTYKKwlhbGdyCSRzMCwkc3AKKwlsZ3IJJGZwLCRzcAorCW5ncgkkczAsJHMxCQkjIGFsaWduIGF0IHBhZ2UgYm91bmRhcnkKKwlzbGdyCSRmcCwkczAJCSMgdG90YWwgYnVmZmVyIHNpemUKKwlsZ3IJJHMyLCRzcAorCWxnaGkJJHMxLDEwMjQrMTYJIyBzbFtnXWZpIGlzIGV4dGVuZGVkLWltbWVkaWF0ZSBmYWNpbGl0eQorCXNsZ3IJJGZwLCRzMQkJIyBkZWR1Y3QgcmVzZXJ2YXRpb24gdG8gZ2V0IHVzYWJsZSBidWZmZXIgc2l6ZQorCSMgYnVmZmVyIHNpemUgaXMgYXQgbGVzdCAyNTYgYW5kIGF0IG1vc3QgMzA3MisyNTYtMTYKKworCWxhCSRzcCwxMDI0KCRzMCkJIyBhbGxvY2EKKwluaWxsCSRmcCwweGZmZjAJIyByb3VuZCB0byAxNipuCisJc3Qke2d9CSRzMiwwKCRzcCkJIyBiYWNrLWNoYWluCisJbmlsbAkkbGVuLDB4ZmZmMAkjIHJlZHVuZGFudAorCXN0JHtnfQkkZnAsJFNJWkVfVCgkc3ApCisKKwlzbGdyCSRsZW4sJGZwCisJYnJjCTEsLkx4dHNfa21fZ28JIyBub3QgemVybywgbm8gYm9ycm93CisJYWxncgkkZnAsJGxlbgkjIGlucHV0IGlzIHNob3J0ZXIgdGhhbiBhbGxvY2F0ZWQgYnVmZmVyCisJbGdoaQkkbGVuLDAKKwlzdCR7Z30JJGZwLCRTSVpFX1QoJHNwKQorCisuTHh0c19rbV9nbzoKKwlscnZnCSRzMCwkdHdlYWsrMCgkczIpCSMgbG9hZCB0aGUgdHdlYWsgdmFsdWUgaW4gbGl0dGxlLWVuZGlhbgorCWxydmcJJHMxLCR0d2Vhays4KCRzMikKKworCWxhCSRzMiwxNigkc3ApCQkjIHZlY3RvciBvZiBhc2NlbmRpbmcgdHdlYWsgdmFsdWVzCisJc2xncgkkczIsJGlucAorCXNybGcJJHMzLCRmcCw0CisJagkuTHh0c19rbV9zdGFydAorCisuTHh0c19rbV9sb29wOgorCWxhCSRzMiwxNigkc3ApCisJc2xncgkkczIsJGlucAorCXNybGcJJHMzLCRmcCw0CisuTHh0c19rbV9wcmVwYXJlOgorCWxnaGkJJGkxLDB4ODcKKwlzcmFnCSRpMiwkczEsNjMJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdAorCW5ncgkkaTEsJGkyCQkJIyByZW0KKwlzcmxnCSRpMiwkczAsNjMJCSMgY2FycnkgYml0IGZyb20gbG93ZXIgaGFsZgorCXNsbGcJJHMwLCRzMCwxCisJc2xsZwkkczEsJHMxLDEKKwl4Z3IJJHMwLCRpMQorCW9ncgkkczEsJGkyCisuTHh0c19rbV9zdGFydDoKKwlscnZncgkkaTEsJHMwCQkJIyBmbGlwIGJ5dGUgb3JkZXIKKwlscnZncgkkaTIsJHMxCisJc3RnCSRpMSwwKCRzMiwkaW5wKQorCXN0ZwkkaTIsOCgkczIsJGlucCkKKwl4ZwkkaTEsMCgkaW5wKQorCXhnCSRpMiw4KCRpbnApCisJc3RnCSRpMSwwKCRvdXQsJGlucCkKKwlzdGcJJGkyLDgoJG91dCwkaW5wKQorCWxhCSRpbnAsMTYoJGlucCkKKwlicmN0CSRzMywuTHh0c19rbV9wcmVwYXJlCisKKwlzbGdyCSRpbnAsJGZwCQkjIHJld2luZCAkaW5wCisJbGEJJHMyLDAoJG91dCwkaW5wKQorCWxncgkkczMsJGZwCisJLmxvbmcJMHhiOTJlMDBhYQkJIyBrbSAkczIsJHMyCisJYnJjCTEsLi00CQkJIyBwYXkgYXR0ZW50aW9uIHRvICJwYXJ0aWFsIGNvbXBsZXRpb24iCisKKwlsYQkkczIsMTYoJHNwKQorCXNsZ3IJJHMyLCRpbnAKKwlzcmxnCSRzMywkZnAsNAorLkx4dHNfa21feG9yOgorCWxnCSRpMSwwKCRvdXQsJGlucCkKKwlsZwkkaTIsOCgkb3V0LCRpbnApCisJeGcJJGkxLDAoJHMyLCRpbnApCisJeGcJJGkyLDgoJHMyLCRpbnApCisJc3RnCSRpMSwwKCRvdXQsJGlucCkKKwlzdGcJJGkyLDgoJG91dCwkaW5wKQorCWxhCSRpbnAsMTYoJGlucCkKKwlicmN0CSRzMywuTHh0c19rbV94b3IKKworCXNsZ3IJJGxlbiwkZnAKKwlicmMJMSwuTHh0c19rbV9sb29wCQkjIG5vdCB6ZXJvLCBubyBib3Jyb3cKKwlhbGdyCSRmcCwkbGVuCisJbGdoaQkkbGVuLDAKKwlicmMJNCsxLC5MeHRzX2ttX2xvb3AJIyBub3QgemVybworCisJbCR7Z30JJGkxLDAoJHNwKQkJIyBiYWNrLWNoYWluCisJbGxnZgkkZnAsYDIqJFNJWkVfVC00YCgkc3ApCSMgYnl0ZXMgdXNlZAorCWxhCSRpMiwxNigkc3ApCisJc3JsZwkkZnAsJGZwLDQKKy5MeHRzX2ttX3phcDoKKwlzdGcJJGkxLDAoJGkyKQorCXN0ZwkkaTEsOCgkaTIpCisJbGEJJGkyLDE2KCRpMikKKwlicmN0CSRmcCwuTHh0c19rbV96YXAKKworCWxhCSRzcCwwKCRpMSkKKwlsbGdjCSRsZW4sMiokU0laRV9ULTEoJGkxKQorCW5pbGwJJGxlbiwweDBmCQkjICRsZW4lPTE2CisJYnpyCSRyYQorCisJIyBnZW5lcmF0ZSBvbmUgbW9yZSB0d2Vhay4uLgorCWxnaGkJJGkxLDB4ODcKKwlzcmFnCSRpMiwkczEsNjMJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdAorCW5ncgkkaTEsJGkyCQkJIyByZW0KKwlzcmxnCSRpMiwkczAsNjMJCSMgY2FycnkgYml0IGZyb20gbG93ZXIgaGFsZgorCXNsbGcJJHMwLCRzMCwxCisJc2xsZwkkczEsJHMxLDEKKwl4Z3IJJHMwLCRpMQorCW9ncgkkczEsJGkyCisKKwlsdHIJJGxlbiwkbGVuCQkjIGNsZWFyIHplcm8gZmxhZworCWJyCSRyYQorLnNpemUJX3MzOTB4X3h0c19rbSwuLV9zMzkweF94dHNfa20KKworLmdsb2JsCUFFU194dHNfZW5jcnlwdAorLnR5cGUJQUVTX3h0c19lbmNyeXB0LFxAZnVuY3Rpb24KKy5hbGlnbgkxNgorQUVTX3h0c19lbmNyeXB0OgorCXhncgklcjMsJXI0CQkJIyBmbGlwICVyMyBhbmQgJXI0LCAkb3V0IGFuZCAkbGVuCisJeGdyCSVyNCwlcjMKKwl4Z3IJJXIzLCVyNAorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTQpOworCWxsZ2ZyCSRsZW4sJGxlbgorX19fCiskY29kZS49PDxfX187CisJc3Qke2d9CSRsZW4sMSokU0laRV9UKCRzcCkJIyBzYXZlIGNvcHkgb2YgJGxlbgorCXNyYWcJJGxlbiwkbGVuLDQJCSMgZm9ybWFsbHkgd3JvbmcsIGJlY2F1c2UgaXQgZXhwYW5kcworCQkJCQkjIHNpZ24gYnl0ZSwgYnV0IHdobyBjYW4gYWZmb3JkIGFza2luZworCQkJCQkjIHRvIHByb2Nlc3MgbW9yZSB0aGFuIDJeNjMtMSBieXRlcz8KKwkJCQkJIyBJIHVzZSBpdCwgYmVjYXVzZSBpdCBzZXRzIGNvbmRpdGlvbgorCQkJCQkjIGNvZGUuLi4KKwliY3IJOCwkcmEJCQkjIGFib3J0IGlmIHplcm8gKGkuZS4gbGVzcyB0aGFuIDE2KQorX19fCiskY29kZS49PDxfX18gaWYgKCEkc29mdG9ubHkpOworCWxsZ2YJJXIwLDI0MCgka2V5MikKKwlsaGkJJXIxLDE2CisJY2xyCSVyMCwlcjEKKwlqbAkuTHh0c19lbmNfc29mdHdhcmUKKworCXN0bSR7Z30JJXI2LCRzMyw2KiRTSVpFX1QoJHNwKQorCXN0JHtnfQkkcmEsMTQqJFNJWkVfVCgkc3ApCisKKwlzbGxnCSRsZW4sJGxlbiw0CQkjICRsZW4mPX4xNQorCXNsZ3IJJG91dCwkaW5wCisKKwkjIGdlbmVyYXRlIHRoZSB0d2VhayB2YWx1ZQorCWwke2d9CSRzMywkc3RkZnJhbWUoJHNwKQkjIHBvaW50ZXIgdG8gaXYKKwlsYQkkczIsJHR3ZWFrKCRzcCkKKwlsbWcJJHMwLCRzMSwwKCRzMykKKwlsZ2hpCSRzMywxNgorCXN0bWcJJHMwLCRzMSwwKCRzMikKKwlsYQklcjEsMCgka2V5MikJCSMgJGtleTIgaXMgbm90IG5lZWRlZCBhbnltb3JlCisJLmxvbmcJMHhiOTJlMDBhYQkJIyBrbSAkczIsJHMyLCBnZW5lcmF0ZSB0aGUgdHdlYWsKKwlicmMJMSwuLTQJCQkjIGNhbiB0aGlzIGhhcHBlbj8KKworCWwJJXIwLDI0MCgka2V5MSkKKwlsYQklcjEsMCgka2V5MSkJCSMgJGtleTEgaXMgbm90IG5lZWRlZCBhbnltb3JlCisJYnJhcwkkcmEsX3MzOTB4X3h0c19rbQorCWp6CS5MeHRzX2VuY19rbV9kb25lCisKKwlhZ2hpCSRpbnAsLTE2CQkjIHRha2Ugb25lIHN0ZXAgYmFjaworCWxhCSRpMywwKCRvdXQsJGlucCkJIyBwdXQgYXNpZGUgcmVhbCAkb3V0CisuTHh0c19lbmNfa21fc3RlYWw6CisJbGxnYwkkaTEsMTYoJGlucCkKKwlsbGdjCSRpMiwwKCRvdXQsJGlucCkKKwlzdGMJJGkxLDAoJG91dCwkaW5wKQorCXN0YwkkaTIsMTYoJG91dCwkaW5wKQorCWxhCSRpbnAsMSgkaW5wKQorCWJyY3QJJGxlbiwuTHh0c19lbmNfa21fc3RlYWwKKworCWxhCSRzMiwwKCRpMykKKwlsZ2hpCSRzMywxNgorCWxydmdyCSRpMSwkczAJCQkjIGZsaXAgYnl0ZSBvcmRlcgorCWxydmdyCSRpMiwkczEKKwl4ZwkkaTEsMCgkczIpCisJeGcJJGkyLDgoJHMyKQorCXN0ZwkkaTEsMCgkczIpCisJc3RnCSRpMiw4KCRzMikKKwkubG9uZwkweGI5MmUwMGFhCQkjIGttICRzMiwkczIKKwlicmMJMSwuLTQJCQkjIGNhbiB0aGlzIGhhcHBlbj8KKwlscnZncgkkaTEsJHMwCQkJIyBmbGlwIGJ5dGUgb3JkZXIKKwlscnZncgkkaTIsJHMxCisJeGcJJGkxLDAoJGkzKQorCXhnCSRpMiw4KCRpMykKKwlzdGcJJGkxLDAoJGkzKQorCXN0ZwkkaTIsOCgkaTMpCisKKy5MeHRzX2VuY19rbV9kb25lOgorCWwke2d9CSRyYSwxNCokU0laRV9UKCRzcCkKKwlzdCR7Z30JJHNwLCR0d2Vhaygkc3ApCQkjIHdpcGUgdHdlYWsKKwlzdCR7Z30JJHNwLCR0d2Vhaygkc3ApCisJbG0ke2d9CSVyNiwkczMsNiokU0laRV9UKCRzcCkKKwlicgkkcmEKKy5hbGlnbgkxNgorLkx4dHNfZW5jX3NvZnR3YXJlOgorX19fCiskY29kZS49PDxfX187CisJc3RtJHtnfQklcjYsJHJhLDYqJFNJWkVfVCgkc3ApCisKKwlzbGdyCSRvdXQsJGlucAorCisJeGdyCSRzMCwkczAJCQkjIGNsZWFyIHVwcGVyIGhhbGYKKwl4Z3IJJHMxLCRzMQorCWxydgkkczAsJHN0ZGZyYW1lKzQoJHNwKQkjIGxvYWQgc2Vjbm8KKwlscnYJJHMxLCRzdGRmcmFtZSswKCRzcCkKKwl4Z3IJJHMyLCRzMgorCXhncgkkczMsJHMzCisJc3RtJHtnfQklcjIsJXI1LDIqJFNJWkVfVCgkc3ApCisJbGEJJGtleSwwKCRrZXkyKQorCWxhcmwJJHRibCxBRVNfVGUKKwlicmFzCSRyYSxfczM5MHhfQUVTX2VuY3J5cHQJIyBnZW5lcmF0ZSB0aGUgdHdlYWsKKwlsbSR7Z30JJXIyLCVyNSwyKiRTSVpFX1QoJHNwKQorCXN0bQkkczAsJHMzLCR0d2Vhaygkc3ApCSMgc2F2ZSB0aGUgdHdlYWsKKwlqCS5MeHRzX2VuY19lbnRlcgorCisuYWxpZ24JMTYKKy5MeHRzX2VuY19sb29wOgorCWxydmcJJHMxLCR0d2VhayswKCRzcCkJIyBsb2FkIHRoZSB0d2VhayBpbiBsaXR0bGUtZW5kaWFuCisJbHJ2ZwkkczMsJHR3ZWFrKzgoJHNwKQorCWxnaGkJJXIxLDB4ODcKKwlzcmFnCSVyMCwkczMsNjMJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdAorCW5ncgklcjEsJXIwCQkJIyByZW0KKwlzcmxnCSVyMCwkczEsNjMJCSMgY2FycnkgYml0IGZyb20gbG93ZXIgaGFsZgorCXNsbGcJJHMxLCRzMSwxCisJc2xsZwkkczMsJHMzLDEKKwl4Z3IJJHMxLCVyMQorCW9ncgkkczMsJXIwCisJbHJ2Z3IJJHMxLCRzMQkJCSMgZmxpcCBieXRlIG9yZGVyCisJbHJ2Z3IJJHMzLCRzMworCXNybGcJJHMwLCRzMSwzMgkJIyBzbWFzaCB0aGUgdHdlYWsgdG8gNHgzMi1iaXRzIAorCXN0ZwkkczEsJHR3ZWFrKzAoJHNwKQkjIHNhdmUgdGhlIHR3ZWFrCisJbGxnZnIJJHMxLCRzMQorCXNybGcJJHMyLCRzMywzMgorCXN0ZwkkczMsJHR3ZWFrKzgoJHNwKQorCWxsZ2ZyCSRzMywkczMKKwlsYQkkaW5wLDE2KCRpbnApCQkjICRpbnArPTE2CisuTHh0c19lbmNfZW50ZXI6CisJeAkkczAsMCgkaW5wKQkJIyBePSooJGlucCkKKwl4CSRzMSw0KCRpbnApCisJeAkkczIsOCgkaW5wKQorCXgJJHMzLDEyKCRpbnApCisJc3RtJHtnfQklcjIsJXIzLDIqJFNJWkVfVCgkc3ApCSMgb25seSB0d28gcmVnaXN0ZXJzIGFyZSBjaGFuZ2luZworCWxhCSRrZXksMCgka2V5MSkKKwlicmFzCSRyYSxfczM5MHhfQUVTX2VuY3J5cHQKKwlsbSR7Z30JJXIyLCVyNSwyKiRTSVpFX1QoJHNwKQorCXgJJHMwLCR0d2VhayswKCRzcCkJIyBePXR3ZWFrCisJeAkkczEsJHR3ZWFrKzQoJHNwKQorCXgJJHMyLCR0d2Vhays4KCRzcCkKKwl4CSRzMywkdHdlYWsrMTIoJHNwKQorCXN0CSRzMCwwKCRvdXQsJGlucCkKKwlzdAkkczEsNCgkb3V0LCRpbnApCisJc3QJJHMyLDgoJG91dCwkaW5wKQorCXN0CSRzMywxMigkb3V0LCRpbnApCisJYnJjdCR7Z30JJGxlbiwuTHh0c19lbmNfbG9vcAorCisJbGxnYwkkbGVuLGAyKiRTSVpFX1QtMWAoJHNwKQorCW5pbGwJJGxlbiwweDBmCQkjICRsZW4lMTYKKwlqegkuTHh0c19lbmNfZG9uZQorCisJbGEJJGkzLDAoJGlucCwkb3V0KQkjIHB1dCBhc2lkZSByZWFsICRvdXQKKy5MeHRzX2VuY19zdGVhbDoKKwlsbGdjCSVyMCwxNigkaW5wKQorCWxsZ2MJJXIxLDAoJG91dCwkaW5wKQorCXN0YwklcjAsMCgkb3V0LCRpbnApCisJc3RjCSVyMSwxNigkb3V0LCRpbnApCisJbGEJJGlucCwxKCRpbnApCisJYnJjdAkkbGVuLC5MeHRzX2VuY19zdGVhbAorCWxhCSRvdXQsMCgkaTMpCQkjIHJlc3RvcmUgcmVhbCAkb3V0CisKKwkjIGdlbmVyYXRlIGxhc3QgdHdlYWsuLi4KKwlscnZnCSRzMSwkdHdlYWsrMCgkc3ApCSMgbG9hZCB0aGUgdHdlYWsgaW4gbGl0dGxlLWVuZGlhbgorCWxydmcJJHMzLCR0d2Vhays4KCRzcCkKKwlsZ2hpCSVyMSwweDg3CisJc3JhZwklcjAsJHMzLDYzCQkjIGJyb2FkY2FzdCB1cHBlciBiaXQKKwluZ3IJJXIxLCVyMAkJCSMgcmVtCisJc3JsZwklcjAsJHMxLDYzCQkjIGNhcnJ5IGJpdCBmcm9tIGxvd2VyIGhhbGYKKwlzbGxnCSRzMSwkczEsMQorCXNsbGcJJHMzLCRzMywxCisJeGdyCSRzMSwlcjEKKwlvZ3IJJHMzLCVyMAorCWxydmdyCSRzMSwkczEJCQkjIGZsaXAgYnl0ZSBvcmRlcgorCWxydmdyCSRzMywkczMKKwlzcmxnCSRzMCwkczEsMzIJCSMgc21hc2ggdGhlIHR3ZWFrIHRvIDR4MzItYml0cyAKKwlzdGcJJHMxLCR0d2VhayswKCRzcCkJIyBzYXZlIHRoZSB0d2VhaworCWxsZ2ZyCSRzMSwkczEKKwlzcmxnCSRzMiwkczMsMzIKKwlzdGcJJHMzLCR0d2Vhays4KCRzcCkKKwlsbGdmcgkkczMsJHMzCisKKwl4CSRzMCwwKCRvdXQpCQkjIF49KihpbnApfHN0b2xlbiBjaXB0aGVyLXRleHQKKwl4CSRzMSw0KCRvdXQpCisJeAkkczIsOCgkb3V0KQorCXgJJHMzLDEyKCRvdXQpCisJc3Qke2d9CSRvdXQsNCokU0laRV9UKCRzcCkKKwlsYQkka2V5LDAoJGtleTEpCisJYnJhcwkkcmEsX3MzOTB4X0FFU19lbmNyeXB0CisJbCR7Z30JJG91dCw0KiRTSVpFX1QoJHNwKQorCXgJJHMwLGAkdHdlYWsrMGAoJHNwKQkjIF49dHdlYWsKKwl4CSRzMSxgJHR3ZWFrKzRgKCRzcCkKKwl4CSRzMixgJHR3ZWFrKzhgKCRzcCkKKwl4CSRzMyxgJHR3ZWFrKzEyYCgkc3ApCisJc3QJJHMwLDAoJG91dCkKKwlzdAkkczEsNCgkb3V0KQorCXN0CSRzMiw4KCRvdXQpCisJc3QJJHMzLDEyKCRvdXQpCisKKy5MeHRzX2VuY19kb25lOgorCXN0Zwkkc3AsJHR3ZWFrKzAoJHNwKQkjIHdpcGUgdHdlYWsKKwlzdGcJJHNwLCR0d2Vzays4KCRzcCkKKwlsbSR7Z30JJXI2LCRyYSw2KiRTSVpFX1QoJHNwKQorCWJyCSRyYQorLnNpemUJQUVTX3h0c19lbmNyeXB0LC4tQUVTX3h0c19lbmNyeXB0CitfX18KKyMgdm9pZCBBRVNfeHRzX2RlY3J5cHQoY29uc3QgY2hhciAqaW5wLGNoYXIgKm91dCxzaXplX3QgbGVuLAorIwljb25zdCBBRVNfS0VZICprZXkxLCBjb25zdCBBRVNfS0VZICprZXkyLHU2NCBzZWNubyk7CisjCiskY29kZS49PDxfX187CisuZ2xvYmwJQUVTX3h0c19kZWNyeXB0CisudHlwZQlBRVNfeHRzX2RlY3J5cHQsXEBmdW5jdGlvbgorLmFsaWduCTE2CitBRVNfeHRzX2RlY3J5cHQ6CisJeGdyCSVyMywlcjQJCQkjIGZsaXAgJXIzIGFuZCAlcjQsICRvdXQgYW5kICRsZW4KKwl4Z3IJJXI0LCVyMworCXhncgklcjMsJXI0CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CisJbGxnZnIJJGxlbiwkbGVuCitfX18KKyRjb2RlLj08PF9fXzsKKwlzdCR7Z30JJGxlbiwxKiRTSVpFX1QoJHNwKQkjIHNhdmUgY29weSBvZiAkbGVuCisJYWdoaQkkbGVuLC0xNgorCWJjcgk0LCRyYQkJCSMgYWJvcnQgaWYgbGVzcyB0aGFuIHplcm8uIGZvcm1hbGx5CisJCQkJCSMgd3JvbmcsIGJlY2F1c2UgJGxlbiBpcyB1bnNpZ25lZCwKKwkJCQkJIyBidXQgd2hvIGNhbiBhZmZvcmQgYXNraW5nIHRvCisJCQkJCSMgcHJvY2VzcyBtb3JlIHRoYW4gMl42My0xIGJ5dGVzPworCXRtbGwJJGxlbiwweDBmCisJam56CS5MeHRzX2RlY19wcm9jZWVkCisJYWdoaQkkbGVuLDE2CisuTHh0c19kZWNfcHJvY2VlZDoKK19fXworJGNvZGUuPTw8X19fIGlmICghJHNvZnRvbmx5KTsKKwlsbGdmCSVyMCwyNDAoJGtleTIpCisJbGhpCSVyMSwxNgorCWNscgklcjAsJXIxCisJamwJLkx4dHNfZGVjX3NvZnR3YXJlCisKKwlzdG0ke2d9CSVyNiwkczMsNiokU0laRV9UKCRzcCkKKwlzdCR7Z30JJHJhLDE0KiRTSVpFX1QoJHNwKQorCisJbmlsbAkkbGVuLDB4ZmZmMAkJIyAkbGVuJj1+MTUKKwlzbGdyCSRvdXQsJGlucAorCisJIyBnZW5lcmF0ZSB0aGUgdHdlYWsgdmFsdWUKKwlsJHtnfQkkczMsJHN0ZGZyYW1lKCRzcCkJIyBwb2ludGVyIHRvIGl2CisJbGEJJHMyLCR0d2Vhaygkc3ApCisJbG1nCSRzMCwkczEsMCgkczMpCisJbGdoaQkkczMsMTYKKwlzdG1nCSRzMCwkczEsMCgkczIpCisJbGEJJXIxLDAoJGtleTIpCQkjICRrZXkyIGlzIG5vdCBuZWVkZWQgcGFzdCB0aGlzIHBvaW50CisJLmxvbmcJMHhiOTJlMDBhYQkJIyBrbSAkczIsJHMyLCBnZW5lcmF0ZSB0aGUgdHdlYWsKKwlicmMJMSwuLTQJCQkjIGNhbiB0aGlzIGhhcHBlbj8KKworCWwJJXIwLDI0MCgka2V5MSkKKwlsYQklcjEsMCgka2V5MSkJCSMgJGtleTEgaXMgbm90IG5lZWRlZCBhbnltb3JlCisKKwlsdGdyCSRsZW4sJGxlbgorCWp6CS5MeHRzX2RlY19rbV9zaG9ydAorCWJyYXMJJHJhLF9zMzkweF94dHNfa20KKwlqegkuTHh0c19kZWNfa21fZG9uZQorCisJbHJ2Z3IJJHMyLCRzMAkJCSMgbWFrZSBjb3B5IGluIHJldmVyc2UgYnl0ZSBvcmRlcgorCWxydmdyCSRzMywkczEKKwlqCS5MeHRzX2RlY19rbV8ybmR0d2VhaworCisuTHh0c19kZWNfa21fc2hvcnQ6CisJbGxnYwkkbGVuLGAyKiRTSVpFX1QtMWAoJHNwKQorCW5pbGwJJGxlbiwweDBmCQkjICRsZW4lPTE2CisJbHJ2ZwkkczAsJHR3ZWFrKzAoJHNwKQkjIGxvYWQgdGhlIHR3ZWFrCisJbHJ2ZwkkczEsJHR3ZWFrKzgoJHNwKQorCWxydmdyCSRzMiwkczAJCQkjIG1ha2UgY29weSBpbiByZXZlcnNlIGJ5dGUgb3JkZXIKKwlscnZncgkkczMsJHMxCisKKy5MeHRzX2RlY19rbV8ybmR0d2VhazoKKwlsZ2hpCSRpMSwweDg3CisJc3JhZwkkaTIsJHMxLDYzCQkjIGJyb2FkY2FzdCB1cHBlciBiaXQKKwluZ3IJJGkxLCRpMgkJCSMgcmVtCisJc3JsZwkkaTIsJHMwLDYzCQkjIGNhcnJ5IGJpdCBmcm9tIGxvd2VyIGhhbGYKKwlzbGxnCSRzMCwkczAsMQorCXNsbGcJJHMxLCRzMSwxCisJeGdyCSRzMCwkaTEKKwlvZ3IJJHMxLCRpMgorCWxydmdyCSRpMSwkczAJCQkjIGZsaXAgYnl0ZSBvcmRlcgorCWxydmdyCSRpMiwkczEKKworCXhnCSRpMSwwKCRpbnApCisJeGcJJGkyLDgoJGlucCkKKwlzdGcJJGkxLDAoJG91dCwkaW5wKQorCXN0ZwkkaTIsOCgkb3V0LCRpbnApCisJbGEJJGkyLDAoJG91dCwkaW5wKQorCWxnaGkJJGkzLDE2CisJLmxvbmcJMHhiOTJlMDA2NgkJIyBrbSAkaTIsJGkyCisJYnJjCTEsLi00CQkJIyBjYW4gdGhpcyBoYXBwZW4/CisJbHJ2Z3IJJGkxLCRzMAorCWxydmdyCSRpMiwkczEKKwl4ZwkkaTEsMCgkb3V0LCRpbnApCisJeGcJJGkyLDgoJG91dCwkaW5wKQorCXN0ZwkkaTEsMCgkb3V0LCRpbnApCisJc3RnCSRpMiw4KCRvdXQsJGlucCkKKworCWxhCSRpMywwKCRvdXQsJGlucCkJIyBwdXQgYXNpZGUgcmVhbCAkb3V0CisuTHh0c19kZWNfa21fc3RlYWw6CisJbGxnYwkkaTEsMTYoJGlucCkKKwlsbGdjCSRpMiwwKCRvdXQsJGlucCkKKwlzdGMJJGkxLDAoJG91dCwkaW5wKQorCXN0YwkkaTIsMTYoJG91dCwkaW5wKQorCWxhCSRpbnAsMSgkaW5wKQorCWJyY3QJJGxlbiwuTHh0c19kZWNfa21fc3RlYWwKKworCWxncgkkczAsJHMyCisJbGdyCSRzMSwkczMKKwl4ZwkkczAsMCgkaTMpCisJeGcJJHMxLDgoJGkzKQorCXN0ZwkkczAsMCgkaTMpCisJc3RnCSRzMSw4KCRpMykKKwlsYQkkczAsMCgkaTMpCisJbGdoaQkkczEsMTYKKwkubG9uZwkweGI5MmUwMDg4CQkjIGttICRzMCwkczAKKwlicmMJMSwuLTQJCQkjIGNhbiB0aGlzIGhhcHBlbj8KKwl4ZwkkczIsMCgkaTMpCisJeGcJJHMzLDgoJGkzKQorCXN0ZwkkczIsMCgkaTMpCisJc3RnCSRzMyw4KCRpMykKKy5MeHRzX2RlY19rbV9kb25lOgorCWwke2d9CSRyYSwxNCokU0laRV9UKCRzcCkKKwlzdCR7Z30JJHNwLCR0d2Vhaygkc3ApCQkjIHdpcGUgdHdlYWsKKwlzdCR7Z30JJHNwLCR0d2Vhaygkc3ApCisJbG0ke2d9CSVyNiwkczMsNiokU0laRV9UKCRzcCkKKwlicgkkcmEKKy5hbGlnbgkxNgorLkx4dHNfZGVjX3NvZnR3YXJlOgorX19fCiskY29kZS49PDxfX187CisJc3RtJHtnfQklcjYsJHJhLDYqJFNJWkVfVCgkc3ApCisKKwlzcmxnCSRsZW4sJGxlbiw0CisJc2xncgkkb3V0LCRpbnAKKworCXhncgkkczAsJHMwCQkJIyBjbGVhciB1cHBlciBoYWxmCisJeGdyCSRzMSwkczEKKwlscnYJJHMwLCRzdGRmcmFtZSs0KCRzcCkJIyBsb2FkIHNlY25vCisJbHJ2CSRzMSwkc3RkZnJhbWUrMCgkc3ApCisJeGdyCSRzMiwkczIKKwl4Z3IJJHMzLCRzMworCXN0bSR7Z30JJXIyLCVyNSwyKiRTSVpFX1QoJHNwKQorCWxhCSRrZXksMCgka2V5MikKKwlsYXJsCSR0YmwsQUVTX1RlCisJYnJhcwkkcmEsX3MzOTB4X0FFU19lbmNyeXB0CSMgZ2VuZXJhdGUgdGhlIHR3ZWFrCisJbG0ke2d9CSVyMiwlcjUsMiokU0laRV9UKCRzcCkKKwlsYXJsCSR0YmwsQUVTX1RkCisJbHQke2d9cgkkbGVuLCRsZW4KKwlzdG0JJHMwLCRzMywkdHdlYWsoJHNwKQkjIHNhdmUgdGhlIHR3ZWFrCisJanoJLkx4dHNfZGVjX3Nob3J0CisJagkuTHh0c19kZWNfZW50ZXIKKworLmFsaWduCTE2CisuTHh0c19kZWNfbG9vcDoKKwlscnZnCSRzMSwkdHdlYWsrMCgkc3ApCSMgbG9hZCB0aGUgdHdlYWsgaW4gbGl0dGxlLWVuZGlhbgorCWxydmcJJHMzLCR0d2Vhays4KCRzcCkKKwlsZ2hpCSVyMSwweDg3CisJc3JhZwklcjAsJHMzLDYzCQkjIGJyb2FkY2FzdCB1cHBlciBiaXQKKwluZ3IJJXIxLCVyMAkJCSMgcmVtCisJc3JsZwklcjAsJHMxLDYzCQkjIGNhcnJ5IGJpdCBmcm9tIGxvd2VyIGhhbGYKKwlzbGxnCSRzMSwkczEsMQorCXNsbGcJJHMzLCRzMywxCisJeGdyCSRzMSwlcjEKKwlvZ3IJJHMzLCVyMAorCWxydmdyCSRzMSwkczEJCQkjIGZsaXAgYnl0ZSBvcmRlcgorCWxydmdyCSRzMywkczMKKwlzcmxnCSRzMCwkczEsMzIJCSMgc21hc2ggdGhlIHR3ZWFrIHRvIDR4MzItYml0cyAKKwlzdGcJJHMxLCR0d2VhayswKCRzcCkJIyBzYXZlIHRoZSB0d2VhaworCWxsZ2ZyCSRzMSwkczEKKwlzcmxnCSRzMiwkczMsMzIKKwlzdGcJJHMzLCR0d2Vhays4KCRzcCkKKwlsbGdmcgkkczMsJHMzCisuTHh0c19kZWNfZW50ZXI6CisJeAkkczAsMCgkaW5wKQkJIyB0d2Vha149KihpbnApCisJeAkkczEsNCgkaW5wKQorCXgJJHMyLDgoJGlucCkKKwl4CSRzMywxMigkaW5wKQorCXN0bSR7Z30JJXIyLCVyMywyKiRTSVpFX1QoJHNwKQkjIG9ubHkgdHdvIHJlZ2lzdGVycyBhcmUgY2hhbmdpbmcKKwlsYQkka2V5LDAoJGtleTEpCisJYnJhcwkkcmEsX3MzOTB4X0FFU19kZWNyeXB0CisJbG0ke2d9CSVyMiwlcjUsMiokU0laRV9UKCRzcCkKKwl4CSRzMCwkdHdlYWsrMCgkc3ApCSMgXj10d2VhaworCXgJJHMxLCR0d2Vhays0KCRzcCkKKwl4CSRzMiwkdHdlYWsrOCgkc3ApCisJeAkkczMsJHR3ZWFrKzEyKCRzcCkKKwlzdAkkczAsMCgkb3V0LCRpbnApCisJc3QJJHMxLDQoJG91dCwkaW5wKQorCXN0CSRzMiw4KCRvdXQsJGlucCkKKwlzdAkkczMsMTIoJG91dCwkaW5wKQorCWxhCSRpbnAsMTYoJGlucCkKKwlicmN0JHtnfQkkbGVuLC5MeHRzX2RlY19sb29wCisKKwlsbGdjCSRsZW4sYDIqJFNJWkVfVC0xYCgkc3ApCisJbmlsbAkkbGVuLDB4MGYJCSMgJGxlbiUxNgorCWp6CS5MeHRzX2RlY19kb25lCisKKwkjIGdlbmVyYXRlIHBhaXIgb2YgdHdlYWtzLi4uCisJbHJ2ZwkkczEsJHR3ZWFrKzAoJHNwKQkjIGxvYWQgdGhlIHR3ZWFrIGluIGxpdHRsZS1lbmRpYW4KKwlscnZnCSRzMywkdHdlYWsrOCgkc3ApCisJbGdoaQklcjEsMHg4NworCXNyYWcJJXIwLCRzMyw2MwkJIyBicm9hZGNhc3QgdXBwZXIgYml0CisJbmdyCSVyMSwlcjAJCQkjIHJlbQorCXNybGcJJXIwLCRzMSw2MwkJIyBjYXJyeSBiaXQgZnJvbSBsb3dlciBoYWxmCisJc2xsZwkkczEsJHMxLDEKKwlzbGxnCSRzMywkczMsMQorCXhncgkkczEsJXIxCisJb2dyCSRzMywlcjAKKwlscnZncgkkaTIsJHMxCQkJIyBmbGlwIGJ5dGUgb3JkZXIKKwlscnZncgkkaTMsJHMzCisJc3RtZwkkaTIsJGkzLCR0d2Vhaygkc3ApCSMgc2F2ZSB0aGUgMXN0IHR3ZWFrCisJagkuTHh0c19kZWNfMm5kdHdlYWsKKworLmFsaWduCTE2CisuTHh0c19kZWNfc2hvcnQ6CisJbGxnYwkkbGVuLGAyKiRTSVpFX1QtMWAoJHNwKQorCW5pbGwJJGxlbiwweDBmCQkjICRsZW4lMTYKKwlscnZnCSRzMSwkdHdlYWsrMCgkc3ApCSMgbG9hZCB0aGUgdHdlYWsgaW4gbGl0dGxlLWVuZGlhbgorCWxydmcJJHMzLCR0d2Vhays4KCRzcCkKKy5MeHRzX2RlY18ybmR0d2VhazoKKwlsZ2hpCSVyMSwweDg3CisJc3JhZwklcjAsJHMzLDYzCQkjIGJyb2FkY2FzdCB1cHBlciBiaXQKKwluZ3IJJXIxLCVyMAkJCSMgcmVtCisJc3JsZwklcjAsJHMxLDYzCQkjIGNhcnJ5IGJpdCBmcm9tIGxvd2VyIGhhbGYKKwlzbGxnCSRzMSwkczEsMQorCXNsbGcJJHMzLCRzMywxCisJeGdyCSRzMSwlcjEKKwlvZ3IJJHMzLCVyMAorCWxydmdyCSRzMSwkczEJCQkjIGZsaXAgYnl0ZSBvcmRlcgorCWxydmdyCSRzMywkczMKKwlzcmxnCSRzMCwkczEsMzIJCSMgc21hc2ggdGhlIHR3ZWFrIHRvIDR4MzItYml0cworCXN0ZwkkczEsJHR3ZWFrLTE2KzAoJHNwKQkjIHNhdmUgdGhlIDJuZCB0d2VhaworCWxsZ2ZyCSRzMSwkczEKKwlzcmxnCSRzMiwkczMsMzIKKwlzdGcJJHMzLCR0d2Vhay0xNis4KCRzcCkKKwlsbGdmcgkkczMsJHMzCisKKwl4CSRzMCwwKCRpbnApCQkjIHR3ZWFrX3RoZV8ybmRePSooaW5wKQorCXgJJHMxLDQoJGlucCkKKwl4CSRzMiw4KCRpbnApCisJeAkkczMsMTIoJGlucCkKKwlzdG0ke2d9CSVyMiwlcjMsMiokU0laRV9UKCRzcCkKKwlsYQkka2V5LDAoJGtleTEpCisJYnJhcwkkcmEsX3MzOTB4X0FFU19kZWNyeXB0CisJbG0ke2d9CSVyMiwlcjUsMiokU0laRV9UKCRzcCkKKwl4CSRzMCwkdHdlYWstMTYrMCgkc3ApCSMgXj10d2Vha190aGVfMm5kCisJeAkkczEsJHR3ZWFrLTE2KzQoJHNwKQorCXgJJHMyLCR0d2Vhay0xNis4KCRzcCkKKwl4CSRzMywkdHdlYWstMTYrMTIoJHNwKQorCXN0CSRzMCwwKCRvdXQsJGlucCkKKwlzdAkkczEsNCgkb3V0LCRpbnApCisJc3QJJHMyLDgoJG91dCwkaW5wKQorCXN0CSRzMywxMigkb3V0LCRpbnApCisKKwlsYQkkaTMsMCgkb3V0LCRpbnApCSMgcHV0IGFzaWRlIHJlYWwgJG91dAorLkx4dHNfZGVjX3N0ZWFsOgorCWxsZ2MJJXIwLDE2KCRpbnApCisJbGxnYwklcjEsMCgkb3V0LCRpbnApCisJc3RjCSVyMCwwKCRvdXQsJGlucCkKKwlzdGMJJXIxLDE2KCRvdXQsJGlucCkKKwlsYQkkaW5wLDEoJGlucCkKKwlicmN0CSRsZW4sLkx4dHNfZGVjX3N0ZWFsCisJbGEJJG91dCwwKCRpMykJCSMgcmVzdG9yZSByZWFsICRvdXQKKworCWxtCSRzMCwkczMsJHR3ZWFrKCRzcCkJIyBsb2FkIHRoZSAxc3QgdHdlYWsKKwl4CSRzMCwwKCRvdXQpCQkjIHR3ZWFrXj0qKGlucCl8c3RvbGVuIGNpcGhlci10ZXh0CisJeAkkczEsNCgkb3V0KQorCXgJJHMyLDgoJG91dCkKKwl4CSRzMywxMigkb3V0KQorCXN0JHtnfQkkb3V0LDQqJFNJWkVfVCgkc3ApCisJbGEJJGtleSwwKCRrZXkxKQorCWJyYXMJJHJhLF9zMzkweF9BRVNfZGVjcnlwdAorCWwke2d9CSRvdXQsNCokU0laRV9UKCRzcCkKKwl4CSRzMCwkdHdlYWsrMCgkc3ApCSMgXj10d2VhaworCXgJJHMxLCR0d2Vhays0KCRzcCkKKwl4CSRzMiwkdHdlYWsrOCgkc3ApCisJeAkkczMsJHR3ZWFrKzEyKCRzcCkKKwlzdAkkczAsMCgkb3V0KQorCXN0CSRzMSw0KCRvdXQpCisJc3QJJHMyLDgoJG91dCkKKwlzdAkkczMsMTIoJG91dCkKKwlzdGcJJHNwLCR0d2Vhay0xNiswKCRzcCkJIyB3aXBlIDJuZCB0d2VhaworCXN0Zwkkc3AsJHR3ZWFrLTE2KzgoJHNwKQorLkx4dHNfZGVjX2RvbmU6CisJc3RnCSRzcCwkdHdlYWsrMCgkc3ApCSMgd2lwZSB0d2VhaworCXN0Zwkkc3AsJHR3ZXNrKzgoJHNwKQorCWxtJHtnfQklcjYsJHJhLDYqJFNJWkVfVCgkc3ApCisJYnIJJHJhCisuc2l6ZQlBRVNfeHRzX2RlY3J5cHQsLi1BRVNfeHRzX2RlY3J5cHQKIF9fXwogfQogJGNvZGUuPTw8X19fOwogLnN0cmluZwkiQUVTIGZvciBzMzkweCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5jb21tCU9QRU5TU0xfczM5MHhjYXBfUCwxNiw4CiBfX18KIAogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CiBwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsJIyBmb3JjZSBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzLXg4Nl82NC5wbCBiL2NyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGwKaW5kZXggYTU0NWU4OS4uNDhmYTg1NyAxMDA3NTUKLS0tIGEvY3J5cHRvL2Flcy9hc20vYWVzLXg4Nl82NC5wbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMteDg2XzY0LnBsCkBAIC01ODgsNiArNTg4LDkgQEAKIC5nbG9ibAlBRVNfZW5jcnlwdAogLnR5cGUJQUVTX2VuY3J5cHQsXEBmdW5jdGlvbiwzCiAuYWxpZ24JMTYKKy5nbG9ibAlhc21fQUVTX2VuY3J5cHQKKy5oaWRkZW4JYXNtX0FFU19lbmNyeXB0Cithc21fQUVTX2VuY3J5cHQ6CiBBRVNfZW5jcnlwdDoKIAlwdXNoCSVyYngKIAlwdXNoCSVyYnAKQEAgLTExODQsNiArMTE4Nyw5IEBACiAuZ2xvYmwJQUVTX2RlY3J5cHQKIC50eXBlCUFFU19kZWNyeXB0LFxAZnVuY3Rpb24sMwogLmFsaWduCTE2CisuZ2xvYmwJYXNtX0FFU19kZWNyeXB0CisuaGlkZGVuCWFzbV9BRVNfZGVjcnlwdAorYXNtX0FFU19kZWNyeXB0OgogQUVTX2RlY3J5cHQ6CiAJcHVzaAklcmJ4CiAJcHVzaAklcmJwCkBAIC0xMjc3LDEzICsxMjgzLDEzIEBACiBfX18KIH0KIAotIyBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyMgaW50IHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKICMgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCiAkY29kZS49PDxfX187Ci0uZ2xvYmwJQUVTX3NldF9lbmNyeXB0X2tleQotLnR5cGUJQUVTX3NldF9lbmNyeXB0X2tleSxcQGZ1bmN0aW9uLDMKKy5nbG9ibAlwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKKy50eXBlCXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSxcQGZ1bmN0aW9uLDMKIC5hbGlnbgkxNgotQUVTX3NldF9lbmNyeXB0X2tleToKK3ByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleToKIAlwdXNoCSVyYngKIAlwdXNoCSVyYnAKIAlwdXNoCSVyMTIJCQkjIHJlZHVuZGFudCwgYnV0IGFsbG93cyB0byBzaGFyZSAKQEAgLTEzMDQsNyArMTMxMCw3IEBACiAJYWRkCVwkNTYsJXJzcAogLkxlbmNfa2V5X2VwaWxvZ3VlOgogCXJldAotLnNpemUJQUVTX3NldF9lbmNyeXB0X2tleSwuLUFFU19zZXRfZW5jcnlwdF9rZXkKKy5zaXplCXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSwuLXByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQogCiAudHlwZQlfeDg2XzY0X0FFU19zZXRfZW5jcnlwdF9rZXksXEBhYmktb21uaXBvdGVudAogLmFsaWduCTE2CkBAIC0xNTQ3LDEzICsxNTUzLDEzIEBACiBfX18KIH0KIAotIyBpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyMgaW50IHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKICMgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCiAkY29kZS49PDxfX187Ci0uZ2xvYmwJQUVTX3NldF9kZWNyeXB0X2tleQotLnR5cGUJQUVTX3NldF9kZWNyeXB0X2tleSxcQGZ1bmN0aW9uLDMKKy5nbG9ibAlwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKy50eXBlCXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSxcQGZ1bmN0aW9uLDMKIC5hbGlnbgkxNgotQUVTX3NldF9kZWNyeXB0X2tleToKK3ByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleToKIAlwdXNoCSVyYngKIAlwdXNoCSVyYnAKIAlwdXNoCSVyMTIKQEAgLTE2MjIsNyArMTYyOCw3IEBACiAJYWRkCVwkNTYsJXJzcAogLkxkZWNfa2V5X2VwaWxvZ3VlOgogCXJldAotLnNpemUJQUVTX3NldF9kZWNyeXB0X2tleSwuLUFFU19zZXRfZGVjcnlwdF9rZXkKKy5zaXplCXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSwuLXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQogX19fCiAKICMgdm9pZCBBRVNfY2JjX2VuY3J5cHQgKGNvbnN0IHZvaWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCkBAIC0xNjQ4LDYgKzE2NTQsOSBAQAogLnR5cGUJQUVTX2NiY19lbmNyeXB0LFxAZnVuY3Rpb24sNgogLmFsaWduCTE2CiAuZXh0ZXJuCU9QRU5TU0xfaWEzMmNhcF9QCisuZ2xvYmwJYXNtX0FFU19jYmNfZW5jcnlwdAorLmhpZGRlbglhc21fQUVTX2NiY19lbmNyeXB0Cithc21fQUVTX2NiY19lbmNyeXB0OgogQUVTX2NiY19lbmNyeXB0OgogCWNtcAlcJDAsJXJkeAkjIGNoZWNrIGxlbmd0aAogCWplCS5MY2JjX2VwaWxvZ3VlCkBAIC0yNzY2LDEzICsyNzc1LDEzIEBACiAJLnJ2YQkuTFNFSF9lbmRfQUVTX2RlY3J5cHQKIAkucnZhCS5MU0VIX2luZm9fQUVTX2RlY3J5cHQKIAotCS5ydmEJLkxTRUhfYmVnaW5fQUVTX3NldF9lbmNyeXB0X2tleQotCS5ydmEJLkxTRUhfZW5kX0FFU19zZXRfZW5jcnlwdF9rZXkKLQkucnZhCS5MU0VIX2luZm9fQUVTX3NldF9lbmNyeXB0X2tleQorCS5ydmEJLkxTRUhfYmVnaW5fcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisJLnJ2YQkuTFNFSF9lbmRfcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisJLnJ2YQkuTFNFSF9pbmZvX3ByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQogCi0JLnJ2YQkuTFNFSF9iZWdpbl9BRVNfc2V0X2RlY3J5cHRfa2V5Ci0JLnJ2YQkuTFNFSF9lbmRfQUVTX3NldF9kZWNyeXB0X2tleQotCS5ydmEJLkxTRUhfaW5mb19BRVNfc2V0X2RlY3J5cHRfa2V5CisJLnJ2YQkuTFNFSF9iZWdpbl9wcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKwkucnZhCS5MU0VIX2VuZF9wcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKwkucnZhCS5MU0VIX2luZm9fcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5CiAKIAkucnZhCS5MU0VIX2JlZ2luX0FFU19jYmNfZW5jcnlwdAogCS5ydmEJLkxTRUhfZW5kX0FFU19jYmNfZW5jcnlwdApAQCAtMjc4OCwxMSArMjc5NywxMSBAQAogCS5ieXRlCTksMCwwLDAKIAkucnZhCWJsb2NrX3NlX2hhbmRsZXIKIAkucnZhCS5MZGVjX3Byb2xvZ3VlLC5MZGVjX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGFbXQotLkxTRUhfaW5mb19BRVNfc2V0X2VuY3J5cHRfa2V5OgorLkxTRUhfaW5mb19wcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXk6CiAJLmJ5dGUJOSwwLDAsMAogCS5ydmEJa2V5X3NlX2hhbmRsZXIKIAkucnZhCS5MZW5jX2tleV9wcm9sb2d1ZSwuTGVuY19rZXlfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCi0uTFNFSF9pbmZvX0FFU19zZXRfZGVjcnlwdF9rZXk6CisuTFNFSF9pbmZvX3ByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleToKIAkuYnl0ZQk5LDAsMCwwCiAJLnJ2YQlrZXlfc2VfaGFuZGxlcgogCS5ydmEJLkxkZWNfa2V5X3Byb2xvZ3VlLC5MZGVjX2tleV9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flc25pLXNoYTEteDg2XzY0LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzbmktc2hhMS14ODZfNjQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmNmIzMwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2Flc25pLXNoYTEteDg2XzY0LnBsCkBAIC0wLDAgKzEsMTI0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgSnVuZSAyMDExCisjCisjIFRoaXMgaXMgQUVTTkktQ0JDK1NIQTEgInN0aXRjaCIgaW1wbGVtZW50YXRpb24uIFRoZSBpZGVhLCBhcyBzcGVsbGVkCisjIGluIGh0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL2ludGFyY2gvcGFwZXJzLzMyMzY4Ni5wZGYsIGlzCisjIHRoYXQgc2luY2UgQUVTTkktQ0JDIGVuY3J5cHQgZXhoaWJpdCAqdmVyeSogbG93IGluc3RydWN0aW9uLWxldmVsCisjIHBhcmFsbGVsaXNtLCBpbnRlcmxlYXZpbmcgaXQgd2l0aCBhbm90aGVyIGFsZ29yaXRobSB3b3VsZCBhbGxvdyB0bworIyB1dGlsaXplIHByb2Nlc3NvciByZXNvdXJjZXMgYmV0dGVyIGFuZCBhY2hpZXZlIGJldHRlciBwZXJmb3JtYW5jZS4KKyMgU0hBMSBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMoKikgYXJlIHRha2VuIGZyb20gc2hhMS14ODZfNjQucGwgYW5kCisjIEFFU05JIGNvZGUgaXMgd2VhdmVkIGludG8gaXQuIEJlbG93IGFyZSBwZXJmb3JtYW5jZSBudW1iZXJzIGluCisjIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUsIGxlc3MgaXMgYmV0dGVyLCBmb3Igc3RhbmRhbG9uZSBBRVNOSS1DQkMKKyMgZW5jcnlwdCwgc3VtIG9mIHRoZSBsYXR0ZXIgYW5kIHN0YW5kYWxvbmUgU0hBMSwgYW5kICJzdGl0Y2hlZCIKKyMgc3Vicm91dGluZToKKyMKKyMJCUFFUy0xMjgtQ0JDCStTSEExCQlzdGl0Y2ggICAgICBnYWluCisjIFdlc3RtZXJlCTMuNzdbKzUuNl0JOS4zNwkJNi42NQkgICAgKzQxJQorIyBTYW5keSBCcmlkZ2UJNS4wNVsrNS4yKDYuMyldCTEwLjI1KDExLjM1KQk2LjE2KDcuMDgpICArNjclKCs2MCUpCisjCisjCQlBRVMtMTkyLUNCQworIyBXZXN0bWVyZQk0LjUxCQkxMC4xMQkJNi45NwkgICAgKzQ1JQorIyBTYW5keSBCcmlkZ2UJNi4wNQkJMTEuMjUoMTIuMzUpCTYuMzQoNy4yNykgICs3NyUoKzcwJSkKKyMKKyMJCUFFUy0yNTYtQ0JDCisjIFdlc3RtZXJlCTUuMjUJCTEwLjg1CQk3LjI1CSAgICArNTAlCisjIFNhbmR5IEJyaWRnZQk3LjA1CQkxMi4yNSgxMy4zNSkJNy4wNig3LjcwKSAgKzc0JSgrNzMlKQorIworIyAoKikJVGhlcmUgYXJlIHR3byBjb2RlIHBhdGhzOiBTU1NFMyBhbmQgQVZYLiBTZWUgc2hhMS01NjgucGwgZm9yCisjCWJhY2tncm91bmQgaW5mb3JtYXRpb24uIEFib3ZlIG51bWJlcnMgaW4gcGFyZW50aGVzZXMgYXJlIFNTU0UzCisjCXJlc3VsdHMgY29sbGVjdGVkIG9uIEFWWC1jYXBhYmxlIENQVSwgaS5lLiBhcHBseSBvbiBPU2VzIHRoYXQKKyMJZG9uJ3Qgc3VwcG9ydCBBVlguCisjCisjIE5lZWRsZXNzIHRvIG1lbnRpb24gdGhhdCBpdCBtYWtlcyBubyBzZW5zZSB0byBpbXBsZW1lbnQgInN0aXRjaGVkIgorIyAqZGVjcnlwdCogc3Vicm91dGluZS4gQmVjYXVzZSAqYm90aCogQUVTTkktQ0JDIGRlY3J5cHQgYW5kIFNIQTEKKyMgZnVsbHkgdXRpbGl6ZSBwYXJhbGxlbGlzbSwgc28gc3RpdGNoaW5nIHdvdWxkIG5vdCBnaXZlIGFueSBnYWluCisjIGFueXdheS4gV2VsbCwgdGhlcmUgbWlnaHQgYmUgc29tZSwgZS5nLiBiZWNhdXNlIG9mIGJldHRlciBjYWNoZQorIyBsb2NhbGl0eS4uLiBGb3IgcmVmZXJlbmNlLCBoZXJlIGFyZSBwZXJmb3JtYW5jZSByZXN1bHRzIGZvcgorIyBzdGFuZGFsb25lIEFFU05JLUNCQyBkZWNyeXB0OgorIworIwkJQUVTLTEyOC1DQkMJQUVTLTE5Mi1DQkMJQUVTLTI1Ni1DQkMKKyMgV2VzdG1lcmUJMS4zMQkJMS41NQkJMS44MAorIyBTYW5keSBCcmlkZ2UJMC45MwkJMS4wNgkJMS4yMgorCiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCAgPSBzaGlmdDsKK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKworJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAvW25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKyggJHhsYXRlPSIke2Rpcn14ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgorKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKKworJGF2eD0xIGlmIChgJEVOVntDQ30gLVdhLC12IC1jIC1vIC9kZXYvbnVsbCAteCBhc3NlbWJsZXIgL2Rldi9udWxsIDI+JjFgCisJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgorCSAgICQxPj0yLjE5KTsKKyRhdng9MSBpZiAoISRhdnggJiYgJHdpbjY0ICYmICgkZmxhdm91ciA9fiAvbmFzbS8gfHwgJEVOVntBU019ID1+IC9uYXNtLykgJiYKKwkgICBgbmFzbSAtdiAyPiYxYCA9fiAvTkFTTSB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8gJiYKKwkgICAkMT49Mi4wOSk7CiskYXZ4PTEgaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL21hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbWw2NC8pICYmCisJICAgYG1sNjQgMj4mMWAgPX4gL1ZlcnNpb24gKFswLTldKylcLi8gJiYKKwkgICAkMT49MTApOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOworCisjIHZvaWQgYWVzbmlfY2JjX3NoYTFfZW5jKGNvbnN0IHZvaWQgKmlucCwKKyMJCQl2b2lkICpvdXQsCisjCQkJc2l6ZV90IGxlbmd0aCwKKyMJCQljb25zdCBBRVNfS0VZICprZXksCisjCQkJdW5zaWduZWQgY2hhciAqaXYsCisjCQkJU0hBX0NUWCAqY3R4LAorIwkJCWNvbnN0IHZvaWQgKmluMCk7CisKKyRjb2RlLj08PF9fXzsKKy50ZXh0CisuZXh0ZXJuCU9QRU5TU0xfaWEzMmNhcF9QCisKKy5nbG9ibAlhZXNuaV9jYmNfc2hhMV9lbmMKKy50eXBlCWFlc25pX2NiY19zaGExX2VuYyxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2Flc25pX2NiY19zaGExX2VuYzoKKwkjIGNhbGxlciBzaG91bGQgY2hlY2sgZm9yIFNTU0UzIGFuZCBBRVMtTkkgYml0cworCW1vdglPUEVOU1NMX2lhMzJjYXBfUCswKCVyaXApLCVyMTBkCisJbW92CU9QRU5TU0xfaWEzMmNhcF9QKzQoJXJpcCksJXIxMWQKK19fXworJGNvZGUuPTw8X19fIGlmICgkYXZ4KTsKKwlhbmQJXCRgMTw8MjhgLCVyMTFkCQkjIG1hc2sgQVZYIGJpdAorCWFuZAlcJGAxPDwzMGAsJXIxMGQJCSMgbWFzayAiSW50ZWwgQ1BVIiBiaXQKKwlvcgklcjExZCwlcjEwZAorCWNtcAlcJGAxPDwyOHwxPDwzMGAsJXIxMGQKKwlqZQlhZXNuaV9jYmNfc2hhMV9lbmNfYXZ4CitfX18KKyRjb2RlLj08PF9fXzsKKwlqbXAJYWVzbmlfY2JjX3NoYTFfZW5jX3Nzc2UzCisJcmV0Cisuc2l6ZQlhZXNuaV9jYmNfc2hhMV9lbmMsLi1hZXNuaV9jYmNfc2hhMV9lbmMKK19fXworCitteSAoJGluMCwkb3V0LCRsZW4sJGtleSwkaXZwLCRjdHgsJGlucCk9KCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4IiwiJXI4IiwiJXI5IiwiJXIxMCIpOworCitteSAkWGk9NDsKK215IEBYPW1hcCgiJXhtbSRfIiwoNC4uNywwLi4zKSk7CitteSBAVHg9bWFwKCIleG1tJF8iLCg4Li4xMCkpOworbXkgQFY9KCRBLCRCLCRDLCRELCRFKT0oIiVlYXgiLCIlZWJ4IiwiJWVjeCIsIiVlZHgiLCIlZWJwIik7CSMgc2l6ZSBvcHRpbWl6YXRpb24KK215IEBUPSgiJWVzaSIsIiVlZGkiKTsKK215ICRqPTA7IG15ICRqaj0wOyBteSAkcj0wOyBteSAkc249MDsKK215ICRLX1hYX1hYPSIlcjExIjsKK215ICgkaXYsJGluLCRybmRrZXkwKT1tYXAoIiV4bW0kXyIsKDExLi4xMykpOworbXkgQHJuZGtleT0oIiV4bW0xNCIsIiV4bW0xNSIpOworCitzdWIgQVVUT0xPQUQoKQkJIyB0aHVuayBbc2ltcGxpZmllZF0gMzItYml0IHN0eWxlIHBlcmxhc20KK3sgbXkgJG9wY29kZSA9ICRBVVRPTE9BRDsgJG9wY29kZSA9fiBzLy4qOjovLzsKKyAgbXkgJGFyZyA9IHBvcDsKKyAgICAkYXJnID0gIlwkJGFyZyIgaWYgKCRhcmcqMSBlcSAkYXJnKTsKKyAgICAkY29kZSAuPSAiXHQkb3Bjb2RlXHQiLmpvaW4oJywnLCRhcmcscmV2ZXJzZSBAXykuIlxuIjsKK30KKworbXkgJF9yb2w9c3ViIHsgJnJvbChAXykgfTsKK215ICRfcm9yPXN1YiB7ICZyb3IoQF8pIH07CisKKyRjb2RlLj08PF9fXzsKKy50eXBlCWFlc25pX2NiY19zaGExX2VuY19zc3NlMyxcQGZ1bmN0aW9uLDYKKy5hbGlnbgkxNgorYWVzbmlfY2JjX3NoYTFfZW5jX3Nzc2UzOgorCW1vdglgKCR3aW42ND81Njo4KWAoJXJzcCksJGlucAkjIGxvYWQgN3RoIGFyZ3VtZW50CisJI3NocglcJDYsJGxlbgkJCSMgZGVidWdnaW5nIGFydGVmYWN0CisJI2p6CS5MZXBpbG9ndWVfc3NzZTMJCSMgZGVidWdnaW5nIGFydGVmYWN0CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJbGVhCWAtMTA0LSgkd2luNjQ/MTAqMTY6MClgKCVyc3ApLCVyc3AKKwkjbW92CSRpbjAsJGlucAkJCSMgZGVidWdnaW5nIGFydGVmYWN0CisJI2xlYQk2NCglcnNwKSwkY3R4CQkJIyBkZWJ1Z2dpbmcgYXJ0ZWZhY3QKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkleG1tNiw5NiswKCVyc3ApCisJbW92YXBzCSV4bW03LDk2KzE2KCVyc3ApCisJbW92YXBzCSV4bW04LDk2KzMyKCVyc3ApCisJbW92YXBzCSV4bW05LDk2KzQ4KCVyc3ApCisJbW92YXBzCSV4bW0xMCw5Nis2NCglcnNwKQorCW1vdmFwcwkleG1tMTEsOTYrODAoJXJzcCkKKwltb3ZhcHMJJXhtbTEyLDk2Kzk2KCVyc3ApCisJbW92YXBzCSV4bW0xMyw5NisxMTIoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LDk2KzEyOCglcnNwKQorCW1vdmFwcwkleG1tMTUsOTYrMTQ0KCVyc3ApCisuTHByb2xvZ3VlX3Nzc2UzOgorX19fCiskY29kZS49PDxfX187CisJbW92CSRpbjAsJXIxMgkJCSMgcmVhc3NpZ24gYXJndW1lbnRzCisJbW92CSRvdXQsJXIxMworCW1vdgkkbGVuLCVyMTQKKwltb3YJJGtleSwlcjE1CisJbW92ZHF1CSgkaXZwKSwkaXYJCQkjIGxvYWQgSVYKKwltb3YJJGl2cCw4OCglcnNwKQkJCSMgc2F2ZSAkaXZwCitfX18KK215ICgkaW4wLCRvdXQsJGxlbiwka2V5KT1tYXAoIiVyJF8iLCgxMi4uMTUpKTsJIyByZWFzc2lnbiBhcmd1bWVudHMKK215ICRyb3VuZHM9IiR7aXZwfWQiOworJGNvZGUuPTw8X19fOworCXNobAlcJDYsJGxlbgorCXN1YgkkaW4wLCRvdXQKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMKKwlhZGQJJGlucCwkbGVuCQkjIGVuZCBvZiBpbnB1dAorCisJbGVhCUtfWFhfWFgoJXJpcCksJEtfWFhfWFgKKwltb3YJMCgkY3R4KSwkQQkJIyBsb2FkIGNvbnRleHQKKwltb3YJNCgkY3R4KSwkQgorCW1vdgk4KCRjdHgpLCRDCisJbW92CTEyKCRjdHgpLCRECisJbW92CSRCLEBUWzBdCQkjIG1hZ2ljIHNlZWQKKwltb3YJMTYoJGN0eCksJEUKKworCW1vdmRxYQk2NCgkS19YWF9YWCksQFhbMl0JIyBwYnN3YXAgbWFzaworCW1vdmRxYQkwKCRLX1hYX1hYKSxAVHhbMV0JIyBLXzAwXzE5CisJbW92ZHF1CTAoJGlucCksQFhbLTQmN10JIyBsb2FkIGlucHV0IHRvICV4bW1bMC0zXQorCW1vdmRxdQkxNigkaW5wKSxAWFstMyY3XQorCW1vdmRxdQkzMigkaW5wKSxAWFstMiY3XQorCW1vdmRxdQk0OCgkaW5wKSxAWFstMSY3XQorCXBzaHVmYglAWFsyXSxAWFstNCY3XQkJIyBieXRlIHN3YXAKKwlhZGQJXCQ2NCwkaW5wCisJcHNodWZiCUBYWzJdLEBYWy0zJjddCisJcHNodWZiCUBYWzJdLEBYWy0yJjddCisJcHNodWZiCUBYWzJdLEBYWy0xJjddCisJcGFkZGQJQFR4WzFdLEBYWy00JjddCQkjIGFkZCBLXzAwXzE5CisJcGFkZGQJQFR4WzFdLEBYWy0zJjddCisJcGFkZGQJQFR4WzFdLEBYWy0yJjddCisJbW92ZHFhCUBYWy00JjddLDAoJXJzcCkJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwlwc3ViZAlAVHhbMV0sQFhbLTQmN10JCSMgcmVzdG9yZSBYW10KKwltb3ZkcWEJQFhbLTMmN10sMTYoJXJzcCkKKwlwc3ViZAlAVHhbMV0sQFhbLTMmN10KKwltb3ZkcWEJQFhbLTImN10sMzIoJXJzcCkKKwlwc3ViZAlAVHhbMV0sQFhbLTImN10KKwltb3Z1cHMJKCRrZXkpLCRybmRrZXkwCQkjICRrZXlbMF0KKwltb3Z1cHMJMTYoJGtleSksJHJuZGtleVswXQkjIGZvcndhcmQgcmVmZXJlbmNlCisJam1wCS5Mb29wX3Nzc2UzCitfX18KKworbXkgJGFlc2VuYz1zdWIgeworICB1c2UgaW50ZWdlcjsKKyAgbXkgKCRuLCRrKT0oJHIvMTAsJHIlMTApOworICAgIGlmICgkaz09MCkgeworICAgICAgJGNvZGUuPTw8X19fOworCW1vdnVwcwkJYDE2KiRuYCgkaW4wKSwkaW4JCSMgbG9hZCBpbnB1dAorCXhvcnBzCQkkcm5ka2V5MCwkaW4KK19fXworICAgICAgJGNvZGUuPTw8X19fIGlmICgkbik7CisJbW92dXBzCQkkaXYsYDE2Kigkbi0xKWAoJG91dCwkaW4wKQkjIHdyaXRlIG91dHB1dAorX19fCisgICAgICAkY29kZS49PDxfX187CisJeG9ycHMJCSRpbiwkaXYKKwlhZXNlbmMJCSRybmRrZXlbMF0sJGl2CisJbW92dXBzCQlgMzIrMTYqJGtgKCRrZXkpLCRybmRrZXlbMV0KK19fXworICAgIH0gZWxzaWYgKCRrPT05KSB7CisgICAgICAkc24rKzsKKyAgICAgICRjb2RlLj08PF9fXzsKKwljbXAJCVwkMTEsJHJvdW5kcworCWpiCQkuTGFlc2VuY2xhc3Qkc24KKwltb3Z1cHMJCWAzMisxNiooJGsrMClgKCRrZXkpLCRybmRrZXlbMV0KKwlhZXNlbmMJCSRybmRrZXlbMF0sJGl2CisJbW92dXBzCQlgMzIrMTYqKCRrKzEpYCgka2V5KSwkcm5ka2V5WzBdCisJYWVzZW5jCQkkcm5ka2V5WzFdLCRpdgorCWplCQkuTGFlc2VuY2xhc3Qkc24KKwltb3Z1cHMJCWAzMisxNiooJGsrMilgKCRrZXkpLCRybmRrZXlbMV0KKwlhZXNlbmMJCSRybmRrZXlbMF0sJGl2CisJbW92dXBzCQlgMzIrMTYqKCRrKzMpYCgka2V5KSwkcm5ka2V5WzBdCisJYWVzZW5jCQkkcm5ka2V5WzFdLCRpdgorLkxhZXNlbmNsYXN0JHNuOgorCWFlc2VuY2xhc3QJJHJuZGtleVswXSwkaXYKKwltb3Z1cHMJCTE2KCRrZXkpLCRybmRrZXlbMV0JCSMgZm9yd2FyZCByZWZlcmVuY2UKK19fXworICAgIH0gZWxzZSB7CisgICAgICAkY29kZS49PDxfX187CisJYWVzZW5jCQkkcm5ka2V5WzBdLCRpdgorCW1vdnVwcwkJYDMyKzE2KiRrYCgka2V5KSwkcm5ka2V5WzFdCitfX18KKyAgICB9CisgICAgJHIrKzsJdW5zaGlmdChAcm5ka2V5LHBvcChAcm5ka2V5KSk7Cit9OworCitzdWIgWHVwZGF0ZV9zc3NlM18xNl8zMSgpCQkjIHJlY2FsbCB0aGF0ICRYaSBzdGFydHMgd3RpaCA0Cit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmbW92ZHFhCShAVHhbMF0sQFhbLTEmN10pOworCSZwYWxpZ25yKEBYWzBdLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZwYWRkZAkoQFR4WzFdLEBYWy0xJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmcHNybGRxCShAVHhbMF0sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSJePSJYWy0xNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHhvcgkoQFR4WzBdLEBYWy0yJjddKTsJIyAiWFstM10iXiJYWy04XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZtb3ZkcWEJKEBUeFsyXSxAWFswXSk7CisJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZwc2xsZHEJKEBUeFsyXSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCisJJnBhZGRkCShAWFswXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBUeFswXSwzMSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJm1vdmRxYQkoQFR4WzFdLEBUeFsyXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBUeFsyXSwzMCk7CisJJnBvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTEKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZwc2xsZAkoQFR4WzFdLDIpOworCSZweG9yCShAWFswXSxAVHhbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoQFR4WzJdLGV2YWwoMTYqKCgkWGkpLzUpKS4iKCRLX1hYX1hYKSIpOwkjIEtfWFhfWFgKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAVHhbMV0pOwkJIyAiWFswXSJePSgiWFswXSI+Pjk2KTw8PDIKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KKworICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQorCQlwdXNoKEBUeCxzaGlmdChAVHgpKTsKK30KKworc3ViIFh1cGRhdGVfc3NzZTNfMzJfNzkoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDggaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwkmbW92ZHFhCShAVHhbMF0sQFhbLTEmN10pCWlmICgkWGk9PTgpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJeIlhbLTE2XSIKKwkmcGFsaWducihAVHhbMF0sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJnB4b3IJKEBYWzBdLEBYWy03JjddKTsJIyAiWFswXSJePSJYWy0yOF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSkJaWYgKEBpbnNuc1swXSAhfiAvJnJvW3JsXS8pOworCWlmICgkWGklNSkgeworCSAgJm1vdmRxYQkoQFR4WzJdLEBUeFsxXSk7IyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgorCX0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQorCSAgJm1vdmRxYQkoQFR4WzJdLGV2YWwoMTYqKCRYaS81KSkuIigkS19YWF9YWCkiKTsKKwl9CisJICAmcGFkZGQJKEBUeFsxXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnB4b3IJKEBYWzBdLEBUeFswXSk7CQkjICJYWzBdIl49IlhbLTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKKwkgICZtb3ZkcWEJKGV2YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnBzbGxkCShAWFswXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc3JsZAkoQFR4WzBdLDMwKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnBvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoQFR4WzFdLEBYWzBdKQlpZiAoJFhpPDE5KTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucworCisgICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCisJCXB1c2goQFR4LHNoaWZ0KEBUeCkpOworfQorCitzdWIgWHVwbGFzdF9zc3NlM184MCgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnBhZGRkCShAVHhbMV0sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJICAmbW92ZHFhCShldmFsKDE2KigoJFhpLTEpJjMpKS4iKCVyc3ApIixAVHhbMV0pOwkjIFhbXStLIHhmZXIgSUFMVQorCisJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKKworCSZjbXAJKCRpbnAsJGxlbik7CisJJmplCSgiLkxkb25lX3Nzc2UzIik7CisKKwl1bnNoaWZ0KEBUeCxwb3AoQFR4KSk7CisKKwkmbW92ZHFhCShAWFsyXSwiNjQoJEtfWFhfWFgpIik7CQkjIHBic3dhcCBtYXNrCisJJm1vdmRxYQkoQFR4WzFdLCIwKCRLX1hYX1hYKSIpOwkJIyBLXzAwXzE5CisJJm1vdmRxdQkoQFhbLTQmN10sIjAoJGlucCkiKTsJCSMgbG9hZCBpbnB1dAorCSZtb3ZkcXUJKEBYWy0zJjddLCIxNigkaW5wKSIpOworCSZtb3ZkcXUJKEBYWy0yJjddLCIzMigkaW5wKSIpOworCSZtb3ZkcXUJKEBYWy0xJjddLCI0OCgkaW5wKSIpOworCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCisJJmFkZAkoJGlucCw2NCk7CisKKyAgJFhpPTA7Cit9CisKK3N1YiBYbG9vcF9zc3NlMygpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc2h1ZmIJKEBYWygkWGktMykmN10sQFhbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwYWRkZAkoQFhbKCRYaS00KSY3XSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZtb3ZkcWEJKGV2YWwoMTYqJFhpKS4iKCVyc3ApIixAWFsoJFhpLTQpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmcHN1YmQJKEBYWygkWGktNCkmN10sQFR4WzFdKTsKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CisgICRYaSsrOworfQorCitzdWIgWHRhaWxfc3NzZTMoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwlmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQorfQorCitzdWIgYm9keV8wMF8xOSAoKSB7CisgIHVzZSBpbnRlZ2VyOworICBteSAoJGssJG4pOworICBteSBAcj0oCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KKwknJmFkZAkoJGUsZXZhbCg0KigkaiYxNSkpLiIoJXJzcCkiKTsnLAkjIFhbXStLIHhmZXIKKwknJnhvcgkoJGMsJGQpOycsCisJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKKwknJiRfcm9sCSgkYSw1KTsnLAorCScmYW5kCShAVFswXSwkYyk7JywJIyAoJGImKCRjXiRkKSkKKwknJnhvcgkoJGMsJGQpOycsCSMgcmVzdG9yZSAkYworCScmeG9yCShAVFswXSwkZCk7JywKKwknJmFkZAkoJGUsJGEpOycsCisJJyYkX3JvcgkoJGIsJGo/NzoyKTsnLAkjICRiPj4+MgorCScmYWRkCSgkZSxAVFswXSk7JwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JworCSk7CisJJG4gPSBzY2FsYXIoQHIpOworCSRrID0gKCgkamorMSkqMTIvMjApKjIwKiRuLzEyOwkjIDEyIGFlc2VuY3MgcGVyIHRoZXNlIDIwIHJvdW5kcworCUByWyRrJSRuXS49JyYkYWVzZW5jKCk7JwlpZiAoJGpqPT0kay8kbik7CisJJGpqKys7CisgICAgcmV0dXJuIEByOworfQorCitzdWIgYm9keV8yMF8zOSAoKSB7CisgIHVzZSBpbnRlZ2VyOworICBteSAoJGssJG4pOworICBteSBAcj0oCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KKwknJmFkZAkoJGUsZXZhbCg0KigkaisrJjE1KSkuIiglcnNwKSIpOycsCSMgWFtdK0sgeGZlcgorCScmeG9yCShAVFswXSwkZCk7JywJIyAoJGJeJGQpCisJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKKwknJiRfcm9sCSgkYSw1KTsnLAorCScmeG9yCShAVFswXSwkYyk7JywJIyAoJGJeJGReJGMpCisJJyZhZGQJKCRlLCRhKTsnLAorCScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCisJJyZhZGQJKCRlLEBUWzBdKTsnCS4ndW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCisJKTsKKwkkbiA9IHNjYWxhcihAcik7CisJJGsgPSAoKCRqaisxKSo4LzIwKSoyMCokbi84OwkjIDggYWVzZW5jcyBwZXIgdGhlc2UgMjAgcm91bmRzCisJQHJbJGslJG5dLj0nJiRhZXNlbmMoKTsnCWlmICgkamo9PSRrLyRuKTsKKwkkamorKzsKKyAgICByZXR1cm4gQHI7Cit9CisKK3N1YiBib2R5XzQwXzU5ICgpIHsKKyAgdXNlIGludGVnZXI7CisgIG15ICgkaywkbik7CisgIG15IEByPSgKKwknKCRhLCRiLCRjLCRkLCRlKT1AVjsnLgorCScmbW92CShAVFsxXSwkYyk7JywKKwknJnhvcgkoJGMsJGQpOycsCisJJyZhZGQJKCRlLGV2YWwoNCooJGorKyYxNSkpLiIoJXJzcCkiKTsnLAkjIFhbXStLIHhmZXIKKwknJmFuZAkoQFRbMV0sJGQpOycsCisJJyZhbmQJKEBUWzBdLCRjKTsnLAkjICgkYiYoJGNeJGQpKQorCScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCisJJyZhZGQJKCRlLEBUWzFdKTsnLAorCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJvdW5kCisJJyYkX3JvbAkoJGEsNSk7JywKKwknJmFkZAkoJGUsQFRbMF0pOycsCisJJyZ4b3IJKCRjLCRkKTsnLAkjIHJlc3RvcmUgJGMKKwknJmFkZAkoJGUsJGEpOycJLid1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKKwkpOworCSRuID0gc2NhbGFyKEByKTsKKwkkaz0oKCRqaisxKSoxMi8yMCkqMjAqJG4vMTI7CSMgMTIgYWVzZW5jcyBwZXIgdGhlc2UgMjAgcm91bmRzCisJQHJbJGslJG5dLj0nJiRhZXNlbmMoKTsnCWlmICgkamo9PSRrLyRuKTsKKwkkamorKzsKKyAgICByZXR1cm4gQHI7Cit9CiskY29kZS49PDxfX187CisuYWxpZ24JMTYKKy5Mb29wX3Nzc2UzOgorX19fCisJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwbGFzdF9zc3NlM184MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgorCisJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOworCQkJCSRzYXZlZF9yPSRyOyBAc2F2ZWRfcm5ka2V5PUBybmRrZXk7CisKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCW1vdnVwcwkkaXYsNDgoJG91dCwkaW4wKQkJIyB3cml0ZSBvdXRwdXQKKwlsZWEJNjQoJGluMCksJGluMAorCisJYWRkCTAoJGN0eCksJEEJCQkjIHVwZGF0ZSBjb250ZXh0CisJYWRkCTQoJGN0eCksQFRbMF0KKwlhZGQJOCgkY3R4KSwkQworCWFkZAkxMigkY3R4KSwkRAorCW1vdgkkQSwwKCRjdHgpCisJYWRkCTE2KCRjdHgpLCRFCisJbW92CUBUWzBdLDQoJGN0eCkKKwltb3YJQFRbMF0sJEIJCQkjIG1hZ2ljIHNlZWQKKwltb3YJJEMsOCgkY3R4KQorCW1vdgkkRCwxMigkY3R4KQorCW1vdgkkRSwxNigkY3R4KQorCWptcAkuTG9vcF9zc3NlMworCisuYWxpZ24JMTYKKy5MZG9uZV9zc3NlMzoKK19fXworCQkJCSRqaj0kaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CisJCQkJJHI9JHNhdmVkX3I7ICAgICBAcm5ka2V5PUBzYXZlZF9ybmRrZXk7CisKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCW1vdnVwcwkkaXYsNDgoJG91dCwkaW4wKQkJIyB3cml0ZSBvdXRwdXQKKwltb3YJODgoJXJzcCksJGl2cAkJCSMgcmVzdG9yZSAkaXZwCisKKwlhZGQJMCgkY3R4KSwkQQkJCSMgdXBkYXRlIGNvbnRleHQKKwlhZGQJNCgkY3R4KSxAVFswXQorCWFkZAk4KCRjdHgpLCRDCisJbW92CSRBLDAoJGN0eCkKKwlhZGQJMTIoJGN0eCksJEQKKwltb3YJQFRbMF0sNCgkY3R4KQorCWFkZAkxNigkY3R4KSwkRQorCW1vdgkkQyw4KCRjdHgpCisJbW92CSRELDEyKCRjdHgpCisJbW92CSRFLDE2KCRjdHgpCisJbW92dXBzCSRpdiwoJGl2cCkJCQkjIHdyaXRlIElWCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3ZhcHMJOTYrMCglcnNwKSwleG1tNgorCW1vdmFwcwk5NisxNiglcnNwKSwleG1tNworCW1vdmFwcwk5NiszMiglcnNwKSwleG1tOAorCW1vdmFwcwk5Nis0OCglcnNwKSwleG1tOQorCW1vdmFwcwk5Nis2NCglcnNwKSwleG1tMTAKKwltb3ZhcHMJOTYrODAoJXJzcCksJXhtbTExCisJbW92YXBzCTk2Kzk2KCVyc3ApLCV4bW0xMgorCW1vdmFwcwk5NisxMTIoJXJzcCksJXhtbTEzCisJbW92YXBzCTk2KzEyOCglcnNwKSwleG1tMTQKKwltb3ZhcHMJOTYrMTQ0KCVyc3ApLCV4bW0xNQorX19fCiskY29kZS49PDxfX187CisJbGVhCWAxMDQrKCR3aW42ND8xMCoxNjowKWAoJXJzcCksJXJzaQorCW1vdgkwKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxlcGlsb2d1ZV9zc3NlMzoKKwlyZXQKKy5zaXplCWFlc25pX2NiY19zaGExX2VuY19zc3NlMywuLWFlc25pX2NiY19zaGExX2VuY19zc3NlMworX19fCisKKyRqPSRqaj0kcj0kc249MDsKKworaWYgKCRhdngpIHsKK215ICgkaW4wLCRvdXQsJGxlbiwka2V5LCRpdnAsJGN0eCwkaW5wKT0oIiVyZGkiLCIlcnNpIiwiJXJkeCIsIiVyY3giLCIlcjgiLCIlcjkiLCIlcjEwIik7CisKK215ICRYaT00OworbXkgQFg9bWFwKCIleG1tJF8iLCg0Li43LDAuLjMpKTsKK215IEBUeD1tYXAoIiV4bW0kXyIsKDguLjEwKSk7CitteSBAVj0oJEEsJEIsJEMsJEQsJEUpPSgiJWVheCIsIiVlYngiLCIlZWN4IiwiJWVkeCIsIiVlYnAiKTsJIyBzaXplIG9wdGltaXphdGlvbgorbXkgQFQ9KCIlZXNpIiwiJWVkaSIpOworCitteSAkX3JvbD1zdWIgeyAmc2hsZChAX1swXSxAXykgfTsKK215ICRfcm9yPXN1YiB7ICZzaHJkKEBfWzBdLEBfKSB9OworCiskY29kZS49PDxfX187CisudHlwZQlhZXNuaV9jYmNfc2hhMV9lbmNfYXZ4LFxAZnVuY3Rpb24sNgorLmFsaWduCTE2CithZXNuaV9jYmNfc2hhMV9lbmNfYXZ4OgorCW1vdglgKCR3aW42ND81Njo4KWAoJXJzcCksJGlucAkjIGxvYWQgN3RoIGFyZ3VtZW50CisJI3NocglcJDYsJGxlbgkJCSMgZGVidWdnaW5nIGFydGVmYWN0CisJI2p6CS5MZXBpbG9ndWVfYXZ4CQkJIyBkZWJ1Z2dpbmcgYXJ0ZWZhY3QKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlsZWEJYC0xMDQtKCR3aW42ND8xMCoxNjowKWAoJXJzcCksJXJzcAorCSNtb3YJJGluMCwkaW5wCQkJIyBkZWJ1Z2dpbmcgYXJ0ZWZhY3QKKwkjbGVhCTY0KCVyc3ApLCRjdHgJCQkjIGRlYnVnZ2luZyBhcnRlZmFjdAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSV4bW02LDk2KzAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsOTYrMTYoJXJzcCkKKwltb3ZhcHMJJXhtbTgsOTYrMzIoJXJzcCkKKwltb3ZhcHMJJXhtbTksOTYrNDgoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLDk2KzY0KCVyc3ApCisJbW92YXBzCSV4bW0xMSw5Nis4MCglcnNwKQorCW1vdmFwcwkleG1tMTIsOTYrOTYoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLDk2KzExMiglcnNwKQorCW1vdmFwcwkleG1tMTQsOTYrMTI4KCVyc3ApCisJbW92YXBzCSV4bW0xNSw5NisxNDQoJXJzcCkKKy5McHJvbG9ndWVfYXZ4OgorX19fCiskY29kZS49PDxfX187CisJdnplcm9hbGwKKwltb3YJJGluMCwlcjEyCQkJIyByZWFzc2lnbiBhcmd1bWVudHMKKwltb3YJJG91dCwlcjEzCisJbW92CSRsZW4sJXIxNAorCW1vdgkka2V5LCVyMTUKKwl2bW92ZHF1CSgkaXZwKSwkaXYJCQkjIGxvYWQgSVYKKwltb3YJJGl2cCw4OCglcnNwKQkJCSMgc2F2ZSAkaXZwCitfX18KK215ICgkaW4wLCRvdXQsJGxlbiwka2V5KT1tYXAoIiVyJF8iLCgxMi4uMTUpKTsJIyByZWFzc2lnbiBhcmd1bWVudHMKK215ICRyb3VuZHM9IiR7aXZwfWQiOworJGNvZGUuPTw8X19fOworCXNobAlcJDYsJGxlbgorCXN1YgkkaW4wLCRvdXQKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMKKwlhZGQJXCQxMTIsJGtleQkJIyBzaXplIG9wdGltaXphdGlvbgorCWFkZAkkaW5wLCRsZW4JCSMgZW5kIG9mIGlucHV0CisKKwlsZWEJS19YWF9YWCglcmlwKSwkS19YWF9YWAorCW1vdgkwKCRjdHgpLCRBCQkjIGxvYWQgY29udGV4dAorCW1vdgk0KCRjdHgpLCRCCisJbW92CTgoJGN0eCksJEMKKwltb3YJMTIoJGN0eCksJEQKKwltb3YJJEIsQFRbMF0JCSMgbWFnaWMgc2VlZAorCW1vdgkxNigkY3R4KSwkRQorCisJdm1vdmRxYQk2NCgkS19YWF9YWCksQFhbMl0JIyBwYnN3YXAgbWFzaworCXZtb3ZkcWEJMCgkS19YWF9YWCksQFR4WzFdCSMgS18wMF8xOQorCXZtb3ZkcXUJMCgkaW5wKSxAWFstNCY3XQkjIGxvYWQgaW5wdXQgdG8gJXhtbVswLTNdCisJdm1vdmRxdQkxNigkaW5wKSxAWFstMyY3XQorCXZtb3ZkcXUJMzIoJGlucCksQFhbLTImN10KKwl2bW92ZHF1CTQ4KCRpbnApLEBYWy0xJjddCisJdnBzaHVmYglAWFsyXSxAWFstNCY3XSxAWFstNCY3XQkjIGJ5dGUgc3dhcAorCWFkZAlcJDY0LCRpbnAKKwl2cHNodWZiCUBYWzJdLEBYWy0zJjddLEBYWy0zJjddCisJdnBzaHVmYglAWFsyXSxAWFstMiY3XSxAWFstMiY3XQorCXZwc2h1ZmIJQFhbMl0sQFhbLTEmN10sQFhbLTEmN10KKwl2cGFkZGQJQFR4WzFdLEBYWy00JjddLEBYWzBdCSMgYWRkIEtfMDBfMTkKKwl2cGFkZGQJQFR4WzFdLEBYWy0zJjddLEBYWzFdCisJdnBhZGRkCUBUeFsxXSxAWFstMiY3XSxAWFsyXQorCXZtb3ZkcWEJQFhbMF0sMCglcnNwKQkJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwl2bW92ZHFhCUBYWzFdLDE2KCVyc3ApCisJdm1vdmRxYQlAWFsyXSwzMiglcnNwKQorCXZtb3Z1cHMJLTExMigka2V5KSwkcm5ka2V5MAkjICRrZXlbMF0KKwl2bW92dXBzCTE2LTExMigka2V5KSwkcm5ka2V5WzBdCSMgZm9yd2FyZCByZWZlcmVuY2UKKwlqbXAJLkxvb3BfYXZ4CitfX18KKworbXkgJGFlc2VuYz1zdWIgeworICB1c2UgaW50ZWdlcjsKKyAgbXkgKCRuLCRrKT0oJHIvMTAsJHIlMTApOworICAgIGlmICgkaz09MCkgeworICAgICAgJGNvZGUuPTw8X19fOworCXZtb3Z1cHMJCWAxNiokbmAoJGluMCksJGluCQkjIGxvYWQgaW5wdXQKKwl2eG9ycHMJCSRybmRrZXkwLCRpbiwkaW4KK19fXworICAgICAgJGNvZGUuPTw8X19fIGlmICgkbik7CisJdm1vdnVwcwkJJGl2LGAxNiooJG4tMSlgKCRvdXQsJGluMCkJIyB3cml0ZSBvdXRwdXQKK19fXworICAgICAgJGNvZGUuPTw8X19fOworCXZ4b3JwcwkJJGluLCRpdiwkaXYKKwl2YWVzZW5jCQkkcm5ka2V5WzBdLCRpdiwkaXYKKwl2bW92dXBzCQlgMzIrMTYqJGstMTEyYCgka2V5KSwkcm5ka2V5WzFdCitfX18KKyAgICB9IGVsc2lmICgkaz09OSkgeworICAgICAgJHNuKys7CisgICAgICAkY29kZS49PDxfX187CisJY21wCQlcJDExLCRyb3VuZHMKKwlqYgkJLkx2YWVzZW5jbGFzdCRzbgorCXZhZXNlbmMJCSRybmRrZXlbMF0sJGl2LCRpdgorCXZtb3Z1cHMJCWAzMisxNiooJGsrMCktMTEyYCgka2V5KSwkcm5ka2V5WzFdCisJdmFlc2VuYwkJJHJuZGtleVsxXSwkaXYsJGl2CisJdm1vdnVwcwkJYDMyKzE2KigkaysxKS0xMTJgKCRrZXkpLCRybmRrZXlbMF0KKwlqZQkJLkx2YWVzZW5jbGFzdCRzbgorCXZhZXNlbmMJCSRybmRrZXlbMF0sJGl2LCRpdgorCXZtb3Z1cHMJCWAzMisxNiooJGsrMiktMTEyYCgka2V5KSwkcm5ka2V5WzFdCisJdmFlc2VuYwkJJHJuZGtleVsxXSwkaXYsJGl2CisJdm1vdnVwcwkJYDMyKzE2KigkayszKS0xMTJgKCRrZXkpLCRybmRrZXlbMF0KKy5MdmFlc2VuY2xhc3Qkc246CisJdmFlc2VuY2xhc3QJJHJuZGtleVswXSwkaXYsJGl2CisJdm1vdnVwcwkJMTYtMTEyKCRrZXkpLCRybmRrZXlbMV0JCSMgZm9yd2FyZCByZWZlcmVuY2UKK19fXworICAgIH0gZWxzZSB7CisgICAgICAkY29kZS49PDxfX187CisJdmFlc2VuYwkJJHJuZGtleVswXSwkaXYsJGl2CisJdm1vdnVwcwkJYDMyKzE2KiRrLTExMmAoJGtleSksJHJuZGtleVsxXQorX19fCisgICAgfQorICAgICRyKys7CXVuc2hpZnQoQHJuZGtleSxwb3AoQHJuZGtleSkpOworfTsKKworc3ViIFh1cGRhdGVfYXZ4XzE2XzMxKCkJCSMgcmVjYWxsIHRoYXQgJFhpIHN0YXJ0cyB3dGloIDQKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDQwIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZ2cGFkZGQJKEBUeFsxXSxAVHhbMV0sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cHNybGRxKEBUeFswXSxAWFstMSY3XSw0KTsJIyAiWFstM10iLCAzIGR3b3JkcworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTQmN10pOwkJIyAiWFswXSJePSJYWy0xNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnB4b3IJKEBUeFswXSxAVHhbMF0sQFhbLTImN10pOwkjICJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZtb3ZkcWEJKGV2YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzcmxkCShAVHhbMF0sQFhbMF0sMzEpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZwc2xsZHEoQFR4WzJdLEBYWzBdLDEyKTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKKwkmdnBhZGRkCShAWFswXSxAWFswXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzcmxkCShAVHhbMV0sQFR4WzJdLDMwKTsKKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTEKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHNsbGQJKEBUeFsyXSxAVHhbMl0sMik7CisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMl0pOwkJIyAiWFswXSJePSgiWFswXSI+Pjk2KTw8PDIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2bW92ZHFhCShAVHhbMl0sZXZhbCgxNiooKCRYaSkvNSkpLiIoJEtfWFhfWFgpIik7CSMgS19YWF9YWAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisKKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCisKKyAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KKwkJcHVzaChAVHgsc2hpZnQoQFR4KSk7Cit9CisKK3N1YiBYdXBkYXRlX2F2eF8zMl83OSgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiB0byA0OCBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2cGFsaWducihAVHhbMF0sQFhbLTEmN10sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCisJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJnZweG9yCShAWFswXSxAWFswXSxAWFstNyY3XSk7CQkjICJYWzBdIl49IlhbLTI4XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKQlpZiAoQGluc25zWzBdICF+IC8mcm9bcmxdLyk7CisJaWYgKCRYaSU1KSB7CisJICAmdm1vdmRxYQkoQFR4WzJdLEBUeFsxXSk7IyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgorCX0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQorCSAgJnZtb3ZkcWEJKEBUeFsyXSxldmFsKDE2KigkWGkvNSkpLiIoJEtfWFhfWFgpIik7CisJfQorCSAgJnZwYWRkZAkoQFR4WzFdLEBUeFsxXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy02XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKworCSZ2cHNybGQJKEBUeFswXSxAWFswXSwzMCk7CisJICAmdm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzbGxkCShAWFswXSxAWFswXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZtb3ZkcWEJKEBUeFsxXSxAWFswXSkJaWYgKCRYaTwxOSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKKworICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQorCQlwdXNoKEBUeCxzaGlmdChAVHgpKTsKK30KKworc3ViIFh1cGxhc3RfYXZ4XzgwKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnBhZGRkCShAVHhbMV0sQFR4WzFdLEBYWy0xJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSAgJm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIElBTFUKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKwkmY21wCSgkaW5wLCRsZW4pOworCSZqZQkoIi5MZG9uZV9hdngiKTsKKworCXVuc2hpZnQoQFR4LHBvcChAVHgpKTsKKworCSZ2bW92ZHFhKEBYWzJdLCI2NCgkS19YWF9YWCkiKTsJCSMgcGJzd2FwIG1hc2sKKwkmdm1vdmRxYShAVHhbMV0sIjAoJEtfWFhfWFgpIik7CQkjIEtfMDBfMTkKKwkmdm1vdmRxdShAWFstNCY3XSwiMCgkaW5wKSIpOwkJIyBsb2FkIGlucHV0CisJJnZtb3ZkcXUoQFhbLTMmN10sIjE2KCRpbnApIik7CisJJnZtb3ZkcXUoQFhbLTImN10sIjMyKCRpbnApIik7CisJJnZtb3ZkcXUoQFhbLTEmN10sIjQ4KCRpbnApIik7CisJJnZwc2h1ZmIoQFhbLTQmN10sQFhbLTQmN10sQFhbMl0pOwkjIGJ5dGUgc3dhcAorCSZhZGQJKCRpbnAsNjQpOworCisgICRYaT0wOworfQorCitzdWIgWGxvb3BfYXZ4KCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwc2h1ZmIoQFhbKCRYaS0zKSY3XSxAWFsoJFhpLTMpJjddLEBYWzJdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnBhZGRkCShAWFskWGkmN10sQFhbKCRYaS00KSY3XSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2bW92ZHFhKGV2YWwoMTYqJFhpKS4iKCVyc3ApIixAWFskWGkmN10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KKyAgJFhpKys7Cit9CisKK3N1YiBYdGFpbF9hdngoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwlmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQorfQorCiskY29kZS49PDxfX187CisuYWxpZ24JMTYKKy5Mb29wX2F2eDoKK19fXworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBsYXN0X2F2eF84MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgorCisJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOworCQkJCSRzYXZlZF9yPSRyOyBAc2F2ZWRfcm5ka2V5PUBybmRrZXk7CisKKwkmWGxvb3BfYXZ4KFwmYm9keV8yMF8zOSk7CisJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOworCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCXZtb3Z1cHMJJGl2LDQ4KCRvdXQsJGluMCkJCSMgd3JpdGUgb3V0cHV0CisJbGVhCTY0KCRpbjApLCRpbjAKKworCWFkZAkwKCRjdHgpLCRBCQkJIyB1cGRhdGUgY29udGV4dAorCWFkZAk0KCRjdHgpLEBUWzBdCisJYWRkCTgoJGN0eCksJEMKKwlhZGQJMTIoJGN0eCksJEQKKwltb3YJJEEsMCgkY3R4KQorCWFkZAkxNigkY3R4KSwkRQorCW1vdglAVFswXSw0KCRjdHgpCisJbW92CUBUWzBdLCRCCQkJIyBtYWdpYyBzZWVkCisJbW92CSRDLDgoJGN0eCkKKwltb3YJJEQsMTIoJGN0eCkKKwltb3YJJEUsMTYoJGN0eCkKKwlqbXAJLkxvb3BfYXZ4CisKKy5hbGlnbgkxNgorLkxkb25lX2F2eDoKK19fXworCQkJCSRqaj0kaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CisJCQkJJHI9JHNhdmVkX3I7ICAgICBAcm5ka2V5PUBzYXZlZF9ybmRrZXk7CisKKwkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CisJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOworCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCXZtb3Z1cHMJJGl2LDQ4KCRvdXQsJGluMCkJCSMgd3JpdGUgb3V0cHV0CisJbW92CTg4KCVyc3ApLCRpdnAJCQkjIHJlc3RvcmUgJGl2cAorCisJYWRkCTAoJGN0eCksJEEJCQkjIHVwZGF0ZSBjb250ZXh0CisJYWRkCTQoJGN0eCksQFRbMF0KKwlhZGQJOCgkY3R4KSwkQworCW1vdgkkQSwwKCRjdHgpCisJYWRkCTEyKCRjdHgpLCRECisJbW92CUBUWzBdLDQoJGN0eCkKKwlhZGQJMTYoJGN0eCksJEUKKwltb3YJJEMsOCgkY3R4KQorCW1vdgkkRCwxMigkY3R4KQorCW1vdgkkRSwxNigkY3R4KQorCXZtb3Z1cHMJJGl2LCgkaXZwKQkJCSMgd3JpdGUgSVYKKwl2emVyb2FsbAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTk2KzAoJXJzcCksJXhtbTYKKwltb3ZhcHMJOTYrMTYoJXJzcCksJXhtbTcKKwltb3ZhcHMJOTYrMzIoJXJzcCksJXhtbTgKKwltb3ZhcHMJOTYrNDgoJXJzcCksJXhtbTkKKwltb3ZhcHMJOTYrNjQoJXJzcCksJXhtbTEwCisJbW92YXBzCTk2KzgwKCVyc3ApLCV4bW0xMQorCW1vdmFwcwk5Nis5NiglcnNwKSwleG1tMTIKKwltb3ZhcHMJOTYrMTEyKCVyc3ApLCV4bW0xMworCW1vdmFwcwk5NisxMjgoJXJzcCksJXhtbTE0CisJbW92YXBzCTk2KzE0NCglcnNwKSwleG1tMTUKK19fXworJGNvZGUuPTw8X19fOworCWxlYQlgMTA0Kygkd2luNjQ/MTAqMTY6MClgKCVyc3ApLCVyc2kKKwltb3YJMCglcnNpKSwlcjE1CisJbW92CTgoJXJzaSksJXIxNAorCW1vdgkxNiglcnNpKSwlcjEzCisJbW92CTI0KCVyc2kpLCVyMTIKKwltb3YJMzIoJXJzaSksJXJicAorCW1vdgk0MCglcnNpKSwlcmJ4CisJbGVhCTQ4KCVyc2kpLCVyc3AKKy5MZXBpbG9ndWVfYXZ4OgorCXJldAorLnNpemUJYWVzbmlfY2JjX3NoYTFfZW5jX2F2eCwuLWFlc25pX2NiY19zaGExX2VuY19hdngKK19fXworfQorJGNvZGUuPTw8X19fOworLmFsaWduCTY0CitLX1hYX1hYOgorLmxvbmcJMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTksMHg1YTgyNzk5OQkjIEtfMDBfMTkKKy5sb25nCTB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEJIyBLXzIwXzM5CisubG9uZwkweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYywweDhmMWJiY2RjCSMgS180MF81OQorLmxvbmcJMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYsMHhjYTYyYzFkNgkjIEtfNjBfNzkKKy5sb25nCTB4MDAwMTAyMDMsMHgwNDA1MDYwNywweDA4MDkwYTBiLDB4MGMwZDBlMGYJIyBwYnN3YXAgbWFzaworCisuYXNjaXoJIkFFU05JLUNCQytTSEExIHN0aXRjaCBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTY0CitfX18KKworIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisjCQlDT05URVhUICpjb250ZXh0LERJU1BBVENIRVJfQ09OVEVYVCAqZGlzcCkKK2lmICgkd2luNjQpIHsKKyRyZWM9IiVyY3giOworJGZyYW1lPSIlcmR4IjsKKyRjb250ZXh0PSIlcjgiOworJGRpc3A9IiVyOSI7CisKKyRjb2RlLj08PF9fXzsKKy5leHRlcm4JX19pbXBfUnRsVmlydHVhbFVud2luZAorLnR5cGUJc3NzZTNfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3Nzc2UzX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCisKKwlsZWEJOTYoJXJheCksJXJzaQorCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisJbW92CVwkMjAsJWVjeAorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJYDEwNCsxMCoxNmAoJXJheCksJXJheAkjIGFkanVzdCBzdGFjayBwb2ludGVyCisKKwltb3YJMCglcmF4KSwlcjE1CisJbW92CTgoJXJheCksJXIxNAorCW1vdgkxNiglcmF4KSwlcjEzCisJbW92CTI0KCVyYXgpLCVyMTIKKwltb3YJMzIoJXJheCksJXJicAorCW1vdgk0MCglcmF4KSwlcmJ4CisJbGVhCTQ4KCVyYXgpLCVyYXgKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTMKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTUKKworLkxjb21tb25fc2VoX3RhaWw6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCQxNTQsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQlzc3NlM19oYW5kbGVyLC4tc3NzZTNfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQkuTFNFSF9iZWdpbl9hZXNuaV9jYmNfc2hhMV9lbmNfc3NzZTMKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV9jYmNfc2hhMV9lbmNfc3NzZTMKKwkucnZhCS5MU0VIX2luZm9fYWVzbmlfY2JjX3NoYTFfZW5jX3Nzc2UzCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGF2eCk7CisJLnJ2YQkuTFNFSF9iZWdpbl9hZXNuaV9jYmNfc2hhMV9lbmNfYXZ4CisJLnJ2YQkuTFNFSF9lbmRfYWVzbmlfY2JjX3NoYTFfZW5jX2F2eAorCS5ydmEJLkxTRUhfaW5mb19hZXNuaV9jYmNfc2hhMV9lbmNfYXZ4CitfX18KKyRjb2RlLj08PF9fXzsKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKKy5MU0VIX2luZm9fYWVzbmlfY2JjX3NoYTFfZW5jX3Nzc2UzOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNzc2UzX2hhbmRsZXIKKwkucnZhCS5McHJvbG9ndWVfc3NzZTMsLkxlcGlsb2d1ZV9zc3NlMwkjIEhhbmRsZXJEYXRhW10KK19fXworJGNvZGUuPTw8X19fIGlmICgkYXZ4KTsKKy5MU0VIX2luZm9fYWVzbmlfY2JjX3NoYTFfZW5jX2F2eDoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzc3NlM19oYW5kbGVyCisJLnJ2YQkuTHByb2xvZ3VlX2F2eCwuTGVwaWxvZ3VlX2F2eAkJIyBIYW5kbGVyRGF0YVtdCitfX18KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N1YiByZXggeworICBsb2NhbCAqb3Bjb2RlPXNoaWZ0OworICBteSAoJGRzdCwkc3JjKT1AXzsKKyAgbXkgJHJleD0wOworCisgICAgJHJleHw9MHgwNAkJCWlmKCRkc3Q+PTgpOworICAgICRyZXh8PTB4MDEJCQlpZigkc3JjPj04KTsKKyAgICBwdXNoIEBvcGNvZGUsJHJleHwweDQwCWlmKCRyZXgpOworfQorCitzdWIgYWVzbmkgeworICBteSAkbGluZT1zaGlmdDsKKyAgbXkgQG9wY29kZT0oMHg2Nik7CisKKyAgICBpZiAoJGxpbmU9fi8oYWVzW2Etel0rKVxzKyV4bW0oWzAtOV0rKSxccyoleG1tKFswLTldKykvKSB7CisJbXkgJW9wY29kZWxldCA9ICgKKwkJImFlc2VuYyIgPT4gMHhkYywJImFlc2VuY2xhc3QiID0+IDB4ZGQKKwkpOworCXJldHVybiB1bmRlZiBpZiAoIWRlZmluZWQoJG9wY29kZWxldHskMX0pKTsKKwlyZXgoXEBvcGNvZGUsJDMsJDIpOworCXB1c2ggQG9wY29kZSwweDBmLDB4MzgsJG9wY29kZWxldHskMX07CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCQyJjcpfCgoJDMmNyk8PDMpOwkjIE1vZFIvTQorCXJldHVybiAiLmJ5dGVcdCIuam9pbignLCcsQG9wY29kZSk7CisgICAgfQorICAgIHJldHVybiAkbGluZTsKK30KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VtOworJGNvZGUgPX4gcy9cYihhZXMuKiV4bW1bMC05XSspLiokL2Flc25pKCQxKS9nZW07CisKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzM0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXNuaS14ODYucGwKQEAgLTAsMCArMSwyMTg5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgSW50ZWwgQUVTLU5JIGV4dGVuc2lvbi4gSW4KKyMgT3BlblNTTCBjb250ZXh0IGl0J3MgdXNlZCB3aXRoIEludGVsIGVuZ2luZSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYXMKKyMgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgY3J5cHRvL2Flcy9hc20vYWVzLTU4Ni5wbCBbc2VlIGJlbG93IGZvcgorIyBkZXRhaWxzXS4KKyMKKyMgUGVyZm9ybWFuY2UuCisjCisjIFRvIHN0YXJ0IHdpdGggc2VlIGNvcnJlc3BvbmRpbmcgcGFyYWdyYXBoIGluIGFlc25pLXg4Nl82NC5wbC4uLgorIyBJbnN0ZWFkIG9mIGZpbGxpbmcgdGFibGUgc2ltaWxhciB0byBvbmUgZm91bmQgdGhlcmUgSSd2ZSBjaG9zZW4gdG8KKyMgc3VtbWFyaXplICpjb21wYXJpc29uKiByZXN1bHRzIGZvciByYXcgRUNCLCBDVFIgYW5kIENCQyBiZW5jaG1hcmtzLgorIyBUaGUgc2ltcGxpZmllZCB0YWJsZSBiZWxvdyByZXByZXNlbnRzIDMyLWJpdCBwZXJmb3JtYW5jZSByZWxhdGl2ZQorIyB0byA2NC1iaXQgb25lIGluIGV2ZXJ5IGdpdmVuIHBvaW50LiBSYXRpb3MgdmFyeSBmb3IgZGlmZmVyZW50CisjIGVuY3J5cHRpb24gbW9kZXMsIHRoZXJlZm9yZSBpbnRlcnZhbCB2YWx1ZXMuCisjCisjCTE2LWJ5dGUgICAgIDY0LWJ5dGUgICAgIDI1Ni1ieXRlICAgIDEtS0IgICAgICAgIDgtS0IKKyMJNTMtNjclICAgICAgNjctODQlICAgICAgOTEtOTQlICAgICAgOTUtOTglICAgICAgOTctOTkuNSUKKyMKKyMgTG93ZXIgcmF0aW9zIGZvciBzbWFsbGVyIGJsb2NrIHNpemVzIGFyZSBwZXJmZWN0bHkgdW5kZXJzdGFuZGFibGUsCisjIGJlY2F1c2UgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBpcyBoaWdoZXIgaW4gMzItYml0IG1vZGUuIExhcmdlc3QKKyMgOC1LQiBibG9jayBwZXJmb3JtYW5jZSBpcyB2aXJ0dWFsbHkgc2FtZTogMzItYml0IGNvZGUgaXMgbGVzcyB0aGFuCisjIDElIHNsb3dlciBmb3IgRUNCLCBDQkMgYW5kIENDTSwgYW5kIH4zJSBzbG93ZXIgb3RoZXJ3aXNlLgorCisjIEphbnVhcnkgMjAxMQorIworIyBTZWUgYWVzbmkteDg2XzY0LnBsIGZvciBkZXRhaWxzLiBVbmxpa2UgeDg2XzY0IHZlcnNpb24gdGhpcyBtb2R1bGUKKyMgaW50ZXJsZWF2ZXMgYXQgbW9zdCA2IGFlc1tlbmN8ZGVjXSBpbnN0cnVjdGlvbnMsIGJlY2F1c2UgdGhlcmUgYXJlCisjIG5vdCBlbm91Z2ggcmVnaXN0ZXJzIGZvciA4eCBpbnRlcmxlYXZlIFt3aGljaCBzaG91bGQgYmUgb3B0aW1hbCBmb3IKKyMgU2FuZHkgQnJpZGdlXS4gQWN0dWFsbHksIHBlcmZvcm1hbmNlIHJlc3VsdHMgZm9yIDZ4IGludGVybGVhdmUKKyMgZmFjdG9yIHByZXNlbnRlZCBpbiBhZXNuaS14ODZfNjQucGwgKGV4Y2VwdCBmb3IgQ1RSKSBhcmUgZm9yIHRoaXMKKyMgbW9kdWxlLgorCisjIEFwcmlsIDIwMTEKKyMKKyMgQWRkIGFlc25pX3h0c19bZW58ZGVdY3J5cHQuIFdlc3RtZXJlIHNwZW5kcyAxLjUwIGN5Y2xlcyBwcm9jZXNzaW5nCisjIG9uZSBieXRlIG91dCBvZiA4S0Igd2l0aCAxMjgtYml0IGtleSwgU2FuZHkgQnJpZGdlIC0gMS4wOS4KKworJFBSRUZJWD0iYWVzbmkiOwkjIGlmICRQUkVGSVggaXMgc2V0IHRvICJBRVMiLCB0aGUgc2NyaXB0CisJCQkjIGdlbmVyYXRlcyBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorCQkJIyBjcnlwdG8vYWVzL2FzbS9hZXMtNTg2LnBsOi0pCiskaW5saW5lPTE7CQkjIGlubGluZSBfYWVzbmlfW2VufGRlXWNyeXB0CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKK3JlcXVpcmUgIng4NmFzbS5wbCI7CisKKyZhc21faW5pdCgkQVJHVlswXSwkMCk7CisKK2lmICgkUFJFRklYIGVxICJhZXNuaSIpCXsgJG1vdmVrZXk9Km1vdnVwczsgfQorZWxzZQkJCXsgJG1vdmVrZXk9Km1vdnVwczsgfQorCiskbGVuPSJlYXgiOworJHJvdW5kcz0iZWN4IjsKKyRrZXk9ImVkeCI7CiskaW5wPSJlc2kiOworJG91dD0iZWRpIjsKKyRyb3VuZHNfPSJlYngiOwkjIGJhY2t1cCBjb3B5IGZvciAkcm91bmRzCiska2V5Xz0iZWJwIjsJIyBiYWNrdXAgY29weSBmb3IgJGtleQorCiskcm5ka2V5MD0ieG1tMCI7Ciskcm5ka2V5MT0ieG1tMSI7CiskaW5vdXQwPSJ4bW0yIjsKKyRpbm91dDE9InhtbTMiOworJGlub3V0Mj0ieG1tNCI7CiskaW5vdXQzPSJ4bW01IjsJJGluMT0ieG1tNSI7CiskaW5vdXQ0PSJ4bW02IjsJJGluMD0ieG1tNiI7CiskaW5vdXQ1PSJ4bW03IjsJJGl2ZWM9InhtbTciOworCisjIEFFU05JIGV4dGVuc3Rpb24KK3N1YiBhZXNrZXlnZW5hc3Npc3QKK3sgbXkoJGRzdCwkc3JjLCRpbW0pPUBfOworICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKKyAgICB7CSZkYXRhX2J5dGUoMHg2NiwweDBmLDB4M2EsMHhkZiwweGMwfCgkMTw8Myl8JDIsJGltbSk7CX0KK30KK3N1YiBhZXNjb21tb24KK3sgbXkoJG9wY29kZWxldCwkZHN0LCRzcmMpPUBfOworICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKKyAgICB7CSZkYXRhX2J5dGUoMHg2NiwweDBmLDB4MzgsJG9wY29kZWxldCwweGMwfCgkMTw8Myl8JDIpO30KK30KK3N1YiBhZXNpbWMJeyBhZXNjb21tb24oMHhkYixAXyk7IH0KK3N1YiBhZXNlbmMJeyBhZXNjb21tb24oMHhkYyxAXyk7IH0KK3N1YiBhZXNlbmNsYXN0CXsgYWVzY29tbW9uKDB4ZGQsQF8pOyB9CitzdWIgYWVzZGVjCXsgYWVzY29tbW9uKDB4ZGUsQF8pOyB9CitzdWIgYWVzZGVjbGFzdAl7IGFlc2NvbW1vbigweGRmLEBfKTsgfQorDAorIyBJbmxpbmUgdmVyc2lvbiBvZiBpbnRlcm5hbCBhZXNuaV9bZW58ZGVdY3J5cHQxCit7IG15ICRzbjsKK3N1YiBhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxCit7IG15ICgkcCwkaW5vdXQsJGl2ZWMpPUBfOyAkaW5vdXQ9JGlub3V0MCBpZiAoIWRlZmluZWQoJGlub3V0KSk7CisgICRzbisrOworCisgICAgJiRtb3Zla2V5CQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKKyAgICAmJG1vdmVrZXkJCSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKyAgICAmeG9ycHMJCSgkaXZlYywkcm5ka2V5MCkJaWYgKGRlZmluZWQoJGl2ZWMpKTsKKyAgICAmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKKyAgICAmeG9ycHMJCSgkaW5vdXQsJGl2ZWMpCQlpZiAoZGVmaW5lZCgkaXZlYykpOworICAgICZ4b3JwcwkJKCRpbm91dCwkcm5ka2V5MCkJaWYgKCFkZWZpbmVkKCRpdmVjKSk7CisgICAgJnNldF9sYWJlbCgiJHtwfTFfbG9vcF8kc24iKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEpIjsKKwkmZGVjCQkoJHJvdW5kcyk7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDAsJGtleSkpOworCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworICAgICZqbnoJCSgmbGFiZWwoIiR7cH0xX2xvb3BfJHNuIikpOworICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQsJHJuZGtleTEpIjsKK319CisKK3N1YiBhZXNuaV9nZW5lcmF0ZTEJIyBmdWxseSB1bnJvbGxlZCBsb29wCit7IG15ICgkcCwkaW5vdXQpPUBfOyAkaW5vdXQ9JGlub3V0MCBpZiAoIWRlZmluZWQoJGlub3V0KSk7CisKKyAgICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0MSIpOworCSZtb3Z1cHMJCSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgweDEwLCRrZXkpKTsKKwkmeG9ycHMJCSgkaW5vdXQsJHJuZGtleTApOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDIwLCRrZXkpKTsKKwkmbGVhCQkoJGtleSwmRFdQKDB4MzAsJGtleSkpOworCSZjbXAJCSgkcm91bmRzLDExKTsKKwkmamIJCSgmbGFiZWwoIiR7cH0xMjgiKSk7CisJJmxlYQkJKCRrZXksJkRXUCgweDIwLCRrZXkpKTsKKwkmamUJCSgmbGFiZWwoIiR7cH0xOTIiKSk7CisJJmxlYQkJKCRrZXksJkRXUCgweDIwLCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEpIjsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoLTB4NDAsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MCkiOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgtMHgzMCwka2V5KSk7CisgICAgJnNldF9sYWJlbCgiJHtwfTE5MiIpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MSkiOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgtMHgyMCwka2V5KSk7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkwKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKC0weDEwLCRrZXkpKTsKKyAgICAmc2V0X2xhYmVsKCIke3B9MTI4Iik7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkxKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDAsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MCkiOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDEwLCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEpIjsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMHgyMCwka2V5KSk7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkwKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDB4MzAsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MSkiOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgweDQwLCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTApIjsKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMHg1MCwka2V5KSk7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0LCRybmRrZXkxKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDB4NjAsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dCwkcm5ka2V5MCkiOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDcwLCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQsJHJuZGtleTEpIjsKKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0LCRybmRrZXkwKSI7CisgICAgJnJldCgpOworICAgICZmdW5jdGlvbl9lbmRfQigiX2Flc25pXyR7cH1yeXB0MSIpOworfQorDAorIyB2b2lkICRQUkVGSVhfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLHZvaWQgKm91dCxjb25zdCBBRVNfS0VZICprZXkpOworJmFlc25pX2dlbmVyYXRlMSgiZW5jIikgaWYgKCEkaW5saW5lKTsKKyZmdW5jdGlvbl9iZWdpbl9CKCIke1BSRUZJWH1fZW5jcnlwdCIpOworCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOworCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsImVheCIpKTsKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsKKwkmbW92CSgiZWF4Iiwmd3BhcmFtKDEpKTsKKwlpZiAoJGlubGluZSkKKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIpOwl9CisJZWxzZQorCXsgICAmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MSIpOwl9CisJJm1vdnVwcwkoJlFXUCgwLCJlYXgiKSwkaW5vdXQwKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJWH1fZW5jcnlwdCIpOworCisjIHZvaWQgJFBSRUZJWF9kZWNyeXB0IChjb25zdCB2b2lkICppbnAsdm9pZCAqb3V0LGNvbnN0IEFFU19LRVkgKmtleSk7CismYWVzbmlfZ2VuZXJhdGUxKCJkZWMiKSBpZighJGlubGluZSk7CismZnVuY3Rpb25fYmVnaW5fQigiJHtQUkVGSVh9X2RlY3J5cHQiKTsKKwkmbW92CSgiZWF4Iiwmd3BhcmFtKDApKTsKKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCJlYXgiKSk7CisJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7CisJJm1vdgkoImVheCIsJndwYXJhbSgxKSk7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJkZWMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDEiKTsJfQorCSZtb3Z1cHMJKCZRV1AoMCwiZWF4IiksJGlub3V0MCk7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiJHtQUkVGSVh9X2RlY3J5cHQiKTsKKworIyBfYWVzbmlfW2VufGRlXWNyeXB0TiBhcmUgcHJpdmF0ZSBpbnRlcmZhY2VzLCBOIGRlbm90ZXMgaW50ZXJsZWF2ZQorIyBmYWN0b3IuIFdoeSAzeCBzdWJyb3V0aW5lIHdlcmUgb3JpZ2luYWxseSB1c2VkIGluIGxvb3BzPyBFdmVuIHRob3VnaAorIyBhZXNbZW5jfGRlY10gbGF0ZW5jeSB3YXMgb3JpZ2luYWxseSA2LCBpdCBjb3VsZCBiZSBzY2hlZHVsZWQgb25seQorIyBldmVyeSAqMm5kKiBjeWNsZS4gVGh1cyAzeCBpbnRlcmxlYXZlIHdhcyB0aGUgb25lIHByb3ZpZGluZyBvcHRpbWFsCisjIHV0aWxpemF0aW9uLCBpLmUuIHdoZW4gc3Vicm91dGluZSdzIHRocm91Z2hwdXQgaXMgdmlydHVhbGx5IHNhbWUgYXMKKyMgb2Ygbm9uLWludGVybGVhdmVkIHN1YnJvdXRpbmUgW2ZvciBudW1iZXIgb2YgaW5wdXQgYmxvY2tzIHVwIHRvIDNdLgorIyBUaGlzIGlzIHdoeSBpdCBtYWtlcyBubyBzZW5zZSB0byBpbXBsZW1lbnQgMnggc3Vicm91dGluZS4KKyMgYWVzW2VuY3xkZWNdIGxhdGVuY3kgaW4gbmV4dCBwcm9jZXNzb3IgZ2VuZXJhdGlvbiBpcyA4LCBidXQgdGhlCisjIGluc3RydWN0aW9ucyBjYW4gYmUgc2NoZWR1bGVkIGV2ZXJ5IGN5Y2xlLiBPcHRpbWFsIGludGVybGVhdmUgZm9yCisjIG5ldyBwcm9jZXNzb3IgaXMgdGhlcmVmb3JlIDh4LCBidXQgaXQncyB1bmZlYXNpYmxlIHRvIGFjY29tbW9kYXRlIGl0CisjIGluIFhNTSByZWdpc3RlcnMgYWRkcmVhc3NhYmxlIGluIDMyLWJpdCBtb2RlIGFuZCB0aGVyZWZvcmUgNnggaXMKKyMgdXNlZCBpbnN0ZWFkLi4uCisKK3N1YiBhZXNuaV9nZW5lcmF0ZTMKK3sgbXkgJHA9c2hpZnQ7CisKKyAgICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0MyIpOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKKwkmc2hyCQkoJHJvdW5kcywxKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOworCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOworCSZ4b3JwcwkJKCRpbm91dDAsJHJuZGtleTApOworCSZweG9yCQkoJGlub3V0MSwkcm5ka2V5MCk7CisJJnB4b3IJCSgkaW5vdXQyLCRybmRrZXkwKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisKKyAgICAmc2V0X2xhYmVsKCIke3B9M19sb29wIik7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKwkmZGVjCQkoJHJvdW5kcyk7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MSkiOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MCkiOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTApIjsKKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkwKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCSZqbnoJCSgmbGFiZWwoIiR7cH0zX2xvb3AiKSk7CisgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOworICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkxKSI7CisgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDAsJHJuZGtleTApIjsKKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0MSwkcm5ka2V5MCkiOworICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQyLCRybmRrZXkwKSI7CisgICAgJnJldCgpOworICAgICZmdW5jdGlvbl9lbmRfQigiX2Flc25pXyR7cH1yeXB0MyIpOworfQorCisjIDR4IGludGVybGVhdmUgaXMgaW1wbGVtZW50ZWQgdG8gaW1wcm92ZSBzbWFsbCBibG9jayBwZXJmb3JtYW5jZSwKKyMgbW9zdCBub3RhYmx5IFthbmQgbmF0dXJhbGx5XSA0IGJsb2NrIGJ5IH4zMCUuIE9uZSBjYW4gYXJndWUgdGhhdCBvbmUKKyMgc2hvdWxkIGhhdmUgaW1wbGVtZW50ZWQgNXggYXMgd2VsbCwgYnV0IGltcHJvdmVtZW50ICB3b3VsZCBiZSA8MjAlLAorIyBzbyBpdCdzIG5vdCB3b3J0aCBpdC4uLgorc3ViIGFlc25pX2dlbmVyYXRlNAoreyBteSAkcD1zaGlmdDsKKworICAgICZmdW5jdGlvbl9iZWdpbl9CKCJfYWVzbmlfJHtwfXJ5cHQ0Iik7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5KSk7CisJJnNocgkJKCRyb3VuZHMsMSk7CisJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7CisJJnhvcnBzCQkoJGlub3V0MCwkcm5ka2V5MCk7CisJJnB4b3IJCSgkaW5vdXQxLCRybmRrZXkwKTsKKwkmcHhvcgkJKCRpbm91dDIsJHJuZGtleTApOworCSZweG9yCQkoJGlub3V0Mywkcm5ka2V5MCk7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCisgICAgJnNldF9sYWJlbCgiJHtwfTRfbG9vcCIpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7CisJJmRlYwkJKCRyb3VuZHMpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEpIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkxKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0MSwkcm5ka2V5MCkiOworCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTApIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkwKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworICAgICZqbnoJCSgmbGFiZWwoIiR7cH00X2xvb3AiKSk7CisKKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkxKSI7CisgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0MSwkcm5ka2V5MSkiOworICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEpIjsKKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkxKSI7CisgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDAsJHJuZGtleTApIjsKKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0MSwkcm5ka2V5MCkiOworICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQyLCRybmRrZXkwKSI7CisgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDMsJHJuZGtleTApIjsKKyAgICAmcmV0KCk7CisgICAgJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlfJHtwfXJ5cHQ0Iik7Cit9CisKK3N1YiBhZXNuaV9nZW5lcmF0ZTYKK3sgbXkgJHA9c2hpZnQ7CisKKyAgICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0NiIpOworICAgICZzdGF0aWNfbGFiZWwoIl9hZXNuaV8ke3B9cnlwdDZfZW50ZXIiKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisJJnNocgkJKCRyb3VuZHMsMSk7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKKwkmeG9ycHMJCSgkaW5vdXQwLCRybmRrZXkwKTsKKwkmcHhvcgkJKCRpbm91dDEsJHJuZGtleTApOwkjIHB4b3IgZG9lcyBiZXR0ZXIgaGVyZQorCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKKwkmcHhvcgkJKCRpbm91dDIsJHJuZGtleTApOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKwkmcHhvcgkJKCRpbm91dDMsJHJuZGtleTApOworCSZkZWMJCSgkcm91bmRzKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkxKSI7CisJJnB4b3IJCSgkaW5vdXQ0LCRybmRrZXkwKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkxKSI7CisJJnB4b3IJCSgkaW5vdXQ1LCRybmRrZXkwKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQ0LCRybmRrZXkxKSI7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDUsJHJuZGtleTEpIjsKKwkmam1wCQkoJmxhYmVsKCJfYWVzbmlfJHtwfXJ5cHQ2X2VudGVyIikpOworCisgICAgJnNldF9sYWJlbCgiJHtwfTZfbG9vcCIsMTYpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7CisJJmRlYwkJKCRyb3VuZHMpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTEpIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkxKSI7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0NCwkcm5ka2V5MSkiOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDUsJHJuZGtleTEpIjsKKyAgICAmc2V0X2xhYmVsKCJfYWVzbmlfJHtwfXJ5cHQ2X2VudGVyIiwxNik7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0MSwkcm5ka2V5MCkiOworCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDIsJHJuZGtleTApIjsKKwlldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkwKSI7CisJZXZhbCImYWVzJHtwfQkoJGlub3V0NCwkcm5ka2V5MCkiOworCWV2YWwiJmFlcyR7cH0JKCRpbm91dDUsJHJuZGtleTApIjsKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisgICAgJmpuegkJKCZsYWJlbCgiJHtwfTZfbG9vcCIpKTsKKworICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkxKSI7CisgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MSkiOworICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDMsJHJuZGtleTEpIjsKKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQ0LCRybmRrZXkxKSI7CisgICAgZXZhbCImYWVzJHtwfQkoJGlub3V0NSwkcm5ka2V5MSkiOworICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQwLCRybmRrZXkwKSI7CisgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDEsJHJuZGtleTApIjsKKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0Miwkcm5ka2V5MCkiOworICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQzLCRybmRrZXkwKSI7CisgICAgZXZhbCImYWVzJHtwfWxhc3QJKCRpbm91dDQsJHJuZGtleTApIjsKKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0NSwkcm5ka2V5MCkiOworICAgICZyZXQoKTsKKyAgICAmZnVuY3Rpb25fZW5kX0IoIl9hZXNuaV8ke3B9cnlwdDYiKTsKK30KKyZhZXNuaV9nZW5lcmF0ZTMoImVuYyIpIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOworJmFlc25pX2dlbmVyYXRlMygiZGVjIik7CismYWVzbmlfZ2VuZXJhdGU0KCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKKyZhZXNuaV9nZW5lcmF0ZTQoImRlYyIpOworJmFlc25pX2dlbmVyYXRlNigiZW5jIikgaWYgKCRQUkVGSVggZXEgImFlc25pIik7CismYWVzbmlfZ2VuZXJhdGU2KCJkZWMiKTsKKwwKK2lmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBhZXNuaV9lY2JfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW4sIHZvaWQgKm91dCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorIyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5jKTsKKyZmdW5jdGlvbl9iZWdpbigiYWVzbmlfZWNiX2VuY3J5cHQiKTsKKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOworCSZtb3YJKCRvdXQsJndwYXJhbSgxKSk7CisJJm1vdgkoJGxlbiwmd3BhcmFtKDIpKTsKKwkmbW92CSgka2V5LCZ3cGFyYW0oMykpOworCSZtb3YJKCRyb3VuZHNfLCZ3cGFyYW0oNCkpOworCSZhbmQJKCRsZW4sLTE2KTsKKwkmanoJKCZsYWJlbCgiZWNiX3JldCIpKTsKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsKKwkmdGVzdAkoJHJvdW5kc18sJHJvdW5kc18pOworCSZqegkoJmxhYmVsKCJlY2JfZGVjcnlwdCIpKTsKKworCSZtb3YJKCRrZXlfLCRrZXkpOwkJIyBiYWNrdXAgJGtleQorCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOwkjIGJhY2t1cCAkcm91bmRzCisJJmNtcAkoJGxlbiwweDYwKTsKKwkmamIJKCZsYWJlbCgiZWNiX2VuY190YWlsIikpOworCisJJm1vdmRxdQkoJGlub3V0MCwmUVdQKDAsJGlucCkpOworCSZtb3ZkcXUJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0MywmUVdQKDB4MzAsJGlucCkpOworCSZtb3ZkcXUJKCRpbm91dDQsJlFXUCgweDQwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQ1LCZRV1AoMHg1MCwkaW5wKSk7CisJJmxlYQkoJGlucCwmRFdQKDB4NjAsJGlucCkpOworCSZzdWIJKCRsZW4sMHg2MCk7CisJJmptcAkoJmxhYmVsKCJlY2JfZW5jX2xvb3A2X2VudGVyIikpOworCismc2V0X2xhYmVsKCJlY2JfZW5jX2xvb3A2IiwxNik7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdmRxdQkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkpOworCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKwkmbW92ZHF1CSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7CisJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOworCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKKwkmbW92dXBzCSgmUVdQKDB4NDAsJG91dCksJGlub3V0NCk7CisJJm1vdmRxdQkoJGlub3V0NCwmUVdQKDB4NDAsJGlucCkpOworCSZtb3Z1cHMJKCZRV1AoMHg1MCwkb3V0KSwkaW5vdXQ1KTsKKwkmbGVhCSgkb3V0LCZEV1AoMHg2MCwkb3V0KSk7CisJJm1vdmRxdQkoJGlub3V0NSwmUVdQKDB4NTAsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgweDYwLCRpbnApKTsKKyZzZXRfbGFiZWwoImVjYl9lbmNfbG9vcDZfZW50ZXIiKTsKKworCSZjYWxsCSgiX2Flc25pX2VuY3J5cHQ2Iik7CisKKwkmbW92CSgka2V5LCRrZXlfKTsJCSMgcmVzdG9yZSAka2V5CisJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRzCisJJnN1YgkoJGxlbiwweDYwKTsKKwkmam5jCSgmbGFiZWwoImVjYl9lbmNfbG9vcDYiKSk7CisKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7CisJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOworCSZtb3Z1cHMJKCZRV1AoMHg1MCwkb3V0KSwkaW5vdXQ1KTsKKwkmbGVhCSgkb3V0LCZEV1AoMHg2MCwkb3V0KSk7CisJJmFkZAkoJGxlbiwweDYwKTsKKwkmanoJKCZsYWJlbCgiZWNiX3JldCIpKTsKKworJnNldF9sYWJlbCgiZWNiX2VuY190YWlsIik7CisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlucCkpOworCSZjbXAJKCRsZW4sMHgyMCk7CisJJmpiCSgmbGFiZWwoImVjYl9lbmNfb25lIikpOworCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKKwkmamUJKCZsYWJlbCgiZWNiX2VuY190d28iKSk7CisJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworCSZjbXAJKCRsZW4sMHg0MCk7CisJJmpiCSgmbGFiZWwoImVjYl9lbmNfdGhyZWUiKSk7CisJJm1vdnVwcwkoJGlub3V0MywmUVdQKDB4MzAsJGlucCkpOworCSZqZQkoJmxhYmVsKCJlY2JfZW5jX2ZvdXIiKSk7CisJJm1vdnVwcwkoJGlub3V0NCwmUVdQKDB4NDAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0NSwkaW5vdXQ1KTsKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0NiIpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKwkmbW92dXBzCSgmUVdQKDB4NDAsJG91dCksJGlub3V0NCk7CisJam1wCSgmbGFiZWwoImVjYl9yZXQiKSk7CisKKyZzZXRfbGFiZWwoImVjYl9lbmNfb25lIiwxNik7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsJfQorCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmam1wCSgmbGFiZWwoImVjYl9yZXQiKSk7CisKKyZzZXRfbGFiZWwoImVjYl9lbmNfdHdvIiwxNik7CisJJnhvcnBzCSgkaW5vdXQyLCRpbm91dDIpOworCSZjYWxsCSgiX2Flc25pX2VuY3J5cHQzIik7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKwkmam1wCSgmbGFiZWwoImVjYl9yZXQiKSk7CisKKyZzZXRfbGFiZWwoImVjYl9lbmNfdGhyZWUiLDE2KTsKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKKworJnNldF9sYWJlbCgiZWNiX2VuY19mb3VyIiwxNik7CisJJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDQiKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7CisJJmptcAkoJmxhYmVsKCJlY2JfcmV0IikpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJnNldF9sYWJlbCgiZWNiX2RlY3J5cHQiLDE2KTsKKwkmbW92CSgka2V5Xywka2V5KTsJCSMgYmFja3VwICRrZXkKKwkmbW92CSgkcm91bmRzXywkcm91bmRzKTsJIyBiYWNrdXAgJHJvdW5kcworCSZjbXAJKCRsZW4sMHg2MCk7CisJJmpiCSgmbGFiZWwoImVjYl9kZWNfdGFpbCIpKTsKKworCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQ0LCZRV1AoMHg0MCwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0NSwmUVdQKDB4NTAsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgweDYwLCRpbnApKTsKKwkmc3ViCSgkbGVuLDB4NjApOworCSZqbXAJKCZsYWJlbCgiZWNiX2RlY19sb29wNl9lbnRlciIpKTsKKworJnNldF9sYWJlbCgiZWNiX2RlY19sb29wNiIsMTYpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbW92ZHF1CSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZtb3ZkcXUJKCRpbm91dDEsJlFXUCgweDEwLCRpbnApKTsKKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7CisJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKwkmbW92ZHF1CSgkaW5vdXQzLCZRV1AoMHgzMCwkaW5wKSk7CisJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOworCSZtb3ZkcXUJKCRpbm91dDQsJlFXUCgweDQwLCRpbnApKTsKKwkmbW92dXBzCSgmUVdQKDB4NTAsJG91dCksJGlub3V0NSk7CisJJmxlYQkoJG91dCwmRFdQKDB4NjAsJG91dCkpOworCSZtb3ZkcXUJKCRpbm91dDUsJlFXUCgweDUwLCRpbnApKTsKKwkmbGVhCSgkaW5wLCZEV1AoMHg2MCwkaW5wKSk7Cismc2V0X2xhYmVsKCJlY2JfZGVjX2xvb3A2X2VudGVyIik7CisKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NiIpOworCisJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQorCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkjIHJlc3RvcmUgJHJvdW5kcworCSZzdWIJKCRsZW4sMHg2MCk7CisJJmpuYwkoJmxhYmVsKCJlY2JfZGVjX2xvb3A2IikpOworCisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7CisJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOworCSZtb3Z1cHMJKCZRV1AoMHg0MCwkb3V0KSwkaW5vdXQ0KTsKKwkmbW92dXBzCSgmUVdQKDB4NTAsJG91dCksJGlub3V0NSk7CisJJmxlYQkoJG91dCwmRFdQKDB4NjAsJG91dCkpOworCSZhZGQJKCRsZW4sMHg2MCk7CisJJmp6CSgmbGFiZWwoImVjYl9yZXQiKSk7CisKKyZzZXRfbGFiZWwoImVjYl9kZWNfdGFpbCIpOworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKwkmY21wCSgkbGVuLDB4MjApOworCSZqYgkoJmxhYmVsKCJlY2JfZGVjX29uZSIpKTsKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7CisJJmplCSgmbGFiZWwoImVjYl9kZWNfdHdvIikpOworCSZtb3Z1cHMJKCRpbm91dDIsJlFXUCgweDIwLCRpbnApKTsKKwkmY21wCSgkbGVuLDB4NDApOworCSZqYgkoJmxhYmVsKCJlY2JfZGVjX3RocmVlIikpOworCSZtb3Z1cHMJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKKwkmamUJKCZsYWJlbCgiZWNiX2RlY19mb3VyIikpOworCSZtb3Z1cHMJKCRpbm91dDQsJlFXUCgweDQwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDUsJGlub3V0NSk7CisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDYiKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7CisJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOworCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKKworJnNldF9sYWJlbCgiZWNiX2RlY19vbmUiLDE2KTsKKwlpZiAoJGlubGluZSkKKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImRlYyIpOwl9CisJZWxzZQorCXsgICAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MSIpOwl9CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKKworJnNldF9sYWJlbCgiZWNiX2RlY190d28iLDE2KTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0Mik7CisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKKworJnNldF9sYWJlbCgiZWNiX2RlY190aHJlZSIsMTYpOworCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7CisJJmptcAkoJmxhYmVsKCJlY2JfcmV0IikpOworCismc2V0X2xhYmVsKCJlY2JfZGVjX2ZvdXIiLDE2KTsKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NCIpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKworJnNldF9sYWJlbCgiZWNiX3JldCIpOworJmZ1bmN0aW9uX2VuZCgiYWVzbmlfZWNiX2VuY3J5cHQiKTsKKwwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBhZXNuaV9jY202NF9bZW58ZGVdY3J5cHRfYmxvY2tzIChjb25zdCB2b2lkICppbiwgdm9pZCAqb3V0LAorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmxvY2tzLCBjb25zdCBBRVNfS0VZICprZXksCisjICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKml2ZWMsY2hhciAqY21hYyk7CisjCisjIEhhbmRsZXMgb25seSBjb21wbGV0ZSBibG9ja3MsIG9wZXJhdGVzIG9uIDY0LWJpdCBjb3VudGVyIGFuZAorIyBkb2VzIG5vdCB1cGRhdGUgKml2ZWMhIE5vciBkb2VzIGl0IGZpbmFsaXplIENNQUMgdmFsdWUKKyMgKHNlZSBlbmdpbmUvZW5nX2Flc25pLmMgZm9yIGRldGFpbHMpCisjCit7IG15ICRjbWFjPSRpbm91dDE7CismZnVuY3Rpb25fYmVnaW4oImFlc25pX2NjbTY0X2VuY3J5cHRfYmxvY2tzIik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOworCSZtb3YJKCRsZW4sJndwYXJhbSgyKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDMpKTsKKwkmbW92CSgkcm91bmRzXywmd3BhcmFtKDQpKTsKKwkmbW92CSgkcm91bmRzLCZ3cGFyYW0oNSkpOworCSZtb3YJKCRrZXlfLCJlc3AiKTsKKwkmc3ViCSgiZXNwIiw2MCk7CisJJmFuZAkoImVzcCIsLTE2KTsJCQkjIGFsaWduIHN0YWNrCisJJm1vdgkoJkRXUCg0OCwiZXNwIiksJGtleV8pOworCisJJm1vdmRxdQkoJGl2ZWMsJlFXUCgwLCRyb3VuZHNfKSk7CSMgbG9hZCBpdmVjCisJJm1vdmRxdQkoJGNtYWMsJlFXUCgwLCRyb3VuZHMpKTsJIyBsb2FkIGNtYWMKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsKKworCSMgY29tcG9zZSBieXRlLXN3YXAgY29udHJvbCBtYXNrIGZvciBwc2h1ZmIgb24gc3RhY2sKKwkmbW92CSgmRFdQKDAsImVzcCIpLDB4MGMwZDBlMGYpOworCSZtb3YJKCZEV1AoNCwiZXNwIiksMHgwODA5MGEwYik7CisJJm1vdgkoJkRXUCg4LCJlc3AiKSwweDA0MDUwNjA3KTsKKwkmbW92CSgmRFdQKDEyLCJlc3AiKSwweDAwMDEwMjAzKTsKKworCSMgY29tcG9zZSBjb3VudGVyIGluY3JlbWVudCB2ZWN0b3Igb24gc3RhY2sKKwkmbW92CSgkcm91bmRzXywxKTsKKwkmeG9yCSgka2V5Xywka2V5Xyk7CisJJm1vdgkoJkRXUCgxNiwiZXNwIiksJHJvdW5kc18pOworCSZtb3YJKCZEV1AoMjAsImVzcCIpLCRrZXlfKTsKKwkmbW92CSgmRFdQKDI0LCJlc3AiKSwka2V5Xyk7CisJJm1vdgkoJkRXUCgyOCwiZXNwIiksJGtleV8pOworCisJJnNocgkoJHJvdW5kcywxKTsKKwkmbGVhCSgka2V5XywmRFdQKDAsJGtleSkpOworCSZtb3ZkcWEJKCRpbm91dDMsJlFXUCgwLCJlc3AiKSk7CisJJm1vdmRxYQkoJGlub3V0MCwkaXZlYyk7CisJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CisJJnBzaHVmYgkoJGl2ZWMsJGlub3V0Myk7CisKKyZzZXRfbGFiZWwoImNjbTY0X2VuY19vdXRlciIpOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXlfKSk7CisJJm1vdgkJKCRyb3VuZHMsJHJvdW5kc18pOworCSZtb3Z1cHMJCSgkaW4wLCZRV1AoMCwkaW5wKSk7CisKKwkmeG9ycHMJCSgkaW5vdXQwLCRybmRrZXkwKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleV8pKTsKKwkmeG9ycHMJCSgkcm5ka2V5MCwkaW4wKTsKKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXlfKSk7CisJJnhvcnBzCQkoJGNtYWMsJHJuZGtleTApOwkJIyBjbWFjXj1pbnAKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisKKyZzZXRfbGFiZWwoImNjbTY0X2VuYzJfbG9vcCIpOworCSZhZXNlbmMJCSgkaW5vdXQwLCRybmRrZXkxKTsKKwkmZGVjCQkoJHJvdW5kcyk7CisJJmFlc2VuYwkJKCRjbWFjLCRybmRrZXkxKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOworCSZhZXNlbmMJCSgkaW5vdXQwLCRybmRrZXkwKTsKKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsKKwkmYWVzZW5jCQkoJGNtYWMsJHJuZGtleTApOworCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKKwkmam56CQkoJmxhYmVsKCJjY202NF9lbmMyX2xvb3AiKSk7CisJJmFlc2VuYwkJKCRpbm91dDAsJHJuZGtleTEpOworCSZhZXNlbmMJCSgkY21hYywkcm5ka2V5MSk7CisJJnBhZGRxCQkoJGl2ZWMsJlFXUCgxNiwiZXNwIikpOworCSZhZXNlbmNsYXN0CSgkaW5vdXQwLCRybmRrZXkwKTsKKwkmYWVzZW5jbGFzdAkoJGNtYWMsJHJuZGtleTApOworCisJJmRlYwkoJGxlbik7CisJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKKwkmeG9ycHMJKCRpbjAsJGlub3V0MCk7CQkJIyBpbnBePUUoaXZlYykKKwkmbW92ZHFhCSgkaW5vdXQwLCRpdmVjKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGluMCk7CQkjIHNhdmUgb3V0cHV0CisJJmxlYQkoJG91dCwmRFdQKDE2LCRvdXQpKTsKKwkmcHNodWZiCSgkaW5vdXQwLCRpbm91dDMpOworCSZqbnoJKCZsYWJlbCgiY2NtNjRfZW5jX291dGVyIikpOworCisJJm1vdgkoImVzcCIsJkRXUCg0OCwiZXNwIikpOworCSZtb3YJKCRvdXQsJndwYXJhbSg1KSk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRjbWFjKTsKKyZmdW5jdGlvbl9lbmQoImFlc25pX2NjbTY0X2VuY3J5cHRfYmxvY2tzIik7CisKKyZmdW5jdGlvbl9iZWdpbigiYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3MiKTsKKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOworCSZtb3YJKCRvdXQsJndwYXJhbSgxKSk7CisJJm1vdgkoJGxlbiwmd3BhcmFtKDIpKTsKKwkmbW92CSgka2V5LCZ3cGFyYW0oMykpOworCSZtb3YJKCRyb3VuZHNfLCZ3cGFyYW0oNCkpOworCSZtb3YJKCRyb3VuZHMsJndwYXJhbSg1KSk7CisJJm1vdgkoJGtleV8sImVzcCIpOworCSZzdWIJKCJlc3AiLDYwKTsKKwkmYW5kCSgiZXNwIiwtMTYpOwkJCSMgYWxpZ24gc3RhY2sKKwkmbW92CSgmRFdQKDQ4LCJlc3AiKSwka2V5Xyk7CisKKwkmbW92ZHF1CSgkaXZlYywmUVdQKDAsJHJvdW5kc18pKTsJIyBsb2FkIGl2ZWMKKwkmbW92ZHF1CSgkY21hYywmUVdQKDAsJHJvdW5kcykpOwkjIGxvYWQgY21hYworCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOworCisJIyBjb21wb3NlIGJ5dGUtc3dhcCBjb250cm9sIG1hc2sgZm9yIHBzaHVmYiBvbiBzdGFjaworCSZtb3YJKCZEV1AoMCwiZXNwIiksMHgwYzBkMGUwZik7CisJJm1vdgkoJkRXUCg0LCJlc3AiKSwweDA4MDkwYTBiKTsKKwkmbW92CSgmRFdQKDgsImVzcCIpLDB4MDQwNTA2MDcpOworCSZtb3YJKCZEV1AoMTIsImVzcCIpLDB4MDAwMTAyMDMpOworCisJIyBjb21wb3NlIGNvdW50ZXIgaW5jcmVtZW50IHZlY3RvciBvbiBzdGFjaworCSZtb3YJKCRyb3VuZHNfLDEpOworCSZ4b3IJKCRrZXlfLCRrZXlfKTsKKwkmbW92CSgmRFdQKDE2LCJlc3AiKSwkcm91bmRzXyk7CisJJm1vdgkoJkRXUCgyMCwiZXNwIiksJGtleV8pOworCSZtb3YJKCZEV1AoMjQsImVzcCIpLCRrZXlfKTsKKwkmbW92CSgmRFdQKDI4LCJlc3AiKSwka2V5Xyk7CisKKwkmbW92ZHFhCSgkaW5vdXQzLCZRV1AoMCwiZXNwIikpOwkjIGJzd2FwIG1hc2sKKwkmbW92ZHFhCSgkaW5vdXQwLCRpdmVjKTsKKworCSZtb3YJKCRrZXlfLCRrZXkpOworCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOworCisJJnBzaHVmYgkoJGl2ZWMsJGlub3V0Myk7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsJfQorCSZtb3Z1cHMJKCRpbjAsJlFXUCgwLCRpbnApKTsJCSMgbG9hZCBpbnAKKwkmcGFkZHEJKCRpdmVjLCZRV1AoMTYsImVzcCIpKTsKKwkmbGVhCSgkaW5wLCZRV1AoMTYsJGlucCkpOworCSZqbXAJKCZsYWJlbCgiY2NtNjRfZGVjX291dGVyIikpOworCismc2V0X2xhYmVsKCJjY202NF9kZWNfb3V0ZXIiLDE2KTsKKwkmeG9ycHMJKCRpbjAsJGlub3V0MCk7CQkJIyBpbnAgXj0gRShpdmVjKQorCSZtb3ZkcWEJKCRpbm91dDAsJGl2ZWMpOworCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW4wKTsJCSMgc2F2ZSBvdXRwdXQKKwkmbGVhCSgkb3V0LCZEV1AoMTYsJG91dCkpOworCSZwc2h1ZmIJKCRpbm91dDAsJGlub3V0Myk7CisKKwkmc3ViCSgkbGVuLDEpOworCSZqegkoJmxhYmVsKCJjY202NF9kZWNfYnJlYWsiKSk7CisKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5XykpOworCSZzaHIJCSgkcm91bmRzLDEpOworCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5XykpOworCSZ4b3JwcwkJKCRpbjAsJHJuZGtleTApOworCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleV8pKTsKKwkmeG9ycHMJCSgkaW5vdXQwLCRybmRrZXkwKTsKKwkmeG9ycHMJCSgkY21hYywkaW4wKTsJCSMgY21hY149b3V0CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCismc2V0X2xhYmVsKCJjY202NF9kZWMyX2xvb3AiKTsKKwkmYWVzZW5jCQkoJGlub3V0MCwkcm5ka2V5MSk7CisJJmRlYwkJKCRyb3VuZHMpOworCSZhZXNlbmMJCSgkY21hYywkcm5ka2V5MSk7CisJJiRtb3Zla2V5CSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKwkmYWVzZW5jCQkoJGlub3V0MCwkcm5ka2V5MCk7CisJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7CisJJmFlc2VuYwkJKCRjbWFjLCRybmRrZXkwKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisJJmpuegkJKCZsYWJlbCgiY2NtNjRfZGVjMl9sb29wIikpOworCSZtb3Z1cHMJCSgkaW4wLCZRV1AoMCwkaW5wKSk7CSMgbG9hZCBpbnAKKwkmcGFkZHEJCSgkaXZlYywmUVdQKDE2LCJlc3AiKSk7CisJJmFlc2VuYwkJKCRpbm91dDAsJHJuZGtleTEpOworCSZhZXNlbmMJCSgkY21hYywkcm5ka2V5MSk7CisJJmxlYQkJKCRpbnAsJlFXUCgxNiwkaW5wKSk7CisJJmFlc2VuY2xhc3QJKCRpbm91dDAsJHJuZGtleTApOworCSZhZXNlbmNsYXN0CSgkY21hYywkcm5ka2V5MCk7CisJJmptcAkoJmxhYmVsKCJjY202NF9kZWNfb3V0ZXIiKSk7CisKKyZzZXRfbGFiZWwoImNjbTY0X2RlY19icmVhayIsMTYpOworCSZtb3YJKCRrZXksJGtleV8pOworCWlmICgkaW5saW5lKQorCXsgICAmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZW5jIiwkY21hYywkaW4wKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiLCRjbWFjKTsJfQorCisJJm1vdgkoImVzcCIsJkRXUCg0OCwiZXNwIikpOworCSZtb3YJKCRvdXQsJndwYXJhbSg1KSk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRjbWFjKTsKKyZmdW5jdGlvbl9lbmQoImFlc25pX2NjbTY0X2RlY3J5cHRfYmxvY2tzIik7Cit9CisMCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZvaWQgYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3MgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCisjICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBibG9ja3MsIGNvbnN0IEFFU19LRVkgKmtleSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaXZlYyk7CisjCisjIEhhbmRsZXMgb25seSBjb21wbGV0ZSBibG9ja3MsIG9wZXJhdGVzIG9uIDMyLWJpdCBjb3VudGVyIGFuZAorIyBkb2VzIG5vdCB1cGRhdGUgKml2ZWMhIChzZWUgZW5naW5lL2VuZ19hZXNuaS5jIGZvciBkZXRhaWxzKQorIworIyBzdGFjayBsYXlvdXQ6CisjCTAJcHNodWZiIG1hc2sKKyMJMTYJdmVjdG9yIGFkZGVuZDogMCw2LDYsNgorIyAJMzIJY291bnRlci1sZXNzIGl2ZWMKKyMJNDgJMXN0IHRyaXBsZXQgb2YgY291bnRlciB2ZWN0b3IKKyMJNjQJMm5kIHRyaXBsZXQgb2YgY291bnRlciB2ZWN0b3IKKyMJODAJc2F2ZWQgJWVzcAorCismZnVuY3Rpb25fYmVnaW4oImFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzIik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOworCSZtb3YJKCRsZW4sJndwYXJhbSgyKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDMpKTsKKwkmbW92CSgkcm91bmRzXywmd3BhcmFtKDQpKTsKKwkmbW92CSgka2V5XywiZXNwIik7CisJJnN1YgkoImVzcCIsODgpOworCSZhbmQJKCJlc3AiLC0xNik7CQkJIyBhbGlnbiBzdGFjaworCSZtb3YJKCZEV1AoODAsImVzcCIpLCRrZXlfKTsKKworCSZjbXAJKCRsZW4sMSk7CisJJmplCSgmbGFiZWwoImN0cjMyX29uZV9zaG9ydGN1dCIpKTsKKworCSZtb3ZkcXUJKCRpbm91dDUsJlFXUCgwLCRyb3VuZHNfKSk7CSMgbG9hZCBpdmVjCisKKwkjIGNvbXBvc2UgYnl0ZS1zd2FwIGNvbnRyb2wgbWFzayBmb3IgcHNodWZiIG9uIHN0YWNrCisJJm1vdgkoJkRXUCgwLCJlc3AiKSwweDBjMGQwZTBmKTsKKwkmbW92CSgmRFdQKDQsImVzcCIpLDB4MDgwOTBhMGIpOworCSZtb3YJKCZEV1AoOCwiZXNwIiksMHgwNDA1MDYwNyk7CisJJm1vdgkoJkRXUCgxMiwiZXNwIiksMHgwMDAxMDIwMyk7CisKKwkjIGNvbXBvc2UgY291bnRlciBpbmNyZW1lbnQgdmVjdG9yIG9uIHN0YWNrCisJJm1vdgkoJHJvdW5kcyw2KTsKKwkmeG9yCSgka2V5Xywka2V5Xyk7CisJJm1vdgkoJkRXUCgxNiwiZXNwIiksJHJvdW5kcyk7CisJJm1vdgkoJkRXUCgyMCwiZXNwIiksJHJvdW5kcyk7CisJJm1vdgkoJkRXUCgyNCwiZXNwIiksJHJvdW5kcyk7CisJJm1vdgkoJkRXUCgyOCwiZXNwIiksJGtleV8pOworCisJJnBleHRyZAkoJHJvdW5kc18sJGlub3V0NSwzKTsJCSMgcHVsbCAzMi1iaXQgY291bnRlcgorCSZwaW5zcmQJKCRpbm91dDUsJGtleV8sMyk7CQkjIHdpcGUgMzItYml0IGNvdW50ZXIKKworCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOwkjIGtleS0+cm91bmRzCisKKwkjIGNvbXBvc2UgMiB2ZWN0b3JzIG9mIDN4MzItYml0IGNvdW50ZXJzCisJJmJzd2FwCSgkcm91bmRzXyk7CisJJnB4b3IJKCRybmRrZXkxLCRybmRrZXkxKTsKKwkmcHhvcgkoJHJuZGtleTAsJHJuZGtleTApOworCSZtb3ZkcWEJKCRpbm91dDAsJlFXUCgwLCJlc3AiKSk7CSMgbG9hZCBieXRlLXN3YXAgbWFzaworCSZwaW5zcmQJKCRybmRrZXkxLCRyb3VuZHNfLDApOworCSZsZWEJKCRrZXlfLCZEV1AoMywkcm91bmRzXykpOworCSZwaW5zcmQJKCRybmRrZXkwLCRrZXlfLDApOworCSZpbmMJKCRyb3VuZHNfKTsKKwkmcGluc3JkCSgkcm5ka2V5MSwkcm91bmRzXywxKTsKKwkmaW5jCSgka2V5Xyk7CisJJnBpbnNyZAkoJHJuZGtleTAsJGtleV8sMSk7CisJJmluYwkoJHJvdW5kc18pOworCSZwaW5zcmQJKCRybmRrZXkxLCRyb3VuZHNfLDIpOworCSZpbmMJKCRrZXlfKTsKKwkmcGluc3JkCSgkcm5ka2V5MCwka2V5XywyKTsKKwkmbW92ZHFhCSgmUVdQKDQ4LCJlc3AiKSwkcm5ka2V5MSk7CSMgc2F2ZSAxc3QgdHJpcGxldAorCSZwc2h1ZmIJKCRybmRrZXkxLCRpbm91dDApOwkJIyBieXRlIHN3YXAKKwkmbW92ZHFhCSgmUVdQKDY0LCJlc3AiKSwkcm5ka2V5MCk7CSMgc2F2ZSAybmQgdHJpcGxldAorCSZwc2h1ZmIJKCRybmRrZXkwLCRpbm91dDApOwkJIyBieXRlIHN3YXAKKworCSZwc2h1ZmQJKCRpbm91dDAsJHJuZGtleTEsMzw8Nik7CSMgcGxhY2UgY291bnRlciB0byB1cHBlciBkd29yZAorCSZwc2h1ZmQJKCRpbm91dDEsJHJuZGtleTEsMjw8Nik7CisJJmNtcAkoJGxlbiw2KTsKKwkmamIJKCZsYWJlbCgiY3RyMzJfdGFpbCIpKTsKKwkmbW92ZHFhCSgmUVdQKDMyLCJlc3AiKSwkaW5vdXQ1KTsJIyBzYXZlIGNvdW50ZXItbGVzcyBpdmVjCisJJnNocgkoJHJvdW5kcywxKTsKKwkmbW92CSgka2V5Xywka2V5KTsJCQkjIGJhY2t1cCAka2V5CisJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CQkjIGJhY2t1cCAkcm91bmRzCisJJnN1YgkoJGxlbiw2KTsKKwkmam1wCSgmbGFiZWwoImN0cjMyX2xvb3A2IikpOworCismc2V0X2xhYmVsKCJjdHIzMl9sb29wNiIsMTYpOworCSZwc2h1ZmQJKCRpbm91dDIsJHJuZGtleTEsMTw8Nik7CisJJm1vdmRxYQkoJHJuZGtleTEsJlFXUCgzMiwiZXNwIikpOwkjIHB1bGwgY291bnRlci1sZXNzIGl2ZWMKKwkmcHNodWZkCSgkaW5vdXQzLCRybmRrZXkwLDM8PDYpOworCSZwb3IJKCRpbm91dDAsJHJuZGtleTEpOwkJIyBtZXJnZSBjb3VudGVyLWxlc3MgaXZlYworCSZwc2h1ZmQJKCRpbm91dDQsJHJuZGtleTAsMjw8Nik7CisJJnBvcgkoJGlub3V0MSwkcm5ka2V5MSk7CisJJnBzaHVmZAkoJGlub3V0NSwkcm5ka2V5MCwxPDw2KTsKKwkmcG9yCSgkaW5vdXQyLCRybmRrZXkxKTsKKwkmcG9yCSgkaW5vdXQzLCRybmRrZXkxKTsKKwkmcG9yCSgkaW5vdXQ0LCRybmRrZXkxKTsKKwkmcG9yCSgkaW5vdXQ1LCRybmRrZXkxKTsKKworCSMgaW5saW5pbmcgX2Flc25pX2VuY3J5cHQ2J3MgcHJvbG9ndWUgZ2l2ZXMgfjQlIGltcHJvdmVtZW50Li4uCisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleV8pKTsKKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleV8pKTsKKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXlfKSk7CisJJmRlYwkJKCRyb3VuZHMpOworCSZweG9yCQkoJGlub3V0MCwkcm5ka2V5MCk7CisJJnB4b3IJCSgkaW5vdXQxLCRybmRrZXkwKTsKKwkmYWVzZW5jCQkoJGlub3V0MCwkcm5ka2V5MSk7CisJJnB4b3IJCSgkaW5vdXQyLCRybmRrZXkwKTsKKwkmYWVzZW5jCQkoJGlub3V0MSwkcm5ka2V5MSk7CisJJnB4b3IJCSgkaW5vdXQzLCRybmRrZXkwKTsKKwkmYWVzZW5jCQkoJGlub3V0Miwkcm5ka2V5MSk7CisJJnB4b3IJCSgkaW5vdXQ0LCRybmRrZXkwKTsKKwkmYWVzZW5jCQkoJGlub3V0Mywkcm5ka2V5MSk7CisJJnB4b3IJCSgkaW5vdXQ1LCRybmRrZXkwKTsKKwkmYWVzZW5jCQkoJGlub3V0NCwkcm5ka2V5MSk7CisJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOworCSZhZXNlbmMJCSgkaW5vdXQ1LCRybmRrZXkxKTsKKworCSZjYWxsCQkoJmxhYmVsKCJfYWVzbmlfZW5jcnlwdDZfZW50ZXIiKSk7CisKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDAsJGlucCkpOworCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgxMCwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQwLCRybmRrZXkxKTsKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4MjAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MSwkcm5ka2V5MCk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3ZkcWEJKCRybmRrZXkwLCZRV1AoMTYsImVzcCIpKTsJIyBsb2FkIGluY3JlbWVudAorCSZ4b3JwcwkoJGlub3V0Miwkcm5ka2V5MSk7CisJJm1vdmRxYQkoJHJuZGtleTEsJlFXUCg0OCwiZXNwIikpOwkjIGxvYWQgMXN0IHRyaXBsZXQKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCisJJnBhZGRkCSgkcm5ka2V5MSwkcm5ka2V5MCk7CQkjIDFzdCB0cmlwbGV0IGluY3JlbWVudAorCSZwYWRkZAkoJHJuZGtleTAsJlFXUCg2NCwiZXNwIikpOwkjIDJuZCB0cmlwbGV0IGluY3JlbWVudAorCSZtb3ZkcWEJKCRpbm91dDAsJlFXUCgwLCJlc3AiKSk7CSMgbG9hZCBieXRlIHN3YXAgbWFzaworCisJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4MzAsJGlucCkpOworCSZtb3Z1cHMJKCRpbm91dDIsJlFXUCgweDQwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDMsJGlub3V0MSk7CisJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4NTAsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgweDYwLCRpbnApKTsKKwkmbW92ZHFhCSgmUVdQKDQ4LCJlc3AiKSwkcm5ka2V5MSk7CSMgc2F2ZSAxc3QgdHJpcGxldAorCSZwc2h1ZmIJKCRybmRrZXkxLCRpbm91dDApOwkJIyBieXRlIHN3YXAKKwkmeG9ycHMJKCRpbm91dDQsJGlub3V0Mik7CisJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMpOworCSZ4b3JwcwkoJGlub3V0NSwkaW5vdXQxKTsKKwkmbW92ZHFhCSgmUVdQKDY0LCJlc3AiKSwkcm5ka2V5MCk7CSMgc2F2ZSAybmQgdHJpcGxldAorCSZwc2h1ZmIJKCRybmRrZXkwLCRpbm91dDApOwkJIyBieXRlIHN3YXAKKwkmbW92dXBzCSgmUVdQKDB4NDAsJG91dCksJGlub3V0NCk7CisJJnBzaHVmZAkoJGlub3V0MCwkcm5ka2V5MSwzPDw2KTsKKwkmbW92dXBzCSgmUVdQKDB4NTAsJG91dCksJGlub3V0NSk7CisJJmxlYQkoJG91dCwmRFdQKDB4NjAsJG91dCkpOworCisJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CisJJnBzaHVmZAkoJGlub3V0MSwkcm5ka2V5MSwyPDw2KTsKKwkmc3ViCSgkbGVuLDYpOworCSZqbmMJKCZsYWJlbCgiY3RyMzJfbG9vcDYiKSk7CisKKwkmYWRkCSgkbGVuLDYpOworCSZqegkoJmxhYmVsKCJjdHIzMl9yZXQiKSk7CisJJm1vdgkoJGtleSwka2V5Xyk7CisJJmxlYQkoJHJvdW5kcywmRFdQKDEsIiIsJHJvdW5kcywyKSk7CSMgcmVzdG9yZSAkcm91bmRzCisJJm1vdmRxYQkoJGlub3V0NSwmUVdQKDMyLCJlc3AiKSk7CSMgcHVsbCBjb3VudC1sZXNzIGl2ZWMKKworJnNldF9sYWJlbCgiY3RyMzJfdGFpbCIpOworCSZwb3IJKCRpbm91dDAsJGlub3V0NSk7CisJJmNtcAkoJGxlbiwyKTsKKwkmamIJKCZsYWJlbCgiY3RyMzJfb25lIikpOworCisJJnBzaHVmZAkoJGlub3V0Miwkcm5ka2V5MSwxPDw2KTsKKwkmcG9yCSgkaW5vdXQxLCRpbm91dDUpOworCSZqZQkoJmxhYmVsKCJjdHIzMl90d28iKSk7CisKKwkmcHNodWZkCSgkaW5vdXQzLCRybmRrZXkwLDM8PDYpOworCSZwb3IJKCRpbm91dDIsJGlub3V0NSk7CisJJmNtcAkoJGxlbiw0KTsKKwkmamIJKCZsYWJlbCgiY3RyMzJfdGhyZWUiKSk7CisKKwkmcHNodWZkCSgkaW5vdXQ0LCRybmRrZXkwLDI8PDYpOworCSZwb3IJKCRpbm91dDMsJGlub3V0NSk7CisJJmplCSgmbGFiZWwoImN0cjMyX2ZvdXIiKSk7CisKKwkmcG9yCSgkaW5vdXQ0LCRpbm91dDUpOworCSZjYWxsCSgiX2Flc25pX2VuY3J5cHQ2Iik7CisJJm1vdnVwcwkoJHJuZGtleTEsJlFXUCgwLCRpbnApKTsKKwkmbW92dXBzCSgkcm5ka2V5MCwmUVdQKDB4MTAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MCwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJHJuZGtleTEsJlFXUCgweDIwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDEsJHJuZGtleTApOworCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgzMCwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQyLCRybmRrZXkxKTsKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4NDAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0Mywkcm5ka2V5MCk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZ4b3JwcwkoJGlub3V0NCwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlub3V0Myk7CisJJm1vdnVwcwkoJlFXUCgweDQwLCRvdXQpLCRpbm91dDQpOworCSZqbXAJKCZsYWJlbCgiY3RyMzJfcmV0IikpOworCismc2V0X2xhYmVsKCJjdHIzMl9vbmVfc2hvcnRjdXQiLDE2KTsKKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkcm91bmRzXykpOwkjIGxvYWQgaXZlYworCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOworCQorJnNldF9sYWJlbCgiY3RyMzJfb25lIik7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsJfQorCSZtb3Z1cHMJKCRpbjAsJlFXUCgwLCRpbnApKTsKKwkmeG9ycHMJKCRpbjAsJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbjApOworCSZqbXAJKCZsYWJlbCgiY3RyMzJfcmV0IikpOworCismc2V0X2xhYmVsKCJjdHIzMl90d28iLDE2KTsKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworCSZtb3Z1cHMJKCRpbm91dDMsJlFXUCgwLCRpbnApKTsKKwkmbW92dXBzCSgkaW5vdXQ0LCZRV1AoMHgxMCwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOworCSZ4b3JwcwkoJGlub3V0MSwkaW5vdXQ0KTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZqbXAJKCZsYWJlbCgiY3RyMzJfcmV0IikpOworCismc2V0X2xhYmVsKCJjdHIzMl90aHJlZSIsMTYpOworCSZjYWxsCSgiX2Flc25pX2VuY3J5cHQzIik7CisJJm1vdnVwcwkoJGlub3V0MywmUVdQKDAsJGlucCkpOworCSZtb3Z1cHMJKCRpbm91dDQsJlFXUCgweDEwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CisJJm1vdnVwcwkoJGlub3V0NSwmUVdQKDB4MjAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MSwkaW5vdXQ0KTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJnhvcnBzCSgkaW5vdXQyLCRpbm91dDUpOworCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKwkmbW92dXBzCSgmUVdQKDB4MjAsJG91dCksJGlub3V0Mik7CisJJmptcAkoJmxhYmVsKCJjdHIzMl9yZXQiKSk7CisKKyZzZXRfbGFiZWwoImN0cjMyX2ZvdXIiLDE2KTsKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0NCIpOworCSZtb3Z1cHMJKCRpbm91dDQsJlFXUCgwLCRpbnApKTsKKwkmbW92dXBzCSgkaW5vdXQ1LCZRV1AoMHgxMCwkaW5wKSk7CisJJm1vdnVwcwkoJHJuZGtleTEsJlFXUCgweDIwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0NCk7CisJJm1vdnVwcwkoJHJuZGtleTAsJlFXUCgweDMwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDEsJGlub3V0NSk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZ4b3JwcwkoJGlub3V0Miwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZ4b3JwcwkoJGlub3V0Mywkcm5ka2V5MCk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKworJnNldF9sYWJlbCgiY3RyMzJfcmV0Iik7CisJJm1vdgkoImVzcCIsJkRXUCg4MCwiZXNwIikpOworJmZ1bmN0aW9uX2VuZCgiYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3MiKTsKKwwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBhZXNuaV94dHNfW2VufGRlXWNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKKyMJY29uc3QgQUVTX0tFWSAqa2V5MSwgY29uc3QgQUVTX0tFWSAqa2V5MgorIwljb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSk7CisjCit7IG15ICgkdHdlYWssJHR3dG1wLCR0d3JlcywkdHdtYXNrKT0oJHJuZGtleTEsJHJuZGtleTAsJGlub3V0MCwkaW5vdXQxKTsKKworJmZ1bmN0aW9uX2JlZ2luKCJhZXNuaV94dHNfZW5jcnlwdCIpOworCSZtb3YJKCRrZXksJndwYXJhbSg0KSk7CQkjIGtleTIKKwkmbW92CSgkaW5wLCZ3cGFyYW0oNSkpOwkJIyBjbGVhci10ZXh0IHR3ZWFrCisKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsJIyBrZXkyLT5yb3VuZHMKKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsJfQorCisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOworCSZtb3YJKCRsZW4sJndwYXJhbSgyKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDMpKTsJCSMga2V5MQorCisJJm1vdgkoJGtleV8sImVzcCIpOworCSZzdWIJKCJlc3AiLDE2KjcrOCk7CisJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7CSMga2V5MS0+cm91bmRzCisJJmFuZAkoImVzcCIsLTE2KTsJCQkjIGFsaWduIHN0YWNrCisKKwkmbW92CSgmRFdQKDE2KjYrMCwiZXNwIiksMHg4Nyk7CSMgY29tcG9zZSB0aGUgbWFnaWMgY29uc3RhbnQKKwkmbW92CSgmRFdQKDE2KjYrNCwiZXNwIiksMCk7CisJJm1vdgkoJkRXUCgxNio2KzgsImVzcCIpLDEpOworCSZtb3YJKCZEV1AoMTYqNisxMiwiZXNwIiksMCk7CisJJm1vdgkoJkRXUCgxNio3KzAsImVzcCIpLCRsZW4pOwkjIHNhdmUgb3JpZ2luYWwgJGxlbgorCSZtb3YJKCZEV1AoMTYqNys0LCJlc3AiKSwka2V5Xyk7CSMgc2F2ZSBvcmlnaW5hbCAlZXNwCisKKwkmbW92ZHFhCSgkdHdlYWssJGlub3V0MCk7CisJJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZtb3ZkcWEJKCR0d21hc2ssJlFXUCg2KjE2LCJlc3AiKSk7CSMgMHgwLi4uMDEwLi4uODcKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKworCSZhbmQJKCRsZW4sLTE2KTsKKwkmbW92CSgka2V5Xywka2V5KTsJCQkjIGJhY2t1cCAka2V5CisJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CQkjIGJhY2t1cCAkcm91bmRzCisJJnN1YgkoJGxlbiwxNio2KTsKKwkmamMJKCZsYWJlbCgieHRzX2VuY19zaG9ydCIpKTsKKworCSZzaHIJKCRyb3VuZHMsMSk7CisJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CisJJmptcAkoJmxhYmVsKCJ4dHNfZW5jX2xvb3A2IikpOworCismc2V0X2xhYmVsKCJ4dHNfZW5jX2xvb3A2IiwxNik7CisJZm9yICgkaT0wOyRpPDQ7JGkrKykgeworCSAgICAmcHNodWZkCSgkdHdyZXMsJHR3dG1wLDB4MTMpOworCSAgICAmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJICAgICZtb3ZkcWEJKCZRV1AoMTYqJGksImVzcCIpLCR0d2Vhayk7CisJICAgICZwYWRkcQkoJHR3ZWFrLCR0d2Vhayk7CSMgJnBzbGxxKCR0d2VhaywxKTsKKwkgICAgJnBhbmQJKCR0d3JlcywkdHdtYXNrKTsJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJICAgICZwY21wZ3RkCSgkdHd0bXAsJHR3ZWFrKTsJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSAgICAmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisJfQorCSZwc2h1ZmQJKCRpbm91dDUsJHR3dG1wLDB4MTMpOworCSZtb3ZkcWEJKCZRV1AoMTYqJGkrKywiZXNwIiksJHR3ZWFrKTsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSAmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5XykpOworCSZwYW5kCSgkaW5vdXQ1LCR0d21hc2spOwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJICZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsJIyBsb2FkIGlucHV0CisJJnB4b3IJKCRpbm91dDUsJHR3ZWFrKTsKKworCSMgaW5saW5lIF9hZXNuaV9lbmNyeXB0NiBwcm9sb2d1ZSBhbmQgZmxpcCB4b3Igd2l0aCB0d2VhayBhbmQga2V5WzBdCisJJm1vdmRxdQkoJGlub3V0MSwmUVdQKDE2KjEsJGlucCkpOworCSAmeG9ycHMJCSgkaW5vdXQwLCRybmRrZXkwKTsJIyBpbnB1dF49cm5ka2V5WzBdCisJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSAmcHhvcgkJKCRpbm91dDEsJHJuZGtleTApOworCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgxNiozLCRpbnApKTsKKwkgJnB4b3IJCSgkaW5vdXQyLCRybmRrZXkwKTsKKwkmbW92ZHF1CSgkaW5vdXQ0LCZRV1AoMTYqNCwkaW5wKSk7CisJICZweG9yCQkoJGlub3V0Mywkcm5ka2V5MCk7CisJJm1vdmRxdQkoJHJuZGtleTEsJlFXUCgxNio1LCRpbnApKTsKKwkgJnB4b3IJCSgkaW5vdXQ0LCRybmRrZXkwKTsKKwkmbGVhCSgkaW5wLCZEV1AoMTYqNiwkaW5wKSk7CisJJnB4b3IJKCRpbm91dDAsJlFXUCgxNiowLCJlc3AiKSk7CSMgaW5wdXRePXR3ZWFrCisJJm1vdmRxYQkoJlFXUCgxNiokaSwiZXNwIiksJGlub3V0NSk7CSMgc2F2ZSBsYXN0IHR3ZWFrCisJJnB4b3IJKCRpbm91dDUsJHJuZGtleTEpOworCisJICYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5XykpOworCSAmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXlfKSk7CisJJnB4b3IJKCRpbm91dDEsJlFXUCgxNioxLCJlc3AiKSk7CisJICZhZXNlbmMJKCRpbm91dDAsJHJuZGtleTEpOworCSZweG9yCSgkaW5vdXQyLCZRV1AoMTYqMiwiZXNwIikpOworCSAmYWVzZW5jCSgkaW5vdXQxLCRybmRrZXkxKTsKKwkmcHhvcgkoJGlub3V0MywmUVdQKDE2KjMsImVzcCIpKTsKKwkgJmRlYwkJKCRyb3VuZHMpOworCSAmYWVzZW5jCSgkaW5vdXQyLCRybmRrZXkxKTsKKwkmcHhvcgkoJGlub3V0NCwmUVdQKDE2KjQsImVzcCIpKTsKKwkgJmFlc2VuYwkoJGlub3V0Mywkcm5ka2V5MSk7CisJJnB4b3IJCSgkaW5vdXQ1LCRybmRrZXkwKTsKKwkgJmFlc2VuYwkoJGlub3V0NCwkcm5ka2V5MSk7CisJICYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKKwkgJmFlc2VuYwkoJGlub3V0NSwkcm5ka2V5MSk7CisJJmNhbGwJCSgmbGFiZWwoIl9hZXNuaV9lbmNyeXB0Nl9lbnRlciIpKTsKKworCSZtb3ZkcWEJKCR0d2VhaywmUVdQKDE2KjUsImVzcCIpKTsJIyBsYXN0IHR3ZWFrCisgICAgICAgJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBvdXRwdXRePXR3ZWFrCisgICAgICAgJnBjbXBndGQJKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSZ4b3JwcwkoJGlub3V0MSwmUVdQKDE2KjEsImVzcCIpKTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJnhvcnBzCSgkaW5vdXQyLCZRV1AoMTYqMiwiZXNwIikpOworCSZtb3Z1cHMJKCZRV1AoMTYqMSwkb3V0KSwkaW5vdXQxKTsKKwkmeG9ycHMJKCRpbm91dDMsJlFXUCgxNiozLCJlc3AiKSk7CisJJm1vdnVwcwkoJlFXUCgxNioyLCRvdXQpLCRpbm91dDIpOworCSZ4b3JwcwkoJGlub3V0NCwmUVdQKDE2KjQsImVzcCIpKTsKKwkmbW92dXBzCSgmUVdQKDE2KjMsJG91dCksJGlub3V0Myk7CisJJnhvcnBzCSgkaW5vdXQ1LCR0d2Vhayk7CisJJm1vdnVwcwkoJlFXUCgxNio0LCRvdXQpLCRpbm91dDQpOworICAgICAgICZwc2h1ZmQJKCR0d3JlcywkdHd0bXAsMHgxMyk7CisJJm1vdnVwcwkoJlFXUCgxNio1LCRvdXQpLCRpbm91dDUpOworCSZsZWEJKCRvdXQsJkRXUCgxNio2LCRvdXQpKTsKKyAgICAgICAmbW92ZHFhCSgkdHdtYXNrLCZRV1AoMTYqNiwiZXNwIikpOwkjIDB4MC4uLjAxMC4uLjg3CisKKwkmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJJnBhZGRxCSgkdHdlYWssJHR3ZWFrKTsJCSMgJnBzbGxxKCR0d2VhaywxKTsKKwkmcGFuZAkoJHR3cmVzLCR0d21hc2spOwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJJnBjbXBndGQoJHR3dG1wLCR0d2Vhayk7CQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CQkjIHJlc3RvcmUgJHJvdW5kcworCSZweG9yCSgkdHdlYWssJHR3cmVzKTsKKworCSZzdWIJKCRsZW4sMTYqNik7CisJJmpuYwkoJmxhYmVsKCJ4dHNfZW5jX2xvb3A2IikpOworCisJJmxlYQkoJHJvdW5kcywmRFdQKDEsIiIsJHJvdW5kcywyKSk7CSMgcmVzdG9yZSAkcm91bmRzCisJJm1vdgkoJGtleSwka2V5Xyk7CQkJIyByZXN0b3JlICRrZXkKKwkmbW92CSgkcm91bmRzXywkcm91bmRzKTsKKworJnNldF9sYWJlbCgieHRzX2VuY19zaG9ydCIpOworCSZhZGQJKCRsZW4sMTYqNik7CisJJmp6CSgmbGFiZWwoInh0c19lbmNfZG9uZTZ4IikpOworCisJJm1vdmRxYQkoJGlub3V0MywkdHdlYWspOwkJIyBwdXQgYXNpZGUgcHJldmlvdXMgdHdlYWsKKwkmY21wCSgkbGVuLDB4MjApOworCSZqYgkoJmxhYmVsKCJ4dHNfZW5jX29uZSIpKTsKKworCSZwc2h1ZmQJKCR0d3JlcywkdHd0bXAsMHgxMyk7CisJJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZwYWRkcQkoJHR3ZWFrLCR0d2Vhayk7CQkjICZwc2xscSgkdHdlYWssMSk7CisJJnBhbmQJKCR0d3JlcywkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSZwY21wZ3RkKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSZweG9yCSgkdHdlYWssJHR3cmVzKTsKKwkmamUJKCZsYWJlbCgieHRzX2VuY190d28iKSk7CisKKwkmcHNodWZkCSgkdHdyZXMsJHR3dG1wLDB4MTMpOworCSZweG9yCSgkdHd0bXAsJHR3dG1wKTsKKwkmbW92ZHFhCSgkaW5vdXQ0LCR0d2Vhayk7CQkjIHB1dCBhc2lkZSBwcmV2aW91cyB0d2VhaworCSZwYWRkcQkoJHR3ZWFrLCR0d2Vhayk7CQkjICZwc2xscSgkdHdlYWssMSk7CisJJnBhbmQJKCR0d3JlcywkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSZwY21wZ3RkKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSZweG9yCSgkdHdlYWssJHR3cmVzKTsKKwkmY21wCSgkbGVuLDB4NDApOworCSZqYgkoJmxhYmVsKCJ4dHNfZW5jX3RocmVlIikpOworCisJJnBzaHVmZAkoJHR3cmVzLCR0d3RtcCwweDEzKTsKKwkmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJJm1vdmRxYQkoJGlub3V0NSwkdHdlYWspOwkJIyBwdXQgYXNpZGUgcHJldmlvdXMgdHdlYWsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSZwYW5kCSgkdHdyZXMsJHR3bWFzayk7CQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisJJm1vdmRxYQkoJlFXUCgxNiowLCJlc3AiKSwkaW5vdXQzKTsKKwkmbW92ZHFhCSgmUVdQKDE2KjEsImVzcCIpLCRpbm91dDQpOworCSZqZQkoJmxhYmVsKCJ4dHNfZW5jX2ZvdXIiKSk7CisKKwkmbW92ZHFhCSgmUVdQKDE2KjIsImVzcCIpLCRpbm91dDUpOworCSZwc2h1ZmQJKCRpbm91dDUsJHR3dG1wLDB4MTMpOworCSZtb3ZkcWEJKCZRV1AoMTYqMywiZXNwIiksJHR3ZWFrKTsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJGlub3V0MCwxKTsKKwkmcGFuZAkoJGlub3V0NSwkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSZweG9yCSgkaW5vdXQ1LCR0d2Vhayk7CisKKwkmbW92ZHF1CSgkaW5vdXQwLCZRV1AoMTYqMCwkaW5wKSk7CSMgbG9hZCBpbnB1dAorCSZtb3ZkcXUJKCRpbm91dDEsJlFXUCgxNioxLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQyLCZRV1AoMTYqMiwkaW5wKSk7CisJJnB4b3IJKCRpbm91dDAsJlFXUCgxNiowLCJlc3AiKSk7CSMgaW5wdXRePXR3ZWFrCisJJm1vdmRxdQkoJGlub3V0MywmUVdQKDE2KjMsJGlucCkpOworCSZweG9yCSgkaW5vdXQxLCZRV1AoMTYqMSwiZXNwIikpOworCSZtb3ZkcXUJKCRpbm91dDQsJlFXUCgxNio0LCRpbnApKTsKKwkmcHhvcgkoJGlub3V0MiwmUVdQKDE2KjIsImVzcCIpKTsKKwkmbGVhCSgkaW5wLCZEV1AoMTYqNSwkaW5wKSk7CisJJnB4b3IJKCRpbm91dDMsJlFXUCgxNiozLCJlc3AiKSk7CisJJm1vdmRxYQkoJlFXUCgxNio0LCJlc3AiKSwkaW5vdXQ1KTsJIyBzYXZlIGxhc3QgdHdlYWsKKwkmcHhvcgkoJGlub3V0NCwkaW5vdXQ1KTsKKworCSZjYWxsCSgiX2Flc25pX2VuY3J5cHQ2Iik7CisKKwkmbW92YXBzCSgkdHdlYWssJlFXUCgxNio0LCJlc3AiKSk7CSMgbGFzdCB0d2VhaworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCZRV1AoMTYqMSwiZXNwIikpOworCSZ4b3JwcwkoJGlub3V0MiwmUVdQKDE2KjIsImVzcCIpKTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJnhvcnBzCSgkaW5vdXQzLCZRV1AoMTYqMywiZXNwIikpOworCSZtb3Z1cHMJKCZRV1AoMTYqMSwkb3V0KSwkaW5vdXQxKTsKKwkmeG9ycHMJKCRpbm91dDQsJHR3ZWFrKTsKKwkmbW92dXBzCSgmUVdQKDE2KjIsJG91dCksJGlub3V0Mik7CisJJm1vdnVwcwkoJlFXUCgxNiozLCRvdXQpLCRpbm91dDMpOworCSZtb3Z1cHMJKCZRV1AoMTYqNCwkb3V0KSwkaW5vdXQ0KTsKKwkmbGVhCSgkb3V0LCZEV1AoMTYqNSwkb3V0KSk7CisJJmptcAkoJmxhYmVsKCJ4dHNfZW5jX2RvbmUiKSk7CisKKyZzZXRfbGFiZWwoInh0c19lbmNfb25lIiwxNik7CisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbGVhCSgkaW5wLCZEV1AoMTYqMSwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBpbnB1dF49dHdlYWsKKwlpZiAoJGlubGluZSkKKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIpOwl9CisJZWxzZQorCXsgICAmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MSIpOwl9CisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBvdXRwdXRePXR3ZWFrCisJJm1vdnVwcwkoJlFXUCgxNiowLCRvdXQpLCRpbm91dDApOwkjIHdyaXRlIG91dHB1dAorCSZsZWEJKCRvdXQsJkRXUCgxNioxLCRvdXQpKTsKKworCSZtb3ZkcWEJKCR0d2VhaywkaW5vdXQzKTsJCSMgbGFzdCB0d2VhaworCSZqbXAJKCZsYWJlbCgieHRzX2VuY19kb25lIikpOworCismc2V0X2xhYmVsKCJ4dHNfZW5jX3R3byIsMTYpOworCSZtb3ZhcHMJKCRpbm91dDQsJHR3ZWFrKTsJCSMgcHV0IGFzaWRlIGxhc3QgdHdlYWsKKworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgxNiowLCRpbnApKTsJIyBsb2FkIGlucHV0CisJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDE2KjEsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgxNioyLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CQkjIGlucHV0Xj10d2VhaworCSZ4b3JwcwkoJGlub3V0MSwkaW5vdXQ0KTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0Mik7CisKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworCisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCRpbm91dDQpOworCSZtb3Z1cHMJKCZRV1AoMTYqMCwkb3V0KSwkaW5vdXQwKTsJIyB3cml0ZSBvdXRwdXQKKwkmbW92dXBzCSgmUVdQKDE2KjEsJG91dCksJGlub3V0MSk7CisJJmxlYQkoJG91dCwmRFdQKDE2KjIsJG91dCkpOworCisJJm1vdmRxYQkoJHR3ZWFrLCRpbm91dDQpOwkJIyBsYXN0IHR3ZWFrCisJJmptcAkoJmxhYmVsKCJ4dHNfZW5jX2RvbmUiKSk7CisKKyZzZXRfbGFiZWwoInh0c19lbmNfdGhyZWUiLDE2KTsKKwkmbW92YXBzCSgkaW5vdXQ1LCR0d2Vhayk7CQkjIHB1dCBhc2lkZSBsYXN0IHR3ZWFrCisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMTYqMSwkaW5wKSk7CisJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgxNiozLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CQkjIGlucHV0Xj10d2VhaworCSZ4b3JwcwkoJGlub3V0MSwkaW5vdXQ0KTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0NSk7CisKKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworCisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCRpbm91dDQpOworCSZ4b3JwcwkoJGlub3V0MiwkaW5vdXQ1KTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJm1vdnVwcwkoJlFXUCgxNioxLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMTYqMiwkb3V0KSwkaW5vdXQyKTsKKwkmbGVhCSgkb3V0LCZEV1AoMTYqMywkb3V0KSk7CisKKwkmbW92ZHFhCSgkdHdlYWssJGlub3V0NSk7CQkjIGxhc3QgdHdlYWsKKwkmam1wCSgmbGFiZWwoInh0c19lbmNfZG9uZSIpKTsKKworJnNldF9sYWJlbCgieHRzX2VuY19mb3VyIiwxNik7CisJJm1vdmFwcwkoJGlub3V0NCwkdHdlYWspOwkJIyBwdXQgYXNpZGUgbGFzdCB0d2VhaworCisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMTYqMSwkaW5wKSk7CisJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBpbnB1dF49dHdlYWsKKwkmbW92dXBzCSgkaW5vdXQzLCZRV1AoMTYqMywkaW5wKSk7CisJJmxlYQkoJGlucCwmRFdQKDE2KjQsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MSwmUVdQKDE2KjEsImVzcCIpKTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0NSk7CisJJnhvcnBzCSgkaW5vdXQzLCRpbm91dDQpOworCisJJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDQiKTsKKworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCZRV1AoMTYqMSwiZXNwIikpOworCSZ4b3JwcwkoJGlub3V0MiwkaW5vdXQ1KTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJnhvcnBzCSgkaW5vdXQzLCRpbm91dDQpOworCSZtb3Z1cHMJKCZRV1AoMTYqMSwkb3V0KSwkaW5vdXQxKTsKKwkmbW92dXBzCSgmUVdQKDE2KjIsJG91dCksJGlub3V0Mik7CisJJm1vdnVwcwkoJlFXUCgxNiozLCRvdXQpLCRpbm91dDMpOworCSZsZWEJKCRvdXQsJkRXUCgxNio0LCRvdXQpKTsKKworCSZtb3ZkcWEJKCR0d2VhaywkaW5vdXQ0KTsJCSMgbGFzdCB0d2VhaworCSZqbXAJKCZsYWJlbCgieHRzX2VuY19kb25lIikpOworCismc2V0X2xhYmVsKCJ4dHNfZW5jX2RvbmU2eCIsMTYpOwkJIyAkdHdlYWsgaXMgcHJlLWNhbGN1bGF0ZWQKKwkmbW92CSgkbGVuLCZEV1AoMTYqNyswLCJlc3AiKSk7CSMgcmVzdG9yZSBvcmlnaW5hbCAkbGVuCisJJmFuZAkoJGxlbiwxNSk7CisJJmp6CSgmbGFiZWwoInh0c19lbmNfcmV0IikpOworCSZtb3ZkcWEJKCRpbm91dDMsJHR3ZWFrKTsKKwkmbW92CSgmRFdQKDE2KjcrMCwiZXNwIiksJGxlbik7CSMgc2F2ZSAkbGVuJTE2CisJJmptcAkoJmxhYmVsKCJ4dHNfZW5jX3N0ZWFsIikpOworCismc2V0X2xhYmVsKCJ4dHNfZW5jX2RvbmUiLDE2KTsKKwkmbW92CSgkbGVuLCZEV1AoMTYqNyswLCJlc3AiKSk7CSMgcmVzdG9yZSBvcmlnaW5hbCAkbGVuCisJJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZhbmQJKCRsZW4sMTUpOworCSZqegkoJmxhYmVsKCJ4dHNfZW5jX3JldCIpKTsKKworCSZwY21wZ3RkKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSZtb3YJKCZEV1AoMTYqNyswLCJlc3AiKSwkbGVuKTsJIyBzYXZlICRsZW4lMTYKKwkmcHNodWZkCSgkaW5vdXQzLCR0d3RtcCwweDEzKTsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSZwYW5kCSgkaW5vdXQzLCZRV1AoMTYqNiwiZXNwIikpOwkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcHhvcgkoJGlub3V0MywkdHdlYWspOworCismc2V0X2xhYmVsKCJ4dHNfZW5jX3N0ZWFsIik7CisJJm1vdnoJKCRyb3VuZHMsJkJQKDAsJGlucCkpOworCSZtb3Z6CSgka2V5LCZCUCgtMTYsJG91dCkpOworCSZsZWEJKCRpbnAsJkRXUCgxLCRpbnApKTsKKwkmbW92CSgmQlAoLTE2LCRvdXQpLCZMQigkcm91bmRzKSk7CisJJm1vdgkoJkJQKDAsJG91dCksJkxCKCRrZXkpKTsKKwkmbGVhCSgkb3V0LCZEV1AoMSwkb3V0KSk7CisJJnN1YgkoJGxlbiwxKTsKKwkmam56CSgmbGFiZWwoInh0c19lbmNfc3RlYWwiKSk7CisKKwkmc3ViCSgkb3V0LCZEV1AoMTYqNyswLCJlc3AiKSk7CSMgcmV3aW5kICRvdXQKKwkmbW92CSgka2V5LCRrZXlfKTsJCQkjIHJlc3RvcmUgJGtleQorCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkJIyByZXN0b3JlICRyb3VuZHMKKworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgtMTYsJG91dCkpOwkjIGxvYWQgaW5wdXQKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CQkjIGlucHV0Xj10d2VhaworCWlmICgkaW5saW5lKQorCXsgICAmYWVzbmlfaW5saW5lX2dlbmVyYXRlMSgiZW5jIik7CX0KKwllbHNlCisJeyAgICZjYWxsCSgiX2Flc25pX2VuY3J5cHQxIik7CX0KKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CQkjIG91dHB1dF49dHdlYWsKKwkmbW92dXBzCSgmUVdQKC0xNiwkb3V0KSwkaW5vdXQwKTsJIyB3cml0ZSBvdXRwdXQKKworJnNldF9sYWJlbCgieHRzX2VuY19yZXQiKTsKKwkmbW92CSgiZXNwIiwmRFdQKDE2KjcrNCwiZXNwIikpOwkjIHJlc3RvcmUgJWVzcAorJmZ1bmN0aW9uX2VuZCgiYWVzbmlfeHRzX2VuY3J5cHQiKTsKKworJmZ1bmN0aW9uX2JlZ2luKCJhZXNuaV94dHNfZGVjcnlwdCIpOworCSZtb3YJKCRrZXksJndwYXJhbSg0KSk7CQkjIGtleTIKKwkmbW92CSgkaW5wLCZ3cGFyYW0oNSkpOwkJIyBjbGVhci10ZXh0IHR3ZWFrCisKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsJIyBrZXkyLT5yb3VuZHMKKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsJfQorCisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOworCSZtb3YJKCRsZW4sJndwYXJhbSgyKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDMpKTsJCSMga2V5MQorCisJJm1vdgkoJGtleV8sImVzcCIpOworCSZzdWIJKCJlc3AiLDE2KjcrOCk7CisJJmFuZAkoImVzcCIsLTE2KTsJCQkjIGFsaWduIHN0YWNrCisKKwkmeG9yCSgkcm91bmRzXywkcm91bmRzXyk7CQkjIGlmKGxlbiUxNikgbGVuLT0xNjsKKwkmdGVzdAkoJGxlbiwxNSk7CisJJnNldG56CSgmTEIoJHJvdW5kc18pKTsKKwkmc2hsCSgkcm91bmRzXyw0KTsKKwkmc3ViCSgkbGVuLCRyb3VuZHNfKTsKKworCSZtb3YJKCZEV1AoMTYqNiswLCJlc3AiKSwweDg3KTsJIyBjb21wb3NlIHRoZSBtYWdpYyBjb25zdGFudAorCSZtb3YJKCZEV1AoMTYqNis0LCJlc3AiKSwwKTsKKwkmbW92CSgmRFdQKDE2KjYrOCwiZXNwIiksMSk7CisJJm1vdgkoJkRXUCgxNio2KzEyLCJlc3AiKSwwKTsKKwkmbW92CSgmRFdQKDE2KjcrMCwiZXNwIiksJGxlbik7CSMgc2F2ZSBvcmlnaW5hbCAkbGVuCisJJm1vdgkoJkRXUCgxNio3KzQsImVzcCIpLCRrZXlfKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKKworCSZtb3YJKCRyb3VuZHMsJkRXUCgyNDAsJGtleSkpOwkjIGtleTEtPnJvdW5kcworCSZtb3YJKCRrZXlfLCRrZXkpOwkJCSMgYmFja3VwICRrZXkKKwkmbW92CSgkcm91bmRzXywkcm91bmRzKTsJCSMgYmFja3VwICRyb3VuZHMKKworCSZtb3ZkcWEJKCR0d2VhaywkaW5vdXQwKTsKKwkmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJJm1vdmRxYQkoJHR3bWFzaywmUVdQKDYqMTYsImVzcCIpKTsJIyAweDAuLi4wMTAuLi44NworCSZwY21wZ3RkKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCisJJmFuZAkoJGxlbiwtMTYpOworCSZzdWIJKCRsZW4sMTYqNik7CisJJmpjCSgmbGFiZWwoInh0c19kZWNfc2hvcnQiKSk7CisKKwkmc2hyCSgkcm91bmRzLDEpOworCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOworCSZqbXAJKCZsYWJlbCgieHRzX2RlY19sb29wNiIpKTsKKworJnNldF9sYWJlbCgieHRzX2RlY19sb29wNiIsMTYpOworCWZvciAoJGk9MDskaTw0OyRpKyspIHsKKwkgICAgJnBzaHVmZAkoJHR3cmVzLCR0d3RtcCwweDEzKTsKKwkgICAgJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSAgICAmbW92ZHFhCSgmUVdQKDE2KiRpLCJlc3AiKSwkdHdlYWspOworCSAgICAmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkjICZwc2xscSgkdHdlYWssMSk7CisJICAgICZwYW5kCSgkdHdyZXMsJHR3bWFzayk7CSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSAgICAmcGNtcGd0ZAkoJHR3dG1wLCR0d2Vhayk7CSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkgICAgJnB4b3IJKCR0d2VhaywkdHdyZXMpOworCX0KKwkmcHNodWZkCSgkaW5vdXQ1LCR0d3RtcCwweDEzKTsKKwkmbW92ZHFhCSgmUVdQKDE2KiRpKyssImVzcCIpLCR0d2Vhayk7CisJJnBhZGRxCSgkdHdlYWssJHR3ZWFrKTsJCSMgJnBzbGxxKCR0d2VhaywxKTsKKwkgJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleV8pKTsKKwkmcGFuZAkoJGlub3V0NSwkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSAmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CSMgbG9hZCBpbnB1dAorCSZweG9yCSgkaW5vdXQ1LCR0d2Vhayk7CisKKwkjIGlubGluZSBfYWVzbmlfZW5jcnlwdDYgcHJvbG9ndWUgYW5kIGZsaXAgeG9yIHdpdGggdHdlYWsgYW5kIGtleVswXQorCSZtb3ZkcXUJKCRpbm91dDEsJlFXUCgxNioxLCRpbnApKTsKKwkgJnhvcnBzCQkoJGlub3V0MCwkcm5ka2V5MCk7CSMgaW5wdXRePXJuZGtleVswXQorCSZtb3ZkcXUJKCRpbm91dDIsJlFXUCgxNioyLCRpbnApKTsKKwkgJnB4b3IJCSgkaW5vdXQxLCRybmRrZXkwKTsKKwkmbW92ZHF1CSgkaW5vdXQzLCZRV1AoMTYqMywkaW5wKSk7CisJICZweG9yCQkoJGlub3V0Miwkcm5ka2V5MCk7CisJJm1vdmRxdQkoJGlub3V0NCwmUVdQKDE2KjQsJGlucCkpOworCSAmcHhvcgkJKCRpbm91dDMsJHJuZGtleTApOworCSZtb3ZkcXUJKCRybmRrZXkxLCZRV1AoMTYqNSwkaW5wKSk7CisJICZweG9yCQkoJGlub3V0NCwkcm5ka2V5MCk7CisJJmxlYQkoJGlucCwmRFdQKDE2KjYsJGlucCkpOworCSZweG9yCSgkaW5vdXQwLCZRV1AoMTYqMCwiZXNwIikpOwkjIGlucHV0Xj10d2VhaworCSZtb3ZkcWEJKCZRV1AoMTYqJGksImVzcCIpLCRpbm91dDUpOwkjIHNhdmUgbGFzdCB0d2VhaworCSZweG9yCSgkaW5vdXQ1LCRybmRrZXkxKTsKKworCSAmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleV8pKTsKKwkgJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5XykpOworCSZweG9yCSgkaW5vdXQxLCZRV1AoMTYqMSwiZXNwIikpOworCSAmYWVzZGVjCSgkaW5vdXQwLCRybmRrZXkxKTsKKwkmcHhvcgkoJGlub3V0MiwmUVdQKDE2KjIsImVzcCIpKTsKKwkgJmFlc2RlYwkoJGlub3V0MSwkcm5ka2V5MSk7CisJJnB4b3IJKCRpbm91dDMsJlFXUCgxNiozLCJlc3AiKSk7CisJICZkZWMJCSgkcm91bmRzKTsKKwkgJmFlc2RlYwkoJGlub3V0Miwkcm5ka2V5MSk7CisJJnB4b3IJKCRpbm91dDQsJlFXUCgxNio0LCJlc3AiKSk7CisJICZhZXNkZWMJKCRpbm91dDMsJHJuZGtleTEpOworCSZweG9yCQkoJGlub3V0NSwkcm5ka2V5MCk7CisJICZhZXNkZWMJKCRpbm91dDQsJHJuZGtleTEpOworCSAmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisJICZhZXNkZWMJKCRpbm91dDUsJHJuZGtleTEpOworCSZjYWxsCQkoJmxhYmVsKCJfYWVzbmlfZGVjcnlwdDZfZW50ZXIiKSk7CisKKwkmbW92ZHFhCSgkdHdlYWssJlFXUCgxNio1LCJlc3AiKSk7CSMgbGFzdCB0d2VhaworICAgICAgICZweG9yCSgkdHd0bXAsJHR3dG1wKTsKKwkmeG9ycHMJKCRpbm91dDAsJlFXUCgxNiowLCJlc3AiKSk7CSMgb3V0cHV0Xj10d2VhaworICAgICAgICZwY21wZ3RkCSgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmeG9ycHMJKCRpbm91dDEsJlFXUCgxNioxLCJlc3AiKSk7CisJJm1vdnVwcwkoJlFXUCgxNiowLCRvdXQpLCRpbm91dDApOwkjIHdyaXRlIG91dHB1dAorCSZ4b3JwcwkoJGlub3V0MiwmUVdQKDE2KjIsImVzcCIpKTsKKwkmbW92dXBzCSgmUVdQKDE2KjEsJG91dCksJGlub3V0MSk7CisJJnhvcnBzCSgkaW5vdXQzLCZRV1AoMTYqMywiZXNwIikpOworCSZtb3Z1cHMJKCZRV1AoMTYqMiwkb3V0KSwkaW5vdXQyKTsKKwkmeG9ycHMJKCRpbm91dDQsJlFXUCgxNio0LCJlc3AiKSk7CisJJm1vdnVwcwkoJlFXUCgxNiozLCRvdXQpLCRpbm91dDMpOworCSZ4b3JwcwkoJGlub3V0NSwkdHdlYWspOworCSZtb3Z1cHMJKCZRV1AoMTYqNCwkb3V0KSwkaW5vdXQ0KTsKKyAgICAgICAmcHNodWZkCSgkdHdyZXMsJHR3dG1wLDB4MTMpOworCSZtb3Z1cHMJKCZRV1AoMTYqNSwkb3V0KSwkaW5vdXQ1KTsKKwkmbGVhCSgkb3V0LCZEV1AoMTYqNiwkb3V0KSk7CisgICAgICAgJm1vdmRxYQkoJHR3bWFzaywmUVdQKDE2KjYsImVzcCIpKTsJIyAweDAuLi4wMTAuLi44NworCisJJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZwYWRkcQkoJHR3ZWFrLCR0d2Vhayk7CQkjICZwc2xscSgkdHdlYWssMSk7CisJJnBhbmQJKCR0d3JlcywkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSZwY21wZ3RkKCR0d3RtcCwkdHdlYWspOwkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkJIyByZXN0b3JlICRyb3VuZHMKKwkmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisKKwkmc3ViCSgkbGVuLDE2KjYpOworCSZqbmMJKCZsYWJlbCgieHRzX2RlY19sb29wNiIpKTsKKworCSZsZWEJKCRyb3VuZHMsJkRXUCgxLCIiLCRyb3VuZHMsMikpOwkjIHJlc3RvcmUgJHJvdW5kcworCSZtb3YJKCRrZXksJGtleV8pOwkJCSMgcmVzdG9yZSAka2V5CisJJm1vdgkoJHJvdW5kc18sJHJvdW5kcyk7CisKKyZzZXRfbGFiZWwoInh0c19kZWNfc2hvcnQiKTsKKwkmYWRkCSgkbGVuLDE2KjYpOworCSZqegkoJmxhYmVsKCJ4dHNfZGVjX2RvbmU2eCIpKTsKKworCSZtb3ZkcWEJKCRpbm91dDMsJHR3ZWFrKTsJCSMgcHV0IGFzaWRlIHByZXZpb3VzIHR3ZWFrCisJJmNtcAkoJGxlbiwweDIwKTsKKwkmamIJKCZsYWJlbCgieHRzX2RlY19vbmUiKSk7CisKKwkmcHNodWZkCSgkdHdyZXMsJHR3dG1wLDB4MTMpOworCSZweG9yCSgkdHd0bXAsJHR3dG1wKTsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSZwYW5kCSgkdHdyZXMsJHR3bWFzayk7CQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisJJmplCSgmbGFiZWwoInh0c19kZWNfdHdvIikpOworCisJJnBzaHVmZAkoJHR3cmVzLCR0d3RtcCwweDEzKTsKKwkmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJJm1vdmRxYQkoJGlub3V0NCwkdHdlYWspOwkJIyBwdXQgYXNpZGUgcHJldmlvdXMgdHdlYWsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSZwYW5kCSgkdHdyZXMsJHR3bWFzayk7CQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisJJmNtcAkoJGxlbiwweDQwKTsKKwkmamIJKCZsYWJlbCgieHRzX2RlY190aHJlZSIpKTsKKworCSZwc2h1ZmQJKCR0d3JlcywkdHd0bXAsMHgxMyk7CisJJnB4b3IJKCR0d3RtcCwkdHd0bXApOworCSZtb3ZkcWEJKCRpbm91dDUsJHR3ZWFrKTsJCSMgcHV0IGFzaWRlIHByZXZpb3VzIHR3ZWFrCisJJnBhZGRxCSgkdHdlYWssJHR3ZWFrKTsJCSMgJnBzbGxxKCR0d2VhaywxKTsKKwkmcGFuZAkoJHR3cmVzLCR0d21hc2spOwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJJnBjbXBndGQoJHR3dG1wLCR0d2Vhayk7CQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisJJnB4b3IJKCR0d2VhaywkdHdyZXMpOworCSZtb3ZkcWEJKCZRV1AoMTYqMCwiZXNwIiksJGlub3V0Myk7CisJJm1vdmRxYQkoJlFXUCgxNioxLCJlc3AiKSwkaW5vdXQ0KTsKKwkmamUJKCZsYWJlbCgieHRzX2RlY19mb3VyIikpOworCisJJm1vdmRxYQkoJlFXUCgxNioyLCJlc3AiKSwkaW5vdXQ1KTsKKwkmcHNodWZkCSgkaW5vdXQ1LCR0d3RtcCwweDEzKTsKKwkmbW92ZHFhCSgmUVdQKDE2KjMsImVzcCIpLCR0d2Vhayk7CisJJnBhZGRxCSgkdHdlYWssJHR3ZWFrKTsJCSMgJnBzbGxxKCRpbm91dDAsMSk7CisJJnBhbmQJKCRpbm91dDUsJHR3bWFzayk7CQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcHhvcgkoJGlub3V0NSwkdHdlYWspOworCisJJm1vdmRxdQkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92ZHF1CSgkaW5vdXQxLCZRV1AoMTYqMSwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSZweG9yCSgkaW5vdXQwLCZRV1AoMTYqMCwiZXNwIikpOwkjIGlucHV0Xj10d2VhaworCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgxNiozLCRpbnApKTsKKwkmcHhvcgkoJGlub3V0MSwmUVdQKDE2KjEsImVzcCIpKTsKKwkmbW92ZHF1CSgkaW5vdXQ0LCZRV1AoMTYqNCwkaW5wKSk7CisJJnB4b3IJKCRpbm91dDIsJlFXUCgxNioyLCJlc3AiKSk7CisJJmxlYQkoJGlucCwmRFdQKDE2KjUsJGlucCkpOworCSZweG9yCSgkaW5vdXQzLCZRV1AoMTYqMywiZXNwIikpOworCSZtb3ZkcWEJKCZRV1AoMTYqNCwiZXNwIiksJGlub3V0NSk7CSMgc2F2ZSBsYXN0IHR3ZWFrCisJJnB4b3IJKCRpbm91dDQsJGlub3V0NSk7CisKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NiIpOworCisJJm1vdmFwcwkoJHR3ZWFrLCZRV1AoMTYqNCwiZXNwIikpOwkjIGxhc3QgdHdlYWsKKwkmeG9ycHMJKCRpbm91dDAsJlFXUCgxNiowLCJlc3AiKSk7CSMgb3V0cHV0Xj10d2VhaworCSZ4b3JwcwkoJGlub3V0MSwmUVdQKDE2KjEsImVzcCIpKTsKKwkmeG9ycHMJKCRpbm91dDIsJlFXUCgxNioyLCJlc3AiKSk7CisJJm1vdnVwcwkoJlFXUCgxNiowLCRvdXQpLCRpbm91dDApOwkjIHdyaXRlIG91dHB1dAorCSZ4b3JwcwkoJGlub3V0MywmUVdQKDE2KjMsImVzcCIpKTsKKwkmbW92dXBzCSgmUVdQKDE2KjEsJG91dCksJGlub3V0MSk7CisJJnhvcnBzCSgkaW5vdXQ0LCR0d2Vhayk7CisJJm1vdnVwcwkoJlFXUCgxNioyLCRvdXQpLCRpbm91dDIpOworCSZtb3Z1cHMJKCZRV1AoMTYqMywkb3V0KSwkaW5vdXQzKTsKKwkmbW92dXBzCSgmUVdQKDE2KjQsJG91dCksJGlub3V0NCk7CisJJmxlYQkoJG91dCwmRFdQKDE2KjUsJG91dCkpOworCSZqbXAJKCZsYWJlbCgieHRzX2RlY19kb25lIikpOworCismc2V0X2xhYmVsKCJ4dHNfZGVjX29uZSIsMTYpOworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgxNiowLCRpbnApKTsJIyBsb2FkIGlucHV0CisJJmxlYQkoJGlucCwmRFdQKDE2KjEsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQzKTsJCSMgaW5wdXRePXR3ZWFrCisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJkZWMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDEiKTsJfQorCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQzKTsJCSMgb3V0cHV0Xj10d2VhaworCSZtb3Z1cHMJKCZRV1AoMTYqMCwkb3V0KSwkaW5vdXQwKTsJIyB3cml0ZSBvdXRwdXQKKwkmbGVhCSgkb3V0LCZEV1AoMTYqMSwkb3V0KSk7CisKKwkmbW92ZHFhCSgkdHdlYWssJGlub3V0Myk7CQkjIGxhc3QgdHdlYWsKKwkmam1wCSgmbGFiZWwoInh0c19kZWNfZG9uZSIpKTsKKworJnNldF9sYWJlbCgieHRzX2RlY190d28iLDE2KTsKKwkmbW92YXBzCSgkaW5vdXQ0LCR0d2Vhayk7CQkjIHB1dCBhc2lkZSBsYXN0IHR3ZWFrCisKKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMTYqMCwkaW5wKSk7CSMgbG9hZCBpbnB1dAorCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgxNioxLCRpbnApKTsKKwkmbGVhCSgkaW5wLCZEV1AoMTYqMiwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBpbnB1dF49dHdlYWsKKwkmeG9ycHMJKCRpbm91dDEsJGlub3V0NCk7CisKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOworCisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCRpbm91dDQpOworCSZtb3Z1cHMJKCZRV1AoMTYqMCwkb3V0KSwkaW5vdXQwKTsJIyB3cml0ZSBvdXRwdXQKKwkmbW92dXBzCSgmUVdQKDE2KjEsJG91dCksJGlub3V0MSk7CisJJmxlYQkoJG91dCwmRFdQKDE2KjIsJG91dCkpOworCisJJm1vdmRxYQkoJHR3ZWFrLCRpbm91dDQpOwkJIyBsYXN0IHR3ZWFrCisJJmptcAkoJmxhYmVsKCJ4dHNfZGVjX2RvbmUiKSk7CisKKyZzZXRfbGFiZWwoInh0c19kZWNfdGhyZWUiLDE2KTsKKwkmbW92YXBzCSgkaW5vdXQ1LCR0d2Vhayk7CQkjIHB1dCBhc2lkZSBsYXN0IHR3ZWFrCisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMTYqMSwkaW5wKSk7CisJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSZsZWEJKCRpbnAsJkRXUCgxNiozLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJGlub3V0Myk7CQkjIGlucHV0Xj10d2VhaworCSZ4b3JwcwkoJGlub3V0MSwkaW5vdXQ0KTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0NSk7CisKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOworCisJJnhvcnBzCSgkaW5vdXQwLCRpbm91dDMpOwkJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCRpbm91dDQpOworCSZ4b3JwcwkoJGlub3V0MiwkaW5vdXQ1KTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJm1vdnVwcwkoJlFXUCgxNioxLCRvdXQpLCRpbm91dDEpOworCSZtb3Z1cHMJKCZRV1AoMTYqMiwkb3V0KSwkaW5vdXQyKTsKKwkmbGVhCSgkb3V0LCZEV1AoMTYqMywkb3V0KSk7CisKKwkmbW92ZHFhCSgkdHdlYWssJGlub3V0NSk7CQkjIGxhc3QgdHdlYWsKKwkmam1wCSgmbGFiZWwoInh0c19kZWNfZG9uZSIpKTsKKworJnNldF9sYWJlbCgieHRzX2RlY19mb3VyIiwxNik7CisJJm1vdmFwcwkoJGlub3V0NCwkdHdlYWspOwkJIyBwdXQgYXNpZGUgbGFzdCB0d2VhaworCisJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDE2KjAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMTYqMSwkaW5wKSk7CisJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDE2KjIsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBpbnB1dF49dHdlYWsKKwkmbW92dXBzCSgkaW5vdXQzLCZRV1AoMTYqMywkaW5wKSk7CisJJmxlYQkoJGlucCwmRFdQKDE2KjQsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MSwmUVdQKDE2KjEsImVzcCIpKTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0NSk7CisJJnhvcnBzCSgkaW5vdXQzLCRpbm91dDQpOworCisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDQiKTsKKworCSZ4b3JwcwkoJGlub3V0MCwmUVdQKDE2KjAsImVzcCIpKTsJIyBvdXRwdXRePXR3ZWFrCisJJnhvcnBzCSgkaW5vdXQxLCZRV1AoMTYqMSwiZXNwIikpOworCSZ4b3JwcwkoJGlub3V0MiwkaW5vdXQ1KTsKKwkmbW92dXBzCSgmUVdQKDE2KjAsJG91dCksJGlub3V0MCk7CSMgd3JpdGUgb3V0cHV0CisJJnhvcnBzCSgkaW5vdXQzLCRpbm91dDQpOworCSZtb3Z1cHMJKCZRV1AoMTYqMSwkb3V0KSwkaW5vdXQxKTsKKwkmbW92dXBzCSgmUVdQKDE2KjIsJG91dCksJGlub3V0Mik7CisJJm1vdnVwcwkoJlFXUCgxNiozLCRvdXQpLCRpbm91dDMpOworCSZsZWEJKCRvdXQsJkRXUCgxNio0LCRvdXQpKTsKKworCSZtb3ZkcWEJKCR0d2VhaywkaW5vdXQ0KTsJCSMgbGFzdCB0d2VhaworCSZqbXAJKCZsYWJlbCgieHRzX2RlY19kb25lIikpOworCismc2V0X2xhYmVsKCJ4dHNfZGVjX2RvbmU2eCIsMTYpOwkJIyAkdHdlYWsgaXMgcHJlLWNhbGN1bGF0ZWQKKwkmbW92CSgkbGVuLCZEV1AoMTYqNyswLCJlc3AiKSk7CSMgcmVzdG9yZSBvcmlnaW5hbCAkbGVuCisJJmFuZAkoJGxlbiwxNSk7CisJJmp6CSgmbGFiZWwoInh0c19kZWNfcmV0IikpOworCSZtb3YJKCZEV1AoMTYqNyswLCJlc3AiKSwkbGVuKTsJIyBzYXZlICRsZW4lMTYKKwkmam1wCSgmbGFiZWwoInh0c19kZWNfb25seV9vbmVfbW9yZSIpKTsKKworJnNldF9sYWJlbCgieHRzX2RlY19kb25lIiwxNik7CisJJm1vdgkoJGxlbiwmRFdQKDE2KjcrMCwiZXNwIikpOwkjIHJlc3RvcmUgb3JpZ2luYWwgJGxlbgorCSZweG9yCSgkdHd0bXAsJHR3dG1wKTsKKwkmYW5kCSgkbGVuLDE1KTsKKwkmanoJKCZsYWJlbCgieHRzX2RlY19yZXQiKSk7CisKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmbW92CSgmRFdQKDE2KjcrMCwiZXNwIiksJGxlbik7CSMgc2F2ZSAkbGVuJTE2CisJJnBzaHVmZAkoJHR3cmVzLCR0d3RtcCwweDEzKTsKKwkmcHhvcgkoJHR3dG1wLCR0d3RtcCk7CisJJm1vdmRxYQkoJHR3bWFzaywmUVdQKDE2KjYsImVzcCIpKTsKKwkmcGFkZHEJKCR0d2VhaywkdHdlYWspOwkJIyAmcHNsbHEoJHR3ZWFrLDEpOworCSZwYW5kCSgkdHdyZXMsJHR3bWFzayk7CQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkmcGNtcGd0ZCgkdHd0bXAsJHR3ZWFrKTsJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwkmcHhvcgkoJHR3ZWFrLCR0d3Jlcyk7CisKKyZzZXRfbGFiZWwoInh0c19kZWNfb25seV9vbmVfbW9yZSIpOworCSZwc2h1ZmQJKCRpbm91dDMsJHR3dG1wLDB4MTMpOworCSZtb3ZkcWEJKCRpbm91dDQsJHR3ZWFrKTsJCSMgcHV0IGFzaWRlIHByZXZpb3VzIHR3ZWFrCisJJnBhZGRxCSgkdHdlYWssJHR3ZWFrKTsJCSMgJnBzbGxxKCR0d2VhaywxKTsKKwkmcGFuZAkoJGlub3V0MywkdHdtYXNrKTsJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSZweG9yCSgkaW5vdXQzLCR0d2Vhayk7CisKKwkmbW92CSgka2V5LCRrZXlfKTsJCQkjIHJlc3RvcmUgJGtleQorCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkJIyByZXN0b3JlICRyb3VuZHMKKworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsJCSMgbG9hZCBpbnB1dAorCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQzKTsJCSMgaW5wdXRePXR3ZWFrCisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJkZWMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDEiKTsJfQorCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQzKTsJCSMgb3V0cHV0Xj10d2VhaworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsJCSMgd3JpdGUgb3V0cHV0CisKKyZzZXRfbGFiZWwoInh0c19kZWNfc3RlYWwiKTsKKwkmbW92egkoJHJvdW5kcywmQlAoMTYsJGlucCkpOworCSZtb3Z6CSgka2V5LCZCUCgwLCRvdXQpKTsKKwkmbGVhCSgkaW5wLCZEV1AoMSwkaW5wKSk7CisJJm1vdgkoJkJQKDAsJG91dCksJkxCKCRyb3VuZHMpKTsKKwkmbW92CSgmQlAoMTYsJG91dCksJkxCKCRrZXkpKTsKKwkmbGVhCSgkb3V0LCZEV1AoMSwkb3V0KSk7CisJJnN1YgkoJGxlbiwxKTsKKwkmam56CSgmbGFiZWwoInh0c19kZWNfc3RlYWwiKSk7CisKKwkmc3ViCSgkb3V0LCZEV1AoMTYqNyswLCJlc3AiKSk7CSMgcmV3aW5kICRvdXQKKwkmbW92CSgka2V5LCRrZXlfKTsJCQkjIHJlc3RvcmUgJGtleQorCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkJIyByZXN0b3JlICRyb3VuZHMKKworCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRvdXQpKTsJCSMgbG9hZCBpbnB1dAorCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQ0KTsJCSMgaW5wdXRePXR3ZWFrCisJaWYgKCRpbmxpbmUpCisJeyAgICZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJkZWMiKTsJfQorCWVsc2UKKwl7ICAgJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDEiKTsJfQorCSZ4b3JwcwkoJGlub3V0MCwkaW5vdXQ0KTsJCSMgb3V0cHV0Xj10d2VhaworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsJCSMgd3JpdGUgb3V0cHV0CisKKyZzZXRfbGFiZWwoInh0c19kZWNfcmV0Iik7CisJJm1vdgkoImVzcCIsJkRXUCgxNio3KzQsImVzcCIpKTsJIyByZXN0b3JlICVlc3AKKyZmdW5jdGlvbl9lbmQoImFlc25pX3h0c19kZWNyeXB0Iik7Cit9Cit9CisMCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZvaWQgJFBSRUZJWF9jYmNfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLCB2b2lkICpvdXQsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKml2cCxjb25zdCBpbnQgZW5jKTsKKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwkmbW92CSgkcm91bmRzXywiZXNwIik7CisJJm1vdgkoJG91dCwmd3BhcmFtKDEpKTsKKwkmc3ViCSgkcm91bmRzXywyNCk7CisJJm1vdgkoJGxlbiwmd3BhcmFtKDIpKTsKKwkmYW5kCSgkcm91bmRzXywtMTYpOworCSZtb3YJKCRrZXksJndwYXJhbSgzKSk7CisJJm1vdgkoJGtleV8sJndwYXJhbSg0KSk7CisJJnRlc3QJKCRsZW4sJGxlbik7CisJJmp6CSgmbGFiZWwoImNiY19hYm9ydCIpKTsKKworCSZjbXAJKCZ3cGFyYW0oNSksMCk7CisJJnhjaGcJKCRyb3VuZHNfLCJlc3AiKTsJCSMgYWxsb2NhCisJJm1vdnVwcwkoJGl2ZWMsJlFXUCgwLCRrZXlfKSk7CQkjIGxvYWQgSVYKKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsKKwkmbW92CSgka2V5Xywka2V5KTsJCQkjIGJhY2t1cCAka2V5CisJJm1vdgkoJkRXUCgxNiwiZXNwIiksJHJvdW5kc18pOwkjIHNhdmUgb3JpZ2luYWwgJWVzcAorCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOwkJIyBiYWNrdXAgJHJvdW5kcworCSZqZQkoJmxhYmVsKCJjYmNfZGVjcnlwdCIpKTsKKworCSZtb3ZhcHMJKCRpbm91dDAsJGl2ZWMpOworCSZjbXAJKCRsZW4sMTYpOworCSZqYgkoJmxhYmVsKCJjYmNfZW5jX3RhaWwiKSk7CisJJnN1YgkoJGxlbiwxNik7CisJJmptcAkoJmxhYmVsKCJjYmNfZW5jX2xvb3AiKSk7CisKKyZzZXRfbGFiZWwoImNiY19lbmNfbG9vcCIsMTYpOworCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMCwkaW5wKSk7CQkjIGlucHV0IGFjdHVhbGx5CisJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKKwlpZiAoJGlubGluZSkKKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImVuYyIsJGlub3V0MCwkaXZlYyk7CX0KKwllbHNlCisJeyAgICZ4b3JwcygkaW5vdXQwLCRpdmVjKTsgJmNhbGwoIl9hZXNuaV9lbmNyeXB0MSIpOwl9CisJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRzCisJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQorCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsJIyBzdG9yZSBvdXRwdXQKKwkmbGVhCSgkb3V0LCZEV1AoMTYsJG91dCkpOworCSZzdWIJKCRsZW4sMTYpOworCSZqbmMJKCZsYWJlbCgiY2JjX2VuY19sb29wIikpOworCSZhZGQJKCRsZW4sMTYpOworCSZqbnoJKCZsYWJlbCgiY2JjX2VuY190YWlsIikpOworCSZtb3ZhcHMJKCRpdmVjLCRpbm91dDApOworCSZqbXAJKCZsYWJlbCgiY2JjX3JldCIpKTsKKworJnNldF9sYWJlbCgiY2JjX2VuY190YWlsIik7CisJJm1vdgkoImVjeCIsJGxlbik7CQkjIHphcHMgJHJvdW5kcworCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYgorCSZtb3YJKCJlY3giLDE2KTsJCSMgemVybyB0YWlsCisJJnN1YgkoImVjeCIsJGxlbik7CisJJnhvcgkoImVheCIsImVheCIpOwkJIyB6YXBzICRsZW4KKwkmZGF0YV93b3JkKDB4QUFGM0Y2ODkpOwkJIyByZXAgc3Rvc2IKKwkmbGVhCSgkb3V0LCZEV1AoLTE2LCRvdXQpKTsJIyByZXdpbmQgJG91dCBieSAxIGJsb2NrCisJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMgcmVzdG9yZSAkcm91bmRzCisJJm1vdgkoJGlucCwkb3V0KTsJCSMgJGlucCBhbmQgJG91dCBhcmUgdGhlIHNhbWUKKwkmbW92CSgka2V5LCRrZXlfKTsJCSMgcmVzdG9yZSAka2V5CisJJmptcAkoJmxhYmVsKCJjYmNfZW5jX2xvb3AiKSk7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCismc2V0X2xhYmVsKCJjYmNfZGVjcnlwdCIsMTYpOworCSZjbXAJKCRsZW4sMHg1MCk7CisJJmpiZQkoJmxhYmVsKCJjYmNfZGVjX3RhaWwiKSk7CisJJm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkaXZlYyk7CQkjIHNhdmUgSVYKKwkmc3ViCSgkbGVuLDB4NTApOworCSZqbXAJKCZsYWJlbCgiY2JjX2RlY19sb29wNl9lbnRlciIpKTsKKworJnNldF9sYWJlbCgiY2JjX2RlY19sb29wNiIsMTYpOworCSZtb3ZhcHMJKCZRV1AoMCwiZXNwIiksJHJuZGtleTApOwkjIHNhdmUgSVYKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0NSk7CisJJmxlYQkoJG91dCwmRFdQKDB4MTAsJG91dCkpOworJnNldF9sYWJlbCgiY2JjX2RlY19sb29wNl9lbnRlciIpOworCSZtb3ZkcXUJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworCSZtb3ZkcXUJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKKwkmbW92ZHF1CSgkaW5vdXQ0LCZRV1AoMHg0MCwkaW5wKSk7CisJJm1vdmRxdQkoJGlub3V0NSwmUVdQKDB4NTAsJGlucCkpOworCisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDYiKTsKKworCSZtb3Z1cHMJKCRybmRrZXkxLCZRV1AoMCwkaW5wKSk7CisJJm1vdnVwcwkoJHJuZGtleTAsJlFXUCgweDEwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDAsJlFXUCgwLCJlc3AiKSk7CSMgXj1JVgorCSZ4b3JwcwkoJGlub3V0MSwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJHJuZGtleTEsJlFXUCgweDIwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDIsJHJuZGtleTApOworCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgzMCwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQzLCRybmRrZXkxKTsKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4NDAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0NCwkcm5ka2V5MCk7CisJJm1vdnVwcwkoJHJuZGtleTAsJlFXUCgweDUwLCRpbnApKTsJIyBJVgorCSZ4b3JwcwkoJGlub3V0NSwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKwkmbGVhCSgkaW5wLCZEV1AoMHg2MCwkaW5wKSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pCQkjIHJlc3RvcmUgJHJvdW5kcworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKwkmbW92CSgka2V5LCRrZXlfKTsJCQkjIHJlc3RvcmUgJGtleQorCSZtb3Z1cHMJKCZRV1AoMHg0MCwkb3V0KSwkaW5vdXQ0KTsKKwkmbGVhCSgkb3V0LCZEV1AoMHg1MCwkb3V0KSk7CisJJnN1YgkoJGxlbiwweDYwKTsKKwkmamEJKCZsYWJlbCgiY2JjX2RlY19sb29wNiIpKTsKKworCSZtb3ZhcHMJKCRpbm91dDAsJGlub3V0NSk7CisJJm1vdmFwcwkoJGl2ZWMsJHJuZGtleTApOworCSZhZGQJKCRsZW4sMHg1MCk7CisJJmpsZQkoJmxhYmVsKCJjYmNfZGVjX3RhaWxfY29sbGVjdGVkIikpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbGVhCSgkb3V0LCZEV1AoMHgxMCwkb3V0KSk7Cismc2V0X2xhYmVsKCJjYmNfZGVjX3RhaWwiKTsKKwkmbW92dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisJJm1vdmFwcwkoJGluMCwkaW5vdXQwKTsKKwkmY21wCSgkbGVuLDB4MTApOworCSZqYmUJKCZsYWJlbCgiY2JjX2RlY19vbmUiKSk7CisKKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7CisJJm1vdmFwcwkoJGluMSwkaW5vdXQxKTsKKwkmY21wCSgkbGVuLDB4MjApOworCSZqYmUJKCZsYWJlbCgiY2JjX2RlY190d28iKSk7CisKKwkmbW92dXBzCSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7CisJJmNtcAkoJGxlbiwweDMwKTsKKwkmamJlCSgmbGFiZWwoImNiY19kZWNfdGhyZWUiKSk7CisKKwkmbW92dXBzCSgkaW5vdXQzLCZRV1AoMHgzMCwkaW5wKSk7CisJJmNtcAkoJGxlbiwweDQwKTsKKwkmamJlCSgmbGFiZWwoImNiY19kZWNfZm91ciIpKTsKKworCSZtb3Z1cHMJKCRpbm91dDQsJlFXUCgweDQwLCRpbnApKTsKKwkmbW92YXBzCSgmUVdQKDAsImVzcCIpLCRpdmVjKTsJCSMgc2F2ZSBJVgorCSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDUsJGlub3V0NSk7CisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDYiKTsKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDAsJGlucCkpOworCSZtb3Z1cHMJKCRybmRrZXkwLCZRV1AoMHgxMCwkaW5wKSk7CisJJnhvcnBzCSgkaW5vdXQwLCZRV1AoMCwiZXNwIikpOwkjIF49IElWCisJJnhvcnBzCSgkaW5vdXQxLCRybmRrZXkxKTsKKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4MjAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0Miwkcm5ka2V5MCk7CisJJm1vdnVwcwkoJHJuZGtleTAsJlFXUCgweDMwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDMsJHJuZGtleTEpOworCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMHg0MCwkaW5wKSk7CSMgSVYKKwkmeG9ycHMJKCRpbm91dDQsJHJuZGtleTApOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZtb3Z1cHMJKCZRV1AoMHgzMCwkb3V0KSwkaW5vdXQzKTsKKwkmbGVhCSgkb3V0LCZEV1AoMHg0MCwkb3V0KSk7CisJJm1vdmFwcwkoJGlub3V0MCwkaW5vdXQ0KTsKKwkmc3ViCSgkbGVuLDB4NTApOworCSZqbXAJKCZsYWJlbCgiY2JjX2RlY190YWlsX2NvbGxlY3RlZCIpKTsKKworJnNldF9sYWJlbCgiY2JjX2RlY19vbmUiLDE2KTsKKwlpZiAoJGlubGluZSkKKwl7ICAgJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImRlYyIpOwl9CisJZWxzZQorCXsgICAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MSIpOwl9CisJJnhvcnBzCSgkaW5vdXQwLCRpdmVjKTsKKwkmbW92YXBzCSgkaXZlYywkaW4wKTsKKwkmc3ViCSgkbGVuLDB4MTApOworCSZqbXAJKCZsYWJlbCgiY2JjX2RlY190YWlsX2NvbGxlY3RlZCIpKTsKKworJnNldF9sYWJlbCgiY2JjX2RlY190d28iLDE2KTsKKwkmeG9ycHMJKCRpbm91dDIsJGlub3V0Mik7CisJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKKwkmeG9ycHMJKCRpbm91dDAsJGl2ZWMpOworCSZ4b3JwcwkoJGlub3V0MSwkaW4wKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdmFwcwkoJGlub3V0MCwkaW5vdXQxKTsKKwkmbGVhCSgkb3V0LCZEV1AoMHgxMCwkb3V0KSk7CisJJm1vdmFwcwkoJGl2ZWMsJGluMSk7CisJJnN1YgkoJGxlbiwweDIwKTsKKwkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKSk7CisKKyZzZXRfbGFiZWwoImNiY19kZWNfdGhyZWUiLDE2KTsKKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOworCSZ4b3JwcwkoJGlub3V0MCwkaXZlYyk7CisJJnhvcnBzCSgkaW5vdXQxLCRpbjApOworCSZ4b3JwcwkoJGlub3V0MiwkaW4xKTsKKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisJJm1vdmFwcwkoJGlub3V0MCwkaW5vdXQyKTsKKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisJJmxlYQkoJG91dCwmRFdQKDB4MjAsJG91dCkpOworCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMHgyMCwkaW5wKSk7CisJJnN1YgkoJGxlbiwweDMwKTsKKwkmam1wCSgmbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKSk7CisKKyZzZXRfbGFiZWwoImNiY19kZWNfZm91ciIsMTYpOworCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQ0Iik7CisJJm1vdnVwcwkoJHJuZGtleTEsJlFXUCgweDEwLCRpbnApKTsKKwkmbW92dXBzCSgkcm5ka2V5MCwmUVdQKDB4MjAsJGlucCkpOworCSZ4b3JwcwkoJGlub3V0MCwkaXZlYyk7CisJJm1vdnVwcwkoJGl2ZWMsJlFXUCgweDMwLCRpbnApKTsKKwkmeG9ycHMJKCRpbm91dDEsJGluMCk7CisJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDApOworCSZ4b3JwcwkoJGlub3V0Miwkcm5ka2V5MSk7CisJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworCSZ4b3JwcwkoJGlub3V0Mywkcm5ka2V5MCk7CisJJm1vdnVwcwkoJlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworCSZsZWEJKCRvdXQsJkRXUCgweDMwLCRvdXQpKTsKKwkmbW92YXBzCSgkaW5vdXQwLCRpbm91dDMpOworCSZzdWIJKCRsZW4sMHg0MCk7CisKKyZzZXRfbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKTsKKwkmYW5kCSgkbGVuLDE1KTsKKwkmam56CSgmbGFiZWwoImNiY19kZWNfdGFpbF9wYXJ0aWFsIikpOworCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKwkmam1wCSgmbGFiZWwoImNiY19yZXQiKSk7CisKKyZzZXRfbGFiZWwoImNiY19kZWNfdGFpbF9wYXJ0aWFsIiwxNik7CisJJm1vdmFwcwkoJlFXUCgwLCJlc3AiKSwkaW5vdXQwKTsKKwkmbW92CSgiZWN4IiwxNik7CisJJm1vdgkoJGlucCwiZXNwIik7CisJJnN1YgkoImVjeCIsJGxlbik7CisJJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJCSMgcmVwIG1vdnNiCisKKyZzZXRfbGFiZWwoImNiY19yZXQiKTsKKwkmbW92CSgiZXNwIiwmRFdQKDE2LCJlc3AiKSk7CSMgcHVsbCBvcmlnaW5hbCAlZXNwCisJJm1vdgkoJGtleV8sJndwYXJhbSg0KSk7CisJJm1vdnVwcwkoJlFXUCgwLCRrZXlfKSwkaXZlYyk7CSMgb3V0cHV0IElWCismc2V0X2xhYmVsKCJjYmNfYWJvcnQiKTsKKyZmdW5jdGlvbl9lbmQoIiR7UFJFRklYfV9jYmNfZW5jcnlwdCIpOworDAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNZWNoYW5pY2FsIHBvcnQgZnJvbSBhZXNuaS14ODZfNjQucGwuCisjCisjIF9hZXNuaV9zZXRfZW5jcnlwdF9rZXkgaXMgcHJpdmF0ZSBpbnRlcmZhY2UsCisjIGlucHV0OgorIwkiZWF4Igljb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5CisjCSRyb3VuZHMJaW50IGJpdHMKKyMJJGtleQlBRVNfS0VZICprZXkKKyMgb3V0cHV0OgorIwkiZWF4IglyZXR1cm4gY29kZQorIwkkcm91bmQJcm91bmRzCisKKyZmdW5jdGlvbl9iZWdpbl9CKCJfYWVzbmlfc2V0X2VuY3J5cHRfa2V5Iik7CisJJnRlc3QJKCJlYXgiLCJlYXgiKTsKKwkmanoJKCZsYWJlbCgiYmFkX3BvaW50ZXIiKSk7CisJJnRlc3QJKCRrZXksJGtleSk7CisJJmp6CSgmbGFiZWwoImJhZF9wb2ludGVyIikpOworCisJJm1vdnVwcwkoInhtbTAiLCZRV1AoMCwiZWF4IikpOwkjIHB1bGwgZmlyc3QgMTI4IGJpdHMgb2YgKnVzZXJLZXkKKwkmeG9ycHMJKCJ4bW00IiwieG1tNCIpOwkjIGxvdyBkd29yZCBvZiB4bW00IGlzIGFzc3VtZWQgMAorCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7CisJJmNtcAkoJHJvdW5kcywyNTYpOworCSZqZQkoJmxhYmVsKCIxNHJvdW5kcyIpKTsKKwkmY21wCSgkcm91bmRzLDE5Mik7CisJJmplCSgmbGFiZWwoIjEycm91bmRzIikpOworCSZjbXAJKCRyb3VuZHMsMTI4KTsKKwkmam5lCSgmbGFiZWwoImJhZF9rZXliaXRzIikpOworCismc2V0X2xhYmVsKCIxMHJvdW5kcyIsMTYpOworCSZtb3YJCSgkcm91bmRzLDkpOworCSYkbW92ZWtleQkoJlFXUCgtMTYsJGtleSksInhtbTAiKTsJIyByb3VuZCAwCisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDEpOwkJIyByb3VuZCAxCisJJmNhbGwJCSgmbGFiZWwoImtleV8xMjhfY29sZCIpKTsKKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgyKTsJCSMgcm91bmQgMgorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDA0KTsJCSMgcm91bmQgMworCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDA4KTsJCSMgcm91bmQgNAorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDEwKTsJCSMgcm91bmQgNQorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDIwKTsJCSMgcm91bmQgNgorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDQwKTsJCSMgcm91bmQgNworCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDgwKTsJCSMgcm91bmQgOAorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDFiKTsJCSMgcm91bmQgOQorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDM2KTsJCSMgcm91bmQgMTAKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzEyOCIpKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworCSZtb3YJCSgmRFdQKDgwLCRrZXkpLCRyb3VuZHMpOworCSZ4b3IJCSgiZWF4IiwiZWF4Iik7CisJJnJldCgpOworCismc2V0X2xhYmVsKCJrZXlfMTI4IiwxNik7CisJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTAiKTsKKwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKKyZzZXRfbGFiZWwoImtleV8xMjhfY29sZCIpOworCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMDAwMTAwMDApOworCSZ4b3JwcwkJKCJ4bW0wIiwieG1tNCIpOworCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMTAwMDExMDApOworCSZ4b3JwcwkJKCJ4bW0wIiwieG1tNCIpOworCSZzaHVmcHMJCSgieG1tMSIsInhtbTEiLDBiMTExMTExMTEpOwkjIGNyaXRpY2FsIHBhdGgKKwkmeG9ycHMJCSgieG1tMCIsInhtbTEiKTsKKwkmcmV0KCk7CisKKyZzZXRfbGFiZWwoIjEycm91bmRzIiwxNik7CisJJm1vdnEJCSgieG1tMiIsJlFXUCgxNiwiZWF4IikpOwkjIHJlbWFpbmluZyAxLzMgb2YgKnVzZXJLZXkKKwkmbW92CQkoJHJvdW5kcywxMSk7CisJJiRtb3Zla2V5CSgmUVdQKC0xNiwka2V5KSwieG1tMCIpCQkjIHJvdW5kIDAKKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgwMSk7CQkjIHJvdW5kIDEsMgorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYV9jb2xkIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDAyKTsJCSMgcm91bmQgMiwzCisJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJiIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA0KTsJCSMgcm91bmQgNCw1CisJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJhIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA4KTsJCSMgcm91bmQgNSw2CisJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJiIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDEwKTsJCSMgcm91bmQgNyw4CisJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJhIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDIwKTsJCSMgcm91bmQgOCw5CisJJmNhbGwJCSgmbGFiZWwoImtleV8xOTJiIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDQwKTsJCSMgcm91bmQgMTAsMTEKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5MmEiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4ODApOwkJIyByb3VuZCAxMSwxMgorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYiIpKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworCSZtb3YJCSgmRFdQKDQ4LCRrZXkpLCRyb3VuZHMpOworCSZ4b3IJCSgiZWF4IiwiZWF4Iik7CisJJnJldCgpOworCismc2V0X2xhYmVsKCJrZXlfMTkyYSIsMTYpOworCSYkbW92ZWtleQkoJlFXUCgwLCRrZXkpLCJ4bW0wIik7CisJJmxlYQkJKCRrZXksJkRXUCgxNiwka2V5KSk7Cismc2V0X2xhYmVsKCJrZXlfMTkyYV9jb2xkIiwxNik7CisJJm1vdmFwcwkJKCJ4bW01IiwieG1tMiIpOworJnNldF9sYWJlbCgia2V5XzE5MmJfd2FybSIpOworCSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMDAwMTAwMDApOworCSZtb3ZkcWEJCSgieG1tMyIsInhtbTIiKTsKKwkmeG9ycHMJCSgieG1tMCIsInhtbTQiKTsKKwkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0wIiwwYjEwMDAxMTAwKTsKKwkmcHNsbGRxCQkoInhtbTMiLDQpOworCSZ4b3JwcwkJKCJ4bW0wIiwieG1tNCIpOworCSZwc2h1ZmQJCSgieG1tMSIsInhtbTEiLDBiMDEwMTAxMDEpOwkjIGNyaXRpY2FsIHBhdGgKKwkmcHhvcgkJKCJ4bW0yIiwieG1tMyIpOworCSZweG9yCQkoInhtbTAiLCJ4bW0xIik7CisJJnBzaHVmZAkJKCJ4bW0zIiwieG1tMCIsMGIxMTExMTExMSk7CisJJnB4b3IJCSgieG1tMiIsInhtbTMiKTsKKwkmcmV0KCk7CisKKyZzZXRfbGFiZWwoImtleV8xOTJiIiwxNik7CisJJm1vdmFwcwkJKCJ4bW0zIiwieG1tMCIpOworCSZzaHVmcHMJCSgieG1tNSIsInhtbTAiLDBiMDEwMDAxMDApOworCSYkbW92ZWtleQkoJlFXUCgwLCRrZXkpLCJ4bW01Iik7CisJJnNodWZwcwkJKCJ4bW0zIiwieG1tMiIsMGIwMTAwMTExMCk7CisJJiRtb3Zla2V5CSgmUVdQKDE2LCRrZXkpLCJ4bW0zIik7CisJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7CisJJmptcAkJKCZsYWJlbCgia2V5XzE5MmJfd2FybSIpKTsKKworJnNldF9sYWJlbCgiMTRyb3VuZHMiLDE2KTsKKwkmbW92dXBzCQkoInhtbTIiLCZRV1AoMTYsImVheCIpKTsJIyByZW1haW5pbmcgaGFsZiBvZiAqdXNlcktleQorCSZtb3YJCSgkcm91bmRzLDEzKTsKKwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKKwkmJG1vdmVrZXkJKCZRV1AoLTMyLCRrZXkpLCJ4bW0wIik7CSMgcm91bmQgMAorCSYkbW92ZWtleQkoJlFXUCgtMTYsJGtleSksInhtbTIiKTsJIyByb3VuZCAxCisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MDEpOwkJIyByb3VuZCAyCisJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZhX2NvbGQiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDEpOwkJIyByb3VuZCAzCisJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZiIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDAyKTsJCSMgcm91bmQgNAorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgwMik7CQkjIHJvdW5kIDUKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MDQpOwkJIyByb3VuZCA2CisJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZhIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDA0KTsJCSMgcm91bmQgNworCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YiIpKTsKKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgwOCk7CQkjIHJvdW5kIDgKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmEiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDgpOwkJIyByb3VuZCA5CisJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZiIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDEwKTsJCSMgcm91bmQgMTAKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmEiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MTApOwkJIyByb3VuZCAxMQorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YiIpKTsKKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgyMCk7CQkjIHJvdW5kIDEyCisJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZhIikpOworCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDIwKTsJCSMgcm91bmQgMTMKKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmIiKSk7CisJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4NDApOwkJIyByb3VuZCAxNAorCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworCSZtb3YJCSgmRFdQKDE2LCRrZXkpLCRyb3VuZHMpOworCSZ4b3IJCSgiZWF4IiwiZWF4Iik7CisJJnJldCgpOworCismc2V0X2xhYmVsKCJrZXlfMjU2YSIsMTYpOworCSYkbW92ZWtleQkoJlFXUCgwLCRrZXkpLCJ4bW0yIik7CisJJmxlYQkJKCRrZXksJkRXUCgxNiwka2V5KSk7Cismc2V0X2xhYmVsKCJrZXlfMjU2YV9jb2xkIik7CisJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIwMDAxMDAwMCk7CisJJnhvcnBzCQkoInhtbTAiLCJ4bW00Iik7CisJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIxMDAwMTEwMCk7CisJJnhvcnBzCQkoInhtbTAiLCJ4bW00Iik7CisJJnNodWZwcwkJKCJ4bW0xIiwieG1tMSIsMGIxMTExMTExMSk7CSMgY3JpdGljYWwgcGF0aAorCSZ4b3JwcwkJKCJ4bW0wIiwieG1tMSIpOworCSZyZXQoKTsKKworJnNldF9sYWJlbCgia2V5XzI1NmIiLDE2KTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworCisJJnNodWZwcwkJKCJ4bW00IiwieG1tMiIsMGIwMDAxMDAwMCk7CisJJnhvcnBzCQkoInhtbTIiLCJ4bW00Iik7CisJJnNodWZwcwkJKCJ4bW00IiwieG1tMiIsMGIxMDAwMTEwMCk7CisJJnhvcnBzCQkoInhtbTIiLCJ4bW00Iik7CisJJnNodWZwcwkJKCJ4bW0xIiwieG1tMSIsMGIxMDEwMTAxMCk7CSMgY3JpdGljYWwgcGF0aAorCSZ4b3JwcwkJKCJ4bW0yIiwieG1tMSIpOworCSZyZXQoKTsKKworJnNldF9sYWJlbCgiYmFkX3BvaW50ZXIiLDQpOworCSZtb3YJKCJlYXgiLC0xKTsKKwkmcmV0CSgpOworJnNldF9sYWJlbCgiYmFkX2tleWJpdHMiLDQpOworCSZtb3YJKCJlYXgiLC0yKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlfc2V0X2VuY3J5cHRfa2V5Iik7CisKKyMgaW50ICRQUkVGSVhfc2V0X2VuY3J5cHRfa2V5IChjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBpbnQgYml0cywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCismZnVuY3Rpb25fYmVnaW5fQigiJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSIpOworCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOworCSZtb3YJKCRyb3VuZHMsJndwYXJhbSgxKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDIpKTsKKwkmY2FsbAkoIl9hZXNuaV9zZXRfZW5jcnlwdF9rZXkiKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5Iik7CisKKyMgaW50ICRQUkVGSVhfc2V0X2RlY3J5cHRfa2V5IChjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBpbnQgYml0cywKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCismZnVuY3Rpb25fYmVnaW5fQigiJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSIpOworCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOworCSZtb3YJKCRyb3VuZHMsJndwYXJhbSgxKSk7CisJJm1vdgkoJGtleSwmd3BhcmFtKDIpKTsKKwkmY2FsbAkoIl9hZXNuaV9zZXRfZW5jcnlwdF9rZXkiKTsKKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOworCSZzaGwJKCRyb3VuZHMsNCkJIyByb3VuZHMtMSBhZnRlciBfYWVzbmlfc2V0X2VuY3J5cHRfa2V5CisJJnRlc3QJKCJlYXgiLCJlYXgiKTsKKwkmam56CSgmbGFiZWwoImRlY19rZXlfcmV0IikpOworCSZsZWEJKCJlYXgiLCZEV1AoMTYsJGtleSwkcm91bmRzKSk7CSMgZW5kIG9mIGtleSBzY2hlZHVsZQorCisJJiRtb3Zla2V5CSgieG1tMCIsJlFXUCgwLCRrZXkpKTsJIyBqdXN0IHN3YXAKKwkmJG1vdmVrZXkJKCJ4bW0xIiwmUVdQKDAsImVheCIpKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwiZWF4IiksInhtbTAiKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMSIpOworCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworCSZsZWEJCSgiZWF4IiwmRFdQKC0xNiwiZWF4IikpOworCismc2V0X2xhYmVsKCJkZWNfa2V5X2ludmVyc2UiKTsKKwkmJG1vdmVrZXkJKCJ4bW0wIiwmUVdQKDAsJGtleSkpOwkjIHN3YXAgYW5kIGludmVyc2UKKwkmJG1vdmVrZXkJKCJ4bW0xIiwmUVdQKDAsImVheCIpKTsKKwkmYWVzaW1jCQkoInhtbTAiLCJ4bW0wIik7CisJJmFlc2ltYwkJKCJ4bW0xIiwieG1tMSIpOworCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworCSZsZWEJCSgiZWF4IiwmRFdQKC0xNiwiZWF4IikpOworCSYkbW92ZWtleQkoJlFXUCgxNiwiZWF4IiksInhtbTAiKTsKKwkmJG1vdmVrZXkJKCZRV1AoLTE2LCRrZXkpLCJ4bW0xIik7CisJJmNtcAkJKCJlYXgiLCRrZXkpOworCSZqYQkJKCZsYWJlbCgiZGVjX2tleV9pbnZlcnNlIikpOworCisJJiRtb3Zla2V5CSgieG1tMCIsJlFXUCgwLCRrZXkpKTsJIyBpbnZlcnNlIG1pZGRsZQorCSZhZXNpbWMJCSgieG1tMCIsInhtbTAiKTsKKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworCisJJnhvcgkJKCJlYXgiLCJlYXgiKTsJCSMgcmV0dXJuIHN1Y2Nlc3MKKyZzZXRfbGFiZWwoImRlY19rZXlfcmV0Iik7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSIpOworJmFzY2l6KCJBRVMgZm9yIEludGVsIEFFUy1OSSwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIpOworCismYXNtX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OWYzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS9hZXNuaS14ODZfNjQucGwKQEAgLTAsMCArMSwzMDY4IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEludGVsIEFFUy1OSSBleHRlbnNpb24uIEluCisjIE9wZW5TU0wgY29udGV4dCBpdCdzIHVzZWQgd2l0aCBJbnRlbCBlbmdpbmUsIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGFzCisjIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGNyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGwgW3NlZSBiZWxvdyBmb3IKKyMgZGV0YWlsc10uCisjCisjIFBlcmZvcm1hbmNlLgorIworIyBHaXZlbiBhZXMoZW5jfGRlYykgaW5zdHJ1Y3Rpb25zJyBsYXRlbmN5IGFzeW1wdG90aWMgcGVyZm9ybWFuY2UgZm9yCisjIG5vbi1wYXJhbGxlbGl6YWJsZSBtb2RlcyBzdWNoIGFzIENCQyBlbmNyeXB0IGlzIDMuNzUgY3ljbGVzIHBlciBieXRlCisjIHByb2Nlc3NlZCB3aXRoIDEyOC1iaXQga2V5LiBBbmQgZ2l2ZW4gdGhlaXIgdGhyb3VnaHB1dCBhc3ltcHRvdGljCisjIHBlcmZvcm1hbmNlIGZvciBwYXJhbGxlbGl6YWJsZSBtb2RlcyBpcyAxLjI1IGN5Y2xlcyBwZXIgYnl0ZS4gQmVpbmcKKyMgYXN5bXB0b3RpYyBsaW1pdCBpdCdzIG5vdCBzb21ldGhpbmcgeW91IGNvbW1vbmx5IGFjaGlldmUgaW4gcmVhbGl0eSwKKyMgYnV0IGhvdyBjbG9zZSBkb2VzIG9uZSBnZXQ/IEJlbG93IGFyZSByZXN1bHRzIGNvbGxlY3RlZCBmb3IKKyMgZGlmZmVyZW50IG1vZGVzIGFuZCBibG9jayBzaXplZC4gUGFpcnMgb2YgbnVtYmVycyBhcmUgZm9yIGVuLS8KKyMgZGVjcnlwdGlvbi4KKyMKKyMJMTYtYnl0ZSAgICAgNjQtYnl0ZSAgICAgMjU2LWJ5dGUgICAgMS1LQiAgICAgICAgOC1LQgorIyBFQ0IJNC4yNS80LjI1ICAgMS4zOC8xLjM4ICAgMS4yOC8xLjI4ICAgMS4yNi8xLjI2CTEuMjYvMS4yNgorIyBDVFIJNS40Mi81LjQyICAgMS45Mi8xLjkyICAgMS40NC8xLjQ0ICAgMS4yOC8xLjI4ICAgMS4yNi8xLjI2CisjIENCQwk0LjM4LzQuNDMgICA0LjE1LzEuNDMgICA0LjA3LzEuMzIgICA0LjA3LzEuMjkgICA0LjA2LzEuMjgKKyMgQ0NNCTUuNjYvOS40MiAgIDQuNDIvNS40MSAgIDQuMTYvNC40MCAgIDQuMDkvNC4xNSAgIDQuMDYvNC4wNyAgIAorIyBPRkIJNS40Mi81LjQyICAgNC42NC80LjY0ICAgNC40NC80LjQ0ICAgNC4zOS80LjM5ICAgNC4zOC80LjM4CisjIENGQgk1LjczLzUuODUgICA1LjU2LzUuNjIgICA1LjQ4LzUuNTYgICA1LjQ3LzUuNTUgICA1LjQ3LzUuNTUKKyMKKyMgRUNCLCBDVFIsIENCQyBhbmQgQ0NNIHJlc3VsdHMgYXJlIGZyZWUgZnJvbSBFVlAgb3ZlcmhlYWQuIFRoaXMgbWVhbnMKKyMgdGhhdCBvdGhlcndpc2UgdXNlZCAnb3BlbnNzbCBzcGVlZCAtZXZwIGFlcy0xMjgtPz8/IC1lbmdpbmUgYWVzbmkKKyMgWy1kZWNyeXB0XScgd2lsbCBleGhpYml0IDEwLTE1JSB3b3JzZSByZXN1bHRzIGZvciBzbWFsbGVyIGJsb2Nrcy4KKyMgVGhlIHJlc3VsdHMgd2VyZSBjb2xsZWN0ZWQgd2l0aCBzcGVjaWFsbHkgY3JhZnRlZCBzcGVlZC5jIGJlbmNobWFyaworIyBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gd2l0aCByZXN1bHRzIHJlcG9ydGVkIGluICJJbnRlbCBBZHZhbmNlZAorIyBFbmNyeXB0aW9uIFN0YW5kYXJkIChBRVMpIE5ldyBJbnN0cnVjdGlvbiBTZXQiIFdoaXRlIFBhcGVyIFJldmlzaW9uCisjIDMuMCBkYXRlZCBNYXkgMjAxMC4gQWxsIGFib3ZlIHJlc3VsdHMgYXJlIGNvbnNpc3RlbnRseSBiZXR0ZXIuIFRoaXMKKyMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYmV0dGVyIHBlcmZvcm1hbmNlIGZvciBibG9jayBzaXplcyBzbWFsbGVyIHRoYW4KKyMgMTI4IGJ5dGVzIGluIHBvaW50cyAqbm90KiByZXByZXNlbnRlZCBpbiB0aGUgYWJvdmUgdGFibGUuCisjCisjIExvb2tpbmcgYXQgdGhlIHJlc3VsdHMgZm9yIDgtS0IgYnVmZmVyLgorIworIyBDRkIgYW5kIE9GQiByZXN1bHRzIGFyZSBmYXIgZnJvbSB0aGUgbGltaXQsIGJlY2F1c2UgaW1wbGVtZW50YXRpb24KKyMgdXNlcyAiZ2VuZXJpYyIgQ1JZUFRPX1tjfG9dZmIxMjhfZW5jcnlwdCBpbnRlcmZhY2VzIHJlbHlpbmcgb24KKyMgc2luZ2xlLWJsb2NrIGFlc25pX2VuY3J5cHQsIHdoaWNoIGlzIG5vdCB0aGUgbW9zdCBvcHRpbWFsIHdheSB0byBnby4KKyMgQ0JDIGVuY3J5cHQgcmVzdWx0IGlzIHVuZXhwZWN0ZWRseSBoaWdoIGFuZCB0aGVyZSBpcyBubyBkb2N1bWVudGVkCisjIGV4cGxhbmF0aW9uIGZvciBpdC4gU2VlbWluZ2x5IHRoZXJlIGlzIGEgc21hbGwgcGVuYWx0eSBmb3IgZmVlZGluZworIyB0aGUgcmVzdWx0IGJhY2sgdG8gQUVTIHVuaXQgdGhlIHdheSBpdCdzIGRvbmUgaW4gQ0JDIG1vZGUuIFRoZXJlIGlzCisjIG5vdGhpbmcgb25lIGNhbiBkbyBhbmQgdGhlIHJlc3VsdCBhcHBlYXJzIG9wdGltYWwuIENDTSByZXN1bHQgaXMKKyMgaWRlbnRpY2FsIHRvIENCQywgYmVjYXVzZSBDQkMtTUFDIGlzIGVzc2VudGlhbGx5IENCQyBlbmNyeXB0IHdpdGhvdXQKKyMgc2F2aW5nIG91dHB1dC4gQ0NNIENUUiAic3RheXMgaW52aXNpYmxlLCIgYmVjYXVzZSBpdCdzIG5lYXRseQorIyBpbnRlcmxlYXZlZCB3aWggQ0JDLU1BQy4gVGhpcyBwcm92aWRlcyB+MzAlIGltcHJvdmVtZW50IG92ZXIKKyMgInN0cmFnaHRmb3J3YXJkIiBDQ00gaW1wbGVtZW50YXRpb24gd2l0aCBDVFIgYW5kIENCQy1NQUMgcGVyZm9ybWVkCisjIGRpc2pvaW50bHkuIFBhcmFsbGVsaXphYmxlIG1vZGVzIHByYWN0aWNhbGx5IGFjaGlldmUgdGhlIHRoZW9yZXRpY2FsCisjIGxpbWl0LgorIworIyBMb29raW5nIGF0IGhvdyByZXN1bHRzIHZhcnkgd2l0aCBidWZmZXIgc2l6ZS4KKyMKKyMgQ3VydmVzIGFyZSBwcmFjdGljYWxseSBzYXR1cmF0ZWQgYXQgMS1LQiBidWZmZXIgc2l6ZS4gSW4gbW9zdCBjYXNlcworIyAiMjU2LWJ5dGUiIHBlcmZvcm1hbmNlIGlzID45NSUsIGFuZCAiNjQtYnl0ZSIgaXMgfjkwJSBvZiAiOC1LQiIgb25lLgorIyBDVFIgY3VydmUgZG9lc24ndCBmb2xsb3cgdGhpcyBwYXR0ZXJuIGFuZCBpcyAic2xvd2VzdCIgY2hhbmdpbmcgb25lCisjIHdpdGggIjI1Ni1ieXRlIiByZXN1bHQgYmVpbmcgODclIG9mICI4LUtCLiIgVGhpcyBpcyBiZWNhdXNlIG92ZXJoZWFkCisjIGluIENUUiBtb2RlIGlzIG1vc3QgY29tcHV0YXRpb25hbGx5IGludGVuc2l2ZS4gU21hbGwtYmxvY2sgQ0NNCisjIGRlY3J5cHQgaXMgc2xvd2VyIHRoYW4gZW5jcnlwdCwgYmVjYXVzZSBmaXJzdCBDVFIgYW5kIGxhc3QgQ0JDLU1BQworIyBpdGVyYXRpb25zIGNhbid0IGJlIGludGVybGVhdmVkLgorIworIyBSZXN1bHRzIGZvciAxOTItIGFuZCAyNTYtYml0IGtleXMuCisjCisjIEVWUC1mcmVlIHJlc3VsdHMgd2VyZSBvYnNlcnZlZCB0byBzY2FsZSBwZXJmZWN0bHkgd2l0aCBudW1iZXIgb2YKKyMgcm91bmRzIGZvciBsYXJnZXIgYmxvY2sgc2l6ZXMsIGkuZS4gMTkyLWJpdCByZXN1bHQgYmVpbmcgMTAvMTIgdGltZXMKKyMgbG93ZXIgYW5kIDI1Ni1iaXQgb25lIC0gMTAvMTQuIFdlbGwsIGluIENCQyBlbmNyeXB0IGNhc2UgZGlmZmVyZW5jZXMKKyMgYXJlIGEgdGFkIHNtYWxsZXIsIGJlY2F1c2UgdGhlIGFib3ZlIG1lbnRpb25lZCBwZW5hbHR5IGJpYXNlcyBhbGwKKyMgcmVzdWx0cyBieSBzYW1lIGNvbnN0YW50IHZhbHVlLiBJbiBzaW1pbGFyIHdheSBmdW5jdGlvbiBjYWxsCisjIG92ZXJoZWFkIGFmZmVjdHMgc21hbGwtYmxvY2sgcGVyZm9ybWFuY2UsIGFzIHdlbGwgYXMgT0ZCIGFuZCBDRkIKKyMgcmVzdWx0cy4gRGlmZmVyZW5jZXMgYXJlIG5vdCBsYXJnZSwgbW9zdCBjb21tb24gY29lZmZpY2llbnRzIGFyZQorIyAxMC8xMS43IGFuZCAxMC8xMy40IChhcyBvcHBvc2l0ZSB0byAxMC8xMi4wIGFuZCAxMC8xNC4wKSwgYnV0IG9uZQorIyBvYnNlcnZlIGV2ZW4gMTAvMTEuMiBhbmQgMTAvMTIuNCAoQ1RSLCBPRkIsIENGQikuLi4KKworIyBKYW51YXJ5IDIwMTEKKyMKKyMgV2hpbGUgV2VzdG1lcmUgcHJvY2Vzc29yIGZlYXR1cmVzIDYgY3ljbGVzIGxhdGVuY3kgZm9yIGFlc1tlbmN8ZGVjXQorIyBpbnN0cnVjdGlvbnMsIHdoaWNoIGNhbiBiZSBzY2hlZHVsZWQgZXZlcnkgc2Vjb25kIGN5Y2xlLCBTYW5keQorIyBCcmlkZ2Ugc3BlbmRzIDggY3ljbGVzIHBlciBpbnN0cnVjdGlvbiwgYnV0IGl0IGNhbiBzY2hlZHVsZSB0aGVtCisjIGV2ZXJ5IGN5Y2xlLiBUaGlzIG1lYW5zIHRoYXQgY29kZSB0YXJnZXRpbmcgV2VzdG1lcmUgd291bGQgcGVyZm9ybQorIyBzdWJvcHRpbWFsbHkgb24gU2FuZHkgQnJpZGdlLiBUaGVyZWZvcmUgdGhpcyB1cGRhdGUuCisjCisjIEluIGFkZGl0aW9uLCBub24tcGFyYWxsZWxpemFibGUgQ0JDIGVuY3J5cHQgKGFzIHdlbGwgYXMgQ0NNKSBpcworIyBvcHRpbWl6ZWQuIFJlbGF0aXZlIGltcHJvdmVtZW50IG1pZ2h0IGFwcGVhciBtb2Rlc3QsIDglIG9uIFdlc3RtZXJlLAorIyBidXQgaW4gYWJzb2x1dGUgdGVybXMgaXQncyAzLjc3IGN5Y2xlcyBwZXIgYnl0ZSBlbmNyeXB0ZWQgd2l0aAorIyAxMjgtYml0IGtleSBvbiBXZXN0bWVyZSwgYW5kIDUuMDcgLSBvbiBTYW5keSBCcmlkZ2UuIFRoZXNlIG51bWJlcnMKKyMgc2hvdWxkIGJlIGNvbXBhcmVkIHRvIGFzeW1wdG90aWMgbGltaXRzIG9mIDMuNzUgZm9yIFdlc3RtZXJlIGFuZAorIyA1LjAwIGZvciBTYW5keSBCcmlkZ2UuIEFjdHVhbGx5LCB0aGUgZmFjdCB0aGF0IHRoZXkgZ2V0IHRoaXMgY2xvc2UKKyMgdG8gYXN5bXB0b3RpYyBsaW1pdHMgaXMgcXVpdGUgYW1hemluZy4gSW5kZWVkLCB0aGUgbGltaXQgaXMKKyMgY2FsY3VsYXRlZCBhcyBsYXRlbmN5IHRpbWVzIG51bWJlciBvZiByb3VuZHMsIDEwIGZvciAxMjgtYml0IGtleSwKKyMgYW5kIGRpdmlkZWQgYnkgMTYsIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYmxvY2ssIG9yIGluIG90aGVyIHdvcmRzCisjIGl0IGFjY291bnRzICpzb2xlbHkqIGZvciBhZXNlbmMgaW5zdHJ1Y3Rpb25zLiBCdXQgdGhlcmUgYXJlIGV4dHJhCisjIGluc3RydWN0aW9ucywgYW5kIG51bWJlcnMgc28gY2xvc2UgdG8gdGhlIGFzeW1wdG90aWMgbGltaXRzIG1lYW4KKyMgdGhhdCBpdCdzIGFzIGlmIGl0IHRha2VzIGFzIGxpdHRsZSBhcyAqb25lKiBhZGRpdGlvbmFsIGN5Y2xlIHRvCisjIGV4ZWN1dGUgYWxsIG9mIHRoZW0uIEhvdyBpcyBpdCBwb3NzaWJsZT8gSXQgaXMgcG9zc2libGUgdGhhbmtzIHRvCisjIG91dC1vZi1vcmRlciBleGVjdXRpb24gbG9naWMsIHdoaWNoIG1hbmFnZXMgdG8gb3ZlcmxhcCBwb3N0LQorIyBwcm9jZXNzaW5nIG9mIHByZXZpb3VzIGJsb2NrLCB0aGluZ3MgbGlrZSBzYXZpbmcgdGhlIG91dHB1dCwgd2l0aAorIyBhY3R1YWwgZW5jcnlwdGlvbiBvZiBjdXJyZW50IGJsb2NrLCBhcyB3ZWxsIGFzIHByZS1wcm9jZXNzaW5nIG9mCisjIGN1cnJlbnQgYmxvY2ssIHRoaW5ncyBsaWtlIGZldGNoaW5nIGlucHV0IGFuZCB4b3ItaW5nIGl0IHdpdGgKKyMgMC1yb3VuZCBlbGVtZW50IG9mIHRoZSBrZXkgc2NoZWR1bGUsIHdpdGggYWN0dWFsIGVuY3J5cHRpb24gb2YKKyMgcHJldmlvdXMgYmxvY2suIEtlZXAgdGhpcyBpbiBtaW5kLi4uCisjCisjIEZvciBwYXJhbGxlbGl6YWJsZSBtb2Rlcywgc3VjaCBhcyBFQ0IsIENCQyBkZWNyeXB0LCBDVFIsIGhpZ2hlcgorIyBwZXJmb3JtYW5jZSBpcyBhY2hpZXZlZCBieSBpbnRlcmxlYXZpbmcgaW5zdHJ1Y3Rpb25zIHdvcmtpbmcgb24KKyMgaW5kZXBlbmRlbnQgYmxvY2tzLiBJbiB3aGljaCBjYXNlIGFzeW1wdG90aWMgbGltaXQgZm9yIHN1Y2ggbW9kZXMKKyMgY2FuIGJlIG9idGFpbmVkIGJ5IGRpdmlkaW5nIGFib3ZlIG1lbnRpb25lZCBudW1iZXJzIGJ5IEFFUworIyBpbnN0cnVjdGlvbnMnIGludGVybGVhdmUgZmFjdG9yLiBXZXN0bWVyZSBjYW4gZXhlY3V0ZSBhdCBtb3N0IDMgCisjIGluc3RydWN0aW9ucyBhdCBhIHRpbWUsIG1lYW5pbmcgdGhhdCBvcHRpbWFsIGludGVybGVhdmUgZmFjdG9yIGlzIDMsCisjIGFuZCB0aGF0J3Mgd2hlcmUgdGhlICJtYWdpYyIgbnVtYmVyIG9mIDEuMjUgY29tZSBmcm9tLiAiT3B0aW1hbAorIyBpbnRlcmxlYXZlIGZhY3RvciIgbWVhbnMgdGhhdCBpbmNyZWFzZSBvZiBpbnRlcmxlYXZlIGZhY3RvciBkb2VzCisjIG5vdCBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGUgZm9ybXVsYSBoYXMgcHJvdmVuIHRvIHJlZmxlY3QgcmVhbGl0eQorIyBwcmV0dHkgd2VsbCBvbiBXZXN0bWVyZS4uLiBTYW5keSBCcmlkZ2Ugb24gdGhlIG90aGVyIGhhbmQgY2FuCisjIGV4ZWN1dGUgdXAgdG8gOCBBRVMgaW5zdHJ1Y3Rpb25zIGF0IGEgdGltZSwgc28gaG93IGRvZXMgdmFyeWluZworIyBpbnRlcmxlYXZlIGZhY3RvciBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlPyBIZXJlIGlzIHRhYmxlIGZvciBFQ0IKKyMgKG51bWJlcnMgYXJlIGN5Y2xlcyBwZXIgYnl0ZSBwcm9jZXNzZWQgd2l0aCAxMjgtYml0IGtleSk6CisjCisjIGluc3RydWN0aW9uIGludGVybGVhdmUgZmFjdG9yCQkzeAk2eAk4eAorIyB0aGVvcmV0aWNhbCBhc3ltcHRvdGljIGxpbWl0CQkxLjY3CTAuODMJMC42MjUKKyMgbWVhc3VyZWQgcGVyZm9ybWFuY2UgZm9yIDhLQiBibG9jawkxLjA1CTAuODYJMC44NAorIworIyAiYXMgaWYiIGludGVybGVhdmUgZmFjdG9yCQk0Ljd4CTUuOHgJNi4weAorIworIyBGdXJ0aGVyIGRhdGEgZm9yIG90aGVyIHBhcmFsbGVsaXphYmxlIG1vZGVzOgorIworIyBDQkMgZGVjcnlwdAkJCQkxLjE2CTAuOTMJMC45MworIyBDVFIJCQkJCTEuMTQJMC45MQluL2EKKyMKKyMgV2VsbCwgZ2l2ZW4gM3ggY29sdW1uIGl0J3MgcHJvYmFibHkgaW5hcHByb3ByaWF0ZSB0byBjYWxsIHRoZSBsaW1pdAorIyBhc3ltcHRvdGljLCBpZiBpdCBjYW4gYmUgc3VycGFzc2VkLCBpc24ndCBpdD8gV2hhdCBoYXBwZW5zIHRoZXJlPworIyBSZXdpbmQgdG8gQ0JDIHBhcmFncmFwaCBmb3IgdGhlIGFuc3dlci4gWWVzLCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uCisjIG1hZ2ljIGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzLiBQcm9jZXNzb3Igb3ZlcmxhcHMgbm90IG9ubHkgdGhlCisjIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIHdpdGggQUVTIG9uZXMsIGJ1dCBldmVuIEFFUyBpbnN0dWN0aW9ucworIyBwcm9jZXNzaW5nIGFkamFjZW50IHRyaXBsZXRzIG9mIGluZGVwZW5kZW50IGJsb2Nrcy4gSW4gdGhlIDZ4IGNhc2UKKyMgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgIHN0aWxsIGNsYWltIGRpc3Byb3BvcnRpb25hbGx5IHNtYWxsIGFtb3VudAorIyBvZiBhZGRpdGlvbmFsIGN5Y2xlcywgYnV0IGluIDh4IGNhc2UgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBtdXN0IGJlCisjIGEgdGFkIHRvbyBoaWdoIGZvciBvdXQtb2Ytb3JkZXIgbG9naWMgdG8gY29wZSB3aXRoLCBhbmQgQUVTIHVuaXQKKyMgcmVtYWlucyB1bmRlcnV0aWxpemVkLi4uIEFzIHlvdSBjYW4gc2VlIDh4IGludGVybGVhdmUgaXMgaGFyZGx5CisjIGp1c3RpZmlhYmxlLCBzbyB0aGVyZSBubyBuZWVkIHRvIGZlZWwgYmFkIHRoYXQgMzItYml0IGFlc25pLXg4Ni5wbAorIyB1dGlsaXppZXMgNnggaW50ZXJsZWF2ZSBiZWNhdXNlIG9mIGxpbWl0ZWQgcmVnaXN0ZXIgYmFuayBjYXBhY2l0eS4KKyMKKyMgSGlnaGVyIGludGVybGVhdmUgZmFjdG9ycyBkbyBoYXZlIG5lZ2F0aXZlIGltcGFjdCBvbiBXZXN0bWVyZQorIyBwZXJmb3JtYW5jZS4gV2hpbGUgZm9yIEVDQiBtb2RlIGl0J3MgbmVnbGlnaWJsZSB+MS41JSwgb3RoZXIKKyMgcGFyYWxsZWxpemFibGVzIHBlcmZvcm0gfjUlIHdvcnNlLCB3aGljaCBpcyBvdXR3ZWlnaGVkIGJ5IH4yNSUKKyMgaW1wcm92ZW1lbnQgb24gU2FuZHkgQnJpZGdlLiBUbyBiYWxhbmNlIHJlZ3Jlc3Npb24gb24gV2VzdG1lcmUKKyMgQ1RSIG1vZGUgd2FzIGltcGxlbWVudGVkIHdpdGggNnggYWVzZW5jIGludGVybGVhdmUgZmFjdG9yLgorCisjIEFwcmlsIDIwMTEKKyMKKyMgQWRkIGFlc25pX3h0c19bZW58ZGVdY3J5cHQuIFdlc3RtZXJlIHNwZW5kcyAxLjMzIGN5Y2xlcyBwcm9jZXNzaW5nCisjIG9uZSBieXRlIG91dCBvZiA4S0Igd2l0aCAxMjgtYml0IGtleSwgU2FuZHkgQnJpZGdlIC0gMC45Ny4gSnVzdCBsaWtlCisjIGluIENUUiBtb2RlIEFFUyBpbnN0cnVjdGlvbiBpbnRlcmxlYXZlIGZhY3RvciB3YXMgY2hvc2VuIHRvIGJlIDZ4LgorCiskUFJFRklYPSJhZXNuaSI7CSMgaWYgJFBSRUZJWCBpcyBzZXQgdG8gIkFFUyIsIHRoZSBzY3JpcHQKKwkJCSMgZ2VuZXJhdGVzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisJCQkjIGNyeXB0by9hZXMvYXNtL2Flcy14ODZfNjQucGw6LSkKKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisKKyRtb3ZrZXkgPSAkUFJFRklYIGVxICJhZXNuaSIgPyAibW92dXBzIiA6ICJtb3Z1cHMiOworQF80YXJncz0kd2luNjQ/CSgiJXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOgkjIFdpbjY0IG9yZGVyCisJCSgiJXJkaSIsIiVyc2kiLCIlcmR4IiwiJXJjeCIpOwkjIFVuaXggb3JkZXIKKworJGNvZGU9Ii50ZXh0XG4iOworCiskcm91bmRzPSIlZWF4IjsJIyBpbnB1dCB0byBhbmQgY2hhbmdlZCBieSBhZXNuaV9bZW58ZGVdY3J5cHROICEhIQorIyB0aGlzIGlzIG5hdHVyYWwgVW5peCBhcmd1bWVudCBvcmRlciBmb3IgcHVibGljICRQUkVGSVhfW2VjYnxjYmNdX2VuY3J5cHQgLi4uCiskaW5wPSIlcmRpIjsKKyRvdXQ9IiVyc2kiOworJGxlbj0iJXJkeCI7Ciska2V5PSIlcmN4IjsJIyBpbnB1dCB0byBhbmQgY2hhbmdlZCBieSBhZXNuaV9bZW58ZGVdY3J5cHROICEhIQorJGl2cD0iJXI4IjsJIyBjYmMsIGN0ciwgLi4uCisKKyRybmRzXz0iJXIxMGQiOwkjIGJhY2t1cCBjb3B5IGZvciAkcm91bmRzCiska2V5Xz0iJXIxMSI7CSMgYmFja3VwIGNvcHkgZm9yICRrZXkKKworIyAleG1tIHJlZ2lzdGVyIGxheW91dAorJHJuZGtleTA9IiV4bW0wIjsJJHJuZGtleTE9IiV4bW0xIjsKKyRpbm91dDA9IiV4bW0yIjsJJGlub3V0MT0iJXhtbTMiOworJGlub3V0Mj0iJXhtbTQiOwkkaW5vdXQzPSIleG1tNSI7CiskaW5vdXQ0PSIleG1tNiI7CSRpbm91dDU9IiV4bW03IjsKKyRpbm91dDY9IiV4bW04IjsJJGlub3V0Nz0iJXhtbTkiOworCiskaW4yPSIleG1tNiI7CQkkaW4xPSIleG1tNyI7CSMgdXNlZCBpbiBDQkMgZGVjcnlwdCwgQ1RSLCAuLi4KKyRpbjA9IiV4bW04IjsJCSRpdj0iJXhtbTkiOworDAorIyBJbmxpbmUgdmVyc2lvbiBvZiBpbnRlcm5hbCBhZXNuaV9bZW58ZGVdY3J5cHQxLgorIworIyBXaHkgZm9sZGVkIGxvb3A/IEJlY2F1c2UgYWVzW2VuY3xkZWNdIGlzIHNsb3cgZW5vdWdoIHRvIGFjY29tbW9kYXRlCisjIGN5Y2xlcyB3aGljaCB0YWtlIGNhcmUgb2YgbG9vcCB2YXJpYWJsZXMuLi4KK3sgbXkgJHNuOworc3ViIGFlc25pX2dlbmVyYXRlMSB7CitteSAoJHAsJGtleSwkcm91bmRzLCRpbm91dCwkaXZlYyk9QF87CSRpbm91dD0kaW5vdXQwIGlmICghZGVmaW5lZCgkaW5vdXQpKTsKKysrJHNuOworJGNvZGUuPTw8X19fOworCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCisJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQorX19fCiskY29kZS49PDxfX18gaWYgKGRlZmluZWQoJGl2ZWMpKTsKKwl4b3Jwcwkkcm5ka2V5MCwkaXZlYworCWxlYQkzMigka2V5KSwka2V5CisJeG9ycHMJJGl2ZWMsJGlub3V0CitfX18KKyRjb2RlLj08PF9fXyBpZiAoIWRlZmluZWQoJGl2ZWMpKTsKKwlsZWEJMzIoJGtleSksJGtleQorCXhvcnBzCSRybmRrZXkwLCRpbm91dAorX19fCiskY29kZS49PDxfX187CisuTG9vcF8ke3B9MV8kc246CisJYWVzJHtwfQkkcm5ka2V5MSwkaW5vdXQKKwlkZWMJJHJvdW5kcworCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkxCisJbGVhCTE2KCRrZXkpLCRrZXkKKwlqbnoJLkxvb3BfJHtwfTFfJHNuCSMgbG9vcCBib2R5IGlzIDE2IGJ5dGVzCisJYWVzJHtwfWxhc3QJJHJuZGtleTEsJGlub3V0CitfX18KK319CisjIHZvaWQgJFBSRUZJWF9bZW58ZGVdY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKKyMKK3sgbXkgKCRpbnAsJG91dCwka2V5KSA9IEBfNGFyZ3M7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke1BSRUZJWH1fZW5jcnlwdAorLnR5cGUJJHtQUkVGSVh9X2VuY3J5cHQsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Ciske1BSRUZJWH1fZW5jcnlwdDoKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAJCSMgbG9hZCBpbnB1dAorCW1vdgkyNDAoJGtleSksJHJvdW5kcwkjIGtleS0+cm91bmRzCitfX18KKwkmYWVzbmlfZ2VuZXJhdGUxKCJlbmMiLCRrZXksJHJvdW5kcyk7CiskY29kZS49PDxfX187CisJbW92dXBzCSRpbm91dDAsKCRvdXQpCQkjIG91dHB1dAorCXJldAorLnNpemUJJHtQUkVGSVh9X2VuY3J5cHQsLi0ke1BSRUZJWH1fZW5jcnlwdAorCisuZ2xvYmwJJHtQUkVGSVh9X2RlY3J5cHQKKy50eXBlCSR7UFJFRklYfV9kZWNyeXB0LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorJHtQUkVGSVh9X2RlY3J5cHQ6CisJbW92dXBzCSgkaW5wKSwkaW5vdXQwCQkjIGxvYWQgaW5wdXQKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMJIyBrZXktPnJvdW5kcworX19fCisJJmFlc25pX2dlbmVyYXRlMSgiZGVjIiwka2V5LCRyb3VuZHMpOworJGNvZGUuPTw8X19fOworCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQkJIyBvdXRwdXQKKwlyZXQKKy5zaXplCSR7UFJFRklYfV9kZWNyeXB0LCAuLSR7UFJFRklYfV9kZWNyeXB0CitfX18KK30KKwwKKyMgX2Flc25pX1tlbnxkZV1jcnlwdE4gYXJlIHByaXZhdGUgaW50ZXJmYWNlcywgTiBkZW5vdGVzIGludGVybGVhdmUKKyMgZmFjdG9yLiBXaHkgM3ggc3Vicm91dGluZSB3ZXJlIG9yaWdpbmFsbHkgdXNlZCBpbiBsb29wcz8gRXZlbiB0aG91Z2gKKyMgYWVzW2VuY3xkZWNdIGxhdGVuY3kgd2FzIG9yaWdpbmFsbHkgNiwgaXQgY291bGQgYmUgc2NoZWR1bGVkIG9ubHkKKyMgZXZlcnkgKjJuZCogY3ljbGUuIFRodXMgM3ggaW50ZXJsZWF2ZSB3YXMgdGhlIG9uZSBwcm92aWRpbmcgb3B0aW1hbAorIyB1dGlsaXphdGlvbiwgaS5lLiB3aGVuIHN1YnJvdXRpbmUncyB0aHJvdWdocHV0IGlzIHZpcnR1YWxseSBzYW1lIGFzCisjIG9mIG5vbi1pbnRlcmxlYXZlZCBzdWJyb3V0aW5lIFtmb3IgbnVtYmVyIG9mIGlucHV0IGJsb2NrcyB1cCB0byAzXS4KKyMgVGhpcyBpcyB3aHkgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gaW1wbGVtZW50IDJ4IHN1YnJvdXRpbmUuCisjIGFlc1tlbmN8ZGVjXSBsYXRlbmN5IGluIG5leHQgcHJvY2Vzc29yIGdlbmVyYXRpb24gaXMgOCwgYnV0IHRoZQorIyBpbnN0cnVjdGlvbnMgY2FuIGJlIHNjaGVkdWxlZCBldmVyeSBjeWNsZS4gT3B0aW1hbCBpbnRlcmxlYXZlIGZvcgorIyBuZXcgcHJvY2Vzc29yIGlzIHRoZXJlZm9yZSA4eC4uLgorc3ViIGFlc25pX2dlbmVyYXRlMyB7CitteSAkZGlyPXNoaWZ0OworIyBBcyBhbHJlYWR5IG1lbnRpb25lZCBpdCB0YWtlcyBpbiAka2V5IGFuZCAkcm91bmRzLCB3aGljaCBhcmUgKm5vdCoKKyMgcHJlc2VydmVkLiAkaW5vdXRbMC0yXSBpcyBjaXBoZXIvY2xlYXIgdGV4dC4uLgorJGNvZGUuPTw8X19fOworLnR5cGUJX2Flc25pXyR7ZGlyfXJ5cHQzLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX2Flc25pXyR7ZGlyfXJ5cHQzOgorCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCisJc2hyCVwkMSwkcm91bmRzCisJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQorCWxlYQkzMigka2V5KSwka2V5CisJeG9ycHMJJHJuZGtleTAsJGlub3V0MAorCXhvcnBzCSRybmRrZXkwLCRpbm91dDEKKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQyCisJJG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCisKKy5MJHtkaXJ9X2xvb3AzOgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlkZWMJCSRyb3VuZHMKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCSRtb3ZrZXkJCTE2KCRrZXkpLCRybmRrZXkxCisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MQorCWxlYQkJMzIoJGtleSksJGtleQorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQyCisJJG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCisJam56CQkuTCR7ZGlyfV9sb29wMworCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQyCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQwCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQxCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQyCisJcmV0Cisuc2l6ZQlfYWVzbmlfJHtkaXJ9cnlwdDMsLi1fYWVzbmlfJHtkaXJ9cnlwdDMKK19fXworfQorIyA0eCBpbnRlcmxlYXZlIGlzIGltcGxlbWVudGVkIHRvIGltcHJvdmUgc21hbGwgYmxvY2sgcGVyZm9ybWFuY2UsCisjIG1vc3Qgbm90YWJseSBbYW5kIG5hdHVyYWxseV0gNCBibG9jayBieSB+MzAlLiBPbmUgY2FuIGFyZ3VlIHRoYXQgb25lCisjIHNob3VsZCBoYXZlIGltcGxlbWVudGVkIDV4IGFzIHdlbGwsIGJ1dCBpbXByb3ZlbWVudCB3b3VsZCBiZSA8MjAlLAorIyBzbyBpdCdzIG5vdCB3b3J0aCBpdC4uLgorc3ViIGFlc25pX2dlbmVyYXRlNCB7CitteSAkZGlyPXNoaWZ0OworIyBBcyBhbHJlYWR5IG1lbnRpb25lZCBpdCB0YWtlcyBpbiAka2V5IGFuZCAkcm91bmRzLCB3aGljaCBhcmUgKm5vdCoKKyMgcHJlc2VydmVkLiAkaW5vdXRbMC0zXSBpcyBjaXBoZXIvY2xlYXIgdGV4dC4uLgorJGNvZGUuPTw8X19fOworLnR5cGUJX2Flc25pXyR7ZGlyfXJ5cHQ0LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX2Flc25pXyR7ZGlyfXJ5cHQ0OgorCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCisJc2hyCVwkMSwkcm91bmRzCisJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQorCWxlYQkzMigka2V5KSwka2V5CisJeG9ycHMJJHJuZGtleTAsJGlub3V0MAorCXhvcnBzCSRybmRrZXkwLCRpbm91dDEKKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQyCisJeG9ycHMJJHJuZGtleTAsJGlub3V0MworCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCisKKy5MJHtkaXJ9X2xvb3A0OgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlkZWMJCSRyb3VuZHMKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MAorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQxCisJbGVhCQkzMigka2V5KSwka2V5CisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDIKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MworCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCWpuegkJLkwke2Rpcn1fbG9vcDQKKworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQwCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQxCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQyCisJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQzCisJcmV0Cisuc2l6ZQlfYWVzbmlfJHtkaXJ9cnlwdDQsLi1fYWVzbmlfJHtkaXJ9cnlwdDQKK19fXworfQorc3ViIGFlc25pX2dlbmVyYXRlNiB7CitteSAkZGlyPXNoaWZ0OworIyBBcyBhbHJlYWR5IG1lbnRpb25lZCBpdCB0YWtlcyBpbiAka2V5IGFuZCAkcm91bmRzLCB3aGljaCBhcmUgKm5vdCoKKyMgcHJlc2VydmVkLiAkaW5vdXRbMC01XSBpcyBjaXBoZXIvY2xlYXIgdGV4dC4uLgorJGNvZGUuPTw8X19fOworLnR5cGUJX2Flc25pXyR7ZGlyfXJ5cHQ2LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX2Flc25pXyR7ZGlyfXJ5cHQ2OgorCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCXNocgkJXCQxLCRyb3VuZHMKKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQorCWxlYQkJMzIoJGtleSksJGtleQorCXhvcnBzCQkkcm5ka2V5MCwkaW5vdXQwCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MQorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NAorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NQorCWRlYwkJJHJvdW5kcworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQ0CisJJG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDUKKwlqbXAJCS5MJHtkaXJ9X2xvb3A2X2VudGVyCisuYWxpZ24JMTYKKy5MJHtkaXJ9X2xvb3A2OgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlkZWMJCSRyb3VuZHMKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NQorLkwke2Rpcn1fbG9vcDZfZW50ZXI6CQkJCSMgaGFwcGVucyB0byBiZSAxNi1ieXRlIGFsaWduZWQKKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDEKKwlsZWEJCTMyKCRrZXkpLCRrZXkKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQzCisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDQKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0NQorCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCWpuegkJLkwke2Rpcn1fbG9vcDYKKworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NQorCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MAorCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MQorCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MgorCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MworCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0NAorCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0NQorCXJldAorLnNpemUJX2Flc25pXyR7ZGlyfXJ5cHQ2LC4tX2Flc25pXyR7ZGlyfXJ5cHQ2CitfX18KK30KK3N1YiBhZXNuaV9nZW5lcmF0ZTggeworbXkgJGRpcj1zaGlmdDsKKyMgQXMgYWxyZWFkeSBtZW50aW9uZWQgaXQgdGFrZXMgaW4gJGtleSBhbmQgJHJvdW5kcywgd2hpY2ggYXJlICpub3QqCisjIHByZXNlcnZlZC4gJGlub3V0WzAtN10gaXMgY2lwaGVyL2NsZWFyIHRleHQuLi4KKyRjb2RlLj08PF9fXzsKKy50eXBlCV9hZXNuaV8ke2Rpcn1yeXB0OCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK19hZXNuaV8ke2Rpcn1yeXB0ODoKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlzaHIJCVwkMSwkcm91bmRzCisJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKwlsZWEJCTMyKCRrZXkpLCRrZXkKKwl4b3JwcwkJJHJuZGtleTAsJGlub3V0MAorCXhvcnBzCQkkcm5ka2V5MCwkaW5vdXQxCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQyCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ0CisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDMKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ1CisJZGVjCQkkcm91bmRzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ2CisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDUKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ3CisJJG1vdmtleQkJKCRrZXkpLCRybmRrZXkwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDYKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NworCSRtb3ZrZXkJCTE2KCRrZXkpLCRybmRrZXkxCisJam1wCQkuTCR7ZGlyfV9sb29wOF9lbnRlcgorLmFsaWduCTE2CisuTCR7ZGlyfV9sb29wODoKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MAorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCisJZGVjCQkkcm91bmRzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQ0CisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDUKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQ3CisJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKy5MJHtkaXJ9X2xvb3A4X2VudGVyOgkJCQkjIGhhcHBlbnMgdG8gYmUgMTYtYnl0ZSBhbGlnbmVkCisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0MQorCWxlYQkJMzIoJGtleSksJGtleQorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQyCisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDMKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0NAorCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQ1CisJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDYKKwlhZXMke2Rpcn0JJHJuZGtleTAsJGlub3V0NworCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCWpuegkJLkwke2Rpcn1fbG9vcDgKKworCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDEKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MgorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDQKKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0NQorCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQ2CisJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDcKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDAKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDEKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDIKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDMKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDQKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDUKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDYKKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDcKKwlyZXQKKy5zaXplCV9hZXNuaV8ke2Rpcn1yeXB0OCwuLV9hZXNuaV8ke2Rpcn1yeXB0OAorX19fCit9CismYWVzbmlfZ2VuZXJhdGUzKCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKKyZhZXNuaV9nZW5lcmF0ZTMoImRlYyIpOworJmFlc25pX2dlbmVyYXRlNCgiZW5jIikgaWYgKCRQUkVGSVggZXEgImFlc25pIik7CismYWVzbmlfZ2VuZXJhdGU0KCJkZWMiKTsKKyZhZXNuaV9nZW5lcmF0ZTYoImVuYyIpIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOworJmFlc25pX2dlbmVyYXRlNigiZGVjIik7CismYWVzbmlfZ2VuZXJhdGU4KCJlbmMiKSBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKKyZhZXNuaV9nZW5lcmF0ZTgoImRlYyIpOworDAoraWYgKCRQUkVGSVggZXEgImFlc25pIikgeworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZvaWQgYWVzbmlfZWNiX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCisjCQkJICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisjCQkJICBpbnQgZW5jKTsKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlhZXNuaV9lY2JfZW5jcnlwdAorLnR5cGUJYWVzbmlfZWNiX2VuY3J5cHQsXEBmdW5jdGlvbiw1CisuYWxpZ24JMTYKK2Flc25pX2VjYl9lbmNyeXB0OgorCWFuZAlcJC0xNiwkbGVuCisJanoJLkxlY2JfcmV0CisKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMJIyBrZXktPnJvdW5kcworCSRtb3ZrZXkJKCRrZXkpLCRybmRrZXkwCisJbW92CSRrZXksJGtleV8JCSMgYmFja3VwICRrZXkKKwltb3YJJHJvdW5kcywkcm5kc18JCSMgYmFja3VwICRyb3VuZHMKKwl0ZXN0CSVyOGQsJXI4ZAkJIyA1dGggYXJndW1lbnQKKwlqegkuTGVjYl9kZWNyeXB0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVDQiBFTkNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKwljbXAJXCQweDgwLCRsZW4KKwlqYgkuTGVjYl9lbmNfdGFpbAorCisJbW92ZHF1CSgkaW5wKSwkaW5vdXQwCisJbW92ZHF1CTB4MTAoJGlucCksJGlub3V0MQorCW1vdmRxdQkweDIwKCRpbnApLCRpbm91dDIKKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCisJbW92ZHF1CTB4NDAoJGlucCksJGlub3V0NAorCW1vdmRxdQkweDUwKCRpbnApLCRpbm91dDUKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJbW92ZHF1CTB4NzAoJGlucCksJGlub3V0NworCWxlYQkweDgwKCRpbnApLCRpbnAKKwlzdWIJXCQweDgwLCRsZW4KKwlqbXAJLkxlY2JfZW5jX2xvb3A4X2VudGVyCisuYWxpZ24gMTYKKy5MZWNiX2VuY19sb29wODoKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3YJJGtleV8sJGtleQkJIyByZXN0b3JlICRrZXkKKwltb3ZkcXUJKCRpbnApLCRpbm91dDAKKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdmRxdQkweDEwKCRpbnApLCRpbm91dDEKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92ZHF1CTB4MjAoJGlucCksJGlub3V0MgorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCisJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQorCW1vdmRxdQkweDQwKCRpbnApLCRpbm91dDQKKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCisJbW92ZHF1CTB4NTAoJGlucCksJGlub3V0NQorCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJbW92dXBzCSRpbm91dDcsMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCRvdXQKKwltb3ZkcXUJMHg3MCgkaW5wKSwkaW5vdXQ3CisJbGVhCTB4ODAoJGlucCksJGlucAorLkxlY2JfZW5jX2xvb3A4X2VudGVyOgorCisJY2FsbAlfYWVzbmlfZW5jcnlwdDgKKworCXN1YglcJDB4ODAsJGxlbgorCWpuYwkuTGVjYl9lbmNfbG9vcDgKKworCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCisJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKKwltb3Z1cHMJJGlub3V0NywweDcwKCRvdXQpCisJbGVhCTB4ODAoJG91dCksJG91dAorCWFkZAlcJDB4ODAsJGxlbgorCWp6CS5MZWNiX3JldAorCisuTGVjYl9lbmNfdGFpbDoKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwljbXAJXCQweDIwLCRsZW4KKwlqYgkuTGVjYl9lbmNfb25lCisJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQorCWplCS5MZWNiX2VuY190d28KKwltb3Z1cHMJMHgyMCgkaW5wKSwkaW5vdXQyCisJY21wCVwkMHg0MCwkbGVuCisJamIJLkxlY2JfZW5jX3RocmVlCisJbW92dXBzCTB4MzAoJGlucCksJGlub3V0MworCWplCS5MZWNiX2VuY19mb3VyCisJbW92dXBzCTB4NDAoJGlucCksJGlub3V0NAorCWNtcAlcJDB4NjAsJGxlbgorCWpiCS5MZWNiX2VuY19maXZlCisJbW92dXBzCTB4NTAoJGlucCksJGlub3V0NQorCWplCS5MZWNiX2VuY19zaXgKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJY2FsbAlfYWVzbmlfZW5jcnlwdDgKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCisJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKKwlqbXAJLkxlY2JfcmV0CisuYWxpZ24JMTYKKy5MZWNiX2VuY19vbmU6CitfX18KKwkmYWVzbmlfZ2VuZXJhdGUxKCJlbmMiLCRrZXksJHJvdW5kcyk7CiskY29kZS49PDxfX187CisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJam1wCS5MZWNiX3JldAorLmFsaWduCTE2CisuTGVjYl9lbmNfdHdvOgorCXhvcnBzCSRpbm91dDIsJGlub3V0MgorCWNhbGwJX2Flc25pX2VuY3J5cHQzCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCWptcAkuTGVjYl9yZXQKKy5hbGlnbgkxNgorLkxlY2JfZW5jX3RocmVlOgorCWNhbGwJX2Flc25pX2VuY3J5cHQzCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKKwlqbXAJLkxlY2JfcmV0CisuYWxpZ24JMTYKKy5MZWNiX2VuY19mb3VyOgorCWNhbGwJX2Flc25pX2VuY3J5cHQ0CisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCisJam1wCS5MZWNiX3JldAorLmFsaWduCTE2CisuTGVjYl9lbmNfZml2ZToKKwl4b3JwcwkkaW5vdXQ1LCRpbm91dDUKKwljYWxsCV9hZXNuaV9lbmNyeXB0NgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKKwlqbXAJLkxlY2JfcmV0CisuYWxpZ24JMTYKKy5MZWNiX2VuY19zaXg6CisJY2FsbAlfYWVzbmlfZW5jcnlwdDYKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCisJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQorCWptcAkuTGVjYl9yZXQKKwwjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVDQiBERUNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKy5hbGlnbgkxNgorLkxlY2JfZGVjcnlwdDoKKwljbXAJXCQweDgwLCRsZW4KKwlqYgkuTGVjYl9kZWNfdGFpbAorCisJbW92ZHF1CSgkaW5wKSwkaW5vdXQwCisJbW92ZHF1CTB4MTAoJGlucCksJGlub3V0MQorCW1vdmRxdQkweDIwKCRpbnApLCRpbm91dDIKKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCisJbW92ZHF1CTB4NDAoJGlucCksJGlub3V0NAorCW1vdmRxdQkweDUwKCRpbnApLCRpbm91dDUKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJbW92ZHF1CTB4NzAoJGlucCksJGlub3V0NworCWxlYQkweDgwKCRpbnApLCRpbnAKKwlzdWIJXCQweDgwLCRsZW4KKwlqbXAJLkxlY2JfZGVjX2xvb3A4X2VudGVyCisuYWxpZ24gMTYKKy5MZWNiX2RlY19sb29wODoKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3YJJGtleV8sJGtleQkJIyByZXN0b3JlICRrZXkKKwltb3ZkcXUJKCRpbnApLCRpbm91dDAKKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdmRxdQkweDEwKCRpbnApLCRpbm91dDEKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92ZHF1CTB4MjAoJGlucCksJGlub3V0MgorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3ZkcXUJMHgzMCgkaW5wKSwkaW5vdXQzCisJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQorCW1vdmRxdQkweDQwKCRpbnApLCRpbm91dDQKKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCisJbW92ZHF1CTB4NTAoJGlucCksJGlub3V0NQorCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJbW92dXBzCSRpbm91dDcsMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCRvdXQKKwltb3ZkcXUJMHg3MCgkaW5wKSwkaW5vdXQ3CisJbGVhCTB4ODAoJGlucCksJGlucAorLkxlY2JfZGVjX2xvb3A4X2VudGVyOgorCisJY2FsbAlfYWVzbmlfZGVjcnlwdDgKKworCSRtb3ZrZXkJKCRrZXlfKSwkcm5ka2V5MAorCXN1YglcJDB4ODAsJGxlbgorCWpuYwkuTGVjYl9kZWNfbG9vcDgKKworCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCisJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ2LDB4NjAoJG91dCkKKwltb3Z1cHMJJGlub3V0NywweDcwKCRvdXQpCisJbGVhCTB4ODAoJG91dCksJG91dAorCWFkZAlcJDB4ODAsJGxlbgorCWp6CS5MZWNiX3JldAorCisuTGVjYl9kZWNfdGFpbDoKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwljbXAJXCQweDIwLCRsZW4KKwlqYgkuTGVjYl9kZWNfb25lCisJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQorCWplCS5MZWNiX2RlY190d28KKwltb3Z1cHMJMHgyMCgkaW5wKSwkaW5vdXQyCisJY21wCVwkMHg0MCwkbGVuCisJamIJLkxlY2JfZGVjX3RocmVlCisJbW92dXBzCTB4MzAoJGlucCksJGlub3V0MworCWplCS5MZWNiX2RlY19mb3VyCisJbW92dXBzCTB4NDAoJGlucCksJGlub3V0NAorCWNtcAlcJDB4NjAsJGxlbgorCWpiCS5MZWNiX2RlY19maXZlCisJbW92dXBzCTB4NTAoJGlucCksJGlub3V0NQorCWplCS5MZWNiX2RlY19zaXgKKwltb3Z1cHMJMHg2MCgkaW5wKSwkaW5vdXQ2CisJJG1vdmtleQkoJGtleSksJHJuZGtleTAKKwljYWxsCV9hZXNuaV9kZWNyeXB0OAorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCisJbW92dXBzCSRpbm91dDYsMHg2MCgkb3V0KQorCWptcAkuTGVjYl9yZXQKKy5hbGlnbgkxNgorLkxlY2JfZGVjX29uZToKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImRlYyIsJGtleSwkcm91bmRzKTsKKyRjb2RlLj08PF9fXzsKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwlqbXAJLkxlY2JfcmV0CisuYWxpZ24JMTYKKy5MZWNiX2RlY190d286CisJeG9ycHMJJGlub3V0MiwkaW5vdXQyCisJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJam1wCS5MZWNiX3JldAorLmFsaWduCTE2CisuTGVjYl9kZWNfdGhyZWU6CisJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCWptcAkuTGVjYl9yZXQKKy5hbGlnbgkxNgorLkxlY2JfZGVjX2ZvdXI6CisJY2FsbAlfYWVzbmlfZGVjcnlwdDQKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwlqbXAJLkxlY2JfcmV0CisuYWxpZ24JMTYKKy5MZWNiX2RlY19maXZlOgorCXhvcnBzCSRpbm91dDUsJGlub3V0NQorCWNhbGwJX2Flc25pX2RlY3J5cHQ2CisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCisJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQorCWptcAkuTGVjYl9yZXQKKy5hbGlnbgkxNgorLkxlY2JfZGVjX3NpeDoKKwljYWxsCV9hZXNuaV9kZWNyeXB0NgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCisKKy5MZWNiX3JldDoKKwlyZXQKKy5zaXplCWFlc25pX2VjYl9lbmNyeXB0LC4tYWVzbmlfZWNiX2VuY3J5cHQKK19fXworDAoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB2b2lkIGFlc25pX2NjbTY0X1tlbnxkZV1jcnlwdF9ibG9ja3MgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCisjICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBibG9ja3MsIGNvbnN0IEFFU19LRVkgKmtleSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaXZlYyxjaGFyICpjbWFjKTsKKyMKKyMgSGFuZGxlcyBvbmx5IGNvbXBsZXRlIGJsb2Nrcywgb3BlcmF0ZXMgb24gNjQtYml0IGNvdW50ZXIgYW5kCisjIGRvZXMgbm90IHVwZGF0ZSAqaXZlYyEgTm9yIGRvZXMgaXQgZmluYWxpemUgQ01BQyB2YWx1ZQorIyAoc2VlIGVuZ2luZS9lbmdfYWVzbmkuYyBmb3IgZGV0YWlscykKKyMKK3sKK215ICRjbWFjPSIlcjkiOwkjIDZ0aCBhcmd1bWVudAorCitteSAkaW5jcmVtZW50PSIleG1tNiI7CitteSAkYnN3YXBfbWFzaz0iJXhtbTciOworCiskY29kZS49PDxfX187CisuZ2xvYmwJYWVzbmlfY2NtNjRfZW5jcnlwdF9ibG9ja3MKKy50eXBlCWFlc25pX2NjbTY0X2VuY3J5cHRfYmxvY2tzLFxAZnVuY3Rpb24sNgorLmFsaWduCTE2CithZXNuaV9jY202NF9lbmNyeXB0X2Jsb2NrczoKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCWxlYQktMHg1OCglcnNwKSwlcnNwCisJbW92YXBzCSV4bW02LCglcnNwKQorCW1vdmFwcwkleG1tNywweDEwKCVyc3ApCisJbW92YXBzCSV4bW04LDB4MjAoJXJzcCkKKwltb3ZhcHMJJXhtbTksMHgzMCglcnNwKQorLkxjY202NF9lbmNfYm9keToKK19fXworJGNvZGUuPTw8X19fOworCW1vdgkyNDAoJGtleSksJHJvdW5kcwkJIyBrZXktPnJvdW5kcworCW1vdmRxdQkoJGl2cCksJGl2CisJbW92ZHFhCS5MaW5jcmVtZW50NjQoJXJpcCksJGluY3JlbWVudAorCW1vdmRxYQkuTGJzd2FwX21hc2soJXJpcCksJGJzd2FwX21hc2sKKworCXNocglcJDEsJHJvdW5kcworCWxlYQkwKCRrZXkpLCRrZXlfCisJbW92ZHF1CSgkY21hYyksJGlub3V0MQorCW1vdmRxYQkkaXYsJGlub3V0MAorCW1vdgkkcm91bmRzLCRybmRzXworCXBzaHVmYgkkYnN3YXBfbWFzaywkaXYKKwlqbXAJLkxjY202NF9lbmNfb3V0ZXIKKy5hbGlnbgkxNgorLkxjY202NF9lbmNfb3V0ZXI6CisJJG1vdmtleQkoJGtleV8pLCRybmRrZXkwCisJbW92CSRybmRzXywkcm91bmRzCisJbW92dXBzCSgkaW5wKSwkaW4wCQkJIyBsb2FkIGlucAorCisJeG9ycHMJJHJuZGtleTAsJGlub3V0MAkJIyBjb3VudGVyCisJJG1vdmtleQkxNigka2V5XyksJHJuZGtleTEKKwl4b3JwcwkkaW4wLCRybmRrZXkwCisJbGVhCTMyKCRrZXlfKSwka2V5CisJeG9ycHMJJHJuZGtleTAsJGlub3V0MQkJIyBjbWFjXj1pbnAKKwkkbW92a2V5CSgka2V5KSwkcm5ka2V5MAorCisuTGNjbTY0X2VuYzJfbG9vcDoKKwlhZXNlbmMJJHJuZGtleTEsJGlub3V0MAorCWRlYwkkcm91bmRzCisJYWVzZW5jCSRybmRrZXkxLCRpbm91dDEKKwkkbW92a2V5CTE2KCRrZXkpLCRybmRrZXkxCisJYWVzZW5jCSRybmRrZXkwLCRpbm91dDAKKwlsZWEJMzIoJGtleSksJGtleQorCWFlc2VuYwkkcm5ka2V5MCwkaW5vdXQxCisJJG1vdmtleQkwKCRrZXkpLCRybmRrZXkwCisJam56CS5MY2NtNjRfZW5jMl9sb29wCisJYWVzZW5jCSRybmRrZXkxLCRpbm91dDAKKwlhZXNlbmMJJHJuZGtleTEsJGlub3V0MQorCXBhZGRxCSRpbmNyZW1lbnQsJGl2CisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQwCisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQxCisKKwlkZWMJJGxlbgorCWxlYQkxNigkaW5wKSwkaW5wCisJeG9ycHMJJGlub3V0MCwkaW4wCQkJIyBpbnAgXj0gRShpdikKKwltb3ZkcWEJJGl2LCRpbm91dDAKKwltb3Z1cHMJJGluMCwoJG91dCkJCQkjIHNhdmUgb3V0cHV0CisJbGVhCTE2KCRvdXQpLCRvdXQKKwlwc2h1ZmIJJGJzd2FwX21hc2ssJGlub3V0MAorCWpuegkuTGNjbTY0X2VuY19vdXRlcgorCisJbW92dXBzCSRpbm91dDEsKCRjbWFjKQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSglcnNwKSwleG1tNgorCW1vdmFwcwkweDEwKCVyc3ApLCV4bW03CisJbW92YXBzCTB4MjAoJXJzcCksJXhtbTgKKwltb3ZhcHMJMHgzMCglcnNwKSwleG1tOQorCWxlYQkweDU4KCVyc3ApLCVyc3AKKy5MY2NtNjRfZW5jX3JldDoKK19fXworJGNvZGUuPTw8X19fOworCXJldAorLnNpemUJYWVzbmlfY2NtNjRfZW5jcnlwdF9ibG9ja3MsLi1hZXNuaV9jY202NF9lbmNyeXB0X2Jsb2NrcworX19fCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskY29kZS49PDxfX187CisuZ2xvYmwJYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3MKKy50eXBlCWFlc25pX2NjbTY0X2RlY3J5cHRfYmxvY2tzLFxAZnVuY3Rpb24sNgorLmFsaWduCTE2CithZXNuaV9jY202NF9kZWNyeXB0X2Jsb2NrczoKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCWxlYQktMHg1OCglcnNwKSwlcnNwCisJbW92YXBzCSV4bW02LCglcnNwKQorCW1vdmFwcwkleG1tNywweDEwKCVyc3ApCisJbW92YXBzCSV4bW04LDB4MjAoJXJzcCkKKwltb3ZhcHMJJXhtbTksMHgzMCglcnNwKQorLkxjY202NF9kZWNfYm9keToKK19fXworJGNvZGUuPTw8X19fOworCW1vdgkyNDAoJGtleSksJHJvdW5kcwkJIyBrZXktPnJvdW5kcworCW1vdnVwcwkoJGl2cCksJGl2CisJbW92ZHF1CSgkY21hYyksJGlub3V0MQorCW1vdmRxYQkuTGluY3JlbWVudDY0KCVyaXApLCRpbmNyZW1lbnQKKwltb3ZkcWEJLkxic3dhcF9tYXNrKCVyaXApLCRic3dhcF9tYXNrCisKKwltb3ZhcHMJJGl2LCRpbm91dDAKKwltb3YJJHJvdW5kcywkcm5kc18KKwltb3YJJGtleSwka2V5XworCXBzaHVmYgkkYnN3YXBfbWFzaywkaXYKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKKyRjb2RlLj08PF9fXzsKKwltb3Z1cHMJKCRpbnApLCRpbjAJCQkjIGxvYWQgaW5wCisJcGFkZHEJJGluY3JlbWVudCwkaXYKKwlsZWEJMTYoJGlucCksJGlucAorCWptcAkuTGNjbTY0X2RlY19vdXRlcgorLmFsaWduCTE2CisuTGNjbTY0X2RlY19vdXRlcjoKKwl4b3JwcwkkaW5vdXQwLCRpbjAJCQkjIGlucCBePSBFKGl2KQorCW1vdmRxYQkkaXYsJGlub3V0MAorCW1vdgkkcm5kc18sJHJvdW5kcworCW1vdnVwcwkkaW4wLCgkb3V0KQkJCSMgc2F2ZSBvdXRwdXQKKwlsZWEJMTYoJG91dCksJG91dAorCXBzaHVmYgkkYnN3YXBfbWFzaywkaW5vdXQwCisKKwlzdWIJXCQxLCRsZW4KKwlqegkuTGNjbTY0X2RlY19icmVhaworCisJJG1vdmtleQkoJGtleV8pLCRybmRrZXkwCisJc2hyCVwkMSwkcm91bmRzCisJJG1vdmtleQkxNigka2V5XyksJHJuZGtleTEKKwl4b3Jwcwkkcm5ka2V5MCwkaW4wCisJbGVhCTMyKCRrZXlfKSwka2V5CisJeG9ycHMJJHJuZGtleTAsJGlub3V0MAorCXhvcnBzCSRpbjAsJGlub3V0MQkJCSMgY21hY149b3V0CisJJG1vdmtleQkoJGtleSksJHJuZGtleTAKKworLkxjY202NF9kZWMyX2xvb3A6CisJYWVzZW5jCSRybmRrZXkxLCRpbm91dDAKKwlkZWMJJHJvdW5kcworCWFlc2VuYwkkcm5ka2V5MSwkaW5vdXQxCisJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQorCWFlc2VuYwkkcm5ka2V5MCwkaW5vdXQwCisJbGVhCTMyKCRrZXkpLCRrZXkKKwlhZXNlbmMJJHJuZGtleTAsJGlub3V0MQorCSRtb3ZrZXkJMCgka2V5KSwkcm5ka2V5MAorCWpuegkuTGNjbTY0X2RlYzJfbG9vcAorCW1vdnVwcwkoJGlucCksJGluMAkJCSMgbG9hZCBpbnAKKwlwYWRkcQkkaW5jcmVtZW50LCRpdgorCWFlc2VuYwkkcm5ka2V5MSwkaW5vdXQwCisJYWVzZW5jCSRybmRrZXkxLCRpbm91dDEKKwlsZWEJMTYoJGlucCksJGlucAorCWFlc2VuY2xhc3QJJHJuZGtleTAsJGlub3V0MAorCWFlc2VuY2xhc3QJJHJuZGtleTAsJGlub3V0MQorCWptcAkuTGNjbTY0X2RlY19vdXRlcgorCisuYWxpZ24JMTYKKy5MY2NtNjRfZGVjX2JyZWFrOgorCSN4b3JwcwkkaW4wLCRpbm91dDEJCQkjIGNtYWNePW91dAorX19fCisJJmFlc25pX2dlbmVyYXRlMSgiZW5jIiwka2V5Xywkcm91bmRzLCRpbm91dDEsJGluMCk7CiskY29kZS49PDxfX187CisJbW92dXBzCSRpbm91dDEsKCRjbWFjKQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSglcnNwKSwleG1tNgorCW1vdmFwcwkweDEwKCVyc3ApLCV4bW03CisJbW92YXBzCTB4MjAoJXJzcCksJXhtbTgKKwltb3ZhcHMJMHgzMCglcnNwKSwleG1tOQorCWxlYQkweDU4KCVyc3ApLCVyc3AKKy5MY2NtNjRfZGVjX3JldDoKK19fXworJGNvZGUuPTw8X19fOworCXJldAorLnNpemUJYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3MsLi1hZXNuaV9jY202NF9kZWNyeXB0X2Jsb2NrcworX19fCit9DAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB2b2lkIGFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzIChjb25zdCB2b2lkICppbiwgdm9pZCAqb3V0LAorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYmxvY2tzLCBjb25zdCBBRVNfS0VZICprZXksCisjICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKml2ZWMpOworIworIyBIYW5kbGVzIG9ubHkgY29tcGxldGUgYmxvY2tzLCBvcGVyYXRlcyBvbiAzMi1iaXQgY291bnRlciBhbmQKKyMgZG9lcyBub3QgdXBkYXRlICppdmVjISAoc2VlIGVuZ2luZS9lbmdfYWVzbmkuYyBmb3IgZGV0YWlscykKKyMKK3sKK215ICRyZXNlcnZlZCA9ICR3aW42ND8wOi0weDI4OworbXkgKCRpbjAsJGluMSwkaW4yLCRpbjMpPW1hcCgiJXhtbSRfIiwoOC4uMTEpKTsKK215ICgkaXYwLCRpdjEsJGl2ZWMpPSgiJXhtbTEyIiwiJXhtbTEzIiwiJXhtbTE0Iik7CitteSAkYnN3YXBfbWFzaz0iJXhtbTE1IjsKKworJGNvZGUuPTw8X19fOworLmdsb2JsCWFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzCisudHlwZQlhZXNuaV9jdHIzMl9lbmNyeXB0X2Jsb2NrcyxcQGZ1bmN0aW9uLDUKKy5hbGlnbgkxNgorYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3M6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwlsZWEJLTB4YzgoJXJzcCksJXJzcAorCW1vdmFwcwkleG1tNiwweDIwKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MzAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsMHg0MCglcnNwKQorCW1vdmFwcwkleG1tOSwweDUwKCVyc3ApCisJbW92YXBzCSV4bW0xMCwweDYwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwweDcwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xMywweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwweGEwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwweGIwKCVyc3ApCisuTGN0cjMyX2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwljbXAJXCQxLCRsZW4KKwlqZQkuTGN0cjMyX29uZV9zaG9ydGN1dAorCisJbW92ZHF1CSgkaXZwKSwkaXZlYworCW1vdmRxYQkuTGJzd2FwX21hc2soJXJpcCksJGJzd2FwX21hc2sKKwl4b3IJJHJvdW5kcywkcm91bmRzCisJcGV4dHJkCVwkMywkaXZlYywkcm5kc18JCSMgcHVsbCAzMi1iaXQgY291bnRlcgorCXBpbnNyZAlcJDMsJHJvdW5kcywkaXZlYwkJIyB3aXBlIDMyLWJpdCBjb3VudGVyCisKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMJCSMga2V5LT5yb3VuZHMKKwlic3dhcAkkcm5kc18KKwlweG9yCSRpdjAsJGl2MAkJCSMgdmVjdG9yIG9mIDMgMzItYml0IGNvdW50ZXJzCisJcHhvcgkkaXYxLCRpdjEJCQkjIHZlY3RvciBvZiAzIDMyLWJpdCBjb3VudGVycworCXBpbnNyZAlcJDAsJHJuZHNfLCRpdjAKKwlsZWEJMygkcm5kc18pLCRrZXlfCisJcGluc3JkCVwkMCwka2V5XywkaXYxCisJaW5jCSRybmRzXworCXBpbnNyZAlcJDEsJHJuZHNfLCRpdjAKKwlpbmMJJGtleV8KKwlwaW5zcmQJXCQxLCRrZXlfLCRpdjEKKwlpbmMJJHJuZHNfCisJcGluc3JkCVwkMiwkcm5kc18sJGl2MAorCWluYwkka2V5XworCXBpbnNyZAlcJDIsJGtleV8sJGl2MQorCW1vdmRxYQkkaXYwLCRyZXNlcnZlZCglcnNwKQorCXBzaHVmYgkkYnN3YXBfbWFzaywkaXYwCisJbW92ZHFhCSRpdjEsYCRyZXNlcnZlZCsweDEwYCglcnNwKQorCXBzaHVmYgkkYnN3YXBfbWFzaywkaXYxCisKKwlwc2h1ZmQJXCRgMzw8NmAsJGl2MCwkaW5vdXQwCQkjIHBsYWNlIGNvdW50ZXIgdG8gdXBwZXIgZHdvcmQKKwlwc2h1ZmQJXCRgMjw8NmAsJGl2MCwkaW5vdXQxCisJcHNodWZkCVwkYDE8PDZgLCRpdjAsJGlub3V0MgorCWNtcAlcJDYsJGxlbgorCWpiCS5MY3RyMzJfdGFpbAorCXNocglcJDEsJHJvdW5kcworCW1vdgkka2V5LCRrZXlfCQkJIyBiYWNrdXAgJGtleQorCW1vdgkkcm91bmRzLCRybmRzXwkJCSMgYmFja3VwICRyb3VuZHMKKwlzdWIJXCQ2LCRsZW4KKwlqbXAJLkxjdHIzMl9sb29wNgorCisuYWxpZ24JMTYKKy5MY3RyMzJfbG9vcDY6CisJcHNodWZkCVwkYDM8PDZgLCRpdjEsJGlub3V0MworCXBvcgkkaXZlYywkaW5vdXQwCQkJIyBtZXJnZSBjb3VudGVyLWxlc3MgaXZlYworCSAkbW92a2V5CSgka2V5XyksJHJuZGtleTAKKwlwc2h1ZmQJXCRgMjw8NmAsJGl2MSwkaW5vdXQ0CisJcG9yCSRpdmVjLCRpbm91dDEKKwkgJG1vdmtleQkxNigka2V5XyksJHJuZGtleTEKKwlwc2h1ZmQJXCRgMTw8NmAsJGl2MSwkaW5vdXQ1CisJcG9yCSRpdmVjLCRpbm91dDIKKwlwb3IJJGl2ZWMsJGlub3V0MworCSB4b3JwcwkJJHJuZGtleTAsJGlub3V0MAorCXBvcgkkaXZlYywkaW5vdXQ0CisJcG9yCSRpdmVjLCRpbm91dDUKKworCSMgaW5saW5lIF9hZXNuaV9lbmNyeXB0NiBhbmQgaW50ZXJsZWF2ZSBsYXN0IHJvdW5kcworCSMgd2l0aCBvd24gY29kZS4uLgorCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MQorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MAorCWxlYQkJMzIoJGtleV8pLCRrZXkKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQyCisJYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQxCisJIG1vdmRxYQkJLkxpbmNyZW1lbnQzMiglcmlwKSwkaXYxCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MworCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MgorCSBtb3ZkcWEJCSRyZXNlcnZlZCglcnNwKSwkaXYwCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NAorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MworCXB4b3IJCSRybmRrZXkwLCRpbm91dDUKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlkZWMJCSRyb3VuZHMKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDQKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDUKKwlqbXAJCS5MY3RyMzJfZW5jX2xvb3A2X2VudGVyCisuYWxpZ24JMTYKKy5MY3RyMzJfZW5jX2xvb3A2OgorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MAorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MQorCWRlYwkJJHJvdW5kcworCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MgorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MworCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0NAorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0NQorLkxjdHIzMl9lbmNfbG9vcDZfZW50ZXI6CisJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDAKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDEKKwlsZWEJCTMyKCRrZXkpLCRrZXkKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDIKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDMKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDQKKwlhZXNlbmMJCSRybmRrZXkwLCRpbm91dDUKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlqbnoJCS5MY3RyMzJfZW5jX2xvb3A2CisKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDAKKwkgcGFkZGQJCSRpdjEsJGl2MAkJIyBpbmNyZW1lbnQgY291bnRlciB2ZWN0b3IKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDEKKwkgcGFkZGQJCWAkcmVzZXJ2ZWQrMHgxMGAoJXJzcCksJGl2MQorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MgorCSBtb3ZkcWEJCSRpdjAsJHJlc2VydmVkKCVyc3ApCSMgc2F2ZSBjb3VudGVyIHZlY3RvcgorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MworCSBtb3ZkcWEJCSRpdjEsYCRyZXNlcnZlZCsweDEwYCglcnNwKQorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0NAorCSBwc2h1ZmIJCSRic3dhcF9tYXNrLCRpdjAJIyBieXRlIHN3YXAKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDUKKwkgcHNodWZiCQkkYnN3YXBfbWFzaywkaXYxCisKKwlhZXNlbmNsYXN0CSRybmRrZXkwLCRpbm91dDAKKwkgbW92dXBzCQkoJGlucCksJGluMAkJIyBsb2FkIGlucHV0CisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQxCisJIG1vdnVwcwkJMHgxMCgkaW5wKSwkaW4xCisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQyCisJIG1vdnVwcwkJMHgyMCgkaW5wKSwkaW4yCisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQzCisJIG1vdnVwcwkJMHgzMCgkaW5wKSwkaW4zCisJYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQ0CisJIG1vdnVwcwkJMHg0MCgkaW5wKSwkcm5ka2V5MQorCWFlc2VuY2xhc3QJJHJuZGtleTAsJGlub3V0NQorCSBtb3Z1cHMJCTB4NTAoJGlucCksJHJuZGtleTAKKwkgbGVhCTB4NjAoJGlucCksJGlucAorCisJeG9ycHMJJGlub3V0MCwkaW4wCQkJIyB4b3IKKwkgcHNodWZkCVwkYDM8PDZgLCRpdjAsJGlub3V0MAorCXhvcnBzCSRpbm91dDEsJGluMQorCSBwc2h1ZmQJXCRgMjw8NmAsJGl2MCwkaW5vdXQxCisJbW92dXBzCSRpbjAsKCRvdXQpCQkJIyBzdG9yZSBvdXRwdXQKKwl4b3JwcwkkaW5vdXQyLCRpbjIKKwkgcHNodWZkCVwkYDE8PDZgLCRpdjAsJGlub3V0MgorCW1vdnVwcwkkaW4xLDB4MTAoJG91dCkKKwl4b3JwcwkkaW5vdXQzLCRpbjMKKwltb3Z1cHMJJGluMiwweDIwKCRvdXQpCisJeG9ycHMJJGlub3V0NCwkcm5ka2V5MQorCW1vdnVwcwkkaW4zLDB4MzAoJG91dCkKKwl4b3JwcwkkaW5vdXQ1LCRybmRrZXkwCisJbW92dXBzCSRybmRrZXkxLDB4NDAoJG91dCkKKwltb3Z1cHMJJHJuZGtleTAsMHg1MCgkb3V0KQorCWxlYQkweDYwKCRvdXQpLCRvdXQKKwltb3YJJHJuZHNfLCRyb3VuZHMKKwlzdWIJXCQ2LCRsZW4KKwlqbmMJLkxjdHIzMl9sb29wNgorCisJYWRkCVwkNiwkbGVuCisJanoJLkxjdHIzMl9kb25lCisJbW92CSRrZXlfLCRrZXkJCQkjIHJlc3RvcmUgJGtleQorCWxlYQkxKCRyb3VuZHMsJHJvdW5kcyksJHJvdW5kcwkjIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWUKKworLkxjdHIzMl90YWlsOgorCXBvcgkkaXZlYywkaW5vdXQwCisJbW92dXBzCSgkaW5wKSwkaW4wCisJY21wCVwkMiwkbGVuCisJamIJLkxjdHIzMl9vbmUKKworCXBvcgkkaXZlYywkaW5vdXQxCisJbW92dXBzCTB4MTAoJGlucCksJGluMQorCWplCS5MY3RyMzJfdHdvCisKKwlwc2h1ZmQJXCRgMzw8NmAsJGl2MSwkaW5vdXQzCisJcG9yCSRpdmVjLCRpbm91dDIKKwltb3Z1cHMJMHgyMCgkaW5wKSwkaW4yCisJY21wCVwkNCwkbGVuCisJamIJLkxjdHIzMl90aHJlZQorCisJcHNodWZkCVwkYDI8PDZgLCRpdjEsJGlub3V0NAorCXBvcgkkaXZlYywkaW5vdXQzCisJbW92dXBzCTB4MzAoJGlucCksJGluMworCWplCS5MY3RyMzJfZm91cgorCisJcG9yCSRpdmVjLCRpbm91dDQKKwl4b3JwcwkkaW5vdXQ1LCRpbm91dDUKKworCWNhbGwJX2Flc25pX2VuY3J5cHQ2CisKKwltb3Z1cHMJMHg0MCgkaW5wKSwkcm5ka2V5MQorCXhvcnBzCSRpbm91dDAsJGluMAorCXhvcnBzCSRpbm91dDEsJGluMQorCW1vdnVwcwkkaW4wLCgkb3V0KQorCXhvcnBzCSRpbm91dDIsJGluMgorCW1vdnVwcwkkaW4xLDB4MTAoJG91dCkKKwl4b3JwcwkkaW5vdXQzLCRpbjMKKwltb3Z1cHMJJGluMiwweDIwKCRvdXQpCisJeG9ycHMJJGlub3V0NCwkcm5ka2V5MQorCW1vdnVwcwkkaW4zLDB4MzAoJG91dCkKKwltb3Z1cHMJJHJuZGtleTEsMHg0MCgkb3V0KQorCWptcAkuTGN0cjMyX2RvbmUKKworLmFsaWduCTE2CisuTGN0cjMyX29uZV9zaG9ydGN1dDoKKwltb3Z1cHMJKCRpdnApLCRpbm91dDAKKwltb3Z1cHMJKCRpbnApLCRpbjAKKwltb3YJMjQwKCRrZXkpLCRyb3VuZHMJCSMga2V5LT5yb3VuZHMKKy5MY3RyMzJfb25lOgorX19fCisJJmFlc25pX2dlbmVyYXRlMSgiZW5jIiwka2V5LCRyb3VuZHMpOworJGNvZGUuPTw8X19fOworCXhvcnBzCSRpbm91dDAsJGluMAorCW1vdnVwcwkkaW4wLCgkb3V0KQorCWptcAkuTGN0cjMyX2RvbmUKKworLmFsaWduCTE2CisuTGN0cjMyX3R3bzoKKwl4b3JwcwkkaW5vdXQyLCRpbm91dDIKKwljYWxsCV9hZXNuaV9lbmNyeXB0MworCXhvcnBzCSRpbm91dDAsJGluMAorCXhvcnBzCSRpbm91dDEsJGluMQorCW1vdnVwcwkkaW4wLCgkb3V0KQorCW1vdnVwcwkkaW4xLDB4MTAoJG91dCkKKwlqbXAJLkxjdHIzMl9kb25lCisKKy5hbGlnbgkxNgorLkxjdHIzMl90aHJlZToKKwljYWxsCV9hZXNuaV9lbmNyeXB0MworCXhvcnBzCSRpbm91dDAsJGluMAorCXhvcnBzCSRpbm91dDEsJGluMQorCW1vdnVwcwkkaW4wLCgkb3V0KQorCXhvcnBzCSRpbm91dDIsJGluMgorCW1vdnVwcwkkaW4xLDB4MTAoJG91dCkKKwltb3Z1cHMJJGluMiwweDIwKCRvdXQpCisJam1wCS5MY3RyMzJfZG9uZQorCisuYWxpZ24JMTYKKy5MY3RyMzJfZm91cjoKKwljYWxsCV9hZXNuaV9lbmNyeXB0NAorCXhvcnBzCSRpbm91dDAsJGluMAorCXhvcnBzCSRpbm91dDEsJGluMQorCW1vdnVwcwkkaW4wLCgkb3V0KQorCXhvcnBzCSRpbm91dDIsJGluMgorCW1vdnVwcwkkaW4xLDB4MTAoJG91dCkKKwl4b3JwcwkkaW5vdXQzLCRpbjMKKwltb3Z1cHMJJGluMiwweDIwKCRvdXQpCisJbW92dXBzCSRpbjMsMHgzMCgkb3V0KQorCisuTGN0cjMyX2RvbmU6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3ZhcHMJMHgyMCglcnNwKSwleG1tNgorCW1vdmFwcwkweDMwKCVyc3ApLCV4bW03CisJbW92YXBzCTB4NDAoJXJzcCksJXhtbTgKKwltb3ZhcHMJMHg1MCglcnNwKSwleG1tOQorCW1vdmFwcwkweDYwKCVyc3ApLCV4bW0xMAorCW1vdmFwcwkweDcwKCVyc3ApLCV4bW0xMQorCW1vdmFwcwkweDgwKCVyc3ApLCV4bW0xMgorCW1vdmFwcwkweDkwKCVyc3ApLCV4bW0xMworCW1vdmFwcwkweGEwKCVyc3ApLCV4bW0xNAorCW1vdmFwcwkweGIwKCVyc3ApLCV4bW0xNQorCWxlYQkweGM4KCVyc3ApLCVyc3AKKy5MY3RyMzJfcmV0OgorX19fCiskY29kZS49PDxfX187CisJcmV0Cisuc2l6ZQlhZXNuaV9jdHIzMl9lbmNyeXB0X2Jsb2NrcywuLWFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzCitfX18KK30KKwwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBhZXNuaV94dHNfW2VufGRlXWNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKKyMJY29uc3QgQUVTX0tFWSAqa2V5MSwgY29uc3QgQUVTX0tFWSAqa2V5MgorIwljb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSk7CisjCit7CitteSBAdHdlYWs9bWFwKCIleG1tJF8iLCgxMC4uMTUpKTsKK215ICgkdHdtYXNrLCR0d3JlcywkdHd0bXApPSgiJXhtbTgiLCIleG1tOSIsQHR3ZWFrWzRdKTsKK215ICgka2V5MiwkaXZwLCRsZW5fKT0oIiVyOCIsIiVyOSIsIiVyOSIpOworbXkgJGZyYW1lX3NpemUgPSAweDY4ICsgKCR3aW42ND8xNjA6MCk7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlhZXNuaV94dHNfZW5jcnlwdAorLnR5cGUJYWVzbmlfeHRzX2VuY3J5cHQsXEBmdW5jdGlvbiw2CisuYWxpZ24JMTYKK2Flc25pX3h0c19lbmNyeXB0OgorCWxlYQktJGZyYW1lX3NpemUoJXJzcCksJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSV4bW02LDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsMHg3MCglcnNwKQorCW1vdmFwcwkleG1tOCwweDgwKCVyc3ApCisJbW92YXBzCSV4bW05LDB4OTAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLDB4YTAoJXJzcCkKKwltb3ZhcHMJJXhtbTExLDB4YjAoJXJzcCkKKwltb3ZhcHMJJXhtbTEyLDB4YzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLDB4ZDAoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LDB4ZTAoJXJzcCkKKwltb3ZhcHMJJXhtbTE1LDB4ZjAoJXJzcCkKKy5MeHRzX2VuY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92dXBzCSgkaXZwKSxAdHdlYWtbNV0JCSMgbG9hZCBjbGVhci10ZXh0IHR3ZWFrCisJbW92CTI0MCglcjgpLCRyb3VuZHMJCSMga2V5Mi0+cm91bmRzCisJbW92CTI0MCgka2V5KSwkcm5kc18JCSMga2V5MS0+cm91bmRzCitfX18KKwkjIGdlbmVyYXRlIHRoZSB0d2VhaworCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleTIsJHJvdW5kcyxAdHdlYWtbNV0pOworJGNvZGUuPTw8X19fOworCW1vdgkka2V5LCRrZXlfCQkJIyBiYWNrdXAgJGtleQorCW1vdgkkcm5kc18sJHJvdW5kcwkJCSMgYmFja3VwICRyb3VuZHMKKwltb3YJJGxlbiwkbGVuXwkJCSMgYmFja3VwICRsZW4KKwlhbmQJXCQtMTYsJGxlbgorCisJbW92ZHFhCS5MeHRzX21hZ2ljKCVyaXApLCR0d21hc2sKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKK19fXworICAgIGZvciAoJGk9MDskaTw0OyRpKyspIHsKKyAgICAkY29kZS49PDxfX187CisJcHNodWZkCVwkMHgxMywkdHd0bXAsJHR3cmVzCisJcHhvcgkkdHd0bXAsJHR3dG1wCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbJGldCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscQkxLCR0d2VhaworCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorX19fCisgICAgfQorJGNvZGUuPTw8X19fOworCXN1YglcJDE2KjYsJGxlbgorCWpjCS5MeHRzX2VuY19zaG9ydAorCisJc2hyCVwkMSwkcm91bmRzCisJc3ViCVwkMSwkcm91bmRzCisJbW92CSRyb3VuZHMsJHJuZHNfCisJam1wCS5MeHRzX2VuY19ncmFuZGxvb3AKKworLmFsaWduCTE2CisuTHh0c19lbmNfZ3JhbmRsb29wOgorCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzRdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscSAxLCR0d2VhaworCW1vdmRxdQlgMTYqMGAoJGlucCksJGlub3V0MAkJIyBsb2FkIGlucHV0CisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCW1vdmRxdQlgMTYqMWAoJGlucCksJGlub3V0MQorCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorCisJbW92ZHF1CWAxNioyYCgkaW5wKSwkaW5vdXQyCisJcHhvcglAdHdlYWtbMF0sJGlub3V0MAkJIyBpbnB1dF49dHdlYWsKKwltb3ZkcXUJYDE2KjNgKCRpbnApLCRpbm91dDMKKwlweG9yCUB0d2Vha1sxXSwkaW5vdXQxCisJbW92ZHF1CWAxNio0YCgkaW5wKSwkaW5vdXQ0CisJcHhvcglAdHdlYWtbMl0sJGlub3V0MgorCW1vdmRxdQlgMTYqNWAoJGlucCksJGlub3V0NQorCWxlYQlgMTYqNmAoJGlucCksJGlucAorCXB4b3IJQHR3ZWFrWzNdLCRpbm91dDMKKwkkbW92a2V5CQkoJGtleV8pLCRybmRrZXkwCisJcHhvcglAdHdlYWtbNF0sJGlub3V0NAorCXB4b3IJQHR3ZWFrWzVdLCRpbm91dDUKKworCSMgaW5saW5lIF9hZXNuaV9lbmNyeXB0NiBhbmQgaW50ZXJsZWF2ZSBmaXJzdCBhbmQgbGFzdCByb3VuZHMKKwkjIHdpdGggb3duIGNvZGUuLi4KKwkkbW92a2V5CQkxNigka2V5XyksJHJuZGtleTEKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQwCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MQorCSBtb3ZkcWEJQHR3ZWFrWzBdLGAxNiowYCglcnNwKQkJIyBwdXQgYXNpZGUgdHdlYWtzCisJYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQwCisJbGVhCQkzMigka2V5XyksJGtleQorCXB4b3IJCSRybmRrZXkwLCRpbm91dDIKKwkgbW92ZHFhCUB0d2Vha1sxXSxgMTYqMWAoJXJzcCkKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDEKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQzCisJIG1vdmRxYQlAdHdlYWtbMl0sYDE2KjJgKCVyc3ApCisJYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NAorCSBtb3ZkcWEJQHR3ZWFrWzNdLGAxNiozYCglcnNwKQorCWFlc2VuYwkJJHJuZGtleTEsJGlub3V0MworCXB4b3IJCSRybmRrZXkwLCRpbm91dDUKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlkZWMJCSRyb3VuZHMKKwkgbW92ZHFhCUB0d2Vha1s0XSxgMTYqNGAoJXJzcCkKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDQKKwkgbW92ZHFhCUB0d2Vha1s1XSxgMTYqNWAoJXJzcCkKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDUKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAKKwlqbXAJCS5MeHRzX2VuY19sb29wNl9lbnRlcgorCisuYWxpZ24JMTYKKy5MeHRzX2VuY19sb29wNjoKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDAKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDEKKwlkZWMJCSRyb3VuZHMKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDIKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDMKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDQKKwlhZXNlbmMJCSRybmRrZXkxLCRpbm91dDUKKy5MeHRzX2VuY19sb29wNl9lbnRlcjoKKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQorCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0MAorCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0MQorCWxlYQkJMzIoJGtleSksJGtleQorCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0MgorCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0MworCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0NAorCWFlc2VuYwkJJHJuZGtleTAsJGlub3V0NQorCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCWpuegkJLkx4dHNfZW5jX2xvb3A2CisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwYWRkcQlAdHdlYWtbNV0sQHR3ZWFrWzVdCQkjIHBzbGxxCTEsJHR3ZWFrCisJIGFlc2VuYwkJJHJuZGtleTEsJGlub3V0MAorCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkgYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQxCisJcGNtcGd0ZAlAdHdlYWtbNV0sJHR3dG1wCQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisJIGFlc2VuYwkJJHJuZGtleTEsJGlub3V0MgorCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorCSBhZXNlbmMJCSRybmRrZXkxLCRpbm91dDMKKwkgYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQ0CisJIGFlc2VuYwkJJHJuZGtleTEsJGlub3V0NQorCSAkbW92a2V5CTE2KCRrZXkpLCRybmRrZXkxCisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwltb3ZkcWEJQHR3ZWFrWzVdLEB0d2Vha1swXQorCXBhZGRxCUB0d2Vha1s1XSxAdHdlYWtbNV0JCSMgcHNsbHEJMSwkdHdlYWsKKwkgYWVzZW5jCQkkcm5ka2V5MCwkaW5vdXQwCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSBhZXNlbmMJCSRybmRrZXkwLCRpbm91dDEKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCSBhZXNlbmMJCSRybmRrZXkwLCRpbm91dDIKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKwkgYWVzZW5jCQkkcm5ka2V5MCwkaW5vdXQzCisJIGFlc2VuYwkJJHJuZGtleTAsJGlub3V0NAorCSBhZXNlbmMJCSRybmRrZXkwLCRpbm91dDUKKwkgJG1vdmtleQkzMigka2V5KSwkcm5ka2V5MAorCisJcHNodWZkCVwkMHgxMywkdHd0bXAsJHR3cmVzCisJcHhvcgkkdHd0bXAsJHR3dG1wCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMV0KKwlwYWRkcQlAdHdlYWtbNV0sQHR3ZWFrWzVdCQkjIHBzbGxxCTEsJHR3ZWFrCisJIGFlc2VuYwkJJHJuZGtleTEsJGlub3V0MAorCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkgYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQxCisJcGNtcGd0ZAlAdHdlYWtbNV0sJHR3dG1wCQkjIGJyb2FkY2F0IHVwcGVyIGJpdHMKKwkgYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkkdHdyZXMsQHR3ZWFrWzVdCisJIGFlc2VuYwkJJHJuZGtleTEsJGlub3V0MworCSBhZXNlbmMJCSRybmRrZXkxLCRpbm91dDQKKwkgYWVzZW5jCQkkcm5ka2V5MSwkaW5vdXQ1CisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwltb3ZkcWEJQHR3ZWFrWzVdLEB0d2Vha1syXQorCXBhZGRxCUB0d2Vha1s1XSxAdHdlYWtbNV0JCSMgcHNsbHEJMSwkdHdlYWsKKwkgYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQwCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSBhZXNlbmNsYXN0CSRybmRrZXkwLCRpbm91dDEKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCSBhZXNlbmNsYXN0CSRybmRrZXkwLCRpbm91dDIKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKwkgYWVzZW5jbGFzdAkkcm5ka2V5MCwkaW5vdXQzCisJIGFlc2VuY2xhc3QJJHJuZGtleTAsJGlub3V0NAorCSBhZXNlbmNsYXN0CSRybmRrZXkwLCRpbm91dDUKKworCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCXB4b3IJJHR3dG1wLCR0d3RtcAorCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzNdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscQkxLCR0d2VhaworCSB4b3JwcwlgMTYqMGAoJXJzcCksJGlub3V0MAkJIyBvdXRwdXRePXR3ZWFrCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSB4b3JwcwlgMTYqMWAoJXJzcCksJGlub3V0MQorCXBjbXBndGQJQHR3ZWFrWzVdLCR0d3RtcAkJIyBicm9hZGNhdCB1cHBlciBiaXRzCisJcHhvcgkkdHdyZXMsQHR3ZWFrWzVdCisKKwl4b3JwcwlgMTYqMmAoJXJzcCksJGlub3V0MgorCW1vdnVwcwkkaW5vdXQwLGAxNiowYCgkb3V0KQkJIyB3cml0ZSBvdXRwdXQKKwl4b3JwcwlgMTYqM2AoJXJzcCksJGlub3V0MworCW1vdnVwcwkkaW5vdXQxLGAxNioxYCgkb3V0KQorCXhvcnBzCWAxNio0YCglcnNwKSwkaW5vdXQ0CisJbW92dXBzCSRpbm91dDIsYDE2KjJgKCRvdXQpCisJeG9ycHMJYDE2KjVgKCVyc3ApLCRpbm91dDUKKwltb3Z1cHMJJGlub3V0MyxgMTYqM2AoJG91dCkKKwltb3YJJHJuZHNfLCRyb3VuZHMJCQkjIHJlc3RvcmUgJHJvdW5kcworCW1vdnVwcwkkaW5vdXQ0LGAxNio0YCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ1LGAxNio1YCgkb3V0KQorCWxlYQlgMTYqNmAoJG91dCksJG91dAorCXN1YglcJDE2KjYsJGxlbgorCWpuYwkuTHh0c19lbmNfZ3JhbmRsb29wCisKKwlsZWEJMygkcm91bmRzLCRyb3VuZHMpLCRyb3VuZHMJIyByZXN0b3JlIG9yaWdpbmFsIHZhbHVlCisJbW92CSRrZXlfLCRrZXkJCQkjIHJlc3RvcmUgJGtleQorCW1vdgkkcm91bmRzLCRybmRzXwkJCSMgYmFja3VwICRyb3VuZHMKKworLkx4dHNfZW5jX3Nob3J0OgorCWFkZAlcJDE2KjYsJGxlbgorCWp6CS5MeHRzX2VuY19kb25lCisKKwljbXAJXCQweDIwLCRsZW4KKwlqYgkuTHh0c19lbmNfb25lCisJamUJLkx4dHNfZW5jX3R3bworCisJY21wCVwkMHg0MCwkbGVuCisJamIJLkx4dHNfZW5jX3RocmVlCisJamUJLkx4dHNfZW5jX2ZvdXIKKworCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzRdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscSAxLCR0d2VhaworCSBtb3ZkcXUJKCRpbnApLCRpbm91dDAKKwlwYW5kCSR0d21hc2ssJHR3cmVzCQkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJIG1vdmRxdQkxNioxKCRpbnApLCRpbm91dDEKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKworCW1vdmRxdQkxNioyKCRpbnApLCRpbm91dDIKKwlweG9yCUB0d2Vha1swXSwkaW5vdXQwCisJbW92ZHF1CTE2KjMoJGlucCksJGlub3V0MworCXB4b3IJQHR3ZWFrWzFdLCRpbm91dDEKKwltb3ZkcXUJMTYqNCgkaW5wKSwkaW5vdXQ0CisJbGVhCTE2KjUoJGlucCksJGlucAorCXB4b3IJQHR3ZWFrWzJdLCRpbm91dDIKKwlweG9yCUB0d2Vha1szXSwkaW5vdXQzCisJcHhvcglAdHdlYWtbNF0sJGlub3V0NAorCisJY2FsbAlfYWVzbmlfZW5jcnlwdDYKKworCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMF0KKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MQorCXhvcnBzCUB0d2Vha1syXSwkaW5vdXQyCisJbW92ZHF1CSRpbm91dDAsKCRvdXQpCisJeG9ycHMJQHR3ZWFrWzNdLCRpbm91dDMKKwltb3ZkcXUJJGlub3V0MSwxNioxKCRvdXQpCisJeG9ycHMJQHR3ZWFrWzRdLCRpbm91dDQKKwltb3ZkcXUJJGlub3V0MiwxNioyKCRvdXQpCisJbW92ZHF1CSRpbm91dDMsMTYqMygkb3V0KQorCW1vdmRxdQkkaW5vdXQ0LDE2KjQoJG91dCkKKwlsZWEJMTYqNSgkb3V0KSwkb3V0CisJam1wCS5MeHRzX2VuY19kb25lCisKKy5hbGlnbgkxNgorLkx4dHNfZW5jX29uZToKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwlsZWEJMTYqMSgkaW5wKSwkaW5wCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKKyRjb2RlLj08PF9fXzsKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdmRxYQlAdHdlYWtbMV0sQHR3ZWFrWzBdCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbGVhCTE2KjEoJG91dCksJG91dAorCWptcAkuTHh0c19lbmNfZG9uZQorCisuYWxpZ24JMTYKKy5MeHRzX2VuY190d286CisJbW92dXBzCSgkaW5wKSwkaW5vdXQwCisJbW92dXBzCTE2KCRpbnApLCRpbm91dDEKKwlsZWEJMzIoJGlucCksJGlucAorCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCisJeG9ycHMJQHR3ZWFrWzFdLCRpbm91dDEKKworCWNhbGwJX2Flc25pX2VuY3J5cHQzCisKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdmRxYQlAdHdlYWtbMl0sQHR3ZWFrWzBdCisJeG9ycHMJQHR3ZWFrWzFdLCRpbm91dDEKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwxNioxKCRvdXQpCisJbGVhCTE2KjIoJG91dCksJG91dAorCWptcAkuTHh0c19lbmNfZG9uZQorCisuYWxpZ24JMTYKKy5MeHRzX2VuY190aHJlZToKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwltb3Z1cHMJMTYqMSgkaW5wKSwkaW5vdXQxCisJbW92dXBzCTE2KjIoJGlucCksJGlub3V0MgorCWxlYQkxNiozKCRpbnApLCRpbnAKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCXhvcnBzCUB0d2Vha1sxXSwkaW5vdXQxCisJeG9ycHMJQHR3ZWFrWzJdLCRpbm91dDIKKworCWNhbGwJX2Flc25pX2VuY3J5cHQzCisKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdmRxYQlAdHdlYWtbM10sQHR3ZWFrWzBdCisJeG9ycHMJQHR3ZWFrWzFdLCRpbm91dDEKKwl4b3JwcwlAdHdlYWtbMl0sJGlub3V0MgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDE2KjEoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwxNioyKCRvdXQpCisJbGVhCTE2KjMoJG91dCksJG91dAorCWptcAkuTHh0c19lbmNfZG9uZQorCisuYWxpZ24JMTYKKy5MeHRzX2VuY19mb3VyOgorCW1vdnVwcwkoJGlucCksJGlub3V0MAorCW1vdnVwcwkxNioxKCRpbnApLCRpbm91dDEKKwltb3Z1cHMJMTYqMigkaW5wKSwkaW5vdXQyCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwltb3Z1cHMJMTYqMygkaW5wKSwkaW5vdXQzCisJbGVhCTE2KjQoJGlucCksJGlucAorCXhvcnBzCUB0d2Vha1sxXSwkaW5vdXQxCisJeG9ycHMJQHR3ZWFrWzJdLCRpbm91dDIKKwl4b3JwcwlAdHdlYWtbM10sJGlub3V0MworCisJY2FsbAlfYWVzbmlfZW5jcnlwdDQKKworCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMF0KKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MQorCXhvcnBzCUB0d2Vha1syXSwkaW5vdXQyCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJeG9ycHMJQHR3ZWFrWzNdLCRpbm91dDMKKwltb3Z1cHMJJGlub3V0MSwxNioxKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMTYqMigkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDE2KjMoJG91dCkKKwlsZWEJMTYqNCgkb3V0KSwkb3V0CisJam1wCS5MeHRzX2VuY19kb25lCisKKy5hbGlnbgkxNgorLkx4dHNfZW5jX2RvbmU6CisJYW5kCVwkMTUsJGxlbl8KKwlqegkuTHh0c19lbmNfcmV0CisJbW92CSRsZW5fLCRsZW4KKworLkx4dHNfZW5jX3N0ZWFsOgorCW1vdnpiCSgkaW5wKSwlZWF4CQkJIyBib3Jyb3cgJHJvdW5kcyAuLi4KKwltb3Z6YgktMTYoJG91dCksJWVjeAkJCSMgLi4uIGFuZCAka2V5CisJbGVhCTEoJGlucCksJGlucAorCW1vdgklYWwsLTE2KCRvdXQpCisJbW92CSVjbCwwKCRvdXQpCisJbGVhCTEoJG91dCksJG91dAorCXN1YglcJDEsJGxlbgorCWpuegkuTHh0c19lbmNfc3RlYWwKKworCXN1YgkkbGVuXywkb3V0CQkJIyByZXdpbmQgJG91dAorCW1vdgkka2V5Xywka2V5CQkJIyByZXN0b3JlICRrZXkKKwltb3YJJHJuZHNfLCRyb3VuZHMJCQkjIHJlc3RvcmUgJHJvdW5kcworCisJbW92dXBzCS0xNigkb3V0KSwkaW5vdXQwCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKKyRjb2RlLj08PF9fXzsKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdnVwcwkkaW5vdXQwLC0xNigkb3V0KQorCisuTHh0c19lbmNfcmV0OgorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTB4NjAoJXJzcCksJXhtbTYKKwltb3ZhcHMJMHg3MCglcnNwKSwleG1tNworCW1vdmFwcwkweDgwKCVyc3ApLCV4bW04CisJbW92YXBzCTB4OTAoJXJzcCksJXhtbTkKKwltb3ZhcHMJMHhhMCglcnNwKSwleG1tMTAKKwltb3ZhcHMJMHhiMCglcnNwKSwleG1tMTEKKwltb3ZhcHMJMHhjMCglcnNwKSwleG1tMTIKKwltb3ZhcHMJMHhkMCglcnNwKSwleG1tMTMKKwltb3ZhcHMJMHhlMCglcnNwKSwleG1tMTQKKwltb3ZhcHMJMHhmMCglcnNwKSwleG1tMTUKK19fXworJGNvZGUuPTw8X19fOworCWxlYQkkZnJhbWVfc2l6ZSglcnNwKSwlcnNwCisuTHh0c19lbmNfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlhZXNuaV94dHNfZW5jcnlwdCwuLWFlc25pX3h0c19lbmNyeXB0CitfX18KKworJGNvZGUuPTw8X19fOworLmdsb2JsCWFlc25pX3h0c19kZWNyeXB0CisudHlwZQlhZXNuaV94dHNfZGVjcnlwdCxcQGZ1bmN0aW9uLDYKKy5hbGlnbgkxNgorYWVzbmlfeHRzX2RlY3J5cHQ6CisJbGVhCS0kZnJhbWVfc2l6ZSglcnNwKSwlcnNwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3ZhcHMJJXhtbTYsMHg2MCglcnNwKQorCW1vdmFwcwkleG1tNywweDcwKCVyc3ApCisJbW92YXBzCSV4bW04LDB4ODAoJXJzcCkKKwltb3ZhcHMJJXhtbTksMHg5MCglcnNwKQorCW1vdmFwcwkleG1tMTAsMHhhMCglcnNwKQorCW1vdmFwcwkleG1tMTEsMHhiMCglcnNwKQorCW1vdmFwcwkleG1tMTIsMHhjMCglcnNwKQorCW1vdmFwcwkleG1tMTMsMHhkMCglcnNwKQorCW1vdmFwcwkleG1tMTQsMHhlMCglcnNwKQorCW1vdmFwcwkleG1tMTUsMHhmMCglcnNwKQorLkx4dHNfZGVjX2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3Z1cHMJKCRpdnApLEB0d2Vha1s1XQkJIyBsb2FkIGNsZWFyLXRleHQgdHdlYWsKKwltb3YJMjQwKCRrZXkyKSwkcm91bmRzCQkjIGtleTItPnJvdW5kcworCW1vdgkyNDAoJGtleSksJHJuZHNfCQkjIGtleTEtPnJvdW5kcworX19fCisJIyBnZW5lcmF0ZSB0aGUgdHdlYWsKKwkmYWVzbmlfZ2VuZXJhdGUxKCJlbmMiLCRrZXkyLCRyb3VuZHMsQHR3ZWFrWzVdKTsKKyRjb2RlLj08PF9fXzsKKwl4b3IJJWVheCwlZWF4CQkJIyBpZiAoJGxlbiUxNikgbGVuLT0xNjsKKwl0ZXN0CVwkMTUsJGxlbgorCXNldG56CSVhbAorCXNobAlcJDQsJXJheAorCXN1YgklcmF4LCRsZW4KKworCW1vdgkka2V5LCRrZXlfCQkJIyBiYWNrdXAgJGtleQorCW1vdgkkcm5kc18sJHJvdW5kcwkJCSMgYmFja3VwICRyb3VuZHMKKwltb3YJJGxlbiwkbGVuXwkJCSMgYmFja3VwICRsZW4KKwlhbmQJXCQtMTYsJGxlbgorCisJbW92ZHFhCS5MeHRzX21hZ2ljKCVyaXApLCR0d21hc2sKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKK19fXworICAgIGZvciAoJGk9MDskaTw0OyRpKyspIHsKKyAgICAkY29kZS49PDxfX187CisJcHNodWZkCVwkMHgxMywkdHd0bXAsJHR3cmVzCisJcHhvcgkkdHd0bXAsJHR3dG1wCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbJGldCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscQkxLCR0d2VhaworCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorX19fCisgICAgfQorJGNvZGUuPTw8X19fOworCXN1YglcJDE2KjYsJGxlbgorCWpjCS5MeHRzX2RlY19zaG9ydAorCisJc2hyCVwkMSwkcm91bmRzCisJc3ViCVwkMSwkcm91bmRzCisJbW92CSRyb3VuZHMsJHJuZHNfCisJam1wCS5MeHRzX2RlY19ncmFuZGxvb3AKKworLmFsaWduCTE2CisuTHh0c19kZWNfZ3JhbmRsb29wOgorCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzRdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscSAxLCR0d2VhaworCW1vdmRxdQlgMTYqMGAoJGlucCksJGlub3V0MAkJIyBsb2FkIGlucHV0CisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCW1vdmRxdQlgMTYqMWAoJGlucCksJGlub3V0MQorCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorCisJbW92ZHF1CWAxNioyYCgkaW5wKSwkaW5vdXQyCisJcHhvcglAdHdlYWtbMF0sJGlub3V0MAkJIyBpbnB1dF49dHdlYWsKKwltb3ZkcXUJYDE2KjNgKCRpbnApLCRpbm91dDMKKwlweG9yCUB0d2Vha1sxXSwkaW5vdXQxCisJbW92ZHF1CWAxNio0YCgkaW5wKSwkaW5vdXQ0CisJcHhvcglAdHdlYWtbMl0sJGlub3V0MgorCW1vdmRxdQlgMTYqNWAoJGlucCksJGlub3V0NQorCWxlYQlgMTYqNmAoJGlucCksJGlucAorCXB4b3IJQHR3ZWFrWzNdLCRpbm91dDMKKwkkbW92a2V5CQkoJGtleV8pLCRybmRrZXkwCisJcHhvcglAdHdlYWtbNF0sJGlub3V0NAorCXB4b3IJQHR3ZWFrWzVdLCRpbm91dDUKKworCSMgaW5saW5lIF9hZXNuaV9kZWNyeXB0NiBhbmQgaW50ZXJsZWF2ZSBmaXJzdCBhbmQgbGFzdCByb3VuZHMKKwkjIHdpdGggb3duIGNvZGUuLi4KKwkkbW92a2V5CQkxNigka2V5XyksJHJuZGtleTEKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQwCisJcHhvcgkJJHJuZGtleTAsJGlub3V0MQorCSBtb3ZkcWEJQHR3ZWFrWzBdLGAxNiowYCglcnNwKQkJIyBwdXQgYXNpZGUgdHdlYWtzCisJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQwCisJbGVhCQkzMigka2V5XyksJGtleQorCXB4b3IJCSRybmRrZXkwLCRpbm91dDIKKwkgbW92ZHFhCUB0d2Vha1sxXSxgMTYqMWAoJXJzcCkKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDEKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQzCisJIG1vdmRxYQlAdHdlYWtbMl0sYDE2KjJgKCVyc3ApCisJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NAorCSBtb3ZkcWEJQHR3ZWFrWzNdLGAxNiozYCglcnNwKQorCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0MworCXB4b3IJCSRybmRrZXkwLCRpbm91dDUKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlkZWMJCSRyb3VuZHMKKwkgbW92ZHFhCUB0d2Vha1s0XSxgMTYqNGAoJXJzcCkKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDQKKwkgbW92ZHFhCUB0d2Vha1s1XSxgMTYqNWAoJXJzcCkKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDUKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAKKwlqbXAJCS5MeHRzX2RlY19sb29wNl9lbnRlcgorCisuYWxpZ24JMTYKKy5MeHRzX2RlY19sb29wNjoKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDAKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDEKKwlkZWMJCSRyb3VuZHMKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDIKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDMKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDQKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDUKKy5MeHRzX2RlY19sb29wNl9lbnRlcjoKKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQorCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0MAorCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0MQorCWxlYQkJMzIoJGtleSksJGtleQorCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0MgorCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0MworCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0NAorCWFlc2RlYwkJJHJuZGtleTAsJGlub3V0NQorCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorCWpuegkJLkx4dHNfZGVjX2xvb3A2CisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwlwYWRkcQlAdHdlYWtbNV0sQHR3ZWFrWzVdCQkjIHBzbGxxCTEsJHR3ZWFrCisJIGFlc2RlYwkJJHJuZGtleTEsJGlub3V0MAorCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkgYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQxCisJcGNtcGd0ZAlAdHdlYWtbNV0sJHR3dG1wCQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisJIGFlc2RlYwkJJHJuZGtleTEsJGlub3V0MgorCXB4b3IJJHR3cmVzLEB0d2Vha1s1XQorCSBhZXNkZWMJCSRybmRrZXkxLCRpbm91dDMKKwkgYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQ0CisJIGFlc2RlYwkJJHJuZGtleTEsJGlub3V0NQorCSAkbW92a2V5CTE2KCRrZXkpLCRybmRrZXkxCisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwltb3ZkcWEJQHR3ZWFrWzVdLEB0d2Vha1swXQorCXBhZGRxCUB0d2Vha1s1XSxAdHdlYWtbNV0JCSMgcHNsbHEJMSwkdHdlYWsKKwkgYWVzZGVjCQkkcm5ka2V5MCwkaW5vdXQwCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSBhZXNkZWMJCSRybmRrZXkwLCRpbm91dDEKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCSBhZXNkZWMJCSRybmRrZXkwLCRpbm91dDIKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKwkgYWVzZGVjCQkkcm5ka2V5MCwkaW5vdXQzCisJIGFlc2RlYwkJJHJuZGtleTAsJGlub3V0NAorCSBhZXNkZWMJCSRybmRrZXkwLCRpbm91dDUKKwkgJG1vdmtleQkzMigka2V5KSwkcm5ka2V5MAorCisJcHNodWZkCVwkMHgxMywkdHd0bXAsJHR3cmVzCisJcHhvcgkkdHd0bXAsJHR3dG1wCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMV0KKwlwYWRkcQlAdHdlYWtbNV0sQHR3ZWFrWzVdCQkjIHBzbGxxCTEsJHR3ZWFrCisJIGFlc2RlYwkJJHJuZGtleTEsJGlub3V0MAorCXBhbmQJJHR3bWFzaywkdHdyZXMJCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwkgYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQxCisJcGNtcGd0ZAlAdHdlYWtbNV0sJHR3dG1wCQkjIGJyb2FkY2F0IHVwcGVyIGJpdHMKKwkgYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkkdHdyZXMsQHR3ZWFrWzVdCisJIGFlc2RlYwkJJHJuZGtleTEsJGlub3V0MworCSBhZXNkZWMJCSRybmRrZXkxLCRpbm91dDQKKwkgYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQ1CisKKwlwc2h1ZmQJXCQweDEzLCR0d3RtcCwkdHdyZXMKKwlweG9yCSR0d3RtcCwkdHd0bXAKKwltb3ZkcWEJQHR3ZWFrWzVdLEB0d2Vha1syXQorCXBhZGRxCUB0d2Vha1s1XSxAdHdlYWtbNV0JCSMgcHNsbHEJMSwkdHdlYWsKKwkgYWVzZGVjbGFzdAkkcm5ka2V5MCwkaW5vdXQwCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSBhZXNkZWNsYXN0CSRybmRrZXkwLCRpbm91dDEKKwlwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAJCSMgYnJvYWRjYXQgdXBwZXIgYml0cworCSBhZXNkZWNsYXN0CSRybmRrZXkwLCRpbm91dDIKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKwkgYWVzZGVjbGFzdAkkcm5ka2V5MCwkaW5vdXQzCisJIGFlc2RlY2xhc3QJJHJuZGtleTAsJGlub3V0NAorCSBhZXNkZWNsYXN0CSRybmRrZXkwLCRpbm91dDUKKworCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCXB4b3IJJHR3dG1wLCR0d3RtcAorCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzNdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscQkxLCR0d2VhaworCSB4b3JwcwlgMTYqMGAoJXJzcCksJGlub3V0MAkJIyBvdXRwdXRePXR3ZWFrCisJcGFuZAkkdHdtYXNrLCR0d3JlcwkJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCSB4b3JwcwlgMTYqMWAoJXJzcCksJGlub3V0MQorCXBjbXBndGQJQHR3ZWFrWzVdLCR0d3RtcAkJIyBicm9hZGNhdCB1cHBlciBiaXRzCisJcHhvcgkkdHdyZXMsQHR3ZWFrWzVdCisKKwl4b3JwcwlgMTYqMmAoJXJzcCksJGlub3V0MgorCW1vdnVwcwkkaW5vdXQwLGAxNiowYCgkb3V0KQkJIyB3cml0ZSBvdXRwdXQKKwl4b3JwcwlgMTYqM2AoJXJzcCksJGlub3V0MworCW1vdnVwcwkkaW5vdXQxLGAxNioxYCgkb3V0KQorCXhvcnBzCWAxNio0YCglcnNwKSwkaW5vdXQ0CisJbW92dXBzCSRpbm91dDIsYDE2KjJgKCRvdXQpCisJeG9ycHMJYDE2KjVgKCVyc3ApLCRpbm91dDUKKwltb3Z1cHMJJGlub3V0MyxgMTYqM2AoJG91dCkKKwltb3YJJHJuZHNfLCRyb3VuZHMJCQkjIHJlc3RvcmUgJHJvdW5kcworCW1vdnVwcwkkaW5vdXQ0LGAxNio0YCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ1LGAxNio1YCgkb3V0KQorCWxlYQlgMTYqNmAoJG91dCksJG91dAorCXN1YglcJDE2KjYsJGxlbgorCWpuYwkuTHh0c19kZWNfZ3JhbmRsb29wCisKKwlsZWEJMygkcm91bmRzLCRyb3VuZHMpLCRyb3VuZHMJIyByZXN0b3JlIG9yaWdpbmFsIHZhbHVlCisJbW92CSRrZXlfLCRrZXkJCQkjIHJlc3RvcmUgJGtleQorCW1vdgkkcm91bmRzLCRybmRzXwkJCSMgYmFja3VwICRyb3VuZHMKKworLkx4dHNfZGVjX3Nob3J0OgorCWFkZAlcJDE2KjYsJGxlbgorCWp6CS5MeHRzX2RlY19kb25lCisKKwljbXAJXCQweDIwLCRsZW4KKwlqYgkuTHh0c19kZWNfb25lCisJamUJLkx4dHNfZGVjX3R3bworCisJY21wCVwkMHg0MCwkbGVuCisJamIJLkx4dHNfZGVjX3RocmVlCisJamUJLkx4dHNfZGVjX2ZvdXIKKworCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzRdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscSAxLCR0d2VhaworCSBtb3ZkcXUJKCRpbnApLCRpbm91dDAKKwlwYW5kCSR0d21hc2ssJHR3cmVzCQkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJIG1vdmRxdQkxNioxKCRpbnApLCRpbm91dDEKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKworCW1vdmRxdQkxNioyKCRpbnApLCRpbm91dDIKKwlweG9yCUB0d2Vha1swXSwkaW5vdXQwCisJbW92ZHF1CTE2KjMoJGlucCksJGlub3V0MworCXB4b3IJQHR3ZWFrWzFdLCRpbm91dDEKKwltb3ZkcXUJMTYqNCgkaW5wKSwkaW5vdXQ0CisJbGVhCTE2KjUoJGlucCksJGlucAorCXB4b3IJQHR3ZWFrWzJdLCRpbm91dDIKKwlweG9yCUB0d2Vha1szXSwkaW5vdXQzCisJcHhvcglAdHdlYWtbNF0sJGlub3V0NAorCisJY2FsbAlfYWVzbmlfZGVjcnlwdDYKKworCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCisJeG9ycHMJQHR3ZWFrWzFdLCRpbm91dDEKKwl4b3JwcwlAdHdlYWtbMl0sJGlub3V0MgorCW1vdmRxdQkkaW5vdXQwLCgkb3V0KQorCXhvcnBzCUB0d2Vha1szXSwkaW5vdXQzCisJbW92ZHF1CSRpbm91dDEsMTYqMSgkb3V0KQorCXhvcnBzCUB0d2Vha1s0XSwkaW5vdXQ0CisJbW92ZHF1CSRpbm91dDIsMTYqMigkb3V0KQorCSBweG9yCQkkdHd0bXAsJHR3dG1wCisJbW92ZHF1CSRpbm91dDMsMTYqMygkb3V0KQorCSBwY21wZ3RkCUB0d2Vha1s1XSwkdHd0bXAKKwltb3ZkcXUJJGlub3V0NCwxNio0KCRvdXQpCisJbGVhCTE2KjUoJG91dCksJG91dAorCSBwc2h1ZmQJCVwkMHgxMywkdHd0bXAsQHR3ZWFrWzFdCSMgJHR3cmVzCisJYW5kCVwkMTUsJGxlbl8KKwlqegkuTHh0c19kZWNfcmV0CisKKwltb3ZkcWEJQHR3ZWFrWzVdLEB0d2Vha1swXQorCXBhZGRxCUB0d2Vha1s1XSxAdHdlYWtbNV0JCSMgcHNsbHEgMSwkdHdlYWsKKwlwYW5kCSR0d21hc2ssQHR3ZWFrWzFdCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwlweG9yCUB0d2Vha1s1XSxAdHdlYWtbMV0KKwlqbXAJLkx4dHNfZGVjX2RvbmUyCisKKy5hbGlnbgkxNgorLkx4dHNfZGVjX29uZToKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwlsZWEJMTYqMSgkaW5wKSwkaW5wCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImRlYyIsJGtleSwkcm91bmRzKTsKKyRjb2RlLj08PF9fXzsKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdmRxYQlAdHdlYWtbMV0sQHR3ZWFrWzBdCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92ZHFhCUB0d2Vha1syXSxAdHdlYWtbMV0KKwlsZWEJMTYqMSgkb3V0KSwkb3V0CisJam1wCS5MeHRzX2RlY19kb25lCisKKy5hbGlnbgkxNgorLkx4dHNfZGVjX3R3bzoKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwltb3Z1cHMJMTYoJGlucCksJGlub3V0MQorCWxlYQkzMigkaW5wKSwkaW5wCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MQorCisJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKworCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCisJbW92ZHFhCUB0d2Vha1syXSxAdHdlYWtbMF0KKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MQorCW1vdmRxYQlAdHdlYWtbM10sQHR3ZWFrWzFdCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMTYqMSgkb3V0KQorCWxlYQkxNioyKCRvdXQpLCRvdXQKKwlqbXAJLkx4dHNfZGVjX2RvbmUKKworLmFsaWduCTE2CisuTHh0c19kZWNfdGhyZWU6CisJbW92dXBzCSgkaW5wKSwkaW5vdXQwCisJbW92dXBzCTE2KjEoJGlucCksJGlub3V0MQorCW1vdnVwcwkxNioyKCRpbnApLCRpbm91dDIKKwlsZWEJMTYqMygkaW5wKSwkaW5wCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MQorCXhvcnBzCUB0d2Vha1syXSwkaW5vdXQyCisKKwljYWxsCV9hZXNuaV9kZWNyeXB0MworCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwltb3ZkcWEJQHR3ZWFrWzNdLEB0d2Vha1swXQorCXhvcnBzCUB0d2Vha1sxXSwkaW5vdXQxCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMV0KKwl4b3JwcwlAdHdlYWtbMl0sJGlub3V0MgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDE2KjEoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwxNioyKCRvdXQpCisJbGVhCTE2KjMoJG91dCksJG91dAorCWptcAkuTHh0c19kZWNfZG9uZQorCisuYWxpZ24JMTYKKy5MeHRzX2RlY19mb3VyOgorCXBzaHVmZAlcJDB4MTMsJHR3dG1wLCR0d3JlcworCW1vdmRxYQlAdHdlYWtbNV0sQHR3ZWFrWzRdCisJcGFkZHEJQHR3ZWFrWzVdLEB0d2Vha1s1XQkJIyBwc2xscSAxLCR0d2VhaworCSBtb3Z1cHMJKCRpbnApLCRpbm91dDAKKwlwYW5kCSR0d21hc2ssJHR3cmVzCQkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJIG1vdnVwcwkxNioxKCRpbnApLCRpbm91dDEKKwlweG9yCSR0d3JlcyxAdHdlYWtbNV0KKworCW1vdnVwcwkxNioyKCRpbnApLCRpbm91dDIKKwl4b3JwcwlAdHdlYWtbMF0sJGlub3V0MAorCW1vdnVwcwkxNiozKCRpbnApLCRpbm91dDMKKwlsZWEJMTYqNCgkaW5wKSwkaW5wCisJeG9ycHMJQHR3ZWFrWzFdLCRpbm91dDEKKwl4b3JwcwlAdHdlYWtbMl0sJGlub3V0MgorCXhvcnBzCUB0d2Vha1szXSwkaW5vdXQzCisKKwljYWxsCV9hZXNuaV9kZWNyeXB0NAorCisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwltb3ZkcWEJQHR3ZWFrWzRdLEB0d2Vha1swXQorCXhvcnBzCUB0d2Vha1sxXSwkaW5vdXQxCisJbW92ZHFhCUB0d2Vha1s1XSxAdHdlYWtbMV0KKwl4b3JwcwlAdHdlYWtbMl0sJGlub3V0MgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCXhvcnBzCUB0d2Vha1szXSwkaW5vdXQzCisJbW92dXBzCSRpbm91dDEsMTYqMSgkb3V0KQorCW1vdnVwcwkkaW5vdXQyLDE2KjIoJG91dCkKKwltb3Z1cHMJJGlub3V0MywxNiozKCRvdXQpCisJbGVhCTE2KjQoJG91dCksJG91dAorCWptcAkuTHh0c19kZWNfZG9uZQorCisuYWxpZ24JMTYKKy5MeHRzX2RlY19kb25lOgorCWFuZAlcJDE1LCRsZW5fCisJanoJLkx4dHNfZGVjX3JldAorLkx4dHNfZGVjX2RvbmUyOgorCW1vdgkkbGVuXywkbGVuCisJbW92CSRrZXlfLCRrZXkJCQkjIHJlc3RvcmUgJGtleQorCW1vdgkkcm5kc18sJHJvdW5kcwkJCSMgcmVzdG9yZSAkcm91bmRzCisKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAKKwl4b3JwcwlAdHdlYWtbMV0sJGlub3V0MAorX19fCisJJmFlc25pX2dlbmVyYXRlMSgiZGVjIiwka2V5LCRyb3VuZHMpOworJGNvZGUuPTw8X19fOworCXhvcnBzCUB0d2Vha1sxXSwkaW5vdXQwCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisKKy5MeHRzX2RlY19zdGVhbDoKKwltb3Z6YgkxNigkaW5wKSwlZWF4CQkJIyBib3Jyb3cgJHJvdW5kcyAuLi4KKwltb3Z6YgkoJG91dCksJWVjeAkJCSMgLi4uIGFuZCAka2V5CisJbGVhCTEoJGlucCksJGlucAorCW1vdgklYWwsKCRvdXQpCisJbW92CSVjbCwxNigkb3V0KQorCWxlYQkxKCRvdXQpLCRvdXQKKwlzdWIJXCQxLCRsZW4KKwlqbnoJLkx4dHNfZGVjX3N0ZWFsCisKKwlzdWIJJGxlbl8sJG91dAkJCSMgcmV3aW5kICRvdXQKKwltb3YJJGtleV8sJGtleQkJCSMgcmVzdG9yZSAka2V5CisJbW92CSRybmRzXywkcm91bmRzCQkJIyByZXN0b3JlICRyb3VuZHMKKworCW1vdnVwcwkoJG91dCksJGlub3V0MAorCXhvcnBzCUB0d2Vha1swXSwkaW5vdXQwCitfX18KKwkmYWVzbmlfZ2VuZXJhdGUxKCJkZWMiLCRrZXksJHJvdW5kcyk7CiskY29kZS49PDxfX187CisJeG9ycHMJQHR3ZWFrWzBdLCRpbm91dDAKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKworLkx4dHNfZGVjX3JldDoKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDYwKCVyc3ApLCV4bW02CisJbW92YXBzCTB4NzAoJXJzcCksJXhtbTcKKwltb3ZhcHMJMHg4MCglcnNwKSwleG1tOAorCW1vdmFwcwkweDkwKCVyc3ApLCV4bW05CisJbW92YXBzCTB4YTAoJXJzcCksJXhtbTEwCisJbW92YXBzCTB4YjAoJXJzcCksJXhtbTExCisJbW92YXBzCTB4YzAoJXJzcCksJXhtbTEyCisJbW92YXBzCTB4ZDAoJXJzcCksJXhtbTEzCisJbW92YXBzCTB4ZTAoJXJzcCksJXhtbTE0CisJbW92YXBzCTB4ZjAoJXJzcCksJXhtbTE1CitfX18KKyRjb2RlLj08PF9fXzsKKwlsZWEJJGZyYW1lX3NpemUoJXJzcCksJXJzcAorLkx4dHNfZGVjX2VwaWxvZ3VlOgorCXJldAorLnNpemUJYWVzbmlfeHRzX2RlY3J5cHQsLi1hZXNuaV94dHNfZGVjcnlwdAorX19fCit9IH19CisMCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCAkUFJFRklYX2NiY19lbmNyeXB0IChjb25zdCB2b2lkICppbnAsIHZvaWQgKm91dCwKKyMJCQkgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorIwkJCSAgICB1bnNpZ25lZCBjaGFyICppdnAsY29uc3QgaW50IGVuYyk7Cit7CitteSAkcmVzZXJ2ZWQgPSAkd2luNjQ/MHg0MDotMHgxODsJIyB1c2VkIGluIGRlY3J5cHQKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke1BSRUZJWH1fY2JjX2VuY3J5cHQKKy50eXBlCSR7UFJFRklYfV9jYmNfZW5jcnlwdCxcQGZ1bmN0aW9uLDYKKy5hbGlnbgkxNgorJHtQUkVGSVh9X2NiY19lbmNyeXB0OgorCXRlc3QJJGxlbiwkbGVuCQkjIGNoZWNrIGxlbmd0aAorCWp6CS5MY2JjX3JldAorCisJbW92CTI0MCgka2V5KSwkcm5kc18JIyBrZXktPnJvdW5kcworCW1vdgkka2V5LCRrZXlfCQkjIGJhY2t1cCAka2V5CisJdGVzdAklcjlkLCVyOWQJCSMgNnRoIGFyZ3VtZW50CisJanoJLkxjYmNfZGVjcnlwdAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDQkMgRU5DUllQVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCisJbW92dXBzCSgkaXZwKSwkaW5vdXQwCQkjIGxvYWQgaXYgYXMgaW5pdGlhbCBzdGF0ZQorCW1vdgkkcm5kc18sJHJvdW5kcworCWNtcAlcJDE2LCRsZW4KKwlqYgkuTGNiY19lbmNfdGFpbAorCXN1YglcJDE2LCRsZW4KKwlqbXAJLkxjYmNfZW5jX2xvb3AKKy5hbGlnbgkxNgorLkxjYmNfZW5jX2xvb3A6CisJbW92dXBzCSgkaW5wKSwkaW5vdXQxCQkjIGxvYWQgaW5wdXQKKwlsZWEJMTYoJGlucCksJGlucAorCSN4b3JwcwkkaW5vdXQxLCRpbm91dDAKK19fXworCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzLCRpbm91dDAsJGlub3V0MSk7CiskY29kZS49PDxfX187CisJbW92CSRybmRzXywkcm91bmRzCQkjIHJlc3RvcmUgJHJvdW5kcworCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUgJGtleQorCW1vdnVwcwkkaW5vdXQwLDAoJG91dCkJCSMgc3RvcmUgb3V0cHV0CisJbGVhCTE2KCRvdXQpLCRvdXQKKwlzdWIJXCQxNiwkbGVuCisJam5jCS5MY2JjX2VuY19sb29wCisJYWRkCVwkMTYsJGxlbgorCWpuegkuTGNiY19lbmNfdGFpbAorCW1vdnVwcwkkaW5vdXQwLCgkaXZwKQorCWptcAkuTGNiY19yZXQKKworLkxjYmNfZW5jX3RhaWw6CisJbW92CSRsZW4sJXJjeAkjIHphcHMgJGtleQorCXhjaGcJJGlucCwkb3V0CSMgJGlucCBpcyAlcnNpIGFuZCAkb3V0IGlzICVyZGkgbm93CisJLmxvbmcJMHg5MDY2QTRGMwkjIHJlcCBtb3ZzYgorCW1vdglcJDE2LCVlY3gJIyB6ZXJvIHRhaWwKKwlzdWIJJGxlbiwlcmN4CisJeG9yCSVlYXgsJWVheAorCS5sb25nCTB4OTA2NkFBRjMJIyByZXAgc3Rvc2IKKwlsZWEJLTE2KCVyZGkpLCVyZGkJIyByZXdpbmQgJG91dCBieSAxIGJsb2NrCisJbW92CSRybmRzXywkcm91bmRzCSMgcmVzdG9yZSAkcm91bmRzCisJbW92CSVyZGksJXJzaQkjICRpbnAgYW5kICRvdXQgYXJlIHRoZSBzYW1lCisJbW92CSRrZXlfLCRrZXkJIyByZXN0b3JlICRrZXkKKwl4b3IJJGxlbiwkbGVuCSMgbGVuPTE2CisJam1wCS5MY2JjX2VuY19sb29wCSMgb25lIG1vcmUgc3BpbgorDCMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0JDIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworLmFsaWduCTE2CisuTGNiY19kZWNyeXB0OgorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbGVhCS0weDU4KCVyc3ApLCVyc3AKKwltb3ZhcHMJJXhtbTYsKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MTAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsMHgyMCglcnNwKQorCW1vdmFwcwkleG1tOSwweDMwKCVyc3ApCisuTGNiY19kZWNyeXB0X2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3Z1cHMJKCRpdnApLCRpdgorCW1vdgkkcm5kc18sJHJvdW5kcworCWNtcAlcJDB4NzAsJGxlbgorCWpiZQkuTGNiY19kZWNfdGFpbAorCXNocglcJDEsJHJuZHNfCisJc3ViCVwkMHg3MCwkbGVuCisJbW92CSRybmRzXywkcm91bmRzCisJbW92YXBzCSRpdiwkcmVzZXJ2ZWQoJXJzcCkKKwlqbXAJLkxjYmNfZGVjX2xvb3A4X2VudGVyCisuYWxpZ24JMTYKKy5MY2JjX2RlY19sb29wODoKKwltb3ZhcHMJJHJuZGtleTAsJHJlc2VydmVkKCVyc3ApCSMgc2F2ZSBJVgorCW1vdnVwcwkkaW5vdXQ3LCgkb3V0KQorCWxlYQkweDEwKCRvdXQpLCRvdXQKKy5MY2JjX2RlY19sb29wOF9lbnRlcjoKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwltb3Z1cHMJKCRpbnApLCRpbm91dDAJCQkjIGxvYWQgaW5wdXQKKwltb3Z1cHMJMHgxMCgkaW5wKSwkaW5vdXQxCisJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKworCWxlYQkJMzIoJGtleSksJGtleQorCW1vdmRxdQkweDIwKCRpbnApLCRpbm91dDIKKwl4b3JwcwkJJHJuZGtleTAsJGlub3V0MAorCW1vdmRxdQkweDMwKCRpbnApLCRpbm91dDMKKwl4b3JwcwkJJHJuZGtleTAsJGlub3V0MQorCW1vdmRxdQkweDQwKCRpbnApLCRpbm91dDQKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDAKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQyCisJbW92ZHF1CTB4NTAoJGlucCksJGlub3V0NQorCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0MQorCXB4b3IJCSRybmRrZXkwLCRpbm91dDMKKwltb3ZkcXUJMHg2MCgkaW5wKSwkaW5vdXQ2CisJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQyCisJcHhvcgkJJHJuZGtleTAsJGlub3V0NAorCW1vdmRxdQkweDcwKCRpbnApLCRpbm91dDcKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDMKKwlweG9yCQkkcm5ka2V5MCwkaW5vdXQ1CisJZGVjCQkkcm91bmRzCisJYWVzZGVjCQkkcm5ka2V5MSwkaW5vdXQ0CisJcHhvcgkJJHJuZGtleTAsJGlub3V0NgorCWFlc2RlYwkJJHJuZGtleTEsJGlub3V0NQorCXB4b3IJCSRybmRrZXkwLCRpbm91dDcKKwkkbW92a2V5CQkoJGtleSksJHJuZGtleTAKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDYKKwlhZXNkZWMJCSRybmRrZXkxLCRpbm91dDcKKwkkbW92a2V5CQkxNigka2V5KSwkcm5ka2V5MQorCisJY2FsbAkJLkxkZWNfbG9vcDhfZW50ZXIKKworCW1vdnVwcwkoJGlucCksJHJuZGtleTEJCSMgcmUtbG9hZCBpbnB1dAorCW1vdnVwcwkweDEwKCRpbnApLCRybmRrZXkwCisJeG9ycHMJJHJlc2VydmVkKCVyc3ApLCRpbm91dDAJIyBePSBJVgorCXhvcnBzCSRybmRrZXkxLCRpbm91dDEKKwltb3Z1cHMJMHgyMCgkaW5wKSwkcm5ka2V5MQorCXhvcnBzCSRybmRrZXkwLCRpbm91dDIKKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MAorCXhvcnBzCSRybmRrZXkxLCRpbm91dDMKKwltb3Z1cHMJMHg0MCgkaW5wKSwkcm5ka2V5MQorCXhvcnBzCSRybmRrZXkwLCRpbm91dDQKKwltb3Z1cHMJMHg1MCgkaW5wKSwkcm5ka2V5MAorCXhvcnBzCSRybmRrZXkxLCRpbm91dDUKKwltb3Z1cHMJMHg2MCgkaW5wKSwkcm5ka2V5MQorCXhvcnBzCSRybmRrZXkwLCRpbm91dDYKKwltb3Z1cHMJMHg3MCgkaW5wKSwkcm5ka2V5MAkjIElWCisJeG9ycHMJJHJuZGtleTEsJGlub3V0NworCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQorCW1vdgkkcm5kc18sJHJvdW5kcwkJIyByZXN0b3JlICRyb3VuZHMKKwltb3Z1cHMJJGlub3V0NCwweDQwKCRvdXQpCisJbW92CSRrZXlfLCRrZXkJCSMgcmVzdG9yZSAka2V5CisJbW92dXBzCSRpbm91dDUsMHg1MCgkb3V0KQorCWxlYQkweDgwKCRpbnApLCRpbnAKKwltb3Z1cHMJJGlub3V0NiwweDYwKCRvdXQpCisJbGVhCTB4NzAoJG91dCksJG91dAorCXN1YglcJDB4ODAsJGxlbgorCWphCS5MY2JjX2RlY19sb29wOAorCisJbW92YXBzCSRpbm91dDcsJGlub3V0MAorCW1vdmFwcwkkcm5ka2V5MCwkaXYKKwlhZGQJXCQweDcwLCRsZW4KKwlqbGUJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbGVhCTEoJHJuZHNfLCRybmRzXyksJHJvdW5kcworCWxlYQkweDEwKCRvdXQpLCRvdXQKKy5MY2JjX2RlY190YWlsOgorCW1vdnVwcwkoJGlucCksJGlub3V0MAorCW1vdmFwcwkkaW5vdXQwLCRpbjAKKwljbXAJXCQweDEwLCRsZW4KKwlqYmUJLkxjYmNfZGVjX29uZQorCisJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQorCW1vdmFwcwkkaW5vdXQxLCRpbjEKKwljbXAJXCQweDIwLCRsZW4KKwlqYmUJLkxjYmNfZGVjX3R3bworCisJbW92dXBzCTB4MjAoJGlucCksJGlub3V0MgorCW1vdmFwcwkkaW5vdXQyLCRpbjIKKwljbXAJXCQweDMwLCRsZW4KKwlqYmUJLkxjYmNfZGVjX3RocmVlCisKKwltb3Z1cHMJMHgzMCgkaW5wKSwkaW5vdXQzCisJY21wCVwkMHg0MCwkbGVuCisJamJlCS5MY2JjX2RlY19mb3VyCisKKwltb3Z1cHMJMHg0MCgkaW5wKSwkaW5vdXQ0CisJY21wCVwkMHg1MCwkbGVuCisJamJlCS5MY2JjX2RlY19maXZlCisKKwltb3Z1cHMJMHg1MCgkaW5wKSwkaW5vdXQ1CisJY21wCVwkMHg2MCwkbGVuCisJamJlCS5MY2JjX2RlY19zaXgKKworCW1vdnVwcwkweDYwKCRpbnApLCRpbm91dDYKKwltb3ZhcHMJJGl2LCRyZXNlcnZlZCglcnNwKQkjIHNhdmUgSVYKKwljYWxsCV9hZXNuaV9kZWNyeXB0OAorCW1vdnVwcwkoJGlucCksJHJuZGtleTEKKwltb3Z1cHMJMHgxMCgkaW5wKSwkcm5ka2V5MAorCXhvcnBzCSRyZXNlcnZlZCglcnNwKSwkaW5vdXQwCSMgXj0gSVYKKwl4b3Jwcwkkcm5ka2V5MSwkaW5vdXQxCisJbW92dXBzCTB4MjAoJGlucCksJHJuZGtleTEKKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQyCisJbW92dXBzCTB4MzAoJGlucCksJHJuZGtleTAKKwl4b3Jwcwkkcm5ka2V5MSwkaW5vdXQzCisJbW92dXBzCTB4NDAoJGlucCksJHJuZGtleTEKKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQ0CisJbW92dXBzCTB4NTAoJGlucCksJHJuZGtleTAKKwl4b3Jwcwkkcm5ka2V5MSwkaW5vdXQ1CisJbW92dXBzCTB4NjAoJGlucCksJGl2CQkjIElWCisJeG9ycHMJJHJuZGtleTAsJGlub3V0NgorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92dXBzCSRpbm91dDMsMHgzMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQ0LDB4NDAoJG91dCkKKwltb3Z1cHMJJGlub3V0NSwweDUwKCRvdXQpCisJbGVhCTB4NjAoJG91dCksJG91dAorCW1vdmFwcwkkaW5vdXQ2LCRpbm91dDAKKwlzdWIJXCQweDcwLCRsZW4KKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCisuYWxpZ24JMTYKKy5MY2JjX2RlY19vbmU6CitfX18KKwkmYWVzbmlfZ2VuZXJhdGUxKCJkZWMiLCRrZXksJHJvdW5kcyk7CiskY29kZS49PDxfX187CisJeG9ycHMJJGl2LCRpbm91dDAKKwltb3ZhcHMJJGluMCwkaXYKKwlzdWIJXCQweDEwLCRsZW4KKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCisuYWxpZ24JMTYKKy5MY2JjX2RlY190d286CisJeG9ycHMJJGlub3V0MiwkaW5vdXQyCisJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKwl4b3JwcwkkaXYsJGlub3V0MAorCXhvcnBzCSRpbjAsJGlub3V0MQorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCW1vdmFwcwkkaW4xLCRpdgorCW1vdmFwcwkkaW5vdXQxLCRpbm91dDAKKwlsZWEJMHgxMCgkb3V0KSwkb3V0CisJc3ViCVwkMHgyMCwkbGVuCisJam1wCS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAorLmFsaWduCTE2CisuTGNiY19kZWNfdGhyZWU6CisJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKwl4b3JwcwkkaXYsJGlub3V0MAorCXhvcnBzCSRpbjAsJGlub3V0MQorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCXhvcnBzCSRpbjEsJGlub3V0MgorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwltb3ZhcHMJJGluMiwkaXYKKwltb3ZhcHMJJGlub3V0MiwkaW5vdXQwCisJbGVhCTB4MjAoJG91dCksJG91dAorCXN1YglcJDB4MzAsJGxlbgorCWptcAkuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQKKy5hbGlnbgkxNgorLkxjYmNfZGVjX2ZvdXI6CisJY2FsbAlfYWVzbmlfZGVjcnlwdDQKKwl4b3JwcwkkaXYsJGlub3V0MAorCW1vdnVwcwkweDMwKCRpbnApLCRpdgorCXhvcnBzCSRpbjAsJGlub3V0MQorCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorCXhvcnBzCSRpbjEsJGlub3V0MgorCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKwl4b3JwcwkkaW4yLCRpbm91dDMKKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisJbW92YXBzCSRpbm91dDMsJGlub3V0MAorCWxlYQkweDMwKCRvdXQpLCRvdXQKKwlzdWIJXCQweDQwLCRsZW4KKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCisuYWxpZ24JMTYKKy5MY2JjX2RlY19maXZlOgorCXhvcnBzCSRpbm91dDUsJGlub3V0NQorCWNhbGwJX2Flc25pX2RlY3J5cHQ2CisJbW92dXBzCTB4MTAoJGlucCksJHJuZGtleTEKKwltb3Z1cHMJMHgyMCgkaW5wKSwkcm5ka2V5MAorCXhvcnBzCSRpdiwkaW5vdXQwCisJeG9ycHMJJGluMCwkaW5vdXQxCisJeG9ycHMJJHJuZGtleTEsJGlub3V0MgorCW1vdnVwcwkweDMwKCRpbnApLCRybmRrZXkxCisJeG9ycHMJJHJuZGtleTAsJGlub3V0MworCW1vdnVwcwkweDQwKCRpbnApLCRpdgorCXhvcnBzCSRybmRrZXkxLCRpbm91dDQKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwltb3Z1cHMJJGlub3V0MSwweDEwKCRvdXQpCisJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKwlsZWEJMHg0MCgkb3V0KSwkb3V0CisJbW92YXBzCSRpbm91dDQsJGlub3V0MAorCXN1YglcJDB4NTAsJGxlbgorCWptcAkuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQKKy5hbGlnbgkxNgorLkxjYmNfZGVjX3NpeDoKKwljYWxsCV9hZXNuaV9kZWNyeXB0NgorCW1vdnVwcwkweDEwKCRpbnApLCRybmRrZXkxCisJbW92dXBzCTB4MjAoJGlucCksJHJuZGtleTAKKwl4b3JwcwkkaXYsJGlub3V0MAorCXhvcnBzCSRpbjAsJGlub3V0MQorCXhvcnBzCSRybmRrZXkxLCRpbm91dDIKKwltb3Z1cHMJMHgzMCgkaW5wKSwkcm5ka2V5MQorCXhvcnBzCSRybmRrZXkwLCRpbm91dDMKKwltb3Z1cHMJMHg0MCgkaW5wKSwkcm5ka2V5MAorCXhvcnBzCSRybmRrZXkxLCRpbm91dDQKKwltb3Z1cHMJMHg1MCgkaW5wKSwkaXYKKwl4b3Jwcwkkcm5ka2V5MCwkaW5vdXQ1CisJbW92dXBzCSRpbm91dDAsKCRvdXQpCisJbW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCisJbW92dXBzCSRpbm91dDQsMHg0MCgkb3V0KQorCWxlYQkweDUwKCRvdXQpLCRvdXQKKwltb3ZhcHMJJGlub3V0NSwkaW5vdXQwCisJc3ViCVwkMHg2MCwkbGVuCisJam1wCS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAorLmFsaWduCTE2CisuTGNiY19kZWNfdGFpbF9jb2xsZWN0ZWQ6CisJYW5kCVwkMTUsJGxlbgorCW1vdnVwcwkkaXYsKCRpdnApCisJam56CS5MY2JjX2RlY190YWlsX3BhcnRpYWwKKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKwlqbXAJLkxjYmNfZGVjX3JldAorLmFsaWduCTE2CisuTGNiY19kZWNfdGFpbF9wYXJ0aWFsOgorCW1vdmFwcwkkaW5vdXQwLCRyZXNlcnZlZCglcnNwKQorCW1vdglcJDE2LCVyY3gKKwltb3YJJG91dCwlcmRpCisJc3ViCSRsZW4sJXJjeAorCWxlYQkkcmVzZXJ2ZWQoJXJzcCksJXJzaQorCS5sb25nCTB4OTA2NkE0RjMJIyByZXAgbW92c2IKKworLkxjYmNfZGVjX3JldDoKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkoJXJzcCksJXhtbTYKKwltb3ZhcHMJMHgxMCglcnNwKSwleG1tNworCW1vdmFwcwkweDIwKCVyc3ApLCV4bW04CisJbW92YXBzCTB4MzAoJXJzcCksJXhtbTkKKwlsZWEJMHg1OCglcnNwKSwlcnNwCitfX18KKyRjb2RlLj08PF9fXzsKKy5MY2JjX3JldDoKKwlyZXQKKy5zaXplCSR7UFJFRklYfV9jYmNfZW5jcnlwdCwuLSR7UFJFRklYfV9jYmNfZW5jcnlwdAorX19fCit9IAwKKyMgaW50ICRQUkVGSVhfc2V0X1tlbnxkZV1jcnlwdF9rZXkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksCisjCQkJCWludCBiaXRzLCBBRVNfS0VZICprZXkpCit7IG15ICgkaW5wLCRiaXRzLCRrZXkpID0gQF80YXJnczsKKyAgJGJpdHMgPX4gcy8lci8lZS87CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5CisudHlwZQkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleToKKwkuYnl0ZQkweDQ4LDB4ODMsMHhFQywweDA4CSMgc3ViIHJzcCw4CisJY2FsbAlfX2Flc25pX3NldF9lbmNyeXB0X2tleQorCXNobAlcJDQsJGJpdHMJCSMgcm91bmRzLTEgYWZ0ZXIgX2Flc25pX3NldF9lbmNyeXB0X2tleQorCXRlc3QJJWVheCwlZWF4CisJam56CS5MZGVjX2tleV9yZXQKKwlsZWEJMTYoJGtleSwkYml0cyksJGlucAkjIHBvaW50cyBhdCB0aGUgZW5kIG9mIGtleSBzY2hlZHVsZQorCisJJG1vdmtleQkoJGtleSksJXhtbTAJCSMganVzdCBzd2FwCisJJG1vdmtleQkoJGlucCksJXhtbTEKKwkkbW92a2V5CSV4bW0wLCgkaW5wKQorCSRtb3ZrZXkJJXhtbTEsKCRrZXkpCisJbGVhCTE2KCRrZXkpLCRrZXkKKwlsZWEJLTE2KCRpbnApLCRpbnAKKworLkxkZWNfa2V5X2ludmVyc2U6CisJJG1vdmtleQkoJGtleSksJXhtbTAJCSMgc3dhcCBhbmQgaW52ZXJzZQorCSRtb3ZrZXkJKCRpbnApLCV4bW0xCisJYWVzaW1jCSV4bW0wLCV4bW0wCisJYWVzaW1jCSV4bW0xLCV4bW0xCisJbGVhCTE2KCRrZXkpLCRrZXkKKwlsZWEJLTE2KCRpbnApLCRpbnAKKwkkbW92a2V5CSV4bW0wLDE2KCRpbnApCisJJG1vdmtleQkleG1tMSwtMTYoJGtleSkKKwljbXAJJGtleSwkaW5wCisJamEJLkxkZWNfa2V5X2ludmVyc2UKKworCSRtb3ZrZXkJKCRrZXkpLCV4bW0wCQkjIGludmVyc2UgbWlkZGxlCisJYWVzaW1jCSV4bW0wLCV4bW0wCisJJG1vdmtleQkleG1tMCwoJGlucCkKKy5MZGVjX2tleV9yZXQ6CisJYWRkCVwkOCwlcnNwCisJcmV0CisuTFNFSF9lbmRfc2V0X2RlY3J5cHRfa2V5OgorLnNpemUJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSwuLSR7UFJFRklYfV9zZXRfZGVjcnlwdF9rZXkKK19fXworDAorIyBUaGlzIGlzIGJhc2VkIG9uIHN1Ym1pc3Npb24gYnkKKyMKKyMJSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisjCVZpbm9kaCBHb3BhbCA8dmlub2RoLmdvcGFsQGludGVsLmNvbT4KKyMJS2FocmFtYW4gQWtkZW1pcgorIworIyBBZ3Jlc3NpdmVseSBvcHRpbWl6ZWQgaW4gcmVzcGVjdCB0byBhZXNrZXlnZW5hc3Npc3QncyBjcml0aWNhbCBwYXRoCisjIGFuZCBpcyBjb250YWluZWQgaW4gJXhtbTAtNSB0byBtZWV0IFdpbjY0IEFCSSByZXF1aXJlbWVudC4KKyMKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAkke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5CisudHlwZQkke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleToKK19fYWVzbmlfc2V0X2VuY3J5cHRfa2V5OgorCS5ieXRlCTB4NDgsMHg4MywweEVDLDB4MDgJIyBzdWIgcnNwLDgKKwltb3YJXCQtMSwlcmF4CisJdGVzdAkkaW5wLCRpbnAKKwlqegkuTGVuY19rZXlfcmV0CisJdGVzdAkka2V5LCRrZXkKKwlqegkuTGVuY19rZXlfcmV0CisKKwltb3Z1cHMJKCRpbnApLCV4bW0wCQkjIHB1bGwgZmlyc3QgMTI4IGJpdHMgb2YgKnVzZXJLZXkKKwl4b3JwcwkleG1tNCwleG1tNAkJIyBsb3cgZHdvcmQgb2YgeG1tNCBpcyBhc3N1bWVkIDAKKwlsZWEJMTYoJGtleSksJXJheAorCWNtcAlcJDI1NiwkYml0cworCWplCS5MMTRyb3VuZHMKKwljbXAJXCQxOTIsJGJpdHMKKwlqZQkuTDEycm91bmRzCisJY21wCVwkMTI4LCRiaXRzCisJam5lCS5MYmFkX2tleWJpdHMKKworLkwxMHJvdW5kczoKKwltb3YJXCQ5LCRiaXRzCQkJIyAxMCByb3VuZHMgZm9yIDEyOC1iaXQga2V5CisJJG1vdmtleQkleG1tMCwoJGtleSkJCQkjIHJvdW5kIDAKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDEsJXhtbTAsJXhtbTEJIyByb3VuZCAxCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzEyOF9jb2xkCisJYWVza2V5Z2VuYXNzaXN0CVwkMHgyLCV4bW0wLCV4bW0xCSMgcm91bmQgMgorCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDQsJXhtbTAsJXhtbTEJIyByb3VuZCAzCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzEyOAorCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMCwleG1tMQkjIHJvdW5kIDQKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHgxMCwleG1tMCwleG1tMQkjIHJvdW5kIDUKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHgyMCwleG1tMCwleG1tMQkjIHJvdW5kIDYKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMCwleG1tMQkjIHJvdW5kIDcKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHg4MCwleG1tMCwleG1tMQkjIHJvdW5kIDgKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHgxYiwleG1tMCwleG1tMQkjIHJvdW5kIDkKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisJYWVza2V5Z2VuYXNzaXN0CVwkMHgzNiwleG1tMCwleG1tMQkjIHJvdW5kIDEwCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzEyOAorCSRtb3ZrZXkJJXhtbTAsKCVyYXgpCisJbW92CSRiaXRzLDgwKCVyYXgpCSMgMjQwKCVyZHgpCisJeG9yCSVlYXgsJWVheAorCWptcAkuTGVuY19rZXlfcmV0CisKKy5hbGlnbgkxNgorLkwxMnJvdW5kczoKKwltb3ZxCTE2KCRpbnApLCV4bW0yCQkJIyByZW1haW5pbmcgMS8zIG9mICp1c2VyS2V5CisJbW92CVwkMTEsJGJpdHMJCQkjIDEyIHJvdW5kcyBmb3IgMTkyCisJJG1vdmtleQkleG1tMCwoJGtleSkJCQkjIHJvdW5kIDAKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDEsJXhtbTIsJXhtbTEJIyByb3VuZCAxLDIKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTkyYV9jb2xkCisJYWVza2V5Z2VuYXNzaXN0CVwkMHgyLCV4bW0yLCV4bW0xCSMgcm91bmQgMiwzCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzE5MmIKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDQsJXhtbTIsJXhtbTEJIyByb3VuZCA0LDUKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTkyYQorCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMiwleG1tMQkjIHJvdW5kIDUsNgorCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJiCisJYWVza2V5Z2VuYXNzaXN0CVwkMHgxMCwleG1tMiwleG1tMQkjIHJvdW5kIDcsOAorCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJhCisJYWVza2V5Z2VuYXNzaXN0CVwkMHgyMCwleG1tMiwleG1tMQkjIHJvdW5kIDgsOQorCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJiCisJYWVza2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMiwleG1tMQkjIHJvdW5kIDEwLDExCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzE5MmEKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDgwLCV4bW0yLCV4bW0xCSMgcm91bmQgMTEsMTIKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTkyYgorCSRtb3ZrZXkJJXhtbTAsKCVyYXgpCisJbW92CSRiaXRzLDQ4KCVyYXgpCSMgMjQwKCVyZHgpCisJeG9yCSVyYXgsICVyYXgKKwlqbXAJLkxlbmNfa2V5X3JldAorCisuYWxpZ24JMTYKKy5MMTRyb3VuZHM6CisJbW92dXBzCTE2KCRpbnApLCV4bW0yCQkJIyByZW1hbmluZyBoYWxmIG9mICp1c2VyS2V5CisJbW92CVwkMTMsJGJpdHMJCQkjIDE0IHJvdW5kcyBmb3IgMjU2CisJbGVhCTE2KCVyYXgpLCVyYXgKKwkkbW92a2V5CSV4bW0wLCgka2V5KQkJCSMgcm91bmQgMAorCSRtb3ZrZXkJJXhtbTIsMTYoJGtleSkJCQkjIHJvdW5kIDEKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDEsJXhtbTIsJXhtbTEJIyByb3VuZCAyCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmFfY29sZAorCWFlc2tleWdlbmFzc2lzdAlcJDB4MSwleG1tMCwleG1tMQkjIHJvdW5kIDMKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgorCWFlc2tleWdlbmFzc2lzdAlcJDB4MiwleG1tMiwleG1tMQkjIHJvdW5kIDQKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorCWFlc2tleWdlbmFzc2lzdAlcJDB4MiwleG1tMCwleG1tMQkjIHJvdW5kIDUKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgorCWFlc2tleWdlbmFzc2lzdAlcJDB4NCwleG1tMiwleG1tMQkjIHJvdW5kIDYKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorCWFlc2tleWdlbmFzc2lzdAlcJDB4NCwleG1tMCwleG1tMQkjIHJvdW5kIDcKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgorCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMiwleG1tMQkjIHJvdW5kIDgKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMCwleG1tMQkjIHJvdW5kIDkKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgorCWFlc2tleWdlbmFzc2lzdAlcJDB4MTAsJXhtbTIsJXhtbTEJIyByb3VuZCAxMAorCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZhCisJYWVza2V5Z2VuYXNzaXN0CVwkMHgxMCwleG1tMCwleG1tMQkjIHJvdW5kIDExCisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmIKKwlhZXNrZXlnZW5hc3Npc3QJXCQweDIwLCV4bW0yLCV4bW0xCSMgcm91bmQgMTIKKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorCWFlc2tleWdlbmFzc2lzdAlcJDB4MjAsJXhtbTAsJXhtbTEJIyByb3VuZCAxMworCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZiCisJYWVza2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMiwleG1tMQkjIHJvdW5kIDE0CisJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmEKKwkkbW92a2V5CSV4bW0wLCglcmF4KQorCW1vdgkkYml0cywxNiglcmF4KQkjIDI0MCglcmR4KQorCXhvcgklcmF4LCVyYXgKKwlqbXAJLkxlbmNfa2V5X3JldAorCisuYWxpZ24JMTYKKy5MYmFkX2tleWJpdHM6CisJbW92CVwkLTIsJXJheAorLkxlbmNfa2V5X3JldDoKKwlhZGQJXCQ4LCVyc3AKKwlyZXQKKy5MU0VIX2VuZF9zZXRfZW5jcnlwdF9rZXk6CisMCisuYWxpZ24JMTYKKy5Ma2V5X2V4cGFuc2lvbl8xMjg6CisJJG1vdmtleQkleG1tMCwoJXJheCkKKwlsZWEJMTYoJXJheCksJXJheAorLkxrZXlfZXhwYW5zaW9uXzEyOF9jb2xkOgorCXNodWZwcwlcJDBiMDAwMTAwMDAsJXhtbTAsJXhtbTQKKwl4b3JwcwkleG1tNCwgJXhtbTAKKwlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00CisJeG9ycHMJJXhtbTQsICV4bW0wCisJc2h1ZnBzCVwkMGIxMTExMTExMSwleG1tMSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKKwl4b3JwcwkleG1tMSwleG1tMAorCXJldAorCisuYWxpZ24gMTYKKy5Ma2V5X2V4cGFuc2lvbl8xOTJhOgorCSRtb3ZrZXkJJXhtbTAsKCVyYXgpCisJbGVhCTE2KCVyYXgpLCVyYXgKKy5Ma2V5X2V4cGFuc2lvbl8xOTJhX2NvbGQ6CisJbW92YXBzCSV4bW0yLCAleG1tNQorLkxrZXlfZXhwYW5zaW9uXzE5MmJfd2FybToKKwlzaHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0wLCV4bW00CisJbW92ZHFhCSV4bW0yLCV4bW0zCisJeG9ycHMJJXhtbTQsJXhtbTAKKwlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00CisJcHNsbGRxCVwkNCwleG1tMworCXhvcnBzCSV4bW00LCV4bW0wCisJcHNodWZkCVwkMGIwMTAxMDEwMSwleG1tMSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKKwlweG9yCSV4bW0zLCV4bW0yCisJcHhvcgkleG1tMSwleG1tMAorCXBzaHVmZAlcJDBiMTExMTExMTEsJXhtbTAsJXhtbTMKKwlweG9yCSV4bW0zLCV4bW0yCisJcmV0CisKKy5hbGlnbiAxNgorLkxrZXlfZXhwYW5zaW9uXzE5MmI6CisJbW92YXBzCSV4bW0wLCV4bW0zCisJc2h1ZnBzCVwkMGIwMTAwMDEwMCwleG1tMCwleG1tNQorCSRtb3ZrZXkJJXhtbTUsKCVyYXgpCisJc2h1ZnBzCVwkMGIwMTAwMTExMCwleG1tMiwleG1tMworCSRtb3ZrZXkJJXhtbTMsMTYoJXJheCkKKwlsZWEJMzIoJXJheCksJXJheAorCWptcAkuTGtleV9leHBhbnNpb25fMTkyYl93YXJtCisKKy5hbGlnbgkxNgorLkxrZXlfZXhwYW5zaW9uXzI1NmE6CisJJG1vdmtleQkleG1tMiwoJXJheCkKKwlsZWEJMTYoJXJheCksJXJheAorLkxrZXlfZXhwYW5zaW9uXzI1NmFfY29sZDoKKwlzaHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0wLCV4bW00CisJeG9ycHMJJXhtbTQsJXhtbTAKKwlzaHVmcHMJXCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00CisJeG9ycHMJJXhtbTQsJXhtbTAKKwlzaHVmcHMJXCQwYjExMTExMTExLCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0aAorCXhvcnBzCSV4bW0xLCV4bW0wCisJcmV0CisKKy5hbGlnbiAxNgorLkxrZXlfZXhwYW5zaW9uXzI1NmI6CisJJG1vdmtleQkleG1tMCwoJXJheCkKKwlsZWEJMTYoJXJheCksJXJheAorCisJc2h1ZnBzCVwkMGIwMDAxMDAwMCwleG1tMiwleG1tNAorCXhvcnBzCSV4bW00LCV4bW0yCisJc2h1ZnBzCVwkMGIxMDAwMTEwMCwleG1tMiwleG1tNAorCXhvcnBzCSV4bW00LCV4bW0yCisJc2h1ZnBzCVwkMGIxMDEwMTAxMCwleG1tMSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKKwl4b3JwcwkleG1tMSwleG1tMgorCXJldAorLnNpemUJJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSwuLSR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXkKKy5zaXplCV9fYWVzbmlfc2V0X2VuY3J5cHRfa2V5LC4tX19hZXNuaV9zZXRfZW5jcnlwdF9rZXkKK19fXworfQorDAorJGNvZGUuPTw8X19fOworLmFsaWduCTY0CisuTGJzd2FwX21hc2s6CisJLmJ5dGUJMTUsMTQsMTMsMTIsMTEsMTAsOSw4LDcsNiw1LDQsMywyLDEsMAorLkxpbmNyZW1lbnQzMjoKKwkubG9uZwk2LDYsNiwwCisuTGluY3JlbWVudDY0OgorCS5sb25nCTEsMCwwLDAKKy5MeHRzX21hZ2ljOgorCS5sb25nCTB4ODcsMCwxLDAKKworLmFzY2l6ICAiQUVTIGZvciBJbnRlbCBBRVMtTkksIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JNjQKK19fXworCisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFBSRUZJWCBlcSAiYWVzbmkiKTsKKy50eXBlCWVjYl9zZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorZWNiX3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisKKwlqbXAJLkxjb21tb25fc2VoX3RhaWwKKy5zaXplCWVjYl9zZV9oYW5kbGVyLC4tZWNiX3NlX2hhbmRsZXIKKworLnR5cGUJY2NtNjRfc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2NjbTY0X3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCisKKwlsZWEJMCglcmF4KSwlcnNpCQkjICV4bW0gc2F2ZSBhcmVhCisJbGVhCTUxMigkY29udGV4dCksJXJkaQkjICZjb250ZXh0LlhtbTYKKwltb3YJXCQ4LCVlY3gJCSMgNCpzaXplb2YoJXhtbTApL3NpemVvZiglcmF4KQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJMHg1OCglcmF4KSwlcmF4CQkjIGFkanVzdCBzdGFjayBwb2ludGVyCisKKwlqbXAJLkxjb21tb25fc2VoX3RhaWwKKy5zaXplCWNjbTY0X3NlX2hhbmRsZXIsLi1jY202NF9zZV9oYW5kbGVyCisKKy50eXBlCWN0cjMyX3NlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitjdHIzMl9zZV9oYW5kbGVyOgorCXB1c2gJJXJzaQorCXB1c2gJJXJkaQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXB1c2hmcQorCXN1YglcJDY0LCVyc3AKKworCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJheAorCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAorCisJbGVhCS5MY3RyMzJfYm9keSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8InByb2xvZ3VlIiBsYWJlbAorCWpiCS5MY29tbW9uX3NlaF90YWlsCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCWxlYQkuTGN0cjMyX3JldCglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAorCWphZQkuTGNvbW1vbl9zZWhfdGFpbAorCisJbGVhCTB4MjAoJXJheCksJXJzaQkJIyAleG1tIHNhdmUgYXJlYQorCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisJbW92CVwkMjAsJWVjeAkJIyAxMCpzaXplb2YoJXhtbTApL3NpemVvZiglcmF4KQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJMHhjOCglcmF4KSwlcmF4CQkjIGFkanVzdCBzdGFjayBwb2ludGVyCisKKwlqbXAJLkxjb21tb25fc2VoX3RhaWwKKy5zaXplCWN0cjMyX3NlX2hhbmRsZXIsLi1jdHIzMl9zZV9oYW5kbGVyCisKKy50eXBlCXh0c19zZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgoreHRzX3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJsZQorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCisKKwlsZWEJMHg2MCglcmF4KSwlcnNpCQkjICV4bW0gc2F2ZSBhcmVhCisJbGVhCTUxMigkY29udGV4dCksJXJkaQkjICYgY29udGV4dC5YbW02CisJbW92CVwkMjAsJWVjeAkJIyAxMCpzaXplb2YoJXhtbTApL3NpemVvZiglcmF4KQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJMHg2OCsxNjAoJXJheCksJXJheAkjIGFkanVzdCBzdGFjayBwb2ludGVyCisKKwlqbXAJLkxjb21tb25fc2VoX3RhaWwKKy5zaXplCXh0c19zZV9oYW5kbGVyLC4teHRzX3NlX2hhbmRsZXIKK19fXworJGNvZGUuPTw8X19fOworLnR5cGUJY2JjX3NlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitjYmNfc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCWxlYQkuTGNiY19kZWNyeXB0KCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDwicHJvbG9ndWUiIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCWxlYQkuTGNiY19kZWNyeXB0X2JvZHkoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPGNiY19kZWNyeXB0X2JvZHkKKwlqYgkuTHJlc3RvcmVfY2JjX3JheAorCisJbGVhCS5MY2JjX3JldCglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PSJlcGlsb2d1ZSIgbGFiZWwKKwlqYWUJLkxjb21tb25fc2VoX3RhaWwKKworCWxlYQkwKCVyYXgpLCVyc2kJCSMgdG9wIG9mIHN0YWNrCisJbGVhCTUxMigkY29udGV4dCksJXJkaQkjICZjb250ZXh0LlhtbTYKKwltb3YJXCQ4LCVlY3gJCSMgNCpzaXplb2YoJXhtbTApL3NpemVvZiglcmF4KQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJMHg1OCglcmF4KSwlcmF4CQkjIGFkanVzdCBzdGFjayBwb2ludGVyCisJam1wCS5MY29tbW9uX3NlaF90YWlsCisKKy5McmVzdG9yZV9jYmNfcmF4OgorCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgKKworLkxjb21tb25fc2VoX3RhaWw6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCQxNTQsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQljYmNfc2VfaGFuZGxlciwuLWNiY19zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKK19fXworJGNvZGUuPTw8X19fIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOworCS5ydmEJLkxTRUhfYmVnaW5fYWVzbmlfZWNiX2VuY3J5cHQKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV9lY2JfZW5jcnlwdAorCS5ydmEJLkxTRUhfaW5mb19lY2IKKworCS5ydmEJLkxTRUhfYmVnaW5fYWVzbmlfY2NtNjRfZW5jcnlwdF9ibG9ja3MKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV9jY202NF9lbmNyeXB0X2Jsb2NrcworCS5ydmEJLkxTRUhfaW5mb19jY202NF9lbmMKKworCS5ydmEJLkxTRUhfYmVnaW5fYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3MKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV9jY202NF9kZWNyeXB0X2Jsb2NrcworCS5ydmEJLkxTRUhfaW5mb19jY202NF9kZWMKKworCS5ydmEJLkxTRUhfYmVnaW5fYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3MKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV9jdHIzMl9lbmNyeXB0X2Jsb2NrcworCS5ydmEJLkxTRUhfaW5mb19jdHIzMgorCisJLnJ2YQkuTFNFSF9iZWdpbl9hZXNuaV94dHNfZW5jcnlwdAorCS5ydmEJLkxTRUhfZW5kX2Flc25pX3h0c19lbmNyeXB0CisJLnJ2YQkuTFNFSF9pbmZvX3h0c19lbmMKKworCS5ydmEJLkxTRUhfYmVnaW5fYWVzbmlfeHRzX2RlY3J5cHQKKwkucnZhCS5MU0VIX2VuZF9hZXNuaV94dHNfZGVjcnlwdAorCS5ydmEJLkxTRUhfaW5mb194dHNfZGVjCitfX18KKyRjb2RlLj08PF9fXzsKKwkucnZhCS5MU0VIX2JlZ2luXyR7UFJFRklYfV9jYmNfZW5jcnlwdAorCS5ydmEJLkxTRUhfZW5kXyR7UFJFRklYfV9jYmNfZW5jcnlwdAorCS5ydmEJLkxTRUhfaW5mb19jYmMKKworCS5ydmEJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorCS5ydmEJLkxTRUhfZW5kX3NldF9kZWNyeXB0X2tleQorCS5ydmEJLkxTRUhfaW5mb19rZXkKKworCS5ydmEJJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleQorCS5ydmEJLkxTRUhfZW5kX3NldF9lbmNyeXB0X2tleQorCS5ydmEJLkxTRUhfaW5mb19rZXkKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKK19fXworJGNvZGUuPTw8X19fIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOworLkxTRUhfaW5mb19lY2I6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJZWNiX3NlX2hhbmRsZXIKKy5MU0VIX2luZm9fY2NtNjRfZW5jOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCWNjbTY0X3NlX2hhbmRsZXIKKwkucnZhCS5MY2NtNjRfZW5jX2JvZHksLkxjY202NF9lbmNfcmV0CSMgSGFuZGxlckRhdGFbXQorLkxTRUhfaW5mb19jY202NF9kZWM6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJY2NtNjRfc2VfaGFuZGxlcgorCS5ydmEJLkxjY202NF9kZWNfYm9keSwuTGNjbTY0X2RlY19yZXQJIyBIYW5kbGVyRGF0YVtdCisuTFNFSF9pbmZvX2N0cjMyOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCWN0cjMyX3NlX2hhbmRsZXIKKy5MU0VIX2luZm9feHRzX2VuYzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQl4dHNfc2VfaGFuZGxlcgorCS5ydmEJLkx4dHNfZW5jX2JvZHksLkx4dHNfZW5jX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGFbXQorLkxTRUhfaW5mb194dHNfZGVjOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXh0c19zZV9oYW5kbGVyCisJLnJ2YQkuTHh0c19kZWNfYm9keSwuTHh0c19kZWNfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCitfX18KKyRjb2RlLj08PF9fXzsKKy5MU0VIX2luZm9fY2JjOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCWNiY19zZV9oYW5kbGVyCisuTFNFSF9pbmZvX2tleToKKwkuYnl0ZQkweDAxLDB4MDQsMHgwMSwweDAwCisJLmJ5dGUJMHgwNCwweDAyLDB4MDAsMHgwMAkjIHN1YiByc3AsOAorX19fCit9CisKK3N1YiByZXggeworICBsb2NhbCAqb3Bjb2RlPXNoaWZ0OworICBteSAoJGRzdCwkc3JjKT1AXzsKKyAgbXkgJHJleD0wOworCisgICAgJHJleHw9MHgwNAkJCWlmKCRkc3Q+PTgpOworICAgICRyZXh8PTB4MDEJCQlpZigkc3JjPj04KTsKKyAgICBwdXNoIEBvcGNvZGUsJHJleHwweDQwCWlmKCRyZXgpOworfQorCitzdWIgYWVzbmkgeworICBteSAkbGluZT1zaGlmdDsKKyAgbXkgQG9wY29kZT0oMHg2Nik7CisKKyAgICBpZiAoJGxpbmU9fi8oYWVza2V5Z2VuYXNzaXN0KVxzK1wkKFt4MC05YS1mXSspLFxzKiV4bW0oWzAtOV0rKSxccyoleG1tKFswLTldKykvKSB7CisJcmV4KFxAb3Bjb2RlLCQ0LCQzKTsKKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4ZGY7CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCQzJjcpfCgoJDQmNyk8PDMpOwkjIE1vZFIvTQorCW15ICRjPSQyOworCXB1c2ggQG9wY29kZSwkYz1+L14wLz9vY3QoJGMpOiRjOworCXJldHVybiAiLmJ5dGVcdCIuam9pbignLCcsQG9wY29kZSk7CisgICAgfQorICAgIGVsc2lmICgkbGluZT1+LyhhZXNbYS16XSspXHMrJXhtbShbMC05XSspLFxzKiV4bW0oWzAtOV0rKS8pIHsKKwlteSAlb3Bjb2RlbGV0ID0gKAorCQkiYWVzaW1jIiA9PiAweGRiLAorCQkiYWVzZW5jIiA9PiAweGRjLAkiYWVzZW5jbGFzdCIgPT4gMHhkZCwKKwkJImFlc2RlYyIgPT4gMHhkZSwJImFlc2RlY2xhc3QiID0+IDB4ZGYKKwkpOworCXJldHVybiB1bmRlZiBpZiAoIWRlZmluZWQoJG9wY29kZWxldHskMX0pKTsKKwlyZXgoXEBvcGNvZGUsJDMsJDIpOworCXB1c2ggQG9wY29kZSwweDBmLDB4MzgsJG9wY29kZWxldHskMX07CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCQyJjcpfCgoJDMmNyk8PDMpOwkjIE1vZFIvTQorCXJldHVybiAiLmJ5dGVcdCIuam9pbignLCcsQG9wY29kZSk7CisgICAgfQorICAgIHJldHVybiAkbGluZTsKK30KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VtOworJGNvZGUgPX4gcy9cYihhZXMuKiV4bW1bMC05XSspLiokL2Flc25pKCQxKS9nZW07CisKK3ByaW50ICRjb2RlOworCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS9ic2Flcy14ODZfNjQucGwgYi9jcnlwdG8vYWVzL2FzbS9ic2Flcy14ODZfNjQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3ZTNhZgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL2JzYWVzLXg4Nl82NC5wbApAQCAtMCwwICsxLDMwMDQgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIEFFUy0xMjggW29yaWdpbmFsbHkgaW4gQ1RSIG1vZGVdCQkJCSMjIworIyMjIGJpdHNsaWNlZCBpbXBsZW1lbnRhdGlvbiBmb3IgSW50ZWwgQ29yZSAyIHByb2Nlc3NvcnMJIyMjCisjIyMgcmVxdWlyZXMgc3VwcG9ydCBvZiBTU0UgZXh0ZW5zaW9ucyB1cCB0byBTU1NFMwkJIyMjCisjIyMgQXV0aG9yOiBFbWlsaWEgS8Okc3BlciBhbmQgUGV0ZXIgU2Nod2FiZQkJCSMjIworIyMjIERhdGU6IDIwMDktMDMtMTkJCQkJCQkjIyMKKyMjIyBQdWJsaWMgZG9tYWluCQkJCQkJIyMjCisjIyMJCQkJCQkJCSMjIworIyMjIFNlZSBodHRwOi8vaG9tZXMuZXNhdC5rdWxldXZlbi5iZS9+ZWthc3Blci8jc29mdHdhcmUgZm9yCSMjIworIyMjIGZ1cnRoZXIgaW5mb3JtYXRpb24uCQkJCQkjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgU2VwdGVtYmVyIDIwMTEuCisjCisjIFN0YXJ0ZWQgYXMgdHJhbnNsaXRlcmF0aW9uIHRvICJwZXJsYXNtIiB0aGUgb3JpZ2luYWwgY29kZSBoYXMKKyMgdW5kZXJnb25lIGZvbGxvd2luZyBjaGFuZ2VzOgorIworIyAtIGNvZGUgd2FzIG1hZGUgcG9zaXRpb24taW5kZXBlbmRlbnQ7CisjIC0gcm91bmRzIHdlcmUgZm9sZGVkIGludG8gYSBsb29wIHJlc3VsdGluZyBpbiA+NXggc2l6ZSByZWR1Y3Rpb24KKyMgICBmcm9tIDEyLjVLQiB0byAyLjJLQjsKKyMgLSBhYm92ZSB3YXMgcG9zc2liaWxlIHRoYW5rcyB0byBtaXhjb2x1bW5zKCkgbW9kaWZpY2F0aW9uIHRoYXQKKyMgICBhbGxvd2VkIHRvIGZlZWQgaXRzIG91dHB1dCBiYWNrIHRvIGFlc2VuY1tsYXN0XSwgdGhpcyB3YXMKKyMgICBhY2hpZXZlZCBhdCBjb3N0IG9mIHR3byBhZGRpdGlvbmFsIGludGVyLXJlZ2lzdGVycyBtb3ZlczsKKyMgLSBzb21lIGluc3RydWN0aW9uIHJlb3JkZXJpbmcgYW5kIGludGVybGVhdmluZzsKKyMgLSB0aGlzIG1vZHVsZSBkb2Vzbid0IGltcGxlbWVudCBrZXkgc2V0dXAgc3Vicm91dGluZSwgaW5zdGVhZCBpdAorIyAgIHJlbGllcyBvbiBjb252ZXJzaW9uIG9mICJjb252ZW50aW9uYWwiIGtleSBzY2hlZHVsZSBhcyByZXR1cm5lZAorIyAgIGJ5IEFFU19zZXRfZW5jcnlwdF9rZXkgKHNlZSBkaXNjdXNzaW9uIGJlbG93KTsKKyMgLSBmaXJzdCBhbmQgbGFzdCByb3VuZCBrZXlzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5LCB3aGljaCBhbGxvd2VkCisjICAgdG8gc2tpcCBvbmUgc2hpZnRyb3dzKCksIHJlZHVjZSBiaXQtc2xpY2VkIGtleSBzY2hlZHVsZSBhbmQKKyMgICBzcGVlZC11cCBjb252ZXJzaW9uIGJ5IDIyJTsKKyMgLSBzdXBwb3J0IGZvciAxOTItIGFuZCAyNTYtYml0IGtleXMgd2FzIGFkZGVkOworIworIyBSZXN1bHRpbmcgcGVyZm9ybWFuY2UgaW4gQ1BVIGN5Y2xlcyBzcGVudCB0byBlbmNyeXB0IG9uZSBieXRlIG91dAorIyBvZiA0MDk2LWJ5dGUgYnVmZmVyIHdpdGggMTI4LWJpdCBrZXkgaXM6CisjCisjCQlFbWlsaWEncwl0aGlzKCopCQlkaWZmZXJlbmNlCisjCisjIENvcmUgMiAgICAJOS4zMAkJOC42OQkJKzclCisjIE5laGFsZW0oKiopIAk3LjYzCQk2Ljk4CQkrOSUKKyMgQXRvbQkgICAgCTE3LjEJCTE3LjQJCS0yJSgqKiopCisjCisjICgqKQlDb21wYXJpc29uIGlzIG5vdCBjb21wbGV0ZWx5IGZhaXIsIGJlY2F1c2UgInRoaXMiIGlzIEVDQiwKKyMJaS5lLiBubyBleHRyYSBwcm9jZXNzaW5nIHN1Y2ggYXMgY291bnRlciB2YWx1ZXMgY2FsY3VsYXRpb24KKyMJYW5kIHhvci1pbmcgaW5wdXQgYXMgaW4gRW1pbGlhJ3MgQ1RSIGltcGxlbWVudGF0aW9uIGlzCisjCXBlcmZvcm1lZC4gSG93ZXZlciwgdGhlIENUUiBjYWxjdWxhdGlvbnMgc3RhbmQgZm9yIG5vdCBtb3JlCisjCXRoYW4gMSUgb2YgdG90YWwgdGltZSwgc28gY29tcGFyaXNvbiBpcyAqcmF0aGVyKiBmYWlyLgorIworIyAoKiopCVJlc3VsdHMgd2VyZSBjb2xsZWN0ZWQgb24gV2VzdG1lcmUsIHdoaWNoIGlzIGNvbnNpZGVyZWQgdG8KKyMJYmUgZXF1aXZhbGVudCB0byBOZWhhbGVtIGZvciB0aGlzIGNvZGUuCisjCisjICgqKiopCVNsb3dkb3duIG9uIEF0b20gaXMgcmF0aGVyIHN0cmFuZ2UgcGVyIHNlLCBiZWNhdXNlIG9yaWdpbmFsCisjCWltcGxlbWVudGF0aW9uIGhhcyBhIG51bWJlciBvZiA5Ky1ieXRlcyBpbnN0cnVjdGlvbnMsIHdoaWNoCisjCWFyZSBiYWQgZm9yIEF0b20gZnJvbnQtZW5kLCBhbmQgd2hpY2ggSSBlbGltaW5hdGVkIGNvbXBsZXRlbHkuCisjCUluIGF0dGVtcHQgdG8gYWRkcmVzcyBkZXRlcmlvcmF0aW9uIHNib3goKSB3YXMgdGVzdGVkIGluIEZQCisjCVNJTUQgImRvbWFpbiIgKG1vdmFwcyBpbnN0ZWFkIG9mIG1vdmRxYSwgeG9ycHMgaW5zdGVhZCBvZgorIwlweG9yLCBldGMuKS4gV2hpbGUgaXQgcmVzdWx0ZWQgaW4gbm9taW5hbCA0JSBpbXByb3ZlbWVudCBvbgorIwlBdG9tLCBpdCBodXJ0ZWQgV2VzdG1lcmUgYnkgbW9yZSB0aGFuIDJ4IGZhY3Rvci4KKyMKKyMgQXMgZm9yIGtleSBzY2hlZHVsZSBjb252ZXJzaW9uIHN1YnJvdXRpbmUuIEludGVyZmFjZSB0byBPcGVuU1NMCisjIHJlbGllcyBvbiBwZXItaW52b2NhdGlvbiBvbi10aGUtZmx5IGNvbnZlcnNpb24uIFRoaXMgbmF0dXJhbGx5CisjIGhhcyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgZm9yIHNob3J0IGlucHV0cy4gQ29udmVyc2lvbgorIyB0aW1lIGluIENQVSBjeWNsZXMgYW5kIGl0cyByYXRpbyB0byBDUFUgY3ljbGVzIHNwZW50IGluIDh4IGJsb2NrCisjIGZ1bmN0aW9uIGlzOgorIworIyAJCWNvbnZlcnNpb24JY29udmVyc2lvbi84eCBibG9jaworIyBDb3JlIDIJNDEwCQkwLjM3CisjIE5laGFsZW0JMzEwCQkwLjM1CisjIEF0b20JCTU3MAkJMC4yNgorIworIyBUaGUgcmF0aW8gdmFsdWVzIG1lYW4gdGhhdCAxMjgtYnl0ZSBibG9ja3Mgd2lsbCBiZSBwcm9jZXNzZWQKKyMgMjEtMjclIHNsb3dlciwgMjU2LWJ5dGUgYmxvY2tzIC0gMTItMTYlLCAzODQtYnl0ZSBibG9ja3MgLSA4LTExJSwKKyMgZXRjLiBUaGVuIGtlZXAgaW4gbWluZCB0aGF0IGlucHV0IHNpemVzIG5vdCBkaXZpc2libGUgYnkgMTI4IGFyZQorIyAqZWZmZWN0aXZlbHkqIHNsb3dlciwgZXNwZWNpYWxseSBzaG9ydGVzdCBvbmVzLCBlLmcuIGNvbnNlY3V0aXZlCisjIDE0NC1ieXRlIGJsb2NrcyBhcmUgcHJvY2Vzc2VkIDQ0JSBzbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LAorIyAyNzIgLSAyOSUsIDQwMCAtIDIyJSwgZXRjLiBZZXQsIGRlc3BpdGUgYWxsIHRoZXNlICJzaG9ydGNvbWluZ3MiCisjIGl0J3Mgc3RpbGwgZmFzdGVyIHRoYW4gWyJoeXBlci10aHJlYWRpbmctc2FmZSIgY29kZSBwYXRoIGluXQorIyBhZXMteDg2XzY0LnBsIG9uIGFsbCBsZW5ndGhzIGFib3ZlIDY0IGJ5dGVzLi4uCisjCisjIE9jdG9iZXIgMjAxMS4KKyMKKyMgQWRkIGRlY3J5cHRpb24gcHJvY2VkdXJlLiBQZXJmb3JtYW5jZSBpbiBDUFUgY3ljbGVzIHNwZW50IHRvIGRlY3J5cHQKKyMgb25lIGJ5dGUgb3V0IG9mIDQwOTYtYnl0ZSBidWZmZXIgd2l0aCAxMjgtYml0IGtleSBpczoKKyMKKyMgQ29yZSAyCTExLjAKKyMgTmVoYWxlbQk5LjE2CisjCisjIE5vdmVtYmVyIDIwMTEuCisjCisjIEFkZCBic2Flc194dHNfW2VufGRlXWNyeXB0LiBMZXNzLXRoYW4tODAtYnl0ZXMtYmxvY2sgcGVyZm9ybWFuY2UgaXMKKyMgc3Vib3B0aW1hbCwgYnV0IFhUUyBpcyBtZWFudCB0byBiZSB1c2VkIHdpdGggbGFyZ2VyIGJsb2Nrcy4uLgorIworIwkJCQkJCTxhcHByb0BvcGVuc3NsLm9yZz4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisKK215ICgkaW5wLCRvdXQsJGxlbiwka2V5LCRpdnApPSgiJXJkaSIsIiVyc2kiLCIlcmR4IiwiJXJjeCIpOworbXkgQFhNTT1tYXAoIiV4bW0kXyIsKDE1LDAuLjE0KSk7CSMgYmVzdCBvbiBBdG9tLCArMTAlIG92ZXIgKDAuLjE1KQorbXkgJGVjYj0wOwkjIHN1cHByZXNzIHVucmVmZXJlbmNlZCBFQ0Igc3Vicm91dGluZXMsIHNwYXJlIHNvbWUgc3BhY2UuLi4KKworeworbXkgKCRrZXksJHJvdW5kcywkY29uc3QpPSgiJXJheCIsIiVyMTBkIiwiJXIxMSIpOworCitzdWIgU2JveCB7CisjIGlucHV0IGluICBsc2IgPiBbYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3XSA8IG1zYgorIyBvdXRwdXQgaW4gbHNiID4gW2IwLCBiMSwgYjQsIGI2LCBiMywgYjcsIGIyLCBiNV0gPCBtc2IKK215IEBiPUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTFdOworbXkgQHM9QF9bMTIuLjE1XTsKKwkmSW5CYXNpc0NoYW5nZQkoQGIpOworCSZJbnZfR0YyNTYJKEBiWzYsNSwwLDMsNywxLDQsMl0sQHQsQHMpOworCSZPdXRCYXNpc0NoYW5nZQkoQGJbNywxLDQsMiw2LDUsMCwzXSk7Cit9CisKK3N1YiBJbkJhc2lzQ2hhbmdlIHsKKyMgaW5wdXQgaW4gIGxzYiA+IFtiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjddIDwgbXNiCisjIG91dHB1dCBpbiBsc2IgPiBbYjYsIGI1LCBiMCwgYjMsIGI3LCBiMSwgYjQsIGIyXSA8IG1zYiAKK215IEBiPUBfWzAuLjddOworJGNvZGUuPTw8X19fOworCXB4b3IJQGJbNl0sIEBiWzVdCisJcHhvcglAYlsxXSwgQGJbMl0KKwlweG9yCUBiWzBdLCBAYlszXQorCXB4b3IJQGJbMl0sIEBiWzZdCisJcHhvciAJQGJbMF0sIEBiWzVdCisKKwlweG9yCUBiWzNdLCBAYls2XQorCXB4b3IJQGJbN10sIEBiWzNdCisJcHhvcglAYls1XSwgQGJbN10KKwlweG9yCUBiWzRdLCBAYlszXQorCXB4b3IJQGJbNV0sIEBiWzRdCisJcHhvcglAYlsxXSwgQGJbM10KKworCXB4b3IJQGJbN10sIEBiWzJdCisJcHhvcglAYls1XSwgQGJbMV0KK19fXworfQorCitzdWIgT3V0QmFzaXNDaGFuZ2UgeworIyBpbnB1dCBpbiAgbHNiID4gW2IwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiN10gPCBtc2IKKyMgb3V0cHV0IGluIGxzYiA+IFtiNiwgYjEsIGIyLCBiNCwgYjcsIGIwLCBiMywgYjVdIDwgbXNiCitteSBAYj1AX1swLi43XTsKKyRjb2RlLj08PF9fXzsKKwlweG9yCUBiWzZdLCBAYlswXQorCXB4b3IJQGJbNF0sIEBiWzFdCisJcHhvcglAYlswXSwgQGJbMl0KKwlweG9yCUBiWzZdLCBAYls0XQorCXB4b3IJQGJbMV0sIEBiWzZdCisKKwlweG9yCUBiWzVdLCBAYlsxXQorCXB4b3IJQGJbM10sIEBiWzVdCisJcHhvcglAYls3XSwgQGJbM10KKwlweG9yCUBiWzVdLCBAYls3XQorCXB4b3IJQGJbNV0sIEBiWzJdCisKKwlweG9yCUBiWzddLCBAYls0XQorX19fCit9CisKK3N1YiBJbnZTYm94IHsKKyMgaW5wdXQgaW4gbHNiIAk+IFtiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjddIDwgbXNiCisjIG91dHB1dCBpbiBsc2IJPiBbYjAsIGIxLCBiNiwgYjQsIGIyLCBiNywgYjMsIGI1XSA8IG1zYgorbXkgQGI9QF9bMC4uN107CitteSBAdD1AX1s4Li4xMV07CitteSBAcz1AX1sxMi4uMTVdOworCSZJbnZJbkJhc2lzQ2hhbmdlCShAYik7CisJJkludl9HRjI1NgkJKEBiWzUsMSwyLDYsMyw3LDAsNF0sQHQsQHMpOworCSZJbnZPdXRCYXNpc0NoYW5nZQkoQGJbMyw3LDAsNCw1LDEsMiw2XSk7Cit9CisKK3N1YiBJbnZJbkJhc2lzQ2hhbmdlIHsJCSMgT3V0QmFzaXNDaGFuZ2UgaW4gcmV2ZXJzZQorbXkgQGI9QF9bNSwxLDIsNiwzLDcsMCw0XTsKKyRjb2RlLj08PF9fXworCXB4b3IJQGJbN10sIEBiWzRdCisKKwlweG9yCUBiWzVdLCBAYls3XQorCXB4b3IJQGJbNV0sIEBiWzJdCisJcHhvcglAYls3XSwgQGJbM10KKwlweG9yCUBiWzNdLCBAYls1XQorCXB4b3IJQGJbNV0sIEBiWzFdCisKKwlweG9yCUBiWzFdLCBAYls2XQorCXB4b3IJQGJbMF0sIEBiWzJdCisJcHhvcglAYls2XSwgQGJbNF0KKwlweG9yCUBiWzZdLCBAYlswXQorCXB4b3IJQGJbNF0sIEBiWzFdCitfX18KK30KKworc3ViIEludk91dEJhc2lzQ2hhbmdlIHsJCSMgSW5CYXNpc0NoYW5nZSBpbiByZXZlcnNlCitteSBAYj1AX1syLDUsNywzLDYsMSwwLDRdOworJGNvZGUuPTw8X19fOworCXB4b3IJQGJbNV0sIEBiWzFdCisJcHhvcglAYls3XSwgQGJbMl0KKworCXB4b3IJQGJbMV0sIEBiWzNdCisJcHhvcglAYls1XSwgQGJbNF0KKwlweG9yCUBiWzVdLCBAYls3XQorCXB4b3IJQGJbNF0sIEBiWzNdCisJIHB4b3IgCUBiWzBdLCBAYls1XQorCXB4b3IJQGJbN10sIEBiWzNdCisJIHB4b3IJQGJbMl0sIEBiWzZdCisJIHB4b3IJQGJbMV0sIEBiWzJdCisJcHhvcglAYlszXSwgQGJbNl0KKworCXB4b3IJQGJbMF0sIEBiWzNdCisJcHhvcglAYls2XSwgQGJbNV0KK19fXworfQorCitzdWIgTXVsX0dGNCB7CisjOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyM7KiBNdWxfR0Y0OiBJbnB1dCB4MC14MSx5MC15MSBPdXRwdXQgeDAteDEgVGVtcCB0MCAoOCkgKgorIzsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitteSAoJHgwLCR4MSwkeTAsJHkxLCR0MCk9QF87CiskY29kZS49PDxfX187CisJbW92ZHFhCSR5MCwgJHQwCisJcHhvciAJJHkxLCAkdDAKKwlwYW5kCSR4MCwgJHQwCisJcHhvcgkkeDEsICR4MAorCXBhbmQJJHkwLCAkeDEKKwlwYW5kCSR5MSwgJHgwCisJcHhvcgkkeDEsICR4MAorCXB4b3IJJHQwLCAkeDEKK19fXworfQorCitzdWIgTXVsX0dGNF9OIHsJCQkJIyBub3QgdXNlZCwgc2VlIG5leHQgc3Vicm91dGluZQorIyBtdWx0aXBseSBhbmQgc2NhbGUgYnkgTgorbXkgKCR4MCwkeDEsJHkwLCR5MSwkdDApPUBfOworJGNvZGUuPTw8X19fOworCW1vdmRxYQkkeTAsICR0MAorCXB4b3IJJHkxLCAkdDAKKwlwYW5kCSR4MCwgJHQwCisJcHhvcgkkeDEsICR4MAorCXBhbmQJJHkwLCAkeDEKKwlwYW5kCSR5MSwgJHgwCisJcHhvcgkkeDAsICR4MQorCXB4b3IJJHQwLCAkeDAKK19fXworfQorCitzdWIgTXVsX0dGNF9OX0dGNCB7CisjIGludGVybGVhdmVkIE11bF9HRjRfTiBhbmQgTXVsX0dGNAorbXkgKCR4MCwkeDEsJHkwLCR5MSwkdDAsCisgICAgJHgyLCR4MywkeTIsJHkzLCR0MSk9QF87CiskY29kZS49PDxfX187CisJbW92ZHFhCSR5MCwgJHQwCisJIG1vdmRxYQkkeTIsICR0MQorCXB4b3IJJHkxLCAkdDAKKwkgcHhvciAJJHkzLCAkdDEKKwlwYW5kCSR4MCwgJHQwCisJIHBhbmQJJHgyLCAkdDEKKwlweG9yCSR4MSwgJHgwCisJIHB4b3IJJHgzLCAkeDIKKwlwYW5kCSR5MCwgJHgxCisJIHBhbmQJJHkyLCAkeDMKKwlwYW5kCSR5MSwgJHgwCisJIHBhbmQJJHkzLCAkeDIKKwlweG9yCSR4MCwgJHgxCisJIHB4b3IJJHgzLCAkeDIKKwlweG9yCSR0MCwgJHgwCisJIHB4b3IJJHQxLCAkeDMKK19fXworfQorc3ViIE11bF9HRjE2XzIgeworbXkgQHg9QF9bMC4uN107CitteSBAeT1AX1s4Li4xMV07CitteSBAdD1AX1sxMi4uMTVdOworJGNvZGUuPTw8X19fOworCW1vdmRxYQlAeFswXSwgQHRbMF0KKwltb3ZkcWEJQHhbMV0sIEB0WzFdCitfX18KKwkmTXVsX0dGNCAgCShAeFswXSwgQHhbMV0sIEB5WzBdLCBAeVsxXSwgQHRbMl0pOworJGNvZGUuPTw8X19fOworCXB4b3IJQHhbMl0sIEB0WzBdCisJcHhvcglAeFszXSwgQHRbMV0KKwlweG9yCUB5WzJdLCBAeVswXQorCXB4b3IJQHlbM10sIEB5WzFdCitfX18KKwlNdWxfR0Y0X05fR0Y0CShAdFswXSwgQHRbMV0sIEB5WzBdLCBAeVsxXSwgQHRbM10sCisJCQkgQHhbMl0sIEB4WzNdLCBAeVsyXSwgQHlbM10sIEB0WzJdKTsKKyRjb2RlLj08PF9fXzsKKwlweG9yCUB0WzBdLCBAeFswXQorCXB4b3IJQHRbMF0sIEB4WzJdCisJcHhvcglAdFsxXSwgQHhbMV0KKwlweG9yCUB0WzFdLCBAeFszXQorCisJbW92ZHFhCUB4WzRdLCBAdFswXQorCW1vdmRxYQlAeFs1XSwgQHRbMV0KKwlweG9yCUB4WzZdLCBAdFswXQorCXB4b3IJQHhbN10sIEB0WzFdCitfX18KKwkmTXVsX0dGNF9OX0dGNAkoQHRbMF0sIEB0WzFdLCBAeVswXSwgQHlbMV0sIEB0WzNdLAorCQkJIEB4WzZdLCBAeFs3XSwgQHlbMl0sIEB5WzNdLCBAdFsyXSk7CiskY29kZS49PDxfX187CisJcHhvcglAeVsyXSwgQHlbMF0KKwlweG9yCUB5WzNdLCBAeVsxXQorX19fCisJJk11bF9HRjQgIAkoQHhbNF0sIEB4WzVdLCBAeVswXSwgQHlbMV0sIEB0WzNdKTsKKyRjb2RlLj08PF9fXzsKKwlweG9yCUB0WzBdLCBAeFs0XQorCXB4b3IJQHRbMF0sIEB4WzZdCisJcHhvcglAdFsxXSwgQHhbNV0KKwlweG9yCUB0WzFdLCBAeFs3XQorX19fCit9CitzdWIgSW52X0dGMjU2IHsKKyM7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyM7KiBJbnZfR0YyNTY6IElucHV0IHgwLXg3IE91dHB1dCB4MC14NyBUZW1wIHQwLXQzLHMwLXMzICgxNDQpICAgICAgICoKKyM7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK215IEB4PUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTFdOworbXkgQHM9QF9bMTIuLjE1XTsKKyMgZGlyZWN0IG9wdGltaXphdGlvbnMgZnJvbSBoYXJkd2FyZQorJGNvZGUuPTw8X19fOworCW1vdmRxYQlAeFs0XSwgQHRbM10KKwltb3ZkcWEJQHhbNV0sIEB0WzJdCisJbW92ZHFhCUB4WzFdLCBAdFsxXQorCW1vdmRxYQlAeFs3XSwgQHNbMV0KKwltb3ZkcWEJQHhbMF0sIEBzWzBdCisKKwlweG9yCUB4WzZdLCBAdFszXQorCXB4b3IJQHhbN10sIEB0WzJdCisJcHhvcglAeFszXSwgQHRbMV0KKwkgbW92ZHFhCUB0WzNdLCBAc1syXQorCXB4b3IJQHhbNl0sIEBzWzFdCisJIG1vdmRxYQlAdFsyXSwgQHRbMF0KKwlweG9yCUB4WzJdLCBAc1swXQorCSBtb3ZkcWEJQHRbM10sIEBzWzNdCisKKwlwb3IJQHRbMV0sIEB0WzJdCisJcG9yCUBzWzBdLCBAdFszXQorCXB4b3IJQHRbMF0sIEBzWzNdCisJcGFuZAlAc1swXSwgQHNbMl0KKwlweG9yCUB0WzFdLCBAc1swXQorCXBhbmQJQHRbMV0sIEB0WzBdCisJcGFuZAlAc1swXSwgQHNbM10KKwltb3ZkcWEJQHhbM10sIEBzWzBdCisJcHhvcglAeFsyXSwgQHNbMF0KKwlwYW5kCUBzWzBdLCBAc1sxXQorCXB4b3IJQHNbMV0sIEB0WzNdCisJcHhvcglAc1sxXSwgQHRbMl0KKwltb3ZkcWEJQHhbNF0sIEBzWzFdCisJbW92ZHFhCUB4WzFdLCBAc1swXQorCXB4b3IJQHhbNV0sIEBzWzFdCisJcHhvcglAeFswXSwgQHNbMF0KKwltb3ZkcWEJQHNbMV0sIEB0WzFdCisJcGFuZAlAc1swXSwgQHNbMV0KKwlwb3IJQHNbMF0sIEB0WzFdCisJcHhvcglAc1sxXSwgQHRbMF0KKwlweG9yCUBzWzNdLCBAdFszXQorCXB4b3IJQHNbMl0sIEB0WzJdCisJcHhvcglAc1szXSwgQHRbMV0KKwltb3ZkcWEJQHhbN10sIEBzWzBdCisJcHhvcglAc1syXSwgQHRbMF0KKwltb3ZkcWEJQHhbNl0sIEBzWzFdCisJcHhvcglAc1syXSwgQHRbMV0KKwltb3ZkcWEJQHhbNV0sIEBzWzJdCisJcGFuZAlAeFszXSwgQHNbMF0KKwltb3ZkcWEJQHhbNF0sIEBzWzNdCisJcGFuZAlAeFsyXSwgQHNbMV0KKwlwYW5kCUB4WzFdLCBAc1syXQorCXBvcglAeFswXSwgQHNbM10KKwlweG9yCUBzWzBdLCBAdFszXQorCXB4b3IJQHNbMV0sIEB0WzJdCisJcHhvcglAc1syXSwgQHRbMV0KKwlweG9yCUBzWzNdLCBAdFswXSAKKworCSNJbnZfR0YxNiBcdDAsIFx0MSwgXHQyLCBcdDMsIFxzMCwgXHMxLCBcczIsIFxzMworCisJIyBuZXcgc21hbGxlciBpbnZlcnNpb24KKworCW1vdmRxYQlAdFszXSwgQHNbMF0KKwlwYW5kCUB0WzFdLCBAdFszXQorCXB4b3IJQHRbMl0sIEBzWzBdCisKKwltb3ZkcWEJQHRbMF0sIEBzWzJdCisJbW92ZHFhCUBzWzBdLCBAc1szXQorCXB4b3IJQHRbM10sIEBzWzJdCisJcGFuZAlAc1syXSwgQHNbM10KKworCW1vdmRxYQlAdFsxXSwgQHNbMV0KKwlweG9yCUB0WzJdLCBAc1szXQorCXB4b3IJQHRbMF0sIEBzWzFdCisKKwlweG9yCUB0WzJdLCBAdFszXQorCisJcGFuZAlAdFszXSwgQHNbMV0KKworCW1vdmRxYQlAc1syXSwgQHRbMl0KKwlweG9yCUB0WzBdLCBAc1sxXQorCisJcHhvcglAc1sxXSwgQHRbMl0KKwlweG9yCUBzWzFdLCBAdFsxXQorCisJcGFuZAlAdFswXSwgQHRbMl0KKworCXB4b3IJQHRbMl0sIEBzWzJdCisJcHhvcglAdFsyXSwgQHRbMV0KKworCXBhbmQJQHNbM10sIEBzWzJdCisKKwlweG9yCUBzWzBdLCBAc1syXQorX19fCisjIG91dHB1dCBpbiBzMywgczIsIHMxLCB0MQorCisjIE11bF9HRjE2XzIgXHgwLCBceDEsIFx4MiwgXHgzLCBceDQsIFx4NSwgXHg2LCBceDcsIFx0MiwgXHQzLCBcdDAsIFx0MSwgXHMwLCBcczEsIFxzMiwgXHMzCisKKyMgTXVsX0dGMTZfMiBceDAsIFx4MSwgXHgyLCBceDMsIFx4NCwgXHg1LCBceDYsIFx4NywgXHMzLCBcczIsIFxzMSwgXHQxLCBcczAsIFx0MCwgXHQyLCBcdDMKKwkmTXVsX0dGMTZfMihAeCxAc1szLDIsMV0sQHRbMV0sQHNbMF0sQHRbMCwyLDNdKTsKKworIyMjIG91dHB1dCBtc2IgPiBbeDMseDIseDEseDAseDcseDYseDUseDRdIDwgbHNiCit9CisKKyMgQUVTIGxpbmVhciBjb21wb25lbnRzCisKK3N1YiBTaGlmdFJvd3MgeworbXkgQHg9QF9bMC4uN107CitteSAkbWFzaz1wb3A7CiskY29kZS49PDxfX187CisJcHhvcgkweDAwKCRrZXkpLEB4WzBdCisJcHhvcgkweDEwKCRrZXkpLEB4WzFdCisJcHNodWZiCSRtYXNrLEB4WzBdCisJcHhvcgkweDIwKCRrZXkpLEB4WzJdCisJcHNodWZiCSRtYXNrLEB4WzFdCisJcHhvcgkweDMwKCRrZXkpLEB4WzNdCisJcHNodWZiCSRtYXNrLEB4WzJdCisJcHhvcgkweDQwKCRrZXkpLEB4WzRdCisJcHNodWZiCSRtYXNrLEB4WzNdCisJcHhvcgkweDUwKCRrZXkpLEB4WzVdCisJcHNodWZiCSRtYXNrLEB4WzRdCisJcHhvcgkweDYwKCRrZXkpLEB4WzZdCisJcHNodWZiCSRtYXNrLEB4WzVdCisJcHhvcgkweDcwKCRrZXkpLEB4WzddCisJcHNodWZiCSRtYXNrLEB4WzZdCisJbGVhCTB4ODAoJGtleSksJGtleQorCXBzaHVmYgkkbWFzayxAeFs3XQorX19fCit9CisKK3N1YiBNaXhDb2x1bW5zIHsKKyMgbW9kaWZpZWQgdG8gZW1pdCBvdXRwdXQgaW4gb3JkZXIgc3VpdGFibGUgZm9yIGZlZWRpbmcgYmFjayB0byBhZXNlbmNbbGFzdF0KK215IEB4PUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTVdOworJGNvZGUuPTw8X19fOworCXBzaHVmZAlcJDB4OTMsIEB4WzBdLCBAdFswXQkjIHgwIDw8PCAzMgorCXBzaHVmZAlcJDB4OTMsIEB4WzFdLCBAdFsxXQorCSBweG9yCUB0WzBdLCBAeFswXQkJIyB4MCBeICh4MCA8PDwgMzIpCisJcHNodWZkCVwkMHg5MywgQHhbMl0sIEB0WzJdCisJIHB4b3IJQHRbMV0sIEB4WzFdCisJcHNodWZkCVwkMHg5MywgQHhbM10sIEB0WzNdCisJIHB4b3IJQHRbMl0sIEB4WzJdCisJcHNodWZkCVwkMHg5MywgQHhbNF0sIEB0WzRdCisJIHB4b3IJQHRbM10sIEB4WzNdCisJcHNodWZkCVwkMHg5MywgQHhbNV0sIEB0WzVdCisJIHB4b3IJQHRbNF0sIEB4WzRdCisJcHNodWZkCVwkMHg5MywgQHhbNl0sIEB0WzZdCisJIHB4b3IJQHRbNV0sIEB4WzVdCisJcHNodWZkCVwkMHg5MywgQHhbN10sIEB0WzddCisJIHB4b3IJQHRbNl0sIEB4WzZdCisJIHB4b3IJQHRbN10sIEB4WzddCisKKwlweG9yCUB4WzBdLCBAdFsxXQorCXB4b3IJQHhbN10sIEB0WzBdCisJcHhvcglAeFs3XSwgQHRbMV0KKwkgcHNodWZkCVwkMHg0RSwgQHhbMF0sIEB4WzBdIAkjICh4MCBeICh4MCA8PDwgMzIpKSA8PDwgNjQpCisJcHhvcglAeFsxXSwgQHRbMl0KKwkgcHNodWZkCVwkMHg0RSwgQHhbMV0sIEB4WzFdCisJcHhvcglAeFs0XSwgQHRbNV0KKwkgcHhvcglAdFswXSwgQHhbMF0KKwlweG9yCUB4WzVdLCBAdFs2XQorCSBweG9yCUB0WzFdLCBAeFsxXQorCXB4b3IJQHhbM10sIEB0WzRdCisJIHBzaHVmZAlcJDB4NEUsIEB4WzRdLCBAdFswXQorCXB4b3IJQHhbNl0sIEB0WzddCisJIHBzaHVmZAlcJDB4NEUsIEB4WzVdLCBAdFsxXQorCXB4b3IJQHhbMl0sIEB0WzNdCisJIHBzaHVmZAlcJDB4NEUsIEB4WzNdLCBAeFs0XQorCXB4b3IJQHhbN10sIEB0WzNdCisJIHBzaHVmZAlcJDB4NEUsIEB4WzddLCBAeFs1XQorCXB4b3IJQHhbN10sIEB0WzRdCisJIHBzaHVmZAlcJDB4NEUsIEB4WzZdLCBAeFszXQorCXB4b3IJQHRbNF0sIEB0WzBdCisJIHBzaHVmZAlcJDB4NEUsIEB4WzJdLCBAeFs2XQorCXB4b3IJQHRbNV0sIEB0WzFdCisKKwlweG9yCUB0WzNdLCBAeFs0XQorCXB4b3IJQHRbN10sIEB4WzVdCisJcHhvcglAdFs2XSwgQHhbM10KKwkgbW92ZHFhCUB0WzBdLCBAeFsyXQorCXB4b3IJQHRbMl0sIEB4WzZdCisJIG1vdmRxYQlAdFsxXSwgQHhbN10KK19fXworfQorCitzdWIgSW52TWl4Q29sdW1ucyB7CitteSBAeD1AX1swLi43XTsKK215IEB0PUBfWzguLjE1XTsKKworJGNvZGUuPTw8X19fOworCSMgbXVsdGlwbGljYXRpb24gYnkgMHgwZQorCXBzaHVmZAlcJDB4OTMsIEB4WzddLCBAdFs3XQorCW1vdmRxYQlAeFsyXSwgQHRbMl0KKwlweG9yCUB4WzVdLCBAeFs3XQkJIyA3IDUKKwlweG9yCUB4WzVdLCBAeFsyXQkJIyAyIDUKKwlwc2h1ZmQJXCQweDkzLCBAeFswXSwgQHRbMF0KKwltb3ZkcWEJQHhbNV0sIEB0WzVdCisJcHhvcglAeFswXSwgQHhbNV0JCSMgNSAwCQlbMV0KKwlweG9yCUB4WzFdLCBAeFswXQkJIyAwIDEKKwlwc2h1ZmQJXCQweDkzLCBAeFsxXSwgQHRbMV0KKwlweG9yCUB4WzJdLCBAeFsxXQkJIyAxIDI1CisJcHhvcglAeFs2XSwgQHhbMF0JCSMgMDEgNgkJWzJdCisJcHhvcglAeFszXSwgQHhbMV0JCSMgMTI1IDMJCVs0XQorCXBzaHVmZAlcJDB4OTMsIEB4WzNdLCBAdFszXQorCXB4b3IJQHhbMF0sIEB4WzJdCQkjIDI1IDAxNglbM10KKwlweG9yCUB4WzddLCBAeFszXQkJIyAzIDc1CisJcHhvcglAeFs2XSwgQHhbN10JCSMgNzUgNgkJWzBdCisJcHNodWZkCVwkMHg5MywgQHhbNl0sIEB0WzZdCisJbW92ZHFhCUB4WzRdLCBAdFs0XQorCXB4b3IJQHhbNF0sIEB4WzZdCQkjIDYgNAorCXB4b3IJQHhbM10sIEB4WzRdCQkjIDQgMzc1CQlbNl0KKwlweG9yCUB4WzddLCBAeFszXQkJIyAzNzUgNzU2PTM2CisJcHhvcglAdFs1XSwgQHhbNl0JCSMgNjQgNQkJWzddCisJcHhvcglAdFsyXSwgQHhbM10JCSMgMzYgMgorCXB4b3IJQHRbNF0sIEB4WzNdCQkjIDM2MiA0CQlbNV0KKwlwc2h1ZmQJXCQweDkzLCBAdFs1XSwgQHRbNV0KK19fXworCQkJCQlteSBAeSA9IEB4WzcsNSwwLDIsMSwzLDQsNl07CiskY29kZS49PDxfX187CisJIyBtdWx0aXBsaWNhdGlvbiBieSAweDBiCisJcHhvcglAeVswXSwgQHlbMV0KKwlweG9yCUB0WzBdLCBAeVswXQorCXB4b3IJQHRbMV0sIEB5WzFdCisJcHNodWZkCVwkMHg5MywgQHRbMl0sIEB0WzJdCisJcHhvcglAdFs1XSwgQHlbMF0KKwlweG9yCUB0WzZdLCBAeVsxXQorCXB4b3IJQHRbN10sIEB5WzBdCisJcHNodWZkCVwkMHg5MywgQHRbNF0sIEB0WzRdCisJcHhvcglAdFs2XSwgQHRbN10JCSMgY2xvYmJlciB0WzddCisJcHhvcglAeVswXSwgQHlbMV0KKworCXB4b3IJQHRbMF0sIEB5WzNdCisJcHNodWZkCVwkMHg5MywgQHRbMF0sIEB0WzBdCisJcHhvcglAdFsxXSwgQHlbMl0KKwlweG9yCUB0WzFdLCBAeVs0XQorCXB4b3IJQHRbMl0sIEB5WzJdCisJcHNodWZkCVwkMHg5MywgQHRbMV0sIEB0WzFdCisJcHhvcglAdFsyXSwgQHlbM10KKwlweG9yCUB0WzJdLCBAeVs1XQorCXB4b3IJQHRbN10sIEB5WzJdCisJcHNodWZkCVwkMHg5MywgQHRbMl0sIEB0WzJdCisJcHhvcglAdFszXSwgQHlbM10KKwlweG9yCUB0WzNdLCBAeVs2XQorCXB4b3IJQHRbM10sIEB5WzRdCisJcHNodWZkCVwkMHg5MywgQHRbM10sIEB0WzNdCisJcHhvcglAdFs0XSwgQHlbN10KKwlweG9yCUB0WzRdLCBAeVs1XQorCXB4b3IJQHRbN10sIEB5WzddCisJcHhvcglAdFs1XSwgQHlbM10KKwlweG9yCUB0WzRdLCBAeVs0XQorCXB4b3IJQHRbNV0sIEB0WzddCQkjIGNsb2JiZXIgdFs3XSBldmVuIG1vcmUKKworCXB4b3IJQHRbN10sIEB5WzVdCisJcHNodWZkCVwkMHg5MywgQHRbNF0sIEB0WzRdCisJcHhvcglAdFs3XSwgQHlbNl0KKwlweG9yCUB0WzddLCBAeVs0XQorCisJcHhvcglAdFs1XSwgQHRbN10KKwlwc2h1ZmQJXCQweDkzLCBAdFs1XSwgQHRbNV0KKwlweG9yCUB0WzZdLCBAdFs3XQkJIyByZXN0b3JlIHRbN10KKworCSMgbXVsdGlwbGljYXRpb24gYnkgMHgwZAorCXB4b3IJQHlbN10sIEB5WzRdCisJcHhvcglAdFs0XSwgQHlbN10KKwlwc2h1ZmQJXCQweDkzLCBAdFs2XSwgQHRbNl0KKwlweG9yCUB0WzBdLCBAeVsyXQorCXB4b3IJQHRbNV0sIEB5WzddCisJcHhvcglAdFsyXSwgQHlbMl0KKwlwc2h1ZmQJXCQweDkzLCBAdFs3XSwgQHRbN10KKworCXB4b3IJQHlbMV0sIEB5WzNdCisJcHhvcglAdFsxXSwgQHlbMV0KKwlweG9yCUB0WzBdLCBAeVswXQorCXB4b3IJQHRbMF0sIEB5WzNdCisJcHhvcglAdFs1XSwgQHlbMV0KKwlweG9yCUB0WzVdLCBAeVswXQorCXB4b3IJQHRbN10sIEB5WzFdCisJcHNodWZkCVwkMHg5MywgQHRbMF0sIEB0WzBdCisJcHhvcglAdFs2XSwgQHlbMF0KKwlweG9yCUB5WzFdLCBAeVszXQorCXB4b3IJQHRbMV0sIEB5WzRdCisJcHNodWZkCVwkMHg5MywgQHRbMV0sIEB0WzFdCisKKwlweG9yCUB0WzddLCBAeVs3XQorCXB4b3IJQHRbMl0sIEB5WzRdCisJcHhvcglAdFsyXSwgQHlbNV0KKwlwc2h1ZmQJXCQweDkzLCBAdFsyXSwgQHRbMl0KKwlweG9yCUB0WzZdLCBAeVsyXQorCXB4b3IJQHRbM10sIEB0WzZdCQkjIGNsb2JiZXIgdFs2XQorCXB4b3IJQHlbN10sIEB5WzRdCisJcHhvcglAdFs2XSwgQHlbM10KKworCXB4b3IJQHRbNl0sIEB5WzZdCisJcHhvcglAdFs1XSwgQHlbNV0KKwlweG9yCUB0WzRdLCBAeVs2XQorCXBzaHVmZAlcJDB4OTMsIEB0WzRdLCBAdFs0XQorCXB4b3IJQHRbNl0sIEB5WzVdCisJcHhvcglAdFs3XSwgQHlbNl0KKwlweG9yCUB0WzNdLCBAdFs2XQkJIyByZXN0b3JlIHRbNl0KKworCXBzaHVmZAlcJDB4OTMsIEB0WzVdLCBAdFs1XQorCXBzaHVmZAlcJDB4OTMsIEB0WzZdLCBAdFs2XQorCXBzaHVmZAlcJDB4OTMsIEB0WzddLCBAdFs3XQorCXBzaHVmZAlcJDB4OTMsIEB0WzNdLCBAdFszXQorCisJIyBtdWx0aXBsaWNhdGlvbiBieSAweDA5CisJcHhvcglAeVsxXSwgQHlbNF0KKwlweG9yCUB5WzFdLCBAdFsxXQkJIyB0WzFdPXlbMV0KKwlweG9yCUB0WzVdLCBAdFswXQkJIyBjbG9iYmVyIHRbMF0KKwlweG9yCUB0WzVdLCBAdFsxXQorCXB4b3IJQHRbMF0sIEB5WzNdCisJcHhvcglAeVswXSwgQHRbMF0JCSMgdFswXT15WzBdCisJcHhvcglAdFs2XSwgQHRbMV0KKwlweG9yCUB0WzddLCBAdFs2XQkJIyBjbG9iYmVyIHRbNl0KKwlweG9yCUB0WzFdLCBAeVs0XQorCXB4b3IJQHRbNF0sIEB5WzddCisJcHhvcglAeVs0XSwgQHRbNF0JCSMgdFs0XT15WzRdCisJcHhvcglAdFszXSwgQHlbNl0KKwlweG9yCUB5WzNdLCBAdFszXQkJIyB0WzNdPXlbM10KKwlweG9yCUB0WzJdLCBAeVs1XQorCXB4b3IJQHlbMl0sIEB0WzJdCQkjIHRbMl09eVsyXQorCXB4b3IJQHRbN10sIEB0WzNdCisJcHhvcglAeVs1XSwgQHRbNV0JCSMgdFs1XT15WzVdCisJcHhvcglAdFs2XSwgQHRbMl0KKwlweG9yCUB0WzZdLCBAdFs1XQorCXB4b3IJQHlbNl0sIEB0WzZdCQkjIHRbNl09eVs2XQorCXB4b3IJQHlbN10sIEB0WzddCQkjIHRbN109eVs3XQorCisJbW92ZHFhCUB0WzBdLEBYTU1bMF0KKwltb3ZkcWEJQHRbMV0sQFhNTVsxXQorCW1vdmRxYQlAdFsyXSxAWE1NWzJdCisJbW92ZHFhCUB0WzNdLEBYTU1bM10KKwltb3ZkcWEJQHRbNF0sQFhNTVs0XQorCW1vdmRxYQlAdFs1XSxAWE1NWzVdCisJbW92ZHFhCUB0WzZdLEBYTU1bNl0KKwltb3ZkcWEJQHRbN10sQFhNTVs3XQorX19fCit9CisKK3N1YiBhZXNlbmMgewkJCQkjIG5vdCB1c2VkCitteSBAYj1AX1swLi43XTsKK215IEB0PUBfWzguLjE1XTsKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJMHgzMCgkY29uc3QpLEB0WzBdCSMgLkxTUgorX19fCisJJlNoaWZ0Um93cwkoQGIsQHRbMF0pOworCSZTYm94CQkoQGIsQHQpOworCSZNaXhDb2x1bW5zCShAYlswLDEsNCw2LDMsNywyLDVdLEB0KTsKK30KKworc3ViIGFlc2VuY2xhc3QgewkJCSMgbm90IHVzZWQKK215IEBiPUBfWzAuLjddOworbXkgQHQ9QF9bOC4uMTVdOworJGNvZGUuPTw8X19fOworCW1vdmRxYQkweDQwKCRjb25zdCksQHRbMF0JIyAuTFNSTTAKK19fXworCSZTaGlmdFJvd3MJKEBiLEB0WzBdKTsKKwkmU2JveAkJKEBiLEB0KTsKKyRjb2RlLj08PF9fXworCXB4b3IJMHgwMCgka2V5KSxAYlswXQorCXB4b3IJMHgxMCgka2V5KSxAYlsxXQorCXB4b3IJMHgyMCgka2V5KSxAYls0XQorCXB4b3IJMHgzMCgka2V5KSxAYls2XQorCXB4b3IJMHg0MCgka2V5KSxAYlszXQorCXB4b3IJMHg1MCgka2V5KSxAYls3XQorCXB4b3IJMHg2MCgka2V5KSxAYlsyXQorCXB4b3IJMHg3MCgka2V5KSxAYls1XQorX19fCit9CisKK3N1YiBzd2FwbW92ZSB7CitteSAoJGEsJGIsJG4sJG1hc2ssJHQpPUBfOworJGNvZGUuPTw8X19fOworCW1vdmRxYQkkYiwkdAorCXBzcmxxCVwkJG4sJGIKKwlweG9yICAJJGEsJGIKKwlwYW5kCSRtYXNrLCRiCisJcHhvcgkkYiwkYQorCXBzbGxxCVwkJG4sJGIKKwlweG9yCSR0LCRiCitfX18KK30KK3N1YiBzd2FwbW92ZTJ4IHsKK215ICgkYTAsJGIwLCRhMSwkYjEsJG4sJG1hc2ssJHQwLCR0MSk9QF87CiskY29kZS49PDxfX187CisJbW92ZHFhCSRiMCwkdDAKKwlwc3JscQlcJCRuLCRiMAorCSBtb3ZkcWEJJGIxLCR0MQorCSBwc3JscQlcJCRuLCRiMQorCXB4b3IgIAkkYTAsJGIwCisJIHB4b3IgIAkkYTEsJGIxCisJcGFuZAkkbWFzaywkYjAKKwkgcGFuZAkkbWFzaywkYjEKKwlweG9yCSRiMCwkYTAKKwlwc2xscQlcJCRuLCRiMAorCSBweG9yCSRiMSwkYTEKKwkgcHNsbHEJXCQkbiwkYjEKKwlweG9yCSR0MCwkYjAKKwkgcHhvcgkkdDEsJGIxCitfX18KK30KKworc3ViIGJpdHNsaWNlIHsKK215IEB4PXJldmVyc2UoQF9bMC4uN10pOworbXkgKCR0MCwkdDEsJHQyLCR0Myk9QF9bOC4uMTFdOworJGNvZGUuPTw8X19fOworCW1vdmRxYQkweDAwKCRjb25zdCksJHQwCSMgLkxCUzAKKwltb3ZkcWEJMHgxMCgkY29uc3QpLCR0MQkjIC5MQlMxCitfX18KKwkmc3dhcG1vdmUyeChAeFswLDEsMiwzXSwxLCR0MCwkdDIsJHQzKTsKKwkmc3dhcG1vdmUyeChAeFs0LDUsNiw3XSwxLCR0MCwkdDIsJHQzKTsKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJMHgyMCgkY29uc3QpLCR0MAkjIC5MQlMyCitfX18KKwkmc3dhcG1vdmUyeChAeFswLDIsMSwzXSwyLCR0MSwkdDIsJHQzKTsKKwkmc3dhcG1vdmUyeChAeFs0LDYsNSw3XSwyLCR0MSwkdDIsJHQzKTsKKworCSZzd2FwbW92ZTJ4KEB4WzAsNCwxLDVdLDQsJHQwLCR0MiwkdDMpOworCSZzd2FwbW92ZTJ4KEB4WzIsNiwzLDddLDQsJHQwLCR0MiwkdDMpOworfQorCiskY29kZS49PDxfX187CisudGV4dAorCisuZXh0ZXJuCWFzbV9BRVNfZW5jcnlwdAorLmV4dGVybglhc21fQUVTX2RlY3J5cHQKKworLnR5cGUJX2JzYWVzX2VuY3J5cHQ4LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgk2NAorX2JzYWVzX2VuY3J5cHQ4OgorCWxlYQkuTEJTMCglcmlwKSwgJGNvbnN0CSMgY29uc3RhbnRzIHRhYmxlCisKKwltb3ZkcWEJKCRrZXkpLCBAWE1NWzldCQkjIHJvdW5kIDAga2V5CisJbGVhCTB4MTAoJGtleSksICRrZXkKKwltb3ZkcWEJMHg2MCgkY29uc3QpLCBAWE1NWzhdCSMgLkxNMFNSCisJcHhvcglAWE1NWzldLCBAWE1NWzBdCSMgeG9yIHdpdGggcm91bmQwIGtleQorCXB4b3IJQFhNTVs5XSwgQFhNTVsxXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVswXQorCXB4b3IJQFhNTVs5XSwgQFhNTVsyXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVsxXQorCXB4b3IJQFhNTVs5XSwgQFhNTVszXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVsyXQorCXB4b3IJQFhNTVs5XSwgQFhNTVs0XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVszXQorCXB4b3IJQFhNTVs5XSwgQFhNTVs1XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs0XQorCXB4b3IJQFhNTVs5XSwgQFhNTVs2XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs1XQorCXB4b3IJQFhNTVs5XSwgQFhNTVs3XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs2XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs3XQorX2JzYWVzX2VuY3J5cHQ4X2JpdHNsaWNlOgorX19fCisJJmJpdHNsaWNlCShAWE1NWzAuLjcsIDguLjExXSk7CiskY29kZS49PDxfX187CisJZGVjCSRyb3VuZHMKKwlqbXAJLkxlbmNfc2JveAorLmFsaWduCTE2CisuTGVuY19sb29wOgorX19fCisJJlNoaWZ0Um93cwkoQFhNTVswLi43LCA4XSk7CiskY29kZS49Ii5MZW5jX3Nib3g6XG4iOworCSZTYm94CQkoQFhNTVswLi43LCA4Li4xNV0pOworJGNvZGUuPTw8X19fOworCWRlYwkkcm91bmRzCisJamwJLkxlbmNfZG9uZQorX19fCisJJk1peENvbHVtbnMJKEBYTU1bMCwxLDQsNiwzLDcsMiw1LCA4Li4xNV0pOworJGNvZGUuPTw8X19fOworCW1vdmRxYQkweDMwKCRjb25zdCksIEBYTU1bOF0JIyAuTFNSCisJam56CS5MZW5jX2xvb3AKKwltb3ZkcWEJMHg0MCgkY29uc3QpLCBAWE1NWzhdCSMgLkxTUk0wCisJam1wCS5MZW5jX2xvb3AKKy5hbGlnbgkxNgorLkxlbmNfZG9uZToKK19fXworCSMgb3V0cHV0IGluIGxzYiA+IFt0MCwgdDEsIHQ0LCB0NiwgdDMsIHQ3LCB0MiwgdDVdIDwgbXNiCisJJmJpdHNsaWNlCShAWE1NWzAsMSw0LDYsMyw3LDIsNSwgOC4uMTFdKTsKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJKCRrZXkpLCBAWE1NWzhdCQkjIGxhc3Qgcm91bmQga2V5CisJcHhvcglAWE1NWzhdLCBAWE1NWzRdCisJcHhvcglAWE1NWzhdLCBAWE1NWzZdCisJcHhvcglAWE1NWzhdLCBAWE1NWzNdCisJcHhvcglAWE1NWzhdLCBAWE1NWzddCisJcHhvcglAWE1NWzhdLCBAWE1NWzJdCisJcHhvcglAWE1NWzhdLCBAWE1NWzVdCisJcHhvcglAWE1NWzhdLCBAWE1NWzBdCisJcHhvcglAWE1NWzhdLCBAWE1NWzFdCisJcmV0Cisuc2l6ZQlfYnNhZXNfZW5jcnlwdDgsLi1fYnNhZXNfZW5jcnlwdDgKKworLnR5cGUJX2JzYWVzX2RlY3J5cHQ4LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgk2NAorX2JzYWVzX2RlY3J5cHQ4OgorCWxlYQkuTEJTMCglcmlwKSwgJGNvbnN0CSMgY29uc3RhbnRzIHRhYmxlCisKKwltb3ZkcWEJKCRrZXkpLCBAWE1NWzldCQkjIHJvdW5kIDAga2V5CisJbGVhCTB4MTAoJGtleSksICRrZXkKKwltb3ZkcWEJLTB4MzAoJGNvbnN0KSwgQFhNTVs4XQkjIC5MTTBJU1IKKwlweG9yCUBYTU1bOV0sIEBYTU1bMF0JIyB4b3Igd2l0aCByb3VuZDAga2V5CisJcHhvcglAWE1NWzldLCBAWE1NWzFdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzBdCisJcHhvcglAWE1NWzldLCBAWE1NWzJdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzFdCisJcHhvcglAWE1NWzldLCBAWE1NWzNdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzJdCisJcHhvcglAWE1NWzldLCBAWE1NWzRdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzNdCisJcHhvcglAWE1NWzldLCBAWE1NWzVdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzRdCisJcHhvcglAWE1NWzldLCBAWE1NWzZdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzVdCisJcHhvcglAWE1NWzldLCBAWE1NWzddCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzZdCisJIHBzaHVmYglAWE1NWzhdLCBAWE1NWzddCitfX18KKwkmYml0c2xpY2UJKEBYTU1bMC4uNywgOC4uMTFdKTsKKyRjb2RlLj08PF9fXzsKKwlkZWMJJHJvdW5kcworCWptcAkuTGRlY19zYm94CisuYWxpZ24JMTYKKy5MZGVjX2xvb3A6CitfX18KKwkmU2hpZnRSb3dzCShAWE1NWzAuLjcsIDhdKTsKKyRjb2RlLj0iLkxkZWNfc2JveDpcbiI7CisJJkludlNib3gJKEBYTU1bMC4uNywgOC4uMTVdKTsKKyRjb2RlLj08PF9fXzsKKwlkZWMJJHJvdW5kcworCWpsCS5MZGVjX2RvbmUKK19fXworCSZJbnZNaXhDb2x1bW5zCShAWE1NWzAsMSw2LDQsMiw3LDMsNSwgOC4uMTVdKTsKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJLTB4MTAoJGNvbnN0KSwgQFhNTVs4XQkjIC5MSVNSCisJam56CS5MZGVjX2xvb3AKKwltb3ZkcWEJLTB4MjAoJGNvbnN0KSwgQFhNTVs4XQkjIC5MSVNSTTAKKwlqbXAJLkxkZWNfbG9vcAorLmFsaWduCTE2CisuTGRlY19kb25lOgorX19fCisJJmJpdHNsaWNlCShAWE1NWzAsMSw2LDQsMiw3LDMsNSwgOC4uMTFdKTsKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJKCRrZXkpLCBAWE1NWzhdCQkjIGxhc3Qgcm91bmQga2V5CisJcHhvcglAWE1NWzhdLCBAWE1NWzZdCisJcHhvcglAWE1NWzhdLCBAWE1NWzRdCisJcHhvcglAWE1NWzhdLCBAWE1NWzJdCisJcHhvcglAWE1NWzhdLCBAWE1NWzddCisJcHhvcglAWE1NWzhdLCBAWE1NWzNdCisJcHhvcglAWE1NWzhdLCBAWE1NWzVdCisJcHhvcglAWE1NWzhdLCBAWE1NWzBdCisJcHhvcglAWE1NWzhdLCBAWE1NWzFdCisJcmV0Cisuc2l6ZQlfYnNhZXNfZGVjcnlwdDgsLi1fYnNhZXNfZGVjcnlwdDgKK19fXworfQoreworbXkgKCRvdXQsJGlucCwkcm91bmRzLCRjb25zdCk9KCIlcmF4IiwiJXJjeCIsIiVyMTBkIiwiJXIxMSIpOworCitzdWIgYml0c2xpY2Vfa2V5IHsKK215IEB4PXJldmVyc2UoQF9bMC4uN10pOworbXkgKCRiczAsJGJzMSwkYnMyLCR0MiwkdDMpPUBfWzguLjEyXTsKKworCSZzd2FwbW92ZQkoQHhbMCwxXSwxLCRiczAsJHQyLCR0Myk7CiskY29kZS49PDxfX187CisJIyZzd2FwbW92ZShAeFsyLDNdLDEsJHQwLCR0MiwkdDMpOworCW1vdmRxYQlAeFswXSwgQHhbMl0KKwltb3ZkcWEJQHhbMV0sIEB4WzNdCitfX18KKwkjJnN3YXBtb3ZlMngoQHhbNCw1LDYsN10sMSwkdDAsJHQyLCR0Myk7CisKKwkmc3dhcG1vdmUyeAkoQHhbMCwyLDEsM10sMiwkYnMxLCR0MiwkdDMpOworJGNvZGUuPTw8X19fOworCSMmc3dhcG1vdmUyeChAeFs0LDYsNSw3XSwyLCR0MSwkdDIsJHQzKTsKKwltb3ZkcWEJQHhbMF0sIEB4WzRdCisJbW92ZHFhCUB4WzJdLCBAeFs2XQorCW1vdmRxYQlAeFsxXSwgQHhbNV0KKwltb3ZkcWEJQHhbM10sIEB4WzddCitfX18KKwkmc3dhcG1vdmUyeAkoQHhbMCw0LDEsNV0sNCwkYnMyLCR0MiwkdDMpOworCSZzd2FwbW92ZTJ4CShAeFsyLDYsMyw3XSw0LCRiczIsJHQyLCR0Myk7Cit9CisKKyRjb2RlLj08PF9fXzsKKy50eXBlCV9ic2Flc19rZXlfY29udmVydCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK19ic2Flc19rZXlfY29udmVydDoKKwlsZWEJLkxCUzEoJXJpcCksICRjb25zdAorCW1vdmRxdQkoJGlucCksICV4bW03CQkjIGxvYWQgcm91bmQgMCBrZXkKKwltb3ZkcWEJLTB4MTAoJGNvbnN0KSwgJXhtbTgJIyAuTEJTMAorCW1vdmRxYQkweDAwKCRjb25zdCksICV4bW05CSMgLkxCUzEKKwltb3ZkcWEJMHgxMCgkY29uc3QpLCAleG1tMTAJIyAuTEJTMgorCW1vdmRxYQkweDQwKCRjb25zdCksICV4bW0xMwkjIC5MTTAKKwltb3ZkcWEJMHg2MCgkY29uc3QpLCAleG1tMTQJIyAuTE5PVAorCisJbW92ZHF1CTB4MTAoJGlucCksICV4bW02CSMgbG9hZCByb3VuZCAxIGtleQorCWxlYQkweDEwKCRpbnApLCAkaW5wCisJbW92ZHFhCSV4bW03LCAoJG91dCkJCSMgc2F2ZSByb3VuZCAwIGtleQorCWxlYQkweDEwKCRvdXQpLCAkb3V0CisJZGVjCSRyb3VuZHMKKwlqbXAJLkxrZXlfbG9vcAorLmFsaWduCTE2CisuTGtleV9sb29wOgorCXBzaHVmYgkleG1tMTMsICV4bW02CQkjIC5MTTAKKwltb3ZkcWEJJXhtbTYsICV4bW03CitfX18KKwkmYml0c2xpY2Vfa2V5CShtYXAoIiV4bW0kXyIsKDAuLjcsIDguLjEyKSkpOworJGNvZGUuPTw8X19fOworCXB4b3IJJXhtbTE0LCAleG1tNQkJIyAicG5vdCIKKwlweG9yCSV4bW0xNCwgJXhtbTYKKwlweG9yCSV4bW0xNCwgJXhtbTAKKwlweG9yCSV4bW0xNCwgJXhtbTEKKwlsZWEJMHgxMCgkaW5wKSwgJGlucAorCW1vdmRxYQkleG1tMCwgMHgwMCgkb3V0KQkjIHdyaXRlIGJpdC1zbGljZWQgcm91bmQga2V5CisJbW92ZHFhCSV4bW0xLCAweDEwKCRvdXQpCisJbW92ZHFhCSV4bW0yLCAweDIwKCRvdXQpCisJbW92ZHFhCSV4bW0zLCAweDMwKCRvdXQpCisJbW92ZHFhCSV4bW00LCAweDQwKCRvdXQpCisJbW92ZHFhCSV4bW01LCAweDUwKCRvdXQpCisJbW92ZHFhCSV4bW02LCAweDYwKCRvdXQpCisJbW92ZHFhCSV4bW03LCAweDcwKCRvdXQpCisJbGVhCTB4ODAoJG91dCksJG91dAorCW1vdmRxdQkoJGlucCksICV4bW02CQkjIGxvYWQgbmV4dCByb3VuZCBrZXkKKwlkZWMJJHJvdW5kcworCWpuegkuTGtleV9sb29wCisKKwltb3ZkcWEJMHg3MCgkY29uc3QpLCAleG1tNwkjIC5MNjMKKwkjbW92ZHFhCSV4bW02LCAoJG91dCkJCSMgZG9uJ3Qgc2F2ZSBsYXN0IHJvdW5kIGtleQorCXJldAorLnNpemUJX2JzYWVzX2tleV9jb252ZXJ0LC4tX2JzYWVzX2tleV9jb252ZXJ0CitfX18KK30KKworaWYgKDAgJiYgISR3aW42NCkgewkjIGZvbGxvd2luZyBmb3VyIGZ1bmN0aW9ucyBhcmUgdW5zdXBwb3J0ZWQgaW50ZXJmYWNlCisJCQkjIHVzZWQgZm9yIGJlbmNobWFya2luZy4uLgorJGNvZGUuPTw8X19fOworLmdsb2JsCWJzYWVzX2VuY19rZXlfY29udmVydAorLnR5cGUJYnNhZXNfZW5jX2tleV9jb252ZXJ0LFxAZnVuY3Rpb24sMgorLmFsaWduCTE2Citic2Flc19lbmNfa2V5X2NvbnZlcnQ6CisJbW92CTI0MCgkaW5wKSwlcjEwZAkJIyBwYXNzIHJvdW5kcworCW1vdgkkaW5wLCVyY3gJCSMgcGFzcyBrZXkKKwltb3YJJG91dCwlcmF4CQkjIHBhc3Mga2V5IHNjaGVkdWxlCisJY2FsbAlfYnNhZXNfa2V5X2NvbnZlcnQKKwlweG9yCSV4bW02LCV4bW03CQkjIGZpeCB1cCBsYXN0IHJvdW5kIGtleQorCW1vdmRxYQkleG1tNywoJXJheCkJCSMgc2F2ZSBsYXN0IHJvdW5kIGtleQorCXJldAorLnNpemUJYnNhZXNfZW5jX2tleV9jb252ZXJ0LC4tYnNhZXNfZW5jX2tleV9jb252ZXJ0CisKKy5nbG9ibAlic2Flc19lbmNyeXB0XzEyOAorLnR5cGUJYnNhZXNfZW5jcnlwdF8xMjgsXEBmdW5jdGlvbiw0CisuYWxpZ24JMTYKK2JzYWVzX2VuY3J5cHRfMTI4OgorLkxlbmMxMjhfbG9vcDoKKwltb3ZkcXUJMHgwMCgkaW5wKSwgQFhNTVswXQkjIGxvYWQgaW5wdXQKKwltb3ZkcXUJMHgxMCgkaW5wKSwgQFhNTVsxXQorCW1vdmRxdQkweDIwKCRpbnApLCBAWE1NWzJdCisJbW92ZHF1CTB4MzAoJGlucCksIEBYTU1bM10KKwltb3ZkcXUJMHg0MCgkaW5wKSwgQFhNTVs0XQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzVdCisJbW92ZHF1CTB4NjAoJGlucCksIEBYTU1bNl0KKwltb3ZkcXUJMHg3MCgkaW5wKSwgQFhNTVs3XQorCW1vdgkka2V5LCAlcmF4CQkjIHBhc3MgdGhlICRrZXkKKwlsZWEJMHg4MCgkaW5wKSwgJGlucAorCW1vdglcJDEwLCVyMTBkCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVszXSwgMHg0MCgkb3V0KQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJbW92ZHF1CUBYTU1bMl0sIDB4NjAoJG91dCkKKwltb3ZkcXUJQFhNTVs1XSwgMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCAkb3V0CisJc3ViCVwkMHg4MCwkbGVuCisJamEJLkxlbmMxMjhfbG9vcAorCXJldAorLnNpemUJYnNhZXNfZW5jcnlwdF8xMjgsLi1ic2Flc19lbmNyeXB0XzEyOAorCisuZ2xvYmwJYnNhZXNfZGVjX2tleV9jb252ZXJ0CisudHlwZQlic2Flc19kZWNfa2V5X2NvbnZlcnQsXEBmdW5jdGlvbiwyCisuYWxpZ24JMTYKK2JzYWVzX2RlY19rZXlfY29udmVydDoKKwltb3YJMjQwKCRpbnApLCVyMTBkCQkjIHBhc3Mgcm91bmRzCisJbW92CSRpbnAsJXJjeAkJIyBwYXNzIGtleQorCW1vdgkkb3V0LCVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwljYWxsCV9ic2Flc19rZXlfY29udmVydAorCXB4b3IJKCRvdXQpLCV4bW03CQkjIGZpeCB1cCByb3VuZCAwIGtleQorCW1vdmRxYQkleG1tNiwoJXJheCkJCSMgc2F2ZSBsYXN0IHJvdW5kIGtleQorCW1vdmRxYQkleG1tNywoJG91dCkKKwlyZXQKKy5zaXplCWJzYWVzX2RlY19rZXlfY29udmVydCwuLWJzYWVzX2RlY19rZXlfY29udmVydAorCisuZ2xvYmwJYnNhZXNfZGVjcnlwdF8xMjgKKy50eXBlCWJzYWVzX2RlY3J5cHRfMTI4LFxAZnVuY3Rpb24sNAorLmFsaWduCTE2Citic2Flc19kZWNyeXB0XzEyODoKKy5MZGVjMTI4X2xvb3A6CisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bMF0JIyBsb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bMV0KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsyXQorCW1vdmRxdQkweDMwKCRpbnApLCBAWE1NWzNdCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bNF0KKwltb3ZkcXUJMHg1MCgkaW5wKSwgQFhNTVs1XQorCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzZdCisJbW92ZHF1CTB4NzAoJGlucCksIEBYTU1bN10KKwltb3YJJGtleSwgJXJheAkJIyBwYXNzIHRoZSAka2V5CisJbGVhCTB4ODAoJGlucCksICRpbnAKKwltb3YJXCQxMCwlcjEwZAorCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKworCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDMwKCRvdXQpCisJbW92ZHF1CUBYTU1bMl0sIDB4NDAoJG91dCkKKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCW1vdmRxdQlAWE1NWzNdLCAweDYwKCRvdXQpCisJbW92ZHF1CUBYTU1bNV0sIDB4NzAoJG91dCkKKwlsZWEJMHg4MCgkb3V0KSwgJG91dAorCXN1YglcJDB4ODAsJGxlbgorCWphCS5MZGVjMTI4X2xvb3AKKwlyZXQKKy5zaXplCWJzYWVzX2RlY3J5cHRfMTI4LC4tYnNhZXNfZGVjcnlwdF8xMjgKK19fXworfQoreworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBPcGVuU1NMIGludGVyZmFjZQorIworbXkgKCRhcmcxLCRhcmcyLCRhcmczLCRhcmc0LCRhcmc1LCRhcmc2KT0kd2luNjQJPyAoIiVyY3giLCIlcmR4IiwiJXI4IiwiJXI5IiwiJXIxMCIsIiVyMTFkIikKKwkJCQkJCTogKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4IiwiJXI4IiwiJXI5ZCIpOworbXkgKCRpbnAsJG91dCwkbGVuLCRrZXkpPSgiJXIxMiIsIiVyMTMiLCIlcjE0IiwiJXIxNSIpOworCitpZiAoJGVjYikgeworJGNvZGUuPTw8X19fOworLmdsb2JsCWJzYWVzX2VjYl9lbmNyeXB0X2Jsb2NrcworLnR5cGUJYnNhZXNfZWNiX2VuY3J5cHRfYmxvY2tzLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorYnNhZXNfZWNiX2VuY3J5cHRfYmxvY2tzOgorCW1vdgklcnNwLCAlcmF4CisuTGVjYl9lbmNfcHJvbG9ndWU6CisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJbGVhCS0weDQ4KCVyc3ApLCVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCWxlYQktMHhhMCglcnNwKSwgJXJzcAorCW1vdmFwcwkleG1tNiwgMHg0MCglcnNwKQorCW1vdmFwcwkleG1tNywgMHg1MCglcnNwKQorCW1vdmFwcwkleG1tOCwgMHg2MCglcnNwKQorCW1vdmFwcwkleG1tOSwgMHg3MCglcnNwKQorCW1vdmFwcwkleG1tMTAsIDB4ODAoJXJzcCkKKwltb3ZhcHMJJXhtbTExLCAweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwgMHhhMCglcnNwKQorCW1vdmFwcwkleG1tMTMsIDB4YjAoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LCAweGMwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwgMHhkMCglcnNwKQorLkxlY2JfZW5jX2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJJXJzcCwlcmJwCQkjIGJhY2t1cCAlcnNwCisJbW92CTI0MCgkYXJnNCksJWVheAkJIyByb3VuZHMKKwltb3YJJGFyZzEsJGlucAkJIyBiYWNrdXAgYXJndW1lbnRzCisJbW92CSRhcmcyLCRvdXQKKwltb3YJJGFyZzMsJGxlbgorCW1vdgkkYXJnNCwka2V5CisJY21wCVwkOCwkYXJnMworCWpiCS5MZWNiX2VuY19zaG9ydAorCisJbW92CSVlYXgsJWVieAkJIyBiYWNrdXAgcm91bmRzCisJc2hsCVwkNywlcmF4CQkjIDEyOCBieXRlcyBwZXIgaW5uZXIgcm91bmQga2V5CisJc3ViCVwkYDEyOC0zMmAsJXJheAkJIyBzaXplIG9mIGJpdC1zbGljZWQga2V5IHNjaGVkdWxlCisJc3ViCSVyYXgsJXJzcAorCW1vdgklcnNwLCVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJGtleSwlcmN4CQkjIHBhc3Mga2V5CisJbW92CSVlYngsJXIxMGQJCSMgcGFzcyByb3VuZHMKKwljYWxsCV9ic2Flc19rZXlfY29udmVydAorCXB4b3IJJXhtbTYsJXhtbTcJCSMgZml4IHVwIGxhc3Qgcm91bmQga2V5CisJbW92ZHFhCSV4bW03LCglcmF4KQkJIyBzYXZlIGxhc3Qgcm91bmQga2V5CisKKwlzdWIJXCQ4LCRsZW4KKy5MZWNiX2VuY19sb29wOgorCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzBdCSMgbG9hZCBpbnB1dAorCW1vdmRxdQkweDEwKCRpbnApLCBAWE1NWzFdCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMl0KKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVszXQorCW1vdmRxdQkweDQwKCRpbnApLCBAWE1NWzRdCisJbW92ZHF1CTB4NTAoJGlucCksIEBYTU1bNV0KKwltb3YJJXJzcCwgJXJheAkJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzZdCisJbW92CSVlYngsJXIxMGQJCSMgcGFzcyByb3VuZHMKKwltb3ZkcXUJMHg3MCgkaW5wKSwgQFhNTVs3XQorCWxlYQkweDgwKCRpbnApLCAkaW5wCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVszXSwgMHg0MCgkb3V0KQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJbW92ZHF1CUBYTU1bMl0sIDB4NjAoJG91dCkKKwltb3ZkcXUJQFhNTVs1XSwgMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCAkb3V0CisJc3ViCVwkOCwkbGVuCisJam5jCS5MZWNiX2VuY19sb29wCisKKwlhZGQJXCQ4LCRsZW4KKwlqegkuTGVjYl9lbmNfZG9uZQorCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bMF0JIyBsb2FkIGlucHV0CisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVieCwlcjEwZAkJIyBwYXNzIHJvdW5kcworCWNtcAlcJDIsJGxlbgorCWpiCS5MZWNiX2VuY19vbmUKKwltb3ZkcXUJMHgxMCgkaW5wKSwgQFhNTVsxXQorCWplCS5MZWNiX2VuY190d28KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsyXQorCWNtcAlcJDQsJGxlbgorCWpiCS5MZWNiX2VuY190aHJlZQorCW1vdmRxdQkweDMwKCRpbnApLCBAWE1NWzNdCisJamUJLkxlY2JfZW5jX2ZvdXIKKwltb3ZkcXUJMHg0MCgkaW5wKSwgQFhNTVs0XQorCWNtcAlcJDYsJGxlbgorCWpiCS5MZWNiX2VuY19maXZlCisJbW92ZHF1CTB4NTAoJGlucCksIEBYTU1bNV0KKwlqZQkuTGVjYl9lbmNfc2l4CisJbW92ZHF1CTB4NjAoJGlucCksIEBYTU1bNl0KKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs0XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDMwKCRvdXQpCisJbW92ZHF1CUBYTU1bM10sIDB4NDAoJG91dCkKKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCW1vdmRxdQlAWE1NWzJdLCAweDYwKCRvdXQpCisJam1wCS5MZWNiX2VuY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2VuY19zaXg6CisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MjAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgzMCgkb3V0KQorCW1vdmRxdQlAWE1NWzNdLCAweDQwKCRvdXQpCisJbW92ZHF1CUBYTU1bN10sIDB4NTAoJG91dCkKKwlqbXAJLkxlY2JfZW5jX2RvbmUKKy5hbGlnbgkxNgorLkxlY2JfZW5jX2ZpdmU6CisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MjAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgzMCgkb3V0KQorCW1vdmRxdQlAWE1NWzNdLCAweDQwKCRvdXQpCisJam1wCS5MZWNiX2VuY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2VuY19mb3VyOgorCWNhbGwJX2JzYWVzX2VuY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MzAoJG91dCkKKwlqbXAJLkxlY2JfZW5jX2RvbmUKKy5hbGlnbgkxNgorLkxlY2JfZW5jX3RocmVlOgorCWNhbGwJX2JzYWVzX2VuY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDIwKCRvdXQpCisJam1wCS5MZWNiX2VuY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2VuY190d286CisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJam1wCS5MZWNiX2VuY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2VuY19vbmU6CisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCWptcAkuTGVjYl9lbmNfZG9uZQorLmFsaWduCTE2CisuTGVjYl9lbmNfc2hvcnQ6CisJbGVhCSgkaW5wKSwgJGFyZzEKKwlsZWEJKCRvdXQpLCAkYXJnMgorCWxlYQkoJGtleSksICRhcmczCisJY2FsbAlhc21fQUVTX2VuY3J5cHQKKwlsZWEJMTYoJGlucCksICRpbnAKKwlsZWEJMTYoJG91dCksICRvdXQKKwlkZWMJJGxlbgorCWpuegkuTGVjYl9lbmNfc2hvcnQKKworLkxlY2JfZW5jX2RvbmU6CisJbGVhCSglcnNwKSwlcmF4CisJcHhvcgkleG1tMCwgJXhtbTAKKy5MZWNiX2VuY19iemVybzoJCQkjIHdpcGUga2V5IHNjaGVkdWxlIFtpZiBhbnldCisJbW92ZHFhCSV4bW0wLCAweDAwKCVyYXgpCisJbW92ZHFhCSV4bW0wLCAweDEwKCVyYXgpCisJbGVhCTB4MjAoJXJheCksICVyYXgKKwljbXAJJXJheCwgJXJicAorCWpiCS5MZWNiX2VuY19iemVybworCisJbGVhCSglcmJwKSwlcnNwCQkjIHJlc3RvcmUgJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTB4NDAoJXJicCksICV4bW02CisJbW92YXBzCTB4NTAoJXJicCksICV4bW03CisJbW92YXBzCTB4NjAoJXJicCksICV4bW04CisJbW92YXBzCTB4NzAoJXJicCksICV4bW05CisJbW92YXBzCTB4ODAoJXJicCksICV4bW0xMAorCW1vdmFwcwkweDkwKCVyYnApLCAleG1tMTEKKwltb3ZhcHMJMHhhMCglcmJwKSwgJXhtbTEyCisJbW92YXBzCTB4YjAoJXJicCksICV4bW0xMworCW1vdmFwcwkweGMwKCVyYnApLCAleG1tMTQKKwltb3ZhcHMJMHhkMCglcmJwKSwgJXhtbTE1CisJbGVhCTB4YTAoJXJicCksICVyc3AKK19fXworJGNvZGUuPTw8X19fOworCW1vdgkweDQ4KCVyc3ApLCAlcjE1CisJbW92CTB4NTAoJXJzcCksICVyMTQKKwltb3YJMHg1OCglcnNwKSwgJXIxMworCW1vdgkweDYwKCVyc3ApLCAlcjEyCisJbW92CTB4NjgoJXJzcCksICVyYngKKwltb3YJMHg3MCglcnNwKSwgJXJheAorCWxlYQkweDc4KCVyc3ApLCAlcnNwCisJbW92CSVyYXgsICVyYnAKKy5MZWNiX2VuY19lcGlsb2d1ZToKKwlyZXQKKy5zaXplCWJzYWVzX2VjYl9lbmNyeXB0X2Jsb2NrcywuLWJzYWVzX2VjYl9lbmNyeXB0X2Jsb2NrcworCisuZ2xvYmwJYnNhZXNfZWNiX2RlY3J5cHRfYmxvY2tzCisudHlwZQlic2Flc19lY2JfZGVjcnlwdF9ibG9ja3MsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Citic2Flc19lY2JfZGVjcnlwdF9ibG9ja3M6CisJbW92CSVyc3AsICVyYXgKKy5MZWNiX2RlY19wcm9sb2d1ZToKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlsZWEJLTB4NDgoJXJzcCksJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbGVhCS0weGEwKCVyc3ApLCAlcnNwCisJbW92YXBzCSV4bW02LCAweDQwKCVyc3ApCisJbW92YXBzCSV4bW03LCAweDUwKCVyc3ApCisJbW92YXBzCSV4bW04LCAweDYwKCVyc3ApCisJbW92YXBzCSV4bW05LCAweDcwKCVyc3ApCisJbW92YXBzCSV4bW0xMCwgMHg4MCglcnNwKQorCW1vdmFwcwkleG1tMTEsIDB4OTAoJXJzcCkKKwltb3ZhcHMJJXhtbTEyLCAweGEwKCVyc3ApCisJbW92YXBzCSV4bW0xMywgMHhiMCglcnNwKQorCW1vdmFwcwkleG1tMTQsIDB4YzAoJXJzcCkKKwltb3ZhcHMJJXhtbTE1LCAweGQwKCVyc3ApCisuTGVjYl9kZWNfYm9keToKK19fXworJGNvZGUuPTw8X19fOworCW1vdgklcnNwLCVyYnAJCSMgYmFja3VwICVyc3AKKwltb3YJMjQwKCRhcmc0KSwlZWF4CQkjIHJvdW5kcworCW1vdgkkYXJnMSwkaW5wCQkjIGJhY2t1cCBhcmd1bWVudHMKKwltb3YJJGFyZzIsJG91dAorCW1vdgkkYXJnMywkbGVuCisJbW92CSRhcmc0LCRrZXkKKwljbXAJXCQ4LCRhcmczCisJamIJLkxlY2JfZGVjX3Nob3J0CisKKwltb3YJJWVheCwlZWJ4CQkjIGJhY2t1cCByb3VuZHMKKwlzaGwJXCQ3LCVyYXgJCSMgMTI4IGJ5dGVzIHBlciBpbm5lciByb3VuZCBrZXkKKwlzdWIJXCRgMTI4LTMyYCwlcmF4CQkjIHNpemUgb2YgYml0LXNsaWNlZCBrZXkgc2NoZWR1bGUKKwlzdWIJJXJheCwlcnNwCisJbW92CSVyc3AsJXJheAkJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdgkka2V5LCVyY3gJCSMgcGFzcyBrZXkKKwltb3YJJWVieCwlcjEwZAkJIyBwYXNzIHJvdW5kcworCWNhbGwJX2JzYWVzX2tleV9jb252ZXJ0CisJcHhvcgkoJXJzcCksJXhtbTcJCSMgZml4IHVwIDAgcm91bmQga2V5CisJbW92ZHFhCSV4bW02LCglcmF4KQkJIyBzYXZlIGxhc3Qgcm91bmQga2V5CisJbW92ZHFhCSV4bW03LCglcnNwKQorCisJc3ViCVwkOCwkbGVuCisuTGVjYl9kZWNfbG9vcDoKKwltb3ZkcXUJMHgwMCgkaW5wKSwgQFhNTVswXQkjIGxvYWQgaW5wdXQKKwltb3ZkcXUJMHgxMCgkaW5wKSwgQFhNTVsxXQorCW1vdmRxdQkweDIwKCRpbnApLCBAWE1NWzJdCisJbW92ZHF1CTB4MzAoJGlucCksIEBYTU1bM10KKwltb3ZkcXUJMHg0MCgkaW5wKSwgQFhNTVs0XQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzVdCisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3ZkcXUJMHg2MCgkaW5wKSwgQFhNTVs2XQorCW1vdgklZWJ4LCVyMTBkCQkjIHBhc3Mgcm91bmRzCisJbW92ZHF1CTB4NzAoJGlucCksIEBYTU1bN10KKwlsZWEJMHg4MCgkaW5wKSwgJGlucAorCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKworCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDMwKCRvdXQpCisJbW92ZHF1CUBYTU1bMl0sIDB4NDAoJG91dCkKKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCW1vdmRxdQlAWE1NWzNdLCAweDYwKCRvdXQpCisJbW92ZHF1CUBYTU1bNV0sIDB4NzAoJG91dCkKKwlsZWEJMHg4MCgkb3V0KSwgJG91dAorCXN1YglcJDgsJGxlbgorCWpuYwkuTGVjYl9kZWNfbG9vcAorCisJYWRkCVwkOCwkbGVuCisJanoJLkxlY2JfZGVjX2RvbmUKKworCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzBdCSMgbG9hZCBpbnB1dAorCW1vdgklcnNwLCAlcmF4CQkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlYngsJXIxMGQJCSMgcGFzcyByb3VuZHMKKwljbXAJXCQyLCRsZW4KKwlqYgkuTGVjYl9kZWNfb25lCisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bMV0KKwlqZQkuTGVjYl9kZWNfdHdvCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMl0KKwljbXAJXCQ0LCRsZW4KKwlqYgkuTGVjYl9kZWNfdGhyZWUKKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVszXQorCWplCS5MZWNiX2RlY19mb3VyCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bNF0KKwljbXAJXCQ2LCRsZW4KKwlqYgkuTGVjYl9kZWNfZml2ZQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzVdCisJamUJLkxlY2JfZGVjX3NpeAorCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzZdCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MjAoJG91dCkKKwltb3ZkcXUJQFhNTVs0XSwgMHgzMCgkb3V0KQorCW1vdmRxdQlAWE1NWzJdLCAweDQwKCRvdXQpCisJbW92ZHF1CUBYTU1bN10sIDB4NTAoJG91dCkKKwltb3ZkcXUJQFhNTVszXSwgMHg2MCgkb3V0KQorCWptcAkuTGVjYl9kZWNfZG9uZQorLmFsaWduCTE2CisuTGVjYl9kZWNfc2l4OgorCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJam1wCS5MZWNiX2RlY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2RlY19maXZlOgorCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCWptcAkuTGVjYl9kZWNfZG9uZQorLmFsaWduCTE2CisuTGVjYl9kZWNfZm91cjoKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDMwKCRvdXQpCisJam1wCS5MZWNiX2RlY19kb25lCisuYWxpZ24JMTYKKy5MZWNiX2RlY190aHJlZToKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCWptcAkuTGVjYl9kZWNfZG9uZQorLmFsaWduCTE2CisuTGVjYl9kZWNfdHdvOgorCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCWptcAkuTGVjYl9kZWNfZG9uZQorLmFsaWduCTE2CisuTGVjYl9kZWNfb25lOgorCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlqbXAJLkxlY2JfZGVjX2RvbmUKKy5hbGlnbgkxNgorLkxlY2JfZGVjX3Nob3J0OgorCWxlYQkoJGlucCksICRhcmcxCisJbGVhCSgkb3V0KSwgJGFyZzIKKwlsZWEJKCRrZXkpLCAkYXJnMworCWNhbGwJYXNtX0FFU19kZWNyeXB0CisJbGVhCTE2KCRpbnApLCAkaW5wCisJbGVhCTE2KCRvdXQpLCAkb3V0CisJZGVjCSRsZW4KKwlqbnoJLkxlY2JfZGVjX3Nob3J0CisKKy5MZWNiX2RlY19kb25lOgorCWxlYQkoJXJzcCksJXJheAorCXB4b3IJJXhtbTAsICV4bW0wCisuTGVjYl9kZWNfYnplcm86CQkJIyB3aXBlIGtleSBzY2hlZHVsZSBbaWYgYW55XQorCW1vdmRxYQkleG1tMCwgMHgwMCglcmF4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglcmF4KQorCWxlYQkweDIwKCVyYXgpLCAlcmF4CisJY21wCSVyYXgsICVyYnAKKwlqYgkuTGVjYl9kZWNfYnplcm8KKworCWxlYQkoJXJicCksJXJzcAkJIyByZXN0b3JlICVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDQwKCVyYnApLCAleG1tNgorCW1vdmFwcwkweDUwKCVyYnApLCAleG1tNworCW1vdmFwcwkweDYwKCVyYnApLCAleG1tOAorCW1vdmFwcwkweDcwKCVyYnApLCAleG1tOQorCW1vdmFwcwkweDgwKCVyYnApLCAleG1tMTAKKwltb3ZhcHMJMHg5MCglcmJwKSwgJXhtbTExCisJbW92YXBzCTB4YTAoJXJicCksICV4bW0xMgorCW1vdmFwcwkweGIwKCVyYnApLCAleG1tMTMKKwltb3ZhcHMJMHhjMCglcmJwKSwgJXhtbTE0CisJbW92YXBzCTB4ZDAoJXJicCksICV4bW0xNQorCWxlYQkweGEwKCVyYnApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJMHg0OCglcnNwKSwgJXIxNQorCW1vdgkweDUwKCVyc3ApLCAlcjE0CisJbW92CTB4NTgoJXJzcCksICVyMTMKKwltb3YJMHg2MCglcnNwKSwgJXIxMgorCW1vdgkweDY4KCVyc3ApLCAlcmJ4CisJbW92CTB4NzAoJXJzcCksICVyYXgKKwlsZWEJMHg3OCglcnNwKSwgJXJzcAorCW1vdgklcmF4LCAlcmJwCisuTGVjYl9kZWNfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlic2Flc19lY2JfZGVjcnlwdF9ibG9ja3MsLi1ic2Flc19lY2JfZGVjcnlwdF9ibG9ja3MKK19fXworfQorJGNvZGUuPTw8X19fOworLmV4dGVybglhc21fQUVTX2NiY19lbmNyeXB0CisuZ2xvYmwJYnNhZXNfY2JjX2VuY3J5cHQKKy50eXBlCWJzYWVzX2NiY19lbmNyeXB0LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorYnNhZXNfY2JjX2VuY3J5cHQ6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3YJNDgoJXJzcCksJGFyZzYJCSMgcHVsbCBkaXJlY3Rpb24gZmxhZworX19fCiskY29kZS49PDxfX187CisJY21wCVwkMCwkYXJnNgorCWpuZQlhc21fQUVTX2NiY19lbmNyeXB0CisJY21wCVwkMTI4LCRhcmczCisJamIJYXNtX0FFU19jYmNfZW5jcnlwdAorCisJbW92CSVyc3AsICVyYXgKKy5MY2JjX2RlY19wcm9sb2d1ZToKKwlwdXNoCSVyYnAKKwlwdXNoCSVyYngKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlsZWEJLTB4NDgoJXJzcCksICVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdgkweGEwKCVyc3ApLCRhcmc1CSMgcHVsbCBpdnAKKwlsZWEJLTB4YTAoJXJzcCksICVyc3AKKwltb3ZhcHMJJXhtbTYsIDB4NDAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsIDB4NTAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsIDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTksIDB4NzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLCAweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwgMHg5MCglcnNwKQorCW1vdmFwcwkleG1tMTIsIDB4YTAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLCAweGIwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwgMHhjMCglcnNwKQorCW1vdmFwcwkleG1tMTUsIDB4ZDAoJXJzcCkKKy5MY2JjX2RlY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92CSVyc3AsICVyYnAJCSMgYmFja3VwICVyc3AKKwltb3YJMjQwKCRhcmc0KSwgJWVheAkjIHJvdW5kcworCW1vdgkkYXJnMSwgJGlucAkJIyBiYWNrdXAgYXJndW1lbnRzCisJbW92CSRhcmcyLCAkb3V0CisJbW92CSRhcmczLCAkbGVuCisJbW92CSRhcmc0LCAka2V5CisJbW92CSRhcmc1LCAlcmJ4CisJc2hyCVwkNCwgJGxlbgkJIyBieXRlcyB0byBibG9ja3MKKworCW1vdgklZWF4LCAlZWR4CQkjIHJvdW5kcworCXNobAlcJDcsICVyYXgJCSMgMTI4IGJ5dGVzIHBlciBpbm5lciByb3VuZCBrZXkKKwlzdWIJXCRgMTI4LTMyYCwgJXJheAkjIHNpemUgb2YgYml0LXNsaWNlZCBrZXkgc2NoZWR1bGUKKwlzdWIJJXJheCwgJXJzcAorCisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJGtleSwgJXJjeAkJIyBwYXNzIGtleQorCW1vdgklZWR4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCWNhbGwJX2JzYWVzX2tleV9jb252ZXJ0CisJcHhvcgkoJXJzcCksJXhtbTcJCSMgZml4IHVwIDAgcm91bmQga2V5CisJbW92ZHFhCSV4bW02LCglcmF4KQkJIyBzYXZlIGxhc3Qgcm91bmQga2V5CisJbW92ZHFhCSV4bW03LCglcnNwKQorCisJbW92ZHF1CSglcmJ4KSwgQFhNTVsxNV0JIyBsb2FkIElWCisJc3ViCVwkOCwkbGVuCisuTGNiY19kZWNfbG9vcDoKKwltb3ZkcXUJMHgwMCgkaW5wKSwgQFhNTVswXQkjIGxvYWQgaW5wdXQKKwltb3ZkcXUJMHgxMCgkaW5wKSwgQFhNTVsxXQorCW1vdmRxdQkweDIwKCRpbnApLCBAWE1NWzJdCisJbW92ZHF1CTB4MzAoJGlucCksIEBYTU1bM10KKwltb3ZkcXUJMHg0MCgkaW5wKSwgQFhNTVs0XQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzVdCisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3ZkcXUJMHg2MCgkaW5wKSwgQFhNTVs2XQorCW1vdgklZWR4LCVyMTBkCQkjIHBhc3Mgcm91bmRzCisJbW92ZHF1CTB4NzAoJGlucCksIEBYTU1bN10KKwltb3ZkcWEJQFhNTVsxNV0sIDB4MjAoJXJicCkJIyBwdXQgYXNpZGUgSVYKKworCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisKKwlweG9yCTB4MjAoJXJicCksIEBYTU1bMF0JIyBePSBJVgorCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzhdCSMgcmUtbG9hZCBpbnB1dAorCW1vdmRxdQkweDEwKCRpbnApLCBAWE1NWzldCisJcHhvcglAWE1NWzhdLCBAWE1NWzFdCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMTBdCisJcHhvcglAWE1NWzldLCBAWE1NWzZdCisJbW92ZHF1CTB4MzAoJGlucCksIEBYTU1bMTFdCisJcHhvcglAWE1NWzEwXSwgQFhNTVs0XQorCW1vdmRxdQkweDQwKCRpbnApLCBAWE1NWzEyXQorCXB4b3IJQFhNTVsxMV0sIEBYTU1bMl0KKwltb3ZkcXUJMHg1MCgkaW5wKSwgQFhNTVsxM10KKwlweG9yCUBYTU1bMTJdLCBAWE1NWzddCisJbW92ZHF1CTB4NjAoJGlucCksIEBYTU1bMTRdCisJcHhvcglAWE1NWzEzXSwgQFhNTVszXQorCW1vdmRxdQkweDcwKCRpbnApLCBAWE1NWzE1XQkjIElWCisJcHhvcglAWE1NWzE0XSwgQFhNTVs1XQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbGVhCTB4ODAoJGlucCksICRpbnAKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJbW92ZHF1CUBYTU1bM10sIDB4NjAoJG91dCkKKwltb3ZkcXUJQFhNTVs1XSwgMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCAkb3V0CisJc3ViCVwkOCwkbGVuCisJam5jCS5MY2JjX2RlY19sb29wCisKKwlhZGQJXCQ4LCRsZW4KKwlqegkuTGNiY19kZWNfZG9uZQorCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bMF0JIyBsb2FkIGlucHV0CisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKwljbXAJXCQyLCRsZW4KKwlqYgkuTGNiY19kZWNfb25lCisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bMV0KKwlqZQkuTGNiY19kZWNfdHdvCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMl0KKwljbXAJXCQ0LCRsZW4KKwlqYgkuTGNiY19kZWNfdGhyZWUKKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVszXQorCWplCS5MY2JjX2RlY19mb3VyCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bNF0KKwljbXAJXCQ2LCRsZW4KKwlqYgkuTGNiY19kZWNfZml2ZQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzVdCisJamUJLkxjYmNfZGVjX3NpeAorCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzZdCisJbW92ZHFhCUBYTU1bMTVdLCAweDIwKCVyYnApCSMgcHV0IGFzaWRlIElWCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKwlweG9yCTB4MjAoJXJicCksIEBYTU1bMF0JIyBePSBJVgorCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzhdCSMgcmUtbG9hZCBpbnB1dAorCW1vdmRxdQkweDEwKCRpbnApLCBAWE1NWzldCisJcHhvcglAWE1NWzhdLCBAWE1NWzFdCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMTBdCisJcHhvcglAWE1NWzldLCBAWE1NWzZdCisJbW92ZHF1CTB4MzAoJGlucCksIEBYTU1bMTFdCisJcHhvcglAWE1NWzEwXSwgQFhNTVs0XQorCW1vdmRxdQkweDQwKCRpbnApLCBAWE1NWzEyXQorCXB4b3IJQFhNTVsxMV0sIEBYTU1bMl0KKwltb3ZkcXUJMHg1MCgkaW5wKSwgQFhNTVsxM10KKwlweG9yCUBYTU1bMTJdLCBAWE1NWzddCisJbW92ZHF1CTB4NjAoJGlucCksIEBYTU1bMTVdCSMgSVYKKwlweG9yCUBYTU1bMTNdLCBAWE1NWzNdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJbW92ZHF1CUBYTU1bM10sIDB4NjAoJG91dCkKKwlqbXAJLkxjYmNfZGVjX2RvbmUKKy5hbGlnbgkxNgorLkxjYmNfZGVjX3NpeDoKKwltb3ZkcWEJQFhNTVsxNV0sIDB4MjAoJXJicCkJIyBwdXQgYXNpZGUgSVYKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVswXQkjIF49IElWCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bOF0JIyByZS1sb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bOV0KKwlweG9yCUBYTU1bOF0sIEBYTU1bMV0KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsxMF0KKwlweG9yCUBYTU1bOV0sIEBYTU1bNl0KKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVsxMV0KKwlweG9yCUBYTU1bMTBdLCBAWE1NWzRdCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bMTJdCisJcHhvcglAWE1NWzExXSwgQFhNTVsyXQorCW1vdmRxdQkweDUwKCRpbnApLCBAWE1NWzE1XQkjIElWCisJcHhvcglAWE1NWzEyXSwgQFhNTVs3XQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzRdLCAweDMwKCRvdXQpCisJbW92ZHF1CUBYTU1bMl0sIDB4NDAoJG91dCkKKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCWptcAkuTGNiY19kZWNfZG9uZQorLmFsaWduCTE2CisuTGNiY19kZWNfZml2ZToKKwltb3ZkcWEJQFhNTVsxNV0sIDB4MjAoJXJicCkJIyBwdXQgYXNpZGUgSVYKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVswXQkjIF49IElWCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bOF0JIyByZS1sb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bOV0KKwlweG9yCUBYTU1bOF0sIEBYTU1bMV0KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsxMF0KKwlweG9yCUBYTU1bOV0sIEBYTU1bNl0KKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVsxMV0KKwlweG9yCUBYTU1bMTBdLCBAWE1NWzRdCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bMTVdCSMgSVYKKwlweG9yCUBYTU1bMTFdLCBAWE1NWzJdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCWptcAkuTGNiY19kZWNfZG9uZQorLmFsaWduCTE2CisuTGNiY19kZWNfZm91cjoKKwltb3ZkcWEJQFhNTVsxNV0sIDB4MjAoJXJicCkJIyBwdXQgYXNpZGUgSVYKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVswXQkjIF49IElWCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bOF0JIyByZS1sb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bOV0KKwlweG9yCUBYTU1bOF0sIEBYTU1bMV0KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsxMF0KKwlweG9yCUBYTU1bOV0sIEBYTU1bNl0KKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVsxNV0JIyBJVgorCXB4b3IJQFhNTVsxMF0sIEBYTU1bNF0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MjAoJG91dCkKKwltb3ZkcXUJQFhNTVs0XSwgMHgzMCgkb3V0KQorCWptcAkuTGNiY19kZWNfZG9uZQorLmFsaWduCTE2CisuTGNiY19kZWNfdGhyZWU6CisJbW92ZHFhCUBYTU1bMTVdLCAweDIwKCVyYnApCSMgcHV0IGFzaWRlIElWCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKwlweG9yCTB4MjAoJXJicCksIEBYTU1bMF0JIyBePSBJVgorCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzhdCSMgcmUtbG9hZCBpbnB1dAorCW1vdmRxdQkweDEwKCRpbnApLCBAWE1NWzldCisJcHhvcglAWE1NWzhdLCBAWE1NWzFdCisJbW92ZHF1CTB4MjAoJGlucCksIEBYTU1bMTVdCSMgSVYKKwlweG9yCUBYTU1bOV0sIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNl0sIDB4MjAoJG91dCkKKwlqbXAJLkxjYmNfZGVjX2RvbmUKKy5hbGlnbgkxNgorLkxjYmNfZGVjX3R3bzoKKwltb3ZkcWEJQFhNTVsxNV0sIDB4MjAoJXJicCkJIyBwdXQgYXNpZGUgSVYKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVswXQkjIF49IElWCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bOF0JIyByZS1sb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bMTVdCSMgSVYKKwlweG9yCUBYTU1bOF0sIEBYTU1bMV0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJam1wCS5MY2JjX2RlY19kb25lCisuYWxpZ24JMTYKKy5MY2JjX2RlY19vbmU6CisJbGVhCSgkaW5wKSwgJGFyZzEKKwlsZWEJMHgyMCglcmJwKSwgJGFyZzIJIyBidWZmZXIgb3V0cHV0CisJbGVhCSgka2V5KSwgJGFyZzMKKwljYWxsCWFzbV9BRVNfZGVjcnlwdAkJIyBkb2Vzbid0IHRvdWNoICV4bW0KKwlweG9yCTB4MjAoJXJicCksIEBYTU1bMTVdCSMgXj0gSVYKKwltb3ZkcXUJQFhNTVsxNV0sICgkb3V0KQkjIHdyaXRlIG91dHB1dAorCW1vdmRxYQlAWE1NWzBdLCBAWE1NWzE1XQkjIElWCisKKy5MY2JjX2RlY19kb25lOgorCW1vdmRxdQlAWE1NWzE1XSwgKCVyYngpCSMgcmV0dXJuIElWCisJbGVhCSglcnNwKSwgJXJheAorCXB4b3IJJXhtbTAsICV4bW0wCisuTGNiY19kZWNfYnplcm86CQkJIyB3aXBlIGtleSBzY2hlZHVsZSBbaWYgYW55XQorCW1vdmRxYQkleG1tMCwgMHgwMCglcmF4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglcmF4KQorCWxlYQkweDIwKCVyYXgpLCAlcmF4CisJY21wCSVyYXgsICVyYnAKKwlqYQkuTGNiY19kZWNfYnplcm8KKworCWxlYQkoJXJicCksJXJzcAkJIyByZXN0b3JlICVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDQwKCVyYnApLCAleG1tNgorCW1vdmFwcwkweDUwKCVyYnApLCAleG1tNworCW1vdmFwcwkweDYwKCVyYnApLCAleG1tOAorCW1vdmFwcwkweDcwKCVyYnApLCAleG1tOQorCW1vdmFwcwkweDgwKCVyYnApLCAleG1tMTAKKwltb3ZhcHMJMHg5MCglcmJwKSwgJXhtbTExCisJbW92YXBzCTB4YTAoJXJicCksICV4bW0xMgorCW1vdmFwcwkweGIwKCVyYnApLCAleG1tMTMKKwltb3ZhcHMJMHhjMCglcmJwKSwgJXhtbTE0CisJbW92YXBzCTB4ZDAoJXJicCksICV4bW0xNQorCWxlYQkweGEwKCVyYnApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJMHg0OCglcnNwKSwgJXIxNQorCW1vdgkweDUwKCVyc3ApLCAlcjE0CisJbW92CTB4NTgoJXJzcCksICVyMTMKKwltb3YJMHg2MCglcnNwKSwgJXIxMgorCW1vdgkweDY4KCVyc3ApLCAlcmJ4CisJbW92CTB4NzAoJXJzcCksICVyYXgKKwlsZWEJMHg3OCglcnNwKSwgJXJzcAorCW1vdgklcmF4LCAlcmJwCisuTGNiY19kZWNfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlic2Flc19jYmNfZW5jcnlwdCwuLWJzYWVzX2NiY19lbmNyeXB0CisKKy5nbG9ibAlic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrcworLnR5cGUJYnNhZXNfY3RyMzJfZW5jcnlwdF9ibG9ja3MsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Citic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrczoKKwltb3YJJXJzcCwgJXJheAorLkxjdHJfZW5jX3Byb2xvZ3VlOgorCXB1c2gJJXJicAorCXB1c2gJJXJieAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCWxlYQktMHg0OCglcnNwKSwgJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92CTB4YTAoJXJzcCksJGFyZzUJIyBwdWxsIGl2cAorCWxlYQktMHhhMCglcnNwKSwgJXJzcAorCW1vdmFwcwkleG1tNiwgMHg0MCglcnNwKQorCW1vdmFwcwkleG1tNywgMHg1MCglcnNwKQorCW1vdmFwcwkleG1tOCwgMHg2MCglcnNwKQorCW1vdmFwcwkleG1tOSwgMHg3MCglcnNwKQorCW1vdmFwcwkleG1tMTAsIDB4ODAoJXJzcCkKKwltb3ZhcHMJJXhtbTExLCAweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwgMHhhMCglcnNwKQorCW1vdmFwcwkleG1tMTMsIDB4YjAoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LCAweGMwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwgMHhkMCglcnNwKQorLkxjdHJfZW5jX2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJJXJzcCwgJXJicAkJIyBiYWNrdXAgJXJzcAorCW1vdmRxdQkoJGFyZzUpLCAleG1tMAkJIyBsb2FkIGNvdW50ZXIKKwltb3YJMjQwKCRhcmc0KSwgJWVheAkjIHJvdW5kcworCW1vdgkkYXJnMSwgJGlucAkJIyBiYWNrdXAgYXJndW1lbnRzCisJbW92CSRhcmcyLCAkb3V0CisJbW92CSRhcmczLCAkbGVuCisJbW92CSRhcmc0LCAka2V5CisJbW92ZHFhCSV4bW0wLCAweDIwKCVyYnApCSMgY29weSBjb3VudGVyCisJY21wCVwkOCwgJGFyZzMKKwlqYgkuTGN0cl9lbmNfc2hvcnQKKworCW1vdgklZWF4LCAlZWJ4CQkjIHJvdW5kcworCXNobAlcJDcsICVyYXgJCSMgMTI4IGJ5dGVzIHBlciBpbm5lciByb3VuZCBrZXkKKwlzdWIJXCRgMTI4LTMyYCwgJXJheAkjIHNpemUgb2YgYml0LXNsaWNlZCBrZXkgc2NoZWR1bGUKKwlzdWIJJXJheCwgJXJzcAorCisJbW92CSVyc3AsICVyYXgJCSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJGtleSwgJXJjeAkJIyBwYXNzIGtleQorCW1vdgklZWJ4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCWNhbGwJX2JzYWVzX2tleV9jb252ZXJ0CisJcHhvcgkleG1tNiwleG1tNwkJIyBmaXggdXAgbGFzdCByb3VuZCBrZXkKKwltb3ZkcWEJJXhtbTcsKCVyYXgpCQkjIHNhdmUgbGFzdCByb3VuZCBrZXkKKworCW1vdmRxYQkoJXJzcCksIEBYTU1bOV0JCSMgbG9hZCByb3VuZDAga2V5CisJbGVhCS5MQUREMSglcmlwKSwgJXIxMQorCW1vdmRxYQkweDIwKCVyYnApLCBAWE1NWzBdCSMgY291bnRlciBjb3B5CisJbW92ZHFhCS0weDIwKCVyMTEpLCBAWE1NWzhdCSMgLkxTV1BVUAorCXBzaHVmYglAWE1NWzhdLCBAWE1NWzldCSMgYnl0ZSBzd2FwIHVwcGVyIHBhcnQKKwlwc2h1ZmIJQFhNTVs4XSwgQFhNTVswXQorCW1vdmRxYQlAWE1NWzldLCAoJXJzcCkJCSMgc2F2ZSBhZGp1c3RlZCByb3VuZDAga2V5CisJam1wCS5MY3RyX2VuY19sb29wCisuYWxpZ24JMTYKKy5MY3RyX2VuY19sb29wOgorCW1vdmRxYQlAWE1NWzBdLCAweDIwKCVyYnApCSMgc2F2ZSBjb3VudGVyCisJbW92ZHFhCUBYTU1bMF0sIEBYTU1bMV0JIyBwcmVwYXJlIDggY291bnRlciB2YWx1ZXMKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVsyXQorCXBhZGRkCTB4MDAoJXIxMSksIEBYTU1bMV0JIyAuTEFERDEKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVszXQorCXBhZGRkCTB4MTAoJXIxMSksIEBYTU1bMl0JIyAuTEFERDIKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVs0XQorCXBhZGRkCTB4MjAoJXIxMSksIEBYTU1bM10JIyAuTEFERDMKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVs1XQorCXBhZGRkCTB4MzAoJXIxMSksIEBYTU1bNF0JIyAuTEFERDQKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVs2XQorCXBhZGRkCTB4NDAoJXIxMSksIEBYTU1bNV0JIyAuTEFERDUKKwltb3ZkcWEJQFhNTVswXSwgQFhNTVs3XQorCXBhZGRkCTB4NTAoJXIxMSksIEBYTU1bNl0JIyAuTEFERDYKKwlwYWRkZAkweDYwKCVyMTEpLCBAWE1NWzddCSMgLkxBREQ3CisKKwkjIEJvcnJvdyBwcm9sb2d1ZSBmcm9tIF9ic2Flc19lbmNyeXB0OCB0byB1c2UgdGhlIG9wcG9ydHVuaXR5CisJIyB0byBmbGlwIGJ5dGUgb3JkZXIgaW4gMzItYml0IGNvdW50ZXIKKwltb3ZkcWEJKCVyc3ApLCBAWE1NWzldCQkjIHJvdW5kIDAga2V5CisJbGVhCTB4MTAoJXJzcCksICVyYXgJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdmRxYQktMHgxMCglcjExKSwgQFhNTVs4XQkjIC5MU1dQVVBNMFNSCisJcHhvcglAWE1NWzldLCBAWE1NWzBdCSMgeG9yIHdpdGggcm91bmQwIGtleQorCXB4b3IJQFhNTVs5XSwgQFhNTVsxXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVswXQorCXB4b3IJQFhNTVs5XSwgQFhNTVsyXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVsxXQorCXB4b3IJQFhNTVs5XSwgQFhNTVszXQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVsyXQorCXB4b3IJQFhNTVs5XSwgQFhNTVs0XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVszXQorCXB4b3IJQFhNTVs5XSwgQFhNTVs1XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs0XQorCXB4b3IJQFhNTVs5XSwgQFhNTVs2XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs1XQorCXB4b3IJQFhNTVs5XSwgQFhNTVs3XQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs2XQorCWxlYQkuTEJTMCglcmlwKSwgJXIxMQkjIGNvbnN0YW50cyB0YWJsZQorCSBwc2h1ZmIJQFhNTVs4XSwgQFhNTVs3XQorCW1vdgklZWJ4LCVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OF9iaXRzbGljZQorCisJc3ViCVwkOCwkbGVuCisJamMJLkxjdHJfZW5jX2xvb3BfZG9uZQorCisJbW92ZHF1CTB4MDAoJGlucCksIEBYTU1bOF0JIyBsb2FkIGlucHV0CisJbW92ZHF1CTB4MTAoJGlucCksIEBYTU1bOV0KKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsxMF0KKwltb3ZkcXUJMHgzMCgkaW5wKSwgQFhNTVsxMV0KKwltb3ZkcXUJMHg0MCgkaW5wKSwgQFhNTVsxMl0KKwltb3ZkcXUJMHg1MCgkaW5wKSwgQFhNTVsxM10KKwltb3ZkcXUJMHg2MCgkaW5wKSwgQFhNTVsxNF0KKwltb3ZkcXUJMHg3MCgkaW5wKSwgQFhNTVsxNV0KKwlsZWEJMHg4MCgkaW5wKSwkaW5wCisJcHhvcglAWE1NWzBdLCBAWE1NWzhdCisJbW92ZHFhCTB4MjAoJXJicCksIEBYTU1bMF0JIyBsb2FkIGNvdW50ZXIKKwlweG9yCUBYTU1bOV0sIEBYTU1bMV0KKwltb3ZkcXUJQFhNTVs4XSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCXB4b3IJQFhNTVsxMF0sIEBYTU1bNF0KKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCXB4b3IJQFhNTVsxMV0sIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs0XSwgMHgyMCgkb3V0KQorCXB4b3IJQFhNTVsxMl0sIEBYTU1bM10KKwltb3ZkcXUJQFhNTVs2XSwgMHgzMCgkb3V0KQorCXB4b3IJQFhNTVsxM10sIEBYTU1bN10KKwltb3ZkcXUJQFhNTVszXSwgMHg0MCgkb3V0KQorCXB4b3IJQFhNTVsxNF0sIEBYTU1bMl0KKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCXB4b3IJQFhNTVsxNV0sIEBYTU1bNV0KKwltb3ZkcXUJQFhNTVsyXSwgMHg2MCgkb3V0KQorCWxlYQkuTEFERDEoJXJpcCksICVyMTEKKwltb3ZkcXUJQFhNTVs1XSwgMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCAkb3V0CisJcGFkZGQJMHg3MCglcjExKSwgQFhNTVswXQkjIC5MQUREOAorCWpuegkuTGN0cl9lbmNfbG9vcAorCisJam1wCS5MY3RyX2VuY19kb25lCisuYWxpZ24JMTYKKy5MY3RyX2VuY19sb29wX2RvbmU6CisJYWRkCVwkOCwgJGxlbgorCW1vdmRxdQkweDAwKCRpbnApLCBAWE1NWzhdCSMgbG9hZCBpbnB1dAorCXB4b3IJQFhNTVs4XSwgQFhNTVswXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJY21wCVwkMiwkbGVuCisJamIJLkxjdHJfZW5jX2RvbmUKKwltb3ZkcXUJMHgxMCgkaW5wKSwgQFhNTVs5XQorCXB4b3IJQFhNTVs5XSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJamUJLkxjdHJfZW5jX2RvbmUKKwltb3ZkcXUJMHgyMCgkaW5wKSwgQFhNTVsxMF0KKwlweG9yCUBYTU1bMTBdLCBAWE1NWzRdCisJbW92ZHF1CUBYTU1bNF0sIDB4MjAoJG91dCkKKwljbXAJXCQ0LCRsZW4KKwlqYgkuTGN0cl9lbmNfZG9uZQorCW1vdmRxdQkweDMwKCRpbnApLCBAWE1NWzExXQorCXB4b3IJQFhNTVsxMV0sIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs2XSwgMHgzMCgkb3V0KQorCWplCS5MY3RyX2VuY19kb25lCisJbW92ZHF1CTB4NDAoJGlucCksIEBYTU1bMTJdCisJcHhvcglAWE1NWzEyXSwgQFhNTVszXQorCW1vdmRxdQlAWE1NWzNdLCAweDQwKCRvdXQpCisJY21wCVwkNiwkbGVuCisJamIJLkxjdHJfZW5jX2RvbmUKKwltb3ZkcXUJMHg1MCgkaW5wKSwgQFhNTVsxM10KKwlweG9yCUBYTU1bMTNdLCBAWE1NWzddCisJbW92ZHF1CUBYTU1bN10sIDB4NTAoJG91dCkKKwlqZQkuTGN0cl9lbmNfZG9uZQorCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzE0XQorCXB4b3IJQFhNTVsxNF0sIEBYTU1bMl0KKwltb3ZkcXUJQFhNTVsyXSwgMHg2MCgkb3V0KQorCWptcAkuTGN0cl9lbmNfZG9uZQorCisuYWxpZ24JMTYKKy5MY3RyX2VuY19zaG9ydDoKKwlsZWEJMHgyMCglcmJwKSwgJGFyZzEKKwlsZWEJMHgzMCglcmJwKSwgJGFyZzIKKwlsZWEJKCRrZXkpLCAkYXJnMworCWNhbGwJYXNtX0FFU19lbmNyeXB0CisJbW92ZHF1CSgkaW5wKSwgQFhNTVsxXQorCWxlYQkxNigkaW5wKSwgJGlucAorCW1vdgkweDJjKCVyYnApLCAlZWF4CSMgbG9hZCAzMi1iaXQgY291bnRlcgorCWJzd2FwCSVlYXgKKwlweG9yCTB4MzAoJXJicCksIEBYTU1bMV0KKwlpbmMJJWVheAkJCSMgaW5jcmVtZW50CisJbW92ZHF1CUBYTU1bMV0sICgkb3V0KQorCWJzd2FwCSVlYXgKKwlsZWEJMTYoJG91dCksICRvdXQKKwltb3YJJWVheCwgMHgyYyglcnNwKQkjIHNhdmUgMzItYml0IGNvdW50ZXIKKwlkZWMJJGxlbgorCWpuegkuTGN0cl9lbmNfc2hvcnQKKworLkxjdHJfZW5jX2RvbmU6CisJbGVhCSglcnNwKSwgJXJheAorCXB4b3IJJXhtbTAsICV4bW0wCisuTGN0cl9lbmNfYnplcm86CQkJIyB3aXBlIGtleSBzY2hlZHVsZSBbaWYgYW55XQorCW1vdmRxYQkleG1tMCwgMHgwMCglcmF4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglcmF4KQorCWxlYQkweDIwKCVyYXgpLCAlcmF4CisJY21wCSVyYXgsICVyYnAKKwlqYQkuTGN0cl9lbmNfYnplcm8KKworCWxlYQkoJXJicCksJXJzcAkJIyByZXN0b3JlICVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDQwKCVyYnApLCAleG1tNgorCW1vdmFwcwkweDUwKCVyYnApLCAleG1tNworCW1vdmFwcwkweDYwKCVyYnApLCAleG1tOAorCW1vdmFwcwkweDcwKCVyYnApLCAleG1tOQorCW1vdmFwcwkweDgwKCVyYnApLCAleG1tMTAKKwltb3ZhcHMJMHg5MCglcmJwKSwgJXhtbTExCisJbW92YXBzCTB4YTAoJXJicCksICV4bW0xMgorCW1vdmFwcwkweGIwKCVyYnApLCAleG1tMTMKKwltb3ZhcHMJMHhjMCglcmJwKSwgJXhtbTE0CisJbW92YXBzCTB4ZDAoJXJicCksICV4bW0xNQorCWxlYQkweGEwKCVyYnApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJMHg0OCglcnNwKSwgJXIxNQorCW1vdgkweDUwKCVyc3ApLCAlcjE0CisJbW92CTB4NTgoJXJzcCksICVyMTMKKwltb3YJMHg2MCglcnNwKSwgJXIxMgorCW1vdgkweDY4KCVyc3ApLCAlcmJ4CisJbW92CTB4NzAoJXJzcCksICVyYXgKKwlsZWEJMHg3OCglcnNwKSwgJXJzcAorCW1vdgklcmF4LCAlcmJwCisuTGN0cl9lbmNfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrcywuLWJzYWVzX2N0cjMyX2VuY3J5cHRfYmxvY2tzCitfX18KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdm9pZCBic2Flc194dHNfW2VufGRlXWNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKKyMJY29uc3QgQUVTX0tFWSAqa2V5MSwgY29uc3QgQUVTX0tFWSAqa2V5MiwKKyMJY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0pOworIworbXkgKCR0d21hc2ssJHR3cmVzLCR0d3RtcCk9QFhNTVsxMy4uMTVdOworJGNvZGUuPTw8X19fOworLmdsb2JsCWJzYWVzX3h0c19lbmNyeXB0CisudHlwZQlic2Flc194dHNfZW5jcnlwdCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2JzYWVzX3h0c19lbmNyeXB0OgorCW1vdgklcnNwLCAlcmF4CisuTHh0c19lbmNfcHJvbG9ndWU6CisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJbGVhCS0weDQ4KCVyc3ApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3YJMHhhMCglcnNwKSwkYXJnNQkjIHB1bGwga2V5MgorCW1vdgkweGE4KCVyc3ApLCRhcmc2CSMgcHVsbCBpdnAKKwlsZWEJLTB4YTAoJXJzcCksICVyc3AKKwltb3ZhcHMJJXhtbTYsIDB4NDAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsIDB4NTAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsIDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTksIDB4NzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLCAweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwgMHg5MCglcnNwKQorCW1vdmFwcwkleG1tMTIsIDB4YTAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLCAweGIwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwgMHhjMCglcnNwKQorCW1vdmFwcwkleG1tMTUsIDB4ZDAoJXJzcCkKKy5MeHRzX2VuY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92CSVyc3AsICVyYnAJCSMgYmFja3VwICVyc3AKKwltb3YJJGFyZzEsICRpbnAJCSMgYmFja3VwIGFyZ3VtZW50cworCW1vdgkkYXJnMiwgJG91dAorCW1vdgkkYXJnMywgJGxlbgorCW1vdgkkYXJnNCwgJGtleQorCisJbGVhCSgkYXJnNiksICRhcmcxCisJbGVhCTB4MjAoJXJicCksICRhcmcyCisJbGVhCSgkYXJnNSksICRhcmczCisJY2FsbAlhc21fQUVTX2VuY3J5cHQJCSMgZ2VuZXJhdGUgaW5pdGlhbCB0d2VhaworCisJbW92CTI0MCgka2V5KSwgJWVheAkJIyByb3VuZHMKKwltb3YJJGxlbiwgJXJieAkJIyBiYWNrdXAgJGxlbgorCisJbW92CSVlYXgsICVlZHgJCSMgcm91bmRzCisJc2hsCVwkNywgJXJheAkJIyAxMjggYnl0ZXMgcGVyIGlubmVyIHJvdW5kIGtleQorCXN1YglcJGAxMjgtMzJgLCAlcmF4CSMgc2l6ZSBvZiBiaXQtc2xpY2VkIGtleSBzY2hlZHVsZQorCXN1YgklcmF4LCAlcnNwCisKKwltb3YJJXJzcCwgJXJheAkJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdgkka2V5LCAlcmN4CQkjIHBhc3Mga2V5CisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisJY2FsbAlfYnNhZXNfa2V5X2NvbnZlcnQKKwlweG9yCSV4bW02LCAleG1tNwkJIyBmaXggdXAgbGFzdCByb3VuZCBrZXkKKwltb3ZkcWEJJXhtbTcsICglcmF4KQkJIyBzYXZlIGxhc3Qgcm91bmQga2V5CisKKwlhbmQJXCQtMTYsICRsZW4KKwlzdWIJXCQweDgwLCAlcnNwCQkjIHBsYWNlIGZvciB0d2Vha1s4XQorCW1vdmRxYQkweDIwKCVyYnApLCBAWE1NWzddCSMgaW5pdGlhbCB0d2VhaworCisJcHhvcgkkdHd0bXAsICR0d3RtcAorCW1vdmRxYQkuTHh0c19tYWdpYyglcmlwKSwgJHR3bWFzaworCXBjbXBndGQJQFhNTVs3XSwgJHR3dG1wCQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisKKwlzdWIJXCQweDgwLCAkbGVuCisJamMJLkx4dHNfZW5jX3Nob3J0CisJam1wCS5MeHRzX2VuY19sb29wCisKKy5hbGlnbgkxNgorLkx4dHNfZW5jX2xvb3A6CitfX18KKyAgICBmb3IgKCRpPTA7JGk8NzskaSsrKSB7CisgICAgJGNvZGUuPTw8X19fOworCXBzaHVmZAlcJDB4MTMsICR0d3RtcCwgJHR3cmVzCisJcHhvcgkkdHd0bXAsICR0d3RtcAorCW1vdmRxYQlAWE1NWzddLCBAWE1NWyRpXQorCW1vdmRxYQlAWE1NWzddLCBgMHgxMCokaWAoJXJzcCkjIHNhdmUgdHdlYWtbJGldCisJcGFkZHEJQFhNTVs3XSwgQFhNTVs3XQkjIHBzbGxxCTEsJHR3ZWFrCisJcGFuZAkkdHdtYXNrLCAkdHdyZXMJCSMgaXNvbGF0ZSBjYXJyeSBhbmQgcmVzaWR1ZQorCXBjbXBndGQJQFhNTVs3XSwgJHR3dG1wCQkjIGJyb2FkY2FzdCB1cHBlciBiaXRzCisJcHhvcgkkdHdyZXMsIEBYTU1bN10KK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJGk+PTEpOworCW1vdmRxdQlgMHgxMCooJGktMSlgKCRpbnApLCBAWE1NWzgrJGktMV0KK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJGk+PTIpOworCXB4b3IJQFhNTVs4KyRpLTJdLCBAWE1NWyRpLTJdIyBpbnB1dFtdIF4gdHdlYWtbXQorX19fCisgICAgfQorJGNvZGUuPTw8X19fOworCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzgrNl0KKwlweG9yCUBYTU1bOCs1XSwgQFhNTVs1XQorCW1vdmRxdQkweDcwKCRpbnApLCBAWE1NWzgrN10KKwlsZWEJMHg4MCgkaW5wKSwgJGlucAorCW1vdmRxYQlAWE1NWzddLCAweDcwKCVyc3ApCisJcHhvcglAWE1NWzgrNl0sIEBYTU1bNl0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJcHhvcglAWE1NWzgrN10sIEBYTU1bN10KKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKworCWNhbGwJX2JzYWVzX2VuY3J5cHQ4CisKKwlweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJcHhvcgkweDEwKCVyc3ApLCBAWE1NWzFdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlweG9yCTB4MjAoJXJzcCksIEBYTU1bNF0KKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCXB4b3IJMHgzMCglcnNwKSwgQFhNTVs2XQorCW1vdmRxdQlAWE1NWzRdLCAweDIwKCRvdXQpCisJcHhvcgkweDQwKCVyc3ApLCBAWE1NWzNdCisJbW92ZHF1CUBYTU1bNl0sIDB4MzAoJG91dCkKKwlweG9yCTB4NTAoJXJzcCksIEBYTU1bN10KKwltb3ZkcXUJQFhNTVszXSwgMHg0MCgkb3V0KQorCXB4b3IJMHg2MCglcnNwKSwgQFhNTVsyXQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJcHhvcgkweDcwKCVyc3ApLCBAWE1NWzVdCisJbW92ZHF1CUBYTU1bMl0sIDB4NjAoJG91dCkKKwltb3ZkcXUJQFhNTVs1XSwgMHg3MCgkb3V0KQorCWxlYQkweDgwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHg3MCglcnNwKSwgQFhNTVs3XQkjIHByZXBhcmUgbmV4dCBpdGVyYXRpb24gdHdlYWsKKwlweG9yCSR0d3RtcCwgJHR3dG1wCisJbW92ZHFhCS5MeHRzX21hZ2ljKCVyaXApLCAkdHdtYXNrCisJcGNtcGd0ZAlAWE1NWzddLCAkdHd0bXAKKwlwc2h1ZmQJXCQweDEzLCAkdHd0bXAsICR0d3JlcworCXB4b3IJJHR3dG1wLCAkdHd0bXAKKwlwYWRkcQlAWE1NWzddLCBAWE1NWzddCSMgcHNsbHEJMSwkdHdlYWsKKwlwYW5kCSR0d21hc2ssICR0d3JlcwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJcGNtcGd0ZAlAWE1NWzddLCAkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwlweG9yCSR0d3JlcywgQFhNTVs3XQorCisJc3ViCVwkMHg4MCwkbGVuCisJam5jCS5MeHRzX2VuY19sb29wCisKKy5MeHRzX2VuY19zaG9ydDoKKwlhZGQJXCQweDgwLCAkbGVuCisJanoJLkx4dHNfZW5jX2RvbmUKK19fXworICAgIGZvciAoJGk9MDskaTw3OyRpKyspIHsKKyAgICAkY29kZS49PDxfX187CisJcHNodWZkCVwkMHgxMywgJHR3dG1wLCAkdHdyZXMKKwlweG9yCSR0d3RtcCwgJHR3dG1wCisJbW92ZHFhCUBYTU1bN10sIEBYTU1bJGldCisJbW92ZHFhCUBYTU1bN10sIGAweDEwKiRpYCglcnNwKSMgc2F2ZSB0d2Vha1skaV0KKwlwYWRkcQlAWE1NWzddLCBAWE1NWzddCSMgcHNsbHEJMSwkdHdlYWsKKwlwYW5kCSR0d21hc2ssICR0d3JlcwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJcGNtcGd0ZAlAWE1NWzddLCAkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwlweG9yCSR0d3JlcywgQFhNTVs3XQorX19fCisgICAgJGNvZGUuPTw8X19fIGlmICgkaT49MSk7CisJbW92ZHF1CWAweDEwKigkaS0xKWAoJGlucCksIEBYTU1bOCskaS0xXQorCWNtcAlcJGAweDEwKiRpYCwkbGVuCisJamUJLkx4dHNfZW5jXyRpCitfX18KKyAgICAkY29kZS49PDxfX18gaWYgKCRpPj0yKTsKKwlweG9yCUBYTU1bOCskaS0yXSwgQFhNTVskaS0yXSMgaW5wdXRbXSBeIHR3ZWFrW10KK19fXworICAgIH0KKyRjb2RlLj08PF9fXzsKKwltb3ZkcXUJMHg2MCgkaW5wKSwgQFhNTVs4KzZdCisJcHhvcglAWE1NWzgrNV0sIEBYTU1bNV0KKwltb3ZkcWEJQFhNTVs3XSwgMHg3MCglcnNwKQorCWxlYQkweDcwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrNl0sIEBYTU1bNl0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJcHhvcgkweDIwKCVyc3ApLCBAWE1NWzRdCisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwlweG9yCTB4MzAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs0XSwgMHgyMCgkb3V0KQorCXB4b3IJMHg0MCglcnNwKSwgQFhNTVszXQorCW1vdmRxdQlAWE1NWzZdLCAweDMwKCRvdXQpCisJcHhvcgkweDUwKCVyc3ApLCBAWE1NWzddCisJbW92ZHF1CUBYTU1bM10sIDB4NDAoJG91dCkKKwlweG9yCTB4NjAoJXJzcCksIEBYTU1bMl0KKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCW1vdmRxdQlAWE1NWzJdLCAweDYwKCRvdXQpCisJbGVhCTB4NzAoJG91dCksICRvdXQKKworCW1vdmRxYQkweDcwKCVyc3ApLCBAWE1NWzddCSMgbmV4dCBpdGVyYXRpb24gdHdlYWsKKwlqbXAJLkx4dHNfZW5jX2RvbmUKKy5hbGlnbgkxNgorLkx4dHNfZW5jXzY6CisJcHhvcglAWE1NWzgrNF0sIEBYTU1bNF0KKwlsZWEJMHg2MCgkaW5wKSwgJGlucAorCXB4b3IJQFhNTVs4KzVdLCBAWE1NWzVdCisJbGVhCTB4ODAoJXJzcCksICVyYXgJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdgklZWR4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKworCXB4b3IJMHgwMCglcnNwKSwgQFhNTVswXQkjIF49IHR3ZWFrW10KKwlweG9yCTB4MTAoJXJzcCksIEBYTU1bMV0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCXB4b3IJMHgyMCglcnNwKSwgQFhNTVs0XQorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJcHhvcgkweDMwKCVyc3ApLCBAWE1NWzZdCisJbW92ZHF1CUBYTU1bNF0sIDB4MjAoJG91dCkKKwlweG9yCTB4NDAoJXJzcCksIEBYTU1bM10KKwltb3ZkcXUJQFhNTVs2XSwgMHgzMCgkb3V0KQorCXB4b3IJMHg1MCglcnNwKSwgQFhNTVs3XQorCW1vdmRxdQlAWE1NWzNdLCAweDQwKCRvdXQpCisJbW92ZHF1CUBYTU1bN10sIDB4NTAoJG91dCkKKwlsZWEJMHg2MCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4NjAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19lbmNfZG9uZQorLmFsaWduCTE2CisuTHh0c19lbmNfNToKKwlweG9yCUBYTU1bOCszXSwgQFhNTVszXQorCWxlYQkweDUwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrNF0sIEBYTU1bNF0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJcHhvcgkweDIwKCVyc3ApLCBAWE1NWzRdCisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwlweG9yCTB4MzAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs0XSwgMHgyMCgkb3V0KQorCXB4b3IJMHg0MCglcnNwKSwgQFhNTVszXQorCW1vdmRxdQlAWE1NWzZdLCAweDMwKCRvdXQpCisJbW92ZHF1CUBYTU1bM10sIDB4NDAoJG91dCkKKwlsZWEJMHg1MCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4NTAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19lbmNfZG9uZQorLmFsaWduCTE2CisuTHh0c19lbmNfNDoKKwlweG9yCUBYTU1bOCsyXSwgQFhNTVsyXQorCWxlYQkweDQwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrM10sIEBYTU1bM10KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJcHhvcgkweDIwKCVyc3ApLCBAWE1NWzRdCisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwlweG9yCTB4MzAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs0XSwgMHgyMCgkb3V0KQorCW1vdmRxdQlAWE1NWzZdLCAweDMwKCRvdXQpCisJbGVhCTB4NDAoJG91dCksICRvdXQKKworCW1vdmRxYQkweDQwKCVyc3ApLCBAWE1NWzddCSMgbmV4dCBpdGVyYXRpb24gdHdlYWsKKwlqbXAJLkx4dHNfZW5jX2RvbmUKKy5hbGlnbgkxNgorLkx4dHNfZW5jXzM6CisJcHhvcglAWE1NWzgrMV0sIEBYTU1bMV0KKwlsZWEJMHgzMCgkaW5wKSwgJGlucAorCXB4b3IJQFhNTVs4KzJdLCBAWE1NWzJdCisJbGVhCTB4ODAoJXJzcCksICVyYXgJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdgklZWR4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCisJY2FsbAlfYnNhZXNfZW5jcnlwdDgKKworCXB4b3IJMHgwMCglcnNwKSwgQFhNTVswXQkjIF49IHR3ZWFrW10KKwlweG9yCTB4MTAoJXJzcCksIEBYTU1bMV0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCXB4b3IJMHgyMCglcnNwKSwgQFhNTVs0XQorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MjAoJG91dCkKKwlsZWEJMHgzMCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4MzAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19lbmNfZG9uZQorLmFsaWduCTE2CisuTHh0c19lbmNfMjoKKwlweG9yCUBYTU1bOCswXSwgQFhNTVswXQorCWxlYQkweDIwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrMV0sIEBYTU1bMV0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19lbmNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwlsZWEJMHgyMCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4MjAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19lbmNfZG9uZQorLmFsaWduCTE2CisuTHh0c19lbmNfMToKKwlweG9yCUBYTU1bMF0sIEBYTU1bOF0KKwlsZWEJMHgxMCgkaW5wKSwgJGlucAorCW1vdmRxYQlAWE1NWzhdLCAweDIwKCVyYnApCisJbGVhCTB4MjAoJXJicCksICRhcmcxCisJbGVhCTB4MjAoJXJicCksICRhcmcyCisJbGVhCSgka2V5KSwgJGFyZzMKKwljYWxsCWFzbV9BRVNfZW5jcnlwdAkJIyBkb2Vzbid0IHRvdWNoICV4bW0KKwlweG9yCTB4MjAoJXJicCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJI3B4b3IJQFhNTVs4XSwgQFhNTVswXQorCSNsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJI21vdgklZWR4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCSNjYWxsCV9ic2Flc19lbmNyeXB0OAorCSNweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlsZWEJMHgxMCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4MTAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCisuTHh0c19lbmNfZG9uZToKKwlhbmQJXCQxNSwgJWVieAorCWp6CS5MeHRzX2VuY19yZXQKKwltb3YJJG91dCwgJXJkeAorCisuTHh0c19lbmNfc3RlYWw6CisJbW92emIJKCRpbnApLCAlZWF4CisJbW92emIJLTE2KCVyZHgpLCAlZWN4CisJbGVhCTEoJGlucCksICRpbnAKKwltb3YJJWFsLCAtMTYoJXJkeCkKKwltb3YJJWNsLCAwKCVyZHgpCisJbGVhCTEoJXJkeCksICVyZHgKKwlzdWIJXCQxLCVlYngKKwlqbnoJLkx4dHNfZW5jX3N0ZWFsCisKKwltb3ZkcXUJLTE2KCRvdXQpLCBAWE1NWzBdCisJbGVhCTB4MjAoJXJicCksICRhcmcxCisJcHhvcglAWE1NWzddLCBAWE1NWzBdCisJbGVhCTB4MjAoJXJicCksICRhcmcyCisJbW92ZHFhCUBYTU1bMF0sIDB4MjAoJXJicCkKKwlsZWEJKCRrZXkpLCAkYXJnMworCWNhbGwJYXNtX0FFU19lbmNyeXB0CQkjIGRvZXNuJ3QgdG91Y2ggJXhtbQorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVs3XQorCW1vdmRxdQlAWE1NWzddLCAtMTYoJG91dCkKKworLkx4dHNfZW5jX3JldDoKKwlsZWEJKCVyc3ApLCAlcmF4CisJcHhvcgkleG1tMCwgJXhtbTAKKy5MeHRzX2VuY19iemVybzoJCQkjIHdpcGUga2V5IHNjaGVkdWxlIFtpZiBhbnldCisJbW92ZHFhCSV4bW0wLCAweDAwKCVyYXgpCisJbW92ZHFhCSV4bW0wLCAweDEwKCVyYXgpCisJbGVhCTB4MjAoJXJheCksICVyYXgKKwljbXAJJXJheCwgJXJicAorCWphCS5MeHRzX2VuY19iemVybworCisJbGVhCSglcmJwKSwlcnNwCQkjIHJlc3RvcmUgJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTB4NDAoJXJicCksICV4bW02CisJbW92YXBzCTB4NTAoJXJicCksICV4bW03CisJbW92YXBzCTB4NjAoJXJicCksICV4bW04CisJbW92YXBzCTB4NzAoJXJicCksICV4bW05CisJbW92YXBzCTB4ODAoJXJicCksICV4bW0xMAorCW1vdmFwcwkweDkwKCVyYnApLCAleG1tMTEKKwltb3ZhcHMJMHhhMCglcmJwKSwgJXhtbTEyCisJbW92YXBzCTB4YjAoJXJicCksICV4bW0xMworCW1vdmFwcwkweGMwKCVyYnApLCAleG1tMTQKKwltb3ZhcHMJMHhkMCglcmJwKSwgJXhtbTE1CisJbGVhCTB4YTAoJXJicCksICVyc3AKK19fXworJGNvZGUuPTw8X19fOworCW1vdgkweDQ4KCVyc3ApLCAlcjE1CisJbW92CTB4NTAoJXJzcCksICVyMTQKKwltb3YJMHg1OCglcnNwKSwgJXIxMworCW1vdgkweDYwKCVyc3ApLCAlcjEyCisJbW92CTB4NjgoJXJzcCksICVyYngKKwltb3YJMHg3MCglcnNwKSwgJXJheAorCWxlYQkweDc4KCVyc3ApLCAlcnNwCisJbW92CSVyYXgsICVyYnAKKy5MeHRzX2VuY19lcGlsb2d1ZToKKwlyZXQKKy5zaXplCWJzYWVzX3h0c19lbmNyeXB0LC4tYnNhZXNfeHRzX2VuY3J5cHQKKworLmdsb2JsCWJzYWVzX3h0c19kZWNyeXB0CisudHlwZQlic2Flc194dHNfZGVjcnlwdCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2JzYWVzX3h0c19kZWNyeXB0OgorCW1vdgklcnNwLCAlcmF4CisuTHh0c19kZWNfcHJvbG9ndWU6CisJcHVzaAklcmJwCisJcHVzaAklcmJ4CisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJbGVhCS0weDQ4KCVyc3ApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3YJMHhhMCglcnNwKSwkYXJnNQkjIHB1bGwga2V5MgorCW1vdgkweGE4KCVyc3ApLCRhcmc2CSMgcHVsbCBpdnAKKwlsZWEJLTB4YTAoJXJzcCksICVyc3AKKwltb3ZhcHMJJXhtbTYsIDB4NDAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsIDB4NTAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsIDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTksIDB4NzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLCAweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwgMHg5MCglcnNwKQorCW1vdmFwcwkleG1tMTIsIDB4YTAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLCAweGIwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwgMHhjMCglcnNwKQorCW1vdmFwcwkleG1tMTUsIDB4ZDAoJXJzcCkKKy5MeHRzX2RlY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92CSVyc3AsICVyYnAJCSMgYmFja3VwICVyc3AKKwltb3YJJGFyZzEsICRpbnAJCSMgYmFja3VwIGFyZ3VtZW50cworCW1vdgkkYXJnMiwgJG91dAorCW1vdgkkYXJnMywgJGxlbgorCW1vdgkkYXJnNCwgJGtleQorCisJbGVhCSgkYXJnNiksICRhcmcxCisJbGVhCTB4MjAoJXJicCksICRhcmcyCisJbGVhCSgkYXJnNSksICRhcmczCisJY2FsbAlhc21fQUVTX2VuY3J5cHQJCSMgZ2VuZXJhdGUgaW5pdGlhbCB0d2VhaworCisJbW92CTI0MCgka2V5KSwgJWVheAkJIyByb3VuZHMKKwltb3YJJGxlbiwgJXJieAkJIyBiYWNrdXAgJGxlbgorCisJbW92CSVlYXgsICVlZHgJCSMgcm91bmRzCisJc2hsCVwkNywgJXJheAkJIyAxMjggYnl0ZXMgcGVyIGlubmVyIHJvdW5kIGtleQorCXN1YglcJGAxMjgtMzJgLCAlcmF4CSMgc2l6ZSBvZiBiaXQtc2xpY2VkIGtleSBzY2hlZHVsZQorCXN1YgklcmF4LCAlcnNwCisKKwltb3YJJXJzcCwgJXJheAkJIyBwYXNzIGtleSBzY2hlZHVsZQorCW1vdgkka2V5LCAlcmN4CQkjIHBhc3Mga2V5CisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisJY2FsbAlfYnNhZXNfa2V5X2NvbnZlcnQKKwlweG9yCSglcnNwKSwgJXhtbTcJCSMgZml4IHVwIHJvdW5kIDAga2V5CisJbW92ZHFhCSV4bW02LCAoJXJheCkJCSMgc2F2ZSBsYXN0IHJvdW5kIGtleQorCW1vdmRxYQkleG1tNywgKCVyc3ApCisKKwl4b3IJJWVheCwgJWVheAkJIyBpZiAoJGxlbiUxNikgbGVuLT0xNjsKKwlhbmQJXCQtMTYsICRsZW4KKwl0ZXN0CVwkMTUsICVlYngKKwlzZXRuegklYWwKKwlzaGwJXCQ0LCAlcmF4CisJc3ViCSVyYXgsICRsZW4KKworCXN1YglcJDB4ODAsICVyc3AJCSMgcGxhY2UgZm9yIHR3ZWFrWzhdCisJbW92ZHFhCTB4MjAoJXJicCksIEBYTU1bN10JIyBpbml0aWFsIHR3ZWFrCisKKwlweG9yCSR0d3RtcCwgJHR3dG1wCisJbW92ZHFhCS5MeHRzX21hZ2ljKCVyaXApLCAkdHdtYXNrCisJcGNtcGd0ZAlAWE1NWzddLCAkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKworCXN1YglcJDB4ODAsICRsZW4KKwlqYwkuTHh0c19kZWNfc2hvcnQKKwlqbXAJLkx4dHNfZGVjX2xvb3AKKworLmFsaWduCTE2CisuTHh0c19kZWNfbG9vcDoKK19fXworICAgIGZvciAoJGk9MDskaTw3OyRpKyspIHsKKyAgICAkY29kZS49PDxfX187CisJcHNodWZkCVwkMHgxMywgJHR3dG1wLCAkdHdyZXMKKwlweG9yCSR0d3RtcCwgJHR3dG1wCisJbW92ZHFhCUBYTU1bN10sIEBYTU1bJGldCisJbW92ZHFhCUBYTU1bN10sIGAweDEwKiRpYCglcnNwKSMgc2F2ZSB0d2Vha1skaV0KKwlwYWRkcQlAWE1NWzddLCBAWE1NWzddCSMgcHNsbHEJMSwkdHdlYWsKKwlwYW5kCSR0d21hc2ssICR0d3JlcwkJIyBpc29sYXRlIGNhcnJ5IGFuZCByZXNpZHVlCisJcGNtcGd0ZAlAWE1NWzddLCAkdHd0bXAJCSMgYnJvYWRjYXN0IHVwcGVyIGJpdHMKKwlweG9yCSR0d3JlcywgQFhNTVs3XQorX19fCisgICAgJGNvZGUuPTw8X19fIGlmICgkaT49MSk7CisJbW92ZHF1CWAweDEwKigkaS0xKWAoJGlucCksIEBYTU1bOCskaS0xXQorX19fCisgICAgJGNvZGUuPTw8X19fIGlmICgkaT49Mik7CisJcHhvcglAWE1NWzgrJGktMl0sIEBYTU1bJGktMl0jIGlucHV0W10gXiB0d2Vha1tdCitfX18KKyAgICB9CiskY29kZS49PDxfX187CisJbW92ZHF1CTB4NjAoJGlucCksIEBYTU1bOCs2XQorCXB4b3IJQFhNTVs4KzVdLCBAWE1NWzVdCisJbW92ZHF1CTB4NzAoJGlucCksIEBYTU1bOCs3XQorCWxlYQkweDgwKCRpbnApLCAkaW5wCisJbW92ZHFhCUBYTU1bN10sIDB4NzAoJXJzcCkKKwlweG9yCUBYTU1bOCs2XSwgQFhNTVs2XQorCWxlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwlweG9yCUBYTU1bOCs3XSwgQFhNTVs3XQorCW1vdgklZWR4LCAlcjEwZAkJIyBwYXNzIHJvdW5kcworCisJY2FsbAlfYnNhZXNfZGVjcnlwdDgKKworCXB4b3IJMHgwMCglcnNwKSwgQFhNTVswXQkjIF49IHR3ZWFrW10KKwlweG9yCTB4MTAoJXJzcCksIEBYTU1bMV0KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCXB4b3IJMHgyMCglcnNwKSwgQFhNTVs2XQorCW1vdmRxdQlAWE1NWzFdLCAweDEwKCRvdXQpCisJcHhvcgkweDMwKCVyc3ApLCBAWE1NWzRdCisJbW92ZHF1CUBYTU1bNl0sIDB4MjAoJG91dCkKKwlweG9yCTB4NDAoJXJzcCksIEBYTU1bMl0KKwltb3ZkcXUJQFhNTVs0XSwgMHgzMCgkb3V0KQorCXB4b3IJMHg1MCglcnNwKSwgQFhNTVs3XQorCW1vdmRxdQlAWE1NWzJdLCAweDQwKCRvdXQpCisJcHhvcgkweDYwKCVyc3ApLCBAWE1NWzNdCisJbW92ZHF1CUBYTU1bN10sIDB4NTAoJG91dCkKKwlweG9yCTB4NzAoJXJzcCksIEBYTU1bNV0KKwltb3ZkcXUJQFhNTVszXSwgMHg2MCgkb3V0KQorCW1vdmRxdQlAWE1NWzVdLCAweDcwKCRvdXQpCisJbGVhCTB4ODAoJG91dCksICRvdXQKKworCW1vdmRxYQkweDcwKCVyc3ApLCBAWE1NWzddCSMgcHJlcGFyZSBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCXB4b3IJJHR3dG1wLCAkdHd0bXAKKwltb3ZkcWEJLkx4dHNfbWFnaWMoJXJpcCksICR0d21hc2sKKwlwY21wZ3RkCUBYTU1bN10sICR0d3RtcAorCXBzaHVmZAlcJDB4MTMsICR0d3RtcCwgJHR3cmVzCisJcHhvcgkkdHd0bXAsICR0d3RtcAorCXBhZGRxCUBYTU1bN10sIEBYTU1bN10JIyBwc2xscQkxLCR0d2VhaworCXBhbmQJJHR3bWFzaywgJHR3cmVzCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwlwY21wZ3RkCUBYTU1bN10sICR0d3RtcAkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCXB4b3IJJHR3cmVzLCBAWE1NWzddCisKKwlzdWIJXCQweDgwLCRsZW4KKwlqbmMJLkx4dHNfZGVjX2xvb3AKKworLkx4dHNfZGVjX3Nob3J0OgorCWFkZAlcJDB4ODAsICRsZW4KKwlqegkuTHh0c19kZWNfZG9uZQorX19fCisgICAgZm9yICgkaT0wOyRpPDc7JGkrKykgeworICAgICRjb2RlLj08PF9fXzsKKwlwc2h1ZmQJXCQweDEzLCAkdHd0bXAsICR0d3JlcworCXB4b3IJJHR3dG1wLCAkdHd0bXAKKwltb3ZkcWEJQFhNTVs3XSwgQFhNTVskaV0KKwltb3ZkcWEJQFhNTVs3XSwgYDB4MTAqJGlgKCVyc3ApIyBzYXZlIHR3ZWFrWyRpXQorCXBhZGRxCUBYTU1bN10sIEBYTU1bN10JIyBwc2xscQkxLCR0d2VhaworCXBhbmQJJHR3bWFzaywgJHR3cmVzCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwlwY21wZ3RkCUBYTU1bN10sICR0d3RtcAkJIyBicm9hZGNhc3QgdXBwZXIgYml0cworCXB4b3IJJHR3cmVzLCBAWE1NWzddCitfX18KKyAgICAkY29kZS49PDxfX18gaWYgKCRpPj0xKTsKKwltb3ZkcXUJYDB4MTAqKCRpLTEpYCgkaW5wKSwgQFhNTVs4KyRpLTFdCisJY21wCVwkYDB4MTAqJGlgLCRsZW4KKwlqZQkuTHh0c19kZWNfJGkKK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJGk+PTIpOworCXB4b3IJQFhNTVs4KyRpLTJdLCBAWE1NWyRpLTJdIyBpbnB1dFtdIF4gdHdlYWtbXQorX19fCisgICAgfQorJGNvZGUuPTw8X19fOworCW1vdmRxdQkweDYwKCRpbnApLCBAWE1NWzgrNl0KKwlweG9yCUBYTU1bOCs1XSwgQFhNTVs1XQorCW1vdmRxYQlAWE1NWzddLCAweDcwKCVyc3ApCisJbGVhCTB4NzAoJGlucCksICRpbnAKKwlweG9yCUBYTU1bOCs2XSwgQFhNTVs2XQorCWxlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKworCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisKKwlweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJcHhvcgkweDEwKCVyc3ApLCBAWE1NWzFdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlweG9yCTB4MjAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCXB4b3IJMHgzMCglcnNwKSwgQFhNTVs0XQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJcHhvcgkweDQwKCVyc3ApLCBAWE1NWzJdCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwlweG9yCTB4NTAoJXJzcCksIEBYTU1bN10KKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCXB4b3IJMHg2MCglcnNwKSwgQFhNTVszXQorCW1vdmRxdQlAWE1NWzddLCAweDUwKCRvdXQpCisJbW92ZHF1CUBYTU1bM10sIDB4NjAoJG91dCkKKwlsZWEJMHg3MCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4NzAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19kZWNfZG9uZQorLmFsaWduCTE2CisuTHh0c19kZWNfNjoKKwlweG9yCUBYTU1bOCs0XSwgQFhNTVs0XQorCWxlYQkweDYwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrNV0sIEBYTU1bNV0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJcHhvcgkweDIwKCVyc3ApLCBAWE1NWzZdCisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwlweG9yCTB4MzAoJXJzcCksIEBYTU1bNF0KKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCXB4b3IJMHg0MCglcnNwKSwgQFhNTVsyXQorCW1vdmRxdQlAWE1NWzRdLCAweDMwKCRvdXQpCisJcHhvcgkweDUwKCVyc3ApLCBAWE1NWzddCisJbW92ZHF1CUBYTU1bMl0sIDB4NDAoJG91dCkKKwltb3ZkcXUJQFhNTVs3XSwgMHg1MCgkb3V0KQorCWxlYQkweDYwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHg2MCglcnNwKSwgQFhNTVs3XQkjIG5leHQgaXRlcmF0aW9uIHR3ZWFrCisJam1wCS5MeHRzX2RlY19kb25lCisuYWxpZ24JMTYKKy5MeHRzX2RlY181OgorCXB4b3IJQFhNTVs4KzNdLCBAWE1NWzNdCisJbGVhCTB4NTAoJGlucCksICRpbnAKKwlweG9yCUBYTU1bOCs0XSwgQFhNTVs0XQorCWxlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKworCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisKKwlweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJcHhvcgkweDEwKCVyc3ApLCBAWE1NWzFdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlweG9yCTB4MjAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCXB4b3IJMHgzMCglcnNwKSwgQFhNTVs0XQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJcHhvcgkweDQwKCVyc3ApLCBAWE1NWzJdCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwltb3ZkcXUJQFhNTVsyXSwgMHg0MCgkb3V0KQorCWxlYQkweDUwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHg1MCglcnNwKSwgQFhNTVs3XQkjIG5leHQgaXRlcmF0aW9uIHR3ZWFrCisJam1wCS5MeHRzX2RlY19kb25lCisuYWxpZ24JMTYKKy5MeHRzX2RlY180OgorCXB4b3IJQFhNTVs4KzJdLCBAWE1NWzJdCisJbGVhCTB4NDAoJGlucCksICRpbnAKKwlweG9yCUBYTU1bOCszXSwgQFhNTVszXQorCWxlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKworCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisKKwlweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJcHhvcgkweDEwKCVyc3ApLCBAWE1NWzFdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwlweG9yCTB4MjAoJXJzcCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCXB4b3IJMHgzMCglcnNwKSwgQFhNTVs0XQorCW1vdmRxdQlAWE1NWzZdLCAweDIwKCRvdXQpCisJbW92ZHF1CUBYTU1bNF0sIDB4MzAoJG91dCkKKwlsZWEJMHg0MCgkb3V0KSwgJG91dAorCisJbW92ZHFhCTB4NDAoJXJzcCksIEBYTU1bN10JIyBuZXh0IGl0ZXJhdGlvbiB0d2VhaworCWptcAkuTHh0c19kZWNfZG9uZQorLmFsaWduCTE2CisuTHh0c19kZWNfMzoKKwlweG9yCUBYTU1bOCsxXSwgQFhNTVsxXQorCWxlYQkweDMwKCRpbnApLCAkaW5wCisJcHhvcglAWE1NWzgrMl0sIEBYTU1bMl0KKwlsZWEJMHg4MCglcnNwKSwgJXJheAkjIHBhc3Mga2V5IHNjaGVkdWxlCisJbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisKKwljYWxsCV9ic2Flc19kZWNyeXB0OAorCisJcHhvcgkweDAwKCVyc3ApLCBAWE1NWzBdCSMgXj0gdHdlYWtbXQorCXB4b3IJMHgxMCglcnNwKSwgQFhNTVsxXQorCW1vdmRxdQlAWE1NWzBdLCAweDAwKCRvdXQpCSMgd3JpdGUgb3V0cHV0CisJcHhvcgkweDIwKCVyc3ApLCBAWE1NWzZdCisJbW92ZHF1CUBYTU1bMV0sIDB4MTAoJG91dCkKKwltb3ZkcXUJQFhNTVs2XSwgMHgyMCgkb3V0KQorCWxlYQkweDMwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHgzMCglcnNwKSwgQFhNTVs3XQkjIG5leHQgaXRlcmF0aW9uIHR3ZWFrCisJam1wCS5MeHRzX2RlY19kb25lCisuYWxpZ24JMTYKKy5MeHRzX2RlY18yOgorCXB4b3IJQFhNTVs4KzBdLCBAWE1NWzBdCisJbGVhCTB4MjAoJGlucCksICRpbnAKKwlweG9yCUBYTU1bOCsxXSwgQFhNTVsxXQorCWxlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwltb3YJJWVkeCwgJXIxMGQJCSMgcGFzcyByb3VuZHMKKworCWNhbGwJX2JzYWVzX2RlY3J5cHQ4CisKKwlweG9yCTB4MDAoJXJzcCksIEBYTU1bMF0JIyBePSB0d2Vha1tdCisJcHhvcgkweDEwKCVyc3ApLCBAWE1NWzFdCisJbW92ZHF1CUBYTU1bMF0sIDB4MDAoJG91dCkJIyB3cml0ZSBvdXRwdXQKKwltb3ZkcXUJQFhNTVsxXSwgMHgxMCgkb3V0KQorCWxlYQkweDIwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHgyMCglcnNwKSwgQFhNTVs3XQkjIG5leHQgaXRlcmF0aW9uIHR3ZWFrCisJam1wCS5MeHRzX2RlY19kb25lCisuYWxpZ24JMTYKKy5MeHRzX2RlY18xOgorCXB4b3IJQFhNTVswXSwgQFhNTVs4XQorCWxlYQkweDEwKCRpbnApLCAkaW5wCisJbW92ZHFhCUBYTU1bOF0sIDB4MjAoJXJicCkKKwlsZWEJMHgyMCglcmJwKSwgJGFyZzEKKwlsZWEJMHgyMCglcmJwKSwgJGFyZzIKKwlsZWEJKCRrZXkpLCAkYXJnMworCWNhbGwJYXNtX0FFU19kZWNyeXB0CQkjIGRvZXNuJ3QgdG91Y2ggJXhtbQorCXB4b3IJMHgyMCglcmJwKSwgQFhNTVswXQkjIF49IHR3ZWFrW10KKwkjcHhvcglAWE1NWzhdLCBAWE1NWzBdCisJI2xlYQkweDgwKCVyc3ApLCAlcmF4CSMgcGFzcyBrZXkgc2NoZWR1bGUKKwkjbW92CSVlZHgsICVyMTBkCQkjIHBhc3Mgcm91bmRzCisJI2NhbGwJX2JzYWVzX2RlY3J5cHQ4CisJI3B4b3IJMHgwMCglcnNwKSwgQFhNTVswXQkjIF49IHR3ZWFrW10KKwltb3ZkcXUJQFhNTVswXSwgMHgwMCgkb3V0KQkjIHdyaXRlIG91dHB1dAorCWxlYQkweDEwKCRvdXQpLCAkb3V0CisKKwltb3ZkcWEJMHgxMCglcnNwKSwgQFhNTVs3XQkjIG5leHQgaXRlcmF0aW9uIHR3ZWFrCisKKy5MeHRzX2RlY19kb25lOgorCWFuZAlcJDE1LCAlZWJ4CisJanoJLkx4dHNfZGVjX3JldAorCisJcHhvcgkkdHd0bXAsICR0d3RtcAorCW1vdmRxYQkuTHh0c19tYWdpYyglcmlwKSwgJHR3bWFzaworCXBjbXBndGQJQFhNTVs3XSwgJHR3dG1wCisJcHNodWZkCVwkMHgxMywgJHR3dG1wLCAkdHdyZXMKKwltb3ZkcWEJQFhNTVs3XSwgQFhNTVs2XQorCXBhZGRxCUBYTU1bN10sIEBYTU1bN10JIyBwc2xscSAxLCR0d2VhaworCXBhbmQJJHR3bWFzaywgJHR3cmVzCQkjIGlzb2xhdGUgY2FycnkgYW5kIHJlc2lkdWUKKwltb3ZkcXUJKCRpbnApLCBAWE1NWzBdCisJcHhvcgkkdHdyZXMsIEBYTU1bN10KKworCWxlYQkweDIwKCVyYnApLCAkYXJnMQorCXB4b3IJQFhNTVs3XSwgQFhNTVswXQorCWxlYQkweDIwKCVyYnApLCAkYXJnMgorCW1vdmRxYQlAWE1NWzBdLCAweDIwKCVyYnApCisJbGVhCSgka2V5KSwgJGFyZzMKKwljYWxsCWFzbV9BRVNfZGVjcnlwdAkJIyBkb2Vzbid0IHRvdWNoICV4bW0KKwlweG9yCTB4MjAoJXJicCksIEBYTU1bN10KKwltb3YJJG91dCwgJXJkeAorCW1vdmRxdQlAWE1NWzddLCAoJG91dCkKKworLkx4dHNfZGVjX3N0ZWFsOgorCW1vdnpiCTE2KCRpbnApLCAlZWF4CisJbW92emIJKCVyZHgpLCAlZWN4CisJbGVhCTEoJGlucCksICRpbnAKKwltb3YJJWFsLCAoJXJkeCkKKwltb3YJJWNsLCAxNiglcmR4KQorCWxlYQkxKCVyZHgpLCAlcmR4CisJc3ViCVwkMSwlZWJ4CisJam56CS5MeHRzX2RlY19zdGVhbAorCisJbW92ZHF1CSgkb3V0KSwgQFhNTVswXQorCWxlYQkweDIwKCVyYnApLCAkYXJnMQorCXB4b3IJQFhNTVs2XSwgQFhNTVswXQorCWxlYQkweDIwKCVyYnApLCAkYXJnMgorCW1vdmRxYQlAWE1NWzBdLCAweDIwKCVyYnApCisJbGVhCSgka2V5KSwgJGFyZzMKKwljYWxsCWFzbV9BRVNfZGVjcnlwdAkJIyBkb2Vzbid0IHRvdWNoICV4bW0KKwlweG9yCTB4MjAoJXJicCksIEBYTU1bNl0KKwltb3ZkcXUJQFhNTVs2XSwgKCRvdXQpCisKKy5MeHRzX2RlY19yZXQ6CisJbGVhCSglcnNwKSwgJXJheAorCXB4b3IJJXhtbTAsICV4bW0wCisuTHh0c19kZWNfYnplcm86CQkJIyB3aXBlIGtleSBzY2hlZHVsZSBbaWYgYW55XQorCW1vdmRxYQkleG1tMCwgMHgwMCglcmF4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglcmF4KQorCWxlYQkweDIwKCVyYXgpLCAlcmF4CisJY21wCSVyYXgsICVyYnAKKwlqYQkuTHh0c19kZWNfYnplcm8KKworCWxlYQkoJXJicCksJXJzcAkJIyByZXN0b3JlICVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDQwKCVyYnApLCAleG1tNgorCW1vdmFwcwkweDUwKCVyYnApLCAleG1tNworCW1vdmFwcwkweDYwKCVyYnApLCAleG1tOAorCW1vdmFwcwkweDcwKCVyYnApLCAleG1tOQorCW1vdmFwcwkweDgwKCVyYnApLCAleG1tMTAKKwltb3ZhcHMJMHg5MCglcmJwKSwgJXhtbTExCisJbW92YXBzCTB4YTAoJXJicCksICV4bW0xMgorCW1vdmFwcwkweGIwKCVyYnApLCAleG1tMTMKKwltb3ZhcHMJMHhjMCglcmJwKSwgJXhtbTE0CisJbW92YXBzCTB4ZDAoJXJicCksICV4bW0xNQorCWxlYQkweGEwKCVyYnApLCAlcnNwCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJMHg0OCglcnNwKSwgJXIxNQorCW1vdgkweDUwKCVyc3ApLCAlcjE0CisJbW92CTB4NTgoJXJzcCksICVyMTMKKwltb3YJMHg2MCglcnNwKSwgJXIxMgorCW1vdgkweDY4KCVyc3ApLCAlcmJ4CisJbW92CTB4NzAoJXJzcCksICVyYXgKKwlsZWEJMHg3OCglcnNwKSwgJXJzcAorCW1vdgklcmF4LCAlcmJwCisuTHh0c19kZWNfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlic2Flc194dHNfZGVjcnlwdCwuLWJzYWVzX3h0c19kZWNyeXB0CitfX18KK30KKyRjb2RlLj08PF9fXzsKKy50eXBlCV9ic2Flc19jb25zdCxcQG9iamVjdAorLmFsaWduCTY0CitfYnNhZXNfY29uc3Q6CisuTE0wSVNSOgkjIEludlNoaWZ0Um93cyBjb25zdGFudHMKKwkucXVhZAkweDBhMGUwMjA2MDcwYjBmMDMsIDB4MDAwNDA4MGMwZDAxMDUwOQorLkxJU1JNMDoKKwkucXVhZAkweDAxMDQwYjBlMDIwNTA4MGYsIDB4MDMwNjA5MGMwMDA3MGEwZAorLkxJU1I6CisJLnF1YWQJMHgwNTA0MDcwNjAyMDEwMDAzLCAweDBmMGUwZDBjMDgwYjBhMDkKKy5MQlMwOgkJIyBiaXQtc2xpY2UgY29uc3RhbnRzCisJLnF1YWQJMHg1NTU1NTU1NTU1NTU1NTU1LCAweDU1NTU1NTU1NTU1NTU1NTUKKy5MQlMxOgorCS5xdWFkCTB4MzMzMzMzMzMzMzMzMzMzMywgMHgzMzMzMzMzMzMzMzMzMzMzCisuTEJTMjoKKwkucXVhZAkweDBmMGYwZjBmMGYwZjBmMGYsIDB4MGYwZjBmMGYwZjBmMGYwZgorLkxTUjoJCSMgc2hpZnRyb3dzIGNvbnN0YW50cworCS5xdWFkCTB4MDUwNDA3MDYwMDAzMDIwMSwgMHgwZjBlMGQwYzBhMDkwODBiCisuTFNSTTA6CisJLnF1YWQJMHgwMzA0MDkwZTAwMDUwYTBmLCAweDAxMDYwYjBjMDIwNzA4MGQKKy5MTTA6CisJLnF1YWQJMHgwMjA2MGEwZTAzMDcwYjBmLCAweDAwMDQwODBjMDEwNTA5MGQKKy5MTTBTUjoKKwkucXVhZAkweDBhMGUwMjA2MGYwMzA3MGIsIDB4MDAwNDA4MGMwNTA5MGQwMQorLkxOT1Q6CQkjIG1hZ2ljIGNvbnN0YW50cworCS5xdWFkCTB4ZmZmZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmCisuTDYzOgorCS5xdWFkCTB4NjM2MzYzNjM2MzYzNjM2MywgMHg2MzYzNjM2MzYzNjM2MzYzCisuTFNXUFVQOgkjIGJ5dGUtc3dhcCB1cHBlciBkd29yZAorCS5xdWFkCTB4MDcwNjA1MDQwMzAyMDEwMCwgMHgwYzBkMGUwZjBiMGEwOTA4CisuTFNXUFVQTTBTUjoKKwkucXVhZAkweDBhMGQwMjA2MGMwMzA3MGIsIDB4MDAwNDA4MGYwNTA5MGUwMQorLkxBREQxOgkJIyBjb3VudGVyIGluY3JlbWVudCBjb25zdGFudHMKKwkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDEwMDAwMDAwMAorLkxBREQyOgorCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwMjAwMDAwMDAwCisuTEFERDM6CisJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDAzMDAwMDAwMDAKKy5MQURENDoKKwkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDQwMDAwMDAwMAorLkxBREQ1OgorCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwNTAwMDAwMDAwCisuTEFERDY6CisJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwLCAweDAwMDAwMDA2MDAwMDAwMDAKKy5MQURENzoKKwkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDcwMDAwMDAwMAorLkxBREQ4OgorCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMCwgMHgwMDAwMDAwODAwMDAwMDAwCisuTHh0c19tYWdpYzoKKwkubG9uZwkweDg3LDAsMSwwCisuYXNjaXoJIkJpdC1zbGljZWQgQUVTIGZvciB4ODZfNjQvU1NTRTMsIEVtaWxpYSBLw6RzcGVyLCBQZXRlciBTY2h3YWJlLCBBbmR5IFBvbHlha292IgorLmFsaWduCTY0Cisuc2l6ZQlfYnNhZXNfY29uc3QsLi1fYnNhZXNfY29uc3QKK19fXworCisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCW1vdgk4KCRkaXNwKSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQorCW1vdgk1NigkZGlzcCksJXIxMQkJIyBkaXNwLT5IYW5kbGVyRGF0YQorCisJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIHByb2xvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8cHJvbG9ndWUgbGFiZWwKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCW1vdgk0KCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzFdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBlcGlsb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj1lcGlsb2d1ZSBsYWJlbAorCWphZQkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTYwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYnAKKworCWxlYQkweDQwKCVyYXgpLCVyc2kJCSMgJXhtbSBzYXZlIGFyZWEKKwlsZWEJNTEyKCRjb250ZXh0KSwlcmRpCSMgJmNvbnRleHQuWG1tNgorCW1vdglcJDIwLCVlY3gJCSMgMTAqc2l6ZW9mKCV4bW0wKS9zaXplb2YoJXJheCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisJbGVhCTB4YTAoJXJheCksJXJheAkJIyBhZGp1c3Qgc3RhY2sgcG9pbnRlcgorCisJbW92CTB4NzAoJXJheCksJXJicAorCW1vdgkweDY4KCVyYXgpLCVyYngKKwltb3YJMHg2MCglcmF4KSwlcjEyCisJbW92CTB4NTgoJXJheCksJXIxMworCW1vdgkweDUwKCVyYXgpLCVyMTQKKwltb3YJMHg0OCglcmF4KSwlcjE1CisJbGVhCTB4NzgoJXJheCksJXJheAkJIyBhZGp1c3Qgc3RhY2sgcG9pbnRlcgorCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAorCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAorCW1vdgklcjEyLDIxNigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMgorCW1vdgklcjEzLDIyNCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMworCW1vdgklcjE0LDIzMigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNAorCW1vdgklcjE1LDI0MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNQorCisuTGluX3Byb2xvZ3VlOgorCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorCisJbW92CTQwKCRkaXNwKSwlcmRpCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0CisJbW92CVwkYDEyMzIvOGAsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQlzZV9oYW5kbGVyLC4tc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGVjYik7CisJLnJ2YQkuTGVjYl9lbmNfcHJvbG9ndWUKKwkucnZhCS5MZWNiX2VuY19lcGlsb2d1ZQorCS5ydmEJLkxlY2JfZW5jX2luZm8KKworCS5ydmEJLkxlY2JfZGVjX3Byb2xvZ3VlCisJLnJ2YQkuTGVjYl9kZWNfZXBpbG9ndWUKKwkucnZhCS5MZWNiX2RlY19pbmZvCitfX18KKyRjb2RlLj08PF9fXzsKKwkucnZhCS5MY2JjX2RlY19wcm9sb2d1ZQorCS5ydmEJLkxjYmNfZGVjX2VwaWxvZ3VlCisJLnJ2YQkuTGNiY19kZWNfaW5mbworCisJLnJ2YQkuTGN0cl9lbmNfcHJvbG9ndWUKKwkucnZhCS5MY3RyX2VuY19lcGlsb2d1ZQorCS5ydmEJLkxjdHJfZW5jX2luZm8KKworCS5ydmEJLkx4dHNfZW5jX3Byb2xvZ3VlCisJLnJ2YQkuTHh0c19lbmNfZXBpbG9ndWUKKwkucnZhCS5MeHRzX2VuY19pbmZvCisKKwkucnZhCS5MeHRzX2RlY19wcm9sb2d1ZQorCS5ydmEJLkx4dHNfZGVjX2VwaWxvZ3VlCisJLnJ2YQkuTHh0c19kZWNfaW5mbworCisuc2VjdGlvbgkueGRhdGEKKy5hbGlnbgk4CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGVjYik7CisuTGVjYl9lbmNfaW5mbzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzZV9oYW5kbGVyCisJLnJ2YQkuTGVjYl9lbmNfYm9keSwuTGVjYl9lbmNfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCisuTGVjYl9kZWNfaW5mbzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzZV9oYW5kbGVyCisJLnJ2YQkuTGVjYl9kZWNfYm9keSwuTGVjYl9kZWNfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCitfX18KKyRjb2RlLj08PF9fXzsKKy5MY2JjX2RlY19pbmZvOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MY2JjX2RlY19ib2R5LC5MY2JjX2RlY19lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MY3RyX2VuY19pbmZvOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MY3RyX2VuY19ib2R5LC5MY3RyX2VuY19lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MeHRzX2VuY19pbmZvOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MeHRzX2VuY19ib2R5LC5MeHRzX2VuY19lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MeHRzX2RlY19pbmZvOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MeHRzX2RlY19ib2R5LC5MeHRzX2RlY19lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KK19fXworfQorCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW07CisKK3ByaW50ICRjb2RlOworCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVzL2FzbS92cGFlcy14ODYucGwgYi9jcnlwdG8vYWVzL2FzbS92cGFlcy14ODYucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNmY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hZXMvYXNtL3ZwYWVzLXg4Ni5wbApAQCAtMCwwICsxLDkwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBDb25zdGFudC10aW1lIFNTU0UzIEFFUyBjb3JlIGltcGxlbWVudGF0aW9uLgorIyMgdmVyc2lvbiAwLjEKKyMjCisjIyBCeSBNaWtlIEhhbWJ1cmcgKFN0YW5mb3JkIFVuaXZlcnNpdHkpLCAyMDA5CisjIyBQdWJsaWMgZG9tYWluLgorIyMKKyMjIEZvciBkZXRhaWxzIHNlZSBodHRwOi8vc2hpZnRsZWZ0Lm9yZy9wYXBlcnMvdmVjdG9yX2Flcy8gYW5kCisjIyBodHRwOi8vY3J5cHRvLnN0YW5mb3JkLmVkdS92cGFlcy8uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2VwdGVtYmVyIDIwMTEuCisjCisjIFBvcnQgdnBhZXMteDg2XzY0LnBsIGFzIDMyLWJpdCAiYWxtb3N0IiBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorIyBhZXMtNTg2LnBsLiAiQWxtb3N0IiByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCBBRVNfY2JjX2VuY3J5cHQKKyMgZG9lc24ndCBoYW5kbGUgcGFydGlhbCB2ZWN0b3JzIChkb2Vzbid0IGhhdmUgdG8gaWYgY2FsbGVkIGZyb20KKyMgRVZQIG9ubHkpLiAiRHJvcC1pbiIgaW1wbGllcyB0aGF0IHRoaXMgbW9kdWxlIGRvZXNuJ3Qgc2hhcmUga2V5CisjIHNjaGVkdWxlIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBub3IgZG9lcyBpdCBtYWtlIGFzc3VtcHRpb24KKyMgYWJvdXQgaXRzIGFsaWdubWVudC4uLgorIworIyBQZXJmb3JtYW5jZSBzdW1tYXJ5LiBhZXMtNTg2LnBsIGNvbHVtbiBsaXN0cyBsYXJnZS1ibG9jayBDQkMKKyMgZW5jcnlwdC9kZWNyeXB0L3dpdGgtaHlwZXItdGhyZWFkaW5nLW9mZigqKSByZXN1bHRzIGluIGN5Y2xlcyBwZXIKKyMgYnl0ZSBwcm9jZXNzZWQgd2l0aCAxMjgtYml0IGtleSwgYW5kIHZwYWVzLXg4Ni5wbCBjb2x1bW4gLSBbYWxzbworIyBsYXJnZS1ibG9jayBDQkNdIGVuY3J5cHQvZGVjcnlwdC4KKyMKKyMJCWFlcy01ODYucGwJCXZwYWVzLXg4Ni5wbAorIworIyBDb3JlIDIoKiopCTI5LjEvNDIuMy8xOC4zCQkyMi4wLzI1LjYoKioqKQorIyBOZWhhbGVtCTI3LjkvNDAuNC8xOC4xCQkxMC4zLzEyLjAKKyMgQXRvbQkJMTAyLi8xMTkuLzYwLjEJCTY0LjUvODUuMygqKiopCisjCisjICgqKQkiSHlwZXItdGhyZWFkaW5nIiBpbiB0aGUgY29udGV4dCByZWZlcnMgcmF0aGVyIHRvIGNhY2hlIHNoYXJlZAorIwlhbW9uZyBtdWx0aXBsZSBjb3JlcywgdGhhbiB0byBzcGVjaWZpY2FsbHkgSW50ZWwgSFRULiBBcyB2YXN0CisjCW1ham9yaXR5IG9mIGNvbnRlbXBvcmFyeSBjb3JlcyBzaGFyZSBjYWNoZSwgc2xvd2VyIGNvZGUgcGF0aAorIwlpcyBjb21tb24gcGxhY2UuIEluIG90aGVyIHdvcmRzICJ3aXRoLWh5cGVyLXRocmVhZGluZy1vZmYiCisjCXJlc3VsdHMgYXJlIHByZXNlbnRlZCBtb3N0bHkgZm9yIHJlZmVyZW5jZSBwdXJwb3Nlcy4KKyMKKyMgKCoqKQkiQ29yZSAyIiByZWZlcnMgdG8gaW5pdGlhbCA2NW5tIGRlc2lnbiwgYS5rLmEuIENvbnJvZS4KKyMKKyMgKCoqKikJTGVzcyBpbXByZXNzaXZlIGltcHJvdmVtZW50IG9uIENvcmUgMiBhbmQgQXRvbSBpcyBkdWUgdG8gc2xvdworIwlwc2h1ZmIsCXlldCBpdCdzIHJlc3BlY3RhYmxlICszMiUvNjUlICBpbXByb3ZlbWVudCBvbiBDb3JlIDIKKyMJYW5kICs1OCUvNDAlIG9uIEF0b20gKGFzIGltcGxpZWQsIG92ZXIgImh5cGVyLXRocmVhZGluZy1zYWZlIgorIwljb2RlIHBhdGgpLgorIworIwkJCQkJCTxhcHByb0BvcGVuc3NsLm9yZz4KKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKK3B1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOworcmVxdWlyZSAieDg2YXNtLnBsIjsKKworJmFzbV9pbml0KCRBUkdWWzBdLCJ2cGFlcy14ODYucGwiLCR4ODZvbmx5ID0gJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7CisKKyRQUkVGSVg9InZwYWVzIjsKKworbXkgICgkcm91bmQsICRiYXNlLCAkbWFnaWMsICRrZXksICRjb25zdCwgJGlucCwgJG91dCk9CisgICAgKCJlYXgiLCAgImVieCIsICJlY3giLCAgImVkeCIsImVicCIsICAiZXNpIiwiZWRpIik7CisKKyZzdGF0aWNfbGFiZWwoIl92cGFlc19jb25zdHMiKTsKKyZzdGF0aWNfbGFiZWwoIl92cGFlc19zY2hlZHVsZV9sb3dfcm91bmQiKTsKKworJnNldF9sYWJlbCgiX3ZwYWVzX2NvbnN0cyIsNjQpOworJGtfaW52PS0weDMwOwkJIyBpbnYsIGludmEKKwkmZGF0YV93b3JkKDB4MEQwODAxODAsMHgwRTA1MDYwRiwweDBBMEIwQzAyLDB4MDQwNzAzMDkpOworCSZkYXRhX3dvcmQoMHgwRjBCMDc4MCwweDAxMDQwQTA2LDB4MDIwNTA4MDksMHgwMzBEMEUwQyk7CisKKyRrX3MwRj0tMHgxMDsJCSMgczBGCisJJmRhdGFfd29yZCgweDBGMEYwRjBGLDB4MEYwRjBGMEYsMHgwRjBGMEYwRiwweDBGMEYwRjBGKTsKKworJGtfaXB0PTB4MDA7CQkjIGlucHV0IHRyYW5zZm9ybSAobG8sIGhpKQorCSZkYXRhX3dvcmQoMHg1QTJBNzAwMCwweEMyQjJFODk4LDB4NTIyMjc4MDgsMHhDQUJBRTA5MCk7CisJJmRhdGFfd29yZCgweDMxN0M0RDAwLDB4NEMwMTMwN0QsMHhCMEZEQ0M4MSwweENEODBCMUZDKTsKKworJGtfc2IxPTB4MjA7CQkjIHNiMXUsIHNiMXQKKwkmZGF0YV93b3JkKDB4Q0I1MDNFMDAsMHhCMTlCRTE4RiwweDE0MkFGNTQ0LDB4QTVERjdBNkUpOworCSZkYXRhX3dvcmQoMHhGQUUyMjMwMCwweDM2MThENDE1LDB4MEQyRUQ5RUYsMHgzQkY3Q0NDMSk7Ciska19zYjI9MHg0MDsJCSMgc2IydSwgc2IydAorCSZkYXRhX3dvcmQoMHgwQjcxMjQwMCwweEUyN0E5M0M2LDB4QkM5ODJGQ0QsMHg1RUI3RTk1NSk7CisJJmRhdGFfd29yZCgweDBBRTEyOTAwLDB4NjlFQjg4NDAsMHhBQjgyMjM0QSwweEMyQTE2M0M4KTsKKyRrX3Nibz0weDYwOwkJIyBzYm91LCBzYm90CisJJmRhdGFfd29yZCgweDZGQkRDNzAwLDB4RDBEMjZEMTcsMHhDNTAyQTg3OCwweDE1QUFCRjdBKTsKKwkmZGF0YV93b3JkKDB4NUZCQjZBMDAsMHhDRkU0NzRBNSwweDQxMkIzNUZBLDB4OEUxRTkwRDEpOworCiska19tY19mb3J3YXJkPTB4ODA7CSMgbWNfZm9yd2FyZAorCSZkYXRhX3dvcmQoMHgwMDAzMDIwMSwweDA0MDcwNjA1LDB4MDgwQjBBMDksMHgwQzBGMEUwRCk7CisJJmRhdGFfd29yZCgweDA0MDcwNjA1LDB4MDgwQjBBMDksMHgwQzBGMEUwRCwweDAwMDMwMjAxKTsKKwkmZGF0YV93b3JkKDB4MDgwQjBBMDksMHgwQzBGMEUwRCwweDAwMDMwMjAxLDB4MDQwNzA2MDUpOworCSZkYXRhX3dvcmQoMHgwQzBGMEUwRCwweDAwMDMwMjAxLDB4MDQwNzA2MDUsMHgwODBCMEEwOSk7CisKKyRrX21jX2JhY2t3YXJkPTB4YzA7CSMgbWNfYmFja3dhcmQKKwkmZGF0YV93b3JkKDB4MDIwMTAwMDMsMHgwNjA1MDQwNywweDBBMDkwODBCLDB4MEUwRDBDMEYpOworCSZkYXRhX3dvcmQoMHgwRTBEMEMwRiwweDAyMDEwMDAzLDB4MDYwNTA0MDcsMHgwQTA5MDgwQik7CisJJmRhdGFfd29yZCgweDBBMDkwODBCLDB4MEUwRDBDMEYsMHgwMjAxMDAwMywweDA2MDUwNDA3KTsKKwkmZGF0YV93b3JkKDB4MDYwNTA0MDcsMHgwQTA5MDgwQiwweDBFMEQwQzBGLDB4MDIwMTAwMDMpOworCiska19zcj0weDEwMDsJCSMgc3IKKwkmZGF0YV93b3JkKDB4MDMwMjAxMDAsMHgwNzA2MDUwNCwweDBCMEEwOTA4LDB4MEYwRTBEMEMpOworCSZkYXRhX3dvcmQoMHgwRjBBMDUwMCwweDAzMEUwOTA0LDB4MDcwMjBEMDgsMHgwQjA2MDEwQyk7CisJJmRhdGFfd29yZCgweDBCMDIwOTAwLDB4MEYwNjBEMDQsMHgwMzBBMDEwOCwweDA3MEUwNTBDKTsKKwkmZGF0YV93b3JkKDB4MDcwQTBEMDAsMHgwQjBFMDEwNCwweDBGMDIwNTA4LDB4MDMwNjA5MEMpOworCiska19yY29uPTB4MTQwOwkJIyByY29uCisJJmRhdGFfd29yZCgweEFGOURFRUI2LDB4MUY4MzkxQjksMHg0RDdDN0Q4MSwweDcwMkE5ODA4KTsKKworJGtfczYzPTB4MTUwOwkJIyBzNjM6IGFsbCBlcXVhbCB0byAweDYzIHRyYW5zZm9ybWVkCisJJmRhdGFfd29yZCgweDVCNUI1QjVCLDB4NUI1QjVCNUIsMHg1QjVCNUI1QiwweDVCNUI1QjVCKTsKKworJGtfb3B0PTB4MTYwOwkJIyBvdXRwdXQgdHJhbnNmb3JtCisJJmRhdGFfd29yZCgweEQ2QjY2MDAwLDB4RkY5RjQ5MjksMHhERUJFNjgwOCwweEY3OTc0MTIxKTsKKwkmZGF0YV93b3JkKDB4NTBCQ0VDMDAsMHgwMUVEQkQ1MSwweEIwNUMwQ0UwLDB4RTEwRDVEQjEpOworCiska19kZXNrZXc9MHgxODA7CSMgZGVza2V3IHRhYmxlczogaW52ZXJ0cyB0aGUgc2JveCdzICJza2V3IgorCSZkYXRhX3dvcmQoMHg0N0E0RTMwMCwweDA3RTRBMzQwLDB4NURCRUY5MUEsMHgxREZFQjk1QSk7CisJJmRhdGFfd29yZCgweDgzRUE2OTAwLDB4NUYzNkI1REMsMHhGNDlEMUU3NywweDI4NDFDMkFCKTsKKyMjCisjIyAgRGVjcnlwdGlvbiBzdHVmZgorIyMgIEtleSBzY2hlZHVsZSBjb25zdGFudHMKKyMjCiska19ka3NkPTB4MWEwOwkJIyBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZTogaW52c2tldyB4KkQKKwkmZGF0YV93b3JkKDB4QTNFNDQ3MDAsMHhGRUI5MUE1RCwweDVBMURCRUY5LDB4MDc0MEUzQTQpOworCSZkYXRhX3dvcmQoMHhCNTM2ODMwMCwweDQxQzI3N0Y0LDB4QUIyODlEMUUsMHg1RkRDNjlFQSk7Ciska19ka3NiPTB4MWMwOwkJIyBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZTogaW52c2tldyB4KkIKKwkmZGF0YV93b3JkKDB4ODU1MEQ1MDAsMHg5QTRGQ0ExRiwweDFDQzk0Qzk5LDB4MDNENjUzODYpOworCSZkYXRhX3dvcmQoMHhCNkZDNEEwMCwweDExNUJFREE3LDB4N0UzNDgyQzgsMHhEOTkzMjU2Rik7Ciska19ka3NlPTB4MWUwOwkJIyBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZTogaW52c2tldyB4KkUgKyAweDYzCisJJmRhdGFfd29yZCgweDFGQzlENjAwLDB4RDUwMzFDQ0EsMHg5OTRGNTA4NiwweDUzODU5QTRDKTsKKwkmZGF0YV93b3JkKDB4NEZEQzdCRTgsMHhBMjMxOTYwNSwweDIwQjMxNDg3LDB4Q0Q1RUY5NkEpOworJGtfZGtzOT0weDIwMDsJCSMgZGVjcnlwdGlvbiBrZXkgc2NoZWR1bGU6IGludnNrZXcgeCo5CisJJmRhdGFfd29yZCgweDdFRDlBNzAwLDB4QjYxMTZGQzgsMHg4MjI1NUJGQywweDRBRUQ5MzM0KTsKKwkmZGF0YV93b3JkKDB4MjcxNDMzMDAsMHg0NTc2NTE2MiwweEU5REFGRENFLDB4OEJCODlGQUMpOworCisjIworIyMgIERlY3J5cHRpb24gc3R1ZmYKKyMjICBSb3VuZCBmdW5jdGlvbiBjb25zdGFudHMKKyMjCiska19kaXB0PTB4MjIwOwkJIyBkZWNyeXB0aW9uIGlucHV0IHRyYW5zZm9ybQorCSZkYXRhX3dvcmQoMHgwQjU0NUYwMCwweDBGNTA1QjA0LDB4MTE0RTQ1MUEsMHgxNTRBNDExRSk7CisJJmRhdGFfd29yZCgweDYwMDU2NTAwLDB4ODZFMzgzRTYsMHhGNDkxRjE5NCwweDEyNzcxNzcyKTsKKworJGtfZHNiOT0weDI0MDsJCSMgZGVjcnlwdGlvbiBzYm94IG91dHB1dCAqOSp1LCAqOSp0CisJJmRhdGFfd29yZCgweDlBODZENjAwLDB4ODUxQzAzNTMsMHg0Rjk5NENDOSwweENBRDUxRjUwKTsKKwkmZGF0YV93b3JkKDB4RUNENzQ5MDAsMHhDMDNCMTc4OSwweEIyRkJBNTY1LDB4NzI1RTJDOUUpOworJGtfZHNiZD0weDI2MDsJCSMgZGVjcnlwdGlvbiBzYm94IG91dHB1dCAqRCp1LCAqRCp0CisJJmRhdGFfd29yZCgweEU2QjFBMjAwLDB4N0Q1N0NDREYsMHg4ODJBNDQzOSwweEY1NkU5QjEzKTsKKwkmZGF0YV93b3JkKDB4MjRDNkNCMDAsMHgzQ0UyRkFGNywweDE1REVFRkQzLDB4MjkzMTE4MEQpOworJGtfZHNiYj0weDI4MDsJCSMgZGVjcnlwdGlvbiBzYm94IG91dHB1dCAqQip1LCAqQip0CisJJmRhdGFfd29yZCgweDk2QjQ0MjAwLDB4RDAyMjY0OTIsMHhCMEYyRDQwNCwweDYwMjY0NkY2KTsKKwkmZGF0YV93b3JkKDB4Q0Q1OTY3MDAsMHhDMTk0OThBNiwweDMyNTVBQTZCLDB4RjNGRjBDM0UpOworJGtfZHNiZT0weDJhMDsJCSMgZGVjcnlwdGlvbiBzYm94IG91dHB1dCAqRSp1LCAqRSp0CisJJmRhdGFfd29yZCgweDI2RDREMDAwLDB4NDZGMjkyOTYsMHg2NEI0RjZCMCwweDIyNDI2MDA0KTsKKwkmZGF0YV93b3JkKDB4RkZBQUMxMDAsMHgwQzU1QTZDRCwweDk4NTkzRTMyLDB4OTQ2N0YzNkIpOworJGtfZHNibz0weDJjMDsJCSMgZGVjcnlwdGlvbiBzYm94IGZpbmFsIG91dHB1dAorCSZkYXRhX3dvcmQoMHg3RUY5NDAwMCwweDEzODdFQTUzLDB4RDQ5NDNFMkQsMHhDN0FBNkRCOSk7CisJJmRhdGFfd29yZCgweDkzNDQxRDAwLDB4MTJENzU2MEYsMHhEOEM1OEU5QywweENBNEI4MTU5KTsKKyZhc2NpegkoIlZlY3RvciBQZXJtdXRhdGlvbiBBRVMgZm9yIHg4Ni9TU1NFMywgTWlrZSBIYW1idXJnIChTdGFuZm9yZCBVbml2ZXJzaXR5KSIpOworJmFsaWduCSg2NCk7CisKKyZmdW5jdGlvbl9iZWdpbl9CKCJfdnBhZXNfcHJlaGVhdCIpOworCSZhZGQJKCRjb25zdCwmRFdQKDAsImVzcCIpKTsKKwkmbW92ZHFhCSgieG1tNyIsJlFXUCgka19pbnYsJGNvbnN0KSk7CisJJm1vdmRxYQkoInhtbTYiLCZRV1AoJGtfczBGLCRjb25zdCkpOworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl92cGFlc19wcmVoZWF0Iik7CisKKyMjCisjIyAgX2Flc19lbmNyeXB0X2NvcmUKKyMjCisjIyAgQUVTLWVuY3J5cHQgJXhtbTAuCisjIworIyMgIElucHV0czoKKyMjICAgICAleG1tMCA9IGlucHV0CisjIyAgICAgJXhtbTYtJXhtbTcgYXMgaW4gX3ZwYWVzX3ByZWhlYXQKKyMjICAgICglZWR4KSA9IHNjaGVkdWxlZCBrZXlzCisjIworIyMgIE91dHB1dCBpbiAleG1tMAorIyMgIENsb2JiZXJzICAleG1tMS0leG1tNSwgJWVheCwgJWVieCwgJWVjeCwgJWVkeAorIyMKKyMjCismZnVuY3Rpb25fYmVnaW5fQigiX3ZwYWVzX2VuY3J5cHRfY29yZSIpOworCSZtb3YJKCRtYWdpYywxNik7CisJJm1vdgkoJHJvdW5kLCZEV1AoMjQwLCRrZXkpKTsKKwkmbW92ZHFhCSgieG1tMSIsInhtbTYiKQorCSZtb3ZkcWEJKCJ4bW0yIiwmUVdQKCRrX2lwdCwkY29uc3QpKTsKKwkmcGFuZG4JKCJ4bW0xIiwieG1tMCIpOworCSZtb3ZkcXUJKCJ4bW01IiwmUVdQKDAsJGtleSkpOworCSZwc3JsZAkoInhtbTEiLDQpOworCSZwYW5kCSgieG1tMCIsInhtbTYiKTsKKwkmcHNodWZiCSgieG1tMiIsInhtbTAiKTsKKwkmbW92ZHFhCSgieG1tMCIsJlFXUCgka19pcHQrMTYsJGNvbnN0KSk7CisJJnBzaHVmYgkoInhtbTAiLCJ4bW0xIik7CisJJnB4b3IJKCJ4bW0yIiwieG1tNSIpOworCSZweG9yCSgieG1tMCIsInhtbTIiKTsKKwkmYWRkCSgka2V5LDE2KTsKKwkmbGVhCSgkYmFzZSwmRFdQKCRrX21jX2JhY2t3YXJkLCRjb25zdCkpOworCSZqbXAJKCZsYWJlbCgiZW5jX2VudHJ5IikpOworCisKKyZzZXRfbGFiZWwoImVuY19sb29wIiwxNik7CisJIyBtaWRkbGUgb2YgbWlkZGxlIHJvdW5kCisJJm1vdmRxYQkoInhtbTQiLCZRV1AoJGtfc2IxLCRjb25zdCkpOwkjIDQgOiBzYjF1CisJJnBzaHVmYgkoInhtbTQiLCJ4bW0yIik7CQkjIDQgPSBzYjF1CisJJnB4b3IJKCJ4bW00IiwieG1tNSIpOwkJIyA0ID0gc2IxdSArIGsKKwkmbW92ZHFhCSgieG1tMCIsJlFXUCgka19zYjErMTYsJGNvbnN0KSk7IyAwIDogc2IxdAorCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMyIpOwkJIyAwID0gc2IxdAorCSZweG9yCSgieG1tMCIsInhtbTQiKTsJCSMgMCA9IEEKKwkmbW92ZHFhCSgieG1tNSIsJlFXUCgka19zYjIsJGNvbnN0KSk7CSMgNCA6IHNiMnUKKwkmcHNodWZiCSgieG1tNSIsInhtbTIiKTsJCSMgNCA9IHNiMnUKKwkmbW92ZHFhCSgieG1tMSIsJlFXUCgtMHg0MCwkYmFzZSwkbWFnaWMpKTsjIC5Ma19tY19mb3J3YXJkW10KKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgka19zYjIrMTYsJGNvbnN0KSk7IyAyIDogc2IydAorCSZwc2h1ZmIJKCJ4bW0yIiwieG1tMyIpOwkJIyAyID0gc2IydAorCSZweG9yCSgieG1tMiIsInhtbTUiKTsJCSMgMiA9IDJBCisJJm1vdmRxYQkoInhtbTQiLCZRV1AoMCwkYmFzZSwkbWFnaWMpKTsJIyAuTGtfbWNfYmFja3dhcmRbXQorCSZtb3ZkcWEJKCJ4bW0zIiwieG1tMCIpOwkJIyAzID0gQQorCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMSIpOwkJIyAwID0gQgorCSZhZGQJKCRrZXksMTYpOwkJCSMgbmV4dCBrZXkKKwkmcHhvcgkoInhtbTAiLCJ4bW0yIik7CQkjIDAgPSAyQStCCisJJnBzaHVmYgkoInhtbTMiLCJ4bW00Iik7CQkjIDMgPSBECisJJmFkZAkoJG1hZ2ljLDE2KTsJCQkjIG5leHQgbWMKKwkmcHhvcgkoInhtbTMiLCJ4bW0wIik7CQkjIDMgPSAyQStCK0QKKwkmcHNodWZiCSgieG1tMCIsInhtbTEiKTsJCSMgMCA9IDJCK0MKKwkmYW5kCSgkbWFnaWMsMHgzMCk7CQkJIyAuLi4gbW9kIDQKKwkmcHhvcgkoInhtbTAiLCJ4bW0zIik7CQkjIDAgPSAyQSszQitDK0QKKwkmc3ViCSgkcm91bmQsMSk7CQkJIyBuci0tCisKKyZzZXRfbGFiZWwoImVuY19lbnRyeSIpOworCSMgdG9wIG9mIHJvdW5kCisJJm1vdmRxYQkoInhtbTEiLCJ4bW02Iik7CQkjIDEgOiBpCisJJnBhbmRuCSgieG1tMSIsInhtbTAiKTsJCSMgMSA9IGk8PDQKKwkmcHNybGQJKCJ4bW0xIiw0KTsJCQkjIDEgPSBpCisJJnBhbmQJKCJ4bW0wIiwieG1tNiIpOwkJIyAwID0gaworCSZtb3ZkcWEJKCJ4bW01IiwmUVdQKCRrX2ludisxNiwkY29uc3QpKTsjIDIgOiBhL2sKKwkmcHNodWZiCSgieG1tNSIsInhtbTAiKTsJCSMgMiA9IGEvaworCSZweG9yCSgieG1tMCIsInhtbTEiKTsJCSMgMCA9IGoKKwkmbW92ZHFhCSgieG1tMyIsInhtbTciKTsJCSMgMyA6IDEvaQorCSZwc2h1ZmIJKCJ4bW0zIiwieG1tMSIpOwkJIyAzID0gMS9pCisJJnB4b3IJKCJ4bW0zIiwieG1tNSIpOwkJIyAzID0gaWFrID0gMS9pICsgYS9rCisJJm1vdmRxYQkoInhtbTQiLCJ4bW03Iik7CQkjIDQgOiAxL2oKKwkmcHNodWZiCSgieG1tNCIsInhtbTAiKTsJCSMgNCA9IDEvagorCSZweG9yCSgieG1tNCIsInhtbTUiKTsJCSMgNCA9IGphayA9IDEvaiArIGEvaworCSZtb3ZkcWEJKCJ4bW0yIiwieG1tNyIpOwkJIyAyIDogMS9pYWsKKwkmcHNodWZiCSgieG1tMiIsInhtbTMiKTsJCSMgMiA9IDEvaWFrCisJJnB4b3IJKCJ4bW0yIiwieG1tMCIpOwkJIyAyID0gaW8KKwkmbW92ZHFhCSgieG1tMyIsInhtbTciKTsJCSMgMyA6IDEvamFrCisJJm1vdmRxdQkoInhtbTUiLCZRV1AoMCwka2V5KSk7CisJJnBzaHVmYgkoInhtbTMiLCJ4bW00Iik7CQkjIDMgPSAxL2phaworCSZweG9yCSgieG1tMyIsInhtbTEiKTsJCSMgMyA9IGpvCisJJmpuegkoJmxhYmVsKCJlbmNfbG9vcCIpKTsKKworCSMgbWlkZGxlIG9mIGxhc3Qgcm91bmQKKwkmbW92ZHFhCSgieG1tNCIsJlFXUCgka19zYm8sJGNvbnN0KSk7CSMgMyA6IHNib3UgICAgICAuTGtfc2JvCisJJm1vdmRxYQkoInhtbTAiLCZRV1AoJGtfc2JvKzE2LCRjb25zdCkpOyMgMyA6IHNib3QgICAgICAuTGtfc2JvKzE2CisJJnBzaHVmYgkoInhtbTQiLCJ4bW0yIik7CQkjIDQgPSBzYm91CisJJnB4b3IJKCJ4bW00IiwieG1tNSIpOwkJIyA0ID0gc2IxdSArIGsKKwkmcHNodWZiCSgieG1tMCIsInhtbTMiKTsJCSMgMCA9IHNiMXQKKwkmbW92ZHFhCSgieG1tMSIsJlFXUCgweDQwLCRiYXNlLCRtYWdpYykpOyMgLkxrX3NyW10KKwkmcHhvcgkoInhtbTAiLCJ4bW00Iik7CQkjIDAgPSBBCisJJnBzaHVmYgkoInhtbTAiLCJ4bW0xIik7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiX3ZwYWVzX2VuY3J5cHRfY29yZSIpOworCisjIworIyMgIERlY3J5cHRpb24gY29yZQorIyMKKyMjICBTYW1lIEFQSSBhcyBlbmNyeXB0aW9uIGNvcmUuCisjIworJmZ1bmN0aW9uX2JlZ2luX0IoIl92cGFlc19kZWNyeXB0X2NvcmUiKTsKKwkmbW92CSgkcm91bmQsJkRXUCgyNDAsJGtleSkpOworCSZsZWEJKCRiYXNlLCZEV1AoJGtfZHNiZCwkY29uc3QpKTsKKwkmbW92ZHFhCSgieG1tMSIsInhtbTYiKTsKKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgka19kaXB0LSRrX2RzYmQsJGJhc2UpKTsKKwkmcGFuZG4JKCJ4bW0xIiwieG1tMCIpOworCSZtb3YJKCRtYWdpYywkcm91bmQpOworCSZwc3JsZAkoInhtbTEiLDQpCisJJm1vdmRxdQkoInhtbTUiLCZRV1AoMCwka2V5KSk7CisJJnNobAkoJG1hZ2ljLDQpOworCSZwYW5kCSgieG1tMCIsInhtbTYiKTsKKwkmcHNodWZiCSgieG1tMiIsInhtbTAiKTsKKwkmbW92ZHFhCSgieG1tMCIsJlFXUCgka19kaXB0LSRrX2RzYmQrMTYsJGJhc2UpKTsKKwkmeG9yCSgkbWFnaWMsMHgzMCk7CisJJnBzaHVmYgkoInhtbTAiLCJ4bW0xIik7CisJJmFuZAkoJG1hZ2ljLDB4MzApOworCSZweG9yCSgieG1tMiIsInhtbTUiKTsKKwkmbW92ZHFhCSgieG1tNSIsJlFXUCgka19tY19mb3J3YXJkKzQ4LCRjb25zdCkpOworCSZweG9yCSgieG1tMCIsInhtbTIiKTsKKwkmYWRkCSgka2V5LDE2KTsKKwkmbGVhCSgkbWFnaWMsJkRXUCgka19zci0ka19kc2JkLCRiYXNlLCRtYWdpYykpOworCSZqbXAJKCZsYWJlbCgiZGVjX2VudHJ5IikpOworCismc2V0X2xhYmVsKCJkZWNfbG9vcCIsMTYpOworIyMKKyMjICBJbnZlcnNlIG1peCBjb2x1bW5zCisjIworCSZtb3ZkcWEJKCJ4bW00IiwmUVdQKC0weDIwLCRiYXNlKSk7CSMgNCA6IHNiOXUKKwkmcHNodWZiCSgieG1tNCIsInhtbTIiKTsJCSMgNCA9IHNiOXUKKwkmcHhvcgkoInhtbTQiLCJ4bW0wIik7CisJJm1vdmRxYQkoInhtbTAiLCZRV1AoLTB4MTAsJGJhc2UpKTsJIyAwIDogc2I5dAorCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMyIpOwkJIyAwID0gc2I5dAorCSZweG9yCSgieG1tMCIsInhtbTQiKTsJCSMgMCA9IGNoCisJJmFkZAkoJGtleSwxNik7CQkJIyBuZXh0IHJvdW5kIGtleQorCisJJnBzaHVmYgkoInhtbTAiLCJ4bW01Iik7CQkjIE1DIGNoCisJJm1vdmRxYQkoInhtbTQiLCZRV1AoMCwkYmFzZSkpOwkJIyA0IDogc2JkdQorCSZwc2h1ZmIJKCJ4bW00IiwieG1tMiIpOwkJIyA0ID0gc2JkdQorCSZweG9yCSgieG1tNCIsInhtbTAiKTsJCSMgNCA9IGNoCisJJm1vdmRxYQkoInhtbTAiLCZRV1AoMHgxMCwkYmFzZSkpOwkjIDAgOiBzYmR0CisJJnBzaHVmYgkoInhtbTAiLCJ4bW0zIik7CQkjIDAgPSBzYmR0CisJJnB4b3IJKCJ4bW0wIiwieG1tNCIpOwkJIyAwID0gY2gKKwkmc3ViCSgkcm91bmQsMSk7CQkJIyBuci0tCisKKwkmcHNodWZiCSgieG1tMCIsInhtbTUiKTsJCSMgTUMgY2gKKwkmbW92ZHFhCSgieG1tNCIsJlFXUCgweDIwLCRiYXNlKSk7CSMgNCA6IHNiYnUKKwkmcHNodWZiCSgieG1tNCIsInhtbTIiKTsJCSMgNCA9IHNiYnUKKwkmcHhvcgkoInhtbTQiLCJ4bW0wIik7CQkjIDQgPSBjaAorCSZtb3ZkcWEJKCJ4bW0wIiwmUVdQKDB4MzAsJGJhc2UpKTsJIyAwIDogc2JidAorCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMyIpOwkJIyAwID0gc2JidAorCSZweG9yCSgieG1tMCIsInhtbTQiKTsJCSMgMCA9IGNoCisKKwkmcHNodWZiCSgieG1tMCIsInhtbTUiKTsJCSMgTUMgY2gKKwkmbW92ZHFhCSgieG1tNCIsJlFXUCgweDQwLCRiYXNlKSk7CSMgNCA6IHNiZXUKKwkmcHNodWZiCSgieG1tNCIsInhtbTIiKTsJCSMgNCA9IHNiZXUKKwkmcHhvcgkoInhtbTQiLCJ4bW0wIik7CQkjIDQgPSBjaAorCSZtb3ZkcWEJKCJ4bW0wIiwmUVdQKDB4NTAsJGJhc2UpKTsJIyAwIDogc2JldAorCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMyIpOwkJIyAwID0gc2JldAorCSZweG9yCSgieG1tMCIsInhtbTQiKTsJCSMgMCA9IGNoCisKKwkmcGFsaWducigieG1tNSIsInhtbTUiLDEyKTsKKworJnNldF9sYWJlbCgiZGVjX2VudHJ5Iik7CisJIyB0b3Agb2Ygcm91bmQKKwkmbW92ZHFhCSgieG1tMSIsInhtbTYiKTsJCSMgMSA6IGkKKwkmcGFuZG4JKCJ4bW0xIiwieG1tMCIpOwkJIyAxID0gaTw8NAorCSZwc3JsZAkoInhtbTEiLDQpOwkJCSMgMSA9IGkKKwkmcGFuZAkoInhtbTAiLCJ4bW02Iik7CQkjIDAgPSBrCisJJm1vdmRxYQkoInhtbTIiLCZRV1AoJGtfaW52KzE2LCRjb25zdCkpOyMgMiA6IGEvaworCSZwc2h1ZmIJKCJ4bW0yIiwieG1tMCIpOwkJIyAyID0gYS9rCisJJnB4b3IJKCJ4bW0wIiwieG1tMSIpOwkJIyAwID0gagorCSZtb3ZkcWEJKCJ4bW0zIiwieG1tNyIpOwkJIyAzIDogMS9pCisJJnBzaHVmYgkoInhtbTMiLCJ4bW0xIik7CQkjIDMgPSAxL2kKKwkmcHhvcgkoInhtbTMiLCJ4bW0yIik7CQkjIDMgPSBpYWsgPSAxL2kgKyBhL2sKKwkmbW92ZHFhCSgieG1tNCIsInhtbTciKTsJCSMgNCA6IDEvagorCSZwc2h1ZmIJKCJ4bW00IiwieG1tMCIpOwkJIyA0ID0gMS9qCisJJnB4b3IJKCJ4bW00IiwieG1tMiIpOwkJIyA0ID0gamFrID0gMS9qICsgYS9rCisJJm1vdmRxYQkoInhtbTIiLCJ4bW03Iik7CQkjIDIgOiAxL2lhaworCSZwc2h1ZmIJKCJ4bW0yIiwieG1tMyIpOwkJIyAyID0gMS9pYWsKKwkmcHhvcgkoInhtbTIiLCJ4bW0wIik7CQkjIDIgPSBpbworCSZtb3ZkcWEJKCJ4bW0zIiwieG1tNyIpOwkJIyAzIDogMS9qYWsKKwkmcHNodWZiCSgieG1tMyIsInhtbTQiKTsJCSMgMyA9IDEvamFrCisJJnB4b3IJKCJ4bW0zIiwieG1tMSIpOwkJIyAzID0gam8KKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRrZXkpKTsKKwkmam56CSgmbGFiZWwoImRlY19sb29wIikpOworCisJIyBtaWRkbGUgb2YgbGFzdCByb3VuZAorCSZtb3ZkcWEJKCJ4bW00IiwmUVdQKDB4NjAsJGJhc2UpKTsJIyAzIDogc2JvdQorCSZwc2h1ZmIJKCJ4bW00IiwieG1tMiIpOwkJIyA0ID0gc2JvdQorCSZweG9yCSgieG1tNCIsInhtbTAiKTsJCSMgNCA9IHNiMXUgKyBrCisJJm1vdmRxYQkoInhtbTAiLCZRV1AoMHg3MCwkYmFzZSkpOwkjIDAgOiBzYm90CisJJm1vdmRxYQkoInhtbTIiLCZRV1AoMCwkbWFnaWMpKTsKKwkmcHNodWZiCSgieG1tMCIsInhtbTMiKTsJCSMgMCA9IHNiMXQKKwkmcHhvcgkoInhtbTAiLCJ4bW00Iik7CQkjIDAgPSBBCisJJnBzaHVmYgkoInhtbTAiLCJ4bW0yIik7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiX3ZwYWVzX2RlY3J5cHRfY29yZSIpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKyMjICAgICAgICAgICAgICAgICAgQUVTIGtleSBzY2hlZHVsZSAgICAgICAgICAgICAgICAgICMjCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyZmdW5jdGlvbl9iZWdpbl9CKCJfdnBhZXNfc2NoZWR1bGVfY29yZSIpOworCSZhZGQJKCRjb25zdCwmRFdQKDAsImVzcCIpKTsKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRpbnApKTsJCSMgbG9hZCBrZXkgKHVuYWxpZ25lZCkKKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgka19yY29uLCRjb25zdCkpOwkjIGxvYWQgcmNvbgorCisJIyBpbnB1dCB0cmFuc2Zvcm0KKwkmbW92ZHFhCSgieG1tMyIsInhtbTAiKTsKKwkmbGVhCSgkYmFzZSwmRFdQKCRrX2lwdCwkY29uc3QpKTsKKwkmbW92ZHFhCSgmUVdQKDQsImVzcCIpLCJ4bW0yIik7CQkjIHhtbTgKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV90cmFuc2Zvcm0iKTsKKwkmbW92ZHFhCSgieG1tNyIsInhtbTAiKTsKKworCSZ0ZXN0CSgkb3V0LCRvdXQpOworCSZqbnoJKCZsYWJlbCgic2NoZWR1bGVfYW1fZGVjcnlwdGluZyIpKTsKKworCSMgZW5jcnlwdGluZywgb3V0cHV0IHplcm90aCByb3VuZCBrZXkgYWZ0ZXIgdHJhbnNmb3JtCisJJm1vdmRxdQkoJlFXUCgwLCRrZXkpLCJ4bW0wIik7CisJJmptcAkoJmxhYmVsKCJzY2hlZHVsZV9nbyIpKTsKKworJnNldF9sYWJlbCgic2NoZWR1bGVfYW1fZGVjcnlwdGluZyIpOworCSMgZGVjcnlwdGluZywgb3V0cHV0IHplcm90aCByb3VuZCBrZXkgYWZ0ZXIgc2hpZnRyb3dzCisJJm1vdmRxYQkoInhtbTEiLCZRV1AoJGtfc3IsJGNvbnN0LCRtYWdpYykpOworCSZwc2h1ZmIJKCJ4bW0zIiwieG1tMSIpOworCSZtb3ZkcXUJKCZRV1AoMCwka2V5KSwieG1tMyIpOworCSZ4b3IJKCRtYWdpYywweDMwKTsKKworJnNldF9sYWJlbCgic2NoZWR1bGVfZ28iKTsKKwkmY21wCSgkcm91bmQsMTkyKTsKKwkmamEJKCZsYWJlbCgic2NoZWR1bGVfMjU2IikpOworCSZqZQkoJmxhYmVsKCJzY2hlZHVsZV8xOTIiKSk7CisJIyAxMjg6IGZhbGwgdGhvdWdoCisKKyMjCisjIyAgLnNjaGVkdWxlXzEyOAorIyMKKyMjICAxMjgtYml0IHNwZWNpZmljIHBhcnQgb2Yga2V5IHNjaGVkdWxlLgorIyMKKyMjICBUaGlzIHNjaGVkdWxlIGlzIHJlYWxseSBzaW1wbGUsIGJlY2F1c2UgYWxsIGl0cyBwYXJ0cworIyMgIGFyZSBhY2NvbXBsaXNoZWQgYnkgdGhlIHN1YnJvdXRpbmVzLgorIyMKKyZzZXRfbGFiZWwoInNjaGVkdWxlXzEyOCIpOworCSZtb3YJKCRyb3VuZCwxMCk7CisKKyZzZXRfbGFiZWwoImxvb3Bfc2NoZWR1bGVfMTI4Iik7CisJJmNhbGwJKCJfdnBhZXNfc2NoZWR1bGVfcm91bmQiKTsKKwkmZGVjCSgkcm91bmQpOworCSZqegkoJmxhYmVsKCJzY2hlZHVsZV9tYW5nbGVfbGFzdCIpKTsKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV9tYW5nbGUiKTsJIyB3cml0ZSBvdXRwdXQKKwkmam1wCSgmbGFiZWwoImxvb3Bfc2NoZWR1bGVfMTI4IikpOworCisjIworIyMgIC5hZXNfc2NoZWR1bGVfMTkyCisjIworIyMgIDE5Mi1iaXQgc3BlY2lmaWMgcGFydCBvZiBrZXkgc2NoZWR1bGUuCisjIworIyMgIFRoZSBtYWluIGJvZHkgb2YgdGhpcyBzY2hlZHVsZSBpcyB0aGUgc2FtZSBhcyB0aGUgMTI4LWJpdAorIyMgIHNjaGVkdWxlLCBidXQgd2l0aCBtb3JlIHNtZWFyaW5nLiAgVGhlIGxvbmcsIGhpZ2ggc2lkZSBpcworIyMgIHN0b3JlZCBpbiAleG1tNyBhcyBiZWZvcmUsIGFuZCB0aGUgc2hvcnQsIGxvdyBzaWRlIGlzIGluCisjIyAgdGhlIGhpZ2ggYml0cyBvZiAleG1tNi4KKyMjCisjIyAgVGhpcyBzY2hlZHVsZSBpcyBzb21ld2hhdCBuYXN0aWVyLCBob3dldmVyLCBiZWNhdXNlIGVhY2gKKyMjICByb3VuZCBwcm9kdWNlcyAxOTIgYml0cyBvZiBrZXkgbWF0ZXJpYWwsIG9yIDEuNSByb3VuZCBrZXlzLgorIyMgIFRoZXJlZm9yZSwgb24gZWFjaCBjeWNsZSB3ZSBkbyAyIHJvdW5kcyBhbmQgcHJvZHVjZSAzIHJvdW5kCisjIyAga2V5cy4KKyMjCismc2V0X2xhYmVsKCJzY2hlZHVsZV8xOTIiLDE2KTsKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCg4LCRpbnApKTsJCSMgbG9hZCBrZXkgcGFydCAyICh2ZXJ5IHVuYWxpZ25lZCkKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV90cmFuc2Zvcm0iKTsJIyBpbnB1dCB0cmFuc2Zvcm0JCisJJm1vdmRxYQkoInhtbTYiLCJ4bW0wIik7CQkjIHNhdmUgc2hvcnQgcGFydAorCSZweG9yCSgieG1tNCIsInhtbTQiKTsJCSMgY2xlYXIgNAorCSZtb3ZobHBzKCJ4bW02IiwieG1tNCIpOwkJIyBjbG9iYmVyIGxvdyBzaWRlIHdpdGggemVyb3MKKwkmbW92CSgkcm91bmQsNCk7CisKKyZzZXRfbGFiZWwoImxvb3Bfc2NoZWR1bGVfMTkyIik7CisJJmNhbGwJKCJfdnBhZXNfc2NoZWR1bGVfcm91bmQiKTsKKwkmcGFsaWducigieG1tMCIsInhtbTYiLDgpOworCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlX21hbmdsZSIpOwkjIHNhdmUga2V5IG4KKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV8xOTJfc21lYXIiKTsKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV9tYW5nbGUiKTsJIyBzYXZlIGtleSBuKzEKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV9yb3VuZCIpOworCSZkZWMJKCRyb3VuZCk7CisJJmp6CSgmbGFiZWwoInNjaGVkdWxlX21hbmdsZV9sYXN0IikpOworCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlX21hbmdsZSIpOwkjIHNhdmUga2V5IG4rMgorCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlXzE5Ml9zbWVhciIpOworCSZqbXAJKCZsYWJlbCgibG9vcF9zY2hlZHVsZV8xOTIiKSk7CisKKyMjCisjIyAgLmFlc19zY2hlZHVsZV8yNTYKKyMjCisjIyAgMjU2LWJpdCBzcGVjaWZpYyBwYXJ0IG9mIGtleSBzY2hlZHVsZS4KKyMjCisjIyAgVGhlIHN0cnVjdHVyZSBoZXJlIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgMTI4LWJpdAorIyMgIHNjaGVkdWxlLCBidXQgd2l0aCBhbiBhZGRpdGlvbmFsICJsb3cgc2lkZSIgaW4KKyMjICAleG1tNi4gIFRoZSBsb3cgc2lkZSdzIHJvdW5kcyBhcmUgdGhlIHNhbWUgYXMgdGhlCisjIyAgaGlnaCBzaWRlJ3MsIGV4Y2VwdCBubyByY29uIGFuZCBubyByb3RhdGlvbi4KKyMjCismc2V0X2xhYmVsKCJzY2hlZHVsZV8yNTYiLDE2KTsKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgxNiwkaW5wKSk7CQkjIGxvYWQga2V5IHBhcnQgMiAodW5hbGlnbmVkKQorCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlX3RyYW5zZm9ybSIpOwkjIGlucHV0IHRyYW5zZm9ybQkKKwkmbW92CSgkcm91bmQsNyk7CisKKyZzZXRfbGFiZWwoImxvb3Bfc2NoZWR1bGVfMjU2Iik7CisJJmNhbGwJKCJfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlIik7CSMgb3V0cHV0IGxvdyByZXN1bHQKKwkmbW92ZHFhCSgieG1tNiIsInhtbTAiKTsJCSMgc2F2ZSBjdXJfbG8gaW4geG1tNgorCisJIyBoaWdoIHJvdW5kCisJJmNhbGwJKCJfdnBhZXNfc2NoZWR1bGVfcm91bmQiKTsKKwkmZGVjCSgkcm91bmQpOworCSZqegkoJmxhYmVsKCJzY2hlZHVsZV9tYW5nbGVfbGFzdCIpKTsKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV9tYW5nbGUiKTsJCisKKwkjIGxvdyByb3VuZC4gc3dhcCB4bW03IGFuZCB4bW02CisJJnBzaHVmZAkoInhtbTAiLCJ4bW0wIiwweEZGKTsKKwkmbW92ZHFhCSgmUVdQKDIwLCJlc3AiKSwieG1tNyIpOworCSZtb3ZkcWEJKCJ4bW03IiwieG1tNiIpOworCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlX2xvd19yb3VuZCIpOworCSZtb3ZkcWEJKCJ4bW03IiwmUVdQKDIwLCJlc3AiKSk7CisKKwkmam1wCSgmbGFiZWwoImxvb3Bfc2NoZWR1bGVfMjU2IikpOworCisjIworIyMgIC5hZXNfc2NoZWR1bGVfbWFuZ2xlX2xhc3QKKyMjCisjIyAgTWFuZ2xlciBmb3IgbGFzdCByb3VuZCBvZiBrZXkgc2NoZWR1bGUKKyMjICBNYW5nbGVzICV4bW0wCisjIyAgICB3aGVuIGVuY3J5cHRpbmcsIG91dHB1dHMgb3V0KCV4bW0wKSBeIDYzCisjIyAgICB3aGVuIGRlY3J5cHRpbmcsIG91dHB1dHMgdW5za2V3KCV4bW0wKQorIyMKKyMjICBBbHdheXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSByZXR1cm4uLi4ganVtcHMgdG8gY2xlYW51cCBhbmQgZXhpdHMKKyMjCismc2V0X2xhYmVsKCJzY2hlZHVsZV9tYW5nbGVfbGFzdCIsMTYpOworCSMgc2NoZWR1bGUgbGFzdCByb3VuZCBrZXkgZnJvbSB4bW0wCisJJmxlYQkoJGJhc2UsJkRXUCgka19kZXNrZXcsJGNvbnN0KSk7CisJJnRlc3QJKCRvdXQsJG91dCk7CisJJmpuegkoJmxhYmVsKCJzY2hlZHVsZV9tYW5nbGVfbGFzdF9kZWMiKSk7CisKKwkjIGVuY3J5cHRpbmcKKwkmbW92ZHFhCSgieG1tMSIsJlFXUCgka19zciwkY29uc3QsJG1hZ2ljKSk7CisJJnBzaHVmYgkoInhtbTAiLCJ4bW0xIik7CQkjIG91dHB1dCBwZXJtdXRlCisJJmxlYQkoJGJhc2UsJkRXUCgka19vcHQsJGNvbnN0KSk7CSMgcHJlcGFyZSB0byBvdXRwdXQgdHJhbnNmb3JtCisJJmFkZAkoJGtleSwzMik7CisKKyZzZXRfbGFiZWwoInNjaGVkdWxlX21hbmdsZV9sYXN0X2RlYyIpOworCSZhZGQJKCRrZXksLTE2KTsKKwkmcHhvcgkoInhtbTAiLCZRV1AoJGtfczYzLCRjb25zdCkpOworCSZjYWxsCSgiX3ZwYWVzX3NjaGVkdWxlX3RyYW5zZm9ybSIpOwkjIG91dHB1dCB0cmFuc2Zvcm0KKwkmbW92ZHF1CSgmUVdQKDAsJGtleSksInhtbTAiKTsJCSMgc2F2ZSBsYXN0IGtleQorCisJIyBjbGVhbnVwCisJJnB4b3IJKCJ4bW0wIiwieG1tMCIpOworCSZweG9yCSgieG1tMSIsInhtbTEiKTsKKwkmcHhvcgkoInhtbTIiLCJ4bW0yIik7CisJJnB4b3IJKCJ4bW0zIiwieG1tMyIpOworCSZweG9yCSgieG1tNCIsInhtbTQiKTsKKwkmcHhvcgkoInhtbTUiLCJ4bW01Iik7CisJJnB4b3IJKCJ4bW02IiwieG1tNiIpOworCSZweG9yCSgieG1tNyIsInhtbTciKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfdnBhZXNfc2NoZWR1bGVfY29yZSIpOworCisjIworIyMgIC5hZXNfc2NoZWR1bGVfMTkyX3NtZWFyCisjIworIyMgIFNtZWFyIHRoZSBzaG9ydCwgbG93IHNpZGUgaW4gdGhlIDE5Mi1iaXQga2V5IHNjaGVkdWxlLgorIyMKKyMjICBJbnB1dHM6CisjIyAgICAleG1tNzogaGlnaCBzaWRlLCBiICBhICB4ICB5CisjIyAgICAleG1tNjogIGxvdyBzaWRlLCBkICBjICAwICAwCisjIyAgICAleG1tMTM6IDAKKyMjCisjIyAgT3V0cHV0czoKKyMjICAgICV4bW02OiBiK2MrZCAgYitjICAwICAwCisjIyAgICAleG1tMDogYitjK2QgIGIrYyAgYiAgYQorIyMKKyZmdW5jdGlvbl9iZWdpbl9CKCJfdnBhZXNfc2NoZWR1bGVfMTkyX3NtZWFyIik7CisJJnBzaHVmZAkoInhtbTAiLCJ4bW02IiwweDgwKTsJCSMgZCBjIDAgMCAtPiBjIDAgMCAwCisJJnB4b3IJKCJ4bW02IiwieG1tMCIpOwkJIyAtPiBjK2QgYyAwIDAKKwkmcHNodWZkCSgieG1tMCIsInhtbTciLDB4RkUpOwkJIyBiIGEgXyBfIC0+IGIgYiBiIGEKKwkmcHhvcgkoInhtbTYiLCJ4bW0wIik7CQkjIC0+IGIrYytkIGIrYyBiIGEKKwkmbW92ZHFhCSgieG1tMCIsInhtbTYiKTsKKwkmcHhvcgkoInhtbTEiLCJ4bW0xIik7CisJJm1vdmhscHMoInhtbTYiLCJ4bW0xIik7CQkjIGNsb2JiZXIgbG93IHNpZGUgd2l0aCB6ZXJvcworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl92cGFlc19zY2hlZHVsZV8xOTJfc21lYXIiKTsKKworIyMKKyMjICAuYWVzX3NjaGVkdWxlX3JvdW5kCisjIworIyMgIFJ1bnMgb25lIG1haW4gcm91bmQgb2YgdGhlIGtleSBzY2hlZHVsZSBvbiAleG1tMCwgJXhtbTcKKyMjCisjIyAgU3BlY2lmaWNhbGx5LCBydW5zIHN1YmJ5dGVzIG9uIHRoZSBoaWdoIGR3b3JkIG9mICV4bW0wCisjIyAgdGhlbiByb3RhdGVzIGl0IGJ5IG9uZSBieXRlIGFuZCB4b3JzIGludG8gdGhlIGxvdyBkd29yZCBvZgorIyMgICV4bW03LgorIyMKKyMjICBBZGRzIHJjb24gZnJvbSBsb3cgYnl0ZSBvZiAleG1tOCwgdGhlbiByb3RhdGVzICV4bW04IGZvcgorIyMgIG5leHQgcmNvbi4KKyMjCisjIyAgU21lYXJzIHRoZSBkd29yZHMgb2YgJXhtbTcgYnkgeG9yaW5nIHRoZSBsb3cgaW50byB0aGUKKyMjICBzZWNvbmQgbG93LCByZXN1bHQgaW50byB0aGlyZCwgcmVzdWx0IGludG8gaGlnaGVzdC4KKyMjCisjIyAgUmV0dXJucyByZXN1bHRzIGluICV4bW03ID0gJXhtbTAuCisjIyAgQ2xvYmJlcnMgJXhtbTEtJXhtbTUuCisjIworJmZ1bmN0aW9uX2JlZ2luX0IoIl92cGFlc19zY2hlZHVsZV9yb3VuZCIpOworCSMgZXh0cmFjdCByY29uIGZyb20geG1tOAorCSZtb3ZkcWEJKCJ4bW0yIiwmUVdQKDgsImVzcCIpKTsJCSMgeG1tOAorCSZweG9yCSgieG1tMSIsInhtbTEiKTsKKwkmcGFsaWducigieG1tMSIsInhtbTIiLDE1KTsKKwkmcGFsaWducigieG1tMiIsInhtbTIiLDE1KTsKKwkmcHhvcgkoInhtbTciLCJ4bW0xIik7CisKKwkjIHJvdGF0ZQorCSZwc2h1ZmQJKCJ4bW0wIiwieG1tMCIsMHhGRik7CisJJnBhbGlnbnIoInhtbTAiLCJ4bW0wIiwxKTsKKworCSMgZmFsbCB0aHJvdWdoLi4uCisJJm1vdmRxYQkoJlFXUCg4LCJlc3AiKSwieG1tMiIpOwkJIyB4bW04CisKKwkjIGxvdyByb3VuZDogc2FtZSBhcyBoaWdoIHJvdW5kLCBidXQgbm8gcm90YXRpb24gYW5kIG5vIHJjb24uCismc2V0X2xhYmVsKCJfdnBhZXNfc2NoZWR1bGVfbG93X3JvdW5kIik7CisJIyBzbWVhciB4bW03CisJJm1vdmRxYQkoInhtbTEiLCJ4bW03Iik7CisJJnBzbGxkcQkoInhtbTciLDQpOworCSZweG9yCSgieG1tNyIsInhtbTEiKTsKKwkmbW92ZHFhCSgieG1tMSIsInhtbTciKTsKKwkmcHNsbGRxCSgieG1tNyIsOCk7CisJJnB4b3IJKCJ4bW03IiwieG1tMSIpOworCSZweG9yCSgieG1tNyIsJlFXUCgka19zNjMsJGNvbnN0KSk7CisKKwkjIHN1YmJ5dGUKKwkmbW92ZHFhCSgieG1tNCIsJlFXUCgka19zMEYsJGNvbnN0KSk7CisJJm1vdmRxYQkoInhtbTUiLCZRV1AoJGtfaW52LCRjb25zdCkpOwkjIDQgOiAxL2oKKwkmbW92ZHFhCSgieG1tMSIsInhtbTQiKTsJCisJJnBhbmRuCSgieG1tMSIsInhtbTAiKTsKKwkmcHNybGQJKCJ4bW0xIiw0KTsJCQkjIDEgPSBpCisJJnBhbmQJKCJ4bW0wIiwieG1tNCIpOwkJIyAwID0gaworCSZtb3ZkcWEJKCJ4bW0yIiwmUVdQKCRrX2ludisxNiwkY29uc3QpKTsjIDIgOiBhL2sKKwkmcHNodWZiCSgieG1tMiIsInhtbTAiKTsJCSMgMiA9IGEvaworCSZweG9yCSgieG1tMCIsInhtbTEiKTsJCSMgMCA9IGoKKwkmbW92ZHFhCSgieG1tMyIsInhtbTUiKTsJCSMgMyA6IDEvaQorCSZwc2h1ZmIJKCJ4bW0zIiwieG1tMSIpOwkJIyAzID0gMS9pCisJJnB4b3IJKCJ4bW0zIiwieG1tMiIpOwkJIyAzID0gaWFrID0gMS9pICsgYS9rCisJJm1vdmRxYQkoInhtbTQiLCJ4bW01Iik7CQkjIDQgOiAxL2oKKwkmcHNodWZiCSgieG1tNCIsInhtbTAiKTsJCSMgNCA9IDEvagorCSZweG9yCSgieG1tNCIsInhtbTIiKTsJCSMgNCA9IGphayA9IDEvaiArIGEvaworCSZtb3ZkcWEJKCJ4bW0yIiwieG1tNSIpOwkJIyAyIDogMS9pYWsKKwkmcHNodWZiCSgieG1tMiIsInhtbTMiKTsJCSMgMiA9IDEvaWFrCisJJnB4b3IJKCJ4bW0yIiwieG1tMCIpOwkJIyAyID0gaW8KKwkmbW92ZHFhCSgieG1tMyIsInhtbTUiKTsJCSMgMyA6IDEvamFrCisJJnBzaHVmYgkoInhtbTMiLCJ4bW00Iik7CQkjIDMgPSAxL2phaworCSZweG9yCSgieG1tMyIsInhtbTEiKTsJCSMgMyA9IGpvCisJJm1vdmRxYQkoInhtbTQiLCZRV1AoJGtfc2IxLCRjb25zdCkpOwkjIDQgOiBzYm91CisJJnBzaHVmYgkoInhtbTQiLCJ4bW0yIik7CQkjIDQgPSBzYm91CisJJm1vdmRxYQkoInhtbTAiLCZRV1AoJGtfc2IxKzE2LCRjb25zdCkpOyMgMCA6IHNib3QKKwkmcHNodWZiCSgieG1tMCIsInhtbTMiKTsJCSMgMCA9IHNiMXQKKwkmcHhvcgkoInhtbTAiLCJ4bW00Iik7CQkjIDAgPSBzYm94IG91dHB1dAorCisJIyBhZGQgaW4gc21lYXJlZCBzdHVmZgorCSZweG9yCSgieG1tMCIsInhtbTciKTsKKwkmbW92ZHFhCSgieG1tNyIsInhtbTAiKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfdnBhZXNfc2NoZWR1bGVfcm91bmQiKTsKKworIyMKKyMjICAuYWVzX3NjaGVkdWxlX3RyYW5zZm9ybQorIyMKKyMjICBMaW5lYXItdHJhbnNmb3JtICV4bW0wIGFjY29yZGluZyB0byB0YWJsZXMgYXQgKCVlYngpCisjIworIyMgIE91dHB1dCBpbiAleG1tMAorIyMgIENsb2JiZXJzICV4bW0xLCAleG1tMgorIyMKKyZmdW5jdGlvbl9iZWdpbl9CKCJfdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtIik7CisJJm1vdmRxYQkoInhtbTIiLCZRV1AoJGtfczBGLCRjb25zdCkpOworCSZtb3ZkcWEJKCJ4bW0xIiwieG1tMiIpOworCSZwYW5kbgkoInhtbTEiLCJ4bW0wIik7CisJJnBzcmxkCSgieG1tMSIsNCk7CisJJnBhbmQJKCJ4bW0wIiwieG1tMiIpOworCSZtb3ZkcWEJKCJ4bW0yIiwmUVdQKDAsJGJhc2UpKTsKKwkmcHNodWZiCSgieG1tMiIsInhtbTAiKTsKKwkmbW92ZHFhCSgieG1tMCIsJlFXUCgxNiwkYmFzZSkpOworCSZwc2h1ZmIJKCJ4bW0wIiwieG1tMSIpOworCSZweG9yCSgieG1tMCIsInhtbTIiKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtIik7CisKKyMjCisjIyAgLmFlc19zY2hlZHVsZV9tYW5nbGUKKyMjCisjIyAgTWFuZ2xlIHhtbTAgZnJvbSAoYmFzaXMtdHJhbnNmb3JtZWQpIHN0YW5kYXJkIHZlcnNpb24KKyMjICB0byBvdXIgdmVyc2lvbi4KKyMjCisjIyAgT24gZW5jcnlwdCwKKyMjICAgIHhvciB3aXRoIDB4NjMKKyMjICAgIG11bHRpcGx5IGJ5IGNpcmN1bGFudCAwLDEsMSwxCisjIyAgICBhcHBseSBzaGlmdHJvd3MgdHJhbnNmb3JtCisjIworIyMgIE9uIGRlY3J5cHQsCisjIyAgICB4b3Igd2l0aCAweDYzCisjIyAgICBtdWx0aXBseSBieSAiaW52ZXJzZSBtaXhjb2x1bW5zIiBjaXJjdWxhbnQgRSxCLEQsOQorIyMgICAgZGVza2V3CisjIyAgICBhcHBseSBzaGlmdHJvd3MgdHJhbnNmb3JtCisjIworIyMKKyMjICBXcml0ZXMgb3V0IHRvICglZWR4KSwgYW5kIGluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBpdAorIyMgIEtlZXBzIHRyYWNrIG9mIHJvdW5kIG51bWJlciBtb2QgNCBpbiAlZWN4CisjIyAgUHJlc2VydmVzIHhtbTAKKyMjICBDbG9iYmVycyB4bW0xLXhtbTUKKyMjCismZnVuY3Rpb25fYmVnaW5fQigiX3ZwYWVzX3NjaGVkdWxlX21hbmdsZSIpOworCSZtb3ZkcWEJKCJ4bW00IiwieG1tMCIpOwkjIHNhdmUgeG1tMCBmb3IgbGF0ZXIKKwkmbW92ZHFhCSgieG1tNSIsJlFXUCgka19tY19mb3J3YXJkLCRjb25zdCkpOworCSZ0ZXN0CSgkb3V0LCRvdXQpOworCSZqbnoJKCZsYWJlbCgic2NoZWR1bGVfbWFuZ2xlX2RlYyIpKTsKKworCSMgZW5jcnlwdGluZworCSZhZGQJKCRrZXksMTYpOworCSZweG9yCSgieG1tNCIsJlFXUCgka19zNjMsJGNvbnN0KSk7CisJJnBzaHVmYgkoInhtbTQiLCJ4bW01Iik7CisJJm1vdmRxYQkoInhtbTMiLCJ4bW00Iik7CisJJnBzaHVmYgkoInhtbTQiLCJ4bW01Iik7CisJJnB4b3IJKCJ4bW0zIiwieG1tNCIpOworCSZwc2h1ZmIJKCJ4bW00IiwieG1tNSIpOworCSZweG9yCSgieG1tMyIsInhtbTQiKTsKKworCSZqbXAJKCZsYWJlbCgic2NoZWR1bGVfbWFuZ2xlX2JvdGgiKSk7CisKKyZzZXRfbGFiZWwoInNjaGVkdWxlX21hbmdsZV9kZWMiLDE2KTsKKwkjIGludmVyc2UgbWl4IGNvbHVtbnMKKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgka19zMEYsJGNvbnN0KSk7CisJJmxlYQkoJGlucCwmRFdQKCRrX2Rrc2QsJGNvbnN0KSk7CisJJm1vdmRxYQkoInhtbTEiLCJ4bW0yIik7CisJJnBhbmRuCSgieG1tMSIsInhtbTQiKTsKKwkmcHNybGQJKCJ4bW0xIiw0KTsJCQkjIDEgPSBoaQorCSZwYW5kCSgieG1tNCIsInhtbTIiKTsJCSMgNCA9IGxvCisKKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgwLCRpbnApKTsKKwkmcHNodWZiCSgieG1tMiIsInhtbTQiKTsKKwkmbW92ZHFhCSgieG1tMyIsJlFXUCgweDEwLCRpbnApKTsKKwkmcHNodWZiCSgieG1tMyIsInhtbTEiKTsKKwkmcHhvcgkoInhtbTMiLCJ4bW0yIik7CisJJnBzaHVmYgkoInhtbTMiLCJ4bW01Iik7CisKKwkmbW92ZHFhCSgieG1tMiIsJlFXUCgweDIwLCRpbnApKTsKKwkmcHNodWZiCSgieG1tMiIsInhtbTQiKTsKKwkmcHhvcgkoInhtbTIiLCJ4bW0zIik7CisJJm1vdmRxYQkoInhtbTMiLCZRV1AoMHgzMCwkaW5wKSk7CisJJnBzaHVmYgkoInhtbTMiLCJ4bW0xIik7CisJJnB4b3IJKCJ4bW0zIiwieG1tMiIpOworCSZwc2h1ZmIJKCJ4bW0zIiwieG1tNSIpOworCisJJm1vdmRxYQkoInhtbTIiLCZRV1AoMHg0MCwkaW5wKSk7CisJJnBzaHVmYgkoInhtbTIiLCJ4bW00Iik7CisJJnB4b3IJKCJ4bW0yIiwieG1tMyIpOworCSZtb3ZkcWEJKCJ4bW0zIiwmUVdQKDB4NTAsJGlucCkpOworCSZwc2h1ZmIJKCJ4bW0zIiwieG1tMSIpOworCSZweG9yCSgieG1tMyIsInhtbTIiKTsKKwkmcHNodWZiCSgieG1tMyIsInhtbTUiKTsKKworCSZtb3ZkcWEJKCJ4bW0yIiwmUVdQKDB4NjAsJGlucCkpOworCSZwc2h1ZmIJKCJ4bW0yIiwieG1tNCIpOworCSZweG9yCSgieG1tMiIsInhtbTMiKTsKKwkmbW92ZHFhCSgieG1tMyIsJlFXUCgweDcwLCRpbnApKTsKKwkmcHNodWZiCSgieG1tMyIsInhtbTEiKTsKKwkmcHhvcgkoInhtbTMiLCJ4bW0yIik7CisKKwkmYWRkCSgka2V5LC0xNik7CisKKyZzZXRfbGFiZWwoInNjaGVkdWxlX21hbmdsZV9ib3RoIik7CisJJm1vdmRxYQkoInhtbTEiLCZRV1AoJGtfc3IsJGNvbnN0LCRtYWdpYykpOworCSZwc2h1ZmIJKCJ4bW0zIiwieG1tMSIpOworCSZhZGQJKCRtYWdpYywtMTYpOworCSZhbmQJKCRtYWdpYywweDMwKTsKKwkmbW92ZHF1CSgmUVdQKDAsJGtleSksInhtbTMiKTsKKwkmcmV0CSgpOworJmZ1bmN0aW9uX2VuZF9CKCJfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlIik7CisKKyMKKyMgSW50ZXJmYWNlIHRvIE9wZW5TU0wKKyMKKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSIpOworCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CQkjIGlucAorCSZsZWEJKCRiYXNlLCZEV1AoLTU2LCJlc3AiKSk7CisJJm1vdgkoJHJvdW5kLCZ3cGFyYW0oMSkpOwkJIyBiaXRzCisJJmFuZAkoJGJhc2UsLTE2KTsKKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBrZXkKKwkmeGNoZwkoJGJhc2UsImVzcCIpOwkJCSMgYWxsb2NhCisJJm1vdgkoJkRXUCg0OCwiZXNwIiksJGJhc2UpOworCisJJm1vdgkoJGJhc2UsJHJvdW5kKTsKKwkmc2hyCSgkYmFzZSw1KTsKKwkmYWRkCSgkYmFzZSw1KTsKKwkmbW92CSgmRFdQKDI0MCwka2V5KSwkYmFzZSk7CQkjIEFFU19LRVktPnJvdW5kcyA9IG5iaXRzLzMyKzU7CisJJm1vdgkoJG1hZ2ljLDB4MzApOworCSZtb3YJKCRvdXQsMCk7CisKKwkmbGVhCSgkY29uc3QsJkRXUCgmbGFiZWwoIl92cGFlc19jb25zdHMiKS4iKzB4MzAtIi4mbGFiZWwoInBpY19wb2ludCIpKSk7CisJJmNhbGwJKCJfdnBhZXNfc2NoZWR1bGVfY29yZSIpOworJnNldF9sYWJlbCgicGljX3BvaW50Iik7CisKKwkmbW92CSgiZXNwIiwmRFdQKDQ4LCJlc3AiKSk7CisJJnhvcgkoImVheCIsImVheCIpOworJmZ1bmN0aW9uX2VuZCgiJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSIpOworCismZnVuY3Rpb25fYmVnaW4oIiR7UFJFRklYfV9zZXRfZGVjcnlwdF9rZXkiKTsKKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkJIyBpbnAKKwkmbGVhCSgkYmFzZSwmRFdQKC01NiwiZXNwIikpOworCSZtb3YJKCRyb3VuZCwmd3BhcmFtKDEpKTsJCSMgYml0cworCSZhbmQJKCRiYXNlLC0xNik7CisJJm1vdgkoJGtleSwmd3BhcmFtKDIpKTsJCSMga2V5CisJJnhjaGcJKCRiYXNlLCJlc3AiKTsJCQkjIGFsbG9jYQorCSZtb3YJKCZEV1AoNDgsImVzcCIpLCRiYXNlKTsKKworCSZtb3YJKCRiYXNlLCRyb3VuZCk7CisJJnNocgkoJGJhc2UsNSk7CisJJmFkZAkoJGJhc2UsNSk7CisJJm1vdgkoJkRXUCgyNDAsJGtleSksJGJhc2UpOwkjIEFFU19LRVktPnJvdW5kcyA9IG5iaXRzLzMyKzU7CisJJnNobAkoJGJhc2UsNCk7CisJJmxlYQkoJGtleSwmRFdQKDE2LCRrZXksJGJhc2UpKTsKKworCSZtb3YJKCRvdXQsMSk7CisJJm1vdgkoJG1hZ2ljLCRyb3VuZCk7CisJJnNocgkoJG1hZ2ljLDEpOworCSZhbmQJKCRtYWdpYywzMik7CisJJnhvcgkoJG1hZ2ljLDMyKTsJCQkjIG5iaXN0PT0xOTI/MDozMjsKKworCSZsZWEJKCRjb25zdCwmRFdQKCZsYWJlbCgiX3ZwYWVzX2NvbnN0cyIpLiIrMHgzMC0iLiZsYWJlbCgicGljX3BvaW50IikpKTsKKwkmY2FsbAkoIl92cGFlc19zY2hlZHVsZV9jb3JlIik7Cismc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKKworCSZtb3YJKCJlc3AiLCZEV1AoNDgsImVzcCIpKTsKKwkmeG9yCSgiZWF4IiwiZWF4Iik7CismZnVuY3Rpb25fZW5kKCIke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5Iik7CisKKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2VuY3J5cHQiKTsKKwkmbGVhCSgkY29uc3QsJkRXUCgmbGFiZWwoIl92cGFlc19jb25zdHMiKS4iKzB4MzAtIi4mbGFiZWwoInBpY19wb2ludCIpKSk7CisJJmNhbGwJKCJfdnBhZXNfcHJlaGVhdCIpOworJnNldF9sYWJlbCgicGljX3BvaW50Iik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJCSMgaW5wCisJJmxlYQkoJGJhc2UsJkRXUCgtNTYsImVzcCIpKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOwkJIyBvdXQKKwkmYW5kCSgkYmFzZSwtMTYpOworCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CQkjIGtleQorCSZ4Y2hnCSgkYmFzZSwiZXNwIik7CQkJIyBhbGxvY2EKKwkmbW92CSgmRFdQKDQ4LCJlc3AiKSwkYmFzZSk7CisKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRpbnApKTsKKwkmY2FsbAkoIl92cGFlc19lbmNyeXB0X2NvcmUiKTsKKwkmbW92ZHF1CSgmUVdQKDAsJG91dCksInhtbTAiKTsKKworCSZtb3YJKCJlc3AiLCZEV1AoNDgsImVzcCIpKTsKKyZmdW5jdGlvbl9lbmQoIiR7UFJFRklYfV9lbmNyeXB0Iik7CisKKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2RlY3J5cHQiKTsKKwkmbGVhCSgkY29uc3QsJkRXUCgmbGFiZWwoIl92cGFlc19jb25zdHMiKS4iKzB4MzAtIi4mbGFiZWwoInBpY19wb2ludCIpKSk7CisJJmNhbGwJKCJfdnBhZXNfcHJlaGVhdCIpOworJnNldF9sYWJlbCgicGljX3BvaW50Iik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJCSMgaW5wCisJJmxlYQkoJGJhc2UsJkRXUCgtNTYsImVzcCIpKTsKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMSkpOwkJIyBvdXQKKwkmYW5kCSgkYmFzZSwtMTYpOworCSZtb3YJKCRrZXksJndwYXJhbSgyKSk7CQkjIGtleQorCSZ4Y2hnCSgkYmFzZSwiZXNwIik7CQkJIyBhbGxvY2EKKwkmbW92CSgmRFdQKDQ4LCJlc3AiKSwkYmFzZSk7CisKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRpbnApKTsKKwkmY2FsbAkoIl92cGFlc19kZWNyeXB0X2NvcmUiKTsKKwkmbW92ZHF1CSgmUVdQKDAsJG91dCksInhtbTAiKTsKKworCSZtb3YJKCJlc3AiLCZEV1AoNDgsImVzcCIpKTsKKyZmdW5jdGlvbl9lbmQoIiR7UFJFRklYfV9kZWNyeXB0Iik7CisKKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJCSMgaW5wCisJJm1vdgkoJG91dCwmd3BhcmFtKDEpKTsJCSMgb3V0CisJJm1vdgkoJHJvdW5kLCZ3cGFyYW0oMikpOwkJIyBsZW4KKwkmbW92CSgka2V5LCZ3cGFyYW0oMykpOwkJIyBrZXkKKwkmbGVhCSgkYmFzZSwmRFdQKC01NiwiZXNwIikpOworCSZtb3YJKCRjb25zdCwmd3BhcmFtKDQpKTsJCSMgaXZwCisJJmFuZAkoJGJhc2UsLTE2KTsKKwkmbW92CSgkbWFnaWMsJndwYXJhbSg1KSk7CQkjIGVuYworCSZ4Y2hnCSgkYmFzZSwiZXNwIik7CQkJIyBhbGxvY2EKKwkmbW92ZHF1CSgieG1tMSIsJlFXUCgwLCRjb25zdCkpOwkjIGxvYWQgSVYKKwkmc3ViCSgkb3V0LCRpbnApOworCSZtb3YJKCZEV1AoNDgsImVzcCIpLCRiYXNlKTsKKworCSZtb3YJKCZEV1AoMCwiZXNwIiksJG91dCk7CQkjIHNhdmUgb3V0CisJJnN1YgkoJHJvdW5kLDE2KTsKKwkmbW92CSgmRFdQKDQsImVzcCIpLCRrZXkpCQkjIHNhdmUga2V5CisJJm1vdgkoJkRXUCg4LCJlc3AiKSwkY29uc3QpOwkJIyBzYXZlIGl2cAorCSZtb3YJKCRvdXQsJHJvdW5kKTsJCQkjICRvdXQgd29ya3MgYXMgJGxlbgorCisJJmxlYQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJfdnBhZXNfY29uc3RzIikuIisweDMwLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSkpOworCSZjYWxsCSgiX3ZwYWVzX3ByZWhlYXQiKTsKKyZzZXRfbGFiZWwoInBpY19wb2ludCIpOworCSZjbXAJKCRtYWdpYywwKTsKKwkmamUJKCZsYWJlbCgiY2JjX2RlY19sb29wIikpOworCSZqbXAJKCZsYWJlbCgiY2JjX2VuY19sb29wIikpOworCismc2V0X2xhYmVsKCJjYmNfZW5jX2xvb3AiLDE2KTsKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRpbnApKTsJCSMgbG9hZCBpbnB1dAorCSZweG9yCSgieG1tMCIsInhtbTEiKTsJCSMgaW5wXj1pdgorCSZjYWxsCSgiX3ZwYWVzX2VuY3J5cHRfY29yZSIpOworCSZtb3YJKCRiYXNlLCZEV1AoMCwiZXNwIikpOwkJIyByZXN0b3JlIG91dAorCSZtb3YJKCRrZXksJkRXUCg0LCJlc3AiKSk7CQkjIHJlc3RvcmUga2V5CisJJm1vdmRxYQkoInhtbTEiLCJ4bW0wIik7CisJJm1vdmRxdQkoJlFXUCgwLCRiYXNlLCRpbnApLCJ4bW0wIik7CSMgd3JpdGUgb3V0cHV0CisJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKKwkmc3ViCSgkb3V0LDE2KTsKKwkmam5jCSgmbGFiZWwoImNiY19lbmNfbG9vcCIpKTsKKwkmam1wCSgmbGFiZWwoImNiY19kb25lIikpOworCismc2V0X2xhYmVsKCJjYmNfZGVjX2xvb3AiLDE2KTsKKwkmbW92ZHF1CSgieG1tMCIsJlFXUCgwLCRpbnApKTsJCSMgbG9hZCBpbnB1dAorCSZtb3ZkcWEJKCZRV1AoMTYsImVzcCIpLCJ4bW0xIik7CSMgc2F2ZSBJVgorCSZtb3ZkcWEJKCZRV1AoMzIsImVzcCIpLCJ4bW0wIik7CSMgc2F2ZSBmdXR1cmUgSVYKKwkmY2FsbAkoIl92cGFlc19kZWNyeXB0X2NvcmUiKTsKKwkmbW92CSgkYmFzZSwmRFdQKDAsImVzcCIpKTsJCSMgcmVzdG9yZSBvdXQKKwkmbW92CSgka2V5LCZEV1AoNCwiZXNwIikpOwkJIyByZXN0b3JlIGtleQorCSZweG9yCSgieG1tMCIsJlFXUCgxNiwiZXNwIikpOwkjIG91dF49aXYKKwkmbW92ZHFhCSgieG1tMSIsJlFXUCgzMiwiZXNwIikpOwkjIGxvYWQgbmV4dCBJVgorCSZtb3ZkcXUJKCZRV1AoMCwkYmFzZSwkaW5wKSwieG1tMCIpOwkjIHdyaXRlIG91dHB1dAorCSZsZWEJKCRpbnAsJkRXUCgxNiwkaW5wKSk7CisJJnN1YgkoJG91dCwxNik7CisJJmpuYwkoJmxhYmVsKCJjYmNfZGVjX2xvb3AiKSk7CisKKyZzZXRfbGFiZWwoImNiY19kb25lIik7CisJJm1vdgkoJGJhc2UsJkRXUCg4LCJlc3AiKSk7CQkjIHJlc3RvcmUgaXZwCisJJm1vdgkoImVzcCIsJkRXUCg0OCwiZXNwIikpOworCSZtb3ZkcXUJKCZRV1AoMCwkYmFzZSksInhtbTEiKTsJCSMgd3JpdGUgSVYKKyZmdW5jdGlvbl9lbmQoIiR7UFJFRklYfV9jYmNfZW5jcnlwdCIpOworCismYXNtX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2XzY0LnBsIGIvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2XzY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTQ3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYWVzL2FzbS92cGFlcy14ODZfNjQucGwKQEAgLTAsMCArMSwxMjA0IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIENvbnN0YW50LXRpbWUgU1NTRTMgQUVTIGNvcmUgaW1wbGVtZW50YXRpb24uCisjIyB2ZXJzaW9uIDAuMQorIyMKKyMjIEJ5IE1pa2UgSGFtYnVyZyAoU3RhbmZvcmQgVW5pdmVyc2l0eSksIDIwMDkKKyMjIFB1YmxpYyBkb21haW4uCisjIworIyMgRm9yIGRldGFpbHMgc2VlIGh0dHA6Ly9zaGlmdGxlZnQub3JnL3BhcGVycy92ZWN0b3JfYWVzLyBhbmQKKyMjIGh0dHA6Ly9jcnlwdG8uc3RhbmZvcmQuZWR1L3ZwYWVzLy4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTZXB0ZW1iZXIgMjAxMS4KKyMKKyMgSW50ZXJmYWNlIHRvIE9wZW5TU0wgYXMgImFsbW9zdCIgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IKKyMgYWVzLXg4Nl82NC5wbC4gIkFsbW9zdCIgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgQUVTX2NiY19lbmNyeXB0CisjIGRvZXNuJ3QgaGFuZGxlIHBhcnRpYWwgdmVjdG9ycyAoZG9lc24ndCBoYXZlIHRvIGlmIGNhbGxlZCBmcm9tCisjIEVWUCBvbmx5KS4gIkRyb3AtaW4iIGltcGxpZXMgdGhhdCB0aGlzIG1vZHVsZSBkb2Vzbid0IHNoYXJlIGtleQorIyBzY2hlZHVsZSBzdHJ1Y3R1cmUgd2l0aCB0aGUgb3JpZ2luYWwgbm9yIGRvZXMgaXQgbWFrZSBhc3N1bXB0aW9uCisjIGFib3V0IGl0cyBhbGlnbm1lbnQuLi4KKyMKKyMgUGVyZm9ybWFuY2Ugc3VtbWFyeS4gYWVzLXg4Nl82NC5wbCBjb2x1bW4gbGlzdHMgbGFyZ2UtYmxvY2sgQ0JDCisjIGVuY3J5cHQvZGVjcnlwdC93aXRoLWh5cGVyLXRocmVhZGluZy1vZmYoKikgcmVzdWx0cyBpbiBjeWNsZXMgcGVyCisjIGJ5dGUgcHJvY2Vzc2VkIHdpdGggMTI4LWJpdCBrZXksIGFuZCB2cGFlcy14ODZfNjQucGwgY29sdW1uIC0KKyMgW2Fsc28gbGFyZ2UtYmxvY2sgQ0JDXSBlbmNyeXB0L2RlY3J5cHQuCisjCisjCQlhZXMteDg2XzY0LnBsCQl2cGFlcy14ODZfNjQucGwKKyMKKyMgQ29yZSAyKCoqKQkzMC41LzQzLjcvMTQuMwkJMjEuOC8yNS43KCoqKikKKyMgTmVoYWxlbQkzMC41LzQyLjIvMTQuNgkJIDkuOC8xMS44CisjIEF0b20JCTYzLjkvNzkuMC8zMi4xCQk2NC4wLzg0LjgoKioqKQorIworIyAoKikJIkh5cGVyLXRocmVhZGluZyIgaW4gdGhlIGNvbnRleHQgcmVmZXJzIHJhdGhlciB0byBjYWNoZSBzaGFyZWQKKyMJYW1vbmcgbXVsdGlwbGUgY29yZXMsIHRoYW4gdG8gc3BlY2lmaWNhbGx5IEludGVsIEhUVC4gQXMgdmFzdAorIwltYWpvcml0eSBvZiBjb250ZW1wb3JhcnkgY29yZXMgc2hhcmUgY2FjaGUsIHNsb3dlciBjb2RlIHBhdGgKKyMJaXMgY29tbW9uIHBsYWNlLiBJbiBvdGhlciB3b3JkcyAid2l0aC1oeXBlci10aHJlYWRpbmctb2ZmIgorIwlyZXN1bHRzIGFyZSBwcmVzZW50ZWQgbW9zdGx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMuCisjCisjICgqKikJIkNvcmUgMiIgcmVmZXJzIHRvIGluaXRpYWwgNjVubSBkZXNpZ24sIGEuay5hLiBDb25yb2UuCisjCisjICgqKiopCUxlc3MgaW1wcmVzc2l2ZSBpbXByb3ZlbWVudCBvbiBDb3JlIDIgYW5kIEF0b20gaXMgZHVlIHRvIHNsb3cKKyMJcHNodWZiLAl5ZXQgaXQncyByZXNwZWN0YWJsZSArNDAlLzc4JSBpbXByb3ZlbWVudCBvbiBDb3JlIDIKKyMJKGFzIGltcGxpZWQsIG92ZXIgImh5cGVyLXRocmVhZGluZy1zYWZlIiBjb2RlIHBhdGgpLgorIworIwkJCQkJCTxhcHByb0BvcGVuc3NsLm9yZz4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisKKyRQUkVGSVg9InZwYWVzIjsKKworJGNvZGUuPTw8X19fOworLnRleHQKKworIyMKKyMjICBfYWVzX2VuY3J5cHRfY29yZQorIyMKKyMjICBBRVMtZW5jcnlwdCAleG1tMC4KKyMjCisjIyAgSW5wdXRzOgorIyMgICAgICV4bW0wID0gaW5wdXQKKyMjICAgICAleG1tOS0leG1tMTUgYXMgaW4gX3ZwYWVzX3ByZWhlYXQKKyMjICAgICglcmR4KSA9IHNjaGVkdWxlZCBrZXlzCisjIworIyMgIE91dHB1dCBpbiAleG1tMAorIyMgIENsb2JiZXJzICAleG1tMS0leG1tNSwgJXI5LCAlcjEwLCAlcjExLCAlcmF4CisjIyAgUHJlc2VydmVzICV4bW02IC0gJXhtbTggc28geW91IGdldCBzb21lIGxvY2FsIHZlY3RvcnMKKyMjCisjIworLnR5cGUJX3ZwYWVzX2VuY3J5cHRfY29yZSxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24gMTYKK192cGFlc19lbmNyeXB0X2NvcmU6CisJbW92CSVyZHgsCSVyOQorCW1vdglcJDE2LAklcjExCisJbW92CTI0MCglcmR4KSwlZWF4CisJbW92ZHFhCSV4bW05LAkleG1tMQorCW1vdmRxYQkuTGtfaXB0KCVyaXApLCAleG1tMgkjIGlwdGxvCisJcGFuZG4JJXhtbTAsCSV4bW0xCisJbW92ZHF1CSglcjkpLAkleG1tNQkJIyByb3VuZDAga2V5CisJcHNybGQJXCQ0LAkleG1tMQorCXBhbmQJJXhtbTksCSV4bW0wCisJcHNodWZiCSV4bW0wLAkleG1tMgorCW1vdmRxYQkuTGtfaXB0KzE2KCVyaXApLCAleG1tMAkjIGlwdGhpCisJcHNodWZiCSV4bW0xLAkleG1tMAorCXB4b3IJJXhtbTUsCSV4bW0yCisJcHhvcgkleG1tMiwJJXhtbTAKKwlhZGQJXCQxNiwJJXI5CisJbGVhCS5Ma19tY19iYWNrd2FyZCglcmlwKSwlcjEwCisJam1wCS5MZW5jX2VudHJ5CisKKy5hbGlnbiAxNgorLkxlbmNfbG9vcDoKKwkjIG1pZGRsZSBvZiBtaWRkbGUgcm91bmQKKwltb3ZkcWEgICV4bW0xMywJJXhtbTQJIyA0IDogc2IxdQorCXBzaHVmYiAgJXhtbTIsCSV4bW00CSMgNCA9IHNiMXUKKwlweG9yCSV4bW01LAkleG1tNAkjIDQgPSBzYjF1ICsgaworCW1vdmRxYSAgJXhtbTEyLAkleG1tMAkjIDAgOiBzYjF0CisJcHNodWZiICAleG1tMywJJXhtbTAJIyAwID0gc2IxdAorCXB4b3IJJXhtbTQsCSV4bW0wCSMgMCA9IEEKKwltb3ZkcWEgICV4bW0xNSwJJXhtbTUJIyA0IDogc2IydQorCXBzaHVmYgkleG1tMiwJJXhtbTUJIyA0ID0gc2IydQorCW1vdmRxYQktMHg0MCglcjExLCVyMTApLCAleG1tMQkJIyAuTGtfbWNfZm9yd2FyZFtdCisJbW92ZHFhCSV4bW0xNCwgJXhtbTIJIyAyIDogc2IydAorCXBzaHVmYgkleG1tMywgICV4bW0yCSMgMiA9IHNiMnQKKwlweG9yCSV4bW01LAkleG1tMgkjIDIgPSAyQQorCW1vdmRxYQkoJXIxMSwlcjEwKSwgJXhtbTQJCSMgLkxrX21jX2JhY2t3YXJkW10KKwltb3ZkcWEJJXhtbTAsICAleG1tMwkjIDMgPSBBCisJcHNodWZiICAleG1tMSwgICV4bW0wCSMgMCA9IEIKKwlhZGQJXCQxNiwJJXI5CSMgbmV4dCBrZXkKKwlweG9yCSV4bW0yLCAgJXhtbTAJIyAwID0gMkErQgorCXBzaHVmYgkleG1tNCwJJXhtbTMJIyAzID0gRAorCWFkZAlcJDE2LAklcjExCSMgbmV4dCBtYworCXB4b3IJJXhtbTAsCSV4bW0zCSMgMyA9IDJBK0IrRAorCXBzaHVmYiAgJXhtbTEsCSV4bW0wCSMgMCA9IDJCK0MKKwlhbmQJXCQweDMwLAklcjExCSMgLi4uIG1vZCA0CisJcHhvcgkleG1tMywJJXhtbTAJIyAwID0gMkErM0IrQytECisJc3ViCVwkMSwlcmF4CSMgbnItLQorCisuTGVuY19lbnRyeToKKwkjIHRvcCBvZiByb3VuZAorCW1vdmRxYSAgJXhtbTksIAkleG1tMQkjIDEgOiBpCisJcGFuZG4JJXhtbTAsIAkleG1tMQkjIDEgPSBpPDw0CisJcHNybGQJXCQ0LCAgIAkleG1tMSAgICMgMSA9IGkKKwlwYW5kCSV4bW05LCAJJXhtbTAgICAjIDAgPSBrCisJbW92ZHFhCSV4bW0xMSwgJXhtbTUJIyAyIDogYS9rCisJcHNodWZiICAleG1tMCwgICV4bW01CSMgMiA9IGEvaworCXB4b3IJJXhtbTEsCSV4bW0wCSMgMCA9IGoKKwltb3ZkcWEJJXhtbTEwLAkleG1tMyAgCSMgMyA6IDEvaQorCXBzaHVmYiAgJXhtbTEsIAkleG1tMyAgCSMgMyA9IDEvaQorCXB4b3IJJXhtbTUsIAkleG1tMyAgCSMgMyA9IGlhayA9IDEvaSArIGEvaworCW1vdmRxYQkleG1tMTAsCSV4bW00ICAJIyA0IDogMS9qCisJcHNodWZiCSV4bW0wLCAJJXhtbTQgIAkjIDQgPSAxL2oKKwlweG9yCSV4bW01LCAJJXhtbTQgIAkjIDQgPSBqYWsgPSAxL2ogKyBhL2sKKwltb3ZkcWEJJXhtbTEwLAkleG1tMiAgCSMgMiA6IDEvaWFrCisJcHNodWZiICAleG1tMywJJXhtbTIgIAkjIDIgPSAxL2lhaworCXB4b3IJJXhtbTAsIAkleG1tMiAgCSMgMiA9IGlvCisJbW92ZHFhCSV4bW0xMCwgJXhtbTMgICAjIDMgOiAxL2phaworCW1vdmRxdQkoJXI5KSwJJXhtbTUKKwlwc2h1ZmIgICV4bW00LCAgJXhtbTMgICAjIDMgPSAxL2phaworCXB4b3IJJXhtbTEsICAleG1tMyAgICMgMyA9IGpvCisJam56CS5MZW5jX2xvb3AKKworCSMgbWlkZGxlIG9mIGxhc3Qgcm91bmQKKwltb3ZkcWEJLTB4NjAoJXIxMCksICV4bW00CSMgMyA6IHNib3UJLkxrX3NibworCW1vdmRxYQktMHg1MCglcjEwKSwgJXhtbTAJIyAwIDogc2JvdAkuTGtfc2JvKzE2CisJcHNodWZiICAleG1tMiwgICV4bW00CSMgNCA9IHNib3UKKwlweG9yCSV4bW01LCAgJXhtbTQJIyA0ID0gc2IxdSArIGsKKwlwc2h1ZmIgICV4bW0zLAkleG1tMAkjIDAgPSBzYjF0CisJbW92ZHFhCTB4NDAoJXIxMSwlcjEwKSwgJXhtbTEJCSMgLkxrX3NyW10KKwlweG9yCSV4bW00LAkleG1tMAkjIDAgPSBBCisJcHNodWZiCSV4bW0xLAkleG1tMAorCXJldAorLnNpemUJX3ZwYWVzX2VuY3J5cHRfY29yZSwuLV92cGFlc19lbmNyeXB0X2NvcmUKKwkKKyMjCisjIyAgRGVjcnlwdGlvbiBjb3JlCisjIworIyMgIFNhbWUgQVBJIGFzIGVuY3J5cHRpb24gY29yZS4KKyMjCisudHlwZQlfdnBhZXNfZGVjcnlwdF9jb3JlLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX3ZwYWVzX2RlY3J5cHRfY29yZToKKwltb3YJJXJkeCwJJXI5CQkjIGxvYWQga2V5CisJbW92CTI0MCglcmR4KSwlZWF4CisJbW92ZHFhCSV4bW05LAkleG1tMQorCW1vdmRxYQkuTGtfZGlwdCglcmlwKSwgJXhtbTIJIyBpcHRsbworCXBhbmRuCSV4bW0wLAkleG1tMQorCW1vdgklcmF4LAklcjExCisJcHNybGQJXCQ0LAkleG1tMQorCW1vdmRxdQkoJXI5KSwJJXhtbTUJCSMgcm91bmQwIGtleQorCXNobAlcJDQsCSVyMTEKKwlwYW5kCSV4bW05LAkleG1tMAorCXBzaHVmYgkleG1tMCwJJXhtbTIKKwltb3ZkcWEJLkxrX2RpcHQrMTYoJXJpcCksICV4bW0wICMgaXB0aGkKKwl4b3IJXCQweDMwLAklcjExCisJbGVhCS5Ma19kc2JkKCVyaXApLCVyMTAKKwlwc2h1ZmIJJXhtbTEsCSV4bW0wCisJYW5kCVwkMHgzMCwJJXIxMQorCXB4b3IJJXhtbTUsCSV4bW0yCisJbW92ZHFhCS5Ma19tY19mb3J3YXJkKzQ4KCVyaXApLCAleG1tNQorCXB4b3IJJXhtbTIsCSV4bW0wCisJYWRkCVwkMTYsCSVyOQorCWFkZAklcjEwLAklcjExCisJam1wCS5MZGVjX2VudHJ5CisKKy5hbGlnbiAxNgorLkxkZWNfbG9vcDoKKyMjCisjIyAgSW52ZXJzZSBtaXggY29sdW1ucworIyMKKwltb3ZkcWEgIC0weDIwKCVyMTApLCV4bW00CSMgNCA6IHNiOXUKKwlwc2h1ZmIJJXhtbTIsCSV4bW00CQkjIDQgPSBzYjl1CisJcHhvcgkleG1tMCwJJXhtbTQKKwltb3ZkcWEgIC0weDEwKCVyMTApLCV4bW0wCSMgMCA6IHNiOXQKKwlwc2h1ZmIJJXhtbTMsCSV4bW0wCQkjIDAgPSBzYjl0CisJcHhvcgkleG1tNCwJJXhtbTAJCSMgMCA9IGNoCisJYWRkCVwkMTYsICVyOQkJIyBuZXh0IHJvdW5kIGtleQorCisJcHNodWZiCSV4bW01LAkleG1tMAkJIyBNQyBjaAorCW1vdmRxYSAgMHgwMCglcjEwKSwleG1tNAkjIDQgOiBzYmR1CisJcHNodWZiCSV4bW0yLAkleG1tNAkJIyA0ID0gc2JkdQorCXB4b3IJJXhtbTAsCSV4bW00CQkjIDQgPSBjaAorCW1vdmRxYSAgMHgxMCglcjEwKSwleG1tMAkjIDAgOiBzYmR0CisJcHNodWZiCSV4bW0zLAkleG1tMAkJIyAwID0gc2JkdAorCXB4b3IJJXhtbTQsCSV4bW0wCQkjIDAgPSBjaAorCXN1YglcJDEsJXJheAkJIyBuci0tCisJCisJcHNodWZiCSV4bW01LAkleG1tMAkJIyBNQyBjaAorCW1vdmRxYSAgMHgyMCglcjEwKSwleG1tNAkjIDQgOiBzYmJ1CisJcHNodWZiCSV4bW0yLAkleG1tNAkJIyA0ID0gc2JidQorCXB4b3IJJXhtbTAsCSV4bW00CQkjIDQgPSBjaAorCW1vdmRxYSAgMHgzMCglcjEwKSwleG1tMAkjIDAgOiBzYmJ0CisJcHNodWZiCSV4bW0zLAkleG1tMAkJIyAwID0gc2JidAorCXB4b3IJJXhtbTQsCSV4bW0wCQkjIDAgPSBjaAorCQorCXBzaHVmYgkleG1tNSwJJXhtbTAJCSMgTUMgY2gKKwltb3ZkcWEgIDB4NDAoJXIxMCksJXhtbTQJIyA0IDogc2JldQorCXBzaHVmYgkleG1tMiwJJXhtbTQJCSMgNCA9IHNiZXUKKwlweG9yCSV4bW0wLAkleG1tNAkJIyA0ID0gY2gKKwltb3ZkcWEgIDB4NTAoJXIxMCksJXhtbTAJIyAwIDogc2JldAorCXBzaHVmYgkleG1tMywJJXhtbTAJCSMgMCA9IHNiZXQKKwlweG9yCSV4bW00LAkleG1tMAkJIyAwID0gY2gKKworCXBhbGlnbnIJXCQxMiwJJXhtbTUsCSV4bW01CisJCisuTGRlY19lbnRyeToKKwkjIHRvcCBvZiByb3VuZAorCW1vdmRxYSAgJXhtbTksIAkleG1tMQkjIDEgOiBpCisJcGFuZG4JJXhtbTAsIAkleG1tMQkjIDEgPSBpPDw0CisJcHNybGQJXCQ0LCAgICAleG1tMQkjIDEgPSBpCisJcGFuZAkleG1tOSwgCSV4bW0wCSMgMCA9IGsKKwltb3ZkcWEJJXhtbTExLCAleG1tMgkjIDIgOiBhL2sKKwlwc2h1ZmIgICV4bW0wLCAgJXhtbTIJIyAyID0gYS9rCisJcHhvcgkleG1tMSwJJXhtbTAJIyAwID0gagorCW1vdmRxYQkleG1tMTAsCSV4bW0zCSMgMyA6IDEvaQorCXBzaHVmYiAgJXhtbTEsIAkleG1tMwkjIDMgPSAxL2kKKwlweG9yCSV4bW0yLCAJJXhtbTMJIyAzID0gaWFrID0gMS9pICsgYS9rCisJbW92ZHFhCSV4bW0xMCwJJXhtbTQJIyA0IDogMS9qCisJcHNodWZiCSV4bW0wLCAJJXhtbTQJIyA0ID0gMS9qCisJcHhvcgkleG1tMiwgCSV4bW00CSMgNCA9IGphayA9IDEvaiArIGEvaworCW1vdmRxYQkleG1tMTAsCSV4bW0yCSMgMiA6IDEvaWFrCisJcHNodWZiICAleG1tMywJJXhtbTIJIyAyID0gMS9pYWsKKwlweG9yCSV4bW0wLCAJJXhtbTIJIyAyID0gaW8KKwltb3ZkcWEJJXhtbTEwLCAleG1tMwkjIDMgOiAxL2phaworCXBzaHVmYiAgJXhtbTQsICAleG1tMwkjIDMgPSAxL2phaworCXB4b3IJJXhtbTEsICAleG1tMwkjIDMgPSBqbworCW1vdmRxdQkoJXI5KSwJJXhtbTAKKwlqbnoJLkxkZWNfbG9vcAorCisJIyBtaWRkbGUgb2YgbGFzdCByb3VuZAorCW1vdmRxYQkweDYwKCVyMTApLCAleG1tNAkjIDMgOiBzYm91CisJcHNodWZiICAleG1tMiwgICV4bW00CSMgNCA9IHNib3UKKwlweG9yCSV4bW0wLCAgJXhtbTQJIyA0ID0gc2IxdSArIGsKKwltb3ZkcWEJMHg3MCglcjEwKSwgJXhtbTAJIyAwIDogc2JvdAorCW1vdmRxYQkuTGtfc3ItLkxrX2RzYmQoJXIxMSksICV4bW0yCisJcHNodWZiICAleG1tMywJJXhtbTAJIyAwID0gc2IxdAorCXB4b3IJJXhtbTQsCSV4bW0wCSMgMCA9IEEKKwlwc2h1ZmIJJXhtbTIsCSV4bW0wCisJcmV0Cisuc2l6ZQlfdnBhZXNfZGVjcnlwdF9jb3JlLC4tX3ZwYWVzX2RlY3J5cHRfY29yZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKyMjICAgICAgICAgICAgICAgICAgQUVTIGtleSBzY2hlZHVsZSAgICAgICAgICAgICAgICAgICMjCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy50eXBlCV92cGFlc19zY2hlZHVsZV9jb3JlLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX3ZwYWVzX3NjaGVkdWxlX2NvcmU6CisJIyByZGkgPSBrZXkKKwkjIHJzaSA9IHNpemUgaW4gYml0cworCSMgcmR4ID0gYnVmZmVyCisJIyByY3ggPSBkaXJlY3Rpb24uICAwPWVuY3J5cHQsIDE9ZGVjcnlwdAorCisJY2FsbAlfdnBhZXNfcHJlaGVhdAkJIyBsb2FkIHRoZSB0YWJsZXMKKwltb3ZkcWEJLkxrX3Jjb24oJXJpcCksICV4bW04CSMgbG9hZCByY29uCisJbW92ZHF1CSglcmRpKSwJJXhtbTAJCSMgbG9hZCBrZXkgKHVuYWxpZ25lZCkKKworCSMgaW5wdXQgdHJhbnNmb3JtCisJbW92ZHFhCSV4bW0wLAkleG1tMworCWxlYQkuTGtfaXB0KCVyaXApLCAlcjExCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtCisJbW92ZHFhCSV4bW0wLAkleG1tNworCisJbGVhCS5Ma19zciglcmlwKSwlcjEwCisJdGVzdAklcmN4LAklcmN4CisJam56CS5Mc2NoZWR1bGVfYW1fZGVjcnlwdGluZworCisJIyBlbmNyeXB0aW5nLCBvdXRwdXQgemVyb3RoIHJvdW5kIGtleSBhZnRlciB0cmFuc2Zvcm0KKwltb3ZkcXUJJXhtbTAsCSglcmR4KQorCWptcAkuTHNjaGVkdWxlX2dvCisKKy5Mc2NoZWR1bGVfYW1fZGVjcnlwdGluZzoKKwkjIGRlY3J5cHRpbmcsIG91dHB1dCB6ZXJvdGggcm91bmQga2V5IGFmdGVyIHNoaWZ0cm93cworCW1vdmRxYQkoJXI4LCVyMTApLCV4bW0xCisJcHNodWZiICAleG1tMSwJJXhtbTMKKwltb3ZkcXUJJXhtbTMsCSglcmR4KQorCXhvcglcJDB4MzAsICVyOAorCisuTHNjaGVkdWxlX2dvOgorCWNtcAlcJDE5MiwJJWVzaQorCWphCS5Mc2NoZWR1bGVfMjU2CisJamUJLkxzY2hlZHVsZV8xOTIKKwkjIDEyODogZmFsbCB0aG91Z2gKKworIyMKKyMjICAuc2NoZWR1bGVfMTI4CisjIworIyMgIDEyOC1iaXQgc3BlY2lmaWMgcGFydCBvZiBrZXkgc2NoZWR1bGUuCisjIworIyMgIFRoaXMgc2NoZWR1bGUgaXMgcmVhbGx5IHNpbXBsZSwgYmVjYXVzZSBhbGwgaXRzIHBhcnRzCisjIyAgYXJlIGFjY29tcGxpc2hlZCBieSB0aGUgc3Vicm91dGluZXMuCisjIworLkxzY2hlZHVsZV8xMjg6CisJbW92CVwkMTAsICVlc2kKKwkKKy5Mb29wX3NjaGVkdWxlXzEyODoKKwljYWxsIAlfdnBhZXNfc2NoZWR1bGVfcm91bmQKKwlkZWMJJXJzaQorCWp6IAkuTHNjaGVkdWxlX21hbmdsZV9sYXN0CisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlCSMgd3JpdGUgb3V0cHV0CisJam1wIAkuTG9vcF9zY2hlZHVsZV8xMjgKKworIyMKKyMjICAuYWVzX3NjaGVkdWxlXzE5MgorIyMKKyMjICAxOTItYml0IHNwZWNpZmljIHBhcnQgb2Yga2V5IHNjaGVkdWxlLgorIyMKKyMjICBUaGUgbWFpbiBib2R5IG9mIHRoaXMgc2NoZWR1bGUgaXMgdGhlIHNhbWUgYXMgdGhlIDEyOC1iaXQKKyMjICBzY2hlZHVsZSwgYnV0IHdpdGggbW9yZSBzbWVhcmluZy4gIFRoZSBsb25nLCBoaWdoIHNpZGUgaXMKKyMjICBzdG9yZWQgaW4gJXhtbTcgYXMgYmVmb3JlLCBhbmQgdGhlIHNob3J0LCBsb3cgc2lkZSBpcyBpbgorIyMgIHRoZSBoaWdoIGJpdHMgb2YgJXhtbTYuCisjIworIyMgIFRoaXMgc2NoZWR1bGUgaXMgc29tZXdoYXQgbmFzdGllciwgaG93ZXZlciwgYmVjYXVzZSBlYWNoCisjIyAgcm91bmQgcHJvZHVjZXMgMTkyIGJpdHMgb2Yga2V5IG1hdGVyaWFsLCBvciAxLjUgcm91bmQga2V5cy4KKyMjICBUaGVyZWZvcmUsIG9uIGVhY2ggY3ljbGUgd2UgZG8gMiByb3VuZHMgYW5kIHByb2R1Y2UgMyByb3VuZAorIyMgIGtleXMuCisjIworLmFsaWduCTE2CisuTHNjaGVkdWxlXzE5MjoKKwltb3ZkcXUJOCglcmRpKSwleG1tMAkJIyBsb2FkIGtleSBwYXJ0IDIgKHZlcnkgdW5hbGlnbmVkKQorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX3RyYW5zZm9ybQkjIGlucHV0IHRyYW5zZm9ybQorCW1vdmRxYQkleG1tMCwJJXhtbTYJCSMgc2F2ZSBzaG9ydCBwYXJ0CisJcHhvcgkleG1tNCwJJXhtbTQJCSMgY2xlYXIgNAorCW1vdmhscHMJJXhtbTQsCSV4bW02CQkjIGNsb2JiZXIgbG93IHNpZGUgd2l0aCB6ZXJvcworCW1vdglcJDQsCSVlc2kKKworLkxvb3Bfc2NoZWR1bGVfMTkyOgorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX3JvdW5kCisJcGFsaWducglcJDgsJXhtbTYsJXhtbTAJCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlCSMgc2F2ZSBrZXkgbgorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlXzE5Ml9zbWVhcgorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX21hbmdsZQkjIHNhdmUga2V5IG4rMQorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX3JvdW5kCisJZGVjCSVyc2kKKwlqeiAJLkxzY2hlZHVsZV9tYW5nbGVfbGFzdAorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX21hbmdsZQkjIHNhdmUga2V5IG4rMgorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlXzE5Ml9zbWVhcgorCWptcAkuTG9vcF9zY2hlZHVsZV8xOTIKKworIyMKKyMjICAuYWVzX3NjaGVkdWxlXzI1NgorIyMKKyMjICAyNTYtYml0IHNwZWNpZmljIHBhcnQgb2Yga2V5IHNjaGVkdWxlLgorIyMKKyMjICBUaGUgc3RydWN0dXJlIGhlcmUgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSAxMjgtYml0CisjIyAgc2NoZWR1bGUsIGJ1dCB3aXRoIGFuIGFkZGl0aW9uYWwgImxvdyBzaWRlIiBpbgorIyMgICV4bW02LiAgVGhlIGxvdyBzaWRlJ3Mgcm91bmRzIGFyZSB0aGUgc2FtZSBhcyB0aGUKKyMjICBoaWdoIHNpZGUncywgZXhjZXB0IG5vIHJjb24gYW5kIG5vIHJvdGF0aW9uLgorIyMKKy5hbGlnbgkxNgorLkxzY2hlZHVsZV8yNTY6CisJbW92ZHF1CTE2KCVyZGkpLCV4bW0wCQkjIGxvYWQga2V5IHBhcnQgMiAodW5hbGlnbmVkKQorCWNhbGwJX3ZwYWVzX3NjaGVkdWxlX3RyYW5zZm9ybQkjIGlucHV0IHRyYW5zZm9ybQorCW1vdglcJDcsICVlc2kKKwkKKy5Mb29wX3NjaGVkdWxlXzI1NjoKKwljYWxsCV92cGFlc19zY2hlZHVsZV9tYW5nbGUJIyBvdXRwdXQgbG93IHJlc3VsdAorCW1vdmRxYQkleG1tMCwJJXhtbTYJCSMgc2F2ZSBjdXJfbG8gaW4geG1tNgorCisJIyBoaWdoIHJvdW5kCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfcm91bmQKKwlkZWMJJXJzaQorCWp6IAkuTHNjaGVkdWxlX21hbmdsZV9sYXN0CisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlCQorCisJIyBsb3cgcm91bmQuIHN3YXAgeG1tNyBhbmQgeG1tNgorCXBzaHVmZAlcJDB4RkYsCSV4bW0wLAkleG1tMAorCW1vdmRxYQkleG1tNywJJXhtbTUKKwltb3ZkcWEJJXhtbTYsCSV4bW03CisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfbG93X3JvdW5kCisJbW92ZHFhCSV4bW01LAkleG1tNworCQorCWptcAkuTG9vcF9zY2hlZHVsZV8yNTYKKworCQorIyMKKyMjICAuYWVzX3NjaGVkdWxlX21hbmdsZV9sYXN0CisjIworIyMgIE1hbmdsZXIgZm9yIGxhc3Qgcm91bmQgb2Yga2V5IHNjaGVkdWxlCisjIyAgTWFuZ2xlcyAleG1tMAorIyMgICAgd2hlbiBlbmNyeXB0aW5nLCBvdXRwdXRzIG91dCgleG1tMCkgXiA2MworIyMgICAgd2hlbiBkZWNyeXB0aW5nLCBvdXRwdXRzIHVuc2tldygleG1tMCkKKyMjCisjIyAgQWx3YXlzIGNhbGxlZCByaWdodCBiZWZvcmUgcmV0dXJuLi4uIGp1bXBzIHRvIGNsZWFudXAgYW5kIGV4aXRzCisjIworLmFsaWduCTE2CisuTHNjaGVkdWxlX21hbmdsZV9sYXN0OgorCSMgc2NoZWR1bGUgbGFzdCByb3VuZCBrZXkgZnJvbSB4bW0wCisJbGVhCS5Ma19kZXNrZXcoJXJpcCksJXIxMQkjIHByZXBhcmUgdG8gZGVza2V3CisJdGVzdAklcmN4LCAJJXJjeAorCWpuegkuTHNjaGVkdWxlX21hbmdsZV9sYXN0X2RlYworCisJIyBlbmNyeXB0aW5nCisJbW92ZHFhCSglcjgsJXIxMCksJXhtbTEKKwlwc2h1ZmIJJXhtbTEsCSV4bW0wCQkjIG91dHB1dCBwZXJtdXRlCisJbGVhCS5Ma19vcHQoJXJpcCksCSVyMTEJIyBwcmVwYXJlIHRvIG91dHB1dCB0cmFuc2Zvcm0KKwlhZGQJXCQzMiwJJXJkeAorCisuTHNjaGVkdWxlX21hbmdsZV9sYXN0X2RlYzoKKwlhZGQJXCQtMTYsCSVyZHgKKwlweG9yCS5Ma19zNjMoJXJpcCksCSV4bW0wCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtICMgb3V0cHV0IHRyYW5zZm9ybQorCW1vdmRxdQkleG1tMCwJKCVyZHgpCQkjIHNhdmUgbGFzdCBrZXkKKworCSMgY2xlYW51cAorCXB4b3IJJXhtbTAsICAleG1tMAorCXB4b3IJJXhtbTEsICAleG1tMQorCXB4b3IJJXhtbTIsICAleG1tMgorCXB4b3IJJXhtbTMsICAleG1tMworCXB4b3IJJXhtbTQsICAleG1tNAorCXB4b3IJJXhtbTUsICAleG1tNQorCXB4b3IJJXhtbTYsICAleG1tNgorCXB4b3IJJXhtbTcsICAleG1tNworCXJldAorLnNpemUJX3ZwYWVzX3NjaGVkdWxlX2NvcmUsLi1fdnBhZXNfc2NoZWR1bGVfY29yZQorCisjIworIyMgIC5hZXNfc2NoZWR1bGVfMTkyX3NtZWFyCisjIworIyMgIFNtZWFyIHRoZSBzaG9ydCwgbG93IHNpZGUgaW4gdGhlIDE5Mi1iaXQga2V5IHNjaGVkdWxlLgorIyMKKyMjICBJbnB1dHM6CisjIyAgICAleG1tNzogaGlnaCBzaWRlLCBiICBhICB4ICB5CisjIyAgICAleG1tNjogIGxvdyBzaWRlLCBkICBjICAwICAwCisjIyAgICAleG1tMTM6IDAKKyMjCisjIyAgT3V0cHV0czoKKyMjICAgICV4bW02OiBiK2MrZCAgYitjICAwICAwCisjIyAgICAleG1tMDogYitjK2QgIGIrYyAgYiAgYQorIyMKKy50eXBlCV92cGFlc19zY2hlZHVsZV8xOTJfc21lYXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitfdnBhZXNfc2NoZWR1bGVfMTkyX3NtZWFyOgorCXBzaHVmZAlcJDB4ODAsCSV4bW02LAkleG1tMAkjIGQgYyAwIDAgLT4gYyAwIDAgMAorCXB4b3IJJXhtbTAsCSV4bW02CQkjIC0+IGMrZCBjIDAgMAorCXBzaHVmZAlcJDB4RkUsCSV4bW03LAkleG1tMAkjIGIgYSBfIF8gLT4gYiBiIGIgYQorCXB4b3IJJXhtbTAsCSV4bW02CQkjIC0+IGIrYytkIGIrYyBiIGEKKwltb3ZkcWEJJXhtbTYsCSV4bW0wCisJcHhvcgkleG1tMSwJJXhtbTEKKwltb3ZobHBzCSV4bW0xLAkleG1tNgkJIyBjbG9iYmVyIGxvdyBzaWRlIHdpdGggemVyb3MKKwlyZXQKKy5zaXplCV92cGFlc19zY2hlZHVsZV8xOTJfc21lYXIsLi1fdnBhZXNfc2NoZWR1bGVfMTkyX3NtZWFyCisKKyMjCisjIyAgLmFlc19zY2hlZHVsZV9yb3VuZAorIyMKKyMjICBSdW5zIG9uZSBtYWluIHJvdW5kIG9mIHRoZSBrZXkgc2NoZWR1bGUgb24gJXhtbTAsICV4bW03CisjIworIyMgIFNwZWNpZmljYWxseSwgcnVucyBzdWJieXRlcyBvbiB0aGUgaGlnaCBkd29yZCBvZiAleG1tMAorIyMgIHRoZW4gcm90YXRlcyBpdCBieSBvbmUgYnl0ZSBhbmQgeG9ycyBpbnRvIHRoZSBsb3cgZHdvcmQgb2YKKyMjICAleG1tNy4KKyMjCisjIyAgQWRkcyByY29uIGZyb20gbG93IGJ5dGUgb2YgJXhtbTgsIHRoZW4gcm90YXRlcyAleG1tOCBmb3IKKyMjICBuZXh0IHJjb24uCisjIworIyMgIFNtZWFycyB0aGUgZHdvcmRzIG9mICV4bW03IGJ5IHhvcmluZyB0aGUgbG93IGludG8gdGhlCisjIyAgc2Vjb25kIGxvdywgcmVzdWx0IGludG8gdGhpcmQsIHJlc3VsdCBpbnRvIGhpZ2hlc3QuCisjIworIyMgIFJldHVybnMgcmVzdWx0cyBpbiAleG1tNyA9ICV4bW0wLgorIyMgIENsb2JiZXJzICV4bW0xLSV4bW00LCAlcjExLgorIyMKKy50eXBlCV92cGFlc19zY2hlZHVsZV9yb3VuZCxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK192cGFlc19zY2hlZHVsZV9yb3VuZDoKKwkjIGV4dHJhY3QgcmNvbiBmcm9tIHhtbTgKKwlweG9yCSV4bW0xLAkleG1tMQorCXBhbGlnbnIJXCQxNSwJJXhtbTgsCSV4bW0xCisJcGFsaWducglcJDE1LAkleG1tOCwJJXhtbTgKKwlweG9yCSV4bW0xLAkleG1tNworCisJIyByb3RhdGUKKwlwc2h1ZmQJXCQweEZGLAkleG1tMCwJJXhtbTAKKwlwYWxpZ25yCVwkMSwJJXhtbTAsCSV4bW0wCisJCisJIyBmYWxsIHRocm91Z2guLi4KKwkKKwkjIGxvdyByb3VuZDogc2FtZSBhcyBoaWdoIHJvdW5kLCBidXQgbm8gcm90YXRpb24gYW5kIG5vIHJjb24uCitfdnBhZXNfc2NoZWR1bGVfbG93X3JvdW5kOgorCSMgc21lYXIgeG1tNworCW1vdmRxYQkleG1tNywJJXhtbTEKKwlwc2xsZHEJXCQ0LAkleG1tNworCXB4b3IJJXhtbTEsCSV4bW03CisJbW92ZHFhCSV4bW03LAkleG1tMQorCXBzbGxkcQlcJDgsCSV4bW03CisJcHhvcgkleG1tMSwJJXhtbTcKKwlweG9yCS5Ma19zNjMoJXJpcCksICV4bW03CisKKwkjIHN1YmJ5dGVzCisJbW92ZHFhICAleG1tOSwgCSV4bW0xCisJcGFuZG4JJXhtbTAsIAkleG1tMQorCXBzcmxkCVwkNCwgICAgJXhtbTEJCSMgMSA9IGkKKwlwYW5kCSV4bW05LCAJJXhtbTAJCSMgMCA9IGsKKwltb3ZkcWEJJXhtbTExLCAleG1tMgkJIyAyIDogYS9rCisJcHNodWZiICAleG1tMCwgICV4bW0yCQkjIDIgPSBhL2sKKwlweG9yCSV4bW0xLAkleG1tMAkJIyAwID0gagorCW1vdmRxYQkleG1tMTAsCSV4bW0zCQkjIDMgOiAxL2kKKwlwc2h1ZmIgICV4bW0xLCAJJXhtbTMJCSMgMyA9IDEvaQorCXB4b3IJJXhtbTIsIAkleG1tMwkJIyAzID0gaWFrID0gMS9pICsgYS9rCisJbW92ZHFhCSV4bW0xMCwJJXhtbTQJCSMgNCA6IDEvagorCXBzaHVmYgkleG1tMCwgCSV4bW00CQkjIDQgPSAxL2oKKwlweG9yCSV4bW0yLCAJJXhtbTQJCSMgNCA9IGphayA9IDEvaiArIGEvaworCW1vdmRxYQkleG1tMTAsCSV4bW0yCQkjIDIgOiAxL2lhaworCXBzaHVmYiAgJXhtbTMsCSV4bW0yCQkjIDIgPSAxL2lhaworCXB4b3IJJXhtbTAsIAkleG1tMgkJIyAyID0gaW8KKwltb3ZkcWEJJXhtbTEwLCAleG1tMwkJIyAzIDogMS9qYWsKKwlwc2h1ZmIgICV4bW00LCAgJXhtbTMJCSMgMyA9IDEvamFrCisJcHhvcgkleG1tMSwgICV4bW0zCQkjIDMgPSBqbworCW1vdmRxYQkleG1tMTMsICV4bW00CQkjIDQgOiBzYm91CisJcHNodWZiICAleG1tMiwgICV4bW00CQkjIDQgPSBzYm91CisJbW92ZHFhCSV4bW0xMiwgJXhtbTAJCSMgMCA6IHNib3QKKwlwc2h1ZmIgICV4bW0zLAkleG1tMAkJIyAwID0gc2IxdAorCXB4b3IJJXhtbTQsIAkleG1tMAkJIyAwID0gc2JveCBvdXRwdXQKKworCSMgYWRkIGluIHNtZWFyZWQgc3R1ZmYKKwlweG9yCSV4bW03LAkleG1tMAkKKwltb3ZkcWEJJXhtbTAsCSV4bW03CisJcmV0Cisuc2l6ZQlfdnBhZXNfc2NoZWR1bGVfcm91bmQsLi1fdnBhZXNfc2NoZWR1bGVfcm91bmQKKworIyMKKyMjICAuYWVzX3NjaGVkdWxlX3RyYW5zZm9ybQorIyMKKyMjICBMaW5lYXItdHJhbnNmb3JtICV4bW0wIGFjY29yZGluZyB0byB0YWJsZXMgYXQgKCVyMTEpCisjIworIyMgIFJlcXVpcmVzIHRoYXQgJXhtbTkgPSAweDBGMEYuLi4gYXMgaW4gcHJlaGVhdAorIyMgIE91dHB1dCBpbiAleG1tMAorIyMgIENsb2JiZXJzICV4bW0xLCAleG1tMgorIyMKKy50eXBlCV92cGFlc19zY2hlZHVsZV90cmFuc2Zvcm0sXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitfdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtOgorCW1vdmRxYQkleG1tOSwJJXhtbTEKKwlwYW5kbgkleG1tMCwJJXhtbTEKKwlwc3JsZAlcJDQsCSV4bW0xCisJcGFuZAkleG1tOSwJJXhtbTAKKwltb3ZkcWEJKCVyMTEpLCAleG1tMiAJIyBsbworCXBzaHVmYgkleG1tMCwJJXhtbTIKKwltb3ZkcWEJMTYoJXIxMSksICV4bW0wICMgaGkKKwlwc2h1ZmIJJXhtbTEsCSV4bW0wCisJcHhvcgkleG1tMiwJJXhtbTAKKwlyZXQKKy5zaXplCV92cGFlc19zY2hlZHVsZV90cmFuc2Zvcm0sLi1fdnBhZXNfc2NoZWR1bGVfdHJhbnNmb3JtCisKKyMjCisjIyAgLmFlc19zY2hlZHVsZV9tYW5nbGUKKyMjCisjIyAgTWFuZ2xlIHhtbTAgZnJvbSAoYmFzaXMtdHJhbnNmb3JtZWQpIHN0YW5kYXJkIHZlcnNpb24KKyMjICB0byBvdXIgdmVyc2lvbi4KKyMjCisjIyAgT24gZW5jcnlwdCwKKyMjICAgIHhvciB3aXRoIDB4NjMKKyMjICAgIG11bHRpcGx5IGJ5IGNpcmN1bGFudCAwLDEsMSwxCisjIyAgICBhcHBseSBzaGlmdHJvd3MgdHJhbnNmb3JtCisjIworIyMgIE9uIGRlY3J5cHQsCisjIyAgICB4b3Igd2l0aCAweDYzCisjIyAgICBtdWx0aXBseSBieSAiaW52ZXJzZSBtaXhjb2x1bW5zIiBjaXJjdWxhbnQgRSxCLEQsOQorIyMgICAgZGVza2V3CisjIyAgICBhcHBseSBzaGlmdHJvd3MgdHJhbnNmb3JtCisjIworIyMKKyMjICBXcml0ZXMgb3V0IHRvICglcmR4KSwgYW5kIGluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBpdAorIyMgIEtlZXBzIHRyYWNrIG9mIHJvdW5kIG51bWJlciBtb2QgNCBpbiAlcjgKKyMjICBQcmVzZXJ2ZXMgeG1tMAorIyMgIENsb2JiZXJzIHhtbTEteG1tNQorIyMKKy50eXBlCV92cGFlc19zY2hlZHVsZV9tYW5nbGUsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitfdnBhZXNfc2NoZWR1bGVfbWFuZ2xlOgorCW1vdmRxYQkleG1tMCwJJXhtbTQJIyBzYXZlIHhtbTAgZm9yIGxhdGVyCisJbW92ZHFhCS5Ma19tY19mb3J3YXJkKCVyaXApLCV4bW01CisJdGVzdAklcmN4LCAJJXJjeAorCWpuegkuTHNjaGVkdWxlX21hbmdsZV9kZWMKKworCSMgZW5jcnlwdGluZworCWFkZAlcJDE2LAklcmR4CisJcHhvcgkuTGtfczYzKCVyaXApLCV4bW00CisJcHNodWZiCSV4bW01LAkleG1tNAorCW1vdmRxYQkleG1tNCwJJXhtbTMKKwlwc2h1ZmIJJXhtbTUsCSV4bW00CisJcHhvcgkleG1tNCwJJXhtbTMKKwlwc2h1ZmIJJXhtbTUsCSV4bW00CisJcHhvcgkleG1tNCwJJXhtbTMKKworCWptcAkuTHNjaGVkdWxlX21hbmdsZV9ib3RoCisuYWxpZ24JMTYKKy5Mc2NoZWR1bGVfbWFuZ2xlX2RlYzoKKwkjIGludmVyc2UgbWl4IGNvbHVtbnMKKwlsZWEJLkxrX2Rrc2QoJXJpcCksJXIxMQorCW1vdmRxYQkleG1tOSwJJXhtbTEKKwlwYW5kbgkleG1tNCwJJXhtbTEKKwlwc3JsZAlcJDQsCSV4bW0xCSMgMSA9IGhpCisJcGFuZAkleG1tOSwJJXhtbTQJIyA0ID0gbG8KKworCW1vdmRxYQkweDAwKCVyMTEpLCAleG1tMgorCXBzaHVmYgkleG1tNCwJJXhtbTIKKwltb3ZkcWEJMHgxMCglcjExKSwgJXhtbTMKKwlwc2h1ZmIJJXhtbTEsCSV4bW0zCisJcHhvcgkleG1tMiwJJXhtbTMKKwlwc2h1ZmIJJXhtbTUsCSV4bW0zCisKKwltb3ZkcWEJMHgyMCglcjExKSwgJXhtbTIKKwlwc2h1ZmIJJXhtbTQsCSV4bW0yCisJcHhvcgkleG1tMywJJXhtbTIKKwltb3ZkcWEJMHgzMCglcjExKSwgJXhtbTMKKwlwc2h1ZmIJJXhtbTEsCSV4bW0zCisJcHhvcgkleG1tMiwJJXhtbTMKKwlwc2h1ZmIJJXhtbTUsCSV4bW0zCisKKwltb3ZkcWEJMHg0MCglcjExKSwgJXhtbTIKKwlwc2h1ZmIJJXhtbTQsCSV4bW0yCisJcHhvcgkleG1tMywJJXhtbTIKKwltb3ZkcWEJMHg1MCglcjExKSwgJXhtbTMKKwlwc2h1ZmIJJXhtbTEsCSV4bW0zCisJcHhvcgkleG1tMiwJJXhtbTMKKwlwc2h1ZmIJJXhtbTUsCSV4bW0zCisKKwltb3ZkcWEJMHg2MCglcjExKSwgJXhtbTIKKwlwc2h1ZmIJJXhtbTQsCSV4bW0yCisJcHhvcgkleG1tMywJJXhtbTIKKwltb3ZkcWEJMHg3MCglcjExKSwgJXhtbTMKKwlwc2h1ZmIJJXhtbTEsCSV4bW0zCisJcHhvcgkleG1tMiwJJXhtbTMKKworCWFkZAlcJC0xNiwJJXJkeAorCisuTHNjaGVkdWxlX21hbmdsZV9ib3RoOgorCW1vdmRxYQkoJXI4LCVyMTApLCV4bW0xCisJcHNodWZiCSV4bW0xLCV4bW0zCisJYWRkCVwkLTE2LAklcjgKKwlhbmQJXCQweDMwLAklcjgKKwltb3ZkcXUJJXhtbTMsCSglcmR4KQorCXJldAorLnNpemUJX3ZwYWVzX3NjaGVkdWxlX21hbmdsZSwuLV92cGFlc19zY2hlZHVsZV9tYW5nbGUKKworIworIyBJbnRlcmZhY2UgdG8gT3BlblNTTAorIworLmdsb2JsCSR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXkKKy50eXBlCSR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXksXEBmdW5jdGlvbiwzCisuYWxpZ24JMTYKKyR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXk6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwlsZWEJLTB4YjgoJXJzcCksJXJzcAorCW1vdmFwcwkleG1tNiwweDEwKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MjAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsMHgzMCglcnNwKQorCW1vdmFwcwkleG1tOSwweDQwKCVyc3ApCisJbW92YXBzCSV4bW0xMCwweDUwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwweDYwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwweDcwKCVyc3ApCisJbW92YXBzCSV4bW0xMywweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwweGEwKCVyc3ApCisuTGVuY19rZXlfYm9keToKK19fXworJGNvZGUuPTw8X19fOworCW1vdgklZXNpLCVlYXgKKwlzaHIJXCQ1LCVlYXgKKwlhZGQJXCQ1LCVlYXgKKwltb3YJJWVheCwyNDAoJXJkeCkJIyBBRVNfS0VZLT5yb3VuZHMgPSBuYml0cy8zMis1OworCisJbW92CVwkMCwlZWN4CisJbW92CVwkMHgzMCwlcjhkCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfY29yZQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTB4MTAoJXJzcCksJXhtbTYKKwltb3ZhcHMJMHgyMCglcnNwKSwleG1tNworCW1vdmFwcwkweDMwKCVyc3ApLCV4bW04CisJbW92YXBzCTB4NDAoJXJzcCksJXhtbTkKKwltb3ZhcHMJMHg1MCglcnNwKSwleG1tMTAKKwltb3ZhcHMJMHg2MCglcnNwKSwleG1tMTEKKwltb3ZhcHMJMHg3MCglcnNwKSwleG1tMTIKKwltb3ZhcHMJMHg4MCglcnNwKSwleG1tMTMKKwltb3ZhcHMJMHg5MCglcnNwKSwleG1tMTQKKwltb3ZhcHMJMHhhMCglcnNwKSwleG1tMTUKKwlsZWEJMHhiOCglcnNwKSwlcnNwCisuTGVuY19rZXlfZXBpbG9ndWU6CitfX18KKyRjb2RlLj08PF9fXzsKKwl4b3IJJWVheCwlZWF4CisJcmV0Cisuc2l6ZQkke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5LC4tJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleQorCisuZ2xvYmwJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorLnR5cGUJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSxcQGZ1bmN0aW9uLDMKKy5hbGlnbgkxNgorJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleToKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCWxlYQktMHhiOCglcnNwKSwlcnNwCisJbW92YXBzCSV4bW02LDB4MTAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsMHgyMCglcnNwKQorCW1vdmFwcwkleG1tOCwweDMwKCVyc3ApCisJbW92YXBzCSV4bW05LDB4NDAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLDB4NTAoJXJzcCkKKwltb3ZhcHMJJXhtbTExLDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTEyLDB4NzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLDB4ODAoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LDB4OTAoJXJzcCkKKwltb3ZhcHMJJXhtbTE1LDB4YTAoJXJzcCkKKy5MZGVjX2tleV9ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92CSVlc2ksJWVheAorCXNocglcJDUsJWVheAorCWFkZAlcJDUsJWVheAorCW1vdgklZWF4LDI0MCglcmR4KQkjIEFFU19LRVktPnJvdW5kcyA9IG5iaXRzLzMyKzU7CisJc2hsCVwkNCwlZWF4CisJbGVhCTE2KCVyZHgsJXJheCksJXJkeAorCisJbW92CVwkMSwlZWN4CisJbW92CSVlc2ksJXI4ZAorCXNocglcJDEsJXI4ZAorCWFuZAlcJDMyLCVyOGQKKwl4b3IJXCQzMiwlcjhkCSMgbmJpdHM9PTE5Mj8wOjMyCisJY2FsbAlfdnBhZXNfc2NoZWR1bGVfY29yZQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCTB4MTAoJXJzcCksJXhtbTYKKwltb3ZhcHMJMHgyMCglcnNwKSwleG1tNworCW1vdmFwcwkweDMwKCVyc3ApLCV4bW04CisJbW92YXBzCTB4NDAoJXJzcCksJXhtbTkKKwltb3ZhcHMJMHg1MCglcnNwKSwleG1tMTAKKwltb3ZhcHMJMHg2MCglcnNwKSwleG1tMTEKKwltb3ZhcHMJMHg3MCglcnNwKSwleG1tMTIKKwltb3ZhcHMJMHg4MCglcnNwKSwleG1tMTMKKwltb3ZhcHMJMHg5MCglcnNwKSwleG1tMTQKKwltb3ZhcHMJMHhhMCglcnNwKSwleG1tMTUKKwlsZWEJMHhiOCglcnNwKSwlcnNwCisuTGRlY19rZXlfZXBpbG9ndWU6CitfX18KKyRjb2RlLj08PF9fXzsKKwl4b3IJJWVheCwlZWF4CisJcmV0Cisuc2l6ZQkke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5LC4tJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorCisuZ2xvYmwJJHtQUkVGSVh9X2VuY3J5cHQKKy50eXBlCSR7UFJFRklYfV9lbmNyeXB0LFxAZnVuY3Rpb24sMworLmFsaWduCTE2Ciske1BSRUZJWH1fZW5jcnlwdDoKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCWxlYQktMHhiOCglcnNwKSwlcnNwCisJbW92YXBzCSV4bW02LDB4MTAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsMHgyMCglcnNwKQorCW1vdmFwcwkleG1tOCwweDMwKCVyc3ApCisJbW92YXBzCSV4bW05LDB4NDAoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLDB4NTAoJXJzcCkKKwltb3ZhcHMJJXhtbTExLDB4NjAoJXJzcCkKKwltb3ZhcHMJJXhtbTEyLDB4NzAoJXJzcCkKKwltb3ZhcHMJJXhtbTEzLDB4ODAoJXJzcCkKKwltb3ZhcHMJJXhtbTE0LDB4OTAoJXJzcCkKKwltb3ZhcHMJJXhtbTE1LDB4YTAoJXJzcCkKKy5MZW5jX2JvZHk6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3ZkcXUJKCVyZGkpLCV4bW0wCisJY2FsbAlfdnBhZXNfcHJlaGVhdAorCWNhbGwJX3ZwYWVzX2VuY3J5cHRfY29yZQorCW1vdmRxdQkleG1tMCwoJXJzaSkKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDEwKCVyc3ApLCV4bW02CisJbW92YXBzCTB4MjAoJXJzcCksJXhtbTcKKwltb3ZhcHMJMHgzMCglcnNwKSwleG1tOAorCW1vdmFwcwkweDQwKCVyc3ApLCV4bW05CisJbW92YXBzCTB4NTAoJXJzcCksJXhtbTEwCisJbW92YXBzCTB4NjAoJXJzcCksJXhtbTExCisJbW92YXBzCTB4NzAoJXJzcCksJXhtbTEyCisJbW92YXBzCTB4ODAoJXJzcCksJXhtbTEzCisJbW92YXBzCTB4OTAoJXJzcCksJXhtbTE0CisJbW92YXBzCTB4YTAoJXJzcCksJXhtbTE1CisJbGVhCTB4YjgoJXJzcCksJXJzcAorLkxlbmNfZXBpbG9ndWU6CitfX18KKyRjb2RlLj08PF9fXzsKKwlyZXQKKy5zaXplCSR7UFJFRklYfV9lbmNyeXB0LC4tJHtQUkVGSVh9X2VuY3J5cHQKKworLmdsb2JsCSR7UFJFRklYfV9kZWNyeXB0CisudHlwZQkke1BSRUZJWH1fZGVjcnlwdCxcQGZ1bmN0aW9uLDMKKy5hbGlnbgkxNgorJHtQUkVGSVh9X2RlY3J5cHQ6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwlsZWEJLTB4YjgoJXJzcCksJXJzcAorCW1vdmFwcwkleG1tNiwweDEwKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MjAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsMHgzMCglcnNwKQorCW1vdmFwcwkleG1tOSwweDQwKCVyc3ApCisJbW92YXBzCSV4bW0xMCwweDUwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwweDYwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwweDcwKCVyc3ApCisJbW92YXBzCSV4bW0xMywweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwweGEwKCVyc3ApCisuTGRlY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92ZHF1CSglcmRpKSwleG1tMAorCWNhbGwJX3ZwYWVzX3ByZWhlYXQKKwljYWxsCV92cGFlc19kZWNyeXB0X2NvcmUKKwltb3ZkcXUJJXhtbTAsKCVyc2kpCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3ZhcHMJMHgxMCglcnNwKSwleG1tNgorCW1vdmFwcwkweDIwKCVyc3ApLCV4bW03CisJbW92YXBzCTB4MzAoJXJzcCksJXhtbTgKKwltb3ZhcHMJMHg0MCglcnNwKSwleG1tOQorCW1vdmFwcwkweDUwKCVyc3ApLCV4bW0xMAorCW1vdmFwcwkweDYwKCVyc3ApLCV4bW0xMQorCW1vdmFwcwkweDcwKCVyc3ApLCV4bW0xMgorCW1vdmFwcwkweDgwKCVyc3ApLCV4bW0xMworCW1vdmFwcwkweDkwKCVyc3ApLCV4bW0xNAorCW1vdmFwcwkweGEwKCVyc3ApLCV4bW0xNQorCWxlYQkweGI4KCVyc3ApLCVyc3AKKy5MZGVjX2VwaWxvZ3VlOgorX19fCiskY29kZS49PDxfX187CisJcmV0Cisuc2l6ZQkke1BSRUZJWH1fZGVjcnlwdCwuLSR7UFJFRklYfV9kZWNyeXB0CitfX18KK3sKK215ICgkaW5wLCRvdXQsJGxlbiwka2V5LCRpdnAsJGVuYyk9KCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4IiwiJXI4IiwiJXI5Iik7CisjIHZvaWQgQUVTX2NiY19lbmNyeXB0IChjb25zdCB2b2lkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hhciAqb3V0LAorIyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorIyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXZwLGNvbnN0IGludCBlbmMpOworJGNvZGUuPTw8X19fOworLmdsb2JsCSR7UFJFRklYfV9jYmNfZW5jcnlwdAorLnR5cGUJJHtQUkVGSVh9X2NiY19lbmNyeXB0LFxAZnVuY3Rpb24sNgorLmFsaWduCTE2Ciske1BSRUZJWH1fY2JjX2VuY3J5cHQ6CisJeGNoZwkka2V5LCRsZW4KK19fXworKCRsZW4sJGtleSk9KCRrZXksJGxlbik7CiskY29kZS49PDxfX187CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwlsZWEJLTB4YjgoJXJzcCksJXJzcAorCW1vdmFwcwkleG1tNiwweDEwKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MjAoJXJzcCkKKwltb3ZhcHMJJXhtbTgsMHgzMCglcnNwKQorCW1vdmFwcwkleG1tOSwweDQwKCVyc3ApCisJbW92YXBzCSV4bW0xMCwweDUwKCVyc3ApCisJbW92YXBzCSV4bW0xMSwweDYwKCVyc3ApCisJbW92YXBzCSV4bW0xMiwweDcwKCVyc3ApCisJbW92YXBzCSV4bW0xMywweDgwKCVyc3ApCisJbW92YXBzCSV4bW0xNCwweDkwKCVyc3ApCisJbW92YXBzCSV4bW0xNSwweGEwKCVyc3ApCisuTGNiY19ib2R5OgorX19fCiskY29kZS49PDxfX187CisJbW92ZHF1CSgkaXZwKSwleG1tNgkJIyBsb2FkIElWCisJc3ViCSRpbnAsJG91dAorCXN1YglcJDE2LCRsZW4KKwljYWxsCV92cGFlc19wcmVoZWF0CisJY21wCVwkMCwke2VuY31kCisJamUJLkxjYmNfZGVjX2xvb3AKKwlqbXAJLkxjYmNfZW5jX2xvb3AKKy5hbGlnbgkxNgorLkxjYmNfZW5jX2xvb3A6CisJbW92ZHF1CSgkaW5wKSwleG1tMAorCXB4b3IJJXhtbTYsJXhtbTAKKwljYWxsCV92cGFlc19lbmNyeXB0X2NvcmUKKwltb3ZkcWEJJXhtbTAsJXhtbTYKKwltb3ZkcXUJJXhtbTAsKCRvdXQsJGlucCkKKwlsZWEJMTYoJGlucCksJGlucAorCXN1YglcJDE2LCRsZW4KKwlqbmMJLkxjYmNfZW5jX2xvb3AKKwlqbXAJLkxjYmNfZG9uZQorLmFsaWduCTE2CisuTGNiY19kZWNfbG9vcDoKKwltb3ZkcXUJKCRpbnApLCV4bW0wCisJbW92ZHFhCSV4bW0wLCV4bW03CisJY2FsbAlfdnBhZXNfZGVjcnlwdF9jb3JlCisJcHhvcgkleG1tNiwleG1tMAorCW1vdmRxYQkleG1tNywleG1tNgorCW1vdmRxdQkleG1tMCwoJG91dCwkaW5wKQorCWxlYQkxNigkaW5wKSwkaW5wCisJc3ViCVwkMTYsJGxlbgorCWpuYwkuTGNiY19kZWNfbG9vcAorLkxjYmNfZG9uZToKKwltb3ZkcXUJJXhtbTYsKCRpdnApCQkjIHNhdmUgSVYKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkweDEwKCVyc3ApLCV4bW02CisJbW92YXBzCTB4MjAoJXJzcCksJXhtbTcKKwltb3ZhcHMJMHgzMCglcnNwKSwleG1tOAorCW1vdmFwcwkweDQwKCVyc3ApLCV4bW05CisJbW92YXBzCTB4NTAoJXJzcCksJXhtbTEwCisJbW92YXBzCTB4NjAoJXJzcCksJXhtbTExCisJbW92YXBzCTB4NzAoJXJzcCksJXhtbTEyCisJbW92YXBzCTB4ODAoJXJzcCksJXhtbTEzCisJbW92YXBzCTB4OTAoJXJzcCksJXhtbTE0CisJbW92YXBzCTB4YTAoJXJzcCksJXhtbTE1CisJbGVhCTB4YjgoJXJzcCksJXJzcAorLkxjYmNfZXBpbG9ndWU6CitfX18KKyRjb2RlLj08PF9fXzsKKwlyZXQKKy5zaXplCSR7UFJFRklYfV9jYmNfZW5jcnlwdCwuLSR7UFJFRklYfV9jYmNfZW5jcnlwdAorX19fCit9CiskY29kZS49PDxfX187CisjIworIyMgIF9hZXNfcHJlaGVhdAorIyMKKyMjICBGaWxscyByZWdpc3RlciAlcjEwIC0+IC5hZXNfY29uc3RzIChzbyB5b3UgY2FuIC1mUElDKQorIyMgIGFuZCAleG1tOS0leG1tMTUgYXMgc3BlY2lmaWVkIGJlbG93LgorIyMKKy50eXBlCV92cGFlc19wcmVoZWF0LFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorX3ZwYWVzX3ByZWhlYXQ6CisJbGVhCS5Ma19zMEYoJXJpcCksICVyMTAKKwltb3ZkcWEJLTB4MjAoJXIxMCksICV4bW0xMAkjIC5Ma19pbnYKKwltb3ZkcWEJLTB4MTAoJXIxMCksICV4bW0xMQkjIC5Ma19pbnYrMTYKKwltb3ZkcWEJMHgwMCglcjEwKSwgJXhtbTkJIyAuTGtfczBGCisJbW92ZHFhCTB4MzAoJXIxMCksICV4bW0xMwkjIC5Ma19zYjEKKwltb3ZkcWEJMHg0MCglcjEwKSwgJXhtbTEyCSMgLkxrX3NiMSsxNgorCW1vdmRxYQkweDUwKCVyMTApLCAleG1tMTUJIyAuTGtfc2IyCisJbW92ZHFhCTB4NjAoJXIxMCksICV4bW0xNAkjIC5Ma19zYjIrMTYKKwlyZXQKKy5zaXplCV92cGFlc19wcmVoZWF0LC4tX3ZwYWVzX3ByZWhlYXQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworIyMgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgIyMKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLnR5cGUJX3ZwYWVzX2NvbnN0cyxcQG9iamVjdAorLmFsaWduCTY0CitfdnBhZXNfY29uc3RzOgorLkxrX2ludjoJIyBpbnYsIGludmEKKwkucXVhZAkweDBFMDUwNjBGMEQwODAxODAsIDB4MDQwNzAzMDkwQTBCMEMwMgorCS5xdWFkCTB4MDEwNDBBMDYwRjBCMDc4MCwgMHgwMzBEMEUwQzAyMDUwODA5CisKKy5Ma19zMEY6CSMgczBGCisJLnF1YWQJMHgwRjBGMEYwRjBGMEYwRjBGLCAweDBGMEYwRjBGMEYwRjBGMEYKKworLkxrX2lwdDoJIyBpbnB1dCB0cmFuc2Zvcm0gKGxvLCBoaSkKKwkucXVhZAkweEMyQjJFODk4NUEyQTcwMDAsIDB4Q0FCQUUwOTA1MjIyNzgwOAorCS5xdWFkCTB4NEMwMTMwN0QzMTdDNEQwMCwgMHhDRDgwQjFGQ0IwRkRDQzgxCisKKy5Ma19zYjE6CSMgc2IxdSwgc2IxdAorCS5xdWFkCTB4QjE5QkUxOEZDQjUwM0UwMCwgMHhBNURGN0E2RTE0MkFGNTQ0CisJLnF1YWQJMHgzNjE4RDQxNUZBRTIyMzAwLCAweDNCRjdDQ0MxMEQyRUQ5RUYKKy5Ma19zYjI6CSMgc2IydSwgc2IydAorCS5xdWFkCTB4RTI3QTkzQzYwQjcxMjQwMCwgMHg1RUI3RTk1NUJDOTgyRkNECisJLnF1YWQJMHg2OUVCODg0MDBBRTEyOTAwLCAweEMyQTE2M0M4QUI4MjIzNEEKKy5Ma19zYm86CSMgc2JvdSwgc2JvdAorCS5xdWFkCTB4RDBEMjZEMTc2RkJEQzcwMCwgMHgxNUFBQkY3QUM1MDJBODc4CisJLnF1YWQJMHhDRkU0NzRBNTVGQkI2QTAwLCAweDhFMUU5MEQxNDEyQjM1RkEKKworLkxrX21jX2ZvcndhcmQ6CSMgbWNfZm9yd2FyZAorCS5xdWFkCTB4MDQwNzA2MDUwMDAzMDIwMSwgMHgwQzBGMEUwRDA4MEIwQTA5CisJLnF1YWQJMHgwODBCMEEwOTA0MDcwNjA1LCAweDAwMDMwMjAxMEMwRjBFMEQKKwkucXVhZAkweDBDMEYwRTBEMDgwQjBBMDksIDB4MDQwNzA2MDUwMDAzMDIwMQorCS5xdWFkCTB4MDAwMzAyMDEwQzBGMEUwRCwgMHgwODBCMEEwOTA0MDcwNjA1CisKKy5Ma19tY19iYWNrd2FyZDojIG1jX2JhY2t3YXJkCisJLnF1YWQJMHgwNjA1MDQwNzAyMDEwMDAzLCAweDBFMEQwQzBGMEEwOTA4MEIKKwkucXVhZAkweDAyMDEwMDAzMEUwRDBDMEYsIDB4MEEwOTA4MEIwNjA1MDQwNworCS5xdWFkCTB4MEUwRDBDMEYwQTA5MDgwQiwgMHgwNjA1MDQwNzAyMDEwMDAzCisJLnF1YWQJMHgwQTA5MDgwQjA2MDUwNDA3LCAweDAyMDEwMDAzMEUwRDBDMEYKKworLkxrX3NyOgkJIyBzcgorCS5xdWFkCTB4MDcwNjA1MDQwMzAyMDEwMCwgMHgwRjBFMEQwQzBCMEEwOTA4CisJLnF1YWQJMHgwMzBFMDkwNDBGMEEwNTAwLCAweDBCMDYwMTBDMDcwMjBEMDgKKwkucXVhZAkweDBGMDYwRDA0MEIwMjA5MDAsIDB4MDcwRTA1MEMwMzBBMDEwOAorCS5xdWFkCTB4MEIwRTAxMDQwNzBBMEQwMCwgMHgwMzA2MDkwQzBGMDIwNTA4CisKKy5Ma19yY29uOgkjIHJjb24KKwkucXVhZAkweDFGODM5MUI5QUY5REVFQjYsIDB4NzAyQTk4MDg0RDdDN0Q4MQorCisuTGtfczYzOgkjIHM2MzogYWxsIGVxdWFsIHRvIDB4NjMgdHJhbnNmb3JtZWQKKwkucXVhZAkweDVCNUI1QjVCNUI1QjVCNUIsIDB4NUI1QjVCNUI1QjVCNUI1QgorCisuTGtfb3B0OgkjIG91dHB1dCB0cmFuc2Zvcm0KKwkucXVhZAkweEZGOUY0OTI5RDZCNjYwMDAsIDB4Rjc5NzQxMjFERUJFNjgwOAorCS5xdWFkCTB4MDFFREJENTE1MEJDRUMwMCwgMHhFMTBENURCMUIwNUMwQ0UwCisKKy5Ma19kZXNrZXc6CSMgZGVza2V3IHRhYmxlczogaW52ZXJ0cyB0aGUgc2JveCdzICJza2V3IgorCS5xdWFkCTB4MDdFNEEzNDA0N0E0RTMwMCwgMHgxREZFQjk1QTVEQkVGOTFBCisJLnF1YWQJMHg1RjM2QjVEQzgzRUE2OTAwLCAweDI4NDFDMkFCRjQ5RDFFNzcKKworIyMKKyMjICBEZWNyeXB0aW9uIHN0dWZmCisjIyAgS2V5IHNjaGVkdWxlIGNvbnN0YW50cworIyMKKy5Ma19ka3NkOgkjIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlOiBpbnZza2V3IHgqRAorCS5xdWFkCTB4RkVCOTFBNURBM0U0NDcwMCwgMHgwNzQwRTNBNDVBMURCRUY5CisJLnF1YWQJMHg0MUMyNzdGNEI1MzY4MzAwLCAweDVGREM2OUVBQUIyODlEMUUKKy5Ma19ka3NiOgkjIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlOiBpbnZza2V3IHgqQgorCS5xdWFkCTB4OUE0RkNBMUY4NTUwRDUwMCwgMHgwM0Q2NTM4NjFDQzk0Qzk5CisJLnF1YWQJMHgxMTVCRURBN0I2RkM0QTAwLCAweEQ5OTMyNTZGN0UzNDgyQzgKKy5Ma19ka3NlOgkjIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlOiBpbnZza2V3IHgqRSArIDB4NjMKKwkucXVhZAkweEQ1MDMxQ0NBMUZDOUQ2MDAsIDB4NTM4NTlBNEM5OTRGNTA4NgorCS5xdWFkCTB4QTIzMTk2MDU0RkRDN0JFOCwgMHhDRDVFRjk2QTIwQjMxNDg3CisuTGtfZGtzOToJIyBkZWNyeXB0aW9uIGtleSBzY2hlZHVsZTogaW52c2tldyB4KjkKKwkucXVhZAkweEI2MTE2RkM4N0VEOUE3MDAsIDB4NEFFRDkzMzQ4MjI1NUJGQworCS5xdWFkCTB4NDU3NjUxNjIyNzE0MzMwMCwgMHg4QkI4OUZBQ0U5REFGRENFCisKKyMjCisjIyAgRGVjcnlwdGlvbiBzdHVmZgorIyMgIFJvdW5kIGZ1bmN0aW9uIGNvbnN0YW50cworIyMKKy5Ma19kaXB0OgkjIGRlY3J5cHRpb24gaW5wdXQgdHJhbnNmb3JtCisJLnF1YWQJMHgwRjUwNUIwNDBCNTQ1RjAwLCAweDE1NEE0MTFFMTE0RTQ1MUEKKwkucXVhZAkweDg2RTM4M0U2NjAwNTY1MDAsIDB4MTI3NzE3NzJGNDkxRjE5NAorCisuTGtfZHNiOToJIyBkZWNyeXB0aW9uIHNib3ggb3V0cHV0ICo5KnUsICo5KnQKKwkucXVhZAkweDg1MUMwMzUzOUE4NkQ2MDAsIDB4Q0FENTFGNTA0Rjk5NENDOQorCS5xdWFkCTB4QzAzQjE3ODlFQ0Q3NDkwMCwgMHg3MjVFMkM5RUIyRkJBNTY1CisuTGtfZHNiZDoJIyBkZWNyeXB0aW9uIHNib3ggb3V0cHV0ICpEKnUsICpEKnQKKwkucXVhZAkweDdENTdDQ0RGRTZCMUEyMDAsIDB4RjU2RTlCMTM4ODJBNDQzOQorCS5xdWFkCTB4M0NFMkZBRjcyNEM2Q0IwMCwgMHgyOTMxMTgwRDE1REVFRkQzCisuTGtfZHNiYjoJIyBkZWNyeXB0aW9uIHNib3ggb3V0cHV0ICpCKnUsICpCKnQKKwkucXVhZAkweEQwMjI2NDkyOTZCNDQyMDAsIDB4NjAyNjQ2RjZCMEYyRDQwNAorCS5xdWFkCTB4QzE5NDk4QTZDRDU5NjcwMCwgMHhGM0ZGMEMzRTMyNTVBQTZCCisuTGtfZHNiZToJIyBkZWNyeXB0aW9uIHNib3ggb3V0cHV0ICpFKnUsICpFKnQKKwkucXVhZAkweDQ2RjI5Mjk2MjZENEQwMDAsIDB4MjI0MjYwMDQ2NEI0RjZCMAorCS5xdWFkCTB4MEM1NUE2Q0RGRkFBQzEwMCwgMHg5NDY3RjM2Qjk4NTkzRTMyCisuTGtfZHNibzoJIyBkZWNyeXB0aW9uIHNib3ggZmluYWwgb3V0cHV0CisJLnF1YWQJMHgxMzg3RUE1MzdFRjk0MDAwLCAweEM3QUE2REI5RDQ5NDNFMkQKKwkucXVhZAkweDEyRDc1NjBGOTM0NDFEMDAsIDB4Q0E0QjgxNTlEOEM1OEU5QworLmFzY2l6CSJWZWN0b3IgUGVybXV0YWlvbiBBRVMgZm9yIHg4Nl82NC9TU1NFMywgTWlrZSBIYW1idXJnIChTdGFuZm9yZCBVbml2ZXJzaXR5KSIKKy5hbGlnbgk2NAorLnNpemUJX3ZwYWVzX2NvbnN0cywuLV92cGFlc19jb25zdHMKK19fXworCitpZiAoJHdpbjY0KSB7CisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQorJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCW1vdgk4KCRkaXNwKSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQorCW1vdgk1NigkZGlzcCksJXIxMQkJIyBkaXNwLT5IYW5kbGVyRGF0YQorCisJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIHByb2xvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8cHJvbG9ndWUgbGFiZWwKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCW1vdgk0KCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzFdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBlcGlsb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj1lcGlsb2d1ZSBsYWJlbAorCWphZQkuTGluX3Byb2xvZ3VlCisKKwlsZWEJMTYoJXJheCksJXJzaQkJIyAleG1tIHNhdmUgYXJlYQorCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisJbW92CVwkMjAsJWVjeAkJIyAxMCpzaXplb2YoJXhtbTApL3NpemVvZiglcmF4KQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJMHhiOCglcmF4KSwlcmF4CQkjIGFkanVzdCBzdGFjayBwb2ludGVyCisKKy5MaW5fcHJvbG9ndWU6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCRgMTIzMi84YCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKworCW1vdgkkZGlzcCwlcnNpCisJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorCW1vdgk4KCVyc2kpLCVyZHgJCSMgYXJnMiwgZGlzcC0+SW1hZ2VCYXNlCisJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorCW1vdgk0MCglcnNpKSwlcjEwCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorCW1vdgklcjEwLDMyKCVyc3ApCQkjIGFyZzUKKwltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2CisJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworCW1vdgklcmN4LDU2KCVyc3ApCQkjIGFyZzgsIChOVUxMKQorCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKworCW1vdglcJDEsJWVheAkJIyBFeGNlcHRpb25Db250aW51ZVNlYXJjaAorCWFkZAlcJDY0LCVyc3AKKwlwb3BmcQorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcmRpCisJcG9wCSVyc2kKKwlyZXQKKy5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luXyR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXkKKwkucnZhCS5MU0VIX2VuZF8ke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5CisJLnJ2YQkuTFNFSF9pbmZvXyR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXkKKworCS5ydmEJLkxTRUhfYmVnaW5fJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorCS5ydmEJLkxTRUhfZW5kXyR7UFJFRklYfV9zZXRfZGVjcnlwdF9rZXkKKwkucnZhCS5MU0VIX2luZm9fJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorCisJLnJ2YQkuTFNFSF9iZWdpbl8ke1BSRUZJWH1fZW5jcnlwdAorCS5ydmEJLkxTRUhfZW5kXyR7UFJFRklYfV9lbmNyeXB0CisJLnJ2YQkuTFNFSF9pbmZvXyR7UFJFRklYfV9lbmNyeXB0CisKKwkucnZhCS5MU0VIX2JlZ2luXyR7UFJFRklYfV9kZWNyeXB0CisJLnJ2YQkuTFNFSF9lbmRfJHtQUkVGSVh9X2RlY3J5cHQKKwkucnZhCS5MU0VIX2luZm9fJHtQUkVGSVh9X2RlY3J5cHQKKworCS5ydmEJLkxTRUhfYmVnaW5fJHtQUkVGSVh9X2NiY19lbmNyeXB0CisJLnJ2YQkuTFNFSF9lbmRfJHtQUkVGSVh9X2NiY19lbmNyeXB0CisJLnJ2YQkuTFNFSF9pbmZvXyR7UFJFRklYfV9jYmNfZW5jcnlwdAorCisuc2VjdGlvbgkueGRhdGEKKy5hbGlnbgk4CisuTFNFSF9pbmZvXyR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXk6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorCS5ydmEJLkxlbmNfa2V5X2JvZHksLkxlbmNfa2V5X2VwaWxvZ3VlCSMgSGFuZGxlckRhdGFbXQorLkxTRUhfaW5mb18ke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5OgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MZGVjX2tleV9ib2R5LC5MZGVjX2tleV9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MU0VIX2luZm9fJHtQUkVGSVh9X2VuY3J5cHQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorCS5ydmEJLkxlbmNfYm9keSwuTGVuY19lcGlsb2d1ZQkJIyBIYW5kbGVyRGF0YVtdCisuTFNFSF9pbmZvXyR7UFJFRklYfV9kZWNyeXB0OgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKKwkucnZhCS5MZGVjX2JvZHksLkxkZWNfZXBpbG9ndWUJCSMgSGFuZGxlckRhdGFbXQorLkxTRUhfaW5mb18ke1BSRUZJWH1fY2JjX2VuY3J5cHQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorCS5ydmEJLkxjYmNfYm9keSwuTGNiY19lcGlsb2d1ZQkJIyBIYW5kbGVyRGF0YVtdCitfX18KK30KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VtOworCitwcmludCAkY29kZTsKKworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FybV9hcmNoLmggYi9jcnlwdG8vYXJtX2FyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTgzMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2FybV9hcmNoLmgKQEAgLTAsMCArMSw1MSBAQAorI2lmbmRlZiBfX0FSTV9BUkNIX0hfXworI2RlZmluZSBfX0FSTV9BUkNIX0hfXworCisjaWYgIWRlZmluZWQoX19BUk1fQVJDSF9fKQorIyBpZiBkZWZpbmVkKF9fQ0NfQVJNKQorIyAgZGVmaW5lIF9fQVJNX0FSQ0hfXyBfX1RBUkdFVF9BUkNIX0FSTQorIyAgaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjICAgZGVmaW5lIF9fQVJNRUJfXworIyAgZWxzZQorIyAgIGRlZmluZSBfX0FSTUVMX18KKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX0dOVUNfXykKKyAgLyoKKyAgICogV2h5IGRvZXNuJ3QgZ2NjIGRlZmluZSBfX0FSTV9BUkNIX18/IEluc3RlYWQgaXQgZGVmaW5lcworICAgKiBidW5jaCBvZiBiZWxvdyBtYWNyb3MuIFNlZSBhbGxfYXJjaGl0ZWN0aXJlc1tdIHRhYmxlIGluCisgICAqIGdjYy9jb25maWcvYXJtL2FybS5jLiBPbiBhIHNpZGUgbm90ZSBpdCBkZWZpbmVzCisgICAqIF9fQVJNRUxfXy9fX0FSTUVCX18gZm9yIGxpdHRsZS0vYmlnLWVuZGlhbi4KKyAgICovCisjICBpZglkZWZpbmVkKF9fQVJNX0FSQ0hfN19fKQl8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0FfXykJfHwgXAorCWRlZmluZWQoX19BUk1fQVJDSF83Ul9fKXx8IGRlZmluZWQoX19BUk1fQVJDSF83TV9fKQl8fCBcCisJZGVmaW5lZChfX0FSTV9BUkNIXzdFTV9fKQorIyAgIGRlZmluZSBfX0FSTV9BUkNIX18gNworIyAgZWxpZglkZWZpbmVkKF9fQVJNX0FSQ0hfNl9fKQl8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNkpfXykJfHwgXAorCWRlZmluZWQoX19BUk1fQVJDSF82S19fKXx8IGRlZmluZWQoX19BUk1fQVJDSF82TV9fKQl8fCBcCisJZGVmaW5lZChfX0FSTV9BUkNIXzZaX18pfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZaS19fKQl8fCBcCisJZGVmaW5lZChfX0FSTV9BUkNIXzZUMl9fKQorIyAgIGRlZmluZSBfX0FSTV9BUkNIX18gNgorIyAgZWxpZglkZWZpbmVkKF9fQVJNX0FSQ0hfNV9fKQl8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNVRfXykJfHwgXAorCWRlZmluZWQoX19BUk1fQVJDSF81RV9fKXx8IGRlZmluZWQoX19BUk1fQVJDSF81VEVfXykJfHwgXAorCWRlZmluZWQoX19BUk1fQVJDSF81VEVKX18pCisjICAgZGVmaW5lIF9fQVJNX0FSQ0hfXyA1CisjICBlbGlmCWRlZmluZWQoX19BUk1fQVJDSF80X18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF80VF9fKQorIyAgIGRlZmluZSBfX0FSTV9BUkNIX18gNAorIyAgZWxzZQorIyAgIGVycm9yICJ1bnN1cHBvcnRlZCBBUk0gYXJjaGl0ZWN0dXJlIgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9GSVBTQ0FOSVNURVIKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNzeW1zLmg+CisjZW5kaWYKKworI2lmICFfX0FTU0VNQkxFUl9fCitleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfYXJtY2FwX1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEFSTVY3X05FT04gICAgICAoMTw8MCkKKyNkZWZpbmUgQVJNVjdfVElDSyAgICAgICgxPDwxKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FybXY0Y3B1aWQuUyBiL2NyeXB0by9hcm12NGNwdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2MThkZQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hcm12NGNwdWlkLlMKQEAgLTAsMCArMSwxNTQgQEAKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCisudGV4dAorLmNvZGUJMzIKKworLmFsaWduCTUKKy5nbG9iYWwJX2FybXY3X25lb25fcHJvYmUKKy50eXBlCV9hcm12N19uZW9uX3Byb2JlLCVmdW5jdGlvbgorX2FybXY3X25lb25fcHJvYmU6CisJLndvcmQJMHhmMjZlZTFmZQlAIHZvcnIJcTE1LHExNSxxMTUKKwkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKy5zaXplCV9hcm12N19uZW9uX3Byb2JlLC4tX2FybXY3X25lb25fcHJvYmUKKworLmdsb2JhbAlfYXJtdjdfdGljaworLnR5cGUJX2FybXY3X3RpY2ssJWZ1bmN0aW9uCitfYXJtdjdfdGljazoKKwltcmMJcDE1LDAscjAsYzksYzEzLDAKKwkud29yZAkweGUxMmZmZjFlCUAgYngJbHIKKy5zaXplCV9hcm12N190aWNrLC4tX2FybXY3X3RpY2sKKworLmdsb2JhbAlPUEVOU1NMX2F0b21pY19hZGQKKy50eXBlCU9QRU5TU0xfYXRvbWljX2FkZCwlZnVuY3Rpb24KK09QRU5TU0xfYXRvbWljX2FkZDoKKyNpZiBfX0FSTV9BUkNIX18+PTYKKy5MYWRkOglsZHJleAlyMixbcjBdCisJYWRkCXIzLHIyLHIxCisJc3RyZXgJcjIscjMsW3IwXQorCWNtcAlyMiwjMAorCWJuZQkuTGFkZAorCW1vdglyMCxyMworCS53b3JkCTB4ZTEyZmZmMWUJQCBieAlscgorI2Vsc2UKKwlzdG1kYglzcCEse3I0LXI2LGxyfQorCWxkcglyMiwuTHNwaW5sb2NrCisJYWRyCXIzLC5Mc3BpbmxvY2sKKwltb3YJcjQscjAKKwltb3YJcjUscjEKKwlhZGQJcjYscjMscjIJQCAmc3BpbmxvY2sKKwliCS4rOAorLkxzcGluOglibAlzY2hlZF95aWVsZAorCW1vdglyMCwjLTEKKwlzd3AJcjAscjAsW3I2XQorCWNtcAlyMCwjMAorCWJuZQkuTHNwaW4KKworCWxkcglyMixbcjRdCisJYWRkCXIyLHIyLHI1CisJc3RyCXIyLFtyNF0KKwlzdHIJcjAsW3I2XQkJQCByZWxlYXNlIHNwaW5sb2NrCisJbGRtaWEJc3AhLHtyNC1yNixscn0KKwl0c3QJbHIsIzEKKwltb3ZlcQlwYyxscgorCS53b3JkCTB4ZTEyZmZmMWUJQCBieAlscgorI2VuZGlmCisuc2l6ZQlPUEVOU1NMX2F0b21pY19hZGQsLi1PUEVOU1NMX2F0b21pY19hZGQKKworLmdsb2JhbAlPUEVOU1NMX2NsZWFuc2UKKy50eXBlCU9QRU5TU0xfY2xlYW5zZSwlZnVuY3Rpb24KK09QRU5TU0xfY2xlYW5zZToKKwllb3IJaXAsaXAsaXAKKwljbXAJcjEsIzcKKwlzdWJocwlyMSxyMSwjNAorCWJocwkuTG90CisJY21wCXIxLCMwCisJYmVxCS5MY2xlYW5zZV9kb25lCisuTGl0dGxlOgorCXN0cmIJaXAsW3IwXSwjMQorCXN1YnMJcjEscjEsIzEKKwliaGkJLkxpdHRsZQorCWIJLkxjbGVhbnNlX2RvbmUKKworLkxvdDoJdHN0CXIwLCMzCisJYmVxCS5MYWxpZ25lZAorCXN0cmIJaXAsW3IwXSwjMQorCXN1YglyMSxyMSwjMQorCWIJLkxvdAorLkxhbGlnbmVkOgorCXN0cglpcCxbcjBdLCM0CisJc3VicwlyMSxyMSwjNAorCWJocwkuTGFsaWduZWQKKwlhZGRzCXIxLHIxLCM0CisJYm5lCS5MaXR0bGUKKy5MY2xlYW5zZV9kb25lOgorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCisJLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisuc2l6ZQlPUEVOU1NMX2NsZWFuc2UsLi1PUEVOU1NMX2NsZWFuc2UKKworLmdsb2JhbAlPUEVOU1NMX3dpcGVfY3B1CisudHlwZQlPUEVOU1NMX3dpcGVfY3B1LCVmdW5jdGlvbgorT1BFTlNTTF93aXBlX2NwdToKKwlsZHIJcjAsLkxPUEVOU1NMX2FybWNhcAorCWFkcglyMSwuTE9QRU5TU0xfYXJtY2FwCisJbGRyCXIwLFtyMSxyMF0KKwllb3IJcjIscjIscjIKKwllb3IJcjMscjMscjMKKwllb3IJaXAsaXAsaXAKKwl0c3QJcjAsIzEKKwliZXEJLkx3aXBlX2RvbmUKKwkud29yZAkweGYzMDAwMTUwCUAgdmVvciAgICBxMCwgcTAsIHEwCisJLndvcmQJMHhmMzAyMjE1MglAIHZlb3IgICAgcTEsIHExLCBxMQorCS53b3JkCTB4ZjMwNDQxNTQJQCB2ZW9yICAgIHEyLCBxMiwgcTIKKwkud29yZAkweGYzMDY2MTU2CUAgdmVvciAgICBxMywgcTMsIHEzCisJLndvcmQJMHhmMzQwMDFmMAlAIHZlb3IgICAgcTgsIHE4LCBxOAorCS53b3JkCTB4ZjM0MjIxZjIJQCB2ZW9yICAgIHE5LCBxOSwgcTkKKwkud29yZAkweGYzNDQ0MWY0CUAgdmVvciAgICBxMTAsIHExMCwgcTEwCisJLndvcmQJMHhmMzQ2NjFmNglAIHZlb3IgICAgcTExLCBxMTEsIHExMQorCS53b3JkCTB4ZjM0ODgxZjgJQCB2ZW9yICAgIHExMiwgcTEyLCBxMTIKKwkud29yZAkweGYzNGFhMWZhCUAgdmVvciAgICBxMTMsIHExMywgcTEzCisJLndvcmQJMHhmMzRjYzFmYwlAIHZlb3IgICAgcTE0LCBxMTQsIHExNAorCS53b3JkCTB4ZjM0ZWUxZmUJQCB2ZW9yICAgIHExNSwgcTE1LCBxMTUKKy5Md2lwZV9kb25lOgorCW1vdglyMCxzcAorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCisJLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisuc2l6ZQlPUEVOU1NMX3dpcGVfY3B1LC4tT1BFTlNTTF93aXBlX2NwdQorCisuZ2xvYmFsCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMKKy50eXBlCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMsJWZ1bmN0aW9uCitPUEVOU1NMX2luc3RydW1lbnRfYnVzOgorCWVvcglyMCxyMCxyMAorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCisJLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisuc2l6ZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzLC4tT1BFTlNTTF9pbnN0cnVtZW50X2J1cworCisuZ2xvYmFsCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMyCisudHlwZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzMiwlZnVuY3Rpb24KK09QRU5TU0xfaW5zdHJ1bWVudF9idXMyOgorCWVvcglyMCxyMCxyMAorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCisJLndvcmQJMHhlMTJmZmYxZQlAIGJ4CWxyCisuc2l6ZQlPUEVOU1NMX2luc3RydW1lbnRfYnVzMiwuLU9QRU5TU0xfaW5zdHJ1bWVudF9idXMyCisKKy5hbGlnbgk1CisuTE9QRU5TU0xfYXJtY2FwOgorLndvcmQJT1BFTlNTTF9hcm1jYXBfUC0uTE9QRU5TU0xfYXJtY2FwCisjaWYgX19BUk1fQVJDSF9fPj02CisuYWxpZ24JNQorI2Vsc2UKKy5Mc3BpbmxvY2s6Cisud29yZAlhdG9taWNfYWRkX3NwaW5sb2NrLS5Mc3BpbmxvY2sKKy5hbGlnbgk1CisKKy5kYXRhCisuYWxpZ24JMgorYXRvbWljX2FkZF9zcGlubG9jazoKKy53b3JkCTAKKyNlbmRpZgorCisuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAorLmhpZGRlbglPUEVOU1NMX2FybWNhcF9QCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX2RpZ2VzdC5jIGIvY3J5cHRvL2FzbjEvYV9kaWdlc3QuYwppbmRleCBkMDBkOWUyLi5jYmRlZWE2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX2RpZ2VzdC5jCisrKyBiL2NyeXB0by9hc24xL2FfZGlnZXN0LmMKQEAgLTg3LDcgKzg3LDggQEAKIAlwPXN0cjsKIAlpMmQoZGF0YSwmcCk7CiAKLQlFVlBfRGlnZXN0KHN0ciwgaSwgbWQsIGxlbiwgdHlwZSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KHN0ciwgaSwgbWQsIGxlbiwgdHlwZSwgTlVMTCkpCisJCXJldHVybiAwOwogCU9QRU5TU0xfZnJlZShzdHIpOwogCXJldHVybigxKTsKIAl9CkBAIC0xMDQsNyArMTA1LDggQEAKIAlpPUFTTjFfaXRlbV9pMmQoYXNuLCZzdHIsIGl0KTsKIAlpZiAoIXN0cikgcmV0dXJuKDApOwogCi0JRVZQX0RpZ2VzdChzdHIsIGksIG1kLCBsZW4sIHR5cGUsIE5VTEwpOworCWlmICghRVZQX0RpZ2VzdChzdHIsIGksIG1kLCBsZW4sIHR5cGUsIE5VTEwpKQorCQlyZXR1cm4gMDsKIAlPUEVOU1NMX2ZyZWUoc3RyKTsKIAlyZXR1cm4oMSk7CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYV9zaWduLmMgYi9jcnlwdG8vYXNuMS9hX3NpZ24uYwppbmRleCBmZjYzYmZjLi43YjRhMTkzIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX3NpZ24uYworKysgYi9jcnlwdG8vYXNuMS9hX3NpZ24uYwpAQCAtMTg0LDkgKzE4NCw5IEBACiAJcD1idWZfaW47CiAKIAlpMmQoZGF0YSwmcCk7Ci0JRVZQX1NpZ25Jbml0X2V4KCZjdHgsdHlwZSwgTlVMTCk7Ci0JRVZQX1NpZ25VcGRhdGUoJmN0eCwodW5zaWduZWQgY2hhciAqKWJ1Zl9pbixpbmwpOwotCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4LCh1bnNpZ25lZCBjaGFyICopYnVmX291dCwKKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LHR5cGUsIE5VTEwpCisJCXx8ICFFVlBfU2lnblVwZGF0ZSgmY3R4LCh1bnNpZ25lZCBjaGFyICopYnVmX2luLGlubCkKKwkJfHwgIUVWUF9TaWduRmluYWwoJmN0eCwodW5zaWduZWQgY2hhciAqKWJ1Zl9vdXQsCiAJCQkodW5zaWduZWQgaW50ICopJm91dGwscGtleSkpCiAJCXsKIAkJb3V0bD0wOwpAQCAtMjE4LDY1ICsyMTgsMTAwIEBACiAJICAgICBjb25zdCBFVlBfTUQgKnR5cGUpCiAJewogCUVWUF9NRF9DVFggY3R4OwotCXVuc2lnbmVkIGNoYXIgKmJ1Zl9pbj1OVUxMLCpidWZfb3V0PU5VTEw7Ci0JaW50IGlubD0wLG91dGw9MCxvdXRsbD0wOwotCWludCBzaWduaWQsIHBhcmFtdHlwZTsKLQotCWlmICh0eXBlID09IE5VTEwpCisJRVZQX01EX0NUWF9pbml0KCZjdHgpOworCWlmICghRVZQX0RpZ2VzdFNpZ25Jbml0KCZjdHgsIE5VTEwsIHR5cGUsIE5VTEwsIHBrZXkpKQogCQl7Ci0JCWludCBkZWZfbmlkOwotCQlpZiAoRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZChwa2V5LCAmZGVmX25pZCkgPiAwKQotCQkJdHlwZSA9IEVWUF9nZXRfZGlnZXN0YnluaWQoZGVmX25pZCk7CisJCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKwkJcmV0dXJuIDA7CiAJCX0KKwlyZXR1cm4gQVNOMV9pdGVtX3NpZ25fY3R4KGl0LCBhbGdvcjEsIGFsZ29yMiwgc2lnbmF0dXJlLCBhc24sICZjdHgpOworCX0KKwkJCiAKLQlpZiAodHlwZSA9PSBOVUxMKQoraW50IEFTTjFfaXRlbV9zaWduX2N0eChjb25zdCBBU04xX0lURU0gKml0LAorCQlYNTA5X0FMR09SICphbGdvcjEsIFg1MDlfQUxHT1IgKmFsZ29yMiwKKwkgICAgIAlBU04xX0JJVF9TVFJJTkcgKnNpZ25hdHVyZSwgdm9pZCAqYXNuLCBFVlBfTURfQ1RYICpjdHgpCisJeworCWNvbnN0IEVWUF9NRCAqdHlwZTsKKwlFVlBfUEtFWSAqcGtleTsKKwl1bnNpZ25lZCBjaGFyICpidWZfaW49TlVMTCwqYnVmX291dD1OVUxMOworCXNpemVfdCBpbmw9MCxvdXRsPTAsb3V0bGw9MDsKKwlpbnQgc2lnbmlkLCBwYXJhbXR5cGU7CisJaW50IHJ2OworCisJdHlwZSA9IEVWUF9NRF9DVFhfbWQoY3R4KTsKKwlwa2V5ID0gRVZQX1BLRVlfQ1RYX2dldDBfcGtleShjdHgtPnBjdHgpOworCisJaWYgKCF0eXBlIHx8ICFwa2V5KQogCQl7Ci0JCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9TSUdOLCBBU04xX1JfTk9fREVGQVVMVF9ESUdFU1QpOworCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fU0lHTl9DVFgsIEFTTjFfUl9DT05URVhUX05PVF9JTklUSUFMSVNFRCk7CiAJCXJldHVybiAwOwogCQl9CiAKLQlpZiAodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUpCisJaWYgKHBrZXktPmFtZXRoLT5pdGVtX3NpZ24pCiAJCXsKLQkJaWYgKCFwa2V5LT5hbWV0aCB8fAotCQkJIU9CSl9maW5kX3NpZ2lkX2J5X2FsZ3MoJnNpZ25pZCwgRVZQX01EX25pZCh0eXBlKSwKLQkJCQkJCXBrZXktPmFtZXRoLT5wa2V5X2lkKSkKLQkJCXsKLQkJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9TSUdOLAotCQkJCUFTTjFfUl9ESUdFU1RfQU5EX0tFWV9UWVBFX05PVF9TVVBQT1JURUQpOwotCQkJcmV0dXJuIDA7Ci0JCQl9CisJCXJ2ID0gcGtleS0+YW1ldGgtPml0ZW1fc2lnbihjdHgsIGl0LCBhc24sIGFsZ29yMSwgYWxnb3IyLAorCQkJCQkJc2lnbmF0dXJlKTsKKwkJaWYgKHJ2ID09IDEpCisJCQlvdXRsID0gc2lnbmF0dXJlLT5sZW5ndGg7CisJCS8qIFJldHVybiB2YWx1ZSBtZWFuaW5nczoKKwkJICogPD0wOiBlcnJvci4KKwkJICogICAxOiBtZXRob2QgZG9lcyBldmVyeXRoaW5nLgorCQkgKiAgIDI6IGNhcnJ5IG9uIGFzIG5vcm1hbC4KKwkJICogICAzOiBBU04xIG1ldGhvZCBzZXRzIGFsZ29yaXRobSBpZGVudGlmaWVyczoganVzdCBzaWduLgorCQkgKi8KKwkJaWYgKHJ2IDw9IDApCisJCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fU0lHTl9DVFgsIEVSUl9SX0VWUF9MSUIpOworCQlpZiAocnYgPD0gMSkKKwkJCWdvdG8gZXJyOwogCQl9CiAJZWxzZQotCQlzaWduaWQgPSB0eXBlLT5wa2V5X3R5cGU7CisJCXJ2ID0gMjsKIAotCWlmIChwa2V5LT5hbWV0aC0+cGtleV9mbGFncyAmIEFTTjFfUEtFWV9TSUdQQVJBTV9OVUxMKQotCQlwYXJhbXR5cGUgPSBWX0FTTjFfTlVMTDsKLQllbHNlCi0JCXBhcmFtdHlwZSA9IFZfQVNOMV9VTkRFRjsKKwlpZiAocnYgPT0gMikKKwkJeworCQlpZiAodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUpCisJCQl7CisJCQlpZiAoIXBrZXktPmFtZXRoIHx8CisJCQkJIU9CSl9maW5kX3NpZ2lkX2J5X2FsZ3MoJnNpZ25pZCwKKwkJCQkJCQlFVlBfTURfbmlkKHR5cGUpLAorCQkJCQkJCXBrZXktPmFtZXRoLT5wa2V5X2lkKSkKKwkJCQl7CisJCQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1NJR05fQ1RYLAorCQkJCQlBU04xX1JfRElHRVNUX0FORF9LRVlfVFlQRV9OT1RfU1VQUE9SVEVEKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CisJCWVsc2UKKwkJCXNpZ25pZCA9IHR5cGUtPnBrZXlfdHlwZTsKIAotCWlmIChhbGdvcjEpCi0JCVg1MDlfQUxHT1Jfc2V0MChhbGdvcjEsIE9CSl9uaWQyb2JqKHNpZ25pZCksIHBhcmFtdHlwZSwgTlVMTCk7Ci0JaWYgKGFsZ29yMikKLQkJWDUwOV9BTEdPUl9zZXQwKGFsZ29yMiwgT0JKX25pZDJvYmooc2lnbmlkKSwgcGFyYW10eXBlLCBOVUxMKTsKKwkJaWYgKHBrZXktPmFtZXRoLT5wa2V5X2ZsYWdzICYgQVNOMV9QS0VZX1NJR1BBUkFNX05VTEwpCisJCQlwYXJhbXR5cGUgPSBWX0FTTjFfTlVMTDsKKwkJZWxzZQorCQkJcGFyYW10eXBlID0gVl9BU04xX1VOREVGOwogCi0JRVZQX01EX0NUWF9pbml0KCZjdHgpOworCQlpZiAoYWxnb3IxKQorCQkJWDUwOV9BTEdPUl9zZXQwKGFsZ29yMSwgT0JKX25pZDJvYmooc2lnbmlkKSwgcGFyYW10eXBlLCBOVUxMKTsKKwkJaWYgKGFsZ29yMikKKwkJCVg1MDlfQUxHT1Jfc2V0MChhbGdvcjIsIE9CSl9uaWQyb2JqKHNpZ25pZCksIHBhcmFtdHlwZSwgTlVMTCk7CisKKwkJfQorCiAJaW5sPUFTTjFfaXRlbV9pMmQoYXNuLCZidWZfaW4sIGl0KTsKIAlvdXRsbD1vdXRsPUVWUF9QS0VZX3NpemUocGtleSk7Ci0JYnVmX291dD0odW5zaWduZWQgY2hhciAqKU9QRU5TU0xfbWFsbG9jKCh1bnNpZ25lZCBpbnQpb3V0bCk7CisJYnVmX291dD1PUEVOU1NMX21hbGxvYygodW5zaWduZWQgaW50KW91dGwpOwogCWlmICgoYnVmX2luID09IE5VTEwpIHx8IChidWZfb3V0ID09IE5VTEwpKQogCQl7CiAJCW91dGw9MDsKLQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1NJR04sRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fU0lHTl9DVFgsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQlnb3RvIGVycjsKIAkJfQogCi0JRVZQX1NpZ25Jbml0X2V4KCZjdHgsdHlwZSwgTlVMTCk7Ci0JRVZQX1NpZ25VcGRhdGUoJmN0eCwodW5zaWduZWQgY2hhciAqKWJ1Zl9pbixpbmwpOwotCWlmICghRVZQX1NpZ25GaW5hbCgmY3R4LCh1bnNpZ25lZCBjaGFyICopYnVmX291dCwKLQkJCSh1bnNpZ25lZCBpbnQgKikmb3V0bCxwa2V5KSkKKwlpZiAoIUVWUF9EaWdlc3RTaWduVXBkYXRlKGN0eCwgYnVmX2luLCBpbmwpCisJCXx8ICFFVlBfRGlnZXN0U2lnbkZpbmFsKGN0eCwgYnVmX291dCwgJm91dGwpKQogCQl7CiAJCW91dGw9MDsKLQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1NJR04sRVJSX1JfRVZQX0xJQik7CisJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9TSUdOX0NUWCxFUlJfUl9FVlBfTElCKTsKIAkJZ290byBlcnI7CiAJCX0KIAlpZiAoc2lnbmF0dXJlLT5kYXRhICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzaWduYXR1cmUtPmRhdGEpOwpAQCAtMjg5LDcgKzMyNCw3IEBACiAJc2lnbmF0dXJlLT5mbGFncyY9IH4oQVNOMV9TVFJJTkdfRkxBR19CSVRTX0xFRlR8MHgwNyk7CiAJc2lnbmF0dXJlLT5mbGFnc3w9QVNOMV9TVFJJTkdfRkxBR19CSVRTX0xFRlQ7CiBlcnI6Ci0JRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworCUVWUF9NRF9DVFhfY2xlYW51cChjdHgpOwogCWlmIChidWZfaW4gIT0gTlVMTCkKIAkJeyBPUEVOU1NMX2NsZWFuc2UoKGNoYXIgKilidWZfaW4sKHVuc2lnbmVkIGludClpbmwpOyBPUEVOU1NMX2ZyZWUoYnVmX2luKTsgfQogCWlmIChidWZfb3V0ICE9IE5VTEwpCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS9hX3ZlcmlmeS5jIGIvY3J5cHRvL2FzbjEvYV92ZXJpZnkuYwppbmRleCBjZWNkYjEzLi40MzI3MjJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hX3ZlcmlmeS5jCisrKyBiL2NyeXB0by9hc24xL2FfdmVyaWZ5LmMKQEAgLTEwMSw4ICsxMDEsMTMgQEAKIAlwPWJ1Zl9pbjsKIAogCWkyZChkYXRhLCZwKTsKLQlFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LHR5cGUsIE5VTEwpOwotCUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwodW5zaWduZWQgY2hhciAqKWJ1Zl9pbixpbmwpOworCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKQorCQl8fCAhRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCh1bnNpZ25lZCBjaGFyICopYnVmX2luLGlubCkpCisJCXsKKwkJQVNOMWVycihBU04xX0ZfQVNOMV9WRVJJRlksRVJSX1JfRVZQX0xJQik7CisJCXJldD0wOworCQlnb3RvIGVycjsKKwkJfQogCiAJT1BFTlNTTF9jbGVhbnNlKGJ1Zl9pbiwodW5zaWduZWQgaW50KWlubCk7CiAJT1BFTlNTTF9mcmVlKGJ1Zl9pbik7CkBAIC0xMjYsMTEgKzEzMSwxMCBAQAogI2VuZGlmCiAKIAotaW50IEFTTjFfaXRlbV92ZXJpZnkoY29uc3QgQVNOMV9JVEVNICppdCwgWDUwOV9BTEdPUiAqYSwgQVNOMV9CSVRfU1RSSU5HICpzaWduYXR1cmUsCi0JICAgICB2b2lkICphc24sIEVWUF9QS0VZICpwa2V5KQoraW50IEFTTjFfaXRlbV92ZXJpZnkoY29uc3QgQVNOMV9JVEVNICppdCwgWDUwOV9BTEdPUiAqYSwKKwkJQVNOMV9CSVRfU1RSSU5HICpzaWduYXR1cmUsIHZvaWQgKmFzbiwgRVZQX1BLRVkgKnBrZXkpCiAJewogCUVWUF9NRF9DVFggY3R4OwotCWNvbnN0IEVWUF9NRCAqdHlwZSA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqYnVmX2luPU5VTEw7CiAJaW50IHJldD0gLTEsaW5sOwogCkBAIC0xNDQsMjUgKzE0OCw0NyBAQAogCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEFTTjFfUl9VTktOT1dOX1NJR05BVFVSRV9BTEdPUklUSE0pOwogCQlnb3RvIGVycjsKIAkJfQotCXR5cGU9RVZQX2dldF9kaWdlc3RieW5pZChtZG5pZCk7Ci0JaWYgKHR5cGUgPT0gTlVMTCkKKwlpZiAobWRuaWQgPT0gTklEX3VuZGVmKQogCQl7Ci0JCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlksQVNOMV9SX1VOS05PV05fTUVTU0FHRV9ESUdFU1RfQUxHT1JJVEhNKTsKLQkJZ290byBlcnI7CisJCWlmICghcGtleS0+YW1ldGggfHwgIXBrZXktPmFtZXRoLT5pdGVtX3ZlcmlmeSkKKwkJCXsKKwkJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlksQVNOMV9SX1VOS05PV05fU0lHTkFUVVJFX0FMR09SSVRITSk7CisJCQlnb3RvIGVycjsKKwkJCX0KKwkJcmV0ID0gcGtleS0+YW1ldGgtPml0ZW1fdmVyaWZ5KCZjdHgsIGl0LCBhc24sIGEsCisJCQkJCQkJc2lnbmF0dXJlLCBwa2V5KTsKKwkJLyogUmV0dXJuIHZhbHVlIG9mIDIgbWVhbnMgY2Fycnkgb24sIGFueXRoaW5nIGVsc2UgbWVhbnMgd2UKKwkJICogZXhpdCBzdHJhaWdodCBhd2F5OiBlaXRoZXIgYSBmYXRhbCBlcnJvciBvZiB0aGUgdW5kZXJseWluZworCQkgKiB2ZXJpZmljYXRpb24gcm91dGluZSBoYW5kbGVzIGFsbCB2ZXJpZmljYXRpb24uCisJCSAqLworCQlpZiAocmV0ICE9IDIpCisJCQlnb3RvIGVycjsKKwkJcmV0ID0gLTE7CiAJCX0KLQotCS8qIENoZWNrIHB1YmxpYyBrZXkgT0lEIG1hdGNoZXMgcHVibGljIGtleSB0eXBlICovCi0JaWYgKEVWUF9QS0VZX3R5cGUocGtuaWQpICE9IHBrZXktPmFtZXRoLT5wa2V5X2lkKQorCWVsc2UKIAkJewotCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEFTTjFfUl9XUk9OR19QVUJMSUNfS0VZX1RZUEUpOwotCQlnb3RvIGVycjsKLQkJfQorCQljb25zdCBFVlBfTUQgKnR5cGU7CisJCXR5cGU9RVZQX2dldF9kaWdlc3RieW5pZChtZG5pZCk7CisJCWlmICh0eXBlID09IE5VTEwpCisJCQl7CisJCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEFTTjFfUl9VTktOT1dOX01FU1NBR0VfRElHRVNUX0FMR09SSVRITSk7CisJCQlnb3RvIGVycjsKKwkJCX0KIAotCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCx0eXBlLCBOVUxMKSkKLQkJewotCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEVSUl9SX0VWUF9MSUIpOwotCQlyZXQ9MDsKLQkJZ290byBlcnI7CisJCS8qIENoZWNrIHB1YmxpYyBrZXkgT0lEIG1hdGNoZXMgcHVibGljIGtleSB0eXBlICovCisJCWlmIChFVlBfUEtFWV90eXBlKHBrbmlkKSAhPSBwa2V5LT5hbWV0aC0+cGtleV9pZCkKKwkJCXsKKwkJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlksQVNOMV9SX1dST05HX1BVQkxJQ19LRVlfVFlQRSk7CisJCQlnb3RvIGVycjsKKwkJCX0KKworCQlpZiAoIUVWUF9EaWdlc3RWZXJpZnlJbml0KCZjdHgsIE5VTEwsIHR5cGUsIE5VTEwsIHBrZXkpKQorCQkJeworCQkJQVNOMWVycihBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWSxFUlJfUl9FVlBfTElCKTsKKwkJCXJldD0wOworCQkJZ290byBlcnI7CisJCQl9CisKIAkJfQogCiAJaW5sID0gQVNOMV9pdGVtX2kyZChhc24sICZidWZfaW4sIGl0KTsKQEAgLTE3MywxMyArMTk5LDE4IEBACiAJCWdvdG8gZXJyOwogCQl9CiAKLQlFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsKHVuc2lnbmVkIGNoYXIgKilidWZfaW4saW5sKTsKKwlpZiAoIUVWUF9EaWdlc3RWZXJpZnlVcGRhdGUoJmN0eCxidWZfaW4saW5sKSkKKwkJeworCQlBU04xZXJyKEFTTjFfRl9BU04xX0lURU1fVkVSSUZZLEVSUl9SX0VWUF9MSUIpOworCQlyZXQ9MDsKKwkJZ290byBlcnI7CisJCX0KIAogCU9QRU5TU0xfY2xlYW5zZShidWZfaW4sKHVuc2lnbmVkIGludClpbmwpOwogCU9QRU5TU0xfZnJlZShidWZfaW4pOwogCi0JaWYgKEVWUF9WZXJpZnlGaW5hbCgmY3R4LCh1bnNpZ25lZCBjaGFyICopc2lnbmF0dXJlLT5kYXRhLAotCQkJKHVuc2lnbmVkIGludClzaWduYXR1cmUtPmxlbmd0aCxwa2V5KSA8PSAwKQorCWlmIChFVlBfRGlnZXN0VmVyaWZ5RmluYWwoJmN0eCxzaWduYXR1cmUtPmRhdGEsCisJCQkoc2l6ZV90KXNpZ25hdHVyZS0+bGVuZ3RoKSA8PSAwKQogCQl7CiAJCUFTTjFlcnIoQVNOMV9GX0FTTjFfSVRFTV9WRVJJRlksRVJSX1JfRVZQX0xJQik7CiAJCXJldD0wOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYW1ldGhfbGliLmMgYi9jcnlwdG8vYXNuMS9hbWV0aF9saWIuYwppbmRleCA1YTU4MWI5Li5hMTllMDU4IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hbWV0aF9saWIuYworKysgYi9jcnlwdG8vYXNuMS9hbWV0aF9saWIuYwpAQCAtNjksNiArNjksNyBAQAogZXh0ZXJuIGNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EIGRoX2FzbjFfbWV0aDsKIGV4dGVybiBjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCBlY2tleV9hc24xX21ldGg7CiBleHRlcm4gY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgaG1hY19hc24xX21ldGg7CitleHRlcm4gY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgY21hY19hc24xX21ldGg7CiAKIC8qIEtlZXAgdGhpcyBzb3J0ZWQgaW4gdHlwZSBvcmRlciAhISAqLwogc3RhdGljIGNvbnN0IEVWUF9QS0VZX0FTTjFfTUVUSE9EICpzdGFuZGFyZF9tZXRob2RzW10gPSAKQEAgLTkwLDcgKzkxLDggQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FQwogCSZlY2tleV9hc24xX21ldGgsCiAjZW5kaWYKLQkmaG1hY19hc24xX21ldGgKKwkmaG1hY19hc24xX21ldGgsCisJJmNtYWNfYXNuMV9tZXRoCiAJfTsKIAogdHlwZWRlZiBpbnQgc2tfY21wX2ZuX3R5cGUoY29uc3QgY2hhciAqIGNvbnN0ICphLCBjb25zdCBjaGFyICogY29uc3QgKmIpOwpAQCAtMjkxLDYgKzI5Myw4IEBACiAJaWYgKCFhbWV0aCkKIAkJcmV0dXJuIE5VTEw7CiAKKwltZW1zZXQoYW1ldGgsIDAsIHNpemVvZihFVlBfUEtFWV9BU04xX01FVEhPRCkpOworCiAJYW1ldGgtPnBrZXlfaWQgPSBpZDsKIAlhbWV0aC0+cGtleV9iYXNlX2lkID0gaWQ7CiAJYW1ldGgtPnBrZXlfZmxhZ3MgPSBmbGFncyB8IEFTTjFfUEtFWV9EWU5BTUlDOwpAQCAtMzI1LDYgKzMyOSw5IEBACiAJYW1ldGgtPm9sZF9wcml2X2VuY29kZSA9IDA7CiAJYW1ldGgtPm9sZF9wcml2X2RlY29kZSA9IDA7CiAKKwlhbWV0aC0+aXRlbV92ZXJpZnkgPSAwOworCWFtZXRoLT5pdGVtX3NpZ24gPSAwOworCiAJYW1ldGgtPnBrZXlfc2l6ZSA9IDA7CiAJYW1ldGgtPnBrZXlfYml0cyA9IDA7CiAKQEAgLTM3Niw2ICszODMsOSBAQAogCWRzdC0+cGtleV9mcmVlID0gc3JjLT5wa2V5X2ZyZWU7CiAJZHN0LT5wa2V5X2N0cmwgPSBzcmMtPnBrZXlfY3RybDsKIAorCWRzdC0+aXRlbV9zaWduID0gc3JjLT5pdGVtX3NpZ247CisJZHN0LT5pdGVtX3ZlcmlmeSA9IHNyYy0+aXRlbV92ZXJpZnk7CisKIAl9CiAKIHZvaWQgRVZQX1BLRVlfYXNuMV9mcmVlKEVWUF9QS0VZX0FTTjFfTUVUSE9EICphbWV0aCkKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL2FzbjEuaCBiL2NyeXB0by9hc24xL2FzbjEuaAppbmRleCA1OTU0MGU0Li4yMjBhMGM4IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hc24xLmgKKysrIGIvY3J5cHRvL2FzbjEvYXNuMS5oCkBAIC0yMzUsNyArMjM1LDcgQEAKICAqLwogI2RlZmluZSBBU04xX1NUUklOR19GTEFHX01TVFJJTkcgMHgwNDAgCiAvKiBUaGlzIGlzIHRoZSBiYXNlIHR5cGUgdGhhdCBob2xkcyBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgOi0pICovCi10eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdAorc3RydWN0IGFzbjFfc3RyaW5nX3N0CiAJewogCWludCBsZW5ndGg7CiAJaW50IHR5cGU7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKiBpbnB1dCBkYXRhIGhhcyBhIG5vbi16ZXJvICd1bnVzZWQgYml0cycgdmFsdWUsIGl0IHdpbGwgYmUKIAkgKiBoYW5kbGVkIGNvcnJlY3RseSAqLwogCWxvbmcgZmxhZ3M7Ci0JfSBBU04xX1NUUklORzsKKwl9OwogCiAvKiBBU04xX0VOQ09ESU5HIHN0cnVjdHVyZTogdGhpcyBpcyB1c2VkIHRvIHNhdmUgdGhlIHJlY2VpdmVkCiAgKiBlbmNvZGluZyBvZiBhbiBBU04xIHR5cGUuIFRoaXMgaXMgdXNlZnVsIHRvIGdldCByb3VuZApAQCAtMjkzLDcgKzI5Myw2IEBACiAgKiBzZWUgYXNuMXQuaAogICovCiB0eXBlZGVmIHN0cnVjdCBBU04xX1RFTVBMQVRFX3N0IEFTTjFfVEVNUExBVEU7Ci10eXBlZGVmIHN0cnVjdCBBU04xX0lURU1fc3QgQVNOMV9JVEVNOwogdHlwZWRlZiBzdHJ1Y3QgQVNOMV9UTENfc3QgQVNOMV9UTEM7CiAvKiBUaGlzIGlzIGp1c3QgYW4gb3BhcXVlIHBvaW50ZXIgKi8KIHR5cGVkZWYgc3RydWN0IEFTTjFfVkFMVUVfc3QgQVNOMV9WQUxVRTsKQEAgLTExOTQsNiArMTE5Myw3IEBACiAjZGVmaW5lIEFTTjFfRl9BU04xX0lURU1fSTJEX0ZQCQkJCSAxOTMKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9QQUNLCQkJCSAxOTgKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9TSUdOCQkJCSAxOTUKKyNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9TSUdOX0NUWAkJCSAyMjAKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9VTlBBQ0sJCQkJIDE5OQogI2RlZmluZSBBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWQkJCQkgMTk3CiAjZGVmaW5lIEFTTjFfRl9BU04xX01CU1RSSU5HX05DT1BZCQkJIDEyMgpAQCAtMTI2Niw2ICsxMjY2LDcgQEAKICNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCRTJfU0VUX0lWCQkJIDE2NwogI2RlZmluZSBBU04xX0ZfUEtDUzVfUEJFX1NFVAkJCQkgMjAyCiAjZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUgkJCSAyMTUKKyNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCS0RGMl9TRVQJCQkJIDIxOQogI2RlZmluZSBBU04xX0ZfU01JTUVfUkVBRF9BU04xCQkJCSAyMTIKICNkZWZpbmUgQVNOMV9GX1NNSU1FX1RFWFQJCQkJIDIxMwogI2RlZmluZSBBU04xX0ZfWDUwOV9DSU5GX05FVwkJCQkgMTY4CkBAIC0xMjkxLDYgKzEyOTIsNyBAQAogI2RlZmluZSBBU04xX1JfQk9PTEVBTl9JU19XUk9OR19MRU5HVEgJCQkgMTA2CiAjZGVmaW5lIEFTTjFfUl9CVUZGRVJfVE9PX1NNQUxMCQkJCSAxMDcKICNkZWZpbmUgQVNOMV9SX0NJUEhFUl9IQVNfTk9fT0JKRUNUX0lERU5USUZJRVIJCSAxMDgKKyNkZWZpbmUgQVNOMV9SX0NPTlRFWFRfTk9UX0lOSVRJQUxJU0VECQkJIDIxNwogI2RlZmluZSBBU04xX1JfREFUQV9JU19XUk9ORwkJCQkgMTA5CiAjZGVmaW5lIEFTTjFfUl9ERUNPREVfRVJST1IJCQkJIDExMAogI2RlZmluZSBBU04xX1JfREVDT0RJTkdfRVJST1IJCQkJIDExMQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYXNuMV9lcnIuYyBiL2NyeXB0by9hc24xL2FzbjFfZXJyLmMKaW5kZXggNmUwNGQwOC4uMWEzMGJmMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvYXNuMV9lcnIuYworKysgYi9jcnlwdG8vYXNuMS9hc24xX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2FzbjEvYXNuMV9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNyw2ICsxMDcsNyBAQAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX0lURU1fSTJEX0ZQKSwJIkFTTjFfaXRlbV9pMmRfZnAifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9JVEVNX1BBQ0spLAkiQVNOMV9pdGVtX3BhY2sifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9JVEVNX1NJR04pLAkiQVNOMV9pdGVtX3NpZ24ifSwKK3tFUlJfRlVOQyhBU04xX0ZfQVNOMV9JVEVNX1NJR05fQ1RYKSwJIkFTTjFfaXRlbV9zaWduX2N0eCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9BU04xX0lURU1fVU5QQUNLKSwJIkFTTjFfaXRlbV91bnBhY2sifSwKIHtFUlJfRlVOQyhBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWSksCSJBU04xX2l0ZW1fdmVyaWZ5In0sCiB7RVJSX0ZVTkMoQVNOMV9GX0FTTjFfTUJTVFJJTkdfTkNPUFkpLAkiQVNOMV9tYnN0cmluZ19uY29weSJ9LApAQCAtMTc5LDYgKzE4MCw3IEBACiB7RVJSX0ZVTkMoQVNOMV9GX1BLQ1M1X1BCRTJfU0VUX0lWKSwJIlBLQ1M1X3BiZTJfc2V0X2l2In0sCiB7RVJSX0ZVTkMoQVNOMV9GX1BLQ1M1X1BCRV9TRVQpLAkiUEtDUzVfcGJlX3NldCJ9LAoge0VSUl9GVU5DKEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUiksCSJQS0NTNV9wYmVfc2V0MF9hbGdvciJ9LAore0VSUl9GVU5DKEFTTjFfRl9QS0NTNV9QQktERjJfU0VUKSwJIlBLQ1M1X3Bia2RmMl9zZXQifSwKIHtFUlJfRlVOQyhBU04xX0ZfU01JTUVfUkVBRF9BU04xKSwJIlNNSU1FX3JlYWRfQVNOMSJ9LAoge0VSUl9GVU5DKEFTTjFfRl9TTUlNRV9URVhUKSwJIlNNSU1FX3RleHQifSwKIHtFUlJfRlVOQyhBU04xX0ZfWDUwOV9DSU5GX05FVyksCSJYNTA5X0NJTkZfTkVXIn0sCkBAIC0yMDcsNiArMjA5LDcgQEAKIHtFUlJfUkVBU09OKEFTTjFfUl9CT09MRUFOX0lTX1dST05HX0xFTkdUSCksImJvb2xlYW4gaXMgd3JvbmcgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihBU04xX1JfQlVGRkVSX1RPT19TTUFMTCkgICAgICwiYnVmZmVyIHRvbyBzbWFsbCJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX0NJUEhFUl9IQVNfTk9fT0JKRUNUX0lERU5USUZJRVIpLCJjaXBoZXIgaGFzIG5vIG9iamVjdCBpZGVudGlmaWVyIn0sCit7RVJSX1JFQVNPTihBU04xX1JfQ09OVEVYVF9OT1RfSU5JVElBTElTRUQpLCJjb250ZXh0IG5vdCBpbml0aWFsaXNlZCJ9LAoge0VSUl9SRUFTT04oQVNOMV9SX0RBVEFfSVNfV1JPTkcpICAgICAgICAsImRhdGEgaXMgd3JvbmcifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9ERUNPREVfRVJST1IpICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEFTTjFfUl9ERUNPRElOR19FUlJPUikgICAgICAgLCJkZWNvZGluZyBlcnJvciJ9LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvYXNuMV9sb2NsLmggYi9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaAppbmRleCA1YWE2NWUyLi45ZmNmMGQ5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaAorKysgYi9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaApAQCAtMTAyLDYgKzEwMiwxMCBAQAogCWludCAoKnBhcmFtX2NtcCkoY29uc3QgRVZQX1BLRVkgKmEsIGNvbnN0IEVWUF9QS0VZICpiKTsKIAlpbnQgKCpwYXJhbV9wcmludCkoQklPICpvdXQsIGNvbnN0IEVWUF9QS0VZICpwa2V5LCBpbnQgaW5kZW50LAogCQkJCQkJCUFTTjFfUENUWCAqcGN0eCk7CisJaW50ICgqc2lnX3ByaW50KShCSU8gKm91dCwKKwkJCSBjb25zdCBYNTA5X0FMR09SICpzaWdhbGcsIGNvbnN0IEFTTjFfU1RSSU5HICpzaWcsCisJCQkJCSBpbnQgaW5kZW50LCBBU04xX1BDVFggKnBjdHgpOworCiAKIAl2b2lkICgqcGtleV9mcmVlKShFVlBfUEtFWSAqcGtleSk7CiAJaW50ICgqcGtleV9jdHJsKShFVlBfUEtFWSAqcGtleSwgaW50IG9wLCBsb25nIGFyZzEsIHZvaWQgKmFyZzIpOwpAQCAtMTExLDYgKzExNSwxMyBAQAogCWludCAoKm9sZF9wcml2X2RlY29kZSkoRVZQX1BLRVkgKnBrZXksCiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqKnBkZXIsIGludCBkZXJsZW4pOwogCWludCAoKm9sZF9wcml2X2VuY29kZSkoY29uc3QgRVZQX1BLRVkgKnBrZXksIHVuc2lnbmVkIGNoYXIgKipwZGVyKTsKKwkvKiBDdXN0b20gQVNOMSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uICovCisJaW50ICgqaXRlbV92ZXJpZnkpKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgQVNOMV9JVEVNICppdCwgdm9pZCAqYXNuLAorCQkJCVg1MDlfQUxHT1IgKmEsIEFTTjFfQklUX1NUUklORyAqc2lnLAorCQkJCUVWUF9QS0VZICpwa2V5KTsKKwlpbnQgKCppdGVtX3NpZ24pKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgQVNOMV9JVEVNICppdCwgdm9pZCAqYXNuLAorCQkJCVg1MDlfQUxHT1IgKmFsZzEsIFg1MDlfQUxHT1IgKmFsZzIsIAorCQkJCUFTTjFfQklUX1NUUklORyAqc2lnKTsKIAogCX0gLyogRVZQX1BLRVlfQVNOMV9NRVRIT0QgKi87CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL25fcGtleS5jIGIvY3J5cHRvL2FzbjEvbl9wa2V5LmMKaW5kZXggZTdkMDQzOS4uZTI1MTczOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvbl9wa2V5LmMKKysrIGIvY3J5cHRvL2FzbjEvbl9wa2V5LmMKQEAgLTEyOSw2ICsxMjksNyBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzI1Nl0sKnp6OwogCXVuc2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CiAJRVZQX0NJUEhFUl9DVFggY3R4OworCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CiAKIAlpZiAoYSA9PSBOVUxMKSByZXR1cm4oMCk7CiAKQEAgLTIwNiwyNCArMjA3LDI4IEBACiAJaSA9IHN0cmxlbigoY2hhciAqKWJ1Zik7CiAJLyogSWYgdGhlIGtleSBpcyB1c2VkIGZvciBTR0MgdGhlIGFsZ29yaXRobSBpcyBtb2RpZmllZCBhIGxpdHRsZS4gKi8KIAlpZihzZ2NrZXkpIHsKLQkJRVZQX0RpZ2VzdChidWYsIGksIGJ1ZiwgTlVMTCwgRVZQX21kNSgpLCBOVUxMKTsKKwkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgaSwgYnVmLCBOVUxMLCBFVlBfbWQ1KCksIE5VTEwpKQorCQkJZ290byBlcnI7CiAJCW1lbWNweShidWYgKyAxNiwgIlNHQ0tFWVNBTFQiLCAxMCk7CiAJCWkgPSAyNjsKIAl9CiAKLQlFVlBfQnl0ZXNUb0tleShFVlBfcmM0KCksRVZQX21kNSgpLE5VTEwsYnVmLGksMSxrZXksTlVMTCk7CisJaWYgKCFFVlBfQnl0ZXNUb0tleShFVlBfcmM0KCksRVZQX21kNSgpLE5VTEwsYnVmLGksMSxrZXksTlVMTCkpCisJCWdvdG8gZXJyOwogCU9QRU5TU0xfY2xlYW5zZShidWYsMjU2KTsKIAogCS8qIEVuY3J5cHQgcHJpdmF0ZSBrZXkgaW4gcGxhY2UgKi8KIAl6eiA9IGVuY2tleS0+ZW5ja2V5LT5kaWdlc3QtPmRhdGE7Ci0JRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLQlFVlBfRW5jcnlwdEluaXRfZXgoJmN0eCxFVlBfcmM0KCksTlVMTCxrZXksTlVMTCk7Ci0JRVZQX0VuY3J5cHRVcGRhdGUoJmN0eCx6eiwmaSx6eixwa2V5bGVuKTsKLQlFVlBfRW5jcnlwdEZpbmFsX2V4KCZjdHgsenogKyBpLCZqKTsKLQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworCWlmICghRVZQX0VuY3J5cHRJbml0X2V4KCZjdHgsRVZQX3JjNCgpLE5VTEwsa2V5LE5VTEwpKQorCQlnb3RvIGVycjsKKwlpZiAoIUVWUF9FbmNyeXB0VXBkYXRlKCZjdHgsenosJmksenoscGtleWxlbikpCisJCWdvdG8gZXJyOworCWlmICghRVZQX0VuY3J5cHRGaW5hbF9leCgmY3R4LHp6ICsgaSwmaikpCisJCWdvdG8gZXJyOwogCiAJcmV0ID0gaTJkX05FVFNDQVBFX0VOQ1JZUFRFRF9QS0VZKGVuY2tleSwgcHApOwogZXJyOgorCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CiAJTkVUU0NBUEVfRU5DUllQVEVEX1BLRVlfZnJlZShlbmNrZXkpOwogCU5FVFNDQVBFX1BLRVlfZnJlZShwa2V5KTsKIAlyZXR1cm4ocmV0KTsKQEAgLTI4OCw2ICsyOTMsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnp6OwogCXVuc2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CiAJRVZQX0NJUEhFUl9DVFggY3R4OworCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CiAKIAlpPWNiKChjaGFyICopYnVmLDI1NiwiRW50ZXIgUHJpdmF0ZSBLZXkgcGFzc3dvcmQ6IiwwKTsKIAlpZiAoaSAhPSAwKQpAQCAtMjk4LDE5ICszMDQsMjIgQEAKIAogCWkgPSBzdHJsZW4oKGNoYXIgKilidWYpOwogCWlmKHNnY2tleSl7Ci0JCUVWUF9EaWdlc3QoYnVmLCBpLCBidWYsIE5VTEwsIEVWUF9tZDUoKSwgTlVMTCk7CisJCWlmICghRVZQX0RpZ2VzdChidWYsIGksIGJ1ZiwgTlVMTCwgRVZQX21kNSgpLCBOVUxMKSkKKwkJCWdvdG8gZXJyOwogCQltZW1jcHkoYnVmICsgMTYsICJTR0NLRVlTQUxUIiwgMTApOwogCQlpID0gMjY7CiAJfQogCQkKLQlFVlBfQnl0ZXNUb0tleShFVlBfcmM0KCksRVZQX21kNSgpLE5VTEwsYnVmLGksMSxrZXksTlVMTCk7CisJaWYgKCFFVlBfQnl0ZXNUb0tleShFVlBfcmM0KCksRVZQX21kNSgpLE5VTEwsYnVmLGksMSxrZXksTlVMTCkpCisJCWdvdG8gZXJyOwogCU9QRU5TU0xfY2xlYW5zZShidWYsMjU2KTsKIAotCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0JRVZQX0RlY3J5cHRJbml0X2V4KCZjdHgsRVZQX3JjNCgpLE5VTEwsIGtleSxOVUxMKTsKLQlFVlBfRGVjcnlwdFVwZGF0ZSgmY3R4LG9zLT5kYXRhLCZpLG9zLT5kYXRhLG9zLT5sZW5ndGgpOwotCUVWUF9EZWNyeXB0RmluYWxfZXgoJmN0eCwmKG9zLT5kYXRhW2ldKSwmaik7Ci0JRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKwlpZiAoIUVWUF9EZWNyeXB0SW5pdF9leCgmY3R4LEVWUF9yYzQoKSxOVUxMLCBrZXksTlVMTCkpCisJCWdvdG8gZXJyOworCWlmICghRVZQX0RlY3J5cHRVcGRhdGUoJmN0eCxvcy0+ZGF0YSwmaSxvcy0+ZGF0YSxvcy0+bGVuZ3RoKSkKKwkJZ290byBlcnI7CisJaWYgKCFFVlBfRGVjcnlwdEZpbmFsX2V4KCZjdHgsJihvcy0+ZGF0YVtpXSksJmopKQorCQlnb3RvIGVycjsKIAlvcy0+bGVuZ3RoPWkrajsKIAogCXp6PW9zLT5kYXRhOwpAQCAtMzI4LDYgKzMzNyw3IEBACiAJCWdvdG8gZXJyOwogCQl9CiBlcnI6CisJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKIAlORVRTQ0FQRV9QS0VZX2ZyZWUocGtleSk7CiAJcmV0dXJuKHJldCk7CiAJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvcDVfcGJldjIuYyBiL2NyeXB0by9hc24xL3A1X3BiZXYyLmMKaW5kZXggY2I0OWI2Ni4uNGVhNjgzMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzbjEvcDVfcGJldjIuYworKysgYi9jcnlwdG8vYXNuMS9wNV9wYmV2Mi5jCkBAIC05MSwxMiArOTEsMTAgQEAKIAkJCQkgdW5zaWduZWQgY2hhciAqYWl2LCBpbnQgcHJmX25pZCkKIHsKIAlYNTA5X0FMR09SICpzY2hlbWUgPSBOVUxMLCAqa2FsZyA9IE5VTEwsICpyZXQgPSBOVUxMOwotCWludCBhbGdfbmlkOworCWludCBhbGdfbmlkLCBrZXlsZW47CiAJRVZQX0NJUEhFUl9DVFggY3R4OwogCXVuc2lnbmVkIGNoYXIgaXZbRVZQX01BWF9JVl9MRU5HVEhdOwotCVBCS0RGMlBBUkFNICprZGYgPSBOVUxMOwogCVBCRTJQQVJBTSAqcGJlMiA9IE5VTEw7Ci0JQVNOMV9PQ1RFVF9TVFJJTkcgKm9zYWx0ID0gTlVMTDsKIAlBU04xX09CSkVDVCAqb2JqOwogCiAJYWxnX25pZCA9IEVWUF9DSVBIRVJfdHlwZShjaXBoZXIpOwpAQCAtMTI3LDcgKzEyNSw4IEBACiAJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKIAogCS8qIER1bW15IGNpcGhlcmluaXQgdG8ganVzdCBzZXR1cCB0aGUgSVYsIGFuZCBQUkYgKi8KLQlFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBjaXBoZXIsIE5VTEwsIE5VTEwsIGl2LCAwKTsKKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIGNpcGhlciwgTlVMTCwgTlVMTCwgaXYsIDApKQorCQlnb3RvIGVycjsKIAlpZihFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoJmN0eCwgc2NoZW1lLT5wYXJhbWV0ZXIpIDwgMCkgewogCQlBU04xZXJyKEFTTjFfRl9QS0NTNV9QQkUyX1NFVF9JViwKIAkJCQkJQVNOMV9SX0VSUk9SX1NFVFRJTkdfQ0lQSEVSX1BBUkFNUyk7CkBAIC0xNDUsNTUgKzE0NCwyMSBAQAogCQl9CiAJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKIAotCWlmKCEoa2RmID0gUEJLREYyUEFSQU1fbmV3KCkpKSBnb3RvIG1lcnI7Ci0JaWYoIShvc2FsdCA9IE1fQVNOMV9PQ1RFVF9TVFJJTkdfbmV3KCkpKSBnb3RvIG1lcnI7Ci0KLQlpZiAoIXNhbHRsZW4pIHNhbHRsZW4gPSBQS0NTNV9TQUxUX0xFTjsKLQlpZiAoIShvc2FsdC0+ZGF0YSA9IE9QRU5TU0xfbWFsbG9jIChzYWx0bGVuKSkpIGdvdG8gbWVycjsKLQlvc2FsdC0+bGVuZ3RoID0gc2FsdGxlbjsKLQlpZiAoc2FsdCkgbWVtY3B5IChvc2FsdC0+ZGF0YSwgc2FsdCwgc2FsdGxlbik7Ci0JZWxzZSBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMgKG9zYWx0LT5kYXRhLCBzYWx0bGVuKSA8IDApIGdvdG8gbWVycjsKLQotCWlmKGl0ZXIgPD0gMCkgaXRlciA9IFBLQ1M1X0RFRkFVTFRfSVRFUjsKLQlpZighQVNOMV9JTlRFR0VSX3NldChrZGYtPml0ZXIsIGl0ZXIpKSBnb3RvIG1lcnI7Ci0KLQkvKiBOb3cgaW5jbHVkZSBzYWx0IGluIGtkZiBzdHJ1Y3R1cmUgKi8KLQlrZGYtPnNhbHQtPnZhbHVlLm9jdGV0X3N0cmluZyA9IG9zYWx0OwotCWtkZi0+c2FsdC0+dHlwZSA9IFZfQVNOMV9PQ1RFVF9TVFJJTkc7Ci0Jb3NhbHQgPSBOVUxMOwotCiAJLyogSWYgaXRzIFJDMiB0aGVuIHdlJ2QgYmV0dGVyIHNldHVwIHRoZSBrZXkgbGVuZ3RoICovCiAKLQlpZihhbGdfbmlkID09IE5JRF9yYzJfY2JjKSB7Ci0JCWlmKCEoa2RmLT5rZXlsZW5ndGggPSBNX0FTTjFfSU5URUdFUl9uZXcoKSkpIGdvdG8gbWVycjsKLQkJaWYoIUFTTjFfSU5URUdFUl9zZXQgKGtkZi0+a2V5bGVuZ3RoLAotCQkJCSBFVlBfQ0lQSEVSX2tleV9sZW5ndGgoY2lwaGVyKSkpIGdvdG8gbWVycjsKLQl9CisJaWYoYWxnX25pZCA9PSBOSURfcmMyX2NiYykKKwkJa2V5bGVuID0gRVZQX0NJUEhFUl9rZXlfbGVuZ3RoKGNpcGhlcik7CisJZWxzZQorCQlrZXlsZW4gPSAtMTsKIAotCS8qIHByZiBjYW4gc3RheSBOVUxMIGlmIHdlIGFyZSB1c2luZyBobWFjV2l0aFNIQTEgKi8KLQlpZiAocHJmX25pZCAhPSBOSURfaG1hY1dpdGhTSEExKQotCQl7Ci0JCWtkZi0+cHJmID0gWDUwOV9BTEdPUl9uZXcoKTsKLQkJaWYgKCFrZGYtPnByZikKLQkJCWdvdG8gbWVycjsKLQkJWDUwOV9BTEdPUl9zZXQwKGtkZi0+cHJmLCBPQkpfbmlkMm9iaihwcmZfbmlkKSwKLQkJCQkJVl9BU04xX05VTEwsIE5VTEwpOwotCQl9CisJLyogU2V0dXAga2V5ZnVuYyAqLwogCi0JLyogTm93IHNldHVwIHRoZSBQQkUyUEFSQU0ga2V5ZnVuYyBzdHJ1Y3R1cmUgKi8KKwlYNTA5X0FMR09SX2ZyZWUocGJlMi0+a2V5ZnVuYyk7CiAKLQlwYmUyLT5rZXlmdW5jLT5hbGdvcml0aG0gPSBPQkpfbmlkMm9iaihOSURfaWRfcGJrZGYyKTsKKwlwYmUyLT5rZXlmdW5jID0gUEtDUzVfcGJrZGYyX3NldChpdGVyLCBzYWx0LCBzYWx0bGVuLCBwcmZfbmlkLCBrZXlsZW4pOwogCi0JLyogRW5jb2RlIFBCS0RGMlBBUkFNIGludG8gcGFyYW1ldGVyIG9mIHBiZTIgKi8KLQotCWlmKCEocGJlMi0+a2V5ZnVuYy0+cGFyYW1ldGVyID0gQVNOMV9UWVBFX25ldygpKSkgZ290byBtZXJyOwotCi0JaWYoIUFTTjFfaXRlbV9wYWNrKGtkZiwgQVNOMV9JVEVNX3JwdHIoUEJLREYyUEFSQU0pLAotCQkJICZwYmUyLT5rZXlmdW5jLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlKSkgZ290byBtZXJyOwotCXBiZTItPmtleWZ1bmMtPnBhcmFtZXRlci0+dHlwZSA9IFZfQVNOMV9TRVFVRU5DRTsKLQotCVBCS0RGMlBBUkFNX2ZyZWUoa2RmKTsKLQlrZGYgPSBOVUxMOworCWlmICghcGJlMi0+a2V5ZnVuYykKKwkJZ290byBtZXJyOwogCiAJLyogTm93IHNldCB1cCB0b3AgbGV2ZWwgQWxnb3JpdGhtSWRlbnRpZmllciAqLwogCkBAIC0yMTksOCArMTg0LDYgQEAKIAllcnI6CiAJUEJFMlBBUkFNX2ZyZWUocGJlMik7CiAJLyogTm90ZSAnc2NoZW1lJyBpcyBmcmVlZCBhcyBwYXJ0IG9mIHBiZTIgKi8KLQlNX0FTTjFfT0NURVRfU1RSSU5HX2ZyZWUob3NhbHQpOwotCVBCS0RGMlBBUkFNX2ZyZWUoa2RmKTsKIAlYNTA5X0FMR09SX2ZyZWUoa2FsZyk7CiAJWDUwOV9BTEdPUl9mcmVlKHJldCk7CiAKQEAgLTIzMywzICsxOTYsODUgQEAKIAl7CiAJcmV0dXJuIFBLQ1M1X3BiZTJfc2V0X2l2KGNpcGhlciwgaXRlciwgc2FsdCwgc2FsdGxlbiwgTlVMTCwgLTEpOwogCX0KKworWDUwOV9BTEdPUiAqUEtDUzVfcGJrZGYyX3NldChpbnQgaXRlciwgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCisJCQkJaW50IHByZl9uaWQsIGludCBrZXlsZW4pCisJeworCVg1MDlfQUxHT1IgKmtleWZ1bmMgPSBOVUxMOworCVBCS0RGMlBBUkFNICprZGYgPSBOVUxMOworCUFTTjFfT0NURVRfU1RSSU5HICpvc2FsdCA9IE5VTEw7CisKKwlpZighKGtkZiA9IFBCS0RGMlBBUkFNX25ldygpKSkKKwkJZ290byBtZXJyOworCWlmKCEob3NhbHQgPSBNX0FTTjFfT0NURVRfU1RSSU5HX25ldygpKSkKKwkJZ290byBtZXJyOworCisJa2RmLT5zYWx0LT52YWx1ZS5vY3RldF9zdHJpbmcgPSBvc2FsdDsKKwlrZGYtPnNhbHQtPnR5cGUgPSBWX0FTTjFfT0NURVRfU1RSSU5HOworCisJaWYgKCFzYWx0bGVuKQorCQlzYWx0bGVuID0gUEtDUzVfU0FMVF9MRU47CisJaWYgKCEob3NhbHQtPmRhdGEgPSBPUEVOU1NMX21hbGxvYyAoc2FsdGxlbikpKQorCQlnb3RvIG1lcnI7CisKKwlvc2FsdC0+bGVuZ3RoID0gc2FsdGxlbjsKKworCWlmIChzYWx0KQorCQltZW1jcHkgKG9zYWx0LT5kYXRhLCBzYWx0LCBzYWx0bGVuKTsKKwllbHNlIGlmIChSQU5EX3BzZXVkb19ieXRlcyAob3NhbHQtPmRhdGEsIHNhbHRsZW4pIDwgMCkKKwkJZ290byBtZXJyOworCisJaWYoaXRlciA8PSAwKQorCQlpdGVyID0gUEtDUzVfREVGQVVMVF9JVEVSOworCisJaWYoIUFTTjFfSU5URUdFUl9zZXQoa2RmLT5pdGVyLCBpdGVyKSkKKwkJZ290byBtZXJyOworCisJLyogSWYgaGF2ZSBhIGtleSBsZW4gc2V0IGl0IHVwICovCisKKwlpZihrZXlsZW4gPiAwKSAKKwkJeworCQlpZighKGtkZi0+a2V5bGVuZ3RoID0gTV9BU04xX0lOVEVHRVJfbmV3KCkpKQorCQkJZ290byBtZXJyOworCQlpZighQVNOMV9JTlRFR0VSX3NldCAoa2RmLT5rZXlsZW5ndGgsIGtleWxlbikpCisJCQlnb3RvIG1lcnI7CisJCX0KKworCS8qIHByZiBjYW4gc3RheSBOVUxMIGlmIHdlIGFyZSB1c2luZyBobWFjV2l0aFNIQTEgKi8KKwlpZiAocHJmX25pZCA+IDAgJiYgcHJmX25pZCAhPSBOSURfaG1hY1dpdGhTSEExKQorCQl7CisJCWtkZi0+cHJmID0gWDUwOV9BTEdPUl9uZXcoKTsKKwkJaWYgKCFrZGYtPnByZikKKwkJCWdvdG8gbWVycjsKKwkJWDUwOV9BTEdPUl9zZXQwKGtkZi0+cHJmLCBPQkpfbmlkMm9iaihwcmZfbmlkKSwKKwkJCQkJVl9BU04xX05VTEwsIE5VTEwpOworCQl9CisKKwkvKiBGaW5hbGx5IHNldHVwIHRoZSBrZXlmdW5jIHN0cnVjdHVyZSAqLworCisJa2V5ZnVuYyA9IFg1MDlfQUxHT1JfbmV3KCk7CisJaWYgKCFrZXlmdW5jKQorCQlnb3RvIG1lcnI7CisKKwlrZXlmdW5jLT5hbGdvcml0aG0gPSBPQkpfbmlkMm9iaihOSURfaWRfcGJrZGYyKTsKKworCS8qIEVuY29kZSBQQktERjJQQVJBTSBpbnRvIHBhcmFtZXRlciBvZiBwYmUyICovCisKKwlpZighKGtleWZ1bmMtPnBhcmFtZXRlciA9IEFTTjFfVFlQRV9uZXcoKSkpCisJCWdvdG8gbWVycjsKKworCWlmKCFBU04xX2l0ZW1fcGFjayhrZGYsIEFTTjFfSVRFTV9ycHRyKFBCS0RGMlBBUkFNKSwKKwkJCSAma2V5ZnVuYy0+cGFyYW1ldGVyLT52YWx1ZS5zZXF1ZW5jZSkpCisJCWdvdG8gbWVycjsKKwlrZXlmdW5jLT5wYXJhbWV0ZXItPnR5cGUgPSBWX0FTTjFfU0VRVUVOQ0U7CisKKwlQQktERjJQQVJBTV9mcmVlKGtkZik7CisJcmV0dXJuIGtleWZ1bmM7CisKKwltZXJyOgorCUFTTjFlcnIoQVNOMV9GX1BLQ1M1X1BCS0RGMl9TRVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCVBCS0RGMlBBUkFNX2ZyZWUoa2RmKTsKKwlYNTA5X0FMR09SX2ZyZWUoa2V5ZnVuYyk7CisJcmV0dXJuIE5VTEw7CisJfQorCmRpZmYgLS1naXQgYS9jcnlwdG8vYXNuMS90X2NybC5jIGIvY3J5cHRvL2FzbjEvdF9jcmwuYwppbmRleCBlZTVhNjg3Li5jNjExNjkyIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90X2NybC5jCisrKyBiL2NyeXB0by9hc24xL3RfY3JsLmMKQEAgLTk0LDggKzk0LDcgQEAKIAlsID0gWDUwOV9DUkxfZ2V0X3ZlcnNpb24oeCk7CiAJQklPX3ByaW50ZihvdXQsICIlOHNWZXJzaW9uICVsdSAoMHglbHgpXG4iLCAiIiwgbCsxLCBsKTsKIAlpID0gT0JKX29iajJuaWQoeC0+c2lnX2FsZy0+YWxnb3JpdGhtKTsKLQlCSU9fcHJpbnRmKG91dCwgIiU4c1NpZ25hdHVyZSBBbGdvcml0aG06ICVzXG4iLCAiIiwKLQkJCQkgKGkgPT0gTklEX3VuZGVmKSA/ICJOT05FIiA6IE9CSl9uaWQybG4oaSkpOworCVg1MDlfc2lnbmF0dXJlX3ByaW50KG91dCwgeC0+c2lnX2FsZywgTlVMTCk7CiAJcD1YNTA5X05BTUVfb25lbGluZShYNTA5X0NSTF9nZXRfaXNzdWVyKHgpLE5VTEwsMCk7CiAJQklPX3ByaW50ZihvdXQsIiU4c0lzc3VlcjogJXNcbiIsIiIscCk7CiAJT1BFTlNTTF9mcmVlKHApOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzbjEvdF94NTA5LmMgYi9jcnlwdG8vYXNuMS90X3g1MDkuYwppbmRleCA4OWU3YTdmLi5lZGJiMzlhIDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS90X3g1MDkuYworKysgYi9jcnlwdG8vYXNuMS90X3g1MDkuYwpAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgogI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSAiYXNuMV9sb2NsLmgiCiAKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKIGludCBYNTA5X3ByaW50X2ZwKEZJTEUgKmZwLCBYNTA5ICp4KQpAQCAtMTM3LDcgKzEzOCw3IEBACiAJCWlmIChCSU9fd3JpdGUoYnAsIiAgICAgICAgU2VyaWFsIE51bWJlcjoiLDIyKSA8PSAwKSBnb3RvIGVycjsKIAogCQlicz1YNTA5X2dldF9zZXJpYWxOdW1iZXIoeCk7Ci0JCWlmIChicy0+bGVuZ3RoIDw9IDQpCisJCWlmIChicy0+bGVuZ3RoIDw9IChpbnQpc2l6ZW9mKGxvbmcpKQogCQkJewogCQkJbD1BU04xX0lOVEVHRVJfZ2V0KGJzKTsKIAkJCWlmIChicy0+dHlwZSA9PSBWX0FTTjFfTkVHX0lOVEVHRVIpCkBAIC0xNjcsMTIgKzE2OCwxNiBAQAogCiAJaWYoIShjZmxhZyAmIFg1MDlfRkxBR19OT19TSUdOQU1FKSkKIAkJeworCQlpZihYNTA5X3NpZ25hdHVyZV9wcmludChicCwgeC0+c2lnX2FsZywgTlVMTCkgPD0gMCkKKwkJCWdvdG8gZXJyOworI2lmIDAKIAkJaWYgKEJJT19wcmludGYoYnAsIiU4c1NpZ25hdHVyZSBBbGdvcml0aG06ICIsIiIpIDw9IDApIAogCQkJZ290byBlcnI7CiAJCWlmIChpMmFfQVNOMV9PQkpFQ1QoYnAsIGNpLT5zaWduYXR1cmUtPmFsZ29yaXRobSkgPD0gMCkKIAkJCWdvdG8gZXJyOwogCQlpZiAoQklPX3B1dHMoYnAsICJcbiIpIDw9IDApCiAJCQlnb3RvIGVycjsKKyNlbmRpZgogCQl9CiAKIAlpZighKGNmbGFnICYgWDUwOV9GTEFHX05PX0lTU1VFUikpCkBAIC0yNTUsNyArMjYwLDggQEAKIAkJZ290byBlcnI7CiAJaTJkX1g1MDlfTkFNRSh4LT5jZXJ0X2luZm8tPnN1YmplY3QsICZkZXJ0bXApOwogCi0JRVZQX0RpZ2VzdChkZXIsIGRlcmxlbiwgU0hBMW1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKTsKKwlpZiAoIUVWUF9EaWdlc3QoZGVyLCBkZXJsZW4sIFNIQTFtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpCisJCWdvdG8gZXJyOwogCWZvciAoaT0wOyBpIDwgU0hBX0RJR0VTVF9MRU5HVEg7IGkrKykKIAkJewogCQlpZiAoQklPX3ByaW50ZihicCwiJTAyWCIsU0hBMW1kW2ldKSA8PSAwKSBnb3RvIGVycjsKQEAgLTI2OCw4ICsyNzQsMTAgQEAKIAlpZiAoQklPX3ByaW50ZihicCwiXG4gICAgICAgIFB1YmxpYyBrZXkgT0NTUCBoYXNoOiAiKSA8PSAwKQogCQlnb3RvIGVycjsKIAotCUVWUF9EaWdlc3QoeC0+Y2VydF9pbmZvLT5rZXktPnB1YmxpY19rZXktPmRhdGEsCi0JCXgtPmNlcnRfaW5mby0+a2V5LT5wdWJsaWNfa2V5LT5sZW5ndGgsIFNIQTFtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KHgtPmNlcnRfaW5mby0+a2V5LT5wdWJsaWNfa2V5LT5kYXRhLAorCQkJeC0+Y2VydF9pbmZvLT5rZXktPnB1YmxpY19rZXktPmxlbmd0aCwKKwkJCVNIQTFtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpCisJCWdvdG8gZXJyOwogCWZvciAoaT0wOyBpIDwgU0hBX0RJR0VTVF9MRU5HVEg7IGkrKykKIAkJewogCQlpZiAoQklPX3ByaW50ZihicCwiJTAyWCIsU0hBMW1kW2ldKSA8PSAwKQpAQCAtMjgzLDIzICsyOTEsNTAgQEAKIAlyZXR1cm4oMCk7CiAJfQogCi1pbnQgWDUwOV9zaWduYXR1cmVfcHJpbnQoQklPICpicCwgWDUwOV9BTEdPUiAqc2lnYWxnLCBBU04xX1NUUklORyAqc2lnKQoraW50IFg1MDlfc2lnbmF0dXJlX2R1bXAoQklPICpicCwgY29uc3QgQVNOMV9TVFJJTkcgKnNpZywgaW50IGluZGVudCkKIHsKLQl1bnNpZ25lZCBjaGFyICpzOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnM7CiAJaW50IGksIG47Ci0JaWYgKEJJT19wdXRzKGJwLCIgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogIikgPD0gMCkgcmV0dXJuIDA7Ci0JaWYgKGkyYV9BU04xX09CSkVDVChicCwgc2lnYWxnLT5hbGdvcml0aG0pIDw9IDApIHJldHVybiAwOwogCiAJbj1zaWctPmxlbmd0aDsKIAlzPXNpZy0+ZGF0YTsKIAlmb3IgKGk9MDsgaTxuOyBpKyspCiAJCXsKIAkJaWYgKChpJTE4KSA9PSAwKQotCQkJaWYgKEJJT193cml0ZShicCwiXG4gICAgICAgICIsOSkgPD0gMCkgcmV0dXJuIDA7CisJCQl7CisJCQlpZiAoQklPX3dyaXRlKGJwLCJcbiIsMSkgPD0gMCkgcmV0dXJuIDA7CisJCQlpZiAoQklPX2luZGVudChicCwgaW5kZW50LCBpbmRlbnQpIDw9IDApIHJldHVybiAwOworCQkJfQogCQkJaWYgKEJJT19wcmludGYoYnAsIiUwMnglcyIsc1tpXSwKIAkJCQkoKGkrMSkgPT0gbik/IiI6IjoiKSA8PSAwKSByZXR1cm4gMDsKIAkJfQogCWlmIChCSU9fd3JpdGUoYnAsIlxuIiwxKSAhPSAxKSByZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitpbnQgWDUwOV9zaWduYXR1cmVfcHJpbnQoQklPICpicCwgWDUwOV9BTEdPUiAqc2lnYWxnLCBBU04xX1NUUklORyAqc2lnKQoreworCWludCBzaWdfbmlkOworCWlmIChCSU9fcHV0cyhicCwiICAgIFNpZ25hdHVyZSBBbGdvcml0aG06ICIpIDw9IDApIHJldHVybiAwOworCWlmIChpMmFfQVNOMV9PQkpFQ1QoYnAsIHNpZ2FsZy0+YWxnb3JpdGhtKSA8PSAwKSByZXR1cm4gMDsKKworCXNpZ19uaWQgPSBPQkpfb2JqMm5pZChzaWdhbGctPmFsZ29yaXRobSk7CisJaWYgKHNpZ19uaWQgIT0gTklEX3VuZGVmKQorCQl7CisJCWludCBwa2V5X25pZCwgZGlnX25pZDsKKwkJY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgKmFtZXRoOworCQlpZiAoT0JKX2ZpbmRfc2lnaWRfYWxncyhzaWdfbmlkLCAmZGlnX25pZCwgJnBrZXlfbmlkKSkKKwkJCXsKKwkJCWFtZXRoID0gRVZQX1BLRVlfYXNuMV9maW5kKE5VTEwsIHBrZXlfbmlkKTsKKwkJCWlmIChhbWV0aCAmJiBhbWV0aC0+c2lnX3ByaW50KQorCQkJCXJldHVybiBhbWV0aC0+c2lnX3ByaW50KGJwLCBzaWdhbGcsIHNpZywgOSwgMCk7CisJCQl9CisJCX0KKwlpZiAoc2lnKQorCQlyZXR1cm4gWDUwOV9zaWduYXR1cmVfZHVtcChicCwgc2lnLCA5KTsKKwllbHNlIGlmIChCSU9fcHV0cyhicCwgIlxuIikgPD0gMCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc24xL3hfYWxnb3IuYyBiL2NyeXB0by9hc24xL3hfYWxnb3IuYwppbmRleCA5OWU1MzQyLi4yNzRlNDU2IDEwMDY0NAotLS0gYS9jcnlwdG8vYXNuMS94X2FsZ29yLmMKKysrIGIvY3J5cHRvL2FzbjEveF9hbGdvci5jCkBAIC0xMjgsMyArMTI4LDE3IEBACiAJCX0KIAl9CiAKKy8qIFNldCB1cCBhbiBYNTA5X0FMR09SIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgZnJvbSBhbiBFVlBfTUQgKi8KKwordm9pZCBYNTA5X0FMR09SX3NldF9tZChYNTA5X0FMR09SICphbGcsIGNvbnN0IEVWUF9NRCAqbWQpCisJeworCWludCBwYXJhbV90eXBlOworCisJaWYgKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCkKKwkJcGFyYW1fdHlwZSA9IFZfQVNOMV9VTkRFRjsKKwllbHNlCisJCXBhcmFtX3R5cGUgPSBWX0FTTjFfTlVMTDsKKworCVg1MDlfQUxHT1Jfc2V0MChhbGcsIE9CSl9uaWQyb2JqKEVWUF9NRF90eXBlKG1kKSksIHBhcmFtX3R5cGUsIE5VTEwpOworCisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JmL2JmX3NrZXkuYyBiL2NyeXB0by9iZi9iZl9za2V5LmMKaW5kZXggMzY3M2NkZS4uM2IwYmNhNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2JmL2JmX3NrZXkuYworKysgYi9jcnlwdG8vYmYvYmZfc2tleS5jCkBAIC01OCwxMSArNTgsMTkgQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Jsb3dmaXNoLmg+CiAjaW5jbHVkZSAiYmZfbG9jbC5oIgogI2luY2x1ZGUgImJmX3BpLmgiCiAKIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwl7CisJZmlwc19jaXBoZXJfYWJvcnQoQkxPV0ZJU0gpOworCXByaXZhdGVfQkZfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisJfQordm9pZCBwcml2YXRlX0JGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisjZW5kaWYKIAl7CiAJaW50IGk7CiAJQkZfTE9ORyAqcCxyaSxpblsyXTsKZGlmZiAtLWdpdCBhL2NyeXB0by9iZi9ibG93ZmlzaC5oIGIvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKaW5kZXggYjk3ZTc2Zi4uNGI2Yzg5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKKysrIGIvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKQEAgLTEwNCw3ICsxMDQsOSBAQAogCUJGX0xPTkcgU1s0KjI1Nl07CiAJfSBCRl9LRVk7CiAKLSAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCit2b2lkIHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CiAKIHZvaWQgQkZfZW5jcnlwdChCRl9MT05HICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9iaW8vYmlvLmggYi9jcnlwdG8vYmlvL2Jpby5oCmluZGV4IDNjMzlkMTguLjA1Njk5YWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9iaW8vYmlvLmgKKysrIGIvY3J5cHRvL2Jpby9iaW8uaApAQCAtNjgsNiArNjgsMTQgQEAKIAogI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisjIGlmbmRlZiBPUEVOU1NMX1NZU19WTVMKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVsc2UKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyMgZW5kaWYKKyNlbmRpZgorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtOTUsNiArMTAzLDkgQEAKICNkZWZpbmUgQklPX1RZUEVfQklPCQkoMTl8MHgwNDAwKQkJLyogKGhhbGYgYSkgQklPIHBhaXIgKi8KICNkZWZpbmUgQklPX1RZUEVfTElORUJVRkZFUgkoMjB8MHgwMjAwKQkJLyogZmlsdGVyICovCiAjZGVmaW5lIEJJT19UWVBFX0RHUkFNCQkoMjF8MHgwNDAwfDB4MDEwMCkKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisjZGVmaW5lIEJJT19UWVBFX0RHUkFNX1NDVFAJKDI0fDB4MDQwMHwweDAxMDApCisjZW5kaWYKICNkZWZpbmUgQklPX1RZUEVfQVNOMSAJCSgyMnwweDAyMDApCQkvKiBmaWx0ZXIgKi8KICNkZWZpbmUgQklPX1RZUEVfQ09NUCAJCSgyM3wweDAyMDApCQkvKiBmaWx0ZXIgKi8KIApAQCAtMTYyLDcgKzE3MywyMiBAQAogI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TRVRfUEVFUiAgICAgICAgICAgNDQgLyogRGVzdGluYXRpb24gZm9yIHRoZSBkYXRhICovCiAKICNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0VUX05FWFRfVElNRU9VVCAgIDQ1IC8qIE5leHQgRFRMUyBoYW5kc2hha2UgdGltZW91dCB0bwotCQkJCQkJCQkJCQkgICogYWRqdXN0IHNvY2tldCB0aW1lb3V0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWRqdXN0IHNvY2tldCB0aW1lb3V0cyAqLworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorLyogU0NUUCBzdHVmZiAqLworI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NFVF9JTl9IQU5EU0hBS0UJNTAKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9BRERfQVVUSF9LRVkJCTUxCisjZGVmaW5lIEJJT19DVFJMX0RHUkFNX1NDVFBfTkVYVF9BVVRIX0tFWQkJNTIKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9BVVRIX0NDU19SQ1ZECQk1MworI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0dFVF9TTkRJTkZPCQk2MAorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NFVF9TTkRJTkZPCQk2MQorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0dFVF9SQ1ZJTkZPCQk2MgorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NFVF9SQ1ZJTkZPCQk2MworI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0dFVF9QUklORk8JCQk2NAorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NFVF9QUklORk8JCQk2NQorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NBVkVfU0hVVERPV04JCTcwCisjZW5kaWYKIAogLyogbW9kaWZpZXJzICovCiAjZGVmaW5lIEJJT19GUF9SRUFECQkweDAyCkBAIC0zMzIsNiArMzU4LDM0IEBACiAvKiBQcmVmaXggYW5kIHN1ZmZpeCBjYWxsYmFjayBpbiBBU04xIEJJTyAqLwogdHlwZWRlZiBpbnQgYXNuMV9wc19mdW5jKEJJTyAqYiwgdW5zaWduZWQgY2hhciAqKnBidWYsIGludCAqcGxlbiwgdm9pZCAqcGFyZyk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisvKiBTQ1RQIHBhcmFtZXRlciBzdHJ1Y3RzICovCitzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfc25kaW5mbworCXsKKwl1aW50MTZfdCBzbmRfc2lkOworCXVpbnQxNl90IHNuZF9mbGFnczsKKwl1aW50MzJfdCBzbmRfcHBpZDsKKwl1aW50MzJfdCBzbmRfY29udGV4dDsKKwl9OworCitzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfcmN2aW5mbworCXsKKwl1aW50MTZfdCByY3Zfc2lkOworCXVpbnQxNl90IHJjdl9zc247CisJdWludDE2X3QgcmN2X2ZsYWdzOworCXVpbnQzMl90IHJjdl9wcGlkOworCXVpbnQzMl90IHJjdl90c247CisJdWludDMyX3QgcmN2X2N1bXRzbjsKKwl1aW50MzJfdCByY3ZfY29udGV4dDsKKwl9OworCitzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfcHJpbmZvCisJeworCXVpbnQxNl90IHByX3BvbGljeTsKKwl1aW50MzJfdCBwcl92YWx1ZTsKKwl9OworI2VuZGlmCisKIC8qIGNvbm5lY3QgQklPIHN0dWZmICovCiAjZGVmaW5lIEJJT19DT05OX1NfQkVGT1JFCQkxCiAjZGVmaW5lIEJJT19DT05OX1NfR0VUX0lQCQkyCkBAIC02MjksNiArNjgzLDkgQEAKIEJJT19NRVRIT0QgKkJJT19mX25iaW9fdGVzdCh2b2lkKTsKICNpZm5kZWYgT1BFTlNTTF9OT19ER1JBTQogQklPX01FVEhPRCAqQklPX3NfZGF0YWdyYW0odm9pZCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorQklPX01FVEhPRCAqQklPX3NfZGF0YWdyYW1fc2N0cCh2b2lkKTsKKyNlbmRpZgogI2VuZGlmCiAKIC8qIEJJT19NRVRIT0QgKkJJT19mX2Jlcih2b2lkKTsgKi8KQEAgLTY3MSw2ICs3MjgsMTUgQEAKIAogQklPICpCSU9fbmV3X3NvY2tldChpbnQgc29jaywgaW50IGNsb3NlX2ZsYWcpOwogQklPICpCSU9fbmV3X2RncmFtKGludCBmZCwgaW50IGNsb3NlX2ZsYWcpOworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKK0JJTyAqQklPX25ld19kZ3JhbV9zY3RwKGludCBmZCwgaW50IGNsb3NlX2ZsYWcpOworaW50IEJJT19kZ3JhbV9pc19zY3RwKEJJTyAqYmlvKTsKK2ludCBCSU9fZGdyYW1fc2N0cF9ub3RpZmljYXRpb25fY2IoQklPICpiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqaGFuZGxlX25vdGlmaWNhdGlvbnMpKEJJTyAqYmlvLCB2b2lkICpjb250ZXh0LCB2b2lkICpidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KTsKK2ludCBCSU9fZGdyYW1fc2N0cF93YWl0X2Zvcl9kcnkoQklPICpiKTsKK2ludCBCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZyhCSU8gKmIpOworI2VuZGlmCiBCSU8gKkJJT19uZXdfZmQoaW50IGZkLCBpbnQgY2xvc2VfZmxhZyk7CiBCSU8gKkJJT19uZXdfY29ubmVjdChjaGFyICpob3N0X3BvcnQpOwogQklPICpCSU9fbmV3X2FjY2VwdChjaGFyICpob3N0X3BvcnQpOwpAQCAtNzM1LDYgKzgwMSw3IEBACiAjZGVmaW5lIEJJT19GX0JVRkZFUl9DVFJMCQkJCSAxMTQKICNkZWZpbmUgQklPX0ZfQ09OTl9DVFJMCQkJCQkgMTI3CiAjZGVmaW5lIEJJT19GX0NPTk5fU1RBVEUJCQkJIDExNQorI2RlZmluZSBCSU9fRl9ER1JBTV9TQ1RQX1JFQUQJCQkJIDEzMgogI2RlZmluZSBCSU9fRl9GSUxFX0NUUkwJCQkJCSAxMTYKICNkZWZpbmUgQklPX0ZfRklMRV9SRUFECQkJCQkgMTMwCiAjZGVmaW5lIEJJT19GX0xJTkVCVUZGRVJfQ1RSTAkJCQkgMTI5CmRpZmYgLS1naXQgYS9jcnlwdG8vYmlvL2Jpb19lcnIuYyBiL2NyeXB0by9iaW8vYmlvX2Vyci5jCmluZGV4IGEyMjRlZGQuLjBkYmZiZDggMTAwNjQ0Ci0tLSBhL2NyeXB0by9iaW8vYmlvX2Vyci5jCisrKyBiL2NyeXB0by9iaW8vYmlvX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2Jpby9iaW9fZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05NSw2ICs5NSw3IEBACiB7RVJSX0ZVTkMoQklPX0ZfQlVGRkVSX0NUUkwpLAkiQlVGRkVSX0NUUkwifSwKIHtFUlJfRlVOQyhCSU9fRl9DT05OX0NUUkwpLAkiQ09OTl9DVFJMIn0sCiB7RVJSX0ZVTkMoQklPX0ZfQ09OTl9TVEFURSksCSJDT05OX1NUQVRFIn0sCit7RVJSX0ZVTkMoQklPX0ZfREdSQU1fU0NUUF9SRUFEKSwJIkRHUkFNX1NDVFBfUkVBRCJ9LAoge0VSUl9GVU5DKEJJT19GX0ZJTEVfQ1RSTCksCSJGSUxFX0NUUkwifSwKIHtFUlJfRlVOQyhCSU9fRl9GSUxFX1JFQUQpLAkiRklMRV9SRUFEIn0sCiB7RVJSX0ZVTkMoQklPX0ZfTElORUJVRkZFUl9DVFJMKSwJIkxJTkVCVUZGRVJfQ1RSTCJ9LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jpby9ic3NfYmlvLmMgYi9jcnlwdG8vYmlvL2Jzc19iaW8uYwppbmRleCA3NmJkNDhlLi41MmVmMGViIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19iaW8uYworKysgYi9jcnlwdG8vYmlvL2Jzc19iaW8uYwpAQCAtMjc3LDEwICsyNzcsMTAgQEAKICAqLwogLyogV0FSTklORzogVGhlIG5vbi1jb3B5aW5nIGludGVyZmFjZSBpcyBsYXJnZWx5IHVudGVzdGVkIGFzIG9mIHlldAogICogYW5kIG1heSBjb250YWluIGJ1Z3MuICovCi1zdGF0aWMgc3NpemVfdCBiaW9fbnJlYWQwKEJJTyAqYmlvLCBjaGFyICoqYnVmKQorc3RhdGljIG9zc2xfc3NpemVfdCBiaW9fbnJlYWQwKEJJTyAqYmlvLCBjaGFyICoqYnVmKQogCXsKIAlzdHJ1Y3QgYmlvX2Jpb19zdCAqYiwgKnBlZXJfYjsKLQlzc2l6ZV90IG51bTsKKwlvc3NsX3NzaXplX3QgbnVtOwogCQogCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiaW8pOwogCkBAIC0zMTUsMTUgKzMxNSwxNSBAQAogCXJldHVybiBudW07CiAJfQogCi1zdGF0aWMgc3NpemVfdCBiaW9fbnJlYWQoQklPICpiaW8sIGNoYXIgKipidWYsIHNpemVfdCBudW1fKQorc3RhdGljIG9zc2xfc3NpemVfdCBiaW9fbnJlYWQoQklPICpiaW8sIGNoYXIgKipidWYsIHNpemVfdCBudW1fKQogCXsKIAlzdHJ1Y3QgYmlvX2Jpb19zdCAqYiwgKnBlZXJfYjsKLQlzc2l6ZV90IG51bSwgYXZhaWxhYmxlOworCW9zc2xfc3NpemVfdCBudW0sIGF2YWlsYWJsZTsKIAogCWlmIChudW1fID4gU1NJWkVfTUFYKQogCQludW0gPSBTU0laRV9NQVg7CiAJZWxzZQotCQludW0gPSAoc3NpemVfdCludW1fOworCQludW0gPSAob3NzbF9zc2l6ZV90KW51bV87CiAKIAlhdmFpbGFibGUgPSBiaW9fbnJlYWQwKGJpbywgYnVmKTsKIAlpZiAobnVtID4gYXZhaWxhYmxlKQpAQCAtNDI4LDcgKzQyOCw3IEBACiAgKiAoZXhhbXBsZSB1c2FnZTogIGJpb19ud3JpdGUwKCksIHdyaXRlIHRvIGJ1ZmZlciwgYmlvX253cml0ZSgpCiAgKiAgb3IganVzdCAgICAgICAgIGJpb19ud3JpdGUoKSwgd3JpdGUgdG8gYnVmZmVyKQogICovCi1zdGF0aWMgc3NpemVfdCBiaW9fbndyaXRlMChCSU8gKmJpbywgY2hhciAqKmJ1ZikKK3N0YXRpYyBvc3NsX3NzaXplX3QgYmlvX253cml0ZTAoQklPICpiaW8sIGNoYXIgKipidWYpCiAJewogCXN0cnVjdCBiaW9fYmlvX3N0ICpiOwogCXNpemVfdCBudW07CkBAIC00NzYsMTUgKzQ3NiwxNSBAQAogCXJldHVybiBudW07CiAJfQogCi1zdGF0aWMgc3NpemVfdCBiaW9fbndyaXRlKEJJTyAqYmlvLCBjaGFyICoqYnVmLCBzaXplX3QgbnVtXykKK3N0YXRpYyBvc3NsX3NzaXplX3QgYmlvX253cml0ZShCSU8gKmJpbywgY2hhciAqKmJ1Ziwgc2l6ZV90IG51bV8pCiAJewogCXN0cnVjdCBiaW9fYmlvX3N0ICpiOwotCXNzaXplX3QgbnVtLCBzcGFjZTsKKwlvc3NsX3NzaXplX3QgbnVtLCBzcGFjZTsKIAogCWlmIChudW1fID4gU1NJWkVfTUFYKQogCQludW0gPSBTU0laRV9NQVg7CiAJZWxzZQotCQludW0gPSAoc3NpemVfdCludW1fOworCQludW0gPSAob3NzbF9zc2l6ZV90KW51bV87CiAKIAlzcGFjZSA9IGJpb19ud3JpdGUwKGJpbywgYnVmKTsKIAlpZiAobnVtID4gc3BhY2UpCmRpZmYgLS1naXQgYS9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jIGIvY3J5cHRvL2Jpby9ic3NfZGdyYW0uYwppbmRleCBhZDljMzcyLi4xYjFlNGJlIDEwMDY0NAotLS0gYS9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jCisrKyBiL2NyeXB0by9iaW8vYnNzX2RncmFtLmMKQEAgLTcwLDYgKzcwLDEzIEBACiAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CiAjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2RlZmluZSBPUEVOU1NMX1NDVFBfREFUQV9DSFVOS19UWVBFICAgICAgICAgICAgMHgwMAorI2RlZmluZSBPUEVOU1NMX1NDVFBfRk9SV0FSRF9DVU1fVFNOX0NIVU5LX1RZUEUgMHhjMAorI2VuZGlmCisKICNpZmRlZiBPUEVOU1NMX1NZU19MSU5VWAogI2RlZmluZSBJUF9NVFUgICAgICAxNCAvKiBsaW51eCBpcyBsYW1lICovCiAjZW5kaWYKQEAgLTg4LDYgKzk1LDE4IEBACiBzdGF0aWMgaW50IGRncmFtX2ZyZWUoQklPICpkYXRhKTsKIHN0YXRpYyBpbnQgZGdyYW1fY2xlYXIoQklPICpiaW8pOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorc3RhdGljIGludCBkZ3JhbV9zY3RwX3dyaXRlKEJJTyAqaCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbnVtKTsKK3N0YXRpYyBpbnQgZGdyYW1fc2N0cF9yZWFkKEJJTyAqaCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IGRncmFtX3NjdHBfcHV0cyhCSU8gKmgsIGNvbnN0IGNoYXIgKnN0cik7CitzdGF0aWMgbG9uZyBkZ3JhbV9zY3RwX2N0cmwoQklPICpoLCBpbnQgY21kLCBsb25nIGFyZzEsIHZvaWQgKmFyZzIpOworc3RhdGljIGludCBkZ3JhbV9zY3RwX25ldyhCSU8gKmgpOworc3RhdGljIGludCBkZ3JhbV9zY3RwX2ZyZWUoQklPICpkYXRhKTsKKyNpZmRlZiBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UCitzdGF0aWMgdm9pZCBkZ3JhbV9zY3RwX2hhbmRsZV9hdXRoX2ZyZWVfa2V5X2V2ZW50KEJJTyAqYiwgdW5pb24gc2N0cF9ub3RpZmljYXRpb24gKnNucCk7CisjZW5kaWYKKyNlbmRpZgorCiBzdGF0aWMgaW50IEJJT19kZ3JhbV9zaG91bGRfcmV0cnkoaW50IHMpOwogCiBzdGF0aWMgdm9pZCBnZXRfY3VycmVudF90aW1lKHN0cnVjdCB0aW1ldmFsICp0KTsKQEAgLTEwNiw2ICsxMjUsMjIgQEAKIAlOVUxMLAogCX07CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCitzdGF0aWMgQklPX01FVEhPRCBtZXRob2RzX2RncmFtcF9zY3RwPQorCXsKKwlCSU9fVFlQRV9ER1JBTV9TQ1RQLAorCSJkYXRhZ3JhbSBzY3RwIHNvY2tldCIsCisJZGdyYW1fc2N0cF93cml0ZSwKKwlkZ3JhbV9zY3RwX3JlYWQsCisJZGdyYW1fc2N0cF9wdXRzLAorCU5VTEwsIC8qIGRncmFtX2dldHMsICovCisJZGdyYW1fc2N0cF9jdHJsLAorCWRncmFtX3NjdHBfbmV3LAorCWRncmFtX3NjdHBfZnJlZSwKKwlOVUxMLAorCX07CisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgYmlvX2RncmFtX2RhdGFfc3QKIAl7CiAJdW5pb24gewpAQCAtMTIyLDYgKzE1Nyw0MCBAQAogCXN0cnVjdCB0aW1ldmFsIHNvY2tldF90aW1lb3V0OwogCX0gYmlvX2RncmFtX2RhdGE7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCit0eXBlZGVmIHN0cnVjdCBiaW9fZGdyYW1fc2N0cF9zYXZlX21lc3NhZ2Vfc3QKKwl7CisgICAgICAgIEJJTyAqYmlvOworICAgICAgICBjaGFyICpkYXRhOworICAgICAgICBpbnQgbGVuZ3RoOworCX0gYmlvX2RncmFtX3NjdHBfc2F2ZV9tZXNzYWdlOworCit0eXBlZGVmIHN0cnVjdCBiaW9fZGdyYW1fc2N0cF9kYXRhX3N0CisJeworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyIHNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47CisjaWYgT1BFTlNTTF9VU0VfSVBWNgorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhX2luNjsKKyNlbmRpZgorCX0gcGVlcjsKKwl1bnNpZ25lZCBpbnQgY29ubmVjdGVkOworCXVuc2lnbmVkIGludCBfZXJybm87CisJdW5zaWduZWQgaW50IG10dTsKKwlzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfc25kaW5mbyBzbmRpbmZvOworCXN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvIHJjdmluZm87CisJc3RydWN0IGJpb19kZ3JhbV9zY3RwX3ByaW5mbyBwcmluZm87CisJdm9pZCAoKmhhbmRsZV9ub3RpZmljYXRpb25zKShCSU8gKmJpbywgdm9pZCAqY29udGV4dCwgdm9pZCAqYnVmKTsKKwl2b2lkKiBub3RpZmljYXRpb25fY29udGV4dDsKKwlpbnQgaW5faGFuZHNoYWtlOworCWludCBjY3NfcmN2ZDsKKwlpbnQgY2NzX3NlbnQ7CisJaW50IHNhdmVfc2h1dGRvd247CisJaW50IHBlZXJfYXV0aF90ZXN0ZWQ7CisJYmlvX2RncmFtX3NjdHBfc2F2ZV9tZXNzYWdlIHNhdmVkX21lc3NhZ2U7CisJfSBiaW9fZGdyYW1fc2N0cF9kYXRhOworI2VuZGlmCisKIEJJT19NRVRIT0QgKkJJT19zX2RhdGFncmFtKHZvaWQpCiAJewogCXJldHVybigmbWV0aG9kc19kZ3JhbXApOwpAQCAtNzU5LDYgKzgyOCw5MTIgQEAKIAlyZXR1cm4ocmV0KTsKIAl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCitCSU9fTUVUSE9EICpCSU9fc19kYXRhZ3JhbV9zY3RwKHZvaWQpCisJeworCXJldHVybigmbWV0aG9kc19kZ3JhbXBfc2N0cCk7CisJfQorCitCSU8gKkJJT19uZXdfZGdyYW1fc2N0cChpbnQgZmQsIGludCBjbG9zZV9mbGFnKQorCXsKKwlCSU8gKmJpbzsKKwlpbnQgcmV0LCBvcHR2YWwgPSAyMDAwMDsKKwlpbnQgYXV0aF9kYXRhID0gMCwgYXV0aF9mb3J3YXJkID0gMDsKKwl1bnNpZ25lZCBjaGFyICpwOworCXN0cnVjdCBzY3RwX2F1dGhjaHVuayBhdXRoOworCXN0cnVjdCBzY3RwX2F1dGhjaHVua3MgKmF1dGhjaHVua3M7CisJc29ja2xlbl90IHNvY2tvcHRfbGVuOworI2lmZGVmIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKKyNpZmRlZiBTQ1RQX0VWRU5UCisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisjZWxzZQorCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBldmVudDsKKyNlbmRpZgorI2VuZGlmCisKKwliaW89QklPX25ldyhCSU9fc19kYXRhZ3JhbV9zY3RwKCkpOworCWlmIChiaW8gPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworCUJJT19zZXRfZmQoYmlvLGZkLGNsb3NlX2ZsYWcpOworCisJLyogQWN0aXZhdGUgU0NUUC1BVVRIIGZvciBEQVRBIGFuZCBGT1JXQVJELVRTTiBjaHVua3MgKi8KKwlhdXRoLnNhdXRoX2NodW5rID0gT1BFTlNTTF9TQ1RQX0RBVEFfQ0hVTktfVFlQRTsKKwlyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9DSFVOSywgJmF1dGgsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmspKTsKKwlPUEVOU1NMX2Fzc2VydChyZXQgPj0gMCk7CisJYXV0aC5zYXV0aF9jaHVuayA9IE9QRU5TU0xfU0NUUF9GT1JXQVJEX0NVTV9UU05fQ0hVTktfVFlQRTsKKwlyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9DSFVOSywgJmF1dGgsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmspKTsKKwlPUEVOU1NMX2Fzc2VydChyZXQgPj0gMCk7CisKKwkvKiBUZXN0IGlmIGFjdGl2YXRpb24gd2FzIHN1Y2Nlc3NmdWwuIFdoZW4gdXNpbmcgYWNjZXB0KCksCisJICogU0NUUC1BVVRIIGhhcyB0byBiZSBhY3RpdmF0ZWQgZm9yIHRoZSBsaXN0ZW5pbmcgc29ja2V0CisJICogYWxyZWFkeSwgb3RoZXJ3aXNlIHRoZSBjb25uZWN0ZWQgc29ja2V0IHdvbid0IHVzZSBpdC4gKi8KKwlzb2Nrb3B0X2xlbiA9IChzb2NrbGVuX3QpKHNpemVvZihzY3RwX2Fzc29jX3QpICsgMjU2ICogc2l6ZW9mKHVpbnQ4X3QpKTsKKwlhdXRoY2h1bmtzID0gT1BFTlNTTF9tYWxsb2Moc29ja29wdF9sZW4pOworCW1lbXNldChhdXRoY2h1bmtzLCAwLCBzaXplb2Yoc29ja29wdF9sZW4pKTsKKwlyZXQgPSBnZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1NDVFAsIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MsIGF1dGhjaHVua3MsICZzb2Nrb3B0X2xlbik7CisJT1BFTlNTTF9hc3NlcnQocmV0ID49IDApOworCQorCWZvciAocCA9ICh1bnNpZ25lZCBjaGFyKikgYXV0aGNodW5rcyArIHNpemVvZihzY3RwX2Fzc29jX3QpOworCSAgICAgcCA8ICh1bnNpZ25lZCBjaGFyKikgYXV0aGNodW5rcyArIHNvY2tvcHRfbGVuOworCSAgICAgcCArPSBzaXplb2YodWludDhfdCkpCisJCXsKKwkJaWYgKCpwID09IE9QRU5TU0xfU0NUUF9EQVRBX0NIVU5LX1RZUEUpIGF1dGhfZGF0YSA9IDE7CisJCWlmICgqcCA9PSBPUEVOU1NMX1NDVFBfRk9SV0FSRF9DVU1fVFNOX0NIVU5LX1RZUEUpIGF1dGhfZm9yd2FyZCA9IDE7CisJCX0KKwkJCisJT1BFTlNTTF9mcmVlKGF1dGhjaHVua3MpOworCisJT1BFTlNTTF9hc3NlcnQoYXV0aF9kYXRhKTsKKwlPUEVOU1NMX2Fzc2VydChhdXRoX2ZvcndhcmQpOworCisjaWZkZWYgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVAorI2lmZGVmIFNDVFBfRVZFTlQKKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IDA7CisJZXZlbnQuc2VfdHlwZSA9IFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQ7CisJZXZlbnQuc2Vfb24gPSAxOworCXJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpKTsKKwlPUEVOU1NMX2Fzc2VydChyZXQgPj0gMCk7CisjZWxzZQorCXNvY2tvcHRfbGVuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSk7CisJcmV0ID0gZ2V0c29ja29wdChmZCwgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5UUywgJmV2ZW50LCAmc29ja29wdF9sZW4pOworCU9QRU5TU0xfYXNzZXJ0KHJldCA+PSAwKTsKKworCWV2ZW50LnNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQgPSAxOworCisJcmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5UUywgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlKSk7CisJT1BFTlNTTF9hc3NlcnQocmV0ID49IDApOworI2VuZGlmCisjZW5kaWYKKworCS8qIERpc2FibGUgcGFydGlhbCBkZWxpdmVyeSBieSBzZXR0aW5nIHRoZSBtaW4gc2l6ZQorCSAqIGxhcmdlciB0aGFuIHRoZSBtYXggcmVjb3JkIHNpemUgb2YgMl4xNCArIDIwNDggKyAxMworCSAqLworCXJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fU0NUUCwgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5ULCAmb3B0dmFsLCBzaXplb2Yob3B0dmFsKSk7CisJT1BFTlNTTF9hc3NlcnQocmV0ID49IDApOworCisJcmV0dXJuKGJpbyk7CisJfQorCitpbnQgQklPX2RncmFtX2lzX3NjdHAoQklPICpiaW8pCisJeworCXJldHVybiAoQklPX21ldGhvZF90eXBlKGJpbykgPT0gQklPX1RZUEVfREdSQU1fU0NUUCk7CisJfQorCitzdGF0aWMgaW50IGRncmFtX3NjdHBfbmV3KEJJTyAqYmkpCisJeworCWJpb19kZ3JhbV9zY3RwX2RhdGEgKmRhdGEgPSBOVUxMOworCisJYmktPmluaXQ9MDsKKwliaS0+bnVtPTA7CisJZGF0YSA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihiaW9fZGdyYW1fc2N0cF9kYXRhKSk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJbWVtc2V0KGRhdGEsIDB4MDAsIHNpemVvZihiaW9fZGdyYW1fc2N0cF9kYXRhKSk7CisjaWZkZWYgU0NUUF9QUl9TQ1RQX05PTkUKKwlkYXRhLT5wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisjZW5kaWYKKyAgICBiaS0+cHRyID0gZGF0YTsKKworCWJpLT5mbGFncz0wOworCXJldHVybigxKTsKKwl9CisKK3N0YXRpYyBpbnQgZGdyYW1fc2N0cF9mcmVlKEJJTyAqYSkKKwl7CisJYmlvX2RncmFtX3NjdHBfZGF0YSAqZGF0YTsKKworCWlmIChhID09IE5VTEwpIHJldHVybigwKTsKKwlpZiAoICEgZGdyYW1fY2xlYXIoYSkpCisJCXJldHVybiAwOworCisJZGF0YSA9IChiaW9fZGdyYW1fc2N0cF9kYXRhICopYS0+cHRyOworCWlmKGRhdGEgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKGRhdGEpOworCisJcmV0dXJuKDEpOworCX0KKworI2lmZGVmIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKK3ZvaWQgZGdyYW1fc2N0cF9oYW5kbGVfYXV0aF9mcmVlX2tleV9ldmVudChCSU8gKmIsIHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICpzbnApCisJeworCXVuc2lnbmVkIGludCBzb2Nrb3B0X2xlbiA9IDA7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50KiBhdXRoa2V5ZXZlbnQgPSAmc25wLT5zbl9hdXRoX2V2ZW50OworCisJaWYgKGF1dGhrZXlldmVudC0+YXV0aF9pbmRpY2F0aW9uID09IFNDVFBfQVVUSF9GUkVFX0tFWSkKKwkJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgYXV0aGtleWlkOworCisJCS8qIGRlbGV0ZSBrZXkgKi8KKwkJYXV0aGtleWlkLnNjYWN0X2tleW51bWJlciA9IGF1dGhrZXlldmVudC0+YXV0aF9rZXludW1iZXI7CisJCXNvY2tvcHRfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCk7CisJCXJldCA9IHNldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9ERUxFVEVfS0VZLAorCQkgICAgICAmYXV0aGtleWlkLCBzb2Nrb3B0X2xlbik7CisJCX0KKwl9CisjZW5kaWYKKworc3RhdGljIGludCBkZ3JhbV9zY3RwX3JlYWQoQklPICpiLCBjaGFyICpvdXQsIGludCBvdXRsKQorCXsKKwlpbnQgcmV0ID0gMCwgbiA9IDAsIGksIG9wdHZhbDsKKwlzb2NrbGVuX3Qgb3B0bGVuOworCWJpb19kZ3JhbV9zY3RwX2RhdGEgKmRhdGEgPSAoYmlvX2RncmFtX3NjdHBfZGF0YSAqKWItPnB0cjsKKwl1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqc25wOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisJY2hhciBjbXNnYnVmWzUxMl07CisKKwlpZiAob3V0ICE9IE5VTEwpCisJCXsKKwkJY2xlYXJfc29ja2V0X2Vycm9yKCk7CisKKwkJZG8KKwkJCXsKKwkJCW1lbXNldCgmZGF0YS0+cmN2aW5mbywgMHgwMCwgc2l6ZW9mKHN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvKSk7CisJCQlpb3YuaW92X2Jhc2UgPSBvdXQ7CisJCQlpb3YuaW92X2xlbiA9IG91dGw7CisJCQltc2cubXNnX25hbWUgPSBOVUxMOworCQkJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwkJCW1zZy5tc2dfaW92ID0gJmlvdjsKKwkJCW1zZy5tc2dfaW92bGVuID0gMTsKKwkJCW1zZy5tc2dfY29udHJvbCA9IGNtc2didWY7CisJCQltc2cubXNnX2NvbnRyb2xsZW4gPSA1MTI7CisJCQltc2cubXNnX2ZsYWdzID0gMDsKKwkJCW4gPSByZWN2bXNnKGItPm51bSwgJm1zZywgMCk7CisKKwkJCWlmIChtc2cubXNnX2NvbnRyb2xsZW4gPiAwKQorCQkJCXsKKwkJCQlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNnOyBjbXNnID0gQ01TR19OWFRIRFIoJm1zZywgY21zZykpCisJCQkJCXsKKwkJCQkJaWYgKGNtc2ctPmNtc2dfbGV2ZWwgIT0gSVBQUk9UT19TQ1RQKQorCQkJCQkJY29udGludWU7CisjaWZkZWYgU0NUUF9SQ1ZJTkZPCisJCQkJCWlmIChjbXNnLT5jbXNnX3R5cGUgPT0gU0NUUF9SQ1ZJTkZPKQorCQkJCQkJeworCQkJCQkJc3RydWN0IHNjdHBfcmN2aW5mbyAqcmN2aW5mbzsKKworCQkJCQkJcmN2aW5mbyA9IChzdHJ1Y3Qgc2N0cF9yY3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOworCQkJCQkJZGF0YS0+cmN2aW5mby5yY3Zfc2lkID0gcmN2aW5mby0+cmN2X3NpZDsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3NzbiA9IHJjdmluZm8tPnJjdl9zc247CisJCQkJCQlkYXRhLT5yY3ZpbmZvLnJjdl9mbGFncyA9IHJjdmluZm8tPnJjdl9mbGFnczsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3BwaWQgPSByY3ZpbmZvLT5yY3ZfcHBpZDsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3RzbiA9IHJjdmluZm8tPnJjdl90c247CisJCQkJCQlkYXRhLT5yY3ZpbmZvLnJjdl9jdW10c24gPSByY3ZpbmZvLT5yY3ZfY3VtdHNuOworCQkJCQkJZGF0YS0+cmN2aW5mby5yY3ZfY29udGV4dCA9IHJjdmluZm8tPnJjdl9jb250ZXh0OworCQkJCQkJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9TTkRSQ1YKKwkJCQkJaWYgKGNtc2ctPmNtc2dfdHlwZSA9PSBTQ1RQX1NORFJDVikKKwkJCQkJCXsKKwkJCQkJCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNuZHJjdmluZm87CisKKwkJCQkJCXNuZHJjdmluZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3NpZCA9IHNuZHJjdmluZm8tPnNpbmZvX3N0cmVhbTsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3NzbiA9IHNuZHJjdmluZm8tPnNpbmZvX3NzbjsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X2ZsYWdzID0gc25kcmN2aW5mby0+c2luZm9fZmxhZ3M7CisJCQkJCQlkYXRhLT5yY3ZpbmZvLnJjdl9wcGlkID0gc25kcmN2aW5mby0+c2luZm9fcHBpZDsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X3RzbiA9IHNuZHJjdmluZm8tPnNpbmZvX3RzbjsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X2N1bXRzbiA9IHNuZHJjdmluZm8tPnNpbmZvX2N1bXRzbjsKKwkJCQkJCWRhdGEtPnJjdmluZm8ucmN2X2NvbnRleHQgPSBzbmRyY3ZpbmZvLT5zaW5mb19jb250ZXh0OworCQkJCQkJfQorI2VuZGlmCisJCQkJCX0KKwkJCQl9CisKKwkJCWlmIChuIDw9IDApCisJCQkJeworCQkJCWlmIChuIDwgMCkKKwkJCQkJcmV0ID0gbjsKKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWlmIChtc2cubXNnX2ZsYWdzICYgTVNHX05PVElGSUNBVElPTikKKwkJCQl7CisJCQkJc25wID0gKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uKikgb3V0OworCQkJCWlmIChzbnAtPnNuX2hlYWRlci5zbl90eXBlID09IFNDVFBfU0VOREVSX0RSWV9FVkVOVCkKKwkJCQkJeworI2lmZGVmIFNDVFBfRVZFTlQKKwkJCQkJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisjZWxzZQorCQkJCQlzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgZXZlbnQ7CisJCQkJCXNvY2tsZW5fdCBldmVudHNpemU7CisjZW5kaWYKKwkJCQkJLyogSWYgYSBtZXNzYWdlIGhhcyBiZWVuIGRlbGF5ZWQgdW50aWwgdGhlIHNvY2tldAorCQkJCQkgKiBpcyBkcnksIGl0IGNhbiBiZSBzZW50IG5vdy4KKwkJCQkJICovCisJCQkJCWlmIChkYXRhLT5zYXZlZF9tZXNzYWdlLmxlbmd0aCA+IDApCisJCQkJCQl7CisJCQkJCQlkZ3JhbV9zY3RwX3dyaXRlKGRhdGEtPnNhdmVkX21lc3NhZ2UuYmlvLCBkYXRhLT5zYXZlZF9tZXNzYWdlLmRhdGEsCisJCQkJCQkgICAgICAgICAgICAgICAgIGRhdGEtPnNhdmVkX21lc3NhZ2UubGVuZ3RoKTsKKwkJCQkJCU9QRU5TU0xfZnJlZShkYXRhLT5zYXZlZF9tZXNzYWdlLmRhdGEpOworCQkJCQkJZGF0YS0+c2F2ZWRfbWVzc2FnZS5sZW5ndGggPSAwOworCQkJCQkJfQorCisJCQkJCS8qIGRpc2FibGUgc2VuZGVyIGRyeSBldmVudCAqLworI2lmZGVmIFNDVFBfRVZFTlQKKwkJCQkJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KSk7CisJCQkJCWV2ZW50LnNlX2Fzc29jX2lkID0gMDsKKwkJCQkJZXZlbnQuc2VfdHlwZSA9IFNDVFBfU0VOREVSX0RSWV9FVkVOVDsKKwkJCQkJZXZlbnQuc2Vfb24gPSAwOworCQkJCQlpID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpKTsKKwkJCQkJT1BFTlNTTF9hc3NlcnQoaSA+PSAwKTsKKyNlbHNlCisJCQkJCWV2ZW50c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUpOworCQkJCQlpID0gZ2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVFMsICZldmVudCwgJmV2ZW50c2l6ZSk7CisJCQkJCU9QRU5TU0xfYXNzZXJ0KGkgPj0gMCk7CisKKwkJCQkJZXZlbnQuc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ID0gMDsKKworCQkJCQlpID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVFMsICZldmVudCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSkpOworCQkJCQlPUEVOU1NMX2Fzc2VydChpID49IDApOworI2VuZGlmCisJCQkJCX0KKworI2lmZGVmIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKKwkJCQlpZiAoc25wLT5zbl9oZWFkZXIuc25fdHlwZSA9PSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UKQorCQkJCQlkZ3JhbV9zY3RwX2hhbmRsZV9hdXRoX2ZyZWVfa2V5X2V2ZW50KGIsIHNucCk7CisjZW5kaWYKKworCQkJCWlmIChkYXRhLT5oYW5kbGVfbm90aWZpY2F0aW9ucyAhPSBOVUxMKQorCQkJCQlkYXRhLT5oYW5kbGVfbm90aWZpY2F0aW9ucyhiLCBkYXRhLT5ub3RpZmljYXRpb25fY29udGV4dCwgKHZvaWQqKSBvdXQpOworCisJCQkJbWVtc2V0KG91dCwgMCwgb3V0bCk7CisJCQkJfQorCQkJZWxzZQorCQkJCXJldCArPSBuOworCQkJfQorCQl3aGlsZSAoKG1zZy5tc2dfZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSAmJiAobXNnLm1zZ19mbGFncyAmIE1TR19FT1IpICYmIChyZXQgPCBvdXRsKSk7CisKKwkJaWYgKHJldCA+IDAgJiYgIShtc2cubXNnX2ZsYWdzICYgTVNHX0VPUikpCisJCQl7CisJCQkvKiBQYXJ0aWFsIG1lc3NhZ2UgcmVhZCwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuISAqLworCisJCQkvKiBUaGUgYnVmZmVyIHdhcyB0b28gc21hbGwsIHRoaXMgbWVhbnMgdGhlIHBlZXIgc2VudAorCQkJICogYSBtZXNzYWdlIHRoYXQgd2FzIGxhcmdlciB0aGFuIGFsbG93ZWQuICovCisJCQlpZiAocmV0ID09IG91dGwpCisJCQkJcmV0dXJuIC0xOworCisJCQkvKiBUZXN0IGlmIHNvY2tldCBidWZmZXIgY2FuIGhhbmRsZSBtYXggcmVjb3JkCisJCQkgKiBzaXplICgyXjE0ICsgMjA0OCArIDEzKQorCQkJICovCisJCQlvcHRsZW4gPSAoc29ja2xlbl90KSBzaXplb2YoaW50KTsKKwkJCXJldCA9IGdldHNvY2tvcHQoYi0+bnVtLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZvcHR2YWwsICZvcHRsZW4pOworCQkJT1BFTlNTTF9hc3NlcnQocmV0ID49IDApOworCQkJT1BFTlNTTF9hc3NlcnQob3B0dmFsID49IDE4NDQ1KTsKKworCQkJLyogVGVzdCBpZiBTQ1RQIGRvZXNuJ3QgcGFydGlhbGx5IGRlbGl2ZXIgYmVsb3cKKwkJCSAqIG1heCByZWNvcmQgc2l6ZSAoMl4xNCArIDIwNDggKyAxMykKKwkJCSAqLworCQkJb3B0bGVuID0gKHNvY2tsZW5fdCkgc2l6ZW9mKGludCk7CisJCQlyZXQgPSBnZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQsCisJCQkgICAgICAgICAgICAgICAgICZvcHR2YWwsICZvcHRsZW4pOworCQkJT1BFTlNTTF9hc3NlcnQocmV0ID49IDApOworCQkJT1BFTlNTTF9hc3NlcnQob3B0dmFsID49IDE4NDQ1KTsKKworCQkJLyogUGFydGlhbGx5IGRlbGl2ZXJlZCBub3RpZmljYXRpb24/Pz8gUHJvYmFibHkgYSBidWcuLi4uICovCisJCQlPUEVOU1NMX2Fzc2VydCghKG1zZy5tc2dfZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSk7CisKKwkJCS8qIEV2ZXJ5dGhpbmcgc2VlbXMgb2sgdGlsbCBub3csIHNvIGl0J3MgbW9zdCBsaWtlbHkKKwkJCSAqIGEgbWVzc2FnZSBkcm9wcGVkIGJ5IFBSLVNDVFAuCisJCQkgKi8KKwkJCW1lbXNldChvdXQsIDAsIG91dGwpOworCQkJQklPX3NldF9yZXRyeV9yZWFkKGIpOworCQkJcmV0dXJuIC0xOworCQkJfQorCisJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwkJaWYgKHJldCA8IDApCisJCQl7CisJCQlpZiAoQklPX2RncmFtX3Nob3VsZF9yZXRyeShyZXQpKQorCQkJCXsKKwkJCQlCSU9fc2V0X3JldHJ5X3JlYWQoYik7CisJCQkJZGF0YS0+X2Vycm5vID0gZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCk7CisJCQkJfQorCQkJfQorCisJCS8qIFRlc3QgaWYgcGVlciB1c2VzIFNDVFAtQVVUSCBiZWZvcmUgY29udGludWluZyAqLworCQlpZiAoIWRhdGEtPnBlZXJfYXV0aF90ZXN0ZWQpCisJCQl7CisJCQlpbnQgaWksIGF1dGhfZGF0YSA9IDAsIGF1dGhfZm9yd2FyZCA9IDA7CisJCQl1bnNpZ25lZCBjaGFyICpwOworCQkJc3RydWN0IHNjdHBfYXV0aGNodW5rcyAqYXV0aGNodW5rczsKKworCQkJb3B0bGVuID0gKHNvY2tsZW5fdCkoc2l6ZW9mKHNjdHBfYXNzb2NfdCkgKyAyNTYgKiBzaXplb2YodWludDhfdCkpOworCQkJYXV0aGNodW5rcyA9IE9QRU5TU0xfbWFsbG9jKG9wdGxlbik7CisJCQltZW1zZXQoYXV0aGNodW5rcywgMCwgc2l6ZW9mKG9wdGxlbikpOworCQkJaWkgPSBnZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX1BFRVJfQVVUSF9DSFVOS1MsIGF1dGhjaHVua3MsICZvcHRsZW4pOworCQkJT1BFTlNTTF9hc3NlcnQoaWkgPj0gMCk7CisKKwkJCWZvciAocCA9ICh1bnNpZ25lZCBjaGFyKikgYXV0aGNodW5rcyArIHNpemVvZihzY3RwX2Fzc29jX3QpOworCQkJCSBwIDwgKHVuc2lnbmVkIGNoYXIqKSBhdXRoY2h1bmtzICsgb3B0bGVuOworCQkJCSBwICs9IHNpemVvZih1aW50OF90KSkKKwkJCQl7CisJCQkJaWYgKCpwID09IE9QRU5TU0xfU0NUUF9EQVRBX0NIVU5LX1RZUEUpIGF1dGhfZGF0YSA9IDE7CisJCQkJaWYgKCpwID09IE9QRU5TU0xfU0NUUF9GT1JXQVJEX0NVTV9UU05fQ0hVTktfVFlQRSkgYXV0aF9mb3J3YXJkID0gMTsKKwkJCQl9CisKKwkJCU9QRU5TU0xfZnJlZShhdXRoY2h1bmtzKTsKKworCQkJaWYgKCFhdXRoX2RhdGEgfHwgIWF1dGhfZm9yd2FyZCkKKwkJCQl7CisJCQkJQklPZXJyKEJJT19GX0RHUkFNX1NDVFBfUkVBRCxCSU9fUl9DT05ORUNUX0VSUk9SKTsKKwkJCQlyZXR1cm4gLTE7CisJCQkJfQorCisJCQlkYXRhLT5wZWVyX2F1dGhfdGVzdGVkID0gMTsKKwkJCX0KKwkJfQorCXJldHVybihyZXQpOworCX0KKworc3RhdGljIGludCBkZ3JhbV9zY3RwX3dyaXRlKEJJTyAqYiwgY29uc3QgY2hhciAqaW4sIGludCBpbmwpCisJeworCWludCByZXQ7CisJYmlvX2RncmFtX3NjdHBfZGF0YSAqZGF0YSA9IChiaW9fZGdyYW1fc2N0cF9kYXRhICopYi0+cHRyOworCXN0cnVjdCBiaW9fZGdyYW1fc2N0cF9zbmRpbmZvICpzaW5mbyA9ICYoZGF0YS0+c25kaW5mbyk7CisJc3RydWN0IGJpb19kZ3JhbV9zY3RwX3ByaW5mbyAqcGluZm8gPSAmKGRhdGEtPnByaW5mbyk7CisJc3RydWN0IGJpb19kZ3JhbV9zY3RwX3NuZGluZm8gaGFuZHNoYWtlX3NpbmZvOworCXN0cnVjdCBpb3ZlYyBpb3ZbMV07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisjaWYgZGVmaW5lZChTQ1RQX1NORElORk8pICYmIGRlZmluZWQoU0NUUF9QUklORk8pCisJY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pKSArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3ByaW5mbykpXTsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvICpzbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5mbyAqcHJpbmZvOworI2Vsc2UKKwljaGFyIGNtc2didWZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpXTsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzbmRyY3ZpbmZvOworI2VuZGlmCisKKwljbGVhcl9zb2NrZXRfZXJyb3IoKTsKKworCS8qIElmIHdlJ3JlIHNlbmQgYW55dGhpbmcgZWxzZSB0aGFuIGFwcGxpY2F0aW9uIGRhdGEsCisJICogZGlzYWJsZSBhbGwgdXNlciBwYXJhbWV0ZXJzIGFuZCBmbGFncy4KKwkgKi8KKwlpZiAoaW5bMF0gIT0gMjMpIHsKKwkJbWVtc2V0KCZoYW5kc2hha2Vfc2luZm8sIDB4MDAsIHNpemVvZihzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfc25kaW5mbykpOworI2lmZGVmIFNDVFBfU0FDS19JTU1FRElBVEVMWQorCQloYW5kc2hha2Vfc2luZm8uc25kX2ZsYWdzID0gU0NUUF9TQUNLX0lNTUVESUFURUxZOworI2VuZGlmCisJCXNpbmZvID0gJmhhbmRzaGFrZV9zaW5mbzsKKwl9CisKKwkvKiBJZiB3ZSBoYXZlIHRvIHNlbmQgYSBzaHV0ZG93biBhbGVydCBtZXNzYWdlIGFuZCB0aGUKKwkgKiBzb2NrZXQgaXMgbm90IGRyeSB5ZXQsIHdlIGhhdmUgdG8gc2F2ZSBpdCBhbmQgc2VuZCBpdAorCSAqIGFzIHNvb24gYXMgdGhlIHNvY2tldCBnZXRzIGRyeS4KKwkgKi8KKwlpZiAoZGF0YS0+c2F2ZV9zaHV0ZG93biAmJiAhQklPX2RncmFtX3NjdHBfd2FpdF9mb3JfZHJ5KGIpKQorCXsKKwkJZGF0YS0+c2F2ZWRfbWVzc2FnZS5iaW8gPSBiOworCQlkYXRhLT5zYXZlZF9tZXNzYWdlLmxlbmd0aCA9IGlubDsKKwkJZGF0YS0+c2F2ZWRfbWVzc2FnZS5kYXRhID0gT1BFTlNTTF9tYWxsb2MoaW5sKTsKKwkJbWVtY3B5KGRhdGEtPnNhdmVkX21lc3NhZ2UuZGF0YSwgaW4sIGlubCk7CisJCXJldHVybiBpbmw7CisJfQorCisJaW92WzBdLmlvdl9iYXNlID0gKGNoYXIgKilpbjsKKwlpb3ZbMF0uaW92X2xlbiA9IGlubDsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19pb3YgPSBpb3Y7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfY29udHJvbCA9IChjYWRkcl90KWNtc2didWY7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfU05ESU5GTykgJiYgZGVmaW5lZChTQ1RQX1BSSU5GTykKKwljbXNnID0gKHN0cnVjdCBjbXNnaGRyICopY21zZ2J1ZjsKKwljbXNnLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOworCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfU05ESU5GTzsKKwljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7CisJc25kaW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopQ01TR19EQVRBKGNtc2cpOworCW1lbXNldChzbmRpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpOworCXNuZGluZm8tPnNuZF9zaWQgPSBzaW5mby0+c25kX3NpZDsKKwlzbmRpbmZvLT5zbmRfZmxhZ3MgPSBzaW5mby0+c25kX2ZsYWdzOworCXNuZGluZm8tPnNuZF9wcGlkID0gc2luZm8tPnNuZF9wcGlkOworCXNuZGluZm8tPnNuZF9jb250ZXh0ID0gc2luZm8tPnNuZF9jb250ZXh0OworCW1zZy5tc2dfY29udHJvbGxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7CisKKwljbXNnID0gKHN0cnVjdCBjbXNnaGRyICopJmNtc2didWZbQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpXTsKKwljbXNnLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOworCWNtc2ctPmNtc2dfdHlwZSA9IFNDVFBfUFJJTkZPOworCWNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3ByaW5mbykpOworCXByaW5mbyA9IChzdHJ1Y3Qgc2N0cF9wcmluZm8gKilDTVNHX0RBVEEoY21zZyk7CisJbWVtc2V0KHByaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3ByaW5mbykpOworCXByaW5mby0+cHJfcG9saWN5ID0gcGluZm8tPnByX3BvbGljeTsKKwlwcmluZm8tPnByX3ZhbHVlID0gcGluZm8tPnByX3ZhbHVlOworCW1zZy5tc2dfY29udHJvbGxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9wcmluZm8pKTsKKyNlbHNlCisJY21zZyA9IChzdHJ1Y3QgY21zZ2hkciAqKWNtc2didWY7CisJY21zZy0+Y21zZ19sZXZlbCA9IElQUFJPVE9fU0NUUDsKKwljbXNnLT5jbXNnX3R5cGUgPSBTQ1RQX1NORFJDVjsKKwljbXNnLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7CisJc25kcmN2aW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopQ01TR19EQVRBKGNtc2cpOworCW1lbXNldChzbmRyY3ZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOworCXNuZHJjdmluZm8tPnNpbmZvX3N0cmVhbSA9IHNpbmZvLT5zbmRfc2lkOworCXNuZHJjdmluZm8tPnNpbmZvX2ZsYWdzID0gc2luZm8tPnNuZF9mbGFnczsKKyNpZmRlZiBfX0ZyZWVCU0RfXworCXNuZHJjdmluZm8tPnNpbmZvX2ZsYWdzIHw9IHBpbmZvLT5wcl9wb2xpY3k7CisjZW5kaWYKKwlzbmRyY3ZpbmZvLT5zaW5mb19wcGlkID0gc2luZm8tPnNuZF9wcGlkOworCXNuZHJjdmluZm8tPnNpbmZvX2NvbnRleHQgPSBzaW5mby0+c25kX2NvbnRleHQ7CisJc25kcmN2aW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IHBpbmZvLT5wcl92YWx1ZTsKKwltc2cubXNnX2NvbnRyb2xsZW4gKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOworI2VuZGlmCisKKwlyZXQgPSBzZW5kbXNnKGItPm51bSwgJm1zZywgMCk7CisKKwlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJaWYgKHJldCA8PSAwKQorCQl7CisJCWlmIChCSU9fZGdyYW1fc2hvdWxkX3JldHJ5KHJldCkpCisJCQl7CisJCQlCSU9fc2V0X3JldHJ5X3dyaXRlKGIpOyAgCisJCQlkYXRhLT5fZXJybm8gPSBnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKTsKKwkJCX0KKwkJfQorCXJldHVybihyZXQpOworCX0KKworc3RhdGljIGxvbmcgZGdyYW1fc2N0cF9jdHJsKEJJTyAqYiwgaW50IGNtZCwgbG9uZyBudW0sIHZvaWQgKnB0cikKKwl7CisJbG9uZyByZXQ9MTsKKwliaW9fZGdyYW1fc2N0cF9kYXRhICpkYXRhID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgc29ja29wdF9sZW4gPSAwOworCXN0cnVjdCBzY3RwX2F1dGhrZXlpZCBhdXRoa2V5aWQ7CisJc3RydWN0IHNjdHBfYXV0aGtleSAqYXV0aGtleTsKKworCWRhdGEgPSAoYmlvX2RncmFtX3NjdHBfZGF0YSAqKWItPnB0cjsKKworCXN3aXRjaCAoY21kKQorCQl7CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9RVUVSWV9NVFU6CisJCS8qIFNldCB0byBtYXhpbXVtICgyXjE0KQorCQkgKiBhbmQgaWdub3JlIHVzZXIgaW5wdXQgdG8gZW5hYmxlIHRyYW5zcG9ydAorCQkgKiBwcm90b2NvbCBmcmFnbWVudGF0aW9uLgorCQkgKiBSZXR1cm5zIGFsd2F5cyAyXjE0LgorCQkgKi8KKwkJZGF0YS0+bXR1ID0gMTYzODQ7CisJCXJldCA9IGRhdGEtPm10dTsKKwkJYnJlYWs7CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TRVRfTVRVOgorCQkvKiBTZXQgdG8gbWF4aW11bSAoMl4xNCkKKwkJICogYW5kIGlnbm9yZSBpbnB1dCB0byBlbmFibGUgdHJhbnNwb3J0CisJCSAqIHByb3RvY29sIGZyYWdtZW50YXRpb24uCisJCSAqIFJldHVybnMgYWx3YXlzIDJeMTQuCisJCSAqLworCQlkYXRhLT5tdHUgPSAxNjM4NDsKKwkJcmV0ID0gZGF0YS0+bXR1OworCQlicmVhazsKKwljYXNlIEJJT19DVFJMX0RHUkFNX1NFVF9DT05ORUNURUQ6CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9DT05ORUNUOgorCQkvKiBSZXR1cm5zIGFsd2F5cyAtMS4gKi8KKwkJcmV0ID0gLTE7CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0VUX05FWFRfVElNRU9VVDoKKwkJLyogU0NUUCBkb2Vzbid0IG5lZWQgdGhlIERUTFMgdGltZXIKKwkJICogUmV0dXJucyBhbHdheXMgMS4KKwkJICovCisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfSU5fSEFORFNIQUtFOgorCQlpZiAobnVtID4gMCkKKwkJCWRhdGEtPmluX2hhbmRzaGFrZSA9IDE7CisJCWVsc2UKKwkJCWRhdGEtPmluX2hhbmRzaGFrZSA9IDA7CisKKwkJcmV0ID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9OT0RFTEFZLCAmZGF0YS0+aW5faGFuZHNoYWtlLCBzaXplb2YoaW50KSk7CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9BRERfQVVUSF9LRVk6CisJCS8qIE5ldyBzaGFyZWQga2V5IGZvciBTQ1RQIEFVVEguCisJCSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisJCSAqLworCisJCS8qIEdldCBhY3RpdmUga2V5ICovCisJCXNvY2tvcHRfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCk7CisJCXJldCA9IGdldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9BQ1RJVkVfS0VZLCAmYXV0aGtleWlkLCAmc29ja29wdF9sZW4pOworCQlpZiAocmV0IDwgMCkgYnJlYWs7CisKKwkJLyogQWRkIG5ldyBrZXkgKi8KKwkJc29ja29wdF9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkgKyA2NCAqIHNpemVvZih1aW50OF90KTsKKwkJYXV0aGtleSA9IE9QRU5TU0xfbWFsbG9jKHNvY2tvcHRfbGVuKTsKKwkJbWVtc2V0KGF1dGhrZXksIDB4MDAsIHNvY2tvcHRfbGVuKTsKKwkJYXV0aGtleS0+c2NhX2tleW51bWJlciA9IGF1dGhrZXlpZC5zY2FjdF9rZXludW1iZXIgKyAxOworI2lmbmRlZiBfX0ZyZWVCU0RfXworCQkvKiBUaGlzIGZpZWxkIGlzIG1pc3NpbmcgaW4gRnJlZUJTRCA4LjIgYW5kIGVhcmxpZXIsCisJCSAqIGFuZCBGcmVlQlNEIDguMyBhbmQgaGlnaGVyIHdvcmsgd2l0aG91dCBpdC4KKwkJICovCisJCWF1dGhrZXktPnNjYV9rZXlsZW5ndGggPSA2NDsKKyNlbmRpZgorCQltZW1jcHkoJmF1dGhrZXktPnNjYV9rZXlbMF0sIHB0ciwgNjQgKiBzaXplb2YodWludDhfdCkpOworCisJCXJldCA9IHNldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9LRVksIGF1dGhrZXksIHNvY2tvcHRfbGVuKTsKKwkJaWYgKHJldCA8IDApIGJyZWFrOworCisJCS8qIFJlc2V0IGFjdGl2ZSBrZXkgKi8KKwkJcmV0ID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9BVVRIX0FDVElWRV9LRVksCisJCSAgICAgICZhdXRoa2V5aWQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQpKTsKKwkJaWYgKHJldCA8IDApIGJyZWFrOworCisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9ORVhUX0FVVEhfS0VZOgorCQkvKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLiAqLworCisJCS8qIEdldCBhY3RpdmUga2V5ICovCisJCXNvY2tvcHRfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCk7CisJCXJldCA9IGdldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9BQ1RJVkVfS0VZLCAmYXV0aGtleWlkLCAmc29ja29wdF9sZW4pOworCQlpZiAocmV0IDwgMCkgYnJlYWs7CisKKwkJLyogU2V0IGFjdGl2ZSBrZXkgKi8KKwkJYXV0aGtleWlkLnNjYWN0X2tleW51bWJlciA9IGF1dGhrZXlpZC5zY2FjdF9rZXludW1iZXIgKyAxOworCQlyZXQgPSBzZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX0FVVEhfQUNUSVZFX0tFWSwKKwkJICAgICAgJmF1dGhrZXlpZCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCkpOworCQlpZiAocmV0IDwgMCkgYnJlYWs7CisKKwkJLyogQ0NTIGhhcyBiZWVuIHNlbnQsIHNvIHJlbWVtYmVyIHRoYXQgYW5kIGZhbGwgdGhyb3VnaAorCQkgKiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIGRlYWN0aXZhdGUgYW4gb2xkIGtleQorCQkgKi8KKwkJZGF0YS0+Y2NzX3NlbnQgPSAxOworCisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0FVVEhfQ0NTX1JDVkQ6CisJCS8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuICovCisKKwkJLyogSGFzIHRoaXMgY29tbWFuZCByZWFsbHkgYmVlbiBjYWxsZWQgb3IgaXMgdGhpcyBqdXN0IGEgZmFsbC10aHJvdWdoPyAqLworCQlpZiAoY21kID09IEJJT19DVFJMX0RHUkFNX1NDVFBfQVVUSF9DQ1NfUkNWRCkKKwkJCWRhdGEtPmNjc19yY3ZkID0gMTsKKworCQkvKiBDU1MgaGFzIGJlZW4gYm90aCwgcmVjZWl2ZWQgYW5kIHNlbnQsIHNvIGRlYWN0aXZhdGUgYW4gb2xkIGtleSAqLworCQlpZiAoZGF0YS0+Y2NzX3JjdmQgPT0gMSAmJiBkYXRhLT5jY3Nfc2VudCA9PSAxKQorCQkJeworCQkJLyogR2V0IGFjdGl2ZSBrZXkgKi8KKwkJCXNvY2tvcHRfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCk7CisJCQlyZXQgPSBnZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX0FVVEhfQUNUSVZFX0tFWSwgJmF1dGhrZXlpZCwgJnNvY2tvcHRfbGVuKTsKKwkJCWlmIChyZXQgPCAwKSBicmVhazsKKworCQkJLyogRGVhY3RpdmF0ZSBrZXkgb3IgZGVsZXRlIHNlY29uZCBsYXN0IGtleSBpZgorCQkJICogU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVCBpcyBub3QgYXZhaWxhYmxlLgorCQkJICovCisJCQlhdXRoa2V5aWQuc2NhY3Rfa2V5bnVtYmVyID0gYXV0aGtleWlkLnNjYWN0X2tleW51bWJlciAtIDE7CisjaWZkZWYgU0NUUF9BVVRIX0RFQUNUSVZBVEVfS0VZCisJCQlzb2Nrb3B0X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQpOworCQkJcmV0ID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9BVVRIX0RFQUNUSVZBVEVfS0VZLAorCQkJICAgICAgJmF1dGhrZXlpZCwgc29ja29wdF9sZW4pOworCQkJaWYgKHJldCA8IDApIGJyZWFrOworI2VuZGlmCisjaWZuZGVmIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKKwkJCWlmIChhdXRoa2V5aWQuc2NhY3Rfa2V5bnVtYmVyID4gMCkKKwkJCQl7CisJCQkJYXV0aGtleWlkLnNjYWN0X2tleW51bWJlciA9IGF1dGhrZXlpZC5zY2FjdF9rZXludW1iZXIgLSAxOworCQkJCXJldCA9IHNldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfQVVUSF9ERUxFVEVfS0VZLAorCQkJCQkgICZhdXRoa2V5aWQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQpKTsKKwkJCQlpZiAocmV0IDwgMCkgYnJlYWs7CisJCQkJfQorI2VuZGlmCisKKwkJCWRhdGEtPmNjc19yY3ZkID0gMDsKKwkJCWRhdGEtPmNjc19zZW50ID0gMDsKKwkJCX0KKwkJYnJlYWs7CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0dFVF9TTkRJTkZPOgorCQkvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb3BpZWQgc3RydWN0LiAqLworCQlpZiAobnVtID4gKGxvbmcpIHNpemVvZihzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfc25kaW5mbykpCisJCQludW0gPSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3NuZGluZm8pOworCisJCW1lbWNweShwdHIsICYoZGF0YS0+c25kaW5mbyksIG51bSk7CisJCXJldCA9IG51bTsKKwkJYnJlYWs7CisJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX1NFVF9TTkRJTkZPOgorCQkvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb3BpZWQgc3RydWN0LiAqLworCQlpZiAobnVtID4gKGxvbmcpIHNpemVvZihzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfc25kaW5mbykpCisJCQludW0gPSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3NuZGluZm8pOworCisJCW1lbWNweSgmKGRhdGEtPnNuZGluZm8pLCBwdHIsIG51bSk7CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9HRVRfUkNWSU5GTzoKKwkJLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29waWVkIHN0cnVjdC4gKi8KKwkJaWYgKG51bSA+IChsb25nKSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3JjdmluZm8pKQorCQkJbnVtID0gc2l6ZW9mKHN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvKTsKKworCQltZW1jcHkocHRyLCAmZGF0YS0+cmN2aW5mbywgbnVtKTsKKworCQlyZXQgPSBudW07CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfUkNWSU5GTzoKKwkJLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29waWVkIHN0cnVjdC4gKi8KKwkJaWYgKG51bSA+IChsb25nKSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3JjdmluZm8pKQorCQkJbnVtID0gc2l6ZW9mKHN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvKTsKKworCQltZW1jcHkoJihkYXRhLT5yY3ZpbmZvKSwgcHRyLCBudW0pOworCQlicmVhazsKKwljYXNlIEJJT19DVFJMX0RHUkFNX1NDVFBfR0VUX1BSSU5GTzoKKwkJLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29waWVkIHN0cnVjdC4gKi8KKwkJaWYgKG51bSA+IChsb25nKSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3ByaW5mbykpCisJCQludW0gPSBzaXplb2Yoc3RydWN0IGJpb19kZ3JhbV9zY3RwX3ByaW5mbyk7CisKKwkJbWVtY3B5KHB0ciwgJihkYXRhLT5wcmluZm8pLCBudW0pOworCQlyZXQgPSBudW07CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfUFJJTkZPOgorCQkvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb3BpZWQgc3RydWN0LiAqLworCQlpZiAobnVtID4gKGxvbmcpIHNpemVvZihzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfcHJpbmZvKSkKKwkJCW51bSA9IHNpemVvZihzdHJ1Y3QgYmlvX2RncmFtX3NjdHBfcHJpbmZvKTsKKworCQltZW1jcHkoJihkYXRhLT5wcmluZm8pLCBwdHIsIG51bSk7CisJCWJyZWFrOworCWNhc2UgQklPX0NUUkxfREdSQU1fU0NUUF9TQVZFX1NIVVRET1dOOgorCQkvKiBSZXR1cm5zIGFsd2F5cyAxLiAqLworCQlpZiAobnVtID4gMCkKKwkJCWRhdGEtPnNhdmVfc2h1dGRvd24gPSAxOworCQllbHNlCisJCQlkYXRhLT5zYXZlX3NodXRkb3duID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBQYXNzIHRvIGRlZmF1bHQgY3RybCBmdW5jdGlvbiB0bworCQkgKiBwcm9jZXNzIFNDVFAgdW5zcGVjaWZpYyBjb21tYW5kcworCQkgKi8KKwkJcmV0PWRncmFtX2N0cmwoYiwgY21kLCBudW0sIHB0cik7CisJCWJyZWFrOworCQl9CisJcmV0dXJuKHJldCk7CisJfQorCitpbnQgQklPX2RncmFtX3NjdHBfbm90aWZpY2F0aW9uX2NiKEJJTyAqYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmhhbmRsZV9ub3RpZmljYXRpb25zKShCSU8gKmJpbywgdm9pZCAqY29udGV4dCwgdm9pZCAqYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCkKKwl7CisJYmlvX2RncmFtX3NjdHBfZGF0YSAqZGF0YSA9IChiaW9fZGdyYW1fc2N0cF9kYXRhICopIGItPnB0cjsKKworCWlmIChoYW5kbGVfbm90aWZpY2F0aW9ucyAhPSBOVUxMKQorCQl7CisJCWRhdGEtPmhhbmRsZV9ub3RpZmljYXRpb25zID0gaGFuZGxlX25vdGlmaWNhdGlvbnM7CisJCWRhdGEtPm5vdGlmaWNhdGlvbl9jb250ZXh0ID0gY29udGV4dDsKKwkJfQorCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7CisJfQorCitpbnQgQklPX2RncmFtX3NjdHBfd2FpdF9mb3JfZHJ5KEJJTyAqYikKK3sKKwlpbnQgaXNfZHJ5ID0gMDsKKwlpbnQgbiwgc29ja2ZsYWdzLCByZXQ7CisJdW5pb24gc2N0cF9ub3RpZmljYXRpb24gc25wOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisjaWZkZWYgU0NUUF9FVkVOVAorCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworI2Vsc2UKKwlzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgZXZlbnQ7CisJc29ja2xlbl90IGV2ZW50c2l6ZTsKKyNlbmRpZgorCWJpb19kZ3JhbV9zY3RwX2RhdGEgKmRhdGEgPSAoYmlvX2RncmFtX3NjdHBfZGF0YSAqKWItPnB0cjsKKworCS8qIHNldCBzZW5kZXIgZHJ5IGV2ZW50ICovCisjaWZkZWYgU0NUUF9FVkVOVAorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCkpOworCWV2ZW50LnNlX2Fzc29jX2lkID0gMDsKKwlldmVudC5zZV90eXBlID0gU0NUUF9TRU5ERVJfRFJZX0VWRU5UOworCWV2ZW50LnNlX29uID0gMTsKKwlyZXQgPSBzZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCkpOworI2Vsc2UKKwlldmVudHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlKTsKKwlyZXQgPSBnZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5UUywgJmV2ZW50LCAmZXZlbnRzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCQorCWV2ZW50LnNjdHBfc2VuZGVyX2RyeV9ldmVudCA9IDE7CisJCisJcmV0ID0gc2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVFMsICZldmVudCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSkpOworI2VuZGlmCisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHBlZWsgZm9yIG5vdGlmaWNhdGlvbiAqLworCW1lbXNldCgmc25wLCAweDAwLCBzaXplb2YodW5pb24gc2N0cF9ub3RpZmljYXRpb24pKTsKKwlpb3YuaW92X2Jhc2UgPSAoY2hhciAqKSZzbnA7CisJaW92Lmlvdl9sZW4gPSBzaXplb2YodW5pb24gc2N0cF9ub3RpZmljYXRpb24pOworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2lvdiA9ICZpb3Y7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2cubXNnX2ZsYWdzID0gMDsKKworCW4gPSByZWN2bXNnKGItPm51bSwgJm1zZywgTVNHX1BFRUspOworCWlmIChuIDw9IDApCisJCXsKKwkJaWYgKChuIDwgMCkgJiYgKGdldF9sYXN0X3NvY2tldF9lcnJvcigpICE9IEVBR0FJTikgJiYgKGdldF9sYXN0X3NvY2tldF9lcnJvcigpICE9IEVXT1VMREJMT0NLKSkKKwkJCXJldHVybiAtMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJCX0KKworCS8qIGlmIHdlIGZpbmQgYSBub3RpZmljYXRpb24sIHByb2Nlc3MgaXQgYW5kIHRyeSBhZ2FpbiBpZiBuZWNlc3NhcnkgKi8KKwl3aGlsZSAobXNnLm1zZ19mbGFncyAmIE1TR19OT1RJRklDQVRJT04pCisJCXsKKwkJbWVtc2V0KCZzbnAsIDB4MDAsIHNpemVvZih1bmlvbiBzY3RwX25vdGlmaWNhdGlvbikpOworCQlpb3YuaW92X2Jhc2UgPSAoY2hhciAqKSZzbnA7CisJCWlvdi5pb3ZfbGVuID0gc2l6ZW9mKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uKTsKKwkJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwkJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwkJbXNnLm1zZ19pb3YgPSAmaW92OworCQltc2cubXNnX2lvdmxlbiA9IDE7CisJCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCW1zZy5tc2dfZmxhZ3MgPSAwOworCisJCW4gPSByZWN2bXNnKGItPm51bSwgJm1zZywgMCk7CisJCWlmIChuIDw9IDApCisJCQl7CisJCQlpZiAoKG4gPCAwKSAmJiAoZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkgIT0gRUFHQUlOKSAmJiAoZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkgIT0gRVdPVUxEQkxPQ0spKQorCQkJCXJldHVybiAtMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gaXNfZHJ5OworCQkJfQorCQkKKwkJaWYgKHNucC5zbl9oZWFkZXIuc25fdHlwZSA9PSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQpCisJCQl7CisJCQlpc19kcnkgPSAxOworCisJCQkvKiBkaXNhYmxlIHNlbmRlciBkcnkgZXZlbnQgKi8KKyNpZmRlZiBTQ1RQX0VWRU5UCisJCQltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpKTsKKwkJCWV2ZW50LnNlX2Fzc29jX2lkID0gMDsKKwkJCWV2ZW50LnNlX3R5cGUgPSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ7CisJCQlldmVudC5zZV9vbiA9IDA7CisJCQlyZXQgPSBzZXRzb2Nrb3B0KGItPm51bSwgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCkpOworI2Vsc2UKKwkJCWV2ZW50c2l6ZSA9IChzb2NrbGVuX3QpIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUpOworCQkJcmV0ID0gZ2V0c29ja29wdChiLT5udW0sIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVFMsICZldmVudCwgJmV2ZW50c2l6ZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWV2ZW50LnNjdHBfc2VuZGVyX2RyeV9ldmVudCA9IDA7CisKKwkJCXJldCA9IHNldHNvY2tvcHQoYi0+bnVtLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlRTLCAmZXZlbnQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUpKTsKKyNlbmRpZgorCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJfQorCisjaWZkZWYgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVAorCQlpZiAoc25wLnNuX2hlYWRlci5zbl90eXBlID09IFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQpCisJCQlkZ3JhbV9zY3RwX2hhbmRsZV9hdXRoX2ZyZWVfa2V5X2V2ZW50KGIsICZzbnApOworI2VuZGlmCisKKwkJaWYgKGRhdGEtPmhhbmRsZV9ub3RpZmljYXRpb25zICE9IE5VTEwpCisJCQlkYXRhLT5oYW5kbGVfbm90aWZpY2F0aW9ucyhiLCBkYXRhLT5ub3RpZmljYXRpb25fY29udGV4dCwgKHZvaWQqKSAmc25wKTsKKworCQkvKiBmb3VuZCBub3RpZmljYXRpb24sIHBlZWsgYWdhaW4gKi8KKwkJbWVtc2V0KCZzbnAsIDB4MDAsIHNpemVvZih1bmlvbiBzY3RwX25vdGlmaWNhdGlvbikpOworCQlpb3YuaW92X2Jhc2UgPSAoY2hhciAqKSZzbnA7CisJCWlvdi5pb3ZfbGVuID0gc2l6ZW9mKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uKTsKKwkJbXNnLm1zZ19uYW1lID0gTlVMTDsKKwkJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwkJbXNnLm1zZ19pb3YgPSAmaW92OworCQltc2cubXNnX2lvdmxlbiA9IDE7CisJCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCW1zZy5tc2dfZmxhZ3MgPSAwOworCisJCS8qIGlmIHdlIGhhdmUgc2VlbiB0aGUgZHJ5IGFscmVhZHksIGRvbid0IHdhaXQgKi8KKwkJaWYgKGlzX2RyeSkKKwkJCXsKKwkJCXNvY2tmbGFncyA9IGZjbnRsKGItPm51bSwgRl9HRVRGTCwgMCk7CisJCQlmY250bChiLT5udW0sIEZfU0VURkwsIE9fTk9OQkxPQ0spOworCQkJfQorCisJCW4gPSByZWN2bXNnKGItPm51bSwgJm1zZywgTVNHX1BFRUspOworCisJCWlmIChpc19kcnkpCisJCQl7CisJCQlmY250bChiLT5udW0sIEZfU0VURkwsIHNvY2tmbGFncyk7CisJCQl9CisKKwkJaWYgKG4gPD0gMCkKKwkJCXsKKwkJCWlmICgobiA8IDApICYmIChnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKSAhPSBFQUdBSU4pICYmIChnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKSAhPSBFV09VTERCTE9DSykpCisJCQkJcmV0dXJuIC0xOworCQkJZWxzZQorCQkJCXJldHVybiBpc19kcnk7CisJCQl9CisJCX0KKworCS8qIHJlYWQgYW55dGhpbmcgZWxzZSAqLworCXJldHVybiBpc19kcnk7Cit9CisKK2ludCBCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZyhCSU8gKmIpCisJeworCWludCBuLCBzb2NrZmxhZ3M7CisJdW5pb24gc2N0cF9ub3RpZmljYXRpb24gc25wOworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBpb3ZlYyBpb3Y7CisJYmlvX2RncmFtX3NjdHBfZGF0YSAqZGF0YSA9IChiaW9fZGdyYW1fc2N0cF9kYXRhICopYi0+cHRyOworCisJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBtZXNzYWdlcyB3YWl0aW5nIHRvIGJlIHJlYWQgKi8KKwlkbworCQl7CisJCW1lbXNldCgmc25wLCAweDAwLCBzaXplb2YodW5pb24gc2N0cF9ub3RpZmljYXRpb24pKTsKKwkJaW92Lmlvdl9iYXNlID0gKGNoYXIgKikmc25wOworCQlpb3YuaW92X2xlbiA9IHNpemVvZih1bmlvbiBzY3RwX25vdGlmaWNhdGlvbik7CisJCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJCW1zZy5tc2dfaW92ID0gJmlvdjsKKwkJbXNnLm1zZ19pb3ZsZW4gPSAxOworCQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCQltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCQltc2cubXNnX2ZsYWdzID0gMDsKKworCQlzb2NrZmxhZ3MgPSBmY250bChiLT5udW0sIEZfR0VURkwsIDApOworCQlmY250bChiLT5udW0sIEZfU0VURkwsIE9fTk9OQkxPQ0spOworCQluID0gcmVjdm1zZyhiLT5udW0sICZtc2csIE1TR19QRUVLKTsKKwkJZmNudGwoYi0+bnVtLCBGX1NFVEZMLCBzb2NrZmxhZ3MpOworCisJCS8qIGlmIG5vdGlmaWNhdGlvbiwgcHJvY2VzcyBhbmQgdHJ5IGFnYWluICovCisJCWlmIChuID4gMCAmJiAobXNnLm1zZ19mbGFncyAmIE1TR19OT1RJRklDQVRJT04pKQorCQkJeworI2lmZGVmIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKKwkJCWlmIChzbnAuc25faGVhZGVyLnNuX3R5cGUgPT0gU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVCkKKwkJCQlkZ3JhbV9zY3RwX2hhbmRsZV9hdXRoX2ZyZWVfa2V5X2V2ZW50KGIsICZzbnApOworI2VuZGlmCisKKwkJCW1lbXNldCgmc25wLCAweDAwLCBzaXplb2YodW5pb24gc2N0cF9ub3RpZmljYXRpb24pKTsKKwkJCWlvdi5pb3ZfYmFzZSA9IChjaGFyICopJnNucDsKKwkJCWlvdi5pb3ZfbGVuID0gc2l6ZW9mKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uKTsKKwkJCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJCQltc2cubXNnX25hbWVsZW4gPSAwOworCQkJbXNnLm1zZ19pb3YgPSAmaW92OworCQkJbXNnLm1zZ19pb3ZsZW4gPSAxOworCQkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwkJCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCQltc2cubXNnX2ZsYWdzID0gMDsKKwkJCW4gPSByZWN2bXNnKGItPm51bSwgJm1zZywgMCk7CisKKwkJCWlmIChkYXRhLT5oYW5kbGVfbm90aWZpY2F0aW9ucyAhPSBOVUxMKQorCQkJCWRhdGEtPmhhbmRsZV9ub3RpZmljYXRpb25zKGIsIGRhdGEtPm5vdGlmaWNhdGlvbl9jb250ZXh0LCAodm9pZCopICZzbnApOworCQkJfQorCisJCX0gd2hpbGUgKG4gPiAwICYmIChtc2cubXNnX2ZsYWdzICYgTVNHX05PVElGSUNBVElPTikpOworCisJLyogUmV0dXJuIDEgaWYgdGhlcmUgaXMgYSBtZXNzYWdlIHRvIGJlIHJlYWQsIHJldHVybiAwIG90aGVyd2lzZS4gKi8KKwlpZiAobiA+IDApCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7CisJfQorCitzdGF0aWMgaW50IGRncmFtX3NjdHBfcHV0cyhCSU8gKmJwLCBjb25zdCBjaGFyICpzdHIpCisJeworCWludCBuLHJldDsKKworCW49c3RybGVuKHN0cik7CisJcmV0PWRncmFtX3NjdHBfd3JpdGUoYnAsc3RyLG4pOworCXJldHVybihyZXQpOworCX0KKyNlbmRpZgorCiBzdGF0aWMgaW50IEJJT19kZ3JhbV9zaG91bGRfcmV0cnkoaW50IGkpCiAJewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL2FybXY0LWdmMm0ucGwgYi9jcnlwdG8vYm4vYXNtL2FybXY0LWdmMm0ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyZTBiNwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20vYXJtdjQtZ2YybS5wbApAQCAtMCwwICsxLDI3OCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgTWF5IDIwMTEKKyMKKyMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzIGJuX0dGMm1fbXVsXzJ4MiBwb2x5bm9taWFsIG11bHRpcGxpY2F0aW9uCisjIHVzZWQgaW4gYm5fZ2YybS5jLiBJdCdzIGtpbmQgb2YgbG93LWhhbmdpbmcgbWVjaGFuaWNhbCBwb3J0IGZyb20KKyMgQyBmb3IgdGhlIHRpbWUgYmVpbmcuLi4gRXhjZXB0IHRoYXQgaXQgaGFzIHR3byBjb2RlIHBhdGhzOiBwdXJlCisjIGludGVnZXIgY29kZSBzdWl0YWJsZSBmb3IgYW55IEFSTXY0IGFuZCBsYXRlciBDUFUgYW5kIE5FT04gY29kZQorIyBzdWl0YWJsZSBmb3IgQVJNdjcuIFB1cmUgaW50ZWdlciAxeDEgbXVsdGlwbGljYXRpb24gc3Vicm91dGluZSBydW5zCisjIGluIH40NSBjeWNsZXMgb24gZHVhbC1pc3N1ZSBjb3JlIHN1Y2ggYXMgQ29ydGV4IEE4LCB3aGljaCBpcyB+NTAlCisjIGZhc3RlciB0aGFuIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlLiBGb3IgRUNESCBhbmQgRUNEU0EgdmVyaWZ5IChidXQKKyMgbm90IGZvciBFQ0RTQSBzaWduKSBpdCBtZWFucyAyNSUtNDUlIGltcHJvdmVtZW50IGRlcGVuZGluZyBvbiBrZXkKKyMgbGVuZ3RoLCBtb3JlIGZvciBsb25nZXIga2V5cy4gRXZlbiB0aG91Z2ggTkVPTiAxeDEgbXVsdGlwbGljYXRpb24KKyMgcnVucyBpbiBldmVuIGxlc3MgY3ljbGVzLCB+MzAsIGltcHJvdmVtZW50IGlzIG1lYXN1cmFibGUgb25seSBvbgorIyBsb25nZXIga2V5cy4gT25lIGhhcyB0byBvcHRpbWl6ZSBjb2RlIGVsc2V3aGVyZSB0byBnZXQgTkVPTiBnbG93Li4uCisKK3doaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CitvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworCitzdWIgRGxvKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKToiIjsgICAgIH0KK3N1YiBEaGkoKSAgIHsgc2hpZnQ9fm18cShbMV0/WzAtOV0pfD8iZCIuKCQxKjIrMSk6IiI7ICAgfQorc3ViIFEoKSAgICAgeyBzaGlmdD1+bXxkKFsxLTNdP1swMjQ2OF0pfD8icSIuKCQxLzIpOiIiOyB9CisKKyRjb2RlPTw8X19fOworI2luY2x1ZGUgImFybV9hcmNoLmgiCisKKy50ZXh0CisuY29kZQkzMgorCisjaWYgX19BUk1fQVJDSF9fPj03CisuZnB1CW5lb24KKworLnR5cGUJbXVsXzF4MV9uZW9uLCVmdW5jdGlvbgorLmFsaWduCTUKK211bF8xeDFfbmVvbjoKKwl2c2hsLnU2NAlgJkRsbygicTEiKWAsZDE2LCM4CUAgcTEtcTMgYXJlIHNsaWRlZCAkYQorCXZtdWxsLnA4CWAmUSgiZDAiKWAsZDE2LGQxNwlAIGG3YmIKKwl2c2hsLnU2NAlgJkRsbygicTIiKWAsZDE2LCMxNgorCXZtdWxsLnA4CXExLGAmRGxvKCJxMSIpYCxkMTcJQCBhPDw4t2JiCisJdnNobC51NjQJYCZEbG8oInEzIilgLGQxNiwjMjQKKwl2bXVsbC5wOAlxMixgJkRsbygicTIiKWAsZDE3CUAgYTw8MTa3YmIKKwl2c2hyLnU2NAlgJkRsbygicTEiKWAsIzgKKwl2bXVsbC5wOAlxMyxgJkRsbygicTMiKWAsZDE3CUAgYTw8MjS3YmIKKwl2c2hsLnU2NAlgJkRoaSgicTEiKWAsIzI0CisJdmVvcgkJZDAsYCZEbG8oInExIilgCisJdnNoci51NjQJYCZEbG8oInEyIilgLCMxNgorCXZlb3IJCWQwLGAmRGhpKCJxMSIpYAorCXZzaGwudTY0CWAmRGhpKCJxMiIpYCwjMTYKKwl2ZW9yCQlkMCxgJkRsbygicTIiKWAKKwl2c2hyLnU2NAlgJkRsbygicTMiKWAsIzI0CisJdmVvcgkJZDAsYCZEaGkoInEyIilgCisJdnNobC51NjQJYCZEaGkoInEzIilgLCM4CisJdmVvcgkJZDAsYCZEbG8oInEzIilgCisJdmVvcgkJZDAsYCZEaGkoInEzIilgCisJYngJbHIKKy5zaXplCW11bF8xeDFfbmVvbiwuLW11bF8xeDFfbmVvbgorI2VuZGlmCitfX18KKyMjIyMjIyMjIyMjIyMjIyMKKyMgcHJpdmF0ZSBpbnRlcmZhY2UgdG8gbXVsXzF4MV9pYWx1CisjCiskYT0icjEiOworJGI9InIwIjsKKworKCRhMCwkYTEsJGEyLCRhMTIsJGE0LCRhMTQpPQorKCRoaSwkbG8sJHQwLCR0MSwgJGkwLCRpMSApPW1hcCgiciRfIiwoNC4uOSksMTIpOworCiskbWFzaz0icjEyIjsKKworJGNvZGUuPTw8X19fOworLnR5cGUJbXVsXzF4MV9pYWx1LCVmdW5jdGlvbgorLmFsaWduCTUKK211bF8xeDFfaWFsdToKKwltb3YJJGEwLCMwCisJYmljCSRhMSwkYSwjMzw8MzAJCUAgYTE9YSYweDNmZmZmZmZmCisJc3RyCSRhMCxbc3AsIzBdCQlAIHRhYlswXT0wCisJYWRkCSRhMiwkYTEsJGExCQlAIGEyPWExPDwxCisJc3RyCSRhMSxbc3AsIzRdCQlAIHRhYlsxXT1hMQorCWVvcgkkYTEyLCRhMSwkYTIJCUAgYTFeYTIKKwlzdHIJJGEyLFtzcCwjOF0JCUAgdGFiWzJdPWEyCisJbW92CSRhNCwkYTEsbHNsIzIJCUAgYTQ9YTE8PDIKKwlzdHIJJGExMixbc3AsIzEyXQkJQCB0YWJbM109YTFeYTIKKwllb3IJJGExNCwkYTEsJGE0CQlAIGExXmE0CisJc3RyCSRhNCxbc3AsIzE2XQkJQCB0YWJbNF09YTQKKwllb3IJJGEwLCRhMiwkYTQJCUAgYTJeYTQKKwlzdHIJJGExNCxbc3AsIzIwXQkJQCB0YWJbNV09YTFeYTQKKwllb3IJJGExMiwkYTEyLCRhNAkJQCBhMV5hMl5hNAorCXN0cgkkYTAsW3NwLCMyNF0JCUAgdGFiWzZdPWEyXmE0CisJYW5kCSRpMCwkbWFzaywkYixsc2wjMgorCXN0cgkkYTEyLFtzcCwjMjhdCQlAIHRhYls3XT1hMV5hMl5hNAorCisJYW5kCSRpMSwkbWFzaywkYixsc3IjMQorCWxkcgkkbG8sW3NwLCRpMF0JCUAgdGFiW2IgICAgICAgJiAweDddCisJYW5kCSRpMCwkbWFzaywkYixsc3IjNAorCWxkcgkkdDEsW3NwLCRpMV0JCUAgdGFiW2IgPj4gIDMgJiAweDddCisJYW5kCSRpMSwkbWFzaywkYixsc3IjNworCWxkcgkkdDAsW3NwLCRpMF0JCUAgdGFiW2IgPj4gIDYgJiAweDddCisJZW9yCSRsbywkbG8sJHQxLGxzbCMzCUAgc3RhbGwKKwltb3YJJGhpLCR0MSxsc3IjMjkKKwlsZHIJJHQxLFtzcCwkaTFdCQlAIHRhYltiID4+ICA5ICYgMHg3XQorCisJYW5kCSRpMCwkbWFzaywkYixsc3IjMTAKKwllb3IJJGxvLCRsbywkdDAsbHNsIzYKKwllb3IJJGhpLCRoaSwkdDAsbHNyIzI2CisJbGRyCSR0MCxbc3AsJGkwXQkJQCB0YWJbYiA+PiAxMiAmIDB4N10KKworCWFuZAkkaTEsJG1hc2ssJGIsbHNyIzEzCisJZW9yCSRsbywkbG8sJHQxLGxzbCM5CisJZW9yCSRoaSwkaGksJHQxLGxzciMyMworCWxkcgkkdDEsW3NwLCRpMV0JCUAgdGFiW2IgPj4gMTUgJiAweDddCisKKwlhbmQJJGkwLCRtYXNrLCRiLGxzciMxNgorCWVvcgkkbG8sJGxvLCR0MCxsc2wjMTIKKwllb3IJJGhpLCRoaSwkdDAsbHNyIzIwCisJbGRyCSR0MCxbc3AsJGkwXQkJQCB0YWJbYiA+PiAxOCAmIDB4N10KKworCWFuZAkkaTEsJG1hc2ssJGIsbHNyIzE5CisJZW9yCSRsbywkbG8sJHQxLGxzbCMxNQorCWVvcgkkaGksJGhpLCR0MSxsc3IjMTcKKwlsZHIJJHQxLFtzcCwkaTFdCQlAIHRhYltiID4+IDIxICYgMHg3XQorCisJYW5kCSRpMCwkbWFzaywkYixsc3IjMjIKKwllb3IJJGxvLCRsbywkdDAsbHNsIzE4CisJZW9yCSRoaSwkaGksJHQwLGxzciMxNAorCWxkcgkkdDAsW3NwLCRpMF0JCUAgdGFiW2IgPj4gMjQgJiAweDddCisKKwlhbmQJJGkxLCRtYXNrLCRiLGxzciMyNQorCWVvcgkkbG8sJGxvLCR0MSxsc2wjMjEKKwllb3IJJGhpLCRoaSwkdDEsbHNyIzExCisJbGRyCSR0MSxbc3AsJGkxXQkJQCB0YWJbYiA+PiAyNyAmIDB4N10KKworCXRzdAkkYSwjMTw8MzAKKwlhbmQJJGkwLCRtYXNrLCRiLGxzciMyOAorCWVvcgkkbG8sJGxvLCR0MCxsc2wjMjQKKwllb3IJJGhpLCRoaSwkdDAsbHNyIzgKKwlsZHIJJHQwLFtzcCwkaTBdCQlAIHRhYltiID4+IDMwICAgICAgXQorCisJZW9ybmUJJGxvLCRsbywkYixsc2wjMzAKKwllb3JuZQkkaGksJGhpLCRiLGxzciMyCisJdHN0CSRhLCMxPDwzMQorCWVvcgkkbG8sJGxvLCR0MSxsc2wjMjcKKwllb3IJJGhpLCRoaSwkdDEsbHNyIzUKKwllb3JuZQkkbG8sJGxvLCRiLGxzbCMzMQorCWVvcm5lCSRoaSwkaGksJGIsbHNyIzEKKwllb3IJJGxvLCRsbywkdDAsbHNsIzMwCisJZW9yCSRoaSwkaGksJHQwLGxzciMyCisKKwltb3YJcGMsbHIKKy5zaXplCW11bF8xeDFfaWFsdSwuLW11bF8xeDFfaWFsdQorX19fCisjIyMjIyMjIyMjIyMjIyMjCisjIHZvaWQJYm5fR0YybV9tdWxfMngyKEJOX1VMT05HICpyLAorIwlCTl9VTE9ORyBhMSxCTl9VTE9ORyBhMCwKKyMJQk5fVUxPTkcgYjEsQk5fVUxPTkcgYjApOwkjIHJbMy4uMF09YTFhMLdiMWIwCisKKygkQTEsJEIxLCRBMCwkQjAsJEExQjEsJEEwQjApPW1hcCgiZCRfIiwoMTguLjIzKSk7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9iYWwJYm5fR0YybV9tdWxfMngyCisudHlwZQlibl9HRjJtX211bF8yeDIsJWZ1bmN0aW9uCisuYWxpZ24JNQorYm5fR0YybV9tdWxfMngyOgorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMTIsLkxPUEVOU1NMX2FybWNhcAorLkxwaWM6CWxkcglyMTIsW3BjLHIxMl0KKwl0c3QJcjEyLCMxCisJYmVxCS5MaWFsdQorCisJdmVvcgkkQTEsJEExCisJdm1vdi4zMgkkQjEscjMscjMJCUAgdHdvIGNvcGllcyBvZiBiMQorCXZtb3YuMzIJJHtBMX1bMF0scjEJCUAgYTEKKworCXZlb3IJJEEwLCRBMAorCXZsZDEuMzIJJHtCMH1bXSxbc3AsOjMyXQlAIHR3byBjb3BpZXMgb2YgYjAKKwl2bW92LjMyCSR7QTB9WzBdLHIyCQlAIGEwCisJbW92CXIxMixscgorCisJdm1vdglkMTYsJEExCisJdm1vdglkMTcsJEIxCisJYmwJbXVsXzF4MV9uZW9uCQlAIGExt2IxCisJdm1vdgkkQTFCMSxkMAorCisJdm1vdglkMTYsJEEwCisJdm1vdglkMTcsJEIwCisJYmwJbXVsXzF4MV9uZW9uCQlAIGEwt2IwCisJdm1vdgkkQTBCMCxkMAorCisJdmVvcglkMTYsJEEwLCRBMQorCXZlb3IJZDE3LCRCMCwkQjEKKwl2ZW9yCSRBMCwkQTBCMCwkQTFCMQorCWJsCW11bF8xeDFfbmVvbgkJQCAoYTArYTEptyhiMCtiMSkKKworCXZlb3IJZDAsJEEwCQkJQCAoYTArYTEptyhiMCtiMSktYTC3YjAtYTG3YjEKKwl2c2hsLnU2NCBkMSxkMCwjMzIKKwl2c2hyLnU2NCBkMCxkMCwjMzIKKwl2ZW9yCSRBMEIwLGQxCisJdmVvcgkkQTFCMSxkMAorCXZzdDEuMzIJeyR7QTBCMH1bMF19LFtyMCw6MzJdIQorCXZzdDEuMzIJeyR7QTBCMH1bMV19LFtyMCw6MzJdIQorCXZzdDEuMzIJeyR7QTFCMX1bMF19LFtyMCw6MzJdIQorCXZzdDEuMzIJeyR7QTFCMX1bMV19LFtyMCw6MzJdCisJYngJcjEyCisuYWxpZ24JNAorLkxpYWx1OgorI2VuZGlmCitfX18KKyRyZXQ9InIxMCI7CSMgcmVhc3NpZ25lZCAxc3QgYXJndW1lbnQKKyRjb2RlLj08PF9fXzsKKwlzdG1kYglzcCEse3I0LXIxMCxscn0KKwltb3YJJHJldCxyMAkJCUAgcmVhc3NpZ24gMXN0IGFyZ3VtZW50CisJbW92CSRiLHIzCQkJQCAkYj1iMQorCWxkcglyMyxbc3AsIzMyXQkJQCBsb2FkIGIwCisJbW92CSRtYXNrLCM3PDwyCisJc3ViCXNwLHNwLCMzMgkJQCBhbGxvY2F0ZSB0YWJbOF0KKworCWJsCW11bF8xeDFfaWFsdQkJQCBhMbdiMQorCXN0cgkkbG8sWyRyZXQsIzhdCisJc3RyCSRoaSxbJHJldCwjMTJdCisKKwllb3IJJGIsJGIscjMJCUAgZmxpcCBiMCBhbmQgYjEKKwkgZW9yCSRhLCRhLHIyCQlAIGZsaXAgYTAgYW5kIGExCisJZW9yCXIzLHIzLCRiCisJIGVvcglyMixyMiwkYQorCWVvcgkkYiwkYixyMworCSBlb3IJJGEsJGEscjIKKwlibAltdWxfMXgxX2lhbHUJCUAgYTC3YjAKKwlzdHIJJGxvLFskcmV0XQorCXN0cgkkaGksWyRyZXQsIzRdCisKKwllb3IJJGEsJGEscjIKKwllb3IJJGIsJGIscjMKKwlibAltdWxfMXgxX2lhbHUJCUAgKGExK2EwKbcoYjErYjApCitfX18KK0ByPW1hcCgiciRfIiwoNi4uOSkpOworJGNvZGUuPTw8X19fOworCWxkbWlhCSRyZXQse0ByWzBdLUByWzNdfQorCWVvcgkkbG8sJGxvLCRoaQorCWVvcgkkaGksJGhpLEByWzFdCisJZW9yCSRsbywkbG8sQHJbMF0KKwllb3IJJGhpLCRoaSxAclsyXQorCWVvcgkkbG8sJGxvLEByWzNdCisJZW9yCSRoaSwkaGksQHJbM10KKwlzdHIJJGhpLFskcmV0LCM4XQorCWVvcgkkbG8sJGxvLCRoaQorCWFkZAlzcCxzcCwjMzIJCUAgZGVzdHJveSB0YWJbOF0KKwlzdHIJJGxvLFskcmV0LCM0XQorCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTAscGN9CisjZWxzZQorCWxkbWlhCXNwISx7cjQtcjEwLGxyfQorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQorI2VuZGlmCisuc2l6ZQlibl9HRjJtX211bF8yeDIsLi1ibl9HRjJtX211bF8yeDIKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5hbGlnbgk1CisuTE9QRU5TU0xfYXJtY2FwOgorLndvcmQJT1BFTlNTTF9hcm1jYXBfUC0oLkxwaWMrOCkKKyNlbmRpZgorLmFzY2l6CSJHRigyXm0pIE11bHRpcGxpY2F0aW9uIGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTUKKworLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKKyRjb2RlID1+IHMvXGJieFxzK2xyXGIvLndvcmRcdDB4ZTEyZmZmMWUvZ207ICAgICMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGggLW1hcmNoPWFybXY0CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsgICAjIGVuZm9yY2UgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5wbAppbmRleCAxNGUwZDJkLi5mNzhhOGI1IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9hcm12NC1tb250LnBsCkBAIC0yMyw2ICsyMyw5IEBACiAjIHRoYW4gMS8yS0IuIFdpbmRvd3MgQ0UgcG9ydCB3b3VsZCBiZSB0cml2aWFsLCBhcyBpdCdzIGV4Y2x1c2l2ZWx5CiAjIGFib3V0IGRlY29yYXRpb25zLCBBQkkgYW5kIGluc3RydWN0aW9uIHN5bnRheCBhcmUgaWRlbnRpY2FsLgogCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKwogJG51bT0icjAiOwkjIHN0YXJ0cyBhcyBudW0gYXJndW1lbnQsIGJ1dCBob2xkcyAmdHBbbnVtLTFdCiAkYXA9InIxIjsKICRicD0icjIiOyAkYmk9InIyIjsgJHJwPSJyMiI7CkBAIC04OSw5ICs5Miw5IEBACiAuTDFzdDoKIAlsZHIJJGFqLFskYXBdLCM0CQlAIGFwW2pdLGFwKysKIAltb3YJJGFsbywkYWhpCisJbGRyCSRuaixbJG5wXSwjNAkJQCBucFtqXSxucCsrCiAJbW92CSRhaGksIzAKIAl1bWxhbAkkYWxvLCRhaGksJGFqLCRiaQlAIGFwW2pdKmJwWzBdCi0JbGRyCSRuaixbJG5wXSwjNAkJQCBucFtqXSxucCsrCiAJbW92CSRuaGksIzAKIAl1bWxhbAkkbmxvLCRuaGksJG5qLCRuMAlAIG5wW2pdKm4wCiAJYWRkcwkkbmxvLCRubG8sJGFsbwpAQCAtMTAxLDIxICsxMDQsMjEgQEAKIAlibmUJLkwxc3QKIAogCWFkZHMJJG5sbywkbmxvLCRhaGkKLQltb3YJJG5oaSwjMAotCWFkYwkkbmhpLCRuaGksIzAKIAlsZHIJJHRwLFskX2JwXQkJQCByZXN0b3JlIGJwCi0Jc3RyCSRubG8sWyRudW1dCQlAIHRwW251bS0xXT0KKwltb3YJJG5oaSwjMAogCWxkcgkkbjAsWyRfbjBdCQlAIHJlc3RvcmUgbjAKKwlhZGMJJG5oaSwkbmhpLCMwCisJc3RyCSRubG8sWyRudW1dCQlAIHRwW251bS0xXT0KIAlzdHIJJG5oaSxbJG51bSwjNF0JCUAgdHBbbnVtXT0KIAwKIC5Mb3V0ZXI6CiAJc3ViCSR0aiwkbnVtLHNwCQlAICJvcmlnaW5hbCIgJG51bS0xIHZhbHVlCiAJc3ViCSRhcCwkYXAsJHRqCQlAICJyZXdpbmQiIGFwIHRvICZhcFsxXQotCXN1YgkkbnAsJG5wLCR0agkJQCAicmV3aW5kIiBucCB0byAmbnBbMV0KIAlsZHIJJGJpLFskdHAsIzRdIQkJQCAqKCsrYnApCisJc3ViCSRucCwkbnAsJHRqCQlAICJyZXdpbmQiIG5wIHRvICZucFsxXQogCWxkcgkkYWosWyRhcCwjLTRdCQlAIGFwWzBdCi0JbGRyCSRuaixbJG5wLCMtNF0JCUAgbnBbMF0KIAlsZHIJJGFsbyxbc3BdCQlAIHRwWzBdCisJbGRyCSRuaixbJG5wLCMtNF0JCUAgbnBbMF0KIAlsZHIJJHRqLFtzcCwjNF0JCUAgdHBbMV0KIAogCW1vdgkkYWhpLCMwCkBAIC0xMjksMTMgKzEzMiwxMyBAQAogLkxpbm5lcjoKIAlsZHIJJGFqLFskYXBdLCM0CQlAIGFwW2pdLGFwKysKIAlhZGRzCSRhbG8sJGFoaSwkdGoJCUAgKz10cFtqXQorCWxkcgkkbmosWyRucF0sIzQJCUAgbnBbal0sbnArKwogCW1vdgkkYWhpLCMwCiAJdW1sYWwJJGFsbywkYWhpLCRhaiwkYmkJQCBhcFtqXSpicFtpXQotCWxkcgkkbmosWyRucF0sIzQJCUAgbnBbal0sbnArKwogCW1vdgkkbmhpLCMwCiAJdW1sYWwJJG5sbywkbmhpLCRuaiwkbjAJQCBucFtqXSpuMAotCWxkcgkkdGosWyR0cCwjOF0JCUAgdHBbaisxXQogCWFkYwkkYWhpLCRhaGksIzAKKwlsZHIJJHRqLFskdHAsIzhdCQlAIHRwW2orMV0KIAlhZGRzCSRubG8sJG5sbywkYWxvCiAJc3RyCSRubG8sWyR0cF0sIzQJCUAgdHBbai0xXT0sdHArKwogCWFkYwkkbmxvLCRuaGksIzAKQEAgLTE0NCwxMyArMTQ3LDEzIEBACiAKIAlhZGRzCSRubG8sJG5sbywkYWhpCiAJbW92CSRuaGksIzAKLQlhZGMJJG5oaSwkbmhpLCMwCi0JYWRkcwkkbmxvLCRubG8sJHRqCi0JYWRjCSRuaGksJG5oaSwjMAogCWxkcgkkdHAsWyRfYnBdCQlAIHJlc3RvcmUgYnAKLQlsZHIJJHRqLFskX2JwZW5kXQkJQCByZXN0b3JlICZicFtudW1dCi0Jc3RyCSRubG8sWyRudW1dCQlAIHRwW251bS0xXT0KKwlhZGMJJG5oaSwkbmhpLCMwCiAJbGRyCSRuMCxbJF9uMF0JCUAgcmVzdG9yZSBuMAorCWFkZHMJJG5sbywkbmxvLCR0agorCWxkcgkkdGosWyRfYnBlbmRdCQlAIHJlc3RvcmUgJmJwW251bV0KKwlhZGMJJG5oaSwkbmhpLCMwCisJc3RyCSRubG8sWyRudW1dCQlAIHRwW251bS0xXT0KIAlzdHIJJG5oaSxbJG51bSwjNF0JCUAgdHBbbnVtXT0KIAogCWNtcAkkdHAsJHRqCmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL2FybXY0LW1vbnQucyBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5zCmluZGV4IDA0ODg0NTUuLjY0YzIyMGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5zCisrKyBiL2NyeXB0by9ibi9hc20vYXJtdjQtbW9udC5zCkBAIC0zOCw5ICszOCw5IEBACiAuTDFzdDoKIAlsZHIJcjUsW3IxXSwjNAkJQCBhcFtqXSxhcCsrCiAJbW92CXIxMCxyMTEKKwlsZHIJcjYsW3IzXSwjNAkJQCBucFtqXSxucCsrCiAJbW92CXIxMSwjMAogCXVtbGFsCXIxMCxyMTEscjUscjIJQCBhcFtqXSpicFswXQotCWxkcglyNixbcjNdLCM0CQlAIG5wW2pdLG5wKysKIAltb3YJcjE0LCMwCiAJdW1sYWwJcjEyLHIxNCxyNixyOAlAIG5wW2pdKm4wCiAJYWRkcwlyMTIscjEyLHIxMApAQCAtNTAsMjEgKzUwLDIxIEBACiAJYm5lCS5MMXN0CiAKIAlhZGRzCXIxMixyMTIscjExCi0JbW92CXIxNCwjMAotCWFkYwlyMTQscjE0LCMwCiAJbGRyCXI0LFtyMCwjMTMqNF0JCUAgcmVzdG9yZSBicAotCXN0cglyMTIsW3IwXQkJQCB0cFtudW0tMV09CisJbW92CXIxNCwjMAogCWxkcglyOCxbcjAsIzE0KjRdCQlAIHJlc3RvcmUgbjAKKwlhZGMJcjE0LHIxNCwjMAorCXN0cglyMTIsW3IwXQkJQCB0cFtudW0tMV09CiAJc3RyCXIxNCxbcjAsIzRdCQlAIHRwW251bV09CiAMCiAuTG91dGVyOgogCXN1YglyNyxyMCxzcAkJQCAib3JpZ2luYWwiIHIwLTEgdmFsdWUKIAlzdWIJcjEscjEscjcJCUAgInJld2luZCIgYXAgdG8gJmFwWzFdCi0Jc3ViCXIzLHIzLHI3CQlAICJyZXdpbmQiIG5wIHRvICZucFsxXQogCWxkcglyMixbcjQsIzRdIQkJQCAqKCsrYnApCisJc3ViCXIzLHIzLHI3CQlAICJyZXdpbmQiIG5wIHRvICZucFsxXQogCWxkcglyNSxbcjEsIy00XQkJQCBhcFswXQotCWxkcglyNixbcjMsIy00XQkJQCBucFswXQogCWxkcglyMTAsW3NwXQkJQCB0cFswXQorCWxkcglyNixbcjMsIy00XQkJQCBucFswXQogCWxkcglyNyxbc3AsIzRdCQlAIHRwWzFdCiAKIAltb3YJcjExLCMwCkBAIC03OCwxMyArNzgsMTMgQEAKIC5MaW5uZXI6CiAJbGRyCXI1LFtyMV0sIzQJCUAgYXBbal0sYXArKwogCWFkZHMJcjEwLHIxMSxyNwkJQCArPXRwW2pdCisJbGRyCXI2LFtyM10sIzQJCUAgbnBbal0sbnArKwogCW1vdglyMTEsIzAKIAl1bWxhbAlyMTAscjExLHI1LHIyCUAgYXBbal0qYnBbaV0KLQlsZHIJcjYsW3IzXSwjNAkJQCBucFtqXSxucCsrCiAJbW92CXIxNCwjMAogCXVtbGFsCXIxMixyMTQscjYscjgJQCBucFtqXSpuMAotCWxkcglyNyxbcjQsIzhdCQlAIHRwW2orMV0KIAlhZGMJcjExLHIxMSwjMAorCWxkcglyNyxbcjQsIzhdCQlAIHRwW2orMV0KIAlhZGRzCXIxMixyMTIscjEwCiAJc3RyCXIxMixbcjRdLCM0CQlAIHRwW2otMV09LHRwKysKIAlhZGMJcjEyLHIxNCwjMApAQCAtOTMsMTMgKzkzLDEzIEBACiAKIAlhZGRzCXIxMixyMTIscjExCiAJbW92CXIxNCwjMAotCWFkYwlyMTQscjE0LCMwCi0JYWRkcwlyMTIscjEyLHI3Ci0JYWRjCXIxNCxyMTQsIzAKIAlsZHIJcjQsW3IwLCMxMyo0XQkJQCByZXN0b3JlIGJwCi0JbGRyCXI3LFtyMCwjMTUqNF0JCUAgcmVzdG9yZSAmYnBbbnVtXQotCXN0cglyMTIsW3IwXQkJQCB0cFtudW0tMV09CisJYWRjCXIxNCxyMTQsIzAKIAlsZHIJcjgsW3IwLCMxNCo0XQkJQCByZXN0b3JlIG4wCisJYWRkcwlyMTIscjEyLHI3CisJbGRyCXI3LFtyMCwjMTUqNF0JCUAgcmVzdG9yZSAmYnBbbnVtXQorCWFkYwlyMTQscjE0LCMwCisJc3RyCXIxMixbcjBdCQlAIHRwW251bS0xXT0KIAlzdHIJcjE0LFtyMCwjNF0JCUAgdHBbbnVtXT0KIAogCWNtcAlyNCxyNwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9ibi1taXBzLnMgYi9jcnlwdG8vYm4vYXNtL2JuLW1pcHMucwppbmRleCBkMTUzNWIxLi4wMjA5N2ZhIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL2JuLW1pcHMucworKysgYi9jcnlwdG8vYm4vYXNtL2JuLW1pcHMucwpAQCAtMzk0LDE0ICszOTQsMTQgQEAKIAlzbHR1CSQyLCQxNCwkMTAKIAlzdwkkMTQsLTIqNCgkNCkKIAlhZGR1CSQyLCQyNAotCisJCiAJYWRkdQkkMTEsJDE1CiAJc2x0dQkkMjUsJDExLCQxNQogCWFkZHUJJDE1LCQxMSwkMgogCXNsdHUJJDIsJDE1LCQxMQogCXN3CSQxNSwtNCgkNCkKIAlhZGR1CSQyLCQyNQotCisJCiAJLnNldAlub3Jlb3JkZXIKIAliZ3R6bAkkMSwuTF9ibl9hZGRfd29yZHNfbG9vcAogCWx3CSQxMiwwKCQ1KQpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJCQkJIyBzbyB0aGF0IHdlIGNhbiBzYXZlIHR3byBhcmd1bWVudHMKIAkJCQkjIGFuZCByZXR1cm4gYWRkcmVzcyBpbiByZWdpc3RlcnMKIAkJCQkjIGluc3RlYWQgb2Ygc3RhY2s6LSkKLQorCQkJCQogCWx3CSQ0LCgkNykKIAltb3ZlCSQxMCwkNQogCWJuZQkkNCwkNixibl9kaXZfM193b3Jkc19pbnRlcm5hbApkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9pYTY0LW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL2lhNjQtbW9udC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU4NjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2JuL2FzbS9pYTY0LW1vbnQucGwKQEAgLTAsMCArMSw4NTEgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgSmFudWFyeSAyMDEwCisjCisjICJUZWFzZXIiIE1vbnRnb21lcnkgbXVsdGlwbGljYXRpb24gbW9kdWxlIGZvciBJQS02NC4gVGhlcmUgYXJlCisjIHNldmVyYWwgcG9zc2liaWxpdGllcyBmb3IgaW1wcm92ZW1lbnQ6CisjCisjIC0gbW9kdWxvLXNjaGVkdWxpbmcgb3V0ZXIgbG9vcCB3b3VsZCBlbGltaW5hdGUgcXVpdGUgYSBudW1iZXIgb2YKKyMgICBzdGFsbHMgYWZ0ZXIgbGRmOCwgeG1hIGFuZCBnZXRmLnNpZyBvdXRzaWRlIGlubmVyIGxvb3AgYW5kCisjICAgaW1wcm92ZSBzaG9ydGVyIGtleSBwZXJmb3JtYW5jZTsKKyMgLSBzaG9ydGVyIHZlY3RvciBzdXBwb3J0IFt3aXRoIGlucHV0IHZlY3RvcnMgYmVpbmcgZmV0Y2hlZCBvbmx5CisjICAgb25jZV0gc2hvdWxkIGJlIGFkZGVkOworIyAtIDJ4IHVucm9sbCB3aXRoIGhlbHAgb2YgbjBbMV0gd291bGQgbWFrZSB0aGUgY29kZSBzY2FsYWJsZSBvbgorIyAgICJ3aWRlciIgSUEtNjQsICJ3aWRlciIgdGhhbiBJdGFuaXVtIDIgdGhhdCBpcywgd2hpY2ggaXMgbm90IG9mCisjICAgYWN1dGUgaW50ZXJlc3QsIGJlY2F1c2UgdXBjb21pbmcgVHVrd2lsYSdzIGluZGl2aWR1YWwgY29yZXMgYXJlCisjICAgcmVwb3J0ZWRseSBiYXNlZCBvbiBJdGFuaXVtIDIgZGVzaWduOworIyAtIGRlZGljYXRlZCBzcXVhcmluZyBwcm9jZWR1cmUoPyk7CisjCisjIEphbnVhcnkgMjAxMAorIworIyBTaG9ydGVyIHZlY3RvciBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGJ5IHplcm8tcGFkZGluZyBhcCBhbmQgbnAKKyMgdmVjdG9ycyB1cCB0byA4IGVsZW1lbnRzLCBvciA1MTIgYml0cy4gVGhpcyBtZWFucyB0aGF0IDI1Ni1iaXQKKyMgaW5wdXRzIHdpbGwgYmUgcHJvY2Vzc2VkIG9ubHkgMiB0aW1lcyBmYXN0ZXIgdGhhbiA1MTItYml0IGlucHV0cywKKyMgbm90IDQgW2FzIG9uZSB3b3VsZCBleHBlY3QsIGJlY2F1c2UgYWxnb3JpdGhtIGNvbXBsZXhpdHkgaXMgbl4yXS4KKyMgVGhlIHJlYXNvbiBmb3IgcGFkZGluZyBpcyB0aGF0IGlucHV0cyBzaG9ydGVyIHRoYW4gNTEyIGJpdHMgd29uJ3QKKyMgYmUgcHJvY2Vzc2VkIGZhc3RlciBhbnl3YXksIGJlY2F1c2UgbWluaW1hbCBjcml0aWNhbCBwYXRoIG9mIHRoZQorIyBjb3JlIGxvb3AgaGFwcGVucyB0byBtYXRjaCA1MTItYml0IHRpbWluZy4gRWl0aGVyIHdheSwgaXQgcmVzdWx0ZWQKKyMgaW4gPjEwMCUgaW1wcm92ZW1lbnQgb2YgNTEyLWJpdCBSU0Egc2lnbiBiZW5jaG1hcmsgYW5kIDUwJSAtIG9mCisjIDEwMjQtYml0IG9uZSBbaW4gY29tcGFyaXNvbiB0byBvcmlnaW5hbCB2ZXJzaW9uIG9mICp0aGlzKiBtb2R1bGVdLgorIworIyBTbyBmYXIgJ29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IG9uIDkwME1IeiBJdGFuaXVtIDIgKndpdGgqCisjIHRoaXMgbW9kdWxlIGlzOgorIyAgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKKyMgcnNhICA1MTIgYml0cyAwLjAwMDI5MHMgMC4wMDAwMjRzICAgMzQ1Mi44ICA0MjAzMS40CisjIHJzYSAxMDI0IGJpdHMgMC4wMDA3OTNzIDAuMDAwMDU4cyAgIDEyNjEuNyAgMTcxNzIuMAorIyByc2EgMjA0OCBiaXRzIDAuMDA1OTA4cyAwLjAwMDE0OHMgICAgMTY5LjMgICA2NzU0LjAKKyMgcnNhIDQwOTYgYml0cyAwLjAzMzQ1NnMgMC4wMDA0NjlzICAgICAyOS45ICAgMjEzMy42CisjIGRzYSAgNTEyIGJpdHMgMC4wMDAyNTNzIDAuMDAwMTk4cyAgIDM5NDkuOSAgIDUwNTcuMAorIyBkc2EgMTAyNCBiaXRzIDAuMDAwNTg1cyAwLjAwMDYwN3MgICAxNzA4LjQgICAxNjQ3LjQKKyMgZHNhIDIwNDggYml0cyAwLjAwMTQ1M3MgMC4wMDE3MDNzICAgIDY4OC4xICAgIDU4Ny40CisjCisjIC4uLiBhbmQgKndpdGhvdXQqIChidXQgc3RpbGwgd2l0aCBpYTY0LlMpOgorIworIyByc2EgIDUxMiBiaXRzIDAuMDAwNjcwcyAwLjAwMDA0MXMgICAxNDkxLjggIDI0MTQ1LjUKKyMgcnNhIDEwMjQgYml0cyAwLjAwMTk4OHMgMC4wMDAwODBzICAgIDUwMi45ICAxMjQ5OS4zCisjIHJzYSAyMDQ4IGJpdHMgMC4wMDg3MDJzIDAuMDAwMTg5cyAgICAxMTQuOSAgIDUyOTMuOQorIyByc2EgNDA5NiBiaXRzIDAuMDQzODYwcyAwLjAwMDUzM3MgICAgIDIyLjggICAxODc1LjkKKyMgZHNhICA1MTIgYml0cyAwLjAwMDQ0MXMgMC4wMDA0MjdzICAgMjI2NS4zICAgMjM0MC42CisjIGRzYSAxMDI0IGJpdHMgMC4wMDA4MjNzIDAuMDAwODY3cyAgIDEyMTUuNiAgIDExNTMuMgorIyBkc2EgMjA0OCBiaXRzIDAuMDAxODk0cyAwLjAwMjE3OXMgICAgNTI4LjEgICAgNDU4LjkKKyMKKyMgQXMgaXQgY2FuIGJlIHNlZW4sIFJTQSBzaWduIHBlcmZvcm1hbmNlIGltcHJvdmVzIGJ5IDEzMC0zMCUsCisjIGhlcmVhZnRlciBsZXNzIGZvciBsb25nZXIga2V5cywgd2hpbGUgdmVyaWZ5IC0gYnkgNzQtMTMlLgorIyBEU0EgcGVyZm9ybWFuY2UgaW1wcm92ZXMgYnkgMTE1LTMwJS4KKworaWYgKCReTyBlcSAiaHB1eCIpIHsKKyAgICAkQUREUD0iYWRkcDQiOworICAgIGZvciAoQEFSR1YpIHsgJEFERFA9ImFkZCIgaWYgKC9bXCtERHxcLW1scF02NC8pOyB9Cit9IGVsc2UgeyAkQUREUD0iYWRkIjsgfQorCiskY29kZT08PF9fXzsKKy5leHBsaWNpdAorLnRleHQKKworLy8gaW50IGJuX211bF9tb250IChCTl9VTE9ORyAqcnAsY29uc3QgQk5fVUxPTkcgKmFwLAorLy8JCSAgICBjb25zdCBCTl9VTE9ORyAqYnAsY29uc3QgQk5fVUxPTkcgKm5wLAorLy8JCSAgICBjb25zdCBCTl9VTE9ORyAqbjBwLGludCBudW0pOwkJCQorLmFsaWduCTY0CisuZ2xvYmFsCWJuX211bF9tb250IworLnByb2MJYm5fbXVsX21vbnQjCitibl9tdWxfbW9udDoKKwkucHJvbG9ndWUKKwkuYm9keQoreyAubW1pOwljbXA0LmxlCQlwNixwNz0yLHIzNzs7CisocDYpCWNtcDQubHQudW5jCXA4LHA5PTgscjM3CisJbW92CQlyZXQwPXIwCQl9OzsKK3sgLmJiYjsKKyhwOSkJYnIuY29uZC5kcHRrLm1hbnkJYm5fbXVsX21vbnRfOAorKHA4KQlici5jb25kLmRwbnQubWFueQlibl9tdWxfbW9udF9nZW5lcmFsCisocDcpCWJyLnJldC5zcG50Lm1hbnkJYjAJfTs7CisuZW5kcAlibl9tdWxfbW9udCMKKwwKK3ByZXZmcz1yMjsJcHJldnByPXIzOwlwcmV2bGM9cjEwOwlwcmV2c3A9cjExOworCitycHRyPXI4OwlhcHRyPXI5OwlicHRyPXIxNDsJbnB0cj1yMTU7Cit0cHRyPXIxNjsJLy8gJnRwWzBdCit0cF8xPXIxNzsJLy8gJnRwWy0xXQorbnVtPXIxODsJbGVuPXIxOTsJbGM9cjIwOwordG9wYml0PXIyMTsJLy8gY2FycnkgYml0IGZyb20gdG1wW251bV0KKworbjA9ZjY7CittMD1mNzsKK2JpPWY4OworCisuYWxpZ24JNjQKKy5sb2NhbAlibl9tdWxfbW9udF9nZW5lcmFsIworLnByb2MJYm5fbXVsX21vbnRfZ2VuZXJhbCMKK2JuX211bF9tb250X2dlbmVyYWw6CisJLnByb2xvZ3VlCit7IC5tbWk7CS5zYXZlCWFyLnBmcyxwcmV2ZnMKKwlhbGxvYwlwcmV2ZnM9YXIucGZzLDYsMiwwLDgKKwkkQUREUAlhcHRyPTAsaW4xCisJLnNhdmUJYXIubGMscHJldmxjCisJbW92CXByZXZsYz1hci5sYwkJfQoreyAubW1pOwkudmZyYW1lCXByZXZzcAorCW1vdglwcmV2c3A9c3AKKwkkQUREUAlicHRyPTAsaW4yCisJLnNhdmUJcHIscHJldnByCisJbW92CXByZXZwcj1wcgkJfTs7CisKKwkuYm9keQorCS5yb3RmCQlhbG9bNl0sbmxvWzRdLGFoaVs4XSxuaGlbNl0KKwkucm90cgkJYVszXSxuWzNdLHRbMl0KKworeyAubW1pOwlsZGY4CQliaT1bYnB0cl0sOAkJLy8gKCpicCsrKQorCWxkZjgJCWFsb1s0XT1bYXB0cl0sMTYJLy8gYXBbMF0KKwkkQUREUAkJcjMwPTgsaW4xCX07OworeyAubW1pOwlsZGY4CQlhbG9bM109W3IzMF0sMTYJCS8vIGFwWzFdCisJbGRmOAkJYWxvWzJdPVthcHRyXSwxNgkvLyBhcFsyXQorCSRBRERQCQlpbjQ9MCxpbjQJfTs7Cit7IC5tbWk7CWxkZjgJCWFsb1sxXT1bcjMwXQkJLy8gYXBbM10KKwlsZGY4CQluMD1baW40XQkJLy8gbjAKKwkkQUREUAkJcnB0cj0wLGluMAkJfQoreyAubW1pOwkkQUREUAkJbnB0cj0wLGluMworCW1vdgkJcjMxPTE2CisJenh0NAkJbnVtPWluNQkJfTs7Cit7IC5tbWk7CWxkZjgJCW5sb1syXT1bbnB0cl0sOAkJLy8gbnBbMF0KKwlzaGxhZGQJCWxlbj1udW0sMyxyMAorCXNobGFkZAkJcjMxPW51bSwzLHIzMQl9OzsKK3sgLm1taTsJbGRmOAkJbmxvWzFdPVtucHRyXSw4CQkvLyBucFsxXQorCWFkZAkJbGM9LTUsbnVtCisJc3ViCQlyMzE9c3AscjMxCX07OworeyAubWZiOwlhbmQJCXNwPS0xNixyMzEJCS8vIGFsbG9jYQorCXhtcHkuaHUJCWFoaVsyXT1hbG9bNF0sYmkJLy8gYXBbMF0qYnBbMF0KKwlub3AuYgkJMAkJfQoreyAubWZiOwlub3AubQkJMAorCXhtcHkubHUJCWFsb1s0XT1hbG9bNF0sYmkKKwlicnAubG9vcC5pbXAJLkwxc3RfY3RvcCwuTDFzdF9jZW5kLTE2CisJCQkJCX07OworeyAubWZpOwlub3AubQkJMAorCXhtYS5odQkJYWhpWzFdPWFsb1szXSxiaSxhaGlbMl0JLy8gYXBbMV0qYnBbMF0KKwlhZGQJCXRwXzE9OCxzcAl9Cit7IC5tZmk7CW5vcC5tCQkwCisJeG1hLmx1CQlhbG9bM109YWxvWzNdLGJpLGFoaVsyXQorCW1vdgkJcHIucm90PTB4MjAwMDFmPDwxNgorCQkJLy8gLS0tLS0tXi0tLS0tIChwNDApIGF0IGZpcnN0IChwMjMpCisJCQkvLyAtLS0tLS0tLS0tXl4gcFsxNjoyMF09MQorCQkJCQl9OzsKK3sgLm1maTsJbm9wLm0JCTAKKwl4bXB5Lmx1CQltMD1hbG9bNF0sbjAJCS8vIChhcFswXSpicFswXSkqbjAKKwltb3YJCWFyLmxjPWxjCX0KK3sgLm1maTsJbm9wLm0JCTAKKwlmY3Z0LmZ4dS5zMQluaGlbMV09ZjAKKwltb3YJCWFyLmVjPTgJCX07OworCisuYWxpZ24JMzIKKy5MMXN0X2N0b3A6CisucHJlZC5yZWwJIm11dGV4IixwNDAscDQyCit7IC5tZmk7CShwMTYpCWxkZjgJCWFsb1swXT1bYXB0cl0sOAkJICAgIC8vICooYXB0cisrKQorCShwMTgpCXhtYS5odQkJYWhpWzBdPWFsb1syXSxiaSxhaGlbMV0KKwkocDQwKQlhZGQJCW5bMl09blsyXSxhWzJdCQl9ICAgLy8gKHAyMykJCQkJCX0KK3sgLm1maTsJKHAxOCkJbGRmOAkJbmxvWzBdPVtucHRyXSw4CQkgICAgLy8gKihucHRyKyspKHAxNikKKwkocDE4KQl4bWEubHUJCWFsb1syXT1hbG9bMl0sYmksYWhpWzFdCisJKHA0MikJYWRkCQluWzJdPW5bMl0sYVsyXSwxCX07OyAvLyAocDIzKQoreyAubWZpOwkocDIxKQlnZXRmLnNpZwlhWzBdPWFsb1s1XQorCShwMjApCXhtYS5odQkJbmhpWzBdPW5sb1syXSxtMCxuaGlbMV0KKwkocDQyKQljbXAubGV1CQlwNDEscDM5PW5bMl0sYVsyXSAgIAl9ICAgLy8gKHAyMykKK3sgLm1maTsJKHAyMykJc3Q4CQlbdHBfMV09blsyXSw4CisJKHAyMCkJeG1hLmx1CQlubG9bMl09bmxvWzJdLG0wLG5oaVsxXQorCShwNDApCWNtcC5sdHUJCXA0MSxwMzk9blsyXSxhWzJdCX0gICAvLyAocDIzKQoreyAubW1iOwkocDIxKQlnZXRmLnNpZwluWzBdPW5sb1szXQorCShwMTYpCW5vcC5tCQkwCisJYnIuY3RvcC5zcHRrCS5MMXN0X2N0b3AJCQl9OzsKKy5MMXN0X2NlbmQ6CisKK3sgLm1taTsJZ2V0Zi5zaWcJYVswXT1haGlbNl0JCS8vIChwMjQpCisJZ2V0Zi5zaWcJblswXT1uaGlbNF0KKwlhZGQJCW51bT0tMSxudW0JfTs7CS8vIG51bS0tCit7IC5tbWk7CS5wcmVkLnJlbAkibXV0ZXgiLHA0MCxwNDIKKyhwNDApCWFkZAkJblswXT1uWzBdLGFbMF0KKyhwNDIpCWFkZAkJblswXT1uWzBdLGFbMF0sMQorCXN1YgkJYXB0cj1hcHRyLGxlbgl9OzsJLy8gcmV3aW5kCit7IC5tbWk7CS5wcmVkLnJlbAkibXV0ZXgiLHA0MCxwNDIKKyhwNDApCWNtcC5sdHUJCXA0MSxwMzk9blswXSxhWzBdCisocDQyKQljbXAubGV1CQlwNDEscDM5PW5bMF0sYVswXQorCXN1YgkJbnB0cj1ucHRyLGxlbgl9OzsKK3sgLm1taTsJLnByZWQucmVsCSJtdXRleCIscDM5LHA0MQorKHAzOSkJYWRkCQl0b3BiaXQ9cjAscjAKKyhwNDEpCWFkZAkJdG9wYml0PXIwLHIwLDEKKwlub3AuaQkJMAkJfQkKK3sgLm1taTsJc3Q4CQlbdHBfMV09blswXQorCWFkZAkJdHB0cj0xNixzcAorCWFkZAkJdHBfMT04LHNwCX07OworDAorLkxvdXRlcjoKK3sgLm1taTsJbGRmOAkJYmk9W2JwdHJdLDgJCS8vICgqYnArKykKKwlsZGY4CQlhaGlbM109W3RwdHJdCQkvLyB0cFswXQorCWFkZAkJcjMwPTgsYXB0cgl9OzsKK3sgLm1taTsJbGRmOAkJYWxvWzRdPVthcHRyXSwxNgkvLyBhcFswXQorCWxkZjgJCWFsb1szXT1bcjMwXSwxNgkJLy8gYXBbMV0KKwlhZGQJCXIzMT04LG5wdHIJfTs7Cit7IC5tZmI7CWxkZjgJCWFsb1syXT1bYXB0cl0sMTYJLy8gYXBbMl0KKwl4bWEuaHUJCWFoaVsyXT1hbG9bNF0sYmksYWhpWzNdCS8vIGFwWzBdKmJwW2ldK3RwWzBdCisJYnJwLmxvb3AuaW1wCS5MaW5uZXJfY3RvcCwuTGlubmVyX2NlbmQtMTYKKwkJCQkJfQoreyAubWZiOwlsZGY4CQlhbG9bMV09W3IzMF0JCS8vIGFwWzNdCisJeG1hLmx1CQlhbG9bNF09YWxvWzRdLGJpLGFoaVszXQorCWNscnJyYi5wcgkJCX07OworeyAubWZpOwlsZGY4CQlubG9bMl09W25wdHJdLDE2CS8vIG5wWzBdCisJeG1hLmh1CQlhaGlbMV09YWxvWzNdLGJpLGFoaVsyXQkvLyBhcFsxXSpicFtpXQorCW5vcC5pCQkwCQl9Cit7IC5tZmk7CWxkZjgJCW5sb1sxXT1bcjMxXQkJLy8gbnBbMV0KKwl4bWEubHUJCWFsb1szXT1hbG9bM10sYmksYWhpWzJdCisJbW92CQlwci5yb3Q9MHgyMDEwMWY8PDE2CisJCQkvLyAtLS0tLS1eLS0tLS0gKHA0MCkgYXQgZmlyc3QgKHAyMykKKwkJCS8vIC0tLS0tLS0tXi0tLSAocDMwKSBhdCBmaXJzdCAocDIyKQorCQkJLy8gLS0tLS0tLS0tLV5eIHBbMTY6MjBdPTEKKwkJCQkJfTs7Cit7IC5tZmk7CXN0OAkJW3RwdHJdPXIwCQkvLyB0cFswXSBpcyBhbHJlYWR5IGFjY291bnRlZAorCXhtcHkubHUJCW0wPWFsb1s0XSxuMAkJLy8gKGFwWzBdKmJwW2ldK3RwWzBdKSpuMAorCW1vdgkJYXIubGM9bGMJfQoreyAubWZpOworCWZjdnQuZnh1LnMxCW5oaVsxXT1mMAorCW1vdgkJYXIuZWM9OAkJfTs7CisKKy8vIFRoaXMgbG9vcCBzcGlucyBpbiA0KihuKzcpIHRpY2tzIG9uIEl0YW5pdW0gMiBhbmQgc2hvdWxkIHNwaW4gaW4KKy8vIDcqKG4rNykgdGlja3Mgb24gSXRhbml1bSAodGhlIG9uZSBjb2RlbmFtZWQgTWVyY2VkKS4gRmFjdG9yIG9mIDcKKy8vIGluIGxhdHRlciBjYXNlIGFjY291bnRzIGZvciB0d28tdGljayBwaXBlbGluZSBzdGFsbCwgd2hpY2ggbWVhbnMKKy8vIHRoYXQgaXRzIHBlcmZvcm1hbmNlIHdvdWxkIGJlIH4yMCUgbG93ZXIgdGhhbiBvcHRpbWFsIG9uZS4gTm8KKy8vIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWRkcmVzcyB0aGlzLCBiZWNhdXNlIG9yaWdpbmFsIEl0YW5pdW0gaXMKKy8vIGhhcmRseSByZXByZXNlbnRlZCBvdXQgaW4gdGhlIHdpbGQuLi4KKy5hbGlnbgkzMgorLkxpbm5lcl9jdG9wOgorLnByZWQucmVsCSJtdXRleCIscDQwLHA0MgorLnByZWQucmVsCSJtdXRleCIscDMwLHAzMgoreyAubWZpOwkocDE2KQlsZGY4CQlhbG9bMF09W2FwdHJdLDgJCSAgICAvLyAqKGFwdHIrKykKKwkocDE4KQl4bWEuaHUJCWFoaVswXT1hbG9bMl0sYmksYWhpWzFdCisJKHA0MCkJYWRkCQluWzJdPW5bMl0sYVsyXQkJfSAgIC8vIChwMjMpCit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCisJKHAxOCkJeG1hLmx1CQlhbG9bMl09YWxvWzJdLGJpLGFoaVsxXQorCShwNDIpCWFkZAkJblsyXT1uWzJdLGFbMl0sMQl9OzsgLy8gKHAyMykKK3sgLm1maTsJKHAyMSkJZ2V0Zi5zaWcJYVswXT1hbG9bNV0KKwkocDE2KQlub3AuZgkJMAorCShwNDApCWNtcC5sdHUJCXA0MSxwMzk9blsyXSxhWzJdCX0gICAvLyAocDIzKQoreyAubWZpOwkocDIxKQlsZDgJCXRbMF09W3RwdHJdLDgKKwkocDE2KQlub3AuZgkJMAorCShwNDIpCWNtcC5sZXUJCXA0MSxwMzk9blsyXSxhWzJdCX07OyAvLyAocDIzKQoreyAubWZpOwkocDE4KQlsZGY4CQlubG9bMF09W25wdHJdLDgJCSAgICAvLyAqKG5wdHIrKykKKwkocDIwKQl4bWEuaHUJCW5oaVswXT1ubG9bMl0sbTAsbmhpWzFdCisJKHAzMCkJYWRkCQlhWzFdPWFbMV0sdFsxXQkJfSAgIC8vIChwMjIpCit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCisJKHAyMCkJeG1hLmx1CQlubG9bMl09bmxvWzJdLG0wLG5oaVsxXQorCShwMzIpCWFkZAkJYVsxXT1hWzFdLHRbMV0sMQl9OzsgLy8gKHAyMikKK3sgLm1taTsJKHAyMSkJZ2V0Zi5zaWcJblswXT1ubG9bM10KKwkocDE2KQlub3AubQkJMAorCShwMzApCWNtcC5sdHUJCXAzMSxwMjk9YVsxXSx0WzFdCX0gICAvLyAocDIyKQoreyAubW1iOwkocDIzKQlzdDgJCVt0cF8xXT1uWzJdLDgKKwkocDMyKQljbXAubGV1CQlwMzEscDI5PWFbMV0sdFsxXQkgICAgLy8gKHAyMikKKwlici5jdG9wLnNwdGsJLkxpbm5lcl9jdG9wCQkJfTs7CisuTGlubmVyX2NlbmQ6CisKK3sgLm1taTsJZ2V0Zi5zaWcJYVswXT1haGlbNl0JCS8vIChwMjQpCisJZ2V0Zi5zaWcJblswXT1uaGlbNF0KKwlub3AuaQkJMAkJfTs7CisKK3sgLm1taTsJLnByZWQucmVsCSJtdXRleCIscDMxLHAzMworKHAzMSkJYWRkCQlhWzBdPWFbMF0sdG9wYml0CisocDMzKQlhZGQJCWFbMF09YVswXSx0b3BiaXQsMQorCW1vdgkJdG9wYml0PXIwCX07OworeyAubWZpOyAucHJlZC5yZWwJIm11dGV4IixwMzEscDMzCisocDMxKQljbXAubHR1CQlwMzIscDMwPWFbMF0sdG9wYml0CisocDMzKQljbXAubGV1CQlwMzIscDMwPWFbMF0sdG9wYml0CisJCQkJCX0KK3sgLm1maTsJLnByZWQucmVsCSJtdXRleCIscDQwLHA0MgorKHA0MCkJYWRkCQluWzBdPW5bMF0sYVswXQorKHA0MikJYWRkCQluWzBdPW5bMF0sYVswXSwxCisJCQkJCX07OworeyAubW1pOwkucHJlZC5yZWwJIm11dGV4IixwNDQscDQ2CisocDQwKQljbXAubHR1CQlwNDEscDM5PW5bMF0sYVswXQorKHA0MikJY21wLmxldQkJcDQxLHAzOT1uWzBdLGFbMF0KKyhwMzIpCWFkZAkJdG9wYml0PXIwLHIwLDEJfQorCit7IC5tbWk7CXN0OAkJW3RwXzFdPW5bMF0sOAorCWNtcDQubmUJCXA2LHAwPTEsbnVtCisJc3ViCQlhcHRyPWFwdHIsbGVuCX07OwkvLyByZXdpbmQKK3sgLm1taTsJc3ViCQlucHRyPW5wdHIsbGVuCisocDQxKQlhZGQJCXRvcGJpdD1yMCxyMCwxCisJYWRkCQl0cHRyPTE2LHNwCX0KK3sgLm1tYjsJYWRkCQl0cF8xPTgsc3AKKwlhZGQJCW51bT0tMSxudW0JCS8vIG51bS0tCisocDYpCWJyLmNvbmQuc3B0ay5tYW55CS5Mb3V0ZXIJfTs7CisMCit7IC5tYmI7CWFkZAkJbGM9NCxsYworCWJycC5sb29wLmltcAkuTHN1Yl9jdG9wLC5Mc3ViX2NlbmQtMTYKKwljbHJycmIucHIJCQl9OzsKK3sgLm1paTsJbm9wLm0JCTAKKwltb3YJCXByLnJvdD0weDEwMDAxPDwxNgorCQkJLy8gLS0tLS0tXi0tLS0gKHAzMykgYXQgZmlyc3QgKHAxNykKKwltb3YJCWFyLmxjPWxjCX0KK3sgLm1paTsJbm9wLm0JCTAKKwltb3YJCWFyLmVjPTMKKwlub3AuaQkJMAkJfTs7CisKKy5Mc3ViX2N0b3A6CisucHJlZC5yZWwJIm11dGV4IixwMzMscDM1Cit7IC5tZmk7CShwMTYpCWxkOAkJdFswXT1bdHB0cl0sOAkJICAgIC8vIHQ9Kih0cCsrKQorCShwMTYpCW5vcC5mCQkwCisJKHAzMykJc3ViCQluWzFdPXRbMV0sblsxXQkJfSAgIC8vIChwMTcpCit7IC5tZmk7CShwMTYpCWxkOAkJblswXT1bbnB0cl0sOAkJICAgIC8vIG49KihucCsrKQorCShwMTYpCW5vcC5mCQkwCisJKHAzNSkJc3ViCQluWzFdPXRbMV0sblsxXSwxCX07OyAvLyAocDE3KQoreyAubWliOwkocDE4KQlzdDgJCVtycHRyXT1uWzJdLDgJCSAgICAvLyAqKHJwKyspPXIKKwkocDMzKQljbXAuZ3R1CQlwMzQscDMyPW5bMV0sdFsxXQkgICAgLy8gKHAxNykKKwkocDE4KQlub3AuYgkJMAkJCX0KK3sgLm1pYjsJKHAxOCkJbm9wLm0JCTAKKwkocDM1KQljbXAuZ2V1CQlwMzQscDMyPW5bMV0sdFsxXQkgICAgLy8gKHAxNykKKwlici5jdG9wLnNwdGsJLkxzdWJfY3RvcAkJCX07OworLkxzdWJfY2VuZDoKKworeyAubW1iOwkucHJlZC5yZWwJIm11dGV4IixwMzQscDM2CisocDM0KQlzdWIJdG9wYml0PXRvcGJpdCxyMAkvLyAocDE5KQorKHAzNikJc3ViCXRvcGJpdD10b3BiaXQscjAsMQorCWJycC5sb29wLmltcAkuTGNvcHlfY3RvcCwuTGNvcHlfY2VuZC0xNgorCQkJCQl9Cit7IC5tbWI7CXN1YglycHRyPXJwdHIsbGVuCQkvLyByZXdpbmQKKwlzdWIJdHB0cj10cHRyLGxlbgorCWNscnJyYi5wcgkJCX07OworeyAubW1pOwlhbmQJYXB0cj10cHRyLHRvcGJpdAorCWFuZGNtCWJwdHI9cnB0cix0b3BiaXQKKwltb3YJcHIucm90PTE8PDE2CQl9OzsKK3sgLm1paTsJb3IJbnB0cj1hcHRyLGJwdHIKKwltb3YJYXIubGM9bGMKKwltb3YJYXIuZWM9MwkJCX07OworCisuTGNvcHlfY3RvcDoKK3sgLm1tYjsJKHAxNikJbGQ4CW5bMF09W25wdHJdLDgKKwkocDE4KQlzdDgJW3RwdHJdPXIwLDgKKwkocDE2KQlub3AuYgkwCQl9Cit7IC5tbWI7CShwMTYpCW5vcC5tCTAKKwkocDE4KQlzdDgJW3JwdHJdPW5bMl0sOAorCWJyLmN0b3Auc3B0awkuTGNvcHlfY3RvcAl9OzsKKy5MY29weV9jZW5kOgorCit7IC5tbWk7CW1vdgkJcmV0MD0xCQkJLy8gc2lnbmFsICJoYW5kbGVkIgorCXJ1bQkJMTw8NQkJCS8vIGNsZWFyIHVtLm1maAorCW1vdgkJYXIubGM9cHJldmxjCX0KK3sgLm1pYjsJLnJlc3RvcmUJc3AKKwltb3YJCXNwPXByZXZzcAorCW1vdgkJcHI9cHJldnByLDB4MWZmZmYKKwlici5yZXQuc3B0ay5tYW55CWIwCX07OworLmVuZHAJYm5fbXVsX21vbnRfZ2VuZXJhbCMKKwwKK2ExPXIxNjsgIGEyPXIxNzsgIGEzPXIxODsgIGE0PXIxOTsgIGE1PXIyMDsgIGE2PXIyMTsgIGE3PXIyMjsgIGE4PXIyMzsKK24xPXIyNDsgIG4yPXIyNTsgIG4zPXIyNjsgIG40PXIyNzsgIG41PXIyODsgIG42PXIyOTsgIG43PXIzMDsgIG44PXIzMTsKK3QwPXIxNTsKKworYWkwPWY4OyAgYWkxPWY5OyAgYWkyPWYxMDsgYWkzPWYxMTsgYWk0PWYxMjsgYWk1PWYxMzsgYWk2PWYxNDsgYWk3PWYxNTsKK25pMD1mMTY7IG5pMT1mMTc7IG5pMj1mMTg7IG5pMz1mMTk7IG5pND1mMjA7IG5pNT1mMjE7IG5pNj1mMjI7IG5pNz1mMjM7CisKKy5hbGlnbgk2NAorLnNraXAJNDgJCS8vIGFsaWducyBsb29wIGJvZHkKKy5sb2NhbAlibl9tdWxfbW9udF84IworLnByb2MJYm5fbXVsX21vbnRfOCMKK2JuX211bF9tb250Xzg6CisJLnByb2xvZ3VlCit7IC5tbWk7CS5zYXZlCQlhci5wZnMscHJldmZzCisJYWxsb2MJCXByZXZmcz1hci5wZnMsNiwyLDAsOAorCS52ZnJhbWUJCXByZXZzcAorCW1vdgkJcHJldnNwPXNwCisJLnNhdmUJCWFyLmxjLHByZXZsYworCW1vdgkJcHJldmxjPWFyLmxjCX0KK3sgLm1taTsJYWRkCQlyMTc9LTYqMTYsc3AKKwlhZGQJCXNwPS03KjE2LHNwCisJLnNhdmUJCXByLHByZXZwcgorCW1vdgkJcHJldnByPXByCX07OworCit7IC5tbWk7CS5zYXZlLmdmCTAsMHgxMAorCXN0Zi5zcGlsbAlbc3BdPWYxNiwtMTYKKwkuc2F2ZS5nZgkwLDB4MjAKKwlzdGYuc3BpbGwJW3IxN109ZjE3LDMyCisJYWRkCQlyMTY9LTUqMTYscHJldnNwfTs7Cit7IC5tbWk7CS5zYXZlLmdmCTAsMHg0MAorCXN0Zi5zcGlsbAlbcjE2XT1mMTgsMzIKKwkuc2F2ZS5nZgkwLDB4ODAKKwlzdGYuc3BpbGwJW3IxN109ZjE5LDMyCisJJEFERFAJCWFwdHI9MCxpbjEJfTs7Cit7IC5tbWk7CS5zYXZlLmdmCTAsMHgxMDAKKwlzdGYuc3BpbGwJW3IxNl09ZjIwLDMyCisJLnNhdmUuZ2YJMCwweDIwMAorCXN0Zi5zcGlsbAlbcjE3XT1mMjEsMzIKKwkkQUREUAkJcjI5PTgsaW4xCX07OworeyAubW1pOwkuc2F2ZS5nZgkwLDB4NDAwCisJc3RmLnNwaWxsCVtyMTZdPWYyMgorCS5zYXZlLmdmCTAsMHg4MDAKKwlzdGYuc3BpbGwJW3IxN109ZjIzCisJJEFERFAJCXJwdHI9MCxpbjAJfTs7CisMCisJLmJvZHkKKwkucm90ZgkJYmpbOF0sbWpbMl0sdGZbMl0sYWxvWzEwXSxhaGlbMTBdLG5sb1sxMF0sbmhpWzEwXQorCS5yb3RyCQl0WzhdCisKKy8vIGxvYWQgaW5wdXQgdmVjdG9ycyBwYWRkaW5nIHRoZW0gdG8gOCBlbGVtZW50cworeyAubW1pOwlsZGY4CQlhaTA9W2FwdHJdLDE2CQkvLyBhcFswXQorCWxkZjgJCWFpMT1bcjI5XSwxNgkJLy8gYXBbMV0KKwkkQUREUAkJYnB0cj0wLGluMgl9Cit7IC5tbWk7CSRBRERQCQlyMzA9OCxpbjIKKwkkQUREUAkJbnB0cj0wLGluMworCSRBRERQCQlyMzE9OCxpbjMJfTs7Cit7IC5tbWk7CWxkZjgJCWJqWzddPVticHRyXSwxNgkJLy8gYnBbMF0KKwlsZGY4CQlials2XT1bcjMwXSwxNgkJLy8gYnBbMV0KKwljbXA0LmxlCQlwNCxwNT0zLGluNQl9Cit7IC5tbWk7CWxkZjgJCW5pMD1bbnB0cl0sMTYJCS8vIG5wWzBdCisJbGRmOAkJbmkxPVtyMzFdLDE2CQkvLyBucFsxXQorCWNtcDQubGUJCXA2LHA3PTQsaW41CX07OworCit7IC5tZmk7CShwNClsZGY4CWFpMj1bYXB0cl0sMTYJCS8vIGFwWzJdCisJKHA1KWZjdnQuZnh1CWFpMj1mMAorCWNtcDQubGUJCXA4LHA5PTUsaW41CX0KK3sgLm1maTsJKHA2KWxkZjgJYWkzPVtyMjldLDE2CQkvLyBhcFszXQorCShwNylmY3Z0LmZ4dQlhaTM9ZjAKKwljbXA0LmxlCQlwMTAscDExPTYsaW41CX0KK3sgLm1maTsJKHA0KWxkZjgJYmpbNV09W2JwdHJdLDE2CQkvLyBicFsyXQorCShwNSlmY3Z0LmZ4dQlials1XT1mMAorCWNtcDQubGUJCXAxMixwMTM9NyxpbjUJfQoreyAubWZpOwkocDYpbGRmOAlials0XT1bcjMwXSwxNgkJLy8gYnBbM10KKwkocDcpZmN2dC5meHUJYmpbNF09ZjAKKwljbXA0LmxlCQlwMTQscDE1PTgsaW41CX0KK3sgLm1maTsJKHA0KWxkZjgJbmkyPVtucHRyXSwxNgkJLy8gbnBbMl0KKwkocDUpZmN2dC5meHUJbmkyPWYwCisJYWRkcDQJCXIyOD0tMSxpbjUJfQoreyAubWZpOwkocDYpbGRmOAluaTM9W3IzMV0sMTYJCS8vIG5wWzNdCisJKHA3KWZjdnQuZnh1CW5pMz1mMAorCSRBRERQCQlpbjQ9MCxpbjQJfTs7CisKK3sgLm1maTsJbGRmOAkJbjA9W2luNF0KKwlmY3Z0LmZ4dQl0ZlsxXT1mMAorCW5vcC5pCQkwCQl9CisKK3sgLm1maTsJKHA4KWxkZjgJYWk0PVthcHRyXSwxNgkJLy8gYXBbNF0KKwkocDkpZmN2dC5meHUJYWk0PWYwCisJbW92CQl0WzBdPXIwCQl9Cit7IC5tZmk7CShwMTApbGRmOAlhaTU9W3IyOV0sMTYJCS8vIGFwWzVdCisJKHAxMSlmY3Z0LmZ4dQlhaTU9ZjAKKwltb3YJCXRbMV09cjAJCX0KK3sgLm1maTsJKHA4KWxkZjgJYmpbM109W2JwdHJdLDE2CQkvLyBicFs0XQorCShwOSlmY3Z0LmZ4dQlialszXT1mMAorCW1vdgkJdFsyXT1yMAkJfQoreyAubWZpOwkocDEwKWxkZjgJYmpbMl09W3IzMF0sMTYJCS8vIGJwWzVdCisJKHAxMSlmY3Z0LmZ4dQlialsyXT1mMAorCW1vdgkJdFszXT1yMAkJfQoreyAubWZpOwkocDgpbGRmOAluaTQ9W25wdHJdLDE2CQkvLyBucFs0XQorCShwOSlmY3Z0LmZ4dQluaTQ9ZjAKKwltb3YJCXRbNF09cjAJCX0KK3sgLm1maTsJKHAxMClsZGY4CW5pNT1bcjMxXSwxNgkJLy8gbnBbNV0KKwkocDExKWZjdnQuZnh1CW5pNT1mMAorCW1vdgkJdFs1XT1yMAkJfTs7CisKK3sgLm1maTsJKHAxMilsZGY4CWFpNj1bYXB0cl0sMTYJCS8vIGFwWzZdCisJKHAxMylmY3Z0LmZ4dQlhaTY9ZjAKKwltb3YJCXRbNl09cjAJCX0KK3sgLm1maTsJKHAxNClsZGY4CWFpNz1bcjI5XSwxNgkJLy8gYXBbN10KKwkocDE1KWZjdnQuZnh1CWFpNz1mMAorCW1vdgkJdFs3XT1yMAkJfQoreyAubWZpOwkocDEyKWxkZjgJYmpbMV09W2JwdHJdLDE2CQkvLyBicFs2XQorCShwMTMpZmN2dC5meHUJYmpbMV09ZjAKKwltb3YJCWFyLmxjPXIyOAl9Cit7IC5tZmk7CShwMTQpbGRmOAlialswXT1bcjMwXSwxNgkJLy8gYnBbN10KKwkocDE1KWZjdnQuZnh1CWJqWzBdPWYwCisJbW92CQlhci5lYz0xCQl9Cit7IC5tZmk7CShwMTIpbGRmOAluaTY9W25wdHJdLDE2CQkvLyBucFs2XQorCShwMTMpZmN2dC5meHUJbmk2PWYwCisJbW92CQlwci5yb3Q9MTw8MTYJfQoreyAubWZiOwkocDE0KWxkZjgJbmk3PVtyMzFdLDE2CQkvLyBucFs3XQorCShwMTUpZmN2dC5meHUJbmk3PWYwCisJYnJwLmxvb3AuaW1wCS5Mb3V0ZXJfOF9jdG9wLC5Mb3V0ZXJfOF9jZW5kLTE2CisJCQkJCX07OworDAorLy8gVGhlIGxvb3AgaXMgc2NoZWR1bGVkIGZvciAzMipuIHRpY2tzIG9uIEl0YW5pdW0gMi4gQWN0dWFsIGF0dGVtcHQKKy8vIHRvIG1lYXN1cmUgd2l0aCBoZWxwIG9mIEludGVydmFsIFRpbWUgQ291bnRlciBpbmRpY2F0ZWQgdGhhdCB0aGUKKy8vIGZhY3RvciBpcyBhIHRhZCBoaWdoZXI6IDMzIG9yIDM0LCBpZiBub3QgMzUuIEV4YWN0IG1lYXN1cmVtZW50IGFuZAorLy8gYWRkcmVzc2luZyB0aGUgaXNzdWUgaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgSSBkb24ndCBoYXZlIGFjY2VzcworLy8gdG8gcGxhdGZvcm0tc3BlY2lmaWMgaW5zdHJ1Y3Rpb24tbGV2ZWwgcHJvZmlsZXIuIE9uIEl0YW5pdW0gaXQKKy8vIHNob3VsZCBydW4gaW4gNTYqbiB0aWNrcywgYmVjYXVzZSBvZiBoaWdoZXIgeG1hIGxhdGVuY3kuLi4KKy5Mb3V0ZXJfOF9jdG9wOgorCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyAwOgorCShwMTYpCXhtYS5odQkJYWhpWzBdPWFpMCxials3XSx0ZlsxXQkvLwlhcFswXSpiW2ldK3RbMF0KKwkocDQwKQlhZGQJCWEzPWEzLG4zCX0JLy8JKHAxNykgYTMrPW4zCit7IC5tZmk7CShwNDIpCWFkZAkJYTM9YTMsbjMsMQorCShwMTYpCXhtYS5sdQkJYWxvWzBdPWFpMCxials3XSx0ZlsxXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNykJZ2V0Zi5zaWcJYTc9YWxvWzhdCQkvLyAxOgorCShwNDgpCWFkZAkJdFs2XT10WzZdLGEzCQkvLwkocDE3KSB0WzZdKz1hMworCShwNTApCWFkZAkJdFs2XT10WzZdLGEzLDEJfTs7Cit7IC5tZmk7CShwMTcpCWdldGYuc2lnCWE4PWFoaVs4XQkJLy8gMjoKKwkocDE3KQl4bWEuaHUJCW5oaVs3XT1uaTYsbWpbMV0sbmhpWzZdCS8vCW5wWzZdKm0wCisJKHA0MCkJY21wLmx0dQkJcDQzLHA0MT1hMyxuMwl9Cit7IC5tZmk7CShwNDIpCWNtcC5sZXUJCXA0MyxwNDE9YTMsbjMKKwkocDE3KQl4bWEubHUJCW5sb1s3XT1uaTYsbWpbMV0sbmhpWzZdCisJKHAxNikJbm9wLmkJCTAJCX07OworeyAubWlpOwkocDE3KQlnZXRmLnNpZwluNT1ubG9bNl0JCS8vIDM6CisJKHA0OCkJY21wLmx0dQkJcDUxLHA0OT10WzZdLGEzCisJKHA1MCkJY21wLmxldQkJcDUxLHA0OT10WzZdLGEzCX07OworCS5wcmVkLnJlbAkJIm11dGV4IixwNDEscDQzCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OSxwNTEKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyA0OgorCShwMTYpCXhtYS5odQkJYWhpWzFdPWFpMSxials3XSxhaGlbMF0JLy8JYXBbMV0qYltpXQorCShwNDEpCWFkZAkJYTQ9YTQsbjQJfQkvLwkocDE3KSBhNCs9bjQKK3sgLm1maTsJKHA0MykJYWRkCQlhND1hNCxuNCwxCisJKHAxNikJeG1hLmx1CQlhbG9bMV09YWkxLGJqWzddLGFoaVswXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1maTsJKHA0OSkJYWRkCQl0WzVdPXRbNV0sYTQJCS8vIDU6CShwMTcpIHRbNV0rPWE0CisJKHAxNikJeG1weS5sdQkJbWpbMF09YWxvWzBdLG4wCQkvLwkoYXBbMF0qYltpXSt0WzBdKSpuMAorCShwNTEpCWFkZAkJdFs1XT10WzVdLGE0LDEJfTs7Cit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCQkJLy8gNjoKKwkocDE3KQl4bWEuaHUJCW5oaVs4XT1uaTcsbWpbMV0sbmhpWzddCS8vCW5wWzddKm0wCisJKHA0MSkJY21wLmx0dQkJcDQyLHA0MD1hNCxuNAl9Cit7IC5tZmk7CShwNDMpCWNtcC5sZXUJCXA0MixwNDA9YTQsbjQKKwkocDE3KQl4bWEubHUJCW5sb1s4XT1uaTcsbWpbMV0sbmhpWzddCisJKHAxNikJbm9wLmkJCTAJCX07OworeyAubWlpOwkocDE3KQlnZXRmLnNpZwluNj1ubG9bN10JCS8vIDc6CisJKHA0OSkJY21wLmx0dQkJcDUwLHA0OD10WzVdLGE0CisJKHA1MSkJY21wLmxldQkJcDUwLHA0OD10WzVdLGE0CX07OworCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyA4OgorCShwMTYpCXhtYS5odQkJYWhpWzJdPWFpMixials3XSxhaGlbMV0JLy8JYXBbMl0qYltpXQorCShwNDApCWFkZAkJYTU9YTUsbjUJfQkvLwkocDE3KSBhNSs9bjUKK3sgLm1maTsJKHA0MikJYWRkCQlhNT1hNSxuNSwxCisJKHAxNikJeG1hLmx1CQlhbG9bMl09YWkyLGJqWzddLGFoaVsxXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNikJZ2V0Zi5zaWcJYTE9YWxvWzFdCQkvLyA5OgorCShwNDgpCWFkZAkJdFs0XT10WzRdLGE1CQkvLwlwKDE3KSB0WzRdKz1hNQorCShwNTApCWFkZAkJdFs0XT10WzRdLGE1LDEJfTs7Cit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCQkJLy8gMTA6CisJKHAxNikJeG1hLmh1CQluaGlbMF09bmkwLG1qWzBdLGFsb1swXQkvLwlucFswXSptMAorCShwNDApCWNtcC5sdHUJCXA0MyxwNDE9YTUsbjUJfQoreyAubWZpOwkocDQyKQljbXAubGV1CQlwNDMscDQxPWE1LG41CisJKHAxNikJeG1hLmx1CQlubG9bMF09bmkwLG1qWzBdLGFsb1swXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNykJZ2V0Zi5zaWcJbjc9bmxvWzhdCQkvLyAxMToKKwkocDQ4KQljbXAubHR1CQlwNTEscDQ5PXRbNF0sYTUKKwkocDUwKQljbXAubGV1CQlwNTEscDQ5PXRbNF0sYTUJfTs7CisJLnByZWQucmVsCQkibXV0ZXgiLHA0MSxwNDMKKwkucHJlZC5yZWwJCSJtdXRleCIscDQ5LHA1MQoreyAubWZpOwkocDE3KQlnZXRmLnNpZwluOD1uaGlbOF0JCS8vIDEyOgorCShwMTYpCXhtYS5odQkJYWhpWzNdPWFpMyxials3XSxhaGlbMl0JLy8JYXBbM10qYltpXQorCShwNDEpCWFkZAkJYTY9YTYsbjYJfQkvLwkocDE3KSBhNis9bjYKK3sgLm1maTsJKHA0MykJYWRkCQlhNj1hNixuNiwxCisJKHAxNikJeG1hLmx1CQlhbG9bM109YWkzLGJqWzddLGFoaVsyXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNikJZ2V0Zi5zaWcJYTI9YWxvWzJdCQkvLyAxMzoKKwkocDQ5KQlhZGQJCXRbM109dFszXSxhNgkJLy8JKHAxNykgdFszXSs9YTYKKwkocDUxKQlhZGQJCXRbM109dFszXSxhNiwxCX07OworeyAubWZpOwkocDE2KQlub3AubQkJMAkJCS8vIDE0OgorCShwMTYpCXhtYS5odQkJbmhpWzFdPW5pMSxtalswXSxuaGlbMF0JLy8JbnBbMV0qbTAKKwkocDQxKQljbXAubHR1CQlwNDIscDQwPWE2LG42CX0KK3sgLm1maTsJKHA0MykJY21wLmxldQkJcDQyLHA0MD1hNixuNgorCShwMTYpCXhtYS5sdQkJbmxvWzFdPW5pMSxtalswXSxuaGlbMF0KKwkocDE2KQlub3AuaQkJMAkJfTs7Cit7IC5taWk7CShwMTYpCW5vcC5tCQkwCQkJLy8gMTU6CisJKHA0OSkJY21wLmx0dQkJcDUwLHA0OD10WzNdLGE2CisJKHA1MSkJY21wLmxldQkJcDUwLHA0OD10WzNdLGE2CX07OworCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyAxNjoKKwkocDE2KQl4bWEuaHUJCWFoaVs0XT1haTQsYmpbN10sYWhpWzNdCS8vCWFwWzRdKmJbaV0KKwkocDQwKQlhZGQJCWE3PWE3LG43CX0JLy8JKHAxNykgYTcrPW43Cit7IC5tZmk7CShwNDIpCWFkZAkJYTc9YTcsbjcsMQorCShwMTYpCXhtYS5sdQkJYWxvWzRdPWFpNCxials3XSxhaGlbM10KKwkocDE2KQlub3AuaQkJMAkJfTs7Cit7IC5taWk7CShwMTYpCWdldGYuc2lnCWEzPWFsb1szXQkJLy8gMTc6CisJKHA0OCkJYWRkCQl0WzJdPXRbMl0sYTcJCS8vCShwMTcpIHRbMl0rPWE3CisJKHA1MCkJYWRkCQl0WzJdPXRbMl0sYTcsMQl9OzsKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyAxODoKKwkocDE2KQl4bWEuaHUJCW5oaVsyXT1uaTIsbWpbMF0sbmhpWzFdCS8vCW5wWzJdKm0wCisJKHA0MCkJY21wLmx0dQkJcDQzLHA0MT1hNyxuNwl9Cit7IC5tZmk7CShwNDIpCWNtcC5sZXUJCXA0MyxwNDE9YTcsbjcKKwkocDE2KQl4bWEubHUJCW5sb1syXT1uaTIsbWpbMF0sbmhpWzFdCisJKHAxNikJbm9wLmkJCTAJCX07OworeyAubWlpOwkocDE2KQlnZXRmLnNpZwluMT1ubG9bMV0JCS8vIDE5OgorCShwNDgpCWNtcC5sdHUJCXA1MSxwNDk9dFsyXSxhNworCShwNTApCWNtcC5sZXUJCXA1MSxwNDk9dFsyXSxhNwl9OzsKKwkucHJlZC5yZWwJCSJtdXRleCIscDQxLHA0MworCS5wcmVkLnJlbAkJIm11dGV4IixwNDkscDUxCit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCQkJLy8gMjA6CisJKHAxNikJeG1hLmh1CQlhaGlbNV09YWk1LGJqWzddLGFoaVs0XQkvLwlhcFs1XSpiW2ldCisJKHA0MSkJYWRkCQlhOD1hOCxuOAl9CS8vCShwMTcpIGE4Kz1uOAoreyAubWZpOwkocDQzKQlhZGQJCWE4PWE4LG44LDEKKwkocDE2KQl4bWEubHUJCWFsb1s1XT1haTUsYmpbN10sYWhpWzRdCisJKHAxNikJbm9wLmkJCTAJCX07OworeyAubWlpOwkocDE2KQlnZXRmLnNpZwlhND1hbG9bNF0JCS8vIDIxOgorCShwNDkpCWFkZAkJdFsxXT10WzFdLGE4CQkvLwkocDE3KSB0WzFdKz1hOAorCShwNTEpCWFkZAkJdFsxXT10WzFdLGE4LDEJfTs7Cit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCQkJLy8gMjI6CisJKHAxNikJeG1hLmh1CQluaGlbM109bmkzLG1qWzBdLG5oaVsyXQkvLwlucFszXSptMAorCShwNDEpCWNtcC5sdHUJCXA0MixwNDA9YTgsbjgJfQoreyAubWZpOwkocDQzKQljbXAubGV1CQlwNDIscDQwPWE4LG44CisJKHAxNikJeG1hLmx1CQlubG9bM109bmkzLG1qWzBdLG5oaVsyXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNikJZ2V0Zi5zaWcJbjI9bmxvWzJdCQkvLyAyMzoKKwkocDQ5KQljbXAubHR1CQlwNTAscDQ4PXRbMV0sYTgKKwkocDUxKQljbXAubGV1CQlwNTAscDQ4PXRbMV0sYTgJfTs7Cit7IC5tZmk7CShwMTYpCW5vcC5tCQkwCQkJLy8gMjQ6CisJKHAxNikJeG1hLmh1CQlhaGlbNl09YWk2LGJqWzddLGFoaVs1XQkvLwlhcFs2XSpiW2ldCisJKHAxNikJYWRkCQlhMT1hMSxuMQl9CS8vCShwMTYpIGExKz1uMQoreyAubWZpOwkocDE2KQlub3AubQkJMAorCShwMTYpCXhtYS5sdQkJYWxvWzZdPWFpNixials3XSxhaGlbNV0KKwkocDE3KQltb3YJCXRbMF09cjAJCX07OworeyAubWlpOwkocDE2KQlnZXRmLnNpZwlhNT1hbG9bNV0JCS8vIDI1OgorCShwMTYpCWFkZAkJdDA9dFs3XSxhMQkJLy8JKHAxNikgdFs3XSs9YTEKKwkocDQyKQlhZGQJCXRbMF09dFswXSxyMCwxCX07OworeyAubWZpOwkocDE2KQlzZXRmLnNpZwl0ZlswXT10MAkJLy8gMjY6CisJKHAxNikJeG1hLmh1CQluaGlbNF09bmk0LG1qWzBdLG5oaVszXQkvLwlucFs0XSptMAorCShwNTApCWFkZAkJdFswXT10WzBdLHIwLDEJfQoreyAubWZpOwkocDE2KQljbXAubHR1LnVuYwlwNDIscDQwPWExLG4xCisJKHAxNikJeG1hLmx1CQlubG9bNF09bmk0LG1qWzBdLG5oaVszXQorCShwMTYpCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNikJZ2V0Zi5zaWcJbjM9bmxvWzNdCQkvLyAyNzoKKwkocDE2KQljbXAubHR1LnVuYwlwNTAscDQ4PXQwLGExCisJKHAxNikJbm9wLmkJCTAJCX07OworCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyAyODoKKwkocDE2KQl4bWEuaHUJCWFoaVs3XT1haTcsYmpbN10sYWhpWzZdCS8vCWFwWzddKmJbaV0KKwkocDQwKQlhZGQJCWEyPWEyLG4yCX0JLy8JKHAxNikgYTIrPW4yCit7IC5tZmk7CShwNDIpCWFkZAkJYTI9YTIsbjIsMQorCShwMTYpCXhtYS5sdQkJYWxvWzddPWFpNyxials3XSxhaGlbNl0KKwkocDE2KQlub3AuaQkJMAkJfTs7Cit7IC5taWk7CShwMTYpCWdldGYuc2lnCWE2PWFsb1s2XQkJLy8gMjk6CisJKHA0OCkJYWRkCQl0WzZdPXRbNl0sYTIJCS8vCShwMTYpIHRbNl0rPWEyCisJKHA1MCkJYWRkCQl0WzZdPXRbNl0sYTIsMQl9OzsKK3sgLm1maTsJKHAxNikJbm9wLm0JCTAJCQkvLyAzMDoKKwkocDE2KQl4bWEuaHUJCW5oaVs1XT1uaTUsbWpbMF0sbmhpWzRdCS8vCW5wWzVdKm0wCisJKHA0MCkJY21wLmx0dQkJcDQxLHAzOT1hMixuMgl9Cit7IC5tZmk7CShwNDIpCWNtcC5sZXUJCXA0MSxwMzk9YTIsbjIKKwkocDE2KQl4bWEubHUJCW5sb1s1XT1uaTUsbWpbMF0sbmhpWzRdCisJKHAxNikJbm9wLmkJCTAJCX07OworeyAubWZpOwkocDE2KQlnZXRmLnNpZwluND1ubG9bNF0JCS8vIDMxOgorCShwMTYpCW5vcC5mCQkwCisJKHA0OCkJY21wLmx0dQkJcDQ5LHA0Nz10WzZdLGEyCX0KK3sgLm1mYjsJKHA1MCkJY21wLmxldQkJcDQ5LHA0Nz10WzZdLGEyCisJKHAxNikJbm9wLmYJCTAKKwlici5jdG9wLnNwdGsubWFueQkuTG91dGVyXzhfY3RvcAl9OzsKKy5Mb3V0ZXJfOF9jZW5kOgorDAorLy8gYWJvdmUgbG9vcCBoYXMgdG8gZXhlY3V0ZSBvbmUgbW9yZSB0aW1lLCB3aXRob3V0IChwMTYpLCB3aGljaCBpcworLy8gcmVwbGFjZWQgd2l0aCBtZXJnZWQgbW92ZSBvZiBucFs4XSB0byBHUFIgYmFuaworCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1taTsJKHAwKQlnZXRmLnNpZwluMT1uaTAJCQkvLyAwOgorCShwNDApCWFkZAkJYTM9YTMsbjMJCS8vCShwMTcpIGEzKz1uMworCShwNDIpCWFkZAkJYTM9YTMsbjMsMQl9OzsKK3sgLm1paTsJKHAxNykJZ2V0Zi5zaWcJYTc9YWxvWzhdCQkvLyAxOgorCShwNDgpCWFkZAkJdFs2XT10WzZdLGEzCQkvLwkocDE3KSB0WzZdKz1hMworCShwNTApCWFkZAkJdFs2XT10WzZdLGEzLDEJfTs7Cit7IC5tZmk7CShwMTcpCWdldGYuc2lnCWE4PWFoaVs4XQkJLy8gMjoKKwkocDE3KQl4bWEuaHUJCW5oaVs3XT1uaTYsbWpbMV0sbmhpWzZdCS8vCW5wWzZdKm0wCisJKHA0MCkJY21wLmx0dQkJcDQzLHA0MT1hMyxuMwl9Cit7IC5tZmk7CShwNDIpCWNtcC5sZXUJCXA0MyxwNDE9YTMsbjMKKwkocDE3KQl4bWEubHUJCW5sb1s3XT1uaTYsbWpbMV0sbmhpWzZdCisJKHAwKQlub3AuaQkJMAkJfTs7Cit7IC5taWk7CShwMTcpCWdldGYuc2lnCW41PW5sb1s2XQkJLy8gMzoKKwkocDQ4KQljbXAubHR1CQlwNTEscDQ5PXRbNl0sYTMKKwkocDUwKQljbXAubGV1CQlwNTEscDQ5PXRbNl0sYTMJfTs7CisJLnByZWQucmVsCQkibXV0ZXgiLHA0MSxwNDMKKwkucHJlZC5yZWwJCSJtdXRleCIscDQ5LHA1MQoreyAubW1pOwkocDApCWdldGYuc2lnCW4yPW5pMQkJCS8vIDQ6CisJKHA0MSkJYWRkCQlhND1hNCxuNAkJLy8JKHAxNykgYTQrPW40CisJKHA0MykJYWRkCQlhND1hNCxuNCwxCX07OworeyAubWZpOwkocDQ5KQlhZGQJCXRbNV09dFs1XSxhNAkJLy8gNToJKHAxNykgdFs1XSs9YTQKKwkocDApCW5vcC5mCQkwCisJKHA1MSkJYWRkCQl0WzVdPXRbNV0sYTQsMQl9OzsKK3sgLm1maTsJKHAwKQlnZXRmLnNpZwluMz1uaTIJCQkvLyA2OgorCShwMTcpCXhtYS5odQkJbmhpWzhdPW5pNyxtalsxXSxuaGlbN10JLy8JbnBbN10qbTAKKwkocDQxKQljbXAubHR1CQlwNDIscDQwPWE0LG40CX0KK3sgLm1maTsJKHA0MykJY21wLmxldQkJcDQyLHA0MD1hNCxuNAorCShwMTcpCXhtYS5sdQkJbmxvWzhdPW5pNyxtalsxXSxuaGlbN10KKwkocDApCW5vcC5pCQkwCQl9OzsKK3sgLm1paTsJKHAxNykJZ2V0Zi5zaWcJbjY9bmxvWzddCQkvLyA3OgorCShwNDkpCWNtcC5sdHUJCXA1MCxwNDg9dFs1XSxhNAorCShwNTEpCWNtcC5sZXUJCXA1MCxwNDg9dFs1XSxhNAl9OzsKKwkucHJlZC5yZWwJCSJtdXRleCIscDQwLHA0MgorCS5wcmVkLnJlbAkJIm11dGV4IixwNDgscDUwCit7IC5taWk7CShwMCkJZ2V0Zi5zaWcJbjQ9bmkzCQkJLy8gODoKKwkocDQwKQlhZGQJCWE1PWE1LG41CQkvLwkocDE3KSBhNSs9bjUKKwkocDQyKQlhZGQJCWE1PWE1LG41LDEJfTs7Cit7IC5taWk7CShwMCkJbm9wLm0JCTAJCQkvLyA5OgorCShwNDgpCWFkZAkJdFs0XT10WzRdLGE1CQkvLwlwKDE3KSB0WzRdKz1hNQorCShwNTApCWFkZAkJdFs0XT10WzRdLGE1LDEJfTs7Cit7IC5taWk7CShwMCkJbm9wLm0JCTAJCQkvLyAxMDoKKwkocDQwKQljbXAubHR1CQlwNDMscDQxPWE1LG41CisJKHA0MikJY21wLmxldQkJcDQzLHA0MT1hNSxuNQl9OzsKK3sgLm1paTsJKHAxNykJZ2V0Zi5zaWcJbjc9bmxvWzhdCQkvLyAxMToKKwkocDQ4KQljbXAubHR1CQlwNTEscDQ5PXRbNF0sYTUKKwkocDUwKQljbXAubGV1CQlwNTEscDQ5PXRbNF0sYTUJfTs7CisJLnByZWQucmVsCQkibXV0ZXgiLHA0MSxwNDMKKwkucHJlZC5yZWwJCSJtdXRleCIscDQ5LHA1MQoreyAubWlpOwkocDE3KQlnZXRmLnNpZwluOD1uaGlbOF0JCS8vIDEyOgorCShwNDEpCWFkZAkJYTY9YTYsbjYJCS8vCShwMTcpIGE2Kz1uNgorCShwNDMpCWFkZAkJYTY9YTYsbjYsMQl9OzsKK3sgLm1paTsJKHAwKQlnZXRmLnNpZwluNT1uaTQJCQkvLyAxMzoKKwkocDQ5KQlhZGQJCXRbM109dFszXSxhNgkJLy8JKHAxNykgdFszXSs9YTYKKwkocDUxKQlhZGQJCXRbM109dFszXSxhNiwxCX07OworeyAubWlpOwkocDApCW5vcC5tCQkwCQkJLy8gMTQ6CisJKHA0MSkJY21wLmx0dQkJcDQyLHA0MD1hNixuNgorCShwNDMpCWNtcC5sZXUJCXA0MixwNDA9YTYsbjYJfTs7Cit7IC5taWk7CShwMCkJZ2V0Zi5zaWcJbjY9bmk1CQkJLy8gMTU6CisJKHA0OSkJY21wLmx0dQkJcDUwLHA0OD10WzNdLGE2CisJKHA1MSkJY21wLmxldQkJcDUwLHA0OD10WzNdLGE2CX07OworCS5wcmVkLnJlbAkJIm11dGV4IixwNDAscDQyCisJLnByZWQucmVsCQkibXV0ZXgiLHA0OCxwNTAKK3sgLm1paTsJKHAwKQlub3AubQkJMAkJCS8vIDE2OgorCShwNDApCWFkZAkJYTc9YTcsbjcJCS8vCShwMTcpIGE3Kz1uNworCShwNDIpCWFkZAkJYTc9YTcsbjcsMQl9OzsKK3sgLm1paTsJKHAwKQlub3AubQkJMAkJCS8vIDE3OgorCShwNDgpCWFkZAkJdFsyXT10WzJdLGE3CQkvLwkocDE3KSB0WzJdKz1hNworCShwNTApCWFkZAkJdFsyXT10WzJdLGE3LDEJfTs7Cit7IC5taWk7CShwMCkJbm9wLm0JCTAJCQkvLyAxODoKKwkocDQwKQljbXAubHR1CQlwNDMscDQxPWE3LG43CisJKHA0MikJY21wLmxldQkJcDQzLHA0MT1hNyxuNwl9OzsKK3sgLm1paTsJKHAwKQlnZXRmLnNpZwluNz1uaTYJCQkvLyAxOToKKwkocDQ4KQljbXAubHR1CQlwNTEscDQ5PXRbMl0sYTcKKwkocDUwKQljbXAubGV1CQlwNTEscDQ5PXRbMl0sYTcJfTs7CisJLnByZWQucmVsCQkibXV0ZXgiLHA0MSxwNDMKKwkucHJlZC5yZWwJCSJtdXRleCIscDQ5LHA1MQoreyAubWlpOwkocDApCW5vcC5tCQkwCQkJLy8gMjA6CisJKHA0MSkJYWRkCQlhOD1hOCxuOAkJLy8JKHAxNykgYTgrPW44CisJKHA0MykJYWRkCQlhOD1hOCxuOCwxCX07OworeyAubW1pOwkocDApCW5vcC5tCQkwCQkJLy8gMjE6CisJKHA0OSkJYWRkCQl0WzFdPXRbMV0sYTgJCS8vCShwMTcpIHRbMV0rPWE4CisJKHA1MSkJYWRkCQl0WzFdPXRbMV0sYTgsMQl9Cit7IC5tbWk7CShwMTcpCW1vdgkJdFswXT1yMAorCShwNDEpCWNtcC5sdHUJCXA0MixwNDA9YTgsbjgKKwkocDQzKQljbXAubGV1CQlwNDIscDQwPWE4LG44CX07OworeyAubW1pOwkocDApCWdldGYuc2lnCW44PW5pNwkJCS8vIDIyOgorCShwNDkpCWNtcC5sdHUJCXA1MCxwNDg9dFsxXSxhOAorCShwNTEpCWNtcC5sZXUJCXA1MCxwNDg9dFsxXSxhOAl9Cit7IC5tbWk7CShwNDIpCWFkZAkJdFswXT10WzBdLHIwLDEKKwkocDApCWFkZAkJcjE2PS03KjE2LHByZXZzcAorCShwMCkJYWRkCQlyMTc9LTYqMTYscHJldnNwCX07OworDAorLy8gc3VidHJhY3QgbnBbOF0gZnJvbSBjYXJyeWJpdHx0bXBbOF0KKy8vIGNhcnJ5Yml0fHRtcFs4XSBsYXlvdXQgdXBvbiBleGl0IGZyb20gYWJvdmUgbG9vcCBpczoKKy8vCXRbMF18dFsxXXx0WzJdfHRbM118dFs0XXx0WzVdfHRbNl18dFs3XXx0MCAobGVhc3Qgc2lnbmlmaWNhbnQpCit7IC5tbWk7CShwNTApYWRkCXRbMF09dFswXSxyMCwxCisJYWRkCQlyMTg9LTUqMTYscHJldnNwCisJc3ViCQluMT10MCxuMQl9OzsKK3sgLm1taTsJY21wLmd0dQkJcDM0LHAzMj1uMSx0MDs7CisJLnByZWQucmVsCSJtdXRleCIscDMyLHAzNAorCShwMzIpc3ViCW4yPXRbN10sbjIKKwkocDM0KXN1YgluMj10WzddLG4yLDEJfTs7Cit7IC5taWk7CShwMzIpY21wLmd0dQlwMzUscDMzPW4yLHRbN10KKwkocDM0KWNtcC5nZXUJcDM1LHAzMz1uMix0WzddOzsKKwkucHJlZC5yZWwJIm11dGV4IixwMzMscDM1CisJKHAzMylzdWIJbjM9dFs2XSxuMwl9Cit7IC5tbWk7CShwMzUpc3ViCW4zPXRbNl0sbjMsMTs7CisJKHAzMyljbXAuZ3R1CXAzNCxwMzI9bjMsdFs2XQorCShwMzUpY21wLmdldQlwMzQscDMyPW4zLHRbNl0JfTs7CisJLnByZWQucmVsCSJtdXRleCIscDMyLHAzNAoreyAubWlpOwkocDMyKXN1YgluND10WzVdLG40CisJKHAzNClzdWIJbjQ9dFs1XSxuNCwxOzsKKwkocDMyKWNtcC5ndHUJcDM1LHAzMz1uNCx0WzVdCX0KK3sgLm1taTsJKHAzNCljbXAuZ2V1CXAzNSxwMzM9bjQsdFs1XTs7CisJLnByZWQucmVsCSJtdXRleCIscDMzLHAzNQorCShwMzMpc3ViCW41PXRbNF0sbjUKKwkocDM1KXN1YgluNT10WzRdLG41LDEJfTs7Cit7IC5taWk7CShwMzMpY21wLmd0dQlwMzQscDMyPW41LHRbNF0KKwkocDM1KWNtcC5nZXUJcDM0LHAzMj1uNSx0WzRdOzsKKwkucHJlZC5yZWwJIm11dGV4IixwMzIscDM0CisJKHAzMilzdWIJbjY9dFszXSxuNgl9Cit7IC5tbWk7CShwMzQpc3ViCW42PXRbM10sbjYsMTs7CisJKHAzMiljbXAuZ3R1CXAzNSxwMzM9bjYsdFszXQorCShwMzQpY21wLmdldQlwMzUscDMzPW42LHRbM10JfTs7CisJLnByZWQucmVsCSJtdXRleCIscDMzLHAzNQoreyAubWlpOwkocDMzKXN1YgluNz10WzJdLG43CisJKHAzNSlzdWIJbjc9dFsyXSxuNywxOzsKKwkocDMzKWNtcC5ndHUJcDM0LHAzMj1uNyx0WzJdCX0KK3sgLm1taTsJKHAzNSljbXAuZ2V1CXAzNCxwMzI9bjcsdFsyXTs7CisJLnByZWQucmVsCSJtdXRleCIscDMyLHAzNAorCShwMzIpc3ViCW44PXRbMV0sbjgKKwkocDM0KXN1YgluOD10WzFdLG44LDEJfTs7Cit7IC5taWk7CShwMzIpY21wLmd0dQlwMzUscDMzPW44LHRbMV0KKwkocDM0KWNtcC5nZXUJcDM1LHAzMz1uOCx0WzFdOzsKKwkucHJlZC5yZWwJIm11dGV4IixwMzMscDM1CisJKHAzMylzdWIJYTg9dFswXSxyMAl9Cit7IC5tbWk7CShwMzUpc3ViCWE4PXRbMF0scjAsMTs7CisJKHAzMyljbXAuZ3R1CXAzNCxwMzI9YTgsdFswXQorCShwMzUpY21wLmdldQlwMzQscDMyPWE4LHRbMF0JfTs7CisMCisvLyBzYXZlIHRoZSByZXN1bHQsIGVpdGhlciB0bXBbbnVtXSBvciB0bXBbbnVtXS1ucFtudW1dCisJLnByZWQucmVsCSJtdXRleCIscDMyLHAzNAoreyAubW1pOwkocDMyKXN0OAlbcnB0cl09bjEsOAorCShwMzQpc3Q4CVtycHRyXT10MCw4CisJYWRkCQlyMTk9LTQqMTYscHJldnNwfTs7Cit7IC5tbWI7CShwMzIpc3Q4CVtycHRyXT1uMiw4CisJKHAzNClzdDgJW3JwdHJdPXRbN10sOAorCShwNSlici5jb25kLmRwbnQuZmV3CS5MZG9uZQl9OzsKK3sgLm1tYjsJKHAzMilzdDgJW3JwdHJdPW4zLDgKKwkocDM0KXN0OAlbcnB0cl09dFs2XSw4CisJKHA3KWJyLmNvbmQuZHBudC5mZXcJLkxkb25lCX07OworeyAubW1iOwkocDMyKXN0OAlbcnB0cl09bjQsOAorCShwMzQpc3Q4CVtycHRyXT10WzVdLDgKKwkocDkpYnIuY29uZC5kcG50LmZldwkuTGRvbmUJfTs7Cit7IC5tbWI7CShwMzIpc3Q4CVtycHRyXT1uNSw4CisJKHAzNClzdDgJW3JwdHJdPXRbNF0sOAorCShwMTEpYnIuY29uZC5kcG50LmZldwkuTGRvbmUJfTs7Cit7IC5tbWI7CShwMzIpc3Q4CVtycHRyXT1uNiw4CisJKHAzNClzdDgJW3JwdHJdPXRbM10sOAorCShwMTMpYnIuY29uZC5kcG50LmZldwkuTGRvbmUJfTs7Cit7IC5tbWI7CShwMzIpc3Q4CVtycHRyXT1uNyw4CisJKHAzNClzdDgJW3JwdHJdPXRbMl0sOAorCShwMTUpYnIuY29uZC5kcG50LmZldwkuTGRvbmUJfTs7Cit7IC5tbWI7CShwMzIpc3Q4CVtycHRyXT1uOCw4CisJKHAzNClzdDgJW3JwdHJdPXRbMV0sOAorCW5vcC5iCQkwCQl9OzsKKy5MZG9uZToJCQkJCQkvLyBlcGlsb2d1ZQoreyAubW1pOwlsZGYuZmlsbAlmMTY9W3IxNl0sNjQKKwlsZGYuZmlsbAlmMTc9W3IxN10sNjQKKwlub3AuaQkJMAkJfQoreyAubW1pOwlsZGYuZmlsbAlmMTg9W3IxOF0sNjQKKwlsZGYuZmlsbAlmMTk9W3IxOV0sNjQKKwltb3YJCXByPXByZXZwciwweDFmZmZmCX07OworeyAubW1pOwlsZGYuZmlsbAlmMjA9W3IxNl0KKwlsZGYuZmlsbAlmMjE9W3IxN10KKwltb3YJCWFyLmxjPXByZXZsYwl9Cit7IC5tbWk7CWxkZi5maWxsCWYyMj1bcjE4XQorCWxkZi5maWxsCWYyMz1bcjE5XQorCW1vdgkJcmV0MD0xCQl9CS8vIHNpZ25hbCAiaGFuZGxlZCIKK3sgLm1pYjsJcnVtCQkxPDw1CisJLnJlc3RvcmUJc3AKKwltb3YJCXNwPXByZXZzcAorCWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7CisuZW5kcAlibl9tdWxfbW9udF84IworCisudHlwZQljb3B5cmlnaHQjLFxAb2JqZWN0Citjb3B5cmlnaHQ6CitzdHJpbmd6CSJNb250Z29tZXJ5IG11bHRpcGxpY2F0aW9uIGZvciBJQS02NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCiskb3V0cHV0PXNoaWZ0IGFuZCBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL21pcHMucGwgYi9jcnlwdG8vYm4vYXNtL21pcHMucGwKaW5kZXggZjA0YjNiOS4uYzE2MmEzZSAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9taXBzLnBsCisrKyBiL2NyeXB0by9ibi9hc20vbWlwcy5wbApAQCAtNTgzLDE0ICs1ODMsMTQgQEAKIAlzbHR1CSR2MCwkdDIsJHRhMgogCSRTVAkkdDIsLTIqJEJOU1ooJGEwKQogCSRBRERVCSR2MCwkdDgKLQorCQogCSRBRERVCSR0YTMsJHQzCiAJc2x0dQkkdDksJHRhMywkdDMKIAkkQUREVQkkdDMsJHRhMywkdjAKIAlzbHR1CSR2MCwkdDMsJHRhMwogCSRTVAkkdDMsLSRCTlNaKCRhMCkKIAkkQUREVQkkdjAsJHQ5Ci0KKwkKIAkuc2V0CW5vcmVvcmRlcgogCWJndHpsCSRhdCwuTF9ibl9hZGRfd29yZHNfbG9vcAogCSRMRAkkdDAsMCgkYTEpCkBAIC03OTAsNyArNzkwLDcgQEAKIAkJCQkjIHNvIHRoYXQgd2UgY2FuIHNhdmUgdHdvIGFyZ3VtZW50cwogCQkJCSMgYW5kIHJldHVybiBhZGRyZXNzIGluIHJlZ2lzdGVycwogCQkJCSMgaW5zdGVhZCBvZiBzdGFjazotKQotCisJCQkJCiAJJExECSRhMCwoJGEzKQogCW1vdmUJJHRhMiwkYTEKIAlibmUJJGEwLCRhMixibl9kaXZfM193b3Jkc19pbnRlcm5hbApkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9tb2RleHA1MTIteDg2XzY0LnBsIGIvY3J5cHRvL2JuL2FzbS9tb2RleHA1MTIteDg2XzY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWViMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYm4vYXNtL21vZGV4cDUxMi14ODZfNjQucGwKQEAgLTAsMCArMSwxNDk2IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEludGVsIENvcnAuCisjICAgQXV0aG9yOiBWaW5vZGguR29wYWxAaW50ZWwuY29tCisjICAgICAgICAgICBKaW0gR3VpbGZvcmQKKyMgICAgICAgICAgIEVyZGluYy5PenR1cmtAaW50ZWwuY29tCisjICAgICAgICAgICBNYXhpbS5QZXJtaW5vdkBpbnRlbC5jb20KKyMKKyMgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbGdvcml0aG0gdXNlZCBjYW4gYmUgZm91bmQgYXQ6CisjICAgaHR0cDovL3d3dy5jc2UuYnVmZmFsby5lZHUvc3JkczIwMDkvZXNjczIwMDlfc3VibWlzc2lvbl9Hb3BhbC5wZGYKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisjICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgICAgZGlzdHJpYnV0aW9uLgorIworIyAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyMgICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisjICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyMgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorIworIyA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyMgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyMgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorIyAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisjCisjIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorIyAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisjICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyMKKyMgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworIyAgICBhY2tub3dsZWRnbWVudDoKKyMgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorIyAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisjIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisjIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisjIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorIyBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQorCitteSAkd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOworCit1c2Ugc3RyaWN0OworbXkgJGNvZGU9Ii50ZXh0XG5cbiI7CitteSAkbT0wOworCisjCisjIERlZmluZSB4NTEyIG1hY3JvcworIworCisjTVVMU1RFUF81MTJfQURECU1BQ1JPCXg3LCB4NiwgeDUsIHg0LCB4MywgeDIsIHgxLCB4MCwgZHN0LCBzcmMxLCBzcmMyLCBhZGRfc3JjLCB0bXAxLCB0bXAyCisjCisjIHVzZXMgcmF4LCByZHgsIGFuZCBhcmdzCitzdWIgTVVMU1RFUF81MTJfQURECit7CisgbXkgKCR4LCAkRFNULCAkU1JDMiwgJEFTUkMsICRPUCwgJFRNUCk9QF87CisgbXkgQFg9QCR4OwkjIG1ha2UgYSBjb3B5CiskY29kZS49PDxfX187CisJIG1vdgkoKzgqMCkoJFNSQzIpLCAlcmF4CisJIG11bAkkT1AJCQkjIHJkeDpyYXggPSAlT1AgKiBbMF0KKwkgbW92CSgkQVNSQyksICRYWzBdCisJIGFkZAklcmF4LCAkWFswXQorCSBhZGMJXCQwLCAlcmR4CisJIG1vdgkkWFswXSwgJERTVAorX19fCitmb3IobXkgJGk9MTskaTw4OyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwkgbW92CSVyZHgsICRUTVAKKworCSBtb3YJKCs4KiRpKSgkU1JDMiksICVyYXgKKwkgbXVsCSRPUAkJCSMgcmR4OnJheCA9ICVPUCAqIFskaV0KKwkgbW92CSgrOCokaSkoJEFTUkMpLCAkWFskaV0KKwkgYWRkCSVyYXgsICRYWyRpXQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkVE1QLCAkWFskaV0KKwkgYWRjCVwkMCwgJXJkeAorX19fCit9CiskY29kZS49PDxfX187CisJIG1vdgklcmR4LCAkWFswXQorX19fCit9CisKKyNNVUxTVEVQXzUxMglNQUNSTwl4NywgeDYsIHg1LCB4NCwgeDMsIHgyLCB4MSwgeDAsIGRzdCwgc3JjMiwgc3JjMV92YWwsIHRtcAorIworIyB1c2VzIHJheCwgcmR4LCBhbmQgYXJncworc3ViIE1VTFNURVBfNTEyCit7CisgbXkgKCR4LCAkRFNULCAkU1JDMiwgJE9QLCAkVE1QKT1AXzsKKyBteSBAWD1AJHg7CSMgbWFrZSBhIGNvcHkKKyRjb2RlLj08PF9fXzsKKwkgbW92CSgrOCowKSgkU1JDMiksICVyYXgKKwkgbXVsCSRPUAkJCSMgcmR4OnJheCA9ICVPUCAqIFswXQorCSBhZGQJJXJheCwgJFhbMF0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbMF0sICREU1QKK19fXworZm9yKG15ICRpPTE7JGk8ODskaSsrKSB7CiskY29kZS49PDxfX187CisJIG1vdgklcmR4LCAkVE1QCisKKwkgbW92CSgrOCokaSkoJFNSQzIpLCAlcmF4CisJIG11bAkkT1AJCQkjIHJkeDpyYXggPSAlT1AgKiBbJGldCisJIGFkZAklcmF4LCAkWFskaV0KKwkgYWRjCVwkMCwgJXJkeAorCSBhZGQJJFRNUCwgJFhbJGldCisJIGFkYwlcJDAsICVyZHgKK19fXworfQorJGNvZGUuPTw8X19fOworCSBtb3YJJXJkeCwgJFhbMF0KK19fXworfQorCisjCisjIFN3aXp6bGUgTWFjcm9zCisjCisKKyMgbWFjcm8gdG8gY29weSBkYXRhIGZyb20gZmxhdCBzcGFjZSB0byBzd2l6emxlZCB0YWJsZQorI01BQ1JPIHN3aXp6bGUJcERzdCwgcFNyYywgdG1wMSwgdG1wMgorIyBwRHN0IGFuZCBwU3JjIGFyZSBtb2RpZmllZAorc3ViIHN3aXp6bGUKK3sKKyBteSAoJHBEc3QsICRwU3JjLCAkY250LCAkZDApPUBfOworJGNvZGUuPTw8X19fOworCSBtb3YJXCQ4LCAkY250Citsb29wXyRtOgorCSBtb3YJKCRwU3JjKSwgJGQwCisJIG1vdgkkZDAjdywgKCRwRHN0KQorCSBzaHIJXCQxNiwgJGQwCisJIG1vdgkkZDAjdywgKCs2NCoxKSgkcERzdCkKKwkgc2hyCVwkMTYsICRkMAorCSBtb3YJJGQwI3csICgrNjQqMikoJHBEc3QpCisJIHNocglcJDE2LCAkZDAKKwkgbW92CSRkMCN3LCAoKzY0KjMpKCRwRHN0KQorCSBsZWEJOCgkcFNyYyksICRwU3JjCisJIGxlYQk2NCo0KCRwRHN0KSwgJHBEc3QKKwkgZGVjCSRjbnQKKwkgam56CWxvb3BfJG0KK19fXworCisgJG0rKzsKK30KKworIyBtYWNybyB0byBjb3B5IGRhdGEgZnJvbSBzd2l6emxlZCB0YWJsZSB0byAgZmxhdCBzcGFjZQorI01BQ1JPIHVuc3dpenpsZQlwRHN0LCBwU3JjLCB0bXAqMworc3ViIHVuc3dpenpsZQoreworIG15ICgkcERzdCwgJHBTcmMsICRjbnQsICRkMCwgJGQxKT1AXzsKKyRjb2RlLj08PF9fXzsKKwkgbW92CVwkNCwgJGNudAorbG9vcF8kbToKKwkgbW92enh3CSgrNjQqMysyNTYqMCkoJHBTcmMpLCAkZDAKKwkgbW92enh3CSgrNjQqMysyNTYqMSkoJHBTcmMpLCAkZDEKKwkgc2hsCVwkMTYsICRkMAorCSBzaGwJXCQxNiwgJGQxCisJIG1vdgkoKzY0KjIrMjU2KjApKCRwU3JjKSwgJGQwI3cKKwkgbW92CSgrNjQqMisyNTYqMSkoJHBTcmMpLCAkZDEjdworCSBzaGwJXCQxNiwgJGQwCisJIHNobAlcJDE2LCAkZDEKKwkgbW92CSgrNjQqMSsyNTYqMCkoJHBTcmMpLCAkZDAjdworCSBtb3YJKCs2NCoxKzI1NioxKSgkcFNyYyksICRkMSN3CisJIHNobAlcJDE2LCAkZDAKKwkgc2hsCVwkMTYsICRkMQorCSBtb3YJKCs2NCowKzI1NiowKSgkcFNyYyksICRkMCN3CisJIG1vdgkoKzY0KjArMjU2KjEpKCRwU3JjKSwgJGQxI3cKKwkgbW92CSRkMCwgKCs4KjApKCRwRHN0KQorCSBtb3YJJGQxLCAoKzgqMSkoJHBEc3QpCisJIGxlYQkyNTYqMigkcFNyYyksICRwU3JjCisJIGxlYQk4KjIoJHBEc3QpLCAkcERzdAorCSBzdWIJXCQxLCAkY250CisJIGpueglsb29wXyRtCitfX18KKworICRtKys7Cit9CisKKyMKKyMgRGF0YSBTdHJ1Y3R1cmVzCisjCisKKyMgUmVkdWNlIERhdGEKKyMKKyMKKyMgT2Zmc2V0ICBWYWx1ZQorIyAwQzAgICAgIENhcnJpZXMKKyMgMEI4ICAgICBYMlsxMF0KKyMgMEIwICAgICBYMls5XQorIyAwQTggICAgIFgyWzhdCisjIDBBMCAgICAgWDJbN10KKyMgMDk4ICAgICBYMls2XQorIyAwOTAgICAgIFgyWzVdCisjIDA4OCAgICAgWDJbNF0KKyMgMDgwICAgICBYMlszXQorIyAwNzggICAgIFgyWzJdCisjIDA3MCAgICAgWDJbMV0KKyMgMDY4ICAgICBYMlswXQorIyAwNjAgICAgIFgxWzEyXSAgUFsxMF0KKyMgMDU4ICAgICBYMVsxMV0gIFBbOV0gIFpbOF0KKyMgMDUwICAgICBYMVsxMF0gIFBbOF0gIFpbN10KKyMgMDQ4ICAgICBYMVs5XSAgIFBbN10gIFpbNl0KKyMgMDQwICAgICBYMVs4XSAgIFBbNl0gIFpbNV0KKyMgMDM4ICAgICBYMVs3XSAgIFBbNV0gIFpbNF0KKyMgMDMwICAgICBYMVs2XSAgIFBbNF0gIFpbM10KKyMgMDI4ICAgICBYMVs1XSAgIFBbM10gIFpbMl0KKyMgMDIwICAgICBYMVs0XSAgIFBbMl0gIFpbMV0KKyMgMDE4ICAgICBYMVszXSAgIFBbMV0gIFpbMF0KKyMgMDEwICAgICBYMVsyXSAgIFBbMF0gIFlbMl0KKyMgMDA4ICAgICBYMVsxXSAgIFFbMV0gIFlbMV0KKyMgMDAwICAgICBYMVswXSAgIFFbMF0gIFlbMF0KKworbXkgJFgxX29mZnNldCAgICAgICAgICAgPSAgMDsJCQkjIDEzIHF3b3JkcworbXkgJFgyX29mZnNldCAgICAgICAgICAgPSAgJFgxX29mZnNldCArIDEzKjg7CQkJIyAxMSBxd29yZHMKK215ICRDYXJyaWVzX29mZnNldCAgICAgID0gICRYMl9vZmZzZXQgKyAxMSo4OwkJCSMgMSBxd29yZAorbXkgJFFfb2Zmc2V0ICAgICAgICAgICAgPSAgMDsJCQkjIDIgcXdvcmRzCitteSAkUF9vZmZzZXQgICAgICAgICAgICA9ICAkUV9vZmZzZXQgKyAyKjg7CQkJIyAxMSBxd29yZHMKK215ICRZX29mZnNldCAgICAgICAgICAgID0gIDA7CQkJIyAzIHF3b3JkcworbXkgJFpfb2Zmc2V0ICAgICAgICAgICAgPSAgJFlfb2Zmc2V0ICsgMyo4OwkJCSMgOSBxd29yZHMKKworbXkgJFJlZF9EYXRhX1NpemUgICAgICAgPSAgJENhcnJpZXNfb2Zmc2V0ICsgMSo4OwkJCSMgKDI1IHF3b3JkcykKKworIworIyBTdGFjayBGcmFtZQorIworIworIyBvZmZzZXQJdmFsdWUKKyMgLi4uCQk8b2xkIHN0YWNrIGNvbnRlbnRzPgorIyAuLi4KKyMgMjgwCQlHYXJyYXkKKworIyAyNzgJCXRtcDE2WzE1XQorIyAuLi4JCS4uLgorIyAyMDAJCXRtcDE2WzBdCisKKyMgMUY4CQl0bXBbN10KKyMgLi4uCQkuLi4KKyMgMUMwCQl0bXBbMF0KKworIyAxQjgJCUdUWzddCisjIC4uLgkJLi4uCisjIDE4MAkJR1RbMF0KKworIyAxNzgJCVJlZHVjZSBEYXRhCisjIC4uLgkJLi4uCisjIDBCOAkJUmVkdWNlIERhdGEKKyMgMEIwCQlyZXNlcnZlZAorIyAwQTgJCXJlc2VydmVkCisjIDBBMAkJcmVzZXJ2ZWQKKyMgMDk4CQlyZXNlcnZlZAorIyAwOTAJCXJlc2VydmVkCisjIDA4OAkJcmVkdWNlIHJlc3VsdCBhZGRyCisjIDA4MAkJZXhwWzhdCisKKyMgLi4uCisjIDA0OAkJZXhwWzFdCisjIDA0MAkJZXhwWzBdCisKKyMgMDM4CQlyZXNlcnZlZAorIyAwMzAJCWxvb3BfaWR4CisjIDAyOAkJcGcKKyMgMDIwCQlpCisjIDAxOAkJcERhdGEJOyBhcmcgNAorIyAwMTAJCXBHCTsgYXJnIDIKKyMgMDA4CQlwUmVzdWx0CTsgYXJnIDEKKyMgMDAwCQlyc3AJOyBzdGFjayBwb2ludGVyIGJlZm9yZSBzdWJ0cmFjdAorCitteSAkcnNwX29mZnNldCAgICAgICAgICA9ICAwOworbXkgJHBSZXN1bHRfb2Zmc2V0ICAgICAgPSAgOCoxICsgJHJzcF9vZmZzZXQ7CitteSAkcEdfb2Zmc2V0ICAgICAgICAgICA9ICA4KjEgKyAkcFJlc3VsdF9vZmZzZXQ7CitteSAkcERhdGFfb2Zmc2V0ICAgICAgICA9ICA4KjEgKyAkcEdfb2Zmc2V0OworbXkgJGlfb2Zmc2V0ICAgICAgICAgICAgPSAgOCoxICsgJHBEYXRhX29mZnNldDsKK215ICRwZ19vZmZzZXQgICAgICAgICAgID0gIDgqMSArICRpX29mZnNldDsKK215ICRsb29wX2lkeF9vZmZzZXQgICAgID0gIDgqMSArICRwZ19vZmZzZXQ7CitteSAkcmVzZXJ2ZWQxX29mZnNldCAgICA9ICA4KjEgKyAkbG9vcF9pZHhfb2Zmc2V0OworbXkgJGV4cF9vZmZzZXQgICAgICAgICAgPSAgOCoxICsgJHJlc2VydmVkMV9vZmZzZXQ7CitteSAkcmVkX3Jlc3VsdF9hZGRyX29mZnNldD0gIDgqOSArICRleHBfb2Zmc2V0OworbXkgJHJlc2VydmVkMl9vZmZzZXQgICAgPSAgOCoxICsgJHJlZF9yZXN1bHRfYWRkcl9vZmZzZXQ7CitteSAkUmVkdWNlX0RhdGFfb2Zmc2V0ICA9ICA4KjUgKyAkcmVzZXJ2ZWQyX29mZnNldDsKK215ICRHVF9vZmZzZXQgICAgICAgICAgID0gICRSZWRfRGF0YV9TaXplICsgJFJlZHVjZV9EYXRhX29mZnNldDsKK215ICR0bXBfb2Zmc2V0ICAgICAgICAgID0gIDgqOCArICRHVF9vZmZzZXQ7CitteSAkdG1wMTZfb2Zmc2V0ICAgICAgICA9ICA4KjggKyAkdG1wX29mZnNldDsKK215ICRnYXJyYXlfb2Zmc2V0ICAgICAgID0gIDgqMTYgKyAkdG1wMTZfb2Zmc2V0OworbXkgJG1lbV9zaXplICAgICAgICAgICAgPSAgOCo4KjMyICsgJGdhcnJheV9vZmZzZXQ7CisKKyMKKyMgT2Zmc2V0cyB3aXRoaW4gUmVkdWNlIERhdGEKKyMKKyMKKyMJc3RydWN0IE1PREZfMkZPTERfTU9OVF81MTJfQzFfREFUQSB7CisjCVVJTlQ2NCB0WzhdWzhdOworIwlVSU5UNjQgbVs4XTsKKyMJVUlOVDY0IG0xWzhdOyAvKiAyXjc2OCAlIG0gKi8KKyMJVUlOVDY0IG0yWzhdOyAvKiAyXjY0MCAlIG0gKi8KKyMJVUlOVDY0IGsxWzJdOyAvKiAoLSAxL20pICUgMl4xMjggKi8KKyMJfTsKKworbXkgJFQgICAgICAgICAgICAgICAgICAgPSAgMDsKK215ICRNICAgICAgICAgICAgICAgICAgID0gIDUxMjsJCQkjID0gOCAqIDggKiA4CitteSAkTTEgICAgICAgICAgICAgICAgICA9ICA1NzY7CQkJIyA9IDggKiA4ICogOSAvKiArPSA4ICogOCAqLworbXkgJE0yICAgICAgICAgICAgICAgICAgPSAgNjQwOwkJCSMgPSA4ICogOCAqIDEwIC8qICs9IDggKiA4ICovCitteSAkSzEgICAgICAgICAgICAgICAgICA9ICA3MDQ7CQkJIyA9IDggKiA4ICogMTEgLyogKz0gOCAqIDggKi8KKworIworIyAgIEZVTkNUSU9OUworIworCit7e3sKKyMKKyMgTVVMQUREXzEyOHg1MTIgOiBGdW5jdGlvbiB0byBtdWx0aXBseSAxMjgtYml0cyAoMiBxd29yZHMpIGJ5IDUxMi1iaXRzICg4IHF3b3JkcykKKyMgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhZGQgNTEyLWJpdHMgKDggcXdvcmRzKQorIyAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IDY0MCBiaXRzICgxMCBxd29yZHMpCisjIElucHV0OiAxMjgtYml0IG11bCBzb3VyY2U6IFtyZGkrOCoxXSwgcmJwCisjICAgICAgICA1MTItYml0IG11bCBzb3VyY2U6IFtyc2krOCpuXQorIyAgICAgICAgNTEyLWJpdCBhZGQgc291cmNlOiByMTUsIHIxNCwgLi4uLCByOSwgcjgKKyMgT3V0cHV0OiByOSwgcjgsIHIxNSwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAsIFtyY3grOCoxXSwgW3JjeCs4KjBdCisjIENsb2JiZXJzIGFsbCByZWdzIGV4Y2VwdDogcmN4LCByc2ksIHJkaQorJGNvZGUuPTw8X19fOworLnR5cGUJTVVMQUREXzEyOHg1MTIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitNVUxBRERfMTI4eDUxMjoKK19fXworCSZNVUxTVEVQXzUxMihbbWFwKCIlciRfIiwoOC4uMTUpKV0sICIoKzgqMCkoJXJjeCkiLCAiJXJzaSIsICIlcmJwIiwgIiVyYngiKTsKKyRjb2RlLj08PF9fXzsKKwkgbW92CSgrOCoxKSglcmRpKSwgJXJicAorX19fCisJJk1VTFNURVBfNTEyKFttYXAoIiVyJF8iLCg5Li4xNSw4KSldLCAiKCs4KjEpKCVyY3gpIiwgIiVyc2kiLCAiJXJicCIsICIlcmJ4Iik7CiskY29kZS49PDxfX187CisJIHJldAorLnNpemUJTVVMQUREXzEyOHg1MTIsLi1NVUxBRERfMTI4eDUxMgorX19fCit9fX0KKwore3t7CisjTVVMQUREXzI1Nng1MTIJTUFDUk8JcERzdCwgcEEsIHBCLCBPUCwgVE1QLCBYNywgWDYsIFg1LCBYNCwgWDMsIFgyLCBYMSwgWDAKKyMKKyMgSW5wdXRzOiBwRHN0OiBEZXN0aW5hdGlvbiAgKDc2OCBiaXRzLCAxMiBxd29yZHMpCisjICAgICAgICAgcEE6ICAgTXVsdGlwbGljYW5kICgxMDI0IGJpdHMsIDE2IHF3b3JkcykKKyMgICAgICAgICBwQjogICBNdWx0aXBsaWNhbmQgKDUxMiBiaXRzLCA4IHF3b3JkcykKKyMgRHN0ID0gQWggKiBCICsgQWwKKyMgd2hlcmUgQWggaXMgKGluIHF3b3JkcykgQVsxNToxMl0gKDI1NiBiaXRzKSBhbmQgQWwgaXMgQVs3OjBdICg1MTIgYml0cykKKyMgUmVzdWx0cyBpbiBYMyBYMiBYMSBYMCBYNyBYNiBYNSBYNCBEc3RbMzowXQorIyBVc2VzIHJlZ2lzdGVyczogYXJndW1lbnRzLCBSQVgsIFJEWAorc3ViIE1VTEFERF8yNTZ4NTEyCit7CisgbXkgKCRwRHN0LCAkcEEsICRwQiwgJE9QLCAkVE1QLCAkWCk9QF87CiskY29kZS49PDxfX187CisJbW92CSgrOCoxMikoJHBBKSwgJE9QCitfX18KKwkmTVVMU1RFUF81MTJfQUREKCRYLCAiKCs4KjApKCRwRHN0KSIsICRwQiwgJHBBLCAkT1AsICRUTVApOworCXB1c2goQCRYLHNoaWZ0KEAkWCkpOworCiskY29kZS49PDxfX187CisJIG1vdgkoKzgqMTMpKCRwQSksICRPUAorX19fCisJJk1VTFNURVBfNTEyKCRYLCAiKCs4KjEpKCRwRHN0KSIsICRwQiwgJE9QLCAkVE1QKTsKKwlwdXNoKEAkWCxzaGlmdChAJFgpKTsKKworJGNvZGUuPTw8X19fOworCSBtb3YJKCs4KjE0KSgkcEEpLCAkT1AKK19fXworCSZNVUxTVEVQXzUxMigkWCwgIigrOCoyKSgkcERzdCkiLCAkcEIsICRPUCwgJFRNUCk7CisJcHVzaChAJFgsc2hpZnQoQCRYKSk7CisKKyRjb2RlLj08PF9fXzsKKwkgbW92CSgrOCoxNSkoJHBBKSwgJE9QCitfX18KKwkmTVVMU1RFUF81MTIoJFgsICIoKzgqMykoJHBEc3QpIiwgJHBCLCAkT1AsICRUTVApOworCXB1c2goQCRYLHNoaWZ0KEAkWCkpOworfQorCisjCisjIG1vbnRfcmVkdWNlKFVJTlQ2NCAqeCwgIC8qIDEwMjQgYml0cywgMTYgcXdvcmRzICovCisjCSAgICAgICBVSU5UNjQgKm0sICAvKiAgNTEyIGJpdHMsICA4IHF3b3JkcyAqLworIwkgICAgICAgTU9ERl8yRk9MRF9NT05UXzUxMl9DMV9EQVRBICpkYXRhLAorIyAgICAgICAgICAgICBVSU5UNjQgKnIpICAvKiAgNTEyIGJpdHMsICA4IHF3b3JkcyAqLworIyBJbnB1dDogIHggKG51bWJlciB0byBiZSByZWR1Y2VkKTogdG1wMTYgKEltcGxpY2l0KQorIyAgICAgICAgIG0gKG1vZHVsdXMpOiAgICAgICAgICAgICAgW3BNXSAgKEltcGxpY2l0KQorIyAgICAgICAgIGRhdGEgKHJlZHVjZSBkYXRhKTogICAgICAgW3BEYXRhXSAoSW1wbGljaXQpCisjIE91dHB1dDogciAocmVzdWx0KToJCSAgICAgQWRkcmVzcyBpbiBbcmVkX3Jlc19hZGRyXQorIyAgICAgICAgIHJlc3VsdCBhbHNvIGluOiByOSwgcjgsIHIxNSwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAKKworbXkgQFg9bWFwKCIlciRfIiwoOC4uMTUpKTsKKworJGNvZGUuPTw8X19fOworLnR5cGUJbW9udF9yZWR1Y2UsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Cittb250X3JlZHVjZToKK19fXworCitteSAkU1RBQ0tfREVQVEggICAgICAgICA9ICA4OworCSMKKwkjIFgxID0gWGggKiBNMSArIFhsCiskY29kZS49PDxfX187CisJIGxlYQkoKyRSZWR1Y2VfRGF0YV9vZmZzZXQrJFgxX29mZnNldCskU1RBQ0tfREVQVEgpKCVyc3ApLCAlcmRpCQkJIyBwWDEgKERzdCkgNzY5IGJpdHMsIDEzIHF3b3JkcworCSBtb3YJKCskcERhdGFfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCksICVyc2kJCQkjIHBNMSAoQnNyYykgNTEyIGJpdHMsIDggcXdvcmRzCisJIGFkZAlcJCRNMSwgJXJzaQorCSBsZWEJKCskdG1wMTZfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCksICVyY3gJCQkjIFggKEFzcmMpIDEwMjQgYml0cywgMTYgcXdvcmRzCisKK19fXworCisJJk1VTEFERF8yNTZ4NTEyKCIlcmRpIiwgIiVyY3giLCAiJXJzaSIsICIlcmJwIiwgIiVyYngiLCBcQFgpOwkjIHJvdGF0ZXMgQFggNCB0aW1lcworCSMgcmVzdWx0cyBpbiByMTEsIHIxMCwgcjksIHI4LCByMTUsIHIxNCwgcjEzLCByMTIsIFgxWzM6MF0KKworJGNvZGUuPTw8X19fOworCSB4b3IJJXJheCwgJXJheAorCSMgWDEgKz0geGwKKwkgYWRkCSgrOCo4KSglcmN4KSwgJFhbNF0KKwkgYWRjCSgrOCo5KSglcmN4KSwgJFhbNV0KKwkgYWRjCSgrOCoxMCkoJXJjeCksICRYWzZdCisJIGFkYwkoKzgqMTEpKCVyY3gpLCAkWFs3XQorCSBhZGMJXCQwLCAlcmF4CisJIyBYMSBpcyBub3cgcmF4LCByMTEtcjgsIHIxNS1yMTIsIHRtcDE2WzM6MF0KKworCSMKKwkjIGNoZWNrIGZvciBjYXJyeSA7OyBjYXJyeSBzdG9yZWQgaW4gcmF4CisJIG1vdgkkWFs0XSwgKCs4KjgpKCVyZGkpCQkJIyByZGkgcG9pbnRzIHRvIFgxCisJIG1vdgkkWFs1XSwgKCs4KjkpKCVyZGkpCisJIG1vdgkkWFs2XSwgJXJicAorCSBtb3YJJFhbN10sICgrOCoxMSkoJXJkaSkKKworCSBtb3YJJXJheCwgKCskUmVkdWNlX0RhdGFfb2Zmc2V0KyRDYXJyaWVzX29mZnNldCskU1RBQ0tfREVQVEgpKCVyc3ApCisKKwkgbW92CSgrOCowKSglcmRpKSwgJFhbNF0KKwkgbW92CSgrOCoxKSglcmRpKSwgJFhbNV0KKwkgbW92CSgrOCoyKSglcmRpKSwgJFhbNl0KKwkgbW92CSgrOCozKSglcmRpKSwgJFhbN10KKworCSMgWDEgaXMgbm93IHN0b3JlZCBpbjogWDFbMTFdLCByYnAsIFgxWzk6OF0sIHIxNS1yOAorCSMgcmRpIC0+IFgxCisJIyByc2kgLT4gTTEKKworCSMKKwkjIFgyID0gWGggKiBNMiArIFhsCisJIyBkbyBmaXJzdCBwYXJ0IChYMiA9IFhoICogTTIpCisJIGFkZAlcJDgqMTAsICVyZGkJCQkjIHJkaSAtPiBwWGggOyAxMjggYml0cywgMiBxd29yZHMKKwkJCQkjICAgICAgICBYaCBpcyBhY3R1YWxseSB7IFtyZGkrOCoxXSwgcmJwIH0KKwkgYWRkCVwkYCRNMi0kTTFgLCAlcnNpCQkJIyByc2kgLT4gTTIKKwkgbGVhCSgrJFJlZHVjZV9EYXRhX29mZnNldCskWDJfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCksICVyY3gJCQkjIHJjeCAtPiBwWDIgOyA2NDEgYml0cywgMTEgcXdvcmRzCitfX18KKwl1bnNoaWZ0KEBYLHBvcChAWCkpOwl1bnNoaWZ0KEBYLHBvcChAWCkpOworJGNvZGUuPTw8X19fOworCisJIGNhbGwJTVVMQUREXzEyOHg1MTIJCQkjIGFyZ3MgaW4gcmN4LCByZGkgLyByYnAsIHJzaSwgcjE1LXI4CisJIyByZXN1bHQgaW4gcjksIHI4LCByMTUsIHIxNCwgcjEzLCByMTIsIHIxMSwgcjEwLCBYMlsxOjBdCisJIG1vdgkoKyRSZWR1Y2VfRGF0YV9vZmZzZXQrJENhcnJpZXNfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCksICVyYXgKKworCSMgWDIgKz0gWGwKKwkgYWRkCSgrOCo4LTgqMTApKCVyZGkpLCAkWFs2XQkJIyAoLTgqMTApIGlzIHRvIGFkanVzdCByZGkgLT4gWGggdG8gWGwKKwkgYWRjCSgrOCo5LTgqMTApKCVyZGkpLCAkWFs3XQorCSBtb3YJJFhbNl0sICgrOCo4KSglcmN4KQorCSBtb3YJJFhbN10sICgrOCo5KSglcmN4KQorCisJIGFkYwklcmF4LCAlcmF4CisJIG1vdgklcmF4LCAoKyRSZWR1Y2VfRGF0YV9vZmZzZXQrJENhcnJpZXNfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCkKKworCSBsZWEJKCskUmVkdWNlX0RhdGFfb2Zmc2V0KyRRX29mZnNldCskU1RBQ0tfREVQVEgpKCVyc3ApLCAlcmRpCQkJIyByZGkgLT4gcFEgOyAxMjggYml0cywgMiBxd29yZHMKKwkgYWRkCVwkYCRLMS0kTTJgLCAlcnNpCQkJIyByc2kgLT4gcEsxIDsgMTI4IGJpdHMsIDIgcXdvcmRzCisKKwkjIE1VTF8xMjh4MTI4dDEyOAlyZGksIHJjeCwgcnNpCTsgUSA9IFgyICogSzEgKGJvdHRvbSBoYWxmKQorCSMgQjE6QjAgPSByc2lbMTowXSA9IEsxWzE6MF0KKwkjIEExOkEwID0gcmN4WzE6MF0gPSBYMlsxOjBdCisJIyBSZXN1bHQgPSByZGlbMV0scmJwID0gUVsxXSxyYnAKKwkgbW92CSglcnNpKSwgJXI4CQkJIyBCMAorCSBtb3YJKCs4KjEpKCVyc2kpLCAlcmJ4CQkJIyBCMQorCisJIG1vdgkoJXJjeCksICVyYXgJCQkjIEEwCisJIG11bAklcjgJCQkjIEIwCisJIG1vdgklcmF4LCAlcmJwCisJIG1vdgklcmR4LCAlcjkKKworCSBtb3YJKCs4KjEpKCVyY3gpLCAlcmF4CQkJIyBBMQorCSBtdWwJJXI4CQkJIyBCMAorCSBhZGQJJXJheCwgJXI5CisKKwkgbW92CSglcmN4KSwgJXJheAkJCSMgQTAKKwkgbXVsCSVyYngJCQkjIEIxCisJIGFkZAklcmF4LCAlcjkKKworCSBtb3YJJXI5LCAoKzgqMSkoJXJkaSkKKwkjIGVuZCBNVUxfMTI4eDEyOHQxMjgKKworCSBzdWIJXCRgJEsxLSRNYCwgJXJzaQorCisJIG1vdgkoJXJjeCksICRYWzZdCisJIG1vdgkoKzgqMSkoJXJjeCksICRYWzddCQkJIyByOTpyOCA9IFgyWzE6MF0KKworCSBjYWxsCU1VTEFERF8xMjh4NTEyCQkJIyBhcmdzIGluIHJjeCwgcmRpIC8gcmJwLCByc2ksIHIxNS1yOAorCSMgcmVzdWx0IGluIHI5LCByOCwgcjE1LCByMTQsIHIxMywgcjEyLCByMTEsIHIxMCwgWDJbMTowXQorCisJIyBsb2FkIGZpcnN0IGhhbGYgb2YgbSB0byByZHgsIHJkaSwgcmJ4LCByYXgKKwkjIG1vdmVkIHRoaXMgaGVyZSBmb3IgZWZmaWNpZW5jeQorCSBtb3YJKCs4KjApKCVyc2kpLCAlcmF4CisJIG1vdgkoKzgqMSkoJXJzaSksICVyYngKKwkgbW92CSgrOCoyKSglcnNpKSwgJXJkaQorCSBtb3YJKCs4KjMpKCVyc2kpLCAlcmR4CisKKwkjIGNvbnRpbnVlIHdpdGggcmVkdWN0aW9uCisJIG1vdgkoKyRSZWR1Y2VfRGF0YV9vZmZzZXQrJENhcnJpZXNfb2Zmc2V0KyRTVEFDS19ERVBUSCkoJXJzcCksICVyYnAKKworCSBhZGQJKCs4KjgpKCVyY3gpLCAkWFs2XQorCSBhZGMJKCs4KjkpKCVyY3gpLCAkWFs3XQorCisJI2FjY3VtdWxhdGUgdGhlIGZpbmFsIGNhcnJ5IHRvIHJicAorCSBhZGMJJXJicCwgJXJicAorCisJIyBBZGQgaW4gb3ZlcmZsb3cgY29ycmVjdGlvbnM6IFIgPSAoWDI+PjEyOCkgKz0gVFtvdmVyZmxvd10KKwkjIFIgPSB7cjksIHI4LCByMTUsIHIxNCwgLi4uLCByMTB9CisJIHNobAlcJDMsICVyYnAKKwkgbW92CSgrJHBEYXRhX29mZnNldCskU1RBQ0tfREVQVEgpKCVyc3ApLCAlcmN4CQkJIyByc2kgLT4gRGF0YSAoYW5kIHBvaW50cyB0byBUKQorCSBhZGQJJXJjeCwgJXJicAkJCSMgcFQgOyA1MTIgYml0cywgOCBxd29yZHMsIHNwcmVhZCBvdXQKKworCSMgcnNpIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIG1hc2sgYWZ0ZXIgdGhlIGFkZGl0aW9uCisJIHhvcgklcnNpLCAlcnNpCisKKwkgYWRkCSgrOCo4KjApKCVyYnApLCAkWFswXQorCSBhZGMJKCs4KjgqMSkoJXJicCksICRYWzFdCisJIGFkYwkoKzgqOCoyKSglcmJwKSwgJFhbMl0KKwkgYWRjCSgrOCo4KjMpKCVyYnApLCAkWFszXQorCSBhZGMJKCs4KjgqNCkoJXJicCksICRYWzRdCisJIGFkYwkoKzgqOCo1KSglcmJwKSwgJFhbNV0KKwkgYWRjCSgrOCo4KjYpKCVyYnApLCAkWFs2XQorCSBhZGMJKCs4KjgqNykoJXJicCksICRYWzddCisKKwkjIGlmIHRoZXJlIGlzIGEgY2Fycnk6CXJzaSA9IDB4RkZGRkZGRkZGRkZGRkZGRgorCSMgaWYgY2FycnkgaXMgY2xlYXI6CXJzaSA9IDB4MDAwMDAwMDAwMDAwMDAwMAorCSBzYmIJXCQwLCAlcnNpCisKKwkjIGlmIGNhcnJ5IGlzIGNsZWFyLCBzdWJ0cmFjdCAwLiBPdGhlcndpc2UsIHN1YnRyYWN0IDI1NiBiaXRzIG9mIG0KKwkgYW5kCSVyc2ksICVyYXgKKwkgYW5kCSVyc2ksICVyYngKKwkgYW5kCSVyc2ksICVyZGkKKwkgYW5kCSVyc2ksICVyZHgKKworCSBtb3YJXCQxLCAlcmJwCisJIHN1YgklcmF4LCAkWFswXQorCSBzYmIJJXJieCwgJFhbMV0KKwkgc2JiCSVyZGksICRYWzJdCisJIHNiYgklcmR4LCAkWFszXQorCisJIyBpZiB0aGVyZSBpcyBhIGJvcnJvdzoJCXJicCA9IDAKKwkjIGlmIHRoZXJlIGlzIG5vIGJvcnJvdzoJcmJwID0gMQorCSMgdGhpcyBpcyB1c2VkIHRvIHNhdmUgdGhlIGJvcnJvd3MgaW4gYmV0d2VlbiB0aGUgZmlyc3QgaGFsZiBhbmQgdGhlIDJuZCBoYWxmIG9mIHRoZSBzdWJ0cmFjdGlvbiBvZiBtCisJIHNiYglcJDAsICVyYnAKKworCSNsb2FkIHNlY29uZCBoYWxmIG9mIG0gdG8gcmR4LCByZGksIHJieCwgcmF4CisKKwkgYWRkCVwkJE0sICVyY3gKKwkgbW92CSgrOCo0KSglcmN4KSwgJXJheAorCSBtb3YJKCs4KjUpKCVyY3gpLCAlcmJ4CisJIG1vdgkoKzgqNikoJXJjeCksICVyZGkKKwkgbW92CSgrOCo3KSglcmN4KSwgJXJkeAorCisJIyB1c2UgdGhlIHJzaSBtYXNrIGFzIGJlZm9yZQorCSMgaWYgY2FycnkgaXMgY2xlYXIsIHN1YnRyYWN0IDAuIE90aGVyd2lzZSwgc3VidHJhY3QgMjU2IGJpdHMgb2YgbQorCSBhbmQJJXJzaSwgJXJheAorCSBhbmQJJXJzaSwgJXJieAorCSBhbmQJJXJzaSwgJXJkaQorCSBhbmQJJXJzaSwgJXJkeAorCisJIyBpZiByYnAgPSAwLCB0aGVyZSB3YXMgYSBib3Jyb3cgYmVmb3JlLCBpdCBpcyBtb3ZlZCB0byB0aGUgY2FycnkgZmxhZworCSMgaWYgcmJwID0gMSwgdGhlcmUgd2FzIG5vdCBhIGJvcnJvdyBiZWZvcmUsIGNhcnJ5IGZsYWcgaXMgY2xlYXJlZAorCSBzdWIJXCQxLCAlcmJwCisKKwkgc2JiCSVyYXgsICRYWzRdCisJIHNiYgklcmJ4LCAkWFs1XQorCSBzYmIJJXJkaSwgJFhbNl0KKwkgc2JiCSVyZHgsICRYWzddCisKKwkjIHdyaXRlIFIgYmFjayB0byBtZW1vcnkKKworCSBtb3YJKCskcmVkX3Jlc3VsdF9hZGRyX29mZnNldCskU1RBQ0tfREVQVEgpKCVyc3ApLCAlcnNpCisJIG1vdgkkWFswXSwgKCs4KjApKCVyc2kpCisJIG1vdgkkWFsxXSwgKCs4KjEpKCVyc2kpCisJIG1vdgkkWFsyXSwgKCs4KjIpKCVyc2kpCisJIG1vdgkkWFszXSwgKCs4KjMpKCVyc2kpCisJIG1vdgkkWFs0XSwgKCs4KjQpKCVyc2kpCisJIG1vdgkkWFs1XSwgKCs4KjUpKCVyc2kpCisJIG1vdgkkWFs2XSwgKCs4KjYpKCVyc2kpCisJIG1vdgkkWFs3XSwgKCs4KjcpKCVyc2kpCisKKwkgcmV0Cisuc2l6ZQltb250X3JlZHVjZSwuLW1vbnRfcmVkdWNlCitfX18KK319fQorCit7e3sKKyNNVUxfNTEyeDUxMglNQUNSTwlwRHN0LCBwQSwgcEIsIHg3LCB4NiwgeDUsIHg0LCB4MywgeDIsIHgxLCB4MCwgdG1wKjIKKyMKKyMgSW5wdXRzOiBwRHN0OiBEZXN0aW5hdGlvbiAgKDEwMjQgYml0cywgMTYgcXdvcmRzKQorIyAgICAgICAgIHBBOiAgIE11bHRpcGxpY2FuZCAoNTEyIGJpdHMsIDggcXdvcmRzKQorIyAgICAgICAgIHBCOiAgIE11bHRpcGxpY2FuZCAoNTEyIGJpdHMsIDggcXdvcmRzKQorIyBVc2VzIHJlZ2lzdGVycyByYXgsIHJkeCwgYXJncworIyAgIEIgb3BlcmFuZCBpbiBbcEJdIGFuZCBhbHNvIGluIHg3Li4ueDAKK3N1YiBNVUxfNTEyeDUxMgoreworIG15ICgkcERzdCwgJHBBLCAkcEIsICR4LCAkT1AsICRUTVAsICRwRHN0X28pPUBfOworIG15ICgkcERzdCwgICRwRHN0X28pID0gKCRwRHN0ID1+IG0vKFteK10qKVwrPyguKik/Lyk7CisgbXkgQFg9QCR4OwkjIG1ha2UgYSBjb3B5CisKKyRjb2RlLj08PF9fXzsKKwkgbW92CSgrOCowKSgkcEEpLCAkT1AKKworCSBtb3YJJFhbMF0sICVyYXgKKwkgbXVsCSRPUAkJCSMgcmR4OnJheCA9ICVPUCAqIFswXQorCSBtb3YJJXJheCwgKCskcERzdF9vKzgqMCkoJHBEc3QpCisJIG1vdgklcmR4LCAkWFswXQorX19fCitmb3IobXkgJGk9MTskaTw4OyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwkgbW92CSRYWyRpXSwgJXJheAorCSBtdWwJJE9QCQkJIyByZHg6cmF4ID0gJU9QICogWyRpXQorCSBhZGQJJXJheCwgJFhbJGktMV0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJXJkeCwgJFhbJGldCitfX18KK30KKworZm9yKG15ICRpPTE7JGk8ODskaSsrKSB7CiskY29kZS49PDxfX187CisJIG1vdgkoKzgqJGkpKCRwQSksICRPUAorX19fCisKKwkmTVVMU1RFUF81MTIoXEBYLCAiKCskcERzdF9vKzgqJGkpKCRwRHN0KSIsICRwQiwgJE9QLCAkVE1QKTsKKwlwdXNoKEBYLHNoaWZ0KEBYKSk7Cit9CisKKyRjb2RlLj08PF9fXzsKKwkgbW92CSRYWzBdLCAoKyRwRHN0X28rOCo4KSgkcERzdCkKKwkgbW92CSRYWzFdLCAoKyRwRHN0X28rOCo5KSgkcERzdCkKKwkgbW92CSRYWzJdLCAoKyRwRHN0X28rOCoxMCkoJHBEc3QpCisJIG1vdgkkWFszXSwgKCskcERzdF9vKzgqMTEpKCRwRHN0KQorCSBtb3YJJFhbNF0sICgrJHBEc3Rfbys4KjEyKSgkcERzdCkKKwkgbW92CSRYWzVdLCAoKyRwRHN0X28rOCoxMykoJHBEc3QpCisJIG1vdgkkWFs2XSwgKCskcERzdF9vKzgqMTQpKCRwRHN0KQorCSBtb3YJJFhbN10sICgrJHBEc3Rfbys4KjE1KSgkcERzdCkKK19fXworfQorCisjCisjIG1vbnRfbXVsX2EzYiA6IHN1YnJvdXRpbmUgdG8gY29tcHV0ZSAoU3JjMSAqIFNyYzIpICUgTSAoYWxsIDUxMi1iaXRzKQorIyBJbnB1dDogIHNyYzE6IEFkZHJlc3Mgb2Ygc291cmNlIDE6IHJkaQorIyAgICAgICAgIHNyYzI6IEFkZHJlc3Mgb2Ygc291cmNlIDI6IHJzaQorIyBPdXRwdXQ6IGRzdDogIEFkZHJlc3Mgb2YgZGVzdGluYXRpb246IFtyZWRfcmVzX2FkZHJdCisjICAgIHNyYzIgYW5kIHJlc3VsdCBhbHNvIGluOiByOSwgcjgsIHIxNSwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAKKyMgVGVtcDogICBDbG9iYmVycyBbdG1wMTZdLCBhbGwgcmVnaXN0ZXJzCiskY29kZS49PDxfX187CisudHlwZQltb250X211bF9hM2IsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Cittb250X211bF9hM2I6CisJIworCSMgbXVsdGlwbHkgdG1wID0gc3JjMSAqIHNyYzIKKwkjIEZvciBtdWx0aXBseTogZHN0ID0gcmN4LCBzcmMxID0gcmRpLCBzcmMyID0gcnNpCisJIyBzdGFjayBkZXB0aCBpcyBleHRyYSA4IGZyb20gY2FsbAorX19fCisJJk1VTF81MTJ4NTEyKCIlcnNwKyR0bXAxNl9vZmZzZXQrOCIsICIlcmRpIiwgIiVyc2kiLCBbbWFwKCIlciRfIiwoMTAuLjE1LDguLjkpKV0sICIlcmJwIiwgIiVyYngiKTsKKyRjb2RlLj08PF9fXzsKKwkjCisJIyBEc3QgPSB0bXAgJSBtCisJIyBDYWxsIHJlZHVjZSh0bXAsIG0sIGRhdGEsIGRzdCkKKworCSMgdGFpbCByZWN1cnNpb24gb3B0aW1pemF0aW9uOiBqbXAgdG8gbW9udF9yZWR1Y2UgYW5kIHJldHVybiBmcm9tIHRoZXJlCisJIGptcAltb250X3JlZHVjZQorCSMgY2FsbAltb250X3JlZHVjZQorCSMgcmV0Cisuc2l6ZQltb250X211bF9hM2IsLi1tb250X211bF9hM2IKK19fXworfX19CisKK3t7eworI1NRUl81MTIgTUFDUk8gcERlc3QsIHBBLCB4NywgeDYsIHg1LCB4NCwgeDMsIHgyLCB4MSwgeDAsIHRtcCo0CisjCisjIElucHV0IGluIG1lbW9yeSBbcEFdIGFuZCBhbHNvIGluIHg3Li4ueDAKKyMgVXNlcyBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIHBsdXMgcmF4IGFuZCByZHgKKyMKKyMgVGhpcyB2ZXJzaW9uIGNvbXB1dGVzIGFsbCBvZiB0aGUgb2ZmLWRpYWdvbmFsIHRlcm1zIGludG8gbWVtb3J5LAorIyBhbmQgdGhlbiBpdCBhZGRzIGluIHRoZSBkaWFnb25hbCB0ZXJtcworCitzdWIgU1FSXzUxMgoreworIG15ICgkcERzdCwgJHBBLCAkeCwgJEEsICR0bXAsICR4NywgJHg2LCAkcERzdF9vKT1AXzsKKyBteSAoJHBEc3QsICAkcERzdF9vKSA9ICgkcERzdCA9fiBtLyhbXitdKilcKz8oLiopPy8pOworIG15IEBYPUAkeDsJIyBtYWtlIGEgY29weQorJGNvZGUuPTw8X19fOworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisJIyBmaXJzdCBwYXNzIDAxLi4uMDcKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLQorCSBtb3YJJFhbMF0sICRBCisKKwkgbW92CSRYWzFdLCVyYXgKKwkgbXVsCSRBCisJIG1vdgklcmF4LCAoKyRwRHN0X28rOCoxKSgkcERzdCkKK19fXworZm9yKG15ICRpPTI7JGk8ODskaSsrKSB7CiskY29kZS49PDxfX187CisJIG1vdgklcmR4LCAkWFskaS0yXQorCSBtb3YJJFhbJGldLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFskaS0yXQorCSBhZGMJXCQwLCAlcmR4CitfX18KK30KKyRjb2RlLj08PF9fXzsKKwkgbW92CSVyZHgsICR4NworCisJIG1vdgkkWFswXSwgKCskcERzdF9vKzgqMikoJHBEc3QpCisKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLQorCSMgc2Vjb25kIHBhc3MgMTIuLi4xNworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkgbW92CSgrOCoxKSgkcEEpLCAkQQorCisJIG1vdgkoKzgqMikoJHBBKSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbMV0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbMV0sICgrJHBEc3Rfbys4KjMpKCRwRHN0KQorCisJIG1vdgklcmR4LCAkWFswXQorCSBtb3YJKCs4KjMpKCRwQSksJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzJdCisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkWFsyXQorCSBhZGMJXCQwLCAlcmR4CisJIG1vdgkkWFsyXSwgKCskcERzdF9vKzgqNCkoJHBEc3QpCisKKwkgbW92CSVyZHgsICRYWzBdCisJIG1vdgkoKzgqNCkoJHBBKSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbM10KKwkgYWRjCVwkMCwgJXJkeAorCSBhZGQJJFhbMF0sICRYWzNdCisJIGFkYwlcJDAsICVyZHgKKworCSBtb3YJJXJkeCwgJFhbMF0KKwkgbW92CSgrOCo1KSgkcEEpLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFs0XQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJFhbNF0KKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkWFswXQorCSBtb3YJJFhbNl0sJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzVdCisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkWFs1XQorCSBhZGMJXCQwLCAlcmR4CisKKwkgbW92CSVyZHgsICRYWzBdCisJIG1vdgkkWFs3XSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJHg3CisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkeDcKKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkWFsxXQorCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0KKwkjIHRoaXJkIHBhc3MgMjMuLi4yNworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisJIG1vdgkoKzgqMikoJHBBKSwgJEEKKworCSBtb3YJKCs4KjMpKCRwQSksJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzNdCisJIGFkYwlcJDAsICVyZHgKKwkgbW92CSRYWzNdLCAoKyRwRHN0X28rOCo1KSgkcERzdCkKKworCSBtb3YJJXJkeCwgJFhbMF0KKwkgbW92CSgrOCo0KSgkcEEpLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFs0XQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJFhbNF0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbNF0sICgrJHBEc3Rfbys4KjYpKCRwRHN0KQorCisJIG1vdgklcmR4LCAkWFswXQorCSBtb3YJKCs4KjUpKCRwQSksJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzVdCisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkWFs1XQorCSBhZGMJXCQwLCAlcmR4CisKKwkgbW92CSVyZHgsICRYWzBdCisJIG1vdgkkWFs2XSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJHg3CisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkeDcKKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkWFswXQorCSBtb3YJJFhbN10sJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzFdCisJIGFkYwlcJDAsICVyZHgKKwkgYWRkCSRYWzBdLCAkWFsxXQorCSBhZGMJXCQwLCAlcmR4CisKKwkgbW92CSVyZHgsICRYWzJdCisKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLQorCSMgZm91cnRoIHBhc3MgMzQuLi4zNworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkgbW92CSgrOCozKSgkcEEpLCAkQQorCisJIG1vdgkoKzgqNCkoJHBBKSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbNV0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbNV0sICgrJHBEc3Rfbys4KjcpKCRwRHN0KQorCisJIG1vdgklcmR4LCAkWFswXQorCSBtb3YJKCs4KjUpKCRwQSksJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICR4NworCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJHg3CisJIGFkYwlcJDAsICVyZHgKKwkgbW92CSR4NywgKCskcERzdF9vKzgqOCkoJHBEc3QpCisKKwkgbW92CSVyZHgsICRYWzBdCisJIG1vdgkkWFs2XSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbMV0KKwkgYWRjCVwkMCwgJXJkeAorCSBhZGQJJFhbMF0sICRYWzFdCisJIGFkYwlcJDAsICVyZHgKKworCSBtb3YJJXJkeCwgJFhbMF0KKwkgbW92CSRYWzddLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFsyXQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJFhbMl0KKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkWFs1XQorCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0KKwkjIGZpZnRoIHBhc3MgNDUuLi40NworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisJIG1vdgkoKzgqNCkoJHBBKSwgJEEKKworCSBtb3YJKCs4KjUpKCRwQSksJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzFdCisJIGFkYwlcJDAsICVyZHgKKwkgbW92CSRYWzFdLCAoKyRwRHN0X28rOCo5KSgkcERzdCkKKworCSBtb3YJJXJkeCwgJFhbMF0KKwkgbW92CSRYWzZdLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFsyXQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJFhbMl0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbMl0sICgrJHBEc3Rfbys4KjEwKSgkcERzdCkKKworCSBtb3YJJXJkeCwgJFhbMF0KKwkgbW92CSRYWzddLCVyYXgKKwkgbXVsCSRBCisJIGFkZAklcmF4LCAkWFs1XQorCSBhZGMJXCQwLCAlcmR4CisJIGFkZAkkWFswXSwgJFhbNV0KKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkWFsxXQorCisJIyAtLS0tLS0tLS0tLS0tLS0tLS0KKwkjIHNpeHRoIHBhc3MgNTYuLi41NworCSMgLS0tLS0tLS0tLS0tLS0tLS0tCisJIG1vdgkoKzgqNSkoJHBBKSwgJEEKKworCSBtb3YJJFhbNl0sJXJheAorCSBtdWwJJEEKKwkgYWRkCSVyYXgsICRYWzVdCisJIGFkYwlcJDAsICVyZHgKKwkgbW92CSRYWzVdLCAoKyRwRHN0X28rOCoxMSkoJHBEc3QpCisKKwkgbW92CSVyZHgsICRYWzBdCisJIG1vdgkkWFs3XSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbMV0KKwkgYWRjCVwkMCwgJXJkeAorCSBhZGQJJFhbMF0sICRYWzFdCisJIGFkYwlcJDAsICVyZHgKKwkgbW92CSRYWzFdLCAoKyRwRHN0X28rOCoxMikoJHBEc3QpCisKKwkgbW92CSVyZHgsICRYWzJdCisKKwkjIC0tLS0tLS0tLS0tLS0tLS0tLQorCSMgc2V2ZW50aCBwYXNzIDY3CisJIyAtLS0tLS0tLS0tLS0tLS0tLS0KKwkgbW92CSRYWzZdLCAkQQorCisJIG1vdgkkWFs3XSwlcmF4CisJIG11bAkkQQorCSBhZGQJJXJheCwgJFhbMl0KKwkgYWRjCVwkMCwgJXJkeAorCSBtb3YJJFhbMl0sICgrJHBEc3Rfbys4KjEzKSgkcERzdCkKKworCSBtb3YJJXJkeCwgKCskcERzdF9vKzgqMTQpKCRwRHN0KQorCisJIyBzdGFydCBmaW5hbGl6ZSAoYWRkCWluIHNxdWFyZXMsIGFuZCBkb3VibGUgb2ZmLXRlcm1zKQorCSBtb3YJKCskcERzdF9vKzgqMSkoJHBEc3QpLCAkWFswXQorCSBtb3YJKCskcERzdF9vKzgqMikoJHBEc3QpLCAkWFsxXQorCSBtb3YJKCskcERzdF9vKzgqMykoJHBEc3QpLCAkWFsyXQorCSBtb3YJKCskcERzdF9vKzgqNCkoJHBEc3QpLCAkWFszXQorCSBtb3YJKCskcERzdF9vKzgqNSkoJHBEc3QpLCAkWFs0XQorCSBtb3YJKCskcERzdF9vKzgqNikoJHBEc3QpLCAkWFs1XQorCisJIG1vdgkoKzgqMykoJHBBKSwgJXJheAorCSBtdWwJJXJheAorCSBtb3YJJXJheCwgJHg2CisJIG1vdgklcmR4LCAkWFs2XQorCisJIGFkZAkkWFswXSwgJFhbMF0KKwkgYWRjCSRYWzFdLCAkWFsxXQorCSBhZGMJJFhbMl0sICRYWzJdCisJIGFkYwkkWFszXSwgJFhbM10KKwkgYWRjCSRYWzRdLCAkWFs0XQorCSBhZGMJJFhbNV0sICRYWzVdCisJIGFkYwlcJDAsICRYWzZdCisKKwkgbW92CSgrOCowKSgkcEEpLCAlcmF4CisJIG11bAklcmF4CisJIG1vdgklcmF4LCAoKyRwRHN0X28rOCowKSgkcERzdCkKKwkgbW92CSVyZHgsICRBCisKKwkgbW92CSgrOCoxKSgkcEEpLCAlcmF4CisJIG11bAklcmF4CisKKwkgYWRkCSRBLCAkWFswXQorCSBhZGMJJXJheCwgJFhbMV0KKwkgYWRjCVwkMCwgJXJkeAorCisJIG1vdgklcmR4LCAkQQorCSBtb3YJJFhbMF0sICgrJHBEc3Rfbys4KjEpKCRwRHN0KQorCSBtb3YJJFhbMV0sICgrJHBEc3Rfbys4KjIpKCRwRHN0KQorCisJIG1vdgkoKzgqMikoJHBBKSwgJXJheAorCSBtdWwJJXJheAorCisJIGFkZAkkQSwgJFhbMl0KKwkgYWRjCSVyYXgsICRYWzNdCisJIGFkYwlcJDAsICVyZHgKKworCSBtb3YJJXJkeCwgJEEKKworCSBtb3YJJFhbMl0sICgrJHBEc3Rfbys4KjMpKCRwRHN0KQorCSBtb3YJJFhbM10sICgrJHBEc3Rfbys4KjQpKCRwRHN0KQorCisJIHhvcgkkdG1wLCAkdG1wCisJIGFkZAkkQSwgJFhbNF0KKwkgYWRjCSR4NiwgJFhbNV0KKwkgYWRjCVwkMCwgJHRtcAorCisJIG1vdgkkWFs0XSwgKCskcERzdF9vKzgqNSkoJHBEc3QpCisJIG1vdgkkWFs1XSwgKCskcERzdF9vKzgqNikoJHBEc3QpCisKKwkjICUldG1wIGhhcyAwLzEgaW4gY29sdW1uIDcKKwkjICUlQTYgaGFzIGEgZnVsbCB2YWx1ZSBpbiBjb2x1bW4gNworCisJIG1vdgkoKyRwRHN0X28rOCo3KSgkcERzdCksICRYWzBdCisJIG1vdgkoKyRwRHN0X28rOCo4KSgkcERzdCksICRYWzFdCisJIG1vdgkoKyRwRHN0X28rOCo5KSgkcERzdCksICRYWzJdCisJIG1vdgkoKyRwRHN0X28rOCoxMCkoJHBEc3QpLCAkWFszXQorCSBtb3YJKCskcERzdF9vKzgqMTEpKCRwRHN0KSwgJFhbNF0KKwkgbW92CSgrJHBEc3Rfbys4KjEyKSgkcERzdCksICRYWzVdCisJIG1vdgkoKyRwRHN0X28rOCoxMykoJHBEc3QpLCAkeDYKKwkgbW92CSgrJHBEc3Rfbys4KjE0KSgkcERzdCksICR4NworCisJIG1vdgkkWFs3XSwgJXJheAorCSBtdWwJJXJheAorCSBtb3YJJXJheCwgJFhbN10KKwkgbW92CSVyZHgsICRBCisKKwkgYWRkCSRYWzBdLCAkWFswXQorCSBhZGMJJFhbMV0sICRYWzFdCisJIGFkYwkkWFsyXSwgJFhbMl0KKwkgYWRjCSRYWzNdLCAkWFszXQorCSBhZGMJJFhbNF0sICRYWzRdCisJIGFkYwkkWFs1XSwgJFhbNV0KKwkgYWRjCSR4NiwgJHg2CisJIGFkYwkkeDcsICR4NworCSBhZGMJXCQwLCAkQQorCisJIGFkZAkkdG1wLCAkWFswXQorCisJIG1vdgkoKzgqNCkoJHBBKSwgJXJheAorCSBtdWwJJXJheAorCisJIGFkZAkkWFs2XSwgJFhbMF0KKwkgYWRjCSVyYXgsICRYWzFdCisJIGFkYwlcJDAsICVyZHgKKworCSBtb3YJJXJkeCwgJHRtcAorCisJIG1vdgkkWFswXSwgKCskcERzdF9vKzgqNykoJHBEc3QpCisJIG1vdgkkWFsxXSwgKCskcERzdF9vKzgqOCkoJHBEc3QpCisKKwkgbW92CSgrOCo1KSgkcEEpLCAlcmF4CisJIG11bAklcmF4CisKKwkgYWRkCSR0bXAsICRYWzJdCisJIGFkYwklcmF4LCAkWFszXQorCSBhZGMJXCQwLCAlcmR4CisKKwkgbW92CSVyZHgsICR0bXAKKworCSBtb3YJJFhbMl0sICgrJHBEc3Rfbys4KjkpKCRwRHN0KQorCSBtb3YJJFhbM10sICgrJHBEc3Rfbys4KjEwKSgkcERzdCkKKworCSBtb3YJKCs4KjYpKCRwQSksICVyYXgKKwkgbXVsCSVyYXgKKworCSBhZGQJJHRtcCwgJFhbNF0KKwkgYWRjCSVyYXgsICRYWzVdCisJIGFkYwlcJDAsICVyZHgKKworCSBtb3YJJFhbNF0sICgrJHBEc3Rfbys4KjExKSgkcERzdCkKKwkgbW92CSRYWzVdLCAoKyRwRHN0X28rOCoxMikoJHBEc3QpCisKKwkgYWRkCSVyZHgsICR4NgorCSBhZGMJJFhbN10sICR4NworCSBhZGMJXCQwLCAkQQorCisJIG1vdgkkeDYsICgrJHBEc3Rfbys4KjEzKSgkcERzdCkKKwkgbW92CSR4NywgKCskcERzdF9vKzgqMTQpKCRwRHN0KQorCSBtb3YJJEEsICgrJHBEc3Rfbys4KjE1KSgkcERzdCkKK19fXworfQorCisjCisjIHNxcl9yZWR1Y2U6IHN1YnJvdXRpbmUgdG8gY29tcHV0ZSBSZXN1bHQgPSByZWR1Y2UoUmVzdWx0ICogUmVzdWx0KQorIworIyBpbnB1dCBhbmQgcmVzdWx0IGFsc28gaW46IHI5LCByOCwgcjE1LCByMTQsIHIxMywgcjEyLCByMTEsIHIxMAorIworJGNvZGUuPTw8X19fOworLnR5cGUJc3FyX3JlZHVjZSxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3Nxcl9yZWR1Y2U6CisJIG1vdgkoKyRwUmVzdWx0X29mZnNldCs4KSglcnNwKSwgJXJjeAorX19fCisJJlNRUl81MTIoIiVyc3ArJHRtcDE2X29mZnNldCs4IiwgIiVyY3giLCBbbWFwKCIlciRfIiwoMTAuLjE1LDguLjkpKV0sICIlcmJ4IiwgIiVyYnAiLCAiJXJzaSIsICIlcmRpIik7CiskY29kZS49PDxfX187CisJIyB0YWlsIHJlY3Vyc2lvbiBvcHRpbWl6YXRpb246IGptcCB0byBtb250X3JlZHVjZSBhbmQgcmV0dXJuIGZyb20gdGhlcmUKKwkgam1wCW1vbnRfcmVkdWNlCisJIyBjYWxsCW1vbnRfcmVkdWNlCisJIyByZXQKKy5zaXplCXNxcl9yZWR1Y2UsLi1zcXJfcmVkdWNlCitfX18KK319fQorCisjCisjIE1BSU4gRlVOQ1RJT04KKyMKKworI21vZF9leHBfNTEyKFVJTlQ2NCAqcmVzdWx0LCAvKiA1MTIgYml0cywgOCBxd29yZHMgKi8KKyMgICAgICAgICAgIFVJTlQ2NCAqZywgICAvKiA1MTIgYml0cywgOCBxd29yZHMgKi8KKyMgICAgICAgICAgIFVJTlQ2NCAqZXhwLCAvKiA1MTIgYml0cywgOCBxd29yZHMgKi8KKyMgICAgICAgICAgIHN0cnVjdCBtb2RfY3R4XzUxMiAqZGF0YSkKKworIyB3aW5kb3cgc2l6ZSA9IDUKKyMgdGFibGUgc2l6ZSA9IDJeNSA9IDMyCisjdGFibGVfZW50cmllcwllcXUJMzIKKyN0YWJsZV9zaXplCWVxdQl0YWJsZV9lbnRyaWVzICogOAorJGNvZGUuPTw8X19fOworLmdsb2JsCW1vZF9leHBfNTEyCisudHlwZQltb2RfZXhwXzUxMixcQGZ1bmN0aW9uLDQKK21vZF9leHBfNTEyOgorCSBwdXNoCSVyYnAKKwkgcHVzaAklcmJ4CisJIHB1c2gJJXIxMgorCSBwdXNoCSVyMTMKKwkgcHVzaAklcjE0CisJIHB1c2gJJXIxNQorCisJIyBhZGp1c3Qgc3RhY2sgZG93biBhbmQgdGhlbiBhbGlnbiBpdCB3aXRoIGNhY2hlIGJvdW5kYXJ5CisJIG1vdgklcnNwLCAlcjgKKwkgc3ViCVwkJG1lbV9zaXplLCAlcnNwCisJIGFuZAlcJC02NCwgJXJzcAorCisJIyBzdG9yZSBwcmV2aW91cyBzdGFjayBwb2ludGVyIGFuZCBhcmd1bWVudHMKKwkgbW92CSVyOCwgKCskcnNwX29mZnNldCkoJXJzcCkKKwkgbW92CSVyZGksICgrJHBSZXN1bHRfb2Zmc2V0KSglcnNwKQorCSBtb3YJJXJzaSwgKCskcEdfb2Zmc2V0KSglcnNwKQorCSBtb3YJJXJjeCwgKCskcERhdGFfb2Zmc2V0KSglcnNwKQorLkxib2R5OgorCSMgdHJhbnNmb3JtIGcgaW50byBtb250Z29tZXJ5IHNwYWNlCisJIyBHVCA9IHJlZHVjZShnICogQzIpID0gcmVkdWNlKGcgKiAoMl4yNTYpKQorCSMgcmVkdWNlIGV4cGVjdHMgdG8gaGF2ZSB0aGUgaW5wdXQgaW4gW3RtcDE2XQorCSBweG9yCSV4bW00LCAleG1tNAorCSBtb3ZkcXUJKCsxNiowKSglcnNpKSwgJXhtbTAKKwkgbW92ZHF1CSgrMTYqMSkoJXJzaSksICV4bW0xCisJIG1vdmRxdQkoKzE2KjIpKCVyc2kpLCAleG1tMgorCSBtb3ZkcXUJKCsxNiozKSglcnNpKSwgJXhtbTMKKwkgbW92ZHFhCSV4bW00LCAoKyR0bXAxNl9vZmZzZXQrMTYqMCkoJXJzcCkKKwkgbW92ZHFhCSV4bW00LCAoKyR0bXAxNl9vZmZzZXQrMTYqMSkoJXJzcCkKKwkgbW92ZHFhCSV4bW00LCAoKyR0bXAxNl9vZmZzZXQrMTYqNikoJXJzcCkKKwkgbW92ZHFhCSV4bW00LCAoKyR0bXAxNl9vZmZzZXQrMTYqNykoJXJzcCkKKwkgbW92ZHFhCSV4bW0wLCAoKyR0bXAxNl9vZmZzZXQrMTYqMikoJXJzcCkKKwkgbW92ZHFhCSV4bW0xLCAoKyR0bXAxNl9vZmZzZXQrMTYqMykoJXJzcCkKKwkgbW92ZHFhCSV4bW0yLCAoKyR0bXAxNl9vZmZzZXQrMTYqNCkoJXJzcCkKKwkgbW92ZHFhCSV4bW0zLCAoKyR0bXAxNl9vZmZzZXQrMTYqNSkoJXJzcCkKKworCSMgbG9hZCBwRXhwIGJlZm9yZSByZHggZ2V0cyBibG93biBhd2F5CisJIG1vdmRxdQkoKzE2KjApKCVyZHgpLCAleG1tMAorCSBtb3ZkcXUJKCsxNioxKSglcmR4KSwgJXhtbTEKKwkgbW92ZHF1CSgrMTYqMikoJXJkeCksICV4bW0yCisJIG1vdmRxdQkoKzE2KjMpKCVyZHgpLCAleG1tMworCisJIGxlYQkoKyRHVF9vZmZzZXQpKCVyc3ApLCAlcmJ4CisJIG1vdgklcmJ4LCAoKyRyZWRfcmVzdWx0X2FkZHJfb2Zmc2V0KSglcnNwKQorCSBjYWxsCW1vbnRfcmVkdWNlCisKKwkjIEluaXRpYWxpemUgdG1wID0gQworCSBsZWEJKCskdG1wX29mZnNldCkoJXJzcCksICVyY3gKKwkgeG9yCSVyYXgsICVyYXgKKwkgbW92CSVyYXgsICgrOCowKSglcmN4KQorCSBtb3YJJXJheCwgKCs4KjEpKCVyY3gpCisJIG1vdgklcmF4LCAoKzgqMykoJXJjeCkKKwkgbW92CSVyYXgsICgrOCo0KSglcmN4KQorCSBtb3YJJXJheCwgKCs4KjUpKCVyY3gpCisJIG1vdgklcmF4LCAoKzgqNikoJXJjeCkKKwkgbW92CSVyYXgsICgrOCo3KSglcmN4KQorCSBtb3YJJXJheCwgKCskZXhwX29mZnNldCs4KjgpKCVyc3ApCisJIG1vdnEJXCQxLCAoKzgqMikoJXJjeCkKKworCSBsZWEJKCskZ2FycmF5X29mZnNldCkoJXJzcCksICVyYnAKKwkgbW92CSVyY3gsICVyc2kJCQkjIHBUbXAKKwkgbW92CSVyYnAsICVyZGkJCQkjIEdhcnJheVtdWzBdCitfX18KKworCSZzd2l6emxlKCIlcmRpIiwgIiVyY3giLCAiJXJheCIsICIlcmJ4Iik7CisKKwkjIGZvciAocmF4ID0gMzE7IHJheCAhPSAwOyByYXgtLSkgeworCSMgICAgIHRtcCA9IHJlZHVjZSh0bXAgKiBHKQorCSMgICAgIHN3aXp6bGUocGcsIHRtcCk7CisJIyAgICAgcGcgKz0gMjsgfQorJGNvZGUuPTw8X19fOworCSBtb3YJXCQzMSwgJXJheAorCSBtb3YJJXJheCwgKCskaV9vZmZzZXQpKCVyc3ApCisJIG1vdgklcmJwLCAoKyRwZ19vZmZzZXQpKCVyc3ApCisJIyByc2kgLT4gcFRtcAorCSBtb3YJJXJzaSwgKCskcmVkX3Jlc3VsdF9hZGRyX29mZnNldCkoJXJzcCkKKwkgbW92CSgrOCowKSglcnNpKSwgJXIxMAorCSBtb3YJKCs4KjEpKCVyc2kpLCAlcjExCisJIG1vdgkoKzgqMikoJXJzaSksICVyMTIKKwkgbW92CSgrOCozKSglcnNpKSwgJXIxMworCSBtb3YJKCs4KjQpKCVyc2kpLCAlcjE0CisJIG1vdgkoKzgqNSkoJXJzaSksICVyMTUKKwkgbW92CSgrOCo2KSglcnNpKSwgJXI4CisJIG1vdgkoKzgqNykoJXJzaSksICVyOQoraW5pdF9sb29wOgorCSBsZWEJKCskR1Rfb2Zmc2V0KSglcnNwKSwgJXJkaQorCSBjYWxsCW1vbnRfbXVsX2EzYgorCSBsZWEJKCskdG1wX29mZnNldCkoJXJzcCksICVyc2kKKwkgbW92CSgrJHBnX29mZnNldCkoJXJzcCksICVyYnAKKwkgYWRkCVwkMiwgJXJicAorCSBtb3YJJXJicCwgKCskcGdfb2Zmc2V0KSglcnNwKQorCSBtb3YJJXJzaSwgJXJjeAkJCSMgcmN4ID0gcnNpID0gYWRkciBvZiB0bXAKK19fXworCisJJnN3aXp6bGUoIiVyYnAiLCAiJXJjeCIsICIlcmF4IiwgIiVyYngiKTsKKyRjb2RlLj08PF9fXzsKKwkgbW92CSgrJGlfb2Zmc2V0KSglcnNwKSwgJXJheAorCSBzdWIJXCQxLCAlcmF4CisJIG1vdgklcmF4LCAoKyRpX29mZnNldCkoJXJzcCkKKwkgam5lCWluaXRfbG9vcAorCisJIworCSMgQ29weSBleHBvbmVudCBvbnRvIHN0YWNrCisJIG1vdmRxYQkleG1tMCwgKCskZXhwX29mZnNldCsxNiowKSglcnNwKQorCSBtb3ZkcWEJJXhtbTEsICgrJGV4cF9vZmZzZXQrMTYqMSkoJXJzcCkKKwkgbW92ZHFhCSV4bW0yLCAoKyRleHBfb2Zmc2V0KzE2KjIpKCVyc3ApCisJIG1vdmRxYQkleG1tMywgKCskZXhwX29mZnNldCsxNiozKSglcnNwKQorCisKKwkjCisJIyBEbyBleHBvbmVudGlhdGlvbgorCSMgSW5pdGlhbGl6ZSByZXN1bHQgdG8gR1tleHB7NTExOjUwN31dCisJIG1vdgkoKyRleHBfb2Zmc2V0KzYyKSglcnNwKSwgJWVheAorCSBtb3YJJXJheCwgJXJkeAorCSBzaHIJXCQxMSwgJXJheAorCSBhbmQJXCQweDA3RkYsICVlZHgKKwkgbW92CSVlZHgsICgrJGV4cF9vZmZzZXQrNjIpKCVyc3ApCisJIGxlYQkoKyRnYXJyYXlfb2Zmc2V0KSglcnNwLCVyYXgsMiksICVyc2kKKwkgbW92CSgrJHBSZXN1bHRfb2Zmc2V0KSglcnNwKSwgJXJkeAorX19fCisKKwkmdW5zd2l6emxlKCIlcmR4IiwgIiVyc2kiLCAiJXJicCIsICIlcmJ4IiwgIiVyYXgiKTsKKworCSMKKwkjIExvb3AgdmFyaWFibGVzCisJIyByY3ggPSBbbG9vcF9pZHhdID0gaW5kZXg6IDUxMC01IHRvIDAgYnkgNQorJGNvZGUuPTw8X19fOworCSBtb3ZxCVwkNTA1LCAoKyRsb29wX2lkeF9vZmZzZXQpKCVyc3ApCisKKwkgbW92CSgrJHBSZXN1bHRfb2Zmc2V0KSglcnNwKSwgJXJjeAorCSBtb3YJJXJjeCwgKCskcmVkX3Jlc3VsdF9hZGRyX29mZnNldCkoJXJzcCkKKwkgbW92CSgrOCowKSglcmN4KSwgJXIxMAorCSBtb3YJKCs4KjEpKCVyY3gpLCAlcjExCisJIG1vdgkoKzgqMikoJXJjeCksICVyMTIKKwkgbW92CSgrOCozKSglcmN4KSwgJXIxMworCSBtb3YJKCs4KjQpKCVyY3gpLCAlcjE0CisJIG1vdgkoKzgqNSkoJXJjeCksICVyMTUKKwkgbW92CSgrOCo2KSglcmN4KSwgJXI4CisJIG1vdgkoKzgqNykoJXJjeCksICVyOQorCSBqbXAJc3FyXzIKKworbWFpbl9sb29wX2EzYjoKKwkgY2FsbAlzcXJfcmVkdWNlCisJIGNhbGwJc3FyX3JlZHVjZQorCSBjYWxsCXNxcl9yZWR1Y2UKK3Nxcl8yOgorCSBjYWxsCXNxcl9yZWR1Y2UKKwkgY2FsbAlzcXJfcmVkdWNlCisKKwkjCisJIyBEbyBtdWx0aXBseSwgZmlyc3QgbG9vayB1cCBwcm9wZXIgdmFsdWUgaW4gR2FycmF5CisJIG1vdgkoKyRsb29wX2lkeF9vZmZzZXQpKCVyc3ApLCAlcmN4CQkJIyBiaXQgaW5kZXgKKwkgbW92CSVyY3gsICVyYXgKKwkgc2hyCVwkNCwgJXJheAkJCSMgcmF4IGlzIHdvcmQgcG9pbnRlcgorCSBtb3YJKCskZXhwX29mZnNldCkoJXJzcCwlcmF4LDIpLCAlZWR4CisJIGFuZAlcJDE1LCAlcmN4CisJIHNocnEJJWNsLCAlcmR4CisJIGFuZAlcJDB4MUYsICVyZHgKKworCSBsZWEJKCskZ2FycmF5X29mZnNldCkoJXJzcCwlcmR4LDIpLCAlcnNpCisJIGxlYQkoKyR0bXBfb2Zmc2V0KSglcnNwKSwgJXJkeAorCSBtb3YJJXJkeCwgJXJkaQorX19fCisKKwkmdW5zd2l6emxlKCIlcmR4IiwgIiVyc2kiLCAiJXJicCIsICIlcmJ4IiwgIiVyYXgiKTsKKwkjIHJkaSA9IHRtcCA9IHBHCisKKwkjCisJIyBDYWxsIG1vZF9tdWxfYTEocERzdCwgIHBTcmMxLCBwU3JjMiwgcE0sIHBEYXRhKQorCSMgICAgICAgICAgICAgICAgIHJlc3VsdCByZXN1bHQgcEcgICAgIE0gICBEYXRhCiskY29kZS49PDxfX187CisJIG1vdgkoKyRwUmVzdWx0X29mZnNldCkoJXJzcCksICVyc2kKKwkgY2FsbAltb250X211bF9hM2IKKworCSMKKwkjIGZpbmlzaCBsb29wCisJIG1vdgkoKyRsb29wX2lkeF9vZmZzZXQpKCVyc3ApLCAlcmN4CisJIHN1YglcJDUsICVyY3gKKwkgbW92CSVyY3gsICgrJGxvb3BfaWR4X29mZnNldCkoJXJzcCkKKwkgamdlCW1haW5fbG9vcF9hM2IKKworCSMKKworZW5kX21haW5fbG9vcF9hM2I6CisJIyB0cmFuc2Zvcm0gcmVzdWx0IG91dCBvZiBNb250Z29tZXJ5IHNwYWNlCisJIyByZXN1bHQgPSByZWR1Y2UocmVzdWx0KQorCSBtb3YJKCskcFJlc3VsdF9vZmZzZXQpKCVyc3ApLCAlcmR4CisJIHB4b3IJJXhtbTQsICV4bW00CisJIG1vdmRxdQkoKzE2KjApKCVyZHgpLCAleG1tMAorCSBtb3ZkcXUJKCsxNioxKSglcmR4KSwgJXhtbTEKKwkgbW92ZHF1CSgrMTYqMikoJXJkeCksICV4bW0yCisJIG1vdmRxdQkoKzE2KjMpKCVyZHgpLCAleG1tMworCSBtb3ZkcWEJJXhtbTQsICgrJHRtcDE2X29mZnNldCsxNio0KSglcnNwKQorCSBtb3ZkcWEJJXhtbTQsICgrJHRtcDE2X29mZnNldCsxNio1KSglcnNwKQorCSBtb3ZkcWEJJXhtbTQsICgrJHRtcDE2X29mZnNldCsxNio2KSglcnNwKQorCSBtb3ZkcWEJJXhtbTQsICgrJHRtcDE2X29mZnNldCsxNio3KSglcnNwKQorCSBtb3ZkcWEJJXhtbTAsICgrJHRtcDE2X29mZnNldCsxNiowKSglcnNwKQorCSBtb3ZkcWEJJXhtbTEsICgrJHRtcDE2X29mZnNldCsxNioxKSglcnNwKQorCSBtb3ZkcWEJJXhtbTIsICgrJHRtcDE2X29mZnNldCsxNioyKSglcnNwKQorCSBtb3ZkcWEJJXhtbTMsICgrJHRtcDE2X29mZnNldCsxNiozKSglcnNwKQorCSBjYWxsCW1vbnRfcmVkdWNlCisKKwkjIElmIHJlc3VsdCA+IG0sIHN1YnJhY3QgbQorCSMgbG9hZCByZXN1bHQgaW50byByMTU6cjgKKwkgbW92CSgrJHBSZXN1bHRfb2Zmc2V0KSglcnNwKSwgJXJheAorCSBtb3YJKCs4KjApKCVyYXgpLCAlcjgKKwkgbW92CSgrOCoxKSglcmF4KSwgJXI5CisJIG1vdgkoKzgqMikoJXJheCksICVyMTAKKwkgbW92CSgrOCozKSglcmF4KSwgJXIxMQorCSBtb3YJKCs4KjQpKCVyYXgpLCAlcjEyCisJIG1vdgkoKzgqNSkoJXJheCksICVyMTMKKwkgbW92CSgrOCo2KSglcmF4KSwgJXIxNAorCSBtb3YJKCs4KjcpKCVyYXgpLCAlcjE1CisKKwkjIHN1YnRyYWN0IG0KKwkgbW92CSgrJHBEYXRhX29mZnNldCkoJXJzcCksICVyYngKKwkgYWRkCVwkJE0sICVyYngKKworCSBzdWIJKCs4KjApKCVyYngpLCAlcjgKKwkgc2JiCSgrOCoxKSglcmJ4KSwgJXI5CisJIHNiYgkoKzgqMikoJXJieCksICVyMTAKKwkgc2JiCSgrOCozKSglcmJ4KSwgJXIxMQorCSBzYmIJKCs4KjQpKCVyYngpLCAlcjEyCisJIHNiYgkoKzgqNSkoJXJieCksICVyMTMKKwkgc2JiCSgrOCo2KSglcmJ4KSwgJXIxNAorCSBzYmIJKCs4KjcpKCVyYngpLCAlcjE1CisKKwkjIGlmIENhcnJ5IGlzIGNsZWFyLCByZXBsYWNlIHJlc3VsdCB3aXRoIGRpZmZlcmVuY2UKKwkgbW92CSgrOCowKSglcmF4KSwgJXJzaQorCSBtb3YJKCs4KjEpKCVyYXgpLCAlcmRpCisJIG1vdgkoKzgqMikoJXJheCksICVyY3gKKwkgbW92CSgrOCozKSglcmF4KSwgJXJkeAorCSBjbW92bmMJJXI4LCAlcnNpCisJIGNtb3ZuYwklcjksICVyZGkKKwkgY21vdm5jCSVyMTAsICVyY3gKKwkgY21vdm5jCSVyMTEsICVyZHgKKwkgbW92CSVyc2ksICgrOCowKSglcmF4KQorCSBtb3YJJXJkaSwgKCs4KjEpKCVyYXgpCisJIG1vdgklcmN4LCAoKzgqMikoJXJheCkKKwkgbW92CSVyZHgsICgrOCozKSglcmF4KQorCisJIG1vdgkoKzgqNCkoJXJheCksICVyc2kKKwkgbW92CSgrOCo1KSglcmF4KSwgJXJkaQorCSBtb3YJKCs4KjYpKCVyYXgpLCAlcmN4CisJIG1vdgkoKzgqNykoJXJheCksICVyZHgKKwkgY21vdm5jCSVyMTIsICVyc2kKKwkgY21vdm5jCSVyMTMsICVyZGkKKwkgY21vdm5jCSVyMTQsICVyY3gKKwkgY21vdm5jCSVyMTUsICVyZHgKKwkgbW92CSVyc2ksICgrOCo0KSglcmF4KQorCSBtb3YJJXJkaSwgKCs4KjUpKCVyYXgpCisJIG1vdgklcmN4LCAoKzgqNikoJXJheCkKKwkgbW92CSVyZHgsICgrOCo3KSglcmF4KQorCisJIG1vdgkoKyRyc3Bfb2Zmc2V0KSglcnNwKSwgJXJzaQorCSBtb3YJMCglcnNpKSwlcjE1CisJIG1vdgk4KCVyc2kpLCVyMTQKKwkgbW92CTE2KCVyc2kpLCVyMTMKKwkgbW92CTI0KCVyc2kpLCVyMTIKKwkgbW92CTMyKCVyc2kpLCVyYngKKwkgbW92CTQwKCVyc2kpLCVyYnAKKwkgbGVhCTQ4KCVyc2kpLCVyc3AKKy5MZXBpbG9ndWU6CisJIHJldAorLnNpemUgbW9kX2V4cF81MTIsIC4gLSBtb2RfZXhwXzUxMgorX19fCisKK2lmICgkd2luNjQpIHsKKyMgRVhDRVBUSU9OX0RJU1BPU0lUSU9OIGhhbmRsZXIgKEVYQ0VQVElPTl9SRUNPUkQgKnJlYyxVTE9ORzY0IGZyYW1lLAorIwkJQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVSX0NPTlRFWFQgKmRpc3ApCitteSAkcmVjPSIlcmN4IjsKK215ICRmcmFtZT0iJXJkeCI7CitteSAkY29udGV4dD0iJXI4IjsKK215ICRkaXNwPSIlcjkiOworCiskY29kZS49PDxfX187CisuZXh0ZXJuCV9faW1wX1J0bFZpcnR1YWxVbndpbmQKKy50eXBlCW1vZF9leHBfNTEyX3NlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Cittb2RfZXhwXzUxMl9zZV9oYW5kbGVyOgorCXB1c2gJJXJzaQorCXB1c2gJJXJkaQorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXB1c2hmcQorCXN1YglcJDY0LCVyc3AKKworCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJheAorCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAorCisJbGVhCS5MYm9keSglcmlwKSwlcjEwCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8cHJvbG9ndWUgbGFiZWwKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCWxlYQkuTGVwaWxvZ3VlKCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcD49ZXBpbG9ndWUgbGFiZWwKKwlqYWUJLkxpbl9wcm9sb2d1ZQorCisJbW92CSRyc3Bfb2Zmc2V0KCVyYXgpLCVyYXgJIyBwdWxsIHNhdmVkIFJzcAorCisJbW92CTMyKCVyYXgpLCVyYngKKwltb3YJNDAoJXJheCksJXJicAorCW1vdgkyNCglcmF4KSwlcjEyCisJbW92CTE2KCVyYXgpLCVyMTMKKwltb3YJOCglcmF4KSwlcjE0CisJbW92CTAoJXJheCksJXIxNQorCWxlYQk0OCglcmF4KSwlcmF4CisJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCisJbW92CSVyMTIsMjE2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEyCisJbW92CSVyMTMsMjI0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCisJbW92CSVyMTQsMjMyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE0CisJbW92CSVyMTUsMjQwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE1CisKKy5MaW5fcHJvbG9ndWU6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCQxNTQsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQltb2RfZXhwXzUxMl9zZV9oYW5kbGVyLC4tbW9kX2V4cF81MTJfc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQkuTFNFSF9iZWdpbl9tb2RfZXhwXzUxMgorCS5ydmEJLkxTRUhfZW5kX21vZF9leHBfNTEyCisJLnJ2YQkuTFNFSF9pbmZvX21vZF9leHBfNTEyCisKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKKy5MU0VIX2luZm9fbW9kX2V4cF81MTI6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJbW9kX2V4cF81MTJfc2VfaGFuZGxlcgorX19fCit9CisKK3N1YiByZWdfcGFydCB7CitteSAoJHJlZywkY29udik9QF87CisgICAgaWYgKCRyZWcgPX4gLyVyWzAtOV0rLykJeyAkcmVnIC49ICRjb252OyB9CisgICAgZWxzaWYgKCRjb252IGVxICJiIikJeyAkcmVnID1+IHMvJVtlcl0oW154XSspeD8vJSQxbC87CX0KKyAgICBlbHNpZiAoJGNvbnYgZXEgInciKQl7ICRyZWcgPX4gcy8lW2VyXSguKykvJSQxLzsJCX0KKyAgICBlbHNpZiAoJGNvbnYgZXEgImQiKQl7ICRyZWcgPX4gcy8lW2VyXSguKykvJWUkMS87CQl9CisgICAgcmV0dXJuICRyZWc7Cit9CisKKyRjb2RlID1+IHMvKCVbYS16MC05XSspIyhbYndkXSkvcmVnX3BhcnQoJDEsJDIpL2dlbTsKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworJGNvZGUgPX4gcy8oXChcK1teKV0rXCkpL2V2YWwgJDEvZ2VtOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL3BhcmlzYy1tb250LnBsIGIvY3J5cHRvL2JuL2FzbS9wYXJpc2MtbW9udC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc2NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2JuL2FzbS9wYXJpc2MtbW9udC5wbApAQCAtMCwwICsxLDk5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIE9uIFBBLTcxMDBMQyB0aGlzIG1vZHVsZSBwZXJmb3JtcyB+OTAtNTAlIGJldHRlciwgbGVzcyBmb3IgbG9uZ2VyCisjIGtleXMsIHRoYW4gY29kZSBnZW5lcmF0ZWQgYnkgZ2NjIDMuMiBmb3IgUEEtUklTQyAxLjEuIExhdHRlciBtZWFucworIyB0aGF0IGNvbXBpbGVyIHV0aWxpemVkIHhtcHl1IGluc3RydWN0aW9uIHRvIHBlcmZvcm0gMzJ4MzI9NjQtYml0CisjIG11bHRpcGxpY2F0aW9uLCB3aGljaCBpbiB0dXJuIG1lYW5zIHRoYXQgImJhc2VsaW5lIiBwZXJmb3JtYW5jZSB3YXMKKyMgb3B0aW1hbCBpbiByZXNwZWN0IHRvIGluc3RydWN0aW9uIHNldCBjYXBhYmlsaXRpZXMuIEZhaXIgY29tcGFyaXNvbgorIyB3aXRoIHZlbmRvciBjb21waWxlciBpcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBPcGVuU1NMIGRvZXNuJ3QgZGVmaW5lCisjIEJOX0xMT05HIFtwcmVzdW1hYmx5XSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCB3aGljaCBkcml2ZXMgY29tcGlsZXIKKyMgdG93YXJkIDQgdGltZXMgMTZ4MTY9MzItYml0IG11bHRpcGxpY2F0b25zIFtwbHVzIGNvbXBsZW1lbnRhcnkKKyMgc2hpZnRzIGFuZCBhZGRpdGlvbnNdIGluc3RlYWQuIFRoaXMgbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIG9ic2VydmUKKyMgc2V2ZXJhbCB0aW1lcyBpbXByb3ZlbWVudCBvdmVyIGNvZGUgZ2VuZXJhdGVkIGJ5IHZlbmRvciBjb21waWxlcgorIyBmb3IgUEEtUklTQyAxLjEsIGJ1dCB0aGUgImJhc2VsaW5lIiBpcyBmYXIgZnJvbSBvcHRpbWFsLiBUaGUgYWN0dWFsCisjIGltcHJvdmVtZW50IGNvZWZmaWNpZW50IHdhcyBuZXZlciBjb2xsZWN0ZWQgb24gUEEtNzEwMExDLCBvciBhbnkKKyMgb3RoZXIgMS4xIENQVSwgYmVjYXVzZSBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIHN1Y2ggbWFjaGluZSB3aXRoCisjIHZlbmRvciBjb21waWxlci4gQnV0IHRvIGdpdmUgeW91IGEgdGFzdGUsIFBBLVJJU0MgMS4xIGNvZGUgcGF0aAorIyByZXBvcnRlZGx5IG91dHBlcmZvcm1lZCBjb2RlIGdlbmVyYXRlZCBieSBjYyArREExLjEgK08zIGJ5IGZhY3RvcgorIyBvZiB+NXggb24gUEEtODYwMC4KKyMKKyMgT24gUEEtUklTQyAyLjAgaXQgaGFzIHRvIGNvbXBldGUgd2l0aCBwYS1yaXNjMltXXS5zLCB3aGljaCBpcworIyByZXBvcnRlZGx5IH4yeCBmYXN0ZXIgdGhhbiB2ZW5kb3IgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUgW2FjY29yZGluZworIyB0byBjb21tZW50IGluIHBhLXJpc2MyW1ddLnNdLiBIZXJlIGNvbWVzIGEgY2F0Y2guIEV4ZWN1dGlvbiBjb3JlIG9mCisjIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYWN0dWFsbHkgMzItYml0IG9uZSwgaW4gdGhlIHNlbnNlIHRoYXQgaXQKKyMgb3BlcmF0ZXMgb24gMzItYml0IHZhbHVlcy4gQnV0IHBhLXJpc2MyW1ddLnMgb3BlcmF0ZXMgb24gYXJyYXlzIG9mCisjIDY0LWJpdCBCTl9MT05Hcy4uLiBIb3cgZG8gdGhleSBpbnRlcm9wZXJhdGUgdGhlbj8gTm8gcHJvYmxlbS4gVGhpcworIyBtb2R1bGUgcGlja3MgaGFsdmVzIG9mIDY0LWJpdCB2YWx1ZXMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcHJldGVuZHMKKyMgdGhleSB3ZXJlIDMyLWJpdCBCTl9MT05Hcy4gQnV0IGNhbiAzMi1iaXQgY29yZSBjb21wZXRlIHdpdGggInB1cmUiCisjIDY0LWJpdCBjb2RlIHN1Y2ggYXMgcGEtcmlzYzJbV10ucyB0aGVuPyBXZWxsLCB0aGUgdGhpbmcgaXMgdGhhdAorIyAzMngzMj02NC1iaXQgbXVsdGlwbGljYXRpb24gaXMgdGhlIGJlc3QgZXZlbiBQQS1SSVNDIDIuMCBjYW4gZG8sCisjIGkuZS4gdGhlcmUgaXMgbm8gIndpZGVyIiBtdWx0aXBsaWNhdGlvbiBsaWtlIG9uIG1vc3Qgb3RoZXIgNjQtYml0CisjIHBsYXRmb3Jtcy4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gYmVpbmcgZWZmZWN0aXZlbHkgMzItYml0LCB0aGlzCisjIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zICI2NC1iaXQiIGNvbXB1dGF0aW9uYWwgdGFzayBpbiBzYW1lIGFtb3VudAorIyBvZiBhcml0aG1ldGljIG9wZXJhdGlvbnMsIG1vc3Qgbm90YWJseSBtdWx0aXBsaWNhdGlvbnMuIEl0IHJlcXVpcmVzCisjIG1vcmUgbWVtb3J5IHJlZmVyZW5jZXMsIG1vc3Qgbm90YWJseSB0byB0cFtudW1dLCBidXQgdGhpcyBkb2Vzbid0CisjIHNlZW0gdG8gZXhoYXVzdCBtZW1vcnkgcG9ydCBjYXBhY2l0eS4gQW5kIGluZGVlZCwgZGVkaWNhdGVkIFBBLVJJU0MKKyMgMi4wIGNvZGUgcGF0aCwgcHJvdmlkZXMgdmlydHVhbGx5IHNhbWUgcGVyZm9ybWFuY2UgYXMgcGEtcmlzYzJbV10uczoKKyMgaXQncyB+MTAlIGJldHRlciBmb3Igc2hvcnRlc3Qga2V5IGxlbmd0aCBhbmQgfjEwJSB3b3JzZSBmb3IgbG9uZ2VzdAorIyBvbmUuCisjCisjIEluIGNhc2UgaXQgd2Fzbid0IGNsZWFyLiBUaGUgbW9kdWxlIGhhcyB0d28gZGlzdGluY3QgY29kZSBwYXRoczoKKyMgUEEtUklTQyAxLjEgYW5kIFBBLVJJU0MgMi4wIG9uZXMuIExhdHRlciBmZWF0dXJlcyBjYXJyeS1mcmVlIDY0LWJpdAorIyBhZGRpdGlvbnMgYW5kIDY0LWJpdCBpbnRlZ2VyIGxvYWRzLCBub3QgdG8gbWVudGlvbiBzcGVjaWZpYworIyBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLiBJbiA2NC1iaXQgYnVpbGQgbmF0dXJhbGx5IG9ubHkgMi4wIGNvZGUgcGF0aAorIyBpcyBhc3NlbWJsZWQuIEluIDMyLWJpdCBhcHBsaWNhdGlvbiBjb250ZXh0IGJvdGggY29kZSBwYXRocyBhcmUKKyMgYXNzZW1ibGVkLCBQQS1SSVNDIDIuMCBDUFUgaXMgZGV0ZWN0ZWQgYXQgcnVuLXRpbWUgYW5kIHByb3BlciBwYXRoCisjIGlzIHRha2VuIGF1dG9tYXRpY2FsbHkuIEFsc28sIGluIDMyLWJpdCBidWlsZCB0aGUgbW9kdWxlIGltcG9zZXMKKyMgY291cGxlIG9mIGxpbWl0YXRpb25zOiB2ZWN0b3IgbGVuZ3RocyBoYXMgdG8gYmUgZXZlbiBhbmQgdmVjdG9yCisjIGFkZHJlc3NlcyBoYXMgdG8gYmUgNjQtYml0IGFsaWduZWQuIE5vcm1hbGx5IG5laXRoZXIgaXMgYSBwcm9ibGVtOgorIyBtb3N0IGNvbW1vbiBrZXkgbGVuZ3RocyBhcmUgZXZlbiBhbmQgdmVjdG9ycyBhcmUgY29tbW9ubHkgbWFsbG9jLWVkLAorIyB3aGljaCBlbnN1cmVzIGFsaWdubWVudC4KKyMKKyMgU3BlY2lhbCB0aGFua3MgdG8gcG9sYXJob21lLmNvbSBmb3IgcHJvdmlkaW5nIEhQLVVYIGFjY291bnQgb24KKyMgUEEtUklTQyAxLjEgbWFjaGluZSwgYW5kIHRvIGNvcnJlc3BvbmRlbnQgd2hvIGNob3NlIHRvIHJlbWFpbgorIyBhbm9ueW1vdXMgZm9yIHRlc3RpbmcgdGhlIGNvZGUgb24gUEEtUklTQyAyLjAgbWFjaGluZS4KKwwKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ID0gc2hpZnQ7CisKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJExFVkVMCQk9IjIuMFciOworCSRTSVpFX1QJCT04OworCSRGUkFNRV9NQVJLRVIJPTgwOworCSRTQVZFRF9SUAk9MTY7CisJJFBVU0gJCT0ic3RkIjsKKwkkUFVTSE1BCQk9InN0ZCxtYSI7CisJJFBPUAkJPSJsZGQiOworCSRQT1BNQgkJPSJsZGQsbWIiOworCSRCTl9TWgkJPSRTSVpFX1Q7Cit9IGVsc2UgeworCSRMRVZFTAkJPSIxLjEiOwkjJExFVkVMLj0iXG5cdC5BTExPV1x0Mi4wIjsKKwkkU0laRV9UCQk9NDsKKwkkRlJBTUVfTUFSS0VSCT00ODsKKwkkU0FWRURfUlAJPTIwOworCSRQVVNICQk9InN0dyI7CisJJFBVU0hNQQkJPSJzdHdtIjsKKwkkUE9QCQk9ImxkdyI7CisJJFBPUE1CCQk9Imxkd20iOworCSRCTl9TWgkJPSRTSVpFX1Q7CisJaWYgKG9wZW4gQ09ORiwiPCR7ZGlyfS4uLy4uL29wZW5zc2xjb25mLmgiKSB7CisJICAgIHdoaWxlKDxDT05GPikgeworCQlpZiAobS8jXHMqZGVmaW5lXHMrU0lYVFlfRk9VUl9CSVQvKSB7CisJCSAgICAkQk5fU1o9ODsKKwkJICAgICRMRVZFTD0iMi4wIjsKKwkJICAgIGxhc3Q7CisJCX0KKwkgICAgfQorCSAgICBjbG9zZSBDT05GOworCX0KK30KKworJEZSQU1FPTgqJFNJWkVfVCskRlJBTUVfTUFSS0VSOwkjIDggc2F2ZWQgcmVncyArIGZyYW1lIG1hcmtlcgorCQkJCSMgICAgICAgICAgICAgICAgWysgYXJndW1lbnQgdHJhbnNmZXJdCiskTE9DQUxTPSRGUkFNRS0kRlJBTUVfTUFSS0VSOworJEZSQU1FKz0zMjsJCQkjIGxvY2FsIHZhcmlhYmxlcworCiskdHA9IiVyMzEiOworJHRpMT0iJXIyOSI7CiskdGkwPSIlcjI4IjsKKworJHJwPSIlcjI2IjsKKyRhcD0iJXIyNSI7CiskYnA9IiVyMjQiOworJG5wPSIlcjIzIjsKKyRuMD0iJXIyMiI7CSMgcGFzc2VkIHRocm91Z2ggc3RhY2sgaW4gMzItYml0CiskbnVtPSIlcjIxIjsJIyBwYXNzZWQgdGhyb3VnaCBzdGFjayBpbiAzMi1iaXQKKyRpZHg9IiVyMjAiOworJGFycnN6PSIlcjE5IjsKKworJG5tMT0iJXI3IjsKKyRubTA9IiVyNiI7CiskYWIxPSIlcjUiOworJGFiMD0iJXI0IjsKKworJGZwPSIlcjMiOworJGhpMT0iJXIyIjsKKyRoaTA9IiVyMSI7CisKKyR4ZmVyPSRuMDsJIyBhY2NvbW9kYXRlcyBbLTE2Li4xNV0gb2Zmc2V0IGluIGZsZFtkd11zCisKKyRmbTA9IiVmcjQiOwkkZnRpPSRmbTA7CiskZmJpPSIlZnI1TCI7CiskZm4wPSIlZnI1UiI7CiskZmFpPSIlZnI2IjsJJGZhYjA9IiVmcjciOwkkZmFiMT0iJWZyOCI7CiskZm5pPSIlZnI5IjsJJGZubTA9IiVmcjEwIjsJJGZubTE9IiVmcjExIjsKKworJGNvZGU9PDxfX187CisJLkxFVkVMCSRMRVZFTAorCS5TUEFDRQlcJFRFWFRcJAorCS5TVUJTUEEJXCRDT0RFXCQsUVVBRD0wLEFMSUdOPTgsQUNDRVNTPTB4MkMsQ09ERV9PTkxZCisKKwkuRVhQT1JUCWJuX211bF9tb250LEVOVFJZLEFSR1cwPUdSLEFSR1cxPUdSLEFSR1cyPUdSLEFSR1czPUdSCisJLkFMSUdOCTY0Citibl9tdWxfbW9udAorCS5QUk9DCisJLkNBTExJTkZPCUZSQU1FPWAkRlJBTUUtOCokU0laRV9UYCxOT19DQUxMUyxTQVZFX1JQLFNBVkVfU1AsRU5UUllfR1I9NgorCS5FTlRSWQorCSRQVVNICSVyMiwtJFNBVkVEX1JQKCVzcCkJCTsgc3RhbmRhcmQgcHJvbG9ndWUKKwkkUFVTSE1BCSVyMywkRlJBTUUoJXNwKQorCSRQVVNICSVyNCxgLSRGUkFNRSsxKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjUsYC0kRlJBTUUrMiokU0laRV9UYCglc3ApCisJJFBVU0gJJXI2LGAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNyxgLSRGUkFNRSs0KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjgsYC0kRlJBTUUrNSokU0laRV9UYCglc3ApCisJJFBVU0gJJXI5LGAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTAsYC0kRlJBTUUrNyokU0laRV9UYCglc3ApCisJbGRvCS0kRlJBTUUoJXNwKSwkZnAKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwlsZHcJYC0kRlJBTUVfTUFSS0VSLTRgKCRmcCksJG4wCisJbGR3CWAtJEZSQU1FX01BUktFUi04YCgkZnApLCRudW0KKwlub3AKKwlub3AJCQkJCTsgYWxpZ25tZW50CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJEJOX1NaPT00KTsKKwljb21pY2xyLDw9CTYsJG51bSwlcjAJCTsgYXJlIHZlY3RvcnMgbG9uZyBlbm91Z2g/CisJYgkJTFwkYWJvcnQKKwlsZGkJCTAsJXIyOAkJCTsgc2lnbmFsICJ1bmhhbmRsZWQiCisJYWRkLGV2CQklcjAsJG51bSwkbnVtCQk7IGlzICRudW0gZXZlbj8KKwliCQlMXCRhYm9ydAorCW5vcAorCW9yCQkkYXAsJG5wLCR0aTEKKwlleHRydSw9CQkkdGkxLDMxLDMsJXIwCQk7IGFyZSBhcCBhbmQgbnAgNjQtYml0IGFsaWduZWQ/CisJYgkJTFwkYWJvcnQKKwlub3AKKwlub3AJCQkJCTsgYWxpZ25tZW50CisJbm9wCisKKwlmbGR3cwkJMCgkbjApLCR7Zm4wfQorCWZsZHdzLG1hCTQoJGJwKSwke2ZiaX0JCTsgYnBbMF0KK19fXworJGNvZGUuPTw8X19fIGlmICgkQk5fU1o9PTgpOworCWNvbWliLD4JCTMsJG51bSxMXCRhYm9ydAkJOyBhcmUgdmVjdG9ycyBsb25nIGVub3VnaD8KKwlsZGkJCTAsJXIyOAkJCTsgc2lnbmFsICJ1bmhhbmRsZWQiCisJYWRkbAkJJG51bSwkbnVtLCRudW0JCTsgSSBvcGVyYXRlIG9uIDMyLWJpdCB2YWx1ZXMKKworCWZsZHdzCQk0KCRuMCksJHtmbjB9CQk7IG9ubHkgbG93IHBhcnQgb2YgbjAKKwlmbGR3cwkJNCgkYnApLCR7ZmJpfQkJOyBicFswXSBpbiBmbGlwcGVkIHdvcmQgb3JkZXIKK19fXworJGNvZGUuPTw8X19fOworCWZsZGRzCQkwKCRhcCksJHtmYWl9CQk7IGFwWzAsMV0KKwlmbGRkcwkJMCgkbnApLCR7Zm5pfQkJOyBucFswLDFdCisKKwlzaDJhZGRsCQkkbnVtLCVyMCwkYXJyc3oKKwlsZGkJCTMxLCRoaTAKKwlsZG8JCTM2KCRhcnJzeiksJGhpMQkJOyBzcGFjZSBmb3IgdHBbbnVtKzFdCisJYW5kY20JCSRoaTEsJGhpMCwkaGkxCQk7IGFsaWduCisJYWRkbAkJJGhpMSwlc3AsJXNwCisJJFBVU0gJCSRmcCwtJFNJWkVfVCglc3ApCisKKwlsZG8JCWAkTE9DQUxTKzE2YCgkZnApLCR4ZmVyCisJbGRvCQlgJExPQ0FMUyszMis0YCgkZnApLCR0cAorCisJeG1weXUJCSR7ZmFpfUwsJHtmYml9LCR7ZmFiMH0JOyBhcFswXSpicFswXQorCXhtcHl1CQkke2ZhaX1SLCR7ZmJpfSwke2ZhYjF9CTsgYXBbMV0qYnBbMF0KKwl4bXB5dQkJJHtmbjB9LCR7ZmFiMH1SLCR7Zm0wfQorCisJYWRkbAkJJGFycnN6LCRhcCwkYXAJCTsgcG9pbnQgYXQgdGhlIGVuZAorCWFkZGwJCSRhcnJzeiwkbnAsJG5wCisJc3ViaQkJMCwkYXJyc3osJGlkeAkJOyBqPTAKKwlsZG8JCTgoJGlkeCksJGlkeAkJOyBqKysrKworCisJeG1weXUJCSR7Zm5pfUwsJHtmbTB9Uiwke2ZubTB9CTsgbnBbMF0qbQorCXhtcHl1CQkke2ZuaX1SLCR7Zm0wfVIsJHtmbm0xfQk7IG5wWzFdKm0KKwlmc3RkcwkJJHtmYWIwfSwtMTYoJHhmZXIpCisJZnN0ZHMJCSR7Zm5tMH0sLTgoJHhmZXIpCisJZnN0ZHMJCSR7ZmFiMX0sMCgkeGZlcikKKwlmc3RkcwkJJHtmbm0xfSw4KCR4ZmVyKQorCSBmbGRkeAkJJGlkeCgkYXApLCR7ZmFpfQk7IGFwWzIsM10KKwkgZmxkZHgJCSRpZHgoJG5wKSwke2ZuaX0JOyBucFsyLDNdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJEJOX1NaPT00KTsKKwltdGN0bAkJJGhpMCwlY3IxMQkJOyAkaGkwIHN0aWxsIGhvbGRzIDMxCisJZXh0cmQsdSwqPQkkaGkwLCVzYXIsMSwkaGkwCTsgZXhlY3V0ZXMgb24gUEEtUklTQyAxLjAKKwliCQlMXCRwYXJpc2MxMQorCW5vcAorX19fCiskY29kZS49PDxfX187CQkJCQkjIFBBLVJJU0MgMi4wIGNvZGUtcGF0aAorCXhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbal0qYnBbMF0KKwl4bXB5dQkJJHtmbml9TCwke2ZtMH1SLCR7Zm5tMH0JOyBucFtqXSptCisJbGRkCQktMTYoJHhmZXIpLCRhYjAKKwlmc3RkcwkJJHtmYWIwfSwtMTYoJHhmZXIpCisKKwlleHRyZCx1CQkkYWIwLDMxLDMyLCRoaTAKKwlleHRyZCx1CQkkYWIwLDYzLDMyLCRhYjAKKwlsZGQJCS04KCR4ZmVyKSwkbm0wCisJZnN0ZHMJCSR7Zm5tMH0sLTgoJHhmZXIpCisJIGxkbwkJOCgkaWR4KSwkaWR4CQk7IGorKysrCisJIGFkZGwJCSRhYjAsJG5tMCwkbm0wCQk7IGxvdyBwYXJ0IGlzIGRpc2NhcmRlZAorCSBleHRyZCx1CSRubTAsMzEsMzIsJGhpMQorDAorTFwkMXN0CisJeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFtqKzFdKmJwWzBdCisJeG1weXUJCSR7Zm5pfVIsJHtmbTB9Uiwke2ZubTF9CTsgbnBbaisxXSptCisJbGRkCQkwKCR4ZmVyKSwkYWIxCisJZnN0ZHMJCSR7ZmFiMX0sMCgkeGZlcikKKwkgYWRkbAkJJGhpMCwkYWIxLCRhYjEKKwkgZXh0cmQsdQkkYWIxLDMxLDMyLCRoaTAKKwlsZGQJCTgoJHhmZXIpLCRubTEKKwlmc3RkcwkJJHtmbm0xfSw4KCR4ZmVyKQorCSBleHRyZCx1CSRhYjEsNjMsMzIsJGFiMQorCSBhZGRsCQkkaGkxLCRubTEsJG5tMQorCWZsZGR4CQkkaWR4KCRhcCksJHtmYWl9CTsgYXBbaixqKzFdCisJZmxkZHgJCSRpZHgoJG5wKSwke2ZuaX0JOyBucFtqLGorMV0KKwkgYWRkbAkJJGFiMSwkbm0xLCRubTEKKwkgZXh0cmQsdQkkbm0xLDMxLDMyLCRoaTEKKworCXhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbal0qYnBbMF0KKwl4bXB5dQkJJHtmbml9TCwke2ZtMH1SLCR7Zm5tMH0JOyBucFtqXSptCisJbGRkCQktMTYoJHhmZXIpLCRhYjAKKwlmc3RkcwkJJHtmYWIwfSwtMTYoJHhmZXIpCisJIGFkZGwJCSRoaTAsJGFiMCwkYWIwCisJIGV4dHJkLHUJJGFiMCwzMSwzMiwkaGkwCisJbGRkCQktOCgkeGZlciksJG5tMAorCWZzdGRzCQkke2ZubTB9LC04KCR4ZmVyKQorCSBleHRyZCx1CSRhYjAsNjMsMzIsJGFiMAorCSBhZGRsCQkkaGkxLCRubTAsJG5tMAorCXN0dwkJJG5tMSwtNCgkdHApCQk7IHRwW2otMV0KKwkgYWRkbAkJJGFiMCwkbm0wLCRubTAKKwkgc3R3LG1hCQkkbm0wLDgoJHRwKQkJOyB0cFtqLTFdCisJYWRkaWIsPD4JOCwkaWR4LExcJDFzdAkJOyBqKysrKworCSBleHRyZCx1CSRubTAsMzEsMzIsJGhpMQorCisJeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFtqXSpicFswXQorCXhtcHl1CQkke2ZuaX1SLCR7Zm0wfVIsJHtmbm0xfQk7IG5wW2pdKm0KKwlsZGQJCTAoJHhmZXIpLCRhYjEKKwlmc3RkcwkJJHtmYWIxfSwwKCR4ZmVyKQorCSBhZGRsCQkkaGkwLCRhYjEsJGFiMQorCSBleHRyZCx1CSRhYjEsMzEsMzIsJGhpMAorCWxkZAkJOCgkeGZlciksJG5tMQorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGV4dHJkLHUJJGFiMSw2MywzMiwkYWIxCisJIGFkZGwJCSRoaTEsJG5tMSwkbm0xCisJbGRkCQktMTYoJHhmZXIpLCRhYjAKKwkgYWRkbAkJJGFiMSwkbm0xLCRubTEKKwlsZGQJCS04KCR4ZmVyKSwkbm0wCisJIGV4dHJkLHUJJG5tMSwzMSwzMiwkaGkxCisKKwkgYWRkbAkJJGhpMCwkYWIwLCRhYjAKKwkgZXh0cmQsdQkkYWIwLDMxLDMyLCRoaTAKKwlzdHcJCSRubTEsLTQoJHRwKQkJOyB0cFtqLTFdCisJIGV4dHJkLHUJJGFiMCw2MywzMiwkYWIwCisJIGFkZGwJCSRoaTEsJG5tMCwkbm0wCisJbGRkCQkwKCR4ZmVyKSwkYWIxCisJIGFkZGwJCSRhYjAsJG5tMCwkbm0wCisJbGRkLG1iCQk4KCR4ZmVyKSwkbm0xCisJIGV4dHJkLHUJJG5tMCwzMSwzMiwkaGkxCisJc3R3LG1hCQkkbm0wLDgoJHRwKQkJOyB0cFtqLTFdCisKKwlsZG8JCS0xKCRudW0pLCRudW0JCTsgaS0tCisJc3ViaQkJMCwkYXJyc3osJGlkeAkJOyBqPTAKK19fXworJGNvZGUuPTw8X19fIGlmICgkQk5fU1o9PTQpOworCWZsZHdzLG1hCTQoJGJwKSwke2ZiaX0JCTsgYnBbMV0KK19fXworJGNvZGUuPTw8X19fIGlmICgkQk5fU1o9PTgpOworCWZsZHdzCQkwKCRicCksJHtmYml9CQk7IGJwWzFdIGluIGZsaXBwZWQgd29yZCBvcmRlcgorX19fCiskY29kZS49PDxfX187CisJIGZsZGR4CQkkaWR4KCRhcCksJHtmYWl9CTsgYXBbMCwxXQorCSBmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wWzAsMV0KKwkgZmxkd3MJCTgoJHhmZXIpLCR7ZnRpfVIJOyB0cFswXQorCWFkZGwJCSRoaTAsJGFiMSwkYWIxCisJIGV4dHJkLHUJJGFiMSwzMSwzMiwkaGkwCisJIGV4dHJkLHUJJGFiMSw2MywzMiwkYWIxCisJIGxkbwkJOCgkaWR4KSwkaWR4CQk7IGorKysrCisJIHhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbMF0qYnBbMV0KKwkgeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFsxXSpicFsxXQorCWFkZGwJCSRoaTEsJG5tMSwkbm0xCisJYWRkbAkJJGFiMSwkbm0xLCRubTEKKwlleHRyZCx1CQkkbm0xLDMxLDMyLCRoaTEKKwkgZnN0d3MsbWIJJHtmYWIwfUwsLTgoJHhmZXIpCTsgc2F2ZSBoaWdoIHBhcnQKKwlzdHcJCSRubTEsLTQoJHRwKQkJOyB0cFtqLTFdCisKKwkgZmNweSxzZ2wJJWZyMCwke2Z0aX1MCQk7IHplcm8gaGlnaCBwYXJ0CisJIGZjcHksc2dsCSVmcjAsJHtmYWIwfUwKKwlhZGRsCQkkaGkxLCRoaTAsJGhpMAorCWV4dHJkLHUJCSRoaTAsMzEsMzIsJGhpMQorCSBmY252eGYsZGJsLGRibAkke2Z0aX0sJHtmdGl9CQk7IDMyLWJpdCB1bnNpZ25lZCBpbnQgLT4gZG91YmxlCisJIGZjbnZ4ZixkYmwsZGJsCSR7ZmFiMH0sJHtmYWIwfQorCXN0dwkJJGhpMCwwKCR0cCkKKwlzdHcJCSRoaTEsNCgkdHApCisKKwlmYWRkLGRibAkke2Z0aX0sJHtmYWIwfSwke2ZhYjB9CTsgYWRkIHRwWzBdCisJZmNudmZ4LGRibCxkYmwJJHtmYWIwfSwke2ZhYjB9CQk7IGRvdWJsZSAtPiAzMy1iaXQgdW5zaWduZWQgaW50CisJeG1weXUJCSR7Zm4wfSwke2ZhYjB9Uiwke2ZtMH0KKwlsZG8JCWAkTE9DQUxTKzMyKzRgKCRmcCksJHRwCitMXCRvdXRlcgorCXhtcHl1CQkke2ZuaX1MLCR7Zm0wfVIsJHtmbm0wfQk7IG5wWzBdKm0KKwl4bXB5dQkJJHtmbml9Uiwke2ZtMH1SLCR7Zm5tMX0JOyBucFsxXSptCisJZnN0ZHMJCSR7ZmFiMH0sLTE2KCR4ZmVyKQk7IDMzLWJpdCB2YWx1ZQorCWZzdGRzCQkke2ZubTB9LC04KCR4ZmVyKQorCSBmbGRkeAkJJGlkeCgkYXApLCR7ZmFpfQk7IGFwWzJdCisJIGZsZGR4CQkkaWR4KCRucCksJHtmbml9CTsgbnBbMl0KKwkgbGRvCQk4KCRpZHgpLCRpZHgJCTsgaisrKysKKwlsZGQJCS0xNigkeGZlciksJGFiMAkJOyAzMy1iaXQgdmFsdWUKKwlsZGQJCS04KCR4ZmVyKSwkbm0wCisJbGR3CQkwKCR4ZmVyKSwkaGkwCQk7IGhpZ2ggcGFydAorCisJeG1weXUJCSR7ZmFpfUwsJHtmYml9LCR7ZmFiMH0JOyBhcFtqXSpicFtpXQorCXhtcHl1CQkke2ZuaX1MLCR7Zm0wfVIsJHtmbm0wfQk7IG5wW2pdKm0KKwkgZXh0cmQsdQkkYWIwLDMxLDMyLCR0aTAJCTsgY2FycnkgYml0CisJIGV4dHJkLHUJJGFiMCw2MywzMiwkYWIwCisJZnN0ZHMJCSR7ZmFiMX0sMCgkeGZlcikKKwkgYWRkbAkJJHRpMCwkaGkwLCRoaTAJCTsgYWNjb3VudCBjYXJyeSBiaXQKKwlmc3RkcwkJJHtmbm0xfSw4KCR4ZmVyKQorCSBhZGRsCQkkYWIwLCRubTAsJG5tMAkJOyBsb3cgcGFydCBpcyBkaXNjYXJkZWQKKwlsZHcJCTAoJHRwKSwkdGkxCQk7IHRwWzFdCisJIGV4dHJkLHUJJG5tMCwzMSwzMiwkaGkxCisJZnN0ZHMJCSR7ZmFiMH0sLTE2KCR4ZmVyKQorCWZzdGRzCQkke2ZubTB9LC04KCR4ZmVyKQorDAorTFwkaW5uZXIKKwl4bXB5dQkJJHtmYWl9Uiwke2ZiaX0sJHtmYWIxfQk7IGFwW2orMV0qYnBbaV0KKwl4bXB5dQkJJHtmbml9Uiwke2ZtMH1SLCR7Zm5tMX0JOyBucFtqKzFdKm0KKwlsZGQJCTAoJHhmZXIpLCRhYjEKKwlmc3RkcwkJJHtmYWIxfSwwKCR4ZmVyKQorCSBhZGRsCQkkaGkwLCR0aTEsJHRpMQorCSBhZGRsCQkkdGkxLCRhYjEsJGFiMQorCWxkZAkJOCgkeGZlciksJG5tMQorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGV4dHJkLHUJJGFiMSwzMSwzMiwkaGkwCisJIGV4dHJkLHUJJGFiMSw2MywzMiwkYWIxCisJZmxkZHgJCSRpZHgoJGFwKSwke2ZhaX0JOyBhcFtqLGorMV0KKwlmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wW2osaisxXQorCSBhZGRsCQkkaGkxLCRubTEsJG5tMQorCSBhZGRsCQkkYWIxLCRubTEsJG5tMQorCWxkdwkJNCgkdHApLCR0aTAJCTsgdHBbal0KKwlzdHcJCSRubTEsLTQoJHRwKQkJOyB0cFtqLTFdCisKKwl4bXB5dQkJJHtmYWl9TCwke2ZiaX0sJHtmYWIwfQk7IGFwW2pdKmJwW2ldCisJeG1weXUJCSR7Zm5pfUwsJHtmbTB9Uiwke2ZubTB9CTsgbnBbal0qbQorCWxkZAkJLTE2KCR4ZmVyKSwkYWIwCisJZnN0ZHMJCSR7ZmFiMH0sLTE2KCR4ZmVyKQorCSBhZGRsCQkkaGkwLCR0aTAsJHRpMAorCSBhZGRsCQkkdGkwLCRhYjAsJGFiMAorCWxkZAkJLTgoJHhmZXIpLCRubTAKKwlmc3RkcwkJJHtmbm0wfSwtOCgkeGZlcikKKwkgZXh0cmQsdQkkYWIwLDMxLDMyLCRoaTAKKwkgZXh0cmQsdQkkbm0xLDMxLDMyLCRoaTEKKwlsZHcJCTgoJHRwKSwkdGkxCQk7IHRwW2pdCisJIGV4dHJkLHUJJGFiMCw2MywzMiwkYWIwCisJIGFkZGwJCSRoaTEsJG5tMCwkbm0wCisJIGFkZGwJCSRhYjAsJG5tMCwkbm0wCisJIHN0dyxtYQkJJG5tMCw4KCR0cCkJCTsgdHBbai0xXQorCWFkZGliLDw+CTgsJGlkeCxMXCRpbm5lcgkJOyBqKysrKworCSBleHRyZCx1CSRubTAsMzEsMzIsJGhpMQorCisJeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFtqXSpicFtpXQorCXhtcHl1CQkke2ZuaX1SLCR7Zm0wfVIsJHtmbm0xfQk7IG5wW2pdKm0KKwlsZGQJCTAoJHhmZXIpLCRhYjEKKwlmc3RkcwkJJHtmYWIxfSwwKCR4ZmVyKQorCSBhZGRsCQkkaGkwLCR0aTEsJHRpMQorCSBhZGRsCQkkdGkxLCRhYjEsJGFiMQorCWxkZAkJOCgkeGZlciksJG5tMQorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGV4dHJkLHUJJGFiMSwzMSwzMiwkaGkwCisJIGV4dHJkLHUJJGFiMSw2MywzMiwkYWIxCisJbGR3CQk0KCR0cCksJHRpMAkJOyB0cFtqXQorCSBhZGRsCQkkaGkxLCRubTEsJG5tMQorCSBhZGRsCQkkYWIxLCRubTEsJG5tMQorCWxkZAkJLTE2KCR4ZmVyKSwkYWIwCisJbGRkCQktOCgkeGZlciksJG5tMAorCSBleHRyZCx1CSRubTEsMzEsMzIsJGhpMQorCisJYWRkbAkJJGhpMCwkYWIwLCRhYjAKKwkgYWRkbAkJJHRpMCwkYWIwLCRhYjAKKwkgc3R3CQkkbm0xLC00KCR0cCkJCTsgdHBbai0xXQorCSBleHRyZCx1CSRhYjAsMzEsMzIsJGhpMAorCWxkdwkJOCgkdHApLCR0aTEJCTsgdHBbal0KKwkgZXh0cmQsdQkkYWIwLDYzLDMyLCRhYjAKKwkgYWRkbAkJJGhpMSwkbm0wLCRubTAKKwlsZGQJCTAoJHhmZXIpLCRhYjEKKwkgYWRkbAkJJGFiMCwkbm0wLCRubTAKKwlsZGQsbWIJCTgoJHhmZXIpLCRubTEKKwkgZXh0cmQsdQkkbm0wLDMxLDMyLCRoaTEKKwkgc3R3LG1hCQkkbm0wLDgoJHRwKQkJOyB0cFtqLTFdCisKKwlhZGRpYiw9CQktMSwkbnVtLExcJG91dGVyZG9uZQk7IGktLQorCXN1YmkJCTAsJGFycnN6LCRpZHgJCTsgaj0wCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJEJOX1NaPT00KTsKKwlmbGR3cyxtYQk0KCRicCksJHtmYml9CQk7IGJwW2ldCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJEJOX1NaPT04KTsKKwlsZGkJCTEyLCR0aTAJCQk7IGJwW2ldIGluIGZsaXBwZWQgd29yZCBvcmRlcgorCWFkZGwsZXYJCSVyMCwkbnVtLCRudW0KKwlsZGkJCS00LCR0aTAKKwlhZGRsCQkkdGkwLCRicCwkYnAKKwlmbGR3cwkJMCgkYnApLCR7ZmJpfQorX19fCiskY29kZS49PDxfX187CisJIGZsZGR4CQkkaWR4KCRhcCksJHtmYWl9CTsgYXBbMF0KKwlhZGRsCQkkaGkwLCRhYjEsJGFiMQorCSBmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wWzBdCisJIGZsZHdzCQk4KCR4ZmVyKSwke2Z0aX1SCTsgdHBbMF0KKwlhZGRsCQkkdGkxLCRhYjEsJGFiMQorCWV4dHJkLHUJCSRhYjEsMzEsMzIsJGhpMAorCWV4dHJkLHUJCSRhYjEsNjMsMzIsJGFiMQorCisJIGxkbwkJOCgkaWR4KSwkaWR4CQk7IGorKysrCisJIHhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbMF0qYnBbaV0KKwkgeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFsxXSpicFtpXQorCWxkdwkJNCgkdHApLCR0aTAJCTsgdHBbal0KKworCWFkZGwJCSRoaTEsJG5tMSwkbm0xCisJIGZzdHdzLG1iCSR7ZmFiMH1MLC04KCR4ZmVyKQk7IHNhdmUgaGlnaCBwYXJ0CisJYWRkbAkJJGFiMSwkbm0xLCRubTEKKwlleHRyZCx1CQkkbm0xLDMxLDMyLCRoaTEKKwkgZmNweSxzZ2wJJWZyMCwke2Z0aX1MCQk7IHplcm8gaGlnaCBwYXJ0CisJIGZjcHksc2dsCSVmcjAsJHtmYWIwfUwKKwlzdHcJCSRubTEsLTQoJHRwKQkJOyB0cFtqLTFdCisKKwkgZmNudnhmLGRibCxkYmwJJHtmdGl9LCR7ZnRpfQkJOyAzMi1iaXQgdW5zaWduZWQgaW50IC0+IGRvdWJsZQorCSBmY252eGYsZGJsLGRibAkke2ZhYjB9LCR7ZmFiMH0KKwlhZGRsCQkkaGkxLCRoaTAsJGhpMAorCSBmYWRkLGRibAkke2Z0aX0sJHtmYWIwfSwke2ZhYjB9CTsgYWRkIHRwWzBdCisJYWRkbAkJJHRpMCwkaGkwLCRoaTAKKwlleHRyZCx1CQkkaGkwLDMxLDMyLCRoaTEKKwkgZmNudmZ4LGRibCxkYmwJJHtmYWIwfSwke2ZhYjB9CQk7IGRvdWJsZSAtPiAzMy1iaXQgdW5zaWduZWQgaW50CisJc3R3CQkkaGkwLDAoJHRwKQorCXN0dwkJJGhpMSw0KCR0cCkKKwkgeG1weXUJCSR7Zm4wfSwke2ZhYjB9Uiwke2ZtMH0KKworCWIJCUxcJG91dGVyCisJbGRvCQlgJExPQ0FMUyszMis0YCgkZnApLCR0cAorDAorTFwkb3V0ZXJkb25lCisJYWRkbAkJJGhpMCwkYWIxLCRhYjEKKwlhZGRsCQkkdGkxLCRhYjEsJGFiMQorCWV4dHJkLHUJCSRhYjEsMzEsMzIsJGhpMAorCWV4dHJkLHUJCSRhYjEsNjMsMzIsJGFiMQorCisJbGR3CQk0KCR0cCksJHRpMAkJOyB0cFtqXQorCisJYWRkbAkJJGhpMSwkbm0xLCRubTEKKwlhZGRsCQkkYWIxLCRubTEsJG5tMQorCWV4dHJkLHUJCSRubTEsMzEsMzIsJGhpMQorCXN0dwkJJG5tMSwtNCgkdHApCQk7IHRwW2otMV0KKworCWFkZGwJCSRoaTEsJGhpMCwkaGkwCisJYWRkbAkJJHRpMCwkaGkwLCRoaTAKKwlleHRyZCx1CQkkaGkwLDMxLDMyLCRoaTEKKwlzdHcJCSRoaTAsMCgkdHApCisJc3R3CQkkaGkxLDQoJHRwKQorCisJbGRvCQlgJExPQ0FMUyszMmAoJGZwKSwkdHAKKwlzdWIJCSVyMCwlcjAsJXIwCQk7IGNsZWFyIGJvcnJvdworX19fCiskY29kZS49PDxfX18gaWYgKCRCTl9TWj09NCk7CisJbGR3cyxtYQkJNCgkdHApLCR0aTAKKwlleHRydSw9CQkkcnAsMzEsMywlcjAJCTsgaXMgcnAgNjQtYml0IGFsaWduZWQ/CisJYgkJTFwkc3ViX3BhMTEKKwlhZGRsCQkkdHAsJGFycnN6LCR0cAorTFwkc3ViCisJbGR3eAkJJGlkeCgkbnApLCRoaTAKKwlzdWJiCQkkdGkwLCRoaTAsJGhpMQorCWxkd3gJCSRpZHgoJHRwKSwkdGkwCisJYWRkaWIsPD4JNCwkaWR4LExcJHN1YgorCXN0d3MsbWEJCSRoaTEsNCgkcnApCisKKwlzdWJiCQkkdGkwLCVyMCwkaGkxCisJbGRvCQktNCgkdHApLCR0cAorX19fCiskY29kZS49PDxfX18gaWYgKCRCTl9TWj09OCk7CisJbGRkLG1hCQk4KCR0cCksJHRpMAorTFwkc3ViCisJbGRkCQkkaWR4KCRucCksJGhpMAorCXNocnBkCQkkdGkwLCR0aTAsMzIsJHRpMAk7IGZsaXAgd29yZCBvcmRlcgorCXN0ZAkJJHRpMCwtOCgkdHApCQk7IHNhdmUgZmxpcHBlZCB2YWx1ZQorCXN1YixkYgkJJHRpMCwkaGkwLCRoaTEKKwlsZGQsbWEJCTgoJHRwKSwkdGkwCisJYWRkaWIsPD4JOCwkaWR4LExcJHN1YgorCXN0ZCxtYQkJJGhpMSw4KCRycCkKKworCWV4dHJkLHUJCSR0aTAsMzEsMzIsJHRpMAkJOyBjYXJyeSBpbiBmbGlwcGVkIHdvcmQgb3JkZXIKKwlzdWIsZGIJCSR0aTAsJXIwLCRoaTEKKwlsZG8JCS04KCR0cCksJHRwCitfX18KKyRjb2RlLj08PF9fXzsKKwlhbmQJCSR0cCwkaGkxLCRhcAorCWFuZGNtCQkkcnAsJGhpMSwkYnAKKwlvcgkJJGFwLCRicCwkbnAKKworCXN1YgkJJHJwLCRhcnJzeiwkcnAJCTsgcmV3aW5kIHJwCisJc3ViaQkJMCwkYXJyc3osJGlkeAorCWxkbwkJYCRMT0NBTFMrMzJgKCRmcCksJHRwCitMXCRjb3B5CisJbGRkCQkkaWR4KCRucCksJGhpMAorCXN0ZCxtYQkJJXIwLDgoJHRwKQorCWFkZGliLDw+CTgsJGlkeCwuLTgJCTsgTFwkY29weQorCXN0ZCxtYQkJJGhpMCw4KCRycCkJCitfX18KKworaWYgKCRCTl9TWj09NCkgewkJCQkjIFBBLVJJU0MgMS4xIGNvZGUtcGF0aAorJGFibG89JGFiMDsKKyRhYmhpPSRhYjE7Ciskbm1sbzA9JG5tMDsKKyRubWhpMD0kbm0xOworJG5tbG8xPSIlcjkiOworJG5taGkxPSIlcjgiOworCiskY29kZS49PDxfX187CisJYgkJTFwkZG9uZQorCW5vcAorCisJLkFMSUdOCQk4CitMXCRwYXJpc2MxMQorCXhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbal0qYnBbMF0KKwl4bXB5dQkJJHtmbml9TCwke2ZtMH1SLCR7Zm5tMH0JOyBucFtqXSptCisJbGR3CQktMTIoJHhmZXIpLCRhYmxvCisJbGR3CQktMTYoJHhmZXIpLCRoaTAKKwlsZHcJCS00KCR4ZmVyKSwkbm1sbzAKKwlsZHcJCS04KCR4ZmVyKSwkbm1oaTAKKwlmc3RkcwkJJHtmYWIwfSwtMTYoJHhmZXIpCisJZnN0ZHMJCSR7Zm5tMH0sLTgoJHhmZXIpCisKKwkgbGRvCQk4KCRpZHgpLCRpZHgJCTsgaisrKysKKwkgYWRkCQkkYWJsbywkbm1sbzAsJG5tbG8wCTsgZGlzY2FyZGVkCisJIGFkZGMJCSVyMCwkbm1oaTAsJGhpMQorCWxkdwkJNCgkeGZlciksJGFibG8KKwlsZHcJCTAoJHhmZXIpLCRhYmhpCisJbm9wCisMCitMXCQxc3RfcGExMQorCXhtcHl1CQkke2ZhaX1SLCR7ZmJpfSwke2ZhYjF9CTsgYXBbaisxXSpicFswXQorCWZsZGR4CQkkaWR4KCRhcCksJHtmYWl9CTsgYXBbaixqKzFdCisJeG1weXUJCSR7Zm5pfVIsJHtmbTB9Uiwke2ZubTF9CTsgbnBbaisxXSptCisJZmxkZHgJCSRpZHgoJG5wKSwke2ZuaX0JOyBucFtqLGorMV0KKwkgYWRkCQkkaGkwLCRhYmxvLCRhYmxvCisJbGR3CQkxMigkeGZlciksJG5tbG8xCisJIGFkZGMJCSVyMCwkYWJoaSwkaGkwCisJbGR3CQk4KCR4ZmVyKSwkbm1oaTEKKwkgYWRkCQkkYWJsbywkbm1sbzEsJG5tbG8xCisJZnN0ZHMJCSR7ZmFiMX0sMCgkeGZlcikKKwkgYWRkYwkJJXIwLCRubWhpMSwkbm1oaTEKKwlmc3RkcwkJJHtmbm0xfSw4KCR4ZmVyKQorCSBhZGQJCSRoaTEsJG5tbG8xLCRubWxvMQorCWxkdwkJLTEyKCR4ZmVyKSwkYWJsbworCSBhZGRjCQklcjAsJG5taGkxLCRoaTEKKwlsZHcJCS0xNigkeGZlciksJGFiaGkKKworCXhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbal0qYnBbMF0KKwlsZHcJCS00KCR4ZmVyKSwkbm1sbzAKKwl4bXB5dQkJJHtmbml9TCwke2ZtMH1SLCR7Zm5tMH0JOyBucFtqXSptCisJbGR3CQktOCgkeGZlciksJG5taGkwCisJIGFkZAkJJGhpMCwkYWJsbywkYWJsbworCXN0dwkJJG5tbG8xLC00KCR0cCkJCTsgdHBbai0xXQorCSBhZGRjCQklcjAsJGFiaGksJGhpMAorCWZzdGRzCQkke2ZhYjB9LC0xNigkeGZlcikKKwkgYWRkCQkkYWJsbywkbm1sbzAsJG5tbG8wCisJZnN0ZHMJCSR7Zm5tMH0sLTgoJHhmZXIpCisJIGFkZGMJCSVyMCwkbm1oaTAsJG5taGkwCisJbGR3CQkwKCR4ZmVyKSwkYWJoaQorCSBhZGQJCSRoaTEsJG5tbG8wLCRubWxvMAorCWxkdwkJNCgkeGZlciksJGFibG8KKwkgc3R3cyxtYQkkbm1sbzAsOCgkdHApCQk7IHRwW2otMV0KKwlhZGRpYiw8Pgk4LCRpZHgsTFwkMXN0X3BhMTEJOyBqKysrKworCSBhZGRjCQklcjAsJG5taGkwLCRoaTEKKworCSBsZHcJCTgoJHhmZXIpLCRubWhpMQorCSBsZHcJCTEyKCR4ZmVyKSwkbm1sbzEKKwl4bXB5dQkJJHtmYWl9Uiwke2ZiaX0sJHtmYWIxfQk7IGFwW2pdKmJwWzBdCisJeG1weXUJCSR7Zm5pfVIsJHtmbTB9Uiwke2ZubTF9CTsgbnBbal0qbQorCSBhZGQJCSRoaTAsJGFibG8sJGFibG8KKwlmc3RkcwkJJHtmYWIxfSwwKCR4ZmVyKQorCSBhZGRjCQklcjAsJGFiaGksJGhpMAorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGFkZAkJJGFibG8sJG5tbG8xLCRubWxvMQorCWxkdwkJLTE2KCR4ZmVyKSwkYWJoaQorCSBhZGRjCQklcjAsJG5taGkxLCRubWhpMQorCWxkdwkJLTEyKCR4ZmVyKSwkYWJsbworCSBhZGQJCSRoaTEsJG5tbG8xLCRubWxvMQorCWxkdwkJLTgoJHhmZXIpLCRubWhpMAorCSBhZGRjCQklcjAsJG5taGkxLCRoaTEKKwlsZHcJCS00KCR4ZmVyKSwkbm1sbzAKKworCSBhZGQJCSRoaTAsJGFibG8sJGFibG8KKwlzdHcJCSRubWxvMSwtNCgkdHApCQk7IHRwW2otMV0KKwkgYWRkYwkJJXIwLCRhYmhpLCRoaTAKKwlsZHcJCTAoJHhmZXIpLCRhYmhpCisJIGFkZAkJJGFibG8sJG5tbG8wLCRubWxvMAorCWxkdwkJNCgkeGZlciksJGFibG8KKwkgYWRkYwkJJXIwLCRubWhpMCwkbm1oaTAKKwlsZHdzLG1iCQk4KCR4ZmVyKSwkbm1oaTEKKwkgYWRkCQkkaGkxLCRubWxvMCwkbm1sbzAKKwlsZHcJCTQoJHhmZXIpLCRubWxvMQorCSBhZGRjCQklcjAsJG5taGkwLCRoaTEKKwlzdHdzLG1hCQkkbm1sbzAsOCgkdHApCQk7IHRwW2otMV0KKworCWxkbwkJLTEoJG51bSksJG51bQkJOyBpLS0KKwlzdWJpCQkwLCRhcnJzeiwkaWR4CQk7IGo9MAorCisJIGZsZHdzLG1hCTQoJGJwKSwke2ZiaX0JCTsgYnBbMV0KKwkgZmxkZHgJCSRpZHgoJGFwKSwke2ZhaX0JOyBhcFswLDFdCisJIGZsZGR4CQkkaWR4KCRucCksJHtmbml9CTsgbnBbMCwxXQorCSBmbGR3cwkJOCgkeGZlciksJHtmdGl9Ugk7IHRwWzBdCisJYWRkCQkkaGkwLCRhYmxvLCRhYmxvCisJYWRkYwkJJXIwLCRhYmhpLCRoaTAKKwkgbGRvCQk4KCRpZHgpLCRpZHgJCTsgaisrKysKKwkgeG1weXUJCSR7ZmFpfUwsJHtmYml9LCR7ZmFiMH0JOyBhcFswXSpicFsxXQorCSB4bXB5dQkJJHtmYWl9Uiwke2ZiaX0sJHtmYWIxfQk7IGFwWzFdKmJwWzFdCisJYWRkCQkkaGkxLCRubWxvMSwkbm1sbzEKKwlhZGRjCQklcjAsJG5taGkxLCRubWhpMQorCWFkZAkJJGFibG8sJG5tbG8xLCRubWxvMQorCWFkZGMJCSVyMCwkbm1oaTEsJGhpMQorCSBmc3R3cyxtYgkke2ZhYjB9TCwtOCgkeGZlcikJOyBzYXZlIGhpZ2ggcGFydAorCXN0dwkJJG5tbG8xLC00KCR0cCkJCTsgdHBbai0xXQorCisJIGZjcHksc2dsCSVmcjAsJHtmdGl9TAkJOyB6ZXJvIGhpZ2ggcGFydAorCSBmY3B5LHNnbAklZnIwLCR7ZmFiMH1MCisJYWRkCQkkaGkxLCRoaTAsJGhpMAorCWFkZGMJCSVyMCwlcjAsJGhpMQorCSBmY252eGYsZGJsLGRibAkke2Z0aX0sJHtmdGl9CQk7IDMyLWJpdCB1bnNpZ25lZCBpbnQgLT4gZG91YmxlCisJIGZjbnZ4ZixkYmwsZGJsCSR7ZmFiMH0sJHtmYWIwfQorCXN0dwkJJGhpMCwwKCR0cCkKKwlzdHcJCSRoaTEsNCgkdHApCisKKwlmYWRkLGRibAkke2Z0aX0sJHtmYWIwfSwke2ZhYjB9CTsgYWRkIHRwWzBdCisJZmNudmZ4LGRibCxkYmwJJHtmYWIwfSwke2ZhYjB9CQk7IGRvdWJsZSAtPiAzMy1iaXQgdW5zaWduZWQgaW50CisJeG1weXUJCSR7Zm4wfSwke2ZhYjB9Uiwke2ZtMH0KKwlsZG8JCWAkTE9DQUxTKzMyKzRgKCRmcCksJHRwCitMXCRvdXRlcl9wYTExCisJeG1weXUJCSR7Zm5pfUwsJHtmbTB9Uiwke2ZubTB9CTsgbnBbMF0qbQorCXhtcHl1CQkke2ZuaX1SLCR7Zm0wfVIsJHtmbm0xfQk7IG5wWzFdKm0KKwlmc3RkcwkJJHtmYWIwfSwtMTYoJHhmZXIpCTsgMzMtYml0IHZhbHVlCisJZnN0ZHMJCSR7Zm5tMH0sLTgoJHhmZXIpCisJIGZsZGR4CQkkaWR4KCRhcCksJHtmYWl9CTsgYXBbMiwzXQorCSBmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wWzIsM10KKwlsZHcJCS0xNigkeGZlciksJGFiaGkJOyBjYXJyeSBiaXQgYWN0dWFsbHkKKwkgbGRvCQk4KCRpZHgpLCRpZHgJCTsgaisrKysKKwlsZHcJCS0xMigkeGZlciksJGFibG8KKwlsZHcJCS04KCR4ZmVyKSwkbm1oaTAKKwlsZHcJCS00KCR4ZmVyKSwkbm1sbzAKKwlsZHcJCTAoJHhmZXIpLCRoaTAJCTsgaGlnaCBwYXJ0CisKKwl4bXB5dQkJJHtmYWl9TCwke2ZiaX0sJHtmYWIwfQk7IGFwW2pdKmJwW2ldCisJeG1weXUJCSR7Zm5pfUwsJHtmbTB9Uiwke2ZubTB9CTsgbnBbal0qbQorCWZzdGRzCQkke2ZhYjF9LDAoJHhmZXIpCisJIGFkZGwJCSRhYmhpLCRoaTAsJGhpMAkJOyBhY2NvdW50IGNhcnJ5IGJpdAorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGFkZAkJJGFibG8sJG5tbG8wLCRubWxvMAk7IGRpc2NhcmRlZAorCWxkdwkJMCgkdHApLCR0aTEJCTsgdHBbMV0KKwkgYWRkYwkJJXIwLCRubWhpMCwkaGkxCisJZnN0ZHMJCSR7ZmFiMH0sLTE2KCR4ZmVyKQorCWZzdGRzCQkke2ZubTB9LC04KCR4ZmVyKQorCWxkdwkJNCgkeGZlciksJGFibG8KKwlsZHcJCTAoJHhmZXIpLCRhYmhpCisMCitMXCRpbm5lcl9wYTExCisJeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFtqKzFdKmJwW2ldCisJZmxkZHgJCSRpZHgoJGFwKSwke2ZhaX0JOyBhcFtqLGorMV0KKwl4bXB5dQkJJHtmbml9Uiwke2ZtMH1SLCR7Zm5tMX0JOyBucFtqKzFdKm0KKwlmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wW2osaisxXQorCSBhZGQJCSRoaTAsJGFibG8sJGFibG8KKwlsZHcJCTQoJHRwKSwkdGkwCQk7IHRwW2pdCisJIGFkZGMJCSVyMCwkYWJoaSwkYWJoaQorCWxkdwkJMTIoJHhmZXIpLCRubWxvMQorCSBhZGQJCSR0aTEsJGFibG8sJGFibG8KKwlsZHcJCTgoJHhmZXIpLCRubWhpMQorCSBhZGRjCQklcjAsJGFiaGksJGhpMAorCWZzdGRzCQkke2ZhYjF9LDAoJHhmZXIpCisJIGFkZAkJJGFibG8sJG5tbG8xLCRubWxvMQorCWZzdGRzCQkke2ZubTF9LDgoJHhmZXIpCisJIGFkZGMJCSVyMCwkbm1oaTEsJG5taGkxCisJbGR3CQktMTIoJHhmZXIpLCRhYmxvCisJIGFkZAkJJGhpMSwkbm1sbzEsJG5tbG8xCisJbGR3CQktMTYoJHhmZXIpLCRhYmhpCisJIGFkZGMJCSVyMCwkbm1oaTEsJGhpMQorCisJeG1weXUJCSR7ZmFpfUwsJHtmYml9LCR7ZmFiMH0JOyBhcFtqXSpicFtpXQorCWxkdwkJOCgkdHApLCR0aTEJCTsgdHBbal0KKwl4bXB5dQkJJHtmbml9TCwke2ZtMH1SLCR7Zm5tMH0JOyBucFtqXSptCisJbGR3CQktNCgkeGZlciksJG5tbG8wCisJIGFkZAkJJGhpMCwkYWJsbywkYWJsbworCWxkdwkJLTgoJHhmZXIpLCRubWhpMAorCSBhZGRjCQklcjAsJGFiaGksJGFiaGkKKwlzdHcJCSRubWxvMSwtNCgkdHApCQk7IHRwW2otMV0KKwkgYWRkCQkkdGkwLCRhYmxvLCRhYmxvCisJZnN0ZHMJCSR7ZmFiMH0sLTE2KCR4ZmVyKQorCSBhZGRjCQklcjAsJGFiaGksJGhpMAorCWZzdGRzCQkke2ZubTB9LC04KCR4ZmVyKQorCSBhZGQJCSRhYmxvLCRubWxvMCwkbm1sbzAKKwlsZHcJCTQoJHhmZXIpLCRhYmxvCisJIGFkZGMJCSVyMCwkbm1oaTAsJG5taGkwCisJbGR3CQkwKCR4ZmVyKSwkYWJoaQorCSBhZGQJCSRoaTEsJG5tbG8wLCRubWxvMAorCSBzdHdzLG1hCSRubWxvMCw4KCR0cCkJCTsgdHBbai0xXQorCWFkZGliLDw+CTgsJGlkeCxMXCRpbm5lcl9wYTExCTsgaisrKysKKwkgYWRkYwkJJXIwLCRubWhpMCwkaGkxCisKKwl4bXB5dQkJJHtmYWl9Uiwke2ZiaX0sJHtmYWIxfQk7IGFwW2pdKmJwW2ldCisJbGR3CQkxMigkeGZlciksJG5tbG8xCisJeG1weXUJCSR7Zm5pfVIsJHtmbTB9Uiwke2ZubTF9CTsgbnBbal0qbQorCWxkdwkJOCgkeGZlciksJG5taGkxCisJIGFkZAkJJGhpMCwkYWJsbywkYWJsbworCWxkdwkJNCgkdHApLCR0aTAJCTsgdHBbal0KKwkgYWRkYwkJJXIwLCRhYmhpLCRhYmhpCisJZnN0ZHMJCSR7ZmFiMX0sMCgkeGZlcikKKwkgYWRkCQkkdGkxLCRhYmxvLCRhYmxvCisJZnN0ZHMJCSR7Zm5tMX0sOCgkeGZlcikKKwkgYWRkYwkJJXIwLCRhYmhpLCRoaTAKKwlsZHcJCS0xNigkeGZlciksJGFiaGkKKwkgYWRkCQkkYWJsbywkbm1sbzEsJG5tbG8xCisJbGR3CQktMTIoJHhmZXIpLCRhYmxvCisJIGFkZGMJCSVyMCwkbm1oaTEsJG5taGkxCisJbGR3CQktOCgkeGZlciksJG5taGkwCisJIGFkZAkJJGhpMSwkbm1sbzEsJG5tbG8xCisJbGR3CQktNCgkeGZlciksJG5tbG8wCisJIGFkZGMJCSVyMCwkbm1oaTEsJGhpMQorCisJYWRkCQkkaGkwLCRhYmxvLCRhYmxvCisJIHN0dwkJJG5tbG8xLC00KCR0cCkJCTsgdHBbai0xXQorCWFkZGMJCSVyMCwkYWJoaSwkYWJoaQorCSBhZGQJCSR0aTAsJGFibG8sJGFibG8KKwlsZHcJCTgoJHRwKSwkdGkxCQk7IHRwW2pdCisJIGFkZGMJCSVyMCwkYWJoaSwkaGkwCisJbGR3CQkwKCR4ZmVyKSwkYWJoaQorCSBhZGQJCSRhYmxvLCRubWxvMCwkbm1sbzAKKwlsZHcJCTQoJHhmZXIpLCRhYmxvCisJIGFkZGMJCSVyMCwkbm1oaTAsJG5taGkwCisJbGR3cyxtYgkJOCgkeGZlciksJG5taGkxCisJIGFkZAkJJGhpMSwkbm1sbzAsJG5tbG8wCisJbGR3CQk0KCR4ZmVyKSwkbm1sbzEKKwkgYWRkYwkJJXIwLCRubWhpMCwkaGkxCisJIHN0d3MsbWEJJG5tbG8wLDgoJHRwKQkJOyB0cFtqLTFdCisKKwlhZGRpYiw9CQktMSwkbnVtLExcJG91dGVyZG9uZV9wYTExOyBpLS0KKwlzdWJpCQkwLCRhcnJzeiwkaWR4CQk7IGo9MAorCisJIGZsZHdzLG1hCTQoJGJwKSwke2ZiaX0JCTsgYnBbaV0KKwkgZmxkZHgJCSRpZHgoJGFwKSwke2ZhaX0JOyBhcFswXQorCWFkZAkJJGhpMCwkYWJsbywkYWJsbworCWFkZGMJCSVyMCwkYWJoaSwkYWJoaQorCSBmbGRkeAkJJGlkeCgkbnApLCR7Zm5pfQk7IG5wWzBdCisJIGZsZHdzCQk4KCR4ZmVyKSwke2Z0aX1SCTsgdHBbMF0KKwlhZGQJCSR0aTEsJGFibG8sJGFibG8KKwlhZGRjCQklcjAsJGFiaGksJGhpMAorCisJIGxkbwkJOCgkaWR4KSwkaWR4CQk7IGorKysrCisJIHhtcHl1CQkke2ZhaX1MLCR7ZmJpfSwke2ZhYjB9CTsgYXBbMF0qYnBbaV0KKwkgeG1weXUJCSR7ZmFpfVIsJHtmYml9LCR7ZmFiMX0JOyBhcFsxXSpicFtpXQorCWxkdwkJNCgkdHApLCR0aTAJCTsgdHBbal0KKworCWFkZAkJJGhpMSwkbm1sbzEsJG5tbG8xCisJYWRkYwkJJXIwLCRubWhpMSwkbm1oaTEKKwkgZnN0d3MsbWIJJHtmYWIwfUwsLTgoJHhmZXIpCTsgc2F2ZSBoaWdoIHBhcnQKKwlhZGQJCSRhYmxvLCRubWxvMSwkbm1sbzEKKwlhZGRjCQklcjAsJG5taGkxLCRoaTEKKwkgZmNweSxzZ2wJJWZyMCwke2Z0aX1MCQk7IHplcm8gaGlnaCBwYXJ0CisJIGZjcHksc2dsCSVmcjAsJHtmYWIwfUwKKwlzdHcJCSRubWxvMSwtNCgkdHApCQk7IHRwW2otMV0KKworCSBmY252eGYsZGJsLGRibAkke2Z0aX0sJHtmdGl9CQk7IDMyLWJpdCB1bnNpZ25lZCBpbnQgLT4gZG91YmxlCisJIGZjbnZ4ZixkYmwsZGJsCSR7ZmFiMH0sJHtmYWIwfQorCWFkZAkJJGhpMSwkaGkwLCRoaTAKKwlhZGRjCQklcjAsJXIwLCRoaTEKKwkgZmFkZCxkYmwJJHtmdGl9LCR7ZmFiMH0sJHtmYWIwfQk7IGFkZCB0cFswXQorCWFkZAkJJHRpMCwkaGkwLCRoaTAKKwlhZGRjCQklcjAsJGhpMSwkaGkxCisJIGZjbnZmeCxkYmwsZGJsCSR7ZmFiMH0sJHtmYWIwfQkJOyBkb3VibGUgLT4gMzMtYml0IHVuc2lnbmVkIGludAorCXN0dwkJJGhpMCwwKCR0cCkKKwlzdHcJCSRoaTEsNCgkdHApCisJIHhtcHl1CQkke2ZuMH0sJHtmYWIwfVIsJHtmbTB9CisKKwliCQlMXCRvdXRlcl9wYTExCisJbGRvCQlgJExPQ0FMUyszMis0YCgkZnApLCR0cAorDAorTFwkb3V0ZXJkb25lX3BhMTEKKwlhZGQJCSRoaTAsJGFibG8sJGFibG8KKwlhZGRjCQklcjAsJGFiaGksJGFiaGkKKwlhZGQJCSR0aTEsJGFibG8sJGFibG8KKwlhZGRjCQklcjAsJGFiaGksJGhpMAorCisJbGR3CQk0KCR0cCksJHRpMAkJOyB0cFtqXQorCisJYWRkCQkkaGkxLCRubWxvMSwkbm1sbzEKKwlhZGRjCQklcjAsJG5taGkxLCRubWhpMQorCWFkZAkJJGFibG8sJG5tbG8xLCRubWxvMQorCWFkZGMJCSVyMCwkbm1oaTEsJGhpMQorCXN0dwkJJG5tbG8xLC00KCR0cCkJCTsgdHBbai0xXQorCisJYWRkCQkkaGkxLCRoaTAsJGhpMAorCWFkZGMJCSVyMCwlcjAsJGhpMQorCWFkZAkJJHRpMCwkaGkwLCRoaTAKKwlhZGRjCQklcjAsJGhpMSwkaGkxCisJc3R3CQkkaGkwLDAoJHRwKQorCXN0dwkJJGhpMSw0KCR0cCkKKworCWxkbwkJYCRMT0NBTFMrMzIrNGAoJGZwKSwkdHAKKwlzdWIJCSVyMCwlcjAsJXIwCQk7IGNsZWFyIGJvcnJvdworCWxkdwkJLTQoJHRwKSwkdGkwCisJYWRkbAkJJHRwLCRhcnJzeiwkdHAKK0xcJHN1Yl9wYTExCisJbGR3eAkJJGlkeCgkbnApLCRoaTAKKwlzdWJiCQkkdGkwLCRoaTAsJGhpMQorCWxkd3gJCSRpZHgoJHRwKSwkdGkwCisJYWRkaWIsPD4JNCwkaWR4LExcJHN1Yl9wYTExCisJc3R3cyxtYQkJJGhpMSw0KCRycCkKKworCXN1YmIJCSR0aTAsJXIwLCRoaTEKKwlsZG8JCS00KCR0cCksJHRwCisJYW5kCQkkdHAsJGhpMSwkYXAKKwlhbmRjbQkJJHJwLCRoaTEsJGJwCisJb3IJCSRhcCwkYnAsJG5wCisKKwlzdWIJCSRycCwkYXJyc3osJHJwCQk7IHJld2luZCBycAorCXN1YmkJCTAsJGFycnN6LCRpZHgKKwlsZG8JCWAkTE9DQUxTKzMyYCgkZnApLCR0cAorTFwkY29weV9wYTExCisJbGR3eAkJJGlkeCgkbnApLCRoaTAKKwlzdHdzLG1hCQklcjAsNCgkdHApCisJYWRkaWIsPD4JNCwkaWR4LExcJGNvcHlfcGExMQorCXN0d3MsbWEJCSRoaTAsNCgkcnApCQorCisJbm9wCQkJCQk7IGFsaWdubWVudAorTFwkZG9uZQorX19fCit9CisMCiskY29kZS49PDxfX187CisJbGRpCQkxLCVyMjgJCQk7IHNpZ25hbCAiaGFuZGxlZCIKKwlsZG8JCSRGUkFNRSgkZnApLCVzcAkJOyBkZXN0cm95IHRwW251bSsxXQorCisJJFBPUAlgLSRGUkFNRS0kU0FWRURfUlBgKCVzcCksJXIyCTsgc3RhbmRhcmQgZXBpbG9ndWUKKwkkUE9QCWAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKSwlcjQKKwkkUE9QCWAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKSwlcjUKKwkkUE9QCWAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKSwlcjYKKwkkUE9QCWAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKSwlcjcKKwkkUE9QCWAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKSwlcjgKKwkkUE9QCWAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKSwlcjkKKwkkUE9QCWAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKSwlcjEwCitMXCRhYm9ydAorCWJ2CSglcjIpCisJLkVYSVQKKwkkUE9QTUIJLSRGUkFNRSglc3ApLCVyMworCS5QUk9DRU5ECisJLlNUUklOR1ogIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIFBBLVJJU0MsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKwwKKyMgRXhwbGljaXRseSBlbmNvZGUgUEEtUklTQyAyLjAgaW5zdHJ1Y3Rpb25zIHVzZWQgaW4gdGhpcyBtb2R1bGUsIHNvCisjIHRoYXQgaXQgY2FuIGJlIGNvbXBpbGVkIHdpdGggLkxFVkVMIDEuMC4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgSQorIyB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMsIGlmIEdOVSBhc3NlbWJsZXIgdW5kZXJzdG9vZCAuQUxMT1cgMi4wCisjIGRpcmVjdGl2ZS4uLgorCitteSAkbGRkID0gc3ViIHsKKyAgbXkgKCRtb2QsJGFyZ3MpID0gQF87CisgIG15ICRvcmlnID0gImxkZCRtb2RcdCRhcmdzIjsKKworICAgIGlmICgkYXJncyA9fiAvJXIoWzAtOV0rKVwoJXIoWzAtOV0rKVwpLCVyKFswLTldKykvKQkJIyBmb3JtYXQgNAorICAgIHsJbXkgJG9wY29kZT0oMHgwMzw8MjYpfCgkMjw8MjEpfCgkMTw8MTYpfCgzPDw2KXwkMzsKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2lmICgkYXJncyA9fiAvKFwtP1swLTldKylcKCVyKFswLTldKylcKSwlcihbMC05XSspLykJIyBmb3JtYXQgNQorICAgIHsJbXkgJG9wY29kZT0oMHgwMzw8MjYpfCgkMjw8MjEpfCgxPDwxMil8KDM8PDYpfCQzOworCSRvcGNvZGV8PSgoJDEmMHhGKTw8MTcpfCgoJDEmMHgxMCk8PDEyKTsJCSMgZW5jb2RlIG9mZnNldAorCSRvcGNvZGV8PSgxPDw1KSAgaWYgKCRtb2QgPX4gL14sbS8pOworCSRvcGNvZGV8PSgxPDwxMykgaWYgKCRtb2QgPX4gL14sbWIvKTsKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2UgeyAiXHQiLiRvcmlnOyB9Cit9OworCitteSAkc3RkID0gc3ViIHsKKyAgbXkgKCRtb2QsJGFyZ3MpID0gQF87CisgIG15ICRvcmlnID0gInN0ZCRtb2RcdCRhcmdzIjsKKworICAgIGlmICgkYXJncyA9fiAvJXIoWzAtOV0rKSwoXC0/WzAtOV0rKVwoJXIoWzAtOV0rKVwpLykJIyBmb3JtYXQgNgorICAgIHsJbXkgJG9wY29kZT0oMHgwMzw8MjYpfCgkMzw8MjEpfCgkMTw8MTYpfCgxPDwxMil8KDB4Qjw8Nik7CisJJG9wY29kZXw9KCgkMiYweEYpPDwxKXwoKCQyJjB4MTApPj40KTsJCQkjIGVuY29kZSBvZmZzZXQKKwkkb3Bjb2RlfD0oMTw8NSkgIGlmICgkbW9kID1+IC9eLG0vKTsKKwkkb3Bjb2RlfD0oMTw8MTMpIGlmICgkbW9kID1+IC9eLG1iLyk7CisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNlIHsgIlx0Ii4kb3JpZzsgfQorfTsKKworbXkgJGV4dHJkID0gc3ViIHsKKyAgbXkgKCRtb2QsJGFyZ3MpID0gQF87CisgIG15ICRvcmlnID0gImV4dHJkJG1vZFx0JGFyZ3MiOworCisgICAgIyBJIG9ubHkgaGF2ZSAiLHUiIGNvbXBsZXRlciwgaXQncyBpbXBsaWNpdGx5IGVuY29kZWQuLi4KKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksKFswLTldKyksKFswLTldKyksJXIoWzAtOV0rKS8pCSMgZm9ybWF0IDE1CisgICAgewlteSAkb3Bjb2RlPSgweDM2PDwyNil8KCQxPDwyMSl8KCQ0PDwxNik7CisJbXkgJGxlbj0zMi0kMzsKKwkkb3Bjb2RlIHw9ICgoJDImMHgyMCk8PDYpfCgoJDImMHgxZik8PDUpOwkJIyBlbmNvZGUgcG9zCisJJG9wY29kZSB8PSAoKCRsZW4mMHgyMCk8PDcpfCgkbGVuJjB4MWYpOwkJIyBlbmNvZGUgbGVuCisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksJXNhciwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTIKKyAgICB7CW15ICRvcGNvZGU9KDB4MzQ8PDI2KXwoJDE8PDIxKXwoJDM8PDE2KXwoMjw8MTEpfCgxPDw5KTsKKwlteSAkbGVuPTMyLSQyOworCSRvcGNvZGUgfD0gKCgkbGVuJjB4MjApPDwzKXwoJGxlbiYweDFmKTsJCSMgZW5jb2RlIGxlbgorCSRvcGNvZGUgfD0gKDE8PDEzKSBpZiAoJG1vZCA9fiAvLFwqKj0vKTsKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2UgeyAiXHQiLiRvcmlnOyB9Cit9OworCitteSAkc2hycGQgPSBzdWIgeworICBteSAoJG1vZCwkYXJncykgPSBAXzsKKyAgbXkgJG9yaWcgPSAic2hycGQkbW9kXHQkYXJncyI7CisKKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksJXIoWzAtOV0rKSwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTQKKyAgICB7CW15ICRvcGNvZGU9KDB4MzQ8PDI2KXwoJDI8PDIxKXwoJDE8PDE2KXwoMTw8MTApfCQ0OworCW15ICRjcG9zPTYzLSQzOworCSRvcGNvZGUgfD0gKCgkY3BvcyYweDIwKTw8Nil8KCgkY3BvcyYweDFmKTw8NSk7CQkjIGVuY29kZSBzYQorCXNwcmludGYgIlx0LldPUkRcdDB4JTA4eFx0OyAlcyIsJG9wY29kZSwkb3JpZzsKKyAgICB9CisgICAgZWxzZSB7ICJcdCIuJG9yaWc7IH0KK307CisKK215ICRzdWIgPSBzdWIgeworICBteSAoJG1vZCwkYXJncykgPSBAXzsKKyAgbXkgJG9yaWcgPSAic3ViJG1vZFx0JGFyZ3MiOworCisgICAgaWYgKCRtb2QgZXEgIixkYiIgJiYgJGFyZ3MgPX4gLyVyKFswLTldKyksJXIoWzAtOV0rKSwlcihbMC05XSspLykgeworCW15ICRvcGNvZGU9KDB4MDI8PDI2KXwoJDI8PDIxKXwoJDE8PDE2KXwkMzsKKwkkb3Bjb2RlfD0oMTw8MTApOwkjIGUxCisJJG9wY29kZXw9KDE8PDgpOwkjIGUyCisJJG9wY29kZXw9KDE8PDUpOwkjIGQKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWcKKyAgICB9CisgICAgZWxzZSB7ICJcdCIuJG9yaWc7IH0KK307CisKK3N1YiBhc3NlbWJsZSB7CisgIG15ICgkbW5lbW9uaWMsJG1vZCwkYXJncyk9QF87CisgIG15ICRvcGNvZGUgPSBldmFsKCJcJCRtbmVtb25pYyIpOworCisgICAgcmVmKCRvcGNvZGUpIGVxICdDT0RFJyA/ICYkb3Bjb2RlKCRtb2QsJGFyZ3MpIDogIlx0JG1uZW1vbmljJG1vZFx0JGFyZ3MiOworfQorCitmb3JlYWNoIChzcGxpdCgiXG4iLCRjb2RlKSkgeworCXMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2U7CisJIyBmbGlwIHdvcmQgb3JkZXIgaW4gNjQtYml0IG1vZGUuLi4KKwlzLyh4bXB5dVxzKykoJGZhaXwkZm5pKShbTFJdKS8kMS4kMi4oJDMgZXEgIkwiPyJSIjoiTCIpL2UgaWYgKCRCTl9TWj09OCk7CisJIyBhc3NlbWJsZSAyLjAgaW5zdHJ1Y3Rpb25zIGluIDMyLWJpdCBtb2RlLi4uCisJcy9eXHMrKFthLXpdKykoW1xTXSopXHMrKFtcU10qKS8mYXNzZW1ibGUoJDEsJDIsJDMpL2UgaWYgKCRCTl9TWj09NCk7CisKKwlwcmludCAkXywiXG4iOworfQorY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9wcGMtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vcHBjLW1vbnQucGwKaW5kZXggNzg0OWVhZS4uZjliNjk5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9wcGMtbW9udC5wbAorKysgYi9jcnlwdG8vYm4vYXNtL3BwYy1tb250LnBsCkBAIC0zMSw3ICszMSw2IEBACiAJJEJOU1o9CSRCSVRTLzg7CiAJJFNJWkVfVD00OwogCSRSWk9ORT0JMjI0OwotCSRGUkFNRT0JJFNJWkVfVCoxNjsKIAogCSRMRD0JImx3eiI7CQkjIGxvYWQKIAkkTERVPQkibHd6dSI7CQkjIGxvYWQgYW5kIHVwZGF0ZQpAQCAtNTEsNyArNTAsNiBAQAogCSRCTlNaPQkkQklUUy84OwogCSRTSVpFX1Q9ODsKIAkkUlpPTkU9CTI4ODsKLQkkRlJBTUU9CSRTSVpFX1QqMTY7CiAKIAkjIHNhbWUgYXMgYWJvdmUsIGJ1dCA2NC1iaXQgbW5lbW9uaWNzLi4uCiAJJExEPQkibGQiOwkJIyBsb2FkCkBAIC02OSw2ICs2Nyw5IEBACiAJJFBPUD0JJExEOwogfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KIAorJEZSQU1FPTgqJFNJWkVfVCskUlpPTkU7CiskTE9DQUxTPTgqJFNJWkVfVDsKKwogJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKICggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgogKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vcHBjLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgpAQCAtODksMTggKzkwLDE4IEBACiAkbmo9InIxMSI7CiAkdGo9InIxMiI7CiAjIG5vbi12b2xhdGlsZSByZWdpc3RlcnMKLSRpPSJyMTQiOwotJGo9InIxNSI7Ci0kdHA9InIxNiI7Ci0kbTA9InIxNyI7Ci0kbTE9InIxOCI7Ci0kbG8wPSJyMTkiOwotJGhpMD0icjIwIjsKLSRsbzE9InIyMSI7Ci0kaGkxPSJyMjIiOwotJGFsbz0icjIzIjsKLSRhaGk9InIyNCI7Ci0kbmxvPSJyMjUiOworJGk9InIyMCI7Ciskaj0icjIxIjsKKyR0cD0icjIyIjsKKyRtMD0icjIzIjsKKyRtMT0icjI0IjsKKyRsbzA9InIyNSI7CiskaGkwPSJyMjYiOworJGxvMT0icjI3IjsKKyRoaTE9InIyOCI7CiskYWxvPSJyMjkiOworJGFoaT0icjMwIjsKKyRubG89InIzMSI7CiAjCiAkbmhpPSJyMCI7CiAKQEAgLTEwOCw0MiArMTA5LDQ4IEBACiAubWFjaGluZSAiYW55IgogLnRleHQKIAotLmdsb2JsCS5ibl9tdWxfbW9udAorLmdsb2JsCS5ibl9tdWxfbW9udF9pbnQKIC5hbGlnbgk0Ci0uYm5fbXVsX21vbnQ6CisuYm5fbXVsX21vbnRfaW50OgogCWNtcHdpCSRudW0sNAogCW1yCSRycCxyMwkJOyAkcnAgaXMgcmVhc3NpZ25lZAogCWxpCXIzLDAKIAlibHRscgotCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJEJOU1o9PTQpOworCWNtcHdpCSRudW0sMzIJCTsgbG9uZ2VyIGtleSBwZXJmb3JtYW5jZSBpcyBub3QgYmV0dGVyCisJYmdlbHIKK19fXworJGNvZGUuPTw8X19fOwogCXNsd2kJJG51bSwkbnVtLGBsb2coJEJOU1opL2xvZygyKWAKIAlsaQkkdGosLTQwOTYKLQlhZGRpCSRvdmYsJG51bSxgJEZSQU1FKyRSWk9ORWAKKwlhZGRpCSRvdmYsJG51bSwkRlJBTUUKIAlzdWJmCSRvdmYsJG92Ziwkc3AJOyAkc3AtJG92ZgogCWFuZAkkb3ZmLCRvdmYsJHRqCTsgbWluaW1pemUgVExCIHVzYWdlCiAJc3ViZgkkb3ZmLCRzcCwkb3ZmCTsgJG92Zi0kc3AKKwltcgkkdGosJHNwCiAJc3J3aQkkbnVtLCRudW0sYGxvZygkQk5TWikvbG9nKDIpYAogCSRTVFVYCSRzcCwkc3AsJG92ZgogCi0JJFBVU0gJcjE0LGA0KiRTSVpFX1RgKCRzcCkKLQkkUFVTSAlyMTUsYDUqJFNJWkVfVGAoJHNwKQotCSRQVVNICXIxNixgNiokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjE3LGA3KiRTSVpFX1RgKCRzcCkKLQkkUFVTSAlyMTgsYDgqJFNJWkVfVGAoJHNwKQotCSRQVVNICXIxOSxgOSokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIwLGAxMCokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIxLGAxMSokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIyLGAxMiokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIzLGAxMyokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjI0LGAxNCokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjI1LGAxNSokU0laRV9UYCgkc3ApCisJJFBVU0gJcjIwLGAtMTIqJFNJWkVfVGAoJHRqKQorCSRQVVNICXIyMSxgLTExKiRTSVpFX1RgKCR0aikKKwkkUFVTSAlyMjIsYC0xMCokU0laRV9UYCgkdGopCisJJFBVU0gJcjIzLGAtOSokU0laRV9UYCgkdGopCisJJFBVU0gJcjI0LGAtOCokU0laRV9UYCgkdGopCisJJFBVU0gJcjI1LGAtNyokU0laRV9UYCgkdGopCisJJFBVU0gJcjI2LGAtNiokU0laRV9UYCgkdGopCisJJFBVU0gJcjI3LGAtNSokU0laRV9UYCgkdGopCisJJFBVU0gJcjI4LGAtNCokU0laRV9UYCgkdGopCisJJFBVU0gJcjI5LGAtMyokU0laRV9UYCgkdGopCisJJFBVU0gJcjMwLGAtMiokU0laRV9UYCgkdGopCisJJFBVU0gJcjMxLGAtMSokU0laRV9UYCgkdGopCiAKIAkkTEQJJG4wLDAoJG4wKQk7IHB1bGwgbjBbMF0gdmFsdWUKIAlhZGRpCSRudW0sJG51bSwtMgk7IGFkanVzdCAkbnVtIGZvciBjb3VudGVyIHJlZ2lzdGVyCiAMCiAJJExECSRtMCwwKCRicCkJOyBtMD1icFswXQogCSRMRAkkYWosMCgkYXApCTsgYXBbMF0KLQlhZGRpCSR0cCwkc3AsJEZSQU1FCisJYWRkaQkkdHAsJHNwLCRMT0NBTFMKIAkkVU1VTEwJJGxvMCwkYWosJG0wCTsgYXBbMF0qYnBbMF0KIAkkVU1VTEgJJGhpMCwkYWosJG0wCiAKQEAgLTIwNSw4ICsyMTIsOCBAQAogTG91dGVyOgogCSRMRFgJJG0wLCRicCwkaQk7IG0wPWJwW2ldCiAJJExECSRhaiwwKCRhcCkJOyBhcFswXQotCWFkZGkJJHRwLCRzcCwkRlJBTUUKLQkkTEQJJHRqLCRGUkFNRSgkc3ApCTsgdHBbMF0KKwlhZGRpCSR0cCwkc3AsJExPQ0FMUworCSRMRAkkdGosJExPQ0FMUygkc3ApOyB0cFswXQogCSRVTVVMTAkkbG8wLCRhaiwkbTAJOyBhcFswXSpicFtpXQogCSRVTVVMSAkkaGkwLCRhaiwkbTAKIAkkTEQJJGFqLCRCTlNaKCRhcCkJOyBhcFsxXQpAQCAtMjczLDcgKzI4MCw3IEBACiAMCiAJYWRkaQkkbnVtLCRudW0sMgk7IHJlc3RvcmUgJG51bQogCXN1YmZjCSRqLCRqLCRqCTsgaj0wIGFuZCAiY2xlYXIiIFhFUltDQV0KLQlhZGRpCSR0cCwkc3AsJEZSQU1FCisJYWRkaQkkdHAsJHNwLCRMT0NBTFMKIAltdGN0cgkkbnVtCiAKIC5hbGlnbgk0CkBAIC0yOTksMjMgKzMwNiwyNyBAQAogCWFkZGkJJGosJGosJEJOU1oKIAliZG56LQlMY29weQogCi0JJFBPUAlyMTQsYDQqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjE1LGA1KiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIxNixgNiokU0laRV9UYCgkc3ApCi0JJFBPUAlyMTcsYDcqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjE4LGA4KiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIxOSxgOSokU0laRV9UYCgkc3ApCi0JJFBPUAlyMjAsYDEwKiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIyMSxgMTEqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjIyLGAxMiokU0laRV9UYCgkc3ApCi0JJFBPUAlyMjMsYDEzKiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIyNCxgMTQqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjI1LGAxNSokU0laRV9UYCgkc3ApCi0JJFBPUAkkc3AsMCgkc3ApCisJJFBPUAkkdGosMCgkc3ApCiAJbGkJcjMsMQorCSRQT1AJcjIwLGAtMTIqJFNJWkVfVGAoJHRqKQorCSRQT1AJcjIxLGAtMTEqJFNJWkVfVGAoJHRqKQorCSRQT1AJcjIyLGAtMTAqJFNJWkVfVGAoJHRqKQorCSRQT1AJcjIzLGAtOSokU0laRV9UYCgkdGopCisJJFBPUAlyMjQsYC04KiRTSVpFX1RgKCR0aikKKwkkUE9QCXIyNSxgLTcqJFNJWkVfVGAoJHRqKQorCSRQT1AJcjI2LGAtNiokU0laRV9UYCgkdGopCisJJFBPUAlyMjcsYC01KiRTSVpFX1RgKCR0aikKKwkkUE9QCXIyOCxgLTQqJFNJWkVfVGAoJHRqKQorCSRQT1AJcjI5LGAtMyokU0laRV9UYCgkdGopCisJJFBPUAlyMzAsYC0yKiRTSVpFX1RgKCR0aikKKwkkUE9QCXIzMSxgLTEqJFNJWkVfVGAoJHRqKQorCW1yCSRzcCwkdGoKIAlibHIKIAkubG9uZwkwCi0uYXNjaXogICJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciBQUEMsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBmeS5jaGFsbWVycy5zZT4iCisJLmJ5dGUJMCwxMiw0LDAsMHg4MCwxMiw2LDAKKwkubG9uZwkwCisKKy5hc2NpeiAgIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIFBQQywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKIF9fXwogCiAkY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vcHBjLnBsIGIvY3J5cHRvL2JuL2FzbS9wcGMucGwKaW5kZXggZjQwOTMxNy4uMTI0OWNlMiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2FzbS9wcGMucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9wcGMucGwKQEAgLTM4OSw3ICszODksOSBAQAogCSRTVAkJcjksYDYqJEJOU1pgKHIzKQkjcls2XT1jMQogCSRTVAkJcjEwLGA3KiRCTlNaYChyMykJI3JbN109YzIKIAlibHIKLQkubG9uZwkweDAwMDAwMDAwCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwyLDAKKwkubG9uZwkwCiAKICMKICMJTk9URToJVGhlIGZvbGxvd2luZyBsYWJlbCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkIHRvCkBAIC04MTQsOCArODE2LDkgQEAKIAogCiAJYmxyCi0KLQkubG9uZwkweDAwMDAwMDAwCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwyLDAKKwkubG9uZwkwCiAKICMKICMJTk9URToJVGhlIGZvbGxvd2luZyBsYWJlbCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkIHRvCkBAIC05NjYsNyArOTY5LDkgQEAKIAkkU1QJcjEwLGA2KiRCTlNaYChyMykJI3JbNl09YzEKIAkkU1QJcjExLGA3KiRCTlNaYChyMykJI3JbN109YzIKIAlibHIKLQkubG9uZwkweDAwMDAwMDAwCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwzLDAKKwkubG9uZwkwCiAKICMKICMJTk9URToJVGhlIGZvbGxvd2luZyBsYWJlbCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkIHRvCkBAIC0xNTAyLDcgKzE1MDcsOSBAQAogCSRTVAlyMTIsYDE0KiRCTlNaYChyMykJI3JbMTRdPWMzOwogCSRTVAlyMTAsYDE1KiRCTlNaYChyMykJI3JbMTVdPWMxOwogCWJscgotCS5sb25nCTB4MDAwMDAwMDAKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDMsMAorCS5sb25nCTAKIAogIwogIwlOT1RFOglUaGUgZm9sbG93aW5nIGxhYmVsIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQgdG8KQEAgLTE1NTAsOCArMTU1Nyw5IEBACiAJc3ViZnplCXIzLHIwCQkjIGlmIGNhcnJ5IGJpdCBpcyBzZXQgdGhlbiByMyA9IDAgZWxzZSAtMQogCWFuZGkuCXIzLHIzLDEgICAgICAgICAjIGtlZXAgb25seSBsYXN0IGJpdC4KIAlibHIKLQkubG9uZwkweDAwMDAwMDAwCi0KKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDQsMAorCS5sb25nCTAKIAogIwogIwlOT1RFOglUaGUgZm9sbG93aW5nIGxhYmVsIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQgdG8KQEAgLTE1OTQsNyArMTYwMiw5IEBACiBMcHBjYXNtX2FkZF9hZGlvczoJCiAJYWRkemUJcjMscjAJCQkjcmV0dXJuIGNhcnJ5IGJpdC4KIAlibHIKLQkubG9uZwkweDAwMDAwMDAwCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCw0LDAKKwkubG9uZwkwCiAKICMKICMJTk9URToJVGhlIGZvbGxvd2luZyBsYWJlbCBuYW1lIHNob3VsZCBiZSBjaGFuZ2VkIHRvCkBAIC0xNzA3LDcgKzE3MTcsOSBAQAogTHBwY2FzbV9kaXY5OgogCW9yCXIzLHI4LHIwCiAJYmxyCi0JLmxvbmcJMHgwMDAwMDAwMAorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMywwCisJLmxvbmcJMAogCiAjCiAjCU5PVEU6CVRoZSBmb2xsb3dpbmcgbGFiZWwgbmFtZSBzaG91bGQgYmUgY2hhbmdlZCB0bwpAQCAtMTc0Niw4ICsxNzU4LDkgQEAKIAliZG56LQlMcHBjYXNtX3Nxcl9tYWlubG9vcAogTHBwY2FzbV9zcXJfYWRpb3M6CQogCWJscgotCS5sb25nCTB4MDAwMDAwMDAKLQorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMywwCisJLmxvbmcJMAogCiAjCiAjCU5PVEU6CVRoZSBmb2xsb3dpbmcgbGFiZWwgbmFtZSBzaG91bGQgYmUgY2hhbmdlZCB0bwpAQCAtMTg1MCw3ICsxODYzLDkgQEAKIExwcGNhc21fbXdfT1ZFUjoJCiAJYWRkaQlyMyxyMTIsMAogCWJscgotCS5sb25nCTB4MDAwMDAwMDAKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDQsMAorCS5sb25nCTAKIAogIwogIwlOT1RFOglUaGUgZm9sbG93aW5nIGxhYmVsIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQgdG8KQEAgLTE5NzMsNyArMTk4OCw5IEBACiBMcHBjYXNtX21hd19hZGlvczoJCiAJYWRkaQlyMyxyMTIsMAogCWJscgotCS5sb25nCTB4MDAwMDAwMDAKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDQsMAorCS5sb25nCTAKIAkuYWxpZ24JNAogRU9GCiAkZGF0YSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vcHBjNjQtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vcHBjNjQtbW9udC5wbAppbmRleCAzNDQ5YjM1Li5hMTRlNzY5IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL3BwYzY0LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9wcGM2NC1tb250LnBsCkBAIC00NSwyMyArNDUsNDAgQEAKICMgb24gMS44R0h6IFBQQzk3MCwgaXQncyBvbmx5IDUtNTUlIGZhc3Rlci4gU3RpbGwgZmFyIGZyb20gaW1wcmVzc2l2ZQogIyBpbiBhYnNvbHV0ZSB0ZXJtcywgYnV0IGl0J3MgYXBwYXJlbnRseSB0aGUgd2F5IFBvd2VyIDYgaXMuLi4KIAorIyBEZWNlbWJlciAyMDA5CisKKyMgQWRhcHRlZCBmb3IgMzItYml0IGJ1aWxkIHRoaXMgbW9kdWxlIGRlbGl2ZXJzIDI1LTEyMCUsIHllcywgbW9yZQorIyB0aGFuICp0d2ljZSogZm9yIGxvbmdlciBrZXlzLCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvdmVyIDMyLWJpdAorIyBwcGMtbW9udC5wbCBvbiAxLjhHSHogUFBDOTcwLiBIb3dldmVyISBUaGlzIGltcGxlbWVudGF0aW9uIHV0aWxpemVzCisjIGV2ZW4gNjQtYml0IGludGVnZXIgb3BlcmF0aW9ucyBhbmQgdGhlIHRyb3VibGUgaXMgdGhhdCBtb3N0IFBQQworIyBvcGVyYXRpbmcgc3lzdGVtcyBkb24ndCBwcmVzZXJ2ZSB1cHBlciBoYWx2ZXMgb2YgZ2VuZXJhbCBwdXJwb3NlCisjIHJlZ2lzdGVycyB1cG9uIDMyLWJpdCBzaWduYWwgZGVsaXZlcnkuIFRoZXkgZG8gcHJlc2VydmUgdGhlbSB1cG9uCisjIGNvbnRleHQgc3dpdGNoLCBidXQgbm90IHNpZ25hbGxpbmc6LSggVGhpcyBtZWFucyB0aGF0IGFzeW5jaHJvbm91cworIyBzaWduYWxzIGhhdmUgdG8gYmUgYmxvY2tlZCB1cG9uIGVudHJ5IHRvIHRoaXMgc3Vicm91dGluZS4gU2lnbmFsCisjIG1hc2tpbmcgKGFuZCBvZiBjb3Vyc2UgY29tcGxlbWVudGFyeSB1bm1hc2tpbmcpIGhhcyBxdWl0ZSBhbiBpbXBhY3QKKyMgb24gcGVyZm9ybWFuY2UsIG5hdHVyYWxseSBsYXJnZXIgZm9yIHNob3J0ZXIga2V5cy4gSXQncyBzbyBzZXZlcmUKKyMgdGhhdCA1MTItYml0IGtleSBwZXJmb3JtYW5jZSBjYW4gYmUgYXMgbG93IGFzIDEvMyBvZiBleHBlY3RlZCBvbmUuCisjIFRoaXMgaXMgd2h5IHRoaXMgcm91dGluZSBjYW4gYmUgZW5nYWdlZCBmb3IgbG9uZ2VyIGtleSBvcGVyYXRpb25zCisjIG9ubHkgb24gdGhlc2UgT1Nlcywgc2VlIGNyeXB0by9wcGNjYXAuYyBmb3IgZnVydGhlciBkZXRhaWxzLiBNYWNPUyBYCisjIGlzIGFuIGV4Y2VwdGlvbiBmcm9tIHRoaXMgYW5kIGRvZXNuJ3QgcmVxdWlyZSBzaWduYWwgbWFza2luZywgYW5kCisjIHRoYXQncyB3aGVyZSBhYm92ZSBpbXByb3ZlbWVudCBjb2VmZmljaWVudHMgd2VyZSBjb2xsZWN0ZWQuIEZvcgorIyBvdGhlcnMgYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gYnJlYWsgZGVwZW5kZW5jZSBvbiB1cHBlciBoYWx2ZXMgb2YKKyMgR1BScyBieSBzdGlja2luZyB0byAzMi1iaXQgaW50ZWdlciBvcGVyYXRpb25zLi4uCisKICRmbGF2b3VyID0gc2hpZnQ7CiAKIGlmICgkZmxhdm91ciA9fiAvMzIvKSB7CiAJJFNJWkVfVD00OwogCSRSWk9ORT0JMjI0OwotCSRGUkFNRT0JJFNJWkVfVCoxMis4KjEyOwotCSRmbmFtZT0JImJuX211bF9tb250X3BwYzY0IjsKKwkkZm5hbWU9CSJibl9tdWxfbW9udF9mcHU2NCI7CiAKIAkkU1RVWD0JInN0d3V4IjsJIyBzdG9yZSBpbmRleGVkIGFuZCB1cGRhdGUKIAkkUFVTSD0JInN0dyI7CiAJJFBPUD0JImx3eiI7Ci0JZGllICJub3QgaW1wbGVtZW50ZWQgeWV0IjsKIH0gZWxzaWYgKCRmbGF2b3VyID1+IC82NC8pIHsKIAkkU0laRV9UPTg7CiAJJFJaT05FPQkyODg7Ci0JJEZSQU1FPQkkU0laRV9UKjEyKzgqMTI7Ci0JJGZuYW1lPQkiYm5fbXVsX21vbnQiOworCSRmbmFtZT0JImJuX211bF9tb250X2ZwdTY0IjsKIAogCSMgc2FtZSBhcyBhYm92ZSwgYnV0IDY0LWJpdCBtbmVtb25pY3MuLi4KIAkkU1RVWD0JInN0ZHV4IjsJIyBzdG9yZSBpbmRleGVkIGFuZCB1cGRhdGUKQEAgLTc2LDcgKzkzLDcgQEAKIAogb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAiLnNoaWZ0IHx8IGRpZSAiY2FuJ3QgY2FsbCAkeGxhdGU6ICQhIjsKIAotJEZSQU1FPSgkRlJBTUUrNjMpJn42MzsKKyRGUkFNRT02NDsJIyBwYWRkZWQgZnJhbWUgaGVhZGVyCiAkVFJBTlNGRVI9MTYqODsKIAogJGNhcnJ5PSJyMCI7CkBAIC05MywxNiArMTEwLDE2IEBACiAkaj0icjExIjsKICRpPSJyMTIiOwogIyBub24tdm9sYXRpbGUgcmVnaXN0ZXJzCi0kbmFwX2Q9InIxNCI7CSMgaW50ZXJsZWF2ZWQgYXAgYW5kIG5wIGluIGRvdWJsZSBmb3JtYXQKLSRhMD0icjE1IjsJIyBhcFswXQotJHQwPSJyMTYiOwkjIHRlbXBvcmFyeSByZWdpc3RlcnMKLSR0MT0icjE3IjsKLSR0Mj0icjE4IjsKLSR0Mz0icjE5IjsKLSR0ND0icjIwIjsKLSR0NT0icjIxIjsKLSR0Nj0icjIyIjsKLSR0Nz0icjIzIjsKKyRuYXBfZD0icjIyIjsJIyBpbnRlcmxlYXZlZCBhcCBhbmQgbnAgaW4gZG91YmxlIGZvcm1hdAorJGEwPSJyMjMiOwkjIGFwWzBdCiskdDA9InIyNCI7CSMgdGVtcG9yYXJ5IHJlZ2lzdGVycworJHQxPSJyMjUiOworJHQyPSJyMjYiOworJHQzPSJyMjciOworJHQ0PSJyMjgiOworJHQ1PSJyMjkiOworJHQ2PSJyMzAiOworJHQ3PSJyMzEiOwogCiAjIFBQQyBvZmZlcnMgZW5vdWdoIHJlZ2lzdGVyIGJhbmsgY2FwYWNpdHkgdG8gdW5yb2xsIGlubmVyIGxvb3BzIHR3aWNlCiAjCkBAIC0xMzIsMjggKzE0OSwxNyBAQAogJG5hPSJmNCI7CSRuYj0iZjUiOwkkbmM9ImY2IjsJJG5kPSJmNyI7CiAkZG90YT0iZjgiOwkkZG90Yj0iZjkiOwogJEEwPSJmMTAiOwkkQTE9ImYxMSI7CSRBMj0iZjEyIjsJJEEzPSJmMTMiOwotJE4wPSJmMTQiOwkkTjE9ImYxNSI7CSROMj0iZjE2IjsJJE4zPSJmMTciOwotJFQwYT0iZjE4IjsJJFQwYj0iZjE5IjsKLSRUMWE9ImYyMCI7CSRUMWI9ImYyMSI7Ci0kVDJhPSJmMjIiOwkkVDJiPSJmMjMiOwotJFQzYT0iZjI0IjsJJFQzYj0iZjI1IjsKKyROMD0iZjIwIjsJJE4xPSJmMjEiOwkkTjI9ImYyMiI7CSROMz0iZjIzIjsKKyRUMGE9ImYyNCI7CSRUMGI9ImYyNSI7CiskVDFhPSJmMjYiOwkkVDFiPSJmMjciOworJFQyYT0iZjI4IjsJJFQyYj0iZjI5IjsKKyRUM2E9ImYzMCI7CSRUM2I9ImYzMSI7CiAMCiAjIHNwLS0tLS0tLS0tLS0+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAjCQl8IHNhdmVkIHNwCQkJfAogIwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0jCQl8CQkJCXwKLSMJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIwkJfCAxMCBzYXZlZCBncHIsIHIxNC1yMjMJCXwKICMJCS4JCQkJLgotIwkJLgkJCQkuCi0jICAgKzEyKnNpemVfdAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSMJCXwgMTIgc2F2ZWQgZnByLCBmMTQtZjI1CQl8Ci0jCQkuCQkJCS4KLSMJCS4JCQkJLgotIyAgICsxMio4CSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotIwkJfCBwYWRkaW5nIHRvIDY0IGJ5dGUgYm91bmRhcnkJfAotIwkJLgkJCQkuCi0jICAgK1gJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIyAgICs2NAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAjCQl8IDE2IGdwcjwtPmZwciB0cmFuc2ZlciB6b25lCXwKICMJCS4JCQkJLgogIwkJLgkJCQkuCkBAIC0xNzMsNiArMTc5LDE2IEBACiAjCQkuCQkJCS4KICMJCS4JCQkJLgogIwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCQkuCQkJCS4KKyMgICAtMTIqc2l6ZV90CSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIwkJfCAxMCBzYXZlZCBncHIsIHIyMi1yMzEJCXwKKyMJCS4JCQkJLgorIwkJLgkJCQkuCisjICAgLTEyKjgJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisjCQl8IDEyIHNhdmVkIGZwciwgZjIwLWYzMQkJfAorIwkJLgkJCQkuCisjCQkuCQkJCS4KKyMJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogDAogJGNvZGU9PDxfX187CiAubWFjaGluZSAiYW55IgpAQCAtMTgxLDE0ICsxOTcsMTQgQEAKIC5nbG9ibAkuJGZuYW1lCiAuYWxpZ24JNQogLiRmbmFtZToKLQljbXB3aQkkbnVtLDQKKwljbXB3aQkkbnVtLGAzKjgvJFNJWkVfVGAKIAltcgkkcnAscjMJCTsgJHJwIGlzIHJlYXNzaWduZWQKIAlsaQlyMywwCQk7IHBvc3NpYmxlICJub3QgaGFuZGxlZCIgcmV0dXJuIGNvZGUKIAlibHRsci0KLQlhbmRpLglyMCwkbnVtLDEJOyAkbnVtIGhhcyB0byBiZSBldmVuCisJYW5kaS4JcjAsJG51bSxgMTYvJFNJWkVfVC0xYAkJOyAkbnVtIGhhcyB0byBiZSAiZXZlbiIKIAlibmVsci0KIAotCXNsd2kJJG51bSwkbnVtLDMJOyBudW0qPTgKKwlzbHdpCSRudW0sJG51bSxgbG9nKCRTSVpFX1QpL2xvZygyKWAJOyBudW0qPXNpemVvZihCTl9MT05HKQogCWxpCSRpLC00MDk2CiAJc2x3aQkkdHAsJG51bSwyCTsgcGxhY2UgZm9yIHthbn1wX3tsaH1bbnVtXSwgaS5lLiA0Km51bQogCWFkZAkkdHAsJHRwLCRudW0JOyBwbGFjZSBmb3IgdHBbbnVtKzFdCkBAIC0xOTYsMzUgKzIxMiw1MCBAQAogCXN1YmYJJHRwLCR0cCwkc3AJOyAkc3AtJHRwCiAJYW5kCSR0cCwkdHAsJGkJOyBtaW5pbWl6ZSBUTEIgdXNhZ2UKIAlzdWJmCSR0cCwkc3AsJHRwCTsgJHRwLSRzcAorCW1yCSRpLCRzcAogCSRTVFVYCSRzcCwkc3AsJHRwCTsgYWxsb2NhCiAKLQkkUFVTSAlyMTQsYDIqJFNJWkVfVGAoJHNwKQotCSRQVVNICXIxNSxgMyokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjE2LGA0KiRTSVpFX1RgKCRzcCkKLQkkUFVTSAlyMTcsYDUqJFNJWkVfVGAoJHNwKQotCSRQVVNICXIxOCxgNiokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjE5LGA3KiRTSVpFX1RgKCRzcCkKLQkkUFVTSAlyMjAsYDgqJFNJWkVfVGAoJHNwKQotCSRQVVNICXIyMSxgOSokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIyLGAxMCokU0laRV9UYCgkc3ApCi0JJFBVU0gJcjIzLGAxMSokU0laRV9UYCgkc3ApCi0Jc3RmZAlmMTQsYDEyKiRTSVpFX1QrMGAoJHNwKQotCXN0ZmQJZjE1LGAxMiokU0laRV9UKzhgKCRzcCkKLQlzdGZkCWYxNixgMTIqJFNJWkVfVCsxNmAoJHNwKQotCXN0ZmQJZjE3LGAxMiokU0laRV9UKzI0YCgkc3ApCi0Jc3RmZAlmMTgsYDEyKiRTSVpFX1QrMzJgKCRzcCkKLQlzdGZkCWYxOSxgMTIqJFNJWkVfVCs0MGAoJHNwKQotCXN0ZmQJZjIwLGAxMiokU0laRV9UKzQ4YCgkc3ApCi0Jc3RmZAlmMjEsYDEyKiRTSVpFX1QrNTZgKCRzcCkKLQlzdGZkCWYyMixgMTIqJFNJWkVfVCs2NGAoJHNwKQotCXN0ZmQJZjIzLGAxMiokU0laRV9UKzcyYCgkc3ApCi0Jc3RmZAlmMjQsYDEyKiRTSVpFX1QrODBgKCRzcCkKLQlzdGZkCWYyNSxgMTIqJFNJWkVfVCs4OGAoJHNwKQotCisJJFBVU0gJcjIyLGAtMTIqOC0xMCokU0laRV9UYCgkaSkKKwkkUFVTSAlyMjMsYC0xMio4LTkqJFNJWkVfVGAoJGkpCisJJFBVU0gJcjI0LGAtMTIqOC04KiRTSVpFX1RgKCRpKQorCSRQVVNICXIyNSxgLTEyKjgtNyokU0laRV9UYCgkaSkKKwkkUFVTSAlyMjYsYC0xMio4LTYqJFNJWkVfVGAoJGkpCisJJFBVU0gJcjI3LGAtMTIqOC01KiRTSVpFX1RgKCRpKQorCSRQVVNICXIyOCxgLTEyKjgtNCokU0laRV9UYCgkaSkKKwkkUFVTSAlyMjksYC0xMio4LTMqJFNJWkVfVGAoJGkpCisJJFBVU0gJcjMwLGAtMTIqOC0yKiRTSVpFX1RgKCRpKQorCSRQVVNICXIzMSxgLTEyKjgtMSokU0laRV9UYCgkaSkKKwlzdGZkCWYyMCxgLTEyKjhgKCRpKQorCXN0ZmQJZjIxLGAtMTEqOGAoJGkpCisJc3RmZAlmMjIsYC0xMCo4YCgkaSkKKwlzdGZkCWYyMyxgLTkqOGAoJGkpCisJc3RmZAlmMjQsYC04KjhgKCRpKQorCXN0ZmQJZjI1LGAtNyo4YCgkaSkKKwlzdGZkCWYyNixgLTYqOGAoJGkpCisJc3RmZAlmMjcsYC01KjhgKCRpKQorCXN0ZmQJZjI4LGAtNCo4YCgkaSkKKwlzdGZkCWYyOSxgLTMqOGAoJGkpCisJc3RmZAlmMzAsYC0yKjhgKCRpKQorCXN0ZmQJZjMxLGAtMSo4YCgkaSkKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT04KTsKIAlsZAkkYTAsMCgkYXApCTsgcHVsbCBhcFswXSB2YWx1ZQogCWxkCSRuMCwwKCRuMCkJOyBwdWxsIG4wWzBdIHZhbHVlCiAJbGQJJHQzLDAoJGJwKQk7IGJwWzBdCi0KK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwltcgkkdDEsJG4wCisJbHd6CSRhMCwwKCRhcCkJOyBwdWxsIGFwWzAsMV0gdmFsdWUKKwlsd3oJJHQwLDQoJGFwKQorCWx3egkkbjAsMCgkdDEpCTsgcHVsbCBuMFswLDFdIHZhbHVlCisJbHd6CSR0MSw0KCR0MSkKKwlsd3oJJHQzLDAoJGJwKQk7IGJwWzAsMV0KKwlsd3oJJHQyLDQoJGJwKQorCWluc3JkaQkkYTAsJHQwLDMyLDAKKwlpbnNyZGkJJG4wLCR0MSwzMiwwCisJaW5zcmRpCSR0MywkdDIsMzIsMAorX19fCiskY29kZS49PDxfX187CiAJYWRkaQkkdHAsJHNwLGAkRlJBTUUrJFRSQU5TRkVSKzgrNjRgCiAJbGkJJGksLTY0CiAJYWRkCSRuYXBfZCwkdHAsJG51bQpAQCAtMjU4LDYgKzI4OSw4IEBACiAJc3RkCSR0NSxgJEZSQU1FKzQwYCgkc3ApCiAJc3RkCSR0NixgJEZSQU1FKzQ4YCgkc3ApCiAJc3RkCSR0NyxgJEZSQU1FKzU2YCgkc3ApCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09OCk7CiAJbHd6CSR0MCw0KCRhcCkJCTsgbG9hZCBhW2pdIGFzIDMyLWJpdCB3b3JkIHBhaXIKIAlsd3oJJHQxLDAoJGFwKQogCWx3egkkdDIsMTIoJGFwKQkJOyBsb2FkIGFbaisxXSBhcyAzMi1iaXQgd29yZCBwYWlyCkBAIC0yNjYsNiArMjk5LDE4IEBACiAJbHd6CSR0NSwwKCRucCkKIAlsd3oJJHQ2LDEyKCRucCkJCTsgbG9hZCBuW2orMV0gYXMgMzItYml0IHdvcmQgcGFpcgogCWx3egkkdDcsOCgkbnApCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CisJbHd6CSR0MCwwKCRhcCkJCTsgbG9hZCBhW2ouLmorM10gYXMgMzItYml0IHdvcmQgcGFpcnMKKwlsd3oJJHQxLDQoJGFwKQorCWx3egkkdDIsOCgkYXApCisJbHd6CSR0MywxMigkYXApCisJbHd6CSR0NCwwKCRucCkJCTsgbG9hZCBuW2ouLmorM10gYXMgMzItYml0IHdvcmQgcGFpcnMKKwlsd3oJJHQ1LDQoJG5wKQorCWx3egkkdDYsOCgkbnApCisJbHd6CSR0NywxMigkbnApCitfX18KKyRjb2RlLj08PF9fXzsKIAlsZmQJJGJhLGAkRlJBTUUrMGAoJHNwKQogCWxmZAkkYmIsYCRGUkFNRSs4YCgkc3ApCiAJbGZkCSRiYyxgJEZSQU1FKzE2YCgkc3ApCkBAIC0zNzQsNiArNDE5LDggQEAKIAwKIC5hbGlnbgk1CiBMMXN0OgorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTgpOwogCWx3egkkdDAsNCgkYXApCQk7IGxvYWQgYVtqXSBhcyAzMi1iaXQgd29yZCBwYWlyCiAJbHd6CSR0MSwwKCRhcCkKIAlsd3oJJHQyLDEyKCRhcCkJCTsgbG9hZCBhW2orMV0gYXMgMzItYml0IHdvcmQgcGFpcgpAQCAtMzgyLDYgKzQyOSwxOCBAQAogCWx3egkkdDUsMCgkbnApCiAJbHd6CSR0NiwxMigkbnApCQk7IGxvYWQgbltqKzFdIGFzIDMyLWJpdCB3b3JkIHBhaXIKIAlsd3oJJHQ3LDgoJG5wKQorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTQpOworCWx3egkkdDAsMCgkYXApCQk7IGxvYWQgYVtqLi5qKzNdIGFzIDMyLWJpdCB3b3JkIHBhaXJzCisJbHd6CSR0MSw0KCRhcCkKKwlsd3oJJHQyLDgoJGFwKQorCWx3egkkdDMsMTIoJGFwKQorCWx3egkkdDQsMCgkbnApCQk7IGxvYWQgbltqLi5qKzNdIGFzIDMyLWJpdCB3b3JkIHBhaXJzCisJbHd6CSR0NSw0KCRucCkKKwlsd3oJJHQ2LDgoJG5wKQorCWx3egkkdDcsMTIoJG5wKQorX19fCiskY29kZS49PDxfX187CiAJc3RkCSR0MCxgJEZSQU1FKzY0YCgkc3ApCiAJc3RkCSR0MSxgJEZSQU1FKzcyYCgkc3ApCiAJc3RkCSR0MixgJEZSQU1FKzgwYCgkc3ApCkBAIC01NTksNyArNjE4LDE3IEBACiAJbGkJJGksOAkJCTsgaT0xCiAuYWxpZ24JNQogTG91dGVyOgorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTgpOwogCWxkeAkkdDMsJGJwLCRpCTsgYnBbaV0KK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwlhZGQJJHQwLCRicCwkaQorCWx3egkkdDMsMCgkdDApCQk7IGJwW2ksaSsxXQorCWx3egkkdDAsNCgkdDApCisJaW5zcmRpCSR0MywkdDAsMzIsMAorX19fCiskY29kZS49PDxfX187CiAJbGQJJHQ2LGAkRlJBTUUrJFRSQU5TRkVSKzhgKCRzcCkJOyB0cFswXQogCW11bGxkCSR0NywkYTAsJHQzCTsgYXBbMF0qYnBbaV0KIApAQCAtNzYxLDYgKzgzMCwxMyBAQAogCXN0ZmQJJFQwYixgJEZSQU1FKzhgKCRzcCkKIAkgYWRkCSR0NywkdDcsJGNhcnJ5CiAJIGFkZGMJJHQzLCR0MCwkdDEKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsJCSMgYWRqdXN0IFhFUltDQV0KKwlleHRyZGkJJHQwLCR0MCwzMiwwCisJZXh0cmRpCSR0MSwkdDEsMzIsMAorCWFkZGUJJHQwLCR0MCwkdDEKK19fXworJGNvZGUuPTw8X19fOwogCXN0ZmQJJFQxYSxgJEZSQU1FKzE2YCgkc3ApCiAJc3RmZAkkVDFiLGAkRlJBTUUrMjRgKCRzcCkKIAkgaW5zcmRpCSR0NCwkdDcsMTYsMAkJOyA2NC4uMTI3IGJpdHMKQEAgLTc2OCw2ICs4NDQsMTMgQEAKIAlzdGZkCSRUMmEsYCRGUkFNRSszMmAoJHNwKQogCXN0ZmQJJFQyYixgJEZSQU1FKzQwYCgkc3ApCiAJIGFkZGUJJHQ1LCR0NCwkdDIKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsJCSMgYWRqdXN0IFhFUltDQV0KKwlleHRyZGkJJHQ0LCR0NCwzMiwwCisJZXh0cmRpCSR0MiwkdDIsMzIsMAorCWFkZGUJJHQ0LCR0NCwkdDIKK19fXworJGNvZGUuPTw8X19fOwogCXN0ZmQJJFQzYSxgJEZSQU1FKzQ4YCgkc3ApCiAJc3RmZAkkVDNiLGAkRlJBTUUrNTZgKCRzcCkKIAkgYWRkemUJJGNhcnJ5LCRjYXJyeQpAQCAtODE2LDcgKzg5OSwyMSBAQAogCWxkCSR0NyxgJEZSQU1FKzcyYCgkc3ApCiAKIAlhZGRjCSR0MywkdDAsJHQxCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CQkjIGFkanVzdCBYRVJbQ0FdCisJZXh0cmRpCSR0MCwkdDAsMzIsMAorCWV4dHJkaQkkdDEsJHQxLDMyLDAKKwlhZGRlCSR0MCwkdDAsJHQxCitfX18KKyRjb2RlLj08PF9fXzsKIAlhZGRlCSR0NSwkdDQsJHQyCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CQkjIGFkanVzdCBYRVJbQ0FdCisJZXh0cmRpCSR0NCwkdDQsMzIsMAorCWV4dHJkaQkkdDIsJHQyLDMyLDAKKwlhZGRlCSR0NCwkdDQsJHQyCitfX18KKyRjb2RlLj08PF9fXzsKIAlhZGR6ZQkkY2FycnksJGNhcnJ5CiAKIAlzdGQJJHQzLC0xNigkdHApCQk7IHRwW2otMV0KQEAgLTgzNSw3ICs5MzIsOSBAQAogCXN1YmYJJG5hcF9kLCR0NywkbmFwX2QJOyByZXdpbmQgcG9pbnRlcgogCWNtcHcJJGksJG51bQogCWJsdC0JTG91dGVyCitfX18KIAwKKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09OCk7CiAJc3ViZgkkbnAsJG51bSwkbnAJOyByZXdpbmQgbnAKIAlhZGRpCSRqLCRqLDEJCTsgcmVzdG9yZSBjb3VudGVyCiAJc3ViZmMJJGksJGksJGkJOyBqPTAgYW5kICJjbGVhciIgWEVSW0NBXQpAQCAtODgzLDM0ICs5ODIsMTA1IEBACiAJc3RkeAkkaSwkdDQsJGkKIAlhZGRpCSRpLCRpLDE2CiAJYmRuei0JTGNvcHkKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwlzdWJmCSRucCwkbnVtLCRucAk7IHJld2luZCBucAorCWFkZGkJJGosJGosMQkJOyByZXN0b3JlIGNvdW50ZXIKKwlzdWJmYwkkaSwkaSwkaQk7IGo9MCBhbmQgImNsZWFyIiBYRVJbQ0FdCisJYWRkaQkkdHAsJHNwLGAkRlJBTUUrJFRSQU5TRkVSYAorCWFkZGkJJG5wLCRucCwtNAorCWFkZGkJJHJwLCRycCwtNAorCWFkZGkJJGFwLCRzcCxgJEZSQU1FKyRUUkFOU0ZFUis0YAorCW10Y3RyCSRqCisKKy5hbGlnbgk0CitMc3ViOglsZAkkdDAsOCgkdHApCTsgbG9hZCB0cFtqLi5qKzNdIGluIDY0LWJpdCB3b3JkIG9yZGVyCisJbGR1CSR0MiwxNigkdHApCisJbHd6CSR0NCw0KCRucCkJOyBsb2FkIG5wW2ouLmorM10gaW4gMzItYml0IHdvcmQgb3JkZXIKKwlsd3oJJHQ1LDgoJG5wKQorCWx3egkkdDYsMTIoJG5wKQorCWx3enUJJHQ3LDE2KCRucCkKKwlleHRyZGkJJHQxLCR0MCwzMiwwCisJZXh0cmRpCSR0MywkdDIsMzIsMAorCXN1YmZlCSR0NCwkdDQsJHQwCTsgdHBbal0tbnBbal0KKwkgc3R3CSR0MCw0KCRhcCkJOyBzYXZlIHRwW2ouLmorM10gaW4gMzItYml0IHdvcmQgb3JkZXIKKwlzdWJmZQkkdDUsJHQ1LCR0MQk7IHRwW2orMV0tbnBbaisxXQorCSBzdHcJJHQxLDgoJGFwKQorCXN1YmZlCSR0NiwkdDYsJHQyCTsgdHBbaisyXS1ucFtqKzJdCisJIHN0dwkkdDIsMTIoJGFwKQorCXN1YmZlCSR0NywkdDcsJHQzCTsgdHBbaiszXS1ucFtqKzNdCisJIHN0d3UJJHQzLDE2KCRhcCkKKwlzdHcJJHQ0LDQoJHJwKQorCXN0dwkkdDUsOCgkcnApCisJc3R3CSR0NiwxMigkcnApCisJc3R3dQkkdDcsMTYoJHJwKQorCWJkbnotCUxzdWIKKworCWxpCSRpLDAKKwlzdWJmZQkkb3ZmLCRpLCRvdmYJOyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAorCWFkZGkJJHRwLCRzcCxgJEZSQU1FKyRUUkFOU0ZFUis0YAorCXN1YmYJJHJwLCRudW0sJHJwCTsgcmV3aW5kIHJwCisJYW5kCSRhcCwkdHAsJG92ZgorCWFuZGMJJG5wLCRycCwkb3ZmCisJb3IJJGFwLCRhcCwkbnAJOyBhcD1ib3Jyb3c/dHA6cnAKKwlhZGRpCSR0cCwkc3AsYCRGUkFNRSskVFJBTlNGRVJgCisJbXRjdHIJJGoKKworLmFsaWduCTQKK0xjb3B5OgkJCQk7IGNvcHkgb3IgaW4tcGxhY2UgcmVmcmVzaAorCWx3egkkdDAsNCgkYXApCisJbHd6CSR0MSw4KCRhcCkKKwlsd3oJJHQyLDEyKCRhcCkKKwlsd3p1CSR0MywxNigkYXApCisJc3RkCSRpLDgoJG5hcF9kKQk7IHphcCBuYXBfZAorCXN0ZAkkaSwxNigkbmFwX2QpCisJc3RkCSRpLDI0KCRuYXBfZCkKKwlzdGQJJGksMzIoJG5hcF9kKQorCXN0ZAkkaSw0MCgkbmFwX2QpCisJc3RkCSRpLDQ4KCRuYXBfZCkKKwlzdGQJJGksNTYoJG5hcF9kKQorCXN0ZHUJJGksNjQoJG5hcF9kKQorCXN0dwkkdDAsNCgkcnApCisJc3R3CSR0MSw4KCRycCkKKwlzdHcJJHQyLDEyKCRycCkKKwlzdHd1CSR0MywxNigkcnApCisJc3RkCSRpLDgoJHRwKQk7IHphcCB0cCBhdCBvbmNlCisJc3RkdQkkaSwxNigkdHApCisJYmRuei0JTGNvcHkKK19fXwogDAotCSRQT1AJcjE0LGAyKiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIxNSxgMyokU0laRV9UYCgkc3ApCi0JJFBPUAlyMTYsYDQqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjE3LGA1KiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIxOCxgNiokU0laRV9UYCgkc3ApCi0JJFBPUAlyMTksYDcqJFNJWkVfVGAoJHNwKQotCSRQT1AJcjIwLGA4KiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIyMSxgOSokU0laRV9UYCgkc3ApCi0JJFBPUAlyMjIsYDEwKiRTSVpFX1RgKCRzcCkKLQkkUE9QCXIyMyxgMTEqJFNJWkVfVGAoJHNwKQotCWxmZAlmMTQsYDEyKiRTSVpFX1QrMGAoJHNwKQotCWxmZAlmMTUsYDEyKiRTSVpFX1QrOGAoJHNwKQotCWxmZAlmMTYsYDEyKiRTSVpFX1QrMTZgKCRzcCkKLQlsZmQJZjE3LGAxMiokU0laRV9UKzI0YCgkc3ApCi0JbGZkCWYxOCxgMTIqJFNJWkVfVCszMmAoJHNwKQotCWxmZAlmMTksYDEyKiRTSVpFX1QrNDBgKCRzcCkKLQlsZmQJZjIwLGAxMiokU0laRV9UKzQ4YCgkc3ApCi0JbGZkCWYyMSxgMTIqJFNJWkVfVCs1NmAoJHNwKQotCWxmZAlmMjIsYDEyKiRTSVpFX1QrNjRgKCRzcCkKLQlsZmQJZjIzLGAxMiokU0laRV9UKzcyYCgkc3ApCi0JbGZkCWYyNCxgMTIqJFNJWkVfVCs4MGAoJHNwKQotCWxmZAlmMjUsYDEyKiRTSVpFX1QrODhgKCRzcCkKLQkkUE9QCSRzcCwwKCRzcCkKKyRjb2RlLj08PF9fXzsKKwkkUE9QCSRpLDAoJHNwKQogCWxpCXIzLDEJOyBzaWduYWwgImhhbmRsZWQiCisJJFBPUAlyMjIsYC0xMio4LTEwKiRTSVpFX1RgKCRpKQorCSRQT1AJcjIzLGAtMTIqOC05KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI0LGAtMTIqOC04KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI1LGAtMTIqOC03KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI2LGAtMTIqOC02KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI3LGAtMTIqOC01KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI4LGAtMTIqOC00KiRTSVpFX1RgKCRpKQorCSRQT1AJcjI5LGAtMTIqOC0zKiRTSVpFX1RgKCRpKQorCSRQT1AJcjMwLGAtMTIqOC0yKiRTSVpFX1RgKCRpKQorCSRQT1AJcjMxLGAtMTIqOC0xKiRTSVpFX1RgKCRpKQorCWxmZAlmMjAsYC0xMio4YCgkaSkKKwlsZmQJZjIxLGAtMTEqOGAoJGkpCisJbGZkCWYyMixgLTEwKjhgKCRpKQorCWxmZAlmMjMsYC05KjhgKCRpKQorCWxmZAlmMjQsYC04KjhgKCRpKQorCWxmZAlmMjUsYC03KjhgKCRpKQorCWxmZAlmMjYsYC02KjhgKCRpKQorCWxmZAlmMjcsYC01KjhgKCRpKQorCWxmZAlmMjgsYC00KjhgKCRpKQorCWxmZAlmMjksYC0zKjhgKCRpKQorCWxmZAlmMzAsYC0yKjhgKCRpKQorCWxmZAlmMzEsYC0xKjhgKCRpKQorCW1yCSRzcCwkaQogCWJscgogCS5sb25nCTAKLS5hc2NpeiAgIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gZm9yIFBQQzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAZnkuY2hhbG1lcnMuc2U+IgorCS5ieXRlCTAsMTIsNCwwLDB4OGMsMTAsNiwwCisJLmxvbmcJMAorCisuYXNjaXogICJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciBQUEM2NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKIF9fXwogCiAkY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vczM5MHgtZ2YybS5wbCBiL2NyeXB0by9ibi9hc20vczM5MHgtZ2YybS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDlmMTNlCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2JuL2FzbS9zMzkweC1nZjJtLnBsCkBAIC0wLDAgKzEsMjIxIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBNYXkgMjAxMQorIworIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgYm5fR0YybV9tdWxfMngyIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24gdXNlZAorIyBpbiBibl9nZjJtLmMuIEl0J3Mga2luZCBvZiBsb3ctaGFuZ2luZyBtZWNoYW5pY2FsIHBvcnQgZnJvbSBDIGZvcgorIyB0aGUgdGltZSBiZWluZy4uLiBnY2MgNC4zIGFwcGVhcmVkIHRvIGdlbmVyYXRlIHBvb3IgY29kZSwgdGhlcmVmb3JlCisjIHRoZSBlZmZvcnQuIEFuZCBpbmRlZWQsIHRoZSBtb2R1bGUgZGVsaXZlcnMgNTUlLTkwJSgqKSBpbXByb3ZlbWVudAorIyBvbiBoYXZpZXN0IEVDRFNBIHZlcmlmeSBhbmQgRUNESCBiZW5jaG1hcmtzIGZvciAxNjMtIGFuZCA1NzEtYml0CisjIGtleSBsZW5ndGhzIG9uIHo5OTAsIDMwJS01NSUoKikgLSBvbiB6MTAsIGFuZCA3MCUtMTEwJSgqKSAtIG9uIHoxOTYuCisjIFRoaXMgaXMgZm9yIDY0LWJpdCBidWlsZC4gSW4gMzItYml0ICJoaWdoZ3BycyIgY2FzZSBpbXByb3ZlbWVudCBpcworIyBldmVuIGhpZ2hlciwgZm9yIGV4YW1wbGUgb24gejk5MCBpdCB3YXMgbWVhc3VyZWQgODAlLTE1MCUuIEVDRFNBCisjIHNpZ24gaXMgbW9kZXN0IDklLTEyJSBmYXN0ZXIuIEtlZXAgaW4gbWluZCB0aGF0IHRoZXNlIGNvZWZmaWNpZW50cworIyBhcmUgbm90IG9uZXMgZm9yIGJuX0dGMm1fbXVsXzJ4MiBpdHNlbGYsIGFzIG5vdCBhbGwgQ1BVIHRpbWUgaXMKKyMgYnVybnQgaW4gaXQuLi4KKyMKKyMgKCopCWdjYyA0LjEgd2FzIG9ic2VydmVkIHRvIGRlbGl2ZXIgYmV0dGVyIHJlc3VsdHMgdGhhbiBnY2MgNC4zLAorIwlzbyB0aGF0IGltcHJvdmVtZW50IGNvZWZmaWNpZW50cyBjYW4gdmFyeSBmcm9tIG9uZSBzcGVjaWZpYworIwlzZXR1cCB0byBhbm90aGVyLgorCiskZmxhdm91ciA9IHNoaWZ0OworCitpZiAoJGZsYXZvdXIgPX4gLzNbMTJdLykgeworICAgICAgICAkU0laRV9UPTQ7CisgICAgICAgICRnPSIiOworfSBlbHNlIHsKKyAgICAgICAgJFNJWkVfVD04OworICAgICAgICAkZz0iZyI7Cit9CisKK3doaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CitvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworCiskc3RkZnJhbWU9MTYqJFNJWkVfVCs0Kjg7CisKKyRycD0iJXIyIjsKKyRhMT0iJXIzIjsKKyRhMD0iJXI0IjsKKyRiMT0iJXI1IjsKKyRiMD0iJXI2IjsKKworJHJhPSIlcjE0IjsKKyRzcD0iJXIxNSI7CisKK0BUPSgiJXIwIiwiJXIxIik7CitAaT0oIiVyMTIiLCIlcjEzIik7CisKKygkYTEsJGEyLCRhNCwkYTgsJGExMiwkYTQ4KT1tYXAoIiVyJF8iLCg2Li4xMSkpOworKCRsbywkaGksJGIpPW1hcCgiJXIkXyIsKDMuLjUpKTsgJGE9JGxvOyAkbWFzaz0kYTg7CisKKyRjb2RlLj08PF9fXzsKKy50ZXh0CisKKy50eXBlCV9tdWxfMXgxLFxAZnVuY3Rpb24KKy5hbGlnbgkxNgorX211bF8xeDE6CisJbGdyCSRhMSwkYQorCXNsbGcJJGEyLCRhLDEKKwlzbGxnCSRhNCwkYSwyCisJc2xsZwkkYTgsJGEsMworCisJc3JhZwkkbG8sJGExLDYzCQkJIyBicm9hZGNhc3QgNjNyZCBiaXQKKwluaWhoCSRhMSwweDFmZmYKKwlzcmFnCUBpWzBdLCRhMiw2MwkJCSMgYnJvYWRjYXN0IDYybmQgYml0CisJbmloaAkkYTIsMHgzZmZmCisJc3JhZwlAaVsxXSwkYTQsNjMJCQkjIGJyb2FkY2FzdCA2MXN0IGJpdAorCW5paGgJJGE0LDB4N2ZmZgorCW5ncgkkbG8sJGIKKwluZ3IJQGlbMF0sJGIKKwluZ3IJQGlbMV0sJGIKKworCWxnaGkJQFRbMF0sMAorCWxncgkkYTEyLCRhMQorCXN0ZwlAVFswXSxgJHN0ZGZyYW1lKzAqOGAoJHNwKQkjIHRhYlswXT0wCisJeGdyCSRhMTIsJGEyCisJc3RnCSRhMSxgJHN0ZGZyYW1lKzEqOGAoJHNwKQkjIHRhYlsxXT1hMQorCSBsZ3IJJGE0OCwkYTQKKwlzdGcJJGEyLGAkc3RkZnJhbWUrMio4YCgkc3ApCSMgdGFiWzJdPWEyCisJIHhncgkkYTQ4LCRhOAorCXN0ZwkkYTEyLGAkc3RkZnJhbWUrMyo4YCgkc3ApCSMgdGFiWzNdPWExXmEyCisJIHhncgkkYTEsJGE0CisKKwlzdGcJJGE0LGAkc3RkZnJhbWUrNCo4YCgkc3ApCSMgdGFiWzRdPWE0CisJeGdyCSRhMiwkYTQKKwlzdGcJJGExLGAkc3RkZnJhbWUrNSo4YCgkc3ApCSMgdGFiWzVdPWExXmE0CisJeGdyCSRhMTIsJGE0CisJc3RnCSRhMixgJHN0ZGZyYW1lKzYqOGAoJHNwKQkjIHRhYls2XT1hMl5hNAorCSB4Z3IJJGExLCRhNDgKKwlzdGcJJGExMixgJHN0ZGZyYW1lKzcqOGAoJHNwKQkjIHRhYls3XT1hMV5hMl5hNAorCSB4Z3IJJGEyLCRhNDgKKworCXN0ZwkkYTgsYCRzdGRmcmFtZSs4KjhgKCRzcCkJIyB0YWJbOF09YTgKKwl4Z3IJJGExMiwkYTQ4CisJc3RnCSRhMSxgJHN0ZGZyYW1lKzkqOGAoJHNwKQkjIHRhYls5XT1hMV5hOAorCSB4Z3IJJGExLCRhNAorCXN0ZwkkYTIsYCRzdGRmcmFtZSsxMCo4YCgkc3ApCSMgdGFiWzEwXT1hMl5hOAorCSB4Z3IJJGEyLCRhNAorCXN0ZwkkYTEyLGAkc3RkZnJhbWUrMTEqOGAoJHNwKQkjIHRhYlsxMV09YTFeYTJeYTgKKworCXhncgkkYTEyLCRhNAorCXN0ZwkkYTQ4LGAkc3RkZnJhbWUrMTIqOGAoJHNwKQkjIHRhYlsxMl09YTReYTgKKwkgc3JsZwkkaGksJGxvLDEKKwlzdGcJJGExLGAkc3RkZnJhbWUrMTMqOGAoJHNwKQkjIHRhYlsxM109YTFeYTReYTgKKwkgc2xsZwkkbG8sJGxvLDYzCisJc3RnCSRhMixgJHN0ZGZyYW1lKzE0KjhgKCRzcCkJIyB0YWJbMTRdPWEyXmE0XmE4CisJIHNybGcJQFRbMF0sQGlbMF0sMgorCXN0ZwkkYTEyLGAkc3RkZnJhbWUrMTUqOGAoJHNwKQkjIHRhYlsxNV09YTFeYTJeYTReYTgKKworCWxnaGkJJG1hc2ssYDB4Zjw8M2AKKwlzbGxnCSRhMSxAaVswXSw2MgorCSBzbGxnCUBpWzBdLCRiLDMKKwlzcmxnCUBUWzFdLEBpWzFdLDMKKwkgbmdyCUBpWzBdLCRtYXNrCisJc2xsZwkkYTIsQGlbMV0sNjEKKwkgc3JsZwlAaVsxXSwkYiw0LTMKKwl4Z3IJJGhpLEBUWzBdCisJIG5ncglAaVsxXSwkbWFzaworCXhncgkkbG8sJGExCisJeGdyCSRoaSxAVFsxXQorCXhncgkkbG8sJGEyCisKKwl4ZwkkbG8sJHN0ZGZyYW1lKEBpWzBdLCRzcCkKKwlzcmxnCUBpWzBdLCRiLDgtMworCW5ncglAaVswXSwkbWFzaworX19fCitmb3IoJG49MTskbjwxNDskbisrKSB7CiskY29kZS49PDxfX187CisJbGcJQFRbMV0sJHN0ZGZyYW1lKEBpWzFdLCRzcCkKKwlzcmxnCUBpWzFdLCRiLGAoJG4rMikqNGAtMworCXNsbGcJQFRbMF0sQFRbMV0sYCRuKjRgCisJbmdyCUBpWzFdLCRtYXNrCisJc3JsZwlAVFsxXSxAVFsxXSxgNjQtJG4qNGAKKwl4Z3IJJGxvLEBUWzBdCisJeGdyCSRoaSxAVFsxXQorX19fCisJcHVzaChAaSxzaGlmdChAaSkpOyBwdXNoKEBULHNoaWZ0KEBUKSk7Cit9CiskY29kZS49PDxfX187CisJbGcJQFRbMV0sJHN0ZGZyYW1lKEBpWzFdLCRzcCkKKwlzbGxnCUBUWzBdLEBUWzFdLGAkbio0YAorCXNybGcJQFRbMV0sQFRbMV0sYDY0LSRuKjRgCisJeGdyCSRsbyxAVFswXQorCXhncgkkaGksQFRbMV0KKworCWxnCUBUWzBdLCRzdGRmcmFtZShAaVswXSwkc3ApCisJc2xsZwlAVFsxXSxAVFswXSxgKCRuKzEpKjRgCisJc3JsZwlAVFswXSxAVFswXSxgNjQtKCRuKzEpKjRgCisJeGdyCSRsbyxAVFsxXQorCXhncgkkaGksQFRbMF0KKworCWJyCSRyYQorLnNpemUJX211bF8xeDEsLi1fbXVsXzF4MQorCisuZ2xvYmwJYm5fR0YybV9tdWxfMngyCisudHlwZQlibl9HRjJtX211bF8yeDIsXEBmdW5jdGlvbgorLmFsaWduCTE2Citibl9HRjJtX211bF8yeDI6CisJc3RtJHtnfQklcjMsJXIxNSwzKiRTSVpFX1QoJHNwKQorCisJbGdoaQklcjEsLSRzdGRmcmFtZS0xMjgKKwlsYQklcjAsMCgkc3ApCisJbGEJJHNwLDAoJXIxLCRzcCkJCQkjIGFsbG9jYQorCXN0JHtnfQklcjAsMCgkc3ApCQkJIyBiYWNrIGNoYWluCitfX18KK2lmICgkU0laRV9UPT04KSB7CitteSBAcj1tYXAoIiVyJF8iLCg2Li45KSk7CiskY29kZS49PDxfX187CisJYnJhcwkkcmEsX211bF8xeDEJCQkjIGExt2IxCisJc3RtZwkkbG8sJGhpLDE2KCRycCkKKworCWxnCSRhLGAkc3RkZnJhbWUrMTI4KzQqJFNJWkVfVGAoJHNwKQorCWxnCSRiLGAkc3RkZnJhbWUrMTI4KzYqJFNJWkVfVGAoJHNwKQorCWJyYXMJJHJhLF9tdWxfMXgxCQkJIyBhMLdiMAorCXN0bWcJJGxvLCRoaSwwKCRycCkKKworCWxnCSRhLGAkc3RkZnJhbWUrMTI4KzMqJFNJWkVfVGAoJHNwKQorCWxnCSRiLGAkc3RkZnJhbWUrMTI4KzUqJFNJWkVfVGAoJHNwKQorCXhnCSRhLGAkc3RkZnJhbWUrMTI4KzQqJFNJWkVfVGAoJHNwKQorCXhnCSRiLGAkc3RkZnJhbWUrMTI4KzYqJFNJWkVfVGAoJHNwKQorCWJyYXMJJHJhLF9tdWxfMXgxCQkJIyAoYTArYTEptyhiMCtiMSkKKwlsbWcJQHJbMF0sQHJbM10sMCgkcnApCisKKwl4Z3IJJGxvLCRoaQorCXhncgkkaGksQHJbMV0KKwl4Z3IJJGxvLEByWzBdCisJeGdyCSRoaSxAclsyXQorCXhncgkkbG8sQHJbM10JCisJeGdyCSRoaSxAclszXQorCXhncgkkbG8sJGhpCisJc3RnCSRoaSwxNigkcnApCisJc3RnCSRsbyw4KCRycCkKK19fXworfSBlbHNlIHsKKyRjb2RlLj08PF9fXzsKKwlzbGxnCSVyMywlcjMsMzIKKwlzbGxnCSVyNSwlcjUsMzIKKwlvcgklcjMsJXI0CisJb3IJJXI1LCVyNgorCWJyYXMJJHJhLF9tdWxfMXgxCisJcmxsZwkkbG8sJGxvLDMyCisJcmxsZwkkaGksJGhpLDMyCisJc3RtZwkkbG8sJGhpLDAoJHJwKQorX19fCit9CiskY29kZS49PDxfX187CisJbG0ke2d9CSVyNiwlcjE1LGAkc3RkZnJhbWUrMTI4KzYqJFNJWkVfVGAoJHNwKQorCWJyCSRyYQorLnNpemUJYm5fR0YybV9tdWxfMngyLC4tYm5fR0YybV9tdWxfMngyCisuc3RyaW5nCSJHRigyXm0pIE11bHRpcGxpY2F0aW9uIGZvciBzMzkweCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW07CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20vczM5MHgtbW9udC5wbCBiL2NyeXB0by9ibi9hc20vczM5MHgtbW9udC5wbAppbmRleCBmNjEyNDZmLi45ZmQ2NGU4IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYXNtL3MzOTB4LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS9zMzkweC1tb250LnBsCkBAIC0zMiw2ICszMiwzMyBAQAogIyBSZXNjaGVkdWxlIHRvIG1pbmltaXplL2F2b2lkIEFkZHJlc3MgR2VuZXJhdGlvbiBJbnRlcmxvY2sgaGF6YXJkLAogIyBtYWtlIGlubmVyIGxvb3BzIGNvdW50ZXItYmFzZWQuCiAKKyMgTm92ZW1iZXIgMjAxMC4KKyMKKyMgQWRhcHQgZm9yIC1tMzEgYnVpbGQuIElmIGtlcm5lbCBzdXBwb3J0cyB3aGF0J3MgY2FsbGVkICJoaWdoZ3BycyIKKyMgZmVhdHVyZSBvbiBMaW51eCBbc2VlIC9wcm9jL2NwdWluZm9dLCBpdCdzIHBvc3NpYmxlIHRvIHVzZSA2NC1iaXQKKyMgaW5zdHJ1Y3Rpb25zIGFuZCBhY2hpZXZlICI2NC1iaXQiIHBlcmZvcm1hbmNlIGV2ZW4gaW4gMzEtYml0IGxlZ2FjeQorIyBhcHBsaWNhdGlvbiBjb250ZXh0LiBUaGUgZmVhdHVyZSBpcyBub3Qgc3BlY2lmaWMgdG8gYW55IHBhcnRpY3VsYXIKKyMgcHJvY2Vzc29yLCBhcyBsb25nIGFzIGl0J3MgInotQ1BVIi4gTGF0dGVyIGltcGxpZXMgdGhhdCB0aGUgY29kZQorIyByZW1haW5zIHovQXJjaGl0ZWN0dXJlIHNwZWNpZmljLiBDb21wYXRpYmlsaXR5IHdpdGggMzItYml0IEJOX1VMT05HCisjIGlzIGFjaGlldmVkIGJ5IHN3YXBwaW5nIHdvcmRzIGFmdGVyIDY0LWJpdCBsb2FkcywgZm9sbG93IF9kc3dhcC1zLgorIyBPbiB6OTkwIGl0IHdhcyBtZWFzdXJlZCB0byBwZXJmb3JtIDIuNi0yLjIgdGltZXMgYmV0dGVyIHRoYW4KKyMgY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUsIGxlc3MgZm9yIGxvbmdlciBrZXlzLi4uCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvM1sxMl0vKSB7CisJJFNJWkVfVD00OworCSRnPSIiOworfSBlbHNlIHsKKwkkU0laRV9UPTg7CisJJGc9ImciOworfQorCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworJHN0ZGZyYW1lPTE2KiRTSVpFX1QrNCo4OworCiAkbW4wPSIlcjAiOwogJG51bT0iJXIxIjsKIApAQCAtNjAsMzQgKzg3LDQ0IEBACiAuZ2xvYmwJYm5fbXVsX21vbnQKIC50eXBlCWJuX211bF9tb250LFxAZnVuY3Rpb24KIGJuX211bF9tb250OgotCWxnZgkkbnVtLDE2NCgkc3ApCSMgcHVsbCAkbnVtCi0Jc2xhCSRudW0sMwkJIyAkbnVtIHRvIGVudW1lcmF0ZSBieXRlcworCWxnZgkkbnVtLGAkc3RkZnJhbWUrJFNJWkVfVC00YCgkc3ApCSMgcHVsbCAkbnVtCisJc2xhCSRudW0sYGxvZygkU0laRV9UKS9sb2coMilgCSMgJG51bSB0byBlbnVtZXJhdGUgYnl0ZXMKIAlsYQkkYnAsMCgkbnVtLCRicCkKIAotCXN0ZwklcjIsMTYoJHNwKQorCXN0JHtnfQklcjIsMiokU0laRV9UKCRzcCkKIAogCWNnaGkJJG51bSwxNgkJIwogCWxnaGkJJXIyLDAJCSMKIAlibHIJJXIxNAkJIyBpZigkbnVtPDE2KSByZXR1cm4gMDsKK19fXworJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvM1sxMl0vKTsKKwl0bWxsCSRudW0sNAorCWJuenIJJXIxNAkJIyBpZiAoJG51bSYxKSByZXR1cm4gMDsKK19fXworJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciAhfiAvM1sxMl0vKTsKIAljZ2hpCSRudW0sOTYJCSMKIAliaHIJJXIxNAkJIyBpZigkbnVtPjk2KSByZXR1cm4gMDsKK19fXworJGNvZGUuPTw8X19fOworCXN0bSR7Z30JJXIzLCVyMTUsMyokU0laRV9UKCRzcCkKIAotCXN0bWcJJXIzLCVyMTUsMjQoJHNwKQotCi0JbGdoaQkkcnAsLTE2MC04CSMgbGVhdmUgcm9vbSBmb3IgY2FycnkgYml0CisJbGdoaQkkcnAsLSRzdGRmcmFtZS04CSMgbGVhdmUgcm9vbSBmb3IgY2FycnkgYml0CiAJbGNncgkkaiwkbnVtCQkjIC0kbnVtCiAJbGdyCSVyMCwkc3AKIAlsYQkkcnAsMCgkcnAsJHNwKQogCWxhCSRzcCwwKCRqLCRycCkJIyBhbGxvY2EKLQlzdGcJJXIwLDAoJHNwKQkjIGJhY2sgY2hhaW4KKwlzdCR7Z30JJXIwLDAoJHNwKQkjIGJhY2sgY2hhaW4KIAogCXNyYQkkbnVtLDMJCSMgcmVzdG9yZSAkbnVtCiAJbGEJJGJwLDAoJGosJGJwKQkjIHJlc3RvcmUgJGJwCiAJYWhpCSRudW0sLTEJCSMgYWRqdXN0ICRudW0gZm9yIGlubmVyIGxvb3AKIAlsZwkkbjAsMCgkbjApCSMgcHVsbCBuMAorCV9kc3dhcAkkbjAKIAogCWxnCSRiaSwwKCRicCkKKwlfZHN3YXAJJGJpCiAJbGcJJGFsbywwKCRhcCkKKwlfZHN3YXAJJGFsbwogCW1sZ3IJJGFoaSwkYmkJIyBhcFswXSpicFswXQogCWxncgkkQUhJLCRhaGkKIApAQCAtOTUsNiArMTMyLDcgQEAKIAltc2dyCSRtbjAsJG4wCiAKIAlsZwkkbmxvLDAoJG5wKQkjCisJX2Rzd2FwCSRubG8KIAltbGdyCSRuaGksJG1uMAkjIG5wWzBdKm0xCiAJYWxncgkkbmxvLCRhbG8JIyArPSJ0cFswXSIKIAlsZ2hpCSROSEksMApAQCAtMTA2LDEyICsxNDQsMTQgQEAKIC5hbGlnbgkxNgogLkwxc3Q6CiAJbGcJJGFsbywwKCRqLCRhcCkKKwlfZHN3YXAJJGFsbwogCW1sZ3IJJGFoaSwkYmkJIyBhcFtqXSpicFswXQogCWFsZ3IJJGFsbywkQUhJCiAJbGdoaQkkQUhJLDAKIAlhbGNncgkkQUhJLCRhaGkKIAogCWxnCSRubG8sMCgkaiwkbnApCisJX2Rzd2FwCSRubG8KIAltbGdyCSRuaGksJG1uMAkjIG5wW2pdKm0xCiAJYWxncgkkbmxvLCROSEkKIAlsZ2hpCSROSEksMApAQCAtMTE5LDIyICsxNTksMjQgQEAKIAlhbGdyCSRubG8sJGFsbwogCWFsY2dyCSROSEksJG5oaQogCi0Jc3RnCSRubG8sMTYwLTgoJGosJHNwKQkjIHRwW2otMV09CisJc3RnCSRubG8sJHN0ZGZyYW1lLTgoJGosJHNwKQkjIHRwW2otMV09CiAJbGEJJGosOCgkaikJIyBqKysKIAlicmN0CSRjb3VudCwuTDFzdAogCiAJYWxncgkkTkhJLCRBSEkKIAlsZ2hpCSRBSEksMAogCWFsY2dyCSRBSEksJEFISQkjIHVwbW9zdCBvdmVyZmxvdyBiaXQKLQlzdGcJJE5ISSwxNjAtOCgkaiwkc3ApCi0Jc3RnCSRBSEksMTYwKCRqLCRzcCkKKwlzdGcJJE5ISSwkc3RkZnJhbWUtOCgkaiwkc3ApCisJc3RnCSRBSEksJHN0ZGZyYW1lKCRqLCRzcCkKIAlsYQkkYnAsOCgkYnApCSMgYnArKwogCiAuTG91dGVyOgogCWxnCSRiaSwwKCRicCkJIyBicFtpXQorCV9kc3dhcAkkYmkKIAlsZwkkYWxvLDAoJGFwKQorCV9kc3dhcAkkYWxvCiAJbWxncgkkYWhpLCRiaQkjIGFwWzBdKmJwW2ldCi0JYWxnCSRhbG8sMTYwKCRzcCkJIyArPXRwWzBdCisJYWxnCSRhbG8sJHN0ZGZyYW1lKCRzcCkJIyArPXRwWzBdCiAJbGdoaQkkQUhJLDAKIAlhbGNncgkkQUhJLCRhaGkKIApAQCAtMTQyLDYgKzE4NCw3IEBACiAJbXNncgkkbW4wLCRuMAkjIHRwWzBdKm4wCiAKIAlsZwkkbmxvLDAoJG5wKQkjIG5wWzBdCisJX2Rzd2FwCSRubG8KIAltbGdyCSRuaGksJG1uMAkjIG5wWzBdKm0xCiAJYWxncgkkbmxvLCRhbG8JIyArPSJ0cFswXSIKIAlsZ2hpCSROSEksMApAQCAtMTUzLDE0ICsxOTYsMTYgQEAKIC5hbGlnbgkxNgogLkxpbm5lcjoKIAlsZwkkYWxvLDAoJGosJGFwKQorCV9kc3dhcAkkYWxvCiAJbWxncgkkYWhpLCRiaQkjIGFwW2pdKmJwW2ldCiAJYWxncgkkYWxvLCRBSEkKIAlsZ2hpCSRBSEksMAogCWFsY2dyCSRhaGksJEFISQotCWFsZwkkYWxvLDE2MCgkaiwkc3ApIyArPXRwW2pdCisJYWxnCSRhbG8sJHN0ZGZyYW1lKCRqLCRzcCkjICs9dHBbal0KIAlhbGNncgkkQUhJLCRhaGkKIAogCWxnCSRubG8sMCgkaiwkbnApCisJX2Rzd2FwCSRubG8KIAltbGdyCSRuaGksJG1uMAkjIG5wW2pdKm0xCiAJYWxncgkkbmxvLCROSEkKIAlsZ2hpCSROSEksMApAQCAtMTY4LDMxICsyMTMsMzMgQEAKIAlhbGdyCSRubG8sJGFsbwkjICs9InRwW2pdIgogCWFsY2dyCSROSEksJG5oaQogCi0Jc3RnCSRubG8sMTYwLTgoJGosJHNwKQkjIHRwW2otMV09CisJc3RnCSRubG8sJHN0ZGZyYW1lLTgoJGosJHNwKQkjIHRwW2otMV09CiAJbGEJJGosOCgkaikJIyBqKysKIAlicmN0CSRjb3VudCwuTGlubmVyCiAKIAlhbGdyCSROSEksJEFISQogCWxnaGkJJEFISSwwCiAJYWxjZ3IJJEFISSwkQUhJCi0JYWxnCSROSEksMTYwKCRqLCRzcCkjIGFjY3VtdWxhdGUgcHJldmlvdXMgdXBtb3N0IG92ZXJmbG93IGJpdAorCWFsZwkkTkhJLCRzdGRmcmFtZSgkaiwkc3ApIyBhY2N1bXVsYXRlIHByZXZpb3VzIHVwbW9zdCBvdmVyZmxvdyBiaXQKIAlsZ2hpCSRhaGksMAogCWFsY2dyCSRBSEksJGFoaQkjIG5ldyB1cG1vc3Qgb3ZlcmZsb3cgYml0Ci0Jc3RnCSROSEksMTYwLTgoJGosJHNwKQotCXN0ZwkkQUhJLDE2MCgkaiwkc3ApCisJc3RnCSROSEksJHN0ZGZyYW1lLTgoJGosJHNwKQorCXN0ZwkkQUhJLCRzdGRmcmFtZSgkaiwkc3ApCiAKIAlsYQkkYnAsOCgkYnApCSMgYnArKwotCWNsZwkkYnAsMTYwKzgrMzIoJGosJHNwKQkjIGNvbXBhcmUgdG8gJmJwW251bV0KKwljbCR7Z30JJGJwLGAkc3RkZnJhbWUrOCs0KiRTSVpFX1RgKCRqLCRzcCkJIyBjb21wYXJlIHRvICZicFtudW1dCiAJam5lCS5Mb3V0ZXIKIAotCWxnCSRycCwxNjArOCsxNigkaiwkc3ApCSMgcmVpbmNhcm5hdGUgcnAKLQlsYQkkYXAsMTYwKCRzcCkKKwlsJHtnfQkkcnAsYCRzdGRmcmFtZSs4KzIqJFNJWkVfVGAoJGosJHNwKQkjIHJlaW5jYXJuYXRlIHJwCisJbGEJJGFwLCRzdGRmcmFtZSgkc3ApCiAJYWhpCSRudW0sMQkJIyByZXN0b3JlICRudW0sIGluY2lkZW50YWxseSBjbGVhcnMgImJvcnJvdyIKIAogCWxhCSRqLDAoJXIwKQogCWxyCSRjb3VudCwkbnVtCiAuTHN1YjoJbGcJJGFsbywwKCRqLCRhcCkKLQlzbGJnCSRhbG8sMCgkaiwkbnApCisJbGcJJG5sbywwKCRqLCRucCkKKwlfZHN3YXAJJG5sbworCXNsYmdyCSRhbG8sJG5sbwogCXN0ZwkkYWxvLDAoJGosJHJwKQogCWxhCSRqLDgoJGopCiAJYnJjdAkkY291bnQsLkxzdWIKQEAgLTIwNywxOSArMjU0LDI0IEBACiAKIAlsYQkkaiwwKCVyMCkKIAlsZ3IJJGNvdW50LCRudW0KLS5MY29weToJbGcJJGFsbywwKCRqLCRhcCkJIyBjb3B5IG9yIGluLXBsYWNlIHJlZnJlc2gKLQlzdGcJJGosMTYwKCRqLCRzcCkJIyB6YXAgdHAKKy5MY29weToJbGcJJGFsbywwKCRqLCRhcCkJCSMgY29weSBvciBpbi1wbGFjZSByZWZyZXNoCisJX2Rzd2FwCSRhbG8KKwlzdGcJJGosJHN0ZGZyYW1lKCRqLCRzcCkJIyB6YXAgdHAKIAlzdGcJJGFsbywwKCRqLCRycCkKIAlsYQkkaiw4KCRqKQogCWJyY3QJJGNvdW50LC5MY29weQogCi0JbGEJJXIxLDE2MCs4KzQ4KCRqLCRzcCkKLQlsbWcJJXI2LCVyMTUsMCglcjEpCisJbGEJJXIxLGAkc3RkZnJhbWUrOCs2KiRTSVpFX1RgKCRqLCRzcCkKKwlsbSR7Z30JJXI2LCVyMTUsMCglcjEpCiAJbGdoaQklcjIsMQkJIyBzaWduYWwgInByb2Nlc3NlZCIKIAlicgklcjE0CiAuc2l6ZQlibl9tdWxfbW9udCwuLWJuX211bF9tb250CiAuc3RyaW5nCSJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciBzMzkweCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKIF9fXwogCi1wcmludCAkY29kZTsKK2ZvcmVhY2ggKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZTsKKwlzL19kc3dhcFxzKyglclswLTldKykvc3ByaW50ZigicmxsZ1x0JXMsJXMsMzIiLCQxLCQxKSBpZigkU0laRV9UPT00KS9lOworCXByaW50ICRfLCJcbiI7Cit9CiBjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL3g4Ni1nZjJtLnBsIGIvY3J5cHRvL2JuL2FzbS94ODYtZ2YybS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDhhMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2JuL2FzbS94ODYtZ2YybS5wbApAQCAtMCwwICsxLDMxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgTWF5IDIwMTEKKyMKKyMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzIGJuX0dGMm1fbXVsXzJ4MiBwb2x5bm9taWFsIG11bHRpcGxpY2F0aW9uIHVzZWQKKyMgaW4gYm5fZ2YybS5jLiBJdCdzIGtpbmQgb2YgbG93LWhhbmdpbmcgbWVjaGFuaWNhbCBwb3J0IGZyb20gQyBmb3IKKyMgdGhlIHRpbWUgYmVpbmcuLi4gRXhjZXB0IHRoYXQgaXQgaGFzIHRocmVlIGNvZGUgcGF0aHM6IHB1cmUgaW50ZWdlcgorIyBjb2RlIHN1aXRhYmxlIGZvciBhbnkgeDg2IENQVSwgTU1YIGNvZGUgc3VpdGFibGUgZm9yIFBJSUkgYW5kIGxhdGVyCisjIGFuZCBQQ0xNVUxRRFEgc3VpdGFibGUgZm9yIFdlc3RtZXJlIGFuZCBsYXRlci4gSW1wcm92ZW1lbnQgdmFyaWVzCisjIGZyb20gb25lIGJlbmNobWFyayBhbmQgtS1hcmNoIHRvIGFub3RoZXIuIEJlbG93IGFyZSBpbnRlcnZhbCB2YWx1ZXMKKyMgZm9yIDE2My0gYW5kIDU3MS1iaXQgRUNESCBiZW5jaG1hcmtzIHJlbGF0aXZlIHRvIGNvbXBpbGVyLWdlbmVyYXRlZAorIyBjb2RlOgorIworIyBQSUlJCQkxNiUtMzAlCisjIFA0CQkxMiUtMTIlCisjIE9wdGVyb24JMTglLTQwJQorIyBDb3JlMgkJMTklLTQ0JQorIyBBdG9tCQkzOCUtNjQlCisjIFdlc3RtZXJlCTUzJS0xMjElKFBDTE1VTFFEUSkvMjAlLTMyJShNTVgpCisjIFNhbmR5IEJyaWRnZQk3MiUtMTI3JShQQ0xNVUxRRFEpLzI3JS0yMyUoTU1YKQorIworIyBOb3RlIHRoYXQgYWJvdmUgaW1wcm92ZW1lbnQgY29lZmZpY2llbnRzIGFyZSBub3QgY29lZmZpY2llbnRzIGZvcgorIyBibl9HRjJtX211bF8yeDIgaXRzZWxmLiBGb3IgZXhhbXBsZSAxMjAlIEVDREggaW1wcm92ZW1lbnQgaXMgcmVzdWx0CisjIG9mIGJuX0dGMm1fbXVsXzJ4MiBiZWluZyA+NHggZmFzdGVyLiBBcyBpdCBnZXRzIGZhc3RlciwgYmVuY2htYXJrCisjIGlzIG1vcmUgYW5kIG1vcmUgZG9taW5hdGVkIGJ5IG90aGVyIHN1YnJvdXRpbmVzLCBtb3N0IG5vdGFibHkgYnkKKyMgQk5fR0YybV9tb2RbX211bF1fYXJyLi4uCisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKK3JlcXVpcmUgIng4NmFzbS5wbCI7CisKKyZhc21faW5pdCgkQVJHVlswXSwkMCwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOworCiskc3NlMj0wOworZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisKKyZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKSBpZiAoJHNzZTIpOworCiskYT0iZWF4IjsKKyRiPSJlYngiOworKCRhMSwkYTIsJGE0KT0oImVjeCIsImVkeCIsImVicCIpOworCiskUj0ibW0wIjsKK0BUPSgibW0xIiwibW0yIik7CisoJEEsJEIsJEIzMCwkQjMxKT0oIm1tMiIsIm1tMyIsIm1tNCIsIm1tNSIpOworQGk9KCJlc2kiLCJlZGkiKTsKKworCQkJCQlpZiAoISR4ODZvbmx5KSB7CismZnVuY3Rpb25fYmVnaW5fQigiX211bF8xeDFfbW14Iik7CisJJnN1YgkoImVzcCIsMzIrNCk7CisJICZtb3YJKCRhMSwkYSk7CisJICZsZWEJKCRhMiwmRFdQKDAsJGEsJGEpKTsKKwkgJmFuZAkoJGExLDB4M2ZmZmZmZmYpOworCSAmbGVhCSgkYTQsJkRXUCgwLCRhMiwkYTIpKTsKKwkgJm1vdgkoJkRXUCgwKjQsImVzcCIpLDApOworCSAmYW5kCSgkYTIsMHg3ZmZmZmZmZik7CisJJm1vdmQJKCRBLCRhKTsKKwkmbW92ZAkoJEIsJGIpOworCSAmbW92CSgmRFdQKDEqNCwiZXNwIiksJGExKTsJIyBhMQorCSAmeG9yCSgkYTEsJGEyKTsJCSMgYTFeYTIKKwkmcHhvcgkoJEIzMSwkQjMxKTsKKwkmcHhvcgkoJEIzMCwkQjMwKTsKKwkgJm1vdgkoJkRXUCgyKjQsImVzcCIpLCRhMik7CSMgYTIKKwkgJnhvcgkoJGEyLCRhNCk7CQkjIGEyXmE0CisJICZtb3YJKCZEV1AoMyo0LCJlc3AiKSwkYTEpOwkjIGExXmEyCisJJnBjbXBndGQoJEIzMSwkQSk7CQkjIGJyb2FkY2FzdCAzMXN0IGJpdAorCSZwYWRkZAkoJEEsJEEpOwkJIyAkQTw8PTEKKwkgJnhvcgkoJGExLCRhMik7CQkjIGExXmE0PWExXmEyXmEyXmE0CisJICZtb3YJKCZEV1AoNCo0LCJlc3AiKSwkYTQpOwkjIGE0CisJICZ4b3IJKCRhNCwkYTIpOwkJIyBhMj1hNF5hMl5hNAorCSZwYW5kCSgkQjMxLCRCKTsKKwkmcGNtcGd0ZCgkQjMwLCRBKTsJCSMgYnJvYWRjYXN0IDMwdGggYml0CisJICZtb3YJKCZEV1AoNSo0LCJlc3AiKSwkYTEpOwkjIGExXmE0CisJICZ4b3IJKCRhNCwkYTEpOwkJIyBhMV5hMl5hNAorCSZwc2xscQkoJEIzMSwzMSk7CisJJnBhbmQJKCRCMzAsJEIpOworCSAmbW92CSgmRFdQKDYqNCwiZXNwIiksJGEyKTsJIyBhMl5hNAorCSZtb3YJKEBpWzBdLDB4Nyk7CisJICZtb3YJKCZEV1AoNyo0LCJlc3AiKSwkYTQpOwkjIGExXmEyXmE0CisJICZtb3YJKCRhNCxAaVswXSk7CisJJmFuZAkoQGlbMF0sJGIpOworCSZzaHIJKCRiLDMpOworCSZtb3YJKEBpWzFdLCRhNCk7CisJJnBzbGxxCSgkQjMwLDMwKTsKKwkmYW5kCShAaVsxXSwkYik7CisJJnNocgkoJGIsMyk7CisJJm1vdmQJKCRSLCZEV1AoMCwiZXNwIixAaVswXSw0KSk7CisJJm1vdgkoQGlbMF0sJGE0KTsKKwkmYW5kCShAaVswXSwkYik7CisJJnNocgkoJGIsMyk7CisJZm9yKCRuPTE7JG48OTskbisrKSB7CisJCSZtb3ZkCShAVFsxXSwmRFdQKDAsImVzcCIsQGlbMV0sNCkpOworCQkmbW92CShAaVsxXSwkYTQpOworCQkmcHNsbHEJKEBUWzFdLDMqJG4pOworCQkmYW5kCShAaVsxXSwkYik7CisJCSZzaHIJKCRiLDMpOworCQkmcHhvcgkoJFIsQFRbMV0pOworCisJCXB1c2goQGksc2hpZnQoQGkpKTsgcHVzaChAVCxzaGlmdChAVCkpOworCX0KKwkmbW92ZAkoQFRbMV0sJkRXUCgwLCJlc3AiLEBpWzFdLDQpKTsKKwkmcHhvcgkoJFIsJEIzMCk7CisJJnBzbGxxCShAVFsxXSwzKiRuKyspOworCSZweG9yCSgkUixAVFsxXSk7CisKKwkmbW92ZAkoQFRbMF0sJkRXUCgwLCJlc3AiLEBpWzBdLDQpKTsKKwkmcHhvcgkoJFIsJEIzMSk7CisJJnBzbGxxCShAVFswXSwzKiRuKTsKKwkmYWRkCSgiZXNwIiwzMis0KTsKKwkmcHhvcgkoJFIsQFRbMF0pOworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl9tdWxfMXgxX21teCIpOworCQkJCQl9CisKKygkbG8sJGhpKT0oImVheCIsImVkeCIpOworQFQ9KCJlY3giLCJlYnAiKTsKKworJmZ1bmN0aW9uX2JlZ2luX0IoIl9tdWxfMXgxX2lhbHUiKTsKKwkmc3ViCSgiZXNwIiwzMis0KTsKKwkgJm1vdgkoJGExLCRhKTsKKwkgJmxlYQkoJGEyLCZEV1AoMCwkYSwkYSkpOworCSAmbGVhCSgkYTQsJkRXUCgwLCIiLCRhLDQpKTsKKwkgJmFuZAkoJGExLDB4M2ZmZmZmZmYpOworCSZsZWEJKEBpWzFdLCZEV1AoMCwkbG8sJGxvKSk7CisJJnNhcgkoJGxvLDMxKTsJCSMgYnJvYWRjYXN0IDMxc3QgYml0CisJICZtb3YJKCZEV1AoMCo0LCJlc3AiKSwwKTsKKwkgJmFuZAkoJGEyLDB4N2ZmZmZmZmYpOworCSAmbW92CSgmRFdQKDEqNCwiZXNwIiksJGExKTsJIyBhMQorCSAmeG9yCSgkYTEsJGEyKTsJCSMgYTFeYTIKKwkgJm1vdgkoJkRXUCgyKjQsImVzcCIpLCRhMik7CSMgYTIKKwkgJnhvcgkoJGEyLCRhNCk7CQkjIGEyXmE0CisJICZtb3YJKCZEV1AoMyo0LCJlc3AiKSwkYTEpOwkjIGExXmEyCisJICZ4b3IJKCRhMSwkYTIpOwkJIyBhMV5hND1hMV5hMl5hMl5hNAorCSAmbW92CSgmRFdQKDQqNCwiZXNwIiksJGE0KTsJIyBhNAorCSAmeG9yCSgkYTQsJGEyKTsJCSMgYTI9YTReYTJeYTQKKwkgJm1vdgkoJkRXUCg1KjQsImVzcCIpLCRhMSk7CSMgYTFeYTQKKwkgJnhvcgkoJGE0LCRhMSk7CQkjIGExXmEyXmE0CisJJnNhcgkoQGlbMV0sMzEpOwkJIyBicm9hcmRjYXN0IDMwdGggYml0CisJJmFuZAkoJGxvLCRiKTsKKwkgJm1vdgkoJkRXUCg2KjQsImVzcCIpLCRhMik7CSMgYTJeYTQKKwkmYW5kCShAaVsxXSwkYik7CisJICZtb3YJKCZEV1AoNyo0LCJlc3AiKSwkYTQpOwkjIGExXmEyXmE0CisJJm1vdgkoJGhpLCRsbyk7CisJJnNobAkoJGxvLDMxKTsKKwkmbW92CShAVFswXSxAaVsxXSk7CisJJnNocgkoJGhpLDEpOworCisJICZtb3YJKEBpWzBdLDB4Nyk7CisJJnNobAkoQGlbMV0sMzApOworCSAmYW5kCShAaVswXSwkYik7CisJJnNocgkoQFRbMF0sMik7CisJJnhvcgkoJGxvLEBpWzFdKTsKKworCSZzaHIJKCRiLDMpOworCSZtb3YJKEBpWzFdLDB4Nyk7CQkjIDUtYnl0ZSBpbnN0cnVjdGlvbiE/CisJJmFuZAkoQGlbMV0sJGIpOworCSZzaHIJKCRiLDMpOworCSAmeG9yCSgkaGksQFRbMF0pOworCSZ4b3IJKCRsbywmRFdQKDAsImVzcCIsQGlbMF0sNCkpOworCSZtb3YJKEBpWzBdLDB4Nyk7CisJJmFuZAkoQGlbMF0sJGIpOworCSZzaHIJKCRiLDMpOworCWZvcigkbj0xOyRuPDk7JG4rKykgeworCQkmbW92CShAVFsxXSwmRFdQKDAsImVzcCIsQGlbMV0sNCkpOworCQkmbW92CShAaVsxXSwweDcpOworCQkmbW92CShAVFswXSxAVFsxXSk7CisJCSZzaGwJKEBUWzFdLDMqJG4pOworCQkmYW5kCShAaVsxXSwkYik7CisJCSZzaHIJKEBUWzBdLDMyLTMqJG4pOworCQkmeG9yCSgkbG8sQFRbMV0pOworCQkmc2hyCSgkYiwzKTsKKwkJJnhvcgkoJGhpLEBUWzBdKTsKKworCQlwdXNoKEBpLHNoaWZ0KEBpKSk7IHB1c2goQFQsc2hpZnQoQFQpKTsKKwl9CisJJm1vdgkoQFRbMV0sJkRXUCgwLCJlc3AiLEBpWzFdLDQpKTsKKwkmbW92CShAVFswXSxAVFsxXSk7CisJJnNobAkoQFRbMV0sMyokbik7CisJJm1vdgkoQGlbMV0sJkRXUCgwLCJlc3AiLEBpWzBdLDQpKTsKKwkmc2hyCShAVFswXSwzMi0zKiRuKTsJJG4rKzsKKwkmbW92CShAaVswXSxAaVsxXSk7CisJJnhvcgkoJGxvLEBUWzFdKTsKKwkmc2hsCShAaVsxXSwzKiRuKTsKKwkmeG9yCSgkaGksQFRbMF0pOworCSZzaHIJKEBpWzBdLDMyLTMqJG4pOworCSZ4b3IJKCRsbyxAaVsxXSk7CisJJnhvcgkoJGhpLEBpWzBdKTsKKworCSZhZGQJKCJlc3AiLDMyKzQpOworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoIl9tdWxfMXgxX2lhbHUiKTsKKworIyB2b2lkIGJuX0dGMm1fbXVsXzJ4MihCTl9VTE9ORyAqciwgQk5fVUxPTkcgYTEsIEJOX1VMT05HIGEwLCBCTl9VTE9ORyBiMSwgQk5fVUxPTkcgYjApOworJmZ1bmN0aW9uX2JlZ2luX0IoImJuX0dGMm1fbXVsXzJ4MiIpOworaWYgKCEkeDg2b25seSkgeworCSZwaWNtZXVwKCJlZHgiLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworCSZtb3YJKCJlYXgiLCZEV1AoMCwiZWR4IikpOworCSZtb3YJKCJlZHgiLCZEV1AoNCwiZWR4IikpOworCSZ0ZXN0CSgiZWF4IiwxPDwyMyk7CQkjIGNoZWNrIE1NWCBiaXQKKwkmanoJKCZsYWJlbCgiaWFsdSIpKTsKK2lmICgkc3NlMikgeworCSZ0ZXN0CSgiZWF4IiwxPDwyNCk7CQkjIGNoZWNrIEZYU1IgYml0CisJJmp6CSgmbGFiZWwoIm1teCIpKTsKKwkmdGVzdAkoImVkeCIsMTw8MSk7CQkjIGNoZWNrIFBDTE1VTFFEUSBiaXQKKwkmanoJKCZsYWJlbCgibW14IikpOworCisJJm1vdnVwcwkJKCJ4bW0wIiwmUVdQKDgsImVzcCIpKTsKKwkmc2h1ZnBzCQkoInhtbTAiLCJ4bW0wIiwwYjEwMTEwMDAxKTsKKwkmcGNsbXVscWRxCSgieG1tMCIsInhtbTAiLDEpOworCSZtb3YJCSgiZWF4IiwmRFdQKDQsImVzcCIpKTsKKwkmbW92dXBzCQkoJlFXUCgwLCJlYXgiKSwieG1tMCIpOworCSZyZXQJKCk7CisKKyZzZXRfbGFiZWwoIm1teCIsMTYpOworfQorCSZwdXNoCSgiZWJwIik7CisJJnB1c2gJKCJlYngiKTsKKwkmcHVzaAkoImVzaSIpOworCSZwdXNoCSgiZWRpIik7CisJJm1vdgkoJGEsJndwYXJhbSgxKSk7CisJJm1vdgkoJGIsJndwYXJhbSgzKSk7CisJJmNhbGwJKCJfbXVsXzF4MV9tbXgiKTsJIyBhMbdiMQorCSZtb3ZxCSgibW03IiwkUik7CisKKwkmbW92CSgkYSwmd3BhcmFtKDIpKTsKKwkmbW92CSgkYiwmd3BhcmFtKDQpKTsKKwkmY2FsbAkoIl9tdWxfMXgxX21teCIpOwkjIGEwt2IwCisJJm1vdnEJKCJtbTYiLCRSKTsKKworCSZtb3YJKCRhLCZ3cGFyYW0oMSkpOworCSZtb3YJKCRiLCZ3cGFyYW0oMykpOworCSZ4b3IJKCRhLCZ3cGFyYW0oMikpOworCSZ4b3IJKCRiLCZ3cGFyYW0oNCkpOworCSZjYWxsCSgiX211bF8xeDFfbW14Iik7CSMgKGEwK2ExKbcoYjArYjEpCisJJnB4b3IJKCRSLCJtbTciKTsKKwkmbW92CSgkYSwmd3BhcmFtKDApKTsKKwkmcHhvcgkoJFIsIm1tNiIpOwkJIyAoYTArYTEptyhiMCtiMSktYTG3YjEtYTC3YjAKKworCSZtb3ZxCSgkQSwkUik7CisJJnBzbGxxCSgkUiwzMik7CisJJnBvcAkoImVkaSIpOworCSZwc3JscQkoJEEsMzIpOworCSZwb3AJKCJlc2kiKTsKKwkmcHhvcgkoJFIsIm1tNiIpOworCSZwb3AJKCJlYngiKTsKKwkmcHhvcgkoJEEsIm1tNyIpOworCSZtb3ZxCSgmUVdQKDAsJGEpLCRSKTsKKwkmcG9wCSgiZWJwIik7CisJJm1vdnEJKCZRV1AoOCwkYSksJEEpOworCSZlbW1zCSgpOworCSZyZXQJKCk7Cismc2V0X2xhYmVsKCJpYWx1IiwxNik7Cit9CisJJnB1c2gJKCJlYnAiKTsKKwkmcHVzaAkoImVieCIpOworCSZwdXNoCSgiZXNpIik7CisJJnB1c2gJKCJlZGkiKTsKKwkmc3RhY2tfcHVzaCg0KzEpOworCisJJm1vdgkoJGEsJndwYXJhbSgxKSk7CisJJm1vdgkoJGIsJndwYXJhbSgzKSk7CisJJmNhbGwJKCJfbXVsXzF4MV9pYWx1Iik7CSMgYTG3YjEKKwkmbW92CSgmRFdQKDgsImVzcCIpLCRsbyk7CisJJm1vdgkoJkRXUCgxMiwiZXNwIiksJGhpKTsKKworCSZtb3YJKCRhLCZ3cGFyYW0oMikpOworCSZtb3YJKCRiLCZ3cGFyYW0oNCkpOworCSZjYWxsCSgiX211bF8xeDFfaWFsdSIpOwkjIGEwt2IwCisJJm1vdgkoJkRXUCgwLCJlc3AiKSwkbG8pOworCSZtb3YJKCZEV1AoNCwiZXNwIiksJGhpKTsKKworCSZtb3YJKCRhLCZ3cGFyYW0oMSkpOworCSZtb3YJKCRiLCZ3cGFyYW0oMykpOworCSZ4b3IJKCRhLCZ3cGFyYW0oMikpOworCSZ4b3IJKCRiLCZ3cGFyYW0oNCkpOworCSZjYWxsCSgiX211bF8xeDFfaWFsdSIpOwkjIChhMCthMSm3KGIwK2IxKQorCisJJm1vdgkoImVicCIsJndwYXJhbSgwKSk7CisJCSBAcj0oImVieCIsImVjeCIsImVkaSIsImVzaSIpOworCSZtb3YJKEByWzBdLCZEV1AoMCwiZXNwIikpOworCSZtb3YJKEByWzFdLCZEV1AoNCwiZXNwIikpOworCSZtb3YJKEByWzJdLCZEV1AoOCwiZXNwIikpOworCSZtb3YJKEByWzNdLCZEV1AoMTIsImVzcCIpKTsKKworCSZ4b3IJKCRsbywkaGkpOworCSZ4b3IJKCRoaSxAclsxXSk7CisJJnhvcgkoJGxvLEByWzBdKTsKKwkmbW92CSgmRFdQKDAsImVicCIpLEByWzBdKTsKKwkmeG9yCSgkaGksQHJbMl0pOworCSZtb3YJKCZEV1AoMTIsImVicCIpLEByWzNdKTsKKwkmeG9yCSgkbG8sQHJbM10pOworCSZzdGFja19wb3AoNCsxKTsKKwkmeG9yCSgkaGksQHJbM10pOworCSZwb3AJKCJlZGkiKTsKKwkmeG9yCSgkbG8sJGhpKTsKKwkmcG9wCSgiZXNpIik7CisJJm1vdgkoJkRXUCg4LCJlYnAiKSwkaGkpOworCSZwb3AJKCJlYngiKTsKKwkmbW92CSgmRFdQKDQsImVicCIpLCRsbyk7CisJJnBvcAkoImVicCIpOworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoImJuX0dGMm1fbXVsXzJ4MiIpOworCismYXNjaXoJKCJHRigyXm0pIE11bHRpcGxpY2F0aW9uIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKKworJmFzbV9maW5pc2goKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20veDg2XzY0LWdmMm0ucGwgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1nZjJtLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NThhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1nZjJtLnBsCkBAIC0wLDAgKzEsMzg5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBNYXkgMjAxMQorIworIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgYm5fR0YybV9tdWxfMngyIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24gdXNlZAorIyBpbiBibl9nZjJtLmMuIEl0J3Mga2luZCBvZiBsb3ctaGFuZ2luZyBtZWNoYW5pY2FsIHBvcnQgZnJvbSBDIGZvcgorIyB0aGUgdGltZSBiZWluZy4uLiBFeGNlcHQgdGhhdCBpdCBoYXMgdHdvIGNvZGUgcGF0aHM6IGNvZGUgc3VpdGFibGUKKyMgZm9yIGFueSB4ODZfNjQgQ1BVIGFuZCBQQ0xNVUxRRFEgb25lIHN1aXRhYmxlIGZvciBXZXN0bWVyZSBhbmQKKyMgbGF0ZXIuIEltcHJvdmVtZW50IHZhcmllcyBmcm9tIG9uZSBiZW5jaG1hcmsgYW5kILUtYXJjaCB0byBhbm90aGVyLgorIyBWYW5pbGxhIGNvZGUgcGF0aCBpcyBhdCBtb3N0IDIwJSBmYXN0ZXIgdGhhbiBjb21waWxlci1nZW5lcmF0ZWQgY29kZQorIyBbbm90IHZlcnkgaW1wcmVzc2l2ZV0sIHdoaWxlIFBDTE1VTFFEUSAtIHdob2xlIDg1JS0xNjAlIGJldHRlciBvbgorIyAxNjMtIGFuZCA1NzEtYml0IEVDREggYmVuY2htYXJrcyBvbiBJbnRlbCBDUFVzLiBLZWVwIGluIG1pbmQgdGhhdAorIyB0aGVzZSBjb2VmZmljaWVudHMgYXJlIG5vdCBvbmVzIGZvciBibl9HRjJtX211bF8yeDIgaXRzZWxmLCBhcyBub3QKKyMgYWxsIENQVSB0aW1lIGlzIGJ1cm50IGluIGl0Li4uCisKKyRmbGF2b3VyID0gc2hpZnQ7Ciskb3V0cHV0ICA9IHNoaWZ0OworaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQorCiskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOworCisoJGxvLCRoaSk9KCIlcmF4IiwiJXJkeCIpOwkkYT0kbG87CisoJGkwLCRpMSk9KCIlcnNpIiwiJXJkaSIpOworKCR0MCwkdDEpPSgiJXJieCIsIiVyY3giKTsKKygkYiwkbWFzayk9KCIlcmJwIiwiJXI4Iik7CisoJGExLCRhMiwkYTQsJGE4LCRhMTIsJGE0OCk9bWFwKCIlciRfIiwoOS4uMTUpKTsKKygkUiwkVHgpPSgiJXhtbTAiLCIleG1tMSIpOworCiskY29kZS49PDxfX187CisudGV4dAorCisudHlwZQlfbXVsXzF4MSxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK19tdWxfMXgxOgorCXN1YglcJDEyOCs4LCVyc3AKKwltb3YJXCQtMSwkYTEKKwlsZWEJKCRhLCRhKSwkaTAKKwlzaHIJXCQzLCRhMQorCWxlYQkoLCRhLDQpLCRpMQorCWFuZAkkYSwkYTEJCQkjIGExPWEmMHgxZmZmZmZmZmZmZmZmZmZmCisJbGVhCSgsJGEsOCksJGE4CisJc2FyCVwkNjMsJGEJCQkjIGJyb2FkY2FzdCA2M3JkIGJpdAorCWxlYQkoJGExLCRhMSksJGEyCisJc2FyCVwkNjMsJGkwCQkjIGJyb2FkY2FzdCA2Mm5kIGJpdAorCWxlYQkoLCRhMSw0KSwkYTQKKwlhbmQJJGIsJGEKKwlzYXIJXCQ2MywkaTEJCSMgYm9hcmRjYXN0IDYxc3QgYml0CisJbW92CSRhLCRoaQkJCSMgJGEgaXMgJGxvCisJc2hsCVwkNjMsJGxvCisJYW5kCSRiLCRpMAorCXNocglcJDEsJGhpCisJbW92CSRpMCwkdDEKKwlzaGwJXCQ2MiwkaTAKKwlhbmQJJGIsJGkxCisJc2hyCVwkMiwkdDEKKwl4b3IJJGkwLCRsbworCW1vdgkkaTEsJHQwCisJc2hsCVwkNjEsJGkxCisJeG9yCSR0MSwkaGkKKwlzaHIJXCQzLCR0MAorCXhvcgkkaTEsJGxvCisJeG9yCSR0MCwkaGkKKworCW1vdgkkYTEsJGExMgorCW1vdnEJXCQwLDAoJXJzcCkJCSMgdGFiWzBdPTAKKwl4b3IJJGEyLCRhMTIJCSMgYTFeYTIKKwltb3YJJGExLDgoJXJzcCkJCSMgdGFiWzFdPWExCisJIG1vdgkkYTQsJGE0OAorCW1vdgkkYTIsMTYoJXJzcCkJCSMgdGFiWzJdPWEyCisJIHhvcgkkYTgsJGE0OAkJIyBhNF5hOAorCW1vdgkkYTEyLDI0KCVyc3ApCQkjIHRhYlszXT1hMV5hMgorCisJeG9yCSRhNCwkYTEKKwltb3YJJGE0LDMyKCVyc3ApCQkjIHRhYls0XT1hNAorCXhvcgkkYTQsJGEyCisJbW92CSRhMSw0MCglcnNwKQkJIyB0YWJbNV09YTFeYTQKKwl4b3IJJGE0LCRhMTIKKwltb3YJJGEyLDQ4KCVyc3ApCQkjIHRhYls2XT1hMl5hNAorCSB4b3IJJGE0OCwkYTEJCSMgYTFeYTReYTReYTg9YTFeYTgKKwltb3YJJGExMiw1NiglcnNwKQkJIyB0YWJbN109YTFeYTJeYTQKKwkgeG9yCSRhNDgsJGEyCQkjIGEyXmE0XmE0XmE4PWExXmE4CisKKwltb3YJJGE4LDY0KCVyc3ApCQkjIHRhYls4XT1hOAorCXhvcgkkYTQ4LCRhMTIJCSMgYTFeYTJeYTReYTReYTg9YTFeYTJeYTgKKwltb3YJJGExLDcyKCVyc3ApCQkjIHRhYls5XT1hMV5hOAorCSB4b3IJJGE0LCRhMQkJCSMgYTFeYTheYTQKKwltb3YJJGEyLDgwKCVyc3ApCQkjIHRhYlsxMF09YTJeYTgKKwkgeG9yCSRhNCwkYTIJCQkjIGEyXmE4XmE0CisJbW92CSRhMTIsODgoJXJzcCkJCSMgdGFiWzExXT1hMV5hMl5hOAorCisJeG9yCSRhNCwkYTEyCQkjIGExXmEyXmE4XmE0CisJbW92CSRhNDgsOTYoJXJzcCkJCSMgdGFiWzEyXT1hNF5hOAorCSBtb3YJJG1hc2ssJGkwCisJbW92CSRhMSwxMDQoJXJzcCkJCSMgdGFiWzEzXT1hMV5hNF5hOAorCSBhbmQJJGIsJGkwCisJbW92CSRhMiwxMTIoJXJzcCkJCSMgdGFiWzE0XT1hMl5hNF5hOAorCSBzaHIJXCQ0LCRiCisJbW92CSRhMTIsMTIwKCVyc3ApCQkjIHRhYlsxNV09YTFeYTJeYTReYTgKKwkgbW92CSRtYXNrLCRpMQorCSBhbmQJJGIsJGkxCisJIHNocglcJDQsJGIKKworCW1vdnEJKCVyc3AsJGkwLDgpLCRSCQkjIGhhbGYgb2YgY2FsY3VsYXRpb25zIGlzIGRvbmUgaW4gU1NFMgorCW1vdgkkbWFzaywkaTAKKwlhbmQJJGIsJGkwCisJc2hyCVwkNCwkYgorX19fCisgICAgZm9yICgkbj0xOyRuPDg7JG4rKykgeworCSRjb2RlLj08PF9fXzsKKwltb3YJKCVyc3AsJGkxLDgpLCR0MQorCW1vdgkkbWFzaywkaTEKKwltb3YJJHQxLCR0MAorCXNobAlcJGA4KiRuLTRgLCR0MQorCWFuZAkkYiwkaTEKKwkgbW92cQkoJXJzcCwkaTAsOCksJFR4CisJc2hyCVwkYDY0LSg4KiRuLTQpYCwkdDAKKwl4b3IJJHQxLCRsbworCSBwc2xsZHEJXCQkbiwkVHgKKwkgbW92CSRtYXNrLCRpMAorCXNocglcJDQsJGIKKwl4b3IJJHQwLCRoaQorCSBhbmQJJGIsJGkwCisJIHNocglcJDQsJGIKKwkgcHhvcgkkVHgsJFIKK19fXworICAgIH0KKyRjb2RlLj08PF9fXzsKKwltb3YJKCVyc3AsJGkxLDgpLCR0MQorCW1vdgkkdDEsJHQwCisJc2hsCVwkYDgqJG4tNGAsJHQxCisJbW92cQkkUiwkaTAKKwlzaHIJXCRgNjQtKDgqJG4tNClgLCR0MAorCXhvcgkkdDEsJGxvCisJcHNybGRxCVwkOCwkUgorCXhvcgkkdDAsJGhpCisJbW92cQkkUiwkaTEKKwl4b3IJJGkwLCRsbworCXhvcgkkaTEsJGhpCisKKwlhZGQJXCQxMjgrOCwlcnNwCisJcmV0CisuTGVuZF9tdWxfMXgxOgorLnNpemUJX211bF8xeDEsLi1fbXVsXzF4MQorX19fCisKKygkcnAsJGExLCRhMCwkYjEsJGIwKSA9ICR3aW42ND8JKCIlcmN4IiwiJXJkeCIsIiVyOCIsICIlcjkiLCIlcjEwIikgOgkjIFdpbjY0IG9yZGVyCisJCQkJKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4IiwiJXI4Iik7CSMgVW5peCBvcmRlcgorCiskY29kZS49PDxfX187CisuZXh0ZXJuCU9QRU5TU0xfaWEzMmNhcF9QCisuZ2xvYmwJYm5fR0YybV9tdWxfMngyCisudHlwZQlibl9HRjJtX211bF8yeDIsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Citibl9HRjJtX211bF8yeDI6CisJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVyYXgKKwlidAlcJDMzLCVyYXgKKwlqbmMJLkx2YW5pbGxhX211bF8yeDIKKworCW1vdnEJCSRhMSwleG1tMAorCW1vdnEJCSRiMSwleG1tMQorCW1vdnEJCSRhMCwleG1tMgorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92cQkJNDAoJXJzcCksJXhtbTMKK19fXworJGNvZGUuPTw8X19fIGlmICghJHdpbjY0KTsKKwltb3ZxCQkkYjAsJXhtbTMKK19fXworJGNvZGUuPTw8X19fOworCW1vdmRxYQkJJXhtbTAsJXhtbTQKKwltb3ZkcWEJCSV4bW0xLCV4bW01CisJcGNsbXVscWRxCVwkMCwleG1tMSwleG1tMAkjIGExt2IxCisJcHhvcgkJJXhtbTIsJXhtbTQKKwlweG9yCQkleG1tMywleG1tNQorCXBjbG11bHFkcQlcJDAsJXhtbTMsJXhtbTIJIyBhMLdiMAorCXBjbG11bHFkcQlcJDAsJXhtbTUsJXhtbTQJIyAoYTArYTEptyhiMCtiMSkKKwl4b3JwcwkJJXhtbTAsJXhtbTQKKwl4b3JwcwkJJXhtbTIsJXhtbTQJIyAoYTArYTEptyhiMCtiMSktYTC3YjAtYTG3YjEKKwltb3ZkcWEJCSV4bW00LCV4bW01CisJcHNsbGRxCQlcJDgsJXhtbTQKKwlwc3JsZHEJCVwkOCwleG1tNQorCXB4b3IJCSV4bW00LCV4bW0yCisJcHhvcgkJJXhtbTUsJXhtbTAKKwltb3ZkcXUJCSV4bW0yLDAoJHJwKQorCW1vdmRxdQkJJXhtbTAsMTYoJHJwKQorCXJldAorCisuYWxpZ24JMTYKKy5MdmFuaWxsYV9tdWxfMngyOgorCWxlYQktOCoxNyglcnNwKSwlcnNwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3YJYDgqMTcrNDBgKCVyc3ApLCRiMAorCW1vdgklcmRpLDgqMTUoJXJzcCkKKwltb3YJJXJzaSw4KjE2KCVyc3ApCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJJXIxNCw4KjEwKCVyc3ApCisJbW92CSVyMTMsOCoxMSglcnNwKQorCW1vdgklcjEyLDgqMTIoJXJzcCkKKwltb3YJJXJicCw4KjEzKCVyc3ApCisJbW92CSVyYngsOCoxNCglcnNwKQorLkxib2R5X211bF8yeDI6CisJbW92CSRycCwzMiglcnNwKQkJIyBzYXZlIHRoZSBhcmd1bWVudHMKKwltb3YJJGExLDQwKCVyc3ApCisJbW92CSRhMCw0OCglcnNwKQorCW1vdgkkYjEsNTYoJXJzcCkKKwltb3YJJGIwLDY0KCVyc3ApCisKKwltb3YJXCQweGYsJG1hc2sKKwltb3YJJGExLCRhCisJbW92CSRiMSwkYgorCWNhbGwJX211bF8xeDEJCSMgYTG3YjEKKwltb3YJJGxvLDE2KCVyc3ApCisJbW92CSRoaSwyNCglcnNwKQorCisJbW92CTQ4KCVyc3ApLCRhCisJbW92CTY0KCVyc3ApLCRiCisJY2FsbAlfbXVsXzF4MQkJIyBhMLdiMAorCW1vdgkkbG8sMCglcnNwKQorCW1vdgkkaGksOCglcnNwKQorCisJbW92CTQwKCVyc3ApLCRhCisJbW92CTU2KCVyc3ApLCRiCisJeG9yCTQ4KCVyc3ApLCRhCisJeG9yCTY0KCVyc3ApLCRiCisJY2FsbAlfbXVsXzF4MQkJIyAoYTArYTEptyhiMCtiMSkKK19fXworCUByPSgiJXJieCIsIiVyY3giLCIlcmRpIiwiJXJzaSIpOworJGNvZGUuPTw8X19fOworCW1vdgkwKCVyc3ApLEByWzBdCisJbW92CTgoJXJzcCksQHJbMV0KKwltb3YJMTYoJXJzcCksQHJbMl0KKwltb3YJMjQoJXJzcCksQHJbM10KKwltb3YJMzIoJXJzcCksJXJicAorCisJeG9yCSRoaSwkbG8KKwl4b3IJQHJbMV0sJGhpCisJeG9yCUByWzBdLCRsbworCW1vdglAclswXSwwKCVyYnApCisJeG9yCUByWzJdLCRoaQorCW1vdglAclszXSwyNCglcmJwKQorCXhvcglAclszXSwkbG8KKwl4b3IJQHJbM10sJGhpCisJeG9yCSRoaSwkbG8KKwltb3YJJGhpLDE2KCVyYnApCisJbW92CSRsbyw4KCVyYnApCisKKwltb3YJOCoxMCglcnNwKSwlcjE0CisJbW92CTgqMTEoJXJzcCksJXIxMworCW1vdgk4KjEyKCVyc3ApLCVyMTIKKwltb3YJOCoxMyglcnNwKSwlcmJwCisJbW92CTgqMTQoJXJzcCksJXJieAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92CTgqMTUoJXJzcCksJXJkaQorCW1vdgk4KjE2KCVyc3ApLCVyc2kKK19fXworJGNvZGUuPTw8X19fOworCWxlYQk4KjE3KCVyc3ApLCVyc3AKKwlyZXQKKy5MZW5kX211bF8yeDI6Cisuc2l6ZQlibl9HRjJtX211bF8yeDIsLi1ibl9HRjJtX211bF8yeDIKKy5hc2NpegkiR0YoMl5tKSBNdWx0aXBsaWNhdGlvbiBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTE2CitfX18KKworIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JFQ09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisjICAgICAgICAgICAgICAgQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVSX0NPTlRFWFQgKmRpc3ApCitpZiAoJHdpbjY0KSB7CiskcmVjPSIlcmN4IjsKKyRmcmFtZT0iJXJkeCI7CiskY29udGV4dD0iJXI4IjsKKyRkaXNwPSIlcjkiOworCiskY29kZS49PDxfX187CisuZXh0ZXJuIF9faW1wX1J0bFZpcnR1YWxVbndpbmQKKworLnR5cGUJc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3NlX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwlsZWEJLkxib2R5X211bF8yeDIoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPCJwcm9sb2d1ZSIgbGFiZWwKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJOCoxMCglcmF4KSwlcjE0CQkjIG1pbWljIGVwaWxvZ3VlCisJbW92CTgqMTEoJXJheCksJXIxMworCW1vdgk4KjEyKCVyYXgpLCVyMTIKKwltb3YJOCoxMyglcmF4KSwlcmJwCisJbW92CTgqMTQoJXJheCksJXJieAorCW1vdgk4KjE1KCVyYXgpLCVyZGkKKwltb3YJOCoxNiglcmF4KSwlcnNpCisKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKKwltb3YJJXJkaSwxNzYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SZGkKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTMKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKworLkxpbl9wcm9sb2d1ZToKKwlsZWEJOCoxNyglcmF4KSwlcmF4CisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCQxNTQsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQlzZV9oYW5kbGVyLC4tc2VfaGFuZGxlcgorCisuc2VjdGlvbgkucGRhdGEKKy5hbGlnbgk0CisJLnJ2YQlfbXVsXzF4MQorCS5ydmEJLkxlbmRfbXVsXzF4MQorCS5ydmEJLkxTRUhfaW5mb18xeDEKKworCS5ydmEJLkx2YW5pbGxhX211bF8yeDIKKwkucnZhCS5MZW5kX211bF8yeDIKKwkucnZhCS5MU0VIX2luZm9fMngyCisuc2VjdGlvbgkueGRhdGEKKy5hbGlnbgk4CisuTFNFSF9pbmZvXzF4MToKKwkuYnl0ZQkweDAxLDB4MDcsMHgwMiwweDAwCisJLmJ5dGUJMHgwNywweDAxLDB4MTEsMHgwMAkjIHN1YiByc3AsMTI4KzgKKy5MU0VIX2luZm9fMngyOgorCS5ieXRlCTksMCwwLDAKKwkucnZhCXNlX2hhbmRsZXIKK19fXworfQorCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZW07CitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL3g4Nl82NC1tb250LnBsCmluZGV4IDNiN2E2ZjIuLjVkNzliMzUgMTAwNzU1Ci0tLSBhL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQucGwKKysrIGIvY3J5cHRvL2JuL2FzbS94ODZfNjQtbW9udC5wbApAQCAtMSw3ICsxLDcgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCiAjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKICMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKICMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCkBAIC0xNSw2ICsxNSwyMCBAQAogIyByZXNwZWN0ZnVsIDUwJS4gSXQgcmVtYWlucyB0byBiZSBzZWVuIGlmIGxvb3AgdW5yb2xsaW5nIGFuZAogIyBkZWRpY2F0ZWQgc3F1YXJpbmcgcm91dGluZSBjYW4gcHJvdmlkZSBmdXJ0aGVyIGltcHJvdmVtZW50Li4uCiAKKyMgSnVseSAyMDExLgorIworIyBBZGQgZGVkaWNhdGVkIHNxdWFyaW5nIHByb2NlZHVyZS4gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgdmFyaWVzCisjIGZyb20gcGxhdGZvcm0gdG8gcGxhdGZvcm0sIGJ1dCBpbiBhdmVyYWdlIGl0J3MgfjUlLzE1JS8yNSUvMzMlCisjIGZvciA1MTItLzEwMjQtLzIwNDgtLzQwOTYtYml0IFJTQSAqc2lnbiogYmVuY2htYXJrcyByZXNwZWN0aXZlbHkuCisKKyMgQXVndXN0IDIwMTEuCisjCisjIFVucm9sbCBhbmQgbW9kdWxvLXNjaGVkdWxlIGlubmVyIGxvb3BzIGluIHN1Y2ggbWFubmVyIHRoYXQgdGhleQorIyBhcmUgImZhbGxlbiB0aHJvdWdoIiBmb3IgaW5wdXQgbGVuZ3RocyBvZiA4LCB3aGljaCBpcyBjcml0aWNhbCBmb3IKKyMgMTAyNC1iaXQgUlNBICpzaWduKi4gQXZlcmFnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpbiBjb21wYXJpc29uCisjIHRvICppbml0aWFsKiB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlIGZyb20gMjAwNSBpcyB+MCUvMzAlLzQwJS80NSUKKyMgZm9yIDUxMi0vMTAyNC0vMjA0OC0vNDA5Ni1iaXQgUlNBICpzaWduKiBiZW5jaG1hcmtzIHJlc3BlY3RpdmVseS4KKwogJGZsYXZvdXIgPSBzaGlmdDsKICRvdXRwdXQgID0gc2hpZnQ7CiBpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CkBAIC0zNyw3ICs1MSw2IEBACiAkbnVtPSIlcjkiOwkjIGludCBudW0pOwogJGxvMD0iJXIxMCI7CiAkaGkwPSIlcjExIjsKLSRicD0iJXIxMiI7CSMgcmVhc3NpZ24gJGJwCiAkaGkxPSIlcjEzIjsKICRpPSIlcjE0IjsKICRqPSIlcjE1IjsKQEAgLTUxLDYgKzY0LDE2IEBACiAudHlwZQlibl9tdWxfbW9udCxcQGZ1bmN0aW9uLDYKIC5hbGlnbgkxNgogYm5fbXVsX21vbnQ6CisJdGVzdAlcJDMsJHtudW19ZAorCWpuegkuTG11bF9lbnRlcgorCWNtcAlcJDgsJHtudW19ZAorCWpiCS5MbXVsX2VudGVyCisJY21wCSRhcCwkYnAKKwlqbmUJLkxtdWw0eF9lbnRlcgorCWptcAkuTHNxcjR4X2VudGVyCisKKy5hbGlnbgkxNgorLkxtdWxfZW50ZXI6CiAJcHVzaAklcmJ4CiAJcHVzaAklcmJwCiAJcHVzaAklcjEyCkBAIC02Niw0OCArODksNjYgQEAKIAlhbmQJXCQtMTAyNCwlcnNwCQkjIG1pbmltaXplIFRMQiB1c2FnZQogCiAJbW92CSVyMTEsOCglcnNwLCRudW0sOCkJIyB0cFtudW0rMV09JXJzcAotLkxwcm9sb2d1ZToKLQltb3YJJXJkeCwkYnAJCSMgJGJwIHJlYXNzaWduZWQsIHJlbWVtYmVyPwotCisuTG11bF9ib2R5OgorCW1vdgkkYnAsJXIxMgkJIyByZWFzc2lnbiAkYnAKK19fXworCQkkYnA9IiVyMTIiOworJGNvZGUuPTw8X19fOwogCW1vdgkoJG4wKSwkbjAJCSMgcHVsbCBuMFswXSB2YWx1ZQorCW1vdgkoJGJwKSwkbTAJCSMgbTA9YnBbMF0KKwltb3YJKCRhcCksJXJheAogCiAJeG9yCSRpLCRpCQkJIyBpPTAKIAl4b3IJJGosJGoJCQkjIGo9MAogCi0JbW92CSgkYnApLCRtMAkJIyBtMD1icFswXQotCW1vdgkoJGFwKSwlcmF4CisJbW92CSRuMCwkbTEKIAltdWxxCSRtMAkJCSMgYXBbMF0qYnBbMF0KIAltb3YJJXJheCwkbG8wCisJbW92CSgkbnApLCVyYXgKKworCWltdWxxCSRsbzAsJG0xCQkjICJ0cFswXSIqbjAKIAltb3YJJXJkeCwkaGkwCiAKLQlpbXVscQkkbjAsJXJheAkJIyAidHBbMF0iKm4wCi0JbW92CSVyYXgsJG0xCi0KLQltdWxxCSgkbnApCQkJIyBucFswXSptMQotCWFkZAkkbG8wLCVyYXgJCSMgZGlzY2FyZGVkCisJbXVscQkkbTEJCQkjIG5wWzBdKm0xCisJYWRkCSVyYXgsJGxvMAkJIyBkaXNjYXJkZWQKKwltb3YJOCgkYXApLCVyYXgKIAlhZGMJXCQwLCVyZHgKIAltb3YJJXJkeCwkaGkxCiAKIAlsZWEJMSgkaiksJGoJCSMgaisrCisJam1wCS5MMXN0X2VudGVyCisKKy5hbGlnbgkxNgogLkwxc3Q6CisJYWRkCSVyYXgsJGhpMQogCW1vdgkoJGFwLCRqLDgpLCVyYXgKLQltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KLQlhZGQJJGhpMCwlcmF4CiAJYWRjCVwkMCwlcmR4Ci0JbW92CSVyYXgsJGxvMAorCWFkZAkkaGkwLCRoaTEJCSMgbnBbal0qbTErYXBbal0qYnBbMF0KKwltb3YJJGxvMCwkaGkwCisJYWRjCVwkMCwlcmR4CisJbW92CSRoaTEsLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJGhpMQorCisuTDFzdF9lbnRlcjoKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KKwlhZGQJJXJheCwkaGkwCiAJbW92CSgkbnAsJGosOCksJXJheAotCW1vdgklcmR4LCRoaTAKKwlhZGMJXCQwLCVyZHgKKwlsZWEJMSgkaiksJGoJCSMgaisrCisJbW92CSVyZHgsJGxvMAogCiAJbXVscQkkbTEJCQkjIG5wW2pdKm0xCi0JYWRkCSRoaTEsJXJheAotCWxlYQkxKCRqKSwkagkJIyBqKysKLQlhZGMJXCQwLCVyZHgKLQlhZGQJJGxvMCwlcmF4CQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCi0JYWRjCVwkMCwlcmR4Ci0JbW92CSVyYXgsLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCiAJY21wCSRudW0sJGoKKwlqbmUJLkwxc3QKKworCWFkZAklcmF4LCRoaTEKKwltb3YJKCRhcCksJXJheAkJIyBhcFswXQorCWFkYwlcJDAsJXJkeAorCWFkZAkkaGkwLCRoaTEJCSMgbnBbal0qbTErYXBbal0qYnBbMF0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJGhpMSwtMTYoJXJzcCwkaiw4KQkjIHRwW2otMV0KIAltb3YJJXJkeCwkaGkxCi0JamwJLkwxc3QKKwltb3YJJGxvMCwkaGkwCiAKIAl4b3IJJXJkeCwlcmR4CiAJYWRkCSRoaTAsJGhpMQpAQCAtMTE2LDUwICsxNTcsNjQgQEAKIAltb3YJJXJkeCwoJXJzcCwkbnVtLDgpCSMgc3RvcmUgdXBtb3N0IG92ZXJmbG93IGJpdAogCiAJbGVhCTEoJGkpLCRpCQkjIGkrKwotLmFsaWduCTQKKwlqbXAJLkxvdXRlcgorLmFsaWduCTE2CiAuTG91dGVyOgotCXhvcgkkaiwkagkJCSMgaj0wCi0KIAltb3YJKCRicCwkaSw4KSwkbTAJCSMgbTA9YnBbaV0KLQltb3YJKCRhcCksJXJheAkJIyBhcFswXQorCXhvcgkkaiwkagkJCSMgaj0wCisJbW92CSRuMCwkbTEKKwltb3YJKCVyc3ApLCRsbzAKIAltdWxxCSRtMAkJCSMgYXBbMF0qYnBbaV0KLQlhZGQJKCVyc3ApLCVyYXgJCSMgYXBbMF0qYnBbaV0rdHBbMF0KKwlhZGQJJXJheCwkbG8wCQkjIGFwWzBdKmJwW2ldK3RwWzBdCisJbW92CSgkbnApLCVyYXgKIAlhZGMJXCQwLCVyZHgKLQltb3YJJXJheCwkbG8wCisKKwlpbXVscQkkbG8wLCRtMQkJIyB0cFswXSpuMAogCW1vdgklcmR4LCRoaTAKIAotCWltdWxxCSRuMCwlcmF4CQkjIHRwWzBdKm4wCi0JbW92CSVyYXgsJG0xCi0KLQltdWxxCSgkbnAsJGosOCkJCSMgbnBbMF0qbTEKLQlhZGQJJGxvMCwlcmF4CQkjIGRpc2NhcmRlZAotCW1vdgk4KCVyc3ApLCRsbzAJCSMgdHBbMV0KKwltdWxxCSRtMQkJCSMgbnBbMF0qbTEKKwlhZGQJJXJheCwkbG8wCQkjIGRpc2NhcmRlZAorCW1vdgk4KCRhcCksJXJheAogCWFkYwlcJDAsJXJkeAorCW1vdgk4KCVyc3ApLCRsbzAJCSMgdHBbMV0KIAltb3YJJXJkeCwkaGkxCiAKIAlsZWEJMSgkaiksJGoJCSMgaisrCi0uYWxpZ24JNAorCWptcAkuTGlubmVyX2VudGVyCisKKy5hbGlnbgkxNgogLkxpbm5lcjoKKwlhZGQJJXJheCwkaGkxCiAJbW92CSgkYXAsJGosOCksJXJheAotCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQotCWFkZAkkaGkwLCVyYXgKIAlhZGMJXCQwLCVyZHgKLQlhZGQJJXJheCwkbG8wCQkjIGFwW2pdKmJwW2ldK3RwW2pdCisJYWRkCSRsbzAsJGhpMQkJIyBucFtqXSptMSthcFtqXSpicFtpXSt0cFtqXQorCW1vdgkoJXJzcCwkaiw4KSwkbG8wCisJYWRjCVwkMCwlcmR4CisJbW92CSRoaTEsLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJGhpMQorCisuTGlubmVyX2VudGVyOgorCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRoaTAKIAltb3YJKCRucCwkaiw4KSwlcmF4CiAJYWRjCVwkMCwlcmR4CisJYWRkCSRoaTAsJGxvMAkJIyBhcFtqXSpicFtpXSt0cFtqXQogCW1vdgklcmR4LCRoaTAKKwlhZGMJXCQwLCRoaTAKKwlsZWEJMSgkaiksJGoJCSMgaisrCiAKIAltdWxxCSRtMQkJCSMgbnBbal0qbTEKLQlhZGQJJGhpMSwlcmF4Ci0JbGVhCTEoJGopLCRqCQkjIGorKwotCWFkYwlcJDAsJXJkeAotCWFkZAkkbG8wLCVyYXgJCSMgbnBbal0qbTErYXBbal0qYnBbaV0rdHBbal0KLQlhZGMJXCQwLCVyZHgKLQltb3YJKCVyc3AsJGosOCksJGxvMAogCWNtcAkkbnVtLCRqCi0JbW92CSVyYXgsLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJam5lCS5MaW5uZXIKKworCWFkZAklcmF4LCRoaTEKKwltb3YJKCRhcCksJXJheAkJIyBhcFswXQorCWFkYwlcJDAsJXJkeAorCWFkZAkkbG8wLCRoaTEJCSMgbnBbal0qbTErYXBbal0qYnBbaV0rdHBbal0KKwltb3YJKCVyc3AsJGosOCksJGxvMAorCWFkYwlcJDAsJXJkeAorCW1vdgkkaGkxLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQogCW1vdgklcmR4LCRoaTEKLQlqbAkuTGlubmVyCiAKIAl4b3IJJXJkeCwlcmR4CiAJYWRkCSRoaTAsJGhpMQpAQCAtMTczLDM0ICsyMjgsMzUgQEAKIAljbXAJJG51bSwkaQogCWpsCS5Mb3V0ZXIKIAotCWxlYQkoJXJzcCksJGFwCQkjIGJvcnJvdyBhcCBmb3IgdHAKLQlsZWEJLTEoJG51bSksJGoJCSMgaj1udW0tMQotCi0JbW92CSgkYXApLCVyYXgJCSMgdHBbMF0KIAl4b3IJJGksJGkJCQkjIGk9MCBhbmQgY2xlYXIgQ0YhCisJbW92CSglcnNwKSwlcmF4CQkjIHRwWzBdCisJbGVhCSglcnNwKSwkYXAJCSMgYm9ycm93IGFwIGZvciB0cAorCW1vdgkkbnVtLCRqCQkJIyBqPW51bQogCWptcAkuTHN1YgogLmFsaWduCTE2CiAuTHN1YjoJc2JiCSgkbnAsJGksOCksJXJheAogCW1vdgklcmF4LCgkcnAsJGksOCkJCSMgcnBbaV09dHBbaV0tbnBbaV0KLQlkZWMJJGoJCQkjIGRvZXNuJ3QgYWZmZWN0IENGIQogCW1vdgk4KCRhcCwkaSw4KSwlcmF4CSMgdHBbaSsxXQogCWxlYQkxKCRpKSwkaQkJIyBpKysKLQlqZ2UJLkxzdWIKKwlkZWMJJGoJCQkjIGRvZXNubid0IGFmZmVjdCBDRiEKKwlqbnoJLkxzdWIKIAogCXNiYglcJDAsJXJheAkJIyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAorCXhvcgkkaSwkaQogCWFuZAklcmF4LCRhcAogCW5vdAklcmF4CiAJbW92CSRycCwkbnAKIAlhbmQJJXJheCwkbnAKLQlsZWEJLTEoJG51bSksJGoKKwltb3YJJG51bSwkagkJCSMgaj1udW0KIAlvcgkkbnAsJGFwCQkJIyBhcD1ib3Jyb3c/dHA6cnAKIC5hbGlnbgkxNgogLkxjb3B5OgkJCQkJIyBjb3B5IG9yIGluLXBsYWNlIHJlZnJlc2gKLQltb3YJKCRhcCwkaiw4KSwlcmF4Ci0JbW92CSVyYXgsKCRycCwkaiw4KQkJIyBycFtpXT10cFtpXQotCW1vdgkkaSwoJXJzcCwkaiw4KQkJIyB6YXAgdGVtcG9yYXJ5IHZlY3RvcgotCWRlYwkkagotCWpnZQkuTGNvcHkKKwltb3YJKCRhcCwkaSw4KSwlcmF4CisJbW92CSRpLCglcnNwLCRpLDgpCQkjIHphcCB0ZW1wb3JhcnkgdmVjdG9yCisJbW92CSVyYXgsKCRycCwkaSw4KQkJIyBycFtpXT10cFtpXQorCWxlYQkxKCRpKSwkaQorCXN1YglcJDEsJGoKKwlqbnoJLkxjb3B5CiAKIAltb3YJOCglcnNwLCRudW0sOCksJXJzaQkjIHJlc3RvcmUgJXJzcAogCW1vdglcJDEsJXJheApAQCAtMjExLDkgKzI2NywxMjM2IEBACiAJbW92CTMyKCVyc2kpLCVyYnAKIAltb3YJNDAoJXJzaSksJXJieAogCWxlYQk0OCglcnNpKSwlcnNwCi0uTGVwaWxvZ3VlOgorLkxtdWxfZXBpbG9ndWU6CiAJcmV0CiAuc2l6ZQlibl9tdWxfbW9udCwuLWJuX211bF9tb250CitfX18KK3t7eworbXkgQEE9KCIlcjEwIiwiJXIxMSIpOworbXkgQE49KCIlcjEzIiwiJXJkaSIpOworJGNvZGUuPTw8X19fOworLnR5cGUJYm5fbXVsNHhfbW9udCxcQGZ1bmN0aW9uLDYKKy5hbGlnbgkxNgorYm5fbXVsNHhfbW9udDoKKy5MbXVsNHhfZW50ZXI6CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwltb3YJJHtudW19ZCwke251bX1kCisJbGVhCTQoJG51bSksJXIxMAorCW1vdgklcnNwLCVyMTEKKwluZWcJJXIxMAorCWxlYQkoJXJzcCwlcjEwLDgpLCVyc3AJIyB0cD1hbGxvY2EoOCoobnVtKzQpKQorCWFuZAlcJC0xMDI0LCVyc3AJCSMgbWluaW1pemUgVExCIHVzYWdlCisKKwltb3YJJXIxMSw4KCVyc3AsJG51bSw4KQkjIHRwW251bSsxXT0lcnNwCisuTG11bDR4X2JvZHk6CisJbW92CSRycCwxNiglcnNwLCRudW0sOCkJIyB0cFtudW0rMl09JHJwCisJbW92CSVyZHgsJXIxMgkJIyByZWFzc2lnbiAkYnAKK19fXworCQkkYnA9IiVyMTIiOworJGNvZGUuPTw8X19fOworCW1vdgkoJG4wKSwkbjAJCSMgcHVsbCBuMFswXSB2YWx1ZQorCW1vdgkoJGJwKSwkbTAJCSMgbTA9YnBbMF0KKwltb3YJKCRhcCksJXJheAorCisJeG9yCSRpLCRpCQkJIyBpPTAKKwl4b3IJJGosJGoJCQkjIGo9MAorCisJbW92CSRuMCwkbTEKKwltdWxxCSRtMAkJCSMgYXBbMF0qYnBbMF0KKwltb3YJJXJheCwkQVswXQorCW1vdgkoJG5wKSwlcmF4CisKKwlpbXVscQkkQVswXSwkbTEJCSMgInRwWzBdIipuMAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbMF0qbTEKKwlhZGQJJXJheCwkQVswXQkJIyBkaXNjYXJkZWQKKwltb3YJOCgkYXApLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkTlsxXQorCisJbXVscQkkbTAKKwlhZGQJJXJheCwkQVsxXQorCW1vdgk4KCRucCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQorCWFkZAklcmF4LCROWzFdCisJbW92CTE2KCRhcCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVsxXSwkTlsxXQorCWxlYQk0KCRqKSwkagkJIyBqKysKKwlhZGMJXCQwLCVyZHgKKwltb3YJJE5bMV0sKCVyc3ApCisJbW92CSVyZHgsJE5bMF0KKwlqbXAJLkwxc3Q0eAorLmFsaWduCTE2CisuTDFzdDR4OgorCW11bHEJJG0wCQkJIyBhcFtqXSpicFswXQorCWFkZAklcmF4LCRBWzBdCisJbW92CS0xNigkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlswXQorCW1vdgktOCgkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVswXSwkTlswXQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlswXSwtMjQoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlsxXQorCisJbXVscQkkbTAJCQkjIGFwW2pdKmJwWzBdCisJYWRkCSVyYXgsJEFbMV0KKwltb3YJLTgoJG5wLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJKCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KKwlhZGQJJXJheCwkQVswXQorCW1vdgkoJG5wLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVsxXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMF0KKwltb3YJOCgkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVswXSwkTlswXQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlswXSwtOCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgk4KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbGVhCTQoJGopLCRqCQkjIGorKworCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgktMTYoJGFwLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJJEFbMV0sJE5bMV0JCSMgbnBbal0qbTErYXBbal0qYnBbMF0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJE5bMV0sLTMyKCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJE5bMF0KKwljbXAJJG51bSwkagorCWpsCS5MMXN0NHgKKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFswXQorCWFkZAklcmF4LCRBWzBdCisJbW92CS0xNigkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlswXQorCW1vdgktOCgkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVswXSwkTlswXQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlswXSwtMjQoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlsxXQorCisJbXVscQkkbTAJCQkjIGFwW2pdKmJwWzBdCisJYWRkCSVyYXgsJEFbMV0KKwltb3YJLTgoJG5wLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJKCRhcCksJXJheAkJIyBhcFswXQorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVsxXSwkTlsxXQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlsxXSwtMTYoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlswXQorCisJeG9yCSROWzFdLCROWzFdCisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwkTlsxXQorCW1vdgkkTlswXSwtOCglcnNwLCRqLDgpCisJbW92CSROWzFdLCglcnNwLCRqLDgpCSMgc3RvcmUgdXBtb3N0IG92ZXJmbG93IGJpdAorCisJbGVhCTEoJGkpLCRpCQkjIGkrKworLmFsaWduCTQKKy5Mb3V0ZXI0eDoKKwltb3YJKCRicCwkaSw4KSwkbTAJCSMgbTA9YnBbaV0KKwl4b3IJJGosJGoJCQkjIGo9MAorCW1vdgkoJXJzcCksJEFbMF0KKwltb3YJJG4wLCRtMQorCW11bHEJJG0wCQkJIyBhcFswXSpicFtpXQorCWFkZAklcmF4LCRBWzBdCQkjIGFwWzBdKmJwW2ldK3RwWzBdCisJbW92CSgkbnApLCVyYXgKKwlhZGMJXCQwLCVyZHgKKworCWltdWxxCSRBWzBdLCRtMQkJIyB0cFswXSpuMAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbMF0qbTEKKwlhZGQJJXJheCwkQVswXQkJIyAiJE5bMF0iLCBkaXNjYXJkZWQKKwltb3YJOCgkYXApLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkTlsxXQorCisJbXVscQkkbTAJCQkjIGFwW2pdKmJwW2ldCisJYWRkCSVyYXgsJEFbMV0KKwltb3YJOCgkbnApLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJOCglcnNwKSwkQVsxXQkJIyArdHBbMV0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJMTYoJGFwKSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCQkjIG5wW2pdKm0xK2FwW2pdKmJwW2ldK3RwW2pdCisJbGVhCTQoJGopLCRqCQkjIGorPTIKKwlhZGMJXCQwLCVyZHgKKwltb3YJJE5bMV0sKCVyc3ApCQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlswXQorCWptcAkuTGlubmVyNHgKKy5hbGlnbgkxNgorLkxpbm5lcjR4OgorCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRBWzBdCisJbW92CS0xNigkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktMTYoJXJzcCwkaiw4KSwkQVswXQkjIGFwW2pdKmJwW2ldK3RwW2pdCisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMV0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzBdCisJbW92CS04KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgktOCgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktOCglcnNwLCRqLDgpLCRBWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMF0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzFdCisJbW92CSgkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVsxXSwkTlsxXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlsxXSwtMTYoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlswXQorCisJbXVscQkkbTAJCQkjIGFwW2pdKmJwW2ldCisJYWRkCSVyYXgsJEFbMF0KKwltb3YJKCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSglcnNwLCRqLDgpLCRBWzBdCSMgYXBbal0qYnBbaV0rdHBbal0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVsxXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMF0KKwltb3YJOCgkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVswXSwkTlswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlswXSwtOCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgk4KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCTgoJXJzcCwkaiw4KSwkQVsxXQorCWFkYwlcJDAsJXJkeAorCWxlYQk0KCRqKSwkagkJIyBqKysKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJLTE2KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0zMiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisJY21wCSRudW0sJGoKKwlqbAkuTGlubmVyNHgKKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRBWzBdCisJbW92CS0xNigkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktMTYoJXJzcCwkaiw4KSwkQVswXQkjIGFwW2pdKmJwW2ldK3RwW2pdCisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMV0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzBdCisJbW92CS04KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgktOCgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktOCglcnNwLCRqLDgpLCRBWzFdCisJYWRjCVwkMCwlcmR4CisJbGVhCTEoJGkpLCRpCQkjIGkrKworCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgkoJGFwKSwlcmF4CQkjIGFwWzBdCisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisKKwl4b3IJJE5bMV0sJE5bMV0KKwlhZGQJJEFbMF0sJE5bMF0KKwlhZGMJXCQwLCROWzFdCisJYWRkCSglcnNwLCRudW0sOCksJE5bMF0JIyBwdWxsIHVwbW9zdCBvdmVyZmxvdyBiaXQKKwlhZGMJXCQwLCROWzFdCisJbW92CSROWzBdLC04KCVyc3AsJGosOCkKKwltb3YJJE5bMV0sKCVyc3AsJGosOCkJIyBzdG9yZSB1cG1vc3Qgb3ZlcmZsb3cgYml0CisKKwljbXAJJG51bSwkaQorCWpsCS5Mb3V0ZXI0eAorX19fCit7CitteSBAcmk9KCIlcmF4IiwiJXJkeCIsJG0wLCRtMSk7CiskY29kZS49PDxfX187CisJbW92CTE2KCVyc3AsJG51bSw4KSwkcnAJIyByZXN0b3JlICRycAorCW1vdgkwKCVyc3ApLEByaVswXQkJIyB0cFswXQorCXB4b3IJJXhtbTAsJXhtbTAKKwltb3YJOCglcnNwKSxAcmlbMV0JCSMgdHBbMV0KKwlzaHIJXCQyLCRudW0JCSMgbnVtLz00CisJbGVhCSglcnNwKSwkYXAJCSMgYm9ycm93IGFwIGZvciB0cAorCXhvcgkkaSwkaQkJCSMgaT0wIGFuZCBjbGVhciBDRiEKKworCXN1YgkwKCRucCksQHJpWzBdCisJbW92CTE2KCRhcCksQHJpWzJdCQkjIHRwWzJdCisJbW92CTI0KCRhcCksQHJpWzNdCQkjIHRwWzNdCisJc2JiCTgoJG5wKSxAcmlbMV0KKwlsZWEJLTEoJG51bSksJGoJCSMgaj1udW0vNC0xCisJam1wCS5Mc3ViNHgKKy5hbGlnbgkxNgorLkxzdWI0eDoKKwltb3YJQHJpWzBdLDAoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwltb3YJQHJpWzFdLDgoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwlzYmIJMTYoJG5wLCRpLDgpLEByaVsyXQorCW1vdgkzMigkYXAsJGksOCksQHJpWzBdCSMgdHBbaSsxXQorCW1vdgk0MCgkYXAsJGksOCksQHJpWzFdCisJc2JiCTI0KCRucCwkaSw4KSxAcmlbM10KKwltb3YJQHJpWzJdLDE2KCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJbW92CUByaVszXSwyNCgkcnAsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCXNiYgkzMigkbnAsJGksOCksQHJpWzBdCisJbW92CTQ4KCRhcCwkaSw4KSxAcmlbMl0KKwltb3YJNTYoJGFwLCRpLDgpLEByaVszXQorCXNiYgk0MCgkbnAsJGksOCksQHJpWzFdCisJbGVhCTQoJGkpLCRpCQkjIGkrKworCWRlYwkkagkJCSMgZG9lc25uJ3QgYWZmZWN0IENGIQorCWpuegkuTHN1YjR4CisKKwltb3YJQHJpWzBdLDAoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwltb3YJMzIoJGFwLCRpLDgpLEByaVswXQkjIGxvYWQgb3ZlcmZsb3cgYml0CisJc2JiCTE2KCRucCwkaSw4KSxAcmlbMl0KKwltb3YJQHJpWzFdLDgoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwlzYmIJMjQoJG5wLCRpLDgpLEByaVszXQorCW1vdglAcmlbMl0sMTYoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKworCXNiYglcJDAsQHJpWzBdCQkjIGhhbmRsZSB1cG1vc3Qgb3ZlcmZsb3cgYml0CisJbW92CUByaVszXSwyNCgkcnAsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCXhvcgkkaSwkaQkJCSMgaT0wCisJYW5kCUByaVswXSwkYXAKKwlub3QJQHJpWzBdCisJbW92CSRycCwkbnAKKwlhbmQJQHJpWzBdLCRucAorCWxlYQktMSgkbnVtKSwkagorCW9yCSRucCwkYXAJCQkjIGFwPWJvcnJvdz90cDpycAorCisJbW92ZHF1CSgkYXApLCV4bW0xCisJbW92ZHFhCSV4bW0wLCglcnNwKQorCW1vdmRxdQkleG1tMSwoJHJwKQorCWptcAkuTGNvcHk0eAorLmFsaWduCTE2CisuTGNvcHk0eDoJCQkJCSMgY29weSBvciBpbi1wbGFjZSByZWZyZXNoCisJbW92ZHF1CTE2KCRhcCwkaSksJXhtbTIKKwltb3ZkcXUJMzIoJGFwLCRpKSwleG1tMQorCW1vdmRxYQkleG1tMCwxNiglcnNwLCRpKQorCW1vdmRxdQkleG1tMiwxNigkcnAsJGkpCisJbW92ZHFhCSV4bW0wLDMyKCVyc3AsJGkpCisJbW92ZHF1CSV4bW0xLDMyKCRycCwkaSkKKwlsZWEJMzIoJGkpLCRpCisJZGVjCSRqCisJam56CS5MY29weTR4CisKKwlzaGwJXCQyLCRudW0KKwltb3ZkcXUJMTYoJGFwLCRpKSwleG1tMgorCW1vdmRxYQkleG1tMCwxNiglcnNwLCRpKQorCW1vdmRxdQkleG1tMiwxNigkcnAsJGkpCitfX18KK30KKyRjb2RlLj08PF9fXzsKKwltb3YJOCglcnNwLCRudW0sOCksJXJzaQkjIHJlc3RvcmUgJXJzcAorCW1vdglcJDEsJXJheAorCW1vdgkoJXJzaSksJXIxNQorCW1vdgk4KCVyc2kpLCVyMTQKKwltb3YJMTYoJXJzaSksJXIxMworCW1vdgkyNCglcnNpKSwlcjEyCisJbW92CTMyKCVyc2kpLCVyYnAKKwltb3YJNDAoJXJzaSksJXJieAorCWxlYQk0OCglcnNpKSwlcnNwCisuTG11bDR4X2VwaWxvZ3VlOgorCXJldAorLnNpemUJYm5fbXVsNHhfbW9udCwuLWJuX211bDR4X21vbnQKK19fXworfX19CisMe3t7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHZvaWQgYm5fc3FyNHhfbW9udCgKK215ICRycHRyPSIlcmRpIjsJIyBjb25zdCBCTl9VTE9ORyAqcnB0ciwKK215ICRhcHRyPSIlcnNpIjsJIyBjb25zdCBCTl9VTE9ORyAqYXB0ciwKK215ICRicHRyPSIlcmR4IjsJIyBub3QgdXNlZAorbXkgJG5wdHI9IiVyY3giOwkjIGNvbnN0IEJOX1VMT05HICpucHRyLAorbXkgJG4wICA9IiVyOCI7CQkjIGNvbnN0IEJOX1VMT05HICpuMCk7CitteSAkbnVtID0iJXI5IjsJCSMgaW50IG51bSwgaGFzIHRvIGJlIGRpdmlzaWJsZSBieSA0IGFuZAorCQkJIyBub3QgbGVzcyB0aGFuIDgKKworbXkgKCRpLCRqLCR0cHRyKT0oIiVyYnAiLCIlcmN4IiwkcnB0cik7CitteSBAQTA9KCIlcjEwIiwiJXIxMSIpOworbXkgQEExPSgiJXIxMiIsIiVyMTMiKTsKK215ICgkYTAsJGExLCRhaSk9KCIlcjE0IiwiJXIxNSIsIiVyYngiKTsKKworJGNvZGUuPTw8X19fOworLnR5cGUJYm5fc3FyNHhfbW9udCxcQGZ1bmN0aW9uLDYKKy5hbGlnbgkxNgorYm5fc3FyNHhfbW9udDoKKy5Mc3FyNHhfZW50ZXI6CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisKKwlzaGwJXCQzLCR7bnVtfWQJCSMgY29udmVydCAkbnVtIHRvIGJ5dGVzCisJeG9yCSVyMTAsJXIxMAorCW1vdgklcnNwLCVyMTEJCSMgcHV0IGFzaWRlICVyc3AKKwlzdWIJJG51bSwlcjEwCQkjIC0kbnVtCisJbW92CSgkbjApLCRuMAkJIyAqbjAKKwlsZWEJLTcyKCVyc3AsJXIxMCwyKSwlcnNwCSMgYWxsb2NhKGZyYW1lKzIqJG51bSkKKwlhbmQJXCQtMTAyNCwlcnNwCQkjIG1pbmltaXplIFRMQiB1c2FnZQorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBTdGFjayBsYXlvdXQKKwkjCisJIyArMAlzYXZlZCAkbnVtLCB1c2VkIGluIHJlZHVjdGlvbiBzZWN0aW9uCisJIyArOAkmdFsyKiRudW1dLCB1c2VkIGluIHJlZHVjdGlvbiBzZWN0aW9uCisJIyArMzIJc2F2ZWQgJHJwdHIKKwkjICs0MAlzYXZlZCAkbnB0cgorCSMgKzQ4CXNhdmVkICpuMAorCSMgKzU2CXNhdmVkICVyc3AKKwkjICs2NAl0WzIqJG51bV0KKwkjCisJbW92CSRycHRyLDMyKCVyc3ApCQkjIHNhdmUgJHJwdHIKKwltb3YJJG5wdHIsNDAoJXJzcCkKKwltb3YJJG4wLCAgNDgoJXJzcCkKKwltb3YJJXIxMSwgNTYoJXJzcCkJCSMgc2F2ZSBvcmlnaW5hbCAlcnNwCisuTHNxcjR4X2JvZHk6CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFNxdWFyaW5nIHBhcnQ6CisJIworCSMgYSkgbXVsdGlwbHktbi1hZGQgZXZlcnl0aGluZyBidXQgYVtpXSphW2ldOworCSMgYikgc2hpZnQgcmVzdWx0IG9mIGEpIGJ5IDEgdG8gdGhlIGxlZnQgYW5kIGFjY3VtdWxhdGUKKwkjICAgIGFbaV0qYVtpXSBwcm9kdWN0czsKKwkjCisJbGVhCTMyKCVyMTApLCRpCQkjICRpPS0oJG51bS0zMikKKwlsZWEJKCRhcHRyLCRudW0pLCRhcHRyCSMgZW5kIG9mIGFbXSBidWZmZXIsICgkYXB0ciwkaSk9JmFwWzJdCisKKwltb3YJJG51bSwkagkJCSMgJGo9JG51bQorCisJCQkJCSMgY29tbWVudHMgYXBwbHkgdG8gJG51bT09OCBjYXNlCisJbW92CS0zMigkYXB0ciwkaSksJGEwCSMgYVswXQorCWxlYQk2NCglcnNwLCRudW0sMiksJHRwdHIJIyBlbmQgb2YgdHBbXSBidWZmZXIsICZ0cFsyKiRudW1dCisJbW92CS0yNCgkYXB0ciwkaSksJXJheAkjIGFbMV0KKwlsZWEJLTMyKCR0cHRyLCRpKSwkdHB0cgkjIGVuZCBvZiB0cFtdIHdpbmRvdywgJnRwWzIqJG51bS0iJGkiXQorCW1vdgktMTYoJGFwdHIsJGkpLCRhaQkjIGFbMl0KKwltb3YJJXJheCwkYTEKKworCW11bAkkYTAJCQkjIGFbMV0qYVswXQorCW1vdgklcmF4LCRBMFswXQkJIyBhWzFdKmFbMF0KKwkgbW92CSRhaSwlcmF4CQkjIGFbMl0KKwltb3YJJXJkeCwkQTBbMV0KKwltb3YJJEEwWzBdLC0yNCgkdHB0ciwkaSkJIyB0WzFdCisKKwl4b3IJJEEwWzBdLCRBMFswXQorCW11bAkkYTAJCQkjIGFbMl0qYVswXQorCWFkZAklcmF4LCRBMFsxXQorCSBtb3YJJGFpLCVyYXgKKwlhZGMJJXJkeCwkQTBbMF0KKwltb3YJJEEwWzFdLC0xNigkdHB0ciwkaSkJIyB0WzJdCisKKwlsZWEJLTE2KCRpKSwkagkJIyBqPS0xNgorCisKKwkgbW92CTgoJGFwdHIsJGopLCRhaQkJIyBhWzNdCisJbXVsCSRhMQkJCSMgYVsyXSphWzFdCisJbW92CSVyYXgsJEExWzBdCQkjIGFbMl0qYVsxXSt0WzNdCisJIG1vdgkkYWksJXJheAorCW1vdgklcmR4LCRBMVsxXQorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJJEExWzBdLCRBMFswXQorCSBsZWEJMTYoJGopLCRqCisJYWRjCVwkMCwkQTBbMV0KKwltdWwJJGEwCQkJIyBhWzNdKmFbMF0KKwlhZGQJJXJheCwkQTBbMF0JCSMgYVszXSphWzBdK2FbMl0qYVsxXSt0WzNdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMFsxXQorCW1vdgkkQTBbMF0sLTgoJHRwdHIsJGopCSMgdFszXQorCWptcAkuTHNxcjR4XzFzdAorCisuYWxpZ24JMTYKKy5Mc3FyNHhfMXN0OgorCSBtb3YJKCRhcHRyLCRqKSwkYWkJCSMgYVs0XQorCXhvcgkkQTFbMF0sJEExWzBdCisJbXVsCSRhMQkJCSMgYVszXSphWzFdCisJYWRkCSVyYXgsJEExWzFdCQkjIGFbM10qYVsxXSt0WzRdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMVswXQorCisJeG9yCSRBMFswXSwkQTBbMF0KKwlhZGQJJEExWzFdLCRBMFsxXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRhMAkJCSMgYVs0XSphWzBdCisJYWRkCSVyYXgsJEEwWzFdCQkjIGFbNF0qYVswXSthWzNdKmFbMV0rdFs0XQorCSBtb3YJJGFpLCVyYXgJCSMgYVszXQorCWFkYwklcmR4LCRBMFswXQorCW1vdgkkQTBbMV0sKCR0cHRyLCRqKQkjIHRbNF0KKworCisJIG1vdgk4KCRhcHRyLCRqKSwkYWkJCSMgYVs1XQorCXhvcgkkQTFbMV0sJEExWzFdCisJbXVsCSRhMQkJCSMgYVs0XSphWzNdCisJYWRkCSVyYXgsJEExWzBdCQkjIGFbNF0qYVszXSt0WzVdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMVsxXQorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJJEExWzBdLCRBMFswXQorCWFkYwlcJDAsJEEwWzFdCisJbXVsCSRhMAkJCSMgYVs1XSphWzJdCisJYWRkCSVyYXgsJEEwWzBdCQkjIGFbNV0qYVsyXSthWzRdKmFbM10rdFs1XQorCSBtb3YJJGFpLCVyYXgKKwlhZGMJJXJkeCwkQTBbMV0KKwltb3YJJEEwWzBdLDgoJHRwdHIsJGopCSMgdFs1XQorCisJIG1vdgkxNigkYXB0ciwkaiksJGFpCSMgYVs2XQorCXhvcgkkQTFbMF0sJEExWzBdCisJbXVsCSRhMQkJCSMgYVs1XSphWzNdCisJYWRkCSVyYXgsJEExWzFdCQkjIGFbNV0qYVszXSt0WzZdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMVswXQorCisJeG9yCSRBMFswXSwkQTBbMF0KKwlhZGQJJEExWzFdLCRBMFsxXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRhMAkJCSMgYVs2XSphWzJdCisJYWRkCSVyYXgsJEEwWzFdCQkjIGFbNl0qYVsyXSthWzVdKmFbM10rdFs2XQorCSBtb3YJJGFpLCVyYXgJCSMgYVszXQorCWFkYwklcmR4LCRBMFswXQorCW1vdgkkQTBbMV0sMTYoJHRwdHIsJGopCSMgdFs2XQorCisKKwkgbW92CTI0KCRhcHRyLCRqKSwkYWkJIyBhWzddCisJeG9yCSRBMVsxXSwkQTFbMV0KKwltdWwJJGExCQkJIyBhWzZdKmFbNV0KKwlhZGQJJXJheCwkQTFbMF0JCSMgYVs2XSphWzVdK3RbN10KKwkgbW92CSRhaSwlcmF4CisJYWRjCSVyZHgsJEExWzFdCisKKwl4b3IJJEEwWzFdLCRBMFsxXQorCWFkZAkkQTFbMF0sJEEwWzBdCisJIGxlYQkzMigkaiksJGoKKwlhZGMJXCQwLCRBMFsxXQorCW11bAkkYTAJCQkjIGFbN10qYVs0XQorCWFkZAklcmF4LCRBMFswXQkJIyBhWzddKmFbNF0rYVs2XSphWzVdK3RbNl0KKwkgbW92CSRhaSwlcmF4CisJYWRjCSVyZHgsJEEwWzFdCisJbW92CSRBMFswXSwtOCgkdHB0ciwkaikJIyB0WzddCisKKwljbXAJXCQwLCRqCisJam5lCS5Mc3FyNHhfMXN0CisKKwl4b3IJJEExWzBdLCRBMVswXQorCWFkZAkkQTBbMV0sJEExWzFdCisJYWRjCVwkMCwkQTFbMF0KKwltdWwJJGExCQkJIyBhWzddKmFbNV0KKwlhZGQJJXJheCwkQTFbMV0KKwlhZGMJJXJkeCwkQTFbMF0KKworCW1vdgkkQTFbMV0sKCR0cHRyKQkJIyB0WzhdCisJbGVhCTE2KCRpKSwkaQorCW1vdgkkQTFbMF0sOCgkdHB0cikJCSMgdFs5XQorCWptcAkuTHNxcjR4X291dGVyCisKKy5hbGlnbgkxNgorLkxzcXI0eF9vdXRlcjoJCQkJIyBjb21tZW50cyBhcHBseSB0byAkbnVtPT02IGNhc2UKKwltb3YJLTMyKCRhcHRyLCRpKSwkYTAJIyBhWzBdCisJbGVhCTY0KCVyc3AsJG51bSwyKSwkdHB0cgkjIGVuZCBvZiB0cFtdIGJ1ZmZlciwgJnRwWzIqJG51bV0KKwltb3YJLTI0KCRhcHRyLCRpKSwlcmF4CSMgYVsxXQorCWxlYQktMzIoJHRwdHIsJGkpLCR0cHRyCSMgZW5kIG9mIHRwW10gd2luZG93LCAmdHBbMiokbnVtLSIkaSJdCisJbW92CS0xNigkYXB0ciwkaSksJGFpCSMgYVsyXQorCW1vdgklcmF4LCRhMQorCisJbW92CS0yNCgkdHB0ciwkaSksJEEwWzBdCSMgdFsxXQorCXhvcgkkQTBbMV0sJEEwWzFdCisJbXVsCSRhMAkJCSMgYVsxXSphWzBdCisJYWRkCSVyYXgsJEEwWzBdCQkjIGFbMV0qYVswXSt0WzFdCisJIG1vdgkkYWksJXJheAkJIyBhWzJdCisJYWRjCSVyZHgsJEEwWzFdCisJbW92CSRBMFswXSwtMjQoJHRwdHIsJGkpCSMgdFsxXQorCisJeG9yCSRBMFswXSwkQTBbMF0KKwlhZGQJLTE2KCR0cHRyLCRpKSwkQTBbMV0JIyBhWzJdKmFbMF0rdFsyXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRhMAkJCSMgYVsyXSphWzBdCisJYWRkCSVyYXgsJEEwWzFdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMFswXQorCW1vdgkkQTBbMV0sLTE2KCR0cHRyLCRpKQkjIHRbMl0KKworCWxlYQktMTYoJGkpLCRqCQkjIGo9LTE2CisJeG9yCSRBMVswXSwkQTFbMF0KKworCisJIG1vdgk4KCRhcHRyLCRqKSwkYWkJCSMgYVszXQorCXhvcgkkQTFbMV0sJEExWzFdCisJYWRkCTgoJHRwdHIsJGopLCRBMVswXQorCWFkYwlcJDAsJEExWzFdCisJbXVsCSRhMQkJCSMgYVsyXSphWzFdCisJYWRkCSVyYXgsJEExWzBdCQkjIGFbMl0qYVsxXSt0WzNdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMVsxXQorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJJEExWzBdLCRBMFswXQorCWFkYwlcJDAsJEEwWzFdCisJbXVsCSRhMAkJCSMgYVszXSphWzBdCisJYWRkCSVyYXgsJEEwWzBdCQkjIGFbM10qYVswXSthWzJdKmFbMV0rdFszXQorCSBtb3YJJGFpLCVyYXgKKwlhZGMJJXJkeCwkQTBbMV0KKwltb3YJJEEwWzBdLDgoJHRwdHIsJGopCSMgdFszXQorCisJbGVhCTE2KCRqKSwkagorCWptcAkuTHNxcjR4X2lubmVyCisKKy5hbGlnbgkxNgorLkxzcXI0eF9pbm5lcjoKKwkgbW92CSgkYXB0ciwkaiksJGFpCQkjIGFbNF0KKwl4b3IJJEExWzBdLCRBMVswXQorCWFkZAkoJHRwdHIsJGopLCRBMVsxXQorCWFkYwlcJDAsJEExWzBdCisJbXVsCSRhMQkJCSMgYVszXSphWzFdCisJYWRkCSVyYXgsJEExWzFdCQkjIGFbM10qYVsxXSt0WzRdCisJIG1vdgkkYWksJXJheAorCWFkYwklcmR4LCRBMVswXQorCisJeG9yCSRBMFswXSwkQTBbMF0KKwlhZGQJJEExWzFdLCRBMFsxXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRhMAkJCSMgYVs0XSphWzBdCisJYWRkCSVyYXgsJEEwWzFdCQkjIGFbNF0qYVswXSthWzNdKmFbMV0rdFs0XQorCSBtb3YJJGFpLCVyYXgJCSMgYVszXQorCWFkYwklcmR4LCRBMFswXQorCW1vdgkkQTBbMV0sKCR0cHRyLCRqKQkjIHRbNF0KKworCSBtb3YJOCgkYXB0ciwkaiksJGFpCQkjIGFbNV0KKwl4b3IJJEExWzFdLCRBMVsxXQorCWFkZAk4KCR0cHRyLCRqKSwkQTFbMF0KKwlhZGMJXCQwLCRBMVsxXQorCW11bAkkYTEJCQkjIGFbNF0qYVszXQorCWFkZAklcmF4LCRBMVswXQkJIyBhWzRdKmFbM10rdFs1XQorCSBtb3YJJGFpLCVyYXgKKwlhZGMJJXJkeCwkQTFbMV0KKworCXhvcgkkQTBbMV0sJEEwWzFdCisJYWRkCSRBMVswXSwkQTBbMF0KKwlsZWEJMTYoJGopLCRqCQkjIGorKworCWFkYwlcJDAsJEEwWzFdCisJbXVsCSRhMAkJCSMgYVs1XSphWzJdCisJYWRkCSVyYXgsJEEwWzBdCQkjIGFbNV0qYVsyXSthWzRdKmFbM10rdFs1XQorCSBtb3YJJGFpLCVyYXgKKwlhZGMJJXJkeCwkQTBbMV0KKwltb3YJJEEwWzBdLC04KCR0cHRyLCRqKQkjIHRbNV0sICJwcmVsb2FkZWQgdFsxXSIgYmVsb3cKKworCWNtcAlcJDAsJGoKKwlqbmUJLkxzcXI0eF9pbm5lcgorCisJeG9yCSRBMVswXSwkQTFbMF0KKwlhZGQJJEEwWzFdLCRBMVsxXQorCWFkYwlcJDAsJEExWzBdCisJbXVsCSRhMQkJCSMgYVs1XSphWzNdCisJYWRkCSVyYXgsJEExWzFdCisJYWRjCSVyZHgsJEExWzBdCisKKwltb3YJJEExWzFdLCgkdHB0cikJCSMgdFs2XSwgInByZWxvYWRlZCB0WzJdIiBiZWxvdworCW1vdgkkQTFbMF0sOCgkdHB0cikJCSMgdFs3XSwgInByZWxvYWRlZCB0WzNdIiBiZWxvdworCisJYWRkCVwkMTYsJGkKKwlqbnoJLkxzcXI0eF9vdXRlcgorCisJCQkJCSMgY29tbWVudHMgYXBwbHkgdG8gJG51bT09NCBjYXNlCisJbW92CS0zMigkYXB0ciksJGEwCQkjIGFbMF0KKwlsZWEJNjQoJXJzcCwkbnVtLDIpLCR0cHRyCSMgZW5kIG9mIHRwW10gYnVmZmVyLCAmdHBbMiokbnVtXQorCW1vdgktMjQoJGFwdHIpLCVyYXgJCSMgYVsxXQorCWxlYQktMzIoJHRwdHIsJGkpLCR0cHRyCSMgZW5kIG9mIHRwW10gd2luZG93LCAmdHBbMiokbnVtLSIkaSJdCisJbW92CS0xNigkYXB0ciksJGFpCQkjIGFbMl0KKwltb3YJJXJheCwkYTEKKworCXhvcgkkQTBbMV0sJEEwWzFdCisJbXVsCSRhMAkJCSMgYVsxXSphWzBdCisJYWRkCSVyYXgsJEEwWzBdCQkjIGFbMV0qYVswXSt0WzFdLCBwcmVsb2FkZWQgdFsxXQorCSBtb3YJJGFpLCVyYXgJCSMgYVsyXQorCWFkYwklcmR4LCRBMFsxXQorCW1vdgkkQTBbMF0sLTI0KCR0cHRyKQkjIHRbMV0KKworCXhvcgkkQTBbMF0sJEEwWzBdCisJYWRkCSRBMVsxXSwkQTBbMV0JCSMgYVsyXSphWzBdK3RbMl0sIHByZWxvYWRlZCB0WzJdCisJYWRjCVwkMCwkQTBbMF0KKwltdWwJJGEwCQkJIyBhWzJdKmFbMF0KKwlhZGQJJXJheCwkQTBbMV0KKwkgbW92CSRhaSwlcmF4CisJYWRjCSVyZHgsJEEwWzBdCisJbW92CSRBMFsxXSwtMTYoJHRwdHIpCSMgdFsyXQorCisJIG1vdgktOCgkYXB0ciksJGFpCQkjIGFbM10KKwltdWwJJGExCQkJIyBhWzJdKmFbMV0KKwlhZGQJJXJheCwkQTFbMF0JCSMgYVsyXSphWzFdK3RbM10sIHByZWxvYWRlZCB0WzNdCisJIG1vdgkkYWksJXJheAorCWFkYwlcJDAsJXJkeAorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJJEExWzBdLCRBMFswXQorCSBtb3YJJXJkeCwkQTFbMV0KKwlhZGMJXCQwLCRBMFsxXQorCW11bAkkYTAJCQkjIGFbM10qYVswXQorCWFkZAklcmF4LCRBMFswXQkJIyBhWzNdKmFbMF0rYVsyXSphWzFdK3RbM10KKwkgbW92CSRhaSwlcmF4CisJYWRjCSVyZHgsJEEwWzFdCisJbW92CSRBMFswXSwtOCgkdHB0cikJIyB0WzNdCisKKwl4b3IJJEExWzBdLCRBMVswXQorCWFkZAkkQTBbMV0sJEExWzFdCisJYWRjCVwkMCwkQTFbMF0KKwltdWwJJGExCQkJIyBhWzNdKmFbMV0KKwlhZGQJJXJheCwkQTFbMV0KKwkgbW92CS0xNigkYXB0ciksJXJheAkJIyBhWzJdCisJYWRjCSVyZHgsJEExWzBdCisKKwltb3YJJEExWzFdLCgkdHB0cikJCSMgdFs0XQorCW1vdgkkQTFbMF0sOCgkdHB0cikJCSMgdFs1XQorCisJbXVsCSRhaQkJCSMgYVsyXSphWzNdCitfX18KK3sKK215ICgkc2hpZnQsJGNhcnJ5KT0oJGEwLCRhMSk7CitteSBAUz0oQEExLCRhaSwkbjApOworJGNvZGUuPTw8X19fOworCSBhZGQJXCQxNiwkaQorCSB4b3IJJHNoaWZ0LCRzaGlmdAorCSBzdWIJJG51bSwkaQkJCSMgJGk9MTYtJG51bQorCSB4b3IJJGNhcnJ5LCRjYXJyeQorCisJYWRkCSRBMVswXSwlcmF4CQkjIHRbNV0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJheCw4KCR0cHRyKQkJIyB0WzVdCisJbW92CSVyZHgsMTYoJHRwdHIpCQkjIHRbNl0KKwltb3YJJGNhcnJ5LDI0KCR0cHRyKQkjIHRbN10KKworCSBtb3YJLTE2KCRhcHRyLCRpKSwlcmF4CSMgYVswXQorCWxlYQk2NCglcnNwLCRudW0sMiksJHRwdHIKKwkgeG9yCSRBMFswXSwkQTBbMF0JCSMgdFswXQorCSBtb3YJLTI0KCR0cHRyLCRpLDIpLCRBMFsxXQkjIHRbMV0KKworCWxlYQkoJHNoaWZ0LCRBMFswXSwyKSwkU1swXQkjIHRbMippXTw8MSB8IHNoaWZ0CisJc2hyCVwkNjMsJEEwWzBdCisJbGVhCSgkaiwkQTBbMV0sMiksJFNbMV0JIyB0WzIqaSsxXTw8MSB8CisJc2hyCVwkNjMsJEEwWzFdCisJb3IJJEEwWzBdLCRTWzFdCQkjIHwgdFsyKmldPj42MworCSBtb3YJLTE2KCR0cHRyLCRpLDIpLCRBMFswXQkjIHRbMippKzJdCSMgcHJlZmV0Y2gKKwltb3YJJEEwWzFdLCRzaGlmdAkJIyBzaGlmdD10WzIqaSsxXT4+NjMKKwltdWwJJXJheAkJCSMgYVtpXSphW2ldCisJbmVnCSRjYXJyeQkJCSMgbW92ICRjYXJyeSxjZgorCSBtb3YJLTgoJHRwdHIsJGksMiksJEEwWzFdCSMgdFsyKmkrMisxXQkjIHByZWZldGNoCisJYWRjCSVyYXgsJFNbMF0KKwkgbW92CS04KCRhcHRyLCRpKSwlcmF4CSMgYVtpKzFdCSMgcHJlZmV0Y2gKKwltb3YJJFNbMF0sLTMyKCR0cHRyLCRpLDIpCisJYWRjCSVyZHgsJFNbMV0KKworCWxlYQkoJHNoaWZ0LCRBMFswXSwyKSwkU1syXQkjIHRbMippXTw8MSB8IHNoaWZ0CisJIG1vdgkkU1sxXSwtMjQoJHRwdHIsJGksMikKKwkgc2JiCSRjYXJyeSwkY2FycnkJCSMgbW92IGNmLCRjYXJyeQorCXNocglcJDYzLCRBMFswXQorCWxlYQkoJGosJEEwWzFdLDIpLCRTWzNdCSMgdFsyKmkrMV08PDEgfAorCXNocglcJDYzLCRBMFsxXQorCW9yCSRBMFswXSwkU1szXQkJIyB8IHRbMippXT4+NjMKKwkgbW92CTAoJHRwdHIsJGksMiksJEEwWzBdCSMgdFsyKmkrMl0JIyBwcmVmZXRjaAorCW1vdgkkQTBbMV0sJHNoaWZ0CQkjIHNoaWZ0PXRbMippKzFdPj42MworCW11bAklcmF4CQkJIyBhW2ldKmFbaV0KKwluZWcJJGNhcnJ5CQkJIyBtb3YgJGNhcnJ5LGNmCisJIG1vdgk4KCR0cHRyLCRpLDIpLCRBMFsxXQkjIHRbMippKzIrMV0JIyBwcmVmZXRjaAorCWFkYwklcmF4LCRTWzJdCisJIG1vdgkwKCRhcHRyLCRpKSwlcmF4CSMgYVtpKzFdCSMgcHJlZmV0Y2gKKwltb3YJJFNbMl0sLTE2KCR0cHRyLCRpLDIpCisJYWRjCSVyZHgsJFNbM10KKwlsZWEJMTYoJGkpLCRpCisJbW92CSRTWzNdLC00MCgkdHB0ciwkaSwyKQorCXNiYgkkY2FycnksJGNhcnJ5CQkjIG1vdiBjZiwkY2FycnkKKwlqbXAJLkxzcXI0eF9zaGlmdF9uX2FkZAorCisuYWxpZ24JMTYKKy5Mc3FyNHhfc2hpZnRfbl9hZGQ6CisJbGVhCSgkc2hpZnQsJEEwWzBdLDIpLCRTWzBdCSMgdFsyKmldPDwxIHwgc2hpZnQKKwlzaHIJXCQ2MywkQTBbMF0KKwlsZWEJKCRqLCRBMFsxXSwyKSwkU1sxXQkjIHRbMippKzFdPDwxIHwKKwlzaHIJXCQ2MywkQTBbMV0KKwlvcgkkQTBbMF0sJFNbMV0JCSMgfCB0WzIqaV0+PjYzCisJIG1vdgktMTYoJHRwdHIsJGksMiksJEEwWzBdCSMgdFsyKmkrMl0JIyBwcmVmZXRjaAorCW1vdgkkQTBbMV0sJHNoaWZ0CQkjIHNoaWZ0PXRbMippKzFdPj42MworCW11bAklcmF4CQkJIyBhW2ldKmFbaV0KKwluZWcJJGNhcnJ5CQkJIyBtb3YgJGNhcnJ5LGNmCisJIG1vdgktOCgkdHB0ciwkaSwyKSwkQTBbMV0JIyB0WzIqaSsyKzFdCSMgcHJlZmV0Y2gKKwlhZGMJJXJheCwkU1swXQorCSBtb3YJLTgoJGFwdHIsJGkpLCVyYXgJIyBhW2krMV0JIyBwcmVmZXRjaAorCW1vdgkkU1swXSwtMzIoJHRwdHIsJGksMikKKwlhZGMJJXJkeCwkU1sxXQorCisJbGVhCSgkc2hpZnQsJEEwWzBdLDIpLCRTWzJdCSMgdFsyKmldPDwxIHwgc2hpZnQKKwkgbW92CSRTWzFdLC0yNCgkdHB0ciwkaSwyKQorCSBzYmIJJGNhcnJ5LCRjYXJyeQkJIyBtb3YgY2YsJGNhcnJ5CisJc2hyCVwkNjMsJEEwWzBdCisJbGVhCSgkaiwkQTBbMV0sMiksJFNbM10JIyB0WzIqaSsxXTw8MSB8CisJc2hyCVwkNjMsJEEwWzFdCisJb3IJJEEwWzBdLCRTWzNdCQkjIHwgdFsyKmldPj42MworCSBtb3YJMCgkdHB0ciwkaSwyKSwkQTBbMF0JIyB0WzIqaSsyXQkjIHByZWZldGNoCisJbW92CSRBMFsxXSwkc2hpZnQJCSMgc2hpZnQ9dFsyKmkrMV0+PjYzCisJbXVsCSVyYXgJCQkjIGFbaV0qYVtpXQorCW5lZwkkY2FycnkJCQkjIG1vdiAkY2FycnksY2YKKwkgbW92CTgoJHRwdHIsJGksMiksJEEwWzFdCSMgdFsyKmkrMisxXQkjIHByZWZldGNoCisJYWRjCSVyYXgsJFNbMl0KKwkgbW92CTAoJGFwdHIsJGkpLCVyYXgJIyBhW2krMV0JIyBwcmVmZXRjaAorCW1vdgkkU1syXSwtMTYoJHRwdHIsJGksMikKKwlhZGMJJXJkeCwkU1szXQorCisJbGVhCSgkc2hpZnQsJEEwWzBdLDIpLCRTWzBdCSMgdFsyKmldPDwxIHwgc2hpZnQKKwkgbW92CSRTWzNdLC04KCR0cHRyLCRpLDIpCisJIHNiYgkkY2FycnksJGNhcnJ5CQkjIG1vdiBjZiwkY2FycnkKKwlzaHIJXCQ2MywkQTBbMF0KKwlsZWEJKCRqLCRBMFsxXSwyKSwkU1sxXQkjIHRbMippKzFdPDwxIHwKKwlzaHIJXCQ2MywkQTBbMV0KKwlvcgkkQTBbMF0sJFNbMV0JCSMgfCB0WzIqaV0+PjYzCisJIG1vdgkxNigkdHB0ciwkaSwyKSwkQTBbMF0JIyB0WzIqaSsyXQkjIHByZWZldGNoCisJbW92CSRBMFsxXSwkc2hpZnQJCSMgc2hpZnQ9dFsyKmkrMV0+PjYzCisJbXVsCSVyYXgJCQkjIGFbaV0qYVtpXQorCW5lZwkkY2FycnkJCQkjIG1vdiAkY2FycnksY2YKKwkgbW92CTI0KCR0cHRyLCRpLDIpLCRBMFsxXQkjIHRbMippKzIrMV0JIyBwcmVmZXRjaAorCWFkYwklcmF4LCRTWzBdCisJIG1vdgk4KCRhcHRyLCRpKSwlcmF4CSMgYVtpKzFdCSMgcHJlZmV0Y2gKKwltb3YJJFNbMF0sMCgkdHB0ciwkaSwyKQorCWFkYwklcmR4LCRTWzFdCisKKwlsZWEJKCRzaGlmdCwkQTBbMF0sMiksJFNbMl0JIyB0WzIqaV08PDEgfCBzaGlmdAorCSBtb3YJJFNbMV0sOCgkdHB0ciwkaSwyKQorCSBzYmIJJGNhcnJ5LCRjYXJyeQkJIyBtb3YgY2YsJGNhcnJ5CisJc2hyCVwkNjMsJEEwWzBdCisJbGVhCSgkaiwkQTBbMV0sMiksJFNbM10JIyB0WzIqaSsxXTw8MSB8CisJc2hyCVwkNjMsJEEwWzFdCisJb3IJJEEwWzBdLCRTWzNdCQkjIHwgdFsyKmldPj42MworCSBtb3YJMzIoJHRwdHIsJGksMiksJEEwWzBdCSMgdFsyKmkrMl0JIyBwcmVmZXRjaAorCW1vdgkkQTBbMV0sJHNoaWZ0CQkjIHNoaWZ0PXRbMippKzFdPj42MworCW11bAklcmF4CQkJIyBhW2ldKmFbaV0KKwluZWcJJGNhcnJ5CQkJIyBtb3YgJGNhcnJ5LGNmCisJIG1vdgk0MCgkdHB0ciwkaSwyKSwkQTBbMV0JIyB0WzIqaSsyKzFdCSMgcHJlZmV0Y2gKKwlhZGMJJXJheCwkU1syXQorCSBtb3YJMTYoJGFwdHIsJGkpLCVyYXgJIyBhW2krMV0JIyBwcmVmZXRjaAorCW1vdgkkU1syXSwxNigkdHB0ciwkaSwyKQorCWFkYwklcmR4LCRTWzNdCisJbW92CSRTWzNdLDI0KCR0cHRyLCRpLDIpCisJc2JiCSRjYXJyeSwkY2FycnkJCSMgbW92IGNmLCRjYXJyeQorCWFkZAlcJDMyLCRpCisJam56CS5Mc3FyNHhfc2hpZnRfbl9hZGQKKworCWxlYQkoJHNoaWZ0LCRBMFswXSwyKSwkU1swXQkjIHRbMippXTw8MSB8IHNoaWZ0CisJc2hyCVwkNjMsJEEwWzBdCisJbGVhCSgkaiwkQTBbMV0sMiksJFNbMV0JIyB0WzIqaSsxXTw8MSB8CisJc2hyCVwkNjMsJEEwWzFdCisJb3IJJEEwWzBdLCRTWzFdCQkjIHwgdFsyKmldPj42MworCSBtb3YJLTE2KCR0cHRyKSwkQTBbMF0JIyB0WzIqaSsyXQkjIHByZWZldGNoCisJbW92CSRBMFsxXSwkc2hpZnQJCSMgc2hpZnQ9dFsyKmkrMV0+PjYzCisJbXVsCSVyYXgJCQkjIGFbaV0qYVtpXQorCW5lZwkkY2FycnkJCQkjIG1vdiAkY2FycnksY2YKKwkgbW92CS04KCR0cHRyKSwkQTBbMV0JIyB0WzIqaSsyKzFdCSMgcHJlZmV0Y2gKKwlhZGMJJXJheCwkU1swXQorCSBtb3YJLTgoJGFwdHIpLCVyYXgJCSMgYVtpKzFdCSMgcHJlZmV0Y2gKKwltb3YJJFNbMF0sLTMyKCR0cHRyKQorCWFkYwklcmR4LCRTWzFdCisKKwlsZWEJKCRzaGlmdCwkQTBbMF0sMiksJFNbMl0JIyB0WzIqaV08PDF8c2hpZnQKKwkgbW92CSRTWzFdLC0yNCgkdHB0cikKKwkgc2JiCSRjYXJyeSwkY2FycnkJCSMgbW92IGNmLCRjYXJyeQorCXNocglcJDYzLCRBMFswXQorCWxlYQkoJGosJEEwWzFdLDIpLCRTWzNdCSMgdFsyKmkrMV08PDEgfAorCXNocglcJDYzLCRBMFsxXQorCW9yCSRBMFswXSwkU1szXQkJIyB8IHRbMippXT4+NjMKKwltdWwJJXJheAkJCSMgYVtpXSphW2ldCisJbmVnCSRjYXJyeQkJCSMgbW92ICRjYXJyeSxjZgorCWFkYwklcmF4LCRTWzJdCisJYWRjCSVyZHgsJFNbM10KKwltb3YJJFNbMl0sLTE2KCR0cHRyKQorCW1vdgkkU1szXSwtOCgkdHB0cikKK19fXworfQwKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1vbnRnb21lcnkgcmVkdWN0aW9uIHBhcnQsICJ3b3JkLWJ5LXdvcmQiIGFsZ29yaXRobS4KKyMKK3sKK215ICgkdG9wYml0LCRucHRyKT0oIiVyYnAiLCRhcHRyKTsKK215ICgkbTAsJG0xKT0oJGEwLCRhMSk7CitteSBATmk9KCIlcmJ4IiwiJXI5Iik7CiskY29kZS49PDxfX187CisJbW92CTQwKCVyc3ApLCRucHRyCQkjIHJlc3RvcmUgJG5wdHIKKwltb3YJNDgoJXJzcCksJG4wCQkjIHJlc3RvcmUgKm4wCisJeG9yCSRqLCRqCisJbW92CSRudW0sMCglcnNwKQkJIyBzYXZlICRudW0KKwlzdWIJJG51bSwkagkJCSMgJGo9LSRudW0KKwkgbW92CTY0KCVyc3ApLCRBMFswXQkJIyB0WzBdCQkjIG1vZHNjaGVkICMKKwkgbW92CSRuMCwkbTAJCQkjCQkjIG1vZHNjaGVkICMKKwlsZWEJNjQoJXJzcCwkbnVtLDIpLCVyYXgJIyBlbmQgb2YgdFtdIGJ1ZmZlcgorCWxlYQk2NCglcnNwLCRudW0pLCR0cHRyCSMgZW5kIG9mIHRbXSB3aW5kb3cKKwltb3YJJXJheCw4KCVyc3ApCQkjIHNhdmUgZW5kIG9mIHRbXSBidWZmZXIKKwlsZWEJKCRucHRyLCRudW0pLCRucHRyCSMgZW5kIG9mIG5bXSBidWZmZXIKKwl4b3IJJHRvcGJpdCwkdG9wYml0CQkjICR0b3BiaXQ9MAorCisJbW92CTAoJG5wdHIsJGopLCVyYXgJIyBuWzBdCQkjIG1vZHNjaGVkICMKKwltb3YJOCgkbnB0ciwkaiksJE5pWzFdCSMgblsxXQkJIyBtb2RzY2hlZCAjCisJIGltdWxxCSRBMFswXSwkbTAJCSMgbTA9dFswXSpuMAkjIG1vZHNjaGVkICMKKwkgbW92CSVyYXgsJE5pWzBdCQkjCQkjIG1vZHNjaGVkICMKKwlqbXAJLkxzcXI0eF9tb250X291dGVyCisKKy5hbGlnbgkxNgorLkxzcXI0eF9tb250X291dGVyOgorCXhvcgkkQTBbMV0sJEEwWzFdCisJbXVsCSRtMAkJCSMgblswXSptMAorCWFkZAklcmF4LCRBMFswXQkJIyBuWzBdKm0wK3RbMF0KKwkgbW92CSROaVsxXSwlcmF4CisJYWRjCSVyZHgsJEEwWzFdCisJbW92CSRuMCwkbTEKKworCXhvcgkkQTBbMF0sJEEwWzBdCisJYWRkCTgoJHRwdHIsJGopLCRBMFsxXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRtMAkJCSMgblsxXSptMAorCWFkZAklcmF4LCRBMFsxXQkJIyBuWzFdKm0wK3RbMV0KKwkgbW92CSROaVswXSwlcmF4CisJYWRjCSVyZHgsJEEwWzBdCisKKwlpbXVscQkkQTBbMV0sJG0xCisKKwltb3YJMTYoJG5wdHIsJGopLCROaVswXQkjIG5bMl0KKwl4b3IJJEExWzFdLCRBMVsxXQorCWFkZAkkQTBbMV0sJEExWzBdCisJYWRjCVwkMCwkQTFbMV0KKwltdWwJJG0xCQkJIyBuWzBdKm0xCisJYWRkCSVyYXgsJEExWzBdCQkjIG5bMF0qbTErInRbMV0iCisJIG1vdgkkTmlbMF0sJXJheAorCWFkYwklcmR4LCRBMVsxXQorCW1vdgkkQTFbMF0sOCgkdHB0ciwkaikJIyAidFsxXSIKKworCXhvcgkkQTBbMV0sJEEwWzFdCisJYWRkCTE2KCR0cHRyLCRqKSwkQTBbMF0KKwlhZGMJXCQwLCRBMFsxXQorCW11bAkkbTAJCQkjIG5bMl0qbTAKKwlhZGQJJXJheCwkQTBbMF0JCSMgblsyXSptMCt0WzJdCisJIG1vdgkkTmlbMV0sJXJheAorCWFkYwklcmR4LCRBMFsxXQorCisJbW92CTI0KCRucHRyLCRqKSwkTmlbMV0JIyBuWzNdCisJeG9yCSRBMVswXSwkQTFbMF0KKwlhZGQJJEEwWzBdLCRBMVsxXQorCWFkYwlcJDAsJEExWzBdCisJbXVsCSRtMQkJCSMgblsxXSptMQorCWFkZAklcmF4LCRBMVsxXQkJIyBuWzFdKm0xKyJ0WzJdIgorCSBtb3YJJE5pWzFdLCVyYXgKKwlhZGMJJXJkeCwkQTFbMF0KKwltb3YJJEExWzFdLDE2KCR0cHRyLCRqKQkjICJ0WzJdIgorCisJeG9yCSRBMFswXSwkQTBbMF0KKwlhZGQJMjQoJHRwdHIsJGopLCRBMFsxXQorCWxlYQkzMigkaiksJGoKKwlhZGMJXCQwLCRBMFswXQorCW11bAkkbTAJCQkjIG5bM10qbTAKKwlhZGQJJXJheCwkQTBbMV0JCSMgblszXSptMCt0WzNdCisJIG1vdgkkTmlbMF0sJXJheAorCWFkYwklcmR4LCRBMFswXQorCWptcAkuTHNxcjR4X21vbnRfaW5uZXIKKworLmFsaWduCTE2CisuTHNxcjR4X21vbnRfaW5uZXI6CisJbW92CSgkbnB0ciwkaiksJE5pWzBdCSMgbls0XQorCXhvcgkkQTFbMV0sJEExWzFdCisJYWRkCSRBMFsxXSwkQTFbMF0KKwlhZGMJXCQwLCRBMVsxXQorCW11bAkkbTEJCQkjIG5bMl0qbTEKKwlhZGQJJXJheCwkQTFbMF0JCSMgblsyXSptMSsidFszXSIKKwkgbW92CSROaVswXSwlcmF4CisJYWRjCSVyZHgsJEExWzFdCisJbW92CSRBMVswXSwtOCgkdHB0ciwkaikJIyAidFszXSIKKworCXhvcgkkQTBbMV0sJEEwWzFdCisJYWRkCSgkdHB0ciwkaiksJEEwWzBdCisJYWRjCVwkMCwkQTBbMV0KKwltdWwJJG0wCQkJIyBuWzRdKm0wCisJYWRkCSVyYXgsJEEwWzBdCQkjIG5bNF0qbTArdFs0XQorCSBtb3YJJE5pWzFdLCVyYXgKKwlhZGMJJXJkeCwkQTBbMV0KKworCW1vdgk4KCRucHRyLCRqKSwkTmlbMV0JIyBuWzVdCisJeG9yCSRBMVswXSwkQTFbMF0KKwlhZGQJJEEwWzBdLCRBMVsxXQorCWFkYwlcJDAsJEExWzBdCisJbXVsCSRtMQkJCSMgblszXSptMQorCWFkZAklcmF4LCRBMVsxXQkJIyBuWzNdKm0xKyJ0WzRdIgorCSBtb3YJJE5pWzFdLCVyYXgKKwlhZGMJJXJkeCwkQTFbMF0KKwltb3YJJEExWzFdLCgkdHB0ciwkaikJIyAidFs0XSIKKworCXhvcgkkQTBbMF0sJEEwWzBdCisJYWRkCTgoJHRwdHIsJGopLCRBMFsxXQorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRtMAkJCSMgbls1XSptMAorCWFkZAklcmF4LCRBMFsxXQkJIyBuWzVdKm0wK3RbNV0KKwkgbW92CSROaVswXSwlcmF4CisJYWRjCSVyZHgsJEEwWzBdCisKKworCW1vdgkxNigkbnB0ciwkaiksJE5pWzBdCSMgbls2XQorCXhvcgkkQTFbMV0sJEExWzFdCisJYWRkCSRBMFsxXSwkQTFbMF0KKwlhZGMJXCQwLCRBMVsxXQorCW11bAkkbTEJCQkjIG5bNF0qbTEKKwlhZGQJJXJheCwkQTFbMF0JCSMgbls0XSptMSsidFs1XSIKKwkgbW92CSROaVswXSwlcmF4CisJYWRjCSVyZHgsJEExWzFdCisJbW92CSRBMVswXSw4KCR0cHRyLCRqKQkjICJ0WzVdIgorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJMTYoJHRwdHIsJGopLCRBMFswXQorCWFkYwlcJDAsJEEwWzFdCisJbXVsCSRtMAkJCSMgbls2XSptMAorCWFkZAklcmF4LCRBMFswXQkJIyBuWzZdKm0wK3RbNl0KKwkgbW92CSROaVsxXSwlcmF4CisJYWRjCSVyZHgsJEEwWzFdCisKKwltb3YJMjQoJG5wdHIsJGopLCROaVsxXQkjIG5bN10KKwl4b3IJJEExWzBdLCRBMVswXQorCWFkZAkkQTBbMF0sJEExWzFdCisJYWRjCVwkMCwkQTFbMF0KKwltdWwJJG0xCQkJIyBuWzVdKm0xCisJYWRkCSVyYXgsJEExWzFdCQkjIG5bNV0qbTErInRbNl0iCisJIG1vdgkkTmlbMV0sJXJheAorCWFkYwklcmR4LCRBMVswXQorCW1vdgkkQTFbMV0sMTYoJHRwdHIsJGopCSMgInRbNl0iCisKKwl4b3IJJEEwWzBdLCRBMFswXQorCWFkZAkyNCgkdHB0ciwkaiksJEEwWzFdCisJbGVhCTMyKCRqKSwkagorCWFkYwlcJDAsJEEwWzBdCisJbXVsCSRtMAkJCSMgbls3XSptMAorCWFkZAklcmF4LCRBMFsxXQkJIyBuWzddKm0wK3RbN10KKwkgbW92CSROaVswXSwlcmF4CisJYWRjCSVyZHgsJEEwWzBdCisJY21wCVwkMCwkagorCWpuZQkuTHNxcjR4X21vbnRfaW5uZXIKKworCSBzdWIJMCglcnNwKSwkagkJIyAkaj0tJG51bQkjIG1vZHNjaGVkICMKKwkgbW92CSRuMCwkbTAJCQkjCQkjIG1vZHNjaGVkICMKKworCXhvcgkkQTFbMV0sJEExWzFdCisJYWRkCSRBMFsxXSwkQTFbMF0KKwlhZGMJXCQwLCRBMVsxXQorCW11bAkkbTEJCQkjIG5bNl0qbTEKKwlhZGQJJXJheCwkQTFbMF0JCSMgbls2XSptMSsidFs3XSIKKwltb3YJJE5pWzFdLCVyYXgKKwlhZGMJJXJkeCwkQTFbMV0KKwltb3YJJEExWzBdLC04KCR0cHRyKQkjICJ0WzddIgorCisJeG9yCSRBMFsxXSwkQTBbMV0KKwlhZGQJKCR0cHRyKSwkQTBbMF0JCSMgK3RbOF0KKwlhZGMJXCQwLCRBMFsxXQorCSBtb3YJMCgkbnB0ciwkaiksJE5pWzBdCSMgblswXQkJIyBtb2RzY2hlZCAjCisJYWRkCSR0b3BiaXQsJEEwWzBdCisJYWRjCVwkMCwkQTBbMV0KKworCSBpbXVscQkxNigkdHB0ciwkaiksJG0wCSMgbTA9dFswXSpuMAkjIG1vZHNjaGVkICMKKwl4b3IJJEExWzBdLCRBMVswXQorCSBtb3YJOCgkbnB0ciwkaiksJE5pWzFdCSMgblsxXQkJIyBtb2RzY2hlZCAjCisJYWRkCSRBMFswXSwkQTFbMV0KKwkgbW92CTE2KCR0cHRyLCRqKSwkQTBbMF0JIyB0WzBdCQkjIG1vZHNjaGVkICMKKwlhZGMJXCQwLCRBMVswXQorCW11bAkkbTEJCQkjIG5bN10qbTEKKwlhZGQJJXJheCwkQTFbMV0JCSMgbls3XSptMSsidFs4XSIKKwkgbW92CSROaVswXSwlcmF4CQkjCQkjIG1vZHNjaGVkICMKKwlhZGMJJXJkeCwkQTFbMF0KKwltb3YJJEExWzFdLCgkdHB0cikJCSMgInRbOF0iCisKKwl4b3IJJHRvcGJpdCwkdG9wYml0CisJYWRkCTgoJHRwdHIpLCRBMVswXQkJIyArdFs5XQorCWFkYwkkdG9wYml0LCR0b3BiaXQKKwlhZGQJJEEwWzFdLCRBMVswXQorCWxlYQkxNigkdHB0ciksJHRwdHIJCSMgInRbJG51bV0+PjEyOCIKKwlhZGMJXCQwLCR0b3BiaXQKKwltb3YJJEExWzBdLC04KCR0cHRyKQkjICJ0WzldIgorCWNtcAk4KCVyc3ApLCR0cHRyCQkjIGFyZSB3ZSBkb25lPworCWpiCS5Mc3FyNHhfbW9udF9vdXRlcgorCisJbW92CTAoJXJzcCksJG51bQkJIyByZXN0b3JlICRudW0KKwltb3YJJHRvcGJpdCwoJHRwdHIpCQkjIHNhdmUgJHRvcGJpdAorX19fCit9DAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUG9zdC1jb25kaXRpb24sIDR4IHVucm9sbGVkIGNvcHkgZnJvbSBibl9tdWxfbW9udAorIworeworbXkgKCR0cHRyLCRucHRyKT0oIiVyYngiLCRhcHRyKTsKK215IEByaT0oIiVyYXgiLCIlcmR4IiwiJXIxMCIsIiVyMTEiKTsKKyRjb2RlLj08PF9fXzsKKwltb3YJNjQoJXJzcCwkbnVtKSxAcmlbMF0JIyB0cFswXQorCWxlYQk2NCglcnNwLCRudW0pLCR0cHRyCSMgdXBwZXIgaGFsZiBvZiB0WzIqJG51bV0gaG9sZHMgcmVzdWx0CisJbW92CTQwKCVyc3ApLCRucHRyCQkjIHJlc3RvcmUgJG5wdHIKKwlzaHIJXCQ1LCRudW0JCSMgbnVtLzQKKwltb3YJOCgkdHB0ciksQHJpWzFdCQkjIHRbMV0KKwl4b3IJJGksJGkJCQkjIGk9MCBhbmQgY2xlYXIgQ0YhCisKKwltb3YJMzIoJXJzcCksJHJwdHIJCSMgcmVzdG9yZSAkcnB0cgorCXN1YgkwKCRucHRyKSxAcmlbMF0KKwltb3YJMTYoJHRwdHIpLEByaVsyXQkjIHRbMl0KKwltb3YJMjQoJHRwdHIpLEByaVszXQkjIHRbM10KKwlzYmIJOCgkbnB0ciksQHJpWzFdCisJbGVhCS0xKCRudW0pLCRqCQkjIGo9bnVtLzQtMQorCWptcAkuTHNxcjR4X3N1YgorLmFsaWduCTE2CisuTHNxcjR4X3N1YjoKKwltb3YJQHJpWzBdLDAoJHJwdHIsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCW1vdglAcmlbMV0sOCgkcnB0ciwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJc2JiCTE2KCRucHRyLCRpLDgpLEByaVsyXQorCW1vdgkzMigkdHB0ciwkaSw4KSxAcmlbMF0JIyB0cFtpKzFdCisJbW92CTQwKCR0cHRyLCRpLDgpLEByaVsxXQorCXNiYgkyNCgkbnB0ciwkaSw4KSxAcmlbM10KKwltb3YJQHJpWzJdLDE2KCRycHRyLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwltb3YJQHJpWzNdLDI0KCRycHRyLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwlzYmIJMzIoJG5wdHIsJGksOCksQHJpWzBdCisJbW92CTQ4KCR0cHRyLCRpLDgpLEByaVsyXQorCW1vdgk1NigkdHB0ciwkaSw4KSxAcmlbM10KKwlzYmIJNDAoJG5wdHIsJGksOCksQHJpWzFdCisJbGVhCTQoJGkpLCRpCQkjIGkrKworCWRlYwkkagkJCSMgZG9lc24ndCBhZmZlY3QgQ0YhCisJam56CS5Mc3FyNHhfc3ViCisKKwltb3YJQHJpWzBdLDAoJHJwdHIsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCW1vdgkzMigkdHB0ciwkaSw4KSxAcmlbMF0JIyBsb2FkIG92ZXJmbG93IGJpdAorCXNiYgkxNigkbnB0ciwkaSw4KSxAcmlbMl0KKwltb3YJQHJpWzFdLDgoJHJwdHIsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCXNiYgkyNCgkbnB0ciwkaSw4KSxAcmlbM10KKwltb3YJQHJpWzJdLDE2KCRycHRyLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKworCXNiYglcJDAsQHJpWzBdCQkjIGhhbmRsZSB1cG1vc3Qgb3ZlcmZsb3cgYml0CisJbW92CUByaVszXSwyNCgkcnB0ciwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJeG9yCSRpLCRpCQkJIyBpPTAKKwlhbmQJQHJpWzBdLCR0cHRyCisJbm90CUByaVswXQorCW1vdgkkcnB0ciwkbnB0cgorCWFuZAlAcmlbMF0sJG5wdHIKKwlsZWEJLTEoJG51bSksJGoKKwlvcgkkbnB0ciwkdHB0cgkJIyB0cD1ib3Jyb3c/dHA6cnAKKworCXB4b3IJJXhtbTAsJXhtbTAKKwlsZWEJNjQoJXJzcCwkbnVtLDgpLCRucHRyCisJbW92ZHF1CSgkdHB0ciksJXhtbTEKKwlsZWEJKCRucHRyLCRudW0sOCksJG5wdHIKKwltb3ZkcWEJJXhtbTAsNjQoJXJzcCkJCSMgemFwIGxvd2VyIGhhbGYgb2YgdGVtcG9yYXJ5IHZlY3RvcgorCW1vdmRxYQkleG1tMCwoJG5wdHIpCQkjIHphcCB1cHBlciBoYWxmIG9mIHRlbXBvcmFyeSB2ZWN0b3IKKwltb3ZkcXUJJXhtbTEsKCRycHRyKQorCWptcAkuTHNxcjR4X2NvcHkKKy5hbGlnbgkxNgorLkxzcXI0eF9jb3B5OgkJCQkjIGNvcHkgb3IgaW4tcGxhY2UgcmVmcmVzaAorCW1vdmRxdQkxNigkdHB0ciwkaSksJXhtbTIKKwltb3ZkcXUJMzIoJHRwdHIsJGkpLCV4bW0xCisJbW92ZHFhCSV4bW0wLDgwKCVyc3AsJGkpCSMgemFwIGxvd2VyIGhhbGYgb2YgdGVtcG9yYXJ5IHZlY3RvcgorCW1vdmRxYQkleG1tMCw5NiglcnNwLCRpKQkjIHphcCBsb3dlciBoYWxmIG9mIHRlbXBvcmFyeSB2ZWN0b3IKKwltb3ZkcWEJJXhtbTAsMTYoJG5wdHIsJGkpCSMgemFwIHVwcGVyIGhhbGYgb2YgdGVtcG9yYXJ5IHZlY3RvcgorCW1vdmRxYQkleG1tMCwzMigkbnB0ciwkaSkJIyB6YXAgdXBwZXIgaGFsZiBvZiB0ZW1wb3JhcnkgdmVjdG9yCisJbW92ZHF1CSV4bW0yLDE2KCRycHRyLCRpKQorCW1vdmRxdQkleG1tMSwzMigkcnB0ciwkaSkKKwlsZWEJMzIoJGkpLCRpCisJZGVjCSRqCisJam56CS5Mc3FyNHhfY29weQorCisJbW92ZHF1CTE2KCR0cHRyLCRpKSwleG1tMgorCW1vdmRxYQkleG1tMCw4MCglcnNwLCRpKQkjIHphcCBsb3dlciBoYWxmIG9mIHRlbXBvcmFyeSB2ZWN0b3IKKwltb3ZkcWEJJXhtbTAsMTYoJG5wdHIsJGkpCSMgemFwIHVwcGVyIGhhbGYgb2YgdGVtcG9yYXJ5IHZlY3RvcgorCW1vdmRxdQkleG1tMiwxNigkcnB0ciwkaSkKK19fXworfQorJGNvZGUuPTw8X19fOworCW1vdgk1NiglcnNwKSwlcnNpCQkjIHJlc3RvcmUgJXJzcAorCW1vdglcJDEsJXJheAorCW1vdgkwKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxzcXI0eF9lcGlsb2d1ZToKKwlyZXQKKy5zaXplCWJuX3NxcjR4X21vbnQsLi1ibl9zcXI0eF9tb250CitfX18KK319fQorJGNvZGUuPTw8X19fOwogLmFzY2l6CSJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCiAuYWxpZ24JMTYKIF9fXwpAQCAtMjI4LDkgKzE1MTEsOSBAQAogCiAkY29kZS49PDxfX187CiAuZXh0ZXJuCV9faW1wX1J0bFZpcnR1YWxVbndpbmQKLS50eXBlCXNlX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAorLnR5cGUJbXVsX2hhbmRsZXIsXEBhYmktb21uaXBvdGVudAogLmFsaWduCTE2Ci1zZV9oYW5kbGVyOgorbXVsX2hhbmRsZXI6CiAJcHVzaAklcnNpCiAJcHVzaAklcmRpCiAJcHVzaAklcmJ4CkBAIC0yNDUsMTUgKzE1MjgsMjAgQEAKIAltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKIAltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKIAotCWxlYQkuTHByb2xvZ3VlKCVyaXApLCVyMTAKLQljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDwuTHByb2xvZ3VlCi0JamIJLkxpbl9wcm9sb2d1ZQorCW1vdgk4KCRkaXNwKSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQorCW1vdgk1NigkZGlzcCksJXIxMQkJIyBkaXNwLT5IYW5kbGVyRGF0YQorCisJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVuZCBvZiBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPGVuZCBvZiBwcm9sb2d1ZSBsYWJlbAorCWpiCS5MY29tbW9uX3NlaF90YWlsCiAKIAltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKIAotCWxlYQkuTGVwaWxvZ3VlKCVyaXApLCVyMTAKLQljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcD49LkxlcGlsb2d1ZQotCWphZQkuTGluX3Byb2xvZ3VlCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCiAKIAltb3YJMTkyKCRjb250ZXh0KSwlcjEwCSMgcHVsbCAkbnVtCiAJbW92CTgoJXJheCwlcjEwLDgpLCVyYXgJIyBwdWxsIHNhdmVkIHN0YWNrIHBvaW50ZXIKQEAgLTI3Miw3ICsxNTYwLDUzIEBACiAJbW92CSVyMTQsMjMyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE0CiAJbW92CSVyMTUsMjQwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE1CiAKLS5MaW5fcHJvbG9ndWU6CisJam1wCS5MY29tbW9uX3NlaF90YWlsCisuc2l6ZQltdWxfaGFuZGxlciwuLW11bF9oYW5kbGVyCisKKy50eXBlCXNxcl9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc3FyX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwlsZWEJLkxzcXI0eF9ib2R5KCVyaXApLCVyMTAKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDwuTHNxcl9ib2R5CisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbGVhCS5Mc3FyNHhfZXBpbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTHNxcl9lcGlsb2d1ZQorCWphZQkuTGNvbW1vbl9zZWhfdGFpbAorCisJbW92CTU2KCVyYXgpLCVyYXgJCSMgcHVsbCBzYXZlZCBzdGFjayBwb2ludGVyCisJbGVhCTQ4KCVyYXgpLCVyYXgKKworCW1vdgktOCglcmF4KSwlcmJ4CisJbW92CS0xNiglcmF4KSwlcmJwCisJbW92CS0yNCglcmF4KSwlcjEyCisJbW92CS0zMiglcmF4KSwlcjEzCisJbW92CS00MCglcmF4KSwlcjE0CisJbW92CS00OCglcmF4KSwlcjE1CisJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCisJbW92CSVyMTIsMjE2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEyCisJbW92CSVyMTMsMjI0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCisJbW92CSVyMTQsMjMyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE0CisJbW92CSVyMTUsMjQwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjE1CisKKy5MY29tbW9uX3NlaF90YWlsOgogCW1vdgk4KCVyYXgpLCVyZGkKIAltb3YJMTYoJXJheCksJXJzaQogCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcApAQCAtMzEwLDcgKzE2NDQsNyBAQAogCXBvcAklcmRpCiAJcG9wCSVyc2kKIAlyZXQKLS5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisuc2l6ZQlzcXJfaGFuZGxlciwuLXNxcl9oYW5kbGVyCiAKIC5zZWN0aW9uCS5wZGF0YQogLmFsaWduCTQKQEAgLTMxOCwxMSArMTY1MiwyNyBAQAogCS5ydmEJLkxTRUhfZW5kX2JuX211bF9tb250CiAJLnJ2YQkuTFNFSF9pbmZvX2JuX211bF9tb250CiAKKwkucnZhCS5MU0VIX2JlZ2luX2JuX211bDR4X21vbnQKKwkucnZhCS5MU0VIX2VuZF9ibl9tdWw0eF9tb250CisJLnJ2YQkuTFNFSF9pbmZvX2JuX211bDR4X21vbnQKKworCS5ydmEJLkxTRUhfYmVnaW5fYm5fc3FyNHhfbW9udAorCS5ydmEJLkxTRUhfZW5kX2JuX3NxcjR4X21vbnQKKwkucnZhCS5MU0VIX2luZm9fYm5fc3FyNHhfbW9udAorCiAuc2VjdGlvbgkueGRhdGEKIC5hbGlnbgk4CiAuTFNFSF9pbmZvX2JuX211bF9tb250OgogCS5ieXRlCTksMCwwLDAKLQkucnZhCXNlX2hhbmRsZXIKKwkucnZhCW11bF9oYW5kbGVyCisJLnJ2YQkuTG11bF9ib2R5LC5MbXVsX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGFbXQorLkxTRUhfaW5mb19ibl9tdWw0eF9tb250OgorCS5ieXRlCTksMCwwLDAKKwkucnZhCW11bF9oYW5kbGVyCisJLnJ2YQkuTG11bDR4X2JvZHksLkxtdWw0eF9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5MU0VIX2luZm9fYm5fc3FyNHhfbW9udDoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzcXJfaGFuZGxlcgogX19fCiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQ1LnBsIGIvY3J5cHRvL2JuL2FzbS94ODZfNjQtbW9udDUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU3Y2RhMgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ibi9hc20veDg2XzY0LW1vbnQ1LnBsCkBAIC0wLDAgKzEsMTA3MCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIEF1Z3VzdCAyMDExLgorIworIyBDb21wYW5pb24gdG8geDg2XzY0LW1vbnQucGwgdGhhdCBvcHRpbWl6ZXMgY2FjaGUtdGltaW5nIGF0dGFjaworIyBjb3VudGVybWVhc3VyZXMuIFRoZSBzdWJyb3V0aW5lcyBhcmUgcHJvZHVjZWQgYnkgcmVwbGFjaW5nIGJwW2ldCisjIHJlZmVyZW5jZXMgaW4gdGhlaXIgeDg2XzY0LW1vbnQucGwgY291bnRlcnBhcnRzIHdpdGggY2FjaGUtbmV1dHJhbAorIyByZWZlcmVuY2VzIHRvIHBvd2VycyB0YWJsZSBjb21wdXRlZCBpbiBCTl9tb2RfZXhwX21vbnRfY29uc3R0aW1lLgorIyBJbiBhZGRpdGlvbiBzdWJyb3V0aW5lIHRoYXQgc2NhdHRlcnMgZWxlbWVudHMgb2YgdGhlIHBvd2VycyB0YWJsZQorIyBpcyBpbXBsZW1lbnRlZCwgc28gdGhhdCBzY2F0dGVyLS9nYXRoZXJpbmcgY2FuIGJlIHR1bmVkIHdpdGhvdXQKKyMgYm5fZXhwLmMgbW9kaWZpY2F0aW9ucy4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisKKyMgaW50IGJuX211bF9tb250X2dhdGhlcjUoCiskcnA9IiVyZGkiOwkjIEJOX1VMT05HICpycCwKKyRhcD0iJXJzaSI7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAorJGJwPSIlcmR4IjsJIyBjb25zdCBCTl9VTE9ORyAqYnAsCiskbnA9IiVyY3giOwkjIGNvbnN0IEJOX1VMT05HICpucCwKKyRuMD0iJXI4IjsJIyBjb25zdCBCTl9VTE9ORyAqbjAsCiskbnVtPSIlcjkiOwkjIGludCBudW0sCisJCSMgaW50IGlkeCk7CSMgMCB0byAyXjUtMSwgImluZGV4IiBpbiAkYnAgaG9sZGluZworCQkJCSMgcHJlLWNvbXB1dGVkIHBvd2VycyBvZiBhJywgaW50ZXJsYWNlZAorCQkJCSMgaW4gc3VjaCBtYW5uZXIgdGhhdCBiWzBdIGlzICRicFtpZHhdLAorCQkJCSMgYlsxXSBpcyBbMl41K2lkeF0sIGV0Yy4KKyRsbzA9IiVyMTAiOworJGhpMD0iJXIxMSI7CiskaGkxPSIlcjEzIjsKKyRpPSIlcjE0IjsKKyRqPSIlcjE1IjsKKyRtMD0iJXJieCI7CiskbTE9IiVyYnAiOworCiskY29kZT08PF9fXzsKKy50ZXh0CisKKy5nbG9ibAlibl9tdWxfbW9udF9nYXRoZXI1CisudHlwZQlibl9tdWxfbW9udF9nYXRoZXI1LFxAZnVuY3Rpb24sNgorLmFsaWduCTY0Citibl9tdWxfbW9udF9nYXRoZXI1OgorCXRlc3QJXCQzLCR7bnVtfWQKKwlqbnoJLkxtdWxfZW50ZXIKKwljbXAJXCQ4LCR7bnVtfWQKKwlqYgkuTG11bF9lbnRlcgorCWptcAkuTG11bDR4X2VudGVyCisKKy5hbGlnbgkxNgorLkxtdWxfZW50ZXI6CisJbW92CSR7bnVtfWQsJHtudW19ZAorCW1vdglgKCR3aW42ND81Njo4KWAoJXJzcCksJXIxMGQJIyBsb2FkIDd0aCBhcmd1bWVudAorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbGVhCS0weDI4KCVyc3ApLCVyc3AKKwltb3ZhcHMJJXhtbTYsKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MTAoJXJzcCkKKy5MbXVsX2FsbG9jYToKK19fXworJGNvZGUuPTw8X19fOworCW1vdgklcnNwLCVyYXgKKwlsZWEJMigkbnVtKSwlcjExCisJbmVnCSVyMTEKKwlsZWEJKCVyc3AsJXIxMSw4KSwlcnNwCSMgdHA9YWxsb2NhKDgqKG51bSsyKSkKKwlhbmQJXCQtMTAyNCwlcnNwCQkjIG1pbmltaXplIFRMQiB1c2FnZQorCisJbW92CSVyYXgsOCglcnNwLCRudW0sOCkJIyB0cFtudW0rMV09JXJzcAorLkxtdWxfYm9keToKKwltb3YJJGJwLCVyMTIJCSMgcmVhc3NpZ24gJGJwCitfX18KKwkJJGJwPSIlcjEyIjsKKwkJJFNUUklERT0yKio1Kjg7CQkjIDUgaXMgIndpbmRvdyBzaXplIgorCQkkTj0kU1RSSURFLzQ7CQkjIHNob3VsZCBtYXRjaCBjYWNoZSBsaW5lIHNpemUKKyRjb2RlLj08PF9fXzsKKwltb3YJJXIxMCwlcjExCisJc2hyCVwkYGxvZygkTi84KS9sb2coMilgLCVyMTAKKwlhbmQJXCRgJE4vOC0xYCwlcjExCisJbm90CSVyMTAKKwlsZWEJLkxtYWdpY19tYXNrcyglcmlwKSwlcmF4CisJYW5kCVwkYDIqKjUvKCROLzgpLTFgLCVyMTAJIyA1IGlzICJ3aW5kb3cgc2l6ZSIKKwlsZWEJOTYoJGJwLCVyMTEsOCksJGJwCSMgcG9pbnRlciB3aXRoaW4gMXN0IGNhY2hlIGxpbmUKKwltb3ZxCTAoJXJheCwlcjEwLDgpLCV4bW00CSMgc2V0IG9mIG1hc2tzIGRlbm90aW5nIHdoaWNoCisJbW92cQk4KCVyYXgsJXIxMCw4KSwleG1tNQkjIGNhY2hlIGxpbmUgY29udGFpbnMgZWxlbWVudAorCW1vdnEJMTYoJXJheCwlcjEwLDgpLCV4bW02CSMgZGVub3RlZCBieSA3dGggYXJndW1lbnQKKwltb3ZxCTI0KCVyYXgsJXIxMCw4KSwleG1tNworCisJbW92cQlgMCokU1RSSURFLzQtOTZgKCRicCksJXhtbTAKKwltb3ZxCWAxKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMQorCXBhbmQJJXhtbTQsJXhtbTAKKwltb3ZxCWAyKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMgorCXBhbmQJJXhtbTUsJXhtbTEKKwltb3ZxCWAzKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMworCXBhbmQJJXhtbTYsJXhtbTIKKwlwb3IJJXhtbTEsJXhtbTAKKwlwYW5kCSV4bW03LCV4bW0zCisJcG9yCSV4bW0yLCV4bW0wCisJbGVhCSRTVFJJREUoJGJwKSwkYnAKKwlwb3IJJXhtbTMsJXhtbTAKKworCW1vdnEJJXhtbTAsJG0wCQkjIG0wPWJwWzBdCisKKwltb3YJKCRuMCksJG4wCQkjIHB1bGwgbjBbMF0gdmFsdWUKKwltb3YJKCRhcCksJXJheAorCisJeG9yCSRpLCRpCQkJIyBpPTAKKwl4b3IJJGosJGoJCQkjIGo9MAorCisJbW92cQlgMCokU1RSSURFLzQtOTZgKCRicCksJXhtbTAKKwltb3ZxCWAxKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMQorCXBhbmQJJXhtbTQsJXhtbTAKKwltb3ZxCWAyKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMgorCXBhbmQJJXhtbTUsJXhtbTEKKworCW1vdgkkbjAsJG0xCisJbXVscQkkbTAJCQkjIGFwWzBdKmJwWzBdCisJbW92CSVyYXgsJGxvMAorCW1vdgkoJG5wKSwlcmF4CisKKwltb3ZxCWAzKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMworCXBhbmQJJXhtbTYsJXhtbTIKKwlwb3IJJXhtbTEsJXhtbTAKKwlwYW5kCSV4bW03LCV4bW0zCisKKwlpbXVscQkkbG8wLCRtMQkJIyAidHBbMF0iKm4wCisJbW92CSVyZHgsJGhpMAorCisJcG9yCSV4bW0yLCV4bW0wCisJbGVhCSRTVFJJREUoJGJwKSwkYnAKKwlwb3IJJXhtbTMsJXhtbTAKKworCW11bHEJJG0xCQkJIyBucFswXSptMQorCWFkZAklcmF4LCRsbzAJCSMgZGlzY2FyZGVkCisJbW92CTgoJGFwKSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJGhpMQorCisJbGVhCTEoJGopLCRqCQkjIGorKworCWptcAkuTDFzdF9lbnRlcgorCisuYWxpZ24JMTYKKy5MMXN0OgorCWFkZAklcmF4LCRoaTEKKwltb3YJKCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRoaTAsJGhpMQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCW1vdgkkbG8wLCRoaTAKKwlhZGMJXCQwLCVyZHgKKwltb3YJJGhpMSwtMTYoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkaGkxCisKKy5MMXN0X2VudGVyOgorCW11bHEJJG0wCQkJIyBhcFtqXSpicFswXQorCWFkZAklcmF4LCRoaTAKKwltb3YJKCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbGVhCTEoJGopLCRqCQkjIGorKworCW1vdgklcmR4LCRsbzAKKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWNtcAkkbnVtLCRqCisJam5lCS5MMXN0CisKKwltb3ZxCSV4bW0wLCRtMAkJIyBicFsxXQorCisJYWRkCSVyYXgsJGhpMQorCW1vdgkoJGFwKSwlcmF4CQkjIGFwWzBdCisJYWRjCVwkMCwlcmR4CisJYWRkCSRoaTAsJGhpMQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkaGkxLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCRoaTEKKwltb3YJJGxvMCwkaGkwCisKKwl4b3IJJXJkeCwlcmR4CisJYWRkCSRoaTAsJGhpMQorCWFkYwlcJDAsJXJkeAorCW1vdgkkaGkxLC04KCVyc3AsJG51bSw4KQorCW1vdgklcmR4LCglcnNwLCRudW0sOCkJIyBzdG9yZSB1cG1vc3Qgb3ZlcmZsb3cgYml0CisKKwlsZWEJMSgkaSksJGkJCSMgaSsrCisJam1wCS5Mb3V0ZXIKKy5hbGlnbgkxNgorLkxvdXRlcjoKKwl4b3IJJGosJGoJCQkjIGo9MAorCW1vdgkkbjAsJG0xCisJbW92CSglcnNwKSwkbG8wCisKKwltb3ZxCWAwKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMAorCW1vdnEJYDEqJFNUUklERS80LTk2YCgkYnApLCV4bW0xCisJcGFuZAkleG1tNCwleG1tMAorCW1vdnEJYDIqJFNUUklERS80LTk2YCgkYnApLCV4bW0yCisJcGFuZAkleG1tNSwleG1tMQorCisJbXVscQkkbTAJCQkjIGFwWzBdKmJwW2ldCisJYWRkCSVyYXgsJGxvMAkJIyBhcFswXSpicFtpXSt0cFswXQorCW1vdgkoJG5wKSwlcmF4CisJYWRjCVwkMCwlcmR4CisKKwltb3ZxCWAzKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMworCXBhbmQJJXhtbTYsJXhtbTIKKwlwb3IJJXhtbTEsJXhtbTAKKwlwYW5kCSV4bW03LCV4bW0zCisKKwlpbXVscQkkbG8wLCRtMQkJIyB0cFswXSpuMAorCW1vdgklcmR4LCRoaTAKKworCXBvcgkleG1tMiwleG1tMAorCWxlYQkkU1RSSURFKCRicCksJGJwCisJcG9yCSV4bW0zLCV4bW0wCisKKwltdWxxCSRtMQkJCSMgbnBbMF0qbTEKKwlhZGQJJXJheCwkbG8wCQkjIGRpc2NhcmRlZAorCW1vdgk4KCRhcCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgk4KCVyc3ApLCRsbzAJCSMgdHBbMV0KKwltb3YJJXJkeCwkaGkxCisKKwlsZWEJMSgkaiksJGoJCSMgaisrCisJam1wCS5MaW5uZXJfZW50ZXIKKworLmFsaWduCTE2CisuTGlubmVyOgorCWFkZAklcmF4LCRoaTEKKwltb3YJKCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRsbzAsJGhpMQkJIyBucFtqXSptMSthcFtqXSpicFtpXSt0cFtqXQorCW1vdgkoJXJzcCwkaiw4KSwkbG8wCisJYWRjCVwkMCwlcmR4CisJbW92CSRoaTEsLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJGhpMQorCisuTGlubmVyX2VudGVyOgorCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRoaTAKKwltb3YJKCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRoaTAsJGxvMAkJIyBhcFtqXSpicFtpXSt0cFtqXQorCW1vdgklcmR4LCRoaTAKKwlhZGMJXCQwLCRoaTAKKwlsZWEJMSgkaiksJGoJCSMgaisrCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwljbXAJJG51bSwkagorCWpuZQkuTGlubmVyCisKKwltb3ZxCSV4bW0wLCRtMAkJIyBicFtpKzFdCisKKwlhZGQJJXJheCwkaGkxCisJbW92CSgkYXApLCVyYXgJCSMgYXBbMF0KKwlhZGMJXCQwLCVyZHgKKwlhZGQJJGxvMCwkaGkxCQkjIG5wW2pdKm0xK2FwW2pdKmJwW2ldK3RwW2pdCisJbW92CSglcnNwLCRqLDgpLCRsbzAKKwlhZGMJXCQwLCVyZHgKKwltb3YJJGhpMSwtMTYoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkaGkxCisKKwl4b3IJJXJkeCwlcmR4CisJYWRkCSRoaTAsJGhpMQorCWFkYwlcJDAsJXJkeAorCWFkZAkkbG8wLCRoaTEJCSMgcHVsbCB1cG1vc3Qgb3ZlcmZsb3cgYml0CisJYWRjCVwkMCwlcmR4CisJbW92CSRoaTEsLTgoJXJzcCwkbnVtLDgpCisJbW92CSVyZHgsKCVyc3AsJG51bSw4KQkjIHN0b3JlIHVwbW9zdCBvdmVyZmxvdyBiaXQKKworCWxlYQkxKCRpKSwkaQkJIyBpKysKKwljbXAJJG51bSwkaQorCWpsCS5Mb3V0ZXIKKworCXhvcgkkaSwkaQkJCSMgaT0wIGFuZCBjbGVhciBDRiEKKwltb3YJKCVyc3ApLCVyYXgJCSMgdHBbMF0KKwlsZWEJKCVyc3ApLCRhcAkJIyBib3Jyb3cgYXAgZm9yIHRwCisJbW92CSRudW0sJGoJCQkjIGo9bnVtCisJam1wCS5Mc3ViCisuYWxpZ24JMTYKKy5Mc3ViOglzYmIJKCRucCwkaSw4KSwlcmF4CisJbW92CSVyYXgsKCRycCwkaSw4KQkJIyBycFtpXT10cFtpXS1ucFtpXQorCW1vdgk4KCRhcCwkaSw4KSwlcmF4CSMgdHBbaSsxXQorCWxlYQkxKCRpKSwkaQkJIyBpKysKKwlkZWMJJGoJCQkjIGRvZXNubid0IGFmZmVjdCBDRiEKKwlqbnoJLkxzdWIKKworCXNiYglcJDAsJXJheAkJIyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAorCXhvcgkkaSwkaQorCWFuZAklcmF4LCRhcAorCW5vdAklcmF4CisJbW92CSRycCwkbnAKKwlhbmQJJXJheCwkbnAKKwltb3YJJG51bSwkagkJCSMgaj1udW0KKwlvcgkkbnAsJGFwCQkJIyBhcD1ib3Jyb3c/dHA6cnAKKy5hbGlnbgkxNgorLkxjb3B5OgkJCQkJIyBjb3B5IG9yIGluLXBsYWNlIHJlZnJlc2gKKwltb3YJKCRhcCwkaSw4KSwlcmF4CisJbW92CSRpLCglcnNwLCRpLDgpCQkjIHphcCB0ZW1wb3JhcnkgdmVjdG9yCisJbW92CSVyYXgsKCRycCwkaSw4KQkJIyBycFtpXT10cFtpXQorCWxlYQkxKCRpKSwkaQorCXN1YglcJDEsJGoKKwlqbnoJLkxjb3B5CisKKwltb3YJOCglcnNwLCRudW0sOCksJXJzaQkjIHJlc3RvcmUgJXJzcAorCW1vdglcJDEsJXJheAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSglcnNpKSwleG1tNgorCW1vdmFwcwkweDEwKCVyc2kpLCV4bW03CisJbGVhCTB4MjgoJXJzaSksJXJzaQorX19fCiskY29kZS49PDxfX187CisJbW92CSglcnNpKSwlcjE1CisJbW92CTgoJXJzaSksJXIxNAorCW1vdgkxNiglcnNpKSwlcjEzCisJbW92CTI0KCVyc2kpLCVyMTIKKwltb3YJMzIoJXJzaSksJXJicAorCW1vdgk0MCglcnNpKSwlcmJ4CisJbGVhCTQ4KCVyc2kpLCVyc3AKKy5MbXVsX2VwaWxvZ3VlOgorCXJldAorLnNpemUJYm5fbXVsX21vbnRfZ2F0aGVyNSwuLWJuX211bF9tb250X2dhdGhlcjUKK19fXwore3t7CitteSBAQT0oIiVyMTAiLCIlcjExIik7CitteSBATj0oIiVyMTMiLCIlcmRpIik7CiskY29kZS49PDxfX187CisudHlwZQlibl9tdWw0eF9tb250X2dhdGhlcjUsXEBmdW5jdGlvbiw2CisuYWxpZ24JMTYKK2JuX211bDR4X21vbnRfZ2F0aGVyNToKKy5MbXVsNHhfZW50ZXI6CisJbW92CSR7bnVtfWQsJHtudW19ZAorCW1vdglgKCR3aW42ND81Njo4KWAoJXJzcCksJXIxMGQJIyBsb2FkIDd0aCBhcmd1bWVudAorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbGVhCS0weDI4KCVyc3ApLCVyc3AKKwltb3ZhcHMJJXhtbTYsKCVyc3ApCisJbW92YXBzCSV4bW03LDB4MTAoJXJzcCkKKy5MbXVsNHhfYWxsb2NhOgorX19fCiskY29kZS49PDxfX187CisJbW92CSVyc3AsJXJheAorCWxlYQk0KCRudW0pLCVyMTEKKwluZWcJJXIxMQorCWxlYQkoJXJzcCwlcjExLDgpLCVyc3AJIyB0cD1hbGxvY2EoOCoobnVtKzQpKQorCWFuZAlcJC0xMDI0LCVyc3AJCSMgbWluaW1pemUgVExCIHVzYWdlCisKKwltb3YJJXJheCw4KCVyc3AsJG51bSw4KQkjIHRwW251bSsxXT0lcnNwCisuTG11bDR4X2JvZHk6CisJbW92CSRycCwxNiglcnNwLCRudW0sOCkJIyB0cFtudW0rMl09JHJwCisJbW92CSVyZHgsJXIxMgkJIyByZWFzc2lnbiAkYnAKK19fXworCQkkYnA9IiVyMTIiOworCQkkU1RSSURFPTIqKjUqODsJCSMgNSBpcyAid2luZG93IHNpemUiCisJCSROPSRTVFJJREUvNDsJCSMgc2hvdWxkIG1hdGNoIGNhY2hlIGxpbmUgc2l6ZQorJGNvZGUuPTw8X19fOworCW1vdgklcjEwLCVyMTEKKwlzaHIJXCRgbG9nKCROLzgpL2xvZygyKWAsJXIxMAorCWFuZAlcJGAkTi84LTFgLCVyMTEKKwlub3QJJXIxMAorCWxlYQkuTG1hZ2ljX21hc2tzKCVyaXApLCVyYXgKKwlhbmQJXCRgMioqNS8oJE4vOCktMWAsJXIxMAkjIDUgaXMgIndpbmRvdyBzaXplIgorCWxlYQk5NigkYnAsJXIxMSw4KSwkYnAJIyBwb2ludGVyIHdpdGhpbiAxc3QgY2FjaGUgbGluZQorCW1vdnEJMCglcmF4LCVyMTAsOCksJXhtbTQJIyBzZXQgb2YgbWFza3MgZGVub3Rpbmcgd2hpY2gKKwltb3ZxCTgoJXJheCwlcjEwLDgpLCV4bW01CSMgY2FjaGUgbGluZSBjb250YWlucyBlbGVtZW50CisJbW92cQkxNiglcmF4LCVyMTAsOCksJXhtbTYJIyBkZW5vdGVkIGJ5IDd0aCBhcmd1bWVudAorCW1vdnEJMjQoJXJheCwlcjEwLDgpLCV4bW03CisKKwltb3ZxCWAwKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMAorCW1vdnEJYDEqJFNUUklERS80LTk2YCgkYnApLCV4bW0xCisJcGFuZAkleG1tNCwleG1tMAorCW1vdnEJYDIqJFNUUklERS80LTk2YCgkYnApLCV4bW0yCisJcGFuZAkleG1tNSwleG1tMQorCW1vdnEJYDMqJFNUUklERS80LTk2YCgkYnApLCV4bW0zCisJcGFuZAkleG1tNiwleG1tMgorCXBvcgkleG1tMSwleG1tMAorCXBhbmQJJXhtbTcsJXhtbTMKKwlwb3IJJXhtbTIsJXhtbTAKKwlsZWEJJFNUUklERSgkYnApLCRicAorCXBvcgkleG1tMywleG1tMAorCisJbW92cQkleG1tMCwkbTAJCSMgbTA9YnBbMF0KKwltb3YJKCRuMCksJG4wCQkjIHB1bGwgbjBbMF0gdmFsdWUKKwltb3YJKCRhcCksJXJheAorCisJeG9yCSRpLCRpCQkJIyBpPTAKKwl4b3IJJGosJGoJCQkjIGo9MAorCisJbW92cQlgMCokU1RSSURFLzQtOTZgKCRicCksJXhtbTAKKwltb3ZxCWAxKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMQorCXBhbmQJJXhtbTQsJXhtbTAKKwltb3ZxCWAyKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMgorCXBhbmQJJXhtbTUsJXhtbTEKKworCW1vdgkkbjAsJG0xCisJbXVscQkkbTAJCQkjIGFwWzBdKmJwWzBdCisJbW92CSVyYXgsJEFbMF0KKwltb3YJKCRucCksJXJheAorCisJbW92cQlgMyokU1RSSURFLzQtOTZgKCRicCksJXhtbTMKKwlwYW5kCSV4bW02LCV4bW0yCisJcG9yCSV4bW0xLCV4bW0wCisJcGFuZAkleG1tNywleG1tMworCisJaW11bHEJJEFbMF0sJG0xCQkjICJ0cFswXSIqbjAKKwltb3YJJXJkeCwkQVsxXQorCisJcG9yCSV4bW0yLCV4bW0wCisJbGVhCSRTVFJJREUoJGJwKSwkYnAKKwlwb3IJJXhtbTMsJXhtbTAKKworCW11bHEJJG0xCQkJIyBucFswXSptMQorCWFkZAklcmF4LCRBWzBdCQkjIGRpc2NhcmRlZAorCW1vdgk4KCRhcCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAorCWFkZAklcmF4LCRBWzFdCisJbW92CTgoJG5wKSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMF0KKworCW11bHEJJG0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJMTYoJGFwKSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJbGVhCTQoJGopLCRqCQkjIGorKworCWFkYwlcJDAsJXJkeAorCW1vdgkkTlsxXSwoJXJzcCkKKwltb3YJJXJkeCwkTlswXQorCWptcAkuTDFzdDR4CisuYWxpZ24JMTYKKy5MMXN0NHg6CisJbXVscQkkbTAJCQkjIGFwW2pdKmJwWzBdCisJYWRkCSVyYXgsJEFbMF0KKwltb3YJLTE2KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMV0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzBdCisJbW92CS04KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgktOCgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgkoJGFwLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJJEFbMV0sJE5bMV0JCSMgbnBbal0qbTErYXBbal0qYnBbMF0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJE5bMV0sLTE2KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJE5bMF0KKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFswXQorCWFkZAklcmF4LCRBWzBdCisJbW92CSgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlswXQorCW1vdgk4KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC04KCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJE5bMV0KKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFswXQorCWFkZAklcmF4LCRBWzFdCisJbW92CTgoJG5wLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlsZWEJNCgkaiksJGoJCSMgaisrCisJbW92CSVyZHgsJEFbMF0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzFdCisJbW92CS0xNigkYXAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAkkQVsxXSwkTlsxXQkJIyBucFtqXSptMSthcFtqXSpicFswXQorCWFkYwlcJDAsJXJkeAorCW1vdgkkTlsxXSwtMzIoJXJzcCwkaiw4KQkjIHRwW2otMV0KKwltb3YJJXJkeCwkTlswXQorCWNtcAkkbnVtLCRqCisJamwJLkwxc3Q0eAorCisJbXVscQkkbTAJCQkjIGFwW2pdKmJwWzBdCisJYWRkCSVyYXgsJEFbMF0KKwltb3YJLTE2KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMV0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzBdCisJbW92CS04KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbMF0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgktOCgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgkoJGFwKSwlcmF4CQkjIGFwWzBdCisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCQkjIG5wW2pdKm0xK2FwW2pdKmJwWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisKKwltb3ZxCSV4bW0wLCRtMAkJIyBicFsxXQorCisJeG9yCSROWzFdLCROWzFdCisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwkTlsxXQorCW1vdgkkTlswXSwtOCglcnNwLCRqLDgpCisJbW92CSROWzFdLCglcnNwLCRqLDgpCSMgc3RvcmUgdXBtb3N0IG92ZXJmbG93IGJpdAorCisJbGVhCTEoJGkpLCRpCQkjIGkrKworLmFsaWduCTQKKy5Mb3V0ZXI0eDoKKwl4b3IJJGosJGoJCQkjIGo9MAorCW1vdnEJYDAqJFNUUklERS80LTk2YCgkYnApLCV4bW0wCisJbW92cQlgMSokU1RSSURFLzQtOTZgKCRicCksJXhtbTEKKwlwYW5kCSV4bW00LCV4bW0wCisJbW92cQlgMiokU1RSSURFLzQtOTZgKCRicCksJXhtbTIKKwlwYW5kCSV4bW01LCV4bW0xCisKKwltb3YJKCVyc3ApLCRBWzBdCisJbW92CSRuMCwkbTEKKwltdWxxCSRtMAkJCSMgYXBbMF0qYnBbaV0KKwlhZGQJJXJheCwkQVswXQkJIyBhcFswXSpicFtpXSt0cFswXQorCW1vdgkoJG5wKSwlcmF4CisJYWRjCVwkMCwlcmR4CisKKwltb3ZxCWAzKiRTVFJJREUvNC05NmAoJGJwKSwleG1tMworCXBhbmQJJXhtbTYsJXhtbTIKKwlwb3IJJXhtbTEsJXhtbTAKKwlwYW5kCSV4bW03LCV4bW0zCisKKwlpbXVscQkkQVswXSwkbTEJCSMgdHBbMF0qbjAKKwltb3YJJXJkeCwkQVsxXQorCisJcG9yCSV4bW0yLCV4bW0wCisJbGVhCSRTVFJJREUoJGJwKSwkYnAKKwlwb3IJJXhtbTMsJXhtbTAKKworCW11bHEJJG0xCQkJIyBucFswXSptMQorCWFkZAklcmF4LCRBWzBdCQkjICIkTlswXSIsIGRpc2NhcmRlZAorCW1vdgk4KCRhcCksJXJheAorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgk4KCRucCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAk4KCVyc3ApLCRBWzFdCQkjICt0cFsxXQorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgkxNigkYXApLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJJEFbMV0sJE5bMV0JCSMgbnBbal0qbTErYXBbal0qYnBbaV0rdHBbal0KKwlsZWEJNCgkaiksJGoJCSMgais9MgorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCROWzBdCisJam1wCS5MaW5uZXI0eAorLmFsaWduCTE2CisuTGlubmVyNHg6CisJbXVscQkkbTAJCQkjIGFwW2pdKmJwW2ldCisJYWRkCSVyYXgsJEFbMF0KKwltb3YJLTE2KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCS0xNiglcnNwLCRqLDgpLCRBWzBdCSMgYXBbal0qYnBbaV0rdHBbal0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVsxXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMF0KKwltb3YJLTgoJGFwLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJJEFbMF0sJE5bMF0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJE5bMV0sLTMyKCVyc3AsJGosOCkJIyB0cFtqLTFdCisJbW92CSVyZHgsJE5bMV0KKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRBWzFdCisJbW92CS04KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCS04KCVyc3AsJGosOCksJEFbMV0KKwlhZGMJXCQwLCVyZHgKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJKCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVswXQorCW1vdgkoJG5wLCRqLDgpLCVyYXgKKwlhZGMJXCQwLCVyZHgKKwlhZGQJKCVyc3AsJGosOCksJEFbMF0JIyBhcFtqXSpicFtpXSt0cFtqXQorCWFkYwlcJDAsJXJkeAorCW1vdgklcmR4LCRBWzFdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlswXQorCW1vdgk4KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgk4KCRucCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCTgoJXJzcCwkaiw4KSwkQVsxXQorCWFkYwlcJDAsJXJkeAorCWxlYQk0KCRqKSwkagkJIyBqKysKKwltb3YJJXJkeCwkQVswXQorCisJbXVscQkkbTEJCQkjIG5wW2pdKm0xCisJYWRkCSVyYXgsJE5bMV0KKwltb3YJLTE2KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC00MCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisJY21wCSRudW0sJGoKKwlqbAkuTGlubmVyNHgKKworCW11bHEJJG0wCQkJIyBhcFtqXSpicFtpXQorCWFkZAklcmF4LCRBWzBdCisJbW92CS0xNigkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktMTYoJXJzcCwkaiw4KSwkQVswXQkjIGFwW2pdKmJwW2ldK3RwW2pdCisJYWRjCVwkMCwlcmR4CisJbW92CSVyZHgsJEFbMV0KKworCW11bHEJJG0xCQkJIyBucFtqXSptMQorCWFkZAklcmF4LCROWzBdCisJbW92CS04KCRhcCwkaiw4KSwlcmF4CisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzFdLC0zMiglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzFdCisKKwltdWxxCSRtMAkJCSMgYXBbal0qYnBbaV0KKwlhZGQJJXJheCwkQVsxXQorCW1vdgktOCgkbnAsJGosOCksJXJheAorCWFkYwlcJDAsJXJkeAorCWFkZAktOCglcnNwLCRqLDgpLCRBWzFdCisJYWRjCVwkMCwlcmR4CisJbGVhCTEoJGkpLCRpCQkjIGkrKworCW1vdgklcmR4LCRBWzBdCisKKwltdWxxCSRtMQkJCSMgbnBbal0qbTEKKwlhZGQJJXJheCwkTlsxXQorCW1vdgkoJGFwKSwlcmF4CQkjIGFwWzBdCisJYWRjCVwkMCwlcmR4CisJYWRkCSRBWzFdLCROWzFdCisJYWRjCVwkMCwlcmR4CisJbW92CSROWzBdLC0yNCglcnNwLCRqLDgpCSMgdHBbai0xXQorCW1vdgklcmR4LCROWzBdCisKKwltb3ZxCSV4bW0wLCRtMAkJIyBicFtpKzFdCisJbW92CSROWzFdLC0xNiglcnNwLCRqLDgpCSMgdHBbai0xXQorCisJeG9yCSROWzFdLCROWzFdCisJYWRkCSRBWzBdLCROWzBdCisJYWRjCVwkMCwkTlsxXQorCWFkZAkoJXJzcCwkbnVtLDgpLCROWzBdCSMgcHVsbCB1cG1vc3Qgb3ZlcmZsb3cgYml0CisJYWRjCVwkMCwkTlsxXQorCW1vdgkkTlswXSwtOCglcnNwLCRqLDgpCisJbW92CSROWzFdLCglcnNwLCRqLDgpCSMgc3RvcmUgdXBtb3N0IG92ZXJmbG93IGJpdAorCisJY21wCSRudW0sJGkKKwlqbAkuTG91dGVyNHgKK19fXworeworbXkgQHJpPSgiJXJheCIsIiVyZHgiLCRtMCwkbTEpOworJGNvZGUuPTw8X19fOworCW1vdgkxNiglcnNwLCRudW0sOCksJHJwCSMgcmVzdG9yZSAkcnAKKwltb3YJMCglcnNwKSxAcmlbMF0JCSMgdHBbMF0KKwlweG9yCSV4bW0wLCV4bW0wCisJbW92CTgoJXJzcCksQHJpWzFdCQkjIHRwWzFdCisJc2hyCVwkMiwkbnVtCQkjIG51bS89NAorCWxlYQkoJXJzcCksJGFwCQkjIGJvcnJvdyBhcCBmb3IgdHAKKwl4b3IJJGksJGkJCQkjIGk9MCBhbmQgY2xlYXIgQ0YhCisKKwlzdWIJMCgkbnApLEByaVswXQorCW1vdgkxNigkYXApLEByaVsyXQkJIyB0cFsyXQorCW1vdgkyNCgkYXApLEByaVszXQkJIyB0cFszXQorCXNiYgk4KCRucCksQHJpWzFdCisJbGVhCS0xKCRudW0pLCRqCQkjIGo9bnVtLzQtMQorCWptcAkuTHN1YjR4CisuYWxpZ24JMTYKKy5Mc3ViNHg6CisJbW92CUByaVswXSwwKCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJbW92CUByaVsxXSw4KCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJc2JiCTE2KCRucCwkaSw4KSxAcmlbMl0KKwltb3YJMzIoJGFwLCRpLDgpLEByaVswXQkjIHRwW2krMV0KKwltb3YJNDAoJGFwLCRpLDgpLEByaVsxXQorCXNiYgkyNCgkbnAsJGksOCksQHJpWzNdCisJbW92CUByaVsyXSwxNigkcnAsJGksOCkJIyBycFtpXT10cFtpXS1ucFtpXQorCW1vdglAcmlbM10sMjQoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwlzYmIJMzIoJG5wLCRpLDgpLEByaVswXQorCW1vdgk0OCgkYXAsJGksOCksQHJpWzJdCisJbW92CTU2KCRhcCwkaSw4KSxAcmlbM10KKwlzYmIJNDAoJG5wLCRpLDgpLEByaVsxXQorCWxlYQk0KCRpKSwkaQkJIyBpKysKKwlkZWMJJGoJCQkjIGRvZXNubid0IGFmZmVjdCBDRiEKKwlqbnoJLkxzdWI0eAorCisJbW92CUByaVswXSwwKCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJbW92CTMyKCRhcCwkaSw4KSxAcmlbMF0JIyBsb2FkIG92ZXJmbG93IGJpdAorCXNiYgkxNigkbnAsJGksOCksQHJpWzJdCisJbW92CUByaVsxXSw4KCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisJc2JiCTI0KCRucCwkaSw4KSxAcmlbM10KKwltb3YJQHJpWzJdLDE2KCRycCwkaSw4KQkjIHJwW2ldPXRwW2ldLW5wW2ldCisKKwlzYmIJXCQwLEByaVswXQkJIyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAorCW1vdglAcmlbM10sMjQoJHJwLCRpLDgpCSMgcnBbaV09dHBbaV0tbnBbaV0KKwl4b3IJJGksJGkJCQkjIGk9MAorCWFuZAlAcmlbMF0sJGFwCisJbm90CUByaVswXQorCW1vdgkkcnAsJG5wCisJYW5kCUByaVswXSwkbnAKKwlsZWEJLTEoJG51bSksJGoKKwlvcgkkbnAsJGFwCQkJIyBhcD1ib3Jyb3c/dHA6cnAKKworCW1vdmRxdQkoJGFwKSwleG1tMQorCW1vdmRxYQkleG1tMCwoJXJzcCkKKwltb3ZkcXUJJXhtbTEsKCRycCkKKwlqbXAJLkxjb3B5NHgKKy5hbGlnbgkxNgorLkxjb3B5NHg6CQkJCQkjIGNvcHkgb3IgaW4tcGxhY2UgcmVmcmVzaAorCW1vdmRxdQkxNigkYXAsJGkpLCV4bW0yCisJbW92ZHF1CTMyKCRhcCwkaSksJXhtbTEKKwltb3ZkcWEJJXhtbTAsMTYoJXJzcCwkaSkKKwltb3ZkcXUJJXhtbTIsMTYoJHJwLCRpKQorCW1vdmRxYQkleG1tMCwzMiglcnNwLCRpKQorCW1vdmRxdQkleG1tMSwzMigkcnAsJGkpCisJbGVhCTMyKCRpKSwkaQorCWRlYwkkagorCWpuegkuTGNvcHk0eAorCisJc2hsCVwkMiwkbnVtCisJbW92ZHF1CTE2KCRhcCwkaSksJXhtbTIKKwltb3ZkcWEJJXhtbTAsMTYoJXJzcCwkaSkKKwltb3ZkcXUJJXhtbTIsMTYoJHJwLCRpKQorX19fCit9CiskY29kZS49PDxfX187CisJbW92CTgoJXJzcCwkbnVtLDgpLCVyc2kJIyByZXN0b3JlICVyc3AKKwltb3YJXCQxLCVyYXgKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkoJXJzaSksJXhtbTYKKwltb3ZhcHMJMHgxMCglcnNpKSwleG1tNworCWxlYQkweDI4KCVyc2kpLCVyc2kKK19fXworJGNvZGUuPTw8X19fOworCW1vdgkoJXJzaSksJXIxNQorCW1vdgk4KCVyc2kpLCVyMTQKKwltb3YJMTYoJXJzaSksJXIxMworCW1vdgkyNCglcnNpKSwlcjEyCisJbW92CTMyKCVyc2kpLCVyYnAKKwltb3YJNDAoJXJzaSksJXJieAorCWxlYQk0OCglcnNpKSwlcnNwCisuTG11bDR4X2VwaWxvZ3VlOgorCXJldAorLnNpemUJYm5fbXVsNHhfbW9udF9nYXRoZXI1LC4tYm5fbXVsNHhfbW9udF9nYXRoZXI1CitfX18KK319fQorCit7CitteSAoJGlucCwkbnVtLCR0YmwsJGlkeCk9JHdpbjY0PygiJXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOiAjIFdpbjY0IG9yZGVyCisJCQkJKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4Iik7ICMgVW5peCBvcmRlcgorbXkgJG91dD0kaW5wOworbXkgJFNUUklERT0yKio1Kjg7CitteSAkTj0kU1RSSURFLzQ7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlibl9zY2F0dGVyNQorLnR5cGUJYm5fc2NhdHRlcjUsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2Citibl9zY2F0dGVyNToKKwljbXAJXCQwLCAkbnVtCisJanoJLkxzY2F0dGVyX2VwaWxvZ3VlCisJbGVhCSgkdGJsLCRpZHgsOCksJHRibAorLkxzY2F0dGVyOgorCW1vdgkoJGlucCksJXJheAorCWxlYQk4KCRpbnApLCRpbnAKKwltb3YJJXJheCwoJHRibCkKKwlsZWEJMzIqOCgkdGJsKSwkdGJsCisJc3ViCVwkMSwkbnVtCisJam56CS5Mc2NhdHRlcgorLkxzY2F0dGVyX2VwaWxvZ3VlOgorCXJldAorLnNpemUJYm5fc2NhdHRlcjUsLi1ibl9zY2F0dGVyNQorCisuZ2xvYmwJYm5fZ2F0aGVyNQorLnR5cGUJYm5fZ2F0aGVyNSxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK2JuX2dhdGhlcjU6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKy5MU0VIX2JlZ2luX2JuX2dhdGhlcjU6CisJIyBJIGNhbid0IHRydXN0IGFzc2VtYmxlciB0byB1c2Ugc3BlY2lmaWMgZW5jb2Rpbmc6LSgKKwkuYnl0ZQkweDQ4LDB4ODMsMHhlYywweDI4CQkjc3ViCVwkMHgyOCwlcnNwCisJLmJ5dGUJMHgwZiwweDI5LDB4MzQsMHgyNAkJI21vdmFwcwkleG1tNiwoJXJzcCkKKwkuYnl0ZQkweDBmLDB4MjksMHg3YywweDI0LDB4MTAJI21vdmRxYQkleG1tNywweDEwKCVyc3ApCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJJGlkeCwlcjExCisJc2hyCVwkYGxvZygkTi84KS9sb2coMilgLCRpZHgKKwlhbmQJXCRgJE4vOC0xYCwlcjExCisJbm90CSRpZHgKKwlsZWEJLkxtYWdpY19tYXNrcyglcmlwKSwlcmF4CisJYW5kCVwkYDIqKjUvKCROLzgpLTFgLCRpZHgJIyA1IGlzICJ3aW5kb3cgc2l6ZSIKKwlsZWEJOTYoJHRibCwlcjExLDgpLCR0YmwJIyBwb2ludGVyIHdpdGhpbiAxc3QgY2FjaGUgbGluZQorCW1vdnEJMCglcmF4LCRpZHgsOCksJXhtbTQJIyBzZXQgb2YgbWFza3MgZGVub3Rpbmcgd2hpY2gKKwltb3ZxCTgoJXJheCwkaWR4LDgpLCV4bW01CSMgY2FjaGUgbGluZSBjb250YWlucyBlbGVtZW50CisJbW92cQkxNiglcmF4LCRpZHgsOCksJXhtbTYJIyBkZW5vdGVkIGJ5IDd0aCBhcmd1bWVudAorCW1vdnEJMjQoJXJheCwkaWR4LDgpLCV4bW03CisJam1wCS5MZ2F0aGVyCisuYWxpZ24JMTYKKy5MZ2F0aGVyOgorCW1vdnEJYDAqJFNUUklERS80LTk2YCgkdGJsKSwleG1tMAorCW1vdnEJYDEqJFNUUklERS80LTk2YCgkdGJsKSwleG1tMQorCXBhbmQJJXhtbTQsJXhtbTAKKwltb3ZxCWAyKiRTVFJJREUvNC05NmAoJHRibCksJXhtbTIKKwlwYW5kCSV4bW01LCV4bW0xCisJbW92cQlgMyokU1RSSURFLzQtOTZgKCR0YmwpLCV4bW0zCisJcGFuZAkleG1tNiwleG1tMgorCXBvcgkleG1tMSwleG1tMAorCXBhbmQJJXhtbTcsJXhtbTMKKwlwb3IJJXhtbTIsJXhtbTAKKwlsZWEJJFNUUklERSgkdGJsKSwkdGJsCisJcG9yCSV4bW0zLCV4bW0wCisKKwltb3ZxCSV4bW0wLCgkb3V0KQkJIyBtMD1icFswXQorCWxlYQk4KCRvdXQpLCRvdXQKKwlzdWIJXCQxLCRudW0KKwlqbnoJLkxnYXRoZXIKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkleG1tNiwoJXJzcCkKKwltb3ZhcHMJJXhtbTcsMHgxMCglcnNwKQorCWxlYQkweDI4KCVyc3ApLCVyc3AKK19fXworJGNvZGUuPTw8X19fOworCXJldAorLkxTRUhfZW5kX2JuX2dhdGhlcjU6Cisuc2l6ZQlibl9nYXRoZXI1LC4tYm5fZ2F0aGVyNQorX19fCit9CiskY29kZS49PDxfX187CisuYWxpZ24JNjQKKy5MbWFnaWNfbWFza3M6CisJLmxvbmcJMCwwLCAwLDAsIDAsMCwgLTEsLTEKKwkubG9uZwkwLDAsIDAsMCwgMCwwLCAgMCwwCisuYXNjaXoJIk1vbnRnb21lcnkgTXVsdGlwbGljYXRpb24gd2l0aCBzY2F0dGVyL2dhdGhlciBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorX19fCisKKyMgRVhDRVBUSU9OX0RJU1BPU0lUSU9OIGhhbmRsZXIgKEVYQ0VQVElPTl9SRUNPUkQgKnJlYyxVTE9ORzY0IGZyYW1lLAorIwkJQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVSX0NPTlRFWFQgKmRpc3ApCitpZiAoJHdpbjY0KSB7CiskcmVjPSIlcmN4IjsKKyRmcmFtZT0iJXJkeCI7CiskY29udGV4dD0iJXI4IjsKKyRkaXNwPSIlcjkiOworCiskY29kZS49PDxfX187CisuZXh0ZXJuCV9faW1wX1J0bFZpcnR1YWxVbndpbmQKKy50eXBlCW11bF9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorbXVsX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBlbmQgb2YgcHJvbG9ndWUgbGFiZWwKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDxlbmQgb2YgcHJvbG9ndWUgbGFiZWwKKwlqYgkuTGNvbW1vbl9zZWhfdGFpbAorCisJbGVhCWA0MCs0OGAoJXJheCksJXJheAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVuZCBvZiBhbGxvY2EgbGFiZWwKKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDxlbmQgb2YgYWxsb2NhIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTgoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMl0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCisKKwltb3YJMTkyKCRjb250ZXh0KSwlcjEwCSMgcHVsbCAkbnVtCisJbW92CTgoJXJheCwlcjEwLDgpLCVyYXgJIyBwdWxsIHNhdmVkIHN0YWNrIHBvaW50ZXIKKworCW1vdmFwcwkoJXJheCksJXhtbTAKKwltb3ZhcHMJMTYoJXJheCksJXhtbTEKKwlsZWEJYDQwKzQ4YCglcmF4KSwlcmF4CisKKwltb3YJLTgoJXJheCksJXJieAorCW1vdgktMTYoJXJheCksJXJicAorCW1vdgktMjQoJXJheCksJXIxMgorCW1vdgktMzIoJXJheCksJXIxMworCW1vdgktNDAoJXJheCksJXIxNAorCW1vdgktNDgoJXJheCksJXIxNQorCW1vdgklcmJ4LDE0NCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJieAorCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAorCW1vdgklcjEyLDIxNigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMgorCW1vdgklcjEzLDIyNCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxMworCW1vdgklcjE0LDIzMigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNAorCW1vdgklcjE1LDI0MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNQorCW1vdnVwcwkleG1tMCw1MTIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5YbW02CisJbW92dXBzCSV4bW0xLDUyOCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlhtbTcKKworLkxjb21tb25fc2VoX3RhaWw6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCQxNTQsJWVjeAkJIyBzaXplb2YoQ09OVEVYVCkKKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVwIG1vdnNxCisKKwltb3YJJGRpc3AsJXJzaQorCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorCW1vdgkwKCVyc2kpLCVyOAkJIyBhcmczLCBkaXNwLT5Db250cm9sUGMKKwltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbGVhCTU2KCVyc2kpLCVyMTEJCSMgJmRpc3AtPkhhbmRsZXJEYXRhCisJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJhbWUKKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisJbW92CSVyMTEsNDAoJXJzcCkJCSMgYXJnNgorCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKwljYWxsCSpfX2ltcF9SdGxWaXJ0dWFsVW53aW5kKCVyaXApCisKKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKwlhZGQJXCQ2NCwlcnNwCisJcG9wZnEKKwlwb3AJJXIxNQorCXBvcAklcjE0CisJcG9wCSVyMTMKKwlwb3AJJXIxMgorCXBvcAklcmJwCisJcG9wCSVyYngKKwlwb3AJJXJkaQorCXBvcAklcnNpCisJcmV0Cisuc2l6ZQltdWxfaGFuZGxlciwuLW11bF9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luX2JuX211bF9tb250X2dhdGhlcjUKKwkucnZhCS5MU0VIX2VuZF9ibl9tdWxfbW9udF9nYXRoZXI1CisJLnJ2YQkuTFNFSF9pbmZvX2JuX211bF9tb250X2dhdGhlcjUKKworCS5ydmEJLkxTRUhfYmVnaW5fYm5fbXVsNHhfbW9udF9nYXRoZXI1CisJLnJ2YQkuTFNFSF9lbmRfYm5fbXVsNHhfbW9udF9nYXRoZXI1CisJLnJ2YQkuTFNFSF9pbmZvX2JuX211bDR4X21vbnRfZ2F0aGVyNQorCisJLnJ2YQkuTFNFSF9iZWdpbl9ibl9nYXRoZXI1CisJLnJ2YQkuTFNFSF9lbmRfYm5fZ2F0aGVyNQorCS5ydmEJLkxTRUhfaW5mb19ibl9nYXRoZXI1CisKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKKy5MU0VIX2luZm9fYm5fbXVsX21vbnRfZ2F0aGVyNToKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQltdWxfaGFuZGxlcgorCS5ydmEJLkxtdWxfYWxsb2NhLC5MbXVsX2JvZHksLkxtdWxfZXBpbG9ndWUJCSMgSGFuZGxlckRhdGFbXQorLmFsaWduCTgKKy5MU0VIX2luZm9fYm5fbXVsNHhfbW9udF9nYXRoZXI1OgorCS5ieXRlCTksMCwwLDAKKwkucnZhCW11bF9oYW5kbGVyCisJLnJ2YQkuTG11bDR4X2FsbG9jYSwuTG11bDR4X2JvZHksLkxtdWw0eF9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKy5hbGlnbgk4CisuTFNFSF9pbmZvX2JuX2dhdGhlcjU6CisgICAgICAgIC5ieXRlICAgMHgwMSwweDBkLDB4MDUsMHgwMAorICAgICAgICAuYnl0ZSAgIDB4MGQsMHg3OCwweDAxLDB4MDAJI21vdmFwcwkweDEwKHJzcCkseG1tNworICAgICAgICAuYnl0ZSAgIDB4MDgsMHg2OCwweDAwLDB4MDAJI21vdmFwcwkocnNwKSx4bW02CisgICAgICAgIC5ieXRlICAgMHgwNCwweDQyLDB4MDAsMHgwMAkjc3ViCXJzcCwweDI4CisuYWxpZ24JOAorX19fCit9CisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwoJDEpL2dlbTsKKworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYm4uaCBiL2NyeXB0by9ibi9ibi5oCmluZGV4IGEwYmM0NzguLmYzNDI0OGUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibi5oCisrKyBiL2NyeXB0by9ibi9ibi5oCkBAIC01NTgsNiArNTU4LDE3IEBACiBpbnQJQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgoY29uc3QgQklHTlVNICpwLGludCBuY2hlY2tzLCBCTl9DVFggKmN0eCwKIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9uLCBCTl9HRU5DQiAqY2IpOwogCitpbnQgQk5fWDkzMV9nZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRzLCBCTl9DVFggKmN0eCk7CisKK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisJCQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsCisJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOworaW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorCQkJY29uc3QgQklHTlVNICpYcCwKKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCisJCQlCTl9HRU5DQiAqY2IpOworCiBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQgKTsKIHZvaWQgQk5fTU9OVF9DVFhfaW5pdChCTl9NT05UX0NUWCAqY3R4KTsKIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVNICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCkBAIC02MTIsNiArNjIzLDggQEAKIGludAlCTl9kaXZfcmVjcChCSUdOVU0gKmR2LCBCSUdOVU0gKnJlbSwgY29uc3QgQklHTlVNICptLAogCUJOX1JFQ1BfQ1RYICpyZWNwLCBCTl9DVFggKmN0eCk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKIC8qIEZ1bmN0aW9ucyBmb3IgYXJpdGhtZXRpYyBvdmVyIGJpbmFyeSBwb2x5bm9taWFscyByZXByZXNlbnRlZCBieSBCSUdOVU1zLiAKICAqCiAgKiBUaGUgQklHTlVNOjpuZWcgcHJvcGVydHkgb2YgQklHTlVNcyByZXByZXNlbnRpbmcgYmluYXJ5IHBvbHlub21pYWxzIGlzCkBAIC02NjMsNiArNjc2LDggQEAKIGludAlCTl9HRjJtX3BvbHkyYXJyKGNvbnN0IEJJR05VTSAqYSwgaW50IHBbXSwgaW50IG1heCk7CiBpbnQJQk5fR0YybV9hcnIycG9seShjb25zdCBpbnQgcFtdLCBCSUdOVU0gKmEpOwogCisjZW5kaWYKKwogLyogZmFzdGVyIG1vZCBmdW5jdGlvbnMgZm9yIHRoZSAnTklTVCBwcmltZXMnIAogICogMCA8PSBhIDwgcF4yICovCiBpbnQgQk5fbmlzdF9tb2RfMTkyKEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKnAsIEJOX0NUWCAqY3R4KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9kaXYuYyBiL2NyeXB0by9ibi9ibl9kaXYuYwppbmRleCA4MDJhNDNkLi41MmIzMzA0IDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fZGl2LmMKKysrIGIvY3J5cHRvL2JuL2JuX2Rpdi5jCkBAIC0xNjksMTUgKzE2OSwxMyBAQAogI2VuZGlmIC8qIE9QRU5TU0xfTk9fQVNNICovCiAKIAotLyogQk5fZGl2W19ub19icmFuY2hdIGNvbXB1dGVzICBkdiA6PSBudW0gLyBkaXZpc29yLCAgcm91bmRpbmcgdG93YXJkcworLyogQk5fZGl2IGNvbXB1dGVzICBkdiA6PSBudW0gLyBkaXZpc29yLCAgcm91bmRpbmcgdG93YXJkcwogICogemVybywgYW5kIHNldHMgdXAgcm0gIHN1Y2ggdGhhdCAgZHYqZGl2aXNvciArIHJtID0gbnVtICBob2xkcy4KICAqIFRodXM6CiAgKiAgICAgZHYtPm5lZyA9PSBudW0tPm5lZyBeIGRpdmlzb3ItPm5lZyAgKHVubGVzcyB0aGUgcmVzdWx0IGlzIHplcm8pCiAgKiAgICAgcm0tPm5lZyA9PSBudW0tPm5lZyAgICAgICAgICAgICAgICAgKHVubGVzcyB0aGUgcmVtYWluZGVyIGlzIHplcm8pCiAgKiBJZiAnZHYnIG9yICdybScgaXMgTlVMTCwgdGhlIHJlc3BlY3RpdmUgdmFsdWUgaXMgbm90IHJldHVybmVkLgogICovCi1zdGF0aWMgaW50IEJOX2Rpdl9ub19icmFuY2goQklHTlVNICpkdiwgQklHTlVNICpybSwgY29uc3QgQklHTlVNICpudW0sCi0gICAgICAgIGNvbnN0IEJJR05VTSAqZGl2aXNvciwgQk5fQ1RYICpjdHgpOwogaW50IEJOX2RpdihCSUdOVU0gKmR2LCBCSUdOVU0gKnJtLCBjb25zdCBCSUdOVU0gKm51bSwgY29uc3QgQklHTlVNICpkaXZpc29yLAogCSAgIEJOX0NUWCAqY3R4KQogCXsKQEAgLTE4Niw2ICsxODQsNyBAQAogCUJOX1VMT05HICpyZXNwLCp3bnVtcDsKIAlCTl9VTE9ORyBkMCxkMTsKIAlpbnQgbnVtX24sZGl2X247CisJaW50IG5vX2JyYW5jaD0wOwogCiAJLyogSW52YWxpZCB6ZXJvLXBhZGRpbmcgd291bGQgaGF2ZSBwYXJ0aWN1bGFybHkgYmFkIGNvbnNlcXVlbmNlcwogCSAqIGluIHRoZSBjYXNlIG9mICdudW0nLCBzbyBkb24ndCBqdXN0IHJlbHkgb24gYm5fY2hlY2tfdG9wKCkgZm9yIHRoaXMgb25lCkBAIC0yMDAsNyArMTk5LDcgQEAKIAogCWlmICgoQk5fZ2V0X2ZsYWdzKG51bSwgQk5fRkxHX0NPTlNUVElNRSkgIT0gMCkgfHwgKEJOX2dldF9mbGFncyhkaXZpc29yLCBCTl9GTEdfQ09OU1RUSU1FKSAhPSAwKSkKIAkJewotCQlyZXR1cm4gQk5fZGl2X25vX2JyYW5jaChkdiwgcm0sIG51bSwgZGl2aXNvciwgY3R4KTsKKwkJbm9fYnJhbmNoPTE7CiAJCX0KIAogCWJuX2NoZWNrX3RvcChkdik7CkBAIC0yMTQsNyArMjEzLDcgQEAKIAkJcmV0dXJuKDApOwogCQl9CiAKLQlpZiAoQk5fdWNtcChudW0sZGl2aXNvcikgPCAwKQorCWlmICghbm9fYnJhbmNoICYmIEJOX3VjbXAobnVtLGRpdmlzb3IpIDwgMCkKIAkJewogCQlpZiAocm0gIT0gTlVMTCkKIAkJCXsgaWYgKEJOX2NvcHkocm0sbnVtKSA9PSBOVUxMKSByZXR1cm4oMCk7IH0KQEAgLTIzOSwyNDIgKzIzOCwyNSBAQAogCW5vcm1fc2hpZnQrPUJOX0JJVFMyOwogCWlmICghKEJOX2xzaGlmdChzbnVtLG51bSxub3JtX3NoaWZ0KSkpIGdvdG8gZXJyOwogCXNudW0tPm5lZz0wOwotCWRpdl9uPXNkaXYtPnRvcDsKLQludW1fbj1zbnVtLT50b3A7Ci0JbG9vcD1udW1fbi1kaXZfbjsKLQkvKiBMZXRzIHNldHVwIGEgJ3dpbmRvdycgaW50byBzbnVtCi0JICogVGhpcyBpcyB0aGUgcGFydCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50Ci0JICogJ2FyZWEnIGJlaW5nIGRpdmlkZWQgKi8KLQl3bnVtLm5lZyAgID0gMDsKLQl3bnVtLmQgICAgID0gJihzbnVtLT5kW2xvb3BdKTsKLQl3bnVtLnRvcCAgID0gZGl2X247Ci0JLyogb25seSBuZWVkZWQgd2hlbiBCTl91Y21wIG1lc3NlcyB1cCB0aGUgdmFsdWVzIGJldHdlZW4gdG9wIGFuZCBtYXggKi8KLQl3bnVtLmRtYXggID0gc251bS0+ZG1heCAtIGxvb3A7IC8qIHNvIHdlIGRvbid0IHN0ZXAgb3V0IG9mIGJvdW5kcyAqLwogCi0JLyogR2V0IHRoZSB0b3AgMiB3b3JkcyBvZiBzZGl2ICovCi0JLyogZGl2X249c2Rpdi0+dG9wOyAqLwotCWQwPXNkaXYtPmRbZGl2X24tMV07Ci0JZDE9KGRpdl9uID09IDEpPzA6c2Rpdi0+ZFtkaXZfbi0yXTsKLQotCS8qIHBvaW50ZXIgdG8gdGhlICd0b3AnIG9mIHNudW0gKi8KLQl3bnVtcD0gJihzbnVtLT5kW251bV9uLTFdKTsKLQotCS8qIFNldHVwIHRvICdyZXMnICovCi0JcmVzLT5uZWc9IChudW0tPm5lZ15kaXZpc29yLT5uZWcpOwotCWlmICghYm5fd2V4cGFuZChyZXMsKGxvb3ArMSkpKSBnb3RvIGVycjsKLQlyZXMtPnRvcD1sb29wOwotCXJlc3A9ICYocmVzLT5kW2xvb3AtMV0pOwotCi0JLyogc3BhY2UgZm9yIHRlbXAgKi8KLQlpZiAoIWJuX3dleHBhbmQodG1wLChkaXZfbisxKSkpIGdvdG8gZXJyOwotCi0JaWYgKEJOX3VjbXAoJndudW0sc2RpdikgPj0gMCkKKwlpZiAobm9fYnJhbmNoKQogCQl7Ci0JCS8qIElmIEJOX0RFQlVHX1JBTkQgaXMgZGVmaW5lZCBCTl91Y21wIGNoYW5nZXMgKHZpYQotCQkgKiBibl9wb2xsdXRlKSB0aGUgY29uc3QgYmlnbnVtIGFyZ3VtZW50cyA9PgotCQkgKiBjbGVhbiB0aGUgdmFsdWVzIGJldHdlZW4gdG9wIGFuZCBtYXggYWdhaW4gKi8KLQkJYm5fY2xlYXJfdG9wMm1heCgmd251bSk7Ci0JCWJuX3N1Yl93b3Jkcyh3bnVtLmQsIHdudW0uZCwgc2Rpdi0+ZCwgZGl2X24pOwotCQkqcmVzcD0xOwotCQl9Ci0JZWxzZQotCQlyZXMtPnRvcC0tOwotCS8qIGlmIHJlcy0+dG9wID09IDAgdGhlbiBjbGVhciB0aGUgbmVnIHZhbHVlIG90aGVyd2lzZSBkZWNyZWFzZQotCSAqIHRoZSByZXNwIHBvaW50ZXIgKi8KLQlpZiAocmVzLT50b3AgPT0gMCkKLQkJcmVzLT5uZWcgPSAwOwotCWVsc2UKLQkJcmVzcC0tOwotCi0JZm9yIChpPTA7IGk8bG9vcC0xOyBpKyssIHdudW1wLS0sIHJlc3AtLSkKLQkJewotCQlCTl9VTE9ORyBxLGwwOwotCQkvKiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbG9vcCB1c2VzIHRoZSB0b3AgdHdvIHdvcmRzIG9mCi0JCSAqIHNudW0gYW5kIHNkaXYgdG8gY2FsY3VsYXRlIGEgQk5fVUxPTkcgcSBzdWNoIHRoYXQKLQkJICogfCB3bnVtIC0gc2RpdiAqIHEgfCA8IHNkaXYgKi8KLSNpZiBkZWZpbmVkKEJOX0RJVjNXKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkKLQkJQk5fVUxPTkcgYm5fZGl2XzNfd29yZHMoQk5fVUxPTkcqLEJOX1VMT05HLEJOX1VMT05HKTsKLQkJcT1ibl9kaXZfM193b3Jkcyh3bnVtcCxkMSxkMCk7Ci0jZWxzZQotCQlCTl9VTE9ORyBuMCxuMSxyZW09MDsKLQotCQluMD13bnVtcFswXTsKLQkJbjE9d251bXBbLTFdOwotCQlpZiAobjAgPT0gZDApCi0JCQlxPUJOX01BU0syOwotCQllbHNlIAkJCS8qIG4wIDwgZDAgKi8KLQkJCXsKLSNpZmRlZiBCTl9MTE9ORwotCQkJQk5fVUxMT05HIHQyOwotCi0jaWYgZGVmaW5lZChCTl9MTE9ORykgJiYgZGVmaW5lZChCTl9ESVYyVykgJiYgIWRlZmluZWQoYm5fZGl2X3dvcmRzKQotCQkJcT0oQk5fVUxPTkcpKCgoKChCTl9VTExPTkcpbjApPDxCTl9CSVRTMil8bjEpL2QwKTsKLSNlbHNlCi0JCQlxPWJuX2Rpdl93b3JkcyhuMCxuMSxkMCk7Ci0jaWZkZWYgQk5fREVCVUdfTEVWSVRURQotCQkJZnByaW50ZihzdGRlcnIsIkRFQlVHOiBibl9kaXZfd29yZHMoMHglMDhYLDB4JTA4WCwweCUwOFwKLVgpIC0+IDB4JTA4WFxuIiwKLQkJCQluMCwgbjEsIGQwLCBxKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgUkVNQUlOREVSX0lTX0FMUkVBRFlfQ0FMQ1VMQVRFRAotCQkJLyoKLQkJCSAqIHJlbSBkb2Vzbid0IGhhdmUgdG8gYmUgQk5fVUxMT05HLiBUaGUgbGVhc3Qgd2UKLQkJCSAqIGtub3cgaXQncyBsZXNzIHRoYXQgZDAsIGlzbid0IGl0PwotCQkJICovCi0JCQlyZW09KG4xLXEqZDApJkJOX01BU0syOwotI2VuZGlmCi0JCQl0Mj0oQk5fVUxMT05HKWQxKnE7Ci0KLQkJCWZvciAoOzspCi0JCQkJewotCQkJCWlmICh0MiA8PSAoKCgoQk5fVUxMT05HKXJlbSk8PEJOX0JJVFMyKXx3bnVtcFstMl0pKQotCQkJCQlicmVhazsKLQkJCQlxLS07Ci0JCQkJcmVtICs9IGQwOwotCQkJCWlmIChyZW0gPCBkMCkgYnJlYWs7IC8qIGRvbid0IGxldCByZW0gb3ZlcmZsb3cgKi8KLQkJCQl0MiAtPSBkMTsKLQkJCQl9Ci0jZWxzZSAvKiAhQk5fTExPTkcgKi8KLQkJCUJOX1VMT05HIHQybCx0Mmg7Ci0KLQkJCXE9Ym5fZGl2X3dvcmRzKG4wLG4xLGQwKTsKLSNpZmRlZiBCTl9ERUJVR19MRVZJVFRFCi0JCQlmcHJpbnRmKHN0ZGVyciwiREVCVUc6IGJuX2Rpdl93b3JkcygweCUwOFgsMHglMDhYLDB4JTA4XAotWCkgLT4gMHglMDhYXG4iLAotCQkJCW4wLCBuMSwgZDAsIHEpOwotI2VuZGlmCi0jaWZuZGVmIFJFTUFJTkRFUl9JU19BTFJFQURZX0NBTENVTEFURUQKLQkJCXJlbT0objEtcSpkMCkmQk5fTUFTSzI7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fVU1VTFRfTE9ISSkKLQkJCUJOX1VNVUxUX0xPSEkodDJsLHQyaCxkMSxxKTsKLSNlbGlmIGRlZmluZWQoQk5fVU1VTFRfSElHSCkKLQkJCXQybCA9IGQxICogcTsKLQkJCXQyaCA9IEJOX1VNVUxUX0hJR0goZDEscSk7Ci0jZWxzZQotCQkJewotCQkJQk5fVUxPTkcgcWwsIHFoOwotCQkJdDJsPUxCSVRTKGQxKTsgdDJoPUhCSVRTKGQxKTsKLQkJCXFsID1MQklUUyhxKTsgIHFoID1IQklUUyhxKTsKLQkJCW11bDY0KHQybCx0MmgscWwscWgpOyAvKiB0Mj0oQk5fVUxMT05HKWQxKnE7ICovCi0JCQl9Ci0jZW5kaWYKLQotCQkJZm9yICg7OykKLQkJCQl7Ci0JCQkJaWYgKCh0MmggPCByZW0pIHx8Ci0JCQkJCSgodDJoID09IHJlbSkgJiYgKHQybCA8PSB3bnVtcFstMl0pKSkKLQkJCQkJYnJlYWs7Ci0JCQkJcS0tOwotCQkJCXJlbSArPSBkMDsKLQkJCQlpZiAocmVtIDwgZDApIGJyZWFrOyAvKiBkb24ndCBsZXQgcmVtIG92ZXJmbG93ICovCi0JCQkJaWYgKHQybCA8IGQxKSB0MmgtLTsgdDJsIC09IGQxOwotCQkJCX0KLSNlbmRpZiAvKiAhQk5fTExPTkcgKi8KLQkJCX0KLSNlbmRpZiAvKiAhQk5fRElWM1cgKi8KLQotCQlsMD1ibl9tdWxfd29yZHModG1wLT5kLHNkaXYtPmQsZGl2X24scSk7Ci0JCXRtcC0+ZFtkaXZfbl09bDA7Ci0JCXdudW0uZC0tOwotCQkvKiBpbmdvcmUgdG9wIHZhbHVlcyBvZiB0aGUgYmlnbnVtcyBqdXN0IHN1YiB0aGUgdHdvIAotCQkgKiBCTl9VTE9ORyBhcnJheXMgd2l0aCBibl9zdWJfd29yZHMgKi8KLQkJaWYgKGJuX3N1Yl93b3Jkcyh3bnVtLmQsIHdudW0uZCwgdG1wLT5kLCBkaXZfbisxKSkKLQkJCXsKLQkJCS8qIE5vdGU6IEFzIHdlIGhhdmUgY29uc2lkZXJlZCBvbmx5IHRoZSBsZWFkaW5nCi0JCQkgKiB0d28gQk5fVUxPTkdzIGluIHRoZSBjYWxjdWxhdGlvbiBvZiBxLCBzZGl2ICogcQotCQkJICogbWlnaHQgYmUgZ3JlYXRlciB0aGFuIHdudW0gKGJ1dCB0aGVuIChxLTEpICogc2RpdgotCQkJICogaXMgbGVzcyBvciBlcXVhbCB0aGFuIHdudW0pCi0JCQkgKi8KLQkJCXEtLTsKLQkJCWlmIChibl9hZGRfd29yZHMod251bS5kLCB3bnVtLmQsIHNkaXYtPmQsIGRpdl9uKSkKLQkJCQkvKiB3ZSBjYW4ndCBoYXZlIGFuIG92ZXJmbG93IGhlcmUgKGFzc3VtaW5nCi0JCQkJICogdGhhdCBxICE9IDAsIGJ1dCBpZiBxID09IDAgdGhlbiB0bXAgaXMKLQkJCQkgKiB6ZXJvIGFueXdheSkgKi8KLQkJCQkoKndudW1wKSsrOwotCQkJfQotCQkvKiBzdG9yZSBwYXJ0IG9mIHRoZSByZXN1bHQgKi8KLQkJKnJlc3AgPSBxOwotCQl9Ci0JYm5fY29ycmVjdF90b3Aoc251bSk7Ci0JaWYgKHJtICE9IE5VTEwpCi0JCXsKLQkJLyogS2VlcCBhIGNvcHkgb2YgdGhlIG5lZyBmbGFnIGluIG51bSBiZWNhdXNlIGlmIHJtPT1udW0KLQkJICogQk5fcnNoaWZ0KCkgd2lsbCBvdmVyd3JpdGUgaXQuCisJCS8qIFNpbmNlIHdlIGRvbid0IGtub3cgd2hldGhlciBzbnVtIGlzIGxhcmdlciB0aGFuIHNkaXYsCisJCSAqIHdlIHBhZCBzbnVtIHdpdGggZW5vdWdoIHplcm9lcyB3aXRob3V0IGNoYW5naW5nIGl0cworCQkgKiB2YWx1ZS4gCiAJCSAqLwotCQlpbnQgbmVnID0gbnVtLT5uZWc7Ci0JCUJOX3JzaGlmdChybSxzbnVtLG5vcm1fc2hpZnQpOwotCQlpZiAoIUJOX2lzX3plcm8ocm0pKQotCQkJcm0tPm5lZyA9IG5lZzsKLQkJYm5fY2hlY2tfdG9wKHJtKTsKLQkJfQotCUJOX0NUWF9lbmQoY3R4KTsKLQlyZXR1cm4oMSk7Ci1lcnI6Ci0JYm5fY2hlY2tfdG9wKHJtKTsKLQlCTl9DVFhfZW5kKGN0eCk7Ci0JcmV0dXJuKDApOwotCX0KLQotCi0vKiBCTl9kaXZfbm9fYnJhbmNoIGlzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIEJOX2Rpdi4gSXQgZG9lcyBub3QgY29udGFpbgotICogYnJhbmNoZXMgdGhhdCBtYXkgbGVhayBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgQk5fZGl2X25vX2JyYW5jaChCSUdOVU0gKmR2LCBCSUdOVU0gKnJtLCBjb25zdCBCSUdOVU0gKm51bSwgCi0JY29uc3QgQklHTlVNICpkaXZpc29yLCBCTl9DVFggKmN0eCkKLQl7Ci0JaW50IG5vcm1fc2hpZnQsaSxsb29wOwotCUJJR05VTSAqdG1wLHdudW0sKnNudW0sKnNkaXYsKnJlczsKLQlCTl9VTE9ORyAqcmVzcCwqd251bXA7Ci0JQk5fVUxPTkcgZDAsZDE7Ci0JaW50IG51bV9uLGRpdl9uOwotCi0JYm5fY2hlY2tfdG9wKGR2KTsKLQlibl9jaGVja190b3Aocm0pOwotCS8qIGJuX2NoZWNrX3RvcChudW0pOyAqLyAvKiAnbnVtJyBoYXMgYmVlbiBjaGVja2VkIGluIEJOX2RpdigpICovCi0JYm5fY2hlY2tfdG9wKGRpdmlzb3IpOwotCi0JaWYgKEJOX2lzX3plcm8oZGl2aXNvcikpCi0JCXsKLQkJQk5lcnIoQk5fRl9CTl9ESVZfTk9fQlJBTkNILEJOX1JfRElWX0JZX1pFUk8pOwotCQlyZXR1cm4oMCk7Ci0JCX0KLQotCUJOX0NUWF9zdGFydChjdHgpOwotCXRtcD1CTl9DVFhfZ2V0KGN0eCk7Ci0Jc251bT1CTl9DVFhfZ2V0KGN0eCk7Ci0Jc2Rpdj1CTl9DVFhfZ2V0KGN0eCk7Ci0JaWYgKGR2ID09IE5VTEwpCi0JCXJlcz1CTl9DVFhfZ2V0KGN0eCk7Ci0JZWxzZQlyZXM9ZHY7Ci0JaWYgKHNkaXYgPT0gTlVMTCB8fCByZXMgPT0gTlVMTCkgZ290byBlcnI7Ci0KLQkvKiBGaXJzdCB3ZSBub3JtYWxpc2UgdGhlIG51bWJlcnMgKi8KLQlub3JtX3NoaWZ0PUJOX0JJVFMyLSgoQk5fbnVtX2JpdHMoZGl2aXNvcikpJUJOX0JJVFMyKTsKLQlpZiAoIShCTl9sc2hpZnQoc2RpdixkaXZpc29yLG5vcm1fc2hpZnQpKSkgZ290byBlcnI7Ci0Jc2Rpdi0+bmVnPTA7Ci0Jbm9ybV9zaGlmdCs9Qk5fQklUUzI7Ci0JaWYgKCEoQk5fbHNoaWZ0KHNudW0sbnVtLG5vcm1fc2hpZnQpKSkgZ290byBlcnI7Ci0Jc251bS0+bmVnPTA7Ci0KLQkvKiBTaW5jZSB3ZSBkb24ndCBrbm93IHdoZXRoZXIgc251bSBpcyBsYXJnZXIgdGhhbiBzZGl2LAotCSAqIHdlIHBhZCBzbnVtIHdpdGggZW5vdWdoIHplcm9lcyB3aXRob3V0IGNoYW5naW5nIGl0cwotCSAqIHZhbHVlLiAKLQkgKi8KLQlpZiAoc251bS0+dG9wIDw9IHNkaXYtPnRvcCsxKSAKLQkJewotCQlpZiAoYm5fd2V4cGFuZChzbnVtLCBzZGl2LT50b3AgKyAyKSA9PSBOVUxMKSBnb3RvIGVycjsKLQkJZm9yIChpID0gc251bS0+dG9wOyBpIDwgc2Rpdi0+dG9wICsgMjsgaSsrKSBzbnVtLT5kW2ldID0gMDsKLQkJc251bS0+dG9wID0gc2Rpdi0+dG9wICsgMjsKLQkJfQotCWVsc2UKLQkJewotCQlpZiAoYm5fd2V4cGFuZChzbnVtLCBzbnVtLT50b3AgKyAxKSA9PSBOVUxMKSBnb3RvIGVycjsKLQkJc251bS0+ZFtzbnVtLT50b3BdID0gMDsKLQkJc251bS0+dG9wICsrOworCQlpZiAoc251bS0+dG9wIDw9IHNkaXYtPnRvcCsxKSAKKwkJCXsKKwkJCWlmIChibl93ZXhwYW5kKHNudW0sIHNkaXYtPnRvcCArIDIpID09IE5VTEwpIGdvdG8gZXJyOworCQkJZm9yIChpID0gc251bS0+dG9wOyBpIDwgc2Rpdi0+dG9wICsgMjsgaSsrKSBzbnVtLT5kW2ldID0gMDsKKwkJCXNudW0tPnRvcCA9IHNkaXYtPnRvcCArIDI7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCWlmIChibl93ZXhwYW5kKHNudW0sIHNudW0tPnRvcCArIDEpID09IE5VTEwpIGdvdG8gZXJyOworCQkJc251bS0+ZFtzbnVtLT50b3BdID0gMDsKKwkJCXNudW0tPnRvcCArKzsKKwkJCX0KIAkJfQogCiAJZGl2X249c2Rpdi0+dG9wOwpAQCAtNTAwLDEyICsyODIsMjcgQEAKIAkvKiBTZXR1cCB0byAncmVzJyAqLwogCXJlcy0+bmVnPSAobnVtLT5uZWdeZGl2aXNvci0+bmVnKTsKIAlpZiAoIWJuX3dleHBhbmQocmVzLChsb29wKzEpKSkgZ290byBlcnI7Ci0JcmVzLT50b3A9bG9vcC0xOworCXJlcy0+dG9wPWxvb3Atbm9fYnJhbmNoOwogCXJlc3A9ICYocmVzLT5kW2xvb3AtMV0pOwogCiAJLyogc3BhY2UgZm9yIHRlbXAgKi8KIAlpZiAoIWJuX3dleHBhbmQodG1wLChkaXZfbisxKSkpIGdvdG8gZXJyOwogCisJaWYgKCFub19icmFuY2gpCisJCXsKKwkJaWYgKEJOX3VjbXAoJndudW0sc2RpdikgPj0gMCkKKwkJCXsKKwkJCS8qIElmIEJOX0RFQlVHX1JBTkQgaXMgZGVmaW5lZCBCTl91Y21wIGNoYW5nZXMgKHZpYQorCQkJICogYm5fcG9sbHV0ZSkgdGhlIGNvbnN0IGJpZ251bSBhcmd1bWVudHMgPT4KKwkJCSAqIGNsZWFuIHRoZSB2YWx1ZXMgYmV0d2VlbiB0b3AgYW5kIG1heCBhZ2FpbiAqLworCQkJYm5fY2xlYXJfdG9wMm1heCgmd251bSk7CisJCQlibl9zdWJfd29yZHMod251bS5kLCB3bnVtLmQsIHNkaXYtPmQsIGRpdl9uKTsKKwkJCSpyZXNwPTE7CisJCQl9CisJCWVsc2UKKwkJCXJlcy0+dG9wLS07CisJCX0KKwogCS8qIGlmIHJlcy0+dG9wID09IDAgdGhlbiBjbGVhciB0aGUgbmVnIHZhbHVlIG90aGVyd2lzZSBkZWNyZWFzZQogCSAqIHRoZSByZXNwIHBvaW50ZXIgKi8KIAlpZiAocmVzLT50b3AgPT0gMCkKQEAgLTYzOCw3ICs0MzUsNyBAQAogCQkJcm0tPm5lZyA9IG5lZzsKIAkJYm5fY2hlY2tfdG9wKHJtKTsKIAkJfQotCWJuX2NvcnJlY3RfdG9wKHJlcyk7CisJaWYgKG5vX2JyYW5jaCkJYm5fY29ycmVjdF90b3AocmVzKTsKIAlCTl9DVFhfZW5kKGN0eCk7CiAJcmV0dXJuKDEpOwogZXJyOgpAQCAtNjQ2LDUgKzQ0Myw0IEBACiAJQk5fQ1RYX2VuZChjdHgpOwogCXJldHVybigwKTsKIAl9Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX2V4cC5jIGIvY3J5cHRvL2JuL2JuX2V4cC5jCmluZGV4IGQ5YjZjNzMuLjJhYmY2ZmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9leHAuYworKysgYi9jcnlwdG8vYm4vYm5fZXhwLmMKQEAgLTExMyw2ICsxMTMsMTggQEAKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgImJuX2xjbC5oIgogCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX1dJTjMyCisjIGluY2x1ZGUgPG1hbGxvYy5oPgorIyBpZm5kZWYgYWxsb2NhCisjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisjIGlmbmRlZiBhbGxvY2EKKyMgIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2FsbG9jYSgocykpCisjIGVuZGlmCisjZW5kaWYKKwogLyogbWF4aW11bSBwcmVjb21wdXRhdGlvbiB0YWJsZSBzaXplIGZvciAqdmFyaWFibGUqIHNsaWRpbmcgd2luZG93cyAqLwogI2RlZmluZSBUQUJMRV9TSVpFCTMyCiAKQEAgLTUyMiwyMyArNTM0LDE3IEBACiAgKiBhcyBjYWNoZSBsaW5lcyBhcmUgY29uY2VybmVkLiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gdHJhbnNmZXIgYSBCSUdOVU0KICAqIGZyb20vdG8gdGhhdCB0YWJsZS4gKi8KIAotc3RhdGljIGludCBNT0RfRVhQX0NUSU1FX0NPUFlfVE9fUFJFQlVGKEJJR05VTSAqYiwgaW50IHRvcCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgaWR4LCBpbnQgd2lkdGgpCitzdGF0aWMgaW50IE1PRF9FWFBfQ1RJTUVfQ09QWV9UT19QUkVCVUYoY29uc3QgQklHTlVNICpiLCBpbnQgdG9wLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBpZHgsIGludCB3aWR0aCkKIAl7CiAJc2l6ZV90IGksIGo7CiAKLQlpZiAoYm5fd2V4cGFuZChiLCB0b3ApID09IE5VTEwpCi0JCXJldHVybiAwOwotCXdoaWxlIChiLT50b3AgPCB0b3ApCi0JCXsKLQkJYi0+ZFtiLT50b3ArK10gPSAwOwotCQl9Ci0JCisJaWYgKHRvcCA+IGItPnRvcCkKKwkJdG9wID0gYi0+dG9wOyAvKiB0aGlzIHdvcmtzIGJlY2F1c2UgJ2J1ZicgaXMgZXhwbGljaXRseSB6ZXJvZWQgKi8KIAlmb3IgKGkgPSAwLCBqPWlkeDsgaSA8IHRvcCAqIHNpemVvZiBiLT5kWzBdOyBpKyssIGorPXdpZHRoKQogCQl7CiAJCWJ1ZltqXSA9ICgodW5zaWduZWQgY2hhciopYi0+ZClbaV07CiAJCX0KIAotCWJuX2NvcnJlY3RfdG9wKGIpOwogCXJldHVybiAxOwogCX0KIApAQCAtNTYxLDcgKzU2Nyw3IEBACiAKIC8qIEdpdmVuIGEgcG9pbnRlciB2YWx1ZSwgY29tcHV0ZSB0aGUgbmV4dCBhZGRyZXNzIHRoYXQgaXMgYSBjYWNoZSBsaW5lIG11bHRpcGxlLiAqLwogI2RlZmluZSBNT0RfRVhQX0NUSU1FX0FMSUdOKHhfKSBcCi0JKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChCTl9VTE9ORykoeF8pKSAmIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX01BU0spKSkpCisJKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChzaXplX3QpKHhfKSkgJiAoTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9NQVNLKSkpKQogCiAvKiBUaGlzIHZhcmlhbnQgb2YgQk5fbW9kX2V4cF9tb250KCkgdXNlcyBmaXhlZCB3aW5kb3dzIGFuZCB0aGUgc3BlY2lhbAogICogcHJlY29tcHV0YXRpb24gbWVtb3J5IGxheW91dCB0byBsaW1pdCBkYXRhLWRlcGVuZGVuY3kgdG8gYSBtaW5pbXVtCkBAIC01NzIsMTcgKzU3OCwxNSBAQAogaW50IEJOX21vZF9leHBfbW9udF9jb25zdHRpbWUoQklHTlVNICpyciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKnAsCiAJCSAgICBjb25zdCBCSUdOVU0gKm0sIEJOX0NUWCAqY3R4LCBCTl9NT05UX0NUWCAqaW5fbW9udCkKIAl7Ci0JaW50IGksYml0cyxyZXQ9MCxpZHgsd2luZG93LHd2YWx1ZTsKKwlpbnQgaSxiaXRzLHJldD0wLHdpbmRvdyx3dmFsdWU7CiAJaW50IHRvcDsKLSAJQklHTlVNICpyOwotCWNvbnN0IEJJR05VTSAqYWE7CiAJQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKIAogCWludCBudW1Qb3dlcnM7CiAJdW5zaWduZWQgY2hhciAqcG93ZXJidWZGcmVlPU5VTEw7CiAJaW50IHBvd2VyYnVmTGVuID0gMDsKIAl1bnNpZ25lZCBjaGFyICpwb3dlcmJ1Zj1OVUxMOwotCUJJR05VTSAqY29tcHV0ZVRlbXA9TlVMTCwgKmFtPU5VTEw7CisJQklHTlVNIHRtcCwgYW07CiAKIAlibl9jaGVja190b3AoYSk7CiAJYm5fY2hlY2tfdG9wKHApOwpAQCAtNjAyLDEwICs2MDYsNyBAQAogCQlyZXR1cm4gcmV0OwogCQl9CiAKLSAJLyogSW5pdGlhbGl6ZSBCSUdOVU0gY29udGV4dCBhbmQgYWxsb2NhdGUgaW50ZXJtZWRpYXRlIHJlc3VsdCAqLwogCUJOX0NUWF9zdGFydChjdHgpOwotCXIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JaWYgKHIgPT0gTlVMTCkgZ290byBlcnI7CiAKIAkvKiBBbGxvY2F0ZSBhIG1vbnRnb21lcnkgY29udGV4dCBpZiBpdCB3YXMgbm90IHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCiAJICogSWYgdGhpcyBpcyBub3QgZG9uZSwgdGhpbmdzIHdpbGwgYnJlYWsgaW4gdGhlIG1vbnRnb21lcnkgcGFydC4KQEAgLTYyMCw0MCArNjIxLDE1NCBAQAogCiAJLyogR2V0IHRoZSB3aW5kb3cgc2l6ZSB0byB1c2Ugd2l0aCBzaXplIG9mIHAuICovCiAJd2luZG93ID0gQk5fd2luZG93X2JpdHNfZm9yX2N0aW1lX2V4cG9uZW50X3NpemUoYml0cyk7CisjaWYgZGVmaW5lZChPUEVOU1NMX0JOX0FTTV9NT05UNSkKKwlpZiAod2luZG93PT02ICYmIGJpdHM8PTEwMjQpIHdpbmRvdz01OwkvKiB+NSUgaW1wcm92ZW1lbnQgb2YgMjA0OC1iaXQgUlNBIHNpZ24gKi8KKyNlbmRpZgogCiAJLyogQWxsb2NhdGUgYSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSBwcmUtY29tcHV0ZWQKLQkgKiBwb3dlcnMgb2YgYS4KKwkgKiBwb3dlcnMgb2YgYW0sIGFtIGl0c2VsZiBhbmQgdG1wLgogCSAqLwogCW51bVBvd2VycyA9IDEgPDwgd2luZG93OwotCXBvd2VyYnVmTGVuID0gc2l6ZW9mKG0tPmRbMF0pKnRvcCpudW1Qb3dlcnM7CisJcG93ZXJidWZMZW4gPSBzaXplb2YobS0+ZFswXSkqKHRvcCpudW1Qb3dlcnMgKworCQkJCSgoMip0b3ApPm51bVBvd2Vycz8oMip0b3ApOm51bVBvd2VycykpOworI2lmZGVmIGFsbG9jYQorCWlmIChwb3dlcmJ1ZkxlbiA8IDMwNzIpCisJCXBvd2VyYnVmRnJlZSA9IGFsbG9jYShwb3dlcmJ1ZkxlbitNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIKTsKKwllbHNlCisjZW5kaWYKIAlpZiAoKHBvd2VyYnVmRnJlZT0odW5zaWduZWQgY2hhciopT1BFTlNTTF9tYWxsb2MocG93ZXJidWZMZW4rTU9EX0VYUF9DVElNRV9NSU5fQ0FDSEVfTElORV9XSURUSCkpID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCQkKIAlwb3dlcmJ1ZiA9IE1PRF9FWFBfQ1RJTUVfQUxJR04ocG93ZXJidWZGcmVlKTsKIAltZW1zZXQocG93ZXJidWYsIDAsIHBvd2VyYnVmTGVuKTsKIAotIAkvKiBJbml0aWFsaXplIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0LiBEbyB0aGlzIGVhcmx5IHRvIHNhdmUgZG91YmxlIGNvbnZlcnNpb24sCi0JICogb25jZSBlYWNoIGZvciBhXjAgYW5kIGludGVybWVkaWF0ZSByZXN1bHQuCi0JICovCi0gCWlmICghQk5fdG9fbW9udGdvbWVyeShyLEJOX3ZhbHVlX29uZSgpLG1vbnQsY3R4KSkgZ290byBlcnI7Ci0JaWYgKCFNT0RfRVhQX0NUSU1FX0NPUFlfVE9fUFJFQlVGKHIsIHRvcCwgcG93ZXJidWYsIDAsIG51bVBvd2VycykpIGdvdG8gZXJyOworI2lmZGVmIGFsbG9jYQorCWlmIChwb3dlcmJ1ZkxlbiA8IDMwNzIpCisJCXBvd2VyYnVmRnJlZSA9IE5VTEw7CisjZW5kaWYKIAotCS8qIEluaXRpYWxpemUgY29tcHV0ZVRlbXAgYXMgYV4xIHdpdGggbW9udGdvbWVyeSBwcmVjYWxjcyAqLwotCWNvbXB1dGVUZW1wID0gQk5fQ1RYX2dldChjdHgpOwotCWFtID0gQk5fQ1RYX2dldChjdHgpOwotCWlmIChjb21wdXRlVGVtcD09TlVMTCB8fCBhbT09TlVMTCkgZ290byBlcnI7CisJLyogbGF5IGRvd24gdG1wIGFuZCBhbSByaWdodCBhZnRlciBwb3dlcnMgdGFibGUgKi8KKwl0bXAuZCAgICAgPSAoQk5fVUxPTkcgKikocG93ZXJidWYgKyBzaXplb2YobS0+ZFswXSkqdG9wKm51bVBvd2Vycyk7CisJYW0uZCAgICAgID0gdG1wLmQgKyB0b3A7CisJdG1wLnRvcCAgID0gYW0udG9wICA9IDA7CisJdG1wLmRtYXggID0gYW0uZG1heCA9IHRvcDsKKwl0bXAubmVnICAgPSBhbS5uZWcgID0gMDsKKwl0bXAuZmxhZ3MgPSBhbS5mbGFncyA9IEJOX0ZMR19TVEFUSUNfREFUQTsKIAorCS8qIHByZXBhcmUgYV4wIGluIE1vbnRnb21lcnkgZG9tYWluICovCisjaWYgMQorIAlpZiAoIUJOX3RvX21vbnRnb21lcnkoJnRtcCxCTl92YWx1ZV9vbmUoKSxtb250LGN0eCkpCWdvdG8gZXJyOworI2Vsc2UKKwl0bXAuZFswXSA9ICgwLW0tPmRbMF0pJkJOX01BU0syOwkvKiAyXih0b3AqQk5fQklUUzIpIC0gbSAqLworCWZvciAoaT0xO2k8dG9wO2krKykKKwkJdG1wLmRbaV0gPSAofm0tPmRbaV0pJkJOX01BU0syOworCXRtcC50b3AgPSB0b3A7CisjZW5kaWYKKworCS8qIHByZXBhcmUgYV4xIGluIE1vbnRnb21lcnkgZG9tYWluICovCiAJaWYgKGEtPm5lZyB8fCBCTl91Y21wKGEsbSkgPj0gMCkKIAkJewotCQlpZiAoIUJOX21vZChhbSxhLG0sY3R4KSkKLQkJCWdvdG8gZXJyOwotCQlhYT0gYW07CisJCWlmICghQk5fbW9kKCZhbSxhLG0sY3R4KSkJCQlnb3RvIGVycjsKKwkJaWYgKCFCTl90b19tb250Z29tZXJ5KCZhbSwmYW0sbW9udCxjdHgpKQlnb3RvIGVycjsKIAkJfQotCWVsc2UKLQkJYWE9YTsKLQlpZiAoIUJOX3RvX21vbnRnb21lcnkoYW0sYWEsbW9udCxjdHgpKSBnb3RvIGVycjsKLQlpZiAoIUJOX2NvcHkoY29tcHV0ZVRlbXAsIGFtKSkgZ290byBlcnI7Ci0JaWYgKCFNT0RfRVhQX0NUSU1FX0NPUFlfVE9fUFJFQlVGKGFtLCB0b3AsIHBvd2VyYnVmLCAxLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKKwllbHNlCWlmICghQk5fdG9fbW9udGdvbWVyeSgmYW0sYSxtb250LGN0eCkpCQlnb3RvIGVycjsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9CTl9BU01fTU9OVDUpCisgICAgLyogVGhpcyBvcHRpbWl6YXRpb24gdXNlcyBpZGVhcyBmcm9tIGh0dHA6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMS8yMzksCisgICAgICogc3BlY2lmaWNhbGx5IG9wdGltaXphdGlvbiBvZiBjYWNoZS10aW1pbmcgYXR0YWNrIGNvdW50ZXJtZWFzdXJlcworICAgICAqIGFuZCBwcmUtY29tcHV0YXRpb24gb3B0aW1pemF0aW9uLiAqLworCisgICAgLyogRGVkaWNhdGVkIHdpbmRvdz09NCBjYXNlIGltcHJvdmVzIDUxMi1iaXQgUlNBIHNpZ24gYnkgfjE1JSwgYnV0IGFzCisgICAgICogNTEyLWJpdCBSU0EgaXMgaGFyZGx5IHJlbGV2YW50LCB3ZSBvbWl0IGl0IHRvIHNwYXJlIHNpemUuLi4gKi8gCisgICAgaWYgKHdpbmRvdz09NSkKKwl7CisJdm9pZCBibl9tdWxfbW9udF9nYXRoZXI1KEJOX1VMT05HICpycCxjb25zdCBCTl9VTE9ORyAqYXAsCisJCQljb25zdCB2b2lkICp0YWJsZSxjb25zdCBCTl9VTE9ORyAqbnAsCisJCQljb25zdCBCTl9VTE9ORyAqbjAsaW50IG51bSxpbnQgcG93ZXIpOworCXZvaWQgYm5fc2NhdHRlcjUoY29uc3QgQk5fVUxPTkcgKmlucCxzaXplX3QgbnVtLAorCQkJdm9pZCAqdGFibGUsc2l6ZV90IHBvd2VyKTsKKwl2b2lkIGJuX2dhdGhlcjUoQk5fVUxPTkcgKm91dCxzaXplX3QgbnVtLAorCQkJdm9pZCAqdGFibGUsc2l6ZV90IHBvd2VyKTsKKworCUJOX1VMT05HICpucD1tb250LT5OLmQsICpuMD1tb250LT5uMDsKKworCS8qIEJOX3RvX21vbnRnb21lcnkgY2FuIGNvbnRhbWluYXRlIHdvcmRzIGFib3ZlIC50b3AKKwkgKiBbaW4gQk5fREVCVUdbX0RFQlVHXSBidWlsZF0uLi4gKi8KKwlmb3IgKGk9YW0udG9wOyBpPHRvcDsgaSsrKQlhbS5kW2ldPTA7CisJZm9yIChpPXRtcC50b3A7IGk8dG9wOyBpKyspCXRtcC5kW2ldPTA7CisKKwlibl9zY2F0dGVyNSh0bXAuZCx0b3AscG93ZXJidWYsMCk7CisJYm5fc2NhdHRlcjUoYW0uZCxhbS50b3AscG93ZXJidWYsMSk7CisJYm5fbXVsX21vbnQodG1wLmQsYW0uZCxhbS5kLG5wLG4wLHRvcCk7CisJYm5fc2NhdHRlcjUodG1wLmQsdG9wLHBvd2VyYnVmLDIpOworCisjaWYgMAorCWZvciAoaT0zOyBpPDMyOyBpKyspCisJCXsKKwkJLyogQ2FsY3VsYXRlIGFeaSA9IGFeKGktMSkgKiBhICovCisJCWJuX211bF9tb250X2dhdGhlcjUodG1wLmQsYW0uZCxwb3dlcmJ1ZixucCxuMCx0b3AsaS0xKTsKKwkJYm5fc2NhdHRlcjUodG1wLmQsdG9wLHBvd2VyYnVmLGkpOworCQl9CisjZWxzZQorCS8qIHNhbWUgYXMgYWJvdmUsIGJ1dCB1c2VzIHNxdWFyaW5nIGZvciAxLzIgb2Ygb3BlcmF0aW9ucyAqLworCWZvciAoaT00OyBpPDMyOyBpKj0yKQorCQl7CisJCWJuX211bF9tb250KHRtcC5kLHRtcC5kLHRtcC5kLG5wLG4wLHRvcCk7CisJCWJuX3NjYXR0ZXI1KHRtcC5kLHRvcCxwb3dlcmJ1ZixpKTsKKwkJfQorCWZvciAoaT0zOyBpPDg7IGkrPTIpCisJCXsKKwkJaW50IGo7CisJCWJuX211bF9tb250X2dhdGhlcjUodG1wLmQsYW0uZCxwb3dlcmJ1ZixucCxuMCx0b3AsaS0xKTsKKwkJYm5fc2NhdHRlcjUodG1wLmQsdG9wLHBvd2VyYnVmLGkpOworCQlmb3IgKGo9MippOyBqPDMyOyBqKj0yKQorCQkJeworCQkJYm5fbXVsX21vbnQodG1wLmQsdG1wLmQsdG1wLmQsbnAsbjAsdG9wKTsKKwkJCWJuX3NjYXR0ZXI1KHRtcC5kLHRvcCxwb3dlcmJ1ZixqKTsKKwkJCX0KKwkJfQorCWZvciAoOyBpPDE2OyBpKz0yKQorCQl7CisJCWJuX211bF9tb250X2dhdGhlcjUodG1wLmQsYW0uZCxwb3dlcmJ1ZixucCxuMCx0b3AsaS0xKTsKKwkJYm5fc2NhdHRlcjUodG1wLmQsdG9wLHBvd2VyYnVmLGkpOworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9zY2F0dGVyNSh0bXAuZCx0b3AscG93ZXJidWYsMippKTsKKwkJfQorCWZvciAoOyBpPDMyOyBpKz0yKQorCQl7CisJCWJuX211bF9tb250X2dhdGhlcjUodG1wLmQsYW0uZCxwb3dlcmJ1ZixucCxuMCx0b3AsaS0xKTsKKwkJYm5fc2NhdHRlcjUodG1wLmQsdG9wLHBvd2VyYnVmLGkpOworCQl9CisjZW5kaWYKKwliaXRzLS07CisJZm9yICh3dmFsdWU9MCwgaT1iaXRzJTU7IGk+PTA7IGktLSxiaXRzLS0pCisJCXd2YWx1ZSA9ICh3dmFsdWU8PDEpK0JOX2lzX2JpdF9zZXQocCxiaXRzKTsKKwlibl9nYXRoZXI1KHRtcC5kLHRvcCxwb3dlcmJ1Zix3dmFsdWUpOworCisJLyogU2NhbiB0aGUgZXhwb25lbnQgb25lIHdpbmRvdyBhdCBhIHRpbWUgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdAorCSAqIHNpZ25pZmljYW50IGJpdHMuCisJICovCisJd2hpbGUgKGJpdHMgPj0gMCkKKwkJeworCQlmb3IgKHd2YWx1ZT0wLCBpPTA7IGk8NTsgaSsrLGJpdHMtLSkKKwkJCXd2YWx1ZSA9ICh3dmFsdWU8PDEpK0JOX2lzX2JpdF9zZXQocCxiaXRzKTsKKworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9tdWxfbW9udCh0bXAuZCx0bXAuZCx0bXAuZCxucCxuMCx0b3ApOworCQlibl9tdWxfbW9udF9nYXRoZXI1KHRtcC5kLHRtcC5kLHBvd2VyYnVmLG5wLG4wLHRvcCx3dmFsdWUpOworCQl9CisKKwl0bXAudG9wPXRvcDsKKwlibl9jb3JyZWN0X3RvcCgmdG1wKTsKKwl9CisgICAgZWxzZQorI2VuZGlmCisJeworCWlmICghTU9EX0VYUF9DVElNRV9DT1BZX1RPX1BSRUJVRigmdG1wLCB0b3AsIHBvd2VyYnVmLCAwLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKKwlpZiAoIU1PRF9FWFBfQ1RJTUVfQ09QWV9UT19QUkVCVUYoJmFtLCAgdG9wLCBwb3dlcmJ1ZiwgMSwgbnVtUG93ZXJzKSkgZ290byBlcnI7CiAKIAkvKiBJZiB0aGUgd2luZG93IHNpemUgaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gY2FsY3VsYXRlCiAJICogdmFsW2k9Mi4uMl53aW5zaXplLTFdLiBQb3dlcnMgYXJlIGNvbXB1dGVkIGFzIGEqYV4oaS0xKQpAQCAtNjYyLDYyICs3NzcsNTQgQEAKIAkgKi8KIAlpZiAod2luZG93ID4gMSkKIAkJewotCQlmb3IgKGk9MjsgaTxudW1Qb3dlcnM7IGkrKykKKwkJaWYgKCFCTl9tb2RfbXVsX21vbnRnb21lcnkoJnRtcCwmYW0sJmFtLG1vbnQsY3R4KSkJZ290byBlcnI7CisJCWlmICghTU9EX0VYUF9DVElNRV9DT1BZX1RPX1BSRUJVRigmdG1wLCB0b3AsIHBvd2VyYnVmLCAyLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKKwkJZm9yIChpPTM7IGk8bnVtUG93ZXJzOyBpKyspCiAJCQl7CiAJCQkvKiBDYWxjdWxhdGUgYV5pID0gYV4oaS0xKSAqIGEgKi8KLQkJCWlmICghQk5fbW9kX211bF9tb250Z29tZXJ5KGNvbXB1dGVUZW1wLGFtLGNvbXB1dGVUZW1wLG1vbnQsY3R4KSkKKwkJCWlmICghQk5fbW9kX211bF9tb250Z29tZXJ5KCZ0bXAsJmFtLCZ0bXAsbW9udCxjdHgpKQogCQkJCWdvdG8gZXJyOwotCQkJaWYgKCFNT0RfRVhQX0NUSU1FX0NPUFlfVE9fUFJFQlVGKGNvbXB1dGVUZW1wLCB0b3AsIHBvd2VyYnVmLCBpLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKKwkJCWlmICghTU9EX0VYUF9DVElNRV9DT1BZX1RPX1BSRUJVRigmdG1wLCB0b3AsIHBvd2VyYnVmLCBpLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKIAkJCX0KIAkJfQogCi0gCS8qIEFkanVzdCB0aGUgbnVtYmVyIG9mIGJpdHMgdXAgdG8gYSBtdWx0aXBsZSBvZiB0aGUgd2luZG93IHNpemUuCi0gCSAqIElmIHRoZSBleHBvbmVudCBsZW5ndGggaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIHdpbmRvdyBzaXplLCB0aGVuCi0gCSAqIHRoaXMgcGFkcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIHdpdGggemVyb3MgdG8gbm9ybWFsaXplIHRoZQotIAkgKiBzY2FubmluZyBsb29wIHRvIHRoZXJlJ3Mgbm8gc3BlY2lhbCBjYXNlcy4KLSAJICoKLSAJICogKiBOT1RFOiBNYWtpbmcgdGhlIHdpbmRvdyBzaXplIGEgcG93ZXIgb2YgdHdvIGxlc3MgdGhhbiB0aGUgbmF0aXZlCi0JICogKiB3b3JkIHNpemUgZW5zdXJlcyB0aGF0IHRoZSBwYWRkZWQgYml0cyB3b24ndCBnbyBwYXN0IHRoZSBsYXN0Ci0gCSAqICogd29yZCBpbiB0aGUgaW50ZXJuYWwgQklHTlVNIHN0cnVjdHVyZS4gR29pbmcgcGFzdCB0aGUgZW5kIHdpbGwKLSAJICogKiBzdGlsbCBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3VsdCwgYnV0IGNhdXNlcyBhIGRpZmZlcmVudCBicmFuY2gKLSAJICogKiB0byBiZSB0YWtlbiBpbiB0aGUgQk5faXNfYml0X3NldCBmdW5jdGlvbi4KLSAJICovCi0gCWJpdHMgPSAoKGJpdHMrd2luZG93LTEpL3dpbmRvdykqd2luZG93OwotIAlpZHg9Yml0cy0xOwkvKiBUaGUgdG9wIGJpdCBvZiB0aGUgd2luZG93ICovCi0KLSAJLyogU2NhbiB0aGUgZXhwb25lbnQgb25lIHdpbmRvdyBhdCBhIHRpbWUgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdAotIAkgKiBzaWduaWZpY2FudCBiaXRzLgotIAkgKi8KLSAJd2hpbGUgKGlkeCA+PSAwKQorCWJpdHMtLTsKKwlmb3IgKHd2YWx1ZT0wLCBpPWJpdHMld2luZG93OyBpPj0wOyBpLS0sYml0cy0tKQorCQl3dmFsdWUgPSAod3ZhbHVlPDwxKStCTl9pc19iaXRfc2V0KHAsYml0cyk7CisJaWYgKCFNT0RfRVhQX0NUSU1FX0NPUFlfRlJPTV9QUkVCVUYoJnRtcCx0b3AscG93ZXJidWYsd3ZhbHVlLG51bVBvd2VycykpIGdvdG8gZXJyOworIAorCS8qIFNjYW4gdGhlIGV4cG9uZW50IG9uZSB3aW5kb3cgYXQgYSB0aW1lIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QKKwkgKiBzaWduaWZpY2FudCBiaXRzLgorCSAqLworIAl3aGlsZSAoYml0cyA+PSAwKQogICAJCXsKICAJCXd2YWx1ZT0wOyAvKiBUaGUgJ3ZhbHVlJyBvZiB0aGUgd2luZG93ICovCiAgCQkKICAJCS8qIFNjYW4gdGhlIHdpbmRvdywgc3F1YXJpbmcgdGhlIHJlc3VsdCBhcyB3ZSBnbyAqLwotIAkJZm9yIChpPTA7IGk8d2luZG93OyBpKyssaWR4LS0pCisgCQlmb3IgKGk9MDsgaTx3aW5kb3c7IGkrKyxiaXRzLS0pCiAgCQkJewotCQkJaWYgKCFCTl9tb2RfbXVsX21vbnRnb21lcnkocixyLHIsbW9udCxjdHgpKQlnb3RvIGVycjsKLQkJCXd2YWx1ZSA9ICh3dmFsdWU8PDEpK0JOX2lzX2JpdF9zZXQocCxpZHgpOworCQkJaWYgKCFCTl9tb2RfbXVsX21vbnRnb21lcnkoJnRtcCwmdG1wLCZ0bXAsbW9udCxjdHgpKQlnb3RvIGVycjsKKwkJCXd2YWx1ZSA9ICh3dmFsdWU8PDEpK0JOX2lzX2JpdF9zZXQocCxiaXRzKTsKICAgCQkJfQogIAkJCiAJCS8qIEZldGNoIHRoZSBhcHByb3ByaWF0ZSBwcmUtY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGUgcHJlLWJ1ZiAqLwotCQlpZiAoIU1PRF9FWFBfQ1RJTUVfQ09QWV9GUk9NX1BSRUJVRihjb21wdXRlVGVtcCwgdG9wLCBwb3dlcmJ1Ziwgd3ZhbHVlLCBudW1Qb3dlcnMpKSBnb3RvIGVycjsKKwkJaWYgKCFNT0RfRVhQX0NUSU1FX0NPUFlfRlJPTV9QUkVCVUYoJmFtLCB0b3AsIHBvd2VyYnVmLCB3dmFsdWUsIG51bVBvd2VycykpIGdvdG8gZXJyOwogCiAgCQkvKiBNdWx0aXBseSB0aGUgcmVzdWx0IGludG8gdGhlIGludGVybWVkaWF0ZSByZXN1bHQgKi8KLSAJCWlmICghQk5fbW9kX211bF9tb250Z29tZXJ5KHIscixjb21wdXRlVGVtcCxtb250LGN0eCkpIGdvdG8gZXJyOworIAkJaWYgKCFCTl9tb2RfbXVsX21vbnRnb21lcnkoJnRtcCwmdG1wLCZhbSxtb250LGN0eCkpIGdvdG8gZXJyOwogICAJCX0KKwl9CiAKICAJLyogQ29udmVydCB0aGUgZmluYWwgcmVzdWx0IGZyb20gbW9udGdvbWVyeSB0byBzdGFuZGFyZCBmb3JtYXQgKi8KLQlpZiAoIUJOX2Zyb21fbW9udGdvbWVyeShycixyLG1vbnQsY3R4KSkgZ290byBlcnI7CisJaWYgKCFCTl9mcm9tX21vbnRnb21lcnkocnIsJnRtcCxtb250LGN0eCkpIGdvdG8gZXJyOwogCXJldD0xOwogZXJyOgogCWlmICgoaW5fbW9udCA9PSBOVUxMKSAmJiAobW9udCAhPSBOVUxMKSkgQk5fTU9OVF9DVFhfZnJlZShtb250KTsKIAlpZiAocG93ZXJidWYhPU5VTEwpCiAJCXsKIAkJT1BFTlNTTF9jbGVhbnNlKHBvd2VyYnVmLHBvd2VyYnVmTGVuKTsKLQkJT1BFTlNTTF9mcmVlKHBvd2VyYnVmRnJlZSk7CisJCWlmIChwb3dlcmJ1ZkZyZWUpIE9QRU5TU0xfZnJlZShwb3dlcmJ1ZkZyZWUpOwogCQl9Ci0gCWlmIChhbSE9TlVMTCkgQk5fY2xlYXIoYW0pOwotIAlpZiAoY29tcHV0ZVRlbXAhPU5VTEwpIEJOX2NsZWFyKGNvbXB1dGVUZW1wKTsKIAlCTl9DVFhfZW5kKGN0eCk7CiAJcmV0dXJuKHJldCk7CiAJfQpAQCAtOTg4LDQgKzEwOTUsMyBAQAogCWJuX2NoZWNrX3RvcChyKTsKIAlyZXR1cm4ocmV0KTsKIAl9Ci0KZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9nZjJtLmMgYi9jcnlwdG8vYm4vYm5fZ2YybS5jCmluZGV4IDQzMmEzYWEuLjA4YWI5ZmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9nZjJtLmMKKysrIGIvY3J5cHRvL2JuL2JuX2dmMm0uYwpAQCAtOTQsNiArOTQsOCBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSAiYm5fbGNsLmgiCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKIC8qIE1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYmVmb3JlIEJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyIHNob3VsZCBmYWlsLiAqLwogI2RlZmluZSBNQVhfSVRFUkFUSU9OUyA1MAogCkBAIC0xMjIsNiArMTI0LDcgQEAKICAgICBTUVJfdGJbKHcpID4+ICA0ICYgMHhGXSA8PCAgOCB8IFNRUl90YlsodykgICAgICAgJiAweEZdCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKE9QRU5TU0xfQk5fQVNNX0dGMm0pCiAvKiBQcm9kdWN0IG9mIHR3byBwb2x5bm9taWFscyBhLCBiIGVhY2ggd2l0aCBkZWdyZWUgPCBCTl9CSVRTMiAtIDEsCiAgKiByZXN1bHQgaXMgYSBwb2x5bm9taWFsIHIgd2l0aCBkZWdyZWUgPCAyICogQk5fQklUUyAtIDEKICAqIFRoZSBjYWxsZXIgTVVTVCBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGVzIGhhdmUgdGhlIHJpZ2h0IGFtb3VudApAQCAtMjE2LDcgKzIxOSw5IEBACiAJclsyXSBePSBtMSBeIHJbMV0gXiByWzNdOyAgLyogaDAgXj0gbTEgXiBsMSBeIGgxOyAqLwogCXJbMV0gPSByWzNdIF4gclsyXSBeIHJbMF0gXiBtMSBeIG0wOyAgLyogbDEgXj0gbDAgXiBoMCBeIG0wOyAqLwogCX0KLQorI2Vsc2UKK3ZvaWQgYm5fR0YybV9tdWxfMngyKEJOX1VMT05HICpyLCBCTl9VTE9ORyBhMSwgQk5fVUxPTkcgYTAsIEJOX1VMT05HIGIxLCBCTl9VTE9ORyBiMCk7CisjZW5kaWYgCiAKIC8qIEFkZCBwb2x5bm9taWFscyBhIGFuZCBiIGFuZCBzdG9yZSByZXN1bHQgaW4gcjsgciBjb3VsZCBiZSBhIG9yIGIsIGEgYW5kIGIgCiAgKiBjb3VsZCBiZSBlcXVhbDsgciBpcyB0aGUgYml0d2lzZSBYT1Igb2YgYSBhbmQgYi4KQEAgLTM2MCwyMSArMzY1LDE3IEBACiBpbnQJQk5fR0YybV9tb2QoQklHTlVNICpyLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqcCkKIAl7CiAJaW50IHJldCA9IDA7Ci0JY29uc3QgaW50IG1heCA9IEJOX251bV9iaXRzKHApICsgMTsKLQlpbnQgKmFycj1OVUxMOworCWludCBhcnJbNl07CiAJYm5fY2hlY2tfdG9wKGEpOwogCWJuX2NoZWNrX3RvcChwKTsKLQlpZiAoKGFyciA9IChpbnQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoaW50KSAqIG1heCkpID09IE5VTEwpIGdvdG8gZXJyOwotCXJldCA9IEJOX0dGMm1fcG9seTJhcnIocCwgYXJyLCBtYXgpOwotCWlmICghcmV0IHx8IHJldCA+IG1heCkKKwlyZXQgPSBCTl9HRjJtX3BvbHkyYXJyKHAsIGFyciwgc2l6ZW9mKGFycikvc2l6ZW9mKGFyclswXSkpOworCWlmICghcmV0IHx8IHJldCA+IChpbnQpKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKSkKIAkJewogCQlCTmVycihCTl9GX0JOX0dGMk1fTU9ELEJOX1JfSU5WQUxJRF9MRU5HVEgpOwotCQlnb3RvIGVycjsKKwkJcmV0dXJuIDA7CiAJCX0KIAlyZXQgPSBCTl9HRjJtX21vZF9hcnIociwgYSwgYXJyKTsKIAlibl9jaGVja190b3Aocik7Ci1lcnI6Ci0JaWYgKGFycikgT1BFTlNTTF9mcmVlKGFycik7CiAJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTUyMSw3ICs1MjIsNyBAQAogICovCiBpbnQgQk5fR0YybV9tb2RfaW52KEJJR05VTSAqciwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKnAsIEJOX0NUWCAqY3R4KQogCXsKLQlCSUdOVU0gKmIsICpjLCAqdSwgKnYsICp0bXA7CisJQklHTlVNICpiLCAqYyA9IE5VTEwsICp1ID0gTlVMTCwgKnYgPSBOVUxMLCAqdG1wOwogCWludCByZXQgPSAwOwogCiAJYm5fY2hlY2tfdG9wKGEpOwpAQCAtNTI5LDE4ICs1MzAsMTggQEAKIAogCUJOX0NUWF9zdGFydChjdHgpOwogCQotCWIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JYyA9IEJOX0NUWF9nZXQoY3R4KTsKLQl1ID0gQk5fQ1RYX2dldChjdHgpOwotCXYgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JaWYgKHYgPT0gTlVMTCkgZ290byBlcnI7CisJaWYgKChiID0gQk5fQ1RYX2dldChjdHgpKT09TlVMTCkgZ290byBlcnI7CisJaWYgKChjID0gQk5fQ1RYX2dldChjdHgpKT09TlVMTCkgZ290byBlcnI7CisJaWYgKCh1ID0gQk5fQ1RYX2dldChjdHgpKT09TlVMTCkgZ290byBlcnI7CisJaWYgKCh2ID0gQk5fQ1RYX2dldChjdHgpKT09TlVMTCkgZ290byBlcnI7CiAKLQlpZiAoIUJOX29uZShiKSkgZ290byBlcnI7CiAJaWYgKCFCTl9HRjJtX21vZCh1LCBhLCBwKSkgZ290byBlcnI7Ci0JaWYgKCFCTl9jb3B5KHYsIHApKSBnb3RvIGVycjsKLQogCWlmIChCTl9pc196ZXJvKHUpKSBnb3RvIGVycjsKIAorCWlmICghQk5fY29weSh2LCBwKSkgZ290byBlcnI7CisjaWYgMAorCWlmICghQk5fb25lKGIpKSBnb3RvIGVycjsKKwogCXdoaWxlICgxKQogCQl7CiAJCXdoaWxlICghQk5faXNfb2RkKHUpKQpAQCAtNTY1LDEzICs1NjYsODYgQEAKIAkJaWYgKCFCTl9HRjJtX2FkZCh1LCB1LCB2KSkgZ290byBlcnI7CiAJCWlmICghQk5fR0YybV9hZGQoYiwgYiwgYykpIGdvdG8gZXJyOwogCQl9CisjZWxzZQorCXsKKwlpbnQgaSwJdWJpdHMgPSBCTl9udW1fYml0cyh1KSwKKwkJdmJpdHMgPSBCTl9udW1fYml0cyh2KSwJLyogdiBpcyBjb3B5IG9mIHAgKi8KKwkJdG9wID0gcC0+dG9wOworCUJOX1VMT05HICp1ZHAsKmJkcCwqdmRwLCpjZHA7CiAKKwlibl93ZXhwYW5kKHUsdG9wKTsJdWRwID0gdS0+ZDsKKwkJCQlmb3IgKGk9dS0+dG9wO2k8dG9wO2krKykgdWRwW2ldID0gMDsKKwkJCQl1LT50b3AgPSB0b3A7CisJYm5fd2V4cGFuZChiLHRvcCk7CWJkcCA9IGItPmQ7CisJCQkJYmRwWzBdID0gMTsKKwkJCQlmb3IgKGk9MTtpPHRvcDtpKyspIGJkcFtpXSA9IDA7CisJCQkJYi0+dG9wID0gdG9wOworCWJuX3dleHBhbmQoYyx0b3ApOwljZHAgPSBjLT5kOworCQkJCWZvciAoaT0wO2k8dG9wO2krKykgY2RwW2ldID0gMDsKKwkJCQljLT50b3AgPSB0b3A7CisJdmRwID0gdi0+ZDsJLyogSXQgcGF5cyBvZmYgdG8gImNhY2hlIiAqLT5kIHBvaW50ZXJzLCBiZWNhdXNlCisJCQkgKiBpdCBhbGxvd3Mgb3B0aW1pemVyIHRvIGJlIG1vcmUgYWdncmVzc2l2ZS4KKwkJCSAqIEJ1dCB3ZSBkb24ndCBoYXZlIHRvICJjYWNoZSIgcC0+ZCwgYmVjYXVzZSAqcAorCQkJICogaXMgZGVjbGFyZWQgJ2NvbnN0Jy4uLiAqLworCXdoaWxlICgxKQorCQl7CisJCXdoaWxlICh1Yml0cyAmJiAhKHVkcFswXSYxKSkKKwkJCXsKKwkJCUJOX1VMT05HIHUwLHUxLGIwLGIxLG1hc2s7CisKKwkJCXUwICAgPSB1ZHBbMF07CisJCQliMCAgID0gYmRwWzBdOworCQkJbWFzayA9IChCTl9VTE9ORykwLShiMCYxKTsKKwkJCWIwICBePSBwLT5kWzBdJm1hc2s7CisJCQlmb3IgKGk9MDtpPHRvcC0xO2krKykKKwkJCQl7CisJCQkJdTEgPSB1ZHBbaSsxXTsKKwkJCQl1ZHBbaV0gPSAoKHUwPj4xKXwodTE8PChCTl9CSVRTMi0xKSkpJkJOX01BU0syOworCQkJCXUwID0gdTE7CisJCQkJYjEgPSBiZHBbaSsxXV4ocC0+ZFtpKzFdJm1hc2spOworCQkJCWJkcFtpXSA9ICgoYjA+PjEpfChiMTw8KEJOX0JJVFMyLTEpKSkmQk5fTUFTSzI7CisJCQkJYjAgPSBiMTsKKwkJCQl9CisJCQl1ZHBbaV0gPSB1MD4+MTsKKwkJCWJkcFtpXSA9IGIwPj4xOworCQkJdWJpdHMtLTsKKwkJCX0KKworCQlpZiAodWJpdHM8PUJOX0JJVFMyICYmIHVkcFswXT09MSkgYnJlYWs7CisKKwkJaWYgKHViaXRzPHZiaXRzKQorCQkJeworCQkJaSA9IHViaXRzOyB1Yml0cyA9IHZiaXRzOyB2Yml0cyA9IGk7CisJCQl0bXAgPSB1OyB1ID0gdjsgdiA9IHRtcDsKKwkJCXRtcCA9IGI7IGIgPSBjOyBjID0gdG1wOworCQkJdWRwID0gdmRwOyB2ZHAgPSB2LT5kOworCQkJYmRwID0gY2RwOyBjZHAgPSBjLT5kOworCQkJfQorCQlmb3IoaT0wO2k8dG9wO2krKykKKwkJCXsKKwkJCXVkcFtpXSBePSB2ZHBbaV07CisJCQliZHBbaV0gXj0gY2RwW2ldOworCQkJfQorCQlpZiAodWJpdHM9PXZiaXRzKQorCQkJeworCQkJYm5fY29ycmVjdF90b3AodSk7CisJCQl1Yml0cyA9IEJOX251bV9iaXRzKHUpOworCQkJfQorCQl9CisJYm5fY29ycmVjdF90b3AoYik7CisJfQorI2VuZGlmCiAKIAlpZiAoIUJOX2NvcHkociwgYikpIGdvdG8gZXJyOwogCWJuX2NoZWNrX3RvcChyKTsKIAlyZXQgPSAxOwogCiBlcnI6CisjaWZkZWYgQk5fREVCVUcgLyogQk5fQ1RYX2VuZCB3b3VsZCBjb21wbGFpbiBhYm91dCB0aGUgZXhwYW5kZWQgZm9ybSAqLworICAgICAgICBibl9jb3JyZWN0X3RvcChjKTsKKyAgICAgICAgYm5fY29ycmVjdF90b3AodSk7CisgICAgICAgIGJuX2NvcnJlY3RfdG9wKHYpOworI2VuZGlmCiAgIAlCTl9DVFhfZW5kKGN0eCk7CiAJcmV0dXJuIHJldDsKIAl9CkBAIC0xMDMzLDMgKzExMDcsNCBAQAogCXJldHVybiAxOwogCX0KIAorI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYm5fbGNsLmggYi9jcnlwdG8vYm4vYm5fbGNsLmgKaW5kZXggOGU1ZTk4ZS4uZWVjZmQ4YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JuX2xjbC5oCisrKyBiL2NyeXB0by9ibi9ibl9sY2wuaApAQCAtMjM4LDcgKzIzOCw3IEBACiAjICBpZiBkZWZpbmVkKF9fREVDQykKICMgICBpbmNsdWRlIDxjX2FzbS5oPgogIyAgIGRlZmluZSBCTl9VTVVMVF9ISUdIKGEsYikJKEJOX1VMT05HKWFzbSgidW11bGggJWEwLCVhMSwldjAiLChhKSwoYikpCi0jICBlbGlmIGRlZmluZWQoX19HTlVDX18pCisjICBlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yCiAjICAgZGVmaW5lIEJOX1VNVUxUX0hJR0goYSxiKQkoewlcCiAJcmVnaXN0ZXIgQk5fVUxPTkcgcmV0OwkJXAogCWFzbSAoInVtdWxoCSUxLCUyLCUwIglcCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlyZXQ7CQkJfSkKICMgIGVuZGlmCS8qIGNvbXBpbGVyICovCiAjIGVsaWYgZGVmaW5lZChfQVJDSF9QUEMpICYmIGRlZmluZWQoX182NEJJVF9fKSAmJiBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpCi0jICBpZiBkZWZpbmVkKF9fR05VQ19fKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIKICMgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCSh7CVwKIAlyZWdpc3RlciBCTl9VTE9ORyByZXQ7CQlcCiAJYXNtICgibXVsaGR1CSUwLCUxLCUyIglcCkBAIC0yNTcsNyArMjU3LDcgQEAKICMgIGVuZGlmCS8qIGNvbXBpbGVyICovCiAjIGVsaWYgKGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykpICYmIFwKICAgICAgICAoZGVmaW5lZChTSVhUWV9GT1VSX0JJVF9MT05HKSB8fCBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUKSkKLSMgIGlmIGRlZmluZWQoX19HTlVDX18pCisjICBpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MgogIyAgIGRlZmluZSBCTl9VTVVMVF9ISUdIKGEsYikJKHsJXAogCXJlZ2lzdGVyIEJOX1VMT05HIHJldCxkaXNjYXJkOwlcCiAJYXNtICgibXVscQklMyIJCVwKQEAgLTI4MCw2ICsyODAsMTkgQEAKICMgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCQlfX3VtdWxoKChhKSwoYikpCiAjICAgZGVmaW5lIEJOX1VNVUxUX0xPSEkobG93LGhpZ2gsYSxiKQkoKGxvdyk9X3VtdWwxMjgoKGEpLChiKSwmKGhpZ2gpKSkKICMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX21pcHMpICYmIChkZWZpbmVkKFNJWFRZX0ZPVVJfQklUKSB8fCBkZWZpbmVkKFNJWFRZX0ZPVVJfQklUX0xPTkcpKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIKKyMgICBkZWZpbmUgQk5fVU1VTFRfSElHSChhLGIpCSh7CVwKKwlyZWdpc3RlciBCTl9VTE9ORyByZXQ7CQlcCisJYXNtICgiZG11bHR1CSUxLCUyIgkJXAorCSAgICAgOiAiPWgiKHJldCkJCVwKKwkgICAgIDogInIiKGEpLCAiciIoYikgOiAibCIpOwlcCisJcmV0OwkJCX0pCisjICAgZGVmaW5lIEJOX1VNVUxUX0xPSEkobG93LGhpZ2gsYSxiKQlcCisJYXNtICgiZG11bHR1CSUyLCUzIgkJXAorCSAgICAgOiAiPWwiKGxvdyksIj1oIihoaWdoKQlcCisJICAgICA6ICJyIihhKSwgInIiKGIpKTsKKyMgIGVuZGlmCiAjIGVuZGlmCQkvKiBjcHUgKi8KICNlbmRpZgkJLyogT1BFTlNTTF9OT19BU00gKi8KIApAQCAtNDU5LDYgKzQ3MiwxMCBAQAogCX0KICNlbmRpZiAvKiAhQk5fTExPTkcgKi8KIAorI2lmIGRlZmluZWQoT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKyN1bmRlZiBibl9kaXZfd29yZHMKKyNlbmRpZgorCiB2b2lkIGJuX211bF9ub3JtYWwoQk5fVUxPTkcgKnIsQk5fVUxPTkcgKmEsaW50IG5hLEJOX1VMT05HICpiLGludCBuYik7CiB2b2lkIGJuX211bF9jb21iYTgoQk5fVUxPTkcgKnIsQk5fVUxPTkcgKmEsQk5fVUxPTkcgKmIpOwogdm9pZCBibl9tdWxfY29tYmE0KEJOX1VMT05HICpyLEJOX1VMT05HICphLEJOX1VMT05HICpiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9saWIuYyBiL2NyeXB0by9ibi9ibl9saWIuYwppbmRleCA1NDcwZmJlLi43YTU2NzZkIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fbGliLmMKKysrIGIvY3J5cHRvL2JuL2JuX2xpYi5jCkBAIC0xMzksMjUgKzEzOSw2IEBACiAJcmV0dXJuKCZjb25zdF9vbmUpOwogCX0KIAotY2hhciAqQk5fb3B0aW9ucyh2b2lkKQotCXsKLQlzdGF0aWMgaW50IGluaXQ9MDsKLQlzdGF0aWMgY2hhciBkYXRhWzE2XTsKLQotCWlmICghaW5pdCkKLQkJewotCQlpbml0Kys7Ci0jaWZkZWYgQk5fTExPTkcKLQkJQklPX3NucHJpbnRmKGRhdGEsc2l6ZW9mIGRhdGEsImJuKCVkLCVkKSIsCi0JCQkgICAgIChpbnQpc2l6ZW9mKEJOX1VMTE9ORykqOCwoaW50KXNpemVvZihCTl9VTE9ORykqOCk7Ci0jZWxzZQotCQlCSU9fc25wcmludGYoZGF0YSxzaXplb2YgZGF0YSwiYm4oJWQsJWQpIiwKLQkJCSAgICAgKGludClzaXplb2YoQk5fVUxPTkcpKjgsKGludClzaXplb2YoQk5fVUxPTkcpKjgpOwotI2VuZGlmCi0JCX0KLQlyZXR1cm4oZGF0YSk7Ci0JfQotCiBpbnQgQk5fbnVtX2JpdHNfd29yZChCTl9VTE9ORyBsKQogCXsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaXRzWzI1Nl09ewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX21vbnQuYyBiL2NyeXB0by9ibi9ibl9tb250LmMKaW5kZXggMWE4NjY4OC4uNDI3YjVjZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JuX21vbnQuYworKysgYi9jcnlwdG8vYm4vYm5fbW9udC5jCkBAIC0xNzcsMzEgKzE3NywyNiBAQAogc3RhdGljIGludCBCTl9mcm9tX21vbnRnb21lcnlfd29yZChCSUdOVU0gKnJldCwgQklHTlVNICpyLCBCTl9NT05UX0NUWCAqbW9udCkKIAl7CiAJQklHTlVNICpuOwotCUJOX1VMT05HICphcCwqbnAsKnJwLG4wLHYsKm5ycDsKLQlpbnQgYWwsbmwsbWF4LGkseCxyaTsKKwlCTl9VTE9ORyAqYXAsKm5wLCpycCxuMCx2LGNhcnJ5OworCWludCBubCxtYXgsaTsKIAogCW49ICYobW9udC0+Tik7Ci0JLyogbW9udC0+cmkgaXMgdGhlIHNpemUgb2YgbW9udC0+TiBpbiBiaXRzIChyb3VuZGVkIHVwCi0JICAgdG8gdGhlIHdvcmQgc2l6ZSkgKi8KLQlhbD1yaT1tb250LT5yaS9CTl9CSVRTMjsKLQogCW5sPW4tPnRvcDsKLQlpZiAoKGFsID09IDApIHx8IChubCA9PSAwKSkgeyByZXQtPnRvcD0wOyByZXR1cm4oMSk7IH0KKwlpZiAobmwgPT0gMCkgeyByZXQtPnRvcD0wOyByZXR1cm4oMSk7IH0KIAotCW1heD0obmwrYWwrMSk7IC8qIGFsbG93IGZvciBvdmVyZmxvdyAobm8/KSBYWFggKi8KKwltYXg9KDIqbmwpOyAvKiBjYXJyeSBpcyBzdG9yZWQgc2VwYXJhdGVseSAqLwogCWlmIChibl93ZXhwYW5kKHIsbWF4KSA9PSBOVUxMKSByZXR1cm4oMCk7CiAKIAlyLT5uZWdePW4tPm5lZzsKIAlucD1uLT5kOwogCXJwPXItPmQ7Ci0JbnJwPSAmKHItPmRbbmxdKTsKIAogCS8qIGNsZWFyIHRoZSB0b3Agd29yZHMgb2YgVCAqLwogI2lmIDEKIAlmb3IgKGk9ci0+dG9wOyBpPG1heDsgaSsrKSAvKiBtZW1zZXQ/IFhYWCAqLwotCQlyLT5kW2ldPTA7CisJCXJwW2ldPTA7CiAjZWxzZQotCW1lbXNldCgmKHItPmRbci0+dG9wXSksMCwobWF4LXItPnRvcCkqc2l6ZW9mKEJOX1VMT05HKSk7IAorCW1lbXNldCgmKHJwW3ItPnRvcF0pLDAsKG1heC1yLT50b3ApKnNpemVvZihCTl9VTE9ORykpOyAKICNlbmRpZgogCiAJci0+dG9wPW1heDsKQEAgLTIxMCw3ICsyMDUsNyBAQAogI2lmZGVmIEJOX0NPVU5UCiAJZnByaW50ZihzdGRlcnIsIndvcmQgQk5fZnJvbV9tb250Z29tZXJ5X3dvcmQgJWQgKiAlZFxuIixubCxubCk7CiAjZW5kaWYKLQlmb3IgKGk9MDsgaTxubDsgaSsrKQorCWZvciAoY2Fycnk9MCwgaT0wOyBpPG5sOyBpKyssIHJwKyspCiAJCXsKICNpZmRlZiBfX1RBTkRFTQogICAgICAgICAgICAgICAgIHsKQEAgLTIyOCw2MSArMjIzLDMzIEBACiAjZWxzZQogCQl2PWJuX211bF9hZGRfd29yZHMocnAsbnAsbmwsKHJwWzBdKm4wKSZCTl9NQVNLMik7CiAjZW5kaWYKLQkJbnJwKys7Ci0JCXJwKys7Ci0JCWlmICgoKG5ycFstMV0rPXYpJkJOX01BU0syKSA+PSB2KQotCQkJY29udGludWU7Ci0JCWVsc2UKLQkJCXsKLQkJCWlmICgoKCsrbnJwWzBdKSZCTl9NQVNLMikgIT0gMCkgY29udGludWU7Ci0JCQlpZiAoKCgrK25ycFsxXSkmQk5fTUFTSzIpICE9IDApIGNvbnRpbnVlOwotCQkJZm9yICh4PTI7ICgoKCsrbnJwW3hdKSZCTl9NQVNLMikgPT0gMCk7IHgrKykgOwotCQkJfQorCQl2ID0gKHYrY2FycnkrcnBbbmxdKSZCTl9NQVNLMjsKKwkJY2FycnkgfD0gKHYgIT0gcnBbbmxdKTsKKwkJY2FycnkgJj0gKHYgPD0gcnBbbmxdKTsKKwkJcnBbbmxdPXY7CiAJCX0KLQlibl9jb3JyZWN0X3RvcChyKTsKIAotCS8qIG1vbnQtPnJpIHdpbGwgYmUgYSBtdWx0aXBsZSBvZiB0aGUgd29yZCBzaXplIGFuZCBiZWxvdyBjb2RlCi0JICogaXMga2luZCBvZiBCTl9yc2hpZnQocmV0LHIsbW9udC0+cmkpIGVxdWl2YWxlbnQgKi8KLQlpZiAoci0+dG9wIDw9IHJpKQotCQl7Ci0JCXJldC0+dG9wPTA7Ci0JCXJldHVybigxKTsKLQkJfQotCWFsPXItPnRvcC1yaTsKLQotI2RlZmluZSBCUkFOQ0hfRlJFRSAxCi0jaWYgQlJBTkNIX0ZSRUUKLQlpZiAoYm5fd2V4cGFuZChyZXQscmkpID09IE5VTEwpIHJldHVybigwKTsKLQl4PTAtKCgoYWwtcmkpPj4oc2l6ZW9mKGFsKSo4LTEpKSYxKTsKLQlyZXQtPnRvcD14PShyaSZ+eCl8KGFsJngpOwkvKiBtaW4ocmksYWwpICovCisJaWYgKGJuX3dleHBhbmQocmV0LG5sKSA9PSBOVUxMKSByZXR1cm4oMCk7CisJcmV0LT50b3A9bmw7CiAJcmV0LT5uZWc9ci0+bmVnOwogCiAJcnA9cmV0LT5kOwotCWFwPSYoci0+ZFtyaV0pOworCWFwPSYoci0+ZFtubF0pOwogCisjZGVmaW5lIEJSQU5DSF9GUkVFIDEKKyNpZiBCUkFOQ0hfRlJFRQogCXsKLQlzaXplX3QgbTEsbTI7CisJQk5fVUxPTkcgKm5ycDsKKwlzaXplX3QgbTsKIAotCXY9Ym5fc3ViX3dvcmRzKHJwLGFwLG5wLHJpKTsKLQkvKiB0aGlzIC0tLS0tLS0tLS0tLS0tLS1eXiB3b3JrcyBldmVuIGluIGFsPHJpIGNhc2UKLQkgKiB0aGFua3MgdG8gemVhbG91cyB6ZXJvaW5nIG9mIHRvcCBvZiB0aGUgdmVjdG9yIGluIHRoZQotCSAqIGJlZ2lubmluZy4gKi8KLQotCS8qIGlmIChhbD09cmkgJiYgIXYpIHx8IGFsPnJpKSBucnA9cnA7IGVsc2UgbnJwPWFwOyAqLwotCS8qIGluIG90aGVyIHdvcmRzIGlmIHN1YnRyYWN0aW9uIHJlc3VsdCBpcyByZWFsLCB0aGVuCisJdj1ibl9zdWJfd29yZHMocnAsYXAsbnAsbmwpLWNhcnJ5OworCS8qIGlmIHN1YnRyYWN0aW9uIHJlc3VsdCBpcyByZWFsLCB0aGVuCiAJICogdHJpY2sgdW5jb25kaXRpb25hbCBtZW1jcHkgYmVsb3cgdG8gcGVyZm9ybSBpbi1wbGFjZQogCSAqICJyZWZyZXNoIiBpbnN0ZWFkIG9mIGFjdHVhbCBjb3B5LiAqLwotCW0xPTAtKHNpemVfdCkoKChhbC1yaSk+PihzaXplb2YoYWwpKjgtMSkpJjEpOwkvKiBhbDxyaSAqLwotCW0yPTAtKHNpemVfdCkoKChyaS1hbCk+PihzaXplb2YoYWwpKjgtMSkpJjEpOwkvKiBhbD5yaSAqLwotCW0xfD1tMjsJCQkvKiAoYWwhPXJpKSAqLwotCW0xfD0oMC0oc2l6ZV90KXYpOwkvKiAoYWwhPXJpIHx8IHYpICovCi0JbTEmPX5tMjsJCS8qIChhbCE9cmkgfHwgdikgJiYgIWFsPnJpICovCi0JbnJwPShCTl9VTE9ORyAqKSgoKFBUUl9TSVpFX0lOVClycCZ+bTEpfCgoUFRSX1NJWkVfSU5UKWFwJm0xKSk7Ci0JfQorCW09KDAtKHNpemVfdCl2KTsKKwlucnA9KEJOX1VMT05HICopKCgoUFRSX1NJWkVfSU5UKXJwJn5tKXwoKFBUUl9TSVpFX0lOVClhcCZtKSk7CiAKLQkvKiAnaTxyaScgaXMgY2hvc2VuIHRvIGVsaW1pbmF0ZSBkZXBlbmRlbmN5IG9uIGlucHV0IGRhdGEsIGV2ZW4KLQkgKiB0aG91Z2ggaXQgcmVzdWx0cyBpbiByZWR1bmRhbnQgY29weSBpbiBhbDxyaSBjYXNlLiAqLwotCWZvciAoaT0wLHJpLT00OyBpPHJpOyBpKz00KQorCWZvciAoaT0wLG5sLT00OyBpPG5sOyBpKz00KQogCQl7CiAJCUJOX1VMT05HIHQxLHQyLHQzLHQ0OwogCQkKQEAgLTI5NSw0MCArMjYyLDE1IEBACiAJCXJwW2krMl09dDM7CiAJCXJwW2krM109dDQ7CiAJCX0KLQlmb3IgKHJpKz00OyBpPHJpOyBpKyspCisJZm9yIChubCs9NDsgaTxubDsgaSsrKQogCQlycFtpXT1ucnBbaV0sIGFwW2ldPTA7CisJfQorI2Vsc2UKKwlpZiAoYm5fc3ViX3dvcmRzIChycCxhcCxucCxubCktY2FycnkpCisJCW1lbWNweShycCxhcCxubCpzaXplb2YoQk5fVUxPTkcpKTsKKyNlbmRpZgogCWJuX2NvcnJlY3RfdG9wKHIpOwogCWJuX2NvcnJlY3RfdG9wKHJldCk7Ci0jZWxzZQotCWlmIChibl93ZXhwYW5kKHJldCxhbCkgPT0gTlVMTCkgcmV0dXJuKDApOwotCXJldC0+dG9wPWFsOwotCXJldC0+bmVnPXItPm5lZzsKLQotCXJwPXJldC0+ZDsKLQlhcD0mKHItPmRbcmldKTsKLQlhbC09NDsKLQlmb3IgKGk9MDsgaTxhbDsgaSs9NCkKLQkJewotCQlCTl9VTE9ORyB0MSx0Mix0Myx0NDsKLQkJCi0JCXQxPWFwW2krMF07Ci0JCXQyPWFwW2krMV07Ci0JCXQzPWFwW2krMl07Ci0JCXQ0PWFwW2krM107Ci0JCXJwW2krMF09dDE7Ci0JCXJwW2krMV09dDI7Ci0JCXJwW2krMl09dDM7Ci0JCXJwW2krM109dDQ7Ci0JCX0KLQlhbCs9NDsKLQlmb3IgKDsgaTxhbDsgaSsrKQotCQlycFtpXT1hcFtpXTsKLQotCWlmIChCTl91Y21wKHJldCwgJihtb250LT5OKSkgPj0gMCkKLQkJewotCQlpZiAoIUJOX3VzdWIocmV0LHJldCwmKG1vbnQtPk4pKSkgcmV0dXJuKDApOwotCQl9Ci0jZW5kaWYKIAlibl9jaGVja190b3AocmV0KTsKIAogCXJldHVybigxKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9ibi9ibl9uaXN0LmMgYi9jcnlwdG8vYm4vYm5fbmlzdC5jCmluZGV4IGM2ZGUwMzIuLjQzY2FlZTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9uaXN0LmMKKysrIGIvY3J5cHRvL2JuL2JuX25pc3QuYwpAQCAtMzE5LDYgKzMxOSwxMyBAQAogCQkJCQkJOih0b1sobikvMl0gPSgobSkmMSk/KGZyb21bKG0pLzJdPj4zMik6KGZyb21bKG0pLzJdJkJOX01BU0sybCkpKQogI2RlZmluZSBibl8zMl9zZXRfMCh0bywgbikJCSgoKG4pJjEpPyh0b1sobikvMl0mPUJOX01BU0sybCk6KHRvWyhuKS8yXT0wKSk7CiAjZGVmaW5lIGJuX2NwXzMyKHRvLG4sZnJvbSxtKQkJKChtKT49MCk/Ym5fY3BfMzJfbmFrZWQodG8sbixmcm9tLG0pOmJuXzMyX3NldF8wKHRvLG4pCisjIGlmIGRlZmluZWQoTF9FTkRJQU4pCisjICBpZiBkZWZpbmVkKF9fYXJjaDY0X18pCisjICAgZGVmaW5lIE5JU1RfSU5UNjQgbG9uZworIyAgZWxzZQorIyAgIGRlZmluZSBOSVNUX0lOVDY0IGxvbmcgbG9uZworIyAgZW5kaWYKKyMgZW5kaWYKICNlbHNlCiAjZGVmaW5lIGJuX2NwXzY0KHRvLCBuLCBmcm9tLCBtKSBcCiAJeyBcCkBAIC0zMzAsMTMgKzMzNywxNSBAQAogCWJuXzMyX3NldF8wKHRvLCAobikqMik7IFwKIAlibl8zMl9zZXRfMCh0bywgKG4pKjIrMSk7IFwKIAl9Ci0jaWYgQk5fQklUUzIgPT0gMzIKICNkZWZpbmUgYm5fY3BfMzIodG8sIG4sIGZyb20sIG0pCSh0bylbbl0gPSAobT49MCk/KChmcm9tKVttXSk6MDsKICNkZWZpbmUgYm5fMzJfc2V0XzAodG8sIG4pCQkodG8pW25dID0gKEJOX1VMT05HKTA7Ci0jZW5kaWYKKyMgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIE5JU1RfSU5UNjQgX19pbnQ2NAorIyBlbGlmIGRlZmluZWQoQk5fTExPTkcpCisjICBkZWZpbmUgTklTVF9JTlQ2NCBsb25nIGxvbmcKKyMgZW5kaWYKICNlbmRpZiAvKiBCTl9CSVRTMiAhPSA2NCAqLwogCi0KICNkZWZpbmUgbmlzdF9zZXRfMTkyKHRvLCBmcm9tLCBhMSwgYTIsIGEzKSBcCiAJeyBcCiAJYm5fY3BfNjQodG8sIDAsIGZyb20sIChhMykgLSAzKSBcCkBAIC0zNTAsOSArMzU5LDExIEBACiAJaW50ICAgICAgdG9wID0gYS0+dG9wLCBpOwogCWludCAgICAgIGNhcnJ5OwogCXJlZ2lzdGVyIEJOX1VMT05HICpyX2QsICphX2QgPSBhLT5kOwotCUJOX1VMT05HIHRfZFtCTl9OSVNUXzE5Ml9UT1BdLAotCSAgICAgICAgIGJ1ZltCTl9OSVNUXzE5Ml9UT1BdLAotCQkgY19kW0JOX05JU1RfMTkyX1RPUF0sCisJdW5pb24JeworCQlCTl9VTE9ORwlibltCTl9OSVNUXzE5Ml9UT1BdOworCQl1bnNpZ25lZCBpbnQJdWlbQk5fTklTVF8xOTJfVE9QKnNpemVvZihCTl9VTE9ORykvc2l6ZW9mKHVuc2lnbmVkIGludCldOworCQl9IGJ1ZjsKKwlCTl9VTE9ORyBjX2RbQk5fTklTVF8xOTJfVE9QXSwKIAkJKnJlczsKIAlQVFJfU0laRV9JTlQgbWFzazsKIAlzdGF0aWMgY29uc3QgQklHTlVNIF9iaWdudW1fbmlzdF9wXzE5Ml9zcXIgPSB7CkBAIC0zODUsMTUgKzM5Niw0OCBAQAogCWVsc2UKIAkJcl9kID0gYV9kOwogCi0JbmlzdF9jcF9ibl8wKGJ1ZiwgYV9kICsgQk5fTklTVF8xOTJfVE9QLCB0b3AgLSBCTl9OSVNUXzE5Ml9UT1AsIEJOX05JU1RfMTkyX1RPUCk7CisJbmlzdF9jcF9ibl8wKGJ1Zi5ibiwgYV9kICsgQk5fTklTVF8xOTJfVE9QLCB0b3AgLSBCTl9OSVNUXzE5Ml9UT1AsIEJOX05JU1RfMTkyX1RPUCk7CiAKLQluaXN0X3NldF8xOTIodF9kLCBidWYsIDAsIDMsIDMpOworI2lmIGRlZmluZWQoTklTVF9JTlQ2NCkKKwl7CisJTklTVF9JTlQ2NAkJYWNjOwkvKiBhY2N1bXVsYXRvciAqLworCXVuc2lnbmVkIGludAkJKnJwPSh1bnNpZ25lZCBpbnQgKilyX2Q7CisJY29uc3QgdW5zaWduZWQgaW50CSpicD0oY29uc3QgdW5zaWduZWQgaW50ICopYnVmLnVpOworCisJYWNjICA9IHJwWzBdOwlhY2MgKz0gYnBbMyoyLTZdOworCQkJYWNjICs9IGJwWzUqMi02XTsgcnBbMF0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFsxXTsJYWNjICs9IGJwWzMqMi01XTsKKwkJCWFjYyArPSBicFs1KjItNV07IHJwWzFdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbMl07CWFjYyArPSBicFszKjItNl07CisJCQlhY2MgKz0gYnBbNCoyLTZdOworCQkJYWNjICs9IGJwWzUqMi02XTsgcnBbMl0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFszXTsJYWNjICs9IGJwWzMqMi01XTsKKwkJCWFjYyArPSBicFs0KjItNV07CisJCQlhY2MgKz0gYnBbNSoyLTVdOyBycFszXSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzRdOwlhY2MgKz0gYnBbNCoyLTZdOworCQkJYWNjICs9IGJwWzUqMi02XTsgcnBbNF0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFs1XTsJYWNjICs9IGJwWzQqMi01XTsKKwkJCWFjYyArPSBicFs1KjItNV07IHJwWzVdID0gKHVuc2lnbmVkIGludClhY2M7CisKKwljYXJyeSA9IChpbnQpKGFjYz4+MzIpOworCX0KKyNlbHNlCisJeworCUJOX1VMT05HIHRfZFtCTl9OSVNUXzE5Ml9UT1BdOworCisJbmlzdF9zZXRfMTkyKHRfZCwgYnVmLmJuLCAwLCAzLCAzKTsKIAljYXJyeSA9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMTkyX1RPUCk7Ci0JbmlzdF9zZXRfMTkyKHRfZCwgYnVmLCA0LCA0LCAwKTsKKwluaXN0X3NldF8xOTIodF9kLCBidWYuYm4sIDQsIDQsIDApOwogCWNhcnJ5ICs9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMTkyX1RPUCk7Ci0JbmlzdF9zZXRfMTkyKHRfZCwgYnVmLCA1LCA1LCA1KQorCW5pc3Rfc2V0XzE5Mih0X2QsIGJ1Zi5ibiwgNSwgNSwgNSkKIAljYXJyeSArPSAoaW50KWJuX2FkZF93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzE5Ml9UT1ApOwotCisJfQorI2VuZGlmCiAJaWYgKGNhcnJ5ID4gMCkKIAkJY2FycnkgPSAoaW50KWJuX3N1Yl93b3JkcyhyX2Qscl9kLF9uaXN0X3BfMTkyW2NhcnJ5LTFdLEJOX05JU1RfMTkyX1RPUCk7CiAJZWxzZQpAQCAtNDM1LDggKzQ3OSw3IEBACiAJaW50CXRvcCA9IGEtPnRvcCwgaTsKIAlpbnQJY2Fycnk7CiAJQk5fVUxPTkcgKnJfZCwgKmFfZCA9IGEtPmQ7Ci0JQk5fVUxPTkcgdF9kW0JOX05JU1RfMjI0X1RPUF0sCi0JICAgICAgICAgYnVmW0JOX05JU1RfMjI0X1RPUF0sCisJQk5fVUxPTkcgYnVmW0JOX05JU1RfMjI0X1RPUF0sCiAJCSBjX2RbQk5fTklTVF8yMjRfVE9QXSwKIAkJKnJlczsKIAlQVFJfU0laRV9JTlQgbWFzazsKQEAgLTQ3NCwxNCArNTE3LDU0IEBACiAKICNpZiBCTl9CSVRTMj09NjQKIAkvKiBjb3B5IHVwcGVyIDI1NiBiaXRzIG9mIDQ0OCBiaXQgbnVtYmVyIC4uLiAqLwotCW5pc3RfY3BfYm5fMCh0X2QsIGFfZCArIChCTl9OSVNUXzIyNF9UT1AtMSksIHRvcCAtIChCTl9OSVNUXzIyNF9UT1AtMSksIEJOX05JU1RfMjI0X1RPUCk7CisJbmlzdF9jcF9ibl8wKGNfZCwgYV9kICsgKEJOX05JU1RfMjI0X1RPUC0xKSwgdG9wIC0gKEJOX05JU1RfMjI0X1RPUC0xKSwgQk5fTklTVF8yMjRfVE9QKTsKIAkvKiAuLi4gYW5kIHJpZ2h0IHNoaWZ0IGJ5IDMyIHRvIG9idGFpbiB1cHBlciAyMjQgYml0cyAqLwotCW5pc3Rfc2V0XzIyNChidWYsIHRfZCwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKwluaXN0X3NldF8yMjQoYnVmLCBjX2QsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCk7CiAJLyogdHJ1bmNhdGUgbG93ZXIgcGFydCB0byAyMjQgYml0cyB0b28gKi8KIAlyX2RbQk5fTklTVF8yMjRfVE9QLTFdICY9IEJOX01BU0sybDsKICNlbHNlCiAJbmlzdF9jcF9ibl8wKGJ1ZiwgYV9kICsgQk5fTklTVF8yMjRfVE9QLCB0b3AgLSBCTl9OSVNUXzIyNF9UT1AsIEJOX05JU1RfMjI0X1RPUCk7CiAjZW5kaWYKKworI2lmIGRlZmluZWQoTklTVF9JTlQ2NCkgJiYgQk5fQklUUzIhPTY0CisJeworCU5JU1RfSU5UNjQJCWFjYzsJLyogYWNjdW11bGF0b3IgKi8KKwl1bnNpZ25lZCBpbnQJCSpycD0odW5zaWduZWQgaW50ICopcl9kOworCWNvbnN0IHVuc2lnbmVkIGludAkqYnA9KGNvbnN0IHVuc2lnbmVkIGludCAqKWJ1ZjsKKworCWFjYyAgPSBycFswXTsJYWNjIC09IGJwWzctN107CisJCQlhY2MgLT0gYnBbMTEtN107IHJwWzBdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbMV07CWFjYyAtPSBicFs4LTddOworCQkJYWNjIC09IGJwWzEyLTddOyBycFsxXSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzJdOwlhY2MgLT0gYnBbOS03XTsKKwkJCWFjYyAtPSBicFsxMy03XTsgcnBbMl0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFszXTsJYWNjICs9IGJwWzctN107CisJCQlhY2MgKz0gYnBbMTEtN107CisJCQlhY2MgLT0gYnBbMTAtN107IHJwWzNdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYz4+PSAzMjsKKworCWFjYyArPSBycFs0XTsJYWNjICs9IGJwWzgtN107CisJCQlhY2MgKz0gYnBbMTItN107CisJCQlhY2MgLT0gYnBbMTEtN107IHJwWzRdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbNV07CWFjYyArPSBicFs5LTddOworCQkJYWNjICs9IGJwWzEzLTddOworCQkJYWNjIC09IGJwWzEyLTddOyBycFs1XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzZdOwlhY2MgKz0gYnBbMTAtN107CisJCQlhY2MgLT0gYnBbMTMtN107IHJwWzZdID0gKHVuc2lnbmVkIGludClhY2M7CisKKwljYXJyeSA9IChpbnQpKGFjYz4+MzIpOworIyBpZiBCTl9CSVRTMj09NjQKKwlycFs3XSA9IGNhcnJ5OworIyBlbmRpZgorCX0JCisjZWxzZQorCXsKKwlCTl9VTE9ORyB0X2RbQk5fTklTVF8yMjRfVE9QXTsKKwogCW5pc3Rfc2V0XzIyNCh0X2QsIGJ1ZiwgMTAsIDksIDgsIDcsIDAsIDAsIDApOwogCWNhcnJ5ID0gKGludClibl9hZGRfd29yZHMocl9kLCByX2QsIHRfZCwgQk5fTklTVF8yMjRfVE9QKTsKIAluaXN0X3NldF8yMjQodF9kLCBidWYsIDAsIDEzLCAxMiwgMTEsIDAsIDAsIDApOwpAQCAtNDk0LDYgKzU3Nyw4IEBACiAjaWYgQk5fQklUUzI9PTY0CiAJY2FycnkgPSAoaW50KShyX2RbQk5fTklTVF8yMjRfVE9QLTFdPj4zMik7CiAjZW5kaWYKKwl9CisjZW5kaWYKIAl1LmYgPSBibl9zdWJfd29yZHM7CiAJaWYgKGNhcnJ5ID4gMCkKIAkJewpAQCAtNTQ4LDkgKzYzMywxMSBAQAogCWludAlpLCB0b3AgPSBhLT50b3A7CiAJaW50CWNhcnJ5ID0gMDsKIAlyZWdpc3RlciBCTl9VTE9ORyAqYV9kID0gYS0+ZCwgKnJfZDsKLQlCTl9VTE9ORyB0X2RbQk5fTklTVF8yNTZfVE9QXSwKLQkgICAgICAgICBidWZbQk5fTklTVF8yNTZfVE9QXSwKLQkJIGNfZFtCTl9OSVNUXzI1Nl9UT1BdLAorCXVuaW9uCXsKKwkJQk5fVUxPTkcgYm5bQk5fTklTVF8yNTZfVE9QXTsKKwkJdW5zaWduZWQgaW50IHVpW0JOX05JU1RfMjU2X1RPUCpzaXplb2YoQk5fVUxPTkcpL3NpemVvZih1bnNpZ25lZCBpbnQpXTsKKwkJfSBidWY7CisJQk5fVUxPTkcgY19kW0JOX05JU1RfMjU2X1RPUF0sCiAJCSpyZXM7CiAJUFRSX1NJWkVfSU5UIG1hc2s7CiAJdW5pb24geyBibl9hZGRzdWJfZiBmOyBQVFJfU0laRV9JTlQgcDsgfSB1OwpAQCAtNTg0LDEyICs2NzEsODcgQEAKIAllbHNlCiAJCXJfZCA9IGFfZDsKIAotCW5pc3RfY3BfYm5fMChidWYsIGFfZCArIEJOX05JU1RfMjU2X1RPUCwgdG9wIC0gQk5fTklTVF8yNTZfVE9QLCBCTl9OSVNUXzI1Nl9UT1ApOworCW5pc3RfY3BfYm5fMChidWYuYm4sIGFfZCArIEJOX05JU1RfMjU2X1RPUCwgdG9wIC0gQk5fTklTVF8yNTZfVE9QLCBCTl9OSVNUXzI1Nl9UT1ApOworCisjaWYgZGVmaW5lZChOSVNUX0lOVDY0KQorCXsKKwlOSVNUX0lOVDY0CQlhY2M7CS8qIGFjY3VtdWxhdG9yICovCisJdW5zaWduZWQgaW50CQkqcnA9KHVuc2lnbmVkIGludCAqKXJfZDsKKwljb25zdCB1bnNpZ25lZCBpbnQJKmJwPShjb25zdCB1bnNpZ25lZCBpbnQgKilidWYudWk7CisKKwlhY2MgPSBycFswXTsJYWNjICs9IGJwWzgtOF07CisJCQlhY2MgKz0gYnBbOS04XTsKKwkJCWFjYyAtPSBicFsxMS04XTsKKwkJCWFjYyAtPSBicFsxMi04XTsKKwkJCWFjYyAtPSBicFsxMy04XTsKKwkJCWFjYyAtPSBicFsxNC04XTsgcnBbMF0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFsxXTsJYWNjICs9IGJwWzktOF07CisJCQlhY2MgKz0gYnBbMTAtOF07CisJCQlhY2MgLT0gYnBbMTItOF07CisJCQlhY2MgLT0gYnBbMTMtOF07CisJCQlhY2MgLT0gYnBbMTQtOF07CisJCQlhY2MgLT0gYnBbMTUtOF07IHJwWzFdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbMl07CWFjYyArPSBicFsxMC04XTsKKwkJCWFjYyArPSBicFsxMS04XTsKKwkJCWFjYyAtPSBicFsxMy04XTsKKwkJCWFjYyAtPSBicFsxNC04XTsKKwkJCWFjYyAtPSBicFsxNS04XTsgcnBbMl0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFszXTsJYWNjICs9IGJwWzExLThdOworCQkJYWNjICs9IGJwWzExLThdOworCQkJYWNjICs9IGJwWzEyLThdOworCQkJYWNjICs9IGJwWzEyLThdOworCQkJYWNjICs9IGJwWzEzLThdOworCQkJYWNjIC09IGJwWzE1LThdOworCQkJYWNjIC09IGJwWzgtOF07CisJCQlhY2MgLT0gYnBbOS04XTsgIHJwWzNdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbNF07CWFjYyArPSBicFsxMi04XTsKKwkJCWFjYyArPSBicFsxMi04XTsKKwkJCWFjYyArPSBicFsxMy04XTsKKwkJCWFjYyArPSBicFsxMy04XTsKKwkJCWFjYyArPSBicFsxNC04XTsKKwkJCWFjYyAtPSBicFs5LThdOworCQkJYWNjIC09IGJwWzEwLThdOyBycFs0XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzVdOwlhY2MgKz0gYnBbMTMtOF07CisJCQlhY2MgKz0gYnBbMTMtOF07CisJCQlhY2MgKz0gYnBbMTQtOF07CisJCQlhY2MgKz0gYnBbMTQtOF07CisJCQlhY2MgKz0gYnBbMTUtOF07CisJCQlhY2MgLT0gYnBbMTAtOF07CisJCQlhY2MgLT0gYnBbMTEtOF07IHJwWzVdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisKKwlhY2MgKz0gcnBbNl07CWFjYyArPSBicFsxNC04XTsKKwkJCWFjYyArPSBicFsxNC04XTsKKwkJCWFjYyArPSBicFsxNS04XTsKKwkJCWFjYyArPSBicFsxNS04XTsKKwkJCWFjYyArPSBicFsxNC04XTsKKwkJCWFjYyArPSBicFsxMy04XTsKKwkJCWFjYyAtPSBicFs4LThdOworCQkJYWNjIC09IGJwWzktOF07ICBycFs2XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzddOwlhY2MgKz0gYnBbMTUtOF07CisJCQlhY2MgKz0gYnBbMTUtOF07CisJCQlhY2MgKz0gYnBbMTUtOF07CisJCQlhY2MgKz0gYnBbOCAtOF07CisJCQlhY2MgLT0gYnBbMTAtOF07CisJCQlhY2MgLT0gYnBbMTEtOF07CisJCQlhY2MgLT0gYnBbMTItOF07CisJCQlhY2MgLT0gYnBbMTMtOF07IHJwWzddID0gKHVuc2lnbmVkIGludClhY2M7CisKKwljYXJyeSA9IChpbnQpKGFjYz4+MzIpOworCX0KKyNlbHNlCisJeworCUJOX1VMT05HIHRfZFtCTl9OSVNUXzI1Nl9UT1BdOwogCiAJLypTMSovCi0JbmlzdF9zZXRfMjU2KHRfZCwgYnVmLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDAsIDAsIDApOworCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1Zi5ibiwgMTUsIDE0LCAxMywgMTIsIDExLCAwLCAwLCAwKTsKIAkvKlMyKi8KLQluaXN0X3NldF8yNTYoY19kLCBidWYsIDAsIDE1LCAxNCwgMTMsIDEyLCAwLCAwLCAwKTsKKwluaXN0X3NldF8yNTYoY19kLCBidWYuYm4sIDAsIDE1LCAxNCwgMTMsIDEyLCAwLCAwLCAwKTsKIAljYXJyeSA9IChpbnQpYm5fYWRkX3dvcmRzKHRfZCwgdF9kLCBjX2QsIEJOX05JU1RfMjU2X1RPUCk7CiAJLyogbGVmdCBzaGlmdCAqLwogCQl7CkBAIC02MDcsMjQgKzc2OSwyNiBAQAogCQl9CiAJY2FycnkgKz0gKGludClibl9hZGRfd29yZHMocl9kLCByX2QsIHRfZCwgQk5fTklTVF8yNTZfVE9QKTsKIAkvKlMzKi8KLQluaXN0X3NldF8yNTYodF9kLCBidWYsIDE1LCAxNCwgMCwgMCwgMCwgMTAsIDksIDgpOworCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1Zi5ibiwgMTUsIDE0LCAwLCAwLCAwLCAxMCwgOSwgOCk7CiAJY2FycnkgKz0gKGludClibl9hZGRfd29yZHMocl9kLCByX2QsIHRfZCwgQk5fTklTVF8yNTZfVE9QKTsKIAkvKlM0Ki8KLQluaXN0X3NldF8yNTYodF9kLCBidWYsIDgsIDEzLCAxNSwgMTQsIDEzLCAxMSwgMTAsIDkpOworCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1Zi5ibiwgOCwgMTMsIDE1LCAxNCwgMTMsIDExLCAxMCwgOSk7CiAJY2FycnkgKz0gKGludClibl9hZGRfd29yZHMocl9kLCByX2QsIHRfZCwgQk5fTklTVF8yNTZfVE9QKTsKIAkvKkQxKi8KLQluaXN0X3NldF8yNTYodF9kLCBidWYsIDEwLCA4LCAwLCAwLCAwLCAxMywgMTIsIDExKTsKKwluaXN0X3NldF8yNTYodF9kLCBidWYuYm4sIDEwLCA4LCAwLCAwLCAwLCAxMywgMTIsIDExKTsKIAljYXJyeSAtPSAoaW50KWJuX3N1Yl93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzI1Nl9UT1ApOwogCS8qRDIqLwotCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1ZiwgMTEsIDksIDAsIDAsIDE1LCAxNCwgMTMsIDEyKTsKKwluaXN0X3NldF8yNTYodF9kLCBidWYuYm4sIDExLCA5LCAwLCAwLCAxNSwgMTQsIDEzLCAxMik7CiAJY2FycnkgLT0gKGludClibl9zdWJfd29yZHMocl9kLCByX2QsIHRfZCwgQk5fTklTVF8yNTZfVE9QKTsKIAkvKkQzKi8KLQluaXN0X3NldF8yNTYodF9kLCBidWYsIDEyLCAwLCAxMCwgOSwgOCwgMTUsIDE0LCAxMyk7CisJbmlzdF9zZXRfMjU2KHRfZCwgYnVmLmJuLCAxMiwgMCwgMTAsIDksIDgsIDE1LCAxNCwgMTMpOwogCWNhcnJ5IC09IChpbnQpYm5fc3ViX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMjU2X1RPUCk7CiAJLypENCovCi0JbmlzdF9zZXRfMjU2KHRfZCwgYnVmLCAxMywgMCwgMTEsIDEwLCA5LCAwLCAxNSwgMTQpOworCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1Zi5ibiwgMTMsIDAsIDExLCAxMCwgOSwgMCwgMTUsIDE0KTsKIAljYXJyeSAtPSAoaW50KWJuX3N1Yl93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzI1Nl9UT1ApOwogCisJfQorI2VuZGlmCiAJLyogc2VlIEJOX25pc3RfbW9kXzIyNCBmb3IgZXhwbGFuYXRpb24gKi8KIAl1LmYgPSBibl9zdWJfd29yZHM7CiAJaWYgKGNhcnJ5ID4gMCkKQEAgLTY3Miw5ICs4MzYsMTEgQEAKIAlpbnQJaSwgdG9wID0gYS0+dG9wOwogCWludAljYXJyeSA9IDA7CiAJcmVnaXN0ZXIgQk5fVUxPTkcgKnJfZCwgKmFfZCA9IGEtPmQ7Ci0JQk5fVUxPTkcgdF9kW0JOX05JU1RfMzg0X1RPUF0sCi0JICAgICAgICAgYnVmW0JOX05JU1RfMzg0X1RPUF0sCi0JCSBjX2RbQk5fTklTVF8zODRfVE9QXSwKKwl1bmlvbgl7CisJCUJOX1VMT05HIGJuW0JOX05JU1RfMzg0X1RPUF07CisJCXVuc2lnbmVkIGludCB1aVtCTl9OSVNUXzM4NF9UT1Aqc2l6ZW9mKEJOX1VMT05HKS9zaXplb2YodW5zaWduZWQgaW50KV07CisJCX0gYnVmOworCUJOX1VMT05HIGNfZFtCTl9OSVNUXzM4NF9UT1BdLAogCQkqcmVzOwogCVBUUl9TSVpFX0lOVCBtYXNrOwogCXVuaW9uIHsgYm5fYWRkc3ViX2YgZjsgUFRSX1NJWkVfSU5UIHA7IH0gdTsKQEAgLTcwOSwxMCArODc1LDEwMCBAQAogCWVsc2UKIAkJcl9kID0gYV9kOwogCi0JbmlzdF9jcF9ibl8wKGJ1ZiwgYV9kICsgQk5fTklTVF8zODRfVE9QLCB0b3AgLSBCTl9OSVNUXzM4NF9UT1AsIEJOX05JU1RfMzg0X1RPUCk7CisJbmlzdF9jcF9ibl8wKGJ1Zi5ibiwgYV9kICsgQk5fTklTVF8zODRfVE9QLCB0b3AgLSBCTl9OSVNUXzM4NF9UT1AsIEJOX05JU1RfMzg0X1RPUCk7CisKKyNpZiBkZWZpbmVkKE5JU1RfSU5UNjQpCisJeworCU5JU1RfSU5UNjQJCWFjYzsJLyogYWNjdW11bGF0b3IgKi8KKwl1bnNpZ25lZCBpbnQJCSpycD0odW5zaWduZWQgaW50ICopcl9kOworCWNvbnN0IHVuc2lnbmVkIGludAkqYnA9KGNvbnN0IHVuc2lnbmVkIGludCAqKWJ1Zi51aTsKKworCWFjYyA9IHJwWzBdOwlhY2MgKz0gYnBbMTItMTJdOworCQkJYWNjICs9IGJwWzIxLTEyXTsKKwkJCWFjYyArPSBicFsyMC0xMl07CisJCQlhY2MgLT0gYnBbMjMtMTJdOyBycFswXSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCisJYWNjICs9IHJwWzFdOwlhY2MgKz0gYnBbMTMtMTJdOworCQkJYWNjICs9IGJwWzIyLTEyXTsKKwkJCWFjYyArPSBicFsyMy0xMl07CisJCQlhY2MgLT0gYnBbMTItMTJdOworCQkJYWNjIC09IGJwWzIwLTEyXTsgcnBbMV0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFsyXTsJYWNjICs9IGJwWzE0LTEyXTsKKwkJCWFjYyArPSBicFsyMy0xMl07CisJCQlhY2MgLT0gYnBbMTMtMTJdOworCQkJYWNjIC09IGJwWzIxLTEyXTsgcnBbMl0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFszXTsJYWNjICs9IGJwWzE1LTEyXTsKKwkJCWFjYyArPSBicFsxMi0xMl07CisJCQlhY2MgKz0gYnBbMjAtMTJdOworCQkJYWNjICs9IGJwWzIxLTEyXTsKKwkJCWFjYyAtPSBicFsxNC0xMl07CisJCQlhY2MgLT0gYnBbMjItMTJdOworCQkJYWNjIC09IGJwWzIzLTEyXTsgcnBbM10gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFs0XTsJYWNjICs9IGJwWzIxLTEyXTsKKwkJCWFjYyArPSBicFsyMS0xMl07CisJCQlhY2MgKz0gYnBbMTYtMTJdOworCQkJYWNjICs9IGJwWzEzLTEyXTsKKwkJCWFjYyArPSBicFsxMi0xMl07CisJCQlhY2MgKz0gYnBbMjAtMTJdOworCQkJYWNjICs9IGJwWzIyLTEyXTsKKwkJCWFjYyAtPSBicFsxNS0xMl07CisJCQlhY2MgLT0gYnBbMjMtMTJdOworCQkJYWNjIC09IGJwWzIzLTEyXTsgcnBbNF0gPSAodW5zaWduZWQgaW50KWFjYzsgYWNjID4+PSAzMjsKKworCWFjYyArPSBycFs1XTsJYWNjICs9IGJwWzIyLTEyXTsKKwkJCWFjYyArPSBicFsyMi0xMl07CisJCQlhY2MgKz0gYnBbMTctMTJdOworCQkJYWNjICs9IGJwWzE0LTEyXTsKKwkJCWFjYyArPSBicFsxMy0xMl07CisJCQlhY2MgKz0gYnBbMjEtMTJdOworCQkJYWNjICs9IGJwWzIzLTEyXTsKKwkJCWFjYyAtPSBicFsxNi0xMl07IHJwWzVdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisJCQkKKwlhY2MgKz0gcnBbNl07CWFjYyArPSBicFsyMy0xMl07CisJCQlhY2MgKz0gYnBbMjMtMTJdOworCQkJYWNjICs9IGJwWzE4LTEyXTsKKwkJCWFjYyArPSBicFsxNS0xMl07CisJCQlhY2MgKz0gYnBbMTQtMTJdOworCQkJYWNjICs9IGJwWzIyLTEyXTsKKwkJCWFjYyAtPSBicFsxNy0xMl07IHJwWzZdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisJCQkKKwlhY2MgKz0gcnBbN107CWFjYyArPSBicFsxOS0xMl07CisJCQlhY2MgKz0gYnBbMTYtMTJdOworCQkJYWNjICs9IGJwWzE1LTEyXTsKKwkJCWFjYyArPSBicFsyMy0xMl07CisJCQlhY2MgLT0gYnBbMTgtMTJdOyBycFs3XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCQkJCisJYWNjICs9IHJwWzhdOwlhY2MgKz0gYnBbMjAtMTJdOworCQkJYWNjICs9IGJwWzE3LTEyXTsKKwkJCWFjYyArPSBicFsxNi0xMl07CisJCQlhY2MgLT0gYnBbMTktMTJdOyBycFs4XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCQkJCisJYWNjICs9IHJwWzldOwlhY2MgKz0gYnBbMjEtMTJdOworCQkJYWNjICs9IGJwWzE4LTEyXTsKKwkJCWFjYyArPSBicFsxNy0xMl07CisJCQlhY2MgLT0gYnBbMjAtMTJdOyBycFs5XSA9ICh1bnNpZ25lZCBpbnQpYWNjOyBhY2MgPj49IDMyOworCQkJCisJYWNjICs9IHJwWzEwXTsJYWNjICs9IGJwWzIyLTEyXTsKKwkJCWFjYyArPSBicFsxOS0xMl07CisJCQlhY2MgKz0gYnBbMTgtMTJdOworCQkJYWNjIC09IGJwWzIxLTEyXTsgcnBbMTBdID0gKHVuc2lnbmVkIGludClhY2M7IGFjYyA+Pj0gMzI7CisJCQkKKwlhY2MgKz0gcnBbMTFdOwlhY2MgKz0gYnBbMjMtMTJdOworCQkJYWNjICs9IGJwWzIwLTEyXTsKKwkJCWFjYyArPSBicFsxOS0xMl07CisJCQlhY2MgLT0gYnBbMjItMTJdOyBycFsxMV0gPSAodW5zaWduZWQgaW50KWFjYzsKKworCWNhcnJ5ID0gKGludCkoYWNjPj4zMik7CisJfQorI2Vsc2UKKwl7CisJQk5fVUxPTkcgdF9kW0JOX05JU1RfMzg0X1RPUF07CiAKIAkvKlMxKi8KLQluaXN0X3NldF8yNTYodF9kLCBidWYsIDAsIDAsIDAsIDAsIDAsIDIzLTQsIDIyLTQsIDIxLTQpOworCW5pc3Rfc2V0XzI1Nih0X2QsIGJ1Zi5ibiwgMCwgMCwgMCwgMCwgMCwgMjMtNCwgMjItNCwgMjEtNCk7CiAJCS8qIGxlZnQgc2hpZnQgKi8KIAkJewogCQlyZWdpc3RlciBCTl9VTE9ORyAqYXAsdCxjOwpAQCAtNzI5LDI5ICs5ODUsMzEgQEAKIAljYXJyeSA9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCsoMTI4L0JOX0JJVFMyKSwgcl9kKygxMjgvQk5fQklUUzIpLCAKIAkJdF9kLCBCTl9OSVNUXzI1Nl9UT1ApOwogCS8qUzIgKi8KLQljYXJyeSArPSAoaW50KWJuX2FkZF93b3JkcyhyX2QsIHJfZCwgYnVmLCBCTl9OSVNUXzM4NF9UT1ApOworCWNhcnJ5ICs9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCwgcl9kLCBidWYuYm4sIEJOX05JU1RfMzg0X1RPUCk7CiAJLypTMyovCi0JbmlzdF9zZXRfMzg0KHRfZCxidWYsMjAsMTksMTgsMTcsMTYsMTUsMTQsMTMsMTIsMjMsMjIsMjEpOworCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLmJuLDIwLDE5LDE4LDE3LDE2LDE1LDE0LDEzLDEyLDIzLDIyLDIxKTsKIAljYXJyeSArPSAoaW50KWJuX2FkZF93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzM4NF9UT1ApOwogCS8qUzQqLwotCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLDE5LDE4LDE3LDE2LDE1LDE0LDEzLDEyLDIwLDAsMjMsMCk7CisJbmlzdF9zZXRfMzg0KHRfZCxidWYuYm4sMTksMTgsMTcsMTYsMTUsMTQsMTMsMTIsMjAsMCwyMywwKTsKIAljYXJyeSArPSAoaW50KWJuX2FkZF93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzM4NF9UT1ApOwogCS8qUzUqLwotCW5pc3Rfc2V0XzM4NCh0X2QsIGJ1ZiwwLDAsMCwwLDIzLDIyLDIxLDIwLDAsMCwwLDApOworCW5pc3Rfc2V0XzM4NCh0X2QsIGJ1Zi5ibiwwLDAsMCwwLDIzLDIyLDIxLDIwLDAsMCwwLDApOwogCWNhcnJ5ICs9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMzg0X1RPUCk7CiAJLypTNiovCi0JbmlzdF9zZXRfMzg0KHRfZCxidWYsMCwwLDAsMCwwLDAsMjMsMjIsMjEsMCwwLDIwKTsKKwluaXN0X3NldF8zODQodF9kLGJ1Zi5ibiwwLDAsMCwwLDAsMCwyMywyMiwyMSwwLDAsMjApOwogCWNhcnJ5ICs9IChpbnQpYm5fYWRkX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMzg0X1RPUCk7CiAJLypEMSovCi0JbmlzdF9zZXRfMzg0KHRfZCxidWYsMjIsMjEsMjAsMTksMTgsMTcsMTYsMTUsMTQsMTMsMTIsMjMpOworCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLmJuLDIyLDIxLDIwLDE5LDE4LDE3LDE2LDE1LDE0LDEzLDEyLDIzKTsKIAljYXJyeSAtPSAoaW50KWJuX3N1Yl93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzM4NF9UT1ApOwogCS8qRDIqLwotCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLDAsMCwwLDAsMCwwLDAsMjMsMjIsMjEsMjAsMCk7CisJbmlzdF9zZXRfMzg0KHRfZCxidWYuYm4sMCwwLDAsMCwwLDAsMCwyMywyMiwyMSwyMCwwKTsKIAljYXJyeSAtPSAoaW50KWJuX3N1Yl93b3JkcyhyX2QsIHJfZCwgdF9kLCBCTl9OSVNUXzM4NF9UT1ApOwogCS8qRDMqLwotCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLDAsMCwwLDAsMCwwLDAsMjMsMjMsMCwwLDApOworCW5pc3Rfc2V0XzM4NCh0X2QsYnVmLmJuLDAsMCwwLDAsMCwwLDAsMjMsMjMsMCwwLDApOwogCWNhcnJ5IC09IChpbnQpYm5fc3ViX3dvcmRzKHJfZCwgcl9kLCB0X2QsIEJOX05JU1RfMzg0X1RPUCk7CiAKKwl9CisjZW5kaWYKIAkvKiBzZWUgQk5fbmlzdF9tb2RfMjI0IGZvciBleHBsYW5hdGlvbiAqLwogCXUuZiA9IGJuX3N1Yl93b3JkczsKIAlpZiAoY2FycnkgPiAwKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2JuX3ByaW50LmMgYi9jcnlwdG8vYm4vYm5fcHJpbnQuYwppbmRleCBiZWJiNDY2Li4xNzQzYjZhIDEwMDY0NAotLS0gYS9jcnlwdG8vYm4vYm5fcHJpbnQuYworKysgYi9jcnlwdG8vYm4vYm5fcHJpbnQuYwpAQCAtMzU3LDMgKzM1NywyMiBAQAogCXJldHVybihyZXQpOwogCX0KICNlbmRpZgorCitjaGFyICpCTl9vcHRpb25zKHZvaWQpCisJeworCXN0YXRpYyBpbnQgaW5pdD0wOworCXN0YXRpYyBjaGFyIGRhdGFbMTZdOworCisJaWYgKCFpbml0KQorCQl7CisJCWluaXQrKzsKKyNpZmRlZiBCTl9MTE9ORworCQlCSU9fc25wcmludGYoZGF0YSxzaXplb2YgZGF0YSwiYm4oJWQsJWQpIiwKKwkJCSAgICAgKGludClzaXplb2YoQk5fVUxMT05HKSo4LChpbnQpc2l6ZW9mKEJOX1VMT05HKSo4KTsKKyNlbHNlCisJCUJJT19zbnByaW50ZihkYXRhLHNpemVvZiBkYXRhLCJibiglZCwlZCkiLAorCQkJICAgICAoaW50KXNpemVvZihCTl9VTE9ORykqOCwoaW50KXNpemVvZihCTl9VTE9ORykqOCk7CisjZW5kaWYKKwkJfQorCXJldHVybihkYXRhKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYm5fc2hpZnQuYyBiL2NyeXB0by9ibi9ibl9zaGlmdC5jCmluZGV4IGM0ZDMwMWEuLmE2ZmNhMmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibi9ibl9zaGlmdC5jCisrKyBiL2NyeXB0by9ibi9ibl9zaGlmdC5jCkBAIC05OSw3ICs5OSw3IEBACiBpbnQgQk5fcnNoaWZ0MShCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSkKIAl7CiAJQk5fVUxPTkcgKmFwLCpycCx0LGM7Ci0JaW50IGk7CisJaW50IGksajsKIAogCWJuX2NoZWNrX3RvcChyKTsKIAlibl9jaGVja190b3AoYSk7CkBAIC0xMDksMjIgKzEwOSwyNSBAQAogCQlCTl96ZXJvKHIpOwogCQlyZXR1cm4oMSk7CiAJCX0KKwlpID0gYS0+dG9wOworCWFwPSBhLT5kOworCWogPSBpLShhcFtpLTFdPT0xKTsKIAlpZiAoYSAhPSByKQogCQl7Ci0JCWlmIChibl93ZXhwYW5kKHIsYS0+dG9wKSA9PSBOVUxMKSByZXR1cm4oMCk7Ci0JCXItPnRvcD1hLT50b3A7CisJCWlmIChibl93ZXhwYW5kKHIsaikgPT0gTlVMTCkgcmV0dXJuKDApOwogCQlyLT5uZWc9YS0+bmVnOwogCQl9Ci0JYXA9YS0+ZDsKIAlycD1yLT5kOwotCWM9MDsKLQlmb3IgKGk9YS0+dG9wLTE7IGk+PTA7IGktLSkKKwl0PWFwWy0taV07CisJYz0odCYxKT9CTl9UQklUOjA7CisJaWYgKHQ+Pj0xKSBycFtpXT10OworCXdoaWxlIChpPjApCiAJCXsKLQkJdD1hcFtpXTsKKwkJdD1hcFstLWldOwogCQlycFtpXT0oKHQ+PjEpJkJOX01BU0syKXxjOwogCQljPSh0JjEpP0JOX1RCSVQ6MDsKIAkJfQotCWJuX2NvcnJlY3RfdG9wKHIpOworCXItPnRvcD1qOwogCWJuX2NoZWNrX3RvcChyKTsKIAlyZXR1cm4oMSk7CiAJfQpAQCAtMTgyLDEwICsxODUsMTEgQEAKIAkJQk5femVybyhyKTsKIAkJcmV0dXJuKDEpOwogCQl9CisJaSA9IChCTl9udW1fYml0cyhhKS1uKyhCTl9CSVRTMi0xKSkvQk5fQklUUzI7CiAJaWYgKHIgIT0gYSkKIAkJewogCQlyLT5uZWc9YS0+bmVnOwotCQlpZiAoYm5fd2V4cGFuZChyLGEtPnRvcC1udysxKSA9PSBOVUxMKSByZXR1cm4oMCk7CisJCWlmIChibl93ZXhwYW5kKHIsaSkgPT0gTlVMTCkgcmV0dXJuKDApOwogCQl9CiAJZWxzZQogCQl7CkBAIC0xOTYsNyArMjAwLDcgQEAKIAlmPSAmKGEtPmRbbnddKTsKIAl0PXItPmQ7CiAJaj1hLT50b3Atbnc7Ci0Jci0+dG9wPWo7CisJci0+dG9wPWk7CiAKIAlpZiAocmIgPT0gMCkKIAkJewpAQCAtMjEyLDkgKzIxNiw4IEBACiAJCQlsPSAqKGYrKyk7CiAJCQkqKHQrKykgPSh0bXB8KGw8PGxiKSkmQk5fTUFTSzI7CiAJCQl9Ci0JCSoodCsrKSA9KGw+PnJiKSZCTl9NQVNLMjsKKwkJaWYgKChsID0gKGw+PnJiKSZCTl9NQVNLMikpICoodCkgPSBsOwogCQl9Ci0JYm5fY29ycmVjdF90b3Aocik7CiAJYm5fY2hlY2tfdG9wKHIpOwogCXJldHVybigxKTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYm50ZXN0LmMgYi9jcnlwdG8vYm4vYm50ZXN0LmMKaW5kZXggMGNkOTljNS4uMDZmNTk1NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2JuL2JudGVzdC5jCisrKyBiL2NyeXB0by9ibi9ibnRlc3QuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJbWVzc2FnZShvdXQsIkJOX21vZF9zcXJ0Iik7CiAJaWYgKCF0ZXN0X3NxcnQob3V0LGN0eCkpIGdvdG8gZXJyOwogCSh2b2lkKUJJT19mbHVzaChvdXQpOwotCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCW1lc3NhZ2Uob3V0LCJCTl9HRjJtX2FkZCIpOwogCWlmICghdGVzdF9nZjJtX2FkZChvdXQpKSBnb3RvIGVycjsKIAkodm9pZClCSU9fZmx1c2gob3V0KTsKQEAgLTI5OCw3ICsyOTgsNyBAQAogCW1lc3NhZ2Uob3V0LCJCTl9HRjJtX21vZF9zb2x2ZV9xdWFkIik7CiAJaWYgKCF0ZXN0X2dmMm1fbW9kX3NvbHZlX3F1YWQob3V0LGN0eCkpIGdvdG8gZXJyOwogCSh2b2lkKUJJT19mbHVzaChvdXQpOwotCisjZW5kaWYKIAlCTl9DVFhfZnJlZShjdHgpOwogCUJJT19mcmVlKG91dCk7CiAKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJQk5fZnJlZShvbmUpOwogCXJldHVybigxKTsKIAl9Ci0KKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiBpbnQgdGVzdF9nZjJtX2FkZChCSU8gKmJwKQogCXsKIAlCSUdOVU0gYSxiLGM7CkBAIC0xNjM2LDcgKzE2MzYsNyBAQAogCUJOX2ZyZWUoZSk7CiAJcmV0dXJuIHJldDsKIAl9Ci0KKyNlbmRpZgogc3RhdGljIGludCBnZW5wcmltZV9jYihpbnQgcCwgaW50IG4sIEJOX0dFTkNCICphcmcpCiAJewogCWNoYXIgYz0nKic7CmRpZmYgLS1naXQgYS9jcnlwdG8vYnVmZmVyL2J1Zl9zdHIuYyBiL2NyeXB0by9idWZmZXIvYnVmX3N0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MWY1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vYnVmZmVyL2J1Zl9zdHIuYwpAQCAtMCwwICsxLDExOSBAQAorLyogY3J5cHRvL2J1ZmZlci9idWZmZXIuYyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CisKK2NoYXIgKkJVRl9zdHJkdXAoY29uc3QgY2hhciAqc3RyKQorCXsKKwlpZiAoc3RyID09IE5VTEwpIHJldHVybihOVUxMKTsKKwlyZXR1cm4gQlVGX3N0cm5kdXAoc3RyLCBzdHJsZW4oc3RyKSk7CisJfQorCitjaGFyICpCVUZfc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzaXopCisJeworCWNoYXIgKnJldDsKKworCWlmIChzdHIgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOworCisJcmV0PU9QRU5TU0xfbWFsbG9jKHNpeisxKTsKKwlpZiAocmV0ID09IE5VTEwpIAorCQl7CisJCUJVRmVycihCVUZfRl9CVUZfU1RSTkRVUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCXJldHVybihOVUxMKTsKKwkJfQorCUJVRl9zdHJsY3B5KHJldCxzdHIsc2l6KzEpOworCXJldHVybihyZXQpOworCX0KKwordm9pZCAqQlVGX21lbWR1cChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6KQorCXsKKwl2b2lkICpyZXQ7CisKKwlpZiAoZGF0YSA9PSBOVUxMKSByZXR1cm4oTlVMTCk7CisKKwlyZXQ9T1BFTlNTTF9tYWxsb2Moc2l6KTsKKwlpZiAocmV0ID09IE5VTEwpIAorCQl7CisJCUJVRmVycihCVUZfRl9CVUZfTUVNRFVQLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJcmV0dXJuKE5VTEwpOworCQl9CisJcmV0dXJuIG1lbWNweShyZXQsIGRhdGEsIHNpeik7CisJfQkKKworc2l6ZV90IEJVRl9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKKwl7CisJc2l6ZV90IGwgPSAwOworCWZvcig7IHNpemUgPiAxICYmICpzcmM7IHNpemUtLSkKKwkJeworCQkqZHN0KysgPSAqc3JjKys7CisJCWwrKzsKKwkJfQorCWlmIChzaXplKQorCQkqZHN0ID0gJ1wwJzsKKwlyZXR1cm4gbCArIHN0cmxlbihzcmMpOworCX0KKworc2l6ZV90IEJVRl9zdHJsY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKKwl7CisJc2l6ZV90IGwgPSAwOworCWZvcig7IHNpemUgPiAwICYmICpkc3Q7IHNpemUtLSwgZHN0KyspCisJCWwrKzsKKwlyZXR1cm4gbCArIEJVRl9zdHJsY3B5KGRzdCwgc3JjLCBzaXplKTsKKwl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYnVmZmVyL2J1ZmZlci5jIGIvY3J5cHRvL2J1ZmZlci9idWZmZXIuYwppbmRleCA2MjBlYThkLi5mNGIzNThiIDEwMDY0NAotLS0gYS9jcnlwdG8vYnVmZmVyL2J1ZmZlci5jCisrKyBiL2NyeXB0by9idWZmZXIvYnVmZmVyLmMKQEAgLTE2Miw2NCArMTYyLDYgQEAKIAlyZXR1cm4obGVuKTsKIAl9CiAKLWNoYXIgKkJVRl9zdHJkdXAoY29uc3QgY2hhciAqc3RyKQotCXsKLQlpZiAoc3RyID09IE5VTEwpIHJldHVybihOVUxMKTsKLQlyZXR1cm4gQlVGX3N0cm5kdXAoc3RyLCBzdHJsZW4oc3RyKSk7Ci0JfQotCi1jaGFyICpCVUZfc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzaXopCi0JewotCWNoYXIgKnJldDsKLQotCWlmIChzdHIgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwotCi0JcmV0PU9QRU5TU0xfbWFsbG9jKHNpeisxKTsKLQlpZiAocmV0ID09IE5VTEwpIAotCQl7Ci0JCUJVRmVycihCVUZfRl9CVUZfU1RSTkRVUCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0JCXJldHVybihOVUxMKTsKLQkJfQotCUJVRl9zdHJsY3B5KHJldCxzdHIsc2l6KzEpOwotCXJldHVybihyZXQpOwotCX0KLQotdm9pZCAqQlVGX21lbWR1cChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6KQotCXsKLQl2b2lkICpyZXQ7Ci0KLQlpZiAoZGF0YSA9PSBOVUxMKSByZXR1cm4oTlVMTCk7Ci0KLQlyZXQ9T1BFTlNTTF9tYWxsb2Moc2l6KTsKLQlpZiAocmV0ID09IE5VTEwpIAotCQl7Ci0JCUJVRmVycihCVUZfRl9CVUZfTUVNRFVQLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLQkJcmV0dXJuKE5VTEwpOwotCQl9Ci0JcmV0dXJuIG1lbWNweShyZXQsIGRhdGEsIHNpeik7Ci0JfQkKLQotc2l6ZV90IEJVRl9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKLQl7Ci0Jc2l6ZV90IGwgPSAwOwotCWZvcig7IHNpemUgPiAxICYmICpzcmM7IHNpemUtLSkKLQkJewotCQkqZHN0KysgPSAqc3JjKys7Ci0JCWwrKzsKLQkJfQotCWlmIChzaXplKQotCQkqZHN0ID0gJ1wwJzsKLQlyZXR1cm4gbCArIHN0cmxlbihzcmMpOwotCX0KLQotc2l6ZV90IEJVRl9zdHJsY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKLQl7Ci0Jc2l6ZV90IGwgPSAwOwotCWZvcig7IHNpemUgPiAwICYmICpkc3Q7IHNpemUtLSwgZHN0KyspCi0JCWwrKzsKLQlyZXR1cm4gbCArIEJVRl9zdHJsY3B5KGRzdCwgc3JjLCBzaXplKTsKLQl9Ci0KIHZvaWQgQlVGX3JldmVyc2UodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IHNpemUpCiAJewogCXNpemVfdCBpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NtYWMvY21fYW1ldGguYyBiL2NyeXB0by9jbWFjL2NtX2FtZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4ZTU2NwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jbWFjL2NtX2FtZXRoLmMKQEAgLTAsMCArMSw5NyBAQAorLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0IDIwMTAuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgorI2luY2x1ZGUgImFzbjFfbG9jbC5oIgorCisvKiBDTUFDICJBU04xIiBtZXRob2QuIFRoaXMgaXMganVzdCBoZXJlIHRvIGluZGljYXRlIHRoZQorICogbWF4aW11bSBDTUFDIG91dHB1dCBsZW5ndGggYW5kIHRvIGZyZWUgdXAgYSBDTUFDCisgKiBrZXkuCisgKi8KKworc3RhdGljIGludCBjbWFjX3NpemUoY29uc3QgRVZQX1BLRVkgKnBrZXkpCisJeworCXJldHVybiBFVlBfTUFYX0JMT0NLX0xFTkdUSDsKKwl9CisKK3N0YXRpYyB2b2lkIGNtYWNfa2V5X2ZyZWUoRVZQX1BLRVkgKnBrZXkpCisJeworCUNNQUNfQ1RYICpjbWN0eCA9IChDTUFDX0NUWCAqKXBrZXktPnBrZXkucHRyOworCWlmIChjbWN0eCkKKwkJQ01BQ19DVFhfZnJlZShjbWN0eCk7CisJfQorCitjb25zdCBFVlBfUEtFWV9BU04xX01FVEhPRCBjbWFjX2FzbjFfbWV0aCA9IAorCXsKKwlFVlBfUEtFWV9DTUFDLAorCUVWUF9QS0VZX0NNQUMsCisJMCwKKworCSJDTUFDIiwKKwkiT3BlblNTTCBDTUFDIG1ldGhvZCIsCisKKwkwLDAsMCwwLAorCisJMCwwLDAsCisKKwljbWFjX3NpemUsCisJMCwKKwkwLDAsMCwwLDAsMCwwLAorCisJY21hY19rZXlfZnJlZSwKKwkwLAorCTAsMAorCX07CisKZGlmZiAtLWdpdCBhL2NyeXB0by9jbWFjL2NtX3BtZXRoLmMgYi9jcnlwdG8vY21hYy9jbV9wbWV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MjIyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vY21hYy9jbV9wbWV0aC5jCkBAIC0wLDAgKzEsMjI0IEBACisvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKyAqIHByb2plY3QgMjAxMC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJjcnlwdGxpYi5oIgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKyNpbmNsdWRlICJldnBfbG9jbC5oIgorCisvKiBUaGUgY29udGV4dCBzdHJ1Y3R1cmUgYW5kICJrZXkiIGlzIHNpbXBseSBhIENNQUNfQ1RYICovCisKK3N0YXRpYyBpbnQgcGtleV9jbWFjX2luaXQoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCWN0eC0+ZGF0YSA9IENNQUNfQ1RYX25ldygpOworCWlmICghY3R4LT5kYXRhKQorCQlyZXR1cm4gMDsKKwljdHgtPmtleWdlbl9pbmZvX2NvdW50ID0gMDsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9jbWFjX2NvcHkoRVZQX1BLRVlfQ1RYICpkc3QsIEVWUF9QS0VZX0NUWCAqc3JjKQorCXsKKwlpZiAoIXBrZXlfY21hY19pbml0KGRzdCkpCisJCXJldHVybiAwOworCWlmICghQ01BQ19DVFhfY29weShkc3QtPmRhdGEsIHNyYy0+ZGF0YSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKworc3RhdGljIHZvaWQgcGtleV9jbWFjX2NsZWFudXAoRVZQX1BLRVlfQ1RYICpjdHgpCisJeworCUNNQUNfQ1RYX2ZyZWUoY3R4LT5kYXRhKTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9jbWFjX2tleWdlbihFVlBfUEtFWV9DVFggKmN0eCwgRVZQX1BLRVkgKnBrZXkpCisJeworCUNNQUNfQ1RYICpjbWtleSA9IENNQUNfQ1RYX25ldygpOworCUNNQUNfQ1RYICpjbWN0eCA9IGN0eC0+ZGF0YTsKKwlpZiAoIWNta2V5KQorCQlyZXR1cm4gMDsKKwlpZiAoIUNNQUNfQ1RYX2NvcHkoY21rZXksIGNtY3R4KSkKKwkJeworCQlDTUFDX0NUWF9mcmVlKGNta2V5KTsKKwkJcmV0dXJuIDA7CisJCX0KKwlFVlBfUEtFWV9hc3NpZ24ocGtleSwgRVZQX1BLRVlfQ01BQywgY21rZXkpOworCQorCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBpbnRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKKwl7CisJaWYgKCFDTUFDX1VwZGF0ZShjdHgtPnBjdHgtPmRhdGEsIGRhdGEsIGNvdW50KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGNtYWNfc2lnbmN0eF9pbml0KEVWUF9QS0VZX0NUWCAqY3R4LCBFVlBfTURfQ1RYICptY3R4KQorCXsKKwlFVlBfTURfQ1RYX3NldF9mbGFncyhtY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCk7CisJbWN0eC0+dXBkYXRlID0gaW50X3VwZGF0ZTsKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgY21hY19zaWduY3R4KEVWUF9QS0VZX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpzaWcsIHNpemVfdCAqc2lnbGVuLAorCQkJCQlFVlBfTURfQ1RYICptY3R4KQorCXsKKwlyZXR1cm4gQ01BQ19GaW5hbChjdHgtPmRhdGEsIHNpZywgc2lnbGVuKTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9jbWFjX2N0cmwoRVZQX1BLRVlfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgcDEsIHZvaWQgKnAyKQorCXsKKwlDTUFDX0NUWCAqY21jdHggPSBjdHgtPmRhdGE7CisJc3dpdGNoICh0eXBlKQorCQl7CisKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZOgorCQlpZiAoIXAyIHx8IHAxIDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIUNNQUNfSW5pdChjbWN0eCwgcDIsIHAxLCBOVUxMLCBOVUxMKSkKKwkJCXJldHVybiAwOworCQlicmVhazsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfQ0lQSEVSOgorCQlpZiAoIUNNQUNfSW5pdChjbWN0eCwgTlVMTCwgMCwgcDIsIGN0eC0+ZW5naW5lKSkKKwkJCXJldHVybiAwOworCQlicmVhazsKKworCQljYXNlIEVWUF9QS0VZX0NUUkxfTUQ6CisJCWlmIChjdHgtPnBrZXkgJiYgIUNNQUNfQ1RYX2NvcHkoY3R4LT5kYXRhLAorCQkJCQkoQ01BQ19DVFggKiljdHgtPnBrZXktPnBrZXkucHRyKSkKKwkJCXJldHVybiAwOworCQlpZiAoIUNNQUNfSW5pdChjbWN0eCwgTlVMTCwgMCwgTlVMTCwgTlVMTCkpCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJcmV0dXJuIC0yOworCisJCX0KKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgcGtleV9jbWFjX2N0cmxfc3RyKEVWUF9QS0VZX0NUWCAqY3R4LAorCQkJY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpCisJeworCWlmICghdmFsdWUpCisJCXsKKwkJcmV0dXJuIDA7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAia2V5IikpCisJCXsKKwkJdm9pZCAqcCA9ICh2b2lkICopdmFsdWU7CisJCXJldHVybiBwa2V5X2NtYWNfY3RybChjdHgsIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVksCisJCQkJCQkJCXN0cmxlbihwKSwgcCk7CisJCX0KKwlpZiAoIXN0cmNtcCh0eXBlLCAiY2lwaGVyIikpCisJCXsKKwkJY29uc3QgRVZQX0NJUEhFUiAqYzsKKwkJYyA9IEVWUF9nZXRfY2lwaGVyYnluYW1lKHZhbHVlKTsKKwkJaWYgKCFjKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBwa2V5X2NtYWNfY3RybChjdHgsIEVWUF9QS0VZX0NUUkxfQ0lQSEVSLCAtMSwgKHZvaWQgKiljKTsKKwkJfQorCWlmICghc3RyY21wKHR5cGUsICJoZXhrZXkiKSkKKwkJeworCQl1bnNpZ25lZCBjaGFyICprZXk7CisJCWludCByOworCQlsb25nIGtleWxlbjsKKwkJa2V5ID0gc3RyaW5nX3RvX2hleCh2YWx1ZSwgJmtleWxlbik7CisJCWlmICgha2V5KQorCQkJcmV0dXJuIDA7CisJCXIgPSBwa2V5X2NtYWNfY3RybChjdHgsIEVWUF9QS0VZX0NUUkxfU0VUX01BQ19LRVksIGtleWxlbiwga2V5KTsKKwkJT1BFTlNTTF9mcmVlKGtleSk7CisJCXJldHVybiByOworCQl9CisJcmV0dXJuIC0yOworCX0KKworY29uc3QgRVZQX1BLRVlfTUVUSE9EIGNtYWNfcGtleV9tZXRoID0gCisJeworCUVWUF9QS0VZX0NNQUMsCisJRVZQX1BLRVlfRkxBR19TSUdDVFhfQ1VTVE9NLAorCXBrZXlfY21hY19pbml0LAorCXBrZXlfY21hY19jb3B5LAorCXBrZXlfY21hY19jbGVhbnVwLAorCisJMCwgMCwKKworCTAsCisJcGtleV9jbWFjX2tleWdlbiwKKworCTAsIDAsCisKKwkwLCAwLAorCisJMCwwLAorCisJY21hY19zaWduY3R4X2luaXQsCisJY21hY19zaWduY3R4LAorCisJMCwwLAorCisJMCwwLAorCisJMCwwLAorCisJMCwwLAorCisJcGtleV9jbWFjX2N0cmwsCisJcGtleV9jbWFjX2N0cmxfc3RyCisKKwl9OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NtYWMvY21hYy5jIGIvY3J5cHRvL2NtYWMvY21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vY21hYy9jbWFjLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qIGNyeXB0by9jbWFjL2NtYWMuYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+CisKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgorCitzdHJ1Y3QgQ01BQ19DVFhfc3QKKwl7CisJLyogQ2lwaGVyIGNvbnRleHQgdG8gdXNlICovCisJRVZQX0NJUEhFUl9DVFggY2N0eDsKKwkvKiBLZXlzIGsxIGFuZCBrMiAqLworCXVuc2lnbmVkIGNoYXIgazFbRVZQX01BWF9CTE9DS19MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgazJbRVZQX01BWF9CTE9DS19MRU5HVEhdOworCS8qIFRlbXBvcmFyeSBibG9jayAqLworCXVuc2lnbmVkIGNoYXIgdGJsW0VWUF9NQVhfQkxPQ0tfTEVOR1RIXTsKKwkvKiBMYXN0IChwb3NzaWJseSBwYXJ0aWFsKSBibG9jayAqLworCXVuc2lnbmVkIGNoYXIgbGFzdF9ibG9ja1tFVlBfTUFYX0JMT0NLX0xFTkdUSF07CisJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGxhc3QgYmxvY2s6IC0xIG1lYW5zIGNvbnRleHQgbm90IGluaXRpYWxpc2VkICovCisJaW50IG5sYXN0X2Jsb2NrOworCX07CisKKworLyogTWFrZSB0ZW1wb3Jhcnkga2V5cyBLMSBhbmQgSzIgKi8KKworc3RhdGljIHZvaWQgbWFrZV9rbih1bnNpZ25lZCBjaGFyICprMSwgdW5zaWduZWQgY2hhciAqbCwgaW50IGJsKQorCXsKKwlpbnQgaTsKKwkvKiBTaGlmdCBibG9jayB0byBsZWZ0LCBpbmNsdWRpbmcgY2FycnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmw7IGkrKykKKwkJeworCQlrMVtpXSA9IGxbaV0gPDwgMTsKKwkJaWYgKGkgPCBibCAtIDEgJiYgbFtpICsgMV0gJiAweDgwKQorCQkJazFbaV0gfD0gMTsKKwkJfQorCS8qIElmIE1TQiBzZXQgZml4dXAgd2l0aCBSICovCisJaWYgKGxbMF0gJiAweDgwKQorCQlrMVtibCAtIDFdIF49IGJsID09IDE2ID8gMHg4NyA6IDB4MWI7CisJfQorCitDTUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQpCisJeworCUNNQUNfQ1RYICpjdHg7CisJY3R4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKENNQUNfQ1RYKSk7CisJaWYgKCFjdHgpCisJCXJldHVybiBOVUxMOworCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eC0+Y2N0eCk7CisJY3R4LT5ubGFzdF9ibG9jayA9IC0xOworCXJldHVybiBjdHg7CisJfQorCit2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01BQ19DVFggKmN0eCkKKwl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQorCQl7CisJCUZJUFNfY21hY19jdHhfY2xlYW51cChjdHgpOworCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7CisJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7CisJT1BFTlNTTF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKKwlPUEVOU1NMX2NsZWFuc2UoY3R4LT5rMiwgRVZQX01BWF9CTE9DS19MRU5HVEgpOworCU9QRU5TU0xfY2xlYW5zZShjdHgtPmxhc3RfYmxvY2ssIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKKwljdHgtPm5sYXN0X2Jsb2NrID0gLTE7CisJfQorCitFVlBfQ0lQSEVSX0NUWCAqQ01BQ19DVFhfZ2V0MF9jaXBoZXJfY3R4KENNQUNfQ1RYICpjdHgpCisJeworCXJldHVybiAmY3R4LT5jY3R4OworCX0KKwordm9pZCBDTUFDX0NUWF9mcmVlKENNQUNfQ1RYICpjdHgpCisJeworCUNNQUNfQ1RYX2NsZWFudXAoY3R4KTsKKwlPUEVOU1NMX2ZyZWUoY3R4KTsKKwl9CisKK2ludCBDTUFDX0NUWF9jb3B5KENNQUNfQ1RYICpvdXQsIGNvbnN0IENNQUNfQ1RYICppbikKKwl7CisJaW50IGJsOworCWlmIChpbi0+bmxhc3RfYmxvY2sgPT0gLTEpCisJCXJldHVybiAwOworCWlmICghRVZQX0NJUEhFUl9DVFhfY29weSgmb3V0LT5jY3R4LCAmaW4tPmNjdHgpKQorCQlyZXR1cm4gMDsKKwlibCA9IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoJmluLT5jY3R4KTsKKwltZW1jcHkob3V0LT5rMSwgaW4tPmsxLCBibCk7CisJbWVtY3B5KG91dC0+azIsIGluLT5rMiwgYmwpOworCW1lbWNweShvdXQtPnRibCwgaW4tPnRibCwgYmwpOworCW1lbWNweShvdXQtPmxhc3RfYmxvY2ssIGluLT5sYXN0X2Jsb2NrLCBibCk7CisJb3V0LT5ubGFzdF9ibG9jayA9IGluLT5ubGFzdF9ibG9jazsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBDTUFDX0luaXQoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qga2V5bGVuLCAKKwkJCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRU5HSU5FICppbXBsKQorCXsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciB6ZXJvX2l2W0VWUF9NQVhfQkxPQ0tfTEVOR1RIXTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkpCisJCXsKKwkJLyogSWYgd2UgaGF2ZSBhbiBFTkdJTkUgbmVlZCB0byBhbGxvdyBub24gRklQUyAqLworCQlpZiAoKGltcGwgfHwgY3R4LT5jY3R4LmVuZ2luZSkKKwkJCSYmICEoY3R4LT5jY3R4LmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCisKKwkJCXsKKwkJCUVWUGVycihFVlBfRl9DTUFDX0lOSVQsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKwkJCXJldHVybiAwOworCQkJfQorCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorCQkgKiB2aWEgRklQU19jaXBoZXJpbml0KCkuCisJCSAqLworCQlpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCisJCQlyZXR1cm4gRklQU19jbWFjX2luaXQoY3R4LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKKwkJfQorI2VuZGlmCisJLyogQWxsIHplcm9zIG1lYW5zIHJlc3RhcnQgKi8KKwlpZiAoIWtleSAmJiAhY2lwaGVyICYmICFpbXBsICYmIGtleWxlbiA9PSAwKQorCQl7CisJCS8qIE5vdCBpbml0aWFsaXNlZCAqLworCQlpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKwkJCXJldHVybiAwOworCQlpZiAoIUVWUF9FbmNyeXB0SW5pdF9leCgmY3R4LT5jY3R4LCBOVUxMLCBOVUxMLCBOVUxMLCB6ZXJvX2l2KSkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gMTsKKwkJfQorCS8qIEluaXRpYWxpYXNlIGNvbnRleHQgKi8KKwlpZiAoY2lwaGVyICYmICFFVlBfRW5jcnlwdEluaXRfZXgoJmN0eC0+Y2N0eCwgY2lwaGVyLCBpbXBsLCBOVUxMLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisJLyogTm9uLU5VTEwga2V5IG1lYW5zIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlICovCisJaWYgKGtleSkKKwkJeworCQlpbnQgYmw7CisJCWlmICghRVZQX0NJUEhFUl9DVFhfY2lwaGVyKCZjdHgtPmNjdHgpKQorCQkJcmV0dXJuIDA7CisJCWlmICghRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGgoJmN0eC0+Y2N0eCwga2V5bGVuKSkKKwkJCXJldHVybiAwOworCQlpZiAoIUVWUF9FbmNyeXB0SW5pdF9leCgmY3R4LT5jY3R4LCBOVUxMLCBOVUxMLCBrZXksIHplcm9faXYpKQorCQkJcmV0dXJuIDA7CisJCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKKwkJaWYgKCFFVlBfQ2lwaGVyKCZjdHgtPmNjdHgsIGN0eC0+dGJsLCB6ZXJvX2l2LCBibCkpCisJCQlyZXR1cm4gMDsKKwkJbWFrZV9rbihjdHgtPmsxLCBjdHgtPnRibCwgYmwpOworCQltYWtlX2tuKGN0eC0+azIsIGN0eC0+azEsIGJsKTsKKwkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBibCk7CisJCS8qIFJlc2V0IGNvbnRleHQgYWdhaW4gcmVhZHkgZm9yIGZpcnN0IGRhdGEgYmxvY2sgKi8KKwkJaWYgKCFFVlBfRW5jcnlwdEluaXRfZXgoJmN0eC0+Y2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgemVyb19pdikpCisJCQlyZXR1cm4gMDsKKwkJLyogWmVybyB0Ymwgc28gcmVzdW1lIHdvcmtzICovCisJCW1lbXNldChjdHgtPnRibCwgMCwgYmwpOworCQljdHgtPm5sYXN0X2Jsb2NrID0gMDsKKwkJfQorCXJldHVybiAxOworCX0KKworaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmluLCBzaXplX3QgZGxlbikKKwl7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluOworCXNpemVfdCBibDsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCisJCXJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0eCwgaW4sIGRsZW4pOworI2VuZGlmCisJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisJCXJldHVybiAwOworCWlmIChkbGVuID09IDApCisJCXJldHVybiAxOworCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKKwkvKiBDb3B5IGludG8gcGFydGlhbCBibG9jayBpZiB3ZSBuZWVkIHRvICovCisJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPiAwKQorCQl7CisJCXNpemVfdCBubGVmdDsKKwkJbmxlZnQgPSBibCAtIGN0eC0+bmxhc3RfYmxvY2s7CisJCWlmIChkbGVuIDwgbmxlZnQpCisJCQlubGVmdCA9IGRsZW47CisJCW1lbWNweShjdHgtPmxhc3RfYmxvY2sgKyBjdHgtPm5sYXN0X2Jsb2NrLCBkYXRhLCBubGVmdCk7CisJCWRsZW4gLT0gbmxlZnQ7CisJCWN0eC0+bmxhc3RfYmxvY2sgKz0gbmxlZnQ7CisJCS8qIElmIG5vIG1vcmUgdG8gcHJvY2VzcyByZXR1cm4gKi8KKwkJaWYgKGRsZW4gPT0gMCkKKwkJCXJldHVybiAxOworCQlkYXRhICs9IG5sZWZ0OworCQkvKiBFbHNlIG5vdCBmaW5hbCBibG9jayBzbyBlbmNyeXB0IGl0ICovCisJCWlmICghRVZQX0NpcGhlcigmY3R4LT5jY3R4LCBjdHgtPnRibCwgY3R4LT5sYXN0X2Jsb2NrLGJsKSkKKwkJCXJldHVybiAwOworCQl9CisJLyogRW5jcnlwdCBhbGwgYnV0IG9uZSBvZiB0aGUgY29tcGxldGUgYmxvY2tzIGxlZnQgKi8KKwl3aGlsZShkbGVuID4gYmwpCisJCXsKKwkJaWYgKCFFVlBfQ2lwaGVyKCZjdHgtPmNjdHgsIGN0eC0+dGJsLCBkYXRhLCBibCkpCisJCQlyZXR1cm4gMDsKKwkJZGxlbiAtPSBibDsKKwkJZGF0YSArPSBibDsKKwkJfQorCS8qIENvcHkgYW55IGRhdGEgbGVmdCB0byBsYXN0IGJsb2NrIGJ1ZmZlciAqLworCW1lbWNweShjdHgtPmxhc3RfYmxvY2ssIGRhdGEsIGRsZW4pOworCWN0eC0+bmxhc3RfYmxvY2sgPSBkbGVuOworCXJldHVybiAxOworCisJfQorCitpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKKwl7CisJaW50IGksIGJsLCBsYjsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCisJCXJldHVybiBGSVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOworI2VuZGlmCisJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisJCXJldHVybiAwOworCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKKwkqcG91dGxlbiA9IChzaXplX3QpYmw7CisJaWYgKCFvdXQpCisJCXJldHVybiAxOworCWxiID0gY3R4LT5ubGFzdF9ibG9jazsKKwkvKiBJcyBsYXN0IGJsb2NrIGNvbXBsZXRlPyAqLworCWlmIChsYiA9PSBibCkKKwkJeworCQlmb3IgKGkgPSAwOyBpIDwgYmw7IGkrKykKKwkJCW91dFtpXSA9IGN0eC0+bGFzdF9ibG9ja1tpXSBeIGN0eC0+azFbaV07CisJCX0KKwllbHNlCisJCXsKKwkJY3R4LT5sYXN0X2Jsb2NrW2xiXSA9IDB4ODA7CisJCWlmIChibCAtIGxiID4gMSkKKwkJCW1lbXNldChjdHgtPmxhc3RfYmxvY2sgKyBsYiArIDEsIDAsIGJsIC0gbGIgLSAxKTsKKwkJZm9yIChpID0gMDsgaSA8IGJsOyBpKyspCisJCQlvdXRbaV0gPSBjdHgtPmxhc3RfYmxvY2tbaV0gXiBjdHgtPmsyW2ldOworCQl9CisJaWYgKCFFVlBfQ2lwaGVyKCZjdHgtPmNjdHgsIG91dCwgb3V0LCBibCkpCisJCXsKKwkJT1BFTlNTTF9jbGVhbnNlKG91dCwgYmwpOwkKKwkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKKwl9CisKK2ludCBDTUFDX3Jlc3VtZShDTUFDX0NUWCAqY3R4KQorCXsKKwlpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKwkJcmV0dXJuIDA7CisJLyogVGhlIGJ1ZmZlciAidGJsIiBjb250YWluZXMgdGhlIGxhc3QgZnVsbHkgZW5jcnlwdGVkIGJsb2NrCisJICogd2hpY2ggaXMgdGhlIGxhc3QgSVYgKG9yIGFsbCB6ZXJvZXMgaWYgbm8gbGFzdCBlbmNyeXB0ZWQgYmxvY2spLgorCSAqIFRoZSBsYXN0IGJsb2NrIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSBDTUFDX2ZpbmFsKCkuCisJICogU28gcmVpbml0bGlhc2luZyB1c2luZyB0aGUgbGFzdCBkZWNyeXB0ZWQgYmxvY2sgd2lsbCBhbGxvdworCSAqIENNQUMgdG8gY29udGludWUgYWZ0ZXIgY2FsbGluZyBDTUFDX0ZpbmFsKCkuIAorCSAqLworCXJldHVybiBFVlBfRW5jcnlwdEluaXRfZXgoJmN0eC0+Y2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgY3R4LT50YmwpOworCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9jbWFjL2NtYWMuaCBiL2NyeXB0by9jbWFjL2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJlOTJkCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2NtYWMvY21hYy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qIGNyeXB0by9jbWFjL2NtYWMuaCAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKworI2lmbmRlZiBIRUFERVJfQ01BQ19ICisjZGVmaW5lIEhFQURFUl9DTUFDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKworLyogT3BhcXVlICovCit0eXBlZGVmIHN0cnVjdCBDTUFDX0NUWF9zdCBDTUFDX0NUWDsKKworQ01BQ19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKTsKK3ZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFDX0NUWCAqY3R4KTsKK3ZvaWQgQ01BQ19DVFhfZnJlZShDTUFDX0NUWCAqY3R4KTsKK0VWUF9DSVBIRVJfQ1RYICpDTUFDX0NUWF9nZXQwX2NpcGhlcl9jdHgoQ01BQ19DVFggKmN0eCk7CitpbnQgQ01BQ19DVFhfY29weShDTUFDX0NUWCAqb3V0LCBjb25zdCBDTUFDX0NUWCAqaW4pOworCitpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IGtleWxlbiwgCisJCQljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEVOR0lORSAqaW1wbCk7CitpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRsZW4pOworaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKnBvdXRsZW4pOworaW50IENNQUNfcmVzdW1lKENNQUNfQ1RYICpjdHgpOworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NvbXAvY19ybGUuYyBiL2NyeXB0by9jb21wL2NfcmxlLmMKaW5kZXggMThiY2VhZS4uNDdkZmI2NyAxMDA2NDQKLS0tIGEvY3J5cHRvL2NvbXAvY19ybGUuYworKysgYi9jcnlwdG8vY29tcC9jX3JsZS5jCkBAIC0zMCw3ICszMCw3IEBACiAJewogCS8qIGludCBpOyAqLwogCi0JaWYgKG9sZW4gPCAoaWxlbisxKSkKKwlpZiAoaWxlbiA9PSAwIHx8IG9sZW4gPCAoaWxlbi0xKSkKIAkJewogCQkvKiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaICovCiAJCXJldHVybigtMSk7CkBAIC00Niw3ICs0Niw3IEBACiAJewogCWludCBpOwogCi0JaWYgKGlsZW4gPT0gMCB8fCBvbGVuIDwgKGlsZW4tMSkpCisJaWYgKG9sZW4gPCAoaWxlbi0xKSkKIAkJewogCQkvKiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaICovCiAJCXJldHVybigtMSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vY3B0X2Vyci5jIGIvY3J5cHRvL2NwdF9lcnIuYwppbmRleCAxMzliOTI4Li4yODkwMDVmIDEwMDY0NAotLS0gYS9jcnlwdG8vY3B0X2Vyci5jCisrKyBiL2NyeXB0by9jcHRfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vY3B0X2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNiArNzYsNyBAQAoge0VSUl9GVU5DKENSWVBUT19GX0NSWVBUT19TRVRfRVhfREFUQSksCSJDUllQVE9fc2V0X2V4X2RhdGEifSwKIHtFUlJfRlVOQyhDUllQVE9fRl9ERUZfQUREX0lOREVYKSwJIkRFRl9BRERfSU5ERVgifSwKIHtFUlJfRlVOQyhDUllQVE9fRl9ERUZfR0VUX0NMQVNTKSwJIkRFRl9HRVRfQ0xBU1MifSwKK3tFUlJfRlVOQyhDUllQVE9fRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKIHtFUlJfRlVOQyhDUllQVE9fRl9JTlRfRFVQX0VYX0RBVEEpLAkiSU5UX0RVUF9FWF9EQVRBIn0sCiB7RVJSX0ZVTkMoQ1JZUFRPX0ZfSU5UX0ZSRUVfRVhfREFUQSksCSJJTlRfRlJFRV9FWF9EQVRBIn0sCiB7RVJSX0ZVTkMoQ1JZUFRPX0ZfSU5UX05FV19FWF9EQVRBKSwJIklOVF9ORVdfRVhfREFUQSJ9LApAQCAtODQsNiArODUsNyBAQAogCiBzdGF0aWMgRVJSX1NUUklOR19EQVRBIENSWVBUT19zdHJfcmVhc29uc1tdPQogCXsKK3tFUlJfUkVBU09OKENSWVBUT19SX0ZJUFNfTU9ERV9OT1RfU1VQUE9SVEVEKSwiZmlwcyBtb2RlIG5vdCBzdXBwb3J0ZWQifSwKIHtFUlJfUkVBU09OKENSWVBUT19SX05PX0RZTkxPQ0tfQ1JFQVRFX0NBTExCQUNLKSwibm8gZHlubG9jayBjcmVhdGUgY2FsbGJhY2sifSwKIHswLE5VTEx9CiAJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGxpYi5jIGIvY3J5cHRvL2NyeXB0bGliLmMKaW5kZXggMjRmZTEyMy4uNzY2ZWE4YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2NyeXB0bGliLmMKKysrIGIvY3J5cHRvL2NyeXB0bGliLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIHZvaWQgQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrKHZvaWQgKCpmdW5jKShpbnQgbW9kZSxpbnQgdHlwZSwKIAkJCQkJICAgICAgY29uc3QgY2hhciAqZmlsZSxpbnQgbGluZSkpCiAJeworCS8qIENhbGxpbmcgdGhpcyBoZXJlIGVuc3VyZXMgaW5pdGlhbGlzYXRpb24gYmVmb3JlIGFueSB0aHJlYWRzCisJICogYXJlIHN0YXJ0ZWQuCisJICovCisJT1BFTlNTTF9pbml0KCk7CiAJbG9ja2luZ19jYWxsYmFjaz1mdW5jOwogCX0KIApAQCAtNjYxLDI4ICs2NjUsNTIgQEAKIAlkZWZpbmVkKF9fSU5URUxfXykgfHwgXAogCWRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpCiAKLXVuc2lnbmVkIGxvbmcgIE9QRU5TU0xfaWEzMmNhcF9QPTA7Ci11bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpIHsgcmV0dXJuICZPUEVOU1NMX2lhMzJjYXBfUDsgfQordW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKK3Vuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKK3sgICBpZiAoc2l6ZW9mKGxvbmcpPT00KQorCS8qCisJICogSWYgMzItYml0IGFwcGxpY2F0aW9uIHB1bGxzIGFkZHJlc3Mgb2YgT1BFTlNTTF9pYTMyY2FwX1BbMF0KKwkgKiBjbGVhciBzZWNvbmQgZWxlbWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNpb24gdGhhdCB2ZWN0b3IKKwkgKiBpcyAzMi1iaXQuCisJICovCisJT1BFTlNTTF9pYTMyY2FwX1BbMV09MDsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgKilPUEVOU1NMX2lhMzJjYXBfUDsKK30KIAogI2lmIGRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChJMzg2X09OTFkpCiAjZGVmaW5lIE9QRU5TU0xfQ1BVSURfU0VUVVAKKyNpZiBkZWZpbmVkKF9XSU4zMikKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBJQTMyQ0FQOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7CisjZW5kaWYKIHZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKQogeyBzdGF0aWMgaW50IHRyaWdnZXI9MDsKLSAgdW5zaWduZWQgbG9uZyBPUEVOU1NMX2lhMzJfY3B1aWQodm9pZCk7CisgIElBMzJDQVAgT1BFTlNTTF9pYTMyX2NwdWlkKHZvaWQpOworICBJQTMyQ0FQIHZlYzsKICAgY2hhciAqZW52OwogCiAgICAgaWYgKHRyaWdnZXIpCXJldHVybjsKIAogICAgIHRyaWdnZXI9MTsKLSAgICBpZiAoKGVudj1nZXRlbnYoIk9QRU5TU0xfaWEzMmNhcCIpKSkKLQlPUEVOU1NMX2lhMzJjYXBfUCA9IHN0cnRvdWwoZW52LE5VTEwsMCl8KDE8PDEwKTsKKyAgICBpZiAoKGVudj1nZXRlbnYoIk9QRU5TU0xfaWEzMmNhcCIpKSkgeworCWludCBvZmYgPSAoZW52WzBdPT0nficpPzE6MDsKKyNpZiBkZWZpbmVkKF9XSU4zMikKKwlpZiAoIXNzY2FuZihlbnYrb2ZmLCIlSTY0aSIsJnZlYykpIHZlYyA9IHN0cnRvdWwoZW52K29mZixOVUxMLDApOworI2Vsc2UKKwlpZiAoIXNzY2FuZihlbnYrb2ZmLCIlbGxpIiwobG9uZyBsb25nICopJnZlYykpIHZlYyA9IHN0cnRvdWwoZW52K29mZixOVUxMLDApOworI2VuZGlmCisJaWYgKG9mZikgdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKCkmfnZlYzsKKyAgICB9CiAgICAgZWxzZQotCU9QRU5TU0xfaWEzMmNhcF9QID0gT1BFTlNTTF9pYTMyX2NwdWlkKCl8KDE8PDEwKTsKKwl2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoKTsKICAgICAvKgogICAgICAqIHwoMTw8MTApIHNldHMgYSByZXNlcnZlZCBiaXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFibGUKICAgICAgKiB3YXMgaW5pdGlhbGl6ZWQgYWxyZWFkeS4uLiBUaGlzIGlzIHRvIGF2b2lkIGludGVyZmVyZW5jZQogICAgICAqIHdpdGggY3B1aWQgc25pcHBldHMgaW4gRUxGIC5pbml0IHNlZ21lbnQuCiAgICAgICovCisgICAgT1BFTlNTTF9pYTMyY2FwX1BbMF0gPSAodW5zaWduZWQgaW50KXZlY3woMTw8MTApOworICAgIE9QRU5TU0xfaWEzMmNhcF9QWzFdID0gKHVuc2lnbmVkIGludCkodmVjPj4zMik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0bGliLmggYi9jcnlwdG8vY3J5cHRsaWIuaAppbmRleCBmYzI0OWM1Li4xNzYxZjZiIDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRsaWIuaAorKysgYi9jcnlwdG8vY3J5cHRsaWIuaApAQCAtOTksNyArOTksNyBAQAogI2RlZmluZSBIRVhfU0laRSh0eXBlKQkJKHNpemVvZih0eXBlKSoyKQogCiB2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBPUEVOU1NMX2lhMzJjYXBfUDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbXTsKIHZvaWQgT1BFTlNTTF9zaG93ZmF0YWwoY29uc3QgY2hhciAqLC4uLik7CiB2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKIGV4dGVybiBpbnQgT1BFTlNTTF9OT05QSUNfcmVsb2NhdGVkOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0by5oIGIvY3J5cHRvL2NyeXB0by5oCmluZGV4IGIwMzYwY2UuLjZhZWRhMGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9jcnlwdG8uaAorKysgYi9jcnlwdG8vY3J5cHRvLmgKQEAgLTU0Nyw2ICs1NDcsMzMgQEAKICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xfaWEzMmNhcF9sb2MoKSkpCiBpbnQgT1BFTlNTTF9pc3NlcnZpY2Uodm9pZCk7CiAKK2ludCBGSVBTX21vZGUodm9pZCk7CitpbnQgRklQU19tb2RlX3NldChpbnQgcik7CisKK3ZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOworCisjZGVmaW5lIGZpcHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKKwl7IFwKKwlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCisJCSJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKwlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKwl9IFwKKwlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCisKKyNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSBcCisJaWYgKEZJUFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisKKyNlbHNlCisjZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIHdoaWxlKDApCisjZW5kaWYKKwogLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCiAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KQEAgLTU2MiwxMSArNTg5LDEzIEBACiAjZGVmaW5lIENSWVBUT19GX0NSWVBUT19TRVRfRVhfREFUQQkJCSAxMDIKICNkZWZpbmUgQ1JZUFRPX0ZfREVGX0FERF9JTkRFWAkJCQkgMTA0CiAjZGVmaW5lIENSWVBUT19GX0RFRl9HRVRfQ0xBU1MJCQkJIDEwNQorI2RlZmluZSBDUllQVE9fRl9GSVBTX01PREVfU0VUCQkJCSAxMDkKICNkZWZpbmUgQ1JZUFRPX0ZfSU5UX0RVUF9FWF9EQVRBCQkJIDEwNgogI2RlZmluZSBDUllQVE9fRl9JTlRfRlJFRV9FWF9EQVRBCQkJIDEwNwogI2RlZmluZSBDUllQVE9fRl9JTlRfTkVXX0VYX0RBVEEJCQkgMTA4CiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgQ1JZUFRPX1JfRklQU19NT0RFX05PVF9TVVBQT1JURUQJCSAxMDEKICNkZWZpbmUgQ1JZUFRPX1JfTk9fRFlOTE9DS19DUkVBVEVfQ0FMTEJBQ0sJCSAxMDAKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy9kZXMuaCBiL2NyeXB0by9kZXMvZGVzLmgKaW5kZXggOTJiNjY2My4uMWVhZWRjYiAxMDA2NDQKLS0tIGEvY3J5cHRvL2Rlcy9kZXMuaAorKysgYi9jcnlwdG8vZGVzL2Rlcy5oCkBAIC0yMjQsNiArMjI0LDkgQEAKIGludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CiBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwogdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK3ZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyNlbmRpZgogdm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5KTsKIHZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKIHZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Rlcy9zZXRfa2V5LmMgYi9jcnlwdG8vZGVzL3NldF9rZXkuYwppbmRleCAzMDA0Y2MzLi5kM2U2OWNhIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzL3NldF9rZXkuYworKysgYi9jcnlwdG8vZGVzL3NldF9rZXkuYwpAQCAtNjUsNiArNjUsOCBAQAogICovCiAjaW5jbHVkZSAiZGVzX2xvY2wuaCIKIAorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisKIE9QRU5TU0xfSU1QTEVNRU5UX0dMT0JBTChpbnQsREVTX2NoZWNrX2tleSwwKQkvKiBkZWZhdWx0cyB0byBmYWxzZSAqLwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvZGRfcGFyaXR5WzI1Nl09ewpAQCAtMzM1LDYgKzMzNywxMyBAQAogCX0KIAogdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwl7CisJZmlwc19jaXBoZXJfYWJvcnQoREVTKTsKKwlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKwl9Cit2b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCisjZW5kaWYKIAl7CiAJc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CiAJcmVnaXN0ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaC5oIGIvY3J5cHRvL2RoL2RoLmgKaW5kZXggODQ5MzA5YS4uZWE1OWU2MSAxMDA2NDQKLS0tIGEvY3J5cHRvL2RoL2RoLmgKKysrIGIvY3J5cHRvL2RoL2RoLmgKQEAgLTg2LDYgKzg2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCisvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBESCBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5CisgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisgKi8KKworI2RlZmluZSBESF9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCisKKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KKyAqLworCisjZGVmaW5lIERIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTIzMCw2ICsyNDUsOSBAQAogI2RlZmluZSBESF9GX0NPTVBVVEVfS0VZCQkJCSAxMDIKICNkZWZpbmUgREhfRl9ESFBBUkFNU19QUklOVF9GUAkJCQkgMTAxCiAjZGVmaW5lIERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTA2CisjZGVmaW5lIERIX0ZfREhfQ09NUFVURV9LRVkJCQkJIDExNAorI2RlZmluZSBESF9GX0RIX0dFTkVSQVRFX0tFWQkJCQkgMTE1CisjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfUEFSQU1FVEVSU19FWAkJCSAxMTYKICNkZWZpbmUgREhfRl9ESF9ORVdfTUVUSE9ECQkJCSAxMDUKICNkZWZpbmUgREhfRl9ESF9QQVJBTV9ERUNPREUJCQkJIDEwNwogI2RlZmluZSBESF9GX0RIX1BSSVZfREVDT0RFCQkJCSAxMTAKQEAgLTI0OSw3ICsyNjcsOSBAQAogI2RlZmluZSBESF9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CiAjZGVmaW5lIERIX1JfSU5WQUxJRF9QVUJLRVkJCQkJIDEwMgogI2RlZmluZSBESF9SX0tFWVNfTk9UX1NFVAkJCQkgMTA4CisjZGVmaW5lIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKICNkZWZpbmUgREhfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTAzCisjZGVmaW5lIERIX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKICNkZWZpbmUgREhfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3CiAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCiAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RoL2RoX2FtZXRoLmMgYi9jcnlwdG8vZGgvZGhfYW1ldGguYwppbmRleCAzNzdjYWY5Li4wMmVjMmQ0IDEwMDY0NAotLS0gYS9jcnlwdG8vZGgvZGhfYW1ldGguYworKysgYi9jcnlwdG8vZGgvZGhfYW1ldGguYwpAQCAtNDkzLDYgKzQ5Myw3IEBACiAJZGhfY29weV9wYXJhbWV0ZXJzLAogCWRoX2NtcF9wYXJhbWV0ZXJzLAogCWRoX3BhcmFtX3ByaW50LAorCTAsCiAKIAlpbnRfZGhfZnJlZSwKIAkwCmRpZmYgLS1naXQgYS9jcnlwdG8vZGgvZGhfZXJyLmMgYi9jcnlwdG8vZGgvZGhfZXJyLmMKaW5kZXggZDVjZjBjMi4uNTZkM2RmNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2RoL2RoX2Vyci5jCisrKyBiL2NyeXB0by9kaC9kaF9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9kaC9kaF9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYgKzczLDkgQEAKIHtFUlJfRlVOQyhESF9GX0NPTVBVVEVfS0VZKSwJIkNPTVBVVEVfS0VZIn0sCiB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJESHBhcmFtc19wcmludF9mcCJ9LAoge0VSUl9GVU5DKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMifSwKK3tFUlJfRlVOQyhESF9GX0RIX0NPTVBVVEVfS0VZKSwJIkRIX2NvbXB1dGVfa2V5In0sCit7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkpLAkiREhfZ2VuZXJhdGVfa2V5In0sCit7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9QQVJBTUVURVJTX0VYKSwJIkRIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgifSwKIHtFUlJfRlVOQyhESF9GX0RIX05FV19NRVRIT0QpLAkiREhfbmV3X21ldGhvZCJ9LAoge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAoge0VSUl9GVU5DKERIX0ZfREhfUFJJVl9ERUNPREUpLAkiREhfUFJJVl9ERUNPREUifSwKQEAgLTk1LDcgKzk4LDkgQEAKIHtFUlJfUkVBU09OKERIX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAgICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKIHtFUlJfUkVBU09OKERIX1JfS0VZU19OT1RfU0VUKSAgICAgICAgICAgLCJrZXlzIG5vdCBzZXQifSwKK3tFUlJfUkVBU09OKERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAore0VSUl9SRUFTT04oREhfUl9OT05fRklQU19NRVRIT0QpICAgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAoge0VSUl9SRUFTT04oREhfUl9OT19QQVJBTUVURVJTX1NFVCkgICAgICAsIm5vIHBhcmFtZXRlcnMgc2V0In0sCiB7RVJSX1JFQVNPTihESF9SX05PX1BSSVZBVEVfVkFMVUUpICAgICAgICwibm8gcHJpdmF0ZSB2YWx1ZSJ9LAoge0VSUl9SRUFTT04oREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IpLCJwYXJhbWV0ZXIgZW5jb2RpbmcgZXJyb3IifSwKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9nZW4uYyBiL2NyeXB0by9kaC9kaF9nZW4uYwppbmRleCBjZmQ1YjExLi43YjFmZTljIDEwMDY0NAotLS0gYS9jcnlwdG8vZGgvZGhfZ2VuLmMKKysrIGIvY3J5cHRvL2RoL2RoX2dlbi5jCkBAIC02NiwxMiArNjYsMjkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKKwogc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpOwogCiBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBESF9GTEFHX0ZJUFNfTUVUSE9EKQorCQkJJiYgIShyZXQtPmZsYWdzICYgREhfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJREhlcnIoREhfRl9ESF9HRU5FUkFURV9QQVJBTUVURVJTX0VYLCBESF9SX05PTl9GSVBTX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAlpZihyZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFtcykKIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkpCisJCXJldHVybiBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCisJCQkJCQkJZ2VuZXJhdG9yLCBjYik7CisjZW5kaWYKIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2RoL2RoX2tleS5jIGIvY3J5cHRvL2RoL2RoX2tleS5jCmluZGV4IGU3ZGI0NDAuLjg5YTc0ZGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kaC9kaF9rZXkuYworKysgYi9jcnlwdG8vZGgvZGhfa2V5LmMKQEAgLTczLDExICs3MywyNyBAQAogCiBpbnQgREhfZ2VuZXJhdGVfa2V5KERIICpkaCkKIAl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpICYmICEoZGgtPm1ldGgtPmZsYWdzICYgREhfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoZGgtPmZsYWdzICYgREhfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJREhlcnIoREhfRl9ESF9HRU5FUkFURV9LRVksIERIX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKwkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgogCXJldHVybiBkaC0+bWV0aC0+Z2VuZXJhdGVfa2V5KGRoKTsKIAl9CiAKIGludCBESF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKQogCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIShkaC0+bWV0aC0+ZmxhZ3MgJiBESF9GTEFHX0ZJUFNfTUVUSE9EKQorCQkJJiYgIShkaC0+ZmxhZ3MgJiBESF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlESGVycihESF9GX0RIX0NPTVBVVEVfS0VZLCBESF9SX05PTl9GSVBTX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAlyZXR1cm4gZGgtPm1ldGgtPmNvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOwogCX0KIApAQCAtMTM4LDggKzE1NCwyMSBAQAogCiAJaWYgKGdlbmVyYXRlX25ld19rZXkpCiAJCXsKLQkJbCA9IGRoLT5sZW5ndGggPyBkaC0+bGVuZ3RoIDogQk5fbnVtX2JpdHMoZGgtPnApLTE7IC8qIHNlY3JldCBleHBvbmVudCBsZW5ndGggKi8KLQkJaWYgKCFCTl9yYW5kKHByaXZfa2V5LCBsLCAwLCAwKSkgZ290byBlcnI7CisJCWlmIChkaC0+cSkKKwkJCXsKKwkJCWRvCisJCQkJeworCQkJCWlmICghQk5fcmFuZF9yYW5nZShwcml2X2tleSwgZGgtPnEpKQorCQkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl3aGlsZSAoQk5faXNfemVybyhwcml2X2tleSkgfHwgQk5faXNfb25lKHByaXZfa2V5KSk7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCS8qIHNlY3JldCBleHBvbmVudCBsZW5ndGggKi8KKwkJCWwgPSBkaC0+bGVuZ3RoID8gZGgtPmxlbmd0aCA6IEJOX251bV9iaXRzKGRoLT5wKS0xOworCQkJaWYgKCFCTl9yYW5kKHByaXZfa2V5LCBsLCAwLCAwKSkgZ290byBlcnI7CisJCQl9CiAJCX0KIAogCXsKZGlmZiAtLWdpdCBhL2NyeXB0by9kaC9kaF9saWIuYyBiL2NyeXB0by9kaC9kaF9saWIuYwppbmRleCA3YWVmMDgwLi4wMDIxOGYyIDEwMDY0NAotLS0gYS9jcnlwdG8vZGgvZGhfbGliLmMKKysrIGIvY3J5cHRvL2RoL2RoX2xpYi5jCkBAIC02NCw2ICs2NCwxMCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CiAjZW5kaWYKIAorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCisKIGNvbnN0IGNoYXIgREhfdmVyc2lvbltdPSJEaWZmaWUtSGVsbG1hbiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwogCiBzdGF0aWMgY29uc3QgREhfTUVUSE9EICpkZWZhdWx0X0RIX21ldGhvZCA9IE5VTEw7CkBAIC03Niw3ICs4MCwxNiBAQAogY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKIAl7CiAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQorCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWlmIChGSVBTX21vZGUoKSkKKwkJCXJldHVybiBGSVBTX2RoX29wZW5zc2woKTsKKwkJZWxzZQorCQkJcmV0dXJuIERIX09wZW5TU0woKTsKKyNlbHNlCiAJCWRlZmF1bHRfREhfbWV0aG9kID0gREhfT3BlblNTTCgpOworI2VuZGlmCisJCX0KIAlyZXR1cm4gZGVmYXVsdF9ESF9tZXRob2Q7CiAJfQogCkBAIC0xNTYsNyArMTY5LDcgQEAKIAlyZXQtPmNvdW50ZXIgPSBOVUxMOwogCXJldC0+bWV0aG9kX21vbnRfcD1OVUxMOwogCXJldC0+cmVmZXJlbmNlcyA9IDE7Ci0JcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzOworCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAmIH5ESF9GTEFHX05PTl9GSVBTX0FMTE9XOwogCUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfREgsIHJldCwgJnJldC0+ZXhfZGF0YSk7CiAJaWYgKChyZXQtPm1ldGgtPmluaXQgIT0gTlVMTCkgJiYgIXJldC0+bWV0aC0+aW5pdChyZXQpKQogCQl7CmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYS5oIGIvY3J5cHRvL2RzYS9kc2EuaAppbmRleCBhYzUwYTVjLi5hNmY2ZDBiIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYS5oCisrKyBiL2NyeXB0by9kc2EvZHNhLmgKQEAgLTk3LDYgKzk3LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5CisgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisgKi8KKworI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAorCisvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisgKiB1c2FnZSBpcyBjb21wbGlhbnQuCisgKi8KKworI2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMjcyLDYgKzI4Nyw4IEBACiAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgogI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWQkJCQkgMTI0CisjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkgMTIzCiAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKICNkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5CiAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CkBAIC0yODIsNiArMjk5LDcgQEAKICNkZWZpbmUgRFNBX0ZfRFNBX1NJR04JCQkJCSAxMDYKICNkZWZpbmUgRFNBX0ZfRFNBX1NJR05fU0VUVVAJCQkJIDEwNwogI2RlZmluZSBEU0FfRl9EU0FfU0lHX05FVwkJCQkgMTA5CisjZGVmaW5lIERTQV9GX0RTQV9TSUdfUFJJTlQJCQkJIDEyNQogI2RlZmluZSBEU0FfRl9EU0FfVkVSSUZZCQkJCSAxMDgKICNkZWZpbmUgRFNBX0ZfSTJEX0RTQV9TSUcJCQkJIDExMQogI2RlZmluZSBEU0FfRl9PTERfRFNBX1BSSVZfREVDT0RFCQkJIDEyMgpAQCAtMjk4LDYgKzMxNiw4IEBACiAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2CiAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKICNkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEwCisjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTExCiAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9hbWV0aC5jIGIvY3J5cHRvL2RzYS9kc2FfYW1ldGguYwppbmRleCA2NDEzYWFlLi4zNzYxNTZlIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9hbWV0aC5jCisrKyBiL2NyeXB0by9kc2EvZHNhX2FtZXRoLmMKQEAgLTU0Miw2ICs1NDIsNTIgQEAKIAlyZXR1cm4gaTJkX0RTQVByaXZhdGVLZXkocGtleS0+cGtleS5kc2EsIHBkZXIpOwogCX0KIAorc3RhdGljIGludCBkc2Ffc2lnX3ByaW50KEJJTyAqYnAsIGNvbnN0IFg1MDlfQUxHT1IgKnNpZ2FsZywKKwkJCQkJY29uc3QgQVNOMV9TVFJJTkcgKnNpZywKKwkJCQkJaW50IGluZGVudCwgQVNOMV9QQ1RYICpwY3R4KQorCXsKKwlEU0FfU0lHICpkc2Ffc2lnOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisJaWYgKCFzaWcpCisJCXsKKwkJaWYgKEJJT19wdXRzKGJwLCAiXG4iKSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAxOworCQl9CisJcCA9IHNpZy0+ZGF0YTsKKwlkc2Ffc2lnID0gZDJpX0RTQV9TSUcoTlVMTCwgJnAsIHNpZy0+bGVuZ3RoKTsKKwlpZiAoZHNhX3NpZykKKwkJeworCQlpbnQgcnYgPSAwOworCQlzaXplX3QgYnVmX2xlbiA9IDA7CisJCXVuc2lnbmVkIGNoYXIgKm09TlVMTDsKKwkJdXBkYXRlX2J1Zmxlbihkc2Ffc2lnLT5yLCAmYnVmX2xlbik7CisJCXVwZGF0ZV9idWZsZW4oZHNhX3NpZy0+cywgJmJ1Zl9sZW4pOworCQltID0gT1BFTlNTTF9tYWxsb2MoYnVmX2xlbisxMCk7CisJCWlmIChtID09IE5VTEwpCisJCQl7CisJCQlEU0FlcnIoRFNBX0ZfRFNBX1NJR19QUklOVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlnb3RvIGVycjsKKwkJCX0KKworCQlpZiAoQklPX3dyaXRlKGJwLCAiXG4iLCAxKSAhPSAxKQorCQkJZ290byBlcnI7CisKKwkJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJyOiAgICIsZHNhX3NpZy0+cixtLGluZGVudCkpCisJCQlnb3RvIGVycjsKKwkJaWYgKCFBU04xX2JuX3ByaW50KGJwLCJzOiAgICIsZHNhX3NpZy0+cyxtLGluZGVudCkpCisJCQlnb3RvIGVycjsKKwkJcnYgPSAxOworCQllcnI6CisJCWlmIChtKQorCQkJT1BFTlNTTF9mcmVlKG0pOworCQlEU0FfU0lHX2ZyZWUoZHNhX3NpZyk7CisJCXJldHVybiBydjsKKwkJfQorCXJldHVybiBYNTA5X3NpZ25hdHVyZV9kdW1wKGJwLCBzaWcsIGluZGVudCk7CisJfQorCiBzdGF0aWMgaW50IGRzYV9wa2V5X2N0cmwoRVZQX1BLRVkgKnBrZXksIGludCBvcCwgbG9uZyBhcmcxLCB2b2lkICphcmcyKQogCXsKIAlzd2l0Y2ggKG9wKQpAQCAtNjQ3LDYgKzY5Myw3IEBACiAJCWRzYV9jb3B5X3BhcmFtZXRlcnMsCiAJCWRzYV9jbXBfcGFyYW1ldGVycywKIAkJZHNhX3BhcmFtX3ByaW50LAorCQlkc2Ffc2lnX3ByaW50LAogCiAJCWludF9kc2FfZnJlZSwKIAkJZHNhX3BrZXlfY3RybCwKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX2FzbjEuYyBiL2NyeXB0by9kc2EvZHNhX2FzbjEuYwppbmRleCBjMzc0NjBiLi42MDU4NTM0IDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9hc24xLmMKKysrIGIvY3J5cHRvL2RzYS9kc2FfYXNuMS5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAKIC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG5ldyBtZXRob2RzICovCiBzdGF0aWMgaW50IHNpZ19jYihpbnQgb3BlcmF0aW9uLCBBU04xX1ZBTFVFICoqcHZhbCwgY29uc3QgQVNOMV9JVEVNICppdCwKQEAgLTg3LDcgKzg4LDcgQEAKIAlBU04xX1NJTVBMRShEU0FfU0lHLCBzLCBDQklHTlVNKQogfSBBU04xX1NFUVVFTkNFX0VORF9jYihEU0FfU0lHLCBEU0FfU0lHKQogCi1JTVBMRU1FTlRfQVNOMV9GVU5DVElPTlNfY29uc3QoRFNBX1NJRykKK0lNUExFTUVOVF9BU04xX0VOQ09ERV9GVU5DVElPTlNfY29uc3RfZm5hbWUoRFNBX1NJRywgRFNBX1NJRywgRFNBX1NJRykKIAogLyogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZnJlZSBhbmQgbmV3IG1ldGhvZHMgKi8KIHN0YXRpYyBpbnQgZHNhX2NiKGludCBvcGVyYXRpb24sIEFTTjFfVkFMVUUgKipwdmFsLCBjb25zdCBBU04xX0lURU0gKml0LApAQCAtMTQ4LDMgKzE0OSw0MCBAQAogCXsKIAlyZXR1cm4gQVNOMV9pdGVtX2R1cChBU04xX0lURU1fcnB0cihEU0FwYXJhbXMpLCBkc2EpOwogCX0KKworaW50IERTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgdW5zaWduZWQgY2hhciAqc2lnLAorCSAgICAgdW5zaWduZWQgaW50ICpzaWdsZW4sIERTQSAqZHNhKQorCXsKKwlEU0FfU0lHICpzOworCVJBTkRfc2VlZChkZ3N0LCBkbGVuKTsKKwlzPURTQV9kb19zaWduKGRnc3QsZGxlbixkc2EpOworCWlmIChzID09IE5VTEwpCisJCXsKKwkJKnNpZ2xlbj0wOworCQlyZXR1cm4oMCk7CisJCX0KKwkqc2lnbGVuPWkyZF9EU0FfU0lHKHMsJnNpZyk7CisJRFNBX1NJR19mcmVlKHMpOworCXJldHVybigxKTsKKwl9CisKKy8qIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBoYXNoZWQgKHByb2JhYmx5IHdpdGggU0hBIG9yIFNIQS0xKS4gKi8KKy8qIHJldHVybnMKKyAqICAgICAgMTogY29ycmVjdCBzaWduYXR1cmUKKyAqICAgICAgMDogaW5jb3JyZWN0IHNpZ25hdHVyZQorICogICAgIC0xOiBlcnJvcgorICovCitpbnQgRFNBX3ZlcmlmeShpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLAorCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLCBpbnQgc2lnbGVuLCBEU0EgKmRzYSkKKwl7CisJRFNBX1NJRyAqczsKKwlpbnQgcmV0PS0xOworCisJcyA9IERTQV9TSUdfbmV3KCk7CisJaWYgKHMgPT0gTlVMTCkgcmV0dXJuKHJldCk7CisJaWYgKGQyaV9EU0FfU0lHKCZzLCZzaWdidWYsc2lnbGVuKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlyZXQ9RFNBX2RvX3ZlcmlmeShkZ3N0LGRnc3RfbGVuLHMsZHNhKTsKK2VycjoKKwlEU0FfU0lHX2ZyZWUocyk7CisJcmV0dXJuKHJldCk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfZXJyLmMgYi9jcnlwdG8vZHNhL2RzYV9lcnIuYwppbmRleCBiYmE5ODRlLi4wMDU0NWI3IDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9lcnIuYworKysgYi9jcnlwdG8vZHNhL2RzYV9lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9kc2EvZHNhX2Vyci5jICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzYsNiArNzYsOCBAQAoge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCksCSJEU0FwYXJhbXNfcHJpbnRfZnAifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAore0VSUl9GVU5DKERTQV9GX0RTQV9HRU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAore0VSUl9GVU5DKERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYKSwJIkRTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4In0sCiB7RVJSX0ZVTkMoRFNBX0ZfRFNBX05FV19NRVRIT0QpLAkiRFNBX25ld19tZXRob2QifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfUEFSQU1fREVDT0RFKSwJIkRTQV9QQVJBTV9ERUNPREUifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfUFJJTlRfRlApLAkiRFNBX3ByaW50X2ZwIn0sCkBAIC04Niw2ICs4OCw3IEBACiB7RVJSX0ZVTkMoRFNBX0ZfRFNBX1NJR04pLAkiRFNBX3NpZ24ifSwKIHtFUlJfRlVOQyhEU0FfRl9EU0FfU0lHTl9TRVRVUCksCSJEU0Ffc2lnbl9zZXR1cCJ9LAoge0VSUl9GVU5DKERTQV9GX0RTQV9TSUdfTkVXKSwJIkRTQV9TSUdfbmV3In0sCit7RVJSX0ZVTkMoRFNBX0ZfRFNBX1NJR19QUklOVCksCSJEU0FfU0lHX1BSSU5UIn0sCiB7RVJSX0ZVTkMoRFNBX0ZfRFNBX1ZFUklGWSksCSJEU0FfdmVyaWZ5In0sCiB7RVJSX0ZVTkMoRFNBX0ZfSTJEX0RTQV9TSUcpLAkiaTJkX0RTQV9TSUcifSwKIHtFUlJfRlVOQyhEU0FfRl9PTERfRFNBX1BSSVZfREVDT0RFKSwJIk9MRF9EU0FfUFJJVl9ERUNPREUifSwKQEAgLTEwNSw2ICsxMDgsOCBAQAoge0VSUl9SRUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSkgICAsImludmFsaWQgZGlnZXN0IHR5cGUifSwKIHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFtZXRlcnMifSwKIHtFUlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAore0VSUl9SRUFTT04oRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSAsIm5lZWQgbmV3IHNldHVwIHZhbHVlcyJ9LAore0VSUl9SRUFTT04oRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRCkgICAsIm5vbiBmaXBzIGRzYSBtZXRob2QifSwKIHtFUlJfUkVBU09OKERTQV9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAoge0VSUl9SRUFTT04oRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SKSwicGFyYW1ldGVyIGVuY29kaW5nIGVycm9yIn0sCiB7MCxOVUxMfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMgYi9jcnlwdG8vZHNhL2RzYV9nZW4uYwppbmRleCBjYjBiNDUzLi5jMzk4NzYxIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9nZW4uYworKysgYi9jcnlwdG8vZHNhL2RzYV9nZW4uYwpAQCAtODEsMTMgKzgxLDMzIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KICNpbmNsdWRlICJkc2FfbG9jbC5oIgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKKwogaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAogCQlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQogCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgRFNBX0ZMQUdfRklQU19NRVRIT0QpCisJCQkmJiAhKHJldC0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJRFNBZXJyKERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYLCBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9EKTsKKwkJcmV0dXJuIDA7CisJCX0KKyNlbmRpZgogCWlmKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQogCQlyZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwllbHNlIGlmIChGSVBTX21vZGUoKSkKKwkJeworCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIGJpdHMsIAorCQkJCQkJCXNlZWRfaW4sIHNlZWRfbGVuLAorCQkJCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworCQl9CisjZW5kaWYKIAllbHNlCiAJCXsKIAkJY29uc3QgRVZQX01EICpldnBtZDsKQEAgLTEwNSwxMiArMTI1LDEzIEBACiAJCQl9CiAKIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMsIGV2cG1kLAotCQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKwkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKIAkJfQogCX0KIAogaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAogCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKwl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQogCXsKIAlpbnQgb2s9MDsKQEAgLTIwMSw4ICsyMjIsMTAgQEAKIAkJCQl9CiAKIAkJCS8qIHN0ZXAgMiAqLwotCQkJRVZQX0RpZ2VzdChzZWVkLCBxc2l6ZSwgbWQsICAgTlVMTCwgZXZwbWQsIE5VTEwpOwotCQkJRVZQX0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQsIE5VTEwpOworCQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQsIHFzaXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCisJCQkJZ290byBlcnI7CisJCQlpZiAoIUVWUF9EaWdlc3QoYnVmLCAgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKwkJCQlnb3RvIGVycjsKIAkJCWZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQogCQkJCW1kW2ldXj1idWYyW2ldOwogCkBAIC0yNTEsNyArMjc0LDkgQEAKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAKLQkJCQlFVlBfRGlnZXN0KGJ1ZiwgcXNpemUsIG1kICxOVUxMLCBldnBtZCwgTlVMTCk7CisJCQkJaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgcXNpemUsIG1kICxOVUxMLCBldnBtZCwKKwkJCQkJCQkJCU5VTEwpKQorCQkJCQlnb3RvIGVycjsKIAogCQkJCS8qIHN0ZXAgOCAqLwogCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQpAQCAtMzMyLDYgKzM1Nyw4IEBACiAJCQl9CiAJCWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKIAkJaWYgKGhfcmV0ICE9IE5VTEwpICpoX3JldD1oOworCQlpZiAoc2VlZF9vdXQpCisJCQltZW1jcHkoc2VlZF9vdXQsIHNlZWQsIHFzaXplKTsKIAkJfQogCWlmKGN0eCkKIAkJewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2Ffa2V5LmMgYi9jcnlwdG8vZHNhL2RzYV9rZXkuYwppbmRleCBjNGFhODZiLi45Y2Y2NjliIDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9rZXkuYworKysgYi9jcnlwdG8vZHNhL2RzYV9rZXkuYwpAQCAtNjQsMTIgKzY0LDI4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KIAorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCisKIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKIAogaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSwgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCiAJCXJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkpCisJCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKKyNlbmRpZgogCXJldHVybiBkc2FfYnVpbHRpbl9rZXlnZW4oZHNhKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX2xpYi5jIGIvY3J5cHRvL2RzYS9kc2FfbGliLmMKaW5kZXggZTliNzU5MC4uOTZkOGQwYyAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2FfbGliLmMKKysrIGIvY3J5cHRvL2RzYS9kc2FfbGliLmMKQEAgLTcwLDYgKzcwLDEwIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogI2VuZGlmCiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgorCiBjb25zdCBjaGFyIERTQV92ZXJzaW9uW109IkRTQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwogCiBzdGF0aWMgY29uc3QgRFNBX01FVEhPRCAqZGVmYXVsdF9EU0FfbWV0aG9kID0gTlVMTDsKQEAgLTgyLDcgKzg2LDE2IEBACiBjb25zdCBEU0FfTUVUSE9EICpEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCiAJewogCWlmKCFkZWZhdWx0X0RTQV9tZXRob2QpCisJCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwkJaWYgKEZJUFNfbW9kZSgpKQorCQkJcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKKwkJZWxzZQorCQkJcmV0dXJuIERTQV9PcGVuU1NMKCk7CisjZWxzZQogCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOworI2VuZGlmCisJCX0KIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwogCX0KIApAQCAtMTYzLDcgKzE3Niw3IEBACiAJcmV0LT5tZXRob2RfbW9udF9wPU5VTEw7CiAKIAlyZXQtPnJlZmVyZW5jZXM9MTsKLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3M7CisJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzICYgfkRTQV9GTEFHX05PTl9GSVBTX0FMTE9XOwogCUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfRFNBLCByZXQsICZyZXQtPmV4X2RhdGEpOwogCWlmICgocmV0LT5tZXRoLT5pbml0ICE9IE5VTEwpICYmICFyZXQtPm1ldGgtPmluaXQocmV0KSkKIAkJewpAQCAtMjc2LDcgKzI4OSw4IEBACiBESCAqRFNBX2R1cF9ESChjb25zdCBEU0EgKnIpCiAJewogCS8qIERTQSBoYXMgcCwgcSwgZywgb3B0aW9uYWwgcHViX2tleSwgb3B0aW9uYWwgcHJpdl9rZXkuCi0JICogREggaGFzIHAsIG9wdGlvbmFsIGxlbmd0aCwgZywgb3B0aW9uYWwgcHViX2tleSwgb3B0aW9uYWwgcHJpdl9rZXkuCisJICogREggaGFzIHAsIG9wdGlvbmFsIGxlbmd0aCwgZywgb3B0aW9uYWwgcHViX2tleSwgb3B0aW9uYWwgcHJpdl9rZXksCisJICogb3B0aW9uYWwgcS4KIAkgKi8gCiAKIAlESCAqcmV0ID0gTlVMTDsKQEAgLTI5MCw3ICszMDQsMTEgQEAKIAkJaWYgKChyZXQtPnAgPSBCTl9kdXAoci0+cCkpID09IE5VTEwpCiAJCQlnb3RvIGVycjsKIAlpZiAoci0+cSAhPSBOVUxMKQorCQl7CiAJCXJldC0+bGVuZ3RoID0gQk5fbnVtX2JpdHMoci0+cSk7CisJCWlmICgocmV0LT5xID0gQk5fZHVwKHItPnEpKSA9PSBOVUxMKQorCQkJZ290byBlcnI7CisJCX0KIAlpZiAoci0+ZyAhPSBOVUxMKQogCQlpZiAoKHJldC0+ZyA9IEJOX2R1cChyLT5nKSkgPT0gTlVMTCkKIAkJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2RzYS9kc2FfbG9jbC5oIGIvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCmluZGV4IDJiOGNmZWUuLjIxZTJlNDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc2EvZHNhX2xvY2wuaAorKysgYi9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKQEAgLTU2LDQgKzU2LDUgQEAKIAogaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAogCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKwl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX29zc2wuYyBiL2NyeXB0by9kc2EvZHNhX29zc2wuYwppbmRleCBhM2RkZDdkLi5iM2Q3OGU1IDEwMDY0NAotLS0gYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKysrIGIvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCkBAIC0xMzYsNiArMTM2LDcgQEAKIAlCTl9DVFggKmN0eD1OVUxMOwogCWludCByZWFzb249RVJSX1JfQk5fTElCOwogCURTQV9TSUcgKnJldD1OVUxMOworCWludCBub3JlZG8gPSAwOwogCiAJQk5faW5pdCgmbSk7CiAJQk5faW5pdCgmeHIpOwpAQCAtMTUwLDcgKzE1MSw3IEBACiAJaWYgKHMgPT0gTlVMTCkgZ290byBlcnI7CiAJY3R4PUJOX0NUWF9uZXcoKTsKIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotCityZWRvOgogCWlmICgoZHNhLT5raW52ID09IE5VTEwpIHx8IChkc2EtPnIgPT0gTlVMTCkpCiAJCXsKIAkJaWYgKCFEU0Ffc2lnbl9zZXR1cChkc2EsY3R4LCZraW52LCZyKSkgZ290byBlcnI7CkBAIC0xNjEsNiArMTYyLDcgQEAKIAkJZHNhLT5raW52PU5VTEw7CiAJCXI9ZHNhLT5yOwogCQlkc2EtPnI9TlVMTDsKKwkJbm9yZWRvID0gMTsKIAkJfQogCiAJCkBAIC0xODEsNiArMTgzLDE4IEBACiAKIAlyZXQ9RFNBX1NJR19uZXcoKTsKIAlpZiAocmV0ID09IE5VTEwpIGdvdG8gZXJyOworCS8qIFJlZG8gaWYgciBvciBzIGlzIHplcm8gYXMgcmVxdWlyZWQgYnkgRklQUyAxODYtMzogdGhpcyBpcworCSAqIHZlcnkgdW5saWtlbHkuCisJICovCisJaWYgKEJOX2lzX3plcm8ocikgfHwgQk5faXNfemVybyhzKSkKKwkJeworCQlpZiAobm9yZWRvKQorCQkJeworCQkJcmVhc29uID0gRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTOworCQkJZ290byBlcnI7CisJCQl9CisJCWdvdG8gcmVkbzsKKwkJfQogCXJldC0+ciA9IHI7CiAJcmV0LT5zID0gczsKIAkKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMgYi9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCmluZGV4IGUyZGY1NGYuLjcxNWQ4ZDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKKysrIGIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwpAQCAtMTg5LDcgKzE4OSw5IEBACiAJCSAgICBFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9kc2EgICAgJiYKIAkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX2RzYVdpdGhTSEEgICAgJiYKIAkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX3NoYTIyNCAmJgotCQkgICAgRVZQX01EX3R5cGUoKGNvbnN0IEVWUF9NRCAqKXAyKSAhPSBOSURfc2hhMjU2KQorCQkgICAgRVZQX01EX3R5cGUoKGNvbnN0IEVWUF9NRCAqKXAyKSAhPSBOSURfc2hhMjU2ICYmCisJCSAgICBFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEzODQgJiYKKwkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX3NoYTUxMikKIAkJCXsKIAkJCURTQWVycihEU0FfRl9QS0VZX0RTQV9DVFJMLCBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKTsKIAkJCXJldHVybiAwOwpAQCAtMjUzLDcgKzI1NSw3IEBACiAJaWYgKCFkc2EpCiAJCXJldHVybiAwOwogCXJldCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBkY3R4LT5wbWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgcGNiKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOwogCWlmIChyZXQpCiAJCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKIAllbHNlCmRpZmYgLS1naXQgYS9jcnlwdG8vZHNhL2RzYV9zaWduLmMgYi9jcnlwdG8vZHNhL2RzYV9zaWduLmMKaW5kZXggMTc1NTVlNS4uYzNjYzM2NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2Ffc2lnbi5jCisrKyBiL2NyeXB0by9kc2EvZHNhX3NpZ24uYwpAQCAtNjEsMzAgKzYxLDU0IEBACiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KIAogRFNBX1NJRyAqIERTQV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSkKIAl7Ci0JcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2RvX3NpZ24oZGdzdCwgZGxlbiwgZHNhKTsKLQl9Ci0KLWludCBEU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIHVuc2lnbmVkIGNoYXIgKnNpZywKLQkgICAgIHVuc2lnbmVkIGludCAqc2lnbGVuLCBEU0EgKmRzYSkKLQl7Ci0JRFNBX1NJRyAqczsKLQlSQU5EX3NlZWQoZGdzdCwgZGxlbik7Ci0Jcz1EU0FfZG9fc2lnbihkZ3N0LGRsZW4sZHNhKTsKLQlpZiAocyA9PSBOVUxMKQorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKIAkJewotCQkqc2lnbGVuPTA7Ci0JCXJldHVybigwKTsKKwkJRFNBZXJyKERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9EKTsKKwkJcmV0dXJuIE5VTEw7CiAJCX0KLQkqc2lnbGVuPWkyZF9EU0FfU0lHKHMsJnNpZyk7Ci0JRFNBX1NJR19mcmVlKHMpOwotCXJldHVybigxKTsKKyNlbmRpZgorCXJldHVybiBkc2EtPm1ldGgtPmRzYV9kb19zaWduKGRnc3QsIGRsZW4sIGRzYSk7CiAJfQogCiBpbnQgRFNBX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX1NJR05fU0VUVVAsIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QpOworCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCiAJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX3NpZ25fc2V0dXAoZHNhLCBjdHhfaW4sIGtpbnZwLCBycCk7CiAJfQogCitEU0FfU0lHICpEU0FfU0lHX25ldyh2b2lkKQorCXsKKwlEU0FfU0lHICpzaWc7CisJc2lnID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKERTQV9TSUcpKTsKKwlpZiAoIXNpZykKKwkJcmV0dXJuIE5VTEw7CisJc2lnLT5yID0gTlVMTDsKKwlzaWctPnMgPSBOVUxMOworCXJldHVybiBzaWc7CisJfQorCit2b2lkIERTQV9TSUdfZnJlZShEU0FfU0lHICpzaWcpCisJeworCWlmIChzaWcpCisJCXsKKwkJaWYgKHNpZy0+cikKKwkJCUJOX2ZyZWUoc2lnLT5yKTsKKwkJaWYgKHNpZy0+cykKKwkJCUJOX2ZyZWUoc2lnLT5zKTsKKwkJT1BFTlNTTF9mcmVlKHNpZyk7CisJCX0KKwl9CisKZGlmZiAtLWdpdCBhL2NyeXB0by9kc2EvZHNhX3ZyZi5jIGIvY3J5cHRvL2RzYS9kc2FfdnJmLmMKaW5kZXggMjI2YTc1Zi4uNjc0Y2I1ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2RzYS9kc2FfdnJmLmMKKysrIGIvY3J5cHRvL2RzYS9kc2FfdnJmLmMKQEAgLTY0LDI2ICs2NCwxMyBAQAogaW50IERTQV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRnc3RfbGVuLCBEU0FfU0lHICpzaWcsCiAJCSAgRFNBICpkc2EpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+bWV0aC0+ZmxhZ3MgJiBEU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRCk7CisJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCiAJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2RvX3ZlcmlmeShkZ3N0LCBkZ3N0X2xlbiwgc2lnLCBkc2EpOwogCX0KLQotLyogZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGhhc2hlZCAocHJvYmFibHkgd2l0aCBTSEEgb3IgU0hBLTEpLiAqLwotLyogcmV0dXJucwotICogICAgICAxOiBjb3JyZWN0IHNpZ25hdHVyZQotICogICAgICAwOiBpbmNvcnJlY3Qgc2lnbmF0dXJlCi0gKiAgICAgLTE6IGVycm9yCi0gKi8KLWludCBEU0FfdmVyaWZ5KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGdzdF9sZW4sCi0JICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsIGludCBzaWdsZW4sIERTQSAqZHNhKQotCXsKLQlEU0FfU0lHICpzOwotCWludCByZXQ9LTE7Ci0KLQlzID0gRFNBX1NJR19uZXcoKTsKLQlpZiAocyA9PSBOVUxMKSByZXR1cm4ocmV0KTsKLQlpZiAoZDJpX0RTQV9TSUcoJnMsJnNpZ2J1ZixzaWdsZW4pID09IE5VTEwpIGdvdG8gZXJyOwotCXJldD1EU0FfZG9fdmVyaWZ5KGRnc3QsZGdzdF9sZW4scyxkc2EpOwotZXJyOgotCURTQV9TSUdfZnJlZShzKTsKLQlyZXR1cm4ocmV0KTsKLQl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZHNvL2Rzb19kbGZjbi5jIGIvY3J5cHRvL2Rzby9kc29fZGxmY24uYwppbmRleCBjMmJjNjE3Li41ZjIyNTQ4IDEwMDY0NAotLS0gYS9jcnlwdG8vZHNvL2Rzb19kbGZjbi5jCisrKyBiL2NyeXB0by9kc28vZHNvX2RsZmNuLmMKQEAgLTg2LDcgKzg2LDggQEAKICMgaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IFwKICAgICAgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pIHx8IGRlZmluZWQoX1NDT19FTEYpIHx8IFwKICAgICAgKGRlZmluZWQoX19vc2ZfXykgJiYgIWRlZmluZWQoUlRMRF9ORVhUKSkgICAgIHx8IFwKLSAgICAgKGRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKFJUTERfU0VMRikpCisgICAgIChkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChSVExEX1NFTEYpKSB8fCBcCisJZGVmaW5lZChfX0FORFJPSURfXykKICMgIHVuZGVmIEhBVkVfRExJTkZPCiAjIGVuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lYy5oIGIvY3J5cHRvL2VjL2VjLmgKaW5kZXggZWU3MDc4MS4uOWQwMTMyNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjLmgKKysrIGIvY3J5cHRvL2VjL2VjLmgKQEAgLTE1MSw3ICsxNTEsMjQgQEAKICAqLwogY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfbmlzdF9tZXRob2Qodm9pZCk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4CisvKiogUmV0dXJucyA2NC1iaXQgb3B0aW1pemVkIG1ldGhvZHMgZm9yIG5pc3RwMjI0CisgKiAgXHJldHVybiAgRUNfTUVUSE9EIG9iamVjdAorICovCitjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9uaXN0cDIyNF9tZXRob2Qodm9pZCk7CiAKKy8qKiBSZXR1cm5zIDY0LWJpdCBvcHRpbWl6ZWQgbWV0aG9kcyBmb3IgbmlzdHAyNTYKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KK2NvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX25pc3RwMjU2X21ldGhvZCh2b2lkKTsKKworLyoqIFJldHVybnMgNjQtYml0IG9wdGltaXplZCBtZXRob2RzIGZvciBuaXN0cDUyMQorICogIFxyZXR1cm4gIEVDX01FVEhPRCBvYmplY3QKKyAqLworY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfbmlzdHA1MjFfbWV0aG9kKHZvaWQpOworI2VuZGlmCisKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAogLyogICAgICAgICAgIEVDX01FVEhPRCBmb3IgY3VydmVzIG92ZXIgR0YoMl5tKSAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTYxLDYgKzE3OCw4IEBACiAgKi8KIGNvbnN0IEVDX01FVEhPRCAqRUNfR0YybV9zaW1wbGVfbWV0aG9kKHZvaWQpOwogCisjZW5kaWYKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICBFQ19HUk9VUCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yODIsNiArMzAxLDcgQEAKICAqLwogaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBCSUdOVU0gKnAsIEJJR05VTSAqYSwgQklHTlVNICpiLCBCTl9DVFggKmN0eCk7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiAvKiogU2V0cyB0aGUgcGFyYW1ldGVyIG9mIGEgZWMgb3ZlciBHRjJtIGRlZmluZWQgYnkgeV4yICsgeCp5ID0geF4zICsgYSp4XjIgKyBiCiAgKiAgXHBhcmFtICBncm91cCAgRUNfR1JPVVAgb2JqZWN0CiAgKiAgXHBhcmFtICBwICAgICAgQklHTlVNIHdpdGggdGhlIHBvbHlub21pYWwgZGVmaW5pbmcgdGhlIHVuZGVybHlpbmcgZmllbGQKQEAgLTMwMSw3ICszMjEsNyBAQAogICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIGlmIGFuIGVycm9yIG9jY3VyZWQKICAqLwogaW50IEVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgQklHTlVNICpwLCBCSUdOVU0gKmEsIEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOwotCisjZW5kaWYKIC8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IGEgZmllbGQgZWxlbWVudCAKICAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKICAqICBccmV0dXJuIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgYSBmaWVsZCBlbGVtZW50CkBAIC0zNDIsNyArMzYyLDcgQEAKICAqICBccmV0dXJuIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzCiAgKi8KIEVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0ZwKGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqY3R4KTsKLQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIC8qKiBDcmVhdGVzIGEgbmV3IEVDX0dST1VQIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBkZWZpbmVkCiAgKiAgb3ZlciBHRjJtIChkZWZpbmVkIGJ5IHRoZSBlcXVhdGlvbiB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIpCiAgKiAgXHBhcmFtICBwICAgIEJJR05VTSB3aXRoIHRoZSBwb2x5bm9taWFsIGRlZmluaW5nIHRoZSB1bmRlcmx5aW5nIGZpZWxkCkBAIC0zNTIsNyArMzcyLDcgQEAKICAqICBccmV0dXJuIG5ld2x5IGNyZWF0ZWQgRUNfR1JPVVAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzCiAgKi8KIEVDX0dST1VQICpFQ19HUk9VUF9uZXdfY3VydmVfR0YybShjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpiLCBCTl9DVFggKmN0eCk7Ci0KKyNlbmRpZgogLyoqIENyZWF0ZXMgYSBFQ19HUk9VUCBvYmplY3Qgd2l0aCBhIGN1cnZlIHNwZWNpZmllZCBieSBhIE5JRAogICogIFxwYXJhbSAgbmlkICBOSUQgb2YgdGhlIE9JRCBvZiB0aGUgY3VydmUgbmFtZQogICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19HUk9VUCBvYmplY3Qgd2l0aCBzcGVjaWZpZWQgY3VydmUgb3IgTlVMTApAQCAtNDgxLDcgKzUwMSw3IEBACiAgKi8KIGludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKIAljb25zdCBCSUdOVU0gKngsIGludCB5X2JpdCwgQk5fQ1RYICpjdHgpOwotCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogLyoqIFNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhIEVDX1BPSU5UIG92ZXIgR0YybQogICogIFxwYXJhbSAgZ3JvdXAgIHVuZGVybHlpbmcgRUNfR1JPVVAgb2JqZWN0CiAgKiAgXHBhcmFtICBwICAgICAgRUNfUE9JTlQgb2JqZWN0CkBAIC01MTQsNyArNTM0LDcgQEAKICAqLwogaW50IEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcCwKIAljb25zdCBCSUdOVU0gKngsIGludCB5X2JpdCwgQk5fQ1RYICpjdHgpOwotCisjZW5kaWYKIC8qKiBFbmNvZGVzIGEgRUNfUE9JTlQgb2JqZWN0IHRvIGEgb2N0ZXQgc3RyaW5nCiAgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKICAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKQEAgLTY1Myw5ICs2NzMsMTEgQEAKIC8qIEVDX0dST1VQX2dldF9iYXNpc190eXBlKCkgcmV0dXJucyB0aGUgTklEIG9mIHRoZSBiYXNpcyB0eXBlCiAgKiB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmllbGQgZWxlbWVudHMgKi8KIGludCBFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZShjb25zdCBFQ19HUk9VUCAqKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiBpbnQgRUNfR1JPVVBfZ2V0X3RyaW5vbWlhbF9iYXNpcyhjb25zdCBFQ19HUk9VUCAqLCB1bnNpZ25lZCBpbnQgKmspOwogaW50IEVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpcyhjb25zdCBFQ19HUk9VUCAqLCB1bnNpZ25lZCBpbnQgKmsxLCAKIAl1bnNpZ25lZCBpbnQgKmsyLCB1bnNpZ25lZCBpbnQgKmszKTsKKyNlbmRpZgogCiAjZGVmaW5lIE9QRU5TU0xfRUNfTkFNRURfQ1VSVkUJMHgwMDEKIApAQCAtNjg5LDExICs3MTEsMjEgQEAKICNkZWZpbmUgRUNfUEtFWV9OT19QQVJBTUVURVJTCTB4MDAxCiAjZGVmaW5lIEVDX1BLRVlfTk9fUFVCS0VZCTB4MDAyCiAKKy8qIHNvbWUgdmFsdWVzIGZvciB0aGUgZmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgRUNfRkxBR19OT05fRklQU19BTExPVwkweDEKKyNkZWZpbmUgRUNfRkxBR19GSVBTX0NIRUNLRUQJMHgyCisKIC8qKiBDcmVhdGVzIGEgbmV3IEVDX0tFWSBvYmplY3QuCiAgKiAgXHJldHVybiBFQ19LRVkgb2JqZWN0IG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgKi8KIEVDX0tFWSAqRUNfS0VZX25ldyh2b2lkKTsKIAoraW50IEVDX0tFWV9nZXRfZmxhZ3MoY29uc3QgRUNfS0VZICprZXkpOworCit2b2lkIEVDX0tFWV9zZXRfZmxhZ3MoRUNfS0VZICprZXksIGludCBmbGFncyk7CisKK3ZvaWQgRUNfS0VZX2NsZWFyX2ZsYWdzKEVDX0tFWSAqa2V5LCBpbnQgZmxhZ3MpOworCiAvKiogQ3JlYXRlcyBhIG5ldyBFQ19LRVkgb2JqZWN0IHVzaW5nIGEgbmFtZWQgY3VydmUgYXMgdW5kZXJseWluZwogICogIEVDX0dST1VQIG9iamVjdC4KICAqICBccGFyYW0gIG5pZCAgTklEIG9mIHRoZSBuYW1lZCBjdXJ2ZS4KQEAgLTc5OSw2ICs4MzEsMTUgQEAKICAqLwogaW50IEVDX0tFWV9jaGVja19rZXkoY29uc3QgRUNfS0VZICprZXkpOwogCisvKiogU2V0cyBhIHB1YmxpYyBrZXkgZnJvbSBhZmZpbmUgY29vcmRpbmRhdGVzIHBlcmZvcm1pbmcKKyAqICBuZWNjZXNzYXJ5IE5JU1QgUEtWIHRlc3RzLgorICogIFxwYXJhbSAga2V5ICB0aGUgRUNfS0VZIG9iamVjdAorICogIFxwYXJhbSAgeCAgICBwdWJsaWMga2V5IHggY29vcmRpbmF0ZQorICogIFxwYXJhbSAgeSAgICBwdWJsaWMga2V5IHkgY29vcmRpbmF0ZQorICogIFxyZXR1cm4gMSBvbiBzdWNjZXNzIGFuZCAwIG90aGVyd2lzZS4KKyAqLworaW50IEVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMoRUNfS0VZICprZXksIEJJR05VTSAqeCwgQklHTlVNICp5KTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgZGUtIGFuZCBlbmNvZGluZyBmdW5jdGlvbnMgZm9yIFNFQzEgRUNQcml2YXRlS2V5ICAgICAgICAgICovCkBAIC05MjYsNiArOTY3LDcgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgRUMgZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNfRl9CTl9UT19GRUxFTQkJCQkgMjI0CiAjZGVmaW5lIEVDX0ZfQ09NUFVURV9XTkFGCQkJCSAxNDMKICNkZWZpbmUgRUNfRl9EMklfRUNQQVJBTUVURVJTCQkJCSAxNDQKICNkZWZpbmUgRUNfRl9EMklfRUNQS1BBUkFNRVRFUlMJCQkJIDE0NQpAQCAtOTY4LDYgKzEwMTAsMTUgQEAKICNkZWZpbmUgRUNfRl9FQ19HRlBfTU9OVF9GSUVMRF9TUVIJCQkgMTMyCiAjZGVmaW5lIEVDX0ZfRUNfR0ZQX01PTlRfR1JPVVBfU0VUX0NVUlZFCQkgMTg5CiAjZGVmaW5lIEVDX0ZfRUNfR0ZQX01PTlRfR1JPVVBfU0VUX0NVUlZFX0dGUAkJIDEzNQorI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDIyNF9HUk9VUF9TRVRfQ1VSVkUJCSAyMjUKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFAyMjRfUE9JTlRTX01VTAkJCSAyMjgKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFAyMjRfUE9JTlRfR0VUX0FGRklORV9DT09SRElOQVRFUyAyMjYKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFAyNTZfR1JPVVBfU0VUX0NVUlZFCQkgMjMwCisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQMjU2X1BPSU5UU19NVUwJCQkgMjMxCisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQMjU2X1BPSU5UX0dFVF9BRkZJTkVfQ09PUkRJTkFURVMgMjMyCisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQNTIxX0dST1VQX1NFVF9DVVJWRQkJIDIzMworI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDUyMV9QT0lOVFNfTVVMCQkJIDIzNAorI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDUyMV9QT0lOVF9HRVRfQUZGSU5FX0NPT1JESU5BVEVTIDIzNQogI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUX0ZJRUxEX01VTAkJCSAyMDAKICNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVF9GSUVMRF9TUVIJCQkgMjAxCiAjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RfR1JPVVBfU0VUX0NVUlZFCQkgMjAyCkBAIC0xMDEwLDYgKzEwNjEsNyBAQAogI2RlZmluZSBFQ19GX0VDX0tFWV9ORVcJCQkJCSAxODIKICNkZWZpbmUgRUNfRl9FQ19LRVlfUFJJTlQJCQkJIDE4MAogI2RlZmluZSBFQ19GX0VDX0tFWV9QUklOVF9GUAkJCQkgMTgxCisjZGVmaW5lIEVDX0ZfRUNfS0VZX1NFVF9QVUJMSUNfS0VZX0FGRklORV9DT09SRElOQVRFUwkgMjI5CiAjZGVmaW5lIEVDX0ZfRUNfUE9JTlRTX01BS0VfQUZGSU5FCQkJIDEzNgogI2RlZmluZSBFQ19GX0VDX1BPSU5UX0FERAkJCQkgMTEyCiAjZGVmaW5lIEVDX0ZfRUNfUE9JTlRfQ01QCQkJCSAxMTMKQEAgLTEwNDAsNiArMTA5Miw5IEBACiAjZGVmaW5lIEVDX0ZfSTJEX0VDUEtQQVJBTUVURVJTCQkJCSAxOTEKICNkZWZpbmUgRUNfRl9JMkRfRUNQUklWQVRFS0VZCQkJCSAxOTIKICNkZWZpbmUgRUNfRl9JMk9fRUNQVUJMSUNLRVkJCQkJIDE1MQorI2RlZmluZSBFQ19GX05JU1RQMjI0X1BSRV9DT01QX05FVwkJCSAyMjcKKyNkZWZpbmUgRUNfRl9OSVNUUDI1Nl9QUkVfQ09NUF9ORVcJCQkgMjM2CisjZGVmaW5lIEVDX0ZfTklTVFA1MjFfUFJFX0NPTVBfTkVXCQkJIDIzNwogI2RlZmluZSBFQ19GX08ySV9FQ1BVQkxJQ0tFWQkJCQkgMTUyCiAjZGVmaW5lIEVDX0ZfT0xEX0VDX1BSSVZfREVDT0RFCQkJCSAyMjIKICNkZWZpbmUgRUNfRl9QS0VZX0VDX0NUUkwJCQkJIDE5NwpAQCAtMTA1MiwxMiArMTEwNywxNSBAQAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBFQ19SX0FTTjFfRVJST1IJCQkJCSAxMTUKICNkZWZpbmUgRUNfUl9BU04xX1VOS05PV05fRklFTEQJCQkJIDExNgorI2RlZmluZSBFQ19SX0JJR05VTV9PVVRfT0ZfUkFOR0UJCQkgMTQ0CiAjZGVmaW5lIEVDX1JfQlVGRkVSX1RPT19TTUFMTAkJCQkgMTAwCisjZGVmaW5lIEVDX1JfQ09PUkRJTkFURVNfT1VUX09GX1JBTkdFCQkJIDE0NgogI2RlZmluZSBFQ19SX0QySV9FQ1BLUEFSQU1FVEVSU19GQUlMVVJFCQkJIDExNwogI2RlZmluZSBFQ19SX0RFQ09ERV9FUlJPUgkJCQkgMTQyCiAjZGVmaW5lIEVDX1JfRElTQ1JJTUlOQU5UX0lTX1pFUk8JCQkgMTE4CiAjZGVmaW5lIEVDX1JfRUNfR1JPVVBfTkVXX0JZX05BTUVfRkFJTFVSRQkJIDExOQogI2RlZmluZSBFQ19SX0ZJRUxEX1RPT19MQVJHRQkJCQkgMTQzCisjZGVmaW5lIEVDX1JfR0YyTV9OT1RfU1VQUE9SVEVECQkJCSAxNDcKICNkZWZpbmUgRUNfUl9HUk9VUDJQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjAKICNkZWZpbmUgRUNfUl9JMkRfRUNQS1BBUkFNRVRFUlNfRkFJTFVSRQkJCSAxMjEKICNkZWZpbmUgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUwkJCSAxMDEKQEAgLTEwOTIsNiArMTE1MCw3IEBACiAjZGVmaW5lIEVDX1JfVU5LTk9XTl9HUk9VUAkJCQkgMTI5CiAjZGVmaW5lIEVDX1JfVU5LTk9XTl9PUkRFUgkJCQkgMTE0CiAjZGVmaW5lIEVDX1JfVU5TVVBQT1JURURfRklFTEQJCQkJIDEzMQorI2RlZmluZSBFQ19SX1dST05HX0NVUlZFX1BBUkFNRVRFUlMJCQkgMTQ1CiAjZGVmaW5lIEVDX1JfV1JPTkdfT1JERVIJCQkJIDEzMAogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWMyX211bHQuYyBiL2NyeXB0by9lYy9lYzJfbXVsdC5jCmluZGV4IGUxMmI5YjIuLjI2ZjRhNzggMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lYzJfbXVsdC5jCisrKyBiL2NyeXB0by9lYy9lYzJfbXVsdC5jCkBAIC03MSw2ICs3MSw4IEBACiAKICNpbmNsdWRlICJlY19sY2wuaCIKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KKwogCiAvKiBDb21wdXRlIHRoZSB4LWNvb3JkaW5hdGUgeC96IGZvciB0aGUgcG9pbnQgMiooeC96KSBpbiBNb250Z29tZXJ5IHByb2plY3RpdmUgCiAgKiBjb29yZGluYXRlcy4KQEAgLTM4NCwzICszODYsNSBAQAogCXsKIAlyZXR1cm4gZWNfd05BRl9oYXZlX3ByZWNvbXB1dGVfbXVsdChncm91cCk7CiAgCX0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWMyX29jdC5jIGIvY3J5cHRvL2VjL2VjMl9vY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQ3NWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2VjL2VjMl9vY3QuYwpAQCAtMCwwICsxLDQwNyBAQAorLyogY3J5cHRvL2VjL2VjMl9vY3QuYyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KKyAqCisgKiBUaGUgRWxsaXB0aWMgQ3VydmUgUHVibGljLUtleSBDcnlwdG8gTGlicmFyeSAoRUNDIENvZGUpIGluY2x1ZGVkCisgKiBoZXJlaW4gaXMgZGV2ZWxvcGVkIGJ5IFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIGFuZCBpcyBjb250cmlidXRlZAorICogdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KKyAqCisgKiBUaGUgRUNDIENvZGUgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIE9wZW5TU0wgb3BlbiBzb3VyY2UKKyAqIGxpY2Vuc2UgcHJvdmlkZWQgYmVsb3cuCisgKgorICogVGhlIHNvZnR3YXJlIGlzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBTaGV1ZWxpbmcgQ2hhbmcgU2hhbnR6IGFuZAorICogRG91Z2xhcyBTdGViaWxhIG9mIFN1biBNaWNyb3N5c3RlbXMgTGFib3JhdG9yaWVzLgorICoKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorCisjaW5jbHVkZSAiZWNfbGNsLmgiCisKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKKy8qIENhbGN1bGF0ZXMgYW5kIHNldHMgdGhlIGFmZmluZSBjb29yZGluYXRlcyBvZiBhbiBFQ19QT0lOVCBmcm9tIHRoZSBnaXZlbgorICogY29tcHJlc3NlZCBjb29yZGluYXRlcy4gIFVzZXMgYWxnb3JpdGhtIDIuMy40IG9mIFNFQyAxLiAKKyAqIE5vdGUgdGhhdCB0aGUgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9ubHkgdXNlcyBhZmZpbmUgY29vcmRpbmF0ZXMuCisgKgorICogVGhlIG1ldGhvZCBpcyBmcm9tIHRoZSBmb2xsb3dpbmcgcHVibGljYXRpb246CisgKiAKKyAqICAgICBIYXJwZXIsIE1lbmV6ZXMsIFZhbnN0b25lOgorICogICAgICJQdWJsaWMtS2V5IENyeXB0b3N5c3RlbXMgd2l0aCBWZXJ5IFNtYWxsIEtleSBMZW5ndGhzIiwKKyAqICAgICBFVVJPQ1JZUFQgJzkyLCBTcHJpbmdlci1WZXJsYWcgTE5DUyA2NTgsCisgKiAgICAgcHVibGlzaGVkIEZlYnJ1YXJ5IDE5OTMKKyAqCisgKiBVUyBQYXRlbnRzIDYsMTQxLDQyMCBhbmQgNiw2MTgsNDgzIChWYW5zdG9uZSwgTXVsbGluLCBBZ25ldykgZGVzY3JpYmUKKyAqIHRoZSBzYW1lIG1ldGhvZCwgYnV0IGNsYWltIG5vIHByaW9yaXR5IGRhdGUgZWFybGllciB0aGFuIEp1bHkgMjksIDE5OTQKKyAqIChhbmQgYWRkaXRpb25hbGx5IGZhaWwgdG8gY2l0ZSB0aGUgRVVST0NSWVBUICc5MiBwdWJsaWNhdGlvbiBhcyBwcmlvciBhcnQpLgorICovCitpbnQgZWNfR0YybV9zaW1wbGVfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCisJY29uc3QgQklHTlVNICp4XywgaW50IHlfYml0LCBCTl9DVFggKmN0eCkKKwl7CisJQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKKwlCSUdOVU0gKnRtcCwgKngsICp5LCAqejsKKwlpbnQgcmV0ID0gMCwgejA7CisKKwkvKiBjbGVhciBlcnJvciBxdWV1ZSAqLworCUVSUl9jbGVhcl9lcnJvcigpOworCisJaWYgKGN0eCA9PSBOVUxMKQorCQl7CisJCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7CisJCWlmIChjdHggPT0gTlVMTCkKKwkJCXJldHVybiAwOworCQl9CisKKwl5X2JpdCA9ICh5X2JpdCAhPSAwKSA/IDEgOiAwOworCisJQk5fQ1RYX3N0YXJ0KGN0eCk7CisJdG1wID0gQk5fQ1RYX2dldChjdHgpOworCXggPSBCTl9DVFhfZ2V0KGN0eCk7CisJeSA9IEJOX0NUWF9nZXQoY3R4KTsKKwl6ID0gQk5fQ1RYX2dldChjdHgpOworCWlmICh6ID09IE5VTEwpIGdvdG8gZXJyOworCisJaWYgKCFCTl9HRjJtX21vZF9hcnIoeCwgeF8sIGdyb3VwLT5wb2x5KSkgZ290byBlcnI7CisJaWYgKEJOX2lzX3plcm8oeCkpCisJCXsKKwkJaWYgKCFCTl9HRjJtX21vZF9zcXJ0X2Fycih5LCAmZ3JvdXAtPmIsIGdyb3VwLT5wb2x5LCBjdHgpKSBnb3RvIGVycjsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9zcXIoZ3JvdXAsIHRtcCwgeCwgY3R4KSkgZ290byBlcnI7CisJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2Rpdihncm91cCwgdG1wLCAmZ3JvdXAtPmIsIHRtcCwgY3R4KSkgZ290byBlcnI7CisJCWlmICghQk5fR0YybV9hZGQodG1wLCAmZ3JvdXAtPmEsIHRtcCkpIGdvdG8gZXJyOworCQlpZiAoIUJOX0dGMm1fYWRkKHRtcCwgeCwgdG1wKSkgZ290byBlcnI7CisJCWlmICghQk5fR0YybV9tb2Rfc29sdmVfcXVhZF9hcnIoeiwgdG1wLCBncm91cC0+cG9seSwgY3R4KSkKKwkJCXsKKwkJCXVuc2lnbmVkIGxvbmcgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworCQkJCisJCQlpZiAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0JOICYmIEVSUl9HRVRfUkVBU09OKGVycikgPT0gQk5fUl9OT19TT0xVVElPTikKKwkJCQl7CisJCQkJRVJSX2NsZWFyX2Vycm9yKCk7CisJCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQpOworCQkJCX0KKwkJCWVsc2UKKwkJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTLCBFUlJfUl9CTl9MSUIpOworCQkJZ290byBlcnI7CisJCQl9CisJCXowID0gKEJOX2lzX29kZCh6KSkgPyAxIDogMDsKKwkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfbXVsKGdyb3VwLCB5LCB4LCB6LCBjdHgpKSBnb3RvIGVycjsKKwkJaWYgKHowICE9IHlfYml0KQorCQkJeworCQkJaWYgKCFCTl9HRjJtX2FkZCh5LCB5LCB4KSkgZ290byBlcnI7CisJCQl9CisJCX0KKworCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KSkgZ290byBlcnI7CisKKwlyZXQgPSAxOworCisgZXJyOgorCUJOX0NUWF9lbmQoY3R4KTsKKwlpZiAobmV3X2N0eCAhPSBOVUxMKQorCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKKwlyZXR1cm4gcmV0OworCX0KKworCisvKiBDb252ZXJ0cyBhbiBFQ19QT0lOVCB0byBhbiBvY3RldCBzdHJpbmcuICAKKyAqIElmIGJ1ZiBpcyBOVUxMLCB0aGUgZW5jb2RlZCBsZW5ndGggd2lsbCBiZSByZXR1cm5lZC4KKyAqIElmIHRoZSBsZW5ndGggbGVuIG9mIGJ1ZiBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAqLworc2l6ZV90IGVjX0dGMm1fc2ltcGxlX3BvaW50Mm9jdChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybSwKKwl1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQorCXsKKwlzaXplX3QgcmV0OworCUJOX0NUWCAqbmV3X2N0eCA9IE5VTEw7CisJaW50IHVzZWRfY3R4ID0gMDsKKwlCSUdOVU0gKngsICp5LCAqeXhpOworCXNpemVfdCBmaWVsZF9sZW4sIGksIHNraXA7CisKKwlpZiAoKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEKQorCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkKKwkJJiYgKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfUE9JTlQyT0NULCBFQ19SX0lOVkFMSURfRk9STSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIHBvaW50KSkKKwkJeworCQkvKiBlbmNvZGVzIHRvIGEgc2luZ2xlIDAgb2N0ZXQgKi8KKwkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkJeworCQkJaWYgKGxlbiA8IDEpCisJCQkJeworCQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfUE9JTlQyT0NULCBFQ19SX0JVRkZFUl9UT09fU01BTEwpOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCWJ1ZlswXSA9IDA7CisJCQl9CisJCXJldHVybiAxOworCQl9CisKKworCS8qIHJldCA6PSByZXF1aXJlZCBvdXRwdXQgYnVmZmVyIGxlbmd0aCAqLworCWZpZWxkX2xlbiA9IChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSArIDcpIC8gODsKKwlyZXQgPSAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpID8gMSArIGZpZWxkX2xlbiA6IDEgKyAyKmZpZWxkX2xlbjsKKworCS8qIGlmICdidWYnIGlzIE5VTEwsIGp1c3QgcmV0dXJuIHJlcXVpcmVkIGxlbmd0aCAqLworCWlmIChidWYgIT0gTlVMTCkKKwkJeworCQlpZiAobGVuIDwgcmV0KQorCQkJeworCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVDX1JfQlVGRkVSX1RPT19TTUFMTCk7CisJCQlnb3RvIGVycjsKKwkJCX0KKworCQlpZiAoY3R4ID09IE5VTEwpCisJCQl7CisJCQljdHggPSBuZXdfY3R4ID0gQk5fQ1RYX25ldygpOworCQkJaWYgKGN0eCA9PSBOVUxMKQorCQkJCXJldHVybiAwOworCQkJfQorCisJCUJOX0NUWF9zdGFydChjdHgpOworCQl1c2VkX2N0eCA9IDE7CisJCXggPSBCTl9DVFhfZ2V0KGN0eCk7CisJCXkgPSBCTl9DVFhfZ2V0KGN0eCk7CisJCXl4aSA9IEJOX0NUWF9nZXQoY3R4KTsKKwkJaWYgKHl4aSA9PSBOVUxMKSBnb3RvIGVycjsKKworCQlpZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShncm91cCwgcG9pbnQsIHgsIHksIGN0eCkpIGdvdG8gZXJyOworCisJCWJ1ZlswXSA9IGZvcm07CisJCWlmICgoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkgJiYgIUJOX2lzX3plcm8oeCkpCisJCQl7CisJCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9kaXYoZ3JvdXAsIHl4aSwgeSwgeCwgY3R4KSkgZ290byBlcnI7CisJCQlpZiAoQk5faXNfb2RkKHl4aSkpIGJ1ZlswXSsrOworCQkJfQorCisJCWkgPSAxOworCQkKKwkJc2tpcCA9IGZpZWxkX2xlbiAtIEJOX251bV9ieXRlcyh4KTsKKwkJaWYgKHNraXAgPiBmaWVsZF9sZW4pCisJCQl7CisJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJZ290byBlcnI7CisJCQl9CisJCXdoaWxlIChza2lwID4gMCkKKwkJCXsKKwkJCWJ1ZltpKytdID0gMDsKKwkJCXNraXAtLTsKKwkJCX0KKwkJc2tpcCA9IEJOX2JuMmJpbih4LCBidWYgKyBpKTsKKwkJaSArPSBza2lwOworCQlpZiAoaSAhPSAxICsgZmllbGRfbGVuKQorCQkJeworCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCisJCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIHx8IGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpCisJCQl7CisJCQlza2lwID0gZmllbGRfbGVuIC0gQk5fbnVtX2J5dGVzKHkpOworCQkJaWYgKHNraXAgPiBmaWVsZF9sZW4pCisJCQkJeworCQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfUE9JTlQyT0NULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCQkJZ290byBlcnI7CisJCQkJfQorCQkJd2hpbGUgKHNraXAgPiAwKQorCQkJCXsKKwkJCQlidWZbaSsrXSA9IDA7CisJCQkJc2tpcC0tOworCQkJCX0KKwkJCXNraXAgPSBCTl9ibjJiaW4oeSwgYnVmICsgaSk7CisJCQlpICs9IHNraXA7CisJCQl9CisKKwkJaWYgKGkgIT0gcmV0KQorCQkJeworCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJCisJaWYgKHVzZWRfY3R4KQorCQlCTl9DVFhfZW5kKGN0eCk7CisJaWYgKG5ld19jdHggIT0gTlVMTCkKKwkJQk5fQ1RYX2ZyZWUobmV3X2N0eCk7CisJcmV0dXJuIHJldDsKKworIGVycjoKKwlpZiAodXNlZF9jdHgpCisJCUJOX0NUWF9lbmQoY3R4KTsKKwlpZiAobmV3X2N0eCAhPSBOVUxMKQorCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKKwlyZXR1cm4gMDsKKwl9CisKKworLyogQ29udmVydHMgYW4gb2N0ZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGFuIEVDX1BPSU5ULiAKKyAqIE5vdGUgdGhhdCB0aGUgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9ubHkgdXNlcyBhZmZpbmUgY29vcmRpbmF0ZXMuCisgKi8KK2ludCBlY19HRjJtX3NpbXBsZV9vY3QycG9pbnQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBCTl9DVFggKmN0eCkKKwl7CisJcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybTsKKwlpbnQgeV9iaXQ7CisJQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKKwlCSUdOVU0gKngsICp5LCAqeXhpOworCXNpemVfdCBmaWVsZF9sZW4sIGVuY19sZW47CisJaW50IHJldCA9IDA7CisKKwlpZiAobGVuID09IDApCisJCXsKKwkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfQlVGRkVSX1RPT19TTUFMTCk7CisJCXJldHVybiAwOworCQl9CisJZm9ybSA9IGJ1ZlswXTsKKwl5X2JpdCA9IGZvcm0gJiAxOworCWZvcm0gPSBmb3JtICYgfjFVOworCWlmICgoZm9ybSAhPSAwKQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpCisJCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKQorCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkpCisJCXsKKwkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7CisJCXJldHVybiAwOworCQl9CisJaWYgKChmb3JtID09IDAgfHwgZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkgJiYgeV9iaXQpCisJCXsKKwkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7CisJCXJldHVybiAwOworCQl9CisKKwlpZiAoZm9ybSA9PSAwKQorCQl7CisJCWlmIChsZW4gIT0gMSkKKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOworCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJcmV0dXJuIEVDX1BPSU5UX3NldF90b19pbmZpbml0eShncm91cCwgcG9pbnQpOworCQl9CisJCisJZmllbGRfbGVuID0gKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICsgNykgLyA4OworCWVuY19sZW4gPSAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpID8gMSArIGZpZWxkX2xlbiA6IDEgKyAyKmZpZWxkX2xlbjsKKworCWlmIChsZW4gIT0gZW5jX2xlbikKKwkJeworCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKKwkJcmV0dXJuIDA7CisJCX0KKworCWlmIChjdHggPT0gTlVMTCkKKwkJeworCQljdHggPSBuZXdfY3R4ID0gQk5fQ1RYX25ldygpOworCQlpZiAoY3R4ID09IE5VTEwpCisJCQlyZXR1cm4gMDsKKwkJfQorCisJQk5fQ1RYX3N0YXJ0KGN0eCk7CisJeCA9IEJOX0NUWF9nZXQoY3R4KTsKKwl5ID0gQk5fQ1RYX2dldChjdHgpOworCXl4aSA9IEJOX0NUWF9nZXQoY3R4KTsKKwlpZiAoeXhpID09IE5VTEwpIGdvdG8gZXJyOworCisJaWYgKCFCTl9iaW4yYm4oYnVmICsgMSwgZmllbGRfbGVuLCB4KSkgZ290byBlcnI7CisJaWYgKEJOX3VjbXAoeCwgJmdyb3VwLT5maWVsZCkgPj0gMCkKKwkJeworCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKKwkJeworCQlpZiAoIUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIHBvaW50LCB4LCB5X2JpdCwgY3R4KSkgZ290byBlcnI7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKCFCTl9iaW4yYm4oYnVmICsgMSArIGZpZWxkX2xlbiwgZmllbGRfbGVuLCB5KSkgZ290byBlcnI7CisJCWlmIChCTl91Y21wKHksICZncm91cC0+ZmllbGQpID49IDApCisJCQl7CisJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlpZiAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkKKwkJCXsKKwkJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2Rpdihncm91cCwgeXhpLCB5LCB4LCBjdHgpKSBnb3RvIGVycjsKKwkJCWlmICh5X2JpdCAhPSBCTl9pc19vZGQoeXhpKSkKKwkJCQl7CisJCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7CisJCQkJZ290byBlcnI7CisJCQkJfQorCQkJfQorCisJCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KSkgZ290byBlcnI7CisJCX0KKwkKKwlpZiAoIUVDX1BPSU5UX2lzX29uX2N1cnZlKGdyb3VwLCBwb2ludCwgY3R4KSkgLyogdGVzdCByZXF1aXJlZCBieSBYOS42MiAqLworCQl7CisJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX1BPSU5UX0lTX05PVF9PTl9DVVJWRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlyZXQgPSAxOworCQorIGVycjoKKwlCTl9DVFhfZW5kKGN0eCk7CisJaWYgKG5ld19jdHggIT0gTlVMTCkKKwkJQk5fQ1RYX2ZyZWUobmV3X2N0eCk7CisJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lYzJfc21wbC5jIGIvY3J5cHRvL2VjL2VjMl9zbXBsLmMKaW5kZXggMDNkZWFlNi4uZTBlNTljNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjMl9zbXBsLmMKKysrIGIvY3J5cHRvL2VjL2VjMl9zbXBsLmMKQEAgLTcxLDEwICs3MSwyMCBAQAogCiAjaW5jbHVkZSAiZWNfbGNsLmgiCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgorCiAKIGNvbnN0IEVDX01FVEhPRCAqRUNfR0YybV9zaW1wbGVfbWV0aG9kKHZvaWQpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCXJldHVybiBmaXBzX2VjX2dmMm1fc2ltcGxlX21ldGhvZCgpOworI2Vsc2UKIAlzdGF0aWMgY29uc3QgRUNfTUVUSE9EIHJldCA9IHsKKwkJRUNfRkxBR1NfREVGQVVMVF9PQ1QsCiAJCU5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQsCiAJCWVjX0dGMm1fc2ltcGxlX2dyb3VwX2luaXQsCiAJCWVjX0dGMm1fc2ltcGxlX2dyb3VwX2ZpbmlzaCwKQEAgLTkzLDkgKzEwMyw3IEBACiAJCTAgLyogZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcCAqLywKIAkJZWNfR0YybV9zaW1wbGVfcG9pbnRfc2V0X2FmZmluZV9jb29yZGluYXRlcywKIAkJZWNfR0YybV9zaW1wbGVfcG9pbnRfZ2V0X2FmZmluZV9jb29yZGluYXRlcywKLQkJZWNfR0YybV9zaW1wbGVfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMsCi0JCWVjX0dGMm1fc2ltcGxlX3BvaW50Mm9jdCwKLQkJZWNfR0YybV9zaW1wbGVfb2N0MnBvaW50LAorCQkwLDAsMCwKIAkJZWNfR0YybV9zaW1wbGVfYWRkLAogCQllY19HRjJtX3NpbXBsZV9kYmwsCiAJCWVjX0dGMm1fc2ltcGxlX2ludmVydCwKQEAgLTExOCw2ICsxMjYsNyBAQAogCQkwIC8qIGZpZWxkX3NldF90b19vbmUgKi8gfTsKIAogCXJldHVybiAmcmV0OworI2VuZGlmCiAJfQogCiAKQEAgLTQwNSwzNDAgKzQxNCw2IEBACiAJcmV0dXJuIHJldDsKIAl9CiAKLQotLyogQ2FsY3VsYXRlcyBhbmQgc2V0cyB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIGFuIEVDX1BPSU5UIGZyb20gdGhlIGdpdmVuCi0gKiBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiAgVXNlcyBhbGdvcml0aG0gMi4zLjQgb2YgU0VDIDEuIAotICogTm90ZSB0aGF0IHRoZSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb25seSB1c2VzIGFmZmluZSBjb29yZGluYXRlcy4KLSAqCi0gKiBUaGUgbWV0aG9kIGlzIGZyb20gdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbjoKLSAqIAotICogICAgIEhhcnBlciwgTWVuZXplcywgVmFuc3RvbmU6Ci0gKiAgICAgIlB1YmxpYy1LZXkgQ3J5cHRvc3lzdGVtcyB3aXRoIFZlcnkgU21hbGwgS2V5IExlbmd0aHMiLAotICogICAgIEVVUk9DUllQVCAnOTIsIFNwcmluZ2VyLVZlcmxhZyBMTkNTIDY1OCwKLSAqICAgICBwdWJsaXNoZWQgRmVicnVhcnkgMTk5MwotICoKLSAqIFVTIFBhdGVudHMgNiwxNDEsNDIwIGFuZCA2LDYxOCw0ODMgKFZhbnN0b25lLCBNdWxsaW4sIEFnbmV3KSBkZXNjcmliZQotICogdGhlIHNhbWUgbWV0aG9kLCBidXQgY2xhaW0gbm8gcHJpb3JpdHkgZGF0ZSBlYXJsaWVyIHRoYW4gSnVseSAyOSwgMTk5NAotICogKGFuZCBhZGRpdGlvbmFsbHkgZmFpbCB0byBjaXRlIHRoZSBFVVJPQ1JZUFQgJzkyIHB1YmxpY2F0aW9uIGFzIHByaW9yIGFydCkuCi0gKi8KLWludCBlY19HRjJtX3NpbXBsZV9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwb2ludCwKLQljb25zdCBCSUdOVU0gKnhfLCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KQotCXsKLQlCTl9DVFggKm5ld19jdHggPSBOVUxMOwotCUJJR05VTSAqdG1wLCAqeCwgKnksICp6OwotCWludCByZXQgPSAwLCB6MDsKLQotCS8qIGNsZWFyIGVycm9yIHF1ZXVlICovCi0JRVJSX2NsZWFyX2Vycm9yKCk7Ci0KLQlpZiAoY3R4ID09IE5VTEwpCi0JCXsKLQkJY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKLQkJaWYgKGN0eCA9PSBOVUxMKQotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCXlfYml0ID0gKHlfYml0ICE9IDApID8gMSA6IDA7Ci0KLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQl0bXAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JeCA9IEJOX0NUWF9nZXQoY3R4KTsKLQl5ID0gQk5fQ1RYX2dldChjdHgpOwotCXogPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JaWYgKHogPT0gTlVMTCkgZ290byBlcnI7Ci0KLQlpZiAoIUJOX0dGMm1fbW9kX2Fycih4LCB4XywgZ3JvdXAtPnBvbHkpKSBnb3RvIGVycjsKLQlpZiAoQk5faXNfemVybyh4KSkKLQkJewotCQlpZiAoIUJOX0dGMm1fbW9kX3NxcnRfYXJyKHksICZncm91cC0+YiwgZ3JvdXAtPnBvbHksIGN0eCkpIGdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7Ci0JCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX3Nxcihncm91cCwgdG1wLCB4LCBjdHgpKSBnb3RvIGVycjsKLQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfZGl2KGdyb3VwLCB0bXAsICZncm91cC0+YiwgdG1wLCBjdHgpKSBnb3RvIGVycjsKLQkJaWYgKCFCTl9HRjJtX2FkZCh0bXAsICZncm91cC0+YSwgdG1wKSkgZ290byBlcnI7Ci0JCWlmICghQk5fR0YybV9hZGQodG1wLCB4LCB0bXApKSBnb3RvIGVycjsKLQkJaWYgKCFCTl9HRjJtX21vZF9zb2x2ZV9xdWFkX2Fycih6LCB0bXAsIGdyb3VwLT5wb2x5LCBjdHgpKQotCQkJewotCQkJdW5zaWduZWQgbG9uZyBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7Ci0JCQkKLQkJCWlmIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfQk4gJiYgRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBCTl9SX05PX1NPTFVUSU9OKQotCQkJCXsKLQkJCQlFUlJfY2xlYXJfZXJyb3IoKTsKLQkJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTLCBFQ19SX0lOVkFMSURfQ09NUFJFU1NFRF9QT0lOVCk7Ci0JCQkJfQotCQkJZWxzZQotCQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVSUl9SX0JOX0xJQik7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJejAgPSAoQk5faXNfb2RkKHopKSA/IDEgOiAwOwotCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9tdWwoZ3JvdXAsIHksIHgsIHosIGN0eCkpIGdvdG8gZXJyOwotCQlpZiAoejAgIT0geV9iaXQpCi0JCQl7Ci0JCQlpZiAoIUJOX0dGMm1fYWRkKHksIHksIHgpKSBnb3RvIGVycjsKLQkJCX0KLQkJfQotCi0JaWYgKCFFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKLQotCXJldCA9IDE7Ci0KLSBlcnI6Ci0JQk5fQ1RYX2VuZChjdHgpOwotCWlmIChuZXdfY3R4ICE9IE5VTEwpCi0JCUJOX0NUWF9mcmVlKG5ld19jdHgpOwotCXJldHVybiByZXQ7Ci0JfQotCi0KLS8qIENvbnZlcnRzIGFuIEVDX1BPSU5UIHRvIGFuIG9jdGV0IHN0cmluZy4gIAotICogSWYgYnVmIGlzIE5VTEwsIHRoZSBlbmNvZGVkIGxlbmd0aCB3aWxsIGJlIHJldHVybmVkLgotICogSWYgdGhlIGxlbmd0aCBsZW4gb2YgYnVmIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgotICovCi1zaXplX3QgZWNfR0YybV9zaW1wbGVfcG9pbnQyb2N0KGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnBvaW50LCBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBmb3JtLAotCXVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpCi0JewotCXNpemVfdCByZXQ7Ci0JQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKLQlpbnQgdXNlZF9jdHggPSAwOwotCUJJR05VTSAqeCwgKnksICp5eGk7Ci0Jc2l6ZV90IGZpZWxkX2xlbiwgaSwgc2tpcDsKLQotCWlmICgoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpCi0JCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKQotCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkpCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVDX1JfSU5WQUxJRF9GT1JNKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmIChFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgcG9pbnQpKQotCQl7Ci0JCS8qIGVuY29kZXMgdG8gYSBzaW5nbGUgMCBvY3RldCAqLwotCQlpZiAoYnVmICE9IE5VTEwpCi0JCQl7Ci0JCQlpZiAobGVuIDwgMSkKLQkJCQl7Ci0JCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVDX1JfQlVGRkVSX1RPT19TTUFMTCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJYnVmWzBdID0gMDsKLQkJCX0KLQkJcmV0dXJuIDE7Ci0JCX0KLQotCi0JLyogcmV0IDo9IHJlcXVpcmVkIG91dHB1dCBidWZmZXIgbGVuZ3RoICovCi0JZmllbGRfbGVuID0gKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICsgNykgLyA4OwotCXJldCA9IChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkgPyAxICsgZmllbGRfbGVuIDogMSArIDIqZmllbGRfbGVuOwotCi0JLyogaWYgJ2J1ZicgaXMgTlVMTCwganVzdCByZXR1cm4gcmVxdWlyZWQgbGVuZ3RoICovCi0JaWYgKGJ1ZiAhPSBOVUxMKQotCQl7Ci0JCWlmIChsZW4gPCByZXQpCi0JCQl7Ci0JCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1BPSU5UMk9DVCwgRUNfUl9CVUZGRVJfVE9PX1NNQUxMKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCWlmIChjdHggPT0gTlVMTCkKLQkJCXsKLQkJCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7Ci0JCQlpZiAoY3R4ID09IE5VTEwpCi0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JCXVzZWRfY3R4ID0gMTsKLQkJeCA9IEJOX0NUWF9nZXQoY3R4KTsKLQkJeSA9IEJOX0NUWF9nZXQoY3R4KTsKLQkJeXhpID0gQk5fQ1RYX2dldChjdHgpOwotCQlpZiAoeXhpID09IE5VTEwpIGdvdG8gZXJyOwotCi0JCWlmICghRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KSkgZ290byBlcnI7Ci0KLQkJYnVmWzBdID0gZm9ybTsKLQkJaWYgKChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKSAmJiAhQk5faXNfemVybyh4KSkKLQkJCXsKLQkJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2Rpdihncm91cCwgeXhpLCB5LCB4LCBjdHgpKSBnb3RvIGVycjsKLQkJCWlmIChCTl9pc19vZGQoeXhpKSkgYnVmWzBdKys7Ci0JCQl9Ci0KLQkJaSA9IDE7Ci0JCQotCQlza2lwID0gZmllbGRfbGVuIC0gQk5fbnVtX2J5dGVzKHgpOwotCQlpZiAoc2tpcCA+IGZpZWxkX2xlbikKLQkJCXsKLQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfUE9JTlQyT0NULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJd2hpbGUgKHNraXAgPiAwKQotCQkJewotCQkJYnVmW2krK10gPSAwOwotCQkJc2tpcC0tOwotCQkJfQotCQlza2lwID0gQk5fYm4yYmluKHgsIGJ1ZiArIGkpOwotCQlpICs9IHNraXA7Ci0JCWlmIChpICE9IDEgKyBmaWVsZF9sZW4pCi0JCQl7Ci0JCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJaWYgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQgfHwgZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkKLQkJCXsKLQkJCXNraXAgPSBmaWVsZF9sZW4gLSBCTl9udW1fYnl0ZXMoeSk7Ci0JCQlpZiAoc2tpcCA+IGZpZWxkX2xlbikKLQkJCQl7Ci0JCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9QT0lOVDJPQ1QsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQl3aGlsZSAoc2tpcCA+IDApCi0JCQkJewotCQkJCWJ1ZltpKytdID0gMDsKLQkJCQlza2lwLS07Ci0JCQkJfQotCQkJc2tpcCA9IEJOX2JuMmJpbih5LCBidWYgKyBpKTsKLQkJCWkgKz0gc2tpcDsKLQkJCX0KLQotCQlpZiAoaSAhPSByZXQpCi0JCQl7Ci0JCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCX0KLQkKLQlpZiAodXNlZF9jdHgpCi0JCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAobmV3X2N0eCAhPSBOVUxMKQotCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKLQlyZXR1cm4gcmV0OwotCi0gZXJyOgotCWlmICh1c2VkX2N0eCkKLQkJQk5fQ1RYX2VuZChjdHgpOwotCWlmIChuZXdfY3R4ICE9IE5VTEwpCi0JCUJOX0NUWF9mcmVlKG5ld19jdHgpOwotCXJldHVybiAwOwotCX0KLQotCi0vKiBDb252ZXJ0cyBhbiBvY3RldCBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYW4gRUNfUE9JTlQuIAotICogTm90ZSB0aGF0IHRoZSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb25seSB1c2VzIGFmZmluZSBjb29yZGluYXRlcy4KLSAqLwotaW50IGVjX0dGMm1fc2ltcGxlX29jdDJwb2ludChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwb2ludCwKLQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQotCXsKLQlwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBmb3JtOwotCWludCB5X2JpdDsKLQlCTl9DVFggKm5ld19jdHggPSBOVUxMOwotCUJJR05VTSAqeCwgKnksICp5eGk7Ci0Jc2l6ZV90IGZpZWxkX2xlbiwgZW5jX2xlbjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChsZW4gPT0gMCkKLQkJewotCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9CVUZGRVJfVE9PX1NNQUxMKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlmb3JtID0gYnVmWzBdOwotCXlfYml0ID0gZm9ybSAmIDE7Ci0JZm9ybSA9IGZvcm0gJiB+MVU7Ci0JaWYgKChmb3JtICE9IDApCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKLQkJJiYgKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQpCi0JCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fSFlCUklEKSkKLQkJewotCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlpZiAoKGZvcm0gPT0gMCB8fCBmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKSAmJiB5X2JpdCkKLQkJewotCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQotCWlmIChmb3JtID09IDApCi0JCXsKLQkJaWYgKGxlbiAhPSAxKQotCQkJewotCQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQotCQlyZXR1cm4gRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5KGdyb3VwLCBwb2ludCk7Ci0JCX0KLQkKLQlmaWVsZF9sZW4gPSAoRUNfR1JPVVBfZ2V0X2RlZ3JlZShncm91cCkgKyA3KSAvIDg7Ci0JZW5jX2xlbiA9IChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkgPyAxICsgZmllbGRfbGVuIDogMSArIDIqZmllbGRfbGVuOwotCi0JaWYgKGxlbiAhPSBlbmNfbGVuKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOwotCQlyZXR1cm4gMDsKLQkJfQotCi0JaWYgKGN0eCA9PSBOVUxMKQotCQl7Ci0JCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7Ci0JCWlmIChjdHggPT0gTlVMTCkKLQkJCXJldHVybiAwOwotCQl9Ci0KLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQl4ID0gQk5fQ1RYX2dldChjdHgpOwotCXkgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JeXhpID0gQk5fQ1RYX2dldChjdHgpOwotCWlmICh5eGkgPT0gTlVMTCkgZ290byBlcnI7Ci0KLQlpZiAoIUJOX2JpbjJibihidWYgKyAxLCBmaWVsZF9sZW4sIHgpKSBnb3RvIGVycjsKLQlpZiAoQk5fdWNtcCh4LCAmZ3JvdXAtPmZpZWxkKSA+PSAwKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEKQotCQl7Ci0JCWlmICghRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0YybShncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpKSBnb3RvIGVycjsKLQkJfQotCWVsc2UKLQkJewotCQlpZiAoIUJOX2JpbjJibihidWYgKyAxICsgZmllbGRfbGVuLCBmaWVsZF9sZW4sIHkpKSBnb3RvIGVycjsKLQkJaWYgKEJOX3VjbXAoeSwgJmdyb3VwLT5maWVsZCkgPj0gMCkKLQkJCXsKLQkJCUVDZXJyKEVDX0ZfRUNfR0YyTV9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fSFlCUklEKQotCQkJewotCQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfZGl2KGdyb3VwLCB5eGksIHksIHgsIGN0eCkpIGdvdG8gZXJyOwotCQkJaWYgKHlfYml0ICE9IEJOX2lzX29kZCh5eGkpKQotCQkJCXsKLQkJCQlFQ2VycihFQ19GX0VDX0dGMk1fU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKLQkJCQlnb3RvIGVycjsKLQkJCQl9Ci0JCQl9Ci0KLQkJaWYgKCFFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKLQkJfQotCQotCWlmICghRUNfUE9JTlRfaXNfb25fY3VydmUoZ3JvdXAsIHBvaW50LCBjdHgpKSAvKiB0ZXN0IHJlcXVpcmVkIGJ5IFg5LjYyICovCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19HRjJNX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfUE9JTlRfSVNfTk9UX09OX0NVUlZFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCXJldCA9IDE7Ci0JCi0gZXJyOgotCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAobmV3X2N0eCAhPSBOVUxMKQotCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKLQlyZXR1cm4gcmV0OwotCX0KLQotCiAvKiBDb21wdXRlcyBhICsgYiBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gci4gIHIgY291bGQgYmUgYSBvciBiLCBhIGNvdWxkIGJlIGIuCiAgKiBVc2VzIGFsZ29yaXRobSBBLjEwLjIgb2YgSUVFRSBQMTM2My4KICAqLwpAQCAtMTA0MCwzICs3MTUsNSBAQAogCXsKIAlyZXR1cm4gQk5fR0YybV9tb2RfZGl2KHIsIGEsIGIsICZncm91cC0+ZmllbGQsIGN0eCk7CiAJfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19hbWV0aC5jIGIvY3J5cHRvL2VjL2VjX2FtZXRoLmMKaW5kZXggYzAwZjdkNy4uODM5MDljMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX2FtZXRoLmMKKysrIGIvY3J5cHRvL2VjL2VjX2FtZXRoLmMKQEAgLTY1MSw2ICs2NTEsNyBAQAogCWVjX2NvcHlfcGFyYW1ldGVycywKIAllY19jbXBfcGFyYW1ldGVycywKIAllY2tleV9wYXJhbV9wcmludCwKKwkwLAogCiAJaW50X2VjX2ZyZWUsCiAJZWNfcGtleV9jdHJsLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX2FzbjEuYyBiL2NyeXB0by9lYy9lY19hc24xLmMKaW5kZXggYWU1NTUzOS4uMTc1ZWVjNSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX2FzbjEuYworKysgYi9jcnlwdG8vZWMvZWNfYXNuMS5jCkBAIC04Myw3ICs4Myw3IEBACiAJCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCAqLwogCQlyZXR1cm4gMDsKIAl9Ci0KKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiBpbnQgRUNfR1JPVVBfZ2V0X3RyaW5vbWlhbF9iYXNpcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIHVuc2lnbmVkIGludCAqaykKIAl7CiAJaWYgKGdyb3VwID09IE5VTEwpCkBAIC0xMDEsNyArMTAxLDYgQEAKIAogCXJldHVybiAxOwogCX0KLQogaW50IEVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIHVuc2lnbmVkIGludCAqazEsCiAJdW5zaWduZWQgaW50ICprMiwgdW5zaWduZWQgaW50ICprMykKIAl7CkBAIC0xMjQsNyArMTIzLDcgQEAKIAogCXJldHVybiAxOwogCX0KLQorI2VuZGlmCiAKIAogLyogc29tZSBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgdGhlIGFzbjEgZW5jb2RpbmcgKi8KQEAgLTM0MCw2ICszMzksMTIgQEAKIAkJCX0KIAkJfQogCWVsc2UJLyogbmlkID09IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgKi8KKyNpZmRlZiBPUEVOU1NMX05PX0VDMk0KKwkJeworCQlFQ2VycihFQ19GX0VDX0FTTjFfR1JPVVAyRklFTERJRCwgRUNfUl9HRjJNX05PVF9TVVBQT1JURUQpOworCQlnb3RvIGVycjsKKwkJfQorI2Vsc2UKIAkJewogCQlpbnQJCWZpZWxkX3R5cGU7CiAJCVg5XzYyX0NIQVJBQ1RFUklTVElDX1RXTyAqY2hhcl90d287CkBAIC00MTksNiArNDI0LDcgQEAKIAkJCQl9CiAJCQl9CiAJCX0KKyNlbmRpZgogCiAJb2sgPSAxOwogCkBAIC00NTYsNiArNDYyLDcgQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCWVsc2UJLyogbmlkID09IE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgKi8KIAkJewogCQlpZiAoIUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtKGdyb3VwLCBOVUxMLCB0bXBfMSwgdG1wXzIsIE5VTEwpKQpAQCAtNDY0LDcgKzQ3MSw3IEBACiAJCQlnb3RvIGVycjsKIAkJCX0KIAkJfQotCisjZW5kaWYKIAlsZW5fMSA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHRtcF8xKTsKIAlsZW5fMiA9IChzaXplX3QpQk5fbnVtX2J5dGVzKHRtcF8yKTsKIApAQCAtNzc1LDggKzc4MiwxMyBAQAogCiAJLyogZ2V0IHRoZSBmaWVsZCBwYXJhbWV0ZXJzICovCiAJdG1wID0gT0JKX29iajJuaWQocGFyYW1zLT5maWVsZElELT5maWVsZFR5cGUpOwotCiAJaWYgKHRtcCA9PSBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkKQorI2lmZGVmIE9QRU5TU0xfTk9fRUMyTQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfQVNOMV9QQVJBTUVURVJTMkdST1VQLCBFQ19SX0dGMk1fTk9UX1NVUFBPUlRFRCk7CisJCWdvdG8gZXJyOworCQl9CisjZWxzZQogCQl7CiAJCVg5XzYyX0NIQVJBQ1RFUklTVElDX1RXTyAqY2hhcl90d287CiAKQEAgLTg2Miw2ICs4NzQsNyBAQAogCQkvKiBjcmVhdGUgdGhlIEVDX0dST1VQIHN0cnVjdHVyZSAqLwogCQlyZXQgPSBFQ19HUk9VUF9uZXdfY3VydmVfR0YybShwLCBhLCBiLCBOVUxMKTsKIAkJfQorI2VuZGlmCiAJZWxzZSBpZiAodG1wID09IE5JRF9YOV82Ml9wcmltZV9maWVsZCkKIAkJewogCQkvKiB3ZSBoYXZlIGEgY3VydmUgb3ZlciBhIHByaW1lIGZpZWxkICovCkBAIC0xMDY1LDYgKzEwNzgsNyBAQAogCWlmICgoZ3JvdXAgPSBlY19hc24xX3BrcGFyYW1ldGVyczJncm91cChwYXJhbXMpKSA9PSBOVUxMKQogCQl7CiAJCUVDZXJyKEVDX0ZfRDJJX0VDUEtQQVJBTUVURVJTLCBFQ19SX1BLUEFSQU1FVEVSUzJHUk9VUF9GQUlMVVJFKTsKKwkJRUNQS1BBUkFNRVRFUlNfZnJlZShwYXJhbXMpOwogCQlyZXR1cm4gTlVMTDsgCiAJCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX2N1cnZlLmMgYi9jcnlwdG8vZWMvZWNfY3VydmUuYwppbmRleCAyMzI3NGU0Li5jNzJmYjI2IDEwMDY0NAotLS0gYS9jcnlwdG8vZWMvZWNfY3VydmUuYworKysgYi9jcnlwdG8vZWMvZWNfY3VydmUuYwpAQCAtMyw3ICszLDcgQEAKICAqIFdyaXR0ZW4gYnkgTmlscyBMYXJzY2ggZm9yIHRoZSBPcGVuU1NMIHByb2plY3QuCiAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDEwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAiZWNfbGNsLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29ial9tYWMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlpbnQJZmllbGRfdHlwZSwJLyogZWl0aGVyIE5JRF9YOV82Ml9wcmltZV9maWVsZCBvcgpAQCAtNzAzLDYgKzcwNCw4IEBACiAJICAweDEzLDB4REQsMHgyOSwweDQ1LDB4NUMsMHg1QywweDJBLDB4M0QgfQogCX07CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKIC8qIGNoYXJhY3RlcmlzdGljIHR3byBjdXJ2ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyBFQ19DVVJWRV9EQVRBIGg7IHVuc2lnbmVkIGNoYXIgZGF0YVsyMCsxNSo2XTsgfQogCV9FQ19TRUNHX0NIQVIyXzExM1IxID0gewpAQCAtMTMwMCw3ICsxMzAzLDcgQEAKIAl7IDB4NTMsMHg4MSwweDRDLDB4MDUsMHgwRCwweDQ0LDB4RDYsMHg5NiwweEU2LDB4NzYsCS8qIHNlZWQgKi8KIAkgIDB4ODcsMHg1NiwweDE1LDB4MTcsMHg1OCwweDBDLDB4QTQsMHhFMiwweDlGLDB4RkQsCiAKLSAJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCisJICAweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAkvKiBwICovCiAJICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAogCSAgMHgwNywKIAkgIDB4MDEsMHgwOCwweEIzLDB4OUUsMHg3NywweEM0LDB4QjEsMHgwOCwweEJFLDB4RDksCS8qIGEgKi8KQEAgLTE4MTcsMTAzICsxODIwLDEyOCBAQAogCSAgMHhCQSwweEZDLDB4QTcsMHg1RSB9CiAJfTsKIAorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IF9lY19saXN0X2VsZW1lbnRfc3QgewogCWludAluaWQ7CiAJY29uc3QgRUNfQ1VSVkVfREFUQSAqZGF0YTsKKwljb25zdCBFQ19NRVRIT0QgKigqbWV0aCkodm9pZCk7CiAJY29uc3QgY2hhciAqY29tbWVudDsKIAl9IGVjX2xpc3RfZWxlbWVudDsKIAogc3RhdGljIGNvbnN0IGVjX2xpc3RfZWxlbWVudCBjdXJ2ZV9saXN0W10gPSB7Ci0JLyogcHJpbWUgZmllbGQgY3VydmVzICovCQorCS8qIHByaW1lIGZpZWxkIGN1cnZlcyAqLwogCS8qIHNlY2cgY3VydmVzICovCi0JeyBOSURfc2VjcDExMnIxLCAmX0VDX1NFQ0dfUFJJTUVfMTEyUjEuaCwgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3NlY3AxMTJyMiwgJl9FQ19TRUNHX1BSSU1FXzExMlIyLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfc2VjcDEyOHIxLCAmX0VDX1NFQ0dfUFJJTUVfMTI4UjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDEyOCBiaXQgcHJpbWUgZmllbGQifSwKLQl7IE5JRF9zZWNwMTI4cjIsICZfRUNfU0VDR19QUklNRV8xMjhSMi5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3NlY3AxNjBrMSwgJl9FQ19TRUNHX1BSSU1FXzE2MEsxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfc2VjcDE2MHIxLCAmX0VDX1NFQ0dfUFJJTUVfMTYwUjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGQifSwKLQl7IE5JRF9zZWNwMTYwcjIsICZfRUNfU0VDR19QUklNRV8xNjBSMi5oLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfc2VjcDExMnIxLCAmX0VDX1NFQ0dfUFJJTUVfMTEyUjEuaCwgMCwgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTEycjIsICZfRUNfU0VDR19QUklNRV8xMTJSMi5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTI4cjEsICZfRUNfU0VDR19QUklNRV8xMjhSMS5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTI4cjIsICZfRUNfU0VDR19QUklNRV8xMjhSMi5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTI4IGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTYwazEsICZfRUNfU0VDR19QUklNRV8xNjBLMS5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTYwcjEsICZfRUNfU0VDR19QUklNRV8xNjBSMS5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZCIgfSwKKwl7IE5JRF9zZWNwMTYwcjIsICZfRUNfU0VDR19QUklNRV8xNjBSMi5oLCAwLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIiB9LAogCS8qIFNFQ0cgc2VjcDE5MnIxIGlzIHRoZSBzYW1lIGFzIFg5LjYyIHByaW1lMTkydjEgYW5kIGhlbmNlIG9taXR0ZWQgKi8KLQl7IE5JRF9zZWNwMTkyazEsICZfRUNfU0VDR19QUklNRV8xOTJLMS5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTkyIGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3NlY3AyMjRrMSwgJl9FQ19TRUNHX1BSSU1FXzIyNEsxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAyMjQgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfc2VjcDIyNHIxLCAmX0VDX05JU1RfUFJJTUVfMjI0LmgsICAgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMjI0IGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3NlY3AyNTZrMSwgJl9FQ19TRUNHX1BSSU1FXzI1NksxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfc2VjcDE5MmsxLCAmX0VDX1NFQ0dfUFJJTUVfMTkySzEuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE5MiBiaXQgcHJpbWUgZmllbGQiIH0sCisJeyBOSURfc2VjcDIyNGsxLCAmX0VDX1NFQ0dfUFJJTUVfMjI0SzEuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDIyNCBiaXQgcHJpbWUgZmllbGQiIH0sCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOAorCXsgTklEX3NlY3AyMjRyMSwgJl9FQ19OSVNUX1BSSU1FXzIyNC5oLCBFQ19HRnBfbmlzdHAyMjRfbWV0aG9kLCAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSAyMjQgYml0IHByaW1lIGZpZWxkIiB9LAorI2Vsc2UKKwl7IE5JRF9zZWNwMjI0cjEsICZfRUNfTklTVF9QUklNRV8yMjQuaCwgMCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMjI0IGJpdCBwcmltZSBmaWVsZCIgfSwKKyNlbmRpZgorCXsgTklEX3NlY3AyNTZrMSwgJl9FQ19TRUNHX1BSSU1FXzI1NksxLmgsIDAsICJTRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIiB9LAogCS8qIFNFQ0cgc2VjcDI1NnIxIGlzIHRoZSBzYW1lIGFzIFg5LjYyIHByaW1lMjU2djEgYW5kIGhlbmNlIG9taXR0ZWQgKi8KLQl7IE5JRF9zZWNwMzg0cjEsICZfRUNfTklTVF9QUklNRV8zODQuaCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMzg0IGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3NlY3A1MjFyMSwgJl9FQ19OSVNUX1BSSU1FXzUyMS5oLCAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1MjEgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfc2VjcDM4NHIxLCAmX0VDX05JU1RfUFJJTUVfMzg0LmgsIDAsICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDM4NCBiaXQgcHJpbWUgZmllbGQiIH0sCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOAorCXsgTklEX3NlY3A1MjFyMSwgJl9FQ19OSVNUX1BSSU1FXzUyMS5oLCBFQ19HRnBfbmlzdHA1MjFfbWV0aG9kLCAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1MjEgYml0IHByaW1lIGZpZWxkIiB9LAorI2Vsc2UKKwl7IE5JRF9zZWNwNTIxcjEsICZfRUNfTklTVF9QUklNRV81MjEuaCwgMCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgNTIxIGJpdCBwcmltZSBmaWVsZCIgfSwKKyNlbmRpZgogCS8qIFg5LjYyIGN1cnZlcyAqLwotCXsgTklEX1g5XzYyX3ByaW1lMTkydjEsICZfRUNfTklTVF9QUklNRV8xOTIuaCwgIk5JU1QvWDkuNjIvU0VDRyBjdXJ2ZSBvdmVyIGEgMTkyIGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX1g5XzYyX3ByaW1lMTkydjIsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfWDlfNjJfcHJpbWUxOTJ2MywgJl9FQ19YOV82Ml9QUklNRV8xOTJWMy5oLCAiWDkuNjIgY3VydmUgb3ZlciBhIDE5MiBiaXQgcHJpbWUgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9wcmltZTIzOXYxLCAmX0VDX1g5XzYyX1BSSU1FXzIzOVYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX1g5XzYyX3ByaW1lMjM5djIsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjIuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfWDlfNjJfcHJpbWUyMzl2MywgJl9FQ19YOV82Ml9QUklNRV8yMzlWMy5oLCAiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgcHJpbWUgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9wcmltZTI1NnYxLCAmX0VDX1g5XzYyX1BSSU1FXzI1NlYxLmgsICJYOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIn0sCisJeyBOSURfWDlfNjJfcHJpbWUxOTJ2MSwgJl9FQ19OSVNUX1BSSU1FXzE5Mi5oLCAwLCAiTklTVC9YOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX3ByaW1lMTkydjIsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjIuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX3ByaW1lMTkydjMsICZfRUNfWDlfNjJfUFJJTUVfMTkyVjMuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTIgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX3ByaW1lMjM5djEsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjEuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX3ByaW1lMjM5djIsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjIuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX3ByaW1lMjM5djMsICZfRUNfWDlfNjJfUFJJTUVfMjM5VjMuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IHByaW1lIGZpZWxkIiB9LAorI2lmbmRlZiBPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjgKKwl7IE5JRF9YOV82Ml9wcmltZTI1NnYxLCAmX0VDX1g5XzYyX1BSSU1FXzI1NlYxLmgsIEVDX0dGcF9uaXN0cDI1Nl9tZXRob2QsICJYOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIiB9LAorI2Vsc2UKKwl7IE5JRF9YOV82Ml9wcmltZTI1NnYxLCAmX0VDX1g5XzYyX1BSSU1FXzI1NlYxLmgsIDAsICJYOS42Mi9TRUNHIGN1cnZlIG92ZXIgYSAyNTYgYml0IHByaW1lIGZpZWxkIiB9LAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCS8qIGNoYXJhY3RlcmlzdGljIHR3byBmaWVsZCBjdXJ2ZXMgKi8KIAkvKiBOSVNUL1NFQ0cgY3VydmVzICovCi0JeyBOSURfc2VjdDExM3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjEuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIn0sCi0JeyBOSURfc2VjdDExM3IyLCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjIuaCwgIlNFQ0cgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIn0sCi0JeyBOSURfc2VjdDEzMXIxLCAmX0VDX1NFQ0dfQ0hBUjJfMTMxUjEuaCwgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTMxIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9zZWN0MTMxcjIsICZfRUNfU0VDR19DSEFSMl8xMzFSMi5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTMxIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9zZWN0MTYzazEsICZfRUNfTklTVF9DSEFSMl8xNjNLLmgsICAiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAotCXsgTklEX3NlY3QxNjNyMSwgJl9FQ19TRUNHX0NIQVIyXzE2M1IxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3NlY3QxNjNyMiwgJl9FQ19OSVNUX0NIQVIyXzE2M0IuaCwgICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAotCXsgTklEX3NlY3QxOTNyMSwgJl9FQ19TRUNHX0NIQVIyXzE5M1IxLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxOTMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3NlY3QxOTNyMiwgJl9FQ19TRUNHX0NIQVIyXzE5M1IyLmgsICJTRUNHIGN1cnZlIG92ZXIgYSAxOTMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3NlY3QyMzNrMSwgJl9FQ19OSVNUX0NIQVIyXzIzM0suaCwgICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMjMzIGJpdCBiaW5hcnkgZmllbGQiIH0sCi0JeyBOSURfc2VjdDIzM3IxLCAmX0VDX05JU1RfQ0hBUjJfMjMzQi5oLCAgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAyMzMgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0MjM5azEsICZfRUNfU0VDR19DSEFSMl8yMzlLMS5oLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9zZWN0MjgzazEsICZfRUNfTklTVF9DSEFSMl8yODNLLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSAyODMgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0MjgzcjEsICZfRUNfTklTVF9DSEFSMl8yODNCLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSAyODMgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0NDA5azEsICZfRUNfTklTVF9DSEFSMl80MDlLLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA0MDkgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0NDA5cjEsICZfRUNfTklTVF9DSEFSMl80MDlCLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA0MDkgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0NTcxazEsICZfRUNfTklTVF9DSEFSMl81NzFLLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1NzEgYml0IGJpbmFyeSBmaWVsZCIgfSwKLQl7IE5JRF9zZWN0NTcxcjEsICZfRUNfTklTVF9DSEFSMl81NzFCLmgsICAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1NzEgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0MTEzcjEsICZfRUNfU0VDR19DSEFSMl8xMTNSMS5oLCAwLCAiU0VDRyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDExM3IyLCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjIuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QxMzFyMSwgJl9FQ19TRUNHX0NIQVIyXzEzMVIxLmgsIDAsICJTRUNHL1dUTFMgY3VydmUgb3ZlciBhIDEzMSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QxMzFyMiwgJl9FQ19TRUNHX0NIQVIyXzEzMVIyLmgsIDAsICJTRUNHIGN1cnZlIG92ZXIgYSAxMzEgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0MTYzazEsICZfRUNfTklTVF9DSEFSMl8xNjNLLmgsIDAsICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDE2M3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTYzUjEuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QxNjNyMiwgJl9FQ19OSVNUX0NIQVIyXzE2M0IuaCwgMCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDE5M3IxLCAmX0VDX1NFQ0dfQ0hBUjJfMTkzUjEuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDE5MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QxOTNyMiwgJl9FQ19TRUNHX0NIQVIyXzE5M1IyLmgsIDAsICJTRUNHIGN1cnZlIG92ZXIgYSAxOTMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0MjMzazEsICZfRUNfTklTVF9DSEFSMl8yMzNLLmgsIDAsICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMjMzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDIzM3IxLCAmX0VDX05JU1RfQ0hBUjJfMjMzQi5oLCAwLCAiTklTVC9TRUNHL1dUTFMgY3VydmUgb3ZlciBhIDIzMyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QyMzlrMSwgJl9FQ19TRUNHX0NIQVIyXzIzOUsxLmgsIDAsICJTRUNHIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0MjgzazEsICZfRUNfTklTVF9DSEFSMl8yODNLLmgsIDAsICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDI4MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3QyODNyMSwgJl9FQ19OSVNUX0NIQVIyXzI4M0IuaCwgMCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgMjgzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDQwOWsxLCAmX0VDX05JU1RfQ0hBUjJfNDA5Sy5oLCAwLCAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA0MDkgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9zZWN0NDA5cjEsICZfRUNfTklTVF9DSEFSMl80MDlCLmgsIDAsICJOSVNUL1NFQ0cgY3VydmUgb3ZlciBhIDQwOSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3NlY3Q1NzFrMSwgJl9FQ19OSVNUX0NIQVIyXzU3MUsuaCwgMCwgIk5JU1QvU0VDRyBjdXJ2ZSBvdmVyIGEgNTcxIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfc2VjdDU3MXIxLCAmX0VDX05JU1RfQ0hBUjJfNTcxQi5oLCAwLCAiTklTVC9TRUNHIGN1cnZlIG92ZXIgYSA1NzEgYml0IGJpbmFyeSBmaWVsZCIgfSwKIAkvKiBYOS42MiBjdXJ2ZXMgKi8KLQl7IE5JRF9YOV82Ml9jMnBuYjE2M3YxLCAmX0VDX1g5XzYyX0NIQVIyXzE2M1YxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjE2M3YyLCAmX0VDX1g5XzYyX0NIQVIyXzE2M1YyLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjE2M3YzLCAmX0VDX1g5XzYyX0NIQVIyXzE2M1YzLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjE3NnYxLCAmX0VDX1g5XzYyX0NIQVIyXzE3NlYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTc2IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjE5MXYxLCAmX0VDX1g5XzYyX0NIQVIyXzE5MVYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTkxIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjE5MXYyLCAmX0VDX1g5XzYyX0NIQVIyXzE5MVYyLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTkxIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjE5MXYzLCAmX0VDX1g5XzYyX0NIQVIyXzE5MVYzLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTkxIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjIwOHcxLCAmX0VDX1g5XzYyX0NIQVIyXzIwOFcxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjA4IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjIzOXYxLCAmX0VDX1g5XzYyX0NIQVIyXzIzOVYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjIzOXYyLCAmX0VDX1g5XzYyX0NIQVIyXzIzOVYyLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjIzOXYzLCAmX0VDX1g5XzYyX0NIQVIyXzIzOVYzLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjI3MncxLCAmX0VDX1g5XzYyX0NIQVIyXzI3MlcxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjcyIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjMwNHcxLCAmX0VDX1g5XzYyX0NIQVIyXzMwNFcxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMzA0IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjM1OXYxLCAmX0VDX1g5XzYyX0NIQVIyXzM1OVYxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMzU5IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnBuYjM2OHcxLCAmX0VDX1g5XzYyX0NIQVIyXzM2OFcxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMzY4IGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF9YOV82Ml9jMnRuYjQzMXIxLCAmX0VDX1g5XzYyX0NIQVIyXzQzMVIxLmgsICJYOS42MiBjdXJ2ZSBvdmVyIGEgNDMxIGJpdCBiaW5hcnkgZmllbGQifSwKKwl7IE5JRF9YOV82Ml9jMnBuYjE2M3YxLCAmX0VDX1g5XzYyX0NIQVIyXzE2M1YxLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfWDlfNjJfYzJwbmIxNjN2MiwgJl9FQ19YOV82Ml9DSEFSMl8xNjNWMi5oLCAwLCAiWDkuNjIgY3VydmUgb3ZlciBhIDE2MyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX2MycG5iMTYzdjMsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjMuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9YOV82Ml9jMnBuYjE3NnYxLCAmX0VDX1g5XzYyX0NIQVIyXzE3NlYxLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTc2IGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfWDlfNjJfYzJ0bmIxOTF2MSwgJl9FQ19YOV82Ml9DSEFSMl8xOTFWMS5oLCAwLCAiWDkuNjIgY3VydmUgb3ZlciBhIDE5MSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX2MydG5iMTkxdjIsICZfRUNfWDlfNjJfQ0hBUjJfMTkxVjIuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxOTEgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9YOV82Ml9jMnRuYjE5MXYzLCAmX0VDX1g5XzYyX0NIQVIyXzE5MVYzLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMTkxIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfWDlfNjJfYzJwbmIyMDh3MSwgJl9FQ19YOV82Ml9DSEFSMl8yMDhXMS5oLCAwLCAiWDkuNjIgY3VydmUgb3ZlciBhIDIwOCBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX2MydG5iMjM5djEsICZfRUNfWDlfNjJfQ0hBUjJfMjM5VjEuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyMzkgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9YOV82Ml9jMnRuYjIzOXYyLCAmX0VDX1g5XzYyX0NIQVIyXzIzOVYyLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMjM5IGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfWDlfNjJfYzJ0bmIyMzl2MywgJl9FQ19YOV82Ml9DSEFSMl8yMzlWMy5oLCAwLCAiWDkuNjIgY3VydmUgb3ZlciBhIDIzOSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX2MycG5iMjcydzEsICZfRUNfWDlfNjJfQ0hBUjJfMjcyVzEuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAyNzIgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9YOV82Ml9jMnBuYjMwNHcxLCAmX0VDX1g5XzYyX0NIQVIyXzMwNFcxLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgMzA0IGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfWDlfNjJfYzJ0bmIzNTl2MSwgJl9FQ19YOV82Ml9DSEFSMl8zNTlWMS5oLCAwLCAiWDkuNjIgY3VydmUgb3ZlciBhIDM1OSBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX1g5XzYyX2MycG5iMzY4dzEsICZfRUNfWDlfNjJfQ0hBUjJfMzY4VzEuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAzNjggYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF9YOV82Ml9jMnRuYjQzMXIxLCAmX0VDX1g5XzYyX0NIQVIyXzQzMVIxLmgsIDAsICJYOS42MiBjdXJ2ZSBvdmVyIGEgNDMxIGJpdCBiaW5hcnkgZmllbGQiIH0sCiAJLyogdGhlIFdBUC9XVExTIGN1cnZlcwogCSAqIFt1bmxpa2UgU0VDRywgc3BlYyBoYXMgaXRzIG93biBPSURzIGZvciBjdXJ2ZXMgZnJvbSBYOS42Ml0gKi8KLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxLCAmX0VDX1dUTFNfMS5oLCAiV1RMUyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMzLCAmX0VDX05JU1RfQ0hBUjJfMTYzSy5oLCAgICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTYzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM0LCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjEuaCwgICJTRUNHIGN1cnZlIG92ZXIgYSAxMTMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczUsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjEuaCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczYsICZfRUNfU0VDR19QUklNRV8xMTJSMS5oLCAgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTEyIGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczcsICZfRUNfU0VDR19QUklNRV8xNjBSMi5oLCAgIlNFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZCJ9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczgsICZfRUNfV1RMU184LmgsICJXVExTIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIn0sCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzOSwgJl9FQ19XVExTXzkuaCwgIldUTFMgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGQiIH0sCi0JeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMTAsICZfRUNfTklTVF9DSEFSMl8yMzNLLmgsICJOSVNUL1NFQ0cvV1RMUyBjdXJ2ZSBvdmVyIGEgMjMzIGJpdCBiaW5hcnkgZmllbGQifSwKLQl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMSwgJl9FQ19OSVNUX0NIQVIyXzIzM0IuaCwgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAyMzMgYml0IGJpbmFyeSBmaWVsZCJ9LAotCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczEyLCAmX0VDX1dUTFNfMTIuaCwgIldUTFMgY3VydnMgb3ZlciBhIDIyNCBiaXQgcHJpbWUgZmllbGQifSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxLCAmX0VDX1dUTFNfMS5oLCAwLCAiV1RMUyBjdXJ2ZSBvdmVyIGEgMTEzIGJpdCBiaW5hcnkgZmllbGQiIH0sCisJeyBOSURfd2FwX3dzZ19pZG1fZWNpZF93dGxzMywgJl9FQ19OSVNUX0NIQVIyXzE2M0suaCwgMCwgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHM0LCAmX0VDX1NFQ0dfQ0hBUjJfMTEzUjEuaCwgMCwgIlNFQ0cgY3VydmUgb3ZlciBhIDExMyBiaXQgYmluYXJ5IGZpZWxkIiB9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczUsICZfRUNfWDlfNjJfQ0hBUjJfMTYzVjEuaCwgMCwgIlg5LjYyIGN1cnZlIG92ZXIgYSAxNjMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKyNlbmRpZgorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczYsICZfRUNfU0VDR19QUklNRV8xMTJSMS5oLCAwLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczcsICZfRUNfU0VDR19QUklNRV8xNjBSMi5oLCAwLCAiU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczgsICZfRUNfV1RMU184LmgsIDAsICJXVExTIGN1cnZlIG92ZXIgYSAxMTIgYml0IHByaW1lIGZpZWxkIiB9LAorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczksICZfRUNfV1RMU185LmgsIDAsICJXVExTIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkIiB9LAorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMCwgJl9FQ19OSVNUX0NIQVIyXzIzM0suaCwgMCwgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAyMzMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKwl7IE5JRF93YXBfd3NnX2lkbV9lY2lkX3d0bHMxMSwgJl9FQ19OSVNUX0NIQVIyXzIzM0IuaCwgMCwgIk5JU1QvU0VDRy9XVExTIGN1cnZlIG92ZXIgYSAyMzMgYml0IGJpbmFyeSBmaWVsZCIgfSwKKyNlbmRpZgorCXsgTklEX3dhcF93c2dfaWRtX2VjaWRfd3RsczEyLCAmX0VDX1dUTFNfMTIuaCwgMCwgIldUTFMgY3VydnMgb3ZlciBhIDIyNCBiaXQgcHJpbWUgZmllbGQiIH0sCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCS8qIElQU2VjIGN1cnZlcyAqLwotCXsgTklEX2lwc2VjMywgJl9FQ19JUFNFQ18xNTVfSUQzLmgsICJcblx0SVBTZWMvSUtFL09ha2xleSBjdXJ2ZSAjMyBvdmVyIGEgMTU1IGJpdCBiaW5hcnkgZmllbGQuXG4iIlx0Tm90IHN1aXRhYmxlIGZvciBFQ0RTQS5cblx0UXVlc3Rpb25hYmxlIGV4dGVuc2lvbiBmaWVsZCEifSwKLQl7IE5JRF9pcHNlYzQsICZfRUNfSVBTRUNfMTg1X0lENC5oLCAiXG5cdElQU2VjL0lLRS9PYWtsZXkgY3VydmUgIzQgb3ZlciBhIDE4NSBiaXQgYmluYXJ5IGZpZWxkLlxuIiJcdE5vdCBzdWl0YWJsZSBmb3IgRUNEU0EuXG5cdFF1ZXN0aW9uYWJsZSBleHRlbnNpb24gZmllbGQhIn0sCisJeyBOSURfaXBzZWMzLCAmX0VDX0lQU0VDXzE1NV9JRDMuaCwgMCwgIlxuXHRJUFNlYy9JS0UvT2FrbGV5IGN1cnZlICMzIG92ZXIgYSAxNTUgYml0IGJpbmFyeSBmaWVsZC5cbiIKKwkgICJcdE5vdCBzdWl0YWJsZSBmb3IgRUNEU0EuXG5cdFF1ZXN0aW9uYWJsZSBleHRlbnNpb24gZmllbGQhIiB9LAorCXsgTklEX2lwc2VjNCwgJl9FQ19JUFNFQ18xODVfSUQ0LmgsIDAsICJcblx0SVBTZWMvSUtFL09ha2xleSBjdXJ2ZSAjNCBvdmVyIGEgMTg1IGJpdCBiaW5hcnkgZmllbGQuXG4iCisJICAiXHROb3Qgc3VpdGFibGUgZm9yIEVDRFNBLlxuXHRRdWVzdGlvbmFibGUgZXh0ZW5zaW9uIGZpZWxkISIgfSwKKyNlbmRpZgogfTsKIAogI2RlZmluZSBjdXJ2ZV9saXN0X2xlbmd0aCAoc2l6ZW9mKGN1cnZlX2xpc3QpL3NpemVvZihlY19saXN0X2VsZW1lbnQpKQogCi1zdGF0aWMgRUNfR1JPVVAgKmVjX2dyb3VwX25ld19mcm9tX2RhdGEoY29uc3QgRUNfQ1VSVkVfREFUQSAqZGF0YSkKK3N0YXRpYyBFQ19HUk9VUCAqZWNfZ3JvdXBfbmV3X2Zyb21fZGF0YShjb25zdCBlY19saXN0X2VsZW1lbnQgY3VydmUpCiAJewogCUVDX0dST1VQICpncm91cD1OVUxMOwogCUVDX1BPSU5UICpQPU5VTEw7CiAJQk5fQ1RYCSAqY3R4PU5VTEw7Ci0JQklHTlVNIAkgKnA9TlVMTCwgKmE9TlVMTCwgKmI9TlVMTCwgKng9TlVMTCwgKnk9TlVMTCwgKm9yZGVyPU5VTEw7CisJQklHTlVNCSAqcD1OVUxMLCAqYT1OVUxMLCAqYj1OVUxMLCAqeD1OVUxMLCAqeT1OVUxMLCAqb3JkZXI9TlVMTDsKIAlpbnQJIG9rPTA7CiAJaW50CSBzZWVkX2xlbixwYXJhbV9sZW47CisJY29uc3QgRUNfTUVUSE9EICptZXRoOworCWNvbnN0IEVDX0NVUlZFX0RBVEEgKmRhdGE7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcGFyYW1zOwogCiAJaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCkBAIC0xOTIyLDEwICsxOTUwLDExIEBACiAJCWdvdG8gZXJyOwogCQl9CiAKKwlkYXRhID0gY3VydmUuZGF0YTsKIAlzZWVkX2xlbiAgPSBkYXRhLT5zZWVkX2xlbjsKIAlwYXJhbV9sZW4gPSBkYXRhLT5wYXJhbV9sZW47Ci0JcGFyYW1zICAgID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikoZGF0YSsxKTsJLyogc2tpcCBoZWFkZXIgKi8KLQlwYXJhbXMgICArPSBzZWVkX2xlbjsJCQkJLyogc2tpcCBzZWVkICAgKi8KKwlwYXJhbXMJICA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopKGRhdGErMSk7CS8qIHNraXAgaGVhZGVyICovCisJcGFyYW1zCSArPSBzZWVkX2xlbjsJCQkJLyogc2tpcCBzZWVkICAgKi8KIAogCWlmICghKHAgPSBCTl9iaW4yYm4ocGFyYW1zKzAqcGFyYW1fbGVuLCBwYXJhbV9sZW4sIE5VTEwpKQogCQl8fCAhKGEgPSBCTl9iaW4yYm4ocGFyYW1zKzEqcGFyYW1fbGVuLCBwYXJhbV9sZW4sIE5VTEwpKQpAQCAtMTkzNSw3ICsxOTY0LDE3IEBACiAJCWdvdG8gZXJyOwogCQl9CiAKLQlpZiAoZGF0YS0+ZmllbGRfdHlwZSA9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCisJaWYgKGN1cnZlLm1ldGggIT0gMCkKKwkJeworCQltZXRoID0gY3VydmUubWV0aCgpOworCQlpZiAoKChncm91cCA9IEVDX0dST1VQX25ldyhtZXRoKSkgPT0gTlVMTCkgfHwKKwkJCSghKGdyb3VwLT5tZXRoLT5ncm91cF9zZXRfY3VydmUoZ3JvdXAsIHAsIGEsIGIsIGN0eCkpKSkKKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfR1JPVVBfTkVXX0ZST01fREFUQSwgRVJSX1JfRUNfTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJZWxzZSBpZiAoZGF0YS0+ZmllbGRfdHlwZSA9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCiAJCXsKIAkJaWYgKChncm91cCA9IEVDX0dST1VQX25ld19jdXJ2ZV9HRnAocCwgYSwgYiwgY3R4KSkgPT0gTlVMTCkKIAkJCXsKQEAgLTE5NDMsNiArMTk4Miw3IEBACiAJCQlnb3RvIGVycjsKIAkJCX0KIAkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAllbHNlCS8qIGZpZWxkX3R5cGUgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCAqLwogCQl7CiAJCWlmICgoZ3JvdXAgPSBFQ19HUk9VUF9uZXdfY3VydmVfR0YybShwLCBhLCBiLCBjdHgpKSA9PSBOVUxMKQpAQCAtMTk1MSwyMCArMTk5MSwyMSBAQAogCQkJZ290byBlcnI7CiAJCQl9CiAJCX0KKyNlbmRpZgogCiAJaWYgKChQID0gRUNfUE9JTlRfbmV3KGdyb3VwKSkgPT0gTlVMTCkKIAkJewogCQlFQ2VycihFQ19GX0VDX0dST1VQX05FV19GUk9NX0RBVEEsIEVSUl9SX0VDX0xJQik7CiAJCWdvdG8gZXJyOwogCQl9Ci0JCisKIAlpZiAoISh4ID0gQk5fYmluMmJuKHBhcmFtcyszKnBhcmFtX2xlbiwgcGFyYW1fbGVuLCBOVUxMKSkKIAkJfHwgISh5ID0gQk5fYmluMmJuKHBhcmFtcys0KnBhcmFtX2xlbiwgcGFyYW1fbGVuLCBOVUxMKSkpCiAJCXsKIAkJRUNlcnIoRUNfRl9FQ19HUk9VUF9ORVdfRlJPTV9EQVRBLCBFUlJfUl9CTl9MSUIpOwogCQlnb3RvIGVycjsKIAkJfQotCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLCBQLCB4LCB5LCBjdHgpKQorCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFAsIHgsIHksIGN0eCkpCiAJCXsKIAkJRUNlcnIoRUNfRl9FQ19HUk9VUF9ORVdfRlJPTV9EQVRBLCBFUlJfUl9FQ19MSUIpOwogCQlnb3RvIGVycjsKQEAgLTIwMjUsNyArMjA2Niw3IEBACiAJZm9yIChpPTA7IGk8Y3VydmVfbGlzdF9sZW5ndGg7IGkrKykKIAkJaWYgKGN1cnZlX2xpc3RbaV0ubmlkID09IG5pZCkKIAkJCXsKLQkJCXJldCA9IGVjX2dyb3VwX25ld19mcm9tX2RhdGEoY3VydmVfbGlzdFtpXS5kYXRhKTsKKwkJCXJldCA9IGVjX2dyb3VwX25ld19mcm9tX2RhdGEoY3VydmVfbGlzdFtpXSk7CiAJCQlicmVhazsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX2N2dC5jIGIvY3J5cHRvL2VjL2VjX2N2dC5jCmluZGV4IGQ0NTY0MGIuLmJmY2JhYjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lY19jdnQuYworKysgYi9jcnlwdG8vZWMvZWNfY3Z0LmMKQEAgLTc4LDcgKzc4LDMyIEBACiAJY29uc3QgRUNfTUVUSE9EICptZXRoOwogCUVDX0dST1VQICpyZXQ7CiAKKyNpZiBkZWZpbmVkKE9QRU5TU0xfQk5fQVNNX01PTlQpCisJLyoKKwkgKiBUaGlzIG1pZ2h0IGFwcGVhciBjb250cm92ZXJzaWFsLCBidXQgdGhlIGZhY3QgaXMgdGhhdCBnZW5lcmljCisJICogcHJpbWUgbWV0aG9kIHdhcyBvYnNlcnZlZCB0byBkZWxpdmVyIGJldHRlciBwZXJmb3JtYW5jZSBldmVuCisJICogZm9yIE5JU1QgcHJpbWVzIG9uIGEgcmFuZ2Ugb2YgcGxhdGZvcm1zLCBlLmcuOiA2MCUtMTUlCisJICogaW1wcm92ZW1lbnQgb24gSUEtNjQsIH4yNSUgb24gQVJNLCAzMCUtOTAlIG9uIFA0LCAyMCUtMjUlCisJICogaW4gMzItYml0IGJ1aWxkIGFuZCAzNSUtLTEyJSBpbiA2NC1iaXQgYnVpbGQgb24gQ29yZTIuLi4KKwkgKiBDb2VmZmljaWVudHMgYXJlIHJlbGF0aXZlIHRvIG9wdGltaXplZCBibl9uaXN0LmMgZm9yIG1vc3QKKwkgKiBpbnRlbnNpdmUgRUNEU0EgdmVyaWZ5IGFuZCBFQ0RIIG9wZXJhdGlvbnMgZm9yIDE5Mi0gYW5kIDUyMS0KKwkgKiBiaXQga2V5cyByZXNwZWN0aXZlbHkuIENob2ljZSBvZiB0aGVzZSBib3VuZGFyeSB2YWx1ZXMgaXMKKwkgKiBhcmd1YWJsZSwgYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvZiBpbXByb3ZlbWVudCBjb2VmZmljaWVudAorCSAqIGZyb20ga2V5IGxlbmd0aCBpcyBub3QgYSAibW9ub3RvbmUiIGN1cnZlLiBGb3IgZXhhbXBsZSB3aGlsZQorCSAqIDU3MS1iaXQgcmVzdWx0IGlzIDIzJSBvbiBBUk0sIDM4NC1iaXQgb25lIGlzIC0xJS4gQnV0IGl0J3MKKwkgKiBnZW5lcmFsbHkgZmFzdGVyLCBzb21ldGltZXMgInJlc3BlY3RmdWxseSIgZmFzdGVyLCBzb21ldGltZXMKKwkgKiAidG9sZXJhYmx5IiBzbG93ZXIuLi4gV2hhdCBlZmZlY3RpdmVseSBoYXBwZW5zIGlzIHRoYXQgbG9vcAorCSAqIHdpdGggYm5fbXVsX2FkZF93b3JkcyBpcyBwdXQgYWdhaW5zdCBibl9tdWxfbW9udCwgYW5kIHRoZQorCSAqIGxhdHRlciAid2lucyIgb24gc2hvcnQgdmVjdG9ycy4gQ29ycmVjdCBzb2x1dGlvbiBzaG91bGQgYmUKKwkgKiBpbXBsZW1lbnRpbmcgZGVkaWNhdGVkIE54TiBtdWx0aXBsaWNhdGlvbiBzdWJyb3V0aW5lcyBmb3IKKwkgKiBzbWFsbCBOLiBCdXQgdGlsbCBpdCBtYXRlcmlhbGl6ZXMsIGxldCdzIHN0aWNrIHRvIGdlbmVyaWMKKwkgKiBwcmltZSBtZXRob2QuLi4KKwkgKgkJCQkJCTxhcHBybz4KKwkgKi8KKwltZXRoID0gRUNfR0ZwX21vbnRfbWV0aG9kKCk7CisjZWxzZQogCW1ldGggPSBFQ19HRnBfbmlzdF9tZXRob2QoKTsKKyNlbmRpZgogCQogCXJldCA9IEVDX0dST1VQX25ldyhtZXRoKTsKIAlpZiAocmV0ID09IE5VTEwpCkBAIC0xMjIsNyArMTQ3LDcgQEAKIAlyZXR1cm4gcmV0OwogCX0KIAotCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogRUNfR1JPVVAgKkVDX0dST1VQX25ld19jdXJ2ZV9HRjJtKGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqY3R4KQogCXsKIAljb25zdCBFQ19NRVRIT0QgKm1ldGg7CkBAIC0xNDIsMyArMTY3LDQgQEAKIAogCXJldHVybiByZXQ7CiAJfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWNfZXJyLmMgYi9jcnlwdG8vZWMvZWNfZXJyLmMKaW5kZXggODRiNDgzMy4uMGQxOTM5OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX2Vyci5jCisrKyBiL2NyeXB0by9lYy9lY19lcnIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNyeXB0by9lYy9lY19lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDYgKzcwLDcgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFQ19zdHJfZnVuY3RzW109CiAJewore0VSUl9GVU5DKEVDX0ZfQk5fVE9fRkVMRU0pLAkiQk5fVE9fRkVMRU0ifSwKIHtFUlJfRlVOQyhFQ19GX0NPTVBVVEVfV05BRiksCSJDT01QVVRFX1dOQUYifSwKIHtFUlJfRlVOQyhFQ19GX0QySV9FQ1BBUkFNRVRFUlMpLAkiZDJpX0VDUGFyYW1ldGVycyJ9LAoge0VSUl9GVU5DKEVDX0ZfRDJJX0VDUEtQQVJBTUVURVJTKSwJImQyaV9FQ1BLUGFyYW1ldGVycyJ9LApAQCAtMTEyLDYgKzExMywxNSBAQAoge0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX01PTlRfRklFTERfU1FSKSwJImVjX0dGcF9tb250X2ZpZWxkX3NxciJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX01PTlRfR1JPVVBfU0VUX0NVUlZFKSwJImVjX0dGcF9tb250X2dyb3VwX3NldF9jdXJ2ZSJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX01PTlRfR1JPVVBfU0VUX0NVUlZFX0dGUCksCSJFQ19HRlBfTU9OVF9HUk9VUF9TRVRfQ1VSVkVfR0ZQIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVFAyMjRfR1JPVVBfU0VUX0NVUlZFKSwJImVjX0dGcF9uaXN0cDIyNF9ncm91cF9zZXRfY3VydmUifSwKK3tFUlJfRlVOQyhFQ19GX0VDX0dGUF9OSVNUUDIyNF9QT0lOVFNfTVVMKSwJImVjX0dGcF9uaXN0cDIyNF9wb2ludHNfbXVsIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVFAyMjRfUE9JTlRfR0VUX0FGRklORV9DT09SRElOQVRFUyksCSJlY19HRnBfbmlzdHAyMjRfcG9pbnRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyJ9LAore0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX05JU1RQMjU2X0dST1VQX1NFVF9DVVJWRSksCSJlY19HRnBfbmlzdHAyNTZfZ3JvdXBfc2V0X2N1cnZlIn0sCit7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVFAyNTZfUE9JTlRTX01VTCksCSJlY19HRnBfbmlzdHAyNTZfcG9pbnRzX211bCJ9LAore0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX05JU1RQMjU2X1BPSU5UX0dFVF9BRkZJTkVfQ09PUkRJTkFURVMpLAkiZWNfR0ZwX25pc3RwMjU2X3BvaW50X2dldF9hZmZpbmVfY29vcmRpbmF0ZXMifSwKK3tFUlJfRlVOQyhFQ19GX0VDX0dGUF9OSVNUUDUyMV9HUk9VUF9TRVRfQ1VSVkUpLAkiZWNfR0ZwX25pc3RwNTIxX2dyb3VwX3NldF9jdXJ2ZSJ9LAore0VSUl9GVU5DKEVDX0ZfRUNfR0ZQX05JU1RQNTIxX1BPSU5UU19NVUwpLAkiZWNfR0ZwX25pc3RwNTIxX3BvaW50c19tdWwifSwKK3tFUlJfRlVOQyhFQ19GX0VDX0dGUF9OSVNUUDUyMV9QT0lOVF9HRVRfQUZGSU5FX0NPT1JESU5BVEVTKSwJImVjX0dGcF9uaXN0cDUyMV9wb2ludF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVF9GSUVMRF9NVUwpLAkiZWNfR0ZwX25pc3RfZmllbGRfbXVsIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVF9GSUVMRF9TUVIpLAkiZWNfR0ZwX25pc3RfZmllbGRfc3FyIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19HRlBfTklTVF9HUk9VUF9TRVRfQ1VSVkUpLAkiZWNfR0ZwX25pc3RfZ3JvdXBfc2V0X2N1cnZlIn0sCkBAIC0xNTQsNiArMTY0LDcgQEAKIHtFUlJfRlVOQyhFQ19GX0VDX0tFWV9ORVcpLAkiRUNfS0VZX25ldyJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfS0VZX1BSSU5UKSwJIkVDX0tFWV9wcmludCJ9LAoge0VSUl9GVU5DKEVDX0ZfRUNfS0VZX1BSSU5UX0ZQKSwJIkVDX0tFWV9wcmludF9mcCJ9LAore0VSUl9GVU5DKEVDX0ZfRUNfS0VZX1NFVF9QVUJMSUNfS0VZX0FGRklORV9DT09SRElOQVRFUyksCSJFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVFNfTUFLRV9BRkZJTkUpLAkiRUNfUE9JTlRzX21ha2VfYWZmaW5lIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVF9BREQpLAkiRUNfUE9JTlRfYWRkIn0sCiB7RVJSX0ZVTkMoRUNfRl9FQ19QT0lOVF9DTVApLAkiRUNfUE9JTlRfY21wIn0sCkBAIC0xODQsNiArMTk1LDkgQEAKIHtFUlJfRlVOQyhFQ19GX0kyRF9FQ1BLUEFSQU1FVEVSUyksCSJpMmRfRUNQS1BhcmFtZXRlcnMifSwKIHtFUlJfRlVOQyhFQ19GX0kyRF9FQ1BSSVZBVEVLRVkpLAkiaTJkX0VDUHJpdmF0ZUtleSJ9LAoge0VSUl9GVU5DKEVDX0ZfSTJPX0VDUFVCTElDS0VZKSwJImkyb19FQ1B1YmxpY0tleSJ9LAore0VSUl9GVU5DKEVDX0ZfTklTVFAyMjRfUFJFX0NPTVBfTkVXKSwJIk5JU1RQMjI0X1BSRV9DT01QX05FVyJ9LAore0VSUl9GVU5DKEVDX0ZfTklTVFAyNTZfUFJFX0NPTVBfTkVXKSwJIk5JU1RQMjU2X1BSRV9DT01QX05FVyJ9LAore0VSUl9GVU5DKEVDX0ZfTklTVFA1MjFfUFJFX0NPTVBfTkVXKSwJIk5JU1RQNTIxX1BSRV9DT01QX05FVyJ9LAoge0VSUl9GVU5DKEVDX0ZfTzJJX0VDUFVCTElDS0VZKSwJIm8yaV9FQ1B1YmxpY0tleSJ9LAoge0VSUl9GVU5DKEVDX0ZfT0xEX0VDX1BSSVZfREVDT0RFKSwJIk9MRF9FQ19QUklWX0RFQ09ERSJ9LAoge0VSUl9GVU5DKEVDX0ZfUEtFWV9FQ19DVFJMKSwJIlBLRVlfRUNfQ1RSTCJ9LApAQCAtMTk5LDEyICsyMTMsMTUgQEAKIAl7CiB7RVJSX1JFQVNPTihFQ19SX0FTTjFfRVJST1IpICAgICAgICAgICAgICwiYXNuMSBlcnJvciJ9LAoge0VSUl9SRUFTT04oRUNfUl9BU04xX1VOS05PV05fRklFTEQpICAgICAsImFzbjEgdW5rbm93biBmaWVsZCJ9LAore0VSUl9SRUFTT04oRUNfUl9CSUdOVU1fT1VUX09GX1JBTkdFKSAgICAsImJpZ251bSBvdXQgb2YgcmFuZ2UifSwKIHtFUlJfUkVBU09OKEVDX1JfQlVGRkVSX1RPT19TTUFMTCkgICAgICAgLCJidWZmZXIgdG9vIHNtYWxsIn0sCit7RVJSX1JFQVNPTihFQ19SX0NPT1JESU5BVEVTX09VVF9PRl9SQU5HRSksImNvb3JkaW5hdGVzIG91dCBvZiByYW5nZSJ9LAoge0VSUl9SRUFTT04oRUNfUl9EMklfRUNQS1BBUkFNRVRFUlNfRkFJTFVSRSksImQyaSBlY3BrcGFyYW1ldGVycyBmYWlsdXJlIn0sCiB7RVJSX1JFQVNPTihFQ19SX0RFQ09ERV9FUlJPUikgICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCiB7RVJSX1JFQVNPTihFQ19SX0RJU0NSSU1JTkFOVF9JU19aRVJPKSAgICwiZGlzY3JpbWluYW50IGlzIHplcm8ifSwKIHtFUlJfUkVBU09OKEVDX1JfRUNfR1JPVVBfTkVXX0JZX05BTUVfRkFJTFVSRSksImVjIGdyb3VwIG5ldyBieSBuYW1lIGZhaWx1cmUifSwKIHtFUlJfUkVBU09OKEVDX1JfRklFTERfVE9PX0xBUkdFKSAgICAgICAgLCJmaWVsZCB0b28gbGFyZ2UifSwKK3tFUlJfUkVBU09OKEVDX1JfR0YyTV9OT1RfU1VQUE9SVEVEKSAgICAgLCJnZjJtIG5vdCBzdXBwb3J0ZWQifSwKIHtFUlJfUkVBU09OKEVDX1JfR1JPVVAyUEtQQVJBTUVURVJTX0ZBSUxVUkUpLCJncm91cDJwa3BhcmFtZXRlcnMgZmFpbHVyZSJ9LAoge0VSUl9SRUFTT04oRUNfUl9JMkRfRUNQS1BBUkFNRVRFUlNfRkFJTFVSRSksImkyZCBlY3BrcGFyYW1ldGVycyBmYWlsdXJlIn0sCiB7RVJSX1JFQVNPTihFQ19SX0lOQ09NUEFUSUJMRV9PQkpFQ1RTKSAgICwiaW5jb21wYXRpYmxlIG9iamVjdHMifSwKQEAgLTIzOSw2ICsyNTYsNyBAQAoge0VSUl9SRUFTT04oRUNfUl9VTktOT1dOX0dST1VQKSAgICAgICAgICAsInVua25vd24gZ3JvdXAifSwKIHtFUlJfUkVBU09OKEVDX1JfVU5LTk9XTl9PUkRFUikgICAgICAgICAgLCJ1bmtub3duIG9yZGVyIn0sCiB7RVJSX1JFQVNPTihFQ19SX1VOU1VQUE9SVEVEX0ZJRUxEKSAgICAgICwidW5zdXBwb3J0ZWQgZmllbGQifSwKK3tFUlJfUkVBU09OKEVDX1JfV1JPTkdfQ1VSVkVfUEFSQU1FVEVSUykgLCJ3cm9uZyBjdXJ2ZSBwYXJhbWV0ZXJzIn0sCiB7RVJSX1JFQVNPTihFQ19SX1dST05HX09SREVSKSAgICAgICAgICAgICwid3Jvbmcgb3JkZXIifSwKIHswLE5VTEx9CiAJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19rZXkuYyBiL2NyeXB0by9lYy9lY19rZXkuYwppbmRleCA1MjI4MDJjLi5iZjlmZDJkIDEwMDY0NAotLS0gYS9jcnlwdG8vZWMvZWNfa2V5LmMKKysrIGIvY3J5cHRvL2VjL2VjX2tleS5jCkBAIC02NCw3ICs2NCw5IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAiZWNfbGNsLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgogCiBFQ19LRVkgKkVDX0tFWV9uZXcodm9pZCkKIAl7CkBAIC03OCw2ICs4MCw3IEBACiAJCX0KIAogCXJldC0+dmVyc2lvbiA9IDE7CQorCXJldC0+ZmxhZ3MgPSAwOwogCXJldC0+Z3JvdXAgICA9IE5VTEw7CiAJcmV0LT5wdWJfa2V5ID0gTlVMTDsKIAlyZXQtPnByaXZfa2V5PSBOVUxMOwpAQCAtMTk3LDYgKzIwMCw3IEBACiAJZGVzdC0+ZW5jX2ZsYWcgID0gc3JjLT5lbmNfZmxhZzsKIAlkZXN0LT5jb252X2Zvcm0gPSBzcmMtPmNvbnZfZm9ybTsKIAlkZXN0LT52ZXJzaW9uICAgPSBzcmMtPnZlcnNpb247CisJZGVzdC0+ZmxhZ3MgPSBzcmMtPmZsYWdzOwogCiAJcmV0dXJuIGRlc3Q7CiAJfQpAQCAtMjM3LDYgKzI0MSwxMSBAQAogCUJJR05VTQkqcHJpdl9rZXkgPSBOVUxMLCAqb3JkZXIgPSBOVUxMOwogCUVDX1BPSU5UICpwdWJfa2V5ID0gTlVMTDsKIAorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSkKKwkJcmV0dXJuIEZJUFNfZWNfa2V5X2dlbmVyYXRlX2tleShlY2tleSk7CisjZW5kaWYKKwogCWlmICghZWNrZXkgfHwgIWVja2V5LT5ncm91cCkKIAkJewogCQlFQ2VycihFQ19GX0VDX0tFWV9HRU5FUkFURV9LRVksIEVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUik7CkBAIC0zNzEsNiArMzgwLDgyIEBACiAJcmV0dXJuKG9rKTsKIAl9CiAKK2ludCBFQ19LRVlfc2V0X3B1YmxpY19rZXlfYWZmaW5lX2Nvb3JkaW5hdGVzKEVDX0tFWSAqa2V5LCBCSUdOVU0gKngsIEJJR05VTSAqeSkKKwl7CisJQk5fQ1RYICpjdHggPSBOVUxMOworCUJJR05VTSAqdHgsICp0eTsKKwlFQ19QT0lOVCAqcG9pbnQgPSBOVUxMOworCWludCBvayA9IDAsIHRtcF9uaWQsIGlzX2NoYXJfdHdvID0gMDsKKworCWlmICgha2V5IHx8ICFrZXktPmdyb3VwIHx8ICF4IHx8ICF5KQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfS0VZX1NFVF9QVUJMSUNfS0VZX0FGRklORV9DT09SRElOQVRFUywKKwkJCQkJCUVSUl9SX1BBU1NFRF9OVUxMX1BBUkFNRVRFUik7CisJCXJldHVybiAwOworCQl9CisJY3R4ID0gQk5fQ1RYX25ldygpOworCWlmICghY3R4KQorCQlnb3RvIGVycjsKKworCXBvaW50ID0gRUNfUE9JTlRfbmV3KGtleS0+Z3JvdXApOworCisJaWYgKCFwb2ludCkKKwkJZ290byBlcnI7CisKKwl0bXBfbmlkID0gRUNfTUVUSE9EX2dldF9maWVsZF90eXBlKEVDX0dST1VQX21ldGhvZF9vZihrZXktPmdyb3VwKSk7CisKKyAgICAgICAgaWYgKHRtcF9uaWQgPT0gTklEX1g5XzYyX2NoYXJhY3RlcmlzdGljX3R3b19maWVsZCkKKwkJaXNfY2hhcl90d28gPSAxOworCisJdHggPSBCTl9DVFhfZ2V0KGN0eCk7CisJdHkgPSBCTl9DVFhfZ2V0KGN0eCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQorCWlmIChpc19jaGFyX3R3bykKKwkJeworCQlpZiAoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShrZXktPmdyb3VwLCBwb2ludCwKKwkJCQkJCQkJeCwgeSwgY3R4KSkKKwkJCWdvdG8gZXJyOworCQlpZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShrZXktPmdyb3VwLCBwb2ludCwKKwkJCQkJCQkJdHgsIHR5LCBjdHgpKQorCQkJZ290byBlcnI7CisJCX0KKwllbHNlCisjZW5kaWYKKwkJeworCQlpZiAoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGtleS0+Z3JvdXAsIHBvaW50LAorCQkJCQkJCQl4LCB5LCBjdHgpKQorCQkJZ290byBlcnI7CisJCWlmICghRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoa2V5LT5ncm91cCwgcG9pbnQsCisJCQkJCQkJCXR4LCB0eSwgY3R4KSkKKwkJCWdvdG8gZXJyOworCQl9CisJLyogQ2hlY2sgaWYgcmV0cmlldmVkIGNvb3JkaW5hdGVzIG1hdGNoIG9yaWdpbmFsczogaWYgbm90IHZhbHVlcworCSAqIGFyZSBvdXQgb2YgcmFuZ2UuCisJICovCisJaWYgKEJOX2NtcCh4LCB0eCkgfHwgQk5fY21wKHksIHR5KSkKKwkJeworCQlFQ2VycihFQ19GX0VDX0tFWV9TRVRfUFVCTElDX0tFWV9BRkZJTkVfQ09PUkRJTkFURVMsCisJCQlFQ19SX0NPT1JESU5BVEVTX09VVF9PRl9SQU5HRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoIUVDX0tFWV9zZXRfcHVibGljX2tleShrZXksIHBvaW50KSkKKwkJZ290byBlcnI7CisKKwlpZiAoRUNfS0VZX2NoZWNrX2tleShrZXkpID09IDApCisJCWdvdG8gZXJyOworCisJb2sgPSAxOworCisJZXJyOgorCWlmIChjdHgpCisJCUJOX0NUWF9mcmVlKGN0eCk7CisJaWYgKHBvaW50KQorCQlFQ19QT0lOVF9mcmVlKHBvaW50KTsKKwlyZXR1cm4gb2s7CisKKwl9CisKIGNvbnN0IEVDX0dST1VQICpFQ19LRVlfZ2V0MF9ncm91cChjb25zdCBFQ19LRVkgKmtleSkKIAl7CiAJcmV0dXJuIGtleS0+Z3JvdXA7CkBAIC00NjEsMyArNTQ2LDE4IEBACiAJCXJldHVybiAwOwogCXJldHVybiBFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoa2V5LT5ncm91cCwgY3R4KTsKIAl9CisKK2ludCBFQ19LRVlfZ2V0X2ZsYWdzKGNvbnN0IEVDX0tFWSAqa2V5KQorCXsKKwlyZXR1cm4ga2V5LT5mbGFnczsKKwl9CisKK3ZvaWQgRUNfS0VZX3NldF9mbGFncyhFQ19LRVkgKmtleSwgaW50IGZsYWdzKQorCXsKKwlrZXktPmZsYWdzIHw9IGZsYWdzOworCX0KKwordm9pZCBFQ19LRVlfY2xlYXJfZmxhZ3MoRUNfS0VZICprZXksIGludCBmbGFncykKKwl7CisJa2V5LT5mbGFncyAmPSB+ZmxhZ3M7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX2xjbC5oIGIvY3J5cHRvL2VjL2VjX2xjbC5oCmluZGV4IDNlMmMzNGIuLmRhNzk2N2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lY19sY2wuaAorKysgYi9jcnlwdG8vZWMvZWNfbGNsLmgKQEAgLTMsNyArMyw3IEBACiAgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQm9kbyBNb2VsbGVyIGZvciB0aGUgT3BlblNTTCBwcm9qZWN0LgogICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODIsMTAgKzgyLDE1IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorLyogVXNlIGRlZmF1bHQgZnVuY3Rpb25zIGZvciBwb2luMm9jdCwgb2N0MnBvaW50IGFuZCBjb21wcmVzc2VkIGNvb3JkaW5hdGVzICovCisjZGVmaW5lIEVDX0ZMQUdTX0RFRkFVTFRfT0NUCTB4MQorCiAvKiBTdHJ1Y3R1cmUgZGV0YWlscyBhcmUgbm90IHBhcnQgb2YgdGhlIGV4cG9ydGVkIGludGVyZmFjZSwKICAqIHNvIGFsbCB0aGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zLiAqLwogCiBzdHJ1Y3QgZWNfbWV0aG9kX3N0IHsKKwkvKiBWYXJpb3VzIG1ldGhvZCBmbGFncyAqLworCWludCBmbGFnczsKIAkvKiB1c2VkIGJ5IEVDX01FVEhPRF9nZXRfZmllbGRfdHlwZTogKi8KIAlpbnQgZmllbGRfdHlwZTsgLyogYSBOSUQgKi8KIApAQCAtMjQ0LDYgKzI0OSw3IEBACiAJcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgY29udl9mb3JtOwogCiAJaW50IAlyZWZlcmVuY2VzOworCWludAlmbGFnczsKIAogCUVDX0VYVFJBX0RBVEEgKm1ldGhvZF9kYXRhOwogfSAvKiBFQ19LRVkgKi87CkBAIC0zOTEsMyArMzk3LDUwIEBACiAJc2l6ZV90IG51bSwgY29uc3QgRUNfUE9JTlQgKnBvaW50c1tdLCBjb25zdCBCSUdOVU0gKnNjYWxhcnNbXSwgQk5fQ1RYICopOwogaW50IGVjX0dGMm1fcHJlY29tcHV0ZV9tdWx0KEVDX0dST1VQICpncm91cCwgQk5fQ1RYICpjdHgpOwogaW50IGVjX0dGMm1faGF2ZV9wcmVjb21wdXRlX211bHQoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKworLyogbWV0aG9kIGZ1bmN0aW9ucyBpbiBlYzJfbXVsdC5jICovCitpbnQgZWNfR0YybV9zaW1wbGVfbXVsKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEJJR05VTSAqc2NhbGFyLAorCXNpemVfdCBudW0sIGNvbnN0IEVDX1BPSU5UICpwb2ludHNbXSwgY29uc3QgQklHTlVNICpzY2FsYXJzW10sIEJOX0NUWCAqKTsKK2ludCBlY19HRjJtX3ByZWNvbXB1dGVfbXVsdChFQ19HUk9VUCAqZ3JvdXAsIEJOX0NUWCAqY3R4KTsKK2ludCBlY19HRjJtX2hhdmVfcHJlY29tcHV0ZV9tdWx0KGNvbnN0IEVDX0dST1VQICpncm91cCk7CisKKyNpZm5kZWYgT1BFTlNTTF9FQ19OSVNUUF82NF9HQ0NfMTI4CisvKiBtZXRob2QgZnVuY3Rpb25zIGluIGVjcF9uaXN0cDIyNC5jICovCitpbnQgZWNfR0ZwX25pc3RwMjI0X2dyb3VwX2luaXQoRUNfR1JPVVAgKmdyb3VwKTsKK2ludCBlY19HRnBfbmlzdHAyMjRfZ3JvdXBfc2V0X2N1cnZlKEVDX0dST1VQICpncm91cCwgY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqbiwgQk5fQ1RYICopOworaW50IGVjX0dGcF9uaXN0cDIyNF9wb2ludF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzKGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnBvaW50LCBCSUdOVU0gKngsIEJJR05VTSAqeSwgQk5fQ1RYICpjdHgpOworaW50IGVjX0dGcF9uaXN0cDIyNF9tdWwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICpzY2FsYXIsIHNpemVfdCBudW0sIGNvbnN0IEVDX1BPSU5UICpwb2ludHNbXSwgY29uc3QgQklHTlVNICpzY2FsYXJzW10sIEJOX0NUWCAqKTsKK2ludCBlY19HRnBfbmlzdHAyMjRfcG9pbnRzX211bChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpyLCBjb25zdCBCSUdOVU0gKnNjYWxhciwgc2l6ZV90IG51bSwgY29uc3QgRUNfUE9JTlQgKnBvaW50c1tdLCBjb25zdCBCSUdOVU0gKnNjYWxhcnNbXSwgQk5fQ1RYICpjdHgpOworaW50IGVjX0dGcF9uaXN0cDIyNF9wcmVjb21wdXRlX211bHQoRUNfR1JPVVAgKmdyb3VwLCBCTl9DVFggKmN0eCk7CitpbnQgZWNfR0ZwX25pc3RwMjI0X2hhdmVfcHJlY29tcHV0ZV9tdWx0KGNvbnN0IEVDX0dST1VQICpncm91cCk7CisKKy8qIG1ldGhvZCBmdW5jdGlvbnMgaW4gZWNwX25pc3RwMjU2LmMgKi8KK2ludCBlY19HRnBfbmlzdHAyNTZfZ3JvdXBfaW5pdChFQ19HUk9VUCAqZ3JvdXApOworaW50IGVjX0dGcF9uaXN0cDI1Nl9ncm91cF9zZXRfY3VydmUoRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBCSUdOVU0gKnAsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpuLCBCTl9DVFggKik7CitpbnQgZWNfR0ZwX25pc3RwMjU2X3BvaW50X2dldF9hZmZpbmVfY29vcmRpbmF0ZXMoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqcG9pbnQsIEJJR05VTSAqeCwgQklHTlVNICp5LCBCTl9DVFggKmN0eCk7CitpbnQgZWNfR0ZwX25pc3RwMjU2X211bChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpyLCBjb25zdCBCSUdOVU0gKnNjYWxhciwgc2l6ZV90IG51bSwgY29uc3QgRUNfUE9JTlQgKnBvaW50c1tdLCBjb25zdCBCSUdOVU0gKnNjYWxhcnNbXSwgQk5fQ1RYICopOworaW50IGVjX0dGcF9uaXN0cDI1Nl9wb2ludHNfbXVsKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEJJR05VTSAqc2NhbGFyLCBzaXplX3QgbnVtLCBjb25zdCBFQ19QT0lOVCAqcG9pbnRzW10sIGNvbnN0IEJJR05VTSAqc2NhbGFyc1tdLCBCTl9DVFggKmN0eCk7CitpbnQgZWNfR0ZwX25pc3RwMjU2X3ByZWNvbXB1dGVfbXVsdChFQ19HUk9VUCAqZ3JvdXAsIEJOX0NUWCAqY3R4KTsKK2ludCBlY19HRnBfbmlzdHAyNTZfaGF2ZV9wcmVjb21wdXRlX211bHQoY29uc3QgRUNfR1JPVVAgKmdyb3VwKTsKKworLyogbWV0aG9kIGZ1bmN0aW9ucyBpbiBlY3BfbmlzdHA1MjEuYyAqLworaW50IGVjX0dGcF9uaXN0cDUyMV9ncm91cF9pbml0KEVDX0dST1VQICpncm91cCk7CitpbnQgZWNfR0ZwX25pc3RwNTIxX2dyb3VwX3NldF9jdXJ2ZShFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKm4sIEJOX0NUWCAqKTsKK2ludCBlY19HRnBfbmlzdHA1MjFfcG9pbnRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KTsKK2ludCBlY19HRnBfbmlzdHA1MjFfbXVsKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEJJR05VTSAqc2NhbGFyLCBzaXplX3QgbnVtLCBjb25zdCBFQ19QT0lOVCAqcG9pbnRzW10sIGNvbnN0IEJJR05VTSAqc2NhbGFyc1tdLCBCTl9DVFggKik7CitpbnQgZWNfR0ZwX25pc3RwNTIxX3BvaW50c19tdWwoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgQklHTlVNICpzY2FsYXIsIHNpemVfdCBudW0sIGNvbnN0IEVDX1BPSU5UICpwb2ludHNbXSwgY29uc3QgQklHTlVNICpzY2FsYXJzW10sIEJOX0NUWCAqY3R4KTsKK2ludCBlY19HRnBfbmlzdHA1MjFfcHJlY29tcHV0ZV9tdWx0KEVDX0dST1VQICpncm91cCwgQk5fQ1RYICpjdHgpOworaW50IGVjX0dGcF9uaXN0cDUyMV9oYXZlX3ByZWNvbXB1dGVfbXVsdChjb25zdCBFQ19HUk9VUCAqZ3JvdXApOworCisvKiB1dGlsaXR5IGZ1bmN0aW9ucyBpbiBlY3BfbmlzdHB1dGlsLmMgKi8KK3ZvaWQgZWNfR0ZwX25pc3RwX3BvaW50c19tYWtlX2FmZmluZV9pbnRlcm5hbChzaXplX3QgbnVtLCB2b2lkICpwb2ludF9hcnJheSwKKwlzaXplX3QgZmVsZW1fc2l6ZSwgdm9pZCAqdG1wX2ZlbGVtcywKKwl2b2lkICgqZmVsZW1fb25lKSh2b2lkICpvdXQpLAorCWludCAoKmZlbGVtX2lzX3plcm8pKGNvbnN0IHZvaWQgKmluKSwKKwl2b2lkICgqZmVsZW1fYXNzaWduKSh2b2lkICpvdXQsIGNvbnN0IHZvaWQgKmluKSwKKwl2b2lkICgqZmVsZW1fc3F1YXJlKSh2b2lkICpvdXQsIGNvbnN0IHZvaWQgKmluKSwKKwl2b2lkICgqZmVsZW1fbXVsKSh2b2lkICpvdXQsIGNvbnN0IHZvaWQgKmluMSwgY29uc3Qgdm9pZCAqaW4yKSwKKwl2b2lkICgqZmVsZW1faW52KSh2b2lkICpvdXQsIGNvbnN0IHZvaWQgKmluKSwKKwl2b2lkICgqZmVsZW1fY29udHJhY3QpKHZvaWQgKm91dCwgY29uc3Qgdm9pZCAqaW4pKTsKK3ZvaWQgZWNfR0ZwX25pc3RwX3JlY29kZV9zY2FsYXJfYml0cyh1bnNpZ25lZCBjaGFyICpzaWduLCB1bnNpZ25lZCBjaGFyICpkaWdpdCwgdW5zaWduZWQgY2hhciBpbik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19saWIuYyBiL2NyeXB0by9lYy9lY19saWIuYwppbmRleCBkZDdkYTBmLi4yNTI0N2I1IDEwMDY0NAotLS0gYS9jcnlwdG8vZWMvZWNfbGliLmMKKysrIGIvY3J5cHRvL2VjL2VjX2xpYi5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAlyZXR1cm4gZ3JvdXAtPm1ldGgtPmdyb3VwX2dldF9jdXJ2ZShncm91cCwgcCwgYSwgYiwgY3R4KTsKIAl9CiAKLQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIGludCBFQ19HUk9VUF9zZXRfY3VydmVfR0YybShFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqY3R4KQogCXsKIAlpZiAoZ3JvdXAtPm1ldGgtPmdyb3VwX3NldF9jdXJ2ZSA9PSAwKQpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAJCX0KIAlyZXR1cm4gZ3JvdXAtPm1ldGgtPmdyb3VwX2dldF9jdXJ2ZShncm91cCwgcCwgYSwgYiwgY3R4KTsKIAl9Ci0KKyNlbmRpZgogCiBpbnQgRUNfR1JPVVBfZ2V0X2RlZ3JlZShjb25zdCBFQ19HUk9VUCAqZ3JvdXApCiAJewpAQCAtODU2LDcgKzg1Niw3IEBACiAJcmV0dXJuIGdyb3VwLT5tZXRoLT5wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KTsKIAl9CiAKLQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIGludCBFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCiAJY29uc3QgQklHTlVNICp4LCBjb25zdCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KQogCXsKQEAgLTg3Miw3ICs4NzIsNyBAQAogCQl9CiAJcmV0dXJuIGdyb3VwLT5tZXRoLT5wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KTsKIAl9Ci0KKyNlbmRpZgogCiBpbnQgRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqcG9pbnQsCiAJQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KQpAQCAtODkwLDcgKzg5MCw3IEBACiAJcmV0dXJuIGdyb3VwLT5tZXRoLT5wb2ludF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KTsKIAl9CiAKLQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIGludCBFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqcG9pbnQsCiAJQklHTlVNICp4LCBCSUdOVU0gKnksIEJOX0NUWCAqY3R4KQogCXsKQEAgLTkwNiw3NSArOTA2LDcgQEAKIAkJfQogCXJldHVybiBncm91cC0+bWV0aC0+cG9pbnRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyhncm91cCwgcG9pbnQsIHgsIHksIGN0eCk7CiAJfQotCi0KLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCi0JY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KQotCXsKLQlpZiAoZ3JvdXAtPm1ldGgtPnBvaW50X3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzID09IDApCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19QT0lOVF9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFU19HRlAsIEVSUl9SX1NIT1VMRF9OT1RfSEFWRV9CRUVOX0NBTExFRCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JaWYgKGdyb3VwLT5tZXRoICE9IHBvaW50LT5tZXRoKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfUE9JTlRfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVNfR0ZQLCBFQ19SX0lOQ09NUEFUSUJMRV9PQkpFQ1RTKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlyZXR1cm4gZ3JvdXAtPm1ldGgtPnBvaW50X3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeV9iaXQsIGN0eCk7Ci0JfQotCi0KLWludCBFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRjJtKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAotCWNvbnN0IEJJR05VTSAqeCwgaW50IHlfYml0LCBCTl9DVFggKmN0eCkKLQl7Ci0JaWYgKGdyb3VwLT5tZXRoLT5wb2ludF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyA9PSAwKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfUE9JTlRfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVNfR0YyTSwgRVJSX1JfU0hPVUxEX05PVF9IQVZFX0JFRU5fQ0FMTEVEKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlpZiAoZ3JvdXAtPm1ldGggIT0gcG9pbnQtPm1ldGgpCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19QT0lOVF9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFU19HRjJNLCBFQ19SX0lOQ09NUEFUSUJMRV9PQkpFQ1RTKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlyZXR1cm4gZ3JvdXAtPm1ldGgtPnBvaW50X3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeV9iaXQsIGN0eCk7Ci0JfQotCi0KLXNpemVfdCBFQ19QT0lOVF9wb2ludDJvY3QoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBjb25zdCBFQ19QT0lOVCAqcG9pbnQsIHBvaW50X2NvbnZlcnNpb25fZm9ybV90IGZvcm0sCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpCi0JewotCWlmIChncm91cC0+bWV0aC0+cG9pbnQyb2N0ID09IDApCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19QT0lOVF9QT0lOVDJPQ1QsIEVSUl9SX1NIT1VMRF9OT1RfSEFWRV9CRUVOX0NBTExFRCk7Ci0JCXJldHVybiAwOwotCQl9Ci0JaWYgKGdyb3VwLT5tZXRoICE9IHBvaW50LT5tZXRoKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfUE9JTlRfUE9JTlQyT0NULCBFQ19SX0lOQ09NUEFUSUJMRV9PQkpFQ1RTKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlyZXR1cm4gZ3JvdXAtPm1ldGgtPnBvaW50Mm9jdChncm91cCwgcG9pbnQsIGZvcm0sIGJ1ZiwgbGVuLCBjdHgpOwotCX0KLQotCi1pbnQgRUNfUE9JTlRfb2N0MnBvaW50KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQotCXsKLQlpZiAoZ3JvdXAtPm1ldGgtPm9jdDJwb2ludCA9PSAwKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfUE9JTlRfT0NUMlBPSU5ULCBFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQpOwotCQlyZXR1cm4gMDsKLQkJfQotCWlmIChncm91cC0+bWV0aCAhPSBwb2ludC0+bWV0aCkKLQkJewotCQlFQ2VycihFQ19GX0VDX1BPSU5UX09DVDJQT0lOVCwgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUyk7Ci0JCXJldHVybiAwOwotCQl9Ci0JcmV0dXJuIGdyb3VwLT5tZXRoLT5vY3QycG9pbnQoZ3JvdXAsIHBvaW50LCBidWYsIGxlbiwgY3R4KTsKLQl9Ci0KKyNlbmRpZgogCiBpbnQgRUNfUE9JTlRfYWRkKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnIsIGNvbnN0IEVDX1BPSU5UICphLCBjb25zdCBFQ19QT0lOVCAqYiwgQk5fQ1RYICpjdHgpCiAJewpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2VjX29jdC5jIGIvY3J5cHRvL2VjL2VjX29jdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWRiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vZWMvZWNfb2N0LmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qIGNyeXB0by9lYy9lY19saWIuYyAqLworLyoKKyAqIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBCb2RvIE1vZWxsZXIgZm9yIHRoZSBPcGVuU1NMIHByb2plY3QuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KKyAqIEJpbmFyeSBwb2x5bm9taWFsIEVDQyBzdXBwb3J0IGluIE9wZW5TU0wgb3JpZ2luYWxseSBkZXZlbG9wZWQgYnkgCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKworI2luY2x1ZGUgImVjX2xjbC5oIgorCitpbnQgRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0ZwKGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAorCWNvbnN0IEJJR05VTSAqeCwgaW50IHlfYml0LCBCTl9DVFggKmN0eCkKKwl7CisJaWYgKGdyb3VwLT5tZXRoLT5wb2ludF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyA9PSAwCisJCSYmICEoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfUE9JTlRfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVNfR0ZQLCBFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQpOworCQlyZXR1cm4gMDsKKwkJfQorCWlmIChncm91cC0+bWV0aCAhPSBwb2ludC0+bWV0aCkKKwkJeworCQlFQ2VycihFQ19GX0VDX1BPSU5UX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTX0dGUCwgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUyk7CisJCXJldHVybiAwOworCQl9CisJaWYoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpCisJCXsKKwkJaWYgKGdyb3VwLT5tZXRoLT5maWVsZF90eXBlID09IE5JRF9YOV82Ml9wcmltZV9maWVsZCkKKwkJCXJldHVybiBlY19HRnBfc2ltcGxlX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKAorCQkJCQlncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpOworCQllbHNlCisjaWZkZWYgT1BFTlNTTF9OT19FQzJNCisJCQl7CisJCQlFQ2VycihFQ19GX0VDX1BPSU5UX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTX0dGUCwgRUNfUl9HRjJNX05PVF9TVVBQT1JURUQpOworCQkJcmV0dXJuIDA7CisJCQl9CisjZWxzZQorCQkJcmV0dXJuIGVjX0dGMm1fc2ltcGxlX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKAorCQkJCQlncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpOworI2VuZGlmCisJCX0KKwlyZXR1cm4gZ3JvdXAtPm1ldGgtPnBvaW50X3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKGdyb3VwLCBwb2ludCwgeCwgeV9iaXQsIGN0eCk7CisJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQoraW50IEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCisJY29uc3QgQklHTlVNICp4LCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KQorCXsKKwlpZiAoZ3JvdXAtPm1ldGgtPnBvaW50X3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzID09IDAKKwkJJiYgIShncm91cC0+bWV0aC0+ZmxhZ3MgJiBFQ19GTEFHU19ERUZBVUxUX09DVCkpCisJCXsKKwkJRUNlcnIoRUNfRl9FQ19QT0lOVF9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFU19HRjJNLCBFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQpOworCQlyZXR1cm4gMDsKKwkJfQorCWlmIChncm91cC0+bWV0aCAhPSBwb2ludC0+bWV0aCkKKwkJeworCQlFQ2VycihFQ19GX0VDX1BPSU5UX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTX0dGMk0sIEVDX1JfSU5DT01QQVRJQkxFX09CSkVDVFMpOworCQlyZXR1cm4gMDsKKwkJfQorCWlmKGdyb3VwLT5tZXRoLT5mbGFncyAmIEVDX0ZMQUdTX0RFRkFVTFRfT0NUKQorCQl7CisJCWlmIChncm91cC0+bWV0aC0+ZmllbGRfdHlwZSA9PSBOSURfWDlfNjJfcHJpbWVfZmllbGQpCisJCQlyZXR1cm4gZWNfR0ZwX3NpbXBsZV9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcygKKwkJCQkJZ3JvdXAsIHBvaW50LCB4LCB5X2JpdCwgY3R4KTsKKwkJZWxzZQorCQkJcmV0dXJuIGVjX0dGMm1fc2ltcGxlX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzKAorCQkJCQlncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpOworCQl9CisJcmV0dXJuIGdyb3VwLT5tZXRoLT5wb2ludF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyhncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpOworCX0KKyNlbmRpZgorCitzaXplX3QgRUNfUE9JTlRfcG9pbnQyb2N0KGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnBvaW50LCBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBmb3JtLAorICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQorCXsKKwlpZiAoZ3JvdXAtPm1ldGgtPnBvaW50Mm9jdCA9PSAwCisJCSYmICEoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfUE9JTlRfUE9JTlQyT0NULCBFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQpOworCQlyZXR1cm4gMDsKKwkJfQorCWlmIChncm91cC0+bWV0aCAhPSBwb2ludC0+bWV0aCkKKwkJeworCQlFQ2VycihFQ19GX0VDX1BPSU5UX1BPSU5UMk9DVCwgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUyk7CisJCXJldHVybiAwOworCQl9CisJaWYoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpCisJCXsKKwkJaWYgKGdyb3VwLT5tZXRoLT5maWVsZF90eXBlID09IE5JRF9YOV82Ml9wcmltZV9maWVsZCkKKwkJCXJldHVybiBlY19HRnBfc2ltcGxlX3BvaW50Mm9jdChncm91cCwgcG9pbnQsCisJCQkJCQkJZm9ybSwgYnVmLCBsZW4sIGN0eCk7CisJCWVsc2UKKyNpZmRlZiBPUEVOU1NMX05PX0VDMk0KKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfUE9JTlRfUE9JTlQyT0NULCBFQ19SX0dGMk1fTk9UX1NVUFBPUlRFRCk7CisJCQlyZXR1cm4gMDsKKwkJCX0KKyNlbHNlCisJCQlyZXR1cm4gZWNfR0YybV9zaW1wbGVfcG9pbnQyb2N0KGdyb3VwLCBwb2ludCwKKwkJCQkJCQlmb3JtLCBidWYsIGxlbiwgY3R4KTsKKyNlbmRpZgorCQl9CisJCQkKKwlyZXR1cm4gZ3JvdXAtPm1ldGgtPnBvaW50Mm9jdChncm91cCwgcG9pbnQsIGZvcm0sIGJ1ZiwgbGVuLCBjdHgpOworCX0KKworCitpbnQgRUNfUE9JTlRfb2N0MnBvaW50KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQorCXsKKwlpZiAoZ3JvdXAtPm1ldGgtPm9jdDJwb2ludCA9PSAwCisJCSYmICEoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfUE9JTlRfT0NUMlBPSU5ULCBFUlJfUl9TSE9VTERfTk9UX0hBVkVfQkVFTl9DQUxMRUQpOworCQlyZXR1cm4gMDsKKwkJfQorCWlmIChncm91cC0+bWV0aCAhPSBwb2ludC0+bWV0aCkKKwkJeworCQlFQ2VycihFQ19GX0VDX1BPSU5UX09DVDJQT0lOVCwgRUNfUl9JTkNPTVBBVElCTEVfT0JKRUNUUyk7CisJCXJldHVybiAwOworCQl9CisJaWYoZ3JvdXAtPm1ldGgtPmZsYWdzICYgRUNfRkxBR1NfREVGQVVMVF9PQ1QpCisJCXsKKwkJaWYgKGdyb3VwLT5tZXRoLT5maWVsZF90eXBlID09IE5JRF9YOV82Ml9wcmltZV9maWVsZCkKKwkJCXJldHVybiBlY19HRnBfc2ltcGxlX29jdDJwb2ludChncm91cCwgcG9pbnQsCisJCQkJCQkJYnVmLCBsZW4sIGN0eCk7CisJCWVsc2UKKyNpZmRlZiBPUEVOU1NMX05PX0VDMk0KKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfUE9JTlRfT0NUMlBPSU5ULCBFQ19SX0dGMk1fTk9UX1NVUFBPUlRFRCk7CisJCQlyZXR1cm4gMDsKKwkJCX0KKyNlbHNlCisJCQlyZXR1cm4gZWNfR0YybV9zaW1wbGVfb2N0MnBvaW50KGdyb3VwLCBwb2ludCwKKwkJCQkJCQlidWYsIGxlbiwgY3R4KTsKKyNlbmRpZgorCQl9CisJcmV0dXJuIGdyb3VwLT5tZXRoLT5vY3QycG9pbnQoZ3JvdXAsIHBvaW50LCBidWYsIGxlbiwgY3R4KTsKKwl9CisKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY19wbWV0aC5jIGIvY3J5cHRvL2VjL2VjX3BtZXRoLmMKaW5kZXggZjQzMzA3Ni4uZDFlZDY2YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjX3BtZXRoLmMKKysrIGIvY3J5cHRvL2VjL2VjX3BtZXRoLmMKQEAgLTIyMSw2ICsyMjEsNyBAQAogCiAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9NRDoKIAkJaWYgKEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX3NoYTEgJiYKKwkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX2VjZHNhX3dpdGhfU0hBMSAmJgogCQkgICAgRVZQX01EX3R5cGUoKGNvbnN0IEVWUF9NRCAqKXAyKSAhPSBOSURfc2hhMjI0ICYmCiAJCSAgICBFVlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyNTYgJiYKIAkJICAgIEVWUF9NRF90eXBlKChjb25zdCBFVlBfTUQgKilwMikgIT0gTklEX3NoYTM4NCAmJgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjL2Vja19wcm4uYyBiL2NyeXB0by9lYy9lY2tfcHJuLmMKaW5kZXggN2QzZTE3NS4uMDZkZThmMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2Vja19wcm4uYworKysgYi9jcnlwdG8vZWMvZWNrX3Bybi5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAkJCXJlYXNvbiA9IEVSUl9SX01BTExPQ19GQUlMVVJFOwogCQkJZ290byBlcnI7CiAJCQl9Ci0KKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiAJCWlmIChpc19jaGFyX3R3bykKIAkJCXsKIAkJCWlmICghRUNfR1JPVVBfZ2V0X2N1cnZlX0dGMm0oeCwgcCwgYSwgYiwgY3R4KSkKQEAgLTIxNyw2ICsyMTcsNyBAQAogCQkJCX0KIAkJCX0KIAkJZWxzZSAvKiBwcmltZSBmaWVsZCAqLworI2VuZGlmCiAJCQl7CiAJCQlpZiAoIUVDX0dST1VQX2dldF9jdXJ2ZV9HRnAoeCwgcCwgYSwgYiwgY3R4KSkKIAkJCQl7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWNwX21vbnQuYyBiL2NyeXB0by9lYy9lY3BfbW9udC5jCmluZGV4IDlmYzRhNDYuLjA3OWU0NzQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lYy9lY3BfbW9udC5jCisrKyBiL2NyeXB0by9lYy9lY3BfbW9udC5jCkBAIC02MywxMiArNjMsMjAgQEAKIAogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiZWNfbGNsLmgiCiAKIAogY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfbW9udF9tZXRob2Qodm9pZCkKIAl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJcmV0dXJuIGZpcHNfZWNfZ2ZwX21vbnRfbWV0aG9kKCk7CisjZWxzZQogCXN0YXRpYyBjb25zdCBFQ19NRVRIT0QgcmV0ID0geworCQlFQ19GTEFHU19ERUZBVUxUX09DVCwKIAkJTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAogCQllY19HRnBfbW9udF9ncm91cF9pbml0LAogCQllY19HRnBfbW9udF9ncm91cF9maW5pc2gsCkBAIC04Nyw5ICs5NSw3IEBACiAJCWVjX0dGcF9zaW1wbGVfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcCwKIAkJZWNfR0ZwX3NpbXBsZV9wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzLAogCQllY19HRnBfc2ltcGxlX3BvaW50X2dldF9hZmZpbmVfY29vcmRpbmF0ZXMsCi0JCWVjX0dGcF9zaW1wbGVfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMsCi0JCWVjX0dGcF9zaW1wbGVfcG9pbnQyb2N0LAotCQllY19HRnBfc2ltcGxlX29jdDJwb2ludCwKKwkJMCwwLDAsCiAJCWVjX0dGcF9zaW1wbGVfYWRkLAogCQllY19HRnBfc2ltcGxlX2RibCwKIAkJZWNfR0ZwX3NpbXBsZV9pbnZlcnQsCkBAIC0xMDgsNyArMTE0LDkgQEAKIAkJZWNfR0ZwX21vbnRfZmllbGRfZGVjb2RlLAogCQllY19HRnBfbW9udF9maWVsZF9zZXRfdG9fb25lIH07CiAKKwogCXJldHVybiAmcmV0OworI2VuZGlmCiAJfQogCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY3BfbmlzdC5jIGIvY3J5cHRvL2VjL2VjcF9uaXN0LmMKaW5kZXggMmE1NjgyZS4uYWFkMmQ1ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjcF9uaXN0LmMKKysrIGIvY3J5cHRvL2VjL2VjcF9uaXN0LmMKQEAgLTY3LDkgKzY3LDE3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9vYmpfbWFjLmg+CiAjaW5jbHVkZSAiZWNfbGNsLmgiCiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgorCiBjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9uaXN0X21ldGhvZCh2b2lkKQogCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlyZXR1cm4gZmlwc19lY19nZnBfbmlzdF9tZXRob2QoKTsKKyNlbHNlCiAJc3RhdGljIGNvbnN0IEVDX01FVEhPRCByZXQgPSB7CisJCUVDX0ZMQUdTX0RFRkFVTFRfT0NULAogCQlOSURfWDlfNjJfcHJpbWVfZmllbGQsCiAJCWVjX0dGcF9zaW1wbGVfZ3JvdXBfaW5pdCwKIAkJZWNfR0ZwX3NpbXBsZV9ncm91cF9maW5pc2gsCkBAIC04OCw5ICs5Niw3IEBACiAJCWVjX0dGcF9zaW1wbGVfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcCwKIAkJZWNfR0ZwX3NpbXBsZV9wb2ludF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzLAogCQllY19HRnBfc2ltcGxlX3BvaW50X2dldF9hZmZpbmVfY29vcmRpbmF0ZXMsCi0JCWVjX0dGcF9zaW1wbGVfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMsCi0JCWVjX0dGcF9zaW1wbGVfcG9pbnQyb2N0LAotCQllY19HRnBfc2ltcGxlX29jdDJwb2ludCwKKwkJMCwwLDAsCiAJCWVjX0dGcF9zaW1wbGVfYWRkLAogCQllY19HRnBfc2ltcGxlX2RibCwKIAkJZWNfR0ZwX3NpbXBsZV9pbnZlcnQsCkBAIC0xMTAsNiArMTE2LDcgQEAKIAkJMCAvKiBmaWVsZF9zZXRfdG9fb25lICovIH07CiAKIAlyZXR1cm4gJnJldDsKKyNlbmRpZgogCX0KIAogaW50IGVjX0dGcF9uaXN0X2dyb3VwX2NvcHkoRUNfR1JPVVAgKmRlc3QsIGNvbnN0IEVDX0dST1VQICpzcmMpCmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWNwX29jdC5jIGIvY3J5cHRvL2VjL2VjcF9vY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRhMGVlCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2VjL2VjcF9vY3QuYwpAQCAtMCwwICsxLDQzMyBAQAorLyogY3J5cHRvL2VjL2VjcF9vY3QuYyAqLworLyogSW5jbHVkZXMgY29kZSB3cml0dGVuIGJ5IExlbmthIEZpYmlrb3ZhIDxmaWJpa292YUBleHAtbWF0aC51bmktZXNzZW4uZGU+CisgKiBmb3IgdGhlIE9wZW5TU0wgcHJvamVjdC4gCisgKiBJbmNsdWRlcyBjb2RlIHdyaXR0ZW4gYnkgQm9kbyBNb2VsbGVyIGZvciB0aGUgT3BlblNTTCBwcm9qZWN0LgorKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRC4KKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFNVTiBNSUNST1NZU1RFTVMsIElOQy4sCisgKiBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdC4KKyAqLworCisjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3N5bWhhY2tzLmg+CisKKyNpbmNsdWRlICJlY19sY2wuaCIKKworaW50IGVjX0dGcF9zaW1wbGVfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXMoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCisJY29uc3QgQklHTlVNICp4XywgaW50IHlfYml0LCBCTl9DVFggKmN0eCkKKwl7CisJQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKKwlCSUdOVU0gKnRtcDEsICp0bXAyLCAqeCwgKnk7CisJaW50IHJldCA9IDA7CisKKwkvKiBjbGVhciBlcnJvciBxdWV1ZSovCisJRVJSX2NsZWFyX2Vycm9yKCk7CisKKwlpZiAoY3R4ID09IE5VTEwpCisJCXsKKwkJY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKKwkJaWYgKGN0eCA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisJCX0KKworCXlfYml0ID0gKHlfYml0ICE9IDApOworCisJQk5fQ1RYX3N0YXJ0KGN0eCk7CisJdG1wMSA9IEJOX0NUWF9nZXQoY3R4KTsKKwl0bXAyID0gQk5fQ1RYX2dldChjdHgpOworCXggPSBCTl9DVFhfZ2V0KGN0eCk7CisJeSA9IEJOX0NUWF9nZXQoY3R4KTsKKwlpZiAoeSA9PSBOVUxMKSBnb3RvIGVycjsKKworCS8qIFJlY292ZXIgeS4gIFdlIGhhdmUgYSBXZWllcnN0cmFzcyBlcXVhdGlvbgorCSAqICAgICB5XjIgPSB4XjMgKyBhKnggKyBiLAorCSAqIHNvICB5ICBpcyBvbmUgb2YgdGhlIHNxdWFyZSByb290cyBvZiAgeF4zICsgYSp4ICsgYi4KKwkgKi8KKworCS8qIHRtcDEgOj0geF4zICovCisJaWYgKCFCTl9ubm1vZCh4LCB4XywgJmdyb3VwLT5maWVsZCxjdHgpKSBnb3RvIGVycjsKKwlpZiAoZ3JvdXAtPm1ldGgtPmZpZWxkX2RlY29kZSA9PSAwKQorCQl7CisJCS8qIGZpZWxkX3tzcXIsbXVsfSB3b3JrIG9uIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uICovCisJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX3Nxcihncm91cCwgdG1wMiwgeF8sIGN0eCkpIGdvdG8gZXJyOworCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9tdWwoZ3JvdXAsIHRtcDEsIHRtcDIsIHhfLCBjdHgpKSBnb3RvIGVycjsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoIUJOX21vZF9zcXIodG1wMiwgeF8sICZncm91cC0+ZmllbGQsIGN0eCkpIGdvdG8gZXJyOworCQlpZiAoIUJOX21vZF9tdWwodG1wMSwgdG1wMiwgeF8sICZncm91cC0+ZmllbGQsIGN0eCkpIGdvdG8gZXJyOworCQl9CisJCisJLyogdG1wMSA6PSB0bXAxICsgYSp4ICovCisJaWYgKGdyb3VwLT5hX2lzX21pbnVzMykKKwkJeworCQlpZiAoIUJOX21vZF9sc2hpZnQxX3F1aWNrKHRtcDIsIHgsICZncm91cC0+ZmllbGQpKSBnb3RvIGVycjsKKwkJaWYgKCFCTl9tb2RfYWRkX3F1aWNrKHRtcDIsIHRtcDIsIHgsICZncm91cC0+ZmllbGQpKSBnb3RvIGVycjsKKwkJaWYgKCFCTl9tb2Rfc3ViX3F1aWNrKHRtcDEsIHRtcDEsIHRtcDIsICZncm91cC0+ZmllbGQpKSBnb3RvIGVycjsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoZ3JvdXAtPm1ldGgtPmZpZWxkX2RlY29kZSkKKwkJCXsKKwkJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2RlY29kZShncm91cCwgdG1wMiwgJmdyb3VwLT5hLCBjdHgpKSBnb3RvIGVycjsKKwkJCWlmICghQk5fbW9kX211bCh0bXAyLCB0bXAyLCB4LCAmZ3JvdXAtPmZpZWxkLCBjdHgpKSBnb3RvIGVycjsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJLyogZmllbGRfbXVsIHdvcmtzIG9uIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uICovCisJCQlpZiAoIWdyb3VwLT5tZXRoLT5maWVsZF9tdWwoZ3JvdXAsIHRtcDIsICZncm91cC0+YSwgeCwgY3R4KSkgZ290byBlcnI7CisJCQl9CisJCQorCQlpZiAoIUJOX21vZF9hZGRfcXVpY2sodG1wMSwgdG1wMSwgdG1wMiwgJmdyb3VwLT5maWVsZCkpIGdvdG8gZXJyOworCQl9CisJCisJLyogdG1wMSA6PSB0bXAxICsgYiAqLworCWlmIChncm91cC0+bWV0aC0+ZmllbGRfZGVjb2RlKQorCQl7CisJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX2RlY29kZShncm91cCwgdG1wMiwgJmdyb3VwLT5iLCBjdHgpKSBnb3RvIGVycjsKKwkJaWYgKCFCTl9tb2RfYWRkX3F1aWNrKHRtcDEsIHRtcDEsIHRtcDIsICZncm91cC0+ZmllbGQpKSBnb3RvIGVycjsKKwkJfQorCWVsc2UKKwkJeworCQlpZiAoIUJOX21vZF9hZGRfcXVpY2sodG1wMSwgdG1wMSwgJmdyb3VwLT5iLCAmZ3JvdXAtPmZpZWxkKSkgZ290byBlcnI7CisJCX0KKwkKKwlpZiAoIUJOX21vZF9zcXJ0KHksIHRtcDEsICZncm91cC0+ZmllbGQsIGN0eCkpCisJCXsKKwkJdW5zaWduZWQgbG9uZyBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisJCQorCQlpZiAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0JOICYmIEVSUl9HRVRfUkVBU09OKGVycikgPT0gQk5fUl9OT1RfQV9TUVVBUkUpCisJCQl7CisJCQlFUlJfY2xlYXJfZXJyb3IoKTsKKwkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQpOworCQkJfQorCQllbHNlCisJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVSUl9SX0JOX0xJQik7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoeV9iaXQgIT0gQk5faXNfb2RkKHkpKQorCQl7CisJCWlmIChCTl9pc196ZXJvKHkpKQorCQkJeworCQkJaW50IGtyb247CisKKwkJCWtyb24gPSBCTl9rcm9uZWNrZXIoeCwgJmdyb3VwLT5maWVsZCwgY3R4KTsKKwkJCWlmIChrcm9uID09IC0yKSBnb3RvIGVycjsKKworCQkJaWYgKGtyb24gPT0gMSkKKwkJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVDX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9CSVQpOworCQkJZWxzZQorCQkJCS8qIEJOX21vZF9zcXJ0KCkgc2hvdWxkIGhhdmUgY291Z2h0IHRoaXMgZXJyb3IgKG5vdCBhIHNxdWFyZSkgKi8KKwkJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVDX1JfSU5WQUxJRF9DT01QUkVTU0VEX1BPSU5UKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlpZiAoIUJOX3VzdWIoeSwgJmdyb3VwLT5maWVsZCwgeSkpIGdvdG8gZXJyOworCQl9CisJaWYgKHlfYml0ICE9IEJOX2lzX29kZCh5KSkKKwkJeworCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfU0VUX0NPTVBSRVNTRURfQ09PUkRJTkFURVMsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmICghRUNfUE9JTlRfc2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKKworCXJldCA9IDE7CisKKyBlcnI6CisJQk5fQ1RYX2VuZChjdHgpOworCWlmIChuZXdfY3R4ICE9IE5VTEwpCisJCUJOX0NUWF9mcmVlKG5ld19jdHgpOworCXJldHVybiByZXQ7CisJfQorCisKK3NpemVfdCBlY19HRnBfc2ltcGxlX3BvaW50Mm9jdChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIGNvbnN0IEVDX1BPSU5UICpwb2ludCwgcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybSwKKwl1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4sIEJOX0NUWCAqY3R4KQorCXsKKwlzaXplX3QgcmV0OworCUJOX0NUWCAqbmV3X2N0eCA9IE5VTEw7CisJaW50IHVzZWRfY3R4ID0gMDsKKwlCSUdOVU0gKngsICp5OworCXNpemVfdCBmaWVsZF9sZW4sIGksIHNraXA7CisKKwlpZiAoKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEKQorCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkKKwkJJiYgKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9QT0lOVDJPQ1QsIEVDX1JfSU5WQUxJRF9GT1JNKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmIChFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgcG9pbnQpKQorCQl7CisJCS8qIGVuY29kZXMgdG8gYSBzaW5nbGUgMCBvY3RldCAqLworCQlpZiAoYnVmICE9IE5VTEwpCisJCQl7CisJCQlpZiAobGVuIDwgMSkKKwkJCQl7CisJCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRUNfUl9CVUZGRVJfVE9PX1NNQUxMKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlidWZbMF0gPSAwOworCQkJfQorCQlyZXR1cm4gMTsKKwkJfQorCisKKwkvKiByZXQgOj0gcmVxdWlyZWQgb3V0cHV0IGJ1ZmZlciBsZW5ndGggKi8KKwlmaWVsZF9sZW4gPSBCTl9udW1fYnl0ZXMoJmdyb3VwLT5maWVsZCk7CisJcmV0ID0gKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEKSA/IDEgKyBmaWVsZF9sZW4gOiAxICsgMipmaWVsZF9sZW47CisKKwkvKiBpZiAnYnVmJyBpcyBOVUxMLCBqdXN0IHJldHVybiByZXF1aXJlZCBsZW5ndGggKi8KKwlpZiAoYnVmICE9IE5VTEwpCisJCXsKKwkJaWYgKGxlbiA8IHJldCkKKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9QT0lOVDJPQ1QsIEVDX1JfQlVGRkVSX1RPT19TTUFMTCk7CisJCQlnb3RvIGVycjsKKwkJCX0KKworCQlpZiAoY3R4ID09IE5VTEwpCisJCQl7CisJCQljdHggPSBuZXdfY3R4ID0gQk5fQ1RYX25ldygpOworCQkJaWYgKGN0eCA9PSBOVUxMKQorCQkJCXJldHVybiAwOworCQkJfQorCisJCUJOX0NUWF9zdGFydChjdHgpOworCQl1c2VkX2N0eCA9IDE7CisJCXggPSBCTl9DVFhfZ2V0KGN0eCk7CisJCXkgPSBCTl9DVFhfZ2V0KGN0eCk7CisJCWlmICh5ID09IE5VTEwpIGdvdG8gZXJyOworCisJCWlmICghRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIHBvaW50LCB4LCB5LCBjdHgpKSBnb3RvIGVycjsKKworCQlpZiAoKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIHx8IGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpICYmIEJOX2lzX29kZCh5KSkKKwkJCWJ1ZlswXSA9IGZvcm0gKyAxOworCQllbHNlCisJCQlidWZbMF0gPSBmb3JtOworCQorCQlpID0gMTsKKwkJCisJCXNraXAgPSBmaWVsZF9sZW4gLSBCTl9udW1fYnl0ZXMoeCk7CisJCWlmIChza2lwID4gZmllbGRfbGVuKQorCQkJeworCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJZ290byBlcnI7CisJCQl9CisJCXdoaWxlIChza2lwID4gMCkKKwkJCXsKKwkJCWJ1ZltpKytdID0gMDsKKwkJCXNraXAtLTsKKwkJCX0KKwkJc2tpcCA9IEJOX2JuMmJpbih4LCBidWYgKyBpKTsKKwkJaSArPSBza2lwOworCQlpZiAoaSAhPSAxICsgZmllbGRfbGVuKQorCQkJeworCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJZ290byBlcnI7CisJCQl9CisKKwkJaWYgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQgfHwgZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkKKwkJCXsKKwkJCXNraXAgPSBmaWVsZF9sZW4gLSBCTl9udW1fYnl0ZXMoeSk7CisJCQlpZiAoc2tpcCA+IGZpZWxkX2xlbikKKwkJCQl7CisJCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCXdoaWxlIChza2lwID4gMCkKKwkJCQl7CisJCQkJYnVmW2krK10gPSAwOworCQkJCXNraXAtLTsKKwkJCQl9CisJCQlza2lwID0gQk5fYm4yYmluKHksIGJ1ZiArIGkpOworCQkJaSArPSBza2lwOworCQkJfQorCisJCWlmIChpICE9IHJldCkKKwkJCXsKKwkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9QT0lOVDJPQ1QsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJCisJaWYgKHVzZWRfY3R4KQorCQlCTl9DVFhfZW5kKGN0eCk7CisJaWYgKG5ld19jdHggIT0gTlVMTCkKKwkJQk5fQ1RYX2ZyZWUobmV3X2N0eCk7CisJcmV0dXJuIHJldDsKKworIGVycjoKKwlpZiAodXNlZF9jdHgpCisJCUJOX0NUWF9lbmQoY3R4KTsKKwlpZiAobmV3X2N0eCAhPSBOVUxMKQorCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKKwlyZXR1cm4gMDsKKwl9CisKKworaW50IGVjX0dGcF9zaW1wbGVfb2N0MnBvaW50KGNvbnN0IEVDX0dST1VQICpncm91cCwgRUNfUE9JTlQgKnBvaW50LAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpCisJeworCXBvaW50X2NvbnZlcnNpb25fZm9ybV90IGZvcm07CisJaW50IHlfYml0OworCUJOX0NUWCAqbmV3X2N0eCA9IE5VTEw7CisJQklHTlVNICp4LCAqeTsKKwlzaXplX3QgZmllbGRfbGVuLCBlbmNfbGVuOworCWludCByZXQgPSAwOworCisJaWYgKGxlbiA9PSAwKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfQlVGRkVSX1RPT19TTUFMTCk7CisJCXJldHVybiAwOworCQl9CisJZm9ybSA9IGJ1ZlswXTsKKwl5X2JpdCA9IGZvcm0gJiAxOworCWZvcm0gPSBmb3JtICYgfjFVOworCWlmICgoZm9ybSAhPSAwKQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpCisJCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKQorCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkpCisJCXsKKwkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKKwkJcmV0dXJuIDA7CisJCX0KKwlpZiAoKGZvcm0gPT0gMCB8fCBmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKSAmJiB5X2JpdCkKKwkJeworCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKGZvcm0gPT0gMCkKKwkJeworCQlpZiAobGVuICE9IDEpCisJCQl7CisJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOworCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJcmV0dXJuIEVDX1BPSU5UX3NldF90b19pbmZpbml0eShncm91cCwgcG9pbnQpOworCQl9CisJCisJZmllbGRfbGVuID0gQk5fbnVtX2J5dGVzKCZncm91cC0+ZmllbGQpOworCWVuY19sZW4gPSAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpID8gMSArIGZpZWxkX2xlbiA6IDEgKyAyKmZpZWxkX2xlbjsKKworCWlmIChsZW4gIT0gZW5jX2xlbikKKwkJeworCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOworCQlyZXR1cm4gMDsKKwkJfQorCisJaWYgKGN0eCA9PSBOVUxMKQorCQl7CisJCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7CisJCWlmIChjdHggPT0gTlVMTCkKKwkJCXJldHVybiAwOworCQl9CisKKwlCTl9DVFhfc3RhcnQoY3R4KTsKKwl4ID0gQk5fQ1RYX2dldChjdHgpOworCXkgPSBCTl9DVFhfZ2V0KGN0eCk7CisJaWYgKHkgPT0gTlVMTCkgZ290byBlcnI7CisKKwlpZiAoIUJOX2JpbjJibihidWYgKyAxLCBmaWVsZF9sZW4sIHgpKSBnb3RvIGVycjsKKwlpZiAoQk5fdWNtcCh4LCAmZ3JvdXAtPmZpZWxkKSA+PSAwKQorCQl7CisJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7CisJCWdvdG8gZXJyOworCQl9CisKKwlpZiAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpCisJCXsKKwkJaWYgKCFFQ19QT0lOVF9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlc19HRnAoZ3JvdXAsIHBvaW50LCB4LCB5X2JpdCwgY3R4KSkgZ290byBlcnI7CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKCFCTl9iaW4yYm4oYnVmICsgMSArIGZpZWxkX2xlbiwgZmllbGRfbGVuLCB5KSkgZ290byBlcnI7CisJCWlmIChCTl91Y21wKHksICZncm91cC0+ZmllbGQpID49IDApCisJCQl7CisJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOworCQkJZ290byBlcnI7CisJCQl9CisJCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fSFlCUklEKQorCQkJeworCQkJaWYgKHlfYml0ICE9IEJOX2lzX29kZCh5KSkKKwkJCQl7CisJCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQl9CisKKwkJaWYgKCFFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgcG9pbnQsIHgsIHksIGN0eCkpIGdvdG8gZXJyOworCQl9CisJCisJaWYgKCFFQ19QT0lOVF9pc19vbl9jdXJ2ZShncm91cCwgcG9pbnQsIGN0eCkpIC8qIHRlc3QgcmVxdWlyZWQgYnkgWDkuNjIgKi8KKwkJeworCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX1BPSU5UX0lTX05PVF9PTl9DVVJWRSk7CisJCWdvdG8gZXJyOworCQl9CisKKwlyZXQgPSAxOworCQorIGVycjoKKwlCTl9DVFhfZW5kKGN0eCk7CisJaWYgKG5ld19jdHggIT0gTlVMTCkKKwkJQk5fQ1RYX2ZyZWUobmV3X2N0eCk7CisJcmV0dXJuIHJldDsKKwl9CisKZGlmZiAtLWdpdCBhL2NyeXB0by9lYy9lY3Bfc21wbC5jIGIvY3J5cHRvL2VjL2VjcF9zbXBsLmMKaW5kZXggNjZhOTJlMi4uN2NiYjMyMSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjcF9zbXBsLmMKKysrIGIvY3J5cHRvL2VjL2VjcF9zbXBsLmMKQEAgLTY1LDExICs2NSwxOSBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9zeW1oYWNrcy5oPgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImVjX2xjbC5oIgogCiBjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9zaW1wbGVfbWV0aG9kKHZvaWQpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCXJldHVybiBmaXBzX2VjX2dmcF9zaW1wbGVfbWV0aG9kKCk7CisjZWxzZQogCXN0YXRpYyBjb25zdCBFQ19NRVRIT0QgcmV0ID0geworCQlFQ19GTEFHU19ERUZBVUxUX09DVCwKIAkJTklEX1g5XzYyX3ByaW1lX2ZpZWxkLAogCQllY19HRnBfc2ltcGxlX2dyb3VwX2luaXQsCiAJCWVjX0dGcF9zaW1wbGVfZ3JvdXBfZmluaXNoLApAQCAtODgsOSArOTYsNyBAQAogCQllY19HRnBfc2ltcGxlX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAsCiAJCWVjX0dGcF9zaW1wbGVfcG9pbnRfc2V0X2FmZmluZV9jb29yZGluYXRlcywKIAkJZWNfR0ZwX3NpbXBsZV9wb2ludF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzLAotCQllY19HRnBfc2ltcGxlX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzLAotCQllY19HRnBfc2ltcGxlX3BvaW50Mm9jdCwKLQkJZWNfR0ZwX3NpbXBsZV9vY3QycG9pbnQsCisJCTAsMCwwLAogCQllY19HRnBfc2ltcGxlX2FkZCwKIAkJZWNfR0ZwX3NpbXBsZV9kYmwsCiAJCWVjX0dGcF9zaW1wbGVfaW52ZXJ0LApAQCAtMTEwLDYgKzExNiw3IEBACiAJCTAgLyogZmllbGRfc2V0X3RvX29uZSAqLyB9OwogCiAJcmV0dXJuICZyZXQ7CisjZW5kaWYKIAl9CiAKIApAQCAtNjMzLDM3MiArNjQwLDYgQEAKIAlyZXR1cm4gcmV0OwogCX0KIAotCi1pbnQgZWNfR0ZwX3NpbXBsZV9zZXRfY29tcHJlc3NlZF9jb29yZGluYXRlcyhjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwb2ludCwKLQljb25zdCBCSUdOVU0gKnhfLCBpbnQgeV9iaXQsIEJOX0NUWCAqY3R4KQotCXsKLQlCTl9DVFggKm5ld19jdHggPSBOVUxMOwotCUJJR05VTSAqdG1wMSwgKnRtcDIsICp4LCAqeTsKLQlpbnQgcmV0ID0gMDsKLQotCS8qIGNsZWFyIGVycm9yIHF1ZXVlKi8KLQlFUlJfY2xlYXJfZXJyb3IoKTsKLQotCWlmIChjdHggPT0gTlVMTCkKLQkJewotCQljdHggPSBuZXdfY3R4ID0gQk5fQ1RYX25ldygpOwotCQlpZiAoY3R4ID09IE5VTEwpCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JeV9iaXQgPSAoeV9iaXQgIT0gMCk7Ci0KLQlCTl9DVFhfc3RhcnQoY3R4KTsKLQl0bXAxID0gQk5fQ1RYX2dldChjdHgpOwotCXRtcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JeCA9IEJOX0NUWF9nZXQoY3R4KTsKLQl5ID0gQk5fQ1RYX2dldChjdHgpOwotCWlmICh5ID09IE5VTEwpIGdvdG8gZXJyOwotCi0JLyogUmVjb3ZlciB5LiAgV2UgaGF2ZSBhIFdlaWVyc3RyYXNzIGVxdWF0aW9uCi0JICogICAgIHleMiA9IHheMyArIGEqeCArIGIsCi0JICogc28gIHkgIGlzIG9uZSBvZiB0aGUgc3F1YXJlIHJvb3RzIG9mICB4XjMgKyBhKnggKyBiLgotCSAqLwotCi0JLyogdG1wMSA6PSB4XjMgKi8KLQlpZiAoIUJOX25ubW9kKHgsIHhfLCAmZ3JvdXAtPmZpZWxkLGN0eCkpIGdvdG8gZXJyOwotCWlmIChncm91cC0+bWV0aC0+ZmllbGRfZGVjb2RlID09IDApCi0JCXsKLQkJLyogZmllbGRfe3NxcixtdWx9IHdvcmsgb24gc3RhbmRhcmQgcmVwcmVzZW50YXRpb24gKi8KLQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfc3FyKGdyb3VwLCB0bXAyLCB4XywgY3R4KSkgZ290byBlcnI7Ci0JCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX211bChncm91cCwgdG1wMSwgdG1wMiwgeF8sIGN0eCkpIGdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7Ci0JCWlmICghQk5fbW9kX3Nxcih0bXAyLCB4XywgJmdyb3VwLT5maWVsZCwgY3R4KSkgZ290byBlcnI7Ci0JCWlmICghQk5fbW9kX211bCh0bXAxLCB0bXAyLCB4XywgJmdyb3VwLT5maWVsZCwgY3R4KSkgZ290byBlcnI7Ci0JCX0KLQkKLQkvKiB0bXAxIDo9IHRtcDEgKyBhKnggKi8KLQlpZiAoZ3JvdXAtPmFfaXNfbWludXMzKQotCQl7Ci0JCWlmICghQk5fbW9kX2xzaGlmdDFfcXVpY2sodG1wMiwgeCwgJmdyb3VwLT5maWVsZCkpIGdvdG8gZXJyOwotCQlpZiAoIUJOX21vZF9hZGRfcXVpY2sodG1wMiwgdG1wMiwgeCwgJmdyb3VwLT5maWVsZCkpIGdvdG8gZXJyOwotCQlpZiAoIUJOX21vZF9zdWJfcXVpY2sodG1wMSwgdG1wMSwgdG1wMiwgJmdyb3VwLT5maWVsZCkpIGdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7Ci0JCWlmIChncm91cC0+bWV0aC0+ZmllbGRfZGVjb2RlKQotCQkJewotCQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfZGVjb2RlKGdyb3VwLCB0bXAyLCAmZ3JvdXAtPmEsIGN0eCkpIGdvdG8gZXJyOwotCQkJaWYgKCFCTl9tb2RfbXVsKHRtcDIsIHRtcDIsIHgsICZncm91cC0+ZmllbGQsIGN0eCkpIGdvdG8gZXJyOwotCQkJfQotCQllbHNlCi0JCQl7Ci0JCQkvKiBmaWVsZF9tdWwgd29ya3Mgb24gc3RhbmRhcmQgcmVwcmVzZW50YXRpb24gKi8KLQkJCWlmICghZ3JvdXAtPm1ldGgtPmZpZWxkX211bChncm91cCwgdG1wMiwgJmdyb3VwLT5hLCB4LCBjdHgpKSBnb3RvIGVycjsKLQkJCX0KLQkJCi0JCWlmICghQk5fbW9kX2FkZF9xdWljayh0bXAxLCB0bXAxLCB0bXAyLCAmZ3JvdXAtPmZpZWxkKSkgZ290byBlcnI7Ci0JCX0KLQkKLQkvKiB0bXAxIDo9IHRtcDEgKyBiICovCi0JaWYgKGdyb3VwLT5tZXRoLT5maWVsZF9kZWNvZGUpCi0JCXsKLQkJaWYgKCFncm91cC0+bWV0aC0+ZmllbGRfZGVjb2RlKGdyb3VwLCB0bXAyLCAmZ3JvdXAtPmIsIGN0eCkpIGdvdG8gZXJyOwotCQlpZiAoIUJOX21vZF9hZGRfcXVpY2sodG1wMSwgdG1wMSwgdG1wMiwgJmdyb3VwLT5maWVsZCkpIGdvdG8gZXJyOwotCQl9Ci0JZWxzZQotCQl7Ci0JCWlmICghQk5fbW9kX2FkZF9xdWljayh0bXAxLCB0bXAxLCAmZ3JvdXAtPmIsICZncm91cC0+ZmllbGQpKSBnb3RvIGVycjsKLQkJfQotCQotCWlmICghQk5fbW9kX3NxcnQoeSwgdG1wMSwgJmdyb3VwLT5maWVsZCwgY3R4KSkKLQkJewotCQl1bnNpZ25lZCBsb25nIGVyciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKLQkJCi0JCWlmIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfQk4gJiYgRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBCTl9SX05PVF9BX1NRVUFSRSkKLQkJCXsKLQkJCUVSUl9jbGVhcl9lcnJvcigpOwotCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1NFVF9DT01QUkVTU0VEX0NPT1JESU5BVEVTLCBFQ19SX0lOVkFMSURfQ09NUFJFU1NFRF9QT0lOVCk7Ci0JCQl9Ci0JCWVsc2UKLQkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRVJSX1JfQk5fTElCKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmICh5X2JpdCAhPSBCTl9pc19vZGQoeSkpCi0JCXsKLQkJaWYgKEJOX2lzX3plcm8oeSkpCi0JCQl7Ci0JCQlpbnQga3JvbjsKLQotCQkJa3JvbiA9IEJOX2tyb25lY2tlcih4LCAmZ3JvdXAtPmZpZWxkLCBjdHgpOwotCQkJaWYgKGtyb24gPT0gLTIpIGdvdG8gZXJyOwotCi0JCQlpZiAoa3JvbiA9PSAxKQotCQkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRUNfUl9JTlZBTElEX0NPTVBSRVNTSU9OX0JJVCk7Ci0JCQllbHNlCi0JCQkJLyogQk5fbW9kX3NxcnQoKSBzaG91bGQgaGF2ZSBjb3VnaHQgdGhpcyBlcnJvciAobm90IGEgc3F1YXJlKSAqLwotCQkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRUNfUl9JTlZBTElEX0NPTVBSRVNTRURfUE9JTlQpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCWlmICghQk5fdXN1Yih5LCAmZ3JvdXAtPmZpZWxkLCB5KSkgZ290byBlcnI7Ci0JCX0KLQlpZiAoeV9iaXQgIT0gQk5faXNfb2RkKHkpKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9TRVRfQ09NUFJFU1NFRF9DT09SRElOQVRFUywgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKCFFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgcG9pbnQsIHgsIHksIGN0eCkpIGdvdG8gZXJyOwotCi0JcmV0ID0gMTsKLQotIGVycjoKLQlCTl9DVFhfZW5kKGN0eCk7Ci0JaWYgKG5ld19jdHggIT0gTlVMTCkKLQkJQk5fQ1RYX2ZyZWUobmV3X2N0eCk7Ci0JcmV0dXJuIHJldDsKLQl9Ci0KLQotc2l6ZV90IGVjX0dGcF9zaW1wbGVfcG9pbnQyb2N0KGNvbnN0IEVDX0dST1VQICpncm91cCwgY29uc3QgRUNfUE9JTlQgKnBvaW50LCBwb2ludF9jb252ZXJzaW9uX2Zvcm1fdCBmb3JtLAotCXVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgQk5fQ1RYICpjdHgpCi0JewotCXNpemVfdCByZXQ7Ci0JQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKLQlpbnQgdXNlZF9jdHggPSAwOwotCUJJR05VTSAqeCwgKnk7Ci0Jc2l6ZV90IGZpZWxkX2xlbiwgaSwgc2tpcDsKLQotCWlmICgoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpCi0JCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEKQotCQkmJiAoZm9ybSAhPSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkpCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRUNfUl9JTlZBTElEX0ZPUk0pOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKEVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBwb2ludCkpCi0JCXsKLQkJLyogZW5jb2RlcyB0byBhIHNpbmdsZSAwIG9jdGV0ICovCi0JCWlmIChidWYgIT0gTlVMTCkKLQkJCXsKLQkJCWlmIChsZW4gPCAxKQotCQkJCXsKLQkJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfUE9JTlQyT0NULCBFQ19SX0JVRkZFUl9UT09fU01BTEwpOwotCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCWJ1ZlswXSA9IDA7Ci0JCQl9Ci0JCXJldHVybiAxOwotCQl9Ci0KLQotCS8qIHJldCA6PSByZXF1aXJlZCBvdXRwdXQgYnVmZmVyIGxlbmd0aCAqLwotCWZpZWxkX2xlbiA9IEJOX251bV9ieXRlcygmZ3JvdXAtPmZpZWxkKTsKLQlyZXQgPSAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQpID8gMSArIGZpZWxkX2xlbiA6IDEgKyAyKmZpZWxkX2xlbjsKLQotCS8qIGlmICdidWYnIGlzIE5VTEwsIGp1c3QgcmV0dXJuIHJlcXVpcmVkIGxlbmd0aCAqLwotCWlmIChidWYgIT0gTlVMTCkKLQkJewotCQlpZiAobGVuIDwgcmV0KQotCQkJewotCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRUNfUl9CVUZGRVJfVE9PX1NNQUxMKTsKLQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCWlmIChjdHggPT0gTlVMTCkKLQkJCXsKLQkJCWN0eCA9IG5ld19jdHggPSBCTl9DVFhfbmV3KCk7Ci0JCQlpZiAoY3R4ID09IE5VTEwpCi0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0KLQkJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0JCXVzZWRfY3R4ID0gMTsKLQkJeCA9IEJOX0NUWF9nZXQoY3R4KTsKLQkJeSA9IEJOX0NUWF9nZXQoY3R4KTsKLQkJaWYgKHkgPT0gTlVMTCkgZ290byBlcnI7Ci0KLQkJaWYgKCFFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgcG9pbnQsIHgsIHksIGN0eCkpIGdvdG8gZXJyOwotCi0JCWlmICgoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQgfHwgZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCkgJiYgQk5faXNfb2RkKHkpKQotCQkJYnVmWzBdID0gZm9ybSArIDE7Ci0JCWVsc2UKLQkJCWJ1ZlswXSA9IGZvcm07Ci0JCi0JCWkgPSAxOwotCQkKLQkJc2tpcCA9IGZpZWxkX2xlbiAtIEJOX251bV9ieXRlcyh4KTsKLQkJaWYgKHNraXAgPiBmaWVsZF9sZW4pCi0JCQl7Ci0JCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfUE9JTlQyT0NULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJd2hpbGUgKHNraXAgPiAwKQotCQkJewotCQkJYnVmW2krK10gPSAwOwotCQkJc2tpcC0tOwotCQkJfQotCQlza2lwID0gQk5fYm4yYmluKHgsIGJ1ZiArIGkpOwotCQlpICs9IHNraXA7Ci0JCWlmIChpICE9IDEgKyBmaWVsZF9sZW4pCi0JCQl7Ci0JCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfUE9JTlQyT0NULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQotCQlpZiAoZm9ybSA9PSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCB8fCBmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fSFlCUklEKQotCQkJewotCQkJc2tpcCA9IGZpZWxkX2xlbiAtIEJOX251bV9ieXRlcyh5KTsKLQkJCWlmIChza2lwID4gZmllbGRfbGVuKQotCQkJCXsKLQkJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfUE9JTlQyT0NULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0JCQkJZ290byBlcnI7Ci0JCQkJfQotCQkJd2hpbGUgKHNraXAgPiAwKQotCQkJCXsKLQkJCQlidWZbaSsrXSA9IDA7Ci0JCQkJc2tpcC0tOwotCQkJCX0KLQkJCXNraXAgPSBCTl9ibjJiaW4oeSwgYnVmICsgaSk7Ci0JCQlpICs9IHNraXA7Ci0JCQl9Ci0KLQkJaWYgKGkgIT0gcmV0KQotCQkJewotCQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX1BPSU5UMk9DVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCQl9Ci0JCX0KLQkKLQlpZiAodXNlZF9jdHgpCi0JCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAobmV3X2N0eCAhPSBOVUxMKQotCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKLQlyZXR1cm4gcmV0OwotCi0gZXJyOgotCWlmICh1c2VkX2N0eCkKLQkJQk5fQ1RYX2VuZChjdHgpOwotCWlmIChuZXdfY3R4ICE9IE5VTEwpCi0JCUJOX0NUWF9mcmVlKG5ld19jdHgpOwotCXJldHVybiAwOwotCX0KLQotCi1pbnQgZWNfR0ZwX3NpbXBsZV9vY3QycG9pbnQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqcG9pbnQsCi0JY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBCTl9DVFggKmN0eCkKLQl7Ci0JcG9pbnRfY29udmVyc2lvbl9mb3JtX3QgZm9ybTsKLQlpbnQgeV9iaXQ7Ci0JQk5fQ1RYICpuZXdfY3R4ID0gTlVMTDsKLQlCSUdOVU0gKngsICp5OwotCXNpemVfdCBmaWVsZF9sZW4sIGVuY19sZW47Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAobGVuID09IDApCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX09DVDJQT0lOVCwgRUNfUl9CVUZGRVJfVE9PX1NNQUxMKTsKLQkJcmV0dXJuIDA7Ci0JCX0KLQlmb3JtID0gYnVmWzBdOwotCXlfYml0ID0gZm9ybSAmIDE7Ci0JZm9ybSA9IGZvcm0gJiB+MVU7Ci0JaWYgKChmb3JtICE9IDApCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKLQkJJiYgKGZvcm0gIT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQpCi0JCSYmIChmb3JtICE9IFBPSU5UX0NPTlZFUlNJT05fSFlCUklEKSkKLQkJewotCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOwotCQlyZXR1cm4gMDsKLQkJfQotCWlmICgoZm9ybSA9PSAwIHx8IGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQpICYmIHlfYml0KQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7Ci0JCXJldHVybiAwOwotCQl9Ci0KLQlpZiAoZm9ybSA9PSAwKQotCQl7Ci0JCWlmIChsZW4gIT0gMSkKLQkJCXsKLQkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KLQotCQlyZXR1cm4gRUNfUE9JTlRfc2V0X3RvX2luZmluaXR5KGdyb3VwLCBwb2ludCk7Ci0JCX0KLQkKLQlmaWVsZF9sZW4gPSBCTl9udW1fYnl0ZXMoJmdyb3VwLT5maWVsZCk7Ci0JZW5jX2xlbiA9IChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkgPyAxICsgZmllbGRfbGVuIDogMSArIDIqZmllbGRfbGVuOwotCi0JaWYgKGxlbiAhPSBlbmNfbGVuKQotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7Ci0JCXJldHVybiAwOwotCQl9Ci0KLQlpZiAoY3R4ID09IE5VTEwpCi0JCXsKLQkJY3R4ID0gbmV3X2N0eCA9IEJOX0NUWF9uZXcoKTsKLQkJaWYgKGN0eCA9PSBOVUxMKQotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCUJOX0NUWF9zdGFydChjdHgpOwotCXggPSBCTl9DVFhfZ2V0KGN0eCk7Ci0JeSA9IEJOX0NUWF9nZXQoY3R4KTsKLQlpZiAoeSA9PSBOVUxMKSBnb3RvIGVycjsKLQotCWlmICghQk5fYmluMmJuKGJ1ZiArIDEsIGZpZWxkX2xlbiwgeCkpIGdvdG8gZXJyOwotCWlmIChCTl91Y21wKHgsICZncm91cC0+ZmllbGQpID49IDApCi0JCXsKLQkJRUNlcnIoRUNfRl9FQ19HRlBfU0lNUExFX09DVDJQT0lOVCwgRUNfUl9JTlZBTElEX0VOQ09ESU5HKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCWlmIChmb3JtID09IFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCkKLQkJewotCQlpZiAoIUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcChncm91cCwgcG9pbnQsIHgsIHlfYml0LCBjdHgpKSBnb3RvIGVycjsKLQkJfQotCWVsc2UKLQkJewotCQlpZiAoIUJOX2JpbjJibihidWYgKyAxICsgZmllbGRfbGVuLCBmaWVsZF9sZW4sIHkpKSBnb3RvIGVycjsKLQkJaWYgKEJOX3VjbXAoeSwgJmdyb3VwLT5maWVsZCkgPj0gMCkKLQkJCXsKLQkJCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfSU5WQUxJRF9FTkNPRElORyk7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJaWYgKGZvcm0gPT0gUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQpCi0JCQl7Ci0JCQlpZiAoeV9iaXQgIT0gQk5faXNfb2RkKHkpKQotCQkJCXsKLQkJCQlFQ2VycihFQ19GX0VDX0dGUF9TSU1QTEVfT0NUMlBPSU5ULCBFQ19SX0lOVkFMSURfRU5DT0RJTkcpOwotCQkJCWdvdG8gZXJyOwotCQkJCX0KLQkJCX0KLQotCQlpZiAoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCBwb2ludCwgeCwgeSwgY3R4KSkgZ290byBlcnI7Ci0JCX0KLQkKLQlpZiAoIUVDX1BPSU5UX2lzX29uX2N1cnZlKGdyb3VwLCBwb2ludCwgY3R4KSkgLyogdGVzdCByZXF1aXJlZCBieSBYOS42MiAqLwotCQl7Ci0JCUVDZXJyKEVDX0ZfRUNfR0ZQX1NJTVBMRV9PQ1QyUE9JTlQsIEVDX1JfUE9JTlRfSVNfTk9UX09OX0NVUlZFKTsKLQkJZ290byBlcnI7Ci0JCX0KLQotCXJldCA9IDE7Ci0JCi0gZXJyOgotCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAobmV3X2N0eCAhPSBOVUxMKQotCQlCTl9DVFhfZnJlZShuZXdfY3R4KTsKLQlyZXR1cm4gcmV0OwotCX0KLQotCiBpbnQgZWNfR0ZwX3NpbXBsZV9hZGQoY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBFQ19QT0lOVCAqciwgY29uc3QgRUNfUE9JTlQgKmEsIGNvbnN0IEVDX1BPSU5UICpiLCBCTl9DVFggKmN0eCkKIAl7CiAJaW50ICgqZmllbGRfbXVsKShjb25zdCBFQ19HUk9VUCAqLCBCSUdOVU0gKiwgY29uc3QgQklHTlVNICosIGNvbnN0IEJJR05VTSAqLCBCTl9DVFggKik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWMvZWN0ZXN0LmMgYi9jcnlwdG8vZWMvZWN0ZXN0LmMKaW5kZXggNzUwOWNiOS4uZjEwNzc4MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjL2VjdGVzdC5jCisrKyBiL2NyeXB0by9lYy9lY3Rlc3QuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKF9NSVBTXykgJiYgKF9NU0NfVkVSLzEwMD09MTIpCiAvKiBzdXBwcmVzcyAidG9vIGJpZyB0b28gb3B0aW1pemUiIHdhcm5pbmcgKi8KQEAgLTEwNywxMCArMTA4LDYgQEAKIAlFWElUKDEpOyBcCiB9IHdoaWxlICgwKQogCi12b2lkIHByaW1lX2ZpZWxkX3Rlc3RzKHZvaWQpOwotdm9pZCBjaGFyMl9maWVsZF90ZXN0cyh2b2lkKTsKLXZvaWQgaW50ZXJuYWxfY3VydmVfdGVzdCh2b2lkKTsKLQogI2RlZmluZSBUSU1JTkdfQkFTRV9QVCAwCiAjZGVmaW5lIFRJTUlOR19SQU5EX1BUIDEKICNkZWZpbmUgVElNSU5HX1NJTVVMIDIKQEAgLTE5NSw3ICsxOTIsNTAgQEAKIAl9CiAjZW5kaWYKIAotdm9pZCBwcmltZV9maWVsZF90ZXN0cygpCisvKiB0ZXN0IG11bHRpcGxpY2F0aW9uIHdpdGggZ3JvdXAgb3JkZXIsIGxvbmcgYW5kIG5lZ2F0aXZlIHNjYWxhcnMgKi8KK3N0YXRpYyB2b2lkIGdyb3VwX29yZGVyX3Rlc3RzKEVDX0dST1VQICpncm91cCkKKwl7CisJQklHTlVNICpuMSwgKm4yLCAqb3JkZXI7CisJRUNfUE9JTlQgKlAgPSBFQ19QT0lOVF9uZXcoZ3JvdXApOworCUVDX1BPSU5UICpRID0gRUNfUE9JTlRfbmV3KGdyb3VwKTsKKwlCTl9DVFggKmN0eCA9IEJOX0NUWF9uZXcoKTsKKworCW4xID0gQk5fbmV3KCk7IG4yID0gQk5fbmV3KCk7IG9yZGVyID0gQk5fbmV3KCk7CisJZnByaW50ZihzdGRvdXQsICJ2ZXJpZnkgZ3JvdXAgb3JkZXIgLi4uIik7CisJZmZsdXNoKHN0ZG91dCk7CisJaWYgKCFFQ19HUk9VUF9nZXRfb3JkZXIoZ3JvdXAsIG9yZGVyLCBjdHgpKSBBQk9SVDsKKwlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgb3JkZXIsIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOworCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKKwlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7CisJaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIG9yZGVyLCBOVUxMLCBOVUxMLCBjdHgpKSBBQk9SVDsKKwlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7CisJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOworCWZwcmludGYoc3Rkb3V0LCAibG9uZy9uZWdhdGl2ZSBzY2FsYXIgdGVzdHMgLi4uICIpOworCWlmICghQk5fb25lKG4xKSkgQUJPUlQ7CisJLyogbjEgPSAxIC0gb3JkZXIgKi8KKwlpZiAoIUJOX3N1YihuMSwgbjEsIG9yZGVyKSkgQUJPUlQ7CisJaWYoIUVDX1BPSU5UX211bChncm91cCwgUSwgTlVMTCwgUCwgbjEsIGN0eCkpIEFCT1JUOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChncm91cCwgUSwgUCwgY3R4KSkgQUJPUlQ7CisJLyogbjIgPSAxICsgb3JkZXIgKi8KKwlpZiAoIUJOX2FkZChuMiwgb3JkZXIsIEJOX3ZhbHVlX29uZSgpKSkgQUJPUlQ7CisJaWYoIUVDX1BPSU5UX211bChncm91cCwgUSwgTlVMTCwgUCwgbjIsIGN0eCkpIEFCT1JUOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChncm91cCwgUSwgUCwgY3R4KSkgQUJPUlQ7CisJLyogbjIgPSAoMSAtIG9yZGVyKSAqICgxICsgb3JkZXIpICovCisJaWYgKCFCTl9tdWwobjIsIG4xLCBuMiwgY3R4KSkgQUJPUlQ7CisJaWYoIUVDX1BPSU5UX211bChncm91cCwgUSwgTlVMTCwgUCwgbjIsIGN0eCkpIEFCT1JUOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChncm91cCwgUSwgUCwgY3R4KSkgQUJPUlQ7CisJZnByaW50ZihzdGRvdXQsICJva1xuIik7CisJRUNfUE9JTlRfZnJlZShQKTsKKwlFQ19QT0lOVF9mcmVlKFEpOworCUJOX2ZyZWUobjEpOworCUJOX2ZyZWUobjIpOworCUJOX2ZyZWUob3JkZXIpOworCUJOX0NUWF9mcmVlKGN0eCk7CisJfQorCitzdGF0aWMgdm9pZCBwcmltZV9maWVsZF90ZXN0cyh2b2lkKQogCXsJCiAJQk5fQ1RYICpjdHggPSBOVUxMOwogCUJJR05VTSAqcCwgKmEsICpiOwpAQCAtMzIxLDIxICszNjEsMjEgQEAKIAlpZiAobGVuID09IDApIEFCT1JUOwogCWlmICghRUNfUE9JTlRfb2N0MnBvaW50KGdyb3VwLCBQLCBidWYsIGxlbiwgY3R4KSkgQUJPUlQ7CiAJaWYgKDAgIT0gRUNfUE9JTlRfY21wKGdyb3VwLCBQLCBRLCBjdHgpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIkdlbmVyYXRvciBhcyBvY3RlY3Qgc3RyaW5nLCBjb21wcmVzc2VkIGZvcm06XG4gICAgICIpOworCWZwcmludGYoc3Rkb3V0LCAiR2VuZXJhdG9yIGFzIG9jdGV0IHN0cmluZywgY29tcHJlc3NlZCBmb3JtOlxuICAgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIGZwcmludGYoc3Rkb3V0LCAiJTAyWCIsIGJ1ZltpXSk7CiAJCiAJbGVuID0gRUNfUE9JTlRfcG9pbnQyb2N0KGdyb3VwLCBRLCBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCwgYnVmLCBzaXplb2YgYnVmLCBjdHgpOwogCWlmIChsZW4gPT0gMCkgQUJPUlQ7CiAJaWYgKCFFQ19QT0lOVF9vY3QycG9pbnQoZ3JvdXAsIFAsIGJ1ZiwgbGVuLCBjdHgpKSBBQk9SVDsKIAlpZiAoMCAhPSBFQ19QT0lOVF9jbXAoZ3JvdXAsIFAsIFEsIGN0eCkpIEFCT1JUOwotCWZwcmludGYoc3Rkb3V0LCAiXG5HZW5lcmF0b3IgYXMgb2N0ZWN0IHN0cmluZywgdW5jb21wcmVzc2VkIGZvcm06XG4gICAgICIpOworCWZwcmludGYoc3Rkb3V0LCAiXG5HZW5lcmF0b3IgYXMgb2N0ZXQgc3RyaW5nLCB1bmNvbXByZXNzZWQgZm9ybTpcbiAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSBmcHJpbnRmKHN0ZG91dCwgIiUwMlgiLCBidWZbaV0pOwogCQogCWxlbiA9IEVDX1BPSU5UX3BvaW50Mm9jdChncm91cCwgUSwgUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQsIGJ1Ziwgc2l6ZW9mIGJ1ZiwgY3R4KTsKIAlpZiAobGVuID09IDApIEFCT1JUOwogCWlmICghRUNfUE9JTlRfb2N0MnBvaW50KGdyb3VwLCBQLCBidWYsIGxlbiwgY3R4KSkgQUJPUlQ7CiAJaWYgKDAgIT0gRUNfUE9JTlRfY21wKGdyb3VwLCBQLCBRLCBjdHgpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIlxuR2VuZXJhdG9yIGFzIG9jdGVjdCBzdHJpbmcsIGh5YnJpZCBmb3JtOlxuICAgICAiKTsKKwlmcHJpbnRmKHN0ZG91dCwgIlxuR2VuZXJhdG9yIGFzIG9jdGV0IHN0cmluZywgaHlicmlkIGZvcm06XG4gICAgICIpOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgZnByaW50ZihzdGRvdXQsICIlMDJYIiwgYnVmW2ldKTsKIAkKIAlpZiAoIUVDX1BPSU5UX2dldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAoZ3JvdXAsIFIsIHgsIHksIHosIGN0eCkpIEFCT1JUOwpAQCAtMzgxLDE3ICs0MjEsNyBAQAogCWlmIChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSAhPSAxNjApIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKIAkKLQlmcHJpbnRmKHN0ZG91dCwgInZlcmlmeSBncm91cCBvcmRlciAuLi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgeiwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CisJZ3JvdXBfb3JkZXJfdGVzdHMoZ3JvdXApOwogCiAJaWYgKCEoUF8xNjAgPSBFQ19HUk9VUF9uZXcoRUNfR1JPVVBfbWV0aG9kX29mKGdyb3VwKSkpKSBBQk9SVDsKIAlpZiAoIUVDX0dST1VQX2NvcHkoUF8xNjAsIGdyb3VwKSkgQUJPUlQ7CkBAIC00MjUsMTcgKzQ1NSw3IEBACiAJaWYgKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICE9IDE5MikgQUJPUlQ7CiAJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOwogCQotCWZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGdyb3VwIG9yZGVyIC4uLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmICghRUNfR1JPVVBfZ2V0X29yZGVyKGdyb3VwLCB6LCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwotCWZwcmludGYoc3Rkb3V0LCAiLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmICghRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0KGdyb3VwLCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwotCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKKwlncm91cF9vcmRlcl90ZXN0cyhncm91cCk7CiAKIAlpZiAoIShQXzE5MiA9IEVDX0dST1VQX25ldyhFQ19HUk9VUF9tZXRob2Rfb2YoZ3JvdXApKSkpIEFCT1JUOwogCWlmICghRUNfR1JPVVBfY29weShQXzE5MiwgZ3JvdXApKSBBQk9SVDsKQEAgLTQ2OSwxNyArNDg5LDcgQEAKIAlpZiAoRUNfR1JPVVBfZ2V0X2RlZ3JlZShncm91cCkgIT0gMjI0KSBBQk9SVDsKIAlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CiAJCi0JZnByaW50ZihzdGRvdXQsICJ2ZXJpZnkgZ3JvdXAgb3JkZXIgLi4uIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JaWYgKCFFQ19HUk9VUF9nZXRfb3JkZXIoZ3JvdXAsIHosIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCB6LCBOVUxMLCBOVUxMLCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7Ci0JZnByaW50ZihzdGRvdXQsICIuIik7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfbXVsKGdyb3VwLCBRLCB6LCBOVUxMLCBOVUxMLCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7Ci0JZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOworCWdyb3VwX29yZGVyX3Rlc3RzKGdyb3VwKTsKIAogCWlmICghKFBfMjI0ID0gRUNfR1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKSkgQUJPUlQ7CiAJaWYgKCFFQ19HUk9VUF9jb3B5KFBfMjI0LCBncm91cCkpIEFCT1JUOwpAQCAtNTE0LDE3ICs1MjQsNyBAQAogCWlmIChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSAhPSAyNTYpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKIAkKLQlmcHJpbnRmKHN0ZG91dCwgInZlcmlmeSBncm91cCBvcmRlciAuLi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgeiwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CisJZ3JvdXBfb3JkZXJfdGVzdHMoZ3JvdXApOwogCiAJaWYgKCEoUF8yNTYgPSBFQ19HUk9VUF9uZXcoRUNfR1JPVVBfbWV0aG9kX29mKGdyb3VwKSkpKSBBQk9SVDsKIAlpZiAoIUVDX0dST1VQX2NvcHkoUF8yNTYsIGdyb3VwKSkgQUJPUlQ7CkBAIC01NjMsMTggKzU2Myw4IEBACiAJZnByaW50ZihzdGRvdXQsICJ2ZXJpZnkgZGVncmVlIC4uLiIpOwogCWlmIChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSAhPSAzODQpIEFCT1JUOwogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKLQkKLQlmcHJpbnRmKHN0ZG91dCwgInZlcmlmeSBncm91cCBvcmRlciAuLi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgeiwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIi4iKTsKLQlmZmx1c2goc3Rkb3V0KTsKLQlpZiAoIUVDX0dST1VQX3ByZWNvbXB1dGVfbXVsdChncm91cCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOwotCWlmICghRUNfUE9JTlRfaXNfYXRfaW5maW5pdHkoZ3JvdXAsIFEpKSBBQk9SVDsKLQlmcHJpbnRmKHN0ZG91dCwgIiBva1xuIik7CisKKwlncm91cF9vcmRlcl90ZXN0cyhncm91cCk7CiAKIAlpZiAoIShQXzM4NCA9IEVDX0dST1VQX25ldyhFQ19HUk9VUF9tZXRob2Rfb2YoZ3JvdXApKSkpIEFCT1JUOwogCWlmICghRUNfR1JPVVBfY29weShQXzM4NCwgZ3JvdXApKSBBQk9SVDsKQEAgLTYxOSwxOCArNjA5LDggQEAKIAlmcHJpbnRmKHN0ZG91dCwgInZlcmlmeSBkZWdyZWUgLi4uIik7CiAJaWYgKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICE9IDUyMSkgQUJPUlQ7CiAJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOwotCQotCWZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGdyb3VwIG9yZGVyIC4uLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmICghRUNfR1JPVVBfZ2V0X29yZGVyKGdyb3VwLCB6LCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwotCWZwcmludGYoc3Rkb3V0LCAiLiIpOwotCWZmbHVzaChzdGRvdXQpOwotCWlmICghRUNfR1JPVVBfcHJlY29tcHV0ZV9tdWx0KGdyb3VwLCBjdHgpKSBBQk9SVDsKLQlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7Ci0JaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOwotCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsKKworIAlncm91cF9vcmRlcl90ZXN0cyhncm91cCk7CiAKIAlpZiAoIShQXzUyMSA9IEVDX0dST1VQX25ldyhFQ19HUk9VUF9tZXRob2Rfb2YoZ3JvdXApKSkpIEFCT1JUOwogCWlmICghRUNfR1JPVVBfY29weShQXzUyMSwgZ3JvdXApKSBBQk9SVDsKQEAgLTY1OSw2ICs2MzksNyBAQAogCQlwb2ludHNbMl0gPSBROwogCQlwb2ludHNbM10gPSBROwogCisJCWlmICghRUNfR1JPVVBfZ2V0X29yZGVyKGdyb3VwLCB6LCBjdHgpKSBBQk9SVDsKIAkJaWYgKCFCTl9hZGQoeSwgeiwgQk5fdmFsdWVfb25lKCkpKSBBQk9SVDsKIAkJaWYgKEJOX2lzX29kZCh5KSkgQUJPUlQ7CiAJCWlmICghQk5fcnNoaWZ0MSh5LCB5KSkgQUJPUlQ7CkBAIC03OTIsMjIgKzc3MywxNCBAQAogCWZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGRlZ3JlZSAuLi4iKTsgXAogCWlmIChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSAhPSBfZGVncmVlKSBBQk9SVDsgXAogCWZwcmludGYoc3Rkb3V0LCAiIG9rXG4iKTsgXAotCWZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGdyb3VwIG9yZGVyIC4uLiIpOyBcCi0JZmZsdXNoKHN0ZG91dCk7IFwKLQlpZiAoIUVDX0dST1VQX2dldF9vcmRlcihncm91cCwgeiwgY3R4KSkgQUJPUlQ7IFwKLQlpZiAoIUVDX1BPSU5UX211bChncm91cCwgUSwgeiwgTlVMTCwgTlVMTCwgY3R4KSkgQUJPUlQ7IFwKLQlpZiAoIUVDX1BPSU5UX2lzX2F0X2luZmluaXR5KGdyb3VwLCBRKSkgQUJPUlQ7IFwKLQlmcHJpbnRmKHN0ZG91dCwgIi4iKTsgXAotCWZmbHVzaChzdGRvdXQpOyBcCi0JaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoZ3JvdXAsIGN0eCkpIEFCT1JUOyBcCi0JaWYgKCFFQ19QT0lOVF9tdWwoZ3JvdXAsIFEsIHosIE5VTEwsIE5VTEwsIGN0eCkpIEFCT1JUOyBcCi0JaWYgKCFFQ19QT0lOVF9pc19hdF9pbmZpbml0eShncm91cCwgUSkpIEFCT1JUOyBcCi0JZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOyBcCisJZ3JvdXBfb3JkZXJfdGVzdHMoZ3JvdXApOyBcCiAJaWYgKCEoX3ZhcmlhYmxlID0gRUNfR1JPVVBfbmV3KEVDX0dST1VQX21ldGhvZF9vZihncm91cCkpKSkgQUJPUlQ7IFwKLQlpZiAoIUVDX0dST1VQX2NvcHkoX3ZhcmlhYmxlLCBncm91cCkpIEFCT1JUOworCWlmICghRUNfR1JPVVBfY29weShfdmFyaWFibGUsIGdyb3VwKSkgQUJPUlQ7IFwKIAotdm9pZCBjaGFyMl9maWVsZF90ZXN0cygpCi0JewkKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisKK3N0YXRpYyB2b2lkIGNoYXIyX2ZpZWxkX3Rlc3RzKHZvaWQpCisJewogCUJOX0NUWCAqY3R4ID0gTlVMTDsKIAlCSUdOVU0gKnAsICphLCAqYjsKIAlFQ19HUk9VUCAqZ3JvdXA7CkBAIC0xMjM5LDggKzEyMTIsOSBAQAogCWlmIChDMl9CNTcxKSBFQ19HUk9VUF9mcmVlKEMyX0I1NzEpOwogCiAJfQorI2VuZGlmCiAKLXZvaWQgaW50ZXJuYWxfY3VydmVfdGVzdCh2b2lkKQorc3RhdGljIHZvaWQgaW50ZXJuYWxfY3VydmVfdGVzdCh2b2lkKQogCXsKIAlFQ19idWlsdGluX2N1cnZlICpjdXJ2ZXMgPSBOVUxMOwogCXNpemVfdCBjcnZfbGVuID0gMCwgbiA9IDA7CkBAIC0xMjg3LDEzICsxMjYxLDE4OSBAQAogCQlFQ19HUk9VUF9mcmVlKGdyb3VwKTsKIAkJfQogCWlmIChvaykKLQkJZnByaW50ZihzdGRvdXQsICIgb2tcbiIpOworCQlmcHJpbnRmKHN0ZG91dCwgIiBva1xuXG4iKTsKIAllbHNlCi0JCWZwcmludGYoc3Rkb3V0LCAiIGZhaWxlZFxuIik7CisJCXsKKwkJZnByaW50ZihzdGRvdXQsICIgZmFpbGVkXG5cbiIpOworCQlBQk9SVDsKKwkJfQogCU9QRU5TU0xfZnJlZShjdXJ2ZXMpOwogCXJldHVybjsKIAl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4CisvKiBuaXN0cF90ZXN0X3BhcmFtcyBjb250YWlucyBtYWdpYyBudW1iZXJzIGZvciB0ZXN0aW5nIG91ciBvcHRpbWl6ZWQKKyAqIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIE5JU1QgY3VydmVzIHdpdGggY2hhcmFjdGVyaXN0aWMgPiAzLiAqLworc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zCisJeworCWNvbnN0IEVDX01FVEhPRCogKCptZXRoKSAoKTsKKwlpbnQgZGVncmVlOworCS8qIFF4LCBReSBhbmQgRCBhcmUgdGFrZW4gZnJvbQorCSAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVC90b29sa2l0L2RvY3VtZW50cy9FeGFtcGxlcy9FQ0RTQV9QcmltZS5wZGYKKwkgKiBPdGhlcndpc2UsIHZhbHVlcyBhcmUgc3RhbmRhcmQgY3VydmUgcGFyYW1ldGVycyBmcm9tIEZJUFMgMTgwLTMgKi8KKwljb25zdCBjaGFyICpwLCAqYSwgKmIsICpReCwgKlF5LCAqR3gsICpHeSwgKm9yZGVyLCAqZDsKKwl9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pc3RwX3Rlc3RfcGFyYW1zIG5pc3RwX3Rlc3RzX3BhcmFtc1tdID0KKwl7CisJCXsKKwkJLyogUC0yMjQgKi8KKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZCwKKwkJMjI0LAorCQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLCAvKiBwICovCisJCSJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRSIsIC8qIGEgKi8KKwkJIkI0MDUwQTg1MEMwNEIzQUJGNTQxMzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0IiwgLyogYiAqLworCQkiRTg0RkIwQjhFNzAwMENCNjU3RDc5NzNDRjZCNDJFRDc4QjMwMTY3NDI3NkRGNzQ0QUYxMzBCM0UiLCAvKiBReCAqLworCQkiNDM3NjY3NUM2RkM1NjEyQzIxQTBGRjJEMkE4OUQyOTg3REY3QTJCQzUyMTgzQjU5ODIyOTg1NTUiLCAvKiBReSAqLworCQkiQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0MzI4MEQ2MTE1QzFEMjEiLCAvKiBHeCAqLworCQkiQkQzNzYzODhCNUY3MjNGQjRDMjJERkU2Q0Q0Mzc1QTA1QTA3NDc2NDQ0RDU4MTk5ODUwMDdFMzQiLCAvKiBHeSAqLworCQkiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjE2QTJFMEI4RjAzRTEzREQyOTQ1NUM1QzJBM0QiLCAvKiBvcmRlciAqLworCQkiM0YwQzQ4OEU5ODdDODBCRTBGRUU1MjFGOEQ5MEJFNjAzNEVDNjlBRTExQ0E3MkFBNzc3NDgxRTgiLCAvKiBkICovCisJCX0sCisJCXsKKwkJLyogUC0yNTYgKi8KKwkJRUNfR0ZwX25pc3RwMjU2X21ldGhvZCwKKwkJMjU2LAorCQkiZmZmZmZmZmYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsIC8qIHAgKi8KKwkJImZmZmZmZmZmMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMiLCAvKiBhICovCisJCSI1YWM2MzVkOGFhM2E5M2U3YjNlYmJkNTU3Njk4ODZiYzY1MWQwNmIwY2M1M2IwZjYzYmNlM2MzZTI3ZDI2MDRiIiwgLyogYiAqLworCQkiYjdlMDhhZmRmZTk0YmFkM2YxZGM4YzczNDc5OGJhMWM2MmIzYTBhZDFlOWVhMmEzODIwMWNkMDg4OWJjN2ExOSIsIC8qIFF4ICovCisJCSIzNjAzZjc0Nzk1OWRiZjdhNGJiMjI2ZTQxOTI4NzI5MDYzYWRjN2FlNDM1MjllNjFiNTYzYmJjNjA2Y2M1ZTA5IiwgLyogUXkgKi8KKwkJIjZiMTdkMWYyZTEyYzQyNDdmOGJjZTZlNTYzYTQ0MGYyNzcwMzdkODEyZGViMzNhMGY0YTEzOTQ1ZDg5OGMyOTYiLCAvKiBHeCAqLworCQkiNGZlMzQyZTJmZTFhN2Y5YjhlZTdlYjRhN2MwZjllMTYyYmNlMzM1NzZiMzE1ZWNlY2JiNjQwNjgzN2JmNTFmNSIsIC8qIEd5ICovCisJCSJmZmZmZmZmZjAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmJjZTZmYWFkYTcxNzllODRmM2I5Y2FjMmZjNjMyNTUxIiwgLyogb3JkZXIgKi8KKwkJImM0NzdmOWY2NWMyMmNjZTIwNjU3ZmFhNWIyZDFkODEyMjMzNmY4NTFhNTA4YTFlZDA0ZTQ3OWMzNDk4NWJmOTYiLCAvKiBkICovCisJCX0sCisJCXsKKwkJLyogUC01MjEgKi8KKwkJRUNfR0ZwX25pc3RwNTIxX21ldGhvZCwKKwkJNTIxLAorCQkiMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLCAvKiBwICovCisJCSIxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyIsIC8qIGEgKi8KKwkJIjA1MTk1M2ViOTYxOGUxYzlhMWY5MjlhMjFhMGI2ODU0MGVlYTJkYTcyNWI5OWIzMTVmM2I4YjQ4OTkxOGVmMTA5ZTE1NjE5Mzk1MWVjN2U5MzdiMTY1MmMwYmQzYmIxYmYwNzM1NzNkZjg4M2QyYzM0ZjFlZjQ1MWZkNDZiNTAzZjAwIiwgLyogYiAqLworCQkiMDA5OGU5MWVlZjlhNjg0NTI4MjIzMDljNTJmYWI0NTNmNWYxMTdjMWRhOGVkNzk2YjI1NWU5YWI4ZjY0MTBjY2ExNmU1OWRmNDAzYTZiZGM2Y2E0NjdhMzcwNTZiMWU1NGIzMDA1ZDhhYzAzMGRlY2ZlYjY4ZGYxOGIxNzE4ODVkNWM0IiwgLyogUXggKi8KKwkJIjAxNjQzNTBjMzIxYWVjZmMxY2NhMWJhNDM2NGM5YjE1NjU2MTUwYjRiNzhkNmE0OGQ3ZDI4ZTdmMzE5ODVlZjE3YmU4NTU0Mzc2YjcyOTAwNzEyYzRiODNhZDY2ODMyNzIzMTUyNmUzMTNmNWYwOTI5OTlhNDYzMmZkNTBkOTQ2YmMyZSIsIC8qIFF5ICovCisJCSJjNjg1OGUwNmI3MDQwNGU5Y2Q5ZTNlY2I2NjIzOTViNDQyOWM2NDgxMzkwNTNmYjUyMWY4MjhhZjYwNmI0ZDNkYmFhMTRiNWU3N2VmZTc1OTI4ZmUxZGMxMjdhMmZmYThkZTMzNDhiM2MxODU2YTQyOWJmOTdlN2UzMWMyZTViZDY2IiwgLyogR3ggKi8KKwkJIjExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmM5N2VlNzI5OTVlZjQyNjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwIiwgLyogR3kgKi8KKwkJIjFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmE1MTg2ODc4M2JmMmY5NjZiN2ZjYzAxNDhmNzA5YTVkMDNiYjVjOWI4ODk5YzQ3YWViYjZmYjcxZTkxMzg2NDA5IiwgLyogb3JkZXIgKi8KKwkJIjAxMDAwODVmNDdiOGUxYjhiMTFiN2ViMzMwMjhjMGIyODg4ZTMwNGJmYzk4NTAxOTU1YjQ1YmJhMTQ3OGRjMTg0ZWVlZGYwOWI4NmE1ZjdjMjE5OTQ0MDYwNzI3ODcyMDVlNjlhNjM3MDlmZTM1YWE5M2JhMzMzNTE0YjI0Zjk2MTcyMiIsIC8qIGQgKi8KKwkJfSwKKwl9OworCit2b2lkIG5pc3RwX3NpbmdsZV90ZXN0KGNvbnN0IHN0cnVjdCBuaXN0cF90ZXN0X3BhcmFtcyAqdGVzdCkKKwl7CisJQk5fQ1RYICpjdHg7CisJQklHTlVNICpwLCAqYSwgKmIsICp4LCAqeSwgKm4sICptLCAqb3JkZXI7CisJRUNfR1JPVVAgKk5JU1RQOworCUVDX1BPSU5UICpHLCAqUCwgKlEsICpRX0NIRUNLOworCisJZnByaW50ZihzdGRvdXQsICJcbk5JU1QgY3VydmUgUC0lZCAob3B0aW1pc2VkIGltcGxlbWVudGF0aW9uKTpcbiIsIHRlc3QtPmRlZ3JlZSk7CisJY3R4ID0gQk5fQ1RYX25ldygpOworCXAgPSBCTl9uZXcoKTsKKwlhID0gQk5fbmV3KCk7CisJYiA9IEJOX25ldygpOworCXggPSBCTl9uZXcoKTsgeSA9IEJOX25ldygpOworCW0gPSBCTl9uZXcoKTsgbiA9IEJOX25ldygpOyBvcmRlciA9IEJOX25ldygpOworCisJTklTVFAgPSBFQ19HUk9VUF9uZXcodGVzdC0+bWV0aCgpKTsKKwlpZighTklTVFApIEFCT1JUOworCWlmICghQk5faGV4MmJuKCZwLCB0ZXN0LT5wKSkgQUJPUlQ7CisJaWYgKDEgIT0gQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpKSBBQk9SVDsKKwlpZiAoIUJOX2hleDJibigmYSwgdGVzdC0+YSkpIEFCT1JUOworCWlmICghQk5faGV4MmJuKCZiLCB0ZXN0LT5iKSkgQUJPUlQ7CisJaWYgKCFFQ19HUk9VUF9zZXRfY3VydmVfR0ZwKE5JU1RQLCBwLCBhLCBiLCBjdHgpKSBBQk9SVDsKKwlHID0gRUNfUE9JTlRfbmV3KE5JU1RQKTsKKwlQID0gRUNfUE9JTlRfbmV3KE5JU1RQKTsKKwlRID0gRUNfUE9JTlRfbmV3KE5JU1RQKTsKKwlRX0NIRUNLID0gRUNfUE9JTlRfbmV3KE5JU1RQKTsKKwlpZighQk5faGV4MmJuKCZ4LCB0ZXN0LT5ReCkpIEFCT1JUOworCWlmKCFCTl9oZXgyYm4oJnksIHRlc3QtPlF5KSkgQUJPUlQ7CisJaWYoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKE5JU1RQLCBRX0NIRUNLLCB4LCB5LCBjdHgpKSBBQk9SVDsKKwlpZiAoIUJOX2hleDJibigmeCwgdGVzdC0+R3gpKSBBQk9SVDsKKwlpZiAoIUJOX2hleDJibigmeSwgdGVzdC0+R3kpKSBBQk9SVDsKKwlpZiAoIUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKE5JU1RQLCBHLCB4LCB5LCBjdHgpKSBBQk9SVDsKKwlpZiAoIUJOX2hleDJibigmb3JkZXIsIHRlc3QtPm9yZGVyKSkgQUJPUlQ7CisJaWYgKCFFQ19HUk9VUF9zZXRfZ2VuZXJhdG9yKE5JU1RQLCBHLCBvcmRlciwgQk5fdmFsdWVfb25lKCkpKSBBQk9SVDsKKworCWZwcmludGYoc3Rkb3V0LCAidmVyaWZ5IGRlZ3JlZSAuLi4gIik7CisJaWYgKEVDX0dST1VQX2dldF9kZWdyZWUoTklTVFApICE9IHRlc3QtPmRlZ3JlZSkgQUJPUlQ7CisJZnByaW50ZihzdGRvdXQsICJva1xuIik7CisKKwlmcHJpbnRmKHN0ZG91dCwgIk5JU1QgdGVzdCB2ZWN0b3JzIC4uLiAiKTsKKwlpZiAoIUJOX2hleDJibigmbiwgdGVzdC0+ZCkpIEFCT1JUOworCS8qIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uICovCisJRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBuLCBOVUxMLCBOVUxMLCBjdHgpOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkgQUJPUlQ7CisJLyogcmFuZG9tIHBvaW50IG11bHRpcGxpY2F0aW9uICovCisJRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBOVUxMLCBHLCBuLCBjdHgpOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkgQUJPUlQ7CisKKwkvKiBzZXQgZ2VuZXJhdG9yIHRvIFAgPSAyKkcsIHdoZXJlIEcgaXMgdGhlIHN0YW5kYXJkIGdlbmVyYXRvciAqLworCWlmICghRUNfUE9JTlRfZGJsKE5JU1RQLCBQLCBHLCBjdHgpKSBBQk9SVDsKKwlpZiAoIUVDX0dST1VQX3NldF9nZW5lcmF0b3IoTklTVFAsIFAsIG9yZGVyLCBCTl92YWx1ZV9vbmUoKSkpIEFCT1JUOworCS8qIHNldCB0aGUgc2NhbGFyIHRvIG09bi8yLCB3aGVyZSBuIGlzIHRoZSBOSVNUIHRlc3Qgc2NhbGFyICovCisJaWYgKCFCTl9yc2hpZnQobSwgbiwgMSkpIEFCT1JUOworCisJLyogdGVzdCB0aGUgbm9uLXN0YW5kYXJkIGdlbmVyYXRvciAqLworCS8qIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uICovCisJRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBtLCBOVUxMLCBOVUxMLCBjdHgpOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkgQUJPUlQ7CisJLyogcmFuZG9tIHBvaW50IG11bHRpcGxpY2F0aW9uICovCisJRUNfUE9JTlRfbXVsKE5JU1RQLCBRLCBOVUxMLCBQLCBtLCBjdHgpOworCWlmICgwICE9IEVDX1BPSU5UX2NtcChOSVNUUCwgUSwgUV9DSEVDSywgY3R4KSkgQUJPUlQ7CisKKwkvKiBub3cgcmVwZWF0IGFsbCB0ZXN0cyB3aXRoIHByZWNvbXB1dGF0aW9uICovCisJaWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoTklTVFAsIGN0eCkpIEFCT1JUOworCisJLyogZml4ZWQgcG9pbnQgbXVsdGlwbGljYXRpb24gKi8KKwlFQ19QT0lOVF9tdWwoTklTVFAsIFEsIG0sIE5VTEwsIE5VTEwsIGN0eCk7CisJaWYgKDAgIT0gRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSBBQk9SVDsKKwkvKiByYW5kb20gcG9pbnQgbXVsdGlwbGljYXRpb24gKi8KKwlFQ19QT0lOVF9tdWwoTklTVFAsIFEsIE5VTEwsIFAsIG0sIGN0eCk7CisJaWYgKDAgIT0gRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSBBQk9SVDsKKworCS8qIHJlc2V0IGdlbmVyYXRvciAqLworCWlmICghRUNfR1JPVVBfc2V0X2dlbmVyYXRvcihOSVNUUCwgRywgb3JkZXIsIEJOX3ZhbHVlX29uZSgpKSkgQUJPUlQ7CisJLyogZml4ZWQgcG9pbnQgbXVsdGlwbGljYXRpb24gKi8KKwlFQ19QT0lOVF9tdWwoTklTVFAsIFEsIG4sIE5VTEwsIE5VTEwsIGN0eCk7CisJaWYgKDAgIT0gRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSBBQk9SVDsKKwkvKiByYW5kb20gcG9pbnQgbXVsdGlwbGljYXRpb24gKi8KKwlFQ19QT0lOVF9tdWwoTklTVFAsIFEsIE5VTEwsIEcsIG4sIGN0eCk7CisJaWYgKDAgIT0gRUNfUE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKSBBQk9SVDsKKworCWZwcmludGYoc3Rkb3V0LCAib2tcbiIpOworCWdyb3VwX29yZGVyX3Rlc3RzKE5JU1RQKTsKKyNpZiAwCisJdGltaW5ncyhOSVNUUCwgVElNSU5HX0JBU0VfUFQsIGN0eCk7CisJdGltaW5ncyhOSVNUUCwgVElNSU5HX1JBTkRfUFQsIGN0eCk7CisjZW5kaWYKKwlFQ19HUk9VUF9mcmVlKE5JU1RQKTsKKwlFQ19QT0lOVF9mcmVlKEcpOworCUVDX1BPSU5UX2ZyZWUoUCk7CisJRUNfUE9JTlRfZnJlZShRKTsKKwlFQ19QT0lOVF9mcmVlKFFfQ0hFQ0spOworCUJOX2ZyZWUobik7CisJQk5fZnJlZShtKTsKKwlCTl9mcmVlKHApOworCUJOX2ZyZWUoYSk7CisJQk5fZnJlZShiKTsKKwlCTl9mcmVlKHgpOworCUJOX2ZyZWUoeSk7CisJQk5fZnJlZShvcmRlcik7CisJQk5fQ1RYX2ZyZWUoY3R4KTsKKwl9CisKK3ZvaWQgbmlzdHBfdGVzdHMoKQorCXsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihuaXN0cF90ZXN0c19wYXJhbXMpIC8gc2l6ZW9mKHN0cnVjdCBuaXN0cF90ZXN0X3BhcmFtcyk7IGkrKykKKwkJeworCQluaXN0cF9zaW5nbGVfdGVzdCgmbmlzdHBfdGVzdHNfcGFyYW1zW2ldKTsKKwkJfQorCX0KKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciBybmRfc2VlZFtdID0gInN0cmluZyB0byBtYWtlIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGluayBpdCBoYXMgZW50cm9weSI7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xMzE3LDcgKzE0NjcsMTIgQEAKIAogCXByaW1lX2ZpZWxkX3Rlc3RzKCk7CiAJcHV0cygiIik7CisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCWNoYXIyX2ZpZWxkX3Rlc3RzKCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4CisJbmlzdHBfdGVzdHMoKTsKKyNlbmRpZgogCS8qIHRlc3QgdGhlIGludGVybmFsIGN1cnZlcyAqLwogCWludGVybmFsX2N1cnZlX3Rlc3QoKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZGgvZWNkaC5oIGIvY3J5cHRvL2VjZGgvZWNkaC5oCmluZGV4IGI0YjU4ZWUuLjg4ODcxMDIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RoL2VjZGguaAorKysgYi9jcnlwdG8vZWNkaC9lY2RoLmgKQEAgLTEwOSwxMSArMTA5LDEzIEBACiAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEVDREggZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNESF9GX0VDREhfQ0hFQ0sJCQkJIDEwMgogI2RlZmluZSBFQ0RIX0ZfRUNESF9DT01QVVRFX0tFWQkJCQkgMTAwCiAjZGVmaW5lIEVDREhfRl9FQ0RIX0RBVEFfTkVXX01FVEhPRAkJCSAxMDEKIAogLyogUmVhc29uIGNvZGVzLiAqLwogI2RlZmluZSBFQ0RIX1JfS0RGX0ZBSUxFRAkJCQkgMTAyCisjZGVmaW5lIEVDREhfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMwogI2RlZmluZSBFQ0RIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCiAjZGVmaW5lIEVDREhfUl9QT0lOVF9BUklUSE1FVElDX0ZBSUxVUkUJCQkgMTAxCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9lY2RoL2VjZGh0ZXN0LmMgYi9jcnlwdG8vZWNkaC9lY2RodGVzdC5jCmluZGV4IDIxMmE4N2UuLjgyM2Q3YmEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RoL2VjZGh0ZXN0LmMKKysrIGIvY3J5cHRvL2VjZGgvZWNkaHRlc3QuYwpAQCAtMTU4LDExICsxNTgsMTMgQEAKIAkJaWYgKCFFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcChncm91cCwKIAkJCUVDX0tFWV9nZXQwX3B1YmxpY19rZXkoYSksIHhfYSwgeV9hLCBjdHgpKSBnb3RvIGVycjsKIAkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAllbHNlCiAJCXsKIAkJaWYgKCFFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsCiAJCQlFQ19LRVlfZ2V0MF9wdWJsaWNfa2V5KGEpLCB4X2EsIHlfYSwgY3R4KSkgZ290byBlcnI7CiAJCX0KKyNlbmRpZgogI2lmZGVmIE5PSVNZCiAJQklPX3B1dHMob3V0LCIgIHByaSAxPSIpOwogCUJOX3ByaW50KG91dCxhLT5wcml2X2tleSk7CkBAIC0xODMsMTEgKzE4NSwxMyBAQAogCQlpZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0ZwKGdyb3VwLCAKIAkJCUVDX0tFWV9nZXQwX3B1YmxpY19rZXkoYiksIHhfYiwgeV9iLCBjdHgpKSBnb3RvIGVycjsKIAkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAllbHNlCiAJCXsKIAkJaWYgKCFFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm0oZ3JvdXAsIAogCQkJRUNfS0VZX2dldDBfcHVibGljX2tleShiKSwgeF9iLCB5X2IsIGN0eCkpIGdvdG8gZXJyOwogCQl9CisjZW5kaWYKIAogI2lmZGVmIE5PSVNZCiAJQklPX3B1dHMob3V0LCIgIHByaSAyPSIpOwpAQCAtMzI0LDYgKzMyOCw3IEBACiAJaWYgKCF0ZXN0X2VjZGhfY3VydmUoTklEX1g5XzYyX3ByaW1lMjU2djEsICJOSVNUIFByaW1lLUN1cnZlIFAtMjU2IiwgY3R4LCBvdXQpKSBnb3RvIGVycjsKIAlpZiAoIXRlc3RfZWNkaF9jdXJ2ZShOSURfc2VjcDM4NHIxLCAiTklTVCBQcmltZS1DdXJ2ZSBQLTM4NCIsIGN0eCwgb3V0KSkgZ290byBlcnI7CiAJaWYgKCF0ZXN0X2VjZGhfY3VydmUoTklEX3NlY3A1MjFyMSwgIk5JU1QgUHJpbWUtQ3VydmUgUC01MjEiLCBjdHgsIG91dCkpIGdvdG8gZXJyOworI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAkvKiBOSVNUIEJJTkFSWSBDVVJWRVMgVEVTVFMgKi8KIAlpZiAoIXRlc3RfZWNkaF9jdXJ2ZShOSURfc2VjdDE2M2sxLCAiTklTVCBCaW5hcnktQ3VydmUgSy0xNjMiLCBjdHgsIG91dCkpIGdvdG8gZXJyOwogCWlmICghdGVzdF9lY2RoX2N1cnZlKE5JRF9zZWN0MTYzcjIsICJOSVNUIEJpbmFyeS1DdXJ2ZSBCLTE2MyIsIGN0eCwgb3V0KSkgZ290byBlcnI7CkBAIC0zMzUsNiArMzQwLDcgQEAKIAlpZiAoIXRlc3RfZWNkaF9jdXJ2ZShOSURfc2VjdDQwOXIxLCAiTklTVCBCaW5hcnktQ3VydmUgQi00MDkiLCBjdHgsIG91dCkpIGdvdG8gZXJyOwogCWlmICghdGVzdF9lY2RoX2N1cnZlKE5JRF9zZWN0NTcxazEsICJOSVNUIEJpbmFyeS1DdXJ2ZSBLLTU3MSIsIGN0eCwgb3V0KSkgZ290byBlcnI7CiAJaWYgKCF0ZXN0X2VjZGhfY3VydmUoTklEX3NlY3Q1NzFyMSwgIk5JU1QgQmluYXJ5LUN1cnZlIEItNTcxIiwgY3R4LCBvdXQpKSBnb3RvIGVycjsKKyNlbmRpZgogCiAJcmV0ID0gMDsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZGgvZWNoX2Vyci5jIGIvY3J5cHRvL2VjZGgvZWNoX2Vyci5jCmluZGV4IDZmNGIwYzkuLjNiZDI0NzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RoL2VjaF9lcnIuYworKysgYi9jcnlwdG8vZWNkaC9lY2hfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZWNkaC9lY2hfZXJyLmMgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MCw2ICs3MCw3IEBACiAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRUNESF9zdHJfZnVuY3RzW109CiAJewore0VSUl9GVU5DKEVDREhfRl9FQ0RIX0NIRUNLKSwJIkVDREhfQ0hFQ0sifSwKIHtFUlJfRlVOQyhFQ0RIX0ZfRUNESF9DT01QVVRFX0tFWSksCSJFQ0RIX2NvbXB1dGVfa2V5In0sCiB7RVJSX0ZVTkMoRUNESF9GX0VDREhfREFUQV9ORVdfTUVUSE9EKSwJIkVDREhfREFUQV9uZXdfbWV0aG9kIn0sCiB7MCxOVUxMfQpAQCAtNzgsNiArNzksNyBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFQ0RIX3N0cl9yZWFzb25zW109CiAJewoge0VSUl9SRUFTT04oRUNESF9SX0tERl9GQUlMRUQpICAgICAgICAgICAsIktERiBmYWlsZWQifSwKK3tFUlJfUkVBU09OKEVDREhfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKIHtFUlJfUkVBU09OKEVDREhfUl9OT19QUklWQVRFX1ZBTFVFKSAgICAgLCJubyBwcml2YXRlIHZhbHVlIn0sCiB7RVJSX1JFQVNPTihFQ0RIX1JfUE9JTlRfQVJJVEhNRVRJQ19GQUlMVVJFKSwicG9pbnQgYXJpdGhtZXRpYyBmYWlsdXJlIn0sCiB7MCxOVUxMfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZGgvZWNoX2xpYi5jIGIvY3J5cHRvL2VjZGgvZWNoX2xpYi5jCmluZGV4IDRkOGVhMDMuLmRhZGJmZDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RoL2VjaF9saWIuYworKysgYi9jcnlwdG8vZWNkaC9lY2hfbGliLmMKQEAgLTczLDYgKzczLDkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNlbmRpZgogCiBjb25zdCBjaGFyIEVDREhfdmVyc2lvbltdPSJFQ0RIIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTkwLDcgKzkzLDE2IEBACiBjb25zdCBFQ0RIX01FVEhPRCAqRUNESF9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKIAl7CiAJaWYoIWRlZmF1bHRfRUNESF9tZXRob2QpIAorCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWlmIChGSVBTX21vZGUoKSkKKwkJCXJldHVybiBGSVBTX2VjZGhfb3BlbnNzbCgpOworCQllbHNlCisJCQlyZXR1cm4gRUNESF9PcGVuU1NMKCk7CisjZWxzZQogCQlkZWZhdWx0X0VDREhfbWV0aG9kID0gRUNESF9PcGVuU1NMKCk7CisjZW5kaWYKKwkJfQogCXJldHVybiBkZWZhdWx0X0VDREhfbWV0aG9kOwogCX0KIApAQCAtMjE1LDYgKzIyNywxNCBAQAogCX0KIAllbHNlCiAJCWVjZGhfZGF0YSA9IChFQ0RIX0RBVEEgKilkYXRhOworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGVjZGhfZGF0YS0+ZmxhZ3MgJiBFQ0RIX0ZMQUdfRklQU19NRVRIT0QpCisJCQkmJiAhKEVDX0tFWV9nZXRfZmxhZ3Moa2V5KSAmIEVDX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorCQl7CisJCUVDREhlcnIoRUNESF9GX0VDREhfQ0hFQ0ssIEVDREhfUl9OT05fRklQU19NRVRIT0QpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorI2VuZGlmCiAJCiAKIAlyZXR1cm4gZWNkaF9kYXRhOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZGgvZWNoX2xvY2wuaCBiL2NyeXB0by9lY2RoL2VjaF9sb2NsLmgKaW5kZXggZjY1ODUyNi4uZjZjYWQ2YSAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjZGgvZWNoX2xvY2wuaAorKysgYi9jcnlwdG8vZWNkaC9lY2hfbG9jbC5oCkBAIC03NSw2ICs3NSwxNCBAQAogCWNoYXIgKmFwcF9kYXRhOwogCX07CiAKKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIEVDREggbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAorICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlc3BvbnNpYmlsaXR5CisgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisgKi8KKworI2RlZmluZSBFQ0RIX0ZMQUdfRklQU19NRVRIT0QJMHgxCisKIHR5cGVkZWYgc3RydWN0IGVjZGhfZGF0YV9zdCB7CiAJLyogRUNfS0VZX01FVEhfREFUQSBwYXJ0ICovCiAJaW50ICgqaW5pdCkoRUNfS0VZICopOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZGgvZWNoX29zc2wuYyBiL2NyeXB0by9lY2RoL2VjaF9vc3NsLmMKaW5kZXggMmE0MGZmMS4uNGEzMDYyOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjZGgvZWNoX29zc2wuYworKysgYi9jcnlwdG8vZWNkaC9lY2hfb3NzbC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJCWdvdG8gZXJyOwogCQkJfQogCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogCWVsc2UKIAkJewogCQlpZiAoIUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybShncm91cCwgdG1wLCB4LCB5LCBjdHgpKSAKQEAgLTE2NSw2ICsxNjYsNyBAQAogCQkJZ290byBlcnI7CiAJCQl9CiAJCX0KKyNlbmRpZgogCiAJYnVmbGVuID0gKEVDX0dST1VQX2dldF9kZWdyZWUoZ3JvdXApICsgNykvODsKIAlsZW4gPSBCTl9udW1fYnl0ZXMoeCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvZWNkc2EuaCBiL2NyeXB0by9lY2RzYS9lY2RzYS5oCmluZGV4IGU2MWM1MzkuLjdmYjUyNTQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RzYS9lY2RzYS5oCisrKyBiL2NyeXB0by9lY2RzYS9lY2RzYS5oCkBAIC0yMzgsNiArMjM4LDcgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgRUNEU0EgZnVuY3Rpb25zLiAqLwogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRUNEU0FfRl9FQ0RTQV9DSEVDSwkJCQkgMTA0CiAjZGVmaW5lIEVDRFNBX0ZfRUNEU0FfREFUQV9ORVdfTUVUSE9ECQkJIDEwMAogI2RlZmluZSBFQ0RTQV9GX0VDRFNBX0RPX1NJR04JCQkJIDEwMQogI2RlZmluZSBFQ0RTQV9GX0VDRFNBX0RPX1ZFUklGWQkJCQkgMTAyCkBAIC0yNDksNiArMjUwLDcgQEAKICNkZWZpbmUgRUNEU0FfUl9FUlJfRUNfTElCCQkJCSAxMDIKICNkZWZpbmUgRUNEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAzCiAjZGVmaW5lIEVDRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTCQkJIDEwNgorI2RlZmluZSBFQ0RTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA3CiAjZGVmaW5lIEVDRFNBX1JfUkFORE9NX05VTUJFUl9HRU5FUkFUSU9OX0ZBSUxFRAkJIDEwNAogI2RlZmluZSBFQ0RTQV9SX1NJR05BVFVSRV9NQUxMT0NfRkFJTEVECQkJIDEwNQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvZWNkc2F0ZXN0LmMgYi9jcnlwdG8vZWNkc2EvZWNkc2F0ZXN0LmMKaW5kZXggYzNjMjBjMy4uNTM3YmIzMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjZHNhL2VjZHNhdGVzdC5jCisrKyBiL2NyeXB0by9lY2RzYS9lY2RzYXRlc3QuYwpAQCAtMjYyLDYgKzI2Miw3IEBACiAJCSIzMjM4MTM1NTMyMDk3OTczNTc3MDgwNzg3NzY4MzEyNTA1MDU5MzE4OTEwNTE3NTUwMDc4NDI3ODE5IgogCQkiNzg1MDUxNzk0NDg3ODMiKSkKIAkJZ290byB4OTYyX2VycjsKKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiAJaWYgKCF4OV82Ml90ZXN0X2ludGVybmFsKG91dCwgTklEX1g5XzYyX2MydG5iMTkxdjEsCiAJCSI4NzE5NDM4MzE2NDg3MTU0MzM1NTcyMjI4NDkyNjkwNDQxOTk5NzIzNzU5MTUzNTA2NjUyODA0OCIsCiAJCSIzMDg5OTI2OTE5NjU4MDQ5NDczNjE1NDE2NjQ1NDkwODU4OTUyOTIxNTM3NzcwMjU3NzIwNjM1OTgiKSkKQEAgLTI3Miw3ICsyNzMsNyBAQAogCQkiMTk3MDMwMzc0MDAwNzMxNjg2NzM4MzM0OTk3NjU0OTk3MjI3MDUyODQ5ODA0MDcyMTk4ODE5MTAyNiIKIAkJIjQ5NDEzNDY1NzM3MTc0IikpCiAJCWdvdG8geDk2Ml9lcnI7Ci0KKyNlbmRpZgogCXJldCA9IDE7CiB4OTYyX2VycjoKIAlpZiAoIXJlc3RvcmVfcmFuZCgpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VjZHNhL2Vjc19lcnIuYyBiL2NyeXB0by9lY2RzYS9lY3NfZXJyLmMKaW5kZXggOThlMzhkNS4uODE1NDJlNiAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjZHNhL2Vjc19lcnIuYworKysgYi9jcnlwdG8vZWNkc2EvZWNzX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL2VjZHNhL2Vjc19lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDYgKzcwLDcgQEAKIAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBFQ0RTQV9zdHJfZnVuY3RzW109CiAJewore0VSUl9GVU5DKEVDRFNBX0ZfRUNEU0FfQ0hFQ0spLAkiRUNEU0FfQ0hFQ0sifSwKIHtFUlJfRlVOQyhFQ0RTQV9GX0VDRFNBX0RBVEFfTkVXX01FVEhPRCksCSJFQ0RTQV9EQVRBX05FV19NRVRIT0QifSwKIHtFUlJfRlVOQyhFQ0RTQV9GX0VDRFNBX0RPX1NJR04pLAkiRUNEU0FfZG9fc2lnbiJ9LAoge0VSUl9GVU5DKEVDRFNBX0ZfRUNEU0FfRE9fVkVSSUZZKSwJIkVDRFNBX2RvX3ZlcmlmeSJ9LApAQCAtODQsNiArODUsNyBAQAoge0VSUl9SRUFTT04oRUNEU0FfUl9FUlJfRUNfTElCKSAgICAgICAgICAsImVyciBlYyBsaWIifSwKIHtFUlJfUkVBU09OKEVDRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgLCJtaXNzaW5nIHBhcmFtZXRlcnMifSwKIHtFUlJfUkVBU09OKEVDRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCit7RVJSX1JFQVNPTihFQ0RTQV9SX05PTl9GSVBTX01FVEhPRCkgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCiB7RVJSX1JFQVNPTihFQ0RTQV9SX1JBTkRPTV9OVU1CRVJfR0VORVJBVElPTl9GQUlMRUQpLCJyYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gZmFpbGVkIn0sCiB7RVJSX1JFQVNPTihFQ0RTQV9SX1NJR05BVFVSRV9NQUxMT0NfRkFJTEVEKSwic2lnbmF0dXJlIG1hbGxvYyBmYWlsZWQifSwKIHswLE5VTEx9CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvZWNzX2xpYi5jIGIvY3J5cHRvL2VjZHNhL2Vjc19saWIuYwppbmRleCAyZWJhZTNhLi5lNDc3ZGE0IDEwMDY0NAotLS0gYS9jcnlwdG8vZWNkc2EvZWNzX2xpYi5jCisrKyBiL2NyeXB0by9lY2RzYS9lY3NfbGliLmMKQEAgLTYwLDYgKzYwLDkgQEAKICNlbmRpZgogI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCiAKIGNvbnN0IGNoYXIgRUNEU0FfdmVyc2lvbltdPSJFQ0RTQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwogCkBAIC03Nyw3ICs4MCwxNiBAQAogY29uc3QgRUNEU0FfTUVUSE9EICpFQ0RTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKIHsKIAlpZighZGVmYXVsdF9FQ0RTQV9tZXRob2QpIAorCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWlmIChGSVBTX21vZGUoKSkKKwkJCXJldHVybiBGSVBTX2VjZHNhX29wZW5zc2woKTsKKwkJZWxzZQorCQkJcmV0dXJuIEVDRFNBX09wZW5TU0woKTsKKyNlbHNlCiAJCWRlZmF1bHRfRUNEU0FfbWV0aG9kID0gRUNEU0FfT3BlblNTTCgpOworI2VuZGlmCisJCX0KIAlyZXR1cm4gZGVmYXVsdF9FQ0RTQV9tZXRob2Q7CiB9CiAKQEAgLTE5Myw3ICsyMDUsMTQgQEAKIAl9CiAJZWxzZQogCQllY2RzYV9kYXRhID0gKEVDRFNBX0RBVEEgKilkYXRhOwotCQorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKGVjZHNhX2RhdGEtPmZsYWdzICYgRUNEU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEoRUNfS0VZX2dldF9mbGFncyhrZXkpICYgRUNfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJRUNEU0FlcnIoRUNEU0FfRl9FQ0RTQV9DSEVDSywgRUNEU0FfUl9OT05fRklQU19NRVRIT0QpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorI2VuZGlmCiAKIAlyZXR1cm4gZWNkc2FfZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9lY2RzYS9lY3NfbG9jbC5oIGIvY3J5cHRvL2VjZHNhL2Vjc19sb2NsLmgKaW5kZXggM2E2OWE4NC4uY2IzYmUxMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2VjZHNhL2Vjc19sb2NsLmgKKysrIGIvY3J5cHRvL2VjZHNhL2Vjc19sb2NsLmgKQEAgLTgyLDYgKzgyLDE0IEBACiAJY2hhciAqYXBwX2RhdGE7CiAJfTsKIAorLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRUNEU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUgdXNlZAorICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlc3BvbnNpYmlsaXR5CisgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisgKi8KKworI2RlZmluZSBFQ0RTQV9GTEFHX0ZJUFNfTUVUSE9ECTB4MQorCiB0eXBlZGVmIHN0cnVjdCBlY2RzYV9kYXRhX3N0IHsKIAkvKiBFQ19LRVlfTUVUSF9EQVRBIHBhcnQgKi8KIAlpbnQgKCppbml0KShFQ19LRVkgKik7CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNkc2EvZWNzX29zc2wuYyBiL2NyeXB0by9lY2RzYS9lY3Nfb3NzbC5jCmluZGV4IDFiYmYzMjguLjc3MjU5MzUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lY2RzYS9lY3Nfb3NzbC5jCisrKyBiL2NyeXB0by9lY2RzYS9lY3Nfb3NzbC5jCkBAIC0xNjcsNiArMTY3LDcgQEAKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAkJZWxzZSAvKiBOSURfWDlfNjJfY2hhcmFjdGVyaXN0aWNfdHdvX2ZpZWxkICovCiAJCXsKIAkJCWlmICghRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLApAQCAtMTc2LDYgKzE3Nyw3IEBACiAJCQkJZ290byBlcnI7CiAJCQl9CiAJCX0KKyNlbmRpZgogCQlpZiAoIUJOX25ubW9kKHIsIFgsIG9yZGVyLCBjdHgpKQogCQl7CiAJCQlFQ0RTQWVycihFQ0RTQV9GX0VDRFNBX1NJR05fU0VUVVAsIEVSUl9SX0JOX0xJQik7CkBAIC00NTQsNiArNDU2LDcgQEAKIAkJCWdvdG8gZXJyOwogCQl9CiAJfQorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIAllbHNlIC8qIE5JRF9YOV82Ml9jaGFyYWN0ZXJpc3RpY190d29fZmllbGQgKi8KIAl7CiAJCWlmICghRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlc19HRjJtKGdyb3VwLApAQCAtNDYzLDcgKzQ2Niw3IEBACiAJCQlnb3RvIGVycjsKIAkJfQogCX0KLQkKKyNlbmRpZgkKIAlpZiAoIUJOX25ubW9kKHUxLCBYLCBvcmRlciwgY3R4KSkKIAl7CiAJCUVDRFNBZXJyKEVDRFNBX0ZfRUNEU0FfRE9fVkVSSUZZLCBFUlJfUl9CTl9MSUIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMgYi9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwppbmRleCAyMmMxMjA0Li42MDkzMzc2IDEwMDY0NAotLS0gYS9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYworKysgYi9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwpAQCAtNjEsNiArNjEsOCBAQAogCiB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQogCXsKKwkvKiBTb21lIEVOR0lORXMgbmVlZCB0aGlzICovCisJT1BFTlNTTF9jcHVpZF9zZXR1cCgpOwogI2lmIDAKIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCiAJICogaXQgaXMgdGhlICpvbmx5KiB3YXkgZm9yIHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zIHRvIGJlIGJlCkBAIC03MSw2ICs3MywxMiBAQAogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fSFcpICYmIChkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKEhBVkVfQ1JZUFRPREVWKSkKIAlFTkdJTkVfbG9hZF9jcnlwdG9kZXYoKTsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1JTQVgKKwlFTkdJTkVfbG9hZF9yc2F4KCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19SRFJBTkQKKwlFTkdJTkVfbG9hZF9yZHJhbmQoKTsKKyNlbmRpZgogCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKICNpZm5kZWYgT1BFTlNTTF9OT19TVEFUSUNfRU5HSU5FCiAjaWZuZGVmIE9QRU5TU0xfTk9fSFcKQEAgLTExMiw2ICsxMjAsNyBAQAogCUVOR0lORV9sb2FkX2NhcGkoKTsKICNlbmRpZgogI2VuZGlmCisJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jb21wbGV0ZSgpOwogCX0KIAogI2lmIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoSEFWRV9DUllQVE9ERVYpCmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ19mYXQuYyBiL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCmluZGV4IGRiNjZlNjIuLjc4OWI4ZDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCisrKyBiL2NyeXB0by9lbmdpbmUvZW5nX2ZhdC5jCkBAIC0xNzYsNiArMTc2LDcgQEAKIAlFTkdJTkUgKmU7CiAKIAlmb3IoZT1FTkdJTkVfZ2V0X2ZpcnN0KCkgOyBlIDsgZT1FTkdJTkVfZ2V0X25leHQoZSkpCi0JCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZShlKTsKKwkJaWYgKCEoZS0+ZmxhZ3MgJiBFTkdJTkVfRkxBR1NfTk9fUkVHSVNURVJfQUxMKSkKKwkJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZShlKTsKIAlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZW5naW5lL2VuZ2luZS5oIGIvY3J5cHRvL2VuZ2luZS9lbmdpbmUuaAppbmRleCA5NDNhZWFlLi5mOGJlNDk3IDEwMDY0NAotLS0gYS9jcnlwdG8vZW5naW5lL2VuZ2luZS5oCisrKyBiL2NyeXB0by9lbmdpbmUvZW5naW5lLmgKQEAgLTE0MSw2ICsxNDEsMTMgQEAKICAqIHRoZSBleGlzdGluZyBFTkdJTkUncyBzdHJ1Y3R1cmFsIHJlZmVyZW5jZSBjb3VudC4gKi8KICNkZWZpbmUgRU5HSU5FX0ZMQUdTX0JZX0lEX0NPUFkJCShpbnQpMHgwMDA0CiAKKy8qIFRoaXMgZmxhZyBpZiBmb3IgYW4gRU5HSU5FIHRoYXQgZG9lcyBub3Qgd2FudCBpdHMgbWV0aG9kcyByZWdpc3RlcmVkIGFzIAorICogcGFydCBvZiBFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlKCkgZm9yIGV4YW1wbGUgaWYgdGhlIG1ldGhvZHMgYXJlCisgKiBub3QgdXNhYmxlIGFzIGRlZmF1bHQgbWV0aG9kcy4KKyAqLworCisjZGVmaW5lIEVOR0lORV9GTEFHU19OT19SRUdJU1RFUl9BTEwJKGludCkweDAwMDgKKwogLyogRU5HSU5FcyBjYW4gc3VwcG9ydCB0aGVpciBvd24gY29tbWFuZCB0eXBlcywgYW5kIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluCiAgKiBFTkdJTkVfQ1RSTF9HRVRfQ01EX0ZMQUdTIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgd2hhdCBraW5kIG9mIGlucHV0IGVhY2gKICAqIGNvbW1hbmQgZXhwZWN0cy4gQ3VycmVudGx5IG9ubHkgbnVtZXJpYyBhbmQgc3RyaW5nIGlucHV0IGlzIHN1cHBvcnRlZC4gSWYgYQpAQCAtMzQ0LDYgKzM1MSw4IEBACiAjZW5kaWYKICNlbmRpZgogdm9pZCBFTkdJTkVfbG9hZF9jcnlwdG9kZXYodm9pZCk7Cit2b2lkIEVOR0lORV9sb2FkX3JzYXgodm9pZCk7Cit2b2lkIEVOR0lORV9sb2FkX3JkcmFuZCh2b2lkKTsKIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpOwogCiAvKiBHZXQgYW5kIHNldCBnbG9iYWwgZmxhZ3MgKEVOR0lORV9UQUJMRV9GTEFHXyoqKikgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Vyci9lcnIuYyBiL2NyeXB0by9lcnIvZXJyLmMKaW5kZXggNjk3MTNhNi4uZmNkYjI0NCAxMDA2NDQKLS0tIGEvY3J5cHRvL2Vyci9lcnIuYworKysgYi9jcnlwdG8vZXJyL2Vyci5jCkBAIC0xMDY2LDYgKzEwNjYsMTMgQEAKIHZvaWQgRVJSX2FkZF9lcnJvcl9kYXRhKGludCBudW0sIC4uLikKIAl7CiAJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIG51bSk7CisJRVJSX2FkZF9lcnJvcl92ZGF0YShudW0sIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwl9CisKK3ZvaWQgRVJSX2FkZF9lcnJvcl92ZGF0YShpbnQgbnVtLCB2YV9saXN0IGFyZ3MpCisJewogCWludCBpLG4sczsKIAljaGFyICpzdHIsKnAsKmE7CiAKQEAgLTEwNzQsNyArMTA4MSw2IEBACiAJaWYgKHN0ciA9PSBOVUxMKSByZXR1cm47CiAJc3RyWzBdPSdcMCc7CiAKLQl2YV9zdGFydChhcmdzLCBudW0pOwogCW49MDsKIAlmb3IgKGk9MDsgaTxudW07IGkrKykKIAkJewpAQCAtMTA5MCw3ICsxMDk2LDcgQEAKIAkJCQlpZiAocCA9PSBOVUxMKQogCQkJCQl7CiAJCQkJCU9QRU5TU0xfZnJlZShzdHIpOwotCQkJCQlnb3RvIGVycjsKKwkJCQkJcmV0dXJuOwogCQkJCQl9CiAJCQkJZWxzZQogCQkJCQlzdHI9cDsKQEAgLTEwOTksOSArMTEwNSw2IEBACiAJCQl9CiAJCX0KIAlFUlJfc2V0X2Vycm9yX2RhdGEoc3RyLEVSUl9UWFRfTUFMTE9DRUR8RVJSX1RYVF9TVFJJTkcpOwotCi1lcnI6Ci0JdmFfZW5kKGFyZ3MpOwogCX0KIAogaW50IEVSUl9zZXRfbWFyayh2b2lkKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Vyci9lcnIuaCBiL2NyeXB0by9lcnIvZXJyLmgKaW5kZXggYjlmOGMxNi4uOTc0Y2M5YyAxMDA2NDQKLS0tIGEvY3J5cHRvL2Vyci9lcnIuaAorKysgYi9jcnlwdG8vZXJyL2Vyci5oCkBAIC0zNDQsOCArMzQ0LDkgQEAKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0JJTwogdm9pZCBFUlJfcHJpbnRfZXJyb3JzKEJJTyAqYnApOwotdm9pZCBFUlJfYWRkX2Vycm9yX2RhdGEoaW50IG51bSwgLi4uKTsKICNlbmRpZgordm9pZCBFUlJfYWRkX2Vycm9yX2RhdGEoaW50IG51bSwgLi4uKTsKK3ZvaWQgRVJSX2FkZF9lcnJvcl92ZGF0YShpbnQgbnVtLCB2YV9saXN0IGFyZ3MpOwogdm9pZCBFUlJfbG9hZF9zdHJpbmdzKGludCBsaWIsRVJSX1NUUklOR19EQVRBIHN0cltdKTsKIHZvaWQgRVJSX3VubG9hZF9zdHJpbmdzKGludCBsaWIsRVJSX1NUUklOR19EQVRBIHN0cltdKTsKIHZvaWQgRVJSX2xvYWRfRVJSX3N0cmluZ3Modm9pZCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXJyL2Vycl9hbGwuYyBiL2NyeXB0by9lcnIvZXJyX2FsbC5jCmluZGV4IGZjMDQ5ZTguLmJkODk0NmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9lcnIvZXJyX2FsbC5jCisrKyBiL2NyeXB0by9lcnIvZXJyX2FsbC5jCkBAIC0xMDQsNiArMTA0LDEwIEBACiAjZW5kaWYKICNpbmNsdWRlIDxvcGVuc3NsL2NvbXAuaD4KIAorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCisKIHZvaWQgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCkKIAl7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCkBAIC0xNTcsNCArMTYxLDcgQEAKICNlbmRpZgogCUVSUl9sb2FkX0NPTVBfc3RyaW5ncygpOwogI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7CisjZW5kaWYKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2Jpb19tZC5jIGIvY3J5cHRvL2V2cC9iaW9fbWQuYwppbmRleCA5ODQxZTMyLi4xNDRmZGZkIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2Jpb19tZC5jCisrKyBiL2NyeXB0by9ldnAvYmlvX21kLmMKQEAgLTE1Myw4ICsxNTMsMTIgQEAKIAkJewogCQlpZiAocmV0ID4gMCkKIAkJCXsKLQkJCUVWUF9EaWdlc3RVcGRhdGUoY3R4LChjb25zdCB1bnNpZ25lZCBjaGFyICopaW4sCi0JCQkJKHVuc2lnbmVkIGludClyZXQpOworCQkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKGN0eCwoY29uc3QgdW5zaWduZWQgY2hhciAqKWluLAorCQkJCSh1bnNpZ25lZCBpbnQpcmV0KSkKKwkJCQl7CisJCQkJQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOworCQkJCXJldHVybiAwOworCQkJCX0KIAkJCX0KIAkJfQogCWlmKGItPm5leHRfYmlvICE9IE5VTEwpCkBAIC0yMjAsNyArMjI0LDggQEAKIAljYXNlIEJJT19DVFJMX0RVUDoKIAkJZGJpbz1wdHI7CiAJCWRjdHg9ZGJpby0+cHRyOwotCQlFVlBfTURfQ1RYX2NvcHlfZXgoZGN0eCxjdHgpOworCQlpZiAoIUVWUF9NRF9DVFhfY29weV9leChkY3R4LGN0eCkpCisJCQlyZXR1cm4gMDsKIAkJYi0+aW5pdD0xOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9iaW9fb2suYyBiL2NyeXB0by9ldnAvYmlvX29rLmMKaW5kZXggOThiYzFhYi4uZTY0MzM1MyAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9iaW9fb2suYworKysgYi9jcnlwdG8vZXZwL2Jpb19vay5jCkBAIC0xMzMsMTAgKzEzMywxMCBAQAogc3RhdGljIGludCBva19mcmVlKEJJTyAqZGF0YSk7CiBzdGF0aWMgbG9uZyBva19jYWxsYmFja19jdHJsKEJJTyAqaCwgaW50IGNtZCwgYmlvX2luZm9fY2IgKmZwKTsKIAotc3RhdGljIHZvaWQgc2lnX291dChCSU8qIGIpOwotc3RhdGljIHZvaWQgc2lnX2luKEJJTyogYik7Ci1zdGF0aWMgdm9pZCBibG9ja19vdXQoQklPKiBiKTsKLXN0YXRpYyB2b2lkIGJsb2NrX2luKEJJTyogYik7CitzdGF0aWMgaW50IHNpZ19vdXQoQklPKiBiKTsKK3N0YXRpYyBpbnQgc2lnX2luKEJJTyogYik7CitzdGF0aWMgaW50IGJsb2NrX291dChCSU8qIGIpOworc3RhdGljIGludCBibG9ja19pbihCSU8qIGIpOwogI2RlZmluZSBPS19CTE9DS19TSVpFCSgxMDI0KjQpCiAjZGVmaW5lIE9LX0JMT0NLX0JMT0NLCTQKICNkZWZpbmUgSU9CUwkJKE9LX0JMT0NLX1NJWkUrIE9LX0JMT0NLX0JMT0NLKyAzKkVWUF9NQVhfTURfU0laRSkKQEAgLTI2NiwxMCArMjY2LDI0IEBACiAJCWN0eC0+YnVmX2xlbis9IGk7CiAKIAkJLyogbm8gc2lnbmF0dXJlIHlldCAtLSBjaGVjayBpZiB3ZSBnb3Qgb25lICovCi0JCWlmIChjdHgtPnNpZ2lvID09IDEpIHNpZ19pbihiKTsKKwkJaWYgKGN0eC0+c2lnaW8gPT0gMSkKKwkJCXsKKwkJCWlmICghc2lnX2luKGIpKQorCQkJCXsKKwkJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQogCiAJCS8qIHNpZ25hdHVyZSBvayAtLSBjaGVjayBpZiB3ZSBnb3QgYmxvY2sgKi8KLQkJaWYgKGN0eC0+c2lnaW8gPT0gMCkgYmxvY2tfaW4oYik7CisJCWlmIChjdHgtPnNpZ2lvID09IDApCisJCQl7CisJCQlpZiAoIWJsb2NrX2luKGIpKQorCQkJCXsKKwkJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQogCiAJCS8qIGludmFsaWQgYmxvY2sgLS0gY2FuY2VsICovCiAJCWlmIChjdHgtPmNvbnQgPD0gMCkgYnJlYWs7CkBAIC0yOTMsNyArMzA3LDggQEAKIAogCWlmICgoY3R4ID09IE5VTEwpIHx8IChiLT5uZXh0X2JpbyA9PSBOVUxMKSB8fCAoYi0+aW5pdCA9PSAwKSkgcmV0dXJuKDApOwogCi0JaWYoY3R4LT5zaWdpbykgc2lnX291dChiKTsKKwlpZihjdHgtPnNpZ2lvICYmICFzaWdfb3V0KGIpKQorCQlyZXR1cm4gMDsKIAogCWRvewogCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CkBAIC0zMzIsNyArMzQ3LDExIEBACiAKIAkJaWYoY3R4LT5idWZfbGVuID49IE9LX0JMT0NLX1NJWkUrIE9LX0JMT0NLX0JMT0NLKQogCQkJewotCQkJYmxvY2tfb3V0KGIpOworCQkJaWYgKCFibG9ja19vdXQoYikpCisJCQkJeworCQkJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CiAJCQl9CiAJfXdoaWxlKGlubCA+IDApOwogCkBAIC0zNzksNyArMzk4LDggQEAKIAljYXNlIEJJT19DVFJMX0ZMVVNIOgogCQkvKiBkbyBhIGZpbmFsIHdyaXRlICovCiAJCWlmKGN0eC0+YmxvY2tvdXQgPT0gMCkKLQkJCWJsb2NrX291dChiKTsKKwkJCWlmICghYmxvY2tfb3V0KGIpKQorCQkJCXJldHVybiAwOwogCiAJCXdoaWxlIChjdHgtPmJsb2Nrb3V0KQogCQkJewpAQCAtNDA4LDcgKzQyOCw4IEBACiAJCWJyZWFrOwogCWNhc2UgQklPX0NfU0VUX01EOgogCQltZD1wdHI7Ci0JCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgtPm1kLCBtZCwgTlVMTCk7CisJCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoJmN0eC0+bWQsIG1kLCBOVUxMKSkKKwkJCXJldHVybiAwOwogCQliLT5pbml0PTE7CiAJCWJyZWFrOwogCWNhc2UgQklPX0NfR0VUX01EOgpAQCAtNDU1LDcgKzQ3Niw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzaWdfb3V0KEJJTyogYikKK3N0YXRpYyBpbnQgc2lnX291dChCSU8qIGIpCiAJewogCUJJT19PS19DVFggKmN0eDsKIAlFVlBfTURfQ1RYICptZDsKQEAgLTQ2Myw5ICs0ODQsMTAgQEAKIAljdHg9Yi0+cHRyOwogCW1kPSZjdHgtPm1kOwogCi0JaWYoY3R4LT5idWZfbGVuKyAyKiBtZC0+ZGlnZXN0LT5tZF9zaXplID4gT0tfQkxPQ0tfU0laRSkgcmV0dXJuOworCWlmKGN0eC0+YnVmX2xlbisgMiogbWQtPmRpZ2VzdC0+bWRfc2l6ZSA+IE9LX0JMT0NLX1NJWkUpIHJldHVybiAxOwogCi0JRVZQX0RpZ2VzdEluaXRfZXgobWQsIG1kLT5kaWdlc3QsIE5VTEwpOworCWlmICghRVZQX0RpZ2VzdEluaXRfZXgobWQsIG1kLT5kaWdlc3QsIE5VTEwpKQorCQlnb3RvIGJlcnI7CiAJLyogRklYTUU6IHRoZXJlJ3MgYWJzb2x1dGVseSBubyBndWFyYW50ZWUgdGhpcyBtYWtlcyBhbnkgc2Vuc2UgYXQgYWxsLAogCSAqIHBhcnRpY3VsYXJseSBub3cgRVZQX01EX0NUWCBoYXMgYmVlbiByZXN0cnVjdHVyZWQuCiAJICovCkBAIC00NzQsMTQgKzQ5NiwyMCBAQAogCWxvbmdzd2FwKCYoY3R4LT5idWZbY3R4LT5idWZfbGVuXSksIG1kLT5kaWdlc3QtPm1kX3NpemUpOwogCWN0eC0+YnVmX2xlbis9IG1kLT5kaWdlc3QtPm1kX3NpemU7CiAKLQlFVlBfRGlnZXN0VXBkYXRlKG1kLCBXRUxMS05PV04sIHN0cmxlbihXRUxMS05PV04pKTsKLQlFVlBfRGlnZXN0RmluYWxfZXgobWQsICYoY3R4LT5idWZbY3R4LT5idWZfbGVuXSksIE5VTEwpOworCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtZCwgV0VMTEtOT1dOLCBzdHJsZW4oV0VMTEtOT1dOKSkpCisJCWdvdG8gYmVycjsKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leChtZCwgJihjdHgtPmJ1ZltjdHgtPmJ1Zl9sZW5dKSwgTlVMTCkpCisJCWdvdG8gYmVycjsKIAljdHgtPmJ1Zl9sZW4rPSBtZC0+ZGlnZXN0LT5tZF9zaXplOwogCWN0eC0+YmxvY2tvdXQ9IDE7CiAJY3R4LT5zaWdpbz0gMDsKKwlyZXR1cm4gMTsKKwliZXJyOgorCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwlyZXR1cm4gMDsKIAl9CiAKLXN0YXRpYyB2b2lkIHNpZ19pbihCSU8qIGIpCitzdGF0aWMgaW50IHNpZ19pbihCSU8qIGIpCiAJewogCUJJT19PS19DVFggKmN0eDsKIAlFVlBfTURfQ1RYICptZDsKQEAgLTQ5MSwxNSArNTE5LDE4IEBACiAJY3R4PWItPnB0cjsKIAltZD0mY3R4LT5tZDsKIAotCWlmKChpbnQpKGN0eC0+YnVmX2xlbi1jdHgtPmJ1Zl9vZmYpIDwgMiptZC0+ZGlnZXN0LT5tZF9zaXplKSByZXR1cm47CisJaWYoKGludCkoY3R4LT5idWZfbGVuLWN0eC0+YnVmX29mZikgPCAyKm1kLT5kaWdlc3QtPm1kX3NpemUpIHJldHVybiAxOwogCi0JRVZQX0RpZ2VzdEluaXRfZXgobWQsIG1kLT5kaWdlc3QsIE5VTEwpOworCWlmICghRVZQX0RpZ2VzdEluaXRfZXgobWQsIG1kLT5kaWdlc3QsIE5VTEwpKQorCQlnb3RvIGJlcnI7CiAJbWVtY3B5KG1kLT5tZF9kYXRhLCAmKGN0eC0+YnVmW2N0eC0+YnVmX29mZl0pLCBtZC0+ZGlnZXN0LT5tZF9zaXplKTsKIAlsb25nc3dhcChtZC0+bWRfZGF0YSwgbWQtPmRpZ2VzdC0+bWRfc2l6ZSk7CiAJY3R4LT5idWZfb2ZmKz0gbWQtPmRpZ2VzdC0+bWRfc2l6ZTsKIAotCUVWUF9EaWdlc3RVcGRhdGUobWQsIFdFTExLTk9XTiwgc3RybGVuKFdFTExLTk9XTikpOwotCUVWUF9EaWdlc3RGaW5hbF9leChtZCwgdG1wLCBOVUxMKTsKKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWQsIFdFTExLTk9XTiwgc3RybGVuKFdFTExLTk9XTikpKQorCQlnb3RvIGJlcnI7CisJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgobWQsIHRtcCwgTlVMTCkpCisJCWdvdG8gYmVycjsKIAlyZXQ9IG1lbWNtcCgmKGN0eC0+YnVmW2N0eC0+YnVmX29mZl0pLCB0bXAsIG1kLT5kaWdlc3QtPm1kX3NpemUpID09IDA7CiAJY3R4LT5idWZfb2ZmKz0gbWQtPmRpZ2VzdC0+bWRfc2l6ZTsKIAlpZihyZXQgPT0gMSkKQEAgLTUxNiw5ICs1NDcsMTMgQEAKIAkJewogCQljdHgtPmNvbnQ9IDA7CiAJCX0KKwlyZXR1cm4gMTsKKwliZXJyOgorCUJJT19jbGVhcl9yZXRyeV9mbGFncyhiKTsKKwlyZXR1cm4gMDsKIAl9CiAKLXN0YXRpYyB2b2lkIGJsb2NrX291dChCSU8qIGIpCitzdGF0aWMgaW50IGJsb2NrX291dChCSU8qIGIpCiAJewogCUJJT19PS19DVFggKmN0eDsKIAlFVlBfTURfQ1RYICptZDsKQEAgLTUzMiwxMyArNTY3LDIwIEBACiAJY3R4LT5idWZbMV09KHVuc2lnbmVkIGNoYXIpKHRsPj4xNik7CiAJY3R4LT5idWZbMl09KHVuc2lnbmVkIGNoYXIpKHRsPj44KTsKIAljdHgtPmJ1ZlszXT0odW5zaWduZWQgY2hhcikodGwpOwotCUVWUF9EaWdlc3RVcGRhdGUobWQsICh1bnNpZ25lZCBjaGFyKikgJihjdHgtPmJ1ZltPS19CTE9DS19CTE9DS10pLCB0bCk7Ci0JRVZQX0RpZ2VzdEZpbmFsX2V4KG1kLCAmKGN0eC0+YnVmW2N0eC0+YnVmX2xlbl0pLCBOVUxMKTsKKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWQsCisJCSh1bnNpZ25lZCBjaGFyKikgJihjdHgtPmJ1ZltPS19CTE9DS19CTE9DS10pLCB0bCkpCisJCWdvdG8gYmVycjsKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leChtZCwgJihjdHgtPmJ1ZltjdHgtPmJ1Zl9sZW5dKSwgTlVMTCkpCisJCWdvdG8gYmVycjsKIAljdHgtPmJ1Zl9sZW4rPSBtZC0+ZGlnZXN0LT5tZF9zaXplOwogCWN0eC0+YmxvY2tvdXQ9IDE7CisJcmV0dXJuIDE7CisJYmVycjoKKwlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJcmV0dXJuIDA7CiAJfQogCi1zdGF0aWMgdm9pZCBibG9ja19pbihCSU8qIGIpCitzdGF0aWMgaW50IGJsb2NrX2luKEJJTyogYikKIAl7CiAJQklPX09LX0NUWCAqY3R4OwogCUVWUF9NRF9DVFggKm1kOwpAQCAtNTU0LDEwICs1OTYsMTMgQEAKIAl0bHw9Y3R4LT5idWZbMl07IHRsPDw9ODsKIAl0bHw9Y3R4LT5idWZbM107CiAKLQlpZiAoY3R4LT5idWZfbGVuIDwgdGwrIE9LX0JMT0NLX0JMT0NLKyBtZC0+ZGlnZXN0LT5tZF9zaXplKSByZXR1cm47CisJaWYgKGN0eC0+YnVmX2xlbiA8IHRsKyBPS19CTE9DS19CTE9DSysgbWQtPmRpZ2VzdC0+bWRfc2l6ZSkgcmV0dXJuIDE7CiAgCi0JRVZQX0RpZ2VzdFVwZGF0ZShtZCwgKHVuc2lnbmVkIGNoYXIqKSAmKGN0eC0+YnVmW09LX0JMT0NLX0JMT0NLXSksIHRsKTsKLQlFVlBfRGlnZXN0RmluYWxfZXgobWQsIHRtcCwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1kLAorCQkJKHVuc2lnbmVkIGNoYXIqKSAmKGN0eC0+YnVmW09LX0JMT0NLX0JMT0NLXSksIHRsKSkKKwkJZ290byBiZXJyOworCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KG1kLCB0bXAsIE5VTEwpKQorCQlnb3RvIGJlcnI7CiAJaWYobWVtY21wKCYoY3R4LT5idWZbdGwrIE9LX0JMT0NLX0JMT0NLXSksIHRtcCwgbWQtPmRpZ2VzdC0+bWRfc2l6ZSkgPT0gMCkKIAkJewogCQkvKiB0aGVyZSBtaWdodCBiZSBwYXJ0cyBmcm9tIG5leHQgYmxvY2sgbHVya2luZyBhcm91bmQgISAqLwpAQCAtNTcxLDUgKzYxNiw5IEBACiAJCXsKIAkJY3R4LT5jb250PSAwOwogCQl9CisJcmV0dXJuIDE7CisJYmVycjoKKwlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7CisJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2NfYWxsYy5jIGIvY3J5cHRvL2V2cC9jX2FsbGMuYwppbmRleCBjNWY5MjY4Li4yYTQ1ZDQzIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2NfYWxsYy5jCisrKyBiL2NyeXB0by9ldnAvY19hbGxjLmMKQEAgLTk4LDYgKzk4LDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKIAlFVlBfYWRkX2NpcGhlcihFVlBfcmM0KCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9yYzRfNDAoKSk7CisjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisJRVZQX2FkZF9jaXBoZXIoRVZQX3JjNF9obWFjX21kNSgpKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCkBAIC0xNjYsOSArMTY5LDkgQEAKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIxKCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7CiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwotI2lmIDAKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7Ci0jZW5kaWYKKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwogCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7CiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOwpAQCAtMTc3LDkgKzE4MCw4IEBACiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiMSgpKTsKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKLSNpZiAwCiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotI2VuZGlmCisJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2NtKCkpOwogCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiYWVzMTkyIik7CiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOwpAQCAtMTg4LDExICsxOTAsMTUgQEAKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIxKCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7CiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOwotI2lmIDAKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7Ci0jZW5kaWYKKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRzKCkpOwogCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7CisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExKCkpOworCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTEoKSk7CisjZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZGlnZXN0LmMgYi9jcnlwdG8vZXZwL2RpZ2VzdC5jCmluZGV4IDk4MmJhMmIuLjQ2N2U2YjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZGlnZXN0LmMKKysrIGIvY3J5cHRvL2V2cC9kaWdlc3QuYwpAQCAtMTE3LDYgKzExNywxMCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CiAjZW5kaWYKIAorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCisKIHZvaWQgRVZQX01EX0NUWF9pbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7CiAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKQEAgLTIyNSwxMiArMjI5LDI2IEBACiAJCX0KIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQogCQlyZXR1cm4gMTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkpCisJCXsKKwkJaWYgKEZJUFNfZGlnZXN0aW5pdChjdHgsIHR5cGUpKQorCQkJcmV0dXJuIDE7CisJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworCQljdHgtPm1kX2RhdGEgPSBOVUxMOworCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCiAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7CiAJfQogCiBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKIAl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworI2Vsc2UKIAlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOworI2VuZGlmCiAJfQogCiAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KQEAgLTI0NSw4ICsyNjMsMTAgQEAKIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwogaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCXJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwgbWQsIHNpemUpOworI2Vsc2UKIAlpbnQgcmV0OwotCiAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7CiAJaWYgKHNpemUgIT0gTlVMTCkKQEAgLTI1OCw2ICsyNzgsNyBAQAogCQl9CiAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CiAJcmV0dXJuIHJldDsKKyNlbmRpZgogCX0KIAogaW50IEVWUF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0IEVWUF9NRF9DVFggKmluKQpAQCAtMzUxLDYgKzM3Miw3IEBACiAvKiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAqLwogaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCiAJeworI2lmbmRlZiBPUEVOU1NMX0ZJUFMKIAkvKiBEb24ndCBhc3N1bWUgY3R4LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsCiAJICogYmVjYXVzZSBzb21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxpc2VkLgogCSAqLwpAQCAtMzYzLDYgKzM4NSw3IEBACiAJCU9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKIAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CiAJCX0KKyNlbmRpZgogCWlmIChjdHgtPnBjdHgpCiAJCUVWUF9QS0VZX0NUWF9mcmVlKGN0eC0+cGN0eCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCkBAIC0zNzEsNiArMzk0LDkgQEAKIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCiAJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwogI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJRklQU19tZF9jdHhfY2xlYW51cChjdHgpOworI2VuZGlmCiAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX2Flcy5jIGIvY3J5cHRvL2V2cC9lX2Flcy5jCmluZGV4IGJkNmMwYTMuLjFlNGFmMGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9hZXMuYworKysgYi9jcnlwdG8vZXZwL2VfYWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDU3ICs1Niw1MTEgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgogI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0KLXN0YXRpYyBpbnQgYWVzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpOworI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlICJtb2Rlc19sY2wuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QKIAl7CiAJQUVTX0tFWSBrczsKKwlibG9jazEyOF9mIGJsb2NrOworCXVuaW9uIHsKKwkJY2JjMTI4X2YgY2JjOworCQljdHIxMjhfZiBjdHI7CisJfSBzdHJlYW07CiAJfSBFVlBfQUVTX0tFWTsKIAotI2RlZmluZSBkYXRhKGN0eCkJRVZQX0NfREFUQShFVlBfQUVTX0tFWSxjdHgpCit0eXBlZGVmIHN0cnVjdAorCXsKKwlBRVNfS0VZIGtzOwkJLyogQUVTIGtleSBzY2hlZHVsZSB0byB1c2UgKi8KKwlpbnQga2V5X3NldDsJCS8qIFNldCBpZiBrZXkgaW5pdGlhbGlzZWQgKi8KKwlpbnQgaXZfc2V0OwkJLyogU2V0IGlmIGFuIGl2IGlzIHNldCAqLworCUdDTTEyOF9DT05URVhUIGdjbTsKKwl1bnNpZ25lZCBjaGFyICppdjsJLyogVGVtcG9yYXJ5IElWIHN0b3JlICovCisJaW50IGl2bGVuOwkJLyogSVYgbGVuZ3RoICovCisJaW50IHRhZ2xlbjsKKwlpbnQgaXZfZ2VuOwkJLyogSXQgaXMgT0sgdG8gZ2VuZXJhdGUgSVZzICovCisJaW50IHRsc19hYWRfbGVuOwkvKiBUTFMgQUFEIGxlbmd0aCAqLworCWN0cjEyOF9mIGN0cjsKKwl9IEVWUF9BRVNfR0NNX0NUWDsKIAotSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLQkJICAgICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCi0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0JCSAgICAgICBOVUxMKQotSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLQkJICAgICAgIE5JRF9hZXNfMTkyLCAxNiwgMjQsIDE2LCAxMjgsCi0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0JCSAgICAgICBOVUxMKQotSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMjU2LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLQkJICAgICAgIE5JRF9hZXNfMjU2LCAxNiwgMzIsIDE2LCAxMjgsCi0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0JCSAgICAgICBOVUxMKQordHlwZWRlZiBzdHJ1Y3QKKwl7CisJQUVTX0tFWSBrczEsIGtzMjsJLyogQUVTIGtleSBzY2hlZHVsZXMgdG8gdXNlICovCisJWFRTMTI4X0NPTlRFWFQgeHRzOworCXZvaWQgICAgICgqc3RyZWFtKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IGxlbmd0aCwKKwkJCWNvbnN0IEFFU19LRVkgKmtleTEsIGNvbnN0IEFFU19LRVkgKmtleTIsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSk7CisJfSBFVlBfQUVTX1hUU19DVFg7CiAKLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQordHlwZWRlZiBzdHJ1Y3QKKwl7CisJQUVTX0tFWSBrczsJCS8qIEFFUyBrZXkgc2NoZWR1bGUgdG8gdXNlICovCisJaW50IGtleV9zZXQ7CQkvKiBTZXQgaWYga2V5IGluaXRpYWxpc2VkICovCisJaW50IGl2X3NldDsJCS8qIFNldCBpZiBhbiBpdiBpcyBzZXQgKi8KKwlpbnQgdGFnX3NldDsJCS8qIFNldCBpZiB0YWcgaXMgdmFsaWQgKi8KKwlpbnQgbGVuX3NldDsJCS8qIFNldCBpZiBtZXNzYWdlIGxlbmd0aCBzZXQgKi8KKwlpbnQgTCwgTTsJCS8qIEwgYW5kIE0gcGFyYW1ldGVycyBmcm9tIFJGQzM2MTAgKi8KKwlDQ00xMjhfQ09OVEVYVCBjY207CisJY2NtMTI4X2Ygc3RyOworCX0gRVZQX0FFU19DQ01fQ1RYOwogCi1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEpCisjZGVmaW5lIE1BWEJJVENIVU5LCSgoc2l6ZV90KTE8PChzaXplb2Yoc2l6ZV90KSo4LTQpKQogCi1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgpCi1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgpCisjaWZkZWYgVlBBRVNfQVNNCitpbnQgdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGludCBiaXRzLAorCQkJQUVTX0tFWSAqa2V5KTsKK2ludCB2cGFlc19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpOworCit2b2lkIHZwYWVzX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCWNvbnN0IEFFU19LRVkgKmtleSk7Cit2b2lkIHZwYWVzX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCWNvbnN0IEFFU19LRVkgKmtleSk7CisKK3ZvaWQgdnBhZXNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLAorCQkJY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJdW5zaWduZWQgY2hhciAqaXZlYywgaW50IGVuYyk7CisjZW5kaWYKKyNpZmRlZiBCU0FFU19BU00KK3ZvaWQgYnNhZXNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCBlbmMpOwordm9pZCBic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2Nrcyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciBpdmVjWzE2XSk7Cit2b2lkIGJzYWVzX3h0c19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3QgQUVTX0tFWSAqa2V5MSwKKwkJCWNvbnN0IEFFU19LRVkgKmtleTIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXZbMTZdKTsKK3ZvaWQgYnNhZXNfeHRzX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCBBRVNfS0VZICprZXkxLAorCQkJY29uc3QgQUVTX0tFWSAqa2V5MiwgY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0pOworI2VuZGlmCisjaWZkZWYgQUVTX0NUUl9BU00KK3ZvaWQgQUVTX2N0cjMyX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBibG9ja3MsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgaXZlY1tBRVNfQkxPQ0tfU0laRV0pOworI2VuZGlmCisjaWZkZWYgQUVTX1hUU19BU00KK3ZvaWQgQUVTX3h0c19lbmNyeXB0KGNvbnN0IGNoYXIgKmlucCxjaGFyICpvdXQsc2l6ZV90IGxlbiwKKwkJCWNvbnN0IEFFU19LRVkgKmtleTEsIGNvbnN0IEFFU19LRVkgKmtleTIsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSk7Cit2b2lkIEFFU194dHNfZGVjcnlwdChjb25zdCBjaGFyICppbnAsY2hhciAqb3V0LHNpemVfdCBsZW4sCisJCQljb25zdCBBRVNfS0VZICprZXkxLCBjb25zdCBBRVNfS0VZICprZXkyLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0pOworI2VuZGlmCisKKyNpZglkZWZpbmVkKEFFU19BU00pICYmICFkZWZpbmVkKEkzODZfT05MWSkgJiYJKCAgXAorCSgoZGVmaW5lZChfX2kzODYpCXx8IGRlZmluZWQoX19pMzg2X18pCXx8IFwKKwkgIGRlZmluZWQoX01fSVg4NikpICYmIGRlZmluZWQoT1BFTlNTTF9JQTMyX1NTRTIpKXx8IFwKKwlkZWZpbmVkKF9feDg2XzY0KQl8fCBkZWZpbmVkKF9feDg2XzY0X18pCXx8IFwKKwlkZWZpbmVkKF9NX0FNRDY0KQl8fCBkZWZpbmVkKF9NX1g2NCkJfHwgXAorCWRlZmluZWQoX19JTlRFTF9fKQkJCQkpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisKKyNpZmRlZiBWUEFFU19BU00KKyNkZWZpbmUgVlBBRVNfQ0FQQUJMRQkoT1BFTlNTTF9pYTMyY2FwX1BbMV0mKDE8PCg0MS0zMikpKQorI2VuZGlmCisjaWZkZWYgQlNBRVNfQVNNCisjZGVmaW5lIEJTQUVTX0NBUEFCTEUJVlBBRVNfQ0FQQUJMRQorI2VuZGlmCisvKgorICogQUVTLU5JIHNlY3Rpb24KKyAqLworI2RlZmluZQlBRVNOSV9DQVBBQkxFCShPUEVOU1NMX2lhMzJjYXBfUFsxXSYoMTw8KDU3LTMyKSkpCisKK2ludCBhZXNuaV9zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCisJCQlBRVNfS0VZICprZXkpOworaW50IGFlc25pX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBpbnQgYml0cywKKwkJCUFFU19LRVkgKmtleSk7CisKK3ZvaWQgYWVzbmlfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJY29uc3QgQUVTX0tFWSAqa2V5KTsKK3ZvaWQgYWVzbmlfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJY29uc3QgQUVTX0tFWSAqa2V5KTsKKwordm9pZCBhZXNuaV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsCisJCQljb25zdCBBRVNfS0VZICprZXksCisJCQlpbnQgZW5jKTsKK3ZvaWQgYWVzbmlfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLAorCQkJY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJdW5zaWduZWQgY2hhciAqaXZlYywgaW50IGVuYyk7CisKK3ZvaWQgYWVzbmlfY3RyMzJfZW5jcnlwdF9ibG9ja3MoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgYmxvY2tzLAorCQkJY29uc3Qgdm9pZCAqa2V5LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXZlYyk7CisKK3ZvaWQgYWVzbmlfeHRzX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLAorCQkJY29uc3QgQUVTX0tFWSAqa2V5MSwgY29uc3QgQUVTX0tFWSAqa2V5MiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgaXZbMTZdKTsKKwordm9pZCBhZXNuaV94dHNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsCisJCQljb25zdCBBRVNfS0VZICprZXkxLCBjb25zdCBBRVNfS0VZICprZXkyLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0pOworCit2b2lkIGFlc25pX2NjbTY0X2VuY3J5cHRfYmxvY2tzIChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBibG9ja3MsCisJCQljb25zdCB2b2lkICprZXksCisJCQljb25zdCB1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLAorCQkJdW5zaWduZWQgY2hhciBjbWFjWzE2XSk7CisKK3ZvaWQgYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3MgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorCQkJdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGJsb2NrcywKKwkJCWNvbnN0IHZvaWQgKmtleSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sCisJCQl1bnNpZ25lZCBjaGFyIGNtYWNbMTZdKTsKKworc3RhdGljIGludCBhZXNuaV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorCXsKKwlpbnQgcmV0LCBtb2RlOworCUVWUF9BRVNfS0VZICpkYXQgPSAoRVZQX0FFU19LRVkgKiljdHgtPmNpcGhlcl9kYXRhOworCisJbW9kZSA9IGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX01PREU7CisJaWYgKChtb2RlID09IEVWUF9DSVBIX0VDQl9NT0RFIHx8IG1vZGUgPT0gRVZQX0NJUEhfQ0JDX01PREUpCisJICAgICYmICFlbmMpCisJCXsgCisJCXJldCA9IGFlc25pX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbio4LCBjdHgtPmNpcGhlcl9kYXRhKTsKKwkJZGF0LT5ibG9jawk9IChibG9jazEyOF9mKWFlc25pX2RlY3J5cHQ7CisJCWRhdC0+c3RyZWFtLmNiYwk9IG1vZGU9PUVWUF9DSVBIX0NCQ19NT0RFID8KKwkJCQkJKGNiYzEyOF9mKWFlc25pX2NiY19lbmNyeXB0IDoKKwkJCQkJTlVMTDsKKwkJfQorCWVsc2UJeworCQlyZXQgPSBhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4qOCwgY3R4LT5jaXBoZXJfZGF0YSk7CisJCWRhdC0+YmxvY2sJPSAoYmxvY2sxMjhfZilhZXNuaV9lbmNyeXB0OworCQlpZiAobW9kZT09RVZQX0NJUEhfQ0JDX01PREUpCisJCQlkYXQtPnN0cmVhbS5jYmMJPSAoY2JjMTI4X2YpYWVzbmlfY2JjX2VuY3J5cHQ7CisJCWVsc2UgaWYgKG1vZGU9PUVWUF9DSVBIX0NUUl9NT0RFKQorCQkJZGF0LT5zdHJlYW0uY3RyID0gKGN0cjEyOF9mKWFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzOworCQllbHNlCisJCQlkYXQtPnN0cmVhbS5jYmMgPSBOVUxMOworCQl9CisKKwlpZihyZXQgPCAwKQorCQl7CisJCUVWUGVycihFVlBfRl9BRVNOSV9JTklUX0tFWSxFVlBfUl9BRVNfS0VZX1NFVFVQX0ZBSUxFRCk7CisJCXJldHVybiAwOworCQl9CisKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgYWVzbmlfY2JjX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKK3sKKwlhZXNuaV9jYmNfZW5jcnlwdChpbixvdXQsbGVuLGN0eC0+Y2lwaGVyX2RhdGEsY3R4LT5pdixjdHgtPmVuY3J5cHQpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWVzbmlfZWNiX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QJYmwgPSBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZTsKKworCWlmIChsZW48YmwpCXJldHVybiAxOworCisJYWVzbmlfZWNiX2VuY3J5cHQoaW4sb3V0LGxlbixjdHgtPmNpcGhlcl9kYXRhLGN0eC0+ZW5jcnlwdCk7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBhZXNuaV9vZmJfY2lwaGVyIGFlc19vZmJfY2lwaGVyCitzdGF0aWMgaW50IGFlc25pX29mYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sc2l6ZV90IGxlbik7CisKKyNkZWZpbmUgYWVzbmlfY2ZiX2NpcGhlciBhZXNfY2ZiX2NpcGhlcgorc3RhdGljIGludCBhZXNuaV9jZmJfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsdW5zaWduZWQgY2hhciAqb3V0LAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHNpemVfdCBsZW4pOworCisjZGVmaW5lIGFlc25pX2NmYjhfY2lwaGVyIGFlc19jZmI4X2NpcGhlcgorc3RhdGljIGludCBhZXNuaV9jZmI4X2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbixzaXplX3QgbGVuKTsKKworI2RlZmluZSBhZXNuaV9jZmIxX2NpcGhlciBhZXNfY2ZiMV9jaXBoZXIKK3N0YXRpYyBpbnQgYWVzbmlfY2ZiMV9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sc2l6ZV90IGxlbik7CisKKyNkZWZpbmUgYWVzbmlfY3RyX2NpcGhlciBhZXNfY3RyX2NpcGhlcgorc3RhdGljIGludCBhZXNuaV9jdHJfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworCitzdGF0aWMgaW50IGFlc25pX2djbV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKwl7CisJRVZQX0FFU19HQ01fQ1RYICpnY3R4ID0gY3R4LT5jaXBoZXJfZGF0YTsKKwlpZiAoIWl2ICYmICFrZXkpCisJCXJldHVybiAxOworCWlmIChrZXkpCisJCXsKKwkJYWVzbmlfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogOCwgJmdjdHgtPmtzKTsKKwkJQ1JZUFRPX2djbTEyOF9pbml0KCZnY3R4LT5nY20sICZnY3R4LT5rcywKKwkJCQkoYmxvY2sxMjhfZilhZXNuaV9lbmNyeXB0KTsKKwkJZ2N0eC0+Y3RyID0gKGN0cjEyOF9mKWFlc25pX2N0cjMyX2VuY3J5cHRfYmxvY2tzOworCQkvKiBJZiB3ZSBoYXZlIGFuIGl2IGNhbiBzZXQgaXQgZGlyZWN0bHksIG90aGVyd2lzZSB1c2UKKwkJICogc2F2ZWQgSVYuCisJCSAqLworCQlpZiAoaXYgPT0gTlVMTCAmJiBnY3R4LT5pdl9zZXQpCisJCQlpdiA9IGdjdHgtPml2OworCQlpZiAoaXYpCisJCQl7CisJCQlDUllQVE9fZ2NtMTI4X3NldGl2KCZnY3R4LT5nY20sIGl2LCBnY3R4LT5pdmxlbik7CisJCQlnY3R4LT5pdl9zZXQgPSAxOworCQkJfQorCQlnY3R4LT5rZXlfc2V0ID0gMTsKKwkJfQorCWVsc2UKKwkJeworCQkvKiBJZiBrZXkgc2V0IHVzZSBJViwgb3RoZXJ3aXNlIGNvcHkgKi8KKwkJaWYgKGdjdHgtPmtleV9zZXQpCisJCQlDUllQVE9fZ2NtMTI4X3NldGl2KCZnY3R4LT5nY20sIGl2LCBnY3R4LT5pdmxlbik7CisJCWVsc2UKKwkJCW1lbWNweShnY3R4LT5pdiwgaXYsIGdjdHgtPml2bGVuKTsKKwkJZ2N0eC0+aXZfc2V0ID0gMTsKKwkJZ2N0eC0+aXZfZ2VuID0gMDsKKwkJfQorCXJldHVybiAxOworCX0KKworI2RlZmluZSBhZXNuaV9nY21fY2lwaGVyIGFlc19nY21fY2lwaGVyCitzdGF0aWMgaW50IGFlc25pX2djbV9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CisKK3N0YXRpYyBpbnQgYWVzbmlfeHRzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorCXsKKwlFVlBfQUVTX1hUU19DVFggKnhjdHggPSBjdHgtPmNpcGhlcl9kYXRhOworCWlmICghaXYgJiYgIWtleSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoa2V5KQorCQl7CisJCS8qIGtleV9sZW4gaXMgdHdvIEFFUyBrZXlzICovCisJCWlmIChlbmMpCisJCQl7CisJCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MxKTsKKwkJCXhjdHgtPnh0cy5ibG9jazEgPSAoYmxvY2sxMjhfZilhZXNuaV9lbmNyeXB0OworCQkJeGN0eC0+c3RyZWFtID0gYWVzbmlfeHRzX2VuY3J5cHQ7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCWFlc25pX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEpOworCQkJeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKWFlc25pX2RlY3J5cHQ7CisJCQl4Y3R4LT5zdHJlYW0gPSBhZXNuaV94dHNfZGVjcnlwdDsKKwkJCX0KKworCQlhZXNuaV9zZXRfZW5jcnlwdF9rZXkoa2V5ICsgY3R4LT5rZXlfbGVuLzIsCisJCQkJCQljdHgtPmtleV9sZW4gKiA0LCAmeGN0eC0+a3MyKTsKKwkJeGN0eC0+eHRzLmJsb2NrMiA9IChibG9jazEyOF9mKWFlc25pX2VuY3J5cHQ7CisKKwkJeGN0eC0+eHRzLmtleTEgPSAmeGN0eC0+a3MxOworCQl9CisKKwlpZiAoaXYpCisJCXsKKwkJeGN0eC0+eHRzLmtleTIgPSAmeGN0eC0+a3MyOworCQltZW1jcHkoY3R4LT5pdiwgaXYsIDE2KTsKKwkJfQorCisJcmV0dXJuIDE7CisJfQorCisjZGVmaW5lIGFlc25pX3h0c19jaXBoZXIgYWVzX3h0c19jaXBoZXIKK3N0YXRpYyBpbnQgYWVzbmlfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKKworc3RhdGljIGludCBhZXNuaV9jY21faW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisJeworCUVWUF9BRVNfQ0NNX0NUWCAqY2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJaWYgKCFpdiAmJiAha2V5KQorCQlyZXR1cm4gMTsKKwlpZiAoa2V5KQorCQl7CisJCWFlc25pX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsICZjY3R4LT5rcyk7CisJCUNSWVBUT19jY20xMjhfaW5pdCgmY2N0eC0+Y2NtLCBjY3R4LT5NLCBjY3R4LT5MLAorCQkJCQkmY2N0eC0+a3MsIChibG9jazEyOF9mKWFlc25pX2VuY3J5cHQpOworCQljY3R4LT5zdHIgPSBlbmM/KGNjbTEyOF9mKWFlc25pX2NjbTY0X2VuY3J5cHRfYmxvY2tzIDoKKwkJCQkoY2NtMTI4X2YpYWVzbmlfY2NtNjRfZGVjcnlwdF9ibG9ja3M7CisJCWNjdHgtPmtleV9zZXQgPSAxOworCQl9CisJaWYgKGl2KQorCQl7CisJCW1lbWNweShjdHgtPml2LCBpdiwgMTUgLSBjY3R4LT5MKTsKKwkJY2N0eC0+aXZfc2V0ID0gMTsKKwkJfQorCXJldHVybiAxOworCX0KKworI2RlZmluZSBhZXNuaV9jY21fY2lwaGVyIGFlc19jY21fY2lwaGVyCitzdGF0aWMgaW50IGFlc25pX2NjbV9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CisKKyNkZWZpbmUgQkxPQ0tfQ0lQSEVSX2dlbmVyaWMobmlkLGtleWxlbixibG9ja3NpemUsaXZsZW4sbm1vZGUsbW9kZSxNT0RFLGZsYWdzKSBcCitzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNuaV8jI2tleWxlbiMjXyMjbW9kZSA9IHsgXAorCW5pZCMjXyMja2V5bGVuIyNfIyNubW9kZSxibG9ja3NpemUsa2V5bGVuLzgsaXZsZW4sIFwKKwlmbGFnc3xFVlBfQ0lQSF8jI01PREUjI19NT0RFLAlcCisJYWVzbmlfaW5pdF9rZXksCQkJXAorCWFlc25pXyMjbW9kZSMjX2NpcGhlciwJCVwKKwlOVUxMLAkJCQlcCisJc2l6ZW9mKEVWUF9BRVNfS0VZKSwJCVwKKwlOVUxMLE5VTEwsTlVMTCxOVUxMIH07IFwKK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGFlc18jI2tleWxlbiMjXyMjbW9kZSA9IHsgXAorCW5pZCMjXyMja2V5bGVuIyNfIyNubW9kZSxibG9ja3NpemUsCVwKKwlrZXlsZW4vOCxpdmxlbiwgXAorCWZsYWdzfEVWUF9DSVBIXyMjTU9ERSMjX01PREUsCVwKKwlhZXNfaW5pdF9rZXksCQkJXAorCWFlc18jI21vZGUjI19jaXBoZXIsCQlcCisJTlVMTCwJCQkJXAorCXNpemVvZihFVlBfQUVTX0tFWSksCQlcCisJTlVMTCxOVUxMLE5VTEwsTlVMTCB9OyBcCitjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXyMja2V5bGVuIyNfIyNtb2RlKHZvaWQpIFwKK3sgcmV0dXJuIEFFU05JX0NBUEFCTEU/JmFlc25pXyMja2V5bGVuIyNfIyNtb2RlOiZhZXNfIyNrZXlsZW4jI18jI21vZGU7IH0KKworI2RlZmluZSBCTE9DS19DSVBIRVJfY3VzdG9tKG5pZCxrZXlsZW4sYmxvY2tzaXplLGl2bGVuLG1vZGUsTU9ERSxmbGFncykgXAorc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVzbmlfIyNrZXlsZW4jI18jI21vZGUgPSB7IFwKKwluaWQjI18jI2tleWxlbiMjXyMjbW9kZSxibG9ja3NpemUsIFwKKwkoRVZQX0NJUEhfIyNNT0RFIyNfTU9ERT09RVZQX0NJUEhfWFRTX01PREU/MjoxKSprZXlsZW4vOCwgaXZsZW4sIFwKKwlmbGFnc3xFVlBfQ0lQSF8jI01PREUjI19NT0RFLAlcCisJYWVzbmlfIyNtb2RlIyNfaW5pdF9rZXksCVwKKwlhZXNuaV8jI21vZGUjI19jaXBoZXIsCQlcCisJYWVzXyMjbW9kZSMjX2NsZWFudXAsCQlcCisJc2l6ZW9mKEVWUF9BRVNfIyNNT0RFIyNfQ1RYKSwJXAorCU5VTEwsTlVMTCxhZXNfIyNtb2RlIyNfY3RybCxOVUxMIH07IFwKK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGFlc18jI2tleWxlbiMjXyMjbW9kZSA9IHsgXAorCW5pZCMjXyMja2V5bGVuIyNfIyNtb2RlLGJsb2Nrc2l6ZSwgXAorCShFVlBfQ0lQSF8jI01PREUjI19NT0RFPT1FVlBfQ0lQSF9YVFNfTU9ERT8yOjEpKmtleWxlbi84LCBpdmxlbiwgXAorCWZsYWdzfEVWUF9DSVBIXyMjTU9ERSMjX01PREUsCVwKKwlhZXNfIyNtb2RlIyNfaW5pdF9rZXksCQlcCisJYWVzXyMjbW9kZSMjX2NpcGhlciwJCVwKKwlhZXNfIyNtb2RlIyNfY2xlYW51cCwJCVwKKwlzaXplb2YoRVZQX0FFU18jI01PREUjI19DVFgpLAlcCisJTlVMTCxOVUxMLGFlc18jI21vZGUjI19jdHJsLE5VTEwgfTsgXAorY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18jI2tleWxlbiMjXyMjbW9kZSh2b2lkKSBcCit7IHJldHVybiBBRVNOSV9DQVBBQkxFPyZhZXNuaV8jI2tleWxlbiMjXyMjbW9kZTomYWVzXyMja2V5bGVuIyNfIyNtb2RlOyB9CisKKyNlbHNlCisKKyNkZWZpbmUgQkxPQ0tfQ0lQSEVSX2dlbmVyaWMobmlkLGtleWxlbixibG9ja3NpemUsaXZsZW4sbm1vZGUsbW9kZSxNT0RFLGZsYWdzKSBcCitzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfIyNrZXlsZW4jI18jI21vZGUgPSB7IFwKKwluaWQjI18jI2tleWxlbiMjXyMjbm1vZGUsYmxvY2tzaXplLGtleWxlbi84LGl2bGVuLCBcCisJZmxhZ3N8RVZQX0NJUEhfIyNNT0RFIyNfTU9ERSwJXAorCWFlc19pbml0X2tleSwJCQlcCisJYWVzXyMjbW9kZSMjX2NpcGhlciwJCVwKKwlOVUxMLAkJCQlcCisJc2l6ZW9mKEVWUF9BRVNfS0VZKSwJCVwKKwlOVUxMLE5VTEwsTlVMTCxOVUxMIH07IFwKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfIyNrZXlsZW4jI18jI21vZGUodm9pZCkgXAoreyByZXR1cm4gJmFlc18jI2tleWxlbiMjXyMjbW9kZTsgfQorCisjZGVmaW5lIEJMT0NLX0NJUEhFUl9jdXN0b20obmlkLGtleWxlbixibG9ja3NpemUsaXZsZW4sbW9kZSxNT0RFLGZsYWdzKSBcCitzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfIyNrZXlsZW4jI18jI21vZGUgPSB7IFwKKwluaWQjI18jI2tleWxlbiMjXyMjbW9kZSxibG9ja3NpemUsIFwKKwkoRVZQX0NJUEhfIyNNT0RFIyNfTU9ERT09RVZQX0NJUEhfWFRTX01PREU/MjoxKSprZXlsZW4vOCwgaXZsZW4sIFwKKwlmbGFnc3xFVlBfQ0lQSF8jI01PREUjI19NT0RFLAlcCisJYWVzXyMjbW9kZSMjX2luaXRfa2V5LAkJXAorCWFlc18jI21vZGUjI19jaXBoZXIsCQlcCisJYWVzXyMjbW9kZSMjX2NsZWFudXAsCQlcCisJc2l6ZW9mKEVWUF9BRVNfIyNNT0RFIyNfQ1RYKSwJXAorCU5VTEwsTlVMTCxhZXNfIyNtb2RlIyNfY3RybCxOVUxMIH07IFwKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfIyNrZXlsZW4jI18jI21vZGUodm9pZCkgXAoreyByZXR1cm4gJmFlc18jI2tleWxlbiMjXyMjbW9kZTsgfQorI2VuZGlmCisKKyNkZWZpbmUgQkxPQ0tfQ0lQSEVSX2dlbmVyaWNfcGFjayhuaWQsa2V5bGVuLGZsYWdzKQkJXAorCUJMT0NLX0NJUEhFUl9nZW5lcmljKG5pZCxrZXlsZW4sMTYsMTYsY2JjLGNiYyxDQkMsZmxhZ3N8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCVwKKwlCTE9DS19DSVBIRVJfZ2VuZXJpYyhuaWQsa2V5bGVuLDE2LDAsZWNiLGVjYixFQ0IsZmxhZ3N8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCVwKKwlCTE9DS19DSVBIRVJfZ2VuZXJpYyhuaWQsa2V5bGVuLDEsMTYsb2ZiMTI4LG9mYixPRkIsZmxhZ3N8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCVwKKwlCTE9DS19DSVBIRVJfZ2VuZXJpYyhuaWQsa2V5bGVuLDEsMTYsY2ZiMTI4LGNmYixDRkIsZmxhZ3N8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCVwKKwlCTE9DS19DSVBIRVJfZ2VuZXJpYyhuaWQsa2V5bGVuLDEsMTYsY2ZiMSxjZmIxLENGQixmbGFncykJXAorCUJMT0NLX0NJUEhFUl9nZW5lcmljKG5pZCxrZXlsZW4sMSwxNixjZmI4LGNmYjgsQ0ZCLGZsYWdzKQlcCisJQkxPQ0tfQ0lQSEVSX2dlbmVyaWMobmlkLGtleWxlbiwxLDE2LGN0cixjdHIsQ1RSLGZsYWdzKQogCiBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQogCXsKLQlpbnQgcmV0OworCWludCByZXQsIG1vZGU7CisJRVZQX0FFU19LRVkgKmRhdCA9IChFVlBfQUVTX0tFWSAqKWN0eC0+Y2lwaGVyX2RhdGE7CiAKLQlpZiAoKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX01PREUpID09IEVWUF9DSVBIX0NGQl9NT0RFCi0JICAgIHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9NT0RFKSA9PSBFVlBfQ0lQSF9PRkJfTU9ERQotCSAgICB8fCBlbmMpIAotCQlyZXQ9QUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsIGN0eC0+Y2lwaGVyX2RhdGEpOworCW1vZGUgPSBjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9NT0RFOworCWlmICgobW9kZSA9PSBFVlBfQ0lQSF9FQ0JfTU9ERSB8fCBtb2RlID09IEVWUF9DSVBIX0NCQ19NT0RFKQorCSAgICAmJiAhZW5jKQorI2lmZGVmIEJTQUVTX0NBUEFCTEUKKwkgICAgaWYgKEJTQUVTX0NBUEFCTEUgJiYgbW9kZT09RVZQX0NJUEhfQ0JDX01PREUpCisJCXsKKwkJcmV0ID0gQUVTX3NldF9kZWNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQ7CisJCWRhdC0+c3RyZWFtLmNiYwk9IChjYmMxMjhfZilic2Flc19jYmNfZW5jcnlwdDsKKwkJfQorCSAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBWUEFFU19DQVBBQkxFCisJICAgIGlmIChWUEFFU19DQVBBQkxFKQorCQl7CisJCXJldCA9IHZwYWVzX3NldF9kZWNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpdnBhZXNfZGVjcnlwdDsKKwkJZGF0LT5zdHJlYW0uY2JjCT0gbW9kZT09RVZQX0NJUEhfQ0JDX01PREUgPworCQkJCQkoY2JjMTI4X2YpdnBhZXNfY2JjX2VuY3J5cHQgOgorCQkJCQlOVUxMOworCQl9CisJICAgIGVsc2UKKyNlbmRpZgorCQl7CisJCXJldCA9IEFFU19zZXRfZGVjcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzKTsKKwkJZGF0LT5ibG9jawk9IChibG9jazEyOF9mKUFFU19kZWNyeXB0OworCQlkYXQtPnN0cmVhbS5jYmMJPSBtb2RlPT1FVlBfQ0lQSF9DQkNfTU9ERSA/CisJCQkJCShjYmMxMjhfZilBRVNfY2JjX2VuY3J5cHQgOgorCQkJCQlOVUxMOworCQl9CiAJZWxzZQotCQlyZXQ9QUVTX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDgsIGN0eC0+Y2lwaGVyX2RhdGEpOworI2lmZGVmIEJTQUVTX0NBUEFCTEUKKwkgICAgaWYgKEJTQUVTX0NBUEFCTEUgJiYgbW9kZT09RVZQX0NJUEhfQ1RSX01PREUpCisJCXsKKwkJcmV0ID0gQUVTX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQ7CisJCWRhdC0+c3RyZWFtLmN0cgk9IChjdHIxMjhfZilic2Flc19jdHIzMl9lbmNyeXB0X2Jsb2NrczsKKwkJfQorCSAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBWUEFFU19DQVBBQkxFCisJICAgIGlmIChWUEFFU19DQVBBQkxFKQorCQl7CisJCXJldCA9IHZwYWVzX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmRhdC0+a3MpOworCQlkYXQtPmJsb2NrCT0gKGJsb2NrMTI4X2YpdnBhZXNfZW5jcnlwdDsKKwkJZGF0LT5zdHJlYW0uY2JjCT0gbW9kZT09RVZQX0NJUEhfQ0JDX01PREUgPworCQkJCQkoY2JjMTI4X2YpdnBhZXNfY2JjX2VuY3J5cHQgOgorCQkJCQlOVUxMOworCQl9CisJICAgIGVsc2UKKyNlbmRpZgorCQl7CisJCXJldCA9IEFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZkYXQtPmtzKTsKKwkJZGF0LT5ibG9jawk9IChibG9jazEyOF9mKUFFU19lbmNyeXB0OworCQlkYXQtPnN0cmVhbS5jYmMJPSBtb2RlPT1FVlBfQ0lQSF9DQkNfTU9ERSA/CisJCQkJCShjYmMxMjhfZilBRVNfY2JjX2VuY3J5cHQgOgorCQkJCQlOVUxMOworI2lmZGVmIEFFU19DVFJfQVNNCisJCWlmIChtb2RlPT1FVlBfQ0lQSF9DVFJfTU9ERSkKKwkJCWRhdC0+c3RyZWFtLmN0ciA9IChjdHIxMjhfZilBRVNfY3RyMzJfZW5jcnlwdDsKKyNlbmRpZgorCQl9CiAKIAlpZihyZXQgPCAwKQogCQl7CkBAIC0xMTcsNCArNTcxLDc0MyBAQAogCXJldHVybiAxOwogCX0KIAorc3RhdGljIGludCBhZXNfY2JjX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKK3sKKwlFVlBfQUVTX0tFWSAqZGF0ID0gKEVWUF9BRVNfS0VZICopY3R4LT5jaXBoZXJfZGF0YTsKKworCWlmIChkYXQtPnN0cmVhbS5jYmMpCisJCSgqZGF0LT5zdHJlYW0uY2JjKShpbixvdXQsbGVuLCZkYXQtPmtzLGN0eC0+aXYsY3R4LT5lbmNyeXB0KTsKKwllbHNlIGlmIChjdHgtPmVuY3J5cHQpCisJCUNSWVBUT19jYmMxMjhfZW5jcnlwdChpbixvdXQsbGVuLCZkYXQtPmtzLGN0eC0+aXYsZGF0LT5ibG9jayk7CisJZWxzZQorCQlDUllQVE9fY2JjMTI4X2VuY3J5cHQoaW4sb3V0LGxlbiwmZGF0LT5rcyxjdHgtPml2LGRhdC0+YmxvY2spOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWVzX2VjYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pCit7CisJc2l6ZV90CWJsID0gY3R4LT5jaXBoZXItPmJsb2NrX3NpemU7CisJc2l6ZV90CWk7CisJRVZQX0FFU19LRVkgKmRhdCA9IChFVlBfQUVTX0tFWSAqKWN0eC0+Y2lwaGVyX2RhdGE7CisKKwlpZiAobGVuPGJsKQlyZXR1cm4gMTsKKworCWZvciAoaT0wLGxlbi09Ymw7aTw9bGVuO2krPWJsKQorCQkoKmRhdC0+YmxvY2spKGluK2ksb3V0K2ksJmRhdC0+a3MpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWVzX29mYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sc2l6ZV90IGxlbikKK3sKKwlFVlBfQUVTX0tFWSAqZGF0ID0gKEVWUF9BRVNfS0VZICopY3R4LT5jaXBoZXJfZGF0YTsKKworCUNSWVBUT19vZmIxMjhfZW5jcnlwdChpbixvdXQsbGVuLCZkYXQtPmtzLAorCQkJY3R4LT5pdiwmY3R4LT5udW0sZGF0LT5ibG9jayk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWVzX2NmYl9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sc2l6ZV90IGxlbikKK3sKKwlFVlBfQUVTX0tFWSAqZGF0ID0gKEVWUF9BRVNfS0VZICopY3R4LT5jaXBoZXJfZGF0YTsKKworCUNSWVBUT19jZmIxMjhfZW5jcnlwdChpbixvdXQsbGVuLCZkYXQtPmtzLAorCQkJY3R4LT5pdiwmY3R4LT5udW0sY3R4LT5lbmNyeXB0LGRhdC0+YmxvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFlc19jZmI4X2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbixzaXplX3QgbGVuKQoreworCUVWUF9BRVNfS0VZICpkYXQgPSAoRVZQX0FFU19LRVkgKiljdHgtPmNpcGhlcl9kYXRhOworCisJQ1JZUFRPX2NmYjEyOF84X2VuY3J5cHQoaW4sb3V0LGxlbiwmZGF0LT5rcywKKwkJCWN0eC0+aXYsJmN0eC0+bnVtLGN0eC0+ZW5jcnlwdCxkYXQtPmJsb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZXNfY2ZiMV9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sc2l6ZV90IGxlbikKK3sKKwlFVlBfQUVTX0tFWSAqZGF0ID0gKEVWUF9BRVNfS0VZICopY3R4LT5jaXBoZXJfZGF0YTsKKworCWlmIChjdHgtPmZsYWdzJkVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpIHsKKwkJQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQoaW4sb3V0LGxlbiwmZGF0LT5rcywKKwkJCWN0eC0+aXYsJmN0eC0+bnVtLGN0eC0+ZW5jcnlwdCxkYXQtPmJsb2NrKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGxlbj49TUFYQklUQ0hVTkspIHsKKwkJQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQoaW4sb3V0LE1BWEJJVENIVU5LKjgsJmRhdC0+a3MsCisJCQljdHgtPml2LCZjdHgtPm51bSxjdHgtPmVuY3J5cHQsZGF0LT5ibG9jayk7CisJCWxlbi09TUFYQklUQ0hVTks7CisJfQorCWlmIChsZW4pCisJCUNSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGluLG91dCxsZW4qOCwmZGF0LT5rcywKKwkJCWN0eC0+aXYsJmN0eC0+bnVtLGN0eC0+ZW5jcnlwdCxkYXQtPmJsb2NrKTsKKwkKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZXNfY3RyX2NpcGhlciAoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtID0gY3R4LT5udW07CisJRVZQX0FFU19LRVkgKmRhdCA9IChFVlBfQUVTX0tFWSAqKWN0eC0+Y2lwaGVyX2RhdGE7CisKKwlpZiAoZGF0LT5zdHJlYW0uY3RyKQorCQlDUllQVE9fY3RyMTI4X2VuY3J5cHRfY3RyMzIoaW4sb3V0LGxlbiwmZGF0LT5rcywKKwkJCWN0eC0+aXYsY3R4LT5idWYsJm51bSxkYXQtPnN0cmVhbS5jdHIpOworCWVsc2UKKwkJQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGluLG91dCxsZW4sJmRhdC0+a3MsCisJCQljdHgtPml2LGN0eC0+YnVmLCZudW0sZGF0LT5ibG9jayk7CisJY3R4LT5udW0gPSAoc2l6ZV90KW51bTsKKwlyZXR1cm4gMTsKK30KKworQkxPQ0tfQ0lQSEVSX2dlbmVyaWNfcGFjayhOSURfYWVzLDEyOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCitCTE9DS19DSVBIRVJfZ2VuZXJpY19wYWNrKE5JRF9hZXMsMTkyLEVWUF9DSVBIX0ZMQUdfRklQUykKK0JMT0NLX0NJUEhFUl9nZW5lcmljX3BhY2soTklEX2FlcywyNTYsRVZQX0NJUEhfRkxBR19GSVBTKQorCitzdGF0aWMgaW50IGFlc19nY21fY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKKwl7CisJRVZQX0FFU19HQ01fQ1RYICpnY3R4ID0gYy0+Y2lwaGVyX2RhdGE7CisJT1BFTlNTTF9jbGVhbnNlKCZnY3R4LT5nY20sIHNpemVvZihnY3R4LT5nY20pKTsKKwlpZiAoZ2N0eC0+aXYgIT0gYy0+aXYpCisJCU9QRU5TU0xfZnJlZShnY3R4LT5pdik7CisJcmV0dXJuIDE7CisJfQorCisvKiBpbmNyZW1lbnQgY291bnRlciAoNjQtYml0IGludCkgYnkgMSAqLworc3RhdGljIHZvaWQgY3RyNjRfaW5jKHVuc2lnbmVkIGNoYXIgKmNvdW50ZXIpIHsKKwlpbnQgbj04OworCXVuc2lnbmVkIGNoYXIgIGM7CisKKwlkbyB7CisJCS0tbjsKKwkJYyA9IGNvdW50ZXJbbl07CisJCSsrYzsKKwkJY291bnRlcltuXSA9IGM7CisJCWlmIChjKSByZXR1cm47CisJfSB3aGlsZSAobik7Cit9CisKK3N0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjLCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQorCXsKKwlFVlBfQUVTX0dDTV9DVFggKmdjdHggPSBjLT5jaXBoZXJfZGF0YTsKKwlzd2l0Y2ggKHR5cGUpCisJCXsKKwljYXNlIEVWUF9DVFJMX0lOSVQ6CisJCWdjdHgtPmtleV9zZXQgPSAwOworCQlnY3R4LT5pdl9zZXQgPSAwOworCQlnY3R4LT5pdmxlbiA9IGMtPmNpcGhlci0+aXZfbGVuOworCQlnY3R4LT5pdiA9IGMtPml2OworCQlnY3R4LT50YWdsZW4gPSAtMTsKKwkJZ2N0eC0+aXZfZ2VuID0gMDsKKwkJZ2N0eC0+dGxzX2FhZF9sZW4gPSAtMTsKKwkJcmV0dXJuIDE7CisKKwljYXNlIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU46CisJCWlmIChhcmcgPD0gMCkKKwkJCXJldHVybiAwOworI2lmZGVmIE9QRU5TU0xfRklQUworCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorCQkJCQkJICYmIGFyZyA8IDEyKQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBJViBpZiBuZWVkZWQgKi8KKwkJaWYgKChhcmcgPiBFVlBfTUFYX0lWX0xFTkdUSCkgJiYgKGFyZyA+IGdjdHgtPml2bGVuKSkKKwkJCXsKKwkJCWlmIChnY3R4LT5pdiAhPSBjLT5pdikKKwkJCQlPUEVOU1NMX2ZyZWUoZ2N0eC0+aXYpOworCQkJZ2N0eC0+aXYgPSBPUEVOU1NMX21hbGxvYyhhcmcpOworCQkJaWYgKCFnY3R4LT5pdikKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJZ2N0eC0+aXZsZW4gPSBhcmc7CisJCXJldHVybiAxOworCisJY2FzZSBFVlBfQ1RSTF9HQ01fU0VUX1RBRzoKKwkJaWYgKGFyZyA8PSAwIHx8IGFyZyA+IDE2IHx8IGMtPmVuY3J5cHQpCisJCQlyZXR1cm4gMDsKKwkJbWVtY3B5KGMtPmJ1ZiwgcHRyLCBhcmcpOworCQlnY3R4LT50YWdsZW4gPSBhcmc7CisJCXJldHVybiAxOworCisJY2FzZSBFVlBfQ1RSTF9HQ01fR0VUX1RBRzoKKwkJaWYgKGFyZyA8PSAwIHx8IGFyZyA+IDE2IHx8ICFjLT5lbmNyeXB0IHx8IGdjdHgtPnRhZ2xlbiA8IDApCisJCQlyZXR1cm4gMDsKKwkJbWVtY3B5KHB0ciwgYy0+YnVmLCBhcmcpOworCQlyZXR1cm4gMTsKKworCWNhc2UgRVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRDoKKwkJLyogU3BlY2lhbCBjYXNlOiAtMSBsZW5ndGggcmVzdG9yZXMgd2hvbGUgSVYgKi8KKwkJaWYgKGFyZyA9PSAtMSkKKwkJCXsKKwkJCW1lbWNweShnY3R4LT5pdiwgcHRyLCBnY3R4LT5pdmxlbik7CisJCQlnY3R4LT5pdl9nZW4gPSAxOworCQkJcmV0dXJuIDE7CisJCQl9CisJCS8qIEZpeGVkIGZpZWxkIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcyBhbmQgaW52b2NhdGlvbiBmaWVsZAorCQkgKiBhdCBsZWFzdCA4LgorCQkgKi8KKwkJaWYgKChhcmcgPCA0KSB8fCAoZ2N0eC0+aXZsZW4gLSBhcmcpIDwgOCkKKwkJCXJldHVybiAwOworCQlpZiAoYXJnKQorCQkJbWVtY3B5KGdjdHgtPml2LCBwdHIsIGFyZyk7CisJCWlmIChjLT5lbmNyeXB0ICYmCisJCQlSQU5EX2J5dGVzKGdjdHgtPml2ICsgYXJnLCBnY3R4LT5pdmxlbiAtIGFyZykgPD0gMCkKKwkJCXJldHVybiAwOworCQlnY3R4LT5pdl9nZW4gPSAxOworCQlyZXR1cm4gMTsKKworCWNhc2UgRVZQX0NUUkxfR0NNX0lWX0dFTjoKKwkJaWYgKGdjdHgtPml2X2dlbiA9PSAwIHx8IGdjdHgtPmtleV9zZXQgPT0gMCkKKwkJCXJldHVybiAwOworCQlDUllQVE9fZ2NtMTI4X3NldGl2KCZnY3R4LT5nY20sIGdjdHgtPml2LCBnY3R4LT5pdmxlbik7CisJCWlmIChhcmcgPD0gMCB8fCBhcmcgPiBnY3R4LT5pdmxlbikKKwkJCWFyZyA9IGdjdHgtPml2bGVuOworCQltZW1jcHkocHRyLCBnY3R4LT5pdiArIGdjdHgtPml2bGVuIC0gYXJnLCBhcmcpOworCQkvKiBJbnZvY2F0aW9uIGZpZWxkIHdpbGwgYmUgYXQgbGVhc3QgOCBieXRlcyBpbiBzaXplIGFuZAorCQkgKiBzbyBubyBuZWVkIHRvIGNoZWNrIHdyYXAgYXJvdW5kIG9yIGluY3JlbWVudCBtb3JlIHRoYW4KKwkJICogbGFzdCA4IGJ5dGVzLgorCQkgKi8KKwkJY3RyNjRfaW5jKGdjdHgtPml2ICsgZ2N0eC0+aXZsZW4gLSA4KTsKKwkJZ2N0eC0+aXZfc2V0ID0gMTsKKwkJcmV0dXJuIDE7CisKKwljYXNlIEVWUF9DVFJMX0dDTV9TRVRfSVZfSU5WOgorCQlpZiAoZ2N0eC0+aXZfZ2VuID09IDAgfHwgZ2N0eC0+a2V5X3NldCA9PSAwIHx8IGMtPmVuY3J5cHQpCisJCQlyZXR1cm4gMDsKKwkJbWVtY3B5KGdjdHgtPml2ICsgZ2N0eC0+aXZsZW4gLSBhcmcsIHB0ciwgYXJnKTsKKwkJQ1JZUFRPX2djbTEyOF9zZXRpdigmZ2N0eC0+Z2NtLCBnY3R4LT5pdiwgZ2N0eC0+aXZsZW4pOworCQlnY3R4LT5pdl9zZXQgPSAxOworCQlyZXR1cm4gMTsKKworCWNhc2UgRVZQX0NUUkxfQUVBRF9UTFMxX0FBRDoKKwkJLyogU2F2ZSB0aGUgQUFEIGZvciBsYXRlciB1c2UgKi8KKwkJaWYgKGFyZyAhPSAxMykKKwkJCXJldHVybiAwOworCQltZW1jcHkoYy0+YnVmLCBwdHIsIGFyZyk7CisJCWdjdHgtPnRsc19hYWRfbGVuID0gYXJnOworCQkJeworCQkJdW5zaWduZWQgaW50IGxlbj1jLT5idWZbYXJnLTJdPDw4fGMtPmJ1ZlthcmctMV07CisJCQkvKiBDb3JyZWN0IGxlbmd0aCBmb3IgZXhwbGljaXQgSVYgKi8KKwkJCWxlbiAtPSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU47CisJCQkvKiBJZiBkZWNyeXB0aW5nIGNvcnJlY3QgZm9yIHRhZyB0b28gKi8KKwkJCWlmICghYy0+ZW5jcnlwdCkKKwkJCQlsZW4gLT0gRVZQX0dDTV9UTFNfVEFHX0xFTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPmJ1ZlthcmctMl0gPSBsZW4+Pjg7CisgICAgICAgICAgICAgICAgICAgICAgICBjLT5idWZbYXJnLTFdID0gbGVuICYgMHhmZjsKKwkJCX0KKwkJLyogRXh0cmEgcGFkZGluZzogdGFnIGFwcGVuZGVkIHRvIHJlY29yZCAqLworCQlyZXR1cm4gRVZQX0dDTV9UTFNfVEFHX0xFTjsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKworCQl9CisJfQorCitzdGF0aWMgaW50IGFlc19nY21faW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisJeworCUVWUF9BRVNfR0NNX0NUWCAqZ2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJaWYgKCFpdiAmJiAha2V5KQorCQlyZXR1cm4gMTsKKwlpZiAoa2V5KQorCQl7IGRvIHsKKyNpZmRlZiBCU0FFU19DQVBBQkxFCisJCWlmIChCU0FFU19DQVBBQkxFKQorCQkJeworCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksY3R4LT5rZXlfbGVuKjgsJmdjdHgtPmtzKTsKKwkJCUNSWVBUT19nY20xMjhfaW5pdCgmZ2N0eC0+Z2NtLCZnY3R4LT5rcywKKwkJCQkJKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworCQkJZ2N0eC0+Y3RyID0gKGN0cjEyOF9mKWJzYWVzX2N0cjMyX2VuY3J5cHRfYmxvY2tzOworCQkJYnJlYWs7CisJCQl9CisJCWVsc2UKKyNlbmRpZgorI2lmZGVmIFZQQUVTX0NBUEFCTEUKKwkJaWYgKFZQQUVTX0NBUEFCTEUpCisJCQl7CisJCQl2cGFlc19zZXRfZW5jcnlwdF9rZXkoa2V5LGN0eC0+a2V5X2xlbio4LCZnY3R4LT5rcyk7CisJCQlDUllQVE9fZ2NtMTI4X2luaXQoJmdjdHgtPmdjbSwmZ2N0eC0+a3MsCisJCQkJCShibG9jazEyOF9mKXZwYWVzX2VuY3J5cHQpOworCQkJZ2N0eC0+Y3RyID0gTlVMTDsKKwkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmZ2N0eC0+a3MpOworCQlDUllQVE9fZ2NtMTI4X2luaXQoJmdjdHgtPmdjbSwgJmdjdHgtPmtzLCAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisjaWZkZWYgQUVTX0NUUl9BU00KKwkJZ2N0eC0+Y3RyID0gKGN0cjEyOF9mKUFFU19jdHIzMl9lbmNyeXB0OworI2Vsc2UKKwkJZ2N0eC0+Y3RyID0gTlVMTDsKKyNlbmRpZgorCQl9IHdoaWxlICgwKTsKKworCQkvKiBJZiB3ZSBoYXZlIGFuIGl2IGNhbiBzZXQgaXQgZGlyZWN0bHksIG90aGVyd2lzZSB1c2UKKwkJICogc2F2ZWQgSVYuCisJCSAqLworCQlpZiAoaXYgPT0gTlVMTCAmJiBnY3R4LT5pdl9zZXQpCisJCQlpdiA9IGdjdHgtPml2OworCQlpZiAoaXYpCisJCQl7CisJCQlDUllQVE9fZ2NtMTI4X3NldGl2KCZnY3R4LT5nY20sIGl2LCBnY3R4LT5pdmxlbik7CisJCQlnY3R4LT5pdl9zZXQgPSAxOworCQkJfQorCQlnY3R4LT5rZXlfc2V0ID0gMTsKKwkJfQorCWVsc2UKKwkJeworCQkvKiBJZiBrZXkgc2V0IHVzZSBJViwgb3RoZXJ3aXNlIGNvcHkgKi8KKwkJaWYgKGdjdHgtPmtleV9zZXQpCisJCQlDUllQVE9fZ2NtMTI4X3NldGl2KCZnY3R4LT5nY20sIGl2LCBnY3R4LT5pdmxlbik7CisJCWVsc2UKKwkJCW1lbWNweShnY3R4LT5pdiwgaXYsIGdjdHgtPml2bGVuKTsKKwkJZ2N0eC0+aXZfc2V0ID0gMTsKKwkJZ2N0eC0+aXZfZ2VuID0gMDsKKwkJfQorCXJldHVybiAxOworCX0KKworLyogSGFuZGxlIFRMUyBHQ00gcGFja2V0IGZvcm1hdC4gVGhpcyBjb25zaXN0cyBvZiB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBJVgorICogZm9sbG93ZWQgYnkgdGhlIHBheWxvYWQgYW5kIGZpbmFsbHkgdGhlIHRhZy4gT24gZW5jcnlwdCBnZW5lcmF0ZSBJViwKKyAqIGVuY3J5cHQgcGF5bG9hZCBhbmQgd3JpdGUgdGhlIHRhZy4gT24gdmVyaWZ5IHJldHJpZXZlIElWLCBkZWNyeXB0IHBheWxvYWQKKyAqIGFuZCB2ZXJpZnkgdGFnLgorICovCisKK3N0YXRpYyBpbnQgYWVzX2djbV90bHNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pCisJeworCUVWUF9BRVNfR0NNX0NUWCAqZ2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJaW50IHJ2ID0gLTE7CisJLyogRW5jcnlwdC9kZWNyeXB0IG11c3QgYmUgcGVyZm9ybWVkIGluIHBsYWNlICovCisJaWYgKG91dCAhPSBpbiB8fCBsZW4gPCAoRVZQX0dDTV9UTFNfRVhQTElDSVRfSVZfTEVOK0VWUF9HQ01fVExTX1RBR19MRU4pKQorCQlyZXR1cm4gLTE7CisJLyogU2V0IElWIGZyb20gc3RhcnQgb2YgYnVmZmVyIG9yIGdlbmVyYXRlIElWIGFuZCB3cml0ZSB0byBzdGFydAorCSAqIG9mIGJ1ZmZlci4KKwkgKi8KKwlpZiAoRVZQX0NJUEhFUl9DVFhfY3RybChjdHgsIGN0eC0+ZW5jcnlwdCA/CisJCQkJRVZQX0NUUkxfR0NNX0lWX0dFTiA6IEVWUF9DVFJMX0dDTV9TRVRfSVZfSU5WLAorCQkJCUVWUF9HQ01fVExTX0VYUExJQ0lUX0lWX0xFTiwgb3V0KSA8PSAwKQorCQlnb3RvIGVycjsKKwkvKiBVc2Ugc2F2ZWQgQUFEICovCisJaWYgKENSWVBUT19nY20xMjhfYWFkKCZnY3R4LT5nY20sIGN0eC0+YnVmLCBnY3R4LT50bHNfYWFkX2xlbikpCisJCWdvdG8gZXJyOworCS8qIEZpeCBidWZmZXIgYW5kIGxlbmd0aCB0byBwb2ludCB0byBwYXlsb2FkICovCisJaW4gKz0gRVZQX0dDTV9UTFNfRVhQTElDSVRfSVZfTEVOOworCW91dCArPSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU47CisJbGVuIC09IEVWUF9HQ01fVExTX0VYUExJQ0lUX0lWX0xFTiArIEVWUF9HQ01fVExTX1RBR19MRU47CisJaWYgKGN0eC0+ZW5jcnlwdCkKKwkJeworCQkvKiBFbmNyeXB0IHBheWxvYWQgKi8KKwkJaWYgKGdjdHgtPmN0cikKKwkJCXsKKwkJCWlmIChDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzIoJmdjdHgtPmdjbSwKKwkJCQkJCQlpbiwgb3V0LCBsZW4sCisJCQkJCQkJZ2N0eC0+Y3RyKSkKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJZWxzZQl7CisJCQlpZiAoQ1JZUFRPX2djbTEyOF9lbmNyeXB0KCZnY3R4LT5nY20sIGluLCBvdXQsIGxlbikpCisJCQkJZ290byBlcnI7CisJCQl9CisJCW91dCArPSBsZW47CisJCS8qIEZpbmFsbHkgd3JpdGUgdGFnICovCisJCUNSWVBUT19nY20xMjhfdGFnKCZnY3R4LT5nY20sIG91dCwgRVZQX0dDTV9UTFNfVEFHX0xFTik7CisJCXJ2ID0gbGVuICsgRVZQX0dDTV9UTFNfRVhQTElDSVRfSVZfTEVOICsgRVZQX0dDTV9UTFNfVEFHX0xFTjsKKwkJfQorCWVsc2UKKwkJeworCQkvKiBEZWNyeXB0ICovCisJCWlmIChnY3R4LT5jdHIpCisJCQl7CisJCQlpZiAoQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyKCZnY3R4LT5nY20sCisJCQkJCQkJaW4sIG91dCwgbGVuLAorCQkJCQkJCWdjdHgtPmN0cikpCisJCQkJZ290byBlcnI7CisJCQl9CisJCWVsc2UJeworCQkJaWYgKENSWVBUT19nY20xMjhfZGVjcnlwdCgmZ2N0eC0+Z2NtLCBpbiwgb3V0LCBsZW4pKQorCQkJCWdvdG8gZXJyOworCQkJfQorCQkvKiBSZXRyaWV2ZSB0YWcgKi8KKwkJQ1JZUFRPX2djbTEyOF90YWcoJmdjdHgtPmdjbSwgY3R4LT5idWYsCisJCQkJCUVWUF9HQ01fVExTX1RBR19MRU4pOworCQkvKiBJZiB0YWcgbWlzbWF0Y2ggd2lwZSBidWZmZXIgKi8KKwkJaWYgKG1lbWNtcChjdHgtPmJ1ZiwgaW4gKyBsZW4sIEVWUF9HQ01fVExTX1RBR19MRU4pKQorCQkJeworCQkJT1BFTlNTTF9jbGVhbnNlKG91dCwgbGVuKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlydiA9IGxlbjsKKwkJfQorCisJZXJyOgorCWdjdHgtPml2X3NldCA9IDA7CisJZ2N0eC0+dGxzX2FhZF9sZW4gPSAtMTsKKwlyZXR1cm4gcnY7CisJfQorCitzdGF0aWMgaW50IGFlc19nY21fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pCisJeworCUVWUF9BRVNfR0NNX0NUWCAqZ2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJLyogSWYgbm90IHNldCB1cCwgcmV0dXJuIGVycm9yICovCisJaWYgKCFnY3R4LT5rZXlfc2V0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZ2N0eC0+dGxzX2FhZF9sZW4gPj0gMCkKKwkJcmV0dXJuIGFlc19nY21fdGxzX2NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7CisKKwlpZiAoIWdjdHgtPml2X3NldCkKKwkJcmV0dXJuIC0xOworCWlmICghY3R4LT5lbmNyeXB0ICYmIGdjdHgtPnRhZ2xlbiA8IDApCisJCXJldHVybiAtMTsKKwlpZiAoaW4pCisJCXsKKwkJaWYgKG91dCA9PSBOVUxMKQorCQkJeworCQkJaWYgKENSWVBUT19nY20xMjhfYWFkKCZnY3R4LT5nY20sIGluLCBsZW4pKQorCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJZWxzZSBpZiAoY3R4LT5lbmNyeXB0KQorCQkJeworCQkJaWYgKGdjdHgtPmN0cikKKwkJCQl7CisJCQkJaWYgKENSWVBUT19nY20xMjhfZW5jcnlwdF9jdHIzMigmZ2N0eC0+Z2NtLAorCQkJCQkJCWluLCBvdXQsIGxlbiwKKwkJCQkJCQlnY3R4LT5jdHIpKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJZWxzZQl7CisJCQkJaWYgKENSWVBUT19nY20xMjhfZW5jcnlwdCgmZ2N0eC0+Z2NtLCBpbiwgb3V0LCBsZW4pKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQl7CisJCQlpZiAoZ2N0eC0+Y3RyKQorCQkJCXsKKwkJCQlpZiAoQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyKCZnY3R4LT5nY20sCisJCQkJCQkJaW4sIG91dCwgbGVuLAorCQkJCQkJCWdjdHgtPmN0cikpCisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQllbHNlCXsKKwkJCQlpZiAoQ1JZUFRPX2djbTEyOF9kZWNyeXB0KCZnY3R4LT5nY20sIGluLCBvdXQsIGxlbikpCisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQl9CisJCXJldHVybiBsZW47CisJCX0KKwllbHNlCisJCXsKKwkJaWYgKCFjdHgtPmVuY3J5cHQpCisJCQl7CisJCQlpZiAoQ1JZUFRPX2djbTEyOF9maW5pc2goJmdjdHgtPmdjbSwKKwkJCQkJY3R4LT5idWYsIGdjdHgtPnRhZ2xlbikgIT0gMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlnY3R4LT5pdl9zZXQgPSAwOworCQkJcmV0dXJuIDA7CisJCQl9CisJCUNSWVBUT19nY20xMjhfdGFnKCZnY3R4LT5nY20sIGN0eC0+YnVmLCAxNik7CisJCWdjdHgtPnRhZ2xlbiA9IDE2OworCQkvKiBEb24ndCByZXVzZSB0aGUgSVYgKi8KKwkJZ2N0eC0+aXZfc2V0ID0gMDsKKwkJcmV0dXJuIDA7CisJCX0KKworCX0KKworI2RlZmluZSBDVVNUT01fRkxBR1MJKEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xIFwKKwkJfCBFVlBfQ0lQSF9DVVNUT01fSVYgfCBFVlBfQ0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIgXAorCQl8IEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQgfCBFVlBfQ0lQSF9DVFJMX0lOSVQpCisKK0JMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxMjgsMSwxMixnY20sR0NNLAorCQlFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUnxDVVNUT01fRkxBR1MpCitCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsZ2NtLEdDTSwKKwkJRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVJ8Q1VTVE9NX0ZMQUdTKQorQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGdjbSxHQ00sCisJCUVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSfENVU1RPTV9GTEFHUykKKworc3RhdGljIGludCBhZXNfeHRzX2N0cmwoRVZQX0NJUEhFUl9DVFggKmMsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisJeworCUVWUF9BRVNfWFRTX0NUWCAqeGN0eCA9IGMtPmNpcGhlcl9kYXRhOworCWlmICh0eXBlICE9IEVWUF9DVFJMX0lOSVQpCisJCXJldHVybiAtMTsKKwkvKiBrZXkxIGFuZCBrZXkyIGFyZSB1c2VkIGFzIGFuIGluZGljYXRvciBib3RoIGtleSBhbmQgSVYgYXJlIHNldCAqLworCXhjdHgtPnh0cy5rZXkxID0gTlVMTDsKKwl4Y3R4LT54dHMua2V5MiA9IE5VTEw7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGFlc194dHNfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisJeworCUVWUF9BRVNfWFRTX0NUWCAqeGN0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJaWYgKCFpdiAmJiAha2V5KQorCQlyZXR1cm4gMTsKKworCWlmIChrZXkpIGRvCisJCXsKKyNpZmRlZiBBRVNfWFRTX0FTTQorCQl4Y3R4LT5zdHJlYW0gPSBlbmMgPyBBRVNfeHRzX2VuY3J5cHQgOiBBRVNfeHRzX2RlY3J5cHQ7CisjZWxzZQorCQl4Y3R4LT5zdHJlYW0gPSBOVUxMOworI2VuZGlmCisJCS8qIGtleV9sZW4gaXMgdHdvIEFFUyBrZXlzICovCisjaWZkZWYgQlNBRVNfQ0FQQUJMRQorCQlpZiAoQlNBRVNfQ0FQQUJMRSkKKwkJCXhjdHgtPnN0cmVhbSA9IGVuYyA/IGJzYWVzX3h0c19lbmNyeXB0IDogYnNhZXNfeHRzX2RlY3J5cHQ7CisJCWVsc2UKKyNlbmRpZgorI2lmZGVmIFZQQUVTX0NBUEFCTEUKKwkJaWYgKFZQQUVTX0NBUEFCTEUpCisJCSAgICB7CisJCSAgICBpZiAoZW5jKQorCQkJeworCQkJdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQl4Y3R4LT54dHMuYmxvY2sxID0gKGJsb2NrMTI4X2YpdnBhZXNfZW5jcnlwdDsKKwkJCX0KKwkJICAgIGVsc2UKKwkJCXsKKwkJCXZwYWVzX3NldF9kZWNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEpOworCQkJeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKXZwYWVzX2RlY3J5cHQ7CisJCQl9CisKKwkJdnBhZXNfc2V0X2VuY3J5cHRfa2V5KGtleSArIGN0eC0+a2V5X2xlbi8yLAorCQkJCQkJY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMik7CisJCXhjdHgtPnh0cy5ibG9jazIgPSAoYmxvY2sxMjhfZil2cGFlc19lbmNyeXB0OworCisJCXhjdHgtPnh0cy5rZXkxID0gJnhjdHgtPmtzMTsKKwkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlpZiAoZW5jKQorCQkJeworCQkJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczEpOworCQkJeGN0eC0+eHRzLmJsb2NrMSA9IChibG9jazEyOF9mKUFFU19lbmNyeXB0OworCQkJfQorCQllbHNlCisJCQl7CisJCQlBRVNfc2V0X2RlY3J5cHRfa2V5KGtleSwgY3R4LT5rZXlfbGVuICogNCwgJnhjdHgtPmtzMSk7CisJCQl4Y3R4LT54dHMuYmxvY2sxID0gKGJsb2NrMTI4X2YpQUVTX2RlY3J5cHQ7CisJCQl9CisKKwkJQUVTX3NldF9lbmNyeXB0X2tleShrZXkgKyBjdHgtPmtleV9sZW4vMiwKKwkJCQkJCWN0eC0+a2V5X2xlbiAqIDQsICZ4Y3R4LT5rczIpOworCQl4Y3R4LT54dHMuYmxvY2syID0gKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQ7CisKKwkJeGN0eC0+eHRzLmtleTEgPSAmeGN0eC0+a3MxOworCQl9IHdoaWxlICgwKTsKKworCWlmIChpdikKKwkJeworCQl4Y3R4LT54dHMua2V5MiA9ICZ4Y3R4LT5rczI7CisJCW1lbWNweShjdHgtPml2LCBpdiwgMTYpOworCQl9CisKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKKwl7CisJRVZQX0FFU19YVFNfQ1RYICp4Y3R4ID0gY3R4LT5jaXBoZXJfZGF0YTsKKwlpZiAoIXhjdHgtPnh0cy5rZXkxIHx8ICF4Y3R4LT54dHMua2V5MikKKwkJcmV0dXJuIDA7CisJaWYgKCFvdXQgfHwgIWluIHx8IGxlbjxBRVNfQkxPQ0tfU0laRSkKKwkJcmV0dXJuIDA7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCisJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorCQkJKGxlbiA+ICgxVUw8PDIwKSoxNikpCisJCXsKKwkJRVZQZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOworCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCisJaWYgKHhjdHgtPnN0cmVhbSkKKwkJKCp4Y3R4LT5zdHJlYW0pKGluLCBvdXQsIGxlbiwKKwkJCQl4Y3R4LT54dHMua2V5MSwgeGN0eC0+eHRzLmtleTIsIGN0eC0+aXYpOworCWVsc2UgaWYgKENSWVBUT194dHMxMjhfZW5jcnlwdCgmeGN0eC0+eHRzLCBjdHgtPml2LCBpbiwgb3V0LCBsZW4sCisJCQkJCQkJCWN0eC0+ZW5jcnlwdCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworCX0KKworI2RlZmluZSBhZXNfeHRzX2NsZWFudXAgTlVMTAorCisjZGVmaW5lIFhUU19GTEFHUwkoRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEgfCBFVlBfQ0lQSF9DVVNUT01fSVYgXAorCQkJIHwgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCB8IEVWUF9DSVBIX0NUUkxfSU5JVCkKKworQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDEyOCwxLDE2LHh0cyxYVFMsRVZQX0NJUEhfRkxBR19GSVBTfFhUU19GTEFHUykKK0JMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxNix4dHMsWFRTLEVWUF9DSVBIX0ZMQUdfRklQU3xYVFNfRkxBR1MpCisKK3N0YXRpYyBpbnQgYWVzX2NjbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjLCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQorCXsKKwlFVlBfQUVTX0NDTV9DVFggKmNjdHggPSBjLT5jaXBoZXJfZGF0YTsKKwlzd2l0Y2ggKHR5cGUpCisJCXsKKwljYXNlIEVWUF9DVFJMX0lOSVQ6CisJCWNjdHgtPmtleV9zZXQgPSAwOworCQljY3R4LT5pdl9zZXQgPSAwOworCQljY3R4LT5MID0gODsKKwkJY2N0eC0+TSA9IDEyOworCQljY3R4LT50YWdfc2V0ID0gMDsKKwkJY2N0eC0+bGVuX3NldCA9IDA7CisJCXJldHVybiAxOworCisJY2FzZSBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOOgorCQlhcmcgPSAxNSAtIGFyZzsKKwljYXNlIEVWUF9DVFJMX0NDTV9TRVRfTDoKKwkJaWYgKGFyZyA8IDIgfHwgYXJnID4gOCkKKwkJCXJldHVybiAwOworCQljY3R4LT5MID0gYXJnOworCQlyZXR1cm4gMTsKKworCWNhc2UgRVZQX0NUUkxfQ0NNX1NFVF9UQUc6CisJCWlmICgoYXJnICYgMSkgfHwgYXJnIDwgNCB8fCBhcmcgPiAxNikKKwkJCXJldHVybiAwOworCQlpZiAoKGMtPmVuY3J5cHQgJiYgcHRyKSB8fCAoIWMtPmVuY3J5cHQgJiYgIXB0cikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHB0cikKKwkJCXsKKwkJCWNjdHgtPnRhZ19zZXQgPSAxOworCQkJbWVtY3B5KGMtPmJ1ZiwgcHRyLCBhcmcpOworCQkJfQorCQljY3R4LT5NID0gYXJnOworCQlyZXR1cm4gMTsKKworCWNhc2UgRVZQX0NUUkxfQ0NNX0dFVF9UQUc6CisJCWlmICghYy0+ZW5jcnlwdCB8fCAhY2N0eC0+dGFnX3NldCkKKwkJCXJldHVybiAwOworCQlpZighQ1JZUFRPX2NjbTEyOF90YWcoJmNjdHgtPmNjbSwgcHRyLCAoc2l6ZV90KWFyZykpCisJCQlyZXR1cm4gMDsKKwkJY2N0eC0+dGFnX3NldCA9IDA7CisJCWNjdHgtPml2X3NldCA9IDA7CisJCWNjdHgtPmxlbl9zZXQgPSAwOworCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKworCQl9CisJfQorCitzdGF0aWMgaW50IGFlc19jY21faW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisJeworCUVWUF9BRVNfQ0NNX0NUWCAqY2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJaWYgKCFpdiAmJiAha2V5KQorCQlyZXR1cm4gMTsKKwlpZiAoa2V5KSBkbworCQl7CisjaWZkZWYgVlBBRVNfQ0FQQUJMRQorCQlpZiAoVlBBRVNfQ0FQQUJMRSkKKwkJCXsKKwkJCXZwYWVzX3NldF9lbmNyeXB0X2tleShrZXksIGN0eC0+a2V5X2xlbio4LCAmY2N0eC0+a3MpOworCQkJQ1JZUFRPX2NjbTEyOF9pbml0KCZjY3R4LT5jY20sIGNjdHgtPk0sIGNjdHgtPkwsCisJCQkJCSZjY3R4LT5rcywgKGJsb2NrMTI4X2YpdnBhZXNfZW5jcnlwdCk7CisJCQljY3R4LT5rZXlfc2V0ID0gMTsKKwkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBjdHgtPmtleV9sZW4gKiA4LCAmY2N0eC0+a3MpOworCQlDUllQVE9fY2NtMTI4X2luaXQoJmNjdHgtPmNjbSwgY2N0eC0+TSwgY2N0eC0+TCwKKwkJCQkJJmNjdHgtPmtzLCAoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisJCWNjdHgtPnN0ciA9IE5VTEw7CisJCWNjdHgtPmtleV9zZXQgPSAxOworCQl9IHdoaWxlICgwKTsKKwlpZiAoaXYpCisJCXsKKwkJbWVtY3B5KGN0eC0+aXYsIGl2LCAxNSAtIGNjdHgtPkwpOworCQljY3R4LT5pdl9zZXQgPSAxOworCQl9CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGFlc19jY21fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pCisJeworCUVWUF9BRVNfQ0NNX0NUWCAqY2N0eCA9IGN0eC0+Y2lwaGVyX2RhdGE7CisJQ0NNMTI4X0NPTlRFWFQgKmNjbSA9ICZjY3R4LT5jY207CisJLyogSWYgbm90IHNldCB1cCwgcmV0dXJuIGVycm9yICovCisJaWYgKCFjY3R4LT5pdl9zZXQgJiYgIWNjdHgtPmtleV9zZXQpCisJCXJldHVybiAtMTsKKwlpZiAoIWN0eC0+ZW5jcnlwdCAmJiAhY2N0eC0+dGFnX3NldCkKKwkJcmV0dXJuIC0xOworCWlmICghb3V0KQorCQl7CisJCWlmICghaW4pCisJCQl7CisJCQlpZiAoQ1JZUFRPX2NjbTEyOF9zZXRpdihjY20sIGN0eC0+aXYsIDE1IC0gY2N0eC0+TCxsZW4pKQorCQkJCXJldHVybiAtMTsKKwkJCWNjdHgtPmxlbl9zZXQgPSAxOworCQkJcmV0dXJuIGxlbjsKKwkJCX0KKwkJLyogSWYgaGF2ZSBBQUQgbmVlZCBtZXNzYWdlIGxlbmd0aCAqLworCQlpZiAoIWNjdHgtPmxlbl9zZXQgJiYgbGVuKQorCQkJcmV0dXJuIC0xOworCQlDUllQVE9fY2NtMTI4X2FhZChjY20sIGluLCBsZW4pOworCQlyZXR1cm4gbGVuOworCQl9CisJLyogRVZQXypGaW5hbCgpIGRvZXNuJ3QgcmV0dXJuIGFueSBkYXRhICovCisJaWYgKCFpbikKKwkJcmV0dXJuIDA7CisJLyogSWYgbm90IHNldCBsZW5ndGggeWV0IGRvIGl0ICovCisJaWYgKCFjY3R4LT5sZW5fc2V0KQorCQl7CisJCWlmIChDUllQVE9fY2NtMTI4X3NldGl2KGNjbSwgY3R4LT5pdiwgMTUgLSBjY3R4LT5MLCBsZW4pKQorCQkJcmV0dXJuIC0xOworCQljY3R4LT5sZW5fc2V0ID0gMTsKKwkJfQorCWlmIChjdHgtPmVuY3J5cHQpCisJCXsKKwkJaWYgKGNjdHgtPnN0ciA/IENSWVBUT19jY20xMjhfZW5jcnlwdF9jY202NChjY20sIGluLCBvdXQsIGxlbiwKKwkJCQkJCWNjdHgtPnN0cikgOgorCQkJCUNSWVBUT19jY20xMjhfZW5jcnlwdChjY20sIGluLCBvdXQsIGxlbikpCisJCQlyZXR1cm4gLTE7CisJCWNjdHgtPnRhZ19zZXQgPSAxOworCQlyZXR1cm4gbGVuOworCQl9CisJZWxzZQorCQl7CisJCWludCBydiA9IC0xOworCQlpZiAoY2N0eC0+c3RyID8gIUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NChjY20sIGluLCBvdXQsIGxlbiwKKwkJCQkJCWNjdHgtPnN0cikgOgorCQkJCSFDUllQVE9fY2NtMTI4X2RlY3J5cHQoY2NtLCBpbiwgb3V0LCBsZW4pKQorCQkJeworCQkJdW5zaWduZWQgY2hhciB0YWdbMTZdOworCQkJaWYgKENSWVBUT19jY20xMjhfdGFnKGNjbSwgdGFnLCBjY3R4LT5NKSkKKwkJCQl7CisJCQkJaWYgKCFtZW1jbXAodGFnLCBjdHgtPmJ1ZiwgY2N0eC0+TSkpCisJCQkJCXJ2ID0gbGVuOworCQkJCX0KKwkJCX0KKwkJaWYgKHJ2ID09IC0xKQorCQkJT1BFTlNTTF9jbGVhbnNlKG91dCwgbGVuKTsKKwkJY2N0eC0+aXZfc2V0ID0gMDsKKwkJY2N0eC0+dGFnX3NldCA9IDA7CisJCWNjdHgtPmxlbl9zZXQgPSAwOworCQlyZXR1cm4gcnY7CisJCX0KKworCX0KKworI2RlZmluZSBhZXNfY2NtX2NsZWFudXAgTlVMTAorCitCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTI4LDEsMTIsY2NtLENDTSxFVlBfQ0lQSF9GTEFHX0ZJUFN8Q1VTVE9NX0ZMQUdTKQorQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5MiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhfRkxBR19GSVBTfENVU1RPTV9GTEFHUykKK0JMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCisKKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2VfYWVzX2NiY19obWFjX3NoYTEuYyBiL2NyeXB0by9ldnAvZV9hZXNfY2JjX2htYWNfc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGM2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vZXZwL2VfYWVzX2NiY19obWFjX3NoYTEuYwpAQCAtMCwwICsxLDQwNCBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19BRVMpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKworI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2luY2x1ZGUgImV2cF9sb2NsLmgiCisKKyNpZm5kZWYgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUgorI2RlZmluZSBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSCTB4MjAwMDAwCisjZGVmaW5lIEVWUF9DVFJMX0FFQURfVExTMV9BQUQJCTB4MTYKKyNkZWZpbmUgRVZQX0NUUkxfQUVBRF9TRVRfTUFDX0tFWQkweDE3CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQorI2RlZmluZSBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSAwCisjZW5kaWYKKworI2RlZmluZSBUTFMxXzFfVkVSU0lPTiAweDAzMDIKKwordHlwZWRlZiBzdHJ1Y3QKKyAgICB7CisgICAgQUVTX0tFWQkJa3M7CisgICAgU0hBX0NUWAkJaGVhZCx0YWlsLG1kOworICAgIHNpemVfdAkJcGF5bG9hZF9sZW5ndGg7CS8qIEFBRCBsZW5ndGggaW4gZGVjcnlwdCBjYXNlICovCisgICAgdW5pb24geworCXVuc2lnbmVkIGludAl0bHNfdmVyOworICAgIAl1bnNpZ25lZCBjaGFyCXRsc19hYWRbMTZdOwkvKiAxMyB1c2VkICovCisgICAgfSBhdXg7CisgICAgfSBFVlBfQUVTX0hNQUNfU0hBMTsKKworI2lmCWRlZmluZWQoQUVTX0FTTSkgJiYJKCBcCisJZGVmaW5lZChfX3g4Nl82NCkJfHwgZGVmaW5lZChfX3g4Nl82NF9fKQl8fCBcCisJZGVmaW5lZChfTV9BTUQ2NCkJfHwgZGVmaW5lZChfTV9YNjQpCXx8IFwKKwlkZWZpbmVkKF9fSU5URUxfXykJKQorCitleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOworI2RlZmluZSBBRVNOSV9DQVBBQkxFICAgKDE8PCg1Ny0zMikpCisKK2ludCBhZXNuaV9zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCisJCQkgICAgICBBRVNfS0VZICprZXkpOworaW50IGFlc25pX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBpbnQgYml0cywKKwkJCSAgICAgIEFFU19LRVkgKmtleSk7CisKK3ZvaWQgYWVzbmlfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisJCQkgICB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICBzaXplX3QgbGVuZ3RoLAorCQkJICAgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkJICAgdW5zaWduZWQgY2hhciAqaXZlYywgaW50IGVuYyk7CisKK3ZvaWQgYWVzbmlfY2JjX3NoYTFfZW5jIChjb25zdCB2b2lkICppbnAsIHZvaWQgKm91dCwgc2l6ZV90IGJsb2NrcywKKwkJY29uc3QgQUVTX0tFWSAqa2V5LCB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKwkJU0hBX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmluMCk7CisKKyNkZWZpbmUgZGF0YShjdHgpICgoRVZQX0FFU19ITUFDX1NIQTEgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCisKK3N0YXRpYyBpbnQgYWVzbmlfY2JjX2htYWNfc2hhMV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW5rZXksCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKwl7CisJRVZQX0FFU19ITUFDX1NIQTEgKmtleSA9IGRhdGEoY3R4KTsKKwlpbnQgcmV0OworCisJaWYgKGVuYykKKwkJcmV0PWFlc25pX3NldF9lbmNyeXB0X2tleShpbmtleSxjdHgtPmtleV9sZW4qOCwma2V5LT5rcyk7CisJZWxzZQorCQlyZXQ9YWVzbmlfc2V0X2RlY3J5cHRfa2V5KGlua2V5LGN0eC0+a2V5X2xlbio4LCZrZXktPmtzKTsKKworCVNIQTFfSW5pdCgma2V5LT5oZWFkKTsJLyogaGFuZHkgd2hlbiBiZW5jaG1hcmtpbmcgKi8KKwlrZXktPnRhaWwgPSBrZXktPmhlYWQ7CisJa2V5LT5tZCAgID0ga2V5LT5oZWFkOworCisJa2V5LT5wYXlsb2FkX2xlbmd0aCA9IDA7CisKKwlyZXR1cm4gcmV0PDA/MDoxOworCX0KKworI2RlZmluZQlTVElUQ0hFRF9DQUxMCisKKyNpZiAhZGVmaW5lZChTVElUQ0hFRF9DQUxMKQorI2RlZmluZQlhZXNfb2ZmIDAKKyNlbmRpZgorCit2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAodm9pZCAqYyxjb25zdCB2b2lkICpwLHNpemVfdCBsZW4pOworCitzdGF0aWMgdm9pZCBzaGExX3VwZGF0ZShTSEFfQ1RYICpjLGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGxlbikKK3sJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyID0gZGF0YTsKKwlzaXplX3QgcmVzOworCisJaWYgKChyZXMgPSBjLT5udW0pKSB7CisJCXJlcyA9IFNIQV9DQkxPQ0stcmVzOworCQlpZiAobGVuPHJlcykgcmVzPWxlbjsKKwkJU0hBMV9VcGRhdGUgKGMscHRyLHJlcyk7CisJCXB0ciArPSByZXM7CisJCWxlbiAtPSByZXM7CisJfQorCisJcmVzID0gbGVuICUgU0hBX0NCTE9DSzsKKwlsZW4gLT0gcmVzOworCisJaWYgKGxlbikgeworCQlzaGExX2Jsb2NrX2RhdGFfb3JkZXIoYyxwdHIsbGVuL1NIQV9DQkxPQ0spOworCisJCXB0ciArPSBsZW47CisJCWMtPk5oICs9IGxlbj4+Mjk7CisJCWMtPk5sICs9IGxlbjw8PTM7CisJCWlmIChjLT5ObDwodW5zaWduZWQgaW50KWxlbikgYy0+TmgrKzsKKwl9CisKKwlpZiAocmVzKQorCQlTSEExX1VwZGF0ZShjLHB0cixyZXMpOworfQorCisjZGVmaW5lIFNIQTFfVXBkYXRlIHNoYTFfdXBkYXRlCisKK3N0YXRpYyBpbnQgYWVzbmlfY2JjX2htYWNfc2hhMV9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbikKKwl7CisJRVZQX0FFU19ITUFDX1NIQTEgKmtleSA9IGRhdGEoY3R4KTsKKwl1bnNpZ25lZCBpbnQgbDsKKwlzaXplX3QJcGxlbiA9IGtleS0+cGF5bG9hZF9sZW5ndGgsCisJCWl2ID0gMCwJCS8qIGV4cGxpY2l0IElWIGluIFRMUyAxLjEgYW5kIGxhdGVyICovCisJCXNoYV9vZmYgPSAwOworI2lmIGRlZmluZWQoU1RJVENIRURfQ0FMTCkKKwlzaXplX3QJYWVzX29mZiA9IDAsCisJCWJsb2NrczsKKworCXNoYV9vZmYgPSBTSEFfQ0JMT0NLLWtleS0+bWQubnVtOworI2VuZGlmCisKKwlpZiAobGVuJUFFU19CTE9DS19TSVpFKSByZXR1cm4gMDsKKworCWlmIChjdHgtPmVuY3J5cHQpIHsKKwkJaWYgKHBsZW49PTApCisJCQlwbGVuID0gbGVuOworCQllbHNlIGlmIChsZW4hPSgocGxlbitTSEFfRElHRVNUX0xFTkdUSCtBRVNfQkxPQ0tfU0laRSkmLUFFU19CTE9DS19TSVpFKSkKKwkJCXJldHVybiAwOworCQllbHNlIGlmIChrZXktPmF1eC50bHNfdmVyID49IFRMUzFfMV9WRVJTSU9OKQorCQkJaXYgPSBBRVNfQkxPQ0tfU0laRTsKKworI2lmIGRlZmluZWQoU1RJVENIRURfQ0FMTCkKKwkJaWYgKHBsZW4+KHNoYV9vZmYraXYpICYmIChibG9ja3M9KHBsZW4tKHNoYV9vZmYraXYpKS9TSEFfQ0JMT0NLKSkgeworCQkJU0hBMV9VcGRhdGUoJmtleS0+bWQsaW4raXYsc2hhX29mZik7CisKKwkJCWFlc25pX2NiY19zaGExX2VuYyhpbixvdXQsYmxvY2tzLCZrZXktPmtzLAorCQkJCWN0eC0+aXYsJmtleS0+bWQsaW4raXYrc2hhX29mZik7CisJCQlibG9ja3MgKj0gU0hBX0NCTE9DSzsKKwkJCWFlc19vZmYgKz0gYmxvY2tzOworCQkJc2hhX29mZiArPSBibG9ja3M7CisJCQlrZXktPm1kLk5oICs9IGJsb2Nrcz4+Mjk7CisJCQlrZXktPm1kLk5sICs9IGJsb2Nrczw8PTM7CisJCQlpZiAoa2V5LT5tZC5ObDwodW5zaWduZWQgaW50KWJsb2Nrcykga2V5LT5tZC5OaCsrOworCQl9IGVsc2UgeworCQkJc2hhX29mZiA9IDA7CisJCX0KKyNlbmRpZgorCQlzaGFfb2ZmICs9IGl2OworCQlTSEExX1VwZGF0ZSgma2V5LT5tZCxpbitzaGFfb2ZmLHBsZW4tc2hhX29mZik7CisKKwkJaWYgKHBsZW4hPWxlbikJewkvKiAiVExTIiBtb2RlIG9mIG9wZXJhdGlvbiAqLworCQkJaWYgKGluIT1vdXQpCisJCQkJbWVtY3B5KG91dCthZXNfb2ZmLGluK2Flc19vZmYscGxlbi1hZXNfb2ZmKTsKKworCQkJLyogY2FsY3VsYXRlIEhNQUMgYW5kIGFwcGVuZCBpdCB0byBwYXlsb2FkICovCisJCQlTSEExX0ZpbmFsKG91dCtwbGVuLCZrZXktPm1kKTsKKwkJCWtleS0+bWQgPSBrZXktPnRhaWw7CisJCQlTSEExX1VwZGF0ZSgma2V5LT5tZCxvdXQrcGxlbixTSEFfRElHRVNUX0xFTkdUSCk7CisJCQlTSEExX0ZpbmFsKG91dCtwbGVuLCZrZXktPm1kKTsKKworCQkJLyogcGFkIHRoZSBwYXlsb2FkfGhtYWMgKi8KKwkJCXBsZW4gKz0gU0hBX0RJR0VTVF9MRU5HVEg7CisJCQlmb3IgKGw9bGVuLXBsZW4tMTtwbGVuPGxlbjtwbGVuKyspIG91dFtwbGVuXT1sOworCQkJLyogZW5jcnlwdCBITUFDfHBhZGRpbmcgYXQgb25jZSAqLworCQkJYWVzbmlfY2JjX2VuY3J5cHQob3V0K2Flc19vZmYsb3V0K2Flc19vZmYsbGVuLWFlc19vZmYsCisJCQkJCSZrZXktPmtzLGN0eC0+aXYsMSk7CisJCX0gZWxzZSB7CisJCQlhZXNuaV9jYmNfZW5jcnlwdChpbithZXNfb2ZmLG91dCthZXNfb2ZmLGxlbi1hZXNfb2ZmLAorCQkJCQkma2V5LT5rcyxjdHgtPml2LDEpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBtYWNbU0hBX0RJR0VTVF9MRU5HVEhdOworCisJCS8qIGRlY3J5cHQgSE1BQ3xwYWRkaW5nIGF0IG9uY2UgKi8KKwkJYWVzbmlfY2JjX2VuY3J5cHQoaW4sb3V0LGxlbiwKKwkJCQkma2V5LT5rcyxjdHgtPml2LDApOworCisJCWlmIChwbGVuKSB7CS8qICJUTFMiIG1vZGUgb2Ygb3BlcmF0aW9uICovCisJCQkvKiBmaWd1cmUgb3V0IHBheWxvYWQgbGVuZ3RoICovCisJCQlpZiAobGVuPChzaXplX3QpKG91dFtsZW4tMV0rMStTSEFfRElHRVNUX0xFTkdUSCkpCisJCQkJcmV0dXJuIDA7CisKKwkJCWxlbiAtPSAob3V0W2xlbi0xXSsxK1NIQV9ESUdFU1RfTEVOR1RIKTsKKworCQkJaWYgKChrZXktPmF1eC50bHNfYWFkW3BsZW4tNF08PDh8a2V5LT5hdXgudGxzX2FhZFtwbGVuLTNdKQorCQkJICAgID49IFRMUzFfMV9WRVJTSU9OKSB7CisJCQkJbGVuIC09IEFFU19CTE9DS19TSVpFOworCQkJCWl2ID0gQUVTX0JMT0NLX1NJWkU7CisJCQl9CisKKwkJCWtleS0+YXV4LnRsc19hYWRbcGxlbi0yXSA9IGxlbj4+ODsKKwkJCWtleS0+YXV4LnRsc19hYWRbcGxlbi0xXSA9IGxlbjsKKworCQkJLyogY2FsY3VsYXRlIEhNQUMgYW5kIHZlcmlmeSBpdCAqLworCQkJa2V5LT5tZCA9IGtleS0+aGVhZDsKKwkJCVNIQTFfVXBkYXRlKCZrZXktPm1kLGtleS0+YXV4LnRsc19hYWQscGxlbik7CisJCQlTSEExX1VwZGF0ZSgma2V5LT5tZCxvdXQraXYsbGVuKTsKKwkJCVNIQTFfRmluYWwobWFjLCZrZXktPm1kKTsKKworCQkJa2V5LT5tZCA9IGtleS0+dGFpbDsKKwkJCVNIQTFfVXBkYXRlKCZrZXktPm1kLG1hYyxTSEFfRElHRVNUX0xFTkdUSCk7CisJCQlTSEExX0ZpbmFsKG1hYywma2V5LT5tZCk7CisKKwkJCWlmIChtZW1jbXAob3V0K2l2K2xlbixtYWMsU0hBX0RJR0VTVF9MRU5HVEgpKQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJU0hBMV9VcGRhdGUoJmtleS0+bWQsb3V0LGxlbik7CisJCX0KKwl9CisKKwlrZXktPnBheWxvYWRfbGVuZ3RoID0gMDsKKworCXJldHVybiAxOworCX0KKworc3RhdGljIGludCBhZXNuaV9jYmNfaG1hY19zaGExX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKwl7CisJRVZQX0FFU19ITUFDX1NIQTEgKmtleSA9IGRhdGEoY3R4KTsKKworCXN3aXRjaCAodHlwZSkKKwkJeworCWNhc2UgRVZQX0NUUkxfQUVBRF9TRVRfTUFDX0tFWToKKwkJeworCQl1bnNpZ25lZCBpbnQgIGk7CisJCXVuc2lnbmVkIGNoYXIgaG1hY19rZXlbNjRdOworCisJCW1lbXNldCAoaG1hY19rZXksMCxzaXplb2YoaG1hY19rZXkpKTsKKworCQlpZiAoYXJnID4gKGludClzaXplb2YoaG1hY19rZXkpKSB7CisJCQlTSEExX0luaXQoJmtleS0+aGVhZCk7CisJCQlTSEExX1VwZGF0ZSgma2V5LT5oZWFkLHB0cixhcmcpOworCQkJU0hBMV9GaW5hbChobWFjX2tleSwma2V5LT5oZWFkKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShobWFjX2tleSxwdHIsYXJnKTsKKwkJfQorCisJCWZvciAoaT0wO2k8c2l6ZW9mKGhtYWNfa2V5KTtpKyspCisJCQlobWFjX2tleVtpXSBePSAweDM2OwkJLyogaXBhZCAqLworCQlTSEExX0luaXQoJmtleS0+aGVhZCk7CisJCVNIQTFfVXBkYXRlKCZrZXktPmhlYWQsaG1hY19rZXksc2l6ZW9mKGhtYWNfa2V5KSk7CisKKwkJZm9yIChpPTA7aTxzaXplb2YoaG1hY19rZXkpO2krKykKKwkJCWhtYWNfa2V5W2ldIF49IDB4MzZeMHg1YzsJLyogb3BhZCAqLworCQlTSEExX0luaXQoJmtleS0+dGFpbCk7CisJCVNIQTFfVXBkYXRlKCZrZXktPnRhaWwsaG1hY19rZXksc2l6ZW9mKGhtYWNfa2V5KSk7CisKKwkJcmV0dXJuIDE7CisJCX0KKwljYXNlIEVWUF9DVFJMX0FFQURfVExTMV9BQUQ6CisJCXsKKwkJdW5zaWduZWQgY2hhciAqcD1wdHI7CisJCXVuc2lnbmVkIGludCAgIGxlbj1wW2FyZy0yXTw8OHxwW2FyZy0xXTsKKworCQlpZiAoY3R4LT5lbmNyeXB0KQorCQkJeworCQkJa2V5LT5wYXlsb2FkX2xlbmd0aCA9IGxlbjsKKwkJCWlmICgoa2V5LT5hdXgudGxzX3Zlcj1wW2FyZy00XTw8OHxwW2FyZy0zXSkgPj0gVExTMV8xX1ZFUlNJT04pIHsKKwkJCQlsZW4gLT0gQUVTX0JMT0NLX1NJWkU7CisJCQkJcFthcmctMl0gPSBsZW4+Pjg7CisJCQkJcFthcmctMV0gPSBsZW47CisJCQl9CisJCQlrZXktPm1kID0ga2V5LT5oZWFkOworCQkJU0hBMV9VcGRhdGUoJmtleS0+bWQscCxhcmcpOworCisJCQlyZXR1cm4gKGludCkoKChsZW4rU0hBX0RJR0VTVF9MRU5HVEgrQUVTX0JMT0NLX1NJWkUpJi1BRVNfQkxPQ0tfU0laRSkKKwkJCQktIGxlbik7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCWlmIChhcmc+MTMpIGFyZyA9IDEzOworCQkJbWVtY3B5KGtleS0+YXV4LnRsc19hYWQscHRyLGFyZyk7CisJCQlrZXktPnBheWxvYWRfbGVuZ3RoID0gYXJnOworCisJCQlyZXR1cm4gU0hBX0RJR0VTVF9MRU5HVEg7CisJCQl9CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKK3N0YXRpYyBFVlBfQ0lQSEVSIGFlc25pXzEyOF9jYmNfaG1hY19zaGExX2NpcGhlciA9CisJeworI2lmZGVmIE5JRF9hZXNfMTI4X2NiY19obWFjX3NoYTEKKwlOSURfYWVzXzEyOF9jYmNfaG1hY19zaGExLAorI2Vsc2UKKwlOSURfdW5kZWYsCisjZW5kaWYKKwkxNiwxNiwxNiwKKwlFVlBfQ0lQSF9DQkNfTU9ERXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMXxFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSLAorCWFlc25pX2NiY19obWFjX3NoYTFfaW5pdF9rZXksCisJYWVzbmlfY2JjX2htYWNfc2hhMV9jaXBoZXIsCisJTlVMTCwKKwlzaXplb2YoRVZQX0FFU19ITUFDX1NIQTEpLAorCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xP05VTEw6RVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKwlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMT9OVUxMOkVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisJYWVzbmlfY2JjX2htYWNfc2hhMV9jdHJsLAorCU5VTEwKKwl9OworCitzdGF0aWMgRVZQX0NJUEhFUiBhZXNuaV8yNTZfY2JjX2htYWNfc2hhMV9jaXBoZXIgPQorCXsKKyNpZmRlZiBOSURfYWVzXzI1Nl9jYmNfaG1hY19zaGExCisJTklEX2Flc18yNTZfY2JjX2htYWNfc2hhMSwKKyNlbHNlCisJTklEX3VuZGVmLAorI2VuZGlmCisJMTYsMzIsMTYsCisJRVZQX0NJUEhfQ0JDX01PREV8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjF8RVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiwKKwlhZXNuaV9jYmNfaG1hY19zaGExX2luaXRfa2V5LAorCWFlc25pX2NiY19obWFjX3NoYTFfY2lwaGVyLAorCU5VTEwsCisJc2l6ZW9mKEVWUF9BRVNfSE1BQ19TSEExKSwKKwlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMT9OVUxMOkVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCisJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjE/TlVMTDpFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorCWFlc25pX2NiY19obWFjX3NoYTFfY3RybCwKKwlOVUxMCisJfTsKKworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMSh2b2lkKQorCXsKKwlyZXR1cm4oT1BFTlNTTF9pYTMyY2FwX1BbMV0mQUVTTklfQ0FQQUJMRT8KKwkJJmFlc25pXzEyOF9jYmNfaG1hY19zaGExX2NpcGhlcjpOVUxMKTsKKwl9CisKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTEodm9pZCkKKwl7CisJcmV0dXJuKE9QRU5TU0xfaWEzMmNhcF9QWzFdJkFFU05JX0NBUEFCTEU/CisJCSZhZXNuaV8yNTZfY2JjX2htYWNfc2hhMV9jaXBoZXI6TlVMTCk7CisJfQorI2Vsc2UKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTEodm9pZCkKKwl7CisJcmV0dXJuIE5VTEw7CisJfQorY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSh2b2lkKQorCXsKKwlyZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX2RlczMuYyBiL2NyeXB0by9ldnAvZV9kZXMzLmMKaW5kZXggMzIzMmNmZS4uMWU2OTk3MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9lX2RlczMuYworKysgYi9jcnlwdG8vZXZwL2VfZGVzMy5jCkBAIC02NSw2ICs2NSw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KIAorI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKwogc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKIApAQCAtMzExLDMgKzMxMyw0IEBACiAJcmV0dXJuICZkZXNfZWRlM19lY2I7CiB9CiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX251bGwuYyBiL2NyeXB0by9ldnAvZV9udWxsLmMKaW5kZXggN2NmNTBlMS4uZjBjMWY3OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9lX251bGwuYworKysgYi9jcnlwdG8vZXZwL2VfbnVsbC5jCkBAIC02MSw2ICs2MSw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KIAorI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKwogc3RhdGljIGludCBudWxsX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LApAQCAtOTksNCArMTAxLDQgQEAKIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFyICopaW4saW5sKTsKIAlyZXR1cm4gMTsKIAl9Ci0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX3JjMi5jIGIvY3J5cHRvL2V2cC9lX3JjMi5jCmluZGV4IGY3OGQ3ODEuLmQ0YzMzYjUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9yYzIuYworKysgYi9jcnlwdG8vZXZwL2VfcmMyLmMKQEAgLTE4Myw3ICsxODMsOCBAQAogCQlrZXlfYml0cyA9cmMyX21hZ2ljX3RvX21ldGgoKGludCludW0pOwogCQlpZiAoIWtleV9iaXRzKQogCQkJcmV0dXJuKC0xKTsKLQkJaWYoaSA+IDApIEVWUF9DaXBoZXJJbml0X2V4KGMsIE5VTEwsIE5VTEwsIE5VTEwsIGl2LCAtMSk7CisJCWlmKGkgPiAwICYmICFFVlBfQ2lwaGVySW5pdF9leChjLCBOVUxMLCBOVUxMLCBOVUxMLCBpdiwgLTEpKQorCQkJcmV0dXJuIC0xOwogCQlFVlBfQ0lQSEVSX0NUWF9jdHJsKGMsIEVWUF9DVFJMX1NFVF9SQzJfS0VZX0JJVFMsIGtleV9iaXRzLCBOVUxMKTsKIAkJRVZQX0NJUEhFUl9DVFhfc2V0X2tleV9sZW5ndGgoYywga2V5X2JpdHMgLyA4KTsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9lX3JjNC5jIGIvY3J5cHRvL2V2cC9lX3JjNC5jCmluZGV4IDhiNTE3NWUuLmI0ZjZiZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZV9yYzQuYworKysgYi9jcnlwdG8vZXZwL2VfcmM0LmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKIAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMgYi9jcnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhN2E1MwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9ldnAvZV9yYzRfaG1hY19tZDUuYwpAQCAtMCwwICsxLDI5MyBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19SQzQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTUQ1KQorCisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CisKKyNpZm5kZWYgRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUgorI2RlZmluZSBFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSCTB4MjAwMDAwCisjZGVmaW5lIEVWUF9DVFJMX0FFQURfVExTMV9BQUQJCTB4MTYKKyNkZWZpbmUgRVZQX0NUUkxfQUVBRF9TRVRfTUFDX0tFWQkweDE3CisjZW5kaWYKKworLyogRklYTUU6IHN1cmVseSB0aGlzIGlzIGF2YWlsYWJsZSBlbHNld2hlcmU/ICovCisjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CisKK3R5cGVkZWYgc3RydWN0CisgICAgeworICAgIFJDNF9LRVkJCWtzOworICAgIE1ENV9DVFgJCWhlYWQsdGFpbCxtZDsKKyAgICBzaXplX3QJCXBheWxvYWRfbGVuZ3RoOworICAgIH0gRVZQX1JDNF9ITUFDX01ENTsKKwordm9pZCByYzRfbWQ1X2VuYyAoUkM0X0tFWSAqa2V5LCBjb25zdCB2b2lkICppbjAsIHZvaWQgKm91dCwKKwkJTUQ1X0NUWCAqY3R4LGNvbnN0IHZvaWQgKmlucCxzaXplX3QgYmxvY2tzKTsKKworI2RlZmluZSBkYXRhKGN0eCkgKChFVlBfUkM0X0hNQUNfTUQ1ICopKGN0eCktPmNpcGhlcl9kYXRhKQorCitzdGF0aWMgaW50IHJjNF9obWFjX21kNV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW5rZXksCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKwl7CisJRVZQX1JDNF9ITUFDX01ENSAqa2V5ID0gZGF0YShjdHgpOworCisJUkM0X3NldF9rZXkoJmtleS0+a3MsRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpLAorCQkgICAgaW5rZXkpOworCisJTUQ1X0luaXQoJmtleS0+aGVhZCk7CS8qIGhhbmR5IHdoZW4gYmVuY2htYXJraW5nICovCisJa2V5LT50YWlsID0ga2V5LT5oZWFkOworCWtleS0+bWQgICA9IGtleS0+aGVhZDsKKworCWtleS0+cGF5bG9hZF9sZW5ndGggPSAwOworCisJcmV0dXJuIDE7CisJfQorCisjaWYJIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmCSggXAorCWRlZmluZWQoX194ODZfNjQpCXx8IGRlZmluZWQoX194ODZfNjRfXykJfHwgXAorCWRlZmluZWQoX01fQU1ENjQpCXx8IGRlZmluZWQoX01fWDY0KQl8fCBcCisJZGVmaW5lZChfX0lOVEVMX18pCQkpICYmIFwKKwkhKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDSF9fKSkKKyNkZWZpbmUJU1RJVENIRURfQ0FMTAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTVElUQ0hFRF9DQUxMKQorI2RlZmluZQlyYzRfb2ZmIDAKKyNkZWZpbmUJbWQ1X29mZiAwCisjZW5kaWYKKworc3RhdGljIGludCByYzRfaG1hY19tZDVfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pCisJeworCUVWUF9SQzRfSE1BQ19NRDUgKmtleSA9IGRhdGEoY3R4KTsKKyNpZiBkZWZpbmVkKFNUSVRDSEVEX0NBTEwpCisJc2l6ZV90CXJjNF9vZmYgPSAzMi0xLShrZXktPmtzLngmKDMyLTEpKSwJLyogMzIgaXMgJE1PRCBmcm9tIHJjNF9tZDUteDg2XzY0LnBsICovCisJCW1kNV9vZmYgPSBNRDVfQ0JMT0NLLWtleS0+bWQubnVtLAorCQlibG9ja3M7CisJdW5zaWduZWQgaW50IGw7CisjZW5kaWYKKwlzaXplX3QJcGxlbiA9IGtleS0+cGF5bG9hZF9sZW5ndGg7CisKKwlpZiAocGxlbiAmJiBsZW4hPShwbGVuK01ENV9ESUdFU1RfTEVOR1RIKSkgcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5lbmNyeXB0KSB7CisJCWlmIChwbGVuPT0wKSBwbGVuID0gbGVuOworI2lmIGRlZmluZWQoU1RJVENIRURfQ0FMTCkKKwkJLyogY2lwaGVyIGhhcyB0byAiZmFsbCBiZWhpbmQiICovCisJCWlmIChyYzRfb2ZmPm1kNV9vZmYpIG1kNV9vZmYrPU1ENV9DQkxPQ0s7CisKKwkJaWYgKHBsZW4+bWQ1X29mZiAmJiAoYmxvY2tzPShwbGVuLW1kNV9vZmYpL01ENV9DQkxPQ0spKSB7CisJCQlNRDVfVXBkYXRlKCZrZXktPm1kLGluLG1kNV9vZmYpOworCQkJUkM0KCZrZXktPmtzLHJjNF9vZmYsaW4sb3V0KTsKKworCQkJcmM0X21kNV9lbmMoJmtleS0+a3MsaW4rcmM0X29mZixvdXQrcmM0X29mZiwKKwkJCQkma2V5LT5tZCxpbittZDVfb2ZmLGJsb2Nrcyk7CisJCQlibG9ja3MgKj0gTUQ1X0NCTE9DSzsKKwkJCXJjNF9vZmYgKz0gYmxvY2tzOworCQkJbWQ1X29mZiArPSBibG9ja3M7CisJCQlrZXktPm1kLk5oICs9IGJsb2Nrcz4+Mjk7CisJCQlrZXktPm1kLk5sICs9IGJsb2Nrczw8PTM7CisJCQlpZiAoa2V5LT5tZC5ObDwodW5zaWduZWQgaW50KWJsb2Nrcykga2V5LT5tZC5OaCsrOworCQl9IGVsc2UgeworCQkJcmM0X29mZiA9IDA7CisJCQltZDVfb2ZmID0gMDsKKwkJfQorI2VuZGlmCisJCU1ENV9VcGRhdGUoJmtleS0+bWQsaW4rbWQ1X29mZixwbGVuLW1kNV9vZmYpOworCisJCWlmIChwbGVuIT1sZW4pIHsJLyogIlRMUyIgbW9kZSBvZiBvcGVyYXRpb24gKi8KKwkJCWlmIChpbiE9b3V0KQorCQkJCW1lbWNweShvdXQrcmM0X29mZixpbityYzRfb2ZmLHBsZW4tcmM0X29mZik7CisKKwkJCS8qIGNhbGN1bGF0ZSBITUFDIGFuZCBhcHBlbmQgaXQgdG8gcGF5bG9hZCAqLworCQkJTUQ1X0ZpbmFsKG91dCtwbGVuLCZrZXktPm1kKTsKKwkJCWtleS0+bWQgPSBrZXktPnRhaWw7CisJCQlNRDVfVXBkYXRlKCZrZXktPm1kLG91dCtwbGVuLE1ENV9ESUdFU1RfTEVOR1RIKTsKKwkJCU1ENV9GaW5hbChvdXQrcGxlbiwma2V5LT5tZCk7CisJCQkvKiBlbmNyeXB0IEhNQUMgYXQgb25jZSAqLworCQkJUkM0KCZrZXktPmtzLGxlbi1yYzRfb2ZmLG91dCtyYzRfb2ZmLG91dCtyYzRfb2ZmKTsKKwkJfSBlbHNlIHsKKwkJCVJDNCgma2V5LT5rcyxsZW4tcmM0X29mZixpbityYzRfb2ZmLG91dCtyYzRfb2ZmKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgbWFjW01ENV9ESUdFU1RfTEVOR1RIXTsKKyNpZiBkZWZpbmVkKFNUSVRDSEVEX0NBTEwpCisJCS8qIGRpZ2VzdCBoYXMgdG8gImZhbGwgYmVoaW5kIiAqLworCQlpZiAobWQ1X29mZj5yYzRfb2ZmKQlyYzRfb2ZmICs9IDIqTUQ1X0NCTE9DSzsKKwkJZWxzZQkJCXJjNF9vZmYgKz0gTUQ1X0NCTE9DSzsKKworCQlpZiAobGVuPnJjNF9vZmYgJiYgKGJsb2Nrcz0obGVuLXJjNF9vZmYpL01ENV9DQkxPQ0spKSB7CisJCQlSQzQoJmtleS0+a3MscmM0X29mZixpbixvdXQpOworCQkJTUQ1X1VwZGF0ZSgma2V5LT5tZCxvdXQsbWQ1X29mZik7CisKKwkJCXJjNF9tZDVfZW5jKCZrZXktPmtzLGluK3JjNF9vZmYsb3V0K3JjNF9vZmYsCisJCQkJJmtleS0+bWQsb3V0K21kNV9vZmYsYmxvY2tzKTsKKwkJCWJsb2NrcyAqPSBNRDVfQ0JMT0NLOworCQkJcmM0X29mZiArPSBibG9ja3M7CisJCQltZDVfb2ZmICs9IGJsb2NrczsKKwkJCWwgPSAoa2V5LT5tZC5ObCsoYmxvY2tzPDwzKSkmMHhmZmZmZmZmZlU7CisJCQlpZiAobDxrZXktPm1kLk5sKSBrZXktPm1kLk5oKys7CisJCQlrZXktPm1kLk5sICA9IGw7CisJCQlrZXktPm1kLk5oICs9IGJsb2Nrcz4+Mjk7CisJCX0gZWxzZSB7CisJCQltZDVfb2ZmPTA7CisJCQlyYzRfb2ZmPTA7CisJCX0KKyNlbmRpZgorCQkvKiBkZWNyeXB0IEhNQUMgYXQgb25jZSAqLworCQlSQzQoJmtleS0+a3MsbGVuLXJjNF9vZmYsaW4rcmM0X29mZixvdXQrcmM0X29mZik7CisJCWlmIChwbGVuKSB7CS8qICJUTFMiIG1vZGUgb2Ygb3BlcmF0aW9uICovCisJCQlNRDVfVXBkYXRlKCZrZXktPm1kLG91dCttZDVfb2ZmLHBsZW4tbWQ1X29mZik7CisKKwkJCS8qIGNhbGN1bGF0ZSBITUFDIGFuZCB2ZXJpZnkgaXQgKi8KKwkJCU1ENV9GaW5hbChtYWMsJmtleS0+bWQpOworCQkJa2V5LT5tZCA9IGtleS0+dGFpbDsKKwkJCU1ENV9VcGRhdGUoJmtleS0+bWQsbWFjLE1ENV9ESUdFU1RfTEVOR1RIKTsKKwkJCU1ENV9GaW5hbChtYWMsJmtleS0+bWQpOworCisJCQlpZiAobWVtY21wKG91dCtwbGVuLG1hYyxNRDVfRElHRVNUX0xFTkdUSCkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlNRDVfVXBkYXRlKCZrZXktPm1kLG91dCttZDVfb2ZmLGxlbi1tZDVfb2ZmKTsKKwkJfQorCX0KKworCWtleS0+cGF5bG9hZF9sZW5ndGggPSAwOworCisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IHJjNF9obWFjX21kNV9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisJeworCUVWUF9SQzRfSE1BQ19NRDUgKmtleSA9IGRhdGEoY3R4KTsKKworCXN3aXRjaCAodHlwZSkKKwkJeworCWNhc2UgRVZQX0NUUkxfQUVBRF9TRVRfTUFDX0tFWToKKwkJeworCQl1bnNpZ25lZCBpbnQgIGk7CisJCXVuc2lnbmVkIGNoYXIgaG1hY19rZXlbNjRdOworCisJCW1lbXNldCAoaG1hY19rZXksMCxzaXplb2YoaG1hY19rZXkpKTsKKworCQlpZiAoYXJnID4gKGludClzaXplb2YoaG1hY19rZXkpKSB7CisJCQlNRDVfSW5pdCgma2V5LT5oZWFkKTsKKwkJCU1ENV9VcGRhdGUoJmtleS0+aGVhZCxwdHIsYXJnKTsKKwkJCU1ENV9GaW5hbChobWFjX2tleSwma2V5LT5oZWFkKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShobWFjX2tleSxwdHIsYXJnKTsKKwkJfQorCisJCWZvciAoaT0wO2k8c2l6ZW9mKGhtYWNfa2V5KTtpKyspCisJCQlobWFjX2tleVtpXSBePSAweDM2OwkJLyogaXBhZCAqLworCQlNRDVfSW5pdCgma2V5LT5oZWFkKTsKKwkJTUQ1X1VwZGF0ZSgma2V5LT5oZWFkLGhtYWNfa2V5LHNpemVvZihobWFjX2tleSkpOworCisJCWZvciAoaT0wO2k8c2l6ZW9mKGhtYWNfa2V5KTtpKyspCisJCQlobWFjX2tleVtpXSBePSAweDM2XjB4NWM7CS8qIG9wYWQgKi8KKwkJTUQ1X0luaXQoJmtleS0+dGFpbCk7CisJCU1ENV9VcGRhdGUoJmtleS0+dGFpbCxobWFjX2tleSxzaXplb2YoaG1hY19rZXkpKTsKKworCQlyZXR1cm4gMTsKKwkJfQorCWNhc2UgRVZQX0NUUkxfQUVBRF9UTFMxX0FBRDoKKwkJeworCQl1bnNpZ25lZCBjaGFyICpwPXB0cjsKKwkJdW5zaWduZWQgaW50ICAgbGVuPXBbYXJnLTJdPDw4fHBbYXJnLTFdOworCisJCWlmICghY3R4LT5lbmNyeXB0KQorCQkJeworCQkJbGVuIC09IE1ENV9ESUdFU1RfTEVOR1RIOworCQkJcFthcmctMl0gPSBsZW4+Pjg7CisJCQlwW2FyZy0xXSA9IGxlbjsKKwkJCX0KKwkJa2V5LT5wYXlsb2FkX2xlbmd0aD1sZW47CisJCWtleS0+bWQgPSBrZXktPmhlYWQ7CisJCU1ENV9VcGRhdGUoJmtleS0+bWQscCxhcmcpOworCisJCXJldHVybiBNRDVfRElHRVNUX0xFTkdUSDsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwkJfQorCX0KKworc3RhdGljIEVWUF9DSVBIRVIgcjRfaG1hY19tZDVfY2lwaGVyPQorCXsKKyNpZmRlZiBOSURfcmM0X2htYWNfbWQ1CisJTklEX3JjNF9obWFjX21kNSwKKyNlbHNlCisJTklEX3VuZGVmLAorI2VuZGlmCisJMSxFVlBfUkM0X0tFWV9TSVpFLDAsCisJRVZQX0NJUEhfU1RSRUFNX0NJUEhFUnxFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEh8RVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUiwKKwlyYzRfaG1hY19tZDVfaW5pdF9rZXksCisJcmM0X2htYWNfbWQ1X2NpcGhlciwKKwlOVUxMLAorCXNpemVvZihFVlBfUkM0X0hNQUNfTUQ1KSwKKwlOVUxMLAorCU5VTEwsCisJcmM0X2htYWNfbWQ1X2N0cmwsCisJTlVMTAorCX07CisKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9yYzRfaG1hY19tZDUodm9pZCkKKwl7CisJcmV0dXJuKCZyNF9obWFjX21kNV9jaXBoZXIpOworCX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnAuaCBiL2NyeXB0by9ldnAvZXZwLmgKaW5kZXggOWY5Nzk1ZS4uMGQxYjIwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnAuaAorKysgYi9jcnlwdG8vZXZwL2V2cC5oCkBAIC04Myw3ICs4Myw3IEBACiAjZGVmaW5lIEVWUF9SQzVfMzJfMTJfMTZfS0VZX1NJWkUJMTYKICovCiAjZGVmaW5lIEVWUF9NQVhfTURfU0laRQkJCTY0CS8qIGxvbmdlc3Qga25vd24gaXMgU0hBNTEyICovCi0jZGVmaW5lIEVWUF9NQVhfS0VZX0xFTkdUSAkJMzIKKyNkZWZpbmUgRVZQX01BWF9LRVlfTEVOR1RICQk2NAogI2RlZmluZSBFVlBfTUFYX0lWX0xFTkdUSAkJMTYKICNkZWZpbmUgRVZQX01BWF9CTE9DS19MRU5HVEgJCTMyCiAKQEAgLTExNiw2ICsxMTYsNyBAQAogI2RlZmluZSBFVlBfUEtFWV9ESAlOSURfZGhLZXlBZ3JlZW1lbnQKICNkZWZpbmUgRVZQX1BLRVlfRUMJTklEX1g5XzYyX2lkX2VjUHVibGljS2V5CiAjZGVmaW5lIEVWUF9QS0VZX0hNQUMJTklEX2htYWMKKyNkZWZpbmUgRVZQX1BLRVlfQ01BQwlOSURfY21hYwogCiAjaWZkZWYJX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMjE2LDYgKzIxNyw4IEBACiAKICNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfQ1VTVE9NCQkweDAwMTgKIAorI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisKIC8qIERpZ2VzdCBjdHJscyAqLwogCiAjZGVmaW5lCUVWUF9NRF9DVFJMX0RJR0FMR0lECQkJMHgxCkBAIC0zMjUsNiArMzI4LDEwIEBACiAjZGVmaW5lCQlFVlBfQ0lQSF9DQkNfTU9ERQkJMHgyCiAjZGVmaW5lCQlFVlBfQ0lQSF9DRkJfTU9ERQkJMHgzCiAjZGVmaW5lCQlFVlBfQ0lQSF9PRkJfTU9ERQkJMHg0CisjZGVmaW5lCQlFVlBfQ0lQSF9DVFJfTU9ERQkJMHg1CisjZGVmaW5lCQlFVlBfQ0lQSF9HQ01fTU9ERQkJMHg2CisjZGVmaW5lCQlFVlBfQ0lQSF9DQ01fTU9ERQkJMHg3CisjZGVmaW5lCQlFVlBfQ0lQSF9YVFNfTU9ERQkJMHgxMDAwMQogI2RlZmluZSAJRVZQX0NJUEhfTU9ERQkJCTB4RjAwMDcKIC8qIFNldCBpZiB2YXJpYWJsZSBsZW5ndGggY2lwaGVyICovCiAjZGVmaW5lIAlFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEgJMHg4CkBAIC0zNDYsNiArMzUzLDE1IEBACiAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCiAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAorLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMDAKKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAwCisvKiBDaXBoZXIgaGFuZGxlcyBhbnkgYW5kIGFsbCBwYWRkaW5nIGxvZ2ljIGFzIHdlbGwKKyAqIGFzIGZpbmFsaXNhdGlvbi4KKyAqLworI2RlZmluZSAJRVZQX0NJUEhfRkxBR19DVVNUT01fQ0lQSEVSCTB4MTAwMDAwCisjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSCTB4MjAwMDAwCiAKIC8qIGN0cmwoKSB2YWx1ZXMgKi8KIApAQCAtMzU4LDYgKzM3NCwzNCBAQAogI2RlZmluZSAJRVZQX0NUUkxfUkFORF9LRVkJCTB4NgogI2RlZmluZSAJRVZQX0NUUkxfUEJFX1BSRl9OSUQJCTB4NwogI2RlZmluZSAJRVZQX0NUUkxfQ09QWQkJCTB4OAorI2RlZmluZSAJRVZQX0NUUkxfR0NNX1NFVF9JVkxFTgkJMHg5CisjZGVmaW5lIAlFVlBfQ1RSTF9HQ01fR0VUX1RBRwkJMHgxMAorI2RlZmluZSAJRVZQX0NUUkxfR0NNX1NFVF9UQUcJCTB4MTEKKyNkZWZpbmUJCUVWUF9DVFJMX0dDTV9TRVRfSVZfRklYRUQJMHgxMgorI2RlZmluZQkJRVZQX0NUUkxfR0NNX0lWX0dFTgkJMHgxMworI2RlZmluZQkJRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTgkJRVZQX0NUUkxfR0NNX1NFVF9JVkxFTgorI2RlZmluZQkJRVZQX0NUUkxfQ0NNX0dFVF9UQUcJCUVWUF9DVFJMX0dDTV9HRVRfVEFHCisjZGVmaW5lCQlFVlBfQ1RSTF9DQ01fU0VUX1RBRwkJRVZQX0NUUkxfR0NNX1NFVF9UQUcKKyNkZWZpbmUJCUVWUF9DVFJMX0NDTV9TRVRfTAkJMHgxNAorI2RlZmluZQkJRVZQX0NUUkxfQ0NNX1NFVF9NU0dMRU4JCTB4MTUKKy8qIEFFQUQgY2lwaGVyIGRlZHVjZXMgcGF5bG9hZCBsZW5ndGggYW5kIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzCisgKiByZXF1aXJlZCB0byBzdG9yZSBNQUMgYW5kIGV2ZW50dWFsIHBhZGRpbmcuIFN1YnNlcXVlbnQgY2FsbCB0bworICogRVZQX0NpcGhlciBldmVuIGFwcGVuZHMvdmVyaWZpZXMgTUFDLgorICovCisjZGVmaW5lCQlFVlBfQ1RSTF9BRUFEX1RMUzFfQUFECQkweDE2CisvKiBVc2VkIGJ5IGNvbXBvc2l0ZSBBRUFEIGNpcGhlcnMsIG5vLW9wIGluIEdDTSwgQ0NNLi4uICovCisjZGVmaW5lCQlFVlBfQ1RSTF9BRUFEX1NFVF9NQUNfS0VZCTB4MTcKKy8qIFNldCB0aGUgR0NNIGludm9jYXRpb24gZmllbGQsIGRlY3J5cHQgb25seSAqLworI2RlZmluZQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9JTlYJCTB4MTgKKworLyogR0NNIFRMUyBjb25zdGFudHMgKi8KKy8qIExlbmd0aCBvZiBmaXhlZCBwYXJ0IG9mIElWIGRlcml2ZWQgZnJvbSBQUkYgKi8KKyNkZWZpbmUgRVZQX0dDTV9UTFNfRklYRURfSVZfTEVOCQkJNAorLyogTGVuZ3RoIG9mIGV4cGxpY2l0IHBhcnQgb2YgSVYgcGFydCBvZiBUTFMgcmVjb3JkcyAqLworI2RlZmluZSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU4JCQk4CisvKiBMZW5ndGggb2YgdGFnIGZvciBUTFMgKi8KKyNkZWZpbmUgRVZQX0dDTV9UTFNfVEFHX0xFTgkJCQkxNgorCiAKIHR5cGVkZWYgc3RydWN0IGV2cF9jaXBoZXJfaW5mb19zdAogCXsKQEAgLTM3NSw3ICs0MTksNyBAQAogCXVuc2lnbmVkIGNoYXIgIG9pdltFVlBfTUFYX0lWX0xFTkdUSF07CS8qIG9yaWdpbmFsIGl2ICovCiAJdW5zaWduZWQgY2hhciAgaXZbRVZQX01BWF9JVl9MRU5HVEhdOwkvKiB3b3JraW5nIGl2ICovCiAJdW5zaWduZWQgY2hhciBidWZbRVZQX01BWF9CTE9DS19MRU5HVEhdOy8qIHNhdmVkIHBhcnRpYWwgYmxvY2sgKi8KLQlpbnQgbnVtOwkJCQkvKiB1c2VkIGJ5IGNmYi9vZmIgbW9kZSAqLworCWludCBudW07CQkJCS8qIHVzZWQgYnkgY2ZiL29mYi9jdHIgbW9kZSAqLwogCiAJdm9pZCAqYXBwX2RhdGE7CQkvKiBhcHBsaWNhdGlvbiBzdHVmZiAqLwogCWludCBrZXlfbGVuOwkJLyogTWF5IGNoYW5nZSBmb3IgdmFyaWFibGUgbGVuZ3RoIGNpcGhlciAqLwpAQCAtNjk1LDYgKzczOSw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0CiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfcmM0KHZvaWQpOwogY29uc3QgRVZQX0NJUEhFUiAqRVZQX3JjNF80MCh2b2lkKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9yYzRfaG1hY19tZDUodm9pZCk7CisjZW5kaWYKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9pZGVhX2VjYih2b2lkKTsKQEAgLTc0MSw5ICs3ODgsMTAgQEAKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NmYjEyOCh2b2lkKTsKICMgZGVmaW5lIEVWUF9hZXNfMTI4X2NmYiBFVlBfYWVzXzEyOF9jZmIxMjgKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X29mYih2b2lkKTsKLSNpZiAwCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jdHIodm9pZCk7Ci0jZW5kaWYKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2djbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NjbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X3h0cyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2VjYih2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEodm9pZCk7CkBAIC03NTEsOSArNzk5LDkgQEAKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEyOCh2b2lkKTsKICMgZGVmaW5lIEVWUF9hZXNfMTkyX2NmYiBFVlBfYWVzXzE5Ml9jZmIxMjgKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX29mYih2b2lkKTsKLSNpZiAwCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jdHIodm9pZCk7Ci0jZW5kaWYKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2djbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NjbSh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2VjYih2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NiYyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEodm9pZCk7CkBAIC03NjEsOCArODA5LDEzIEBACiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCk7CiAjIGRlZmluZSBFVlBfYWVzXzI1Nl9jZmIgRVZQX2Flc18yNTZfY2ZiMTI4CiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9vZmIodm9pZCk7Ci0jaWYgMAogY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY3RyKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZ2NtKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2NtKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfeHRzKHZvaWQpOworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCitjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSh2b2lkKTsKICNlbmRpZgogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKQEAgLTEwNDcsMTMgKzExMDAsMjIgQEAKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9DTVNfREVDUllQVAkxMAogI2RlZmluZSBFVlBfUEtFWV9DVFJMX0NNU19TSUdOCQkxMQogCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfQ0lQSEVSCQkxMgorCiAjZGVmaW5lIEVWUF9QS0VZX0FMR19DVFJMCQkweDEwMDAKIAogCiAjZGVmaW5lIEVWUF9QS0VZX0ZMQUdfQVVUT0FSR0xFTgkyCisvKiBNZXRob2QgaGFuZGxlcyBhbGwgb3BlcmF0aW9uczogZG9uJ3QgYXNzdW1lIGFueSBkaWdlc3QgcmVsYXRlZAorICogZGVmYXVsdHMuCisgKi8KKyNkZWZpbmUgRVZQX1BLRVlfRkxBR19TSUdDVFhfQ1VTVE9NCTQKIAogY29uc3QgRVZQX1BLRVlfTUVUSE9EICpFVlBfUEtFWV9tZXRoX2ZpbmQoaW50IHR5cGUpOwogRVZQX1BLRVlfTUVUSE9EKiBFVlBfUEtFWV9tZXRoX25ldyhpbnQgaWQsIGludCBmbGFncyk7Cit2b2lkIEVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvKGludCAqcHBrZXlfaWQsIGludCAqcGZsYWdzLAorCQkJCWNvbnN0IEVWUF9QS0VZX01FVEhPRCAqbWV0aCk7Cit2b2lkIEVWUF9QS0VZX21ldGhfY29weShFVlBfUEtFWV9NRVRIT0QgKmRzdCwgY29uc3QgRVZQX1BLRVlfTUVUSE9EICpzcmMpOwogdm9pZCBFVlBfUEtFWV9tZXRoX2ZyZWUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCk7CiBpbnQgRVZQX1BLRVlfbWV0aF9hZGQwKGNvbnN0IEVWUF9QS0VZX01FVEhPRCAqcG1ldGgpOwogCkBAIC0xMDcxLDcgKzExMzMsNyBAQAogdm9pZCBFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbyhFVlBfUEtFWV9DVFggKmN0eCwgaW50ICpkYXQsIGludCBkYXRsZW4pOwogCiBFVlBfUEtFWSAqRVZQX1BLRVlfbmV3X21hY19rZXkoaW50IHR5cGUsIEVOR0lORSAqZSwKLQkJCQl1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CiAKIHZvaWQgRVZQX1BLRVlfQ1RYX3NldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4LCB2b2lkICpkYXRhKTsKIHZvaWQgKkVWUF9QS0VZX0NUWF9nZXRfZGF0YShFVlBfUEtFWV9DVFggKmN0eCk7CkBAIC0xMTkwLDggKzEyNTIsMTMgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgRVZQIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCisjZGVmaW5lIEVWUF9GX0FFU05JX0lOSVRfS0VZCQkJCSAxNjUKKyNkZWZpbmUgRVZQX0ZfQUVTTklfWFRTX0NJUEhFUgkJCQkgMTc2CiAjZGVmaW5lIEVWUF9GX0FFU19JTklUX0tFWQkJCQkgMTMzCisjZGVmaW5lIEVWUF9GX0FFU19YVFMJCQkJCSAxNzIKKyNkZWZpbmUgRVZQX0ZfQUVTX1hUU19DSVBIRVIJCQkJIDE3NQogI2RlZmluZSBFVlBfRl9DQU1FTExJQV9JTklUX0tFWQkJCQkgMTU5CisjZGVmaW5lIEVWUF9GX0NNQUNfSU5JVAkJCQkJIDE3MwogI2RlZmluZSBFVlBfRl9EMklfUEtFWQkJCQkJIDEwMAogI2RlZmluZSBFVlBfRl9ET19TSUdWRVJfSU5JVAkJCQkgMTYxCiAjZGVmaW5lIEVWUF9GX0RTQVBLRVkyUEtDUzgJCQkJIDEzNApAQCAtMTI0NiwxNSArMTMxMywyNCBAQAogI2RlZmluZSBFVlBfRl9FVlBfUklKTkRBRUwJCQkJIDEyNgogI2RlZmluZSBFVlBfRl9FVlBfU0lHTkZJTkFMCQkJCSAxMDcKICNkZWZpbmUgRVZQX0ZfRVZQX1ZFUklGWUZJTkFMCQkJCSAxMDgKKyNkZWZpbmUgRVZQX0ZfRklQU19DSVBIRVJJTklUCQkJCSAxNjYKKyNkZWZpbmUgRVZQX0ZfRklQU19DSVBIRVJfQ1RYX0NPUFkJCQkgMTcwCisjZGVmaW5lIEVWUF9GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2NworI2RlZmluZSBFVlBfRl9GSVBTX0NJUEhFUl9DVFhfU0VUX0tFWV9MRU5HVEgJCSAxNzEKKyNkZWZpbmUgRVZQX0ZfRklQU19ESUdFU1RJTklUCQkJCSAxNjgKKyNkZWZpbmUgRVZQX0ZfRklQU19NRF9DVFhfQ09QWQkJCQkgMTY5CisjZGVmaW5lIEVWUF9GX0hNQUNfSU5JVF9FWAkJCQkgMTc0CiAjZGVmaW5lIEVWUF9GX0lOVF9DVFhfTkVXCQkJCSAxNTcKICNkZWZpbmUgRVZQX0ZfUEtDUzVfUEJFX0tFWUlWR0VOCQkJIDExNwogI2RlZmluZSBFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4JCQkgMTE4CisjZGVmaW5lIEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTgkJCSAxNjQKICNkZWZpbmUgRVZQX0ZfUEtDUzhfU0VUX0JST0tFTgkJCQkgMTEyCiAjZGVmaW5lIEVWUF9GX1BLRVlfU0VUX1RZUEUJCQkJIDE1OAogI2RlZmluZSBFVlBfRl9SQzJfTUFHSUNfVE9fTUVUSAkJCQkgMTA5CiAjZGVmaW5lIEVWUF9GX1JDNV9DVFJMCQkJCQkgMTI1CiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRVZQX1JfQUVTX0lWX1NFVFVQX0ZBSUxFRAkJCSAxNjIKICNkZWZpbmUgRVZQX1JfQUVTX0tFWV9TRVRVUF9GQUlMRUQJCQkgMTQzCiAjZGVmaW5lIEVWUF9SX0FTTjFfTElCCQkJCQkgMTQwCiAjZGVmaW5lIEVWUF9SX0JBRF9CTE9DS19MRU5HVEgJCQkJIDEzNgpAQCAtMTI3Miw2ICsxMzQ4LDcgQEAKICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCisjZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjMKICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUKICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQogI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKQEAgLTEzMDMsNiArMTM4MCw3IEBACiAjZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUgkJCSAxNDUKICNkZWZpbmUgRVZQX1JfUFJJVkFURV9LRVlfRU5DT0RFX0VSUk9SCQkJIDE0NgogI2RlZmluZSBFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EJCQkgMTA2CisjZGVmaW5lIEVWUF9SX1RPT19MQVJHRQkJCQkJIDE2NAogI2RlZmluZSBFVlBfUl9VTktOT1dOX0NJUEhFUgkJCQkgMTYwCiAjZGVmaW5lIEVWUF9SX1VOS05PV05fRElHRVNUCQkJCSAxNjEKICNkZWZpbmUgRVZQX1JfVU5LTk9XTl9QQkVfQUxHT1JJVEhNCQkJIDEyMQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfZW5jLmMgYi9jcnlwdG8vZXZwL2V2cF9lbmMuYwppbmRleCBjMjY4ZDI1Li42OTEwNzI2IDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2V2cF9lbmMuYworKysgYi9jcnlwdG8vZXZwL2V2cF9lbmMuYwpAQCAtNjQsOCArNjQsMTggQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgogI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKICNpbmNsdWRlICJldnBfbG9jbC5oIgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBGSVBTX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKKyNlbHNlCisjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorI2VuZGlmCisKKwogY29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIAogdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCkBAIC0xMTUsMTAgKzEyNSwxNCBAQAogCQkvKiBFbnN1cmUgYSBjb250ZXh0IGxlZnQgbHlpbmcgYXJvdW5kIGZyb20gbGFzdCB0aW1lIGlzIGNsZWFyZWQKIAkJICogKHRoZSBwcmV2aW91cyBjaGVjayBhdHRlbXB0ZWQgdG8gYXZvaWQgdGhpcyBpZiB0aGUgc2FtZQogCQkgKiBFTkdJTkUgYW5kIEVWUF9DSVBIRVIgY291bGQgYmUgdXNlZCkuICovCi0JCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoY3R4KTsKLQotCQkvKiBSZXN0b3JlIGVuY3J5cHQgZmllbGQ6IGl0IGlzIHplcm9lZCBieSBjbGVhbnVwICovCi0JCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKwkJaWYgKGN0eC0+Y2lwaGVyKQorCQkJeworCQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IGN0eC0+ZmxhZ3M7CisJCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKGN0eCk7CisJCQkvKiBSZXN0b3JlIGVuY3J5cHQgYW5kIGZsYWdzICovCisJCQljdHgtPmVuY3J5cHQgPSBlbmM7CisJCQljdHgtPmZsYWdzID0gZmxhZ3M7CisJCQl9CiAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCiAJCWlmKGltcGwpCiAJCQl7CkBAIC0xNTUsNiArMTY5LDkgQEAKIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKICNlbmRpZgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCXJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CisjZWxzZQogCQljdHgtPmNpcGhlcj1jaXBoZXI7CiAJCWlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpCiAJCQl7CkBAIC0xNzksNiArMTk2LDcgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CisjZW5kaWYKIAkJfQogCWVsc2UgaWYoIWN0eC0+Y2lwaGVyKQogCQl7CkBAIC0xODgsNiArMjA2LDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIHNraXBfdG9faW5pdDoKICNlbmRpZgorI2lmZGVmIE9QRU5TU0xfRklQUworCXJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CisjZWxzZQogCS8qIHdlIGFzc3VtZSBibG9jayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8KIAlPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxCiAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKQEAgLTIxNCw2ICsyMzUsMTMgQEAKIAkJCW1lbWNweShjdHgtPml2LCBjdHgtPm9pdiwgRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eCkpOwogCQkJYnJlYWs7CiAKKwkJCWNhc2UgRVZQX0NJUEhfQ1RSX01PREU6CisJCQljdHgtPm51bSA9IDA7CisJCQkvKiBEb24ndCByZXVzZSBJViBmb3IgQ1RSIG1vZGUgKi8KKwkJCWlmKGl2KQorCQkJCW1lbWNweShjdHgtPml2LCBpdiwgRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eCkpOworCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwpAQCAtMjI3LDYgKzI1NSw3IEBACiAJY3R4LT5maW5hbF91c2VkPTA7CiAJY3R4LT5ibG9ja19tYXNrPWN0eC0+Y2lwaGVyLT5ibG9ja19zaXplLTE7CiAJcmV0dXJuIDE7CisjZW5kaWYKIAl9CiAKIGludCBFVlBfQ2lwaGVyVXBkYXRlKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLApAQCAtMjgwLDYgKzMwOSwxNiBAQAogCXsKIAlpbnQgaSxqLGJsOwogCisJaWYgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUikKKwkJeworCQlpID0gTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJKm91dGwgPSBpOworCQlyZXR1cm4gMTsKKwkJfQorCiAJaWYgKGlubCA8PSAwKQogCQl7CiAJCSpvdXRsID0gMDsKQEAgLTI4OCw3ICszMjcsNyBAQAogCiAJaWYoY3R4LT5idWZfbGVuID09IDAgJiYgKGlubCYoY3R4LT5ibG9ja19tYXNrKSkgPT0gMCkKIAkJewotCQlpZihjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKSkKKwkJaWYoTV9kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpKQogCQkJewogCQkJKm91dGw9aW5sOwogCQkJcmV0dXJuIDE7CkBAIC0zMTUsNyArMzU0LDcgQEAKIAkJCXsKIAkJCWo9YmwtaTsKIAkJCW1lbWNweSgmKGN0eC0+YnVmW2ldKSxpbixqKTsKLQkJCWlmKCFjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsY3R4LT5idWYsYmwpKSByZXR1cm4gMDsKKwkJCWlmKCFNX2RvX2NpcGhlcihjdHgsb3V0LGN0eC0+YnVmLGJsKSkgcmV0dXJuIDA7CiAJCQlpbmwtPWo7CiAJCQlpbis9ajsKIAkJCW91dCs9Ymw7CkBAIC0zMjgsNyArMzY3LDcgQEAKIAlpbmwtPWk7CiAJaWYgKGlubCA+IDApCiAJCXsKLQkJaWYoIWN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpKSByZXR1cm4gMDsKKwkJaWYoIU1fZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKSkgcmV0dXJuIDA7CiAJCSpvdXRsKz1pbmw7CiAJCX0KIApAQCAtMzUwLDYgKzM4OSwxNiBAQAogCWludCBuLHJldDsKIAl1bnNpZ25lZCBpbnQgaSwgYiwgYmw7CiAKKwlpZiAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19DVVNUT01fQ0lQSEVSKQorCQl7CisJCXJldCA9IE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZSAKKwkJCSpvdXRsID0gcmV0OworCQlyZXR1cm4gMTsKKwkJfQorCiAJYj1jdHgtPmNpcGhlci0+YmxvY2tfc2l6ZTsKIAlPUEVOU1NMX2Fzc2VydChiIDw9IHNpemVvZiBjdHgtPmJ1Zik7CiAJaWYgKGIgPT0gMSkKQEAgLTM3Miw3ICs0MjEsNyBAQAogCW49Yi1ibDsKIAlmb3IgKGk9Ymw7IGk8YjsgaSsrKQogCQljdHgtPmJ1ZltpXT1uOwotCXJldD1jdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsY3R4LT5idWYsYik7CisJcmV0PU1fZG9fY2lwaGVyKGN0eCxvdXQsY3R4LT5idWYsYik7CiAKIAogCWlmKHJldCkKQEAgLTM4Nyw2ICs0MzYsMTkgQEAKIAlpbnQgZml4X2xlbjsKIAl1bnNpZ25lZCBpbnQgYjsKIAorCWlmIChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIpCisJCXsKKwkJZml4X2xlbiA9IE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKTsKKwkJaWYgKGZpeF9sZW4gPCAwKQorCQkJeworCQkJKm91dGwgPSAwOworCQkJcmV0dXJuIDA7CisJCQl9CisJCWVsc2UKKwkJCSpvdXRsID0gZml4X2xlbjsKKwkJcmV0dXJuIDE7CisJCX0KKwogCWlmIChpbmwgPD0gMCkKIAkJewogCQkqb3V0bCA9IDA7CkBAIC00NDAsOCArNTAyLDE4IEBACiAJewogCWludCBpLG47CiAJdW5zaWduZWQgaW50IGI7Ci0KIAkqb3V0bD0wOworCisJaWYgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfQ1VTVE9NX0NJUEhFUikKKwkJeworCQlpID0gTV9kb19jaXBoZXIoY3R4LCBvdXQsIE5VTEwsIDApOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJKm91dGwgPSBpOworCQlyZXR1cm4gMTsKKwkJfQorCiAJYj1jdHgtPmNpcGhlci0+YmxvY2tfc2l6ZTsKIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9DSVBIX05PX1BBRERJTkcpCiAJCXsKQEAgLTQ5Niw2ICs1NjgsNyBAQAogCiBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKIAl7CisjaWZuZGVmIE9QRU5TU0xfRklQUwogCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKIAkJewogCQlpZihjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhlci0+Y2xlYW51cChjKSkKQEAgLTUwNiwxMiArNTc5LDE2IEBACiAJCX0KIAlpZiAoYy0+Y2lwaGVyX2RhdGEpCiAJCU9QRU5TU0xfZnJlZShjLT5jaXBoZXJfZGF0YSk7CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIAlpZiAoYy0+ZW5naW5lKQogCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQogCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KIAkJRU5HSU5FX2ZpbmlzaChjLT5lbmdpbmUpOwogI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJRklQU19jaXBoZXJfY3R4X2NsZWFudXAoYyk7CisjZW5kaWYKIAltZW1zZXQoYywwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwogCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwX2Vyci5jIGIvY3J5cHRvL2V2cC9ldnBfZXJyLmMKaW5kZXggZDhiZmVjMC4uZGIwZjc2ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfZXJyLmMKKysrIGIvY3J5cHRvL2V2cC9ldnBfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vZXZwL2V2cF9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcwLDggKzcwLDEzIEBACiAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9mdW5jdHNbXT0KIAl7Cit7RVJSX0ZVTkMoRVZQX0ZfQUVTTklfSU5JVF9LRVkpLAkiQUVTTklfSU5JVF9LRVkifSwKK3tFUlJfRlVOQyhFVlBfRl9BRVNOSV9YVFNfQ0lQSEVSKSwJIkFFU05JX1hUU19DSVBIRVIifSwKIHtFUlJfRlVOQyhFVlBfRl9BRVNfSU5JVF9LRVkpLAkiQUVTX0lOSVRfS0VZIn0sCit7RVJSX0ZVTkMoRVZQX0ZfQUVTX1hUUyksCSJBRVNfWFRTIn0sCit7RVJSX0ZVTkMoRVZQX0ZfQUVTX1hUU19DSVBIRVIpLAkiQUVTX1hUU19DSVBIRVIifSwKIHtFUlJfRlVOQyhFVlBfRl9DQU1FTExJQV9JTklUX0tFWSksCSJDQU1FTExJQV9JTklUX0tFWSJ9LAore0VSUl9GVU5DKEVWUF9GX0NNQUNfSU5JVCksCSJDTUFDX0lOSVQifSwKIHtFUlJfRlVOQyhFVlBfRl9EMklfUEtFWSksCSJEMklfUEtFWSJ9LAoge0VSUl9GVU5DKEVWUF9GX0RPX1NJR1ZFUl9JTklUKSwJIkRPX1NJR1ZFUl9JTklUIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRFNBUEtFWTJQS0NTOCksCSJEU0FQS0VZMlBLQ1M4In0sCkBAIC04Niw3ICs5MSw3IEBACiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgpLAkiRVZQX0RpZ2VzdEluaXRfZXgifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfRU5DUllQVEZJTkFMX0VYKSwJIkVWUF9FbmNyeXB0RmluYWxfZXgifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfTURfQ1RYX0NPUFlfRVgpLAkiRVZQX01EX0NUWF9jb3B5X2V4In0sCi17RVJSX0ZVTkMoRVZQX0ZfRVZQX01EX1NJWkUpLAkiRVZQX01EX1NJWkUifSwKK3tFUlJfRlVOQyhFVlBfRl9FVlBfTURfU0laRSksCSJFVlBfTURfc2l6ZSJ9LAoge0VSUl9GVU5DKEVWUF9GX0VWUF9PUEVOSU5JVCksCSJFVlBfT3BlbkluaXQifSwKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUEJFX0FMR19BREQpLAkiRVZQX1BCRV9hbGdfYWRkIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BCRV9BTEdfQUREX1RZUEUpLAkiRVZQX1BCRV9hbGdfYWRkX3R5cGUifSwKQEAgLTEyNiw5ICsxMzEsMTcgQEAKIHtFUlJfRlVOQyhFVlBfRl9FVlBfUklKTkRBRUwpLAkiRVZQX1JJSk5EQUVMIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1NJR05GSU5BTCksCSJFVlBfU2lnbkZpbmFsIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1ZFUklGWUZJTkFMKSwJIkVWUF9WZXJpZnlGaW5hbCJ9LAore0VSUl9GVU5DKEVWUF9GX0ZJUFNfQ0lQSEVSSU5JVCksCSJGSVBTX0NJUEhFUklOSVQifSwKK3tFUlJfRlVOQyhFVlBfRl9GSVBTX0NJUEhFUl9DVFhfQ09QWSksCSJGSVBTX0NJUEhFUl9DVFhfQ09QWSJ9LAore0VSUl9GVU5DKEVWUF9GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMKSwJIkZJUFNfQ0lQSEVSX0NUWF9DVFJMIn0sCit7RVJSX0ZVTkMoRVZQX0ZfRklQU19DSVBIRVJfQ1RYX1NFVF9LRVlfTEVOR1RIKSwJIkZJUFNfQ0lQSEVSX0NUWF9TRVRfS0VZX0xFTkdUSCJ9LAore0VSUl9GVU5DKEVWUF9GX0ZJUFNfRElHRVNUSU5JVCksCSJGSVBTX0RJR0VTVElOSVQifSwKK3tFUlJfRlVOQyhFVlBfRl9GSVBTX01EX0NUWF9DT1BZKSwJIkZJUFNfTURfQ1RYX0NPUFkifSwKK3tFUlJfRlVOQyhFVlBfRl9ITUFDX0lOSVRfRVgpLAkiSE1BQ19Jbml0X2V4In0sCiB7RVJSX0ZVTkMoRVZQX0ZfSU5UX0NUWF9ORVcpLAkiSU5UX0NUWF9ORVcifSwKIHtFUlJfRlVOQyhFVlBfRl9QS0NTNV9QQkVfS0VZSVZHRU4pLAkiUEtDUzVfUEJFX2tleWl2Z2VuIn0sCiB7RVJSX0ZVTkMoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOKSwJIlBLQ1M1X3YyX1BCRV9rZXlpdmdlbiJ9LAore0VSUl9GVU5DKEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTiksCSJQS0NTNV9WMl9QQktERjJfS0VZSVZHRU4ifSwKIHtFUlJfRlVOQyhFVlBfRl9QS0NTOF9TRVRfQlJPS0VOKSwJIlBLQ1M4X3NldF9icm9rZW4ifSwKIHtFUlJfRlVOQyhFVlBfRl9QS0VZX1NFVF9UWVBFKSwJIlBLRVlfU0VUX1RZUEUifSwKIHtFUlJfRlVOQyhFVlBfRl9SQzJfTUFHSUNfVE9fTUVUSCksCSJSQzJfTUFHSUNfVE9fTUVUSCJ9LApAQCAtMTM4LDYgKzE1MSw3IEBACiAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW109CiAJewore0VSUl9SRUFTT04oRVZQX1JfQUVTX0lWX1NFVFVQX0ZBSUxFRCkgICAsImFlcyBpdiBzZXR1cCBmYWlsZWQifSwKIHtFUlJfUkVBU09OKEVWUF9SX0FFU19LRVlfU0VUVVBfRkFJTEVEKSAgLCJhZXMga2V5IHNldHVwIGZhaWxlZCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfQVNOMV9MSUIpICAgICAgICAgICAgICAsImFzbjEgbGliIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9CQURfQkxPQ0tfTEVOR1RIKSAgICAgICwiYmFkIGJsb2NrIGxlbmd0aCJ9LApAQCAtMTU1LDYgKzE2OSw3IEBACiB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTKSAgICwiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAoge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMpICAsImRpZmZlcmVudCBwYXJhbWV0ZXJzIn0sCit7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKIHtFUlJfUkVBU09OKEVWUF9SX0VOQ09ERV9FUlJPUikgICAgICAgICAgLCJlbmNvZGUgZXJyb3IifSwKIHtFUlJfUkVBU09OKEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUiksImV2cCBwYmUgY2lwaGVyaW5pdCBlcnJvciJ9LAoge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0sCkBAIC0xODYsNiArMjAxLDcgQEAKIHtFUlJfUkVBU09OKEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUiksInByaXZhdGUga2V5IGRlY29kZSBlcnJvciJ9LAoge0VSUl9SRUFTT04oRVZQX1JfUFJJVkFURV9LRVlfRU5DT0RFX0VSUk9SKSwicHJpdmF0ZSBrZXkgZW5jb2RlIGVycm9yIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EpICAgICwicHVibGljIGtleSBub3QgcnNhIn0sCit7RVJSX1JFQVNPTihFVlBfUl9UT09fTEFSR0UpICAgICAgICAgICAgICwidG9vIGxhcmdlIn0sCiB7RVJSX1JFQVNPTihFVlBfUl9VTktOT1dOX0NJUEhFUikgICAgICAgICwidW5rbm93biBjaXBoZXIifSwKIHtFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fRElHRVNUKSAgICAgICAgLCJ1bmtub3duIGRpZ2VzdCJ9LAoge0VSUl9SRUFTT04oRVZQX1JfVU5LTk9XTl9QQkVfQUxHT1JJVEhNKSAsInVua25vd24gcGJlIGFsZ29yaXRobSJ9LApkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfa2V5LmMgYi9jcnlwdG8vZXZwL2V2cF9rZXkuYwppbmRleCA4MzlkNmEzLi43OTYxZmJlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL2V2cF9rZXkuYworKysgYi9jcnlwdG8vZXZwL2V2cF9rZXkuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJdW5zaWduZWQgY2hhciBtZF9idWZbRVZQX01BWF9NRF9TSVpFXTsKIAlpbnQgbml2LG5rZXksYWRkbWQ9MDsKIAl1bnNpZ25lZCBpbnQgbWRzPTAsaTsKLQorCWludCBydiA9IDA7CiAJbmtleT10eXBlLT5rZXlfbGVuOwogCW5pdj10eXBlLT5pdl9sZW47CiAJT1BFTlNTTF9hc3NlcnQobmtleSA8PSBFVlBfTUFYX0tFWV9MRU5HVEgpOwpAQCAtMTM0LDE3ICsxMzQsMjQgQEAKIAkJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmYyxtZCwgTlVMTCkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGFkZG1kKyspCi0JCQlFVlBfRGlnZXN0VXBkYXRlKCZjLCYobWRfYnVmWzBdKSxtZHMpOwotCQlFVlBfRGlnZXN0VXBkYXRlKCZjLGRhdGEsZGF0YWwpOworCQkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKCZjLCYobWRfYnVmWzBdKSxtZHMpKQorCQkJCWdvdG8gZXJyOworCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUoJmMsZGF0YSxkYXRhbCkpCisJCQlnb3RvIGVycjsKIAkJaWYgKHNhbHQgIT0gTlVMTCkKLQkJCUVWUF9EaWdlc3RVcGRhdGUoJmMsc2FsdCxQS0NTNV9TQUxUX0xFTik7Ci0JCUVWUF9EaWdlc3RGaW5hbF9leCgmYywmKG1kX2J1ZlswXSksJm1kcyk7CisJCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUoJmMsc2FsdCxQS0NTNV9TQUxUX0xFTikpCisJCQkJZ290byBlcnI7CisJCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KCZjLCYobWRfYnVmWzBdKSwmbWRzKSkKKwkJCWdvdG8gZXJyOwogCiAJCWZvciAoaT0xOyBpPCh1bnNpZ25lZCBpbnQpY291bnQ7IGkrKykKIAkJCXsKLQkJCUVWUF9EaWdlc3RJbml0X2V4KCZjLG1kLCBOVUxMKTsKLQkJCUVWUF9EaWdlc3RVcGRhdGUoJmMsJihtZF9idWZbMF0pLG1kcyk7Ci0JCQlFVlBfRGlnZXN0RmluYWxfZXgoJmMsJihtZF9idWZbMF0pLCZtZHMpOworCQkJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmYyxtZCwgTlVMTCkpCisJCQkJZ290byBlcnI7CisJCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUoJmMsJihtZF9idWZbMF0pLG1kcykpCisJCQkJZ290byBlcnI7CisJCQlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmYywmKG1kX2J1ZlswXSksJm1kcykpCisJCQkJZ290byBlcnI7CiAJCQl9CiAJCWk9MDsKIAkJaWYgKG5rZXkpCkBAIC0xNzMsOCArMTgwLDEwIEBACiAJCQl9CiAJCWlmICgobmtleSA9PSAwKSAmJiAobml2ID09IDApKSBicmVhazsKIAkJfQorCXJ2ID0gdHlwZS0+a2V5X2xlbjsKKwllcnI6CiAJRVZQX01EX0NUWF9jbGVhbnVwKCZjKTsKIAlPUEVOU1NMX2NsZWFuc2UoJihtZF9idWZbMF0pLEVWUF9NQVhfTURfU0laRSk7Ci0JcmV0dXJuKHR5cGUtPmtleV9sZW4pOworCXJldHVybiBydjsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwX2xpYi5jIGIvY3J5cHRvL2V2cC9ldnBfbGliLmMKaW5kZXggNDA5NTFhMC4uYjE4MGU0OCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfbGliLmMKKysrIGIvY3J5cHRvL2V2cC9ldnBfbGliLmMKQEAgLTY3LDYgKzY3LDggQEAKIAogCWlmIChjLT5jaXBoZXItPnNldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKIAkJcmV0PWMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOworCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKwkJcmV0PUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7CiAJZWxzZQogCQlyZXQ9LTE7CiAJcmV0dXJuKHJldCk7CkBAIC03OCw2ICs4MCw4IEBACiAKIAlpZiAoYy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCiAJCXJldD1jLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRlcnMoYyx0eXBlKTsKKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCisJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMsIHR5cGUpOwogCWVsc2UKIAkJcmV0PS0xOwogCXJldHVybihyZXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9ldnBfbG9jbC5oIGIvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCmluZGV4IDI5MmQ3NGMuLjA4YzBhNjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorKysgYi9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKQEAgLTM0MywzICszNDMsNDMgQEAKIAl9IC8qIEVWUF9QS0VZX01FVEhPRCAqLzsKIAogdm9pZCBldnBfcGtleV9zZXRfY2JfdHJhbnNsYXRlKEJOX0dFTkNCICpjYiwgRVZQX1BLRVlfQ1RYICpjdHgpOworCitpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAorCQkJICAgICBBU04xX1RZUEUgKnBhcmFtLAorCQkJICAgICBjb25zdCBFVlBfQ0lQSEVSICpjLCBjb25zdCBFVlBfTUQgKm1kLCBpbnQgZW5fZGUpOworCisjaWZkZWYgT1BFTlNTTF9GSVBTCisKKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKyN1bmRlZiBTSEExX0luaXQKKyN1bmRlZiBTSEExX1VwZGF0ZQorI3VuZGVmIFNIQTIyNF9Jbml0CisjdW5kZWYgU0hBMjU2X0luaXQKKyN1bmRlZiBTSEEzODRfSW5pdAorI3VuZGVmIFNIQTUxMl9Jbml0CisjdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2VkCisjZW5kaWYKKworI2RlZmluZSBSSVBFTUQxNjBfSW5pdAlwcml2YXRlX1JJUEVNRDE2MF9Jbml0CisjZGVmaW5lIFdISVJMUE9PTF9Jbml0CXByaXZhdGVfV0hJUkxQT09MX0luaXQKKyNkZWZpbmUgTUQ1X0luaXQJcHJpdmF0ZV9NRDVfSW5pdAorI2RlZmluZSBNRDRfSW5pdAlwcml2YXRlX01ENF9Jbml0CisjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKKyNkZWZpbmUgTURDMl9Jbml0CXByaXZhdGVfTURDMl9Jbml0CisjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQKKyNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hBMV9Jbml0CisjZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZhdGVfU0hBMjI0X0luaXQKKyNkZWZpbmUgU0hBMjU2X0luaXQJcHJpdmF0ZV9TSEEyNTZfSW5pdAorI2RlZmluZSBTSEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0CisjZGVmaW5lIFNIQTUxMl9Jbml0CXByaXZhdGVfU0hBNTEyX0luaXQKKworI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQorI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKKyNkZWZpbmUgaWRlYV9zZXRfZW5jcnlwdF9rZXkJcHJpdmF0ZV9pZGVhX3NldF9lbmNyeXB0X2tleQorI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CisjZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAorI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvZXZwX3BiZS5jIGIvY3J5cHRvL2V2cC9ldnBfcGJlLmMKaW5kZXggYzlkOTMyZC4uZjhjMzJkOCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9ldnBfcGJlLmMKKysrIGIvY3J5cHRvL2V2cC9ldnBfcGJlLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKIAogLyogUGFzc3dvcmQgYmFzZWQgZW5jcnlwdGlvbiAoUEJFKSBmdW5jdGlvbnMgKi8KIApAQCAtODcsNiArODgsMTAgQEAKIAl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlV2l0aFNIQTFBbmRSQzJfQ0JDLAogCQkJTklEX3JjMl82NF9jYmMsIE5JRF9zaGExLCBQS0NTNV9QQkVfa2V5aXZnZW59LAogCisjaWZuZGVmIE9QRU5TU0xfTk9fSE1BQworCXtFVlBfUEJFX1RZUEVfT1VURVIsIE5JRF9pZF9wYmtkZjIsIC0xLCAtMSwgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VufSwKKyNlbmRpZgorCiAJe0VWUF9QQkVfVFlQRV9PVVRFUiwgTklEX3BiZV9XaXRoU0hBMUFuZDEyOEJpdFJDNCwKIAkJCU5JRF9yYzQsIE5JRF9zaGExLCBQS0NTMTJfUEJFX2tleWl2Z2VufSwKIAl7RVZQX1BCRV9UWVBFX09VVEVSLCBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzQsCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dCBiL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0CmluZGV4IGJlYjEyMTQuLmMyNzM3MDcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0CisrKyBiL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0CkBAIC0xNTgsNiArMTU4LDE5IEBACiBBRVMtMjU2LU9GQjo2MDNERUIxMDE1Q0E3MUJFMkI3M0FFRjA4NTdENzc4MTFGMzUyQzA3M0I2MTA4RDcyRDk4MTBBMzA5MTRERkY0OkUxQzY1NjMwNUVEMUE3QTY1NjM4MDU3NDZGRTAzRURDOjMwQzgxQzQ2QTM1Q0U0MTFFNUZCQzExOTFBMEE1MkVGOjcxQUI0N0EwODZFODZFRURGMzlEMUM1QkJBOTdDNDA4OjAKIEFFUy0yNTYtT0ZCOjYwM0RFQjEwMTVDQTcxQkUyQjczQUVGMDg1N0Q3NzgxMUYzNTJDMDczQjYxMDhENzJEOTgxMEEzMDkxNERGRjQ6NDE2MzVCRTYyNUI0OEFGQzE2NjZERDQyQTA5RDk2RTc6RjY5RjI0NDVERjRGOUIxN0FEMkI0MTdCRTY2QzM3MTA6MDEyNjE0MUQ2N0YzN0JFODUzOEY1QThCRTc0MEU0ODQ6MAogCisjIEFFUyBDb3VudGVyIHRlc3QgdmVjdG9ycyBmcm9tIFJGQzM2ODYKK2Flcy0xMjgtY3RyOkFFNjg1MkY4MTIxMDY3Q0M0QkY3QTU3NjU1NzdGMzlFOjAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOjUzNjk2RTY3NkM2NTIwNjI2QzZGNjM2QjIwNkQ3MzY3OkU0MDk1RDRGQjdBN0IzNzkyRDYxNzVBMzI2MTMxMUI4OjEKK2Flcy0xMjgtY3RyOjdFMjQwNjc4MTdGQUUwRDc0M0Q2Q0UxRjMyNTM5MTYzOjAwNkNCNkRCQzA1NDNCNTlEQTQ4RDkwQjAwMDAwMDAxOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUY6NTEwNEExMDYxNjhBNzJEOTc5MEQ0MUVFOEVEQUQzODhFQjJFMUVGQzQ2REE1N0M4RkNFNjMwREY5MTQxQkUyODoxCithZXMtMTI4LWN0cjo3NjkxQkUwMzVFNTAyMEE4QUM2RTYxODUyOUY5QTBEQzowMEUwMDE3QjI3Nzc3RjNGNEExNzg2RjAwMDAwMDAwMTowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGMjAyMTIyMjM6QzFDRjQ4QTg5RjJGRkREOUNGNDY1MkU5RUZEQjcyRDc0NTQwQTQyQkRFNkQ3ODM2RDU5QTVDRUFBRUYzMTA1MzI1QjIwNzJGOjEKKworYWVzLTE5Mi1jdHI6MTZBRjVCMTQ1RkM5RjU3OUMxNzVGOTNFM0JGQjBFRUQ4NjNEMDZDQ0ZEQjc4NTE1OjAwMDAwMDQ4MzY3MzNDMTQ3RDZEOTNDQjAwMDAwMDAxOjUzNjk2RTY3NkM2NTIwNjI2QzZGNjM2QjIwNkQ3MzY3OjRCNTUzODRGRTI1OUM5Qzg0RTc5MzVBMDAzQ0JFOTI4OjEKK2Flcy0xOTItY3RyOjdDNUNCMjQwMUIzREMzM0MxOUU3MzQwODE5RTBGNjlDNjc4QzNEQjhFNkY2QTkxQTowMDk2QjAzQjAyMEM2RUFEQzJDQjUwMEQwMDAwMDAwMTowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjEwMTExMjEzMTQxNTE2MTcxODE5MUExQjFDMUQxRTFGOjQ1MzI0M0ZDNjA5QjIzMzI3RURGQUFGQTcxMzFDRDlGODQ5MDcwMUM1QUQ0QTc5Q0ZDMUZFMEZGNDJGNEZCMDA6MQorYWVzLTE5Mi1jdHI6MDJCRjM5MUVFOEVDQjE1OUI5NTk2MTdCMDk2NTI3OUJGNTlCNjBBNzg2RDNFMEZFOjAwMDdCREZENUNCRDYwMjc4RENDMDkxMjAwMDAwMDAxOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUYyMDIxMjIyMzo5Njg5M0ZDNTVFNUM3MjJGNTQwQjdERDFEREY3RTc1OEQyODhCQzk1QzY5MTY1ODg0NTM2QzgxMTY2MkYyMTg4QUJFRTA5MzU6MQorCithZXMtMjU2LWN0cjo3NzZCRUZGMjg1MURCMDZGNEM4QTA1NDJDODY5NkY2QzZBODFBRjFFRUM5NkI0RDM3RkMxRDY4OUU2QzFDMTA0OjAwMDAwMDYwREI1NjcyQzk3QUE4RjBCMjAwMDAwMDAxOjUzNjk2RTY3NkM2NTIwNjI2QzZGNjM2QjIwNkQ3MzY3OjE0NUFEMDFEQkY4MjRFQzc1NjA4NjNEQzcxRTNFMEMwOjEKK2Flcy0yNTYtY3RyOkY2RDY2RDZCRDUyRDU5QkIwNzk2MzY1ODc5RUZGODg2QzY2REQ1MUE1QjZBOTk3NDRCNTA1OTBDODdBMjM4ODQ6MDBGQUFDMjRDMTU4NUVGMTVBNDNEODc1MDAwMDAwMDE6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjpGMDVFMjMxQjM4OTQ2MTJDNDlFRTAwMEI4MDRFQjJBOUI4MzA2QjUwOEY4MzlENkE1NTMwODMxRDkzNDRBRjFDOjEKK2Flcy0yNTYtY3RyOkZGN0E2MTdDRTY5MTQ4RTRGMTcyNkUyRjQzNTgxREUyQUE2MkQ5RjgwNTUzMkVERkYxRUVENjg3RkI1NDE1M0Q6MDAxQ0M1Qjc1MUE1MUQ3MEExQzExMTQ4MDAwMDAwMDE6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjIwMjEyMjIzOkVCNkM1MjgyMUQwQkJCRjdDRTc1OTQ0NjJBQ0E0RkFBQjQwN0RGODY2NTY5RkQwN0Y0OENDMEI1ODNENjA3MUYxRUMwRTZCODoxCisKICMgREVTIEVDQiB0ZXN0cyAoZnJvbSBkZXN0ZXN0KQogCiBERVMtRUNCOjAwMDAwMDAwMDAwMDAwMDA6OjAwMDAwMDAwMDAwMDAwMDA6OENBNjRERTlDMUIxMjNBNwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX2Rzcy5jIGIvY3J5cHRvL2V2cC9tX2Rzcy5jCmluZGV4IDQ4YzI2ODkuLjRhZDYzYWQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9kc3MuYworKysgYi9jcnlwdG8vZXZwL21fZHNzLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisjaWZuZGVmIE9QRU5TU0xfRklQUwogCiBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQogCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CkBAIC05NywzICs5OCw0IEBACiAJcmV0dXJuKCZkc2FfbWQpOwogCX0KICNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL21fZHNzMS5jIGIvY3J5cHRvL2V2cC9tX2RzczEuYwppbmRleCA0ZjAzZmI3Li5mODAxNzBlIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fZHNzMS5jCisrKyBiL2NyeXB0by9ldnAvbV9kc3MxLmMKQEAgLTY4LDYgKzY4LDggQEAKICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9GSVBTIAorCiBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQogCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9CiAKQEAgLTk4LDMgKzEwMCw0IEBACiAJcmV0dXJuKCZkc3MxX21kKTsKIAl9CiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX2VjZHNhLmMgYi9jcnlwdG8vZXZwL21fZWNkc2EuYwppbmRleCA4ZDg3YTQ5Li40YjE1ZmIwIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fZWNkc2EuYworKysgYi9jcnlwdG8vZXZwL21fZWNkc2EuYwpAQCAtMTE2LDYgKzExNiw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAKICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisKIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCiAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KIApAQCAtMTQ2LDMgKzE0OCw0IEBACiAJcmV0dXJuKCZlY2RzYV9tZCk7CiAJfQogI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvbV9tZDQuYyBiL2NyeXB0by9ldnAvbV9tZDQuYwppbmRleCAxZTBiN2M1Li42ZDQ3ZjYxIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fbWQ0LmMKKysrIGIvY3J5cHRvL2V2cC9tX21kNC5jCkBAIC02OSw2ICs2OSw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKwogc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7IHJldHVybiBNRDRfSW5pdChjdHgtPm1kX2RhdGEpOyB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvbV9tZDUuYyBiL2NyeXB0by9ldnAvbV9tZDUuYwppbmRleCA2M2MxNDIxLi45YThiYWUwIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fbWQ1LmMKKysrIGIvY3J5cHRvL2V2cC9tX21kNS5jCkBAIC02OCw2ICs2OCw3IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNlbmRpZgorI2luY2x1ZGUgImV2cF9sb2NsLmgiCiAKIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCiAJeyByZXR1cm4gTUQ1X0luaXQoY3R4LT5tZF9kYXRhKTsgfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX21kYzIuYyBiL2NyeXB0by9ldnAvbV9tZGMyLmMKaW5kZXggYjA4ZDU1OS4uMzYwMmJlZCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX21kYzIuYworKysgYi9jcnlwdG8vZXZwL21fbWRjMi5jCkBAIC02OSw2ICs2OSw4IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKwogc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7IHJldHVybiBNREMyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL21fcmlwZW1kLmMgYi9jcnlwdG8vZXZwL21fcmlwZW1kLmMKaW5kZXggYTFkNjBlZS4uN2JmNDgwNCAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9tX3JpcGVtZC5jCisrKyBiL2NyeXB0by9ldnAvbV9yaXBlbWQuYwpAQCAtNjgsNiArNjgsNyBAQAogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CiAjZW5kaWYKKyNpbmNsdWRlICJldnBfbG9jbC5oIgogCiBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQogCXsgcmV0dXJuIFJJUEVNRDE2MF9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvbV9zaGExLmMgYi9jcnlwdG8vZXZwL21fc2hhMS5jCmluZGV4IDlhMjc5MGYuLjNjYjExZjEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvbV9zaGExLmMKKysrIGIvY3J5cHRvL2V2cC9tX3NoYTEuYwpAQCAtNTksNiArNTksOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKIAorI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKwogI2lmbmRlZiBPUEVOU1NMX05PX1NIQQogCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KQEAgLTY4LDYgKzcwLDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgogI2VuZGlmCiAKKwogc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsgfQogCkBAIC0yMDIsMyArMjA1LDUgQEAKIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lkKQogCXsgcmV0dXJuKCZzaGE1MTJfbWQpOyB9CiAjZW5kaWYJLyogaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2V2cC9tX3dwLmMgYi9jcnlwdG8vZXZwL21fd3AuYwppbmRleCAxY2U0N2MwLi5jNTFiYzJkIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL21fd3AuYworKysgYi9jcnlwdG8vZXZwL21fd3AuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3docmxwb29sLmg+CisjaW5jbHVkZSAiZXZwX2xvY2wuaCIKIAogc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKIAl7IHJldHVybiBXSElSTFBPT0xfSW5pdChjdHgtPm1kX2RhdGEpOyB9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL25hbWVzLmMgYi9jcnlwdG8vZXZwL25hbWVzLmMKaW5kZXggZjI4NjlmNS4uNjMxMWFkNyAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9uYW1lcy5jCisrKyBiL2NyeXB0by9ldnAvbmFtZXMuYwpAQCAtNjYsNiArNjYsMTAgQEAKIAl7CiAJaW50IHI7CiAKKwlpZiAoYyA9PSBOVUxMKSByZXR1cm4gMDsKKworCU9QRU5TU0xfaW5pdCgpOworCiAJcj1PQkpfTkFNRV9hZGQoT0JKX25pZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNoYXIgKiljKTsKIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CiAJY2hlY2tfZGVmZXIoYy0+bmlkKTsKQEAgLTc4LDYgKzgyLDcgQEAKIAl7CiAJaW50IHI7CiAJY29uc3QgY2hhciAqbmFtZTsKKwlPUEVOU1NMX2luaXQoKTsKIAogCW5hbWU9T0JKX25pZDJzbihtZC0+dHlwZSk7CiAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3A1X2NycHQuYyBiL2NyeXB0by9ldnAvcDVfY3JwdC5jCmluZGV4IDdlY2ZhOGQuLjdkOWMxZjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcDVfY3JwdC5jCisrKyBiL2NyeXB0by9ldnAvcDVfY3JwdC5jCkBAIC04Miw2ICs4Miw4IEBACiAJdW5zaWduZWQgY2hhciAqc2FsdDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwYnVmOwogCWludCBtZHNpemU7CisJaW50IHJ2ID0gMDsKKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CiAKIAkvKiBFeHRyYWN0IHVzZWZ1bCBpbmZvIGZyb20gcGFyYW1ldGVyICovCiAJaWYgKHBhcmFtID09IE5VTEwgfHwgcGFyYW0tPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFIHx8CkBAIC0xMDQsMjkgKzEwNiwzNyBAQAogCWlmKCFwYXNzKSBwYXNzbGVuID0gMDsKIAllbHNlIGlmKHBhc3NsZW4gPT0gLTEpIHBhc3NsZW4gPSBzdHJsZW4ocGFzcyk7CiAKLQlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0JRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgcGFzcywgcGFzc2xlbik7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBzYWx0LCBzYWx0bGVuKTsKKwlpZiAoIUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKSkKKwkJZ290byBlcnI7CisJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIHBhc3MsIHBhc3NsZW4pKQorCQlnb3RvIGVycjsKKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgc2FsdCwgc2FsdGxlbikpCisJCWdvdG8gZXJyOwogCVBCRVBBUkFNX2ZyZWUocGJlKTsKLQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgbWRfdG1wLCBOVUxMKTsKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtZF90bXAsIE5VTEwpKQorCQlnb3RvIGVycjsKIAltZHNpemUgPSBFVlBfTURfc2l6ZShtZCk7CiAJaWYgKG1kc2l6ZSA8IDApCiAJICAgIHJldHVybiAwOwogCWZvciAoaSA9IDE7IGkgPCBpdGVyOyBpKyspIHsKLQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG1kX3RtcCwgbWRzaXplKTsKLQkJRVZQX0RpZ2VzdEZpbmFsX2V4ICgmY3R4LCBtZF90bXAsIE5VTEwpOworCQlpZiAoIUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbWRfdG1wLCBtZHNpemUpKQorCQkJZ290byBlcnI7CisJCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4ICgmY3R4LCBtZF90bXAsIE5VTEwpKQorCQkJZ290byBlcnI7CiAJfQotCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKIAlPUEVOU1NMX2Fzc2VydChFVlBfQ0lQSEVSX2tleV9sZW5ndGgoY2lwaGVyKSA8PSAoaW50KXNpemVvZihtZF90bXApKTsKIAltZW1jcHkoa2V5LCBtZF90bXAsIEVWUF9DSVBIRVJfa2V5X2xlbmd0aChjaXBoZXIpKTsKIAlPUEVOU1NMX2Fzc2VydChFVlBfQ0lQSEVSX2l2X2xlbmd0aChjaXBoZXIpIDw9IDE2KTsKIAltZW1jcHkoaXYsIG1kX3RtcCArICgxNiAtIEVWUF9DSVBIRVJfaXZfbGVuZ3RoKGNpcGhlcikpLAogCQkJCQkJIEVWUF9DSVBIRVJfaXZfbGVuZ3RoKGNpcGhlcikpOwotCUVWUF9DaXBoZXJJbml0X2V4KGNjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgZW5fZGUpOworCWlmICghRVZQX0NpcGhlckluaXRfZXgoY2N0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCBlbl9kZSkpCisJCWdvdG8gZXJyOwogCU9QRU5TU0xfY2xlYW5zZShtZF90bXAsIEVWUF9NQVhfTURfU0laRSk7CiAJT1BFTlNTTF9jbGVhbnNlKGtleSwgRVZQX01BWF9LRVlfTEVOR1RIKTsKIAlPUEVOU1NMX2NsZWFuc2UoaXYsIEVWUF9NQVhfSVZfTEVOR1RIKTsKLQlyZXR1cm4gMTsKKwlydiA9IDE7CisJZXJyOgorCXJldHVybiBydjsKIH0KZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcDVfY3JwdDIuYyBiL2NyeXB0by9ldnAvcDVfY3JwdDIuYwppbmRleCAzMzQzNzlmLi45NzVkMDA0IDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3A1X2NycHQyLmMKKysrIGIvY3J5cHRvL2V2cC9wNV9jcnB0Mi5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKyNpbmNsdWRlICJldnBfbG9jbC5oIgogCiAvKiBzZXQgdGhpcyB0byBwcmludCBvdXQgaW5mbyBhYm91dCB0aGUga2V5Z2VuIGFsZ29yaXRobSAqLwogLyogI2RlZmluZSBERUJVR19QS0NTNVYyICovCkBAIC0xMTAsMTAgKzExMSwxNCBAQAogCQlpdG1wWzFdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDE2KSAmIDB4ZmYpOwogCQlpdG1wWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpID4+IDgpICYgMHhmZik7CiAJCWl0bXBbM10gPSAodW5zaWduZWQgY2hhcikoaSAmIDB4ZmYpOwotCQlITUFDX0luaXRfZXgoJmhjdHgsIHBhc3MsIHBhc3NsZW4sIGRpZ2VzdCwgTlVMTCk7Ci0JCUhNQUNfVXBkYXRlKCZoY3R4LCBzYWx0LCBzYWx0bGVuKTsKLQkJSE1BQ19VcGRhdGUoJmhjdHgsIGl0bXAsIDQpOwotCQlITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpOworCQlpZiAoIUhNQUNfSW5pdF9leCgmaGN0eCwgcGFzcywgcGFzc2xlbiwgZGlnZXN0LCBOVUxMKQorCQkJfHwgIUhNQUNfVXBkYXRlKCZoY3R4LCBzYWx0LCBzYWx0bGVuKQorCQkJfHwgIUhNQUNfVXBkYXRlKCZoY3R4LCBpdG1wLCA0KQorCQkJfHwgIUhNQUNfRmluYWwoJmhjdHgsIGRpZ3RtcCwgTlVMTCkpCisJCQl7CisJCQlITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKwkJCXJldHVybiAwOworCQkJfQogCQltZW1jcHkocCwgZGlndG1wLCBjcGxlbik7CiAJCWZvcihqID0gMTsgaiA8IGl0ZXI7IGorKykKIAkJCXsKQEAgLTE2OCwyNyArMTczLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9UWVBFICpwYXJhbSwgY29uc3QgRVZQX0NJUEhFUiAqYywgY29uc3QgRVZQX01EICptZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5fZGUpCiB7Ci0JdW5zaWduZWQgY2hhciAqc2FsdCwga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcGJ1ZjsKLQlpbnQgc2FsdGxlbiwgaXRlciwgcGxlbjsKLQl1bnNpZ25lZCBpbnQga2V5bGVuOworCWludCBwbGVuOwogCVBCRTJQQVJBTSAqcGJlMiA9IE5VTEw7CiAJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOwotCVBCS0RGMlBBUkFNICprZGYgPSBOVUxMOwotCWNvbnN0IEVWUF9NRCAqcHJmbWQ7Ci0JaW50IHByZl9uaWQsIGhtYWNfbWRfbmlkOworCisJaW50IHJ2ID0gMDsKIAogCWlmIChwYXJhbSA9PSBOVUxMIHx8IHBhcmFtLT50eXBlICE9IFZfQVNOMV9TRVFVRU5DRSB8fAogCSAgICBwYXJhbS0+dmFsdWUuc2VxdWVuY2UgPT0gTlVMTCkgewogCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOLEVWUF9SX0RFQ09ERV9FUlJPUik7Ci0JCXJldHVybiAwOworCQlnb3RvIGVycjsKIAl9CiAKIAlwYnVmID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5kYXRhOwogCXBsZW4gPSBwYXJhbS0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aDsKIAlpZighKHBiZTIgPSBkMmlfUEJFMlBBUkFNKE5VTEwsICZwYnVmLCBwbGVuKSkpIHsKIAkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCRV9LRVlJVkdFTixFVlBfUl9ERUNPREVfRVJST1IpOwotCQlyZXR1cm4gMDsKKwkJZ290byBlcnI7CiAJfQogCiAJLyogU2VlIGlmIHdlIHJlY29nbmlzZSB0aGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KQEAgLTIxMSwzOCArMjEzLDYzIEBACiAJfQogCiAJLyogRml4dXAgY2lwaGVyIGJhc2VkIG9uIEFsZ29yaXRobUlkZW50aWZpZXIgKi8KLQlFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgTlVMTCwgTlVMTCwgZW5fZGUpOworCWlmICghRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIE5VTEwsIE5VTEwsIGVuX2RlKSkKKwkJZ290byBlcnI7CiAJaWYoRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKGN0eCwgcGJlMi0+ZW5jcnlwdGlvbi0+cGFyYW1ldGVyKSA8IDApIHsKIAkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCRV9LRVlJVkdFTiwKIAkJCQkJRVZQX1JfQ0lQSEVSX1BBUkFNRVRFUl9FUlJPUik7CiAJCWdvdG8gZXJyOwogCX0KKwlydiA9IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihjdHgsIHBhc3MsIHBhc3NsZW4sCisJCQkJCXBiZTItPmtleWZ1bmMtPnBhcmFtZXRlciwgYywgbWQsIGVuX2RlKTsKKwllcnI6CisJUEJFMlBBUkFNX2ZyZWUocGJlMik7CisJcmV0dXJuIHJ2OworfQorCitpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfVFlQRSAqcGFyYW0sCisJCQkgY29uc3QgRVZQX0NJUEhFUiAqYywgY29uc3QgRVZQX01EICptZCwgaW50IGVuX2RlKQoreworCXVuc2lnbmVkIGNoYXIgKnNhbHQsIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBidWY7CisJaW50IHNhbHRsZW4sIGl0ZXIsIHBsZW47CisJaW50IHJ2ID0gMDsKKwl1bnNpZ25lZCBpbnQga2V5bGVuID0gMDsKKwlpbnQgcHJmX25pZCwgaG1hY19tZF9uaWQ7CisJUEJLREYyUEFSQU0gKmtkZiA9IE5VTEw7CisJY29uc3QgRVZQX01EICpwcmZtZDsKKworCWlmIChFVlBfQ0lQSEVSX0NUWF9jaXBoZXIoY3R4KSA9PSBOVUxMKQorCQl7CisJCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQktERjJfS0VZSVZHRU4sRVZQX1JfTk9fQ0lQSEVSX1NFVCk7CisJCWdvdG8gZXJyOworCQl9CiAJa2V5bGVuID0gRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aChjdHgpOwogCU9QRU5TU0xfYXNzZXJ0KGtleWxlbiA8PSBzaXplb2Yga2V5KTsKIAotCS8qIE5vdyBkZWNvZGUga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KKwkvKiBEZWNvZGUgcGFyYW1ldGVyICovCiAKLQlpZighcGJlMi0+a2V5ZnVuYy0+cGFyYW1ldGVyIHx8Ci0JCSAocGJlMi0+a2V5ZnVuYy0+cGFyYW1ldGVyLT50eXBlICE9IFZfQVNOMV9TRVFVRU5DRSkpCisJaWYoIXBhcmFtIHx8IChwYXJhbS0+dHlwZSAhPSBWX0FTTjFfU0VRVUVOQ0UpKQogCQl7Ci0JCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4sRVZQX1JfREVDT0RFX0VSUk9SKTsKKwkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTixFVlBfUl9ERUNPREVfRVJST1IpOwogCQlnb3RvIGVycjsKIAkJfQogCi0JcGJ1ZiA9IHBiZTItPmtleWZ1bmMtPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UtPmRhdGE7Ci0JcGxlbiA9IHBiZTItPmtleWZ1bmMtPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aDsKKwlwYnVmID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5kYXRhOworCXBsZW4gPSBwYXJhbS0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aDsKKwogCWlmKCEoa2RmID0gZDJpX1BCS0RGMlBBUkFNKE5VTEwsICZwYnVmLCBwbGVuKSkgKSB7Ci0JCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4sRVZQX1JfREVDT0RFX0VSUk9SKTsKKwkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTixFVlBfUl9ERUNPREVfRVJST1IpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlQQkUyUEFSQU1fZnJlZShwYmUyKTsKLQlwYmUyID0gTlVMTDsKKwlrZXlsZW4gPSBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKGN0eCk7CiAKIAkvKiBOb3cgY2hlY2sgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGtkZiAqLwogCiAJaWYoa2RmLT5rZXlsZW5ndGggJiYgKEFTTjFfSU5URUdFUl9nZXQoa2RmLT5rZXlsZW5ndGgpICE9IChpbnQpa2V5bGVuKSl7Ci0JCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4sCisJCUVWUGVycihFVlBfRl9QS0NTNV9WMl9QQktERjJfS0VZSVZHRU4sCiAJCQkJCQlFVlBfUl9VTlNVUFBPUlRFRF9LRVlMRU5HVEgpOwogCQlnb3RvIGVycjsKIAl9CkBAIC0yNTQsMTkgKzI4MSwxOSBAQAogCiAJaWYgKCFFVlBfUEJFX2ZpbmQoRVZQX1BCRV9UWVBFX1BSRiwgcHJmX25pZCwgTlVMTCwgJmhtYWNfbWRfbmlkLCAwKSkKIAkJewotCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOLCBFVlBfUl9VTlNVUFBPUlRFRF9QUkYpOworCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJLREYyX0tFWUlWR0VOLCBFVlBfUl9VTlNVUFBPUlRFRF9QUkYpOwogCQlnb3RvIGVycjsKIAkJfQogCiAJcHJmbWQgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmlkKGhtYWNfbWRfbmlkKTsKIAlpZiAocHJmbWQgPT0gTlVMTCkKIAkJewotCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJFX0tFWUlWR0VOLCBFVlBfUl9VTlNVUFBPUlRFRF9QUkYpOworCQlFVlBlcnIoRVZQX0ZfUEtDUzVfVjJfUEJLREYyX0tFWUlWR0VOLCBFVlBfUl9VTlNVUFBPUlRFRF9QUkYpOwogCQlnb3RvIGVycjsKIAkJfQogCiAJaWYoa2RmLT5zYWx0LT50eXBlICE9IFZfQVNOMV9PQ1RFVF9TVFJJTkcpIHsKLQkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCRV9LRVlJVkdFTiwKKwkJRVZQZXJyKEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTiwKIAkJCQkJCUVWUF9SX1VOU1VQUE9SVEVEX1NBTFRfVFlQRSk7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI3OCwxNSArMzA1LDExIEBACiAJaWYoIVBLQ1M1X1BCS0RGMl9ITUFDKHBhc3MsIHBhc3NsZW4sIHNhbHQsIHNhbHRsZW4sIGl0ZXIsIHByZm1kLAogCQkJCQkJICAga2V5bGVuLCBrZXkpKQogCQlnb3RvIGVycjsKLQlFVlBfQ2lwaGVySW5pdF9leChjdHgsIE5VTEwsIE5VTEwsIGtleSwgTlVMTCwgZW5fZGUpOworCXJ2ID0gRVZQX0NpcGhlckluaXRfZXgoY3R4LCBOVUxMLCBOVUxMLCBrZXksIE5VTEwsIGVuX2RlKTsKKwllcnI6CiAJT1BFTlNTTF9jbGVhbnNlKGtleSwga2V5bGVuKTsKIAlQQktERjJQQVJBTV9mcmVlKGtkZik7Ci0JcmV0dXJuIDE7Ci0KLQllcnI6Ci0JUEJFMlBBUkFNX2ZyZWUocGJlMik7Ci0JUEJLREYyUEFSQU1fZnJlZShrZGYpOwotCXJldHVybiAwOworCXJldHVybiBydjsKIH0KIAogI2lmZGVmIERFQlVHX1BLQ1M1VjIKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcF9vcGVuLmMgYi9jcnlwdG8vZXZwL3Bfb3Blbi5jCmluZGV4IDUzYTU5YTIuLmM3NDhmYmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ldnAvcF9vcGVuLmMKKysrIGIvY3J5cHRvL2V2cC9wX29wZW4uYwpAQCAtMTE1LDcgKzExNSw4IEBACiAJaW50IGk7CiAKIAlpPUVWUF9EZWNyeXB0RmluYWxfZXgoY3R4LG91dCxvdXRsKTsKLQlFVlBfRGVjcnlwdEluaXRfZXgoY3R4LE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCWlmIChpKQorCQlpID0gRVZQX0RlY3J5cHRJbml0X2V4KGN0eCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKIAlyZXR1cm4oaSk7CiAJfQogI2Vsc2UgLyogIU9QRU5TU0xfTk9fUlNBICovCmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3Bfc2VhbC5jIGIvY3J5cHRvL2V2cC9wX3NlYWwuYwppbmRleCBkODMyNDUyLi5lNTkxOWIwIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3Bfc2VhbC5jCisrKyBiL2NyeXB0by9ldnAvcF9zZWFsLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCXsKIAlpbnQgaTsKIAlpID0gRVZQX0VuY3J5cHRGaW5hbF9leChjdHgsb3V0LG91dGwpOwotCUVWUF9FbmNyeXB0SW5pdF9leChjdHgsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisJaWYgKGkpIAorCQlpID0gRVZQX0VuY3J5cHRJbml0X2V4KGN0eCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKIAlyZXR1cm4gaTsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3Bfc2lnbi5jIGIvY3J5cHRvL2V2cC9wX3NpZ24uYwppbmRleCBiYjg5M2Y1Li5kZmE0OGMxIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3Bfc2lnbi5jCisrKyBiL2NyeXB0by9ldnAvcF9zaWduLmMKQEAgLTgwLDE4ICs4MCwyMCBAQAogCXsKIAl1bnNpZ25lZCBjaGFyIG1bRVZQX01BWF9NRF9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgbV9sZW47Ci0JaW50IGksb2s9MCx2OworCWludCBpPTAsb2s9MCx2OwogCUVWUF9NRF9DVFggdG1wX2N0eDsKKwlFVlBfUEtFWV9DVFggKnBrY3R4ID0gTlVMTDsKIAogCSpzaWdsZW49MDsKIAlFVlBfTURfQ1RYX2luaXQoJnRtcF9jdHgpOwotCUVWUF9NRF9DVFhfY29weV9leCgmdG1wX2N0eCxjdHgpOyAgIAotCUVWUF9EaWdlc3RGaW5hbF9leCgmdG1wX2N0eCwmKG1bMF0pLCZtX2xlbik7CisJaWYgKCFFVlBfTURfQ1RYX2NvcHlfZXgoJnRtcF9jdHgsY3R4KSkKKwkJZ290byBlcnI7ICAKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmdG1wX2N0eCwmKG1bMF0pLCZtX2xlbikpCisJCWdvdG8gZXJyOwogCUVWUF9NRF9DVFhfY2xlYW51cCgmdG1wX2N0eCk7CiAKIAlpZiAoY3R4LT5kaWdlc3QtPmZsYWdzICYgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFKQogCQl7Ci0JCUVWUF9QS0VZX0NUWCAqcGtjdHggPSBOVUxMOwogCQlzaXplX3Qgc2x0bXAgPSAoc2l6ZV90KUVWUF9QS0VZX3NpemUocGtleSk7CiAJCWkgPSAwOwogCQlwa2N0eCA9IEVWUF9QS0VZX0NUWF9uZXcocGtleSwgTlVMTCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMgYi9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKaW5kZXggNDFkNGI2Ny4uNWY1YzQwOSAxMDA2NDQKLS0tIGEvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCisrKyBiL2NyeXB0by9ldnAvcF92ZXJpZnkuYwpAQCAtNjcsMTcgKzY3LDE5IEBACiAJewogCXVuc2lnbmVkIGNoYXIgbVtFVlBfTUFYX01EX1NJWkVdOwogCXVuc2lnbmVkIGludCBtX2xlbjsKLQlpbnQgaSxvaz0wLHY7CisJaW50IGk9LTEsb2s9MCx2OwogCUVWUF9NRF9DVFggdG1wX2N0eDsKKwlFVlBfUEtFWV9DVFggKnBrY3R4ID0gTlVMTDsKIAogCUVWUF9NRF9DVFhfaW5pdCgmdG1wX2N0eCk7Ci0JRVZQX01EX0NUWF9jb3B5X2V4KCZ0bXBfY3R4LGN0eCk7ICAgICAKLQlFVlBfRGlnZXN0RmluYWxfZXgoJnRtcF9jdHgsJihtWzBdKSwmbV9sZW4pOworCWlmICghRVZQX01EX0NUWF9jb3B5X2V4KCZ0bXBfY3R4LGN0eCkpCisJCWdvdG8gZXJyOyAgICAKKwlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmdG1wX2N0eCwmKG1bMF0pLCZtX2xlbikpCisJCWdvdG8gZXJyOwogCUVWUF9NRF9DVFhfY2xlYW51cCgmdG1wX2N0eCk7CiAKIAlpZiAoY3R4LT5kaWdlc3QtPmZsYWdzICYgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFKQogCQl7Ci0JCUVWUF9QS0VZX0NUWCAqcGtjdHggPSBOVUxMOwogCQlpID0gLTE7CiAJCXBrY3R4ID0gRVZQX1BLRVlfQ1RYX25ldyhwa2V5LCBOVUxMKTsKIAkJaWYgKCFwa2N0eCkKZGlmZiAtLWdpdCBhL2NyeXB0by9ldnAvcG1ldGhfZ24uYyBiL2NyeXB0by9ldnAvcG1ldGhfZ24uYwppbmRleCA1ZDc0MTYxLi40NjUxYzgxIDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3BtZXRoX2duLmMKKysrIGIvY3J5cHRvL2V2cC9wbWV0aF9nbi5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAl9CiAKIEVWUF9QS0VZICpFVlBfUEtFWV9uZXdfbWFjX2tleShpbnQgdHlwZSwgRU5HSU5FICplLAotCQkJCXVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pCiAJewogCUVWUF9QS0VZX0NUWCAqbWFjX2N0eCA9IE5VTEw7CiAJRVZQX1BLRVkgKm1hY19rZXkgPSBOVUxMOwpAQCAtMjA5LDcgKzIwOSw4IEBACiAJaWYgKEVWUF9QS0VZX2tleWdlbl9pbml0KG1hY19jdHgpIDw9IDApCiAJCWdvdG8gbWVycjsKIAlpZiAoRVZQX1BLRVlfQ1RYX2N0cmwobWFjX2N0eCwgLTEsIEVWUF9QS0VZX09QX0tFWUdFTiwKLQkJCQlFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLCBrZXlsZW4sIGtleSkgPD0gMCkKKwkJCQlFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAorCQkJCWtleWxlbiwgKHZvaWQgKilrZXkpIDw9IDApCiAJCWdvdG8gbWVycjsKIAlpZiAoRVZQX1BLRVlfa2V5Z2VuKG1hY19jdHgsICZtYWNfa2V5KSA8PSAwKQogCQlnb3RvIG1lcnI7CmRpZmYgLS1naXQgYS9jcnlwdG8vZXZwL3BtZXRoX2xpYi5jIGIvY3J5cHRvL2V2cC9wbWV0aF9saWIuYwppbmRleCA1NDgxZDRiLi5hY2ZhN2I2IDEwMDY0NAotLS0gYS9jcnlwdG8vZXZwL3BtZXRoX2xpYi5jCisrKyBiL2NyeXB0by9ldnAvcG1ldGhfbGliLmMKQEAgLTczLDcgKzczLDcgQEAKIFNUQUNLX09GKEVWUF9QS0VZX01FVEhPRCkgKmFwcF9wa2V5X21ldGhvZHMgPSBOVUxMOwogCiBleHRlcm4gY29uc3QgRVZQX1BLRVlfTUVUSE9EIHJzYV9wa2V5X21ldGgsIGRoX3BrZXlfbWV0aCwgZHNhX3BrZXlfbWV0aDsKLWV4dGVybiBjb25zdCBFVlBfUEtFWV9NRVRIT0QgZWNfcGtleV9tZXRoLCBobWFjX3BrZXlfbWV0aDsKK2V4dGVybiBjb25zdCBFVlBfUEtFWV9NRVRIT0QgZWNfcGtleV9tZXRoLCBobWFjX3BrZXlfbWV0aCwgY21hY19wa2V5X21ldGg7CiAKIHN0YXRpYyBjb25zdCBFVlBfUEtFWV9NRVRIT0QgKnN0YW5kYXJkX21ldGhvZHNbXSA9CiAJewpAQCAtOTAsNiArOTAsNyBAQAogCSZlY19wa2V5X21ldGgsCiAjZW5kaWYKIAkmaG1hY19wa2V5X21ldGgsCisJJmNtYWNfcGtleV9tZXRoCiAJfTsKIAogREVDTEFSRV9PQkpfQlNFQVJDSF9DTVBfRk4oY29uc3QgRVZQX1BLRVlfTUVUSE9EICosIGNvbnN0IEVWUF9QS0VZX01FVEhPRCAqLApAQCAtMjAzLDYgKzIwNCw4IEBACiAJaWYgKCFwbWV0aCkKIAkJcmV0dXJuIE5VTEw7CiAKKwltZW1zZXQocG1ldGgsIDAsIHNpemVvZihFVlBfUEtFWV9NRVRIT0QpKTsKKwogCXBtZXRoLT5wa2V5X2lkID0gaWQ7CiAJcG1ldGgtPmZsYWdzID0gZmxhZ3MgfCBFVlBfUEtFWV9GTEFHX0RZTkFNSUM7CiAKQEAgLTIzNSw2ICsyMzgsNTYgQEAKIAlyZXR1cm4gcG1ldGg7CiAJfQogCit2b2lkIEVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvKGludCAqcHBrZXlfaWQsIGludCAqcGZsYWdzLAorCQkJCWNvbnN0IEVWUF9QS0VZX01FVEhPRCAqbWV0aCkKKwl7CisJaWYgKHBwa2V5X2lkKQorCQkqcHBrZXlfaWQgPSBtZXRoLT5wa2V5X2lkOworCWlmIChwZmxhZ3MpCisJCSpwZmxhZ3MgPSBtZXRoLT5mbGFnczsKKwl9CisKK3ZvaWQgRVZQX1BLRVlfbWV0aF9jb3B5KEVWUF9QS0VZX01FVEhPRCAqZHN0LCBjb25zdCBFVlBfUEtFWV9NRVRIT0QgKnNyYykKKwl7CisKKwlkc3QtPmluaXQgPSBzcmMtPmluaXQ7CisJZHN0LT5jb3B5ID0gc3JjLT5jb3B5OworCWRzdC0+Y2xlYW51cCA9IHNyYy0+Y2xlYW51cDsKKworCWRzdC0+cGFyYW1nZW5faW5pdCA9IHNyYy0+cGFyYW1nZW5faW5pdDsKKwlkc3QtPnBhcmFtZ2VuID0gc3JjLT5wYXJhbWdlbjsKKworCWRzdC0+a2V5Z2VuX2luaXQgPSBzcmMtPmtleWdlbl9pbml0OworCWRzdC0+a2V5Z2VuID0gc3JjLT5rZXlnZW47CisKKwlkc3QtPnNpZ25faW5pdCA9IHNyYy0+c2lnbl9pbml0OworCWRzdC0+c2lnbiA9IHNyYy0+c2lnbjsKKworCWRzdC0+dmVyaWZ5X2luaXQgPSBzcmMtPnZlcmlmeV9pbml0OworCWRzdC0+dmVyaWZ5ID0gc3JjLT52ZXJpZnk7CisKKwlkc3QtPnZlcmlmeV9yZWNvdmVyX2luaXQgPSBzcmMtPnZlcmlmeV9yZWNvdmVyX2luaXQ7CisJZHN0LT52ZXJpZnlfcmVjb3ZlciA9IHNyYy0+dmVyaWZ5X3JlY292ZXI7CisKKwlkc3QtPnNpZ25jdHhfaW5pdCA9IHNyYy0+c2lnbmN0eF9pbml0OworCWRzdC0+c2lnbmN0eCA9IHNyYy0+c2lnbmN0eDsKKworCWRzdC0+dmVyaWZ5Y3R4X2luaXQgPSBzcmMtPnZlcmlmeWN0eF9pbml0OworCWRzdC0+dmVyaWZ5Y3R4ID0gc3JjLT52ZXJpZnljdHg7CisKKwlkc3QtPmVuY3J5cHRfaW5pdCA9IHNyYy0+ZW5jcnlwdF9pbml0OworCWRzdC0+ZW5jcnlwdCA9IHNyYy0+ZW5jcnlwdDsKKworCWRzdC0+ZGVjcnlwdF9pbml0ID0gc3JjLT5kZWNyeXB0X2luaXQ7CisJZHN0LT5kZWNyeXB0ID0gc3JjLT5kZWNyeXB0OworCisJZHN0LT5kZXJpdmVfaW5pdCA9IHNyYy0+ZGVyaXZlX2luaXQ7CisJZHN0LT5kZXJpdmUgPSBzcmMtPmRlcml2ZTsKKworCWRzdC0+Y3RybCA9IHNyYy0+Y3RybDsKKwlkc3QtPmN0cmxfc3RyID0gc3JjLT5jdHJsX3N0cjsKKwl9CisKIHZvaWQgRVZQX1BLRVlfbWV0aF9mcmVlKEVWUF9QS0VZX01FVEhPRCAqcG1ldGgpCiAJewogCWlmIChwbWV0aCAmJiAocG1ldGgtPmZsYWdzICYgRVZQX1BLRVlfRkxBR19EWU5BTUlDKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htX2FtZXRoLmMgYi9jcnlwdG8vaG1hYy9obV9hbWV0aC5jCmluZGV4IDZkOGE4OTEuLmUwM2YyNGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9obWFjL2htX2FtZXRoLmMKKysrIGIvY3J5cHRvL2htYWMvaG1fYW1ldGguYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIAlobWFjX3NpemUsCiAJMCwKLQkwLDAsMCwwLDAsMCwKKwkwLDAsMCwwLDAsMCwwLAogCiAJaG1hY19rZXlfZnJlZSwKIAlobWFjX3BrZXlfY3RybCwKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htX3BtZXRoLmMgYi9jcnlwdG8vaG1hYy9obV9wbWV0aC5jCmluZGV4IDcxZTg1NjcuLjBkYWE0NDUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9obWFjL2htX3BtZXRoLmMKKysrIGIvY3J5cHRvL2htYWMvaG1fcG1ldGguYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJZGN0eCA9IGRzdC0+ZGF0YTsKIAlkY3R4LT5tZCA9IHNjdHgtPm1kOwogCUhNQUNfQ1RYX2luaXQoJmRjdHgtPmN0eCk7Ci0JSE1BQ19DVFhfY29weSgmZGN0eC0+Y3R4LCAmc2N0eC0+Y3R4KTsKKwlpZiAoIUhNQUNfQ1RYX2NvcHkoJmRjdHgtPmN0eCwgJnNjdHgtPmN0eCkpCisJCXJldHVybiAwOwogCWlmIChzY3R4LT5rdG1wLmRhdGEpCiAJCXsKIAkJaWYgKCFBU04xX09DVEVUX1NUUklOR19zZXQoJmRjdHgtPmt0bXAsCkBAIC0xNDEsNyArMTQyLDggQEAKIHN0YXRpYyBpbnQgaW50X3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0YSxzaXplX3QgY291bnQpCiAJewogCUhNQUNfUEtFWV9DVFggKmhjdHggPSBjdHgtPnBjdHgtPmRhdGE7Ci0JSE1BQ19VcGRhdGUoJmhjdHgtPmN0eCwgZGF0YSwgY291bnQpOworCWlmICghSE1BQ19VcGRhdGUoJmhjdHgtPmN0eCwgZGF0YSwgY291bnQpKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIAl9CiAKQEAgLTE2Nyw3ICsxNjksOCBAQAogCWlmICghc2lnKQogCQlyZXR1cm4gMTsKIAotCUhNQUNfRmluYWwoJmhjdHgtPmN0eCwgc2lnLCAmaGxlbik7CisJaWYgKCFITUFDX0ZpbmFsKCZoY3R4LT5jdHgsIHNpZywgJmhsZW4pKQorCQlyZXR1cm4gMDsKIAkqc2lnbGVuID0gKHNpemVfdClobGVuOwogCXJldHVybiAxOwogCX0KQEAgLTE5Miw4ICsxOTUsOSBAQAogCiAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9ESUdFU1RJTklUOgogCQlrZXkgPSAoQVNOMV9PQ1RFVF9TVFJJTkcgKiljdHgtPnBrZXktPnBrZXkucHRyOwotCQlITUFDX0luaXRfZXgoJmhjdHgtPmN0eCwga2V5LT5kYXRhLCBrZXktPmxlbmd0aCwgaGN0eC0+bWQsCi0JCQkJY3R4LT5lbmdpbmUpOworCQlpZiAoIUhNQUNfSW5pdF9leCgmaGN0eC0+Y3R4LCBrZXktPmRhdGEsIGtleS0+bGVuZ3RoLCBoY3R4LT5tZCwKKwkJCQljdHgtPmVuZ2luZSkpCisJCQlyZXR1cm4gMDsKIAkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2NyeXB0by9obWFjL2htYWMuYyBiL2NyeXB0by9obWFjL2htYWMuYwppbmRleCA2Yzk4ZmM0Li5iYTI3Y2JmIDEwMDY0NAotLS0gYS9jcnlwdG8vaG1hYy9obWFjLmMKKysrIGIvY3J5cHRvL2htYWMvaG1hYy5jCkBAIC02MSwxMiArNjEsMzQgQEAKICNpbmNsdWRlICJjcnlwdGxpYi5oIgogI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKKwogaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIGludCBsZW4sCiAJCSAgY29uc3QgRVZQX01EICptZCwgRU5HSU5FICppbXBsKQogCXsKIAlpbnQgaSxqLHJlc2V0PTA7CiAJdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKIAorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSkKKwkJeworCQkvKiBJZiB3ZSBoYXZlIGFuIEVOR0lORSBuZWVkIHRvIGFsbG93IG5vbiBGSVBTICovCisJCWlmICgoaW1wbCB8fCBjdHgtPmlfY3R4LmVuZ2luZSkKKwkJCSYmICAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJCXsKKwkJCUVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKwkJCXJldHVybiAwOworCQkJfQorCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorCQkgKiB2aWEgRklQU19obWFjX2luaXRfZXgoKS4KKwkJICovCisJCWlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCisJCQlyZXR1cm4gRklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwgbWQsIE5VTEwpOworCQl9CisjZW5kaWYKKwogCWlmIChtZCAhPSBOVUxMKQogCQl7CiAJCXJlc2V0PTE7CkBAIC0xMzMsNiArMTU1LDEwIEBACiAKIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQogCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorCQlyZXR1cm4gRklQU19obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGxlbik7CisjZW5kaWYKIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LT5tZF9jdHgsZGF0YSxsZW4pOwogCX0KIApAQCAtMTQwLDYgKzE2NiwxMCBAQAogCXsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIGJ1ZltFVlBfTUFYX01EX1NJWkVdOworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCisJCXJldHVybiBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVuKTsKKyNlbmRpZgogCiAJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1ZiwmaSkpCiAJCWdvdG8gZXJyOwpAQCAtMTc5LDYgKzIwOSwxMyBAQAogCiB2b2lkIEhNQUNfQ1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKIAl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKwkJeworCQlGSVBTX2htYWNfY3R4X2NsZWFudXAoY3R4KTsKKwkJcmV0dXJuOworCQl9CisjZW5kaWYKIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOwogCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5vX2N0eCk7CiAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0eCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vaWE2NGNwdWlkLlMgYi9jcnlwdG8vaWE2NGNwdWlkLlMKaW5kZXggZDcwNWZmZi4uNzgzMmI5YiAxMDA2NDQKLS0tIGEvY3J5cHRvL2lhNjRjcHVpZC5TCisrKyBiL2NyeXB0by9pYTY0Y3B1aWQuUwpAQCAtMjYsNyArMjYsNyBAQAogeyAubWlpOwltb3YJCWFyLmNjdj1yMgogCWFkZAkJcjg9cjIscjMzCiAJbW92CQlyMz1yMgkJfTs7Ci17IC5tbWk7CW1mCit7IC5tbWk7CW1mOzsKIAljbXB4Y2hnNC5hY3EJcjI9W3IzMl0scjgsYXIuY2N2CiAJbm9wLmkJCTAJCX07OwogeyAubWliOwljbXAubmUJCXA2LHAwPXIyLHIzCmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ0L21kNC5oIGIvY3J5cHRvL21kNC9tZDQuaAppbmRleCBjM2VkOWIzLi5hNTUzNjhhIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ0L21kNC5oCisrKyBiL2NyeXB0by9tZDQvbWQ0LmgKQEAgLTEwNSw2ICsxMDUsOSBAQAogCXVuc2lnbmVkIGludCBudW07CiAJfSBNRDRfQ1RYOwogCisjaWZkZWYgT1BFTlNTTF9GSVBTCitpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKKyNlbmRpZgogaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwogaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYyBiL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwppbmRleCBlMGM0MmU4Li44MmMyY2IyIDEwMDY0NAotLS0gYS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKKysrIGIvY3J5cHRvL21kNC9tZDRfZGdzdC5jCkBAIC01Nyw4ICs1Nyw5IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibWQ0X2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlICJtZDRfbG9jbC5oIgogCiBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwogCkBAIC03MCw3ICs3MSw3IEBACiAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCiAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCiAKLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQorZmlwc19tZF9pbml0KE1ENCkKIAl7CiAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+QT1JTklUX0RBVEFfQTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tZDUvbWQ1LmggYi9jcnlwdG8vbWQ1L21kNS5oCmluZGV4IDRjYmY4NDMuLjU0MWNjOTIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDUvbWQ1LmgKKysrIGIvY3J5cHRvL21kNS9tZDUuaApAQCAtMTA1LDYgKzEwNSw5IEBACiAJdW5zaWduZWQgaW50IG51bTsKIAl9IE1ENV9DVFg7CiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX01ENV9Jbml0KE1ENV9DVFggKmMpOworI2VuZGlmCiBpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CiBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kNS9tZDVfZGdzdC5jIGIvY3J5cHRvL21kNS9tZDVfZGdzdC5jCmluZGV4IGJlYWNlNjMuLjI2NTg5MGQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworKysgYi9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgIm1kNV9sb2NsLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAKIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTcwLDcgKzcxLDcgQEAKICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKIAotaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCitmaXBzX21kX2luaXQoTUQ1KQogCXsKIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKIAljLT5BPUlOSVRfREFUQV9BOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21kYzIvbWRjMi5oIGIvY3J5cHRvL21kYzIvbWRjMi5oCmluZGV4IDcyNzc4YTUuLmYzZThlNTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tZGMyL21kYzIuaAorKysgYi9jcnlwdG8vbWRjMi9tZGMyLmgKQEAgLTgxLDYgKzgxLDkgQEAKIAl9IE1EQzJfQ1RYOwogCiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX01EQzJfSW5pdChNREMyX0NUWCAqYyk7CisjZW5kaWYKIGludCBNREMyX0luaXQoTURDMl9DVFggKmMpOwogaW50IE1EQzJfVXBkYXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jIGIvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwppbmRleCA0YWE0MDZlLi5iNzRiYjFhIDEwMDY0NAotLS0gYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCisrKyBiL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgogI2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAKICN1bmRlZiBjMmwKICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSkgICAgLCBcCkBAIC03NSw3ICs3Niw3IEBACiAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKIAogc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7Ci1pbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQorZmlwc19tZF9pbml0KE1EQzIpCiAJewogCWMtPm51bT0wOwogCWMtPnBhZF90eXBlPTE7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWVtLmMgYi9jcnlwdG8vbWVtLmMKaW5kZXggNmY4MGRkMy4uOGY3MzZjMyAxMDA2NDQKLS0tIGEvY3J5cHRvL21lbS5jCisrKyBiL2NyeXB0by9tZW0uYwpAQCAtMTI1LDYgKzEyNSw3IEBACiBpbnQgQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zKHZvaWQgKigqbSkoc2l6ZV90KSwgdm9pZCAqKCpyKSh2b2lkICosIHNpemVfdCksCiAJdm9pZCAoKmYpKHZvaWQgKikpCiAJeworCU9QRU5TU0xfaW5pdCgpOwogCWlmICghYWxsb3dfY3VzdG9taXplKQogCQlyZXR1cm4gMDsKIAlpZiAoKG0gPT0gMCkgfHwgKHIgPT0gMCkgfHwgKGYgPT0gMCkpCkBAIC0xODYsNiArMTg3LDcgQEAKIAl7CiAJaWYgKCFhbGxvd19jdXN0b21pemVfZGVidWcpCiAJCXJldHVybiAwOworCU9QRU5TU0xfaW5pdCgpOwogCW1hbGxvY19kZWJ1Z19mdW5jPW07CiAJcmVhbGxvY19kZWJ1Z19mdW5jPXI7CiAJZnJlZV9kZWJ1Z19mdW5jPWY7CmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLWFscGhhLnBsIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1hbHBoYS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU4YjI3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1hbHBoYS5wbApAQCAtMCwwICsxLDQ1MSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgTWFyY2ggMjAxMAorIworIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24gYW5kIHVuZGVybHlpbmcKKyMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdCBpdAorIyB1c2VzIDI1NiBieXRlcyBwZXIta2V5IHRhYmxlIFsrMTI4IGJ5dGVzIHNoYXJlZCB0YWJsZV0uIEV2ZW4gdGhvdWdoCisjIGxvb3BzIGFyZSBhZ2dyZXNzaXZlbHkgbW9kdWxvLXNjaGVkdWxlZCBpbiByZXNwZWN0IHRvIHJlZmVyZW5jZXMgdG8KKyMgSHRibCBhbmQgWi5oaSB1cGRhdGVzIGZvciA4IGN5Y2xlcyBwZXIgYnl0ZSwgbWVhc3VyZWQgcGVyZm9ybWFuY2UgaXMKKyMgfjEyIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgb24gMjEyNjQgQ1BVLiBJdCBzZWVtcyB0byBiZSBhIGR5bmFtaWMKKyMgc2NoZWR1bGluZyAiZ2xpdGNoLCIgYmVjYXVzZSB1cHJvZmlsZSgxKSBpbmRpY2F0ZXMgdW5pZm9ybSBzYW1wbGUKKyMgZGlzdHJpYnV0aW9uLCBhcyBpZiBhbGwgaW5zdHJ1Y3Rpb24gYnVuZGxlcyBleGVjdXRlIGluIDEuNSBjeWNsZXMuCisjIE1lYW5pbmcgdGhhdCBpdCBjb3VsZCBoYXZlIGJlZW4gZXZlbiBmYXN0ZXIsIHlldCAxMiBjeWNsZXMgaXMgfjYwJQorIyBiZXR0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUgYW5kIH44MCUgdGhhbiBjb2RlIGdlbmVyYXRlZCBieSB2ZW5kb3IKKyMgY29tcGlsZXIuCisKKyRjbnQ9InYwIjsJIyAkMAorJHQwPSJ0MCI7CiskdDE9InQxIjsKKyR0Mj0idDIiOworJFRoaTA9InQzIjsJIyAkNAorJFRsbzA9InQ0IjsKKyRUaGkxPSJ0NSI7CiskVGxvMT0idDYiOworJHJlbT0idDciOwkjICQ4CisjIyMjIyMjIyMjIyMjIyMjIworJFhpPSJhMCI7CSMgJDE2LCBpbnB1dCBhcmd1bWVudCBibG9jaworJEh0Ymw9ImExIjsKKyRpbnA9ImEyIjsKKyRsZW49ImEzIjsKKyRubG89ImE0IjsJIyAkMjAKKyRuaGk9ImE1IjsKKyRaaGk9InQ4IjsKKyRabG89InQ5IjsKKyRYaGk9InQxMCI7CSMgJDI0CiskWGxvPSJ0MTEiOworJHJlbXA9InQxMiI7CiskcmVtXzRiaXQ9IkFUIjsJIyAkMjgKKworeyBteSAkTjsKKyAgc3ViIGxvb3AoKSB7CisKKwkkTisrOworJGNvZGUuPTw8X19fOworLmFsaWduCTQKKwlleHRibAkkWGxvLDcsJG5sbworCWFuZAkkbmxvLDB4ZjAsJG5oaQorCXNsbAkkbmxvLDQsJG5sbworCWFuZAkkbmxvLDB4ZjAsJG5sbworCisJYWRkcQkkbmxvLCRIdGJsLCRubG8KKwlsZHEJJFpsbyw4KCRubG8pCisJYWRkcQkkbmhpLCRIdGJsLCRuaGkKKwlsZHEJJFpoaSwwKCRubG8pCisKKwlhbmQJJFpsbywweDBmLCRyZW1wCisJc2xsCSRaaGksNjAsJHQwCisJbGRhCSRjbnQsNih6ZXJvKQorCWV4dGJsCSRYbG8sNiwkbmxvCisKKwlsZHEJJFRsbzEsOCgkbmhpKQorCXM4YWRkcQkkcmVtcCwkcmVtXzRiaXQsJHJlbXAKKwlsZHEJJFRoaTEsMCgkbmhpKQorCXNybAkkWmxvLDQsJFpsbworCisJbGRxCSRyZW0sMCgkcmVtcCkKKwlzcmwJJFpoaSw0LCRaaGkKKwl4b3IJJHQwLCRabG8sJFpsbworCWFuZAkkbmxvLDB4ZjAsJG5oaQorCisJeG9yCSRUbG8xLCRabG8sJFpsbworCXNsbAkkbmxvLDQsJG5sbworCXhvcgkkVGhpMSwkWmhpLCRaaGkKKwlhbmQJJG5sbywweGYwLCRubG8KKworCWFkZHEJJG5sbywkSHRibCwkbmxvCisJbGRxCSRUbG8wLDgoJG5sbykKKwlhZGRxCSRuaGksJEh0YmwsJG5oaQorCWxkcQkkVGhpMCwwKCRubG8pCisKKy5Mb29wbG8kTjoKKwlhbmQJJFpsbywweDBmLCRyZW1wCisJc2xsCSRaaGksNjAsJHQwCisJc3VicQkkY250LDEsJGNudAorCXNybAkkWmxvLDQsJFpsbworCisJbGRxCSRUbG8xLDgoJG5oaSkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHEJJFRoaTEsMCgkbmhpKQorCXM4YWRkcQkkcmVtcCwkcmVtXzRiaXQsJHJlbXAKKworCWxkcQkkcmVtLDAoJHJlbXApCisJc3JsCSRaaGksNCwkWmhpCisJeG9yCSR0MCwkWmxvLCRabG8KKwlleHRibAkkWGxvLCRjbnQsJG5sbworCisJYW5kCSRubG8sMHhmMCwkbmhpCisJeG9yCSRUaGkwLCRaaGksJFpoaQorCXhvcgkkVGxvMCwkWmxvLCRabG8KKwlzbGwJJG5sbyw0LCRubG8KKworCisJYW5kCSRabG8sMHgwZiwkcmVtcAorCXNsbAkkWmhpLDYwLCR0MAorCWFuZAkkbmxvLDB4ZjAsJG5sbworCXNybAkkWmxvLDQsJFpsbworCisJczhhZGRxCSRyZW1wLCRyZW1fNGJpdCwkcmVtcAorCXhvcgkkcmVtLCRaaGksJFpoaQorCWFkZHEJJG5sbywkSHRibCwkbmxvCisJYWRkcQkkbmhpLCRIdGJsLCRuaGkKKworCWxkcQkkcmVtLDAoJHJlbXApCisJc3JsCSRaaGksNCwkWmhpCisJbGRxCSRUbG8wLDgoJG5sbykKKwl4b3IJJHQwLCRabG8sJFpsbworCisJeG9yCSRUbG8xLCRabG8sJFpsbworCXhvcgkkVGhpMSwkWmhpLCRaaGkKKwlsZHEJJFRoaTAsMCgkbmxvKQorCWJuZQkkY250LC5Mb29wbG8kTgorCisKKwlhbmQJJFpsbywweDBmLCRyZW1wCisJc2xsCSRaaGksNjAsJHQwCisJbGRhCSRjbnQsNyh6ZXJvKQorCXNybAkkWmxvLDQsJFpsbworCisJbGRxCSRUbG8xLDgoJG5oaSkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHEJJFRoaTEsMCgkbmhpKQorCXM4YWRkcQkkcmVtcCwkcmVtXzRiaXQsJHJlbXAKKworCWxkcQkkcmVtLDAoJHJlbXApCisJc3JsCSRaaGksNCwkWmhpCisJeG9yCSR0MCwkWmxvLCRabG8KKwlleHRibAkkWGhpLCRjbnQsJG5sbworCisJYW5kCSRubG8sMHhmMCwkbmhpCisJeG9yCSRUaGkwLCRaaGksJFpoaQorCXhvcgkkVGxvMCwkWmxvLCRabG8KKwlzbGwJJG5sbyw0LCRubG8KKworCWFuZAkkWmxvLDB4MGYsJHJlbXAKKwlzbGwJJFpoaSw2MCwkdDAKKwlhbmQJJG5sbywweGYwLCRubG8KKwlzcmwJJFpsbyw0LCRabG8KKworCXM4YWRkcQkkcmVtcCwkcmVtXzRiaXQsJHJlbXAKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlhZGRxCSRubG8sJEh0YmwsJG5sbworCWFkZHEJJG5oaSwkSHRibCwkbmhpCisKKwlsZHEJJHJlbSwwKCRyZW1wKQorCXNybAkkWmhpLDQsJFpoaQorCWxkcQkkVGxvMCw4KCRubG8pCisJeG9yCSR0MCwkWmxvLCRabG8KKworCXhvcgkkVGxvMSwkWmxvLCRabG8KKwl4b3IJJFRoaTEsJFpoaSwkWmhpCisJbGRxCSRUaGkwLDAoJG5sbykKKwl1bm9wCisKKworLkxvb3BoaSROOgorCWFuZAkkWmxvLDB4MGYsJHJlbXAKKwlzbGwJJFpoaSw2MCwkdDAKKwlzdWJxCSRjbnQsMSwkY250CisJc3JsCSRabG8sNCwkWmxvCisKKwlsZHEJJFRsbzEsOCgkbmhpKQorCXhvcgkkcmVtLCRaaGksJFpoaQorCWxkcQkkVGhpMSwwKCRuaGkpCisJczhhZGRxCSRyZW1wLCRyZW1fNGJpdCwkcmVtcAorCisJbGRxCSRyZW0sMCgkcmVtcCkKKwlzcmwJJFpoaSw0LCRaaGkKKwl4b3IJJHQwLCRabG8sJFpsbworCWV4dGJsCSRYaGksJGNudCwkbmxvCisKKwlhbmQJJG5sbywweGYwLCRuaGkKKwl4b3IJJFRoaTAsJFpoaSwkWmhpCisJeG9yCSRUbG8wLCRabG8sJFpsbworCXNsbAkkbmxvLDQsJG5sbworCisKKwlhbmQJJFpsbywweDBmLCRyZW1wCisJc2xsCSRaaGksNjAsJHQwCisJYW5kCSRubG8sMHhmMCwkbmxvCisJc3JsCSRabG8sNCwkWmxvCisKKwlzOGFkZHEJJHJlbXAsJHJlbV80Yml0LCRyZW1wCisJeG9yCSRyZW0sJFpoaSwkWmhpCisJYWRkcQkkbmxvLCRIdGJsLCRubG8KKwlhZGRxCSRuaGksJEh0YmwsJG5oaQorCisJbGRxCSRyZW0sMCgkcmVtcCkKKwlzcmwJJFpoaSw0LCRaaGkKKwlsZHEJJFRsbzAsOCgkbmxvKQorCXhvcgkkdDAsJFpsbywkWmxvCisKKwl4b3IJJFRsbzEsJFpsbywkWmxvCisJeG9yCSRUaGkxLCRaaGksJFpoaQorCWxkcQkkVGhpMCwwKCRubG8pCisJYm5lCSRjbnQsLkxvb3BoaSROCisKKworCWFuZAkkWmxvLDB4MGYsJHJlbXAKKwlzbGwJJFpoaSw2MCwkdDAKKwlzcmwJJFpsbyw0LCRabG8KKworCWxkcQkkVGxvMSw4KCRuaGkpCisJeG9yCSRyZW0sJFpoaSwkWmhpCisJbGRxCSRUaGkxLDAoJG5oaSkKKwlzOGFkZHEJJHJlbXAsJHJlbV80Yml0LCRyZW1wCisKKwlsZHEJJHJlbSwwKCRyZW1wKQorCXNybAkkWmhpLDQsJFpoaQorCXhvcgkkdDAsJFpsbywkWmxvCisKKwl4b3IJJFRsbzAsJFpsbywkWmxvCisJeG9yCSRUaGkwLCRaaGksJFpoaQorCisJYW5kCSRabG8sMHgwZiwkcmVtcAorCXNsbAkkWmhpLDYwLCR0MAorCXNybAkkWmxvLDQsJFpsbworCisJczhhZGRxCSRyZW1wLCRyZW1fNGJpdCwkcmVtcAorCXhvcgkkcmVtLCRaaGksJFpoaQorCisJbGRxCSRyZW0sMCgkcmVtcCkKKwlzcmwJJFpoaSw0LCRaaGkKKwl4b3IJJFRsbzEsJFpsbywkWmxvCisJeG9yCSRUaGkxLCRaaGksJFpoaQorCXhvcgkkdDAsJFpsbywkWmxvCisJeG9yCSRyZW0sJFpoaSwkWmhpCitfX18KK319CisKKyRjb2RlPTw8X19fOworI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLmg+CisjaW5jbHVkZSA8cmVnZGVmLmg+CisjZW5kaWYKKworLnRleHQKKworLnNldAlub2F0Cisuc2V0CW5vcmVvcmRlcgorLmdsb2JsCWdjbV9nbXVsdF80Yml0CisuYWxpZ24JNAorLmVudAlnY21fZ211bHRfNGJpdAorZ2NtX2dtdWx0XzRiaXQ6CisJLmZyYW1lCXNwLDAscmEKKwkucHJvbG9ndWUgMAorCisJbGRxCSRYbG8sOCgkWGkpCisJbGRxCSRYaGksMCgkWGkpCisKKwlicgkkcmVtXzRiaXQsLkxwaWMxCisuTHBpYzE6CWxkYQkkcmVtXzRiaXQscmVtXzRiaXQtLkxwaWMxKCRyZW1fNGJpdCkKK19fXworCisJJmxvb3AoKTsKKworJGNvZGUuPTw8X19fOworCXNybAkkWmxvLDI0LCR0MAkjIGJ5dGUgc3dhcAorCXNybAkkWmxvLDgsJHQxCisKKwlzbGwJJFpsbyw4LCR0MgorCXNsbAkkWmxvLDI0LCRabG8KKwl6YXBub3QJJHQwLDB4MTEsJHQwCisJemFwbm90CSR0MSwweDIyLCR0MQorCisJemFwbm90CSRabG8sMHg4OCwkWmxvCisJb3IJJHQwLCR0MSwkdDAKKwl6YXBub3QJJHQyLDB4NDQsJHQyCisKKwlvcgkkWmxvLCR0MCwkWmxvCisJc3JsCSRaaGksMjQsJHQwCisJc3JsCSRaaGksOCwkdDEKKworCW9yCSRabG8sJHQyLCRabG8KKwlzbGwJJFpoaSw4LCR0MgorCXNsbAkkWmhpLDI0LCRaaGkKKworCXNybAkkWmxvLDMyLCRYbG8KKwlzbGwJJFpsbywzMiwkWmxvCisKKwl6YXBub3QJJHQwLDB4MTEsJHQwCisJemFwbm90CSR0MSwweDIyLCR0MQorCW9yCSRabG8sJFhsbywkWGxvCisKKwl6YXBub3QJJFpoaSwweDg4LCRaaGkKKwlvcgkkdDAsJHQxLCR0MAorCXphcG5vdAkkdDIsMHg0NCwkdDIKKworCW9yCSRaaGksJHQwLCRaaGkKKwlvcgkkWmhpLCR0MiwkWmhpCisKKwlzcmwJJFpoaSwzMiwkWGhpCisJc2xsCSRaaGksMzIsJFpoaQorCisJb3IJJFpoaSwkWGhpLCRYaGkKKwlzdHEJJFhsbyw4KCRYaSkKKwlzdHEJJFhoaSwwKCRYaSkKKworCXJldAkocmEpCisuZW5kCWdjbV9nbXVsdF80Yml0CitfX18KKworJGluaGk9InMwIjsKKyRpbmxvPSJzMSI7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlnY21fZ2hhc2hfNGJpdAorLmFsaWduCTQKKy5lbnQJZ2NtX2doYXNoXzRiaXQKK2djbV9naGFzaF80Yml0OgorCWxkYQlzcCwtMzIoc3ApCisJc3RxCXJhLDAoc3ApCisJc3RxCXMwLDgoc3ApCisJc3RxCXMxLDE2KHNwKQorCS5tYXNrCTB4MDQwMDA2MDAsLTMyCisJLmZyYW1lCXNwLDMyLHJhCisJLnByb2xvZ3VlIDAKKworCWxkcV91CSRpbmhpLDAoJGlucCkKKwlsZHFfdQkkVGhpMCw3KCRpbnApCisJbGRxX3UJJGlubG8sOCgkaW5wKQorCWxkcV91CSRUbG8wLDE1KCRpbnApCisJbGRxCSRYaGksMCgkWGkpCisJbGRxCSRYbG8sOCgkWGkpCisKKwlicgkkcmVtXzRiaXQsLkxwaWMyCisuTHBpYzI6CWxkYQkkcmVtXzRiaXQscmVtXzRiaXQtLkxwaWMyKCRyZW1fNGJpdCkKKworLkxvdXRlcjoKKwlleHRxbAkkaW5oaSwkaW5wLCRpbmhpCisJZXh0cWgJJFRoaTAsJGlucCwkVGhpMAorCW9yCSRpbmhpLCRUaGkwLCRpbmhpCisJbGRhCSRpbnAsMTYoJGlucCkKKworCWV4dHFsCSRpbmxvLCRpbnAsJGlubG8KKwlleHRxaAkkVGxvMCwkaW5wLCRUbG8wCisJb3IJJGlubG8sJFRsbzAsJGlubG8KKwlzdWJxCSRsZW4sMTYsJGxlbgorCisJeG9yCSRYbG8sJGlubG8sJFhsbworCXhvcgkkWGhpLCRpbmhpLCRYaGkKK19fXworCisJJmxvb3AoKTsKKworJGNvZGUuPTw8X19fOworCXNybAkkWmxvLDI0LCR0MAkjIGJ5dGUgc3dhcAorCXNybAkkWmxvLDgsJHQxCisKKwlzbGwJJFpsbyw4LCR0MgorCXNsbAkkWmxvLDI0LCRabG8KKwl6YXBub3QJJHQwLDB4MTEsJHQwCisJemFwbm90CSR0MSwweDIyLCR0MQorCisJemFwbm90CSRabG8sMHg4OCwkWmxvCisJb3IJJHQwLCR0MSwkdDAKKwl6YXBub3QJJHQyLDB4NDQsJHQyCisKKwlvcgkkWmxvLCR0MCwkWmxvCisJc3JsCSRaaGksMjQsJHQwCisJc3JsCSRaaGksOCwkdDEKKworCW9yCSRabG8sJHQyLCRabG8KKwlzbGwJJFpoaSw4LCR0MgorCXNsbAkkWmhpLDI0LCRaaGkKKworCXNybAkkWmxvLDMyLCRYbG8KKwlzbGwJJFpsbywzMiwkWmxvCisJYmVxCSRsZW4sLkxkb25lCisKKwl6YXBub3QJJHQwLDB4MTEsJHQwCisJemFwbm90CSR0MSwweDIyLCR0MQorCW9yCSRabG8sJFhsbywkWGxvCisJbGRxX3UJJGluaGksMCgkaW5wKQorCisJemFwbm90CSRaaGksMHg4OCwkWmhpCisJb3IJJHQwLCR0MSwkdDAKKwl6YXBub3QJJHQyLDB4NDQsJHQyCisJbGRxX3UJJFRoaTAsNygkaW5wKQorCisJb3IJJFpoaSwkdDAsJFpoaQorCW9yCSRaaGksJHQyLCRaaGkKKwlsZHFfdQkkaW5sbyw4KCRpbnApCisJbGRxX3UJJFRsbzAsMTUoJGlucCkKKworCXNybAkkWmhpLDMyLCRYaGkKKwlzbGwJJFpoaSwzMiwkWmhpCisKKwlvcgkkWmhpLCRYaGksJFhoaQorCWJyCXplcm8sLkxvdXRlcgorCisuTGRvbmU6CisJemFwbm90CSR0MCwweDExLCR0MAorCXphcG5vdAkkdDEsMHgyMiwkdDEKKwlvcgkkWmxvLCRYbG8sJFhsbworCisJemFwbm90CSRaaGksMHg4OCwkWmhpCisJb3IJJHQwLCR0MSwkdDAKKwl6YXBub3QJJHQyLDB4NDQsJHQyCisKKwlvcgkkWmhpLCR0MCwkWmhpCisJb3IJJFpoaSwkdDIsJFpoaQorCisJc3JsCSRaaGksMzIsJFhoaQorCXNsbAkkWmhpLDMyLCRaaGkKKworCW9yCSRaaGksJFhoaSwkWGhpCisKKwlzdHEJJFhsbyw4KCRYaSkKKwlzdHEJJFhoaSwwKCRYaSkKKworCS5zZXQJbm9yZW9yZGVyCisJLypsZHEJcmEsMChzcCkqLworCWxkcQlzMCw4KHNwKQorCWxkcQlzMSwxNihzcCkKKwlsZGEJc3AsMzIoc3ApCisJcmV0CShyYSkKKy5lbmQJZ2NtX2doYXNoXzRiaXQKKworLmFsaWduCTQKK3JlbV80Yml0OgorCS5xdWFkCTB4MDAwMDw8NDgsIDB4MUMyMDw8NDgsIDB4Mzg0MDw8NDgsIDB4MjQ2MDw8NDgKKwkucXVhZAkweDcwODA8PDQ4LCAweDZDQTA8PDQ4LCAweDQ4QzA8PDQ4LCAweDU0RTA8PDQ4CisJLnF1YWQJMHhFMTAwPDw0OCwgMHhGRDIwPDw0OCwgMHhEOTQwPDw0OCwgMHhDNTYwPDw0OAorCS5xdWFkCTB4OTE4MDw8NDgsIDB4OERBMDw8NDgsIDB4QTlDMDw8NDgsIDB4QjVFMDw8NDgKKy5hc2NpaQkiR0hBU0ggZm9yIEFscGhhLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTQKKworX19fCiskb3V0cHV0PXNoaWZ0IGFuZCBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CisKZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtYXJtdjQucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLWFybXY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTU4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLWFybXY0LnBsCkBAIC0wLDAgKzEsNDI5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBBcHJpbCAyMDEwCisjCisjIFRoZSBtb2R1bGUgaW1wbGVtZW50cyAiNC1iaXQiIEdDTSBHSEFTSCBmdW5jdGlvbiBhbmQgdW5kZXJseWluZworIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CisjIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWyszMiBieXRlcyBzaGFyZWQgdGFibGVdLiBUaGVyZSBpcyBubworIyBleHBlcmltZW50YWwgcGVyZm9ybWFuY2UgZGF0YSBhdmFpbGFibGUgeWV0LiBUaGUgb25seSBhcHByb3hpbWF0aW9uCisjIHRoYXQgY2FuIGJlIG1hZGUgYXQgdGhpcyBwb2ludCBpcyBiYXNlZCBvbiBjb2RlIHNpemUuIElubmVyIGxvb3AgaXMKKyMgMzIgaW5zdHJ1Y3Rpb25zIGxvbmcgYW5kIG9uIHNpbmdsZS1pc3N1ZSBjb3JlIHNob3VsZCBleGVjdXRlIGluIDw0MAorIyBjeWNsZXMuIEhhdmluZyB2ZXJpZmllZCB0aGF0IGdjYyAzLjQgZGlkbid0IHVucm9sbCBjb3JyZXNwb25kaW5nCisjIGxvb3AsIHRoaXMgYXNzZW1ibGVyIGxvb3AgYm9keSB3YXMgZm91bmQgdG8gYmUgfjN4IHNtYWxsZXIgdGhhbgorIyBjb21waWxlci1nZW5lcmF0ZWQgb25lLi4uCisjCisjIEp1bHkgMjAxMAorIworIyBSZXNjaGVkdWxpbmcgZm9yIGR1YWwtaXNzdWUgcGlwZWxpbmUgcmVzdWx0ZWQgaW4gOC41JSBpbXByb3ZlbWVudCBvbgorIyBDb3J0ZXggQTggY29yZSBhbmQgfjI1IGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgKHdoaWNoIHdhcyBvYnNlcnZlZAorIyB0byBiZSB+MyB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGU6LSkKKyMKKyMgRmVicnVhcnkgMjAxMQorIworIyBQcm9maWxlci1hc3Npc3RlZCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uIHJlc3VsdGVkIGluIDclCisjIGltcHJvdmVtZW50IG9uIENvcnRleCBBOCBjb3JlIGFuZCB+MjMuNSBjeWNsZXMgcGVyIGJ5dGUuCisjCisjIE1hcmNoIDIwMTEKKyMKKyMgQWRkIE5FT04gaW1wbGVtZW50YXRpb24gZmVhdHVyaW5nIHBvbHlub21pYWwgbXVsdGlwbGljYXRpb24sIGkuZS4gbm8KKyMgbG9va3VwIHRhYmxlcyBpbnZvbHZlZC4gT24gQ29ydGV4IEE4IGl0IHdhcyBtZWFzdXJlZCB0byBwcm9jZXNzIG9uZQorIyBieXRlIGluIDE1IGN5Y2xlcyBvciA1NSUgZmFzdGVyIHRoYW4gaW50ZWdlci1vbmx5IGNvZGUuCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTm90ZSBhYm91dCAiNTI4QiIgdmFyaWFudC4gSW4gQVJNIGNhc2UgaXQgbWFrZXMgbGVzc2VyIHNlbnNlIHRvCisjIGltcGxlbWVudCBpdCBmb3IgZm9sbG93aW5nIHJlYXNvbnM6CisjCisjIC0gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd29uJ3QgYmUgYW55d2hlcmUgbmVhciA1MCUsIGJlY2F1c2UgMTI4LQorIyAgIGJpdCBzaGlmdCBvcGVyYXRpb24gaXMgbmVhdGx5IGZ1c2VkIHdpdGggMTI4LWJpdCB4b3IgaGVyZSwgYW5kCisjICAgIjUzOEIiIHZhcmlhbnQgd291bGQgZWxpbWluYXRlIG9ubHkgNC01IGluc3RydWN0aW9ucyBvdXQgb2YgMzIKKyMgICBpbiB0aGUgaW5uZXIgbG9vcCAobWVhbmluZyB0aGF0IGVzdGltYXRlZCBpbXByb3ZlbWVudCBpcyB+MTUlKTsKKyMgLSBBUk0tYmFzZWQgc3lzdGVtcyBhcmUgb2Z0ZW4gZW1iZWRkZWQgb25lcyBhbmQgZXh0cmEgbWVtb3J5CisjICAgY29uc3VtcHRpb24gbWlnaHQgYmUgdW5hcHByZWNpYXRlZCAoZm9yIHNvIGxpdHRsZSBpbXByb3ZlbWVudCk7CisjCisjIEJ5dGUgb3JkZXIgW2luXWRlcGVuZGVuY2UuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIENhbGxlciBpcyBleHBlY3RlZCB0byBtYWludGFpbiBzcGVjaWZpYyAqZHdvcmQqIG9yZGVyIGluIEh0YWJsZSwKKyMgbmFtZWx5IHdpdGggKmxlYXN0KiBzaWduaWZpY2FudCBkd29yZCBvZiAxMjgtYml0IHZhbHVlIGF0ICpsb3dlcioKKyMgYWRkcmVzcy4gVGhpcyBkaWZmZXJzIGNvbXBsZXRlbHkgZnJvbSBDIGNvZGUgYW5kIGhhcyBldmVyeXRoaW5nIHRvCisjIGRvIHdpdGggbGRtIGluc3RydWN0aW9uIGFuZCBvcmRlciBpbiB3aGljaCBkd29yZHMgYXJlICJjb25zdW1lZCIgYnkKKyMgYWxnb3JpdGhtLiAqQnl0ZSogb3JkZXIgd2l0aGluIHRoZXNlIGR3b3JkcyBpbiB0dXJuIGlzIHdoYXRldmVyCisjICpuYXRpdmUqIGJ5dGUgb3JkZXIgb24gY3VycmVudCBwbGF0Zm9ybS4gU2VlIGdjbTEyOC5jIGZvciB3b3JraW5nCisjIGV4YW1wbGUuLi4KKword2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30KK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKKyRYaT0icjAiOwkjIGFyZ3VtZW50IGJsb2NrCiskSHRibD0icjEiOworJGlucD0icjIiOworJGxlbj0icjMiOworCiskWmxsPSJyNCI7CSMgdmFyaWFibGVzCiskWmxoPSJyNSI7CiskWmhsPSJyNiI7CiskWmhoPSJyNyI7CiskVGxsPSJyOCI7CiskVGxoPSJyOSI7CiskVGhsPSJyMTAiOworJFRoaD0icjExIjsKKyRubG89InIxMiI7CisjIyMjIyMjIyMjIyMjIyMjIyByMTMgaXMgc3RhY2sgcG9pbnRlcgorJG5oaT0icjE0IjsKKyMjIyMjIyMjIyMjIyMjIyMjIHIxNSBpcyBwcm9ncmFtIGNvdW50ZXIKKworJHJlbV80Yml0PSRpbnA7CSMgdXNlZCBpbiBnY21fZ211bHRfNGJpdAorJGNudD0kbGVuOworCitzdWIgWnNtYXNoKCkgeworICBteSAkaT0xMjsKKyAgbXkgQGFyZ3M9QF87CisgIGZvciAoJFpsbCwkWmxoLCRaaGwsJFpoaCkgeworICAgICRjb2RlLj08PF9fXzsKKyNpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CSRfLCRfCisJc3RyCSRfLFskWGksIyRpXQorI2VsaWYgZGVmaW5lZChfX0FSTUVCX18pCisJc3RyCSRfLFskWGksIyRpXQorI2Vsc2UKKwltb3YJJFRsaCwkXyxsc3IjOAorCXN0cmIJJF8sWyRYaSwjJGkrM10KKwltb3YJJFRobCwkXyxsc3IjMTYKKwlzdHJiCSRUbGgsWyRYaSwjJGkrMl0KKwltb3YJJFRoaCwkXyxsc3IjMjQKKwlzdHJiCSRUaGwsWyRYaSwjJGkrMV0KKwlzdHJiCSRUaGgsWyRYaSwjJGldCisjZW5kaWYKK19fXworICAgICRjb2RlLj0iXHQiLnNoaWZ0KEBhcmdzKS4iXG4iOworICAgICRpLT00OworICB9Cit9CisKKyRjb2RlPTw8X19fOworI2luY2x1ZGUgImFybV9hcmNoLmgiCisKKy50ZXh0CisuY29kZQkzMgorCisudHlwZQlyZW1fNGJpdCwlb2JqZWN0CisuYWxpZ24JNQorcmVtXzRiaXQ6Cisuc2hvcnQJMHgwMDAwLDB4MUMyMCwweDM4NDAsMHgyNDYwCisuc2hvcnQJMHg3MDgwLDB4NkNBMCwweDQ4QzAsMHg1NEUwCisuc2hvcnQJMHhFMTAwLDB4RkQyMCwweEQ5NDAsMHhDNTYwCisuc2hvcnQJMHg5MTgwLDB4OERBMCwweEE5QzAsMHhCNUUwCisuc2l6ZQlyZW1fNGJpdCwuLXJlbV80Yml0CisKKy50eXBlCXJlbV80Yml0X2dldCwlZnVuY3Rpb24KK3JlbV80Yml0X2dldDoKKwlzdWIJJHJlbV80Yml0LHBjLCM4CisJc3ViCSRyZW1fNGJpdCwkcmVtXzRiaXQsIzMyCUAgJnJlbV80Yml0CisJYgkuTHJlbV80Yml0X2dvdAorCW5vcAorLnNpemUJcmVtXzRiaXRfZ2V0LC4tcmVtXzRiaXRfZ2V0CisKKy5nbG9iYWwJZ2NtX2doYXNoXzRiaXQKKy50eXBlCWdjbV9naGFzaF80Yml0LCVmdW5jdGlvbgorZ2NtX2doYXNoXzRiaXQ6CisJc3ViCXIxMixwYywjOAorCWFkZAkkbGVuLCRpbnAsJGxlbgkJQCAkbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQKKwlzdG1kYglzcCEse3IzLXIxMSxscn0JCUAgc2F2ZSAkbGVuL2VuZCB0b28KKwlzdWIJcjEyLHIxMiwjNDgJCUAgJnJlbV80Yml0CisKKwlsZG1pYQlyMTIse3I0LXIxMX0JCUAgY29weSByZW1fNGJpdCAuLi4KKwlzdG1kYglzcCEse3I0LXIxMX0JCUAgLi4uIHRvIHN0YWNrCisKKwlsZHJiCSRubG8sWyRpbnAsIzE1XQorCWxkcmIJJG5oaSxbJFhpLCMxNV0KKy5Mb3V0ZXI6CisJZW9yCSRubG8sJG5sbywkbmhpCisJYW5kCSRuaGksJG5sbywjMHhmMAorCWFuZAkkbmxvLCRubG8sIzB4MGYKKwltb3YJJGNudCwjMTQKKworCWFkZAkkWmhoLCRIdGJsLCRubG8sbHNsIzQKKwlsZG1pYQkkWmhoLHskWmxsLSRaaGh9CUAgbG9hZCBIdGJsW25sb10KKwlhZGQJJFRoaCwkSHRibCwkbmhpCisJbGRyYgkkbmxvLFskaW5wLCMxNF0KKworCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KKwlsZG1pYQkkVGhoLHskVGxsLSRUaGh9CUAgbG9hZCBIdGJsW25oaV0KKwlhZGQJJG5oaSwkbmhpLCRuaGkKKwllb3IJJFpsbCwkVGxsLCRabGwsbHNyIzQKKwlsZHJoCSRUbGwsW3NwLCRuaGldCQlAIHJlbV80Yml0W3JlbV0KKwllb3IJJFpsbCwkWmxsLCRabGgsbHNsIzI4CisJbGRyYgkkbmhpLFskWGksIzE0XQorCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAorCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKKwllb3IJJFpobCwkVGhsLCRaaGwsbHNyIzQKKwllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4CisJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CisJZW9yCSRubG8sJG5sbywkbmhpCisJYW5kCSRuaGksJG5sbywjMHhmMAorCWFuZAkkbmxvLCRubG8sIzB4MGYKKwllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CisKKy5MaW5uZXI6CisJYWRkCSRUaGgsJEh0YmwsJG5sbyxsc2wjNAorCWFuZAkkbmxvLCRabGwsIzB4ZgkJQCByZW0KKwlzdWJzCSRjbnQsJGNudCwjMQorCWFkZAkkbmxvLCRubG8sJG5sbworCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmxvXQorCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAorCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKKwllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKKwllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CisJbGRyaAkkVGxsLFtzcCwkbmxvXQkJQCByZW1fNGJpdFtyZW1dCisJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0CisJbGRycGxiCSRubG8sWyRpbnAsJGNudF0KKwllb3IJJFpobCwkWmhsLCRaaGgsbHNsIzI4CisJZW9yCSRaaGgsJFRoaCwkWmhoLGxzciM0CisKKwlhZGQJJFRoaCwkSHRibCwkbmhpCisJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQorCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCisJYWRkCSRuaGksJG5oaSwkbmhpCisJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtuaGldCisJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CisJbGRycGxiCSRUbGwsWyRYaSwkY250XQorCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKKwllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKKwlsZHJoCSRUbGgsW3NwLCRuaGldCisJZW9yCSRabGgsJFpsaCwkWmhsLGxzbCMyOAorCWVvcgkkWmhsLCRUaGwsJFpobCxsc3IjNAorCWVvcgkkWmhsLCRaaGwsJFpoaCxsc2wjMjgKKwllb3JwbAkkbmxvLCRubG8sJFRsbAorCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAorCWFuZHBsCSRuaGksJG5sbywjMHhmMAorCWFuZHBsCSRubG8sJG5sbywjMHgwZgorCWVvcgkkWmhoLCRaaGgsJFRsaCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCisJYnBsCS5MaW5uZXIKKworCWxkcgkkbGVuLFtzcCwjMzJdCQlAIHJlLWxvYWQgJGxlbi9lbmQKKwlhZGQJJGlucCwkaW5wLCMxNgorCW1vdgkkbmhpLCRabGwKK19fXworCSZac21hc2goImNtcFx0JGlucCwkbGVuIiwibGRybmViXHQkbmxvLFskaW5wLCMxNV0iKTsKKyRjb2RlLj08PF9fXzsKKwlibmUJLkxvdXRlcgorCisJYWRkCXNwLHNwLCMzNgorI2lmIF9fQVJNX0FSQ0hfXz49NQorCWxkbWlhCXNwISx7cjQtcjExLHBjfQorI2Vsc2UKKwlsZG1pYQlzcCEse3I0LXIxMSxscn0KKwl0c3QJbHIsIzEKKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CisJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgorLnNpemUJZ2NtX2doYXNoXzRiaXQsLi1nY21fZ2hhc2hfNGJpdAorCisuZ2xvYmFsCWdjbV9nbXVsdF80Yml0CisudHlwZQlnY21fZ211bHRfNGJpdCwlZnVuY3Rpb24KK2djbV9nbXVsdF80Yml0OgorCXN0bWRiCXNwISx7cjQtcjExLGxyfQorCWxkcmIJJG5sbyxbJFhpLCMxNV0KKwliCXJlbV80Yml0X2dldAorLkxyZW1fNGJpdF9nb3Q6CisJYW5kCSRuaGksJG5sbywjMHhmMAorCWFuZAkkbmxvLCRubG8sIzB4MGYKKwltb3YJJGNudCwjMTQKKworCWFkZAkkWmhoLCRIdGJsLCRubG8sbHNsIzQKKwlsZG1pYQkkWmhoLHskWmxsLSRaaGh9CUAgbG9hZCBIdGJsW25sb10KKwlsZHJiCSRubG8sWyRYaSwjMTRdCisKKwlhZGQJJFRoaCwkSHRibCwkbmhpCisJYW5kCSRuaGksJFpsbCwjMHhmCQlAIHJlbQorCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQorCWFkZAkkbmhpLCRuaGksJG5oaQorCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAorCWxkcmgJJFRsbCxbJHJlbV80Yml0LCRuaGldCUAgcmVtXzRiaXRbcmVtXQorCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKKwllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKKwllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CisJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0CisJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAorCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAorCWFuZAkkbmhpLCRubG8sIzB4ZjAKKwllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CisJYW5kCSRubG8sJG5sbywjMHgwZgorCisuTG9vcDoKKwlhZGQJJFRoaCwkSHRibCwkbmxvLGxzbCM0CisJYW5kCSRubG8sJFpsbCwjMHhmCQlAIHJlbQorCXN1YnMJJGNudCwkY250LCMxCisJYWRkCSRubG8sJG5sbywkbmxvCisJbGRtaWEJJFRoaCx7JFRsbC0kVGhofQlAIGxvYWQgSHRibFtubG9dCisJZW9yCSRabGwsJFRsbCwkWmxsLGxzciM0CisJZW9yCSRabGwsJFpsbCwkWmxoLGxzbCMyOAorCWVvcgkkWmxoLCRUbGgsJFpsaCxsc3IjNAorCWVvcgkkWmxoLCRabGgsJFpobCxsc2wjMjgKKwlsZHJoCSRUbGwsWyRyZW1fNGJpdCwkbmxvXQlAIHJlbV80Yml0W3JlbV0KKwllb3IJJFpobCwkVGhsLCRaaGwsbHNyIzQKKwlsZHJwbGIJJG5sbyxbJFhpLCRjbnRdCisJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAorCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAorCisJYWRkCSRUaGgsJEh0YmwsJG5oaQorCWFuZAkkbmhpLCRabGwsIzB4ZgkJQCByZW0KKwllb3IJJFpoaCwkWmhoLCRUbGwsbHNsIzE2CUAgXj0gcmVtXzRiaXRbcmVtXQorCWFkZAkkbmhpLCRuaGksJG5oaQorCWxkbWlhCSRUaGgseyRUbGwtJFRoaH0JQCBsb2FkIEh0YmxbbmhpXQorCWVvcgkkWmxsLCRUbGwsJFpsbCxsc3IjNAorCWVvcgkkWmxsLCRabGwsJFpsaCxsc2wjMjgKKwllb3IJJFpsaCwkVGxoLCRabGgsbHNyIzQKKwlsZHJoCSRUbGwsWyRyZW1fNGJpdCwkbmhpXQlAIHJlbV80Yml0W3JlbV0KKwllb3IJJFpsaCwkWmxoLCRaaGwsbHNsIzI4CisJZW9yCSRaaGwsJFRobCwkWmhsLGxzciM0CisJZW9yCSRaaGwsJFpobCwkWmhoLGxzbCMyOAorCWVvcgkkWmhoLCRUaGgsJFpoaCxsc3IjNAorCWFuZHBsCSRuaGksJG5sbywjMHhmMAorCWFuZHBsCSRubG8sJG5sbywjMHgwZgorCWVvcgkkWmhoLCRaaGgsJFRsbCxsc2wjMTYJQCBePSByZW1fNGJpdFtyZW1dCisJYnBsCS5Mb29wCitfX18KKwkmWnNtYXNoKCk7CiskY29kZS49PDxfX187CisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTEscGN9CisjZWxzZQorCWxkbWlhCXNwISx7cjQtcjExLGxyfQorCXRzdAlsciwjMQorCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKKwlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQorI2VuZGlmCisuc2l6ZQlnY21fZ211bHRfNGJpdCwuLWdjbV9nbXVsdF80Yml0CitfX18KK3sKK215ICRjbnQ9JEh0Ymw7CSMgJEh0YmwgaXMgdXNlZCBvbmNlIGluIHRoZSB2ZXJ5IGJlZ2lubmluZworCitteSAoJEhoaSwgJEhsbywgJFpvLCAkVCwgJHhpLCAkbW9kKSA9IG1hcCgiZCRfIiwoMC4uNykpOworbXkgKCRRaGksICRRbG8sICRaLCAgJFIsICR6ZXJvLCAkUXBvc3QsICRJTikgPSBtYXAoInEkXyIsKDguLjE1KSk7CisKKyMgWjpabyBrZWVwcyAxMjgtYml0IHJlc3VsdCBzaGlmdGVkIGJ5IDEgdG8gdGhlIHJpZ2h0LCB3aXRoIGJvdHRvbSBiaXQKKyMgaW4gWm8uIE9yIHNob3VsZCBJIHNheSAidG9wIGJpdCIsIGJlY2F1c2UgR0hBU0ggaXMgc3BlY2lmaWVkIGluCisjIHJldmVyc2UgYml0IG9yZGVyPyBPdGhlcndpc2Ugc3RyYWlnaHRmb3J3YXJkIDEyOC1idCBIIGJ5IG9uZSBpbnB1dAorIyBieXRlIG11bHRpcGxpY2F0aW9uIGFuZCBtb2R1bG8tcmVkdWN0aW9uLCB0aW1lcyAxNi4KKworc3ViIERsbygpICAgeyBzaGlmdD1+bXxxKFsxXT9bMC05XSl8PyJkIi4oJDEqMik6IiI7ICAgICB9CitzdWIgRGhpKCkgICB7IHNoaWZ0PX5tfHEoWzFdP1swLTldKXw/ImQiLigkMSoyKzEpOiIiOyAgIH0KK3N1YiBRKCkgICAgIHsgc2hpZnQ9fm18ZChbMS0zXT9bMDI0NjhdKXw/InEiLigkMS8yKToiIjsgfQorCiskY29kZS49PDxfX187CisjaWYgX19BUk1fQVJDSF9fPj03CisuZnB1CW5lb24KKworLmdsb2JhbAlnY21fZ211bHRfbmVvbgorLnR5cGUJZ2NtX2dtdWx0X25lb24sJWZ1bmN0aW9uCisuYWxpZ24JNAorZ2NtX2dtdWx0X25lb246CisJc3ViCQkkSHRibCwjMTYJCUAgcG9pbnQgYXQgSCBpbiBHQ00xMjhfQ1RYCisJdmxkMS42NAkJYCZEaGkoIiRJTiIpYCxbJFhpLDo2NF0hQCBsb2FkIFhpCisJdm1vdi5pMzIJJG1vZCwjMHhlMQkJQCBvdXIgaXJyZWR1Y2libGUgcG9seW5vbWlhbAorCXZsZDEuNjQJCWAmRGxvKCIkSU4iKWAsWyRYaSw6NjRdIQorCXZzaHIudTY0CSRtb2QsIzMyCisJdmxkbWlhCQkkSHRibCx7JEhoaS0kSGxvfQlAIGxvYWQgSAorCXZlb3IJCSR6ZXJvLCR6ZXJvCisjaWZkZWYgX19BUk1FTF9fCisJdnJldjY0LjgJJElOLCRJTgorI2VuZGlmCisJdmVvcgkJJFFwb3N0LCRRcG9zdAorCXZlb3IJCSRSLCRSCisJbW92CQkkY250LCMxNgorCXZlb3IJCSRaLCRaCisJbW92CQkkbGVuLCMxNgorCXZlb3IJCSRabywkWm8KKwl2ZHVwLjgJCSR4aSxgJkRsbygiJElOIilgWzBdCUAgYnJvYWRjYXN0IGxvd2VzdCBieXRlCisJYgkJLkxpbm5lcl9uZW9uCisuc2l6ZQlnY21fZ211bHRfbmVvbiwuLWdjbV9nbXVsdF9uZW9uCisKKy5nbG9iYWwJZ2NtX2doYXNoX25lb24KKy50eXBlCWdjbV9naGFzaF9uZW9uLCVmdW5jdGlvbgorLmFsaWduCTQKK2djbV9naGFzaF9uZW9uOgorCXZsZDEuNjQJCWAmRGhpKCIkWiIpYCxbJFhpLDo2NF0hCUAgbG9hZCBYaQorCXZtb3YuaTMyCSRtb2QsIzB4ZTEJCUAgb3VyIGlycmVkdWNpYmxlIHBvbHlub21pYWwKKwl2bGQxLjY0CQlgJkRsbygiJFoiKWAsWyRYaSw6NjRdIQorCXZzaHIudTY0CSRtb2QsIzMyCisJdmxkbWlhCQkkWGkseyRIaGktJEhsb30JCUAgbG9hZCBICisJdmVvcgkJJHplcm8sJHplcm8KKwlub3AKKyNpZmRlZiBfX0FSTUVMX18KKwl2cmV2NjQuOAkkWiwkWgorI2VuZGlmCisuTG91dGVyX25lb246CisJdmxkMS42NAkJYCZEaGkoJElOKWAsWyRpbnBdIQlAIGxvYWQgaW5wCisJdmVvcgkJJFFwb3N0LCRRcG9zdAorCXZsZDEuNjQJCWAmRGxvKCRJTilgLFskaW5wXSEKKwl2ZW9yCQkkUiwkUgorCW1vdgkJJGNudCwjMTYKKyNpZmRlZiBfX0FSTUVMX18KKwl2cmV2NjQuOAkkSU4sJElOCisjZW5kaWYKKwl2ZW9yCQkkWm8sJFpvCisJdmVvcgkJJElOLCRaCQkJQCBpbnBePVhpCisJdmVvcgkJJFosJFoKKwl2ZHVwLjgJCSR4aSxgJkRsbygiJElOIilgWzBdCUAgYnJvYWRjYXN0IGxvd2VzdCBieXRlCisuTGlubmVyX25lb246CisJc3VicwkJJGNudCwkY250LCMxCisJdm11bGwucDgJJFFsbywkSGxvLCR4aQkJQCBILmxvt1hpW2ldCisJdm11bGwucDgJJFFoaSwkSGhpLCR4aQkJQCBILmhpt1hpW2ldCisJdmV4dC44CQkkSU4sJHplcm8sIzEJCUAgSU4+Pj04CisKKwl2ZW9yCQkkWiwkUXBvc3QJCUAgbW9kdWxvLXNjaGVkdWxlZCBwYXJ0CisJdnNobC5pNjQJYCZEbG8oIiRSIilgLCM0OAorCXZkdXAuOAkJJHhpLGAmRGxvKCIkSU4iKWBbMF0JQCBicm9hZGNhc3QgbG93ZXN0IGJ5dGUKKwl2ZW9yCQkkVCxgJkRsbygiJFFsbyIpYCxgJkRsbygiJFoiKWAKKworCXZlb3IJCWAmRGhpKCIkWiIpYCxgJkRsbygiJFIiKWAKKwl2dXpwLjgJCSRRbG8sJFFoaQorCXZzbGkuOAkJJFpvLCRULCMxCQlAIGNvbXBvc2UgdGhlICJjYXJyeSIgYnl0ZQorCXZleHQuOAkJJFosJHplcm8sIzEJCUAgWj4+PTgKKworCXZtdWxsLnA4CSRSLCRabywkbW9kCQlAICJjYXJyeSK3MHhlMQorCXZzaHIudTgJCSRabywkVCwjNwkJQCBzYXZlIFoncyBib3R0b20gYml0CisJdmV4dC44CQkkUXBvc3QsJFFsbywkemVybywjMQlAIFFsbz4+PTgKKwl2ZW9yCQkkWiwkUWhpCisJYm5lCQkuTGlubmVyX25lb24KKworCXZlb3IJCSRaLCRRcG9zdAkJQCBtb2R1bG8tc2NoZWR1bGVkIGFydGVmYWN0CisJdnNobC5pNjQJYCZEbG8oIiRSIilgLCM0OAorCXZlb3IJCWAmRGhpKCIkWiIpYCxgJkRsbygiJFIiKWAKKworCUAgZmluYWxpemF0aW9uLCBub3JtYWxpemUgWjpabworCXZhbmQJCSRabywkbW9kCQlAIHN1ZmZpY2VzIHRvIG1hc2sgdGhlIGJpdAorCXZzaHIudTY0CWAmRGhpKCZRKCIkWm8iKSlgLGAmRGxvKCIkWiIpYCwjNjMKKwl2c2hsLmk2NAkkWiwjMQorCXN1YnMJCSRsZW4sIzE2CisJdm9ycgkJJFosYCZRKCIkWm8iKWAJCUAgWj1aOlpvPDwxCisJYm5lCQkuTG91dGVyX25lb24KKworI2lmZGVmIF9fQVJNRUxfXworCXZyZXY2NC44CSRaLCRaCisjZW5kaWYKKwlzdWIJCSRYaSwjMTYJCisJdnN0MS42NAkJYCZEaGkoIiRaIilgLFskWGksOjY0XSEJQCB3cml0ZSBvdXQgWGkKKwl2c3QxLjY0CQlgJkRsbygiJFoiKWAsWyRYaSw6NjRdCisKKwlieAlscgorLnNpemUJZ2NtX2doYXNoX25lb24sLi1nY21fZ2hhc2hfbmVvbgorI2VuZGlmCitfX18KK30KKyRjb2RlLj08PF9fXzsKKy5hc2NpeiAgIkdIQVNIIGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduICAyCitfX18KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CiskY29kZSA9fiBzL1xiYnhccytsclxiLy53b3JkXHQweGUxMmZmZjFlL2dtOwkjIG1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB3aXRoIC1tYXJjaD1hcm12NAorcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaApkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1pYTY0LnBsIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1pYTY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzNTRjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLWlhNjQucGwKQEAgLTAsMCArMSw0NjMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgTWFyY2ggMjAxMAorIworIyBUaGUgbW9kdWxlIGltcGxlbWVudHMgIjQtYml0IiBHQ00gR0hBU0ggZnVuY3Rpb24gYW5kIHVuZGVybHlpbmcKKyMgc2luZ2xlIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbiBpbiBHRigyXjEyOCkuICI0LWJpdCIgbWVhbnMgdGhhdCBpdAorIyB1c2VzIDI1NiBieXRlcyBwZXIta2V5IHRhYmxlIFsrMTI4IGJ5dGVzIHNoYXJlZCB0YWJsZV0uIFN0cmVhbWVkCisjIEdIQVNIIHBlcmZvcm1hbmNlIHdhcyBtZWFzdXJlZCB0byBiZSA2LjY3IGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUKKyMgb24gSXRhbml1bSAyLCB3aGljaCBpcyA+OTAlIGJldHRlciB0aGFuIE1pY3Jvc29mdCBjb21waWxlciBnZW5lcmF0ZWQKKyMgY29kZS4gVG8gYW5jaG9yIHRvIHNvbWV0aGluZyBlbHNlIHNoYTEtaWE2NC5wbCBtb2R1bGUgcHJvY2Vzc2VzIG9uZQorIyBieXRlIGluIDUuNyBjeWNsZXMuIE9uIEl0YW5pdW0gR0hBU0ggc2hvdWxkIHJ1biBhdCB+OC41IGN5Y2xlcyBwZXIKKyMgYnl0ZS4KKworIyBTZXB0ZW1iZXIgMjAxMAorIworIyBJdCB3YXMgb3JpZ2luYWxseSB0aG91Z2h0IHRoYXQgaXQgbWFrZXMgbGVzc2VyIHNlbnNlIHRvIGltcGxlbWVudAorIyAiNTI4QiIgdmFyaWFudCBvbiBJdGFuaXVtIDIgZm9yIGZvbGxvd2luZyByZWFzb24uIEJlY2F1c2UgbnVtYmVyIG9mCisjIGZ1bmN0aW9uYWwgdW5pdHMgaXMgbmF0dXJhbGx5IGxpbWl0ZWQsIGl0IGFwcGVhcmVkIGltcG9zc2libGUgdG8KKyMgaW1wbGVtZW50ICI1MjhCIiBsb29wIGluIDQgY3ljbGVzLCBvbmx5IGluIDUuIFRoaXMgd291bGQgbWVhbiB0aGF0CisjIHRoZW9yZXRpY2FsbHkgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgY291bGRuJ3QgYmUgbW9yZSB0aGFuIDIwJS4KKyMgQnV0IG9jY2FzaW9uYWxseSB5b3UgcHJvdmUgeW91cnNlbGYgd3Jvbmc6LSkgSSBmaWd1cmVkIG91dCBhIHdheSB0bworIyBmb2xkIGNvdXBsZSBvZiBpbnN0cnVjdGlvbnMgYW5kIGhhdmluZyBmcmVlZCB5ZXQgYW5vdGhlciBpbnN0cnVjdGlvbgorIyBzbG90IGJ5IHVucm9sbGluZyB0aGUgbG9vcC4uLiBSZXN1bHRpbmcgcGVyZm9ybWFuY2UgaXMgNC40NSBjeWNsZXMKKyMgcGVyIHByb2Nlc3NlZCBieXRlIGFuZCA1MCUgYmV0dGVyIHRoYW4gIjI1NkIiIHZlcnNpb24uIE9uIG9yaWdpbmFsCisjIEl0YW5pdW0gcGVyZm9ybWFuY2Ugc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSBhcyB0aGUgIjI1NkIiIHZlcnNpb24sCisjIGkuZS4gfjguNSBjeWNsZXMuCisKKyRvdXRwdXQ9c2hpZnQgYW5kIChvcGVuIFNURE9VVCwiPiRvdXRwdXQiIG9yIGRpZSAiY2FuJ3Qgb3BlbiAkb3V0cHV0OiAkISIpOworCitpZiAoJF5PIGVxICJocHV4IikgeworICAgICRBRERQPSJhZGRwNCI7CisgICAgZm9yIChAQVJHVikgeyAkQUREUD0iYWRkIiBpZiAoL1tcK0REfFwtbWxwXTY0Lyk7IH0KK30gZWxzZSB7ICRBRERQPSJhZGQiOyB9Citmb3IgKEBBUkdWKSAgeyAgJGJpZ19lbmRpYW49MSBpZiAoL1wtREJfRU5ESUFOLyk7CisgICAgICAgICAgICAgICAgJGJpZ19lbmRpYW49MCBpZiAoL1wtRExfRU5ESUFOLyk7ICB9CitpZiAoIWRlZmluZWQoJGJpZ19lbmRpYW4pKQorICAgICAgICAgICAgIHsgICRiaWdfZW5kaWFuPSh1bnBhY2soJ0wnLHBhY2soJ04nLDEpKT09MSk7ICB9CisKK3N1YiBsb29wKCkgeworbXkgJGxhYmVsPXNoaWZ0OworbXkgKCRwMTYsJHAxNyk9KHNoaWZ0KT8oInA2MyIsInA2MyIpOigicDE2IiwicDE3Iik7ICMgbWFzayByZWZlcmVuY2VzIHRvIGlucAorCisjIExvb3AgaXMgc2NoZWR1bGVkIGZvciA2IHRpY2tzIG9uIEl0YW5pdW0gMiBhbmQgOCBvbiBJdGFuaXVtLCBpLmUuCisjIGluIHNjYWxhYmxlIG1hbm5lcjstKSBOYXR1cmFsbHkgYXNzdW1pbmcgZGF0YSBpbiBMMSBjYWNoZS4uLgorIyBTcGVjaWFsIG5vdGUgYWJvdXQgJ2RlcCcgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHVzZWQgdG8gY29uc3RydWN0CisjICZyZW1fNGJpdFtabG8mMHhmXS4gSXQgd29ya3MsIGJlY2F1c2UgcmVtXzRiaXQgaXMgYWxpZ25lZCBhdCAxMjgKKyMgYnl0ZXMgYm91bmRhcnkgYW5kIGxvd2VyIDcgYml0cyBvZiBpdHMgYWRkcmVzcyBhcmUgZ3VhcmFudGVlZCB0bworIyBiZSB6ZXJvLgorJGNvZGUuPTw8X19fOworJGxhYmVsOgoreyAubWZpOwkocDE4KQlsZDgJSGxvPVtIaVsxXV0sLTgKKwkocDE5KQlkZXAJcmVtPVpsbyxyZW1fNGJpdHAsMyw0CX0KK3sgLm1maTsJKHAxOSkJeG9yCVpoaT1aaGksSGhpCisJKCRwMTcpCXhvcgl4aVsxXT14aVsxXSxpblsxXQl9OzsKK3sgLm1maTsJKHAxOCkJbGQ4CUhoaT1bSGlbMV1dCisJKHAxOSkJc2hycAlabG89WmhpLFpsbyw0CQl9Cit7IC5tZmk7CShwMTkpCWxkOAlyZW09W3JlbV0KKwkocDE4KQlhbmQJSGlbMV09bWFzazB4ZjAseGlbMl0JfTs7Cit7IC5tbWk7CSgkcDE2KQlsZDEJaW5bMF09W2lucF0sLTEKKwkocDE4KQl4b3IJWmxvPVpsbyxIbG8KKwkocDE5KQlzaHIudQlaaGk9WmhpLDQJCX0KK3sgLm1pYjsJKHAxOSkJeG9yCUhoaT1IaGkscmVtCisJKHAxOCkJYWRkCUhpWzFdPUh0YmwsSGlbMV0JfTs7CisKK3sgLm1maTsJKHAxOCkJbGQ4CUhsbz1bSGlbMV1dLC04CisJKHAxOCkJZGVwCXJlbT1abG8scmVtXzRiaXRwLDMsNAl9Cit7IC5tZmk7CShwMTcpCXNobGFkZAlIaVswXT14aVsxXSw0LHIwCisJKHAxOCkJeG9yCVpoaT1aaGksSGhpCQl9OzsKK3sgLm1maTsJKHAxOCkJbGQ4CUhoaT1bSGlbMV1dCisJKHAxOCkJc2hycAlabG89WmhpLFpsbyw0CQl9Cit7IC5tZmk7CShwMTgpCWxkOAlyZW09W3JlbV0KKwkocDE3KQlhbmQJSGlbMF09bWFzazB4ZjAsSGlbMF0JfTs7Cit7IC5tbWk7CShwMTYpCWxkMQl4aVswXT1bWGldLC0xCisJKHAxOCkJeG9yCVpsbz1abG8sSGxvCisJKHAxOCkJc2hyLnUJWmhpPVpoaSw0CQl9Cit7IC5taWI7CShwMTgpCXhvcglIaGk9SGhpLHJlbQorCShwMTcpCWFkZAlIaVswXT1IdGJsLEhpWzBdCisJYnIuY3RvcC5zcHRrCSRsYWJlbAkJCX07OworX19fCit9CisKKyRjb2RlPTw8X19fOworLmV4cGxpY2l0CisudGV4dAorCitwcmV2ZnM9cjI7CXByZXZsYz1yMzsJcHJldnByPXI4OworbWFzazB4ZjA9cjIxOworcmVtPXIyMjsJcmVtXzRiaXRwPXIyMzsKK1hpPXIyNDsJCUh0Ymw9cjI1OworaW5wPXIyNjsJZW5kPXIyNzsKK0hoaT1yMjg7CUhsbz1yMjk7CitaaGk9cjMwOwlabG89cjMxOworCisuYWxpZ24JMTI4Cisuc2tpcAkxNgkJCQkJLy8gYWxpZ25zIGxvb3AgYm9keQorLmdsb2JhbAlnY21fZ211bHRfNGJpdCMKKy5wcm9jCWdjbV9nbXVsdF80Yml0IworZ2NtX2dtdWx0XzRiaXQ6CisJLnByb2xvZ3VlCit7IC5tbWk7CS5zYXZlCWFyLnBmcyxwcmV2ZnMKKwlhbGxvYwlwcmV2ZnM9YXIucGZzLDIsNiwwLDgKKwkkQUREUAlYaT0xNSxpbjAJCQkvLyAmWGlbMTVdCisJbW92CXJlbV80Yml0cD1pcAkJfQoreyAubWlpOwkkQUREUAlIdGJsPTgsaW4xCQkJLy8gJkh0YmxbMF0ubG8KKwkuc2F2ZQlhci5sYyxwcmV2bGMKKwltb3YJcHJldmxjPWFyLmxjCisJLnNhdmUJcHIscHJldnByCisJbW92CXByZXZwcj1wcgkJfTs7CisKKwkuYm9keQorCS5yb3RyCWluWzNdLHhpWzNdLEhpWzJdCisKK3sgLm1pYjsJbGQxCXhpWzJdPVtYaV0sLTEJCQkvLyBYaVsxNV0KKwltb3YJbWFzazB4ZjA9MHhmMAorCWJycC5sb29wLmltcAkuTG9vcDEsLkxlbmQxLTE2fTs7Cit7IC5tbWk7CWxkMQl4aVsxXT1bWGldLC0xCQkJLy8gWGlbMTRdCisJCQkJCX07OworeyAubWlpOwlzaGxhZGQJSGlbMV09eGlbMl0sNCxyMAorCW1vdglwci5yb3Q9MHg3PDwxNgorCW1vdglhci5sYz0xMwkJfTs7Cit7IC5taWk7CWFuZAlIaVsxXT1tYXNrMHhmMCxIaVsxXQorCW1vdglhci5lYz0zCisJeG9yCVpsbz1abG8sWmxvCQl9OzsKK3sgLm1paTsJYWRkCUhpWzFdPUh0YmwsSGlbMV0JCS8vICZIdGJsW25sb10ubG8KKwlhZGQJcmVtXzRiaXRwPXJlbV80Yml0Iy1nY21fZ211bHRfNGJpdCMscmVtXzRiaXRwCisJeG9yCVpoaT1aaGksWmhpCQl9OzsKK19fXworCSZsb29wCSgiLkxvb3AxIiwxKTsKKyRjb2RlLj08PF9fXzsKKy5MZW5kMToKK3sgLm1pYjsJeG9yCVpoaT1aaGksSGhpCQl9OzsJLy8gbW9kdWxvLXNjaGVkdWxpbmcgYXJ0ZWZhY3QKK3sgLm1pYjsJbXV4MQlabG89WmxvLFxAcmV2CQl9OzsKK3sgLm1pYjsJbXV4MQlaaGk9WmhpLFxAcmV2CQl9OzsKK3sgLm1taTsJYWRkCUhsbz05LFhpOzsJCQkvLyA7OyBpcyBoZXJlIHRvIHByZXZlbnQKKwlhZGQJSGhpPTEsWGkJCX07OwkvLyBwaXBlbGluZSBmbHVzaCBvbiBJdGFuaXVtCit7IC5taWI7CXN0OAlbSGxvXT1abG8KKwltb3YJcHI9cHJldnByLDB4MWZmZmYJfTs7Cit7IC5taWI7CXN0OAlbSGhpXT1aaGkKKwltb3YJYXIubGM9cHJldmxjCisJYnIucmV0LnNwdGsubWFueQliMAl9OzsKKy5lbmRwCWdjbV9nbXVsdF80Yml0IworX19fCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIjUyOEIiICh3ZWxsLCAiNTEyQiIgYWN0dWFseSkgc3RyZWFtZWQgR0hBU0gKKyMKKyRYaXA9ImluMCI7CiskSHRibD0iaW4xIjsKKyRpbnA9ImluMiI7CiskbGVuPSJpbjMiOworJHJlbV84Yml0PSJsb2MwIjsKKyRtYXNrMHhmZj0ibG9jMSI7CisoJHN1bSwkcnVtKSA9ICRiaWdfZW5kaWFuID8gKCJub3AubSIsIm5vcC5tIikgOiAoInN1bSIsInJ1bSIpOworCitzdWIgbG9hZF9odGFibGUoKSB7CisgICAgZm9yIChteSAkaT0wOyRpPDg7JGkrKykgeworCSRjb2RlLj08PF9fXzsKK3sgLm1taTsJbGQ4CXJgMTYrMiokaSsxYD1bcjhdLDE2CQkvLyBIdGFibGVbJGldLmhpCisJbGQ4CXJgMTYrMiokaWA9W3I5XSwxNgl9CS8vIEh0YWJsZVskaV0ubG8KK3sgLm1taTsJbGRmOAlmYDMyKzIqJGkrMWA9W3IxMF0sMTYJCS8vIEh0YWJsZVtgOCskaWBdLmhpCisJbGRmOAlmYDMyKzIqJGlgPVtyMTFdLDE2CQkvLyBIdGFibGVbYDgrJGlgXS5sbworX19fCisJJGNvZGUuPXNoaWZ0CWlmICgoJGkrJCNfKT09Nyk7CisJJGNvZGUuPSJcdH07O1xuIgorICAgIH0KK30KKworJGNvZGUuPTw8X19fOworcHJldnNwPXIzOworCisuYWxpZ24JMzIKKy5za2lwCTE2CQkJCQkvLyBhbGlnbnMgbG9vcCBib2R5CisuZ2xvYmFsCWdjbV9naGFzaF80Yml0IworLnByb2MJZ2NtX2doYXNoXzRiaXQjCitnY21fZ2hhc2hfNGJpdDoKKwkucHJvbG9ndWUKK3sgLm1taTsJLnNhdmUJYXIucGZzLHByZXZmcworCWFsbG9jCXByZXZmcz1hci5wZnMsNCwyLDAsMAorCS52ZnJhbWUJcHJldnNwCisJbW92CXByZXZzcD1zcAorCW1vdgkkcmVtXzhiaXQ9aXAJCX07OworCS5ib2R5Cit7IC5tZmk7CSRBRERQCXI4PTArMCwkSHRibAorCSRBRERQCXI5PTArOCwkSHRibAkJfQoreyAubWZpOwkkQUREUAlyMTA9MTI4KzAsJEh0YmwKKwkkQUREUAlyMTE9MTI4KzgsJEh0YmwJCX07OworX19fCisJJmxvYWRfaHRhYmxlKAorCSIJJEFERFAJJFhpcD0xNSwkWGlwIiwJCSMgJlhpWzE1XQorCSIJJEFERFAJJGxlbj0kbGVuLCRpbnAiLAkjICZpbnBbbGVuXQorCSIJJEFERFAJJGlucD0xNSwkaW5wIiwJCSMgJmlucFsxNV0KKwkiCW1vdgkkbWFzazB4ZmY9MHhmZiIsCisJIglhZGQJc3A9LTUxMixzcCIsCisJIglhbmRjbQlzcD1zcCwkbWFzazB4ZmYiLAkjIGFsaWduIHN0YWNrIGZyYW1lCisJIglhZGQJcjE0PTAsc3AiLAorCSIJYWRkCXIxNT04LHNwIik7CiskY29kZS49PDxfX187Cit7IC5tbWk7CSRzdW0JMTw8MQkJCQkvLyBnbyBiaWctZW5kaWFuCisJYWRkCXI4PTI1NiswLHNwCisJYWRkCXI5PTI1Nis4LHNwCQl9Cit7IC5tbWk7CWFkZAlyMTA9MjU2KzEyOCswLHNwCisJYWRkCXIxMT0yNTYrMTI4Kzgsc3AKKwlhZGQJJGxlbj0tMTcsJGxlbgkJfTs7CitfX18KK2ZvcigkaT0wOyRpPDg7JGkrKykgewkjIGdlbmVyYXRlIGZpcnN0IGhhbGYgb2YgSHNocjRbXQorbXkgKCRybG8sJHJoaSk9KCJyIi5ldmFsKDE2KzIqJGkpLCJyIi5ldmFsKDE2KzIqJGkrMSkpOworJGNvZGUuPTw8X19fOworeyAubW1pOwlzdDgJW3I4XT0kcmxvLDE2CQkJLy8gSHRhYmxlWyRpXS5sbworCXN0OAlbcjldPSRyaGksMTYJCQkvLyBIdGFibGVbJGldLmhpCisJc2hycAkkcmxvPSRyaGksJHJsbyw0CX0vLzs7Cit7IC5tbWk7CXN0ZjgJW3IxMF09ZmAzMisyKiRpYCwxNgkJLy8gSHRhYmxlW2A4KyRpYF0ubG8KKwlzdGY4CVtyMTFdPWZgMzIrMiokaSsxYCwxNgkJLy8gSHRhYmxlW2A4KyRpYF0uaGkKKwlzaHIudQkkcmhpPSRyaGksNAkJfTs7Cit7IC5tbWk7CXN0OAlbcjE0XT0kcmxvLDE2CQkJLy8gSHRhYmxlWyRpXS5sbz4+NAorCXN0OAlbcjE1XT0kcmhpLDE2CQl9Ly87OwkvLyBIdGFibGVbJGldLmhpPj40CitfX18KK30KKyRjb2RlLj08PF9fXzsKK3sgLm1taTsJbGQ4CXIxNj1bcjhdLDE2CQkJLy8gSHRhYmxlWzhdLmxvCisJbGQ4CXIxNz1bcjldLDE2CQl9OzsJLy8gSHRhYmxlWzhdLmhpCit7IC5tbWk7CWxkOAlyMTg9W3I4XSwxNgkJCS8vIEh0YWJsZVs5XS5sbworCWxkOAlyMTk9W3I5XSwxNgkJfQkvLyBIdGFibGVbOV0uaGkKK3sgLm1taTsJcnVtCTE8PDUJCQkJLy8gY2xlYXIgdW0ubWZoCisJc2hycAlyMTY9cjE3LHIxNiw0CQl9OzsKK19fXworZm9yKCRpPTA7JGk8NjskaSsrKSB7CSMgZ2VuZXJhdGUgc2Vjb25kIGhhbGYgb2YgSHNocjRbXQorJGNvZGUuPTw8X19fOworeyAubW1pOwlsZDgJcmAyMCsyKiRpYD1bcjhdLDE2CQkvLyBIdGFibGVbYDEwKyRpYF0ubG8KKwlsZDgJcmAyMCsyKiRpKzFgPVtyOV0sMTYJCS8vIEh0YWJsZVtgMTArJGlgXS5oaQorCXNoci51CXJgMTYrMiokaSsxYD1yYDE2KzIqJGkrMWAsNAl9OzsKK3sgLm1taTsJc3Q4CVtyMTRdPXJgMTYrMiokaWAsMTYJCS8vIEh0YWJsZVtgOCskaWBdLmxvPj40CisJc3Q4CVtyMTVdPXJgMTYrMiokaSsxYCwxNgkJLy8gSHRhYmxlW2A4KyRpYF0uaGk+PjQKKwlzaHJwCXJgMTgrMiokaWA9cmAxOCsyKiRpKzFgLHJgMTgrMiokaWAsNAl9CitfX18KK30KKyRjb2RlLj08PF9fXzsKK3sgLm1taTsJc2hyLnUJcmAxNisyKiRpKzFgPXJgMTYrMiokaSsxYCw0CX07OworeyAubW1pOwlzdDgJW3IxNF09cmAxNisyKiRpYCwxNgkJLy8gSHRhYmxlW2A4KyRpYF0ubG8+PjQKKwlzdDgJW3IxNV09cmAxNisyKiRpKzFgLDE2CQkvLyBIdGFibGVbYDgrJGlgXS5oaT4+NAorCXNocnAJcmAxOCsyKiRpYD1yYDE4KzIqJGkrMWAscmAxOCsyKiRpYCw0CX0KK3sgLm1taTsJYWRkCSRIdGJsPTI1NixzcAkJCS8vICZIdGFibGVbMF0KKwlhZGQJJHJlbV84Yml0PXJlbV84Yml0Iy1nY21fZ2hhc2hfNGJpdCMsJHJlbV84Yml0CisJc2hyLnUJcmAxOCsyKiRpKzFgPXJgMTgrMiokaSsxYCw0CX07OworeyAubW1pOwlzdDgJW3IxNF09cmAxOCsyKiRpYAkJLy8gSHRhYmxlW2A4KyRpYF0ubG8+PjQKKwlzdDgJW3IxNV09cmAxOCsyKiRpKzFgCX0JLy8gSHRhYmxlW2A4KyRpYF0uaGk+PjQKK19fXworCiskaW49InIxNSI7CitAeGk9KCJyMTYiLCJyMTciKTsKK0ByZW09KCJyMTgiLCJyMTkiKTsKKygkQWxvLCRBaGksJEJsbywkQmhpLCRabG8sJFpoaSk9KCJyMjAiLCJyMjEiLCJyMjIiLCJyMjMiLCJyMjQiLCJyMjUiKTsKKygkQXRibCwkQnRibCk9KCJyMjYiLCJyMjciKTsKKworJGNvZGUuPTw8X19fOwkjIChwMTYpCit7IC5tbWk7CWxkMQkkaW49WyRpbnBdLC0xCQkJLy8ocDE2KSAqaW5wLS0KKwlsZDEJJHhpWzBdPVskWGlwXSwtMQkJLy8ocDE2KSAqWGktLQorCWNtcC5lcQlwMCxwNj1yMCxyMAkJfTs7CS8vCWNsZWFyIHA2CitfX18KK3B1c2ggKEB4aSxzaGlmdChAeGkpKTsgcHVzaCAoQHJlbSxzaGlmdChAcmVtKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCisKKyRjb2RlLj08PF9fXzsJIyAocDE2KSwocDE3KQoreyAubW1pOwlsZDEJJHhpWzBdPVskWGlwXSwtMQkJLy8ocDE2KSAqWGktLQorCXhvcgkkeGlbMV09JHhpWzFdLCRpbgl9OzsJLy8ocDE3KSB4aT0keGlbaV1eaW5wW2ldCit7IC5taWk7CWxkMQkkaW49WyRpbnBdLC0xCQkJLy8ocDE2KSAqaW5wLS0KKwlkZXAJJEF0Ymw9JHhpWzFdLCRIdGJsLDQsNAkJLy8ocDE3KSAmSHRhYmxlW25sb10ubG8KKwlhbmQJJHhpWzFdPS0xNiwkeGlbMV0JfTs7CS8vKHAxNykgbmhpPXhpJjB4ZjAKKy5hbGlnbgkzMgorLkxPT1A6Cit7IC5tbWk7CisocDYpCXN0OAlbJFhpcF09JFpoaSwxMworCXhvcgkkWmxvPSRabG8sJFpsbworCWFkZAkkQnRibD0keGlbMV0sJEh0YmwJfTs7CS8vKHAxNykgJkh0YWJsZVtuaGldLmxvCitfX18KK3B1c2ggKEB4aSxzaGlmdChAeGkpKTsgcHVzaCAoQHJlbSxzaGlmdChAcmVtKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCisKKyRjb2RlLj08PF9fXzsJIyAocDE2KSwocDE3KSwocDE4KQoreyAubW1pOwlsZDgJJEFsbz1bJEF0YmxdLDgJCQkvLyhwMTgpIEh0YWJsZVtubG9dLmxvLCZIdGFibGVbbmxvXS5oaQorCWxkOAkkcmVtWzBdPVskQnRibF0sLTI1NgkJLy8ocDE4KSBIdGFibGVbbmhpXS5sbywmSHNocjRbbmhpXS5sbworCXhvcgkkeGlbMV09JHhpWzFdLCRpbgl9OzsJLy8ocDE3KSB4aT0keGlbaV1eaW5wW2ldCit7IC5tZmk7CWxkOAkkQWhpPVskQXRibF0JCQkvLyhwMTgpIEh0YWJsZVtubG9dLmhpCisJZGVwCSRBdGJsPSR4aVsxXSwkSHRibCw0LDQJfQkvLyhwMTcpICZIdGFibGVbbmxvXS5sbworeyAubWZpOwlzaGxhZGQJJHJlbVswXT0kcmVtWzBdLDQscjAJCS8vKHAxOCkgSHRhYmxlW25oaV0ubG88PDQKKwl4b3IJJFpsbz0kWmxvLCRBbG8JCX07OwkvLyhwMTgpIFoubG9ePUh0YWJsZVtubG9dLmxvCit7IC5tbWk7CWxkOAkkQmxvPVskQnRibF0sOAkJCS8vKHAxOCkgSHNocjRbbmhpXS5sbywmSHNocjRbbmhpXS5oaQorCWxkMQkkaW49WyRpbnBdLC0xCQl9CS8vKHAxNikgKmlucC0tCit7IC5tbWk7CXhvcgkkcmVtWzBdPSRyZW1bMF0sJFpsbwkJLy8ocDE4KSBaLmxvXihIdGFibGVbbmhpXS5sbzw8NCkKKwltb3YJJFpoaT0kQWhpCQkJLy8ocDE4KSBaLmhpXj1IdGFibGVbbmxvXS5oaQorCWFuZAkkeGlbMV09LTE2LCR4aVsxXQl9OzsJLy8ocDE3KSBuaGk9eGkmMHhmMAoreyAubW1pOwlsZDgJJEJoaT1bJEJ0YmxdCQkJLy8ocDE4KSBIc2hyNFtuaGldLmhpCisJbGQxCSR4aVswXT1bJFhpcF0sLTEJCS8vKHAxNikgKlhpLS0KKwlzaHJwCSRabG89JFpoaSwkWmxvLDgJfQkvLyhwMTgpIFoubG89KFouaGk8PDU2KXwoWi5sbz4+OCkKK3sgLm1taTsJYW5kCSRyZW1bMF09JHJlbVswXSwkbWFzazB4ZmYJLy8ocDE4KSByZW09KCRabG9eKEh0YWJsZVtuaGldLmxvPDw0KSkmMHhmZgorCWFkZAkkQnRibD0keGlbMV0sJEh0YmwJfTs7CS8vKHAxNykgJkh0YWJsZVtuaGldCitfX18KK3B1c2ggKEB4aSxzaGlmdChAeGkpKTsgcHVzaCAoQHJlbSxzaGlmdChAcmVtKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCisKK2ZvciAoJGk9MTskaTwxNDskaSsrKSB7CisjIEFib3ZlIGFuZCBiZWxvdyBmcmFnbWVudHMgYXJlIGRlcml2ZWQgZnJvbSB0aGlzIG9uZSBieSByZW1vdmluZworIyB1bnN1aXRhYmxlIChwPz8pIGluc3RydWN0aW9ucy4KKyRjb2RlLj08PF9fXzsJIyAocDE2KSwocDE3KSwocDE4KSwocDE5KQoreyAubW1pOwlsZDgJJEFsbz1bJEF0YmxdLDgJCQkvLyhwMTgpIEh0YWJsZVtubG9dLmxvLCZIdGFibGVbbmxvXS5oaQorCWxkOAkkcmVtWzBdPVskQnRibF0sLTI1NgkJLy8ocDE4KSBIdGFibGVbbmhpXS5sbywmSHNocjRbbmhpXS5sbworCXNoci51CSRaaGk9JFpoaSw4CQl9CS8vKHAxOSkgWi5oaT4+PTgKK3sgLm1taTsJc2hsYWRkCSRyZW1bMV09JHJlbVsxXSwxLCRyZW1fOGJpdAkvLyhwMTkpICZyZW1fOGJpdFtyZW1dCisJeG9yCSRabG89JFpsbywkQmxvCQkJLy8ocDE5KSBaLmxvXj1Ic2hyNFtuaGldLmxvCisJeG9yCSR4aVsxXT0keGlbMV0sJGluCX07OwkvLyhwMTcpIHhpPSR4aVtpXV5pbnBbaV0KK3sgLm1taTsJbGQ4CSRBaGk9WyRBdGJsXQkJCS8vKHAxOCkgSHRhYmxlW25sb10uaGkKKwlsZDIJJHJlbVsxXT1bJHJlbVsxXV0JCS8vKHAxOSkgcmVtXzhiaXRbcmVtXQorCWRlcAkkQXRibD0keGlbMV0sJEh0YmwsNCw0CX0JLy8ocDE3KSAmSHRhYmxlW25sb10ubG8KK3sgLm1taTsJc2hsYWRkCSRyZW1bMF09JHJlbVswXSw0LHIwCQkvLyhwMTgpIEh0YWJsZVtuaGldLmxvPDw0CisJeG9yCSRabG89JFpsbywkQWxvCQkJLy8ocDE4KSBaLmxvXj1IdGFibGVbbmxvXS5sbworCXhvcgkkWmhpPSRaaGksJEJoaQkJfTs7CS8vKHAxOSkgWi5oaV49SHNocjRbbmhpXS5oaQoreyAubW1pOwlsZDgJJEJsbz1bJEJ0YmxdLDgJCQkvLyhwMTgpIEhzaHI0W25oaV0ubG8sJkhzaHI0W25oaV0uaGkKKwlsZDEJJGluPVskaW5wXSwtMQkJCS8vKHAxNikgKmlucC0tCisJc2hsCSRyZW1bMV09JHJlbVsxXSw0OAl9CS8vKHAxOSkgcmVtXzhiaXRbcmVtXTw8NDgKK3sgLm1taTsJeG9yCSRyZW1bMF09JHJlbVswXSwkWmxvCQkvLyhwMTgpIFoubG9eKEh0YWJsZVtuaGldLmxvPDw0KQorCXhvcgkkWmhpPSRaaGksJEFoaQkJCS8vKHAxOCkgWi5oaV49SHRhYmxlW25sb10uaGkKKwlhbmQJJHhpWzFdPS0xNiwkeGlbMV0JfTs7CS8vKHAxNykgbmhpPXhpJjB4ZjAKK3sgLm1taTsJbGQ4CSRCaGk9WyRCdGJsXQkJCS8vKHAxOCkgSHNocjRbbmhpXS5oaQorCWxkMQkkeGlbMF09WyRYaXBdLC0xCQkvLyhwMTYpICpYaS0tCisJc2hycAkkWmxvPSRaaGksJFpsbyw4CX0JLy8ocDE4KSBaLmxvPShaLmhpPDw1Nil8KFoubG8+PjgpCit7IC5tbWk7CWFuZAkkcmVtWzBdPSRyZW1bMF0sJG1hc2sweGZmCS8vKHAxOCkgcmVtPSgkWmxvXihIdGFibGVbbmhpXS5sbzw8NCkpJjB4ZmYKKwl4b3IJJFpoaT0kWmhpLCRyZW1bMV0JCS8vKHAxOSkgWi5oaV49cmVtXzhiaXRbcmVtXTw8NDgKKwlhZGQJJEJ0Ymw9JHhpWzFdLCRIdGJsCX07OwkvLyhwMTcpICZIdGFibGVbbmhpXQorX19fCitwdXNoIChAeGksc2hpZnQoQHhpKSk7IHB1c2ggKEByZW0sc2hpZnQoQHJlbSkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycworfQorCiskY29kZS49PDxfX187CSMgKHAxNyksKHAxOCksKHAxOSkKK3sgLm1taTsJbGQ4CSRBbG89WyRBdGJsXSw4CQkJLy8ocDE4KSBIdGFibGVbbmxvXS5sbywmSHRhYmxlW25sb10uaGkKKwlsZDgJJHJlbVswXT1bJEJ0YmxdLC0yNTYJCS8vKHAxOCkgSHRhYmxlW25oaV0ubG8sJkhzaHI0W25oaV0ubG8KKwlzaHIudQkkWmhpPSRaaGksOAkJfQkvLyhwMTkpIFouaGk+Pj04Cit7IC5tbWk7CXNobGFkZAkkcmVtWzFdPSRyZW1bMV0sMSwkcmVtXzhiaXQJLy8ocDE5KSAmcmVtXzhiaXRbcmVtXQorCXhvcgkkWmxvPSRabG8sJEJsbwkJCS8vKHAxOSkgWi5sb149SHNocjRbbmhpXS5sbworCXhvcgkkeGlbMV09JHhpWzFdLCRpbgl9OzsJLy8ocDE3KSB4aT0keGlbaV1eaW5wW2ldCit7IC5tbWk7CWxkOAkkQWhpPVskQXRibF0JCQkvLyhwMTgpIEh0YWJsZVtubG9dLmhpCisJbGQyCSRyZW1bMV09WyRyZW1bMV1dCQkvLyhwMTkpIHJlbV84Yml0W3JlbV0KKwlkZXAJJEF0Ymw9JHhpWzFdLCRIdGJsLDQsNAl9OzsJLy8ocDE3KSAmSHRhYmxlW25sb10ubG8KK3sgLm1taTsJc2hsYWRkCSRyZW1bMF09JHJlbVswXSw0LHIwCQkvLyhwMTgpIEh0YWJsZVtuaGldLmxvPDw0CisJeG9yCSRabG89JFpsbywkQWxvCQkJLy8ocDE4KSBaLmxvXj1IdGFibGVbbmxvXS5sbworCXhvcgkkWmhpPSRaaGksJEJoaQkJfTs7CS8vKHAxOSkgWi5oaV49SHNocjRbbmhpXS5oaQoreyAubW1pOwlsZDgJJEJsbz1bJEJ0YmxdLDgJCQkvLyhwMTgpIEhzaHI0W25oaV0ubG8sJkhzaHI0W25oaV0uaGkKKwlzaGwJJHJlbVsxXT0kcmVtWzFdLDQ4CX0JLy8ocDE5KSByZW1fOGJpdFtyZW1dPDw0OAoreyAubW1pOwl4b3IJJHJlbVswXT0kcmVtWzBdLCRabG8JCS8vKHAxOCkgWi5sb14oSHRhYmxlW25oaV0ubG88PDQpCisJeG9yCSRaaGk9JFpoaSwkQWhpCQkJLy8ocDE4KSBaLmhpXj1IdGFibGVbbmxvXS5oaQorCWFuZAkkeGlbMV09LTE2LCR4aVsxXQl9OzsJLy8ocDE3KSBuaGk9eGkmMHhmMAoreyAubW1pOwlsZDgJJEJoaT1bJEJ0YmxdCQkJLy8ocDE4KSBIc2hyNFtuaGldLmhpCisJc2hycAkkWmxvPSRaaGksJFpsbyw4CX0JLy8ocDE4KSBaLmxvPShaLmhpPDw1Nil8KFoubG8+PjgpCit7IC5tbWk7CWFuZAkkcmVtWzBdPSRyZW1bMF0sJG1hc2sweGZmCS8vKHAxOCkgcmVtPSgkWmxvXihIdGFibGVbbmhpXS5sbzw8NCkpJjB4ZmYKKwl4b3IJJFpoaT0kWmhpLCRyZW1bMV0JCS8vKHAxOSkgWi5oaV49cmVtXzhiaXRbcmVtXTw8NDgKKwlhZGQJJEJ0Ymw9JHhpWzFdLCRIdGJsCX07OwkvLyhwMTcpICZIdGFibGVbbmhpXQorX19fCitwdXNoIChAeGksc2hpZnQoQHhpKSk7IHB1c2ggKEByZW0sc2hpZnQoQHJlbSkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycworCiskY29kZS49PDxfX187CSMgKHAxOCksKHAxOSkKK3sgLm1maTsJbGQ4CSRBbG89WyRBdGJsXSw4CQkJLy8ocDE4KSBIdGFibGVbbmxvXS5sbywmSHRhYmxlW25sb10uaGkKKwlzaHIudQkkWmhpPSRaaGksOAkJfQkvLyhwMTkpIFouaGk+Pj04Cit7IC5tZmk7CXNobGFkZAkkcmVtWzFdPSRyZW1bMV0sMSwkcmVtXzhiaXQJLy8ocDE5KSAmcmVtXzhiaXRbcmVtXQorCXhvcgkkWmxvPSRabG8sJEJsbwkJfTs7CS8vKHAxOSkgWi5sb149SHNocjRbbmhpXS5sbworeyAubWZpOwlsZDgJJEFoaT1bJEF0YmxdCQkJLy8ocDE4KSBIdGFibGVbbmxvXS5oaQorCXhvcgkkWmxvPSRabG8sJEFsbwkJfQkvLyhwMTgpIFoubG9ePUh0YWJsZVtubG9dLmxvCit7IC5tZmk7CWxkMgkkcmVtWzFdPVskcmVtWzFdXQkJLy8ocDE5KSByZW1fOGJpdFtyZW1dCisJeG9yCSRaaGk9JFpoaSwkQmhpCQl9OzsJLy8ocDE5KSBaLmhpXj1Ic2hyNFtuaGldLmhpCit7IC5tZmk7CWxkOAkkQmxvPVskQnRibF0sOAkJCS8vKHAxOCkgSHRhYmxlW25oaV0ubG8sJkh0YWJsZVtuaGldLmhpCisJc2hsCSRyZW1bMV09JHJlbVsxXSw0OAl9CS8vKHAxOSkgcmVtXzhiaXRbcmVtXTw8NDgKK3sgLm1maTsJc2hsYWRkCSRyZW1bMF09JFpsbyw0LHIwCQkvLyhwMTgpIFoubG88PDQKKwl4b3IJJFpoaT0kWmhpLCRBaGkJCX07OwkvLyhwMTgpIFouaGlePUh0YWJsZVtubG9dLmhpCit7IC5tZmk7CWxkOAkkQmhpPVskQnRibF0JCQkvLyhwMTgpIEh0YWJsZVtuaGldLmhpCisJc2hycAkkWmxvPSRaaGksJFpsbyw0CX0JLy8ocDE4KSBaLmxvPShaLmhpPDw2MCl8KFoubG8+PjQpCit7IC5tZmk7CWFuZAkkcmVtWzBdPSRyZW1bMF0sJG1hc2sweGZmCS8vKHAxOCkgcmVtPSgkWmxvXihIdGFibGVbbmhpXS5sbzw8NCkpJjB4ZmYKKwl4b3IJJFpoaT0kWmhpLCRyZW1bMV0JfTs7CS8vKHAxOSkgWi5oaV49cmVtXzhiaXRbcmVtXTw8NDgKK19fXworcHVzaCAoQHhpLHNoaWZ0KEB4aSkpOyBwdXNoIChAcmVtLHNoaWZ0KEByZW0pKTsJIyAicm90YXRlIiByZWdpc3RlcnMKKworJGNvZGUuPTw8X19fOwkjIChwMTkpCit7IC5tbWk7CWNtcC5sdHUJcDYscDA9JGlucCwkbGVuCisJYWRkCSRpbnA9MzIsJGlucAorCXNoci51CSRaaGk9JFpoaSw0CQl9CS8vKHAxOSkgWi5oaT4+PTQKK3sgLm1taTsJc2hsYWRkCSRyZW1bMV09JHJlbVsxXSwxLCRyZW1fOGJpdAkvLyhwMTkpICZyZW1fOGJpdFtyZW1dCisJeG9yCSRabG89JFpsbywkQmxvCQkJLy8ocDE5KSBaLmxvXj1Ic2hyNFtuaGldLmxvCisJYWRkCSRYaXA9OSwkWGlwCQl9OzsJLy8JJlhpLmxvCit7IC5tbWk7CWxkMgkkcmVtWzFdPVskcmVtWzFdXQkJLy8ocDE5KSByZW1fOGJpdFtyZW1dCisocDYpCWxkMQkkaW49WyRpbnBdLC0xCQkJLy9bcDE2XSAqaW5wLS0KKyhwNikJZXh0ci51CSR4aVsxXT0kWmxvLDgsOAkJfQkvL1twMTddIFhpWzE0XQoreyAubW1pOwl4b3IJJFpoaT0kWmhpLCRCaGkJCQkvLyhwMTkpIFouaGlePUhzaHI0W25oaV0uaGkKKyhwNikJYW5kCSR4aVswXT0kWmxvLCRtYXNrMHhmZgl9OzsJLy9bcDE2XSBYaVsxNV0KK3sgLm1taTsJc3Q4CVskWGlwXT0kWmxvLC04CisocDYpCXhvcgkkeGlbMF09JHhpWzBdLCRpbgkJLy9bcDE3XSB4aT0keGlbaV1eaW5wW2ldCisJc2hsCSRyZW1bMV09JHJlbVsxXSw0OAl9OzsJLy8ocDE5KSByZW1fOGJpdFtyZW1dPDw0OAoreyAubW1pOworKHA2KQlsZDEJJGluPVskaW5wXSwtMQkJCS8vW3AxNl0gKmlucC0tCisJeG9yCSRaaGk9JFpoaSwkcmVtWzFdCQkvLyhwMTkpIFouaGlePXJlbV84Yml0W3JlbV08PDQ4CisocDYpCWRlcAkkQXRibD0keGlbMF0sJEh0YmwsNCw0CX0JLy9bcDE3XSAmSHRhYmxlW25sb10ubG8KK3sgLm1pYjsKKyhwNikJYW5kCSR4aVswXT0tMTYsJHhpWzBdCQkvL1twMTddIG5oaT14aSYweGYwCisocDYpCWJyLmNvbmQuZHB0ay5tYW55CS5MT09QCX07OworCit7IC5taWI7CXN0OAlbJFhpcF09JFpoaQkJfTs7Cit7IC5taWI7CSRydW0JMTw8MQkJCQkvLyByZXR1cm4gdG8gbGl0dGxlLWVuZGlhbgorCS5yZXN0b3JlCXNwCisJbW92CXNwPXByZXZzcAorCWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7CisuZW5kcAlnY21fZ2hhc2hfNGJpdCMKK19fXworJGNvZGUuPTw8X19fOworLmFsaWduCTEyOAorLnR5cGUJcmVtXzRiaXQjLFxAb2JqZWN0CityZW1fNGJpdDoKKyAgICAgICAgZGF0YTgJMHgwMDAwPDw0OCwgMHgxQzIwPDw0OCwgMHgzODQwPDw0OCwgMHgyNDYwPDw0OAorICAgICAgICBkYXRhOAkweDcwODA8PDQ4LCAweDZDQTA8PDQ4LCAweDQ4QzA8PDQ4LCAweDU0RTA8PDQ4CisgICAgICAgIGRhdGE4CTB4RTEwMDw8NDgsIDB4RkQyMDw8NDgsIDB4RDk0MDw8NDgsIDB4QzU2MDw8NDgKKyAgICAgICAgZGF0YTgJMHg5MTgwPDw0OCwgMHg4REEwPDw0OCwgMHhBOUMwPDw0OCwgMHhCNUUwPDw0OAorLnNpemUJcmVtXzRiaXQjLDEyOAorLnR5cGUJcmVtXzhiaXQjLFxAb2JqZWN0CityZW1fOGJpdDoKKwlkYXRhMQkweDAwLDB4MDAsIDB4MDEsMHhDMiwgMHgwMywweDg0LCAweDAyLDB4NDYsIDB4MDcsMHgwOCwgMHgwNiwweENBLCAweDA0LDB4OEMsIDB4MDUsMHg0RQorCWRhdGExCTB4MEUsMHgxMCwgMHgwRiwweEQyLCAweDBELDB4OTQsIDB4MEMsMHg1NiwgMHgwOSwweDE4LCAweDA4LDB4REEsIDB4MEEsMHg5QywgMHgwQiwweDVFCisJZGF0YTEJMHgxQywweDIwLCAweDFELDB4RTIsIDB4MUYsMHhBNCwgMHgxRSwweDY2LCAweDFCLDB4MjgsIDB4MUEsMHhFQSwgMHgxOCwweEFDLCAweDE5LDB4NkUKKwlkYXRhMQkweDEyLDB4MzAsIDB4MTMsMHhGMiwgMHgxMSwweEI0LCAweDEwLDB4NzYsIDB4MTUsMHgzOCwgMHgxNCwweEZBLCAweDE2LDB4QkMsIDB4MTcsMHg3RQorCWRhdGExCTB4MzgsMHg0MCwgMHgzOSwweDgyLCAweDNCLDB4QzQsIDB4M0EsMHgwNiwgMHgzRiwweDQ4LCAweDNFLDB4OEEsIDB4M0MsMHhDQywgMHgzRCwweDBFCisJZGF0YTEJMHgzNiwweDUwLCAweDM3LDB4OTIsIDB4MzUsMHhENCwgMHgzNCwweDE2LCAweDMxLDB4NTgsIDB4MzAsMHg5QSwgMHgzMiwweERDLCAweDMzLDB4MUUKKwlkYXRhMQkweDI0LDB4NjAsIDB4MjUsMHhBMiwgMHgyNywweEU0LCAweDI2LDB4MjYsIDB4MjMsMHg2OCwgMHgyMiwweEFBLCAweDIwLDB4RUMsIDB4MjEsMHgyRQorCWRhdGExCTB4MkEsMHg3MCwgMHgyQiwweEIyLCAweDI5LDB4RjQsIDB4MjgsMHgzNiwgMHgyRCwweDc4LCAweDJDLDB4QkEsIDB4MkUsMHhGQywgMHgyRiwweDNFCisJZGF0YTEJMHg3MCwweDgwLCAweDcxLDB4NDIsIDB4NzMsMHgwNCwgMHg3MiwweEM2LCAweDc3LDB4ODgsIDB4NzYsMHg0QSwgMHg3NCwweDBDLCAweDc1LDB4Q0UKKwlkYXRhMQkweDdFLDB4OTAsIDB4N0YsMHg1MiwgMHg3RCwweDE0LCAweDdDLDB4RDYsIDB4NzksMHg5OCwgMHg3OCwweDVBLCAweDdBLDB4MUMsIDB4N0IsMHhERQorCWRhdGExCTB4NkMsMHhBMCwgMHg2RCwweDYyLCAweDZGLDB4MjQsIDB4NkUsMHhFNiwgMHg2QiwweEE4LCAweDZBLDB4NkEsIDB4NjgsMHgyQywgMHg2OSwweEVFCisJZGF0YTEJMHg2MiwweEIwLCAweDYzLDB4NzIsIDB4NjEsMHgzNCwgMHg2MCwweEY2LCAweDY1LDB4QjgsIDB4NjQsMHg3QSwgMHg2NiwweDNDLCAweDY3LDB4RkUKKwlkYXRhMQkweDQ4LDB4QzAsIDB4NDksMHgwMiwgMHg0QiwweDQ0LCAweDRBLDB4ODYsIDB4NEYsMHhDOCwgMHg0RSwweDBBLCAweDRDLDB4NEMsIDB4NEQsMHg4RQorCWRhdGExCTB4NDYsMHhEMCwgMHg0NywweDEyLCAweDQ1LDB4NTQsIDB4NDQsMHg5NiwgMHg0MSwweEQ4LCAweDQwLDB4MUEsIDB4NDIsMHg1QywgMHg0MywweDlFCisJZGF0YTEJMHg1NCwweEUwLCAweDU1LDB4MjIsIDB4NTcsMHg2NCwgMHg1NiwweEE2LCAweDUzLDB4RTgsIDB4NTIsMHgyQSwgMHg1MCwweDZDLCAweDUxLDB4QUUKKwlkYXRhMQkweDVBLDB4RjAsIDB4NUIsMHgzMiwgMHg1OSwweDc0LCAweDU4LDB4QjYsIDB4NUQsMHhGOCwgMHg1QywweDNBLCAweDVFLDB4N0MsIDB4NUYsMHhCRQorCWRhdGExCTB4RTEsMHgwMCwgMHhFMCwweEMyLCAweEUyLDB4ODQsIDB4RTMsMHg0NiwgMHhFNiwweDA4LCAweEU3LDB4Q0EsIDB4RTUsMHg4QywgMHhFNCwweDRFCisJZGF0YTEJMHhFRiwweDEwLCAweEVFLDB4RDIsIDB4RUMsMHg5NCwgMHhFRCwweDU2LCAweEU4LDB4MTgsIDB4RTksMHhEQSwgMHhFQiwweDlDLCAweEVBLDB4NUUKKwlkYXRhMQkweEZELDB4MjAsIDB4RkMsMHhFMiwgMHhGRSwweEE0LCAweEZGLDB4NjYsIDB4RkEsMHgyOCwgMHhGQiwweEVBLCAweEY5LDB4QUMsIDB4RjgsMHg2RQorCWRhdGExCTB4RjMsMHgzMCwgMHhGMiwweEYyLCAweEYwLDB4QjQsIDB4RjEsMHg3NiwgMHhGNCwweDM4LCAweEY1LDB4RkEsIDB4RjcsMHhCQywgMHhGNiwweDdFCisJZGF0YTEJMHhEOSwweDQwLCAweEQ4LDB4ODIsIDB4REEsMHhDNCwgMHhEQiwweDA2LCAweERFLDB4NDgsIDB4REYsMHg4QSwgMHhERCwweENDLCAweERDLDB4MEUKKwlkYXRhMQkweEQ3LDB4NTAsIDB4RDYsMHg5MiwgMHhENCwweEQ0LCAweEQ1LDB4MTYsIDB4RDAsMHg1OCwgMHhEMSwweDlBLCAweEQzLDB4REMsIDB4RDIsMHgxRQorCWRhdGExCTB4QzUsMHg2MCwgMHhDNCwweEEyLCAweEM2LDB4RTQsIDB4QzcsMHgyNiwgMHhDMiwweDY4LCAweEMzLDB4QUEsIDB4QzEsMHhFQywgMHhDMCwweDJFCisJZGF0YTEJMHhDQiwweDcwLCAweENBLDB4QjIsIDB4QzgsMHhGNCwgMHhDOSwweDM2LCAweENDLDB4NzgsIDB4Q0QsMHhCQSwgMHhDRiwweEZDLCAweENFLDB4M0UKKwlkYXRhMQkweDkxLDB4ODAsIDB4OTAsMHg0MiwgMHg5MiwweDA0LCAweDkzLDB4QzYsIDB4OTYsMHg4OCwgMHg5NywweDRBLCAweDk1LDB4MEMsIDB4OTQsMHhDRQorCWRhdGExCTB4OUYsMHg5MCwgMHg5RSwweDUyLCAweDlDLDB4MTQsIDB4OUQsMHhENiwgMHg5OCwweDk4LCAweDk5LDB4NUEsIDB4OUIsMHgxQywgMHg5QSwweERFCisJZGF0YTEJMHg4RCwweEEwLCAweDhDLDB4NjIsIDB4OEUsMHgyNCwgMHg4RiwweEU2LCAweDhBLDB4QTgsIDB4OEIsMHg2QSwgMHg4OSwweDJDLCAweDg4LDB4RUUKKwlkYXRhMQkweDgzLDB4QjAsIDB4ODIsMHg3MiwgMHg4MCwweDM0LCAweDgxLDB4RjYsIDB4ODQsMHhCOCwgMHg4NSwweDdBLCAweDg3LDB4M0MsIDB4ODYsMHhGRQorCWRhdGExCTB4QTksMHhDMCwgMHhBOCwweDAyLCAweEFBLDB4NDQsIDB4QUIsMHg4NiwgMHhBRSwweEM4LCAweEFGLDB4MEEsIDB4QUQsMHg0QywgMHhBQywweDhFCisJZGF0YTEJMHhBNywweEQwLCAweEE2LDB4MTIsIDB4QTQsMHg1NCwgMHhBNSwweDk2LCAweEEwLDB4RDgsIDB4QTEsMHgxQSwgMHhBMywweDVDLCAweEEyLDB4OUUKKwlkYXRhMQkweEI1LDB4RTAsIDB4QjQsMHgyMiwgMHhCNiwweDY0LCAweEI3LDB4QTYsIDB4QjIsMHhFOCwgMHhCMywweDJBLCAweEIxLDB4NkMsIDB4QjAsMHhBRQorCWRhdGExCTB4QkIsMHhGMCwgMHhCQSwweDMyLCAweEI4LDB4NzQsIDB4QjksMHhCNiwgMHhCQywweEY4LCAweEJELDB4M0EsIDB4QkYsMHg3QywgMHhCRSwweEJFCisuc2l6ZQlyZW1fOGJpdCMsNTEyCitzdHJpbmd6CSJHSEFTSCBmb3IgSUE2NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCiskY29kZSA9fiBzL211eDEoXHMrKVxTK1xAcmV2L25vcC5pJDEgMHgwL2dtICAgICAgaWYgKCRiaWdfZW5kaWFuKTsKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworCitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtcGFyaXNjLnBsIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC1wYXJpc2MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3NDU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtcGFyaXNjLnBsCkBAIC0wLDAgKzEsNzMwIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBBcHJpbCAyMDEwCisjCisjIFRoZSBtb2R1bGUgaW1wbGVtZW50cyAiNC1iaXQiIEdDTSBHSEFTSCBmdW5jdGlvbiBhbmQgdW5kZXJseWluZworIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CisjIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWysxMjggYnl0ZXMgc2hhcmVkIHRhYmxlXS4gT24gUEEtNzEwMExDCisjIGl0IHByb2Nlc3NlcyBvbmUgYnl0ZSBpbiAxOS42IGN5Y2xlcywgd2hpY2ggaXMgbW9yZSB0aGFuIHR3aWNlIGFzCisjIGZhc3QgYXMgY29kZSBnZW5lcmF0ZWQgYnkgZ2NjIDMuMi4gUEEtUklTQyAyLjAgbG9vcCBpcyBzY2hlZHVsZWQgZm9yCisjIDggY3ljbGVzLCBidXQgbWVhc3VyZWQgcGVyZm9ybWFuY2Ugb24gUEEtODYwMCBzeXN0ZW0gaXMgfjkgY3ljbGVzIHBlcgorIyBwcm9jZXNzZWQgYnl0ZS4gVGhpcyBpcyB+Mi4yeCBmYXN0ZXIgdGhhbiA2NC1iaXQgY29kZSBnZW5lcmF0ZWQgYnkKKyMgdmVuZG9yIGNvbXBpbGVyICh3aGljaCB1c2VkIHRvIGJlIHZlcnkgaGFyZCB0byBiZWF0Oi0pLgorIworIyBTcGVjaWFsIHRoYW5rcyB0byBwb2xhcmhvbWUuY29tIGZvciBwcm92aWRpbmcgSFAtVVggYWNjb3VudC4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgPSBzaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJExFVkVMCQk9IjIuMFciOworCSRTSVpFX1QJCT04OworCSRGUkFNRV9NQVJLRVIJPTgwOworCSRTQVZFRF9SUAk9MTY7CisJJFBVU0gJCT0ic3RkIjsKKwkkUFVTSE1BCQk9InN0ZCxtYSI7CisJJFBPUAkJPSJsZGQiOworCSRQT1BNQgkJPSJsZGQsbWIiOworCSROUkVHUwkJPTY7Cit9IGVsc2UgeworCSRMRVZFTAkJPSIxLjAiOwkjIlxuXHQuQUxMT1dcdDIuMCI7CisJJFNJWkVfVAkJPTQ7CisJJEZSQU1FX01BUktFUgk9NDg7CisJJFNBVkVEX1JQCT0yMDsKKwkkUFVTSAkJPSJzdHciOworCSRQVVNITUEJCT0ic3R3bSI7CisJJFBPUAkJPSJsZHciOworCSRQT1BNQgkJPSJsZHdtIjsKKwkkTlJFR1MJCT0xMTsKK30KKworJEZSQU1FPTEwKiRTSVpFX1QrJEZSQU1FX01BUktFUjsjIE5SRUdTIHNhdmVkIHJlZ3MgKyBmcmFtZSBtYXJrZXIKKwkJCQkjICAgICAgICAgICAgICAgICBbKyBhcmd1bWVudCB0cmFuc2Zlcl0KKworIyMjIyMjIyMjIyMjIyMjIyMgdm9sYXRpbGUgcmVnaXN0ZXJzCiskWGk9IiVyMjYiOwkjIGFyZ3VtZW50IGJsb2NrCiskSHRibD0iJXIyNSI7CiskaW5wPSIlcjI0IjsKKyRsZW49IiVyMjMiOworJEhoaD0kSHRibDsJIyB2YXJpYWJsZXMKKyRIbGw9IiVyMjIiOworJFpoaD0iJXIyMSI7CiskWmxsPSIlcjIwIjsKKyRjbnQ9IiVyMTkiOworJHJlbV80Yml0PSIlcjI4IjsKKyRyZW09IiVyMjkiOworJG1hc2sweGYwPSIlcjMxIjsKKworIyMjIyMjIyMjIyMjIyMjIyMgcHJlc2VydmVkIHJlZ2lzdGVycworJFRoaD0iJXIxIjsKKyRUbGw9IiVyMiI7CiskbmxvPSIlcjMiOworJG5oaT0iJXI0IjsKKyRieXRlPSIlcjUiOworaWYgKCRTSVpFX1Q9PTQpIHsKKwkkWmhsPSIlcjYiOworCSRabGg9IiVyNyI7CisJJEhobD0iJXI4IjsKKwkkSGxoPSIlcjkiOworCSRUaGw9IiVyMTAiOworCSRUbGg9IiVyMTEiOworfQorJHJlbTI9IiVyNiI7CSMgdXNlZCBpbiBQQS1SSVNDIDIuMCBjb2RlCisKKyRjb2RlLj08PF9fXzsKKwkuTEVWRUwJJExFVkVMCisJLlNQQUNFCVwkVEVYVFwkCisJLlNVQlNQQQlcJENPREVcJCxRVUFEPTAsQUxJR049OCxBQ0NFU1M9MHgyQyxDT0RFX09OTFkKKworCS5FWFBPUlQJZ2NtX2dtdWx0XzRiaXQsRU5UUlksQVJHVzA9R1IsQVJHVzE9R1IKKwkuQUxJR04JNjQKK2djbV9nbXVsdF80Yml0CisJLlBST0MKKwkuQ0FMTElORk8JRlJBTUU9YCRGUkFNRS0xMCokU0laRV9UYCxOT19DQUxMUyxTQVZFX1JQLEVOVFJZX0dSPSROUkVHUworCS5FTlRSWQorCSRQVVNICSVyMiwtJFNBVkVEX1JQKCVzcCkJOyBzdGFuZGFyZCBwcm9sb2d1ZQorCSRQVVNITUEJJXIzLCRGUkFNRSglc3ApCisJJFBVU0gJJXI0LGAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNSxgLSRGUkFNRSsyKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjYsYC0kRlJBTUUrMyokU0laRV9UYCglc3ApCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CisJJFBVU0gJJXI3LGAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyOCxgLSRGUkFNRSs1KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjksYC0kRlJBTUUrNiokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMCxgLSRGUkFNRSs3KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjExLGAtJEZSQU1FKzgqJFNJWkVfVGAoJXNwKQorX19fCiskY29kZS49PDxfX187CisJYmxyCSVyMCwkcmVtXzRiaXQKKwlsZGkJMywkcmVtCitMXCRwaWNfZ211bHQKKwlhbmRjbQkkcmVtXzRiaXQsJHJlbSwkcmVtXzRiaXQKKwlhZGRsCSRpbnAsJGxlbiwkbGVuCisJbGRvCUxcJHJlbV80Yml0LUxcJHBpY19nbXVsdCgkcmVtXzRiaXQpLCRyZW1fNGJpdAorCWxkaQkweGYwLCRtYXNrMHhmMAorX19fCiskY29kZS49PDxfX18gaWYgKCRTSVpFX1Q9PTQpOworCWxkaQkzMSwkcmVtCisJbXRjdGwJJHJlbSwlY3IxMQorCWV4dHJkLHUsKj0gJHJlbSwlc2FyLDEsJHJlbQk7IGV4ZWN1dGVzIG9uIFBBLVJJU0MgMS4wCisJYglMXCRwYXJpc2MxX2dtdWx0CisJbm9wCitfX18KKwwKKyRjb2RlLj08PF9fXzsKKwlsZGIJMTUoJFhpKSwkbmxvCisJbGRvCTgoJEh0YmwpLCRIbGwKKworCWFuZAkkbWFzazB4ZjAsJG5sbywkbmhpCisJZGVwZCx6CSRubG8sNTksNCwkbmxvCisKKwlsZGQJJG5sbygkSGxsKSwkWmxsCisJbGRkCSRubG8oJEhoaCksJFpoaAorCisJZGVwZCx6CSRabGwsNjAsNCwkcmVtCisJc2hycGQJJFpoaCwkWmxsLDQsJFpsbAorCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJbGRiCTE0KCRYaSksJG5sbworCisJbGRkCSRuaGkoJEhsbCksJFRsbAorCWxkZAkkbmhpKCRIaGgpLCRUaGgKKwlhbmQJJG1hc2sweGYwLCRubG8sJG5oaQorCWRlcGQsegkkbmxvLDU5LDQsJG5sbworCisJeG9yCSRUbGwsJFpsbCwkWmxsCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJbGRkCSRyZW0oJHJlbV80Yml0KSwkcmVtCisJYglMXCRvb3BfZ211bHRfcGEyCisJbGRpCTEzLCRjbnQKKworCS5BTElHTgk4CitMXCRvb3BfZ211bHRfcGEyCisJeG9yCSRyZW0sJFpoaCwkWmhoCQk7IG1vdmVkIGhlcmUgdG8gd29yayBhcm91bmQgZ2FzIGJ1ZworCWRlcGQsegkkWmxsLDYwLDQsJHJlbQorCisJc2hycGQJJFpoaCwkWmxsLDQsJFpsbAorCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJbGRkCSRubG8oJEhsbCksJFRsbAorCWxkZAkkbmxvKCRIaGgpLCRUaGgKKworCXhvcgkkVGxsLCRabGwsJFpsbAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkZAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCisJeG9yCSRyZW0sJFpoaCwkWmhoCisJZGVwZCx6CSRabGwsNjAsNCwkcmVtCisJbGRieAkkY250KCRYaSksJG5sbworCisJc2hycGQJJFpoaCwkWmxsLDQsJFpsbAorCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJbGRkCSRuaGkoJEhsbCksJFRsbAorCWxkZAkkbmhpKCRIaGgpLCRUaGgKKworCWFuZAkkbWFzazB4ZjAsJG5sbywkbmhpCisJZGVwZCx6CSRubG8sNTksNCwkbmxvCisJbGRkCSRyZW0oJHJlbV80Yml0KSwkcmVtCisKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwlhZGRpYix1diAtMSwkY250LExcJG9vcF9nbXVsdF9wYTIKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKworCXhvcgkkcmVtLCRaaGgsJFpoaAorCWRlcGQsegkkWmxsLDYwLDQsJHJlbQorCisJc2hycGQJJFpoaCwkWmxsLDQsJFpsbAorCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJbGRkCSRubG8oJEhsbCksJFRsbAorCWxkZAkkbmxvKCRIaGgpLCRUaGgKKworCXhvcgkkVGxsLCRabGwsJFpsbAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkZAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCisJeG9yCSRyZW0sJFpoaCwkWmhoCisJZGVwZCx6CSRabGwsNjAsNCwkcmVtCisKKwlzaHJwZAkkWmhoLCRabGwsNCwkWmxsCisJZXh0cmQsdQkkWmhoLDU5LDYwLCRaaGgKKwlsZGQJJG5oaSgkSGxsKSwkVGxsCisJbGRkCSRuaGkoJEhoaCksJFRoaAorCisJeG9yCSRUbGwsJFpsbCwkWmxsCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJbGRkCSRyZW0oJHJlbV80Yml0KSwkcmVtCisKKwl4b3IJJHJlbSwkWmhoLCRaaGgKKwlzdGQJJFpsbCw4KCRYaSkKKwlzdGQJJFpoaCwwKCRYaSkKK19fXworDAorJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwliCUxcJGRvbmVfZ211bHQKKwlub3AKKworTFwkcGFyaXNjMV9nbXVsdAorCWxkYgkxNSgkWGkpLCRubG8KKwlsZG8JMTIoJEh0YmwpLCRIbGwKKwlsZG8JOCgkSHRibCksJEhsaAorCWxkbwk0KCRIdGJsKSwkSGhsCisKKwlhbmQJJG1hc2sweGYwLCRubG8sJG5oaQorCXpkZXAJJG5sbywyNyw0LCRubG8KKworCWxkd3gJJG5sbygkSGxsKSwkWmxsCisJbGR3eAkkbmxvKCRIbGgpLCRabGgKKwlsZHd4CSRubG8oJEhobCksJFpobAorCWxkd3gJJG5sbygkSGhoKSwkWmhoCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCWxkYgkxNCgkWGkpLCRubG8KKwlsZHd4CSRyZW0oJHJlbV80Yml0KSwkcmVtCisJc2hycHcJJFpsaCwkWmxsLDQsJFpsbAorCWxkd3gJJG5oaSgkSGxsKSwkVGxsCisJc2hycHcJJFpobCwkWmxoLDQsJFpsaAorCWxkd3gJJG5oaSgkSGxoKSwkVGxoCisJc2hycHcJJFpoaCwkWmhsLDQsJFpobAorCWxkd3gJJG5oaSgkSGhsKSwkVGhsCisJZXh0cnUJJFpoaCwyNywyOCwkWmhoCisJbGR3eAkkbmhpKCRIaGgpLCRUaGgKKwl4b3IJJHJlbSwkWmhoLCRaaGgKKwlhbmQJJG1hc2sweGYwLCRubG8sJG5oaQorCXpkZXAJJG5sbywyNyw0LCRubG8KKworCXhvcgkkVGxsLCRabGwsJFpsbAorCWxkd3gJJG5sbygkSGxsKSwkVGxsCisJeG9yCSRUbGgsJFpsaCwkWmxoCisJbGR3eAkkbmxvKCRIbGgpLCRUbGgKKwl4b3IJJFRobCwkWmhsLCRaaGwKKwliCUxcJG9vcF9nbXVsdF9wYTEKKwlsZGkJMTMsJGNudAorCisJLkFMSUdOCTgKK0xcJG9vcF9nbXVsdF9wYTEKKwl6ZGVwCSRabGwsMjgsNCwkcmVtCisJbGR3eAkkbmxvKCRIaGwpLCRUaGwKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKwlsZHd4CSRyZW0oJHJlbV80Yml0KSwkcmVtCisJc2hycHcJJFpsaCwkWmxsLDQsJFpsbAorCWxkd3gJJG5sbygkSGhoKSwkVGhoCisJc2hycHcJJFpobCwkWmxoLDQsJFpsaAorCWxkYngJJGNudCgkWGkpLCRubG8KKwl4b3IJJFRsbCwkWmxsLCRabGwKKwlsZHd4CSRuaGkoJEhsbCksJFRsbAorCXNocnB3CSRaaGgsJFpobCw0LCRaaGwKKwl4b3IJJFRsaCwkWmxoLCRabGgKKwlsZHd4CSRuaGkoJEhsaCksJFRsaAorCWV4dHJ1CSRaaGgsMjcsMjgsJFpoaAorCXhvcgkkVGhsLCRaaGwsJFpobAorCWxkd3gJJG5oaSgkSGhsKSwkVGhsCisJeG9yCSRyZW0sJFpoaCwkWmhoCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkd3gJJG5oaSgkSGhoKSwkVGhoCisJc2hycHcJJFpsaCwkWmxsLDQsJFpsbAorCWxkd3gJJHJlbSgkcmVtXzRiaXQpLCRyZW0KKwlzaHJwdwkkWmhsLCRabGgsNCwkWmxoCisJc2hycHcJJFpoaCwkWmhsLDQsJFpobAorCWFuZAkkbWFzazB4ZjAsJG5sbywkbmhpCisJZXh0cnUJJFpoaCwyNywyOCwkWmhoCisJemRlcAkkbmxvLDI3LDQsJG5sbworCXhvcgkkVGxsLCRabGwsJFpsbAorCWxkd3gJJG5sbygkSGxsKSwkVGxsCisJeG9yCSRUbGgsJFpsaCwkWmxoCisJbGR3eAkkbmxvKCRIbGgpLCRUbGgKKwl4b3IJJHJlbSwkWmhoLCRaaGgKKwlhZGRpYix1diAtMSwkY250LExcJG9vcF9nbXVsdF9wYTEKKwl4b3IJJFRobCwkWmhsLCRaaGwKKworCXpkZXAJJFpsbCwyOCw0LCRyZW0KKwlsZHd4CSRubG8oJEhobCksJFRobAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkd3gJJHJlbSgkcmVtXzRiaXQpLCRyZW0KKwlzaHJwdwkkWmxoLCRabGwsNCwkWmxsCisJbGR3eAkkbmxvKCRIaGgpLCRUaGgKKwlzaHJwdwkkWmhsLCRabGgsNCwkWmxoCisJeG9yCSRUbGwsJFpsbCwkWmxsCisJbGR3eAkkbmhpKCRIbGwpLCRUbGwKKwlzaHJwdwkkWmhoLCRaaGwsNCwkWmhsCisJeG9yCSRUbGgsJFpsaCwkWmxoCisJbGR3eAkkbmhpKCRIbGgpLCRUbGgKKwlleHRydQkkWmhoLDI3LDI4LCRaaGgKKwl4b3IJJHJlbSwkWmhoLCRaaGgKKwl4b3IJJFRobCwkWmhsLCRaaGwKKwlsZHd4CSRuaGkoJEhobCksJFRobAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkd3gJJG5oaSgkSGhoKSwkVGhoCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCWxkd3gJJHJlbSgkcmVtXzRiaXQpLCRyZW0KKwlzaHJwdwkkWmxoLCRabGwsNCwkWmxsCisJc2hycHcJJFpobCwkWmxoLDQsJFpsaAorCXNocnB3CSRaaGgsJFpobCw0LCRaaGwKKwlleHRydQkkWmhoLDI3LDI4LCRaaGgKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwl4b3IJJFRsaCwkWmxoLCRabGgKKwl4b3IJJHJlbSwkWmhoLCRaaGgKKwlzdHcJJFpsbCwxMigkWGkpCisJeG9yCSRUaGwsJFpobCwkWmhsCisJc3R3CSRabGgsOCgkWGkpCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJc3R3CSRaaGwsNCgkWGkpCisJc3R3CSRaaGgsMCgkWGkpCitfX18KKyRjb2RlLj08PF9fXzsKK0xcJGRvbmVfZ211bHQKKwkkUE9QCWAtJEZSQU1FLSRTQVZFRF9SUGAoJXNwKSwlcjIJCTsgc3RhbmRhcmQgZXBpbG9ndWUKKwkkUE9QCWAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKSwlcjQKKwkkUE9QCWAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKSwlcjUKKwkkUE9QCWAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKSwlcjYKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwkkUE9QCWAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKSwlcjcKKwkkUE9QCWAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKSwlcjgKKwkkUE9QCWAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKSwlcjkKKwkkUE9QCWAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKSwlcjEwCisJJFBPUAlgLSRGUkFNRSs4KiRTSVpFX1RgKCVzcCksJXIxMQorX19fCiskY29kZS49PDxfX187CisJYnYJKCVyMikKKwkuRVhJVAorCSRQT1BNQgktJEZSQU1FKCVzcCksJXIzCisJLlBST0NFTkQKKworCS5FWFBPUlQJZ2NtX2doYXNoXzRiaXQsRU5UUlksQVJHVzA9R1IsQVJHVzE9R1IsQVJHVzI9R1IsQVJHVzM9R1IKKwkuQUxJR04JNjQKK2djbV9naGFzaF80Yml0CisJLlBST0MKKwkuQ0FMTElORk8JRlJBTUU9YCRGUkFNRS0xMCokU0laRV9UYCxOT19DQUxMUyxTQVZFX1JQLEVOVFJZX0dSPTExCisJLkVOVFJZCisJJFBVU0gJJXIyLC0kU0FWRURfUlAoJXNwKQk7IHN0YW5kYXJkIHByb2xvZ3VlCisJJFBVU0hNQQklcjMsJEZSQU1FKCVzcCkKKwkkUFVTSAklcjQsYC0kRlJBTUUrMSokU0laRV9UYCglc3ApCisJJFBVU0gJJXI1LGAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNixgLSRGUkFNRSszKiRTSVpFX1RgKCVzcCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwkkUFVTSAklcjcsYC0kRlJBTUUrNCokU0laRV9UYCglc3ApCisJJFBVU0gJJXI4LGAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyOSxgLSRGUkFNRSs2KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjEwLGAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTEsYC0kRlJBTUUrOCokU0laRV9UYCglc3ApCitfX18KKyRjb2RlLj08PF9fXzsKKwlibHIJJXIwLCRyZW1fNGJpdAorCWxkaQkzLCRyZW0KK0xcJHBpY19naGFzaAorCWFuZGNtCSRyZW1fNGJpdCwkcmVtLCRyZW1fNGJpdAorCWFkZGwJJGlucCwkbGVuLCRsZW4KKwlsZG8JTFwkcmVtXzRiaXQtTFwkcGljX2doYXNoKCRyZW1fNGJpdCksJHJlbV80Yml0CisJbGRpCTB4ZjAsJG1hc2sweGYwCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNJWkVfVD09NCk7CisJbGRpCTMxLCRyZW0KKwltdGN0bAkkcmVtLCVjcjExCisJZXh0cmQsdSwqPSAkcmVtLCVzYXIsMSwkcmVtCTsgZXhlY3V0ZXMgb24gUEEtUklTQyAxLjAKKwliCUxcJHBhcmlzYzFfZ2hhc2gKKwlub3AKK19fXworDAwKKyRjb2RlLj08PF9fXzsKKwlsZGIJMTUoJFhpKSwkbmxvCisJbGRvCTgoJEh0YmwpLCRIbGwKKworTFwkb3V0ZXJfZ2hhc2hfcGEyCisJbGRiCTE1KCRpbnApLCRuaGkKKwl4b3IJJG5oaSwkbmxvLCRubG8KKwlhbmQJJG1hc2sweGYwLCRubG8sJG5oaQorCWRlcGQsegkkbmxvLDU5LDQsJG5sbworCisJbGRkCSRubG8oJEhsbCksJFpsbAorCWxkZAkkbmxvKCRIaGgpLCRaaGgKKworCWRlcGQsegkkWmxsLDYwLDQsJHJlbQorCXNocnBkCSRaaGgsJFpsbCw0LCRabGwKKwlleHRyZCx1CSRaaGgsNTksNjAsJFpoaAorCWxkYgkxNCgkWGkpLCRubG8KKwlsZGIJMTQoJGlucCksJGJ5dGUKKworCWxkZAkkbmhpKCRIbGwpLCRUbGwKKwlsZGQJJG5oaSgkSGhoKSwkVGhoCisJeG9yCSRieXRlLCRubG8sJG5sbworCWFuZAkkbWFzazB4ZjAsJG5sbywkbmhpCisJZGVwZCx6CSRubG8sNTksNCwkbmxvCisKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKwlsZGQJJHJlbSgkcmVtXzRiaXQpLCRyZW0KKwliCUxcJG9vcF9naGFzaF9wYTIKKwlsZGkJMTMsJGNudAorCisJLkFMSUdOCTgKK0xcJG9vcF9naGFzaF9wYTIKKwl4b3IJJHJlbSwkWmhoLCRaaGgJCTsgbW92ZWQgaGVyZSB0byB3b3JrIGFyb3VuZCBnYXMgYnVnCisJZGVwZCx6CSRabGwsNjAsNCwkcmVtMgorCisJc2hycGQJJFpoaCwkWmxsLDQsJFpsbAorCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJbGRkCSRubG8oJEhsbCksJFRsbAorCWxkZAkkbmxvKCRIaGgpLCRUaGgKKworCXhvcgkkVGxsLCRabGwsJFpsbAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkYngJJGNudCgkWGkpLCRubG8KKwlsZGJ4CSRjbnQoJGlucCksJGJ5dGUKKworCWRlcGQsegkkWmxsLDYwLDQsJHJlbQorCXNocnBkCSRaaGgsJFpsbCw0LCRabGwKKwlsZGQJJHJlbTIoJHJlbV80Yml0KSwkcmVtMgorCisJeG9yCSRyZW0yLCRaaGgsJFpoaAorCXhvcgkkYnl0ZSwkbmxvLCRubG8KKwlsZGQJJG5oaSgkSGxsKSwkVGxsCisJbGRkCSRuaGkoJEhoaCksJFRoaAorCisJYW5kCSRtYXNrMHhmMCwkbmxvLCRuaGkKKwlkZXBkLHoJJG5sbyw1OSw0LCRubG8KKworCWV4dHJkLHUJJFpoaCw1OSw2MCwkWmhoCisJeG9yCSRUbGwsJFpsbCwkWmxsCisKKwlsZGQJJHJlbSgkcmVtXzRiaXQpLCRyZW0KKwlhZGRpYix1diAtMSwkY250LExcJG9vcF9naGFzaF9wYTIKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKworCXhvcgkkcmVtLCRaaGgsJFpoaAorCWRlcGQsegkkWmxsLDYwLDQsJHJlbTIKKworCXNocnBkCSRaaGgsJFpsbCw0LCRabGwKKwlleHRyZCx1CSRaaGgsNTksNjAsJFpoaAorCWxkZAkkbmxvKCRIbGwpLCRUbGwKKwlsZGQJJG5sbygkSGhoKSwkVGhoCisKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKworCWRlcGQsegkkWmxsLDYwLDQsJHJlbQorCXNocnBkCSRaaGgsJFpsbCw0LCRabGwKKwlsZGQJJHJlbTIoJHJlbV80Yml0KSwkcmVtMgorCisJeG9yCSRyZW0yLCRaaGgsJFpoaAorCWxkZAkkbmhpKCRIbGwpLCRUbGwKKwlsZGQJJG5oaSgkSGhoKSwkVGhoCisKKwlleHRyZCx1CSRaaGgsNTksNjAsJFpoaAorCXhvcgkkVGxsLCRabGwsJFpsbAorCXhvcgkkVGhoLCRaaGgsJFpoaAorCWxkZAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCisJeG9yCSRyZW0sJFpoaCwkWmhoCisJc3RkCSRabGwsOCgkWGkpCisJbGRvCTE2KCRpbnApLCRpbnAKKwlzdGQJJFpoaCwwKCRYaSkKKwljbXBiLCo8PiAkaW5wLCRsZW4sTFwkb3V0ZXJfZ2hhc2hfcGEyCisJY29weQkkWmxsLCRubG8KK19fXworDAorJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwliCUxcJGRvbmVfZ2hhc2gKKwlub3AKKworTFwkcGFyaXNjMV9naGFzaAorCWxkYgkxNSgkWGkpLCRubG8KKwlsZG8JMTIoJEh0YmwpLCRIbGwKKwlsZG8JOCgkSHRibCksJEhsaAorCWxkbwk0KCRIdGJsKSwkSGhsCisKK0xcJG91dGVyX2doYXNoX3BhMQorCWxkYgkxNSgkaW5wKSwkYnl0ZQorCXhvcgkkYnl0ZSwkbmxvLCRubG8KKwlhbmQJJG1hc2sweGYwLCRubG8sJG5oaQorCXpkZXAJJG5sbywyNyw0LCRubG8KKworCWxkd3gJJG5sbygkSGxsKSwkWmxsCisJbGR3eAkkbmxvKCRIbGgpLCRabGgKKwlsZHd4CSRubG8oJEhobCksJFpobAorCWxkd3gJJG5sbygkSGhoKSwkWmhoCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCWxkYgkxNCgkWGkpLCRubG8KKwlsZGIJMTQoJGlucCksJGJ5dGUKKwlsZHd4CSRyZW0oJHJlbV80Yml0KSwkcmVtCisJc2hycHcJJFpsaCwkWmxsLDQsJFpsbAorCWxkd3gJJG5oaSgkSGxsKSwkVGxsCisJc2hycHcJJFpobCwkWmxoLDQsJFpsaAorCWxkd3gJJG5oaSgkSGxoKSwkVGxoCisJc2hycHcJJFpoaCwkWmhsLDQsJFpobAorCWxkd3gJJG5oaSgkSGhsKSwkVGhsCisJZXh0cnUJJFpoaCwyNywyOCwkWmhoCisJbGR3eAkkbmhpKCRIaGgpLCRUaGgKKwl4b3IJJGJ5dGUsJG5sbywkbmxvCisJeG9yCSRyZW0sJFpoaCwkWmhoCisJYW5kCSRtYXNrMHhmMCwkbmxvLCRuaGkKKwl6ZGVwCSRubG8sMjcsNCwkbmxvCisKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwlsZHd4CSRubG8oJEhsbCksJFRsbAorCXhvcgkkVGxoLCRabGgsJFpsaAorCWxkd3gJJG5sbygkSGxoKSwkVGxoCisJeG9yCSRUaGwsJFpobCwkWmhsCisJYglMXCRvb3BfZ2hhc2hfcGExCisJbGRpCTEzLCRjbnQKKworCS5BTElHTgk4CitMXCRvb3BfZ2hhc2hfcGExCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCWxkd3gJJG5sbygkSGhsKSwkVGhsCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJbGR3eAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCXNocnB3CSRabGgsJFpsbCw0LCRabGwKKwlsZHd4CSRubG8oJEhoaCksJFRoaAorCXNocnB3CSRaaGwsJFpsaCw0LCRabGgKKwlsZGJ4CSRjbnQoJFhpKSwkbmxvCisJeG9yCSRUbGwsJFpsbCwkWmxsCisJbGR3eAkkbmhpKCRIbGwpLCRUbGwKKwlzaHJwdwkkWmhoLCRaaGwsNCwkWmhsCisJbGRieAkkY250KCRpbnApLCRieXRlCisJeG9yCSRUbGgsJFpsaCwkWmxoCisJbGR3eAkkbmhpKCRIbGgpLCRUbGgKKwlleHRydQkkWmhoLDI3LDI4LCRaaGgKKwl4b3IJJFRobCwkWmhsLCRaaGwKKwlsZHd4CSRuaGkoJEhobCksJFRobAorCXhvcgkkcmVtLCRaaGgsJFpoaAorCXpkZXAJJFpsbCwyOCw0LCRyZW0KKwl4b3IJJFRoaCwkWmhoLCRaaGgKKwlsZHd4CSRuaGkoJEhoaCksJFRoaAorCXNocnB3CSRabGgsJFpsbCw0LCRabGwKKwlsZHd4CSRyZW0oJHJlbV80Yml0KSwkcmVtCisJc2hycHcJJFpobCwkWmxoLDQsJFpsaAorCXhvcgkkYnl0ZSwkbmxvLCRubG8KKwlzaHJwdwkkWmhoLCRaaGwsNCwkWmhsCisJYW5kCSRtYXNrMHhmMCwkbmxvLCRuaGkKKwlleHRydQkkWmhoLDI3LDI4LCRaaGgKKwl6ZGVwCSRubG8sMjcsNCwkbmxvCisJeG9yCSRUbGwsJFpsbCwkWmxsCisJbGR3eAkkbmxvKCRIbGwpLCRUbGwKKwl4b3IJJFRsaCwkWmxoLCRabGgKKwlsZHd4CSRubG8oJEhsaCksJFRsaAorCXhvcgkkcmVtLCRaaGgsJFpoaAorCWFkZGliLHV2IC0xLCRjbnQsTFwkb29wX2doYXNoX3BhMQorCXhvcgkkVGhsLCRaaGwsJFpobAorCisJemRlcAkkWmxsLDI4LDQsJHJlbQorCWxkd3gJJG5sbygkSGhsKSwkVGhsCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJbGR3eAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCXNocnB3CSRabGgsJFpsbCw0LCRabGwKKwlsZHd4CSRubG8oJEhoaCksJFRoaAorCXNocnB3CSRaaGwsJFpsaCw0LCRabGgKKwl4b3IJJFRsbCwkWmxsLCRabGwKKwlsZHd4CSRuaGkoJEhsbCksJFRsbAorCXNocnB3CSRaaGgsJFpobCw0LCRaaGwKKwl4b3IJJFRsaCwkWmxoLCRabGgKKwlsZHd4CSRuaGkoJEhsaCksJFRsaAorCWV4dHJ1CSRaaGgsMjcsMjgsJFpoaAorCXhvcgkkcmVtLCRaaGgsJFpoaAorCXhvcgkkVGhsLCRaaGwsJFpobAorCWxkd3gJJG5oaSgkSGhsKSwkVGhsCisJeG9yCSRUaGgsJFpoaCwkWmhoCisJbGR3eAkkbmhpKCRIaGgpLCRUaGgKKwl6ZGVwCSRabGwsMjgsNCwkcmVtCisJbGR3eAkkcmVtKCRyZW1fNGJpdCksJHJlbQorCXNocnB3CSRabGgsJFpsbCw0LCRabGwKKwlzaHJwdwkkWmhsLCRabGgsNCwkWmxoCisJc2hycHcJJFpoaCwkWmhsLDQsJFpobAorCWV4dHJ1CSRaaGgsMjcsMjgsJFpoaAorCXhvcgkkVGxsLCRabGwsJFpsbAorCXhvcgkkVGxoLCRabGgsJFpsaAorCXhvcgkkcmVtLCRaaGgsJFpoaAorCXN0dwkkWmxsLDEyKCRYaSkKKwl4b3IJJFRobCwkWmhsLCRaaGwKKwlzdHcJJFpsaCw4KCRYaSkKKwl4b3IJJFRoaCwkWmhoLCRaaGgKKwlzdHcJJFpobCw0KCRYaSkKKwlsZG8JMTYoJGlucCksJGlucAorCXN0dwkkWmhoLDAoJFhpKQorCWNvbWIsPD4JJGlucCwkbGVuLExcJG91dGVyX2doYXNoX3BhMQorCWNvcHkJJFpsbCwkbmxvCitfX18KKyRjb2RlLj08PF9fXzsKK0xcJGRvbmVfZ2hhc2gKKwkkUE9QCWAtJEZSQU1FLSRTQVZFRF9SUGAoJXNwKSwlcjIJCTsgc3RhbmRhcmQgZXBpbG9ndWUKKwkkUE9QCWAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKSwlcjQKKwkkUE9QCWAtJEZSQU1FKzIqJFNJWkVfVGAoJXNwKSwlcjUKKwkkUE9QCWAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKSwlcjYKK19fXworJGNvZGUuPTw8X19fIGlmICgkU0laRV9UPT00KTsKKwkkUE9QCWAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKSwlcjcKKwkkUE9QCWAtJEZSQU1FKzUqJFNJWkVfVGAoJXNwKSwlcjgKKwkkUE9QCWAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKSwlcjkKKwkkUE9QCWAtJEZSQU1FKzcqJFNJWkVfVGAoJXNwKSwlcjEwCisJJFBPUAlgLSRGUkFNRSs4KiRTSVpFX1RgKCVzcCksJXIxMQorX19fCiskY29kZS49PDxfX187CisJYnYJKCVyMikKKwkuRVhJVAorCSRQT1BNQgktJEZSQU1FKCVzcCksJXIzCisJLlBST0NFTkQKKworCS5BTElHTgk2NAorTFwkcmVtXzRiaXQKKwkuV09SRAlgMHgwMDAwPDwxNmAsMCxgMHgxQzIwPDwxNmAsMCxgMHgzODQwPDwxNmAsMCxgMHgyNDYwPDwxNmAsMAorCS5XT1JECWAweDcwODA8PDE2YCwwLGAweDZDQTA8PDE2YCwwLGAweDQ4QzA8PDE2YCwwLGAweDU0RTA8PDE2YCwwCisJLldPUkQJYDB4RTEwMDw8MTZgLDAsYDB4RkQyMDw8MTZgLDAsYDB4RDk0MDw8MTZgLDAsYDB4QzU2MDw8MTZgLDAKKwkuV09SRAlgMHg5MTgwPDwxNmAsMCxgMHg4REEwPDwxNmAsMCxgMHhBOUMwPDwxNmAsMCxgMHhCNUUwPDwxNmAsMAorCS5TVFJJTkdaICJHSEFTSCBmb3IgUEEtUklTQywgR1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKwkuQUxJR04JNjQKK19fXworCisjIEV4cGxpY2l0bHkgZW5jb2RlIFBBLVJJU0MgMi4wIGluc3RydWN0aW9ucyB1c2VkIGluIHRoaXMgbW9kdWxlLCBzbworIyB0aGF0IGl0IGNhbiBiZSBjb21waWxlZCB3aXRoIC5MRVZFTCAxLjAuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IEkKKyMgd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLCBpZiBHTlUgYXNzZW1ibGVyIHVuZGVyc3Rvb2QgLkFMTE9XIDIuMAorIyBkaXJlY3RpdmUuLi4KKworbXkgJGxkZCA9IHN1YiB7CisgIG15ICgkbW9kLCRhcmdzKSA9IEBfOworICBteSAkb3JpZyA9ICJsZGQkbW9kXHQkYXJncyI7CisKKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKylcKCVyKFswLTldKylcKSwlcihbMC05XSspLykJCSMgZm9ybWF0IDQKKyAgICB7CW15ICRvcGNvZGU9KDB4MDM8PDI2KXwoJDI8PDIxKXwoJDE8PDE2KXwoMzw8Nil8JDM7CisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNpZiAoJGFyZ3MgPX4gLyhcLT9bMC05XSspXCglcihbMC05XSspXCksJXIoWzAtOV0rKS8pCSMgZm9ybWF0IDUKKyAgICB7CW15ICRvcGNvZGU9KDB4MDM8PDI2KXwoJDI8PDIxKXwoMTw8MTIpfCgzPDw2KXwkMzsKKwkkb3Bjb2RlfD0oKCQxJjB4Rik8PDE3KXwoKCQxJjB4MTApPDwxMik7CQkjIGVuY29kZSBvZmZzZXQKKwkkb3Bjb2RlfD0oMTw8NSkgIGlmICgkbW9kID1+IC9eLG0vKTsKKwkkb3Bjb2RlfD0oMTw8MTMpIGlmICgkbW9kID1+IC9eLG1iLyk7CisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNlIHsgIlx0Ii4kb3JpZzsgfQorfTsKKworbXkgJHN0ZCA9IHN1YiB7CisgIG15ICgkbW9kLCRhcmdzKSA9IEBfOworICBteSAkb3JpZyA9ICJzdGQkbW9kXHQkYXJncyI7CisKKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksKFwtP1swLTldKylcKCVyKFswLTldKylcKS8pICMgZm9ybWF0IDMgc3VmZmljZXMKKyAgICB7CW15ICRvcGNvZGU9KDB4MWM8PDI2KXwoJDM8PDIxKXwoJDE8PDE2KXwoKCQyJjB4MUZGOCk8PDEpfCgoJDI+PjEzKSYxKTsKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2UgeyAiXHQiLiRvcmlnOyB9Cit9OworCitteSAkZXh0cmQgPSBzdWIgeworICBteSAoJG1vZCwkYXJncykgPSBAXzsKKyAgbXkgJG9yaWcgPSAiZXh0cmQkbW9kXHQkYXJncyI7CisKKyAgICAjIEkgb25seSBoYXZlICIsdSIgY29tcGxldGVyLCBpdCdzIGltcGxpY2l0bHkgZW5jb2RlZC4uLgorICAgIGlmICgkYXJncyA9fiAvJXIoWzAtOV0rKSwoWzAtOV0rKSwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTUKKyAgICB7CW15ICRvcGNvZGU9KDB4MzY8PDI2KXwoJDE8PDIxKXwoJDQ8PDE2KTsKKwlteSAkbGVuPTMyLSQzOworCSRvcGNvZGUgfD0gKCgkMiYweDIwKTw8Nil8KCgkMiYweDFmKTw8NSk7CQkjIGVuY29kZSBwb3MKKwkkb3Bjb2RlIHw9ICgoJGxlbiYweDIwKTw8Nyl8KCRsZW4mMHgxZik7CQkjIGVuY29kZSBsZW4KKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2lmICgkYXJncyA9fiAvJXIoWzAtOV0rKSwlc2FyLChbMC05XSspLCVyKFswLTldKykvKQkjIGZvcm1hdCAxMgorICAgIHsJbXkgJG9wY29kZT0oMHgzNDw8MjYpfCgkMTw8MjEpfCgkMzw8MTYpfCgyPDwxMSl8KDE8PDkpOworCW15ICRsZW49MzItJDI7CisJJG9wY29kZSB8PSAoKCRsZW4mMHgyMCk8PDMpfCgkbGVuJjB4MWYpOwkJIyBlbmNvZGUgbGVuCisJJG9wY29kZSB8PSAoMTw8MTMpIGlmICgkbW9kID1+IC8sXCoqPS8pOworCXNwcmludGYgIlx0LldPUkRcdDB4JTA4eFx0OyAlcyIsJG9wY29kZSwkb3JpZzsKKyAgICB9CisgICAgZWxzZSB7ICJcdCIuJG9yaWc7IH0KK307CisKK215ICRzaHJwZCA9IHN1YiB7CisgIG15ICgkbW9kLCRhcmdzKSA9IEBfOworICBteSAkb3JpZyA9ICJzaHJwZCRtb2RcdCRhcmdzIjsKKworICAgIGlmICgkYXJncyA9fiAvJXIoWzAtOV0rKSwlcihbMC05XSspLChbMC05XSspLCVyKFswLTldKykvKQkjIGZvcm1hdCAxNAorICAgIHsJbXkgJG9wY29kZT0oMHgzNDw8MjYpfCgkMjw8MjEpfCgkMTw8MTYpfCgxPDwxMCl8JDQ7CisJbXkgJGNwb3M9NjMtJDM7CisJJG9wY29kZSB8PSAoKCRjcG9zJjB4MjApPDw2KXwoKCRjcG9zJjB4MWYpPDw1KTsJCSMgZW5jb2RlIHNhCisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksJXIoWzAtOV0rKSwlc2FyLCVyKFswLTldKykvKQkjIGZvcm1hdCAxMQorICAgIHsJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwKKwkJKDB4MzQ8PDI2KXwoJDI8PDIxKXwoJDE8PDE2KXwoMTw8OSl8JDMsJG9yaWc7CisgICAgfQorICAgIGVsc2UgeyAiXHQiLiRvcmlnOyB9Cit9OworCitteSAkZGVwZCA9IHN1YiB7CisgIG15ICgkbW9kLCRhcmdzKSA9IEBfOworICBteSAkb3JpZyA9ICJkZXBkJG1vZFx0JGFyZ3MiOworCisgICAgIyBJIG9ubHkgaGF2ZSAiLHoiIGNvbXBsZXRlciwgaXQncyBpbXBpY2l0bHkgZW5jb2RlZC4uLgorICAgIGlmICgkYXJncyA9fiAvJXIoWzAtOV0rKSwoWzAtOV0rKSwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTYKKyAgICB7CW15ICRvcGNvZGU9KDB4M2M8PDI2KXwoJDQ8PDIxKXwoJDE8PDE2KTsKKyAgICAJbXkgJGNwb3M9NjMtJDI7CisJbXkgJGxlbj0zMi0kMzsKKwkkb3Bjb2RlIHw9ICgoJGNwb3MmMHgyMCk8PDYpfCgoJGNwb3MmMHgxZik8PDUpOwkJIyBlbmNvZGUgcG9zCisJJG9wY29kZSB8PSAoKCRsZW4mMHgyMCk8PDcpfCgkbGVuJjB4MWYpOwkJIyBlbmNvZGUgbGVuCisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNlIHsgIlx0Ii4kb3JpZzsgfQorfTsKKworc3ViIGFzc2VtYmxlIHsKKyAgbXkgKCRtbmVtb25pYywkbW9kLCRhcmdzKT1AXzsKKyAgbXkgJG9wY29kZSA9IGV2YWwoIlwkJG1uZW1vbmljIik7CisKKyAgICByZWYoJG9wY29kZSkgZXEgJ0NPREUnID8gJiRvcGNvZGUoJG1vZCwkYXJncykgOiAiXHQkbW5lbW9uaWMkbW9kXHQkYXJncyI7Cit9CisKK2ZvcmVhY2ggKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZTsKKwlpZiAoJFNJWkVfVD09NCkgeworCQlzL15ccysoW2Etel0rKShbXFNdKilccysoW1xTXSopLyZhc3NlbWJsZSgkMSwkMiwkMykvZTsKKwkJcy9jbXBiLFwqL2NvbWIsLzsKKwkJcy8sXCovLC87CisJfQorCXByaW50ICRfLCJcbiI7Cit9CisKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtczM5MHgucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXMzOTB4LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Y2IwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXMzOTB4LnBsCkBAIC0wLDAgKzEsMjYyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgU2VwdGVtYmVyIDIwMTAuCisjCisjIFRoZSBtb2R1bGUgaW1wbGVtZW50cyAiNC1iaXQiIEdDTSBHSEFTSCBmdW5jdGlvbiBhbmQgdW5kZXJseWluZworIyBzaW5nbGUgbXVsdGlwbGljYXRpb24gb3BlcmF0aW9uIGluIEdGKDJeMTI4KS4gIjQtYml0IiBtZWFucyB0aGF0IGl0CisjIHVzZXMgMjU2IGJ5dGVzIHBlci1rZXkgdGFibGUgWysxMjggYnl0ZXMgc2hhcmVkIHRhYmxlXS4gUGVyZm9ybWFuY2UKKyMgd2FzIG1lYXN1cmVkIHRvIGJlIH4xOCBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIG9uIHoxMCwgd2hpY2ggaXMKKyMgYWxtb3N0IDQwJSBiZXR0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0CisjIDE4IGN5Y2xlcyBpcyB3b3JzZSByZXN1bHQgdGhhbiBleHBlY3RlZDogbG9vcCBpcyBzY2hlZHVsZWQgZm9yIDEyCisjIGFuZCB0aGUgcmVzdWx0IHNob3VsZCBiZSBjbG9zZSB0byAxMi4gSW4gdGhlIGxhY2sgb2YgaW5zdHJ1Y3Rpb24tCisjIGxldmVsIHByb2ZpbGluZyBkYXRhIGl0J3MgaW1wb3NzaWJsZSB0byB0ZWxsIHdoeS4uLgorCisjIE5vdmVtYmVyIDIwMTAuCisjCisjIEFkYXB0IGZvciAtbTMxIGJ1aWxkLiBJZiBrZXJuZWwgc3VwcG9ydHMgd2hhdCdzIGNhbGxlZCAiaGlnaGdwcnMiCisjIGZlYXR1cmUgb24gTGludXggW3NlZSAvcHJvYy9jcHVpbmZvXSwgaXQncyBwb3NzaWJsZSB0byB1c2UgNjQtYml0CisjIGluc3RydWN0aW9ucyBhbmQgYWNoaWV2ZSAiNjQtYml0IiBwZXJmb3JtYW5jZSBldmVuIGluIDMxLWJpdCBsZWdhY3kKKyMgYXBwbGljYXRpb24gY29udGV4dC4gVGhlIGZlYXR1cmUgaXMgbm90IHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1bGFyCisjIHByb2Nlc3NvciwgYXMgbG9uZyBhcyBpdCdzICJ6LUNQVSIuIExhdHRlciBpbXBsaWVzIHRoYXQgdGhlIGNvZGUKKyMgcmVtYWlucyB6L0FyY2hpdGVjdHVyZSBzcGVjaWZpYy4gT24gejk5MCBpdCB3YXMgbWVhc3VyZWQgdG8gcGVyZm9ybQorIyAyLjh4IGJldHRlciB0aGFuIDMyLWJpdCBjb2RlIGdlbmVyYXRlZCBieSBnY2MgNC4zLgorCisjIE1hcmNoIDIwMTEuCisjCisjIFN1cHBvcnQgZm9yIGhhcmR3YXJlIEtJTUQtR0hBU0ggaXMgdmVyaWZpZWQgdG8gcHJvZHVjZSBjb3JyZWN0CisjIHJlc3VsdCBhbmQgdGhlcmVmb3JlIGlzIGVuZ2FnZWQuIE9uIHoxOTYgaXQgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3MKKyMgOEtCIGJ1ZmZlciB+NyBmYXN0ZXIgdGhhbiBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbi4gSXQncyBub3QgYXMKKyMgaW1wcmVzc2l2ZSBmb3Igc21hbGxlciBidWZmZXIgc2l6ZXMgYW5kIGZvciBzbWFsbGVzdCAxNi1ieXRlcyBidWZmZXIKKyMgaXQncyBhY3R1YWxseSBhbG1vc3QgMiB0aW1lcyBzbG93ZXIuIFdoaWNoIGlzIHRoZSByZWFzb24gd2h5CisjIEtJTUQtR0hBU0ggaXMgbm90IHVzZWQgaW4gZ2NtX2dtdWx0XzRiaXQuCisKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvM1sxMl0vKSB7CisJJFNJWkVfVD00OworCSRnPSIiOworfSBlbHNlIHsKKwkkU0laRV9UPTg7CisJJGc9ImciOworfQorCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworJHNvZnRvbmx5PTA7CisKKyRaaGk9IiVyMCI7CiskWmxvPSIlcjEiOworCiskWGk9IiVyMiI7CSMgYXJndW1lbnQgYmxvY2sKKyRIdGJsPSIlcjMiOworJGlucD0iJXI0IjsKKyRsZW49IiVyNSI7CisKKyRyZW0wPSIlcjYiOwkjIHZhcmlhYmxlcworJHJlbTE9IiVyNyI7CiskbmxvPSIlcjgiOworJG5oaT0iJXI5IjsKKyR4aT0iJXIxMCI7CiskY250PSIlcjExIjsKKyR0bXA9IiVyMTIiOworJHg3OD0iJXIxMyI7CiskcmVtXzRiaXQ9IiVyMTQiOworCiskc3A9IiVyMTUiOworCiskY29kZS49PDxfX187CisudGV4dAorCisuZ2xvYmwJZ2NtX2dtdWx0XzRiaXQKKy5hbGlnbgkzMgorZ2NtX2dtdWx0XzRiaXQ6CitfX18KKyRjb2RlLj08PF9fXyBpZighJHNvZnRvbmx5ICYmIDApOwkjIGhhcmR3YXJlIGlzIHNsb3cgZm9yIHNpbmdsZSBibG9jay4uLgorCWxhcmwJJXIxLE9QRU5TU0xfczM5MHhjYXBfUAorCWxnCSVyMCwwKCVyMSkKKwl0bWhsCSVyMCwweDQwMDAJIyBjaGVjayBmb3IgbWVzc2FnZS1zZWN1cml0eS1hc3Npc3QKKwlqegkuTHNvZnRfZ211bHQKKwlsZ2hpCSVyMCwwCisJbGEJJXIxLDE2KCRzcCkKKwkubG9uZwkweGI5M2UwMDA0CSMga2ltZCAlcjAsJXI0CisJbGcJJXIxLDI0KCRzcCkKKwl0bWhoCSVyMSwweDQwMDAJIyBjaGVjayBmb3IgZnVuY3Rpb24gNjUKKwlqegkuTHNvZnRfZ211bHQKKwlzdGcJJXIwLDE2KCRzcCkJIyBhcnJhbmdlIDE2IGJ5dGVzIG9mIHplcm8gaW5wdXQKKwlzdGcJJXIwLDI0KCRzcCkKKwlsZ2hpCSVyMCw2NQkJIyBmdW5jdGlvbiA2NQorCWxhCSVyMSwwKCRYaSkJIyBIIGxpZXMgcmlnaHQgYWZ0ZXIgWGkgaW4gZ2NtMTI4X2NvbnRleHQKKwlsYQkkaW5wLDE2KCRzcCkKKwlsZ2hpCSRsZW4sMTYKKwkubG9uZwkweGI5M2UwMDA0CSMga2ltZCAlcjAsJGlucAorCWJyYwkxLC4tNAkJIyBwYXkgYXR0ZW50aW9uIHRvICJwYXJ0aWFsIGNvbXBsZXRpb24iCisJYnIJJXIxNAorLmFsaWduCTMyCisuTHNvZnRfZ211bHQ6CitfX18KKyRjb2RlLj08PF9fXzsKKwlzdG0ke2d9CSVyNiwlcjE0LDYqJFNJWkVfVCgkc3ApCisKKwlhZ2hpCSRYaSwtMQorCWxnaGkJJGxlbiwxCisJbGdoaQkkeDc4LGAweGY8PDNgCisJbGFybAkkcmVtXzRiaXQscmVtXzRiaXQKKworCWxnCSRabG8sOCsxKCRYaSkJCSMgWGkKKwlqCS5MZ211bHRfc2hvcnRjdXQKKy50eXBlCWdjbV9nbXVsdF80Yml0LFxAZnVuY3Rpb24KKy5zaXplCWdjbV9nbXVsdF80Yml0LCguLWdjbV9nbXVsdF80Yml0KQorCisuZ2xvYmwJZ2NtX2doYXNoXzRiaXQKKy5hbGlnbgkzMgorZ2NtX2doYXNoXzRiaXQ6CitfX18KKyRjb2RlLj08PF9fXyBpZighJHNvZnRvbmx5KTsKKwlsYXJsCSVyMSxPUEVOU1NMX3MzOTB4Y2FwX1AKKwlsZwklcjAsMCglcjEpCisJdG1obAklcjAsMHg0MDAwCSMgY2hlY2sgZm9yIG1lc3NhZ2Utc2VjdXJpdHktYXNzaXN0CisJanoJLkxzb2Z0X2doYXNoCisJbGdoaQklcjAsMAorCWxhCSVyMSwxNigkc3ApCisJLmxvbmcJMHhiOTNlMDAwNAkjIGtpbWQgJXIwLCVyNAorCWxnCSVyMSwyNCgkc3ApCisJdG1oaAklcjEsMHg0MDAwCSMgY2hlY2sgZm9yIGZ1bmN0aW9uIDY1CisJanoJLkxzb2Z0X2doYXNoCisJbGdoaQklcjAsNjUJCSMgZnVuY3Rpb24gNjUKKwlsYQklcjEsMCgkWGkpCSMgSCBsaWVzIHJpZ2h0IGFmdGVyIFhpIGluIGdjbTEyOF9jb250ZXh0CisJLmxvbmcJMHhiOTNlMDAwNAkjIGtpbWQgJXIwLCRpbnAKKwlicmMJMSwuLTQJCSMgcGF5IGF0dGVudGlvbiB0byAicGFydGlhbCBjb21wbGV0aW9uIgorCWJyCSVyMTQKKy5hbGlnbgkzMgorLkxzb2Z0X2doYXNoOgorX19fCiskY2RvZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC8zWzEyXS8pOworCWxsZ2ZyCSRsZW4sJGxlbgorX19fCiskY29kZS49PDxfX187CisJc3RtJHtnfQklcjYsJXIxNCw2KiRTSVpFX1QoJHNwKQorCisJYWdoaQkkWGksLTEKKwlzcmxnCSRsZW4sJGxlbiw0CisJbGdoaQkkeDc4LGAweGY8PDNgCisJbGFybAkkcmVtXzRiaXQscmVtXzRiaXQKKworCWxnCSRabG8sOCsxKCRYaSkJCSMgWGkKKwlsZwkkWmhpLDArMSgkWGkpCisJbGdoaQkkdG1wLDAKKy5Mb3V0ZXI6CisJeGcJJFpoaSwwKCRpbnApCQkjIFhpIF49IGlucCAKKwl4ZwkkWmxvLDgoJGlucCkKKwl4Z3IJJFpoaSwkdG1wCisJc3RnCSRabG8sOCsxKCRYaSkKKwlzdGcJJFpoaSwwKzEoJFhpKQorCisuTGdtdWx0X3Nob3J0Y3V0OgorCWxnaGkJJHRtcCwweGYwCisJc2xsZwkkbmxvLCRabG8sNAorCXNybGcJJHhpLCRabG8sOAkJIyBleHRyYWN0IHNlY29uZCBieXRlCisJbmdyCSRubG8sJHRtcAorCWxncgkkbmhpLCRabG8KKwlsZ2hpCSRjbnQsMTQKKwluZ3IJJG5oaSwkdG1wCisKKwlsZwkkWmxvLDgoJG5sbywkSHRibCkKKwlsZwkkWmhpLDAoJG5sbywkSHRibCkKKworCXNsbGcJJG5sbywkeGksNAorCXNsbGcJJHJlbTAsJFpsbywzCisJbmdyCSRubG8sJHRtcAorCW5ncgkkcmVtMCwkeDc4CisJbmdyCSR4aSwkdG1wCisKKwlzbGxnCSR0bXAsJFpoaSw2MAorCXNybGcJJFpsbywkWmxvLDQKKwlzcmxnCSRaaGksJFpoaSw0CisJeGcJJFpsbyw4KCRuaGksJEh0YmwpCisJeGcJJFpoaSwwKCRuaGksJEh0YmwpCisJbGdyCSRuaGksJHhpCisJc2xsZwkkcmVtMSwkWmxvLDMKKwl4Z3IJJFpsbywkdG1wCisJbmdyCSRyZW0xLCR4NzgKKwlqCS5MZ2hhc2hfaW5uZXIKKy5hbGlnbgkxNgorLkxnaGFzaF9pbm5lcjoKKwlzcmxnCSRabG8sJFpsbyw0CisJc2xsZwkkdG1wLCRaaGksNjAKKwl4ZwkkWmxvLDgoJG5sbywkSHRibCkKKwlzcmxnCSRaaGksJFpoaSw0CisJbGxnYwkkeGksMCgkY250LCRYaSkKKwl4ZwkkWmhpLDAoJG5sbywkSHRibCkKKwlzbGxnCSRubG8sJHhpLDQKKwl4ZwkkWmhpLDAoJHJlbTAsJHJlbV80Yml0KQorCW5pbGwJJG5sbywweGYwCisJc2xsZwkkcmVtMCwkWmxvLDMKKwl4Z3IJJFpsbywkdG1wCisJbmdyCSRyZW0wLCR4NzgKKwluaWxsCSR4aSwweGYwCisKKwlzbGxnCSR0bXAsJFpoaSw2MAorCXNybGcJJFpsbywkWmxvLDQKKwlzcmxnCSRaaGksJFpoaSw0CisJeGcJJFpsbyw4KCRuaGksJEh0YmwpCisJeGcJJFpoaSwwKCRuaGksJEh0YmwpCisJbGdyCSRuaGksJHhpCisJeGcJJFpoaSwwKCRyZW0xLCRyZW1fNGJpdCkKKwlzbGxnCSRyZW0xLCRabG8sMworCXhncgkkWmxvLCR0bXAKKwluZ3IJJHJlbTEsJHg3OAorCWJyY3QJJGNudCwuTGdoYXNoX2lubmVyCisKKwlzbGxnCSR0bXAsJFpoaSw2MAorCXNybGcJJFpsbywkWmxvLDQKKwlzcmxnCSRaaGksJFpoaSw0CisJeGcJJFpsbyw4KCRubG8sJEh0YmwpCisJeGcJJFpoaSwwKCRubG8sJEh0YmwpCisJc2xsZwkkeGksJFpsbywzCisJeGcJJFpoaSwwKCRyZW0wLCRyZW1fNGJpdCkKKwl4Z3IJJFpsbywkdG1wCisJbmdyCSR4aSwkeDc4CisKKwlzbGxnCSR0bXAsJFpoaSw2MAorCXNybGcJJFpsbywkWmxvLDQKKwlzcmxnCSRaaGksJFpoaSw0CisJeGcJJFpsbyw4KCRuaGksJEh0YmwpCisJeGcJJFpoaSwwKCRuaGksJEh0YmwpCisJeGdyCSRabG8sJHRtcAorCXhnCSRaaGksMCgkcmVtMSwkcmVtXzRiaXQpCisKKwlsZwkkdG1wLDAoJHhpLCRyZW1fNGJpdCkKKwlsYQkkaW5wLDE2KCRpbnApCisJc2xsZwkkdG1wLCR0bXAsNAkJIyBjb3JyZWN0IGxhc3QgcmVtXzRiaXRbcmVtXQorCWJyY3RnCSRsZW4sLkxvdXRlcgorCisJeGdyCSRaaGksJHRtcAorCXN0ZwkkWmxvLDgrMSgkWGkpCisJc3RnCSRaaGksMCsxKCRYaSkKKwlsbSR7Z30JJXI2LCVyMTQsNiokU0laRV9UKCRzcCkKKwlicgklcjE0CisudHlwZQlnY21fZ2hhc2hfNGJpdCxcQGZ1bmN0aW9uCisuc2l6ZQlnY21fZ2hhc2hfNGJpdCwoLi1nY21fZ2hhc2hfNGJpdCkKKworLmFsaWduCTY0CityZW1fNGJpdDoKKwkubG9uZwlgMHgwMDAwPDwxMmAsMCxgMHgxQzIwPDwxMmAsMCxgMHgzODQwPDwxMmAsMCxgMHgyNDYwPDwxMmAsMAorCS5sb25nCWAweDcwODA8PDEyYCwwLGAweDZDQTA8PDEyYCwwLGAweDQ4QzA8PDEyYCwwLGAweDU0RTA8PDEyYCwwCisJLmxvbmcJYDB4RTEwMDw8MTJgLDAsYDB4RkQyMDw8MTJgLDAsYDB4RDk0MDw8MTJgLDAsYDB4QzU2MDw8MTJgLDAKKwkubG9uZwlgMHg5MTgwPDwxMmAsMCxgMHg4REEwPDwxMmAsMCxgMHhBOUMwPDwxMmAsMCxgMHhCNUUwPDwxMmAsMAorLnR5cGUJcmVtXzRiaXQsXEBvYmplY3QKKy5zaXplCXJlbV80Yml0LCguLXJlbV80Yml0KQorLnN0cmluZwkiR0hBU0ggZm9yIHMzOTB4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorX19fCisKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXNwYXJjdjkucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXNwYXJjdjkucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlN2IwNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9tb2Rlcy9hc20vZ2hhc2gtc3BhcmN2OS5wbApAQCAtMCwwICsxLDMzMCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIE1hcmNoIDIwMTAKKyMKKyMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCisjIHNpbmdsZSBtdWx0aXBsaWNhdGlvbiBvcGVyYXRpb24gaW4gR0YoMl4xMjgpLiAiNC1iaXQiIG1lYW5zIHRoYXQgaXQKKyMgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzEyOCBieXRlcyBzaGFyZWQgdGFibGVdLiBQZXJmb3JtYW5jZQorIyByZXN1bHRzIGFyZSBmb3Igc3RyZWFtZWQgR0hBU0ggc3Vicm91dGluZSBvbiBVbHRyYVNQQVJDIHByZS1UeCBDUFUKKyMgYW5kIGFyZSBleHByZXNzZWQgaW4gY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXI6CisjCisjCQlnY2MgMy4zLngJY2MgNS4yCQl0aGlzIGFzc2VtYmxlcgorIworIyAzMi1iaXQgYnVpbGQJODEuNAkJNDMuMwkJMTIuNgkoKzU0NiUvKzI0NCUpCisjIDY0LWJpdCBidWlsZAkyMC4yCQkyMS4yCQkxMi42CSgrNjAlLys2OCUpCisjCisjIEhlcmUgaXMgZGF0YSBjb2xsZWN0ZWQgb24gVWx0cmFTUEFSQyBUMSBzeXN0ZW0gcnVubmluZyBMaW51eDoKKyMKKyMJCWdjYyA0LjQuMQkJCXRoaXMgYXNzZW1ibGVyCisjCisjIDMyLWJpdCBidWlsZAk1NjYJCQkJNTAJKCsxMDAwJSkKKyMgNjQtYml0IGJ1aWxkCTU2CQkJCTUwCSgrMTIlKQorIworIyBJIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgd2h5IGRpZmZlcmVuY2UgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdAorIyBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBpcyBzbyBiaWcuIENvbXBpbGVycyAqd2VyZSogaW5zdHJ1Y3RlZCB0bworIyBnZW5lcmF0ZSBjb2RlIGZvciBVbHRyYVNQQVJDIGFuZCBzaG91bGQgaGF2ZSB1c2VkIDY0LWJpdCByZWdpc3RlcnMKKyMgZm9yIFogdmVjdG9yIChzZWUgQyBjb2RlKSBldmVuIGluIDMyLWJpdCBidWlsZC4uLiBPaCB3ZWxsLCBpdCBvbmx5CisjIG1lYW5zIG1vcmUgaW1wcmVzc2l2ZSBpbXByb3ZlbWVudCBjb2VmZmljaWVudHMgZm9yIHRoaXMgYXNzZW1ibGVyCisjIG1vZHVsZTstKSBMb29wcyBhcmUgYWdncmVzc2l2ZWx5IG1vZHVsby1zY2hlZHVsZWQgaW4gcmVzcGVjdCB0bworIyByZWZlcmVuY2VzIHRvIGlucHV0IGRhdGEgYW5kIFouaGkgdXBkYXRlcyB0byBhY2hpZXZlIDEyIGN5Y2xlcworIyB0aW1pbmcuIFRvIGFuY2hvciB0byBzb21ldGhpbmcgZWxzZSwgc2hhMS1zcGFyY3Y5LnBsIHNwZW5kcyAxMS42CisjIGN5Y2xlcyB0byBwcm9jZXNzIG9uZSBieXRlIG9uIFVsdHJhU1BBUkMgcHJlLVR4IENQVSBhbmQgfjI0IG9uIFQxLgorCiskYml0cz0zMjsKK2ZvciAoQEFSR1YpICAgICB7ICRiaXRzPTY0IGlmICgvXC1tNjQvIHx8IC9cLXhhcmNoXD12OS8pOyB9CitpZiAoJGJpdHM9PTY0KSAgeyAkYmlhcz0yMDQ3OyAkZnJhbWU9MTkyOyB9CitlbHNlICAgICAgICAgICAgeyAkYmlhcz0wOyAgICAkZnJhbWU9MTEyOyB9CisKKyRvdXRwdXQ9c2hpZnQ7CitvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworCiskWmhpPSIlbzAiOwkjIDY0LWJpdCB2YWx1ZXMKKyRabG89IiVvMSI7CiskVGhpPSIlbzIiOworJFRsbz0iJW8zIjsKKyRyZW09IiVvNCI7CiskdG1wPSIlbzUiOworCiskbmhpPSIlbDAiOwkjIHNtYWxsIHZhbHVlcyBhbmQgcG9pbnRlcnMKKyRubG89IiVsMSI7CiskeGkwPSIlbDIiOworJHhpMT0iJWwzIjsKKyRyZW1fNGJpdD0iJWw0IjsKKyRyZW1pPSIlbDUiOworJEh0YmxvPSIlbDYiOworJGNudD0iJWw3IjsKKworJFhpPSIlaTAiOwkjIGlucHV0IGFyZ3VtZW50IGJsb2NrCiskSHRibD0iJWkxIjsKKyRpbnA9IiVpMiI7CiskbGVuPSIlaTMiOworCiskY29kZS49PDxfX187Cisuc2VjdGlvbgkiLnRleHQiLCNhbGxvYywjZXhlY2luc3RyCisKKy5hbGlnbgk2NAorcmVtXzRiaXQ6CisJLmxvbmcJYDB4MDAwMDw8MTZgLDAsYDB4MUMyMDw8MTZgLDAsYDB4Mzg0MDw8MTZgLDAsYDB4MjQ2MDw8MTZgLDAKKwkubG9uZwlgMHg3MDgwPDwxNmAsMCxgMHg2Q0EwPDwxNmAsMCxgMHg0OEMwPDwxNmAsMCxgMHg1NEUwPDwxNmAsMAorCS5sb25nCWAweEUxMDA8PDE2YCwwLGAweEZEMjA8PDE2YCwwLGAweEQ5NDA8PDE2YCwwLGAweEM1NjA8PDE2YCwwCisJLmxvbmcJYDB4OTE4MDw8MTZgLDAsYDB4OERBMDw8MTZgLDAsYDB4QTlDMDw8MTZgLDAsYDB4QjVFMDw8MTZgLDAKKy50eXBlCXJlbV80Yml0LCNvYmplY3QKKy5zaXplCXJlbV80Yml0LCguLXJlbV80Yml0KQorCisuZ2xvYmwJZ2NtX2doYXNoXzRiaXQKKy5hbGlnbgkzMgorZ2NtX2doYXNoXzRiaXQ6CisJc2F2ZQklc3AsLSRmcmFtZSwlc3AKKwlsZHViCVskaW5wKzE1XSwkbmxvCisJbGR1YglbJFhpKzE1XSwkeGkwCisJbGR1YglbJFhpKzE0XSwkeGkxCisJYWRkCSRsZW4sJGlucCwkbGVuCisJYWRkCSRIdGJsLDgsJEh0YmxvCisKKzE6CWNhbGwJLis4CisJYWRkCSVvNyxyZW1fNGJpdC0xYiwkcmVtXzRiaXQKKworLkxvdXRlcjoKKwl4b3IJJHhpMCwkbmxvLCRubG8KKwlhbmQJJG5sbywweGYwLCRuaGkKKwlhbmQJJG5sbywweDBmLCRubG8KKwlzbGwJJG5sbyw0LCRubG8KKwlsZHgJWyRIdGJsbyskbmxvXSwkWmxvCisJbGR4CVskSHRibCskbmxvXSwkWmhpCisKKwlsZHViCVskaW5wKzE0XSwkbmxvCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJYW5kCSRabG8sMHhmLCRyZW1pCisJbGR4CVskSHRibCskbmhpXSwkVGhpCisJc2xsCSRyZW1pLDMsJHJlbWkKKwlsZHgJWyRyZW1fNGJpdCskcmVtaV0sJHJlbQorCXNybHgJJFpsbyw0LCRabG8KKwltb3YJMTMsJGNudAorCXNsbHgJJFpoaSw2MCwkdG1wCisJeG9yCSRUbG8sJFpsbywkWmxvCisJc3JseAkkWmhpLDQsJFpoaQorCXhvcgkkWmxvLCR0bXAsJFpsbworCisJeG9yCSR4aTEsJG5sbywkbmxvCisJYW5kCSRabG8sMHhmLCRyZW1pCisJYW5kCSRubG8sMHhmMCwkbmhpCisJYW5kCSRubG8sMHgwZiwkbmxvCisJYmEJLkxnaGFzaF9pbm5lcgorCXNsbAkkbmxvLDQsJG5sbworLmFsaWduCTMyCisuTGdoYXNoX2lubmVyOgorCWxkeAlbJEh0YmxvKyRubG9dLCRUbG8KKwlzbGwJJHJlbWksMywkcmVtaQorCXhvcgkkVGhpLCRaaGksJFpoaQorCWxkeAlbJEh0YmwrJG5sb10sJFRoaQorCXNybHgJJFpsbyw0LCRabG8KKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRyZW1fNGJpdCskcmVtaV0sJHJlbQorCXNsbHgJJFpoaSw2MCwkdG1wCisJeG9yCSRUbG8sJFpsbywkWmxvCisJbGR1YglbJGlucCskY250XSwkbmxvCisJc3JseAkkWmhpLDQsJFpoaQorCXhvcgkkWmxvLCR0bXAsJFpsbworCWxkdWIJWyRYaSskY250XSwkeGkxCisJeG9yCSRUaGksJFpoaSwkWmhpCisJYW5kCSRabG8sMHhmLCRyZW1pCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJc2xsCSRyZW1pLDMsJHJlbWkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRIdGJsKyRuaGldLCRUaGkKKwlzcmx4CSRabG8sNCwkWmxvCisJbGR4CVskcmVtXzRiaXQrJHJlbWldLCRyZW0KKwlzbGx4CSRaaGksNjAsJHRtcAorCXhvcgkkeGkxLCRubG8sJG5sbworCXNybHgJJFpoaSw0LCRaaGkKKwlhbmQJJG5sbywweGYwLCRuaGkKKwlhZGRjYwkkY250LC0xLCRjbnQKKwl4b3IJJFpsbywkdG1wLCRabG8KKwlhbmQJJG5sbywweDBmLCRubG8KKwl4b3IJJFRsbywkWmxvLCRabG8KKwlzbGwJJG5sbyw0LCRubG8KKwlibHUJLkxnaGFzaF9pbm5lcgorCWFuZAkkWmxvLDB4ZiwkcmVtaQorCisJbGR4CVskSHRibG8rJG5sb10sJFRsbworCXNsbAkkcmVtaSwzLCRyZW1pCisJeG9yCSRUaGksJFpoaSwkWmhpCisJbGR4CVskSHRibCskbmxvXSwkVGhpCisJc3JseAkkWmxvLDQsJFpsbworCXhvcgkkcmVtLCRaaGksJFpoaQorCWxkeAlbJHJlbV80Yml0KyRyZW1pXSwkcmVtCisJc2xseAkkWmhpLDYwLCR0bXAKKwl4b3IJJFRsbywkWmxvLCRabG8KKwlzcmx4CSRaaGksNCwkWmhpCisJeG9yCSRabG8sJHRtcCwkWmxvCisJeG9yCSRUaGksJFpoaSwkWmhpCisKKwlhZGQJJGlucCwxNiwkaW5wCisJY21wCSRpbnAsJGxlbgorCWJlLHBuCWAkYml0cz09NjQ/IiV4Y2MiOiIlaWNjImAsLkxkb25lCisJYW5kCSRabG8sMHhmLCRyZW1pCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJc2xsCSRyZW1pLDMsJHJlbWkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRIdGJsKyRuaGldLCRUaGkKKwlzcmx4CSRabG8sNCwkWmxvCisJbGR4CVskcmVtXzRiaXQrJHJlbWldLCRyZW0KKwlzbGx4CSRaaGksNjAsJHRtcAorCXhvcgkkVGxvLCRabG8sJFpsbworCWxkdWIJWyRpbnArMTVdLCRubG8KKwlzcmx4CSRaaGksNCwkWmhpCisJeG9yCSRabG8sJHRtcCwkWmxvCisJeG9yCSRUaGksJFpoaSwkWmhpCisJc3R4CSRabG8sWyRYaSs4XQorCXhvcgkkcmVtLCRaaGksJFpoaQorCXN0eAkkWmhpLFskWGldCisJc3JsCSRabG8sOCwkeGkxCisJYW5kCSRabG8sMHhmZiwkeGkwCisJYmEJLkxvdXRlcgorCWFuZAkkeGkxLDB4ZmYsJHhpMQorLmFsaWduCTMyCisuTGRvbmU6CisJbGR4CVskSHRibG8rJG5oaV0sJFRsbworCXNsbAkkcmVtaSwzLCRyZW1pCisJeG9yCSRyZW0sJFpoaSwkWmhpCisJbGR4CVskSHRibCskbmhpXSwkVGhpCisJc3JseAkkWmxvLDQsJFpsbworCWxkeAlbJHJlbV80Yml0KyRyZW1pXSwkcmVtCisJc2xseAkkWmhpLDYwLCR0bXAKKwl4b3IJJFRsbywkWmxvLCRabG8KKwlzcmx4CSRaaGksNCwkWmhpCisJeG9yCSRabG8sJHRtcCwkWmxvCisJeG9yCSRUaGksJFpoaSwkWmhpCisJc3R4CSRabG8sWyRYaSs4XQorCXhvcgkkcmVtLCRaaGksJFpoaQorCXN0eAkkWmhpLFskWGldCisKKwlyZXQKKwlyZXN0b3JlCisudHlwZQlnY21fZ2hhc2hfNGJpdCwjZnVuY3Rpb24KKy5zaXplCWdjbV9naGFzaF80Yml0LCguLWdjbV9naGFzaF80Yml0KQorX19fCisKK3VuZGVmICRpbnA7Cit1bmRlZiAkbGVuOworCiskY29kZS49PDxfX187CisuZ2xvYmwJZ2NtX2dtdWx0XzRiaXQKKy5hbGlnbgkzMgorZ2NtX2dtdWx0XzRiaXQ6CisJc2F2ZQklc3AsLSRmcmFtZSwlc3AKKwlsZHViCVskWGkrMTVdLCRubG8KKwlhZGQJJEh0YmwsOCwkSHRibG8KKworMToJY2FsbAkuKzgKKwlhZGQJJW83LHJlbV80Yml0LTFiLCRyZW1fNGJpdAorCisJYW5kCSRubG8sMHhmMCwkbmhpCisJYW5kCSRubG8sMHgwZiwkbmxvCisJc2xsCSRubG8sNCwkbmxvCisJbGR4CVskSHRibG8rJG5sb10sJFpsbworCWxkeAlbJEh0YmwrJG5sb10sJFpoaQorCisJbGR1YglbJFhpKzE0XSwkbmxvCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJYW5kCSRabG8sMHhmLCRyZW1pCisJbGR4CVskSHRibCskbmhpXSwkVGhpCisJc2xsCSRyZW1pLDMsJHJlbWkKKwlsZHgJWyRyZW1fNGJpdCskcmVtaV0sJHJlbQorCXNybHgJJFpsbyw0LCRabG8KKwltb3YJMTMsJGNudAorCXNsbHgJJFpoaSw2MCwkdG1wCisJeG9yCSRUbG8sJFpsbywkWmxvCisJc3JseAkkWmhpLDQsJFpoaQorCXhvcgkkWmxvLCR0bXAsJFpsbworCisJYW5kCSRabG8sMHhmLCRyZW1pCisJYW5kCSRubG8sMHhmMCwkbmhpCisJYW5kCSRubG8sMHgwZiwkbmxvCisJYmEJLkxnbXVsdF9pbm5lcgorCXNsbAkkbmxvLDQsJG5sbworLmFsaWduCTMyCisuTGdtdWx0X2lubmVyOgorCWxkeAlbJEh0YmxvKyRubG9dLCRUbG8KKwlzbGwJJHJlbWksMywkcmVtaQorCXhvcgkkVGhpLCRaaGksJFpoaQorCWxkeAlbJEh0YmwrJG5sb10sJFRoaQorCXNybHgJJFpsbyw0LCRabG8KKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRyZW1fNGJpdCskcmVtaV0sJHJlbQorCXNsbHgJJFpoaSw2MCwkdG1wCisJeG9yCSRUbG8sJFpsbywkWmxvCisJbGR1YglbJFhpKyRjbnRdLCRubG8KKwlzcmx4CSRaaGksNCwkWmhpCisJeG9yCSRabG8sJHRtcCwkWmxvCisJeG9yCSRUaGksJFpoaSwkWmhpCisJYW5kCSRabG8sMHhmLCRyZW1pCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJc2xsCSRyZW1pLDMsJHJlbWkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRIdGJsKyRuaGldLCRUaGkKKwlzcmx4CSRabG8sNCwkWmxvCisJbGR4CVskcmVtXzRiaXQrJHJlbWldLCRyZW0KKwlzbGx4CSRaaGksNjAsJHRtcAorCXNybHgJJFpoaSw0LCRaaGkKKwlhbmQJJG5sbywweGYwLCRuaGkKKwlhZGRjYwkkY250LC0xLCRjbnQKKwl4b3IJJFpsbywkdG1wLCRabG8KKwlhbmQJJG5sbywweDBmLCRubG8KKwl4b3IJJFRsbywkWmxvLCRabG8KKwlzbGwJJG5sbyw0LCRubG8KKwlibHUJLkxnbXVsdF9pbm5lcgorCWFuZAkkWmxvLDB4ZiwkcmVtaQorCisJbGR4CVskSHRibG8rJG5sb10sJFRsbworCXNsbAkkcmVtaSwzLCRyZW1pCisJeG9yCSRUaGksJFpoaSwkWmhpCisJbGR4CVskSHRibCskbmxvXSwkVGhpCisJc3JseAkkWmxvLDQsJFpsbworCXhvcgkkcmVtLCRaaGksJFpoaQorCWxkeAlbJHJlbV80Yml0KyRyZW1pXSwkcmVtCisJc2xseAkkWmhpLDYwLCR0bXAKKwl4b3IJJFRsbywkWmxvLCRabG8KKwlzcmx4CSRaaGksNCwkWmhpCisJeG9yCSRabG8sJHRtcCwkWmxvCisJeG9yCSRUaGksJFpoaSwkWmhpCisJYW5kCSRabG8sMHhmLCRyZW1pCisKKwlsZHgJWyRIdGJsbyskbmhpXSwkVGxvCisJc2xsCSRyZW1pLDMsJHJlbWkKKwl4b3IJJHJlbSwkWmhpLCRaaGkKKwlsZHgJWyRIdGJsKyRuaGldLCRUaGkKKwlzcmx4CSRabG8sNCwkWmxvCisJbGR4CVskcmVtXzRiaXQrJHJlbWldLCRyZW0KKwlzbGx4CSRaaGksNjAsJHRtcAorCXhvcgkkVGxvLCRabG8sJFpsbworCXNybHgJJFpoaSw0LCRaaGkKKwl4b3IJJFpsbywkdG1wLCRabG8KKwl4b3IJJFRoaSwkWmhpLCRaaGkKKwlzdHgJJFpsbyxbJFhpKzhdCisJeG9yCSRyZW0sJFpoaSwkWmhpCisJc3R4CSRaaGksWyRYaV0KKworCXJldAorCXJlc3RvcmUKKy50eXBlCWdjbV9nbXVsdF80Yml0LCNmdW5jdGlvbgorLnNpemUJZ2NtX2dtdWx0XzRiaXQsKC4tZ2NtX2dtdWx0XzRiaXQpCisuYXNjaXoJIkdIQVNIIGZvciBTUEFSQ3Y5LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgorLmFsaWduCTQKK19fXworCiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaC14ODYucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXg4Ni5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA5NjY5Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC14ODYucGwKQEAgLTAsMCArMSwxMzQyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBNYXJjaCwgTWF5LCBKdW5lIDIwMTAKKyMKKyMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCisjIHNpbmdsZSBtdWx0aXBsaWNhdGlvbiBvcGVyYXRpb24gaW4gR0YoMl4xMjgpLiAiNC1iaXQiIG1lYW5zIHRoYXQgaXQKKyMgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzY0LzEyOCBieXRlcyBmaXhlZCB0YWJsZV0uIEl0IGhhcyB0d28KKyMgY29kZSBwYXRoczogdmFuaWxsYSB4ODYgYW5kIHZhbmlsbGEgTU1YLiBGb3JtZXIgd2lsbCBiZSBleGVjdXRlZCBvbgorIyA0ODYgYW5kIFBlbnRpdW0sIGxhdHRlciBvbiBhbGwgb3RoZXJzLiBNTVggR0hBU0ggZmVhdHVyZXMgc28gY2FsbGVkCisjICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgbWV0aG9kIHV0aWxpemluZyBhZGRpdGlvbmFsIDI1NisxNiBieXRlcworIyBvZiBwZXIta2V5IHN0b3JhZ2UgWys1MTIgYnl0ZXMgc2hhcmVkIHRhYmxlXS4gUGVyZm9ybWFuY2UgcmVzdWx0cworIyBhcmUgZm9yIHN0cmVhbWVkIEdIQVNIIHN1YnJvdXRpbmUgYW5kIGFyZSBleHByZXNzZWQgaW4gY3ljbGVzIHBlcgorIyBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXI6CisjCisjCQlnY2MgMi45NS4zKCopCU1NWCBhc3NlbWJsZXIJeDg2IGFzc2VtYmxlcgorIworIyBQZW50aXVtCTEwNS8xMTEoKiopCS0JCTUwCisjIFBJSUkJCTY4IC83NQkJMTIuMgkJMjQKKyMgUDQJCTEyNS8xMjUJCTE3LjgJCTg0KCoqKikKKyMgT3B0ZXJvbgk2NiAvNzAJCTEwLjEJCTMwCisjIENvcmUyCQk1NCAvNjcJCTguNAkJMTgKKyMKKyMgKCopCWdjYyAzLjQueCB3YXMgb2JzZXJ2ZWQgdG8gZ2VuZXJhdGUgZmV3IHBlcmNlbnQgc2xvd2VyIGNvZGUsCisjCXdoaWNoIGlzIG9uZSBvZiByZWFzb25zIHdoeSAyLjk1LjMgcmVzdWx0cyB3ZXJlIGNob3NlbiwKKyMJYW5vdGhlciByZWFzb24gaXMgbGFjayBvZiAzLjQueCByZXN1bHRzIGZvciBvbGRlciBDUFVzOworIwljb21wYXJpc29uIHdpdGggTU1YIHJlc3VsdHMgaXMgbm90IGNvbXBsZXRlbHkgZmFpciwgYmVjYXVzZSBDCisjCXJlc3VsdHMgYXJlIGZvciB2YW5pbGxhICIyNTZCIiBpbXBsZW1lbnRhdGlvbiwgd2hpbGUKKyMJYXNzZW1ibGVyIHJlc3VsdHMgYXJlIGZvciAiNTI4QiI7LSkKKyMgKCoqKQlzZWNvbmQgbnVtYmVyIGlzIHJlc3VsdCBmb3IgY29kZSBjb21waWxlZCB3aXRoIC1mUElDIGZsYWcsCisjCXdoaWNoIGlzIGFjdHVhbGx5IG1vcmUgcmVsZXZhbnQsIGJlY2F1c2UgYXNzZW1ibGVyIGNvZGUgaXMKKyMJcG9zaXRpb24taW5kZXBlbmRlbnQ7CisjICgqKiopCXNlZSBjb21tZW50IGluIG5vbi1NTVggcm91dGluZSBmb3IgZnVydGhlciBkZXRhaWxzOworIworIyBUbyBzdW1tYXJpemUsIGl0J3MgPjItNSB0aW1lcyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUuIFRvCisjIGFuY2hvciBpdCB0byBzb21ldGhpbmcgZWxzZSBTSEExIGFzc2VtYmxlciBwcm9jZXNzZXMgb25lIGJ5dGUgaW4KKyMgMTEtMTMgY3ljbGVzIG9uIGNvbnRlbXBvcmFyeSB4ODYgY29yZXMuIEFzIGZvciBjaG9pY2Ugb2YgTU1YIGluCisjIHBhcnRpY3VsYXIsIHNlZSBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuLi4KKworIyBNYXkgMjAxMAorIworIyBBZGQgUENMTVVMUURRIHZlcnNpb24gcGVyZm9ybWluZyBhdCAyLjEwIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCisjIFRoZSBxdWVzdGlvbiBpcyBob3cgY2xvc2UgaXMgaXQgdG8gdGhlb3JldGljYWwgbGltaXQ/IFRoZSBwY2xtdWxxZHEKKyMgaW5zdHJ1Y3Rpb24gbGF0ZW5jeSBhcHBlYXJzIHRvIGJlIDE0IGN5Y2xlcyBhbmQgdGhlcmUgY2FuJ3QgYmUgbW9yZQorIyB0aGFuIDIgb2YgdGhlbSBleGVjdXRpbmcgYXQgYW55IGdpdmVuIHRpbWUuIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUKKyMgS2FyYXRzdWJhIG11bHRpcGxpY2F0aW9uIHdvdWxkIHRha2UgMjggY3ljbGVzICpwbHVzKiBmZXcgY3ljbGVzIGZvcgorIyBwcmUtIGFuZCBwb3N0LXByb2Nlc3NpbmcuIFRoZW4gbXVsdGlwbGljYXRpb24gaGFzIHRvIGJlIGZvbGxvd2VkIGJ5CisjIG1vZHVsby1yZWR1Y3Rpb24uIEdpdmVuIHRoYXQgYWdncmVnYXRlZCByZWR1Y3Rpb24gbWV0aG9kIFtzZWUKKyMgIkNhcnJ5LWxlc3MgTXVsdGlwbGljYXRpb24gYW5kIEl0cyBVc2FnZSBmb3IgQ29tcHV0aW5nIHRoZSBHQ00gTW9kZSIKKyMgd2hpdGUgcGFwZXIgYnkgSW50ZWxdIGFsbG93cyB5b3UgdG8gcGVyZm9ybSByZWR1Y3Rpb24gb25seSBvbmNlIGluCisjIGEgd2hpbGUgd2UgY2FuIGFzc3VtZSB0aGF0IGFzeW1wdG90aWMgcGVyZm9ybWFuY2UgY2FuIGJlIGVzdGltYXRlZAorIyBhcyAoMjgrVG1vZC9OYWdncikvMTYsIHdoZXJlIFRtb2QgaXMgdGltZSB0byBwZXJmb3JtIHJlZHVjdGlvbgorIyBhbmQgTmFnZ3IgaXMgdGhlIGFnZ3JlZ2F0aW9uIGZhY3Rvci4KKyMKKyMgQmVmb3JlIHdlIHByb2NlZWQgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBsZXQncyBoYXZlIGNsb3NlciBsb29rIGF0CisjIHRoZSBiZXN0LXBlcmZvcm1pbmcgY29kZSBzdWdnZXN0ZWQgYnkgSW50ZWwgaW4gdGhlaXIgd2hpdGUgcGFwZXIuCisjIEJ5IHRyYWNpbmcgaW50ZXItcmVnaXN0ZXIgZGVwZW5kZW5jaWVzIFRtb2QgaXMgZXN0aW1hdGVkIGFzIH4xOQorIyBjeWNsZXMgYW5kIE5hZ2dyIGNob3NlbiBieSBJbnRlbCBpcyA0LCByZXN1bHRpbmcgaW4gMi4wNSBjeWNsZXMgcGVyCisjIHByb2Nlc3NlZCBieXRlLiBBcyBpbXBsaWVkLCB0aGlzIGlzIHF1aXRlIG9wdGltaXN0aWMgZXN0aW1hdGUsCisjIGJlY2F1c2UgaXQgZG9lcyBub3QgYWNjb3VudCBmb3IgS2FyYXRzdWJhIHByZS0gYW5kIHBvc3QtcHJvY2Vzc2luZywKKyMgd2hpY2ggZm9yIGEgc2luZ2xlIG11bHRpcGxpY2F0aW9uIGlzIH41IGN5Y2xlcy4gVW5mb3J0dW5hdGVseSBJbnRlbAorIyBkb2VzIG5vdCBwcm92aWRlIHBlcmZvcm1hbmNlIGRhdGEgZm9yIEdIQVNIIGFsb25lLiBCdXQgYmVuY2htYXJraW5nCisjIEFFU19HQ01fZW5jcnlwdCByaXBwZWQgb3V0IG9mIEZpZy4gMTUgb2YgdGhlIHdoaXRlIHBhcGVyIHdpdGggYWFkdAorIyBhbG9uZSByZXN1bHRlZCBpbiAyLjQ2IGN5Y2xlcyBwZXIgYnl0ZSBvZiBvdXQgMTZLQiBidWZmZXIuIE5vdGUgdGhhdAorIyB0aGUgcmVzdWx0IGFjY291bnRzIGV2ZW4gZm9yIHByZS1jb21wdXRpbmcgb2YgZGVncmVlcyBvZiB0aGUgaGFzaAorIyBrZXkgSCwgYnV0IGl0cyBwb3J0aW9uIGlzIG5lZ2xpZ2libGUgYXQgMTZLQiBidWZmZXIgc2l6ZS4KKyMKKyMgTW92aW5nIG9uIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBxdWVzdGlvbi4gVG1vZCBpcyBlc3RpbWF0ZWQgYXMKKyMgfjEzIGN5Y2xlcyBhbmQgTmFnZ3IgaXMgMiwgZ2l2aW5nIGFzeW1wdG90aWMgcGVyZm9ybWFuY2Ugb2YgLi4uCisjIDIuMTYuIEhvdyBpcyBpdCBwb3NzaWJsZSB0aGF0IG1lYXN1cmVkIHBlcmZvcm1hbmNlIGlzIGJldHRlciB0aGFuCisjIG9wdGltaXN0aWMgdGhlb3JldGljYWwgZXN0aW1hdGU/IFRoZXJlIGlzIG9uZSB0aGluZyBJbnRlbCBmYWlsZWQKKyMgdG8gcmVjb2duaXplLiBCeSBzZXJpYWxpemluZyBHSEFTSCB3aXRoIENUUiBpbiBzYW1lIHN1YnJvdXRpbmUKKyMgZm9ybWVyJ3MgcGVyZm9ybWFuY2UgaXMgcmVhbGx5IGxpbWl0ZWQgdG8gYWJvdmUgKFRtdWwgKyBUbW9kL05hZ2dyKQorIyBlcXVhdGlvbi4gQnV0IGlmIEdIQVNIIHByb2NlZHVyZSBpcyBkZXRhY2hlZCwgdGhlIG1vZHVsby1yZWR1Y3Rpb24KKyMgY2FuIGJlIGludGVybGVhdmVkIHdpdGggTmFnZ3ItMSBtdWx0aXBsaWNhdGlvbnMgYXQgaW5zdHJ1Y3Rpb24gbGV2ZWwKKyMgYW5kIHVuZGVyIGlkZWFsIGNvbmRpdGlvbnMgZXZlbiBkaXNhcHBlYXIgZnJvbSB0aGUgZXF1YXRpb24uIFNvIHRoYXQKKyMgb3B0aW1pc3RpYyB0aGVvcmV0aWNhbCBlc3RpbWF0ZSBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyAuLi4KKyMgMjgvMTY9MS43NSwgYW5kIG5vdCAyLjE2LiBXZWxsLCBpdCdzIHByb2JhYmx5IHdheSB0b28gb3B0aW1pc3RpYywKKyMgYXQgbGVhc3QgZm9yIHN1Y2ggc21hbGwgTmFnZ3IuIEknZCBhcmd1ZSB0aGF0ICgyOCtUcHJvYy9OYWdnciksCisjIHdoZXJlIFRwcm9jIGlzIHRpbWUgcmVxdWlyZWQgZm9yIEthcmF0c3ViYSBwcmUtIGFuZCBwb3N0LXByb2Nlc3NpbmcsCisjIGlzIG1vcmUgcmVhbGlzdGljIGVzdGltYXRlLiBJbiB0aGlzIGNhc2UgaXQgZ2l2ZXMgLi4uIDEuOTEgY3ljbGVzLgorIyBPciBpbiBvdGhlciB3b3JkcywgZGVwZW5kaW5nIG9uIGhvdyB3ZWxsIHdlIGNhbiBpbnRlcmxlYXZlIHJlZHVjdGlvbgorIyBhbmQgb25lIG9mIHRoZSB0d28gbXVsdGlwbGljYXRpb25zIHRoZSBwZXJmb3JtYW5jZSBzaG91bGQgYmUgYmV0d2VuCisjIDEuOTEgYW5kIDIuMTYuIEFzIGFscmVhZHkgbWVudGlvbmVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHByb2Nlc3NlcworIyBvbmUgYnl0ZSBvdXQgb2YgOEtCIGJ1ZmZlciBpbiAyLjEwIGN5Y2xlcywgd2hpbGUgeDg2XzY0IGNvdW50ZXJwYXJ0CisjIC0gaW4gMi4wMi4geDg2XzY0IHBlcmZvcm1hbmNlIGlzIGJldHRlciwgYmVjYXVzZSBsYXJnZXIgcmVnaXN0ZXIKKyMgYmFuayBhbGxvd3MgdG8gaW50ZXJsZWF2ZSByZWR1Y3Rpb24gYW5kIG11bHRpcGxpY2F0aW9uIGJldHRlci4KKyMKKyMgRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGluY3JlYXNlIE5hZ2dyPyBUbyBzdGFydCB3aXRoIGl0J3MgdmlydHVhbGx5CisjIGltcG9zc2libGUgaW4gMzItYml0IG1vZGUsIGJlY2F1c2Ugb2YgbGltaXRlZCByZWdpc3RlciBiYW5rCisjIGNhcGFjaXR5LiBPdGhlcndpc2UgaW1wcm92ZW1lbnQgaGFzIHRvIGJlIHdlaWdoZWQgYWdpYWluc3Qgc2xvd2VyCisjIHNldHVwLCBhcyB3ZWxsIGFzIGNvZGUgc2l6ZSBhbmQgY29tcGxleGl0eSBpbmNyZWFzZS4gQXMgZXZlbgorIyBvcHRpbWlzdGljIGVzdGltYXRlIGRvZXNuJ3QgcHJvbWlzZSAzMCUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsCisjIHRoZXJlIGFyZSBjdXJyZW50bHkgbm8gcGxhbnMgdG8gaW5jcmVhc2UgTmFnZ3IuCisjCisjIFNwZWNpYWwgdGhhbmtzIHRvIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZm9yCisjIHByb3ZpZGluZyBhY2Nlc3MgdG8gYSBXZXN0bWVyZS1iYXNlZCBzeXN0ZW0gb24gYmVoYWxmIG9mIEludGVsCisjIE9wZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudHJlLgorCisjIEphbnVhcnkgMjAxMAorIworIyBUd2Vha2VkIHRvIG9wdGltaXplIHRyYW5zaXRpb25zIGJldHdlZW4gaW50ZWdlciBhbmQgRlAgb3BlcmF0aW9ucworIyBvbiBzYW1lIFhNTSByZWdpc3RlciwgUENMTVVMUURRIHN1YnJvdXRpbmUgd2FzIG1lYXN1cmVkIHRvIHByb2Nlc3MKKyMgb25lIGJ5dGUgaW4gMi4wNyBjeWNsZXMgb24gU2FuZHkgQnJpZGdlLCBhbmQgaW4gMi4xMiAtIG9uIFdlc3RtZXJlLgorIyBUaGUgbWlub3IgcmVncmVzc2lvbiBvbiBXZXN0bWVyZSBpcyBvdXR3ZWlnaGVkIGJ5IH4xNSUgaW1wcm92ZW1lbnQKKyMgb24gU2FuZHkgQnJpZGdlLiBTdHJhbmdlbHkgZW5vdWdoIGF0dGVtcHQgdG8gbW9kaWZ5IDY0LWJpdCBjb2RlIGluCisjIHNpbWlsYXIgbWFubmVyIHJlc3VsdGVkIGluIGFsbW9zdCAyMCUgZGVncmFkYXRpb24gb24gU2FuZHkgQnJpZGdlLAorIyB3aGVyZSBvcmlnaW5hbCA2NC1iaXQgY29kZSBwcm9jZXNzZXMgb25lIGJ5dGUgaW4gMS45NSBjeWNsZXMuCisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CitwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsKK3JlcXVpcmUgIng4NmFzbS5wbCI7CisKKyZhc21faW5pdCgkQVJHVlswXSwiZ2hhc2gteDg2LnBsIiwkeDg2b25seSA9ICRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOworCiskc3NlMj0wOworZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisKKygkWmhoLCRaaGwsJFpsaCwkWmxsKSA9ICgiZWJwIiwiZWR4IiwiZWN4IiwiZWJ4Iik7CiskaW5wICA9ICJlZGkiOworJEh0YmwgPSAiZXNpIjsKKwwKKyR1bnJvbGwgPSAwOwkjIEFmZmVjdHMgeDg2IGxvb3AuIEZvbGRlZCBsb29wIHBlcmZvcm1zIH43JSB3b3JzZQorCQkjIHRoYW4gdW5yb2xsZWQsIHdoaWNoIGhhcyB0byBiZSB3ZWlnaHRlZCBhZ2FpbnN0CisJCSMgMi41eCB4ODYtc3BlY2lmaWMgY29kZSBzaXplIHJlZHVjdGlvbi4KKworc3ViIHg4Nl9sb29wIHsKKyAgICBteSAkb2ZmID0gc2hpZnQ7CisgICAgbXkgJHJlbSA9ICJlYXgiOworCisJJm1vdgkoJFpoaCwmRFdQKDQsJEh0YmwsJFpsbCkpOworCSZtb3YJKCRaaGwsJkRXUCgwLCRIdGJsLCRabGwpKTsKKwkmbW92CSgkWmxoLCZEV1AoMTIsJEh0YmwsJFpsbCkpOworCSZtb3YJKCRabGwsJkRXUCg4LCRIdGJsLCRabGwpKTsKKwkmeG9yCSgkcmVtLCRyZW0pOwkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzIG9uIFBJSUkKKworCSMgc2hyZCBwcmFjdGljYWxseSBraWxscyBQNCwgMi41eCBkZXRlcmlvcmF0aW9uLCBidXQgUDQgaGFzCisJIyBNTVggY29kZS1wYXRoIHRvIGV4ZWN1dGUuIHNocmQgcnVucyB0YWQgZmFzdGVyIFt0aGFuIHR3aWNlCisJIyB0aGUgc2hpZnRzLCBtb3ZlJ3MgYW5kIG9yJ3NdIG9uIHByZS1NTVggUGVudGl1bSAoYXMgd2VsbCBhcworCSMgUElJSSBhbmQgQ29yZTIpLCAqYnV0KiBtaW5pbWl6ZXMgY29kZSBzaXplLCBzcGFyZXMgcmVnaXN0ZXIKKwkjIGFuZCB0aHVzIGFsbG93cyB0byBmb2xkIHRoZSBsb29wLi4uCisJaWYgKCEkdW5yb2xsKSB7CisJbXkgJGNudCA9ICRpbnA7CisJJm1vdgkoJGNudCwxNSk7CisJJmptcAkoJmxhYmVsKCJ4ODZfbG9vcCIpKTsKKwkmc2V0X2xhYmVsKCJ4ODZfbG9vcCIsMTYpOworCSAgICBmb3IoJGk9MTskaTw9MjskaSsrKSB7CisJCSZtb3YJKCZMQigkcmVtKSwmTEIoJFpsbCkpOworCQkmc2hyZAkoJFpsbCwkWmxoLDQpOworCQkmYW5kCSgmTEIoJHJlbSksMHhmKTsKKwkJJnNocmQJKCRabGgsJFpobCw0KTsKKwkJJnNocmQJKCRaaGwsJFpoaCw0KTsKKwkJJnNocgkoJFpoaCw0KTsKKwkJJnhvcgkoJFpoaCwmRFdQKCRvZmYrMTYsImVzcCIsJHJlbSw0KSk7CisKKwkJJm1vdgkoJkxCKCRyZW0pLCZCUCgkb2ZmLCJlc3AiLCRjbnQpKTsKKwkJaWYgKCRpJjEpIHsKKwkJCSZhbmQJKCZMQigkcmVtKSwweGYwKTsKKwkJfSBlbHNlIHsKKwkJCSZzaGwJKCZMQigkcmVtKSw0KTsKKwkJfQorCisJCSZ4b3IJKCRabGwsJkRXUCg4LCRIdGJsLCRyZW0pKTsKKwkJJnhvcgkoJFpsaCwmRFdQKDEyLCRIdGJsLCRyZW0pKTsKKwkJJnhvcgkoJFpobCwmRFdQKDAsJEh0YmwsJHJlbSkpOworCQkmeG9yCSgkWmhoLCZEV1AoNCwkSHRibCwkcmVtKSk7CisKKwkJaWYgKCRpJjEpIHsKKwkJCSZkZWMJKCRjbnQpOworCQkJJmpzCSgmbGFiZWwoIng4Nl9icmVhayIpKTsKKwkJfSBlbHNlIHsKKwkJCSZqbXAJKCZsYWJlbCgieDg2X2xvb3AiKSk7CisJCX0KKwkgICAgfQorCSZzZXRfbGFiZWwoIng4Nl9icmVhayIsMTYpOworCX0gZWxzZSB7CisJICAgIGZvcigkaT0xOyRpPDMyOyRpKyspIHsKKwkJJmNvbW1lbnQoJGkpOworCQkmbW92CSgmTEIoJHJlbSksJkxCKCRabGwpKTsKKwkJJnNocmQJKCRabGwsJFpsaCw0KTsKKwkJJmFuZAkoJkxCKCRyZW0pLDB4Zik7CisJCSZzaHJkCSgkWmxoLCRaaGwsNCk7CisJCSZzaHJkCSgkWmhsLCRaaGgsNCk7CisJCSZzaHIJKCRaaGgsNCk7CisJCSZ4b3IJKCRaaGgsJkRXUCgkb2ZmKzE2LCJlc3AiLCRyZW0sNCkpOworCisJCWlmICgkaSYxKSB7CisJCQkmbW92CSgmTEIoJHJlbSksJkJQKCRvZmYrMTUtKCRpPj4xKSwiZXNwIikpOworCQkJJmFuZAkoJkxCKCRyZW0pLDB4ZjApOworCQl9IGVsc2UgeworCQkJJm1vdgkoJkxCKCRyZW0pLCZCUCgkb2ZmKzE1LSgkaT4+MSksImVzcCIpKTsKKwkJCSZzaGwJKCZMQigkcmVtKSw0KTsKKwkJfQorCisJCSZ4b3IJKCRabGwsJkRXUCg4LCRIdGJsLCRyZW0pKTsKKwkJJnhvcgkoJFpsaCwmRFdQKDEyLCRIdGJsLCRyZW0pKTsKKwkJJnhvcgkoJFpobCwmRFdQKDAsJEh0YmwsJHJlbSkpOworCQkmeG9yCSgkWmhoLCZEV1AoNCwkSHRibCwkcmVtKSk7CisJICAgIH0KKwl9CisJJmJzd2FwCSgkWmxsKTsKKwkmYnN3YXAJKCRabGgpOworCSZic3dhcAkoJFpobCk7CisJaWYgKCEkeDg2b25seSkgeworCQkmYnN3YXAJKCRaaGgpOworCX0gZWxzZSB7CisJCSZtb3YJKCJlYXgiLCRaaGgpOworCQkmYnN3YXAJKCJlYXgiKTsKKwkJJm1vdgkoJFpoaCwiZWF4Iik7CisJfQorfQorCitpZiAoJHVucm9sbCkgeworICAgICZmdW5jdGlvbl9iZWdpbl9CKCJfeDg2X2dtdWx0XzRiaXRfaW5uZXIiKTsKKwkmeDg2X2xvb3AoNCk7CisJJnJldAkoKTsKKyAgICAmZnVuY3Rpb25fZW5kX0IoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOworfQorCitzdWIgZGVwb3NpdF9yZW1fNGJpdCB7CisgICAgbXkgJGJpYXMgPSBzaGlmdDsKKworCSZtb3YJKCZEV1AoJGJpYXMrMCwgImVzcCIpLDB4MDAwMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNCwgImVzcCIpLDB4MUMyMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrOCwgImVzcCIpLDB4Mzg0MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMTIsImVzcCIpLDB4MjQ2MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMTYsImVzcCIpLDB4NzA4MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMjAsImVzcCIpLDB4NkNBMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMjQsImVzcCIpLDB4NDhDMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMjgsImVzcCIpLDB4NTRFMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMzIsImVzcCIpLDB4RTEwMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrMzYsImVzcCIpLDB4RkQyMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNDAsImVzcCIpLDB4RDk0MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNDQsImVzcCIpLDB4QzU2MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNDgsImVzcCIpLDB4OTE4MDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNTIsImVzcCIpLDB4OERBMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNTYsImVzcCIpLDB4QTlDMDw8MTYpOworCSZtb3YJKCZEV1AoJGJpYXMrNjAsImVzcCIpLDB4QjVFMDw8MTYpOworfQorDAorJHN1ZmZpeCA9ICR4ODZvbmx5ID8gIiIgOiAiX3g4NiI7CisKKyZmdW5jdGlvbl9iZWdpbigiZ2NtX2dtdWx0XzRiaXQiLiRzdWZmaXgpOworCSZzdGFja19wdXNoKDE2KzQrMSk7CQkJIyArMSBmb3Igc3RhY2sgYWxpZ25tZW50CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJCSMgbG9hZCBYaQorCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIEh0YWJsZQorCisJJm1vdgkoJFpoaCwmRFdQKDAsJGlucCkpOwkJIyBsb2FkIFhpWzE2XQorCSZtb3YJKCRaaGwsJkRXUCg0LCRpbnApKTsKKwkmbW92CSgkWmxoLCZEV1AoOCwkaW5wKSk7CisJJm1vdgkoJFpsbCwmRFdQKDEyLCRpbnApKTsKKworCSZkZXBvc2l0X3JlbV80Yml0KDE2KTsKKworCSZtb3YJKCZEV1AoMCwiZXNwIiksJFpoaCk7CQkjIGNvcHkgWGlbMTZdIG9uIHN0YWNrCisJJm1vdgkoJkRXUCg0LCJlc3AiKSwkWmhsKTsKKwkmbW92CSgmRFdQKDgsImVzcCIpLCRabGgpOworCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRabGwpOworCSZzaHIJKCRabGwsMjApOworCSZhbmQJKCRabGwsMHhmMCk7CisKKwlpZiAoJHVucm9sbCkgeworCQkmY2FsbAkoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOworCX0gZWxzZSB7CisJCSZ4ODZfbG9vcCgwKTsKKwkJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsKKwl9CisKKwkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOworCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKKwkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CisJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOworCSZzdGFja19wb3AoMTYrNCsxKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0Ii4kc3VmZml4KTsKKworJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfNGJpdCIuJHN1ZmZpeCk7CisJJnN0YWNrX3B1c2goMTYrNCsxKTsJCQkjICsxIGZvciA2NC1iaXQgYWxpZ25tZW50CisJJm1vdgkoJFpsbCwmd3BhcmFtKDApKTsJCSMgbG9hZCBYaQorCSZtb3YJKCRIdGJsLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIEh0YWJsZQorCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgaW4KKwkmbW92CSgiZWN4Iiwmd3BhcmFtKDMpKTsJCSMgbG9hZCBsZW4KKwkmYWRkCSgiZWN4IiwkaW5wKTsKKwkmbW92CSgmd3BhcmFtKDMpLCJlY3giKTsKKworCSZtb3YJKCRaaGgsJkRXUCgwLCRabGwpKTsJCSMgbG9hZCBYaVsxNl0KKwkmbW92CSgkWmhsLCZEV1AoNCwkWmxsKSk7CisJJm1vdgkoJFpsaCwmRFdQKDgsJFpsbCkpOworCSZtb3YJKCRabGwsJkRXUCgxMiwkWmxsKSk7CisKKwkmZGVwb3NpdF9yZW1fNGJpdCgxNik7CisKKyAgICAmc2V0X2xhYmVsKCJ4ODZfb3V0ZXJfbG9vcCIsMTYpOworCSZ4b3IJKCRabGwsJkRXUCgxMiwkaW5wKSk7CQkjIHhvciB3aXRoIGlucHV0CisJJnhvcgkoJFpsaCwmRFdQKDgsJGlucCkpOworCSZ4b3IJKCRaaGwsJkRXUCg0LCRpbnApKTsKKwkmeG9yCSgkWmhoLCZEV1AoMCwkaW5wKSk7CisJJm1vdgkoJkRXUCgxMiwiZXNwIiksJFpsbCk7CQkjIGR1bXAgaXQgb24gc3RhY2sKKwkmbW92CSgmRFdQKDgsImVzcCIpLCRabGgpOworCSZtb3YJKCZEV1AoNCwiZXNwIiksJFpobCk7CisJJm1vdgkoJkRXUCgwLCJlc3AiKSwkWmhoKTsKKworCSZzaHIJKCRabGwsMjApOworCSZhbmQJKCRabGwsMHhmMCk7CisKKwlpZiAoJHVucm9sbCkgeworCQkmY2FsbAkoIl94ODZfZ211bHRfNGJpdF9pbm5lciIpOworCX0gZWxzZSB7CisJCSZ4ODZfbG9vcCgwKTsKKwkJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsKKwl9CisJJmxlYQkoJGlucCwmRFdQKDE2LCRpbnApKTsKKwkmY21wCSgkaW5wLCZ3cGFyYW0oMykpOworCSZtb3YJKCZ3cGFyYW0oMiksJGlucCkJaWYgKCEkdW5yb2xsKTsKKwkmamIJKCZsYWJlbCgieDg2X291dGVyX2xvb3AiKSk7CisKKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKKwkmbW92CSgmRFdQKDEyLCRpbnApLCRabGwpOworCSZtb3YJKCZEV1AoOCwkaW5wKSwkWmxoKTsKKwkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CisJJm1vdgkoJkRXUCgwLCRpbnApLCRaaGgpOworCSZzdGFja19wb3AoMTYrNCsxKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0Ii4kc3VmZml4KTsKKwwKK2lmICghJHg4Nm9ubHkpIHt7eworCismc3RhdGljX2xhYmVsKCJyZW1fNGJpdCIpOworCitpZiAoISRzc2UyKSB7ewkjIHB1cmUtTU1YICJNYXkiIHZlcnNpb24uLi4KKworJFM9MTI7CQkjIHNoaWZ0IGZhY3RvciBmb3IgcmVtXzRiaXQKKworJmZ1bmN0aW9uX2JlZ2luX0IoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOworIyBNTVggdmVyc2lvbiBwZXJmb3JtcyAzLjUgdGltZXMgYmV0dGVyIG9uIFA0IChzZWUgY29tbWVudCBpbiBub24tTU1YCisjIHJvdXRpbmUgZm9yIGZ1cnRoZXIgZGV0YWlscyksIDEwMCUgYmV0dGVyIG9uIE9wdGVyb24sIH43MCUgYmV0dGVyCisjIG9uIENvcmUyIGFuZCBQSUlJLi4uIEluIG90aGVyIHdvcmRzIGVmZm9ydCBpcyBjb25zaWRlcmVkIHRvIGJlIHdlbGwKKyMgc3BlbnQuLi4gU2luY2UgaW5pdGlhbCByZWxlYXNlIHRoZSBsb29wIHdhcyB1bnJvbGxlZCBpbiBvcmRlciB0bworIyAibGliZXJhdGUiIHJlZ2lzdGVyIHByZXZpb3VzbHkgdXNlZCBhcyBsb29wIGNvdW50ZXIuIEluc3RlYWQgaXQncworIyB1c2VkIHRvIG9wdGltaXplIGNyaXRpY2FsIHBhdGggaW4gJ1ouaGkgXj0gcmVtXzRiaXRbWi5sbyYweGZdJy4KKyMgVGhlIHBhdGggaW52b2x2ZXMgbW92ZSBvZiBaLmxvIGZyb20gTU1YIHRvIGludGVnZXIgcmVnaXN0ZXIsCisjIGVmZmVjdGl2ZSBhZGRyZXNzIGNhbGN1bGF0aW9uIGFuZCBmaW5hbGx5IG1lcmdlIG9mIHZhbHVlIHRvIFouaGkuCisjIFJlZmVyZW5jZSB0byByZW1fNGJpdCBpcyBzY2hlZHVsZWQgc28gbGF0ZSB0aGF0IEkgaGFkIHRvID4+NAorIyByZW1fNGJpdCBlbGVtZW50cy4gVGhpcyByZXN1bHRlZCBpbiAyMC00NSUgcHJvY2VudCBpbXByb3ZlbWVudAorIyBvbiBjb250ZW1wb3JhcnkgtS1hcmNocy4KK3sKKyAgICBteSAkY250OworICAgIG15ICRyZW1fNGJpdCA9ICJlYXgiOworICAgIG15IEByZW0gPSAoJFpoaCwkWmxsKTsKKyAgICBteSAkbmhpID0gJFpobDsKKyAgICBteSAkbmxvID0gJFpsaDsKKworICAgIG15ICgkWmxvLCRaaGkpID0gKCJtbTAiLCJtbTEiKTsKKyAgICBteSAkdG1wID0gIm1tMiI7CisKKwkmeG9yCSgkbmxvLCRubG8pOwkjIGF2b2lkIHBhcnRpYWwgcmVnaXN0ZXIgc3RhbGxzIG9uIFBJSUkKKwkmbW92CSgkbmhpLCRabGwpOworCSZtb3YJKCZMQigkbmxvKSwmTEIoJG5oaSkpOworCSZzaGwJKCZMQigkbmxvKSw0KTsKKwkmYW5kCSgkbmhpLDB4ZjApOworCSZtb3ZxCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CisJJm1vdnEJKCRaaGksJlFXUCgwLCRIdGJsLCRubG8pKTsKKwkmbW92ZAkoJHJlbVswXSwkWmxvKTsKKworCWZvciAoJGNudD0yODskY250Pj0tMjskY250LS0pIHsKKwkgICAgbXkgJG9kZCA9ICRjbnQmMTsKKwkgICAgbXkgJG5peCA9ICRvZGQgPyAkbmxvIDogJG5oaTsKKworCQkmc2hsCSgmTEIoJG5sbyksNCkJCQlpZiAoJG9kZCk7CisJCSZwc3JscQkoJFpsbyw0KTsKKwkJJm1vdnEJKCR0bXAsJFpoaSk7CisJCSZwc3JscQkoJFpoaSw0KTsKKwkJJnB4b3IJKCRabG8sJlFXUCg4LCRIdGJsLCRuaXgpKTsKKwkJJm1vdgkoJkxCKCRubG8pLCZCUCgkY250LzIsJGlucCkpCWlmICghJG9kZCAmJiAkY250Pj0wKTsKKwkJJnBzbGxxCSgkdG1wLDYwKTsKKwkJJmFuZAkoJG5oaSwweGYwKQkJCWlmICgkb2RkKTsKKwkJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtWzFdLDgpKSBpZiAoJGNudDwyOCk7CisJCSZhbmQJKCRyZW1bMF0sMHhmKTsKKwkJJnB4b3IJKCRaaGksJlFXUCgwLCRIdGJsLCRuaXgpKTsKKwkJJm1vdgkoJG5oaSwkbmxvKQkJCWlmICghJG9kZCAmJiAkY250Pj0wKTsKKwkJJm1vdmQJKCRyZW1bMV0sJFpsbyk7CisJCSZweG9yCSgkWmxvLCR0bXApOworCisJCXB1c2gJKEByZW0sc2hpZnQoQHJlbSkpOwkJIyAicm90YXRlIiByZWdpc3RlcnMKKwl9CisKKwkmbW92CSgkaW5wLCZEV1AoNCwkcmVtXzRiaXQsJHJlbVsxXSw4KSk7CSMgbGFzdCByZW1fNGJpdFtyZW1dCisKKwkmcHNybHEJKCRabG8sMzIpOwkjIGxvd2VyIHBhcnQgb2YgWmxvIGlzIGFscmVhZHkgdGhlcmUKKwkmbW92ZAkoJFpobCwkWmhpKTsKKwkmcHNybHEJKCRaaGksMzIpOworCSZtb3ZkCSgkWmxoLCRabG8pOworCSZtb3ZkCSgkWmhoLCRaaGkpOworCSZzaGwJKCRpbnAsNCk7CSMgY29tcGVuc2F0ZSBmb3IgcmVtXzRiaXRbaV0gYmVpbmcgPj40CisKKwkmYnN3YXAJKCRabGwpOworCSZic3dhcAkoJFpobCk7CisJJmJzd2FwCSgkWmxoKTsKKwkmeG9yCSgkWmhoLCRpbnApOworCSZic3dhcAkoJFpoaCk7CisKKwkmcmV0CSgpOworfQorJmZ1bmN0aW9uX2VuZF9CKCJfbW14X2dtdWx0XzRiaXRfaW5uZXIiKTsKKworJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ211bHRfNGJpdF9tbXgiKTsKKwkmbW92CSgkaW5wLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKKwkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJIyBsb2FkIEh0YWJsZQorCisJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOworCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOworCSZibGluZHBvcCgiZWF4Iik7CisJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoInJlbV80Yml0IikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVheCIpKTsKKworCSZtb3Z6CSgkWmxsLCZCUCgxNSwkaW5wKSk7CisKKwkmY2FsbAkoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOworCisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCisJJmVtbXMJKCk7CisJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKKwkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CisJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOworCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0X21teCIpOworDAorIyBTdHJlYW1lZCB2ZXJzaW9uIHBlcmZvcm1zIDIwJSBiZXR0ZXIgb24gUDQsIDclIG9uIE9wdGVyb24sCisjIDEwJSBvbiBDb3JlMiBhbmQgUElJSS4uLgorJmZ1bmN0aW9uX2JlZ2luKCJnY21fZ2hhc2hfNGJpdF9tbXgiKTsKKwkmbW92CSgkWmhoLCZ3cGFyYW0oMCkpOwkjIGxvYWQgWGkKKwkmbW92CSgkSHRibCwmd3BhcmFtKDEpKTsJIyBsb2FkIEh0YWJsZQorCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CSMgbG9hZCBpbgorCSZtb3YJKCRabGgsJndwYXJhbSgzKSk7CSMgbG9hZCBsZW4KKworCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKKwkmYmxpbmRwb3AoImVheCIpOworCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJyZW1fNGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYXgiKSk7CisKKwkmYWRkCSgkWmxoLCRpbnApOworCSZtb3YJKCZ3cGFyYW0oMyksJFpsaCk7CSMgbGVuIHRvIHBvaW50IGF0IHRoZSBlbmQgb2YgaW5wdXQKKwkmc3RhY2tfcHVzaCg0KzEpOwkJIyArMSBmb3Igc3RhY2sgYWxpZ25tZW50CisKKwkmbW92CSgkWmxsLCZEV1AoMTIsJFpoaCkpOwkjIGxvYWQgWGlbMTZdCisJJm1vdgkoJFpobCwmRFdQKDQsJFpoaCkpOworCSZtb3YJKCRabGgsJkRXUCg4LCRaaGgpKTsKKwkmbW92CSgkWmhoLCZEV1AoMCwkWmhoKSk7CisJJmptcAkoJmxhYmVsKCJtbXhfb3V0ZXJfbG9vcCIpKTsKKworICAgICZzZXRfbGFiZWwoIm1teF9vdXRlcl9sb29wIiwxNik7CisJJnhvcgkoJFpsbCwmRFdQKDEyLCRpbnApKTsKKwkmeG9yCSgkWmhsLCZEV1AoNCwkaW5wKSk7CisJJnhvcgkoJFpsaCwmRFdQKDgsJGlucCkpOworCSZ4b3IJKCRaaGgsJkRXUCgwLCRpbnApKTsKKwkmbW92CSgmd3BhcmFtKDIpLCRpbnApOworCSZtb3YJKCZEV1AoMTIsImVzcCIpLCRabGwpOworCSZtb3YJKCZEV1AoNCwiZXNwIiksJFpobCk7CisJJm1vdgkoJkRXUCg4LCJlc3AiKSwkWmxoKTsKKwkmbW92CSgmRFdQKDAsImVzcCIpLCRaaGgpOworCisJJm1vdgkoJGlucCwiZXNwIik7CisJJnNocgkoJFpsbCwyNCk7CisKKwkmY2FsbAkoIl9tbXhfZ211bHRfNGJpdF9pbm5lciIpOworCisJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsKKwkmbGVhCSgkaW5wLCZEV1AoMTYsJGlucCkpOworCSZjbXAJKCRpbnAsJndwYXJhbSgzKSk7CisJJmpiCSgmbGFiZWwoIm1teF9vdXRlcl9sb29wIikpOworCisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCisJJmVtbXMJKCk7CisJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKKwkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CisJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOworCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKKworCSZzdGFja19wb3AoNCsxKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0X21teCIpOworDAorfX0gZWxzZSB7ewkjICJKdW5lIiBNTVggdmVyc2lvbi4uLgorCQkjIC4uLiBoYXMgc2xvd2VyICJBcHJpbCIgZ2NtX2dtdWx0XzRiaXRfbW14IHdpdGggZm9sZGVkCisJCSMgbG9vcC4gVGhpcyBpcyBkb25lIHRvIGNvbnNlcnZlIGNvZGUgc2l6ZS4uLgorJFM9MTY7CQkjIHNoaWZ0IGZhY3RvciBmb3IgcmVtXzRiaXQKKworc3ViIG1teF9sb29wKCkgeworIyBNTVggdmVyc2lvbiBwZXJmb3JtcyAyLjggdGltZXMgYmV0dGVyIG9uIFA0IChzZWUgY29tbWVudCBpbiBub24tTU1YCisjIHJvdXRpbmUgZm9yIGZ1cnRoZXIgZGV0YWlscyksIDQwJSBiZXR0ZXIgb24gT3B0ZXJvbiBhbmQgQ29yZTIsIDUwJQorIyBiZXR0ZXIgb24gUElJSS4uLiBJbiBvdGhlciB3b3JkcyBlZmZvcnQgaXMgY29uc2lkZXJlZCB0byBiZSB3ZWxsCisjIHNwZW50Li4uCisgICAgbXkgJGlucCA9IHNoaWZ0OworICAgIG15ICRyZW1fNGJpdCA9IHNoaWZ0OworICAgIG15ICRjbnQgPSAkWmhoOworICAgIG15ICRuaGkgPSAkWmhsOworICAgIG15ICRubG8gPSAkWmxoOworICAgIG15ICRyZW0gPSAkWmxsOworCisgICAgbXkgKCRabG8sJFpoaSkgPSAoIm1tMCIsIm1tMSIpOworICAgIG15ICR0bXAgPSAibW0yIjsKKworCSZ4b3IJKCRubG8sJG5sbyk7CSMgYXZvaWQgcGFydGlhbCByZWdpc3RlciBzdGFsbHMgb24gUElJSQorCSZtb3YJKCRuaGksJFpsbCk7CisJJm1vdgkoJkxCKCRubG8pLCZMQigkbmhpKSk7CisJJm1vdgkoJGNudCwxNCk7CisJJnNobAkoJkxCKCRubG8pLDQpOworCSZhbmQJKCRuaGksMHhmMCk7CisJJm1vdnEJKCRabG8sJlFXUCg4LCRIdGJsLCRubG8pKTsKKwkmbW92cQkoJFpoaSwmUVdQKDAsJEh0YmwsJG5sbykpOworCSZtb3ZkCSgkcmVtLCRabG8pOworCSZqbXAJKCZsYWJlbCgibW14X2xvb3AiKSk7CisKKyAgICAmc2V0X2xhYmVsKCJtbXhfbG9vcCIsMTYpOworCSZwc3JscQkoJFpsbyw0KTsKKwkmYW5kCSgkcmVtLDB4Zik7CisJJm1vdnEJKCR0bXAsJFpoaSk7CisJJnBzcmxxCSgkWmhpLDQpOworCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmhpKSk7CisJJm1vdgkoJkxCKCRubG8pLCZCUCgwLCRpbnAsJGNudCkpOworCSZwc2xscQkoJHRtcCw2MCk7CisJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKKwkmZGVjCSgkY250KTsKKwkmbW92ZAkoJHJlbSwkWmxvKTsKKwkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5oaSkpOworCSZtb3YJKCRuaGksJG5sbyk7CisJJnB4b3IJKCRabG8sJHRtcCk7CisJJmpzCSgmbGFiZWwoIm1teF9icmVhayIpKTsKKworCSZzaGwJKCZMQigkbmxvKSw0KTsKKwkmYW5kCSgkcmVtLDB4Zik7CisJJnBzcmxxCSgkWmxvLDQpOworCSZhbmQJKCRuaGksMHhmMCk7CisJJm1vdnEJKCR0bXAsJFpoaSk7CisJJnBzcmxxCSgkWmhpLDQpOworCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CisJJnBzbGxxCSgkdG1wLDYwKTsKKwkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOworCSZtb3ZkCSgkcmVtLCRabG8pOworCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CisJJnB4b3IJKCRabG8sJHRtcCk7CisJJmptcAkoJmxhYmVsKCJtbXhfbG9vcCIpKTsKKworICAgICZzZXRfbGFiZWwoIm1teF9icmVhayIsMTYpOworCSZzaGwJKCZMQigkbmxvKSw0KTsKKwkmYW5kCSgkcmVtLDB4Zik7CisJJnBzcmxxCSgkWmxvLDQpOworCSZhbmQJKCRuaGksMHhmMCk7CisJJm1vdnEJKCR0bXAsJFpoaSk7CisJJnBzcmxxCSgkWmhpLDQpOworCSZweG9yCSgkWmxvLCZRV1AoOCwkSHRibCwkbmxvKSk7CisJJnBzbGxxCSgkdG1wLDYwKTsKKwkmcHhvcgkoJFpoaSwmUVdQKDAsJHJlbV80Yml0LCRyZW0sOCkpOworCSZtb3ZkCSgkcmVtLCRabG8pOworCSZweG9yCSgkWmhpLCZRV1AoMCwkSHRibCwkbmxvKSk7CisJJnB4b3IJKCRabG8sJHRtcCk7CisKKwkmcHNybHEJKCRabG8sNCk7CisJJmFuZAkoJHJlbSwweGYpOworCSZtb3ZxCSgkdG1wLCRaaGkpOworCSZwc3JscQkoJFpoaSw0KTsKKwkmcHhvcgkoJFpsbywmUVdQKDgsJEh0YmwsJG5oaSkpOworCSZwc2xscQkoJHRtcCw2MCk7CisJJnB4b3IJKCRaaGksJlFXUCgwLCRyZW1fNGJpdCwkcmVtLDgpKTsKKwkmbW92ZAkoJHJlbSwkWmxvKTsKKwkmcHhvcgkoJFpoaSwmUVdQKDAsJEh0YmwsJG5oaSkpOworCSZweG9yCSgkWmxvLCR0bXApOworCisJJnBzcmxxCSgkWmxvLDMyKTsJIyBsb3dlciBwYXJ0IG9mIFpsbyBpcyBhbHJlYWR5IHRoZXJlCisJJm1vdmQJKCRaaGwsJFpoaSk7CisJJnBzcmxxCSgkWmhpLDMyKTsKKwkmbW92ZAkoJFpsaCwkWmxvKTsKKwkmbW92ZAkoJFpoaCwkWmhpKTsKKworCSZic3dhcAkoJFpsbCk7CisJJmJzd2FwCSgkWmhsKTsKKwkmYnN3YXAJKCRabGgpOworCSZic3dhcAkoJFpoaCk7Cit9CisKKyZmdW5jdGlvbl9iZWdpbigiZ2NtX2dtdWx0XzRiaXRfbW14Iik7CisJJm1vdgkoJGlucCwmd3BhcmFtKDApKTsJIyBsb2FkIFhpCisJJm1vdgkoJEh0YmwsJndwYXJhbSgxKSk7CSMgbG9hZCBIdGFibGUKKworCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsKKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKKwkmYmxpbmRwb3AoImVheCIpOworCSZsZWEJKCJlYXgiLCZEV1AoJmxhYmVsKCJyZW1fNGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYXgiKSk7CisKKwkmbW92egkoJFpsbCwmQlAoMTUsJGlucCkpOworCisJJm1teF9sb29wKCRpbnAsImVheCIpOworCisJJmVtbXMJKCk7CisJJm1vdgkoJkRXUCgxMiwkaW5wKSwkWmxsKTsKKwkmbW92CSgmRFdQKDQsJGlucCksJFpobCk7CisJJm1vdgkoJkRXUCg4LCRpbnApLCRabGgpOworCSZtb3YJKCZEV1AoMCwkaW5wKSwkWmhoKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9nbXVsdF80Yml0X21teCIpOworDAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCZWxvdyBzdWJyb3V0aW5lIGlzICI1MjhCIiB2YXJpYW50IG9mICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uCisjIChzZWUgZ2NtMTI4LmMgZm9yIGRldGFpbHMpLiBJdCBwcm92aWRlcyBmdXJ0aGVyIDIwLTQwJSBwZXJmb3JtYW5jZQorIyBpbXByb3ZlbWVudCBvdmVyIGFib3ZlIG1lbnRpb25lZCAiTWF5IiB2ZXJzaW9uLgorCismc3RhdGljX2xhYmVsKCJyZW1fOGJpdCIpOworCismZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF80Yml0X21teCIpOworeyBteSAoJFpsbywkWmhpKSA9ICgibW03IiwibW02Iik7CisgIG15ICRyZW1fOGJpdCA9ICJlc2kiOworICBteSAkSHRibCA9ICJlYngiOworCisgICAgIyBwYXJhbWV0ZXIgYmxvY2sKKyAgICAmbW92CSgiZWF4Iiwmd3BhcmFtKDApKTsJCSMgWGkKKyAgICAmbW92CSgiZWJ4Iiwmd3BhcmFtKDEpKTsJCSMgSHRhYmxlCisgICAgJm1vdgkoImVjeCIsJndwYXJhbSgyKSk7CQkjIGlucAorICAgICZtb3YJKCJlZHgiLCZ3cGFyYW0oMykpOwkJIyBsZW4KKyAgICAmbW92CSgiZWJwIiwiZXNwIik7CQkJIyBvcmlnaW5hbCAlZXNwCisgICAgJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOworICAgICZzZXRfbGFiZWwJKCJwaWNfcG9pbnQiKTsKKyAgICAmYmxpbmRwb3AJKCRyZW1fOGJpdCk7CisgICAgJmxlYQkoJHJlbV84Yml0LCZEV1AoJmxhYmVsKCJyZW1fOGJpdCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCRyZW1fOGJpdCkpOworCisgICAgJnN1YgkoImVzcCIsNTEyKzE2KzE2KTsJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUuLi4KKyAgICAmYW5kCSgiZXNwIiwtNjQpOwkJCSMgLi4uYW5kIGFsaWduIGl0CisgICAgJnN1YgkoImVzcCIsMTYpOwkJCSMgcGxhY2UgZm9yICh1OCkoSFtdPDw0KQorCisgICAgJmFkZAkoImVkeCIsImVjeCIpOwkJCSMgcG9pbnRlciB0byB0aGUgZW5kIG9mIGlucHV0CisgICAgJm1vdgkoJkRXUCg1MjgrMTYrMCwiZXNwIiksImVheCIpOwkjIHNhdmUgWGkKKyAgICAmbW92CSgmRFdQKDUyOCsxNis4LCJlc3AiKSwiZWR4Iik7CSMgc2F2ZSBpbnArbGVuCisgICAgJm1vdgkoJkRXUCg1MjgrMTYrMTIsImVzcCIpLCJlYnAiKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKKworICAgIHsgbXkgQGxvICA9ICgibW0wIiwibW0xIiwibW0yIik7CisgICAgICBteSBAaGkgID0gKCJtbTMiLCJtbTQiLCJtbTUiKTsKKyAgICAgIG15IEB0bXAgPSAoIm1tNiIsIm1tNyIpOworICAgICAgbXkgJG9mZjE9MCwkb2ZmMj0wLCRpOworCisgICAgICAmYWRkCSgkSHRibCwxMjgpOwkJCSMgb3B0aW1pemUgZm9yIHNpemUKKyAgICAgICZsZWEJKCJlZGkiLCZEV1AoMTYrMTI4LCJlc3AiKSk7CisgICAgICAmbGVhCSgiZWJwIiwmRFdQKDE2KzI1NisxMjgsImVzcCIpKTsKKworICAgICAgIyBkZWNvbXBvc2UgSHRhYmxlIChsb3cgYW5kIGhpZ2ggcGFydHMgYXJlIGtlcHQgc2VwYXJhdGVseSksCisgICAgICAjIGdlbmVyYXRlIEh0YWJsZVtdPj40LCAodTgpKEh0YWJsZVtdPDw0KSwgc2F2ZSB0byBzdGFjay4uLgorICAgICAgZm9yICgkaT0wOyRpPDE4OyRpKyspIHsKKworCSZtb3YJKCJlZHgiLCZEV1AoMTYqJGkrOC0xMjgsJEh0YmwpKQkJaWYgKCRpPDE2KTsKKwkmbW92cQkoJGxvWzBdLCZRV1AoMTYqJGkrOC0xMjgsJEh0YmwpKQlpZiAoJGk8MTYpOworCSZwc2xscQkoJHRtcFsxXSw2MCkJCQkJaWYgKCRpPjEpOworCSZtb3ZxCSgkaGlbMF0sJlFXUCgxNiokaSswLTEyOCwkSHRibCkpCWlmICgkaTwxNik7CisJJnBvcgkoJGxvWzJdLCR0bXBbMV0pCQkJaWYgKCRpPjEpOworCSZtb3ZxCSgmUVdQKCRvZmYxLTEyOCwiZWRpIiksJGxvWzFdKQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSZwc3JscQkoJGxvWzFdLDQpCQkJCWlmICgkaT4wICYmICRpPDE3KTsKKwkmbW92cQkoJlFXUCgkb2ZmMSwiZWRpIiksJGhpWzFdKQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSZtb3ZxCSgkdG1wWzBdLCRoaVsxXSkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CisJJm1vdnEJKCZRV1AoJG9mZjItMTI4LCJlYnAiKSwkbG9bMl0pCQlpZiAoJGk+MSk7CisJJnBzcmxxCSgkaGlbMV0sNCkJCQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSZtb3ZxCSgmUVdQKCRvZmYyLCJlYnAiKSwkaGlbMl0pCQlpZiAoJGk+MSk7CisJJnNobAkoImVkeCIsNCkJCQkJaWYgKCRpPDE2KTsKKwkmbW92CSgmQlAoJGksImVzcCIpLCZMQigiZWR4IikpCQlpZiAoJGk8MTYpOworCisJdW5zaGlmdAkoQGxvLHBvcChAbG8pKTsJCQkjICJyb3RhdGUiIHJlZ2lzdGVycworCXVuc2hpZnQJKEBoaSxwb3AoQGhpKSk7CisJdW5zaGlmdAkoQHRtcCxwb3AoQHRtcCkpOworCSRvZmYxICs9IDgJaWYgKCRpPjApOworCSRvZmYyICs9IDgJaWYgKCRpPjEpOworICAgICAgfQorICAgIH0KKworICAgICZtb3ZxCSgkWmhpLCZRV1AoMCwiZWF4IikpOworICAgICZtb3YJKCJlYngiLCZEV1AoOCwiZWF4IikpOworICAgICZtb3YJKCJlZHgiLCZEV1AoMTIsImVheCIpKTsJCSMgbG9hZCBYaQorCismc2V0X2xhYmVsKCJvdXRlciIsMTYpOworICB7IG15ICRubG8gPSAiZWF4IjsKKyAgICBteSAkZGF0ID0gImVkeCI7CisgICAgbXkgQG5oaSA9ICgiZWRpIiwiZWJwIik7CisgICAgbXkgQHJlbSA9ICgiZWJ4IiwiZWN4Iik7CisgICAgbXkgQHJlZCA9ICgibW0wIiwibW0xIiwibW0yIik7CisgICAgbXkgJHRtcCA9ICJtbTMiOworCisgICAgJnhvcgkoJGRhdCwmRFdQKDEyLCJlY3giKSk7CQkjIG1lcmdlIGlucHV0IGRhdGEKKyAgICAmeG9yCSgiZWJ4IiwmRFdQKDgsImVjeCIpKTsKKyAgICAmcHhvcgkoJFpoaSwmUVdQKDAsImVjeCIpKTsKKyAgICAmbGVhCSgiZWN4IiwmRFdQKDE2LCJlY3giKSk7CQkjIGlucCs9MTYKKyAgICAjJm1vdgkoJkRXUCg1MjgrMTIsImVzcCIpLCRkYXQpOwkjIHNhdmUgaW5wXlhpCisgICAgJm1vdgkoJkRXUCg1MjgrOCwiZXNwIiksImVieCIpOworICAgICZtb3ZxCSgmUVdQKDUyOCswLCJlc3AiKSwkWmhpKTsKKyAgICAmbW92CSgmRFdQKDUyOCsxNis0LCJlc3AiKSwiZWN4Iik7CSMgc2F2ZSBpbnAKKworICAgICZ4b3IJKCRubG8sJG5sbyk7CisgICAgJnJvbAkoJGRhdCw4KTsKKyAgICAmbW92CSgmTEIoJG5sbyksJkxCKCRkYXQpKTsKKyAgICAmbW92CSgkbmhpWzFdLCRubG8pOworICAgICZhbmQJKCZMQigkbmxvKSwweDBmKTsKKyAgICAmc2hyCSgkbmhpWzFdLDQpOworICAgICZweG9yCSgkcmVkWzBdLCRyZWRbMF0pOworICAgICZyb2wJKCRkYXQsOCk7CQkJIyBuZXh0IGJ5dGUKKyAgICAmcHhvcgkoJHJlZFsxXSwkcmVkWzFdKTsKKyAgICAmcHhvcgkoJHJlZFsyXSwkcmVkWzJdKTsKKworICAgICMgSnVzdCBsaWtlIGluICJNYXkiIHZlcnNvbiBtb2R1bG8tc2NoZWR1bGUgZm9yIGNyaXRpY2FsIHBhdGggaW4KKyAgICAjICdaLmhpIF49IHJlbV84Yml0W1oubG8mMHhmZl4oKHU4KUhbbmhpXTw8NCldPDw0OCcuIEZpbmFsICdweG9yJworICAgICMgaXMgc2NoZWR1bGVkIHNvIGxhdGUgdGhhdCByZW1fOGJpdFtdIGhhcyB0byBiZSBzaGlmdGVkICpyaWdodCoKKyAgICAjIGJ5IDE2LCB3aGljaCBpcyB3aHkgbGFzdCBhcmd1bWVudCB0byBwaW5zcncgaXMgMiwgd2hpY2gKKyAgICAjIGNvcnJlc3BvbmRzIHRvIDw8MzI9PDw0OD4+MTYuLi4KKyAgICBmb3IgKCRqPTExLCRpPTA7JGk8MTU7JGkrKykgeworCisgICAgICBpZiAoJGk+MCkgeworCSZweG9yCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5sbyw4KSk7CQkjIFpePUhbbmxvXQorCSZyb2wJKCRkYXQsOCk7CQkJCSMgbmV4dCBieXRlCisJJnB4b3IJKCRaaGksJlFXUCgxNisxMjgsImVzcCIsJG5sbyw4KSk7CisKKwkmcHhvcgkoJFpsbywkdG1wKTsKKwkmcHhvcgkoJFpoaSwmUVdQKDE2KzI1NisxMjgsImVzcCIsJG5oaVswXSw4KSk7CisJJnhvcgkoJkxCKCRyZW1bMV0pLCZCUCgwLCJlc3AiLCRuaGlbMF0pKTsJIyByZW1eKEhbbmhpXTw8NCkKKyAgICAgIH0gZWxzZSB7CisJJm1vdnEJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmxvLDgpKTsKKwkmbW92cQkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmxvLDgpKTsKKyAgICAgIH0KKworCSZtb3YJKCZMQigkbmxvKSwmTEIoJGRhdCkpOworCSZtb3YJKCRkYXQsJkRXUCg1MjgrJGosImVzcCIpKQkJaWYgKC0tJGolND09MCk7CisKKwkmbW92ZAkoJHJlbVswXSwkWmxvKTsKKwkmbW92egkoJHJlbVsxXSwmTEIoJHJlbVsxXSkpCQkJaWYgKCRpPjApOworCSZwc3JscQkoJFpsbyw4KTsJCQkJIyBaPj49OAorCisJJm1vdnEJKCR0bXAsJFpoaSk7CisJJm1vdgkoJG5oaVswXSwkbmxvKTsKKwkmcHNybHEJKCRaaGksOCk7CisKKwkmcHhvcgkoJFpsbywmUVdQKDE2KzI1NiswLCJlc3AiLCRuaGlbMV0sOCkpOwkjIFpePUhbbmhpXT4+NAorCSZhbmQJKCZMQigkbmxvKSwweDBmKTsKKwkmcHNsbHEJKCR0bXAsNTYpOworCisJJnB4b3IJKCRaaGksJHJlZFsxXSkJCQkJaWYgKCRpPjEpOworCSZzaHIJKCRuaGlbMF0sNCk7CisJJnBpbnNydwkoJHJlZFswXSwmV1AoMCwkcmVtXzhiaXQsJHJlbVsxXSwyKSwyKQlpZiAoJGk+MCk7CisKKwl1bnNoaWZ0CShAcmVkLHBvcChAcmVkKSk7CQkJIyAicm90YXRlIiByZWdpc3RlcnMKKwl1bnNoaWZ0CShAcmVtLHBvcChAcmVtKSk7CisJdW5zaGlmdAkoQG5oaSxwb3AoQG5oaSkpOworICAgIH0KKworICAgICZweG9yCSgkWmxvLCZRV1AoMTYsImVzcCIsJG5sbyw4KSk7CQkjIFpePUhbbmxvXQorICAgICZweG9yCSgkWmhpLCZRV1AoMTYrMTI4LCJlc3AiLCRubG8sOCkpOworICAgICZ4b3IJKCZMQigkcmVtWzFdKSwmQlAoMCwiZXNwIiwkbmhpWzBdKSk7CSMgcmVtXihIW25oaV08PDQpCisKKyAgICAmcHhvcgkoJFpsbywkdG1wKTsKKyAgICAmcHhvcgkoJFpoaSwmUVdQKDE2KzI1NisxMjgsImVzcCIsJG5oaVswXSw4KSk7CisgICAgJm1vdnoJKCRyZW1bMV0sJkxCKCRyZW1bMV0pKTsKKworICAgICZweG9yCSgkcmVkWzJdLCRyZWRbMl0pOwkJCSMgY2xlYXIgMm5kIHdvcmQKKyAgICAmcHNsbHEJKCRyZWRbMV0sNCk7CisKKyAgICAmbW92ZAkoJHJlbVswXSwkWmxvKTsKKyAgICAmcHNybHEJKCRabG8sNCk7CQkJCSMgWj4+PTQKKworICAgICZtb3ZxCSgkdG1wLCRaaGkpOworICAgICZwc3JscQkoJFpoaSw0KTsKKyAgICAmc2hsCSgkcmVtWzBdLDQpOwkJCQkjIHJlbTw8NAorCisgICAgJnB4b3IJKCRabG8sJlFXUCgxNiwiZXNwIiwkbmhpWzFdLDgpKTsJIyBaXj1IW25oaV0KKyAgICAmcHNsbHEJKCR0bXAsNjApOworICAgICZtb3Z6CSgkcmVtWzBdLCZMQigkcmVtWzBdKSk7CisKKyAgICAmcHhvcgkoJFpsbywkdG1wKTsKKyAgICAmcHhvcgkoJFpoaSwmUVdQKDE2KzEyOCwiZXNwIiwkbmhpWzFdLDgpKTsKKworICAgICZwaW5zcncJKCRyZWRbMF0sJldQKDAsJHJlbV84Yml0LCRyZW1bMV0sMiksMik7CisgICAgJnB4b3IJKCRaaGksJHJlZFsxXSk7CisKKyAgICAmbW92ZAkoJGRhdCwkWmxvKTsKKyAgICAmcGluc3J3CSgkcmVkWzJdLCZXUCgwLCRyZW1fOGJpdCwkcmVtWzBdLDIpLDMpOwkjIGxhc3QgaXMgPDw0OAorCisgICAgJnBzbGxxCSgkcmVkWzBdLDEyKTsJCQkJIyBjb3JyZWN0IGJ5IDw8MTY+PjQKKyAgICAmcHhvcgkoJFpoaSwkcmVkWzBdKTsKKyAgICAmcHNybHEJKCRabG8sMzIpOworICAgICZweG9yCSgkWmhpLCRyZWRbMl0pOworCisgICAgJm1vdgkoImVjeCIsJkRXUCg1MjgrMTYrNCwiZXNwIikpOwkjIHJlc3RvcmUgaW5wCisgICAgJm1vdmQJKCJlYngiLCRabG8pOworICAgICZtb3ZxCSgkdG1wLCRaaGkpOwkJCSMgMDEyMzQ1NjcKKyAgICAmcHNsbHcJKCRaaGksOCk7CQkJIyAxLjMuNS43LgorICAgICZwc3JsdwkoJHRtcCw4KTsJCQkjIC4wLjIuNC42CisgICAgJnBvcgkoJFpoaSwkdG1wKTsJCQkjIDEwMzI1NDc2CisgICAgJmJzd2FwCSgkZGF0KTsKKyAgICAmcHNodWZ3CSgkWmhpLCRaaGksMGIwMDAxMTAxMSk7CQkjIDc2NTQzMjEwCisgICAgJmJzd2FwCSgiZWJ4Iik7CisgICAgCisgICAgJmNtcAkoImVjeCIsJkRXUCg1MjgrMTYrOCwiZXNwIikpOwkjIGFyZSB3ZSBkb25lPworICAgICZqbmUJKCZsYWJlbCgib3V0ZXIiKSk7CisgIH0KKworICAgICZtb3YJKCJlYXgiLCZEV1AoNTI4KzE2KzAsImVzcCIpKTsJIyByZXN0b3JlIFhpCisgICAgJm1vdgkoJkRXUCgxMiwiZWF4IiksImVkeCIpOworICAgICZtb3YJKCZEV1AoOCwiZWF4IiksImVieCIpOworICAgICZtb3ZxCSgmUVdQKDAsImVheCIpLCRaaGkpOworCisgICAgJm1vdgkoImVzcCIsJkRXUCg1MjgrMTYrMTIsImVzcCIpKTsJIyByZXN0b3JlIG9yaWdpbmFsICVlc3AKKyAgICAmZW1tcwkoKTsKK30KKyZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF80Yml0X21teCIpOworfX0KKwwKK2lmICgkc3NlMikge3sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUENMTVVMUURRIHZlcnNpb24uCisKKyRYaXA9ImVheCI7CiskSHRibD0iZWR4IjsKKyRjb25zdD0iZWN4IjsKKyRpbnA9ImVzaSI7CiskbGVuPSJlYngiOworCisoJFhpLCRYaGkpPSgieG1tMCIsInhtbTEiKTsJJEhrZXk9InhtbTIiOworKCRUMSwkVDIsJFQzKT0oInhtbTMiLCJ4bW00IiwieG1tNSIpOworKCRYbiwkWGhuKT0oInhtbTYiLCJ4bW03Iik7CisKKyZzdGF0aWNfbGFiZWwoImJzd2FwIik7CisKK3N1YiBjbG11bDY0eDY0X1QyIHsJIyBtaW5pbWFsICJyZWdpc3RlciIgcHJlc3N1cmUKK215ICgkWGhpLCRYaSwkSGtleSk9QF87CisKKwkmbW92ZHFhCQkoJFhoaSwkWGkpOwkJIworCSZwc2h1ZmQJCSgkVDEsJFhpLDBiMDEwMDExMTApOworCSZwc2h1ZmQJCSgkVDIsJEhrZXksMGIwMTAwMTExMCk7CisJJnB4b3IJCSgkVDEsJFhpKTsJCSMKKwkmcHhvcgkJKCRUMiwkSGtleSk7CisKKwkmcGNsbXVscWRxCSgkWGksJEhrZXksMHgwMCk7CSMjIyMjIyMKKwkmcGNsbXVscWRxCSgkWGhpLCRIa2V5LDB4MTEpOwkjIyMjIyMjCisJJnBjbG11bHFkcQkoJFQxLCRUMiwweDAwKTsJCSMjIyMjIyMKKwkmeG9ycHMJCSgkVDEsJFhpKTsJCSMKKwkmeG9ycHMJCSgkVDEsJFhoaSk7CQkjCisKKwkmbW92ZHFhCQkoJFQyLCRUMSk7CQkjCisJJnBzcmxkcQkJKCRUMSw4KTsKKwkmcHNsbGRxCQkoJFQyLDgpOwkJIworCSZweG9yCQkoJFhoaSwkVDEpOworCSZweG9yCQkoJFhpLCRUMik7CQkjCit9CisKK3N1YiBjbG11bDY0eDY0X1QzIHsKKyMgRXZlbiB0aG91Z2ggdGhpcyBzdWJyb3V0aW5lIG9mZmVycyB2aXN1YWxseSBiZXR0ZXIgSUxQLCBpdAorIyB3YXMgZW1waXJpY2FsbHkgZm91bmQgdG8gYmUgYSB0YWQgc2xvd2VyIHRoYW4gYWJvdmUgdmVyc2lvbi4KKyMgQXQgbGVhc3QgaW4gZ2NtX2doYXNoX2NsbXVsIGNvbnRleHQuIEJ1dCBpdCdzIGp1c3QgYXMgd2VsbCwKKyMgYmVjYXVzZSBsb29wIG1vZHVsby1zY2hlZHVsaW5nIGlzIHBvc3NpYmxlIG9ubHkgdGhhbmtzIHRvCisjIG1pbmltaXplZCAicmVnaXN0ZXIiIHByZXNzdXJlLi4uCitteSAoJFhoaSwkWGksJEhrZXkpPUBfOworCisJJm1vdmRxYQkJKCRUMSwkWGkpOwkJIworCSZtb3ZkcWEJCSgkWGhpLCRYaSk7CisJJnBjbG11bHFkcQkoJFhpLCRIa2V5LDB4MDApOwkjIyMjIyMjCisJJnBjbG11bHFkcQkoJFhoaSwkSGtleSwweDExKTsJIyMjIyMjIworCSZwc2h1ZmQJCSgkVDIsJFQxLDBiMDEwMDExMTApOwkjCisJJnBzaHVmZAkJKCRUMywkSGtleSwwYjAxMDAxMTEwKTsKKwkmcHhvcgkJKCRUMiwkVDEpOwkJIworCSZweG9yCQkoJFQzLCRIa2V5KTsKKwkmcGNsbXVscWRxCSgkVDIsJFQzLDB4MDApOwkJIyMjIyMjIworCSZweG9yCQkoJFQyLCRYaSk7CQkjCisJJnB4b3IJCSgkVDIsJFhoaSk7CQkjCisKKwkmbW92ZHFhCQkoJFQzLCRUMik7CQkjCisJJnBzcmxkcQkJKCRUMiw4KTsKKwkmcHNsbGRxCQkoJFQzLDgpOwkJIworCSZweG9yCQkoJFhoaSwkVDIpOworCSZweG9yCQkoJFhpLCRUMyk7CQkjCit9CisMCitpZiAoMSkgewkJIyBBbGdvcml0aG0gOSB3aXRoIDw8MSB0d2lzdC4KKwkJCSMgUmVkdWN0aW9uIGlzIHNob3J0ZXIgYW5kIHVzZXMgb25seSB0d28KKwkJCSMgdGVtcG9yYXJ5IHJlZ2lzdGVycywgd2hpY2ggbWFrZXMgaXQgYmV0dGVyCisJCQkjIGNhbmRpZGF0ZSBmb3IgaW50ZXJsZWF2aW5nIHdpdGggNjR4NjQKKwkJCSMgbXVsdGlwbGljYXRpb24uIFByZS1tb2R1bG8tc2NoZWR1bGVkIGxvb3AKKwkJCSMgd2FzIGZvdW5kIHRvIGJlIH4yMCUgZmFzdGVyIHRoYW4gQWxnb3JpdGhtIDUKKwkJCSMgYmVsb3cuIEFsZ29yaXRobSA5IHdhcyB0aGVyZWZvcmUgY2hvc2VuIGZvcgorCQkJIyBmdXJ0aGVyIG9wdGltaXphdGlvbi4uLgorCitzdWIgcmVkdWN0aW9uX2FsZzkgewkjIDE3LzEzIHRpbWVzIGZhc3RlciB0aGFuIEludGVsIHZlcnNpb24KK215ICgkWGhpLCRYaSkgPSBAXzsKKworCSMgMXN0IHBoYXNlCisJJm1vdmRxYQkJKCRUMSwkWGkpCQkjCisJJnBzbGxxCQkoJFhpLDEpOworCSZweG9yCQkoJFhpLCRUMSk7CQkjCisJJnBzbGxxCQkoJFhpLDUpOwkJIworCSZweG9yCQkoJFhpLCRUMSk7CQkjCisJJnBzbGxxCQkoJFhpLDU3KTsJCSMKKwkmbW92ZHFhCQkoJFQyLCRYaSk7CQkjCisJJnBzbGxkcQkJKCRYaSw4KTsKKwkmcHNybGRxCQkoJFQyLDgpOwkJIworCSZweG9yCQkoJFhpLCRUMSk7CisJJnB4b3IJCSgkWGhpLCRUMik7CQkjCisKKwkjIDJuZCBwaGFzZQorCSZtb3ZkcWEJCSgkVDIsJFhpKTsKKwkmcHNybHEJCSgkWGksNSk7CisJJnB4b3IJCSgkWGksJFQyKTsJCSMKKwkmcHNybHEJCSgkWGksMSk7CQkjCisJJnB4b3IJCSgkWGksJFQyKTsJCSMKKwkmcHhvcgkJKCRUMiwkWGhpKTsKKwkmcHNybHEJCSgkWGksMSk7CQkjCisJJnB4b3IJCSgkWGksJFQyKTsJCSMKK30KKworJmZ1bmN0aW9uX2JlZ2luX0IoImdjbV9pbml0X2NsbXVsIik7CisJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMCkpOworCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMSkpOworCisJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKKyZzZXRfbGFiZWwoInBpYyIpOworCSZibGluZHBvcAkoJGNvbnN0KTsKKwkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOworCisJJm1vdmRxdQkJKCRIa2V5LCZRV1AoMCwkWGlwKSk7CisJJnBzaHVmZAkJKCRIa2V5LCRIa2V5LDBiMDEwMDExMTApOyMgZHdvcmQgc3dhcAorCisJIyA8PDEgdHdpc3QKKwkmcHNodWZkCQkoJFQyLCRIa2V5LDBiMTExMTExMTEpOwkjIGJyb2FkY2FzdCB1cHBlcm1vc3QgZHdvcmQKKwkmbW92ZHFhCQkoJFQxLCRIa2V5KTsKKwkmcHNsbHEJCSgkSGtleSwxKTsKKwkmcHhvcgkJKCRUMywkVDMpOwkJIworCSZwc3JscQkJKCRUMSw2Myk7CisJJnBjbXBndGQJKCRUMywkVDIpOwkJIyBicm9hZGNhc3QgY2FycnkgYml0CisJJnBzbGxkcQkJKCRUMSw4KTsKKwkmcG9yCQkoJEhrZXksJFQxKTsJCSMgSDw8PTEKKworCSMgbWFnaWMgcmVkdWN0aW9uCisJJnBhbmQJCSgkVDMsJlFXUCgxNiwkY29uc3QpKTsJIyAweDFjMl9wb2x5bm9taWFsCisJJnB4b3IJCSgkSGtleSwkVDMpOwkJIyBpZihjYXJyeSkgSF49MHgxYzJfcG9seW5vbWlhbAorCisJIyBjYWxjdWxhdGUgSF4yCisJJm1vdmRxYQkJKCRYaSwkSGtleSk7CisJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsKKwkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKKworCSZtb3ZkcXUJCSgmUVdQKDAsJEh0YmwpLCRIa2V5KTsJIyBzYXZlIEgKKwkmbW92ZHF1CQkoJlFXUCgxNiwkSHRibCksJFhpKTsJIyBzYXZlIEheMgorCisJJnJldAkJKCk7CismZnVuY3Rpb25fZW5kX0IoImdjbV9pbml0X2NsbXVsIik7CisKKyZmdW5jdGlvbl9iZWdpbl9CKCJnY21fZ211bHRfY2xtdWwiKTsKKwkmbW92CQkoJFhpcCwmd3BhcmFtKDApKTsKKwkmbW92CQkoJEh0YmwsJndwYXJhbSgxKSk7CisKKwkmY2FsbAkJKCZsYWJlbCgicGljIikpOworJnNldF9sYWJlbCgicGljIik7CisJJmJsaW5kcG9wCSgkY29uc3QpOworCSZsZWEJCSgkY29uc3QsJkRXUCgmbGFiZWwoImJzd2FwIikuIi0iLiZsYWJlbCgicGljIiksJGNvbnN0KSk7CisKKwkmbW92ZHF1CQkoJFhpLCZRV1AoMCwkWGlwKSk7CisJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CisJJm1vdnVwcwkJKCRIa2V5LCZRV1AoMCwkSHRibCkpOworCSZwc2h1ZmIJCSgkWGksJFQzKTsKKworCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleSk7CisJJnJlZHVjdGlvbl9hbGc5CSgkWGhpLCRYaSk7CisKKwkmcHNodWZiCQkoJFhpLCRUMyk7CisJJm1vdmRxdQkJKCZRV1AoMCwkWGlwKSwkWGkpOworCisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiZ2NtX2dtdWx0X2NsbXVsIik7CisKKyZmdW5jdGlvbl9iZWdpbigiZ2NtX2doYXNoX2NsbXVsIik7CisJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CisJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOworCSZtb3YJCSgkaW5wLCZ3cGFyYW0oMikpOworCSZtb3YJCSgkbGVuLCZ3cGFyYW0oMykpOworCisJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKKyZzZXRfbGFiZWwoInBpYyIpOworCSZibGluZHBvcAkoJGNvbnN0KTsKKwkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOworCisJJm1vdmRxdQkJKCRYaSwmUVdQKDAsJFhpcCkpOworCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOworCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKKwkmcHNodWZiCQkoJFhpLCRUMyk7CisKKwkmc3ViCQkoJGxlbiwweDEwKTsKKwkmanoJCSgmbGFiZWwoIm9kZF90YWlsIikpOworCisJIyMjIyMjIworCSMgWGkrMiA9W0gqKElpKzEgKyBYaSsxKV0gbW9kIFAgPQorCSMJWyhIKklpKzEpICsgKEgqWGkrMSldIG1vZCBQID0KKwkjCVsoSCpJaSsxKSArIEheMiooSWkrWGkpXSBtb2QgUAorCSMKKwkmbW92ZHF1CQkoJFQxLCZRV1AoMCwkaW5wKSk7CSMgSWkKKwkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKKwkmcHNodWZiCQkoJFQxLCRUMyk7CisJJnBzaHVmYgkJKCRYbiwkVDMpOworCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCisKKwkmY2xtdWw2NHg2NF9UMgkoJFhobiwkWG4sJEhrZXkpOwkjIEgqSWkrMQorCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDE2LCRIdGJsKSk7CSMgbG9hZCBIXjIKKworCSZsZWEJCSgkaW5wLCZEV1AoMzIsJGlucCkpOwkjIGkrPTIKKwkmc3ViCQkoJGxlbiwweDIwKTsKKwkmamJlCQkoJmxhYmVsKCJldmVuX3RhaWwiKSk7CisKKyZzZXRfbGFiZWwoIm1vZF9sb29wIik7CisJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsJIyBIXjIqKElpK1hpKQorCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQorCSZtb3Z1cHMJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKKworCSZweG9yCQkoJFhpLCRYbik7CQkjIChIKklpKzEpICsgSF4yKihJaStYaSkKKwkmcHhvcgkJKCRYaGksJFhobik7CisKKwkmbW92ZHF1CQkoJFhuLCZRV1AoMTYsJGlucCkpOwkjIElpKzEKKwkmcHNodWZiCQkoJFQxLCRUMyk7CisJJnBzaHVmYgkJKCRYbiwkVDMpOworCisJJm1vdmRxYQkJKCRUMywkWG4pOwkJIyZjbG11bDY0eDY0X1RYCSgkWGhuLCRYbiwkSGtleSk7IEgqSWkrMQorCSZtb3ZkcWEJCSgkWGhuLCRYbik7CisJICZweG9yCQkoJFhoaSwkVDEpOwkJIyAiSWkrWGkiLCBjb25zdW1lIGVhcmx5CisKKwkgICZtb3ZkcWEJKCRUMSwkWGkpCQkjJnJlZHVjdGlvbl9hbGc5KCRYaGksJFhpKTsgMXN0IHBoYXNlCisJICAmcHNsbHEJKCRYaSwxKTsKKwkgICZweG9yCQkoJFhpLCRUMSk7CQkjCisJICAmcHNsbHEJKCRYaSw1KTsJCSMKKwkgICZweG9yCQkoJFhpLCRUMSk7CQkjCisJJnBjbG11bHFkcQkoJFhuLCRIa2V5LDB4MDApOwkjIyMjIyMjCisJICAmcHNsbHEJKCRYaSw1Nyk7CQkjCisJICAmbW92ZHFhCSgkVDIsJFhpKTsJCSMKKwkgICZwc2xsZHEJKCRYaSw4KTsKKwkgICZwc3JsZHEJKCRUMiw4KTsJCSMJCisJICAmcHhvcgkJKCRYaSwkVDEpOworCSZwc2h1ZmQJCSgkVDEsJFQzLDBiMDEwMDExMTApOworCSAgJnB4b3IJCSgkWGhpLCRUMik7CQkjCisJJnB4b3IJCSgkVDEsJFQzKTsKKwkmcHNodWZkCQkoJFQzLCRIa2V5LDBiMDEwMDExMTApOworCSZweG9yCQkoJFQzLCRIa2V5KTsJCSMKKworCSZwY2xtdWxxZHEJKCRYaG4sJEhrZXksMHgxMSk7CSMjIyMjIyMKKwkgICZtb3ZkcWEJKCRUMiwkWGkpOwkJIyAybmQgcGhhc2UKKwkgICZwc3JscQkoJFhpLDUpOworCSAgJnB4b3IJCSgkWGksJFQyKTsJCSMKKwkgICZwc3JscQkoJFhpLDEpOwkJIworCSAgJnB4b3IJCSgkWGksJFQyKTsJCSMKKwkgICZweG9yCQkoJFQyLCRYaGkpOworCSAgJnBzcmxxCSgkWGksMSk7CQkjCisJICAmcHhvcgkJKCRYaSwkVDIpOwkJIworCisJJnBjbG11bHFkcQkoJFQxLCRUMywweDAwKTsJCSMjIyMjIyMKKwkmbW92dXBzCQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCisJJnhvcnBzCQkoJFQxLCRYbik7CQkjCisJJnhvcnBzCQkoJFQxLCRYaG4pOwkJIworCisJJm1vdmRxYQkJKCRUMywkVDEpOwkJIworCSZwc3JsZHEJCSgkVDEsOCk7CisJJnBzbGxkcQkJKCRUMyw4KTsJCSMKKwkmcHhvcgkJKCRYaG4sJFQxKTsKKwkmcHhvcgkJKCRYbiwkVDMpOwkJIworCSZtb3ZkcWEJCSgkVDMsJlFXUCgwLCRjb25zdCkpOworCisJJmxlYQkJKCRpbnAsJkRXUCgzMiwkaW5wKSk7CisJJnN1YgkJKCRsZW4sMHgyMCk7CisJJmphCQkoJmxhYmVsKCJtb2RfbG9vcCIpKTsKKworJnNldF9sYWJlbCgiZXZlbl90YWlsIik7CisJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsJIyBIXjIqKElpK1hpKQorCisJJnB4b3IJCSgkWGksJFhuKTsJCSMgKEgqSWkrMSkgKyBIXjIqKElpK1hpKQorCSZweG9yCQkoJFhoaSwkWGhuKTsKKworCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOworCisJJnRlc3QJCSgkbGVuLCRsZW4pOworCSZqbnoJCSgmbGFiZWwoImRvbmUiKSk7CisKKwkmbW92dXBzCQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICismc2V0X2xhYmVsKCJvZGRfdGFpbCIpOworCSZtb3ZkcXUJCSgkVDEsJlFXUCgwLCRpbnApKTsJIyBJaQorCSZwc2h1ZmIJCSgkVDEsJFQzKTsKKwkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQorCisJJmNsbXVsNjR4NjRfVDIJKCRYaGksJFhpLCRIa2V5KTsJIyBIKihJaStYaSkKKwkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKKworJnNldF9sYWJlbCgiZG9uZSIpOworCSZwc2h1ZmIJCSgkWGksJFQzKTsKKwkmbW92ZHF1CQkoJlFXUCgwLCRYaXApLCRYaSk7CismZnVuY3Rpb25fZW5kKCJnY21fZ2hhc2hfY2xtdWwiKTsKKwwKK30gZWxzZSB7CQkjIEFsZ29yaXRoIDUuIEtlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3Nlcy4KKworc3ViIHJlZHVjdGlvbl9hbGc1IHsJIyAxOS8xNiB0aW1lcyBmYXN0ZXIgdGhhbiBJbnRlbCB2ZXJzaW9uCitteSAoJFhoaSwkWGkpPUBfOworCisJIyA8PDEKKwkmbW92ZHFhCQkoJFQxLCRYaSk7CQkjCisJJm1vdmRxYQkJKCRUMiwkWGhpKTsKKwkmcHNsbGQJCSgkWGksMSk7CisJJnBzbGxkCQkoJFhoaSwxKTsJCSMKKwkmcHNybGQJCSgkVDEsMzEpOworCSZwc3JsZAkJKCRUMiwzMSk7CQkjCisJJm1vdmRxYQkJKCRUMywkVDEpOworCSZwc2xsZHEJCSgkVDEsNCk7CisJJnBzcmxkcQkJKCRUMywxMik7CQkjCisJJnBzbGxkcQkJKCRUMiw0KTsKKwkmcG9yCQkoJFhoaSwkVDMpOwkJIworCSZwb3IJCSgkWGksJFQxKTsKKwkmcG9yCQkoJFhoaSwkVDIpOwkJIworCisJIyAxc3QgcGhhc2UKKwkmbW92ZHFhCQkoJFQxLCRYaSk7CisJJm1vdmRxYQkJKCRUMiwkWGkpOworCSZtb3ZkcWEJCSgkVDMsJFhpKTsJCSMKKwkmcHNsbGQJCSgkVDEsMzEpOworCSZwc2xsZAkJKCRUMiwzMCk7CisJJnBzbGxkCQkoJFhpLDI1KTsJCSMKKwkmcHhvcgkJKCRUMSwkVDIpOworCSZweG9yCQkoJFQxLCRYaSk7CQkjCisJJm1vdmRxYQkJKCRUMiwkVDEpOwkJIworCSZwc2xsZHEJCSgkVDEsMTIpOworCSZwc3JsZHEJCSgkVDIsNCk7CQkjCisJJnB4b3IJCSgkVDMsJFQxKTsKKworCSMgMm5kIHBoYXNlCisJJnB4b3IJCSgkWGhpLCRUMyk7CQkjCisJJm1vdmRxYQkJKCRYaSwkVDMpOworCSZtb3ZkcWEJCSgkVDEsJFQzKTsKKwkmcHNybGQJCSgkWGksMSk7CQkjCisJJnBzcmxkCQkoJFQxLDIpOworCSZwc3JsZAkJKCRUMyw3KTsJCSMKKwkmcHhvcgkJKCRYaSwkVDEpOworCSZweG9yCQkoJFhoaSwkVDIpOworCSZweG9yCQkoJFhpLCRUMyk7CQkjCisJJnB4b3IJCSgkWGksJFhoaSk7CQkjCit9CisKKyZmdW5jdGlvbl9iZWdpbl9CKCJnY21faW5pdF9jbG11bCIpOworCSZtb3YJCSgkSHRibCwmd3BhcmFtKDApKTsKKwkmbW92CQkoJFhpcCwmd3BhcmFtKDEpKTsKKworCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7Cismc2V0X2xhYmVsKCJwaWMiKTsKKwkmYmxpbmRwb3AJKCRjb25zdCk7CisJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKKworCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJFhpcCkpOworCSZwc2h1ZmQJCSgkSGtleSwkSGtleSwwYjAxMDAxMTEwKTsjIGR3b3JkIHN3YXAKKworCSMgY2FsY3VsYXRlIEheMgorCSZtb3ZkcWEJCSgkWGksJEhrZXkpOworCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CisJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CisKKwkmbW92ZHF1CQkoJlFXUCgwLCRIdGJsKSwkSGtleSk7CSMgc2F2ZSBICisJJm1vdmRxdQkJKCZRV1AoMTYsJEh0YmwpLCRYaSk7CSMgc2F2ZSBIXjIKKworCSZyZXQJCSgpOworJmZ1bmN0aW9uX2VuZF9CKCJnY21faW5pdF9jbG11bCIpOworCismZnVuY3Rpb25fYmVnaW5fQigiZ2NtX2dtdWx0X2NsbXVsIik7CisJJm1vdgkJKCRYaXAsJndwYXJhbSgwKSk7CisJJm1vdgkJKCRIdGJsLCZ3cGFyYW0oMSkpOworCisJJmNhbGwJCSgmbGFiZWwoInBpYyIpKTsKKyZzZXRfbGFiZWwoInBpYyIpOworCSZibGluZHBvcAkoJGNvbnN0KTsKKwkmbGVhCQkoJGNvbnN0LCZEV1AoJmxhYmVsKCJic3dhcCIpLiItIi4mbGFiZWwoInBpYyIpLCRjb25zdCkpOworCisJJm1vdmRxdQkJKCRYaSwmUVdQKDAsJFhpcCkpOworCSZtb3ZkcWEJCSgkWG4sJlFXUCgwLCRjb25zdCkpOworCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsKKwkmcHNodWZiCQkoJFhpLCRYbik7CisKKwkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOworCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOworCisJJnBzaHVmYgkJKCRYaSwkWG4pOworCSZtb3ZkcXUJCSgmUVdQKDAsJFhpcCksJFhpKTsKKworCSZyZXQJKCk7CismZnVuY3Rpb25fZW5kX0IoImdjbV9nbXVsdF9jbG11bCIpOworCismZnVuY3Rpb25fYmVnaW4oImdjbV9naGFzaF9jbG11bCIpOworCSZtb3YJCSgkWGlwLCZ3cGFyYW0oMCkpOworCSZtb3YJCSgkSHRibCwmd3BhcmFtKDEpKTsKKwkmbW92CQkoJGlucCwmd3BhcmFtKDIpKTsKKwkmbW92CQkoJGxlbiwmd3BhcmFtKDMpKTsKKworCSZjYWxsCQkoJmxhYmVsKCJwaWMiKSk7Cismc2V0X2xhYmVsKCJwaWMiKTsKKwkmYmxpbmRwb3AJKCRjb25zdCk7CisJJmxlYQkJKCRjb25zdCwmRFdQKCZsYWJlbCgiYnN3YXAiKS4iLSIuJmxhYmVsKCJwaWMiKSwkY29uc3QpKTsKKworCSZtb3ZkcXUJCSgkWGksJlFXUCgwLCRYaXApKTsKKwkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKKwkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CisJJnBzaHVmYgkJKCRYaSwkVDMpOworCisJJnN1YgkJKCRsZW4sMHgxMCk7CisJJmp6CQkoJmxhYmVsKCJvZGRfdGFpbCIpKTsKKworCSMjIyMjIyMKKwkjIFhpKzIgPVtIKihJaSsxICsgWGkrMSldIG1vZCBQID0KKwkjCVsoSCpJaSsxKSArIChIKlhpKzEpXSBtb2QgUCA9CisJIwlbKEgqSWkrMSkgKyBIXjIqKElpK1hpKV0gbW9kIFAKKwkjCisJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCisJJm1vdmRxdQkJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCisJJnBzaHVmYgkJKCRUMSwkVDMpOworCSZwc2h1ZmIJCSgkWG4sJFQzKTsKKwkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQorCisJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKKwkmbW92ZHF1CQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCisKKwkmc3ViCQkoJGxlbiwweDIwKTsKKwkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsJIyBpKz0yCisJJmpiZQkJKCZsYWJlbCgiZXZlbl90YWlsIikpOworCismc2V0X2xhYmVsKCJtb2RfbG9vcCIpOworCSZjbG11bDY0eDY0X1QzCSgkWGhpLCRYaSwkSGtleSk7CSMgSF4yKihJaStYaSkKKwkmbW92ZHF1CQkoJEhrZXksJlFXUCgwLCRIdGJsKSk7CSMgbG9hZCBICisKKwkmcHhvcgkJKCRYaSwkWG4pOwkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCisJJnB4b3IJCSgkWGhpLCRYaG4pOworCisJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CisKKwkjIyMjIyMjCisJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7CisJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCisJJm1vdmRxdQkJKCRYbiwmUVdQKDE2LCRpbnApKTsJIyBJaSsxCisJJnBzaHVmYgkJKCRUMSwkVDMpOworCSZwc2h1ZmIJCSgkWG4sJFQzKTsKKwkmcHhvcgkJKCRYaSwkVDEpOwkJIyBJaStYaQorCisJJmNsbXVsNjR4NjRfVDMJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKKwkmbW92ZHF1CQkoJEhrZXksJlFXUCgxNiwkSHRibCkpOwkjIGxvYWQgSF4yCisKKwkmc3ViCQkoJGxlbiwweDIwKTsKKwkmbGVhCQkoJGlucCwmRFdQKDMyLCRpbnApKTsKKwkmamEJCSgmbGFiZWwoIm1vZF9sb29wIikpOworCismc2V0X2xhYmVsKCJldmVuX3RhaWwiKTsKKwkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwkjIEheMiooSWkrWGkpCisKKwkmcHhvcgkJKCRYaSwkWG4pOwkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCisJJnB4b3IJCSgkWGhpLCRYaG4pOworCisJJnJlZHVjdGlvbl9hbGc1CSgkWGhpLCRYaSk7CisKKwkmbW92ZHFhCQkoJFQzLCZRV1AoMCwkY29uc3QpKTsKKwkmdGVzdAkJKCRsZW4sJGxlbik7CisJJmpuegkJKCZsYWJlbCgiZG9uZSIpKTsKKworCSZtb3ZkcXUJCSgkSGtleSwmUVdQKDAsJEh0YmwpKTsJIyBsb2FkIEgKKyZzZXRfbGFiZWwoIm9kZF90YWlsIik7CisJJm1vdmRxdQkJKCRUMSwmUVdQKDAsJGlucCkpOwkjIElpCisJJnBzaHVmYgkJKCRUMSwkVDMpOworCSZweG9yCQkoJFhpLCRUMSk7CQkjIElpK1hpCisKKwkmY2xtdWw2NHg2NF9UMwkoJFhoaSwkWGksJEhrZXkpOwkjIEgqKElpK1hpKQorCSZyZWR1Y3Rpb25fYWxnNQkoJFhoaSwkWGkpOworCisJJm1vdmRxYQkJKCRUMywmUVdQKDAsJGNvbnN0KSk7Cismc2V0X2xhYmVsKCJkb25lIik7CisJJnBzaHVmYgkJKCRYaSwkVDMpOworCSZtb3ZkcXUJCSgmUVdQKDAsJFhpcCksJFhpKTsKKyZmdW5jdGlvbl9lbmQoImdjbV9naGFzaF9jbG11bCIpOworCit9CisMCismc2V0X2xhYmVsKCJic3dhcCIsNjQpOworCSZkYXRhX2J5dGUoMTUsMTQsMTMsMTIsMTEsMTAsOSw4LDcsNiw1LDQsMywyLDEsMCk7CisJJmRhdGFfYnl0ZSgxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwweGMyKTsJIyAweDFjMl9wb2x5bm9taWFsCit9fQkjICRzc2UyCisKKyZzZXRfbGFiZWwoInJlbV80Yml0Iiw2NCk7CisJJmRhdGFfd29yZCgwLDB4MDAwMDw8JFMsMCwweDFDMjA8PCRTLDAsMHgzODQwPDwkUywwLDB4MjQ2MDw8JFMpOworCSZkYXRhX3dvcmQoMCwweDcwODA8PCRTLDAsMHg2Q0EwPDwkUywwLDB4NDhDMDw8JFMsMCwweDU0RTA8PCRTKTsKKwkmZGF0YV93b3JkKDAsMHhFMTAwPDwkUywwLDB4RkQyMDw8JFMsMCwweEQ5NDA8PCRTLDAsMHhDNTYwPDwkUyk7CisJJmRhdGFfd29yZCgwLDB4OTE4MDw8JFMsMCwweDhEQTA8PCRTLDAsMHhBOUMwPDwkUywwLDB4QjVFMDw8JFMpOworJnNldF9sYWJlbCgicmVtXzhiaXQiLDY0KTsKKwkmZGF0YV9zaG9ydCgweDAwMDAsMHgwMUMyLDB4MDM4NCwweDAyNDYsMHgwNzA4LDB4MDZDQSwweDA0OEMsMHgwNTRFKTsKKwkmZGF0YV9zaG9ydCgweDBFMTAsMHgwRkQyLDB4MEQ5NCwweDBDNTYsMHgwOTE4LDB4MDhEQSwweDBBOUMsMHgwQjVFKTsKKwkmZGF0YV9zaG9ydCgweDFDMjAsMHgxREUyLDB4MUZBNCwweDFFNjYsMHgxQjI4LDB4MUFFQSwweDE4QUMsMHgxOTZFKTsKKwkmZGF0YV9zaG9ydCgweDEyMzAsMHgxM0YyLDB4MTFCNCwweDEwNzYsMHgxNTM4LDB4MTRGQSwweDE2QkMsMHgxNzdFKTsKKwkmZGF0YV9zaG9ydCgweDM4NDAsMHgzOTgyLDB4M0JDNCwweDNBMDYsMHgzRjQ4LDB4M0U4QSwweDNDQ0MsMHgzRDBFKTsKKwkmZGF0YV9zaG9ydCgweDM2NTAsMHgzNzkyLDB4MzVENCwweDM0MTYsMHgzMTU4LDB4MzA5QSwweDMyREMsMHgzMzFFKTsKKwkmZGF0YV9zaG9ydCgweDI0NjAsMHgyNUEyLDB4MjdFNCwweDI2MjYsMHgyMzY4LDB4MjJBQSwweDIwRUMsMHgyMTJFKTsKKwkmZGF0YV9zaG9ydCgweDJBNzAsMHgyQkIyLDB4MjlGNCwweDI4MzYsMHgyRDc4LDB4MkNCQSwweDJFRkMsMHgyRjNFKTsKKwkmZGF0YV9zaG9ydCgweDcwODAsMHg3MTQyLDB4NzMwNCwweDcyQzYsMHg3Nzg4LDB4NzY0QSwweDc0MEMsMHg3NUNFKTsKKwkmZGF0YV9zaG9ydCgweDdFOTAsMHg3RjUyLDB4N0QxNCwweDdDRDYsMHg3OTk4LDB4Nzg1QSwweDdBMUMsMHg3QkRFKTsKKwkmZGF0YV9zaG9ydCgweDZDQTAsMHg2RDYyLDB4NkYyNCwweDZFRTYsMHg2QkE4LDB4NkE2QSwweDY4MkMsMHg2OUVFKTsKKwkmZGF0YV9zaG9ydCgweDYyQjAsMHg2MzcyLDB4NjEzNCwweDYwRjYsMHg2NUI4LDB4NjQ3QSwweDY2M0MsMHg2N0ZFKTsKKwkmZGF0YV9zaG9ydCgweDQ4QzAsMHg0OTAyLDB4NEI0NCwweDRBODYsMHg0RkM4LDB4NEUwQSwweDRDNEMsMHg0RDhFKTsKKwkmZGF0YV9zaG9ydCgweDQ2RDAsMHg0NzEyLDB4NDU1NCwweDQ0OTYsMHg0MUQ4LDB4NDAxQSwweDQyNUMsMHg0MzlFKTsKKwkmZGF0YV9zaG9ydCgweDU0RTAsMHg1NTIyLDB4NTc2NCwweDU2QTYsMHg1M0U4LDB4NTIyQSwweDUwNkMsMHg1MUFFKTsKKwkmZGF0YV9zaG9ydCgweDVBRjAsMHg1QjMyLDB4NTk3NCwweDU4QjYsMHg1REY4LDB4NUMzQSwweDVFN0MsMHg1RkJFKTsKKwkmZGF0YV9zaG9ydCgweEUxMDAsMHhFMEMyLDB4RTI4NCwweEUzNDYsMHhFNjA4LDB4RTdDQSwweEU1OEMsMHhFNDRFKTsKKwkmZGF0YV9zaG9ydCgweEVGMTAsMHhFRUQyLDB4RUM5NCwweEVENTYsMHhFODE4LDB4RTlEQSwweEVCOUMsMHhFQTVFKTsKKwkmZGF0YV9zaG9ydCgweEZEMjAsMHhGQ0UyLDB4RkVBNCwweEZGNjYsMHhGQTI4LDB4RkJFQSwweEY5QUMsMHhGODZFKTsKKwkmZGF0YV9zaG9ydCgweEYzMzAsMHhGMkYyLDB4RjBCNCwweEYxNzYsMHhGNDM4LDB4RjVGQSwweEY3QkMsMHhGNjdFKTsKKwkmZGF0YV9zaG9ydCgweEQ5NDAsMHhEODgyLDB4REFDNCwweERCMDYsMHhERTQ4LDB4REY4QSwweEREQ0MsMHhEQzBFKTsKKwkmZGF0YV9zaG9ydCgweEQ3NTAsMHhENjkyLDB4RDRENCwweEQ1MTYsMHhEMDU4LDB4RDE5QSwweEQzREMsMHhEMjFFKTsKKwkmZGF0YV9zaG9ydCgweEM1NjAsMHhDNEEyLDB4QzZFNCwweEM3MjYsMHhDMjY4LDB4QzNBQSwweEMxRUMsMHhDMDJFKTsKKwkmZGF0YV9zaG9ydCgweENCNzAsMHhDQUIyLDB4QzhGNCwweEM5MzYsMHhDQzc4LDB4Q0RCQSwweENGRkMsMHhDRTNFKTsKKwkmZGF0YV9zaG9ydCgweDkxODAsMHg5MDQyLDB4OTIwNCwweDkzQzYsMHg5Njg4LDB4OTc0QSwweDk1MEMsMHg5NENFKTsKKwkmZGF0YV9zaG9ydCgweDlGOTAsMHg5RTUyLDB4OUMxNCwweDlERDYsMHg5ODk4LDB4OTk1QSwweDlCMUMsMHg5QURFKTsKKwkmZGF0YV9zaG9ydCgweDhEQTAsMHg4QzYyLDB4OEUyNCwweDhGRTYsMHg4QUE4LDB4OEI2QSwweDg5MkMsMHg4OEVFKTsKKwkmZGF0YV9zaG9ydCgweDgzQjAsMHg4MjcyLDB4ODAzNCwweDgxRjYsMHg4NEI4LDB4ODU3QSwweDg3M0MsMHg4NkZFKTsKKwkmZGF0YV9zaG9ydCgweEE5QzAsMHhBODAyLDB4QUE0NCwweEFCODYsMHhBRUM4LDB4QUYwQSwweEFENEMsMHhBQzhFKTsKKwkmZGF0YV9zaG9ydCgweEE3RDAsMHhBNjEyLDB4QTQ1NCwweEE1OTYsMHhBMEQ4LDB4QTExQSwweEEzNUMsMHhBMjlFKTsKKwkmZGF0YV9zaG9ydCgweEI1RTAsMHhCNDIyLDB4QjY2NCwweEI3QTYsMHhCMkU4LDB4QjMyQSwweEIxNkMsMHhCMEFFKTsKKwkmZGF0YV9zaG9ydCgweEJCRjAsMHhCQTMyLDB4Qjg3NCwweEI5QjYsMHhCQ0Y4LDB4QkQzQSwweEJGN0MsMHhCRUJFKTsKK319fQkjICEkeDg2b25seQorCismYXNjaXooIkdIQVNIIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKKyZhc21fZmluaXNoKCk7CisKKyMgQSBxdWVzdGlvbiB3YXMgcmlzZW4gYWJvdXQgY2hvaWNlIG9mIHZhbmlsbGEgTU1YLiBPciByYXRoZXIgd2h5IHdhc24ndAorIyBTU0UyIGNob3NlbiBpbnN0ZWFkPyBJbiBhZGRpdGlvbiB0byB0aGUgZmFjdCB0aGF0IE1NWCBydW5zIG9uIGxlZ2FjeQorIyBDUFVzIHN1Y2ggYXMgUElJSSwgIjQtYml0IiBNTVggdmVyc2lvbiB3YXMgb2JzZXJ2ZWQgdG8gcHJvdmlkZSBiZXR0ZXIKKyMgcGVyZm9ybWFuY2UgdGhhbiAqY29ycmVzcG9uZGluZyogU1NFMiBvbmUgZXZlbiBvbiBjb250ZW1wb3JhcnkgQ1BVcy4KKyMgU1NFMiByZXN1bHRzIHdlcmUgcHJvdmlkZWQgYnkgUGV0ZXItTWljaGFlbCBIYWdlci4gSGUgbWFpbnRhaW5zIFNTRTIKKyMgaW1wbGVtZW50YXRpb24gZmVhdHVyaW5nIGZ1bGwgcmFuZ2Ugb2YgbG9va3VwLXRhYmxlIHNpemVzLCBidXQgd2l0aAorIyBwZXItaW52b2NhdGlvbiBsb29rdXAgdGFibGUgc2V0dXAuIExhdHRlciBtZWFucyB0aGF0IHRhYmxlIHNpemUgaXMKKyMgY2hvc2VuIGRlcGVuZGluZyBvbiBob3cgbXVjaCBkYXRhIGlzIHRvIGJlIGhhc2hlZCBpbiBldmVyeSBnaXZlbiBjYWxsLAorIyBtb3JlIGRhdGEgLSBsYXJnZXIgdGFibGUuIEJlc3QgcmVwb3J0ZWQgcmVzdWx0IGZvciBDb3JlMiBpcyB+NCBjeWNsZXMKKyMgcGVyIHByb2Nlc3NlZCBieXRlIG91dCBvZiA2NEtCIGJsb2NrLiBUaGlzIG51bWJlciBhY2NvdW50cyBldmVuIGZvcgorIyA2NEtCIHRhYmxlIHNldHVwIG92ZXJoZWFkLiBBcyBkaXNjdXNzZWQgaW4gZ2NtMTI4LmMgd2UgY2hvb3NlIHRvIGJlCisjIG1vcmUgY29uc2VydmF0aXZlIGluIHJlc3BlY3QgdG8gbG9va3VwIHRhYmxlIHNpemVzLCBidXQgaG93IGRvIHRoZQorIyByZXN1bHRzIGNvbXBhcmU/IE1pbmltYWxpc3RpYyAiMjU2QiIgTU1YIHZlcnNpb24gZGVsaXZlcnMgfjExIGN5Y2xlcworIyBvbiBzYW1lIHBsYXRmb3JtLiBBcyBhbHNvIGRpc2N1c3NlZCBpbiBnY20xMjguYywgbmV4dCBpbiBsaW5lICI4LWJpdAorIyBTaG91cCdzIiBvciAiNEtCIiBtZXRob2Qgc2hvdWxkIGRlbGl2ZXIgdHdpY2UgdGhlIHBlcmZvcm1hbmNlIG9mCisjICIyNTZCIiBvbmUsIGluIG90aGVyIHdvcmRzIG5vdCB3b3JzZSB0aGFuIH42IGN5Y2xlcyBwZXIgYnl0ZS4gSXQKKyMgc2hvdWxkIGJlIGFsc28gYmUgbm90ZWQgdGhhdCBpbiBTU0UyIGNhc2UgaW1wcm92ZW1lbnQgY2FuIGJlICJzdXBlci0KKyMgbGluZWFyLCIgaS5lLiBtb3JlIHRoYW4gdHdpY2UsIG1vc3RseSBiZWNhdXNlID4+OCBtYXBzIHRvIHNpbmdsZQorIyBpbnN0cnVjdGlvbiBvbiBTU0UyIHJlZ2lzdGVyLiBUaGlzIGlzIHVubGlrZSAiNC1iaXQiIGNhc2Ugd2hlbiA+PjQKKyMgbWFwcyB0byBzYW1lIGFtb3VudCBvZiBpbnN0cnVjdGlvbnMgaW4gYm90aCBNTVggYW5kIFNTRTIgY2FzZXMuCisjIEJvdHRvbSBsaW5lIGlzIHRoYXQgc3dpdGNoIHRvIFNTRTIgaXMgY29uc2lkZXJlZCB0byBiZSBqdXN0aWZpYWJsZQorIyBvbmx5IGluIGNhc2Ugd2UgY2hvb3NlIHRvIGltcGxlbWVudCAiOC1iaXQiIG1ldGhvZC4uLgpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2FzbS9naGFzaC14ODZfNjQucGwgYi9jcnlwdG8vbW9kZXMvYXNtL2doYXNoLXg4Nl82NC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWFlMTgwCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL21vZGVzL2FzbS9naGFzaC14ODZfNjQucGwKQEAgLTAsMCArMSw4MDUgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIE1hcmNoLCBKdW5lIDIwMTAKKyMKKyMgVGhlIG1vZHVsZSBpbXBsZW1lbnRzICI0LWJpdCIgR0NNIEdIQVNIIGZ1bmN0aW9uIGFuZCB1bmRlcmx5aW5nCisjIHNpbmdsZSBtdWx0aXBsaWNhdGlvbiBvcGVyYXRpb24gaW4gR0YoMl4xMjgpLiAiNC1iaXQiIG1lYW5zIHRoYXQKKyMgaXQgdXNlcyAyNTYgYnl0ZXMgcGVyLWtleSB0YWJsZSBbKzEyOCBieXRlcyBzaGFyZWQgdGFibGVdLiBHSEFTSAorIyBmdW5jdGlvbiBmZWF0dXJlcyBzbyBjYWxsZWQgIjUyOEIiIHZhcmlhbnQgdXRpbGl6aW5nIGFkZGl0aW9uYWwKKyMgMjU2KzE2IGJ5dGVzIG9mIHBlci1rZXkgc3RvcmFnZSBbKzUxMiBieXRlcyBzaGFyZWQgdGFibGVdLgorIyBQZXJmb3JtYW5jZSByZXN1bHRzIGFyZSBmb3IgdGhpcyBzdHJlYW1lZCBHSEFTSCBzdWJyb3V0aW5lIGFuZCBhcmUKKyMgZXhwcmVzc2VkIGluIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUsIGxlc3MgaXMgYmV0dGVyOgorIworIwkJZ2NjIDMuNC54KCopCWFzc2VtYmxlcgorIworIyBQNAkJMjguNgkJMTQuMAkJKzEwMCUKKyMgT3B0ZXJvbgkxOS4zCQk3LjcJCSsxNTAlCisjIENvcmUyCQkxNy44CQk4LjEoKiopCQkrMTIwJQorIworIyAoKikJY29tcGFyaXNvbiBpcyBub3QgY29tcGxldGVseSBmYWlyLCBiZWNhdXNlIEMgcmVzdWx0cyBhcmUKKyMJZm9yIHZhbmlsbGEgIjI1NkIiIGltcGxlbWVudGF0aW9uLCB3aGlsZSBhc3NlbWJsZXIgcmVzdWx0cworIwlhcmUgZm9yICI1MjhCIjstKQorIyAoKiopCWl0J3MgbXlzdGVyeSBbdG8gbWVdIHdoeSBDb3JlMiByZXN1bHQgaXMgbm90IHNhbWUgYXMgZm9yCisjCU9wdGVyb247CisKKyMgTWF5IDIwMTAKKyMKKyMgQWRkIFBDTE1VTFFEUSB2ZXJzaW9uIHBlcmZvcm1pbmcgYXQgMi4wMiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlLgorIyBTZWUgZ2hhc2gteDg2LnBsIGZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGFuZCBkZXRhaWxzIGFib3V0IGNvZGluZworIyB0ZWNobmlxdWVzLgorIworIyBTcGVjaWFsIHRoYW5rcyB0byBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+IGZvcgorIyBwcm92aWRpbmcgYWNjZXNzIHRvIGEgV2VzdG1lcmUtYmFzZWQgc3lzdGVtIG9uIGJlaGFsZiBvZiBJbnRlbAorIyBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRyZS4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgID0gc2hpZnQ7CitpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisKKyR3aW42ND0wOyAkd2luNjQ9MSBpZiAoJGZsYXZvdXIgPX4gL1tubV1hc218bWluZ3c2NC8gfHwgJG91dHB1dCA9fiAvXC5hc20kLyk7CisKKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisoICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKyggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisKK29wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisKKyMgY29tbW9uIHJlZ2lzdGVyIGxheW91dAorJG5sbz0iJXJheCI7CiskbmhpPSIlcmJ4IjsKKyRabG89IiVyOCI7CiskWmhpPSIlcjkiOworJHRtcD0iJXIxMCI7CiskcmVtXzRiaXQgPSAiJXIxMSI7CisKKyRYaT0iJXJkaSI7CiskSHRibD0iJXJzaSI7CisKKyMgcGVyLWZ1bmN0aW9uIHJlZ2lzdGVyIGxheW91dAorJGNudD0iJXJjeCI7CiskcmVtPSIlcmR4IjsKKworc3ViIExCKCkgeyBteSAkcj1zaGlmdDsgJHIgPX4gcy8lW2VyXShbYS1kXSl4LyVcMWwvCW9yCisJCQkkciA9fiBzLyVbZXJdKFtzZF1pKS8lXDFsLwlvcgorCQkJJHIgPX4gcy8lW2VyXShicCkvJVwxbC8JCW9yCisJCQkkciA9fiBzLyUoclswLTldKylbZF0/LyVcMWIvOyAgICRyOyB9CisKK3N1YiBBVVRPTE9BRCgpCQkjIHRodW5rIFtzaW1wbGlmaWVkXSAzMi1iaXQgc3R5bGUgcGVybGFzbQoreyBteSAkb3Bjb2RlID0gJEFVVE9MT0FEOyAkb3Bjb2RlID1+IHMvLio6Oi8vOworICBteSAkYXJnID0gcG9wOworICAgICRhcmcgPSAiXCQkYXJnIiBpZiAoJGFyZyoxIGVxICRhcmcpOworICAgICRjb2RlIC49ICJcdCRvcGNvZGVcdCIuam9pbignLCcsJGFyZyxyZXZlcnNlIEBfKS4iXG4iOworfQorDAoreyBteSAkTjsKKyAgc3ViIGxvb3AoKSB7CisgIG15ICRpbnAgPSBzaGlmdDsKKworCSROKys7CiskY29kZS49PDxfX187CisJeG9yCSRubG8sJG5sbworCXhvcgkkbmhpLCRuaGkKKwltb3YJYCZMQigiJFpsbyIpYCxgJkxCKCIkbmxvIilgCisJbW92CWAmTEIoIiRabG8iKWAsYCZMQigiJG5oaSIpYAorCXNobAlcJDQsYCZMQigiJG5sbyIpYAorCW1vdglcJDE0LCRjbnQKKwltb3YJOCgkSHRibCwkbmxvKSwkWmxvCisJbW92CSgkSHRibCwkbmxvKSwkWmhpCisJYW5kCVwkMHhmMCxgJkxCKCIkbmhpIilgCisJbW92CSRabG8sJHJlbQorCWptcAkuTG9vcCROCisKKy5hbGlnbgkxNgorLkxvb3AkTjoKKwlzaHIJXCQ0LCRabG8KKwlhbmQJXCQweGYsJHJlbQorCW1vdgkkWmhpLCR0bXAKKwltb3YJKCRpbnAsJGNudCksYCZMQigiJG5sbyIpYAorCXNocglcJDQsJFpoaQorCXhvcgk4KCRIdGJsLCRuaGkpLCRabG8KKwlzaGwJXCQ2MCwkdG1wCisJeG9yCSgkSHRibCwkbmhpKSwkWmhpCisJbW92CWAmTEIoIiRubG8iKWAsYCZMQigiJG5oaSIpYAorCXhvcgkoJHJlbV80Yml0LCRyZW0sOCksJFpoaQorCW1vdgkkWmxvLCRyZW0KKwlzaGwJXCQ0LGAmTEIoIiRubG8iKWAKKwl4b3IJJHRtcCwkWmxvCisJZGVjCSRjbnQKKwlqcwkuTGJyZWFrJE4KKworCXNocglcJDQsJFpsbworCWFuZAlcJDB4ZiwkcmVtCisJbW92CSRaaGksJHRtcAorCXNocglcJDQsJFpoaQorCXhvcgk4KCRIdGJsLCRubG8pLCRabG8KKwlzaGwJXCQ2MCwkdG1wCisJeG9yCSgkSHRibCwkbmxvKSwkWmhpCisJYW5kCVwkMHhmMCxgJkxCKCIkbmhpIilgCisJeG9yCSgkcmVtXzRiaXQsJHJlbSw4KSwkWmhpCisJbW92CSRabG8sJHJlbQorCXhvcgkkdG1wLCRabG8KKwlqbXAJLkxvb3AkTgorCisuYWxpZ24JMTYKKy5MYnJlYWskTjoKKwlzaHIJXCQ0LCRabG8KKwlhbmQJXCQweGYsJHJlbQorCW1vdgkkWmhpLCR0bXAKKwlzaHIJXCQ0LCRaaGkKKwl4b3IJOCgkSHRibCwkbmxvKSwkWmxvCisJc2hsCVwkNjAsJHRtcAorCXhvcgkoJEh0YmwsJG5sbyksJFpoaQorCWFuZAlcJDB4ZjAsYCZMQigiJG5oaSIpYAorCXhvcgkoJHJlbV80Yml0LCRyZW0sOCksJFpoaQorCW1vdgkkWmxvLCRyZW0KKwl4b3IJJHRtcCwkWmxvCisKKwlzaHIJXCQ0LCRabG8KKwlhbmQJXCQweGYsJHJlbQorCW1vdgkkWmhpLCR0bXAKKwlzaHIJXCQ0LCRaaGkKKwl4b3IJOCgkSHRibCwkbmhpKSwkWmxvCisJc2hsCVwkNjAsJHRtcAorCXhvcgkoJEh0YmwsJG5oaSksJFpoaQorCXhvcgkkdG1wLCRabG8KKwl4b3IJKCRyZW1fNGJpdCwkcmVtLDgpLCRaaGkKKworCWJzd2FwCSRabG8KKwlic3dhcAkkWmhpCitfX18KK319CisKKyRjb2RlPTw8X19fOworLnRleHQKKworLmdsb2JsCWdjbV9nbXVsdF80Yml0CisudHlwZQlnY21fZ211bHRfNGJpdCxcQGZ1bmN0aW9uLDIKKy5hbGlnbgkxNgorZ2NtX2dtdWx0XzRiaXQ6CisJcHVzaAklcmJ4CisJcHVzaAklcmJwCQkjICVyYnAgYW5kICVyMTIgYXJlIHB1c2hlZCBleGNsdXNpdmVseSBpbgorCXB1c2gJJXIxMgkJIyBvcmRlciB0byByZXVzZSBXaW42NCBleGNlcHRpb24gaGFuZGxlci4uLgorLkxnbXVsdF9wcm9sb2d1ZToKKworCW1vdnpiCTE1KCRYaSksJFpsbworCWxlYQkuTHJlbV80Yml0KCVyaXApLCRyZW1fNGJpdAorX19fCisJJmxvb3AJKCRYaSk7CiskY29kZS49PDxfX187CisJbW92CSRabG8sOCgkWGkpCisJbW92CSRaaGksKCRYaSkKKworCW1vdgkxNiglcnNwKSwlcmJ4CisJbGVhCTI0KCVyc3ApLCVyc3AKKy5MZ211bHRfZXBpbG9ndWU6CisJcmV0Cisuc2l6ZQlnY21fZ211bHRfNGJpdCwuLWdjbV9nbXVsdF80Yml0CitfX18KKwwKKyMgcGVyLWZ1bmN0aW9uIHJlZ2lzdGVyIGxheW91dAorJGlucD0iJXJkeCI7CiskbGVuPSIlcmN4IjsKKyRyZW1fOGJpdD0kcmVtXzRiaXQ7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlnY21fZ2hhc2hfNGJpdAorLnR5cGUJZ2NtX2doYXNoXzRiaXQsXEBmdW5jdGlvbiw0CisuYWxpZ24JMTYKK2djbV9naGFzaF80Yml0OgorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXN1YglcJDI4MCwlcnNwCisuTGdoYXNoX3Byb2xvZ3VlOgorCW1vdgkkaW5wLCVyMTQJCSMgcmVhc3NpZ24gY291cGxlIG9mIGFyZ3MKKwltb3YJJGxlbiwlcjE1CitfX18KK3sgbXkgJGlucD0iJXIxNCI7CisgIG15ICRkYXQ9IiVlZHgiOworICBteSAkbGVuPSIlcjE1IjsKKyAgbXkgQG5oaT0oIiVlYngiLCIlZWN4Iik7CisgIG15IEByZW09KCIlcjEyIiwiJXIxMyIpOworICBteSAkSHNocjQ9IiVyYnAiOworCisJJnN1YgkoJEh0YmwsLTEyOCk7CQkjIHNpemUgb3B0aW1pemF0aW9uCisJJmxlYQkoJEhzaHI0LCIxNisxMjgoJXJzcCkiKTsKKwl7IG15IEBsbyA9KCRubG8sJG5oaSk7CisgICAgICAgICAgbXkgQGhpID0oJFpsbywkWmhpKTsKKworCSAgJnhvcgkoJGRhdCwkZGF0KTsKKwkgIGZvciAoJGk9MCwkaj0tMjskaTwxODskaSsrLCRqKyspIHsKKwkgICAgJm1vdgkoIiRqKCVyc3ApIiwmTEIoJGRhdCkpCQlpZiAoJGk+MSk7CisJICAgICZvcgkJKCRsb1swXSwkdG1wKQkJCWlmICgkaT4xKTsKKwkgICAgJm1vdgkoJkxCKCRkYXQpLCZMQigkbG9bMV0pKQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSAgICAmc2hyCSgkbG9bMV0sNCkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CisJICAgICZtb3YJKCR0bXAsJGhpWzFdKQkJCWlmICgkaT4wICYmICRpPDE3KTsKKwkgICAgJnNocgkoJGhpWzFdLDQpCQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSAgICAmbW92CSgiOCokaigkSHNocjQpIiwkaGlbMF0pCQlpZiAoJGk+MSk7CisJICAgICZtb3YJKCRoaVswXSwiMTYqJGkrMC0xMjgoJEh0YmwpIikJaWYgKCRpPDE2KTsKKwkgICAgJnNobAkoJkxCKCRkYXQpLDQpCQkJaWYgKCRpPjAgJiYgJGk8MTcpOworCSAgICAmbW92CSgiOCokai0xMjgoJEhzaHI0KSIsJGxvWzBdKQlpZiAoJGk+MSk7CisJICAgICZtb3YJKCRsb1swXSwiMTYqJGkrOC0xMjgoJEh0YmwpIikJaWYgKCRpPDE2KTsKKwkgICAgJnNobAkoJHRtcCw2MCkJCQlpZiAoJGk+MCAmJiAkaTwxNyk7CisKKwkgICAgcHVzaAkoQGxvLHNoaWZ0KEBsbykpOworCSAgICBwdXNoCShAaGksc2hpZnQoQGhpKSk7CisJICB9CisJfQorCSZhZGQJKCRIdGJsLC0xMjgpOworCSZtb3YJKCRabG8sIjgoJFhpKSIpOworCSZtb3YJKCRaaGksIjAoJFhpKSIpOworCSZhZGQJKCRsZW4sJGlucCk7CQkjIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiBkYXRhCisJJmxlYQkoJHJlbV84Yml0LCIuTHJlbV84Yml0KCVyaXApIik7CisJJmptcAkoIi5Mb3V0ZXJfbG9vcCIpOworCiskY29kZS49Ii5hbGlnbgkxNlxuLkxvdXRlcl9sb29wOlxuIjsKKwkmeG9yCSgkWmhpLCIoJGlucCkiKTsKKwkmbW92CSgiJXJkeCIsIjgoJGlucCkiKTsKKwkmbGVhCSgkaW5wLCIxNigkaW5wKSIpOworCSZ4b3IJKCIlcmR4IiwkWmxvKTsKKwkmbW92CSgiKCRYaSkiLCRaaGkpOworCSZtb3YJKCI4KCRYaSkiLCIlcmR4Iik7CisJJnNocgkoIiVyZHgiLDMyKTsKKworCSZ4b3IJKCRubG8sJG5sbyk7CisJJnJvbAkoJGRhdCw4KTsKKwkmbW92CSgmTEIoJG5sbyksJkxCKCRkYXQpKTsKKwkmbW92egkoJG5oaVswXSwmTEIoJGRhdCkpOworCSZzaGwJKCZMQigkbmxvKSw0KTsKKwkmc2hyCSgkbmhpWzBdLDQpOworCisJZm9yICgkaj0xMSwkaT0wOyRpPDE1OyRpKyspIHsKKwkgICAgJnJvbAkoJGRhdCw4KTsKKwkgICAgJnhvcgkoJFpsbywiOCgkSHRibCwkbmxvKSIpCQkJaWYgKCRpPjApOworCSAgICAmeG9yCSgkWmhpLCIoJEh0YmwsJG5sbykiKQkJCWlmICgkaT4wKTsKKwkgICAgJm1vdgkoJFpsbywiOCgkSHRibCwkbmxvKSIpCQkJaWYgKCRpPT0wKTsKKwkgICAgJm1vdgkoJFpoaSwiKCRIdGJsLCRubG8pIikJCQlpZiAoJGk9PTApOworCisJICAgICZtb3YJKCZMQigkbmxvKSwmTEIoJGRhdCkpOworCSAgICAmeG9yCSgkWmxvLCR0bXApCQkJCWlmICgkaT4wKTsKKwkgICAgJm1vdnp3CSgkcmVtWzFdLCIoJHJlbV84Yml0LCRyZW1bMV0sMikiKQlpZiAoJGk+MCk7CisKKwkgICAgJm1vdnoJKCRuaGlbMV0sJkxCKCRkYXQpKTsKKwkgICAgJnNobAkoJkxCKCRubG8pLDQpOworCSAgICAmbW92emIJKCRyZW1bMF0sIiglcnNwLCRuaGlbMF0pIik7CisKKwkgICAgJnNocgkoJG5oaVsxXSw0KQkJCQlpZiAoJGk8MTQpOworCSAgICAmYW5kCSgkbmhpWzFdLDB4ZjApCQkJCWlmICgkaT09MTQpOworCSAgICAmc2hsCSgkcmVtWzFdLDQ4KQkJCQlpZiAoJGk+MCk7CisJICAgICZ4b3IJKCRyZW1bMF0sJFpsbyk7CisKKwkgICAgJm1vdgkoJHRtcCwkWmhpKTsKKwkgICAgJnhvcgkoJFpoaSwkcmVtWzFdKQkJCQlpZiAoJGk+MCk7CisJICAgICZzaHIJKCRabG8sOCk7CisKKwkgICAgJm1vdnoJKCRyZW1bMF0sJkxCKCRyZW1bMF0pKTsKKwkgICAgJm1vdgkoJGRhdCwiJGooJFhpKSIpCQkJaWYgKC0tJGolND09MCk7CisJICAgICZzaHIJKCRaaGksOCk7CisKKwkgICAgJnhvcgkoJFpsbywiLTEyOCgkSHNocjQsJG5oaVswXSw4KSIpOworCSAgICAmc2hsCSgkdG1wLDU2KTsKKwkgICAgJnhvcgkoJFpoaSwiKCRIc2hyNCwkbmhpWzBdLDgpIik7CisKKwkgICAgdW5zaGlmdAkoQG5oaSxwb3AoQG5oaSkpOwkJIyAicm90YXRlIiByZWdpc3RlcnMKKwkgICAgdW5zaGlmdAkoQHJlbSxwb3AoQHJlbSkpOworCX0KKwkmbW92encJKCRyZW1bMV0sIigkcmVtXzhiaXQsJHJlbVsxXSwyKSIpOworCSZ4b3IJKCRabG8sIjgoJEh0YmwsJG5sbykiKTsKKwkmeG9yCSgkWmhpLCIoJEh0YmwsJG5sbykiKTsKKworCSZzaGwJKCRyZW1bMV0sNDgpOworCSZ4b3IJKCRabG8sJHRtcCk7CisKKwkmeG9yCSgkWmhpLCRyZW1bMV0pOworCSZtb3Z6CSgkcmVtWzBdLCZMQigkWmxvKSk7CisJJnNocgkoJFpsbyw0KTsKKworCSZtb3YJKCR0bXAsJFpoaSk7CisJJnNobAkoJkxCKCRyZW1bMF0pLDQpOworCSZzaHIJKCRaaGksNCk7CisKKwkmeG9yCSgkWmxvLCI4KCRIdGJsLCRuaGlbMF0pIik7CisJJm1vdnp3CSgkcmVtWzBdLCIoJHJlbV84Yml0LCRyZW1bMF0sMikiKTsKKwkmc2hsCSgkdG1wLDYwKTsKKworCSZ4b3IJKCRaaGksIigkSHRibCwkbmhpWzBdKSIpOworCSZ4b3IJKCRabG8sJHRtcCk7CisJJnNobAkoJHJlbVswXSw0OCk7CisKKwkmYnN3YXAJKCRabG8pOworCSZ4b3IJKCRaaGksJHJlbVswXSk7CisKKwkmYnN3YXAJKCRaaGkpOworCSZjbXAJKCRpbnAsJGxlbik7CisJJmpiCSgiLkxvdXRlcl9sb29wIik7Cit9CiskY29kZS49PDxfX187CisJbW92CSRabG8sOCgkWGkpCisJbW92CSRaaGksKCRYaSkKKworCWxlYQkyODAoJXJzcCksJXJzaQorCW1vdgkwKCVyc2kpLCVyMTUKKwltb3YJOCglcnNpKSwlcjE0CisJbW92CTE2KCVyc2kpLCVyMTMKKwltb3YJMjQoJXJzaSksJXIxMgorCW1vdgkzMiglcnNpKSwlcmJwCisJbW92CTQwKCVyc2kpLCVyYngKKwlsZWEJNDgoJXJzaSksJXJzcAorLkxnaGFzaF9lcGlsb2d1ZToKKwlyZXQKKy5zaXplCWdjbV9naGFzaF80Yml0LC4tZ2NtX2doYXNoXzRiaXQKK19fXworDAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQQ0xNVUxRRFEgdmVyc2lvbi4KKworQF80YXJncz0kd2luNjQ/CSgiJXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOgkjIFdpbjY0IG9yZGVyCisJCSgiJXJkaSIsIiVyc2kiLCIlcmR4IiwiJXJjeCIpOwkjIFVuaXggb3JkZXIKKworKCRYaSwkWGhpKT0oIiV4bW0wIiwiJXhtbTEiKTsJJEhrZXk9IiV4bW0yIjsKKygkVDEsJFQyLCRUMyk9KCIleG1tMyIsIiV4bW00IiwiJXhtbTUiKTsKKworc3ViIGNsbXVsNjR4NjRfVDIgewkjIG1pbmltYWwgcmVnaXN0ZXIgcHJlc3N1cmUKK215ICgkWGhpLCRYaSwkSGtleSwkbW9kdWxvKT1AXzsKKworJGNvZGUuPTw8X19fIGlmICghZGVmaW5lZCgkbW9kdWxvKSk7CisJbW92ZHFhCQkkWGksJFhoaQkJIworCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRYaSwkVDEKKwlwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkVDIKKwlweG9yCQkkWGksJFQxCQkJIworCXB4b3IJCSRIa2V5LCRUMgorX19fCiskY29kZS49PDxfX187CisJcGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWGkJIyMjIyMjIworCXBjbG11bHFkcQlcJDB4MTEsJEhrZXksJFhoaQkjIyMjIyMjCisJcGNsbXVscWRxCVwkMHgwMCwkVDIsJFQxCQkjIyMjIyMjCisJcHhvcgkJJFhpLCRUMQkJCSMKKwlweG9yCQkkWGhpLCRUMQkJIworCisJbW92ZHFhCQkkVDEsJFQyCQkJIworCXBzcmxkcQkJXCQ4LCRUMQorCXBzbGxkcQkJXCQ4LCRUMgkJCSMKKwlweG9yCQkkVDEsJFhoaQorCXB4b3IJCSRUMiwkWGkJCQkjCitfX18KK30KKworc3ViIHJlZHVjdGlvbl9hbGc5IHsJIyAxNy8xMyB0aW1lcyBmYXN0ZXIgdGhhbiBJbnRlbCB2ZXJzaW9uCitteSAoJFhoaSwkWGkpID0gQF87CisKKyRjb2RlLj08PF9fXzsKKwkjIDFzdCBwaGFzZQorCW1vdmRxYQkJJFhpLCRUMQkJCSMKKwlwc2xscQkJXCQxLCRYaQorCXB4b3IJCSRUMSwkWGkJCQkjCisJcHNsbHEJCVwkNSwkWGkJCQkjCisJcHhvcgkJJFQxLCRYaQkJCSMKKwlwc2xscQkJXCQ1NywkWGkJCSMKKwltb3ZkcWEJCSRYaSwkVDIJCQkjCisJcHNsbGRxCQlcJDgsJFhpCisJcHNybGRxCQlcJDgsJFQyCQkJIwkKKwlweG9yCQkkVDEsJFhpCisJcHhvcgkJJFQyLCRYaGkJCSMKKworCSMgMm5kIHBoYXNlCisJbW92ZHFhCQkkWGksJFQyCisJcHNybHEJCVwkNSwkWGkKKwlweG9yCQkkVDIsJFhpCQkJIworCXBzcmxxCQlcJDEsJFhpCQkJIworCXB4b3IJCSRUMiwkWGkJCQkjCisJcHhvcgkJJFhoaSwkVDIKKwlwc3JscQkJXCQxLCRYaQkJCSMKKwlweG9yCQkkVDIsJFhpCQkJIworX19fCit9CisMCit7IG15ICgkSHRibCwkWGlwKT1AXzRhcmdzOworCiskY29kZS49PDxfX187CisuZ2xvYmwJZ2NtX2luaXRfY2xtdWwKKy50eXBlCWdjbV9pbml0X2NsbXVsLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorZ2NtX2luaXRfY2xtdWw6CisJbW92ZHF1CQkoJFhpcCksJEhrZXkKKwlwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkSGtleQkjIGR3b3JkIHN3YXAKKworCSMgPDwxIHR3aXN0CisJcHNodWZkCQlcJDBiMTExMTExMTEsJEhrZXksJFQyCSMgYnJvYWRjYXN0IHVwcGVybW9zdCBkd29yZAorCW1vdmRxYQkJJEhrZXksJFQxCisJcHNsbHEJCVwkMSwkSGtleQorCXB4b3IJCSRUMywkVDMJCQkjCisJcHNybHEJCVwkNjMsJFQxCisJcGNtcGd0ZAkJJFQyLCRUMwkJCSMgYnJvYWRjYXN0IGNhcnJ5IGJpdAorCXBzbGxkcQkJXCQ4LCRUMQorCXBvcgkJJFQxLCRIa2V5CQkjIEg8PD0xCisKKwkjIG1hZ2ljIHJlZHVjdGlvbgorCXBhbmQJCS5MMHgxYzJfcG9seW5vbWlhbCglcmlwKSwkVDMKKwlweG9yCQkkVDMsJEhrZXkJCSMgaWYoY2FycnkpIEhePTB4MWMyX3BvbHlub21pYWwKKworCSMgY2FsY3VsYXRlIEheMgorCW1vdmRxYQkJJEhrZXksJFhpCitfX18KKwkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOworCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOworJGNvZGUuPTw8X19fOworCW1vdmRxdQkJJEhrZXksKCRIdGJsKQkJIyBzYXZlIEgKKwltb3ZkcXUJCSRYaSwxNigkSHRibCkJCSMgc2F2ZSBIXjIKKwlyZXQKKy5zaXplCWdjbV9pbml0X2NsbXVsLC4tZ2NtX2luaXRfY2xtdWwKK19fXworfQorCit7IG15ICgkWGlwLCRIdGJsKT1AXzRhcmdzOworCiskY29kZS49PDxfX187CisuZ2xvYmwJZ2NtX2dtdWx0X2NsbXVsCisudHlwZQlnY21fZ211bHRfY2xtdWwsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitnY21fZ211bHRfY2xtdWw6CisJbW92ZHF1CQkoJFhpcCksJFhpCisJbW92ZHFhCQkuTGJzd2FwX21hc2soJXJpcCksJFQzCisJbW92ZHF1CQkoJEh0YmwpLCRIa2V5CisJcHNodWZiCQkkVDMsJFhpCitfX18KKwkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOworCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOworJGNvZGUuPTw8X19fOworCXBzaHVmYgkJJFQzLCRYaQorCW1vdmRxdQkJJFhpLCgkWGlwKQorCXJldAorLnNpemUJZ2NtX2dtdWx0X2NsbXVsLC4tZ2NtX2dtdWx0X2NsbXVsCitfX18KK30KKwwKK3sgbXkgKCRYaXAsJEh0YmwsJGlucCwkbGVuKT1AXzRhcmdzOworICBteSAkWG49IiV4bW02IjsKKyAgbXkgJFhobj0iJXhtbTciOworICBteSAkSGtleTI9IiV4bW04IjsKKyAgbXkgJFQxbj0iJXhtbTkiOworICBteSAkVDJuPSIleG1tMTAiOworCiskY29kZS49PDxfX187CisuZ2xvYmwJZ2NtX2doYXNoX2NsbXVsCisudHlwZQlnY21fZ2hhc2hfY2xtdWwsXEBhYmktb21uaXBvdGVudAorLmFsaWduCTE2CitnY21fZ2hhc2hfY2xtdWw6CitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKy5MU0VIX2JlZ2luX2djbV9naGFzaF9jbG11bDoKKwkjIEkgY2FuJ3QgdHJ1c3QgYXNzZW1ibGVyIHRvIHVzZSBzcGVjaWZpYyBlbmNvZGluZzotKAorCS5ieXRlCTB4NDgsMHg4MywweGVjLDB4NTgJCSNzdWIJXCQweDU4LCVyc3AKKwkuYnl0ZQkweDBmLDB4MjksMHgzNCwweDI0CQkjbW92YXBzCSV4bW02LCglcnNwKQorCS5ieXRlCTB4MGYsMHgyOSwweDdjLDB4MjQsMHgxMAkjbW92ZHFhCSV4bW03LDB4MTAoJXJzcCkKKwkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDQ0LDB4MjQsMHgyMAkjbW92YXBzCSV4bW04LDB4MjAoJXJzcCkKKwkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDRjLDB4MjQsMHgzMAkjbW92YXBzCSV4bW05LDB4MzAoJXJzcCkKKwkuYnl0ZQkweDQ0LDB4MGYsMHgyOSwweDU0LDB4MjQsMHg0MAkjbW92YXBzCSV4bW0xMCwweDQwKCVyc3ApCitfX18KKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJCS5MYnN3YXBfbWFzayglcmlwKSwkVDMKKworCW1vdmRxdQkJKCRYaXApLCRYaQorCW1vdmRxdQkJKCRIdGJsKSwkSGtleQorCXBzaHVmYgkJJFQzLCRYaQorCisJc3ViCQlcJDB4MTAsJGxlbgorCWp6CQkuTG9kZF90YWlsCisKKwltb3ZkcXUJCTE2KCRIdGJsKSwkSGtleTIKKwkjIyMjIyMjCisJIyBYaSsyID1bSCooSWkrMSArIFhpKzEpXSBtb2QgUCA9CisJIwlbKEgqSWkrMSkgKyAoSCpYaSsxKV0gbW9kIFAgPQorCSMJWyhIKklpKzEpICsgSF4yKihJaStYaSldIG1vZCBQCisJIworCW1vdmRxdQkJKCRpbnApLCRUMQkJIyBJaQorCW1vdmRxdQkJMTYoJGlucCksJFhuCQkjIElpKzEKKwlwc2h1ZmIJCSRUMywkVDEKKwlwc2h1ZmIJCSRUMywkWG4KKwlweG9yCQkkVDEsJFhpCQkJIyBJaStYaQorX19fCisJJmNsbXVsNjR4NjRfVDIJKCRYaG4sJFhuLCRIa2V5KTsJIyBIKklpKzEKKyRjb2RlLj08PF9fXzsKKwltb3ZkcWEJCSRYaSwkWGhpCQkjCisJcHNodWZkCQlcJDBiMDEwMDExMTAsJFhpLCRUMQorCXBzaHVmZAkJXCQwYjAxMDAxMTEwLCRIa2V5MiwkVDIKKwlweG9yCQkkWGksJFQxCQkJIworCXB4b3IJCSRIa2V5MiwkVDIKKworCWxlYQkJMzIoJGlucCksJGlucAkJIyBpKz0yCisJc3ViCQlcJDB4MjAsJGxlbgorCWpiZQkJLkxldmVuX3RhaWwKKworLkxtb2RfbG9vcDoKK19fXworCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleTIsMSk7CSMgSF4yKihJaStYaSkKKyRjb2RlLj08PF9fXzsKKwltb3ZkcXUJCSgkaW5wKSwkVDEJCSMgSWkKKwlweG9yCQkkWG4sJFhpCQkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCisJcHhvcgkJJFhobiwkWGhpCisKKwltb3ZkcXUJCTE2KCRpbnApLCRYbgkJIyBJaSsxCisJcHNodWZiCQkkVDMsJFQxCisJcHNodWZiCQkkVDMsJFhuCisKKwltb3ZkcWEJCSRYbiwkWGhuCQkjCisJcHNodWZkCQlcJDBiMDEwMDExMTAsJFhuLCRUMW4KKwlwc2h1ZmQJCVwkMGIwMTAwMTExMCwkSGtleSwkVDJuCisJcHhvcgkJJFhuLCRUMW4JCSMKKwlweG9yCQkkSGtleSwkVDJuCisJIHB4b3IJCSRUMSwkWGhpCQkjICJJaStYaSIsIGNvbnN1bWUgZWFybHkKKworCSAgbW92ZHFhCSRYaSwkVDEJCQkjIDFzdCBwaGFzZQorCSAgcHNsbHEJCVwkMSwkWGkKKwkgIHB4b3IJCSRUMSwkWGkJCQkjCisJICBwc2xscQkJXCQ1LCRYaQkJCSMKKwkgIHB4b3IJCSRUMSwkWGkJCQkjCisJcGNsbXVscWRxCVwkMHgwMCwkSGtleSwkWG4JIyMjIyMjIworCSAgcHNsbHEJCVwkNTcsJFhpCQkjCisJICBtb3ZkcWEJJFhpLCRUMgkJCSMKKwkgIHBzbGxkcQlcJDgsJFhpCisJICBwc3JsZHEJXCQ4LCRUMgkJCSMJCisJICBweG9yCQkkVDEsJFhpCisJICBweG9yCQkkVDIsJFhoaQkJIworCisJcGNsbXVscWRxCVwkMHgxMSwkSGtleSwkWGhuCSMjIyMjIyMKKwkgIG1vdmRxYQkkWGksJFQyCQkJIyAybmQgcGhhc2UKKwkgIHBzcmxxCQlcJDUsJFhpCisJICBweG9yCQkkVDIsJFhpCQkJIworCSAgcHNybHEJCVwkMSwkWGkJCQkjCisJICBweG9yCQkkVDIsJFhpCQkJIworCSAgcHhvcgkJJFhoaSwkVDIKKwkgIHBzcmxxCQlcJDEsJFhpCQkJIworCSAgcHhvcgkJJFQyLCRYaQkJCSMKKworCXBjbG11bHFkcQlcJDB4MDAsJFQybiwkVDFuCSMjIyMjIyMKKwkgbW92ZHFhCQkkWGksJFhoaQkJIworCSBwc2h1ZmQJCVwkMGIwMTAwMTExMCwkWGksJFQxCisJIHBzaHVmZAkJXCQwYjAxMDAxMTEwLCRIa2V5MiwkVDIKKwkgcHhvcgkJJFhpLCRUMQkJCSMKKwkgcHhvcgkJJEhrZXkyLCRUMgorCisJcHhvcgkJJFhuLCRUMW4JCSMKKwlweG9yCQkkWGhuLCRUMW4JCSMKKwltb3ZkcWEJCSRUMW4sJFQybgkJIworCXBzcmxkcQkJXCQ4LCRUMW4KKwlwc2xsZHEJCVwkOCwkVDJuCQkjCisJcHhvcgkJJFQxbiwkWGhuCisJcHhvcgkJJFQybiwkWG4JCSMKKworCWxlYQkJMzIoJGlucCksJGlucAorCXN1YgkJXCQweDIwLCRsZW4KKwlqYQkJLkxtb2RfbG9vcAorCisuTGV2ZW5fdGFpbDoKK19fXworCSZjbG11bDY0eDY0X1QyCSgkWGhpLCRYaSwkSGtleTIsMSk7CSMgSF4yKihJaStYaSkKKyRjb2RlLj08PF9fXzsKKwlweG9yCQkkWG4sJFhpCQkJIyAoSCpJaSsxKSArIEheMiooSWkrWGkpCisJcHhvcgkJJFhobiwkWGhpCitfX18KKwkmcmVkdWN0aW9uX2FsZzkJKCRYaGksJFhpKTsKKyRjb2RlLj08PF9fXzsKKwl0ZXN0CQkkbGVuLCRsZW4KKwlqbnoJCS5MZG9uZQorCisuTG9kZF90YWlsOgorCW1vdmRxdQkJKCRpbnApLCRUMQkJIyBJaQorCXBzaHVmYgkJJFQzLCRUMQorCXB4b3IJCSRUMSwkWGkJCQkjIElpK1hpCitfX18KKwkmY2xtdWw2NHg2NF9UMgkoJFhoaSwkWGksJEhrZXkpOwkjIEgqKElpK1hpKQorCSZyZWR1Y3Rpb25fYWxnOQkoJFhoaSwkWGkpOworJGNvZGUuPTw8X19fOworLkxkb25lOgorCXBzaHVmYgkJJFQzLCRYaQorCW1vdmRxdQkJJFhpLCgkWGlwKQorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSglcnNwKSwleG1tNgorCW1vdmFwcwkweDEwKCVyc3ApLCV4bW03CisJbW92YXBzCTB4MjAoJXJzcCksJXhtbTgKKwltb3ZhcHMJMHgzMCglcnNwKSwleG1tOQorCW1vdmFwcwkweDQwKCVyc3ApLCV4bW0xMAorCWFkZAlcJDB4NTgsJXJzcAorX19fCiskY29kZS49PDxfX187CisJcmV0CisuTFNFSF9lbmRfZ2NtX2doYXNoX2NsbXVsOgorLnNpemUJZ2NtX2doYXNoX2NsbXVsLC4tZ2NtX2doYXNoX2NsbXVsCitfX18KK30KKworJGNvZGUuPTw8X19fOworLmFsaWduCTY0CisuTGJzd2FwX21hc2s6CisJLmJ5dGUJMTUsMTQsMTMsMTIsMTEsMTAsOSw4LDcsNiw1LDQsMywyLDEsMAorLkwweDFjMl9wb2x5bm9taWFsOgorCS5ieXRlCTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB4YzIKKy5hbGlnbgk2NAorLnR5cGUJLkxyZW1fNGJpdCxcQG9iamVjdAorLkxyZW1fNGJpdDoKKwkubG9uZwkwLGAweDAwMDA8PDE2YCwwLGAweDFDMjA8PDE2YCwwLGAweDM4NDA8PDE2YCwwLGAweDI0NjA8PDE2YAorCS5sb25nCTAsYDB4NzA4MDw8MTZgLDAsYDB4NkNBMDw8MTZgLDAsYDB4NDhDMDw8MTZgLDAsYDB4NTRFMDw8MTZgCisJLmxvbmcJMCxgMHhFMTAwPDwxNmAsMCxgMHhGRDIwPDwxNmAsMCxgMHhEOTQwPDwxNmAsMCxgMHhDNTYwPDwxNmAKKwkubG9uZwkwLGAweDkxODA8PDE2YCwwLGAweDhEQTA8PDE2YCwwLGAweEE5QzA8PDE2YCwwLGAweEI1RTA8PDE2YAorLnR5cGUJLkxyZW1fOGJpdCxcQG9iamVjdAorLkxyZW1fOGJpdDoKKwkudmFsdWUJMHgwMDAwLDB4MDFDMiwweDAzODQsMHgwMjQ2LDB4MDcwOCwweDA2Q0EsMHgwNDhDLDB4MDU0RQorCS52YWx1ZQkweDBFMTAsMHgwRkQyLDB4MEQ5NCwweDBDNTYsMHgwOTE4LDB4MDhEQSwweDBBOUMsMHgwQjVFCisJLnZhbHVlCTB4MUMyMCwweDFERTIsMHgxRkE0LDB4MUU2NiwweDFCMjgsMHgxQUVBLDB4MThBQywweDE5NkUKKwkudmFsdWUJMHgxMjMwLDB4MTNGMiwweDExQjQsMHgxMDc2LDB4MTUzOCwweDE0RkEsMHgxNkJDLDB4MTc3RQorCS52YWx1ZQkweDM4NDAsMHgzOTgyLDB4M0JDNCwweDNBMDYsMHgzRjQ4LDB4M0U4QSwweDNDQ0MsMHgzRDBFCisJLnZhbHVlCTB4MzY1MCwweDM3OTIsMHgzNUQ0LDB4MzQxNiwweDMxNTgsMHgzMDlBLDB4MzJEQywweDMzMUUKKwkudmFsdWUJMHgyNDYwLDB4MjVBMiwweDI3RTQsMHgyNjI2LDB4MjM2OCwweDIyQUEsMHgyMEVDLDB4MjEyRQorCS52YWx1ZQkweDJBNzAsMHgyQkIyLDB4MjlGNCwweDI4MzYsMHgyRDc4LDB4MkNCQSwweDJFRkMsMHgyRjNFCisJLnZhbHVlCTB4NzA4MCwweDcxNDIsMHg3MzA0LDB4NzJDNiwweDc3ODgsMHg3NjRBLDB4NzQwQywweDc1Q0UKKwkudmFsdWUJMHg3RTkwLDB4N0Y1MiwweDdEMTQsMHg3Q0Q2LDB4Nzk5OCwweDc4NUEsMHg3QTFDLDB4N0JERQorCS52YWx1ZQkweDZDQTAsMHg2RDYyLDB4NkYyNCwweDZFRTYsMHg2QkE4LDB4NkE2QSwweDY4MkMsMHg2OUVFCisJLnZhbHVlCTB4NjJCMCwweDYzNzIsMHg2MTM0LDB4NjBGNiwweDY1QjgsMHg2NDdBLDB4NjYzQywweDY3RkUKKwkudmFsdWUJMHg0OEMwLDB4NDkwMiwweDRCNDQsMHg0QTg2LDB4NEZDOCwweDRFMEEsMHg0QzRDLDB4NEQ4RQorCS52YWx1ZQkweDQ2RDAsMHg0NzEyLDB4NDU1NCwweDQ0OTYsMHg0MUQ4LDB4NDAxQSwweDQyNUMsMHg0MzlFCisJLnZhbHVlCTB4NTRFMCwweDU1MjIsMHg1NzY0LDB4NTZBNiwweDUzRTgsMHg1MjJBLDB4NTA2QywweDUxQUUKKwkudmFsdWUJMHg1QUYwLDB4NUIzMiwweDU5NzQsMHg1OEI2LDB4NURGOCwweDVDM0EsMHg1RTdDLDB4NUZCRQorCS52YWx1ZQkweEUxMDAsMHhFMEMyLDB4RTI4NCwweEUzNDYsMHhFNjA4LDB4RTdDQSwweEU1OEMsMHhFNDRFCisJLnZhbHVlCTB4RUYxMCwweEVFRDIsMHhFQzk0LDB4RUQ1NiwweEU4MTgsMHhFOURBLDB4RUI5QywweEVBNUUKKwkudmFsdWUJMHhGRDIwLDB4RkNFMiwweEZFQTQsMHhGRjY2LDB4RkEyOCwweEZCRUEsMHhGOUFDLDB4Rjg2RQorCS52YWx1ZQkweEYzMzAsMHhGMkYyLDB4RjBCNCwweEYxNzYsMHhGNDM4LDB4RjVGQSwweEY3QkMsMHhGNjdFCisJLnZhbHVlCTB4RDk0MCwweEQ4ODIsMHhEQUM0LDB4REIwNiwweERFNDgsMHhERjhBLDB4RERDQywweERDMEUKKwkudmFsdWUJMHhENzUwLDB4RDY5MiwweEQ0RDQsMHhENTE2LDB4RDA1OCwweEQxOUEsMHhEM0RDLDB4RDIxRQorCS52YWx1ZQkweEM1NjAsMHhDNEEyLDB4QzZFNCwweEM3MjYsMHhDMjY4LDB4QzNBQSwweEMxRUMsMHhDMDJFCisJLnZhbHVlCTB4Q0I3MCwweENBQjIsMHhDOEY0LDB4QzkzNiwweENDNzgsMHhDREJBLDB4Q0ZGQywweENFM0UKKwkudmFsdWUJMHg5MTgwLDB4OTA0MiwweDkyMDQsMHg5M0M2LDB4OTY4OCwweDk3NEEsMHg5NTBDLDB4OTRDRQorCS52YWx1ZQkweDlGOTAsMHg5RTUyLDB4OUMxNCwweDlERDYsMHg5ODk4LDB4OTk1QSwweDlCMUMsMHg5QURFCisJLnZhbHVlCTB4OERBMCwweDhDNjIsMHg4RTI0LDB4OEZFNiwweDhBQTgsMHg4QjZBLDB4ODkyQywweDg4RUUKKwkudmFsdWUJMHg4M0IwLDB4ODI3MiwweDgwMzQsMHg4MUY2LDB4ODRCOCwweDg1N0EsMHg4NzNDLDB4ODZGRQorCS52YWx1ZQkweEE5QzAsMHhBODAyLDB4QUE0NCwweEFCODYsMHhBRUM4LDB4QUYwQSwweEFENEMsMHhBQzhFCisJLnZhbHVlCTB4QTdEMCwweEE2MTIsMHhBNDU0LDB4QTU5NiwweEEwRDgsMHhBMTFBLDB4QTM1QywweEEyOUUKKwkudmFsdWUJMHhCNUUwLDB4QjQyMiwweEI2NjQsMHhCN0E2LDB4QjJFOCwweEIzMkEsMHhCMTZDLDB4QjBBRQorCS52YWx1ZQkweEJCRjAsMHhCQTMyLDB4Qjg3NCwweEI5QjYsMHhCQ0Y4LDB4QkQzQSwweEJGN0MsMHhCRUJFCisKKy5hc2NpegkiR0hBU0ggZm9yIHg4Nl82NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKy5hbGlnbgk2NAorX19fCisMCisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworJHJlYz0iJXJjeCI7CiskZnJhbWU9IiVyZHgiOworJGNvbnRleHQ9IiVyOCI7CiskZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCW1vdgk4KCRkaXNwKSwlcnNpCQkjIGRpc3AtPkltYWdlQmFzZQorCW1vdgk1NigkZGlzcCksJXIxMQkJIyBkaXNwLT5IYW5kbGVyRGF0YQorCisJbW92CTAoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMF0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIHByb2xvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8cHJvbG9ndWUgbGFiZWwKKwlqYgkuTGluX3Byb2xvZ3VlCisKKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AKKworCW1vdgk0KCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzFdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBlcGlsb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj1lcGlsb2d1ZSBsYWJlbAorCWphZQkuTGluX3Byb2xvZ3VlCisKKwlsZWEJMjQoJXJheCksJXJheAkJIyBhZGp1c3QgInJzcCIKKworCW1vdgktOCglcmF4KSwlcmJ4CisJbW92CS0xNiglcmF4KSwlcmJwCisJbW92CS0yNCglcmF4KSwlcjEyCisJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisJbW92CSVyYnAsMTYwKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJwCisJbW92CSVyMTIsMjE2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEyCisKKy5MaW5fcHJvbG9ndWU6CisJbW92CTgoJXJheCksJXJkaQorCW1vdgkxNiglcmF4KSwlcnNpCisJbW92CSVyYXgsMTUyKCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNwCisJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UnNpCisJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisKKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKwltb3YJXCRgMTIzMi84YCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKworCW1vdgkkZGlzcCwlcnNpCisJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorCW1vdgk4KCVyc2kpLCVyZHgJCSMgYXJnMiwgZGlzcC0+SW1hZ2VCYXNlCisJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorCW1vdgk0MCglcnNpKSwlcjEwCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorCW1vdgklcjEwLDMyKCVyc3ApCQkjIGFyZzUKKwltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2CisJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworCW1vdgklcmN4LDU2KCVyc3ApCQkjIGFyZzgsIChOVUxMKQorCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKworCW1vdglcJDEsJWVheAkJIyBFeGNlcHRpb25Db250aW51ZVNlYXJjaAorCWFkZAlcJDY0LCVyc3AKKwlwb3BmcQorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcmRpCisJcG9wCSVyc2kKKwlyZXQKKy5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luX2djbV9nbXVsdF80Yml0CisJLnJ2YQkuTFNFSF9lbmRfZ2NtX2dtdWx0XzRiaXQKKwkucnZhCS5MU0VIX2luZm9fZ2NtX2dtdWx0XzRiaXQKKworCS5ydmEJLkxTRUhfYmVnaW5fZ2NtX2doYXNoXzRiaXQKKwkucnZhCS5MU0VIX2VuZF9nY21fZ2hhc2hfNGJpdAorCS5ydmEJLkxTRUhfaW5mb19nY21fZ2hhc2hfNGJpdAorCisJLnJ2YQkuTFNFSF9iZWdpbl9nY21fZ2hhc2hfY2xtdWwKKwkucnZhCS5MU0VIX2VuZF9nY21fZ2hhc2hfY2xtdWwKKwkucnZhCS5MU0VIX2luZm9fZ2NtX2doYXNoX2NsbXVsCisKKy5zZWN0aW9uCS54ZGF0YQorLmFsaWduCTgKKy5MU0VIX2luZm9fZ2NtX2dtdWx0XzRiaXQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorCS5ydmEJLkxnbXVsdF9wcm9sb2d1ZSwuTGdtdWx0X2VwaWxvZ3VlCSMgSGFuZGxlckRhdGEKKy5MU0VIX2luZm9fZ2NtX2doYXNoXzRiaXQ6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc2VfaGFuZGxlcgorCS5ydmEJLkxnaGFzaF9wcm9sb2d1ZSwuTGdoYXNoX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGEKKy5MU0VIX2luZm9fZ2NtX2doYXNoX2NsbXVsOgorCS5ieXRlCTB4MDEsMHgxZiwweDBiLDB4MDAKKwkuYnl0ZQkweDFmLDB4YTgsMHgwNCwweDAwCSNtb3ZhcHMgMHg0MChyc3ApLHhtbTEwCisJLmJ5dGUJMHgxOSwweDk4LDB4MDMsMHgwMAkjbW92YXBzIDB4MzAocnNwKSx4bW05CisJLmJ5dGUJMHgxMywweDg4LDB4MDIsMHgwMAkjbW92YXBzIDB4MjAocnNwKSx4bW04CisJLmJ5dGUJMHgwZCwweDc4LDB4MDEsMHgwMAkjbW92YXBzIDB4MTAocnNwKSx4bW03CisJLmJ5dGUJMHgwOCwweDY4LDB4MDAsMHgwMAkjbW92YXBzIChyc3ApLHhtbTYKKwkuYnl0ZQkweDA0LDB4YTIsMHgwMCwweDAwCSNzdWIJcnNwLDB4NTgKK19fXworfQorDAorJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2VtOworCitwcmludCAkY29kZTsKKworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2NiYzEyOC5jIGIvY3J5cHRvL21vZGVzL2NiYzEyOC5jCmluZGV4IDhmOGJkNTYuLjNkMzc4MmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tb2Rlcy9jYmMxMjguYworKysgYi9jcnlwdG8vbW9kZXMvY2JjMTI4LmMKQEAgLTQ4LDcgKzQ4LDggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgIm1vZGVzLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlICJtb2Rlc19sY2wuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmbmRlZiBNT0RFU19ERUJVRwpAQCAtNTgsMTIgKzU5LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMQotI2lmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCi0gICAgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgXAotICAgIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKQotIyAgdW5kZWYgU1RSSUNUX0FMSUdOTUVOVAorI2lmbmRlZiBTVFJJQ1RfQUxJR05NRU5UCiAjICBkZWZpbmUgU1RSSUNUX0FMSUdOTUVOVCAwCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2NjbTEyOC5jIGIvY3J5cHRvL21vZGVzL2NjbTEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvY2NtMTI4LmMKQEAgLTAsMCArMSw0NDEgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSAibW9kZXNfbGNsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgTU9ERVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIEZpcnN0IHlvdSBzZXR1cCBNIGFuZCBMIHBhcmFtZXRlcnMgYW5kIHBhc3MgdGhlIGtleSBzY2hlZHVsZS4KKyAqIFRoaXMgaXMgY2FsbGVkIG9uY2UgcGVyIHNlc3Npb24gc2V0dXAuLi4gKi8KK3ZvaWQgQ1JZUFRPX2NjbTEyOF9pbml0KENDTTEyOF9DT05URVhUICpjdHgsCisJdW5zaWduZWQgaW50IE0sdW5zaWduZWQgaW50IEwsdm9pZCAqa2V5LGJsb2NrMTI4X2YgYmxvY2spCit7CisJbWVtc2V0KGN0eC0+bm9uY2UuYywwLHNpemVvZihjdHgtPm5vbmNlLmMpKTsKKwljdHgtPm5vbmNlLmNbMF0gPSAoKHU4KShMLTEpJjcpIHwgKHU4KSgoKE0tMikvMikmNyk8PDM7CisJY3R4LT5ibG9ja3MgPSAwOworCWN0eC0+YmxvY2sgPSBibG9jazsKKwljdHgtPmtleSA9IGtleTsKK30KKworLyogISEhIEZvbGxvd2luZyBpbnRlcmZhY2VzIGFyZSB0byBiZSBjYWxsZWQgKm9uY2UqIHBlciBwYWNrZXQgISEhICovCisKKy8qIFRoZW4geW91IHNldHVwIHBlci1tZXNzYWdlIG5vbmNlIGFuZCBwYXNzIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KK2ludCBDUllQVE9fY2NtMTI4X3NldGl2KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2Usc2l6ZV90IG5sZW4sc2l6ZV90IG1sZW4pCit7CisJdW5zaWduZWQgaW50IEwgPSBjdHgtPm5vbmNlLmNbMF0mNzsJLyogdGhlIEwgcGFyYW1ldGVyICovCisKKwlpZiAobmxlbjwoMTQtTCkpIHJldHVybiAtMTsJCS8qIG5vbmNlIGlzIHRvbyBzaG9ydCAqLworCisJaWYgKHNpemVvZihtbGVuKT09OCAmJiBMPj0zKSB7CisJCWN0eC0+bm9uY2UuY1s4XSAgPSAodTgpKG1sZW4+Pig1NiUoc2l6ZW9mKG1sZW4pKjgpKSk7CisJCWN0eC0+bm9uY2UuY1s5XSAgPSAodTgpKG1sZW4+Pig0OCUoc2l6ZW9mKG1sZW4pKjgpKSk7CisJCWN0eC0+bm9uY2UuY1sxMF0gPSAodTgpKG1sZW4+Pig0MCUoc2l6ZW9mKG1sZW4pKjgpKSk7CisJCWN0eC0+bm9uY2UuY1sxMV0gPSAodTgpKG1sZW4+PigzMiUoc2l6ZW9mKG1sZW4pKjgpKSk7CisJfQorCWVsc2UKKwkJKih1MzIqKSgmY3R4LT5ub25jZS5jWzhdKSA9IDA7CisKKwljdHgtPm5vbmNlLmNbMTJdID0gKHU4KShtbGVuPj4yNCk7CisJY3R4LT5ub25jZS5jWzEzXSA9ICh1OCkobWxlbj4+MTYpOworCWN0eC0+bm9uY2UuY1sxNF0gPSAodTgpKG1sZW4+PjgpOworCWN0eC0+bm9uY2UuY1sxNV0gPSAodTgpbWxlbjsKKworCWN0eC0+bm9uY2UuY1swXSAmPSB+MHg0MDsJLyogY2xlYXIgQWRhdGEgZmxhZyAqLworCW1lbWNweSgmY3R4LT5ub25jZS5jWzFdLG5vbmNlLDE0LUwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZW4geW91IHBhc3MgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhLCB0aGlzIGlzIG9wdGlvbmFsICovCit2b2lkIENSWVBUT19jY20xMjhfYWFkKENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqYWFkLHNpemVfdCBhbGVuKQorewl1bnNpZ25lZCBpbnQgaTsKKwlibG9jazEyOF9mIGJsb2NrID0gY3R4LT5ibG9jazsKKworCWlmIChhbGVuPT0wKSByZXR1cm47CisKKwljdHgtPm5vbmNlLmNbMF0gfD0gMHg0MDsJLyogc2V0IEFkYXRhIGZsYWcgKi8KKwkoKmJsb2NrKShjdHgtPm5vbmNlLmMsY3R4LT5jbWFjLmMsY3R4LT5rZXkpLAorCWN0eC0+YmxvY2tzKys7CisKKwlpZiAoYWxlbjwoMHgxMDAwMC0weDEwMCkpIHsKKwkJY3R4LT5jbWFjLmNbMF0gXj0gKHU4KShhbGVuPj44KTsKKwkJY3R4LT5jbWFjLmNbMV0gXj0gKHU4KWFsZW47CisJCWk9MjsKKwl9CisJZWxzZSBpZiAoc2l6ZW9mKGFsZW4pPT04ICYmIGFsZW4+PShzaXplX3QpMTw8KDMyJShzaXplb2YoYWxlbikqOCkpKSB7CisJCWN0eC0+Y21hYy5jWzBdIF49IDB4RkY7CisJCWN0eC0+Y21hYy5jWzFdIF49IDB4RkY7CisJCWN0eC0+Y21hYy5jWzJdIF49ICh1OCkoYWxlbj4+KDU2JShzaXplb2YoYWxlbikqOCkpKTsKKwkJY3R4LT5jbWFjLmNbM10gXj0gKHU4KShhbGVuPj4oNDglKHNpemVvZihhbGVuKSo4KSkpOworCQljdHgtPmNtYWMuY1s0XSBePSAodTgpKGFsZW4+Pig0MCUoc2l6ZW9mKGFsZW4pKjgpKSk7CisJCWN0eC0+Y21hYy5jWzVdIF49ICh1OCkoYWxlbj4+KDMyJShzaXplb2YoYWxlbikqOCkpKTsKKwkJY3R4LT5jbWFjLmNbNl0gXj0gKHU4KShhbGVuPj4yNCk7CisJCWN0eC0+Y21hYy5jWzddIF49ICh1OCkoYWxlbj4+MTYpOworCQljdHgtPmNtYWMuY1s4XSBePSAodTgpKGFsZW4+PjgpOworCQljdHgtPmNtYWMuY1s5XSBePSAodTgpYWxlbjsKKwkJaT0xMDsKKwl9CisJZWxzZSB7CisJCWN0eC0+Y21hYy5jWzBdIF49IDB4RkY7CisJCWN0eC0+Y21hYy5jWzFdIF49IDB4RkU7CisJCWN0eC0+Y21hYy5jWzJdIF49ICh1OCkoYWxlbj4+MjQpOworCQljdHgtPmNtYWMuY1szXSBePSAodTgpKGFsZW4+PjE2KTsKKwkJY3R4LT5jbWFjLmNbNF0gXj0gKHU4KShhbGVuPj44KTsKKwkJY3R4LT5jbWFjLmNbNV0gXj0gKHU4KWFsZW47CisJCWk9NjsKKwl9CisKKwlkbyB7CisJCWZvcig7aTwxNiAmJiBhbGVuOysraSwrK2FhZCwtLWFsZW4pCisJCQljdHgtPmNtYWMuY1tpXSBePSAqYWFkOworCQkoKmJsb2NrKShjdHgtPmNtYWMuYyxjdHgtPmNtYWMuYyxjdHgtPmtleSksCisJCWN0eC0+YmxvY2tzKys7CisJCWk9MDsKKwl9IHdoaWxlIChhbGVuKTsKK30KKworLyogRmluYWxseSB5b3UgZW5jcnlwdCBvciBkZWNyeXB0IHRoZSBtZXNzYWdlICovCisKKy8qIGNvdW50ZXIgcGFydCBvZiBub25jZSBtYXkgbm90IGJlIGxhcmdlciB0aGFuIEwqOCBiaXRzLAorICogTCBpcyBub3QgbGFyZ2VyIHRoYW4gOCwgdGhlcmVmb3JlIDY0LWJpdCBjb3VudGVyLi4uICovCitzdGF0aWMgdm9pZCBjdHI2NF9pbmModW5zaWduZWQgY2hhciAqY291bnRlcikgeworCXVuc2lnbmVkIGludCBuPTg7CisJdTggIGM7CisKKwljb3VudGVyICs9IDg7CisJZG8geworCQktLW47CisJCWMgPSBjb3VudGVyW25dOworCQkrK2M7CisJCWNvdW50ZXJbbl0gPSBjOworCQlpZiAoYykgcmV0dXJuOworCX0gd2hpbGUgKG4pOworfQorCitpbnQgQ1JZUFRPX2NjbTEyOF9lbmNyeXB0KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbikKK3sKKwlzaXplX3QJCW47CisJdW5zaWduZWQgaW50CWksTDsKKwl1bnNpZ25lZCBjaGFyCWZsYWdzMAk9IGN0eC0+bm9uY2UuY1swXTsKKwlibG9jazEyOF9mCWJsb2NrCT0gY3R4LT5ibG9jazsKKwl2b2lkICoJCWtleQk9IGN0eC0+a2V5OworCXVuaW9uIHsgdTY0IHVbMl07IHU4IGNbMTZdOyB9IHNjcmF0Y2g7CisKKwlpZiAoIShmbGFnczAmMHg0MCkpCisJCSgqYmxvY2spKGN0eC0+bm9uY2UuYyxjdHgtPmNtYWMuYyxrZXkpLAorCQljdHgtPmJsb2NrcysrOworCisJY3R4LT5ub25jZS5jWzBdID0gTCA9IGZsYWdzMCY3OworCWZvciAobj0wLGk9MTUtTDtpPDE1OysraSkgeworCQluIHw9IGN0eC0+bm9uY2UuY1tpXTsKKwkJY3R4LT5ub25jZS5jW2ldPTA7CisJCW4gPDw9IDg7CisJfQorCW4gfD0gY3R4LT5ub25jZS5jWzE1XTsJLyogcmVjb25zdHJ1Y3RlZCBsZW5ndGggKi8KKwljdHgtPm5vbmNlLmNbMTVdPTE7CisKKwlpZiAobiE9bGVuKSByZXR1cm4gLTE7CS8qIGxlbmd0aCBtaXNtYXRjaCAqLworCisJY3R4LT5ibG9ja3MgKz0gKChsZW4rMTUpPj4zKXwxOworCWlmIChjdHgtPmJsb2NrcyA+IChVNjQoMSk8PDYxKSkJcmV0dXJuIC0yOyAvKiB0b28gbXVjaCBkYXRhICovCisKKwl3aGlsZSAobGVuPj0xNikgeworI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJdW5pb24geyB1NjQgdVsyXTsgdTggY1sxNl07IH0gdGVtcDsKKworCQltZW1jcHkgKHRlbXAuYyxpbnAsMTYpOworCQljdHgtPmNtYWMudVswXSBePSB0ZW1wLnVbMF07CisJCWN0eC0+Y21hYy51WzFdIF49IHRlbXAudVsxXTsKKyNlbHNlCisJCWN0eC0+Y21hYy51WzBdIF49ICgodTY0KilpbnApWzBdOworCQljdHgtPmNtYWMudVsxXSBePSAoKHU2NCopaW5wKVsxXTsKKyNlbmRpZgorCQkoKmJsb2NrKShjdHgtPmNtYWMuYyxjdHgtPmNtYWMuYyxrZXkpOworCQkoKmJsb2NrKShjdHgtPm5vbmNlLmMsc2NyYXRjaC5jLGtleSk7CisJCWN0cjY0X2luYyhjdHgtPm5vbmNlLmMpOworI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJdGVtcC51WzBdIF49IHNjcmF0Y2gudVswXTsKKwkJdGVtcC51WzFdIF49IHNjcmF0Y2gudVsxXTsKKwkJbWVtY3B5KG91dCx0ZW1wLmMsMTYpOworI2Vsc2UKKwkJKCh1NjQqKW91dClbMF0gPSBzY3JhdGNoLnVbMF1eKCh1NjQqKWlucClbMF07CisJCSgodTY0KilvdXQpWzFdID0gc2NyYXRjaC51WzFdXigodTY0KilpbnApWzFdOworI2VuZGlmCisJCWlucCArPSAxNjsKKwkJb3V0ICs9IDE2OworCQlsZW4gLT0gMTY7CisJfQorCisJaWYgKGxlbikgeworCQlmb3IgKGk9MDsgaTxsZW47ICsraSkgY3R4LT5jbWFjLmNbaV0gXj0gaW5wW2ldOworCQkoKmJsb2NrKShjdHgtPmNtYWMuYyxjdHgtPmNtYWMuYyxrZXkpOworCQkoKmJsb2NrKShjdHgtPm5vbmNlLmMsc2NyYXRjaC5jLGtleSk7CisJCWZvciAoaT0wOyBpPGxlbjsgKytpKSBvdXRbaV0gPSBzY3JhdGNoLmNbaV1eaW5wW2ldOworCX0KKworCWZvciAoaT0xNS1MO2k8MTY7KytpKQorCQljdHgtPm5vbmNlLmNbaV09MDsKKworCSgqYmxvY2spKGN0eC0+bm9uY2UuYyxzY3JhdGNoLmMsa2V5KTsKKwljdHgtPmNtYWMudVswXSBePSBzY3JhdGNoLnVbMF07CisJY3R4LT5jbWFjLnVbMV0gXj0gc2NyYXRjaC51WzFdOworCisJY3R4LT5ub25jZS5jWzBdID0gZmxhZ3MwOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBDUllQVE9fY2NtMTI4X2RlY3J5cHQoQ0NNMTI4X0NPTlRFWFQgKmN0eCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbnAsIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuKQoreworCXNpemVfdAkJbjsKKwl1bnNpZ25lZCBpbnQJaSxMOworCXVuc2lnbmVkIGNoYXIJZmxhZ3MwCT0gY3R4LT5ub25jZS5jWzBdOworCWJsb2NrMTI4X2YJYmxvY2sJPSBjdHgtPmJsb2NrOworCXZvaWQgKgkJa2V5CT0gY3R4LT5rZXk7CisJdW5pb24geyB1NjQgdVsyXTsgdTggY1sxNl07IH0gc2NyYXRjaDsKKworCWlmICghKGZsYWdzMCYweDQwKSkKKwkJKCpibG9jaykoY3R4LT5ub25jZS5jLGN0eC0+Y21hYy5jLGtleSk7CisKKwljdHgtPm5vbmNlLmNbMF0gPSBMID0gZmxhZ3MwJjc7CisJZm9yIChuPTAsaT0xNS1MO2k8MTU7KytpKSB7CisJCW4gfD0gY3R4LT5ub25jZS5jW2ldOworCQljdHgtPm5vbmNlLmNbaV09MDsKKwkJbiA8PD0gODsKKwl9CisJbiB8PSBjdHgtPm5vbmNlLmNbMTVdOwkvKiByZWNvbnN0cnVjdGVkIGxlbmd0aCAqLworCWN0eC0+bm9uY2UuY1sxNV09MTsKKworCWlmIChuIT1sZW4pIHJldHVybiAtMTsKKworCXdoaWxlIChsZW4+PTE2KSB7CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQl1bmlvbiB7IHU2NCB1WzJdOyB1OCBjWzE2XTsgfSB0ZW1wOworI2VuZGlmCisJCSgqYmxvY2spKGN0eC0+bm9uY2UuYyxzY3JhdGNoLmMsa2V5KTsKKwkJY3RyNjRfaW5jKGN0eC0+bm9uY2UuYyk7CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQltZW1jcHkgKHRlbXAuYyxpbnAsMTYpOworCQljdHgtPmNtYWMudVswXSBePSAoc2NyYXRjaC51WzBdIF49IHRlbXAudVswXSk7CisJCWN0eC0+Y21hYy51WzFdIF49IChzY3JhdGNoLnVbMV0gXj0gdGVtcC51WzFdKTsKKwkJbWVtY3B5IChvdXQsc2NyYXRjaC5jLDE2KTsKKyNlbHNlCisJCWN0eC0+Y21hYy51WzBdIF49ICgoKHU2NCopb3V0KVswXSA9IHNjcmF0Y2gudVswXV4oKHU2NCopaW5wKVswXSk7CisJCWN0eC0+Y21hYy51WzFdIF49ICgoKHU2NCopb3V0KVsxXSA9IHNjcmF0Y2gudVsxXV4oKHU2NCopaW5wKVsxXSk7CisjZW5kaWYKKwkJKCpibG9jaykoY3R4LT5jbWFjLmMsY3R4LT5jbWFjLmMsa2V5KTsKKworCQlpbnAgKz0gMTY7CisJCW91dCArPSAxNjsKKwkJbGVuIC09IDE2OworCX0KKworCWlmIChsZW4pIHsKKwkJKCpibG9jaykoY3R4LT5ub25jZS5jLHNjcmF0Y2guYyxrZXkpOworCQlmb3IgKGk9MDsgaTxsZW47ICsraSkKKwkJCWN0eC0+Y21hYy5jW2ldIF49IChvdXRbaV0gPSBzY3JhdGNoLmNbaV1eaW5wW2ldKTsKKwkJKCpibG9jaykoY3R4LT5jbWFjLmMsY3R4LT5jbWFjLmMsa2V5KTsKKwl9CisKKwlmb3IgKGk9MTUtTDtpPDE2OysraSkKKwkJY3R4LT5ub25jZS5jW2ldPTA7CisKKwkoKmJsb2NrKShjdHgtPm5vbmNlLmMsc2NyYXRjaC5jLGtleSk7CisJY3R4LT5jbWFjLnVbMF0gXj0gc2NyYXRjaC51WzBdOworCWN0eC0+Y21hYy51WzFdIF49IHNjcmF0Y2gudVsxXTsKKworCWN0eC0+bm9uY2UuY1swXSA9IGZsYWdzMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjdHI2NF9hZGQgKHVuc2lnbmVkIGNoYXIgKmNvdW50ZXIsc2l6ZV90IGluYykKK3sJc2l6ZV90IG49OCwgdmFsPTA7CisKKwljb3VudGVyICs9IDg7CisJZG8geworCQktLW47CisJCXZhbCArPSBjb3VudGVyW25dICsgKGluYyYweGZmKTsKKwkJY291bnRlcltuXSA9ICh1bnNpZ25lZCBjaGFyKXZhbDsKKwkJdmFsID4+PSA4OwkvKiBjYXJyeSBiaXQgKi8KKwkJaW5jID4+PSA4OworCX0gd2hpbGUobiAmJiAoaW5jIHx8IHZhbCkpOworfQorCitpbnQgQ1JZUFRPX2NjbTEyOF9lbmNyeXB0X2NjbTY0KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbixjY20xMjhfZiBzdHJlYW0pCit7CisJc2l6ZV90CQluOworCXVuc2lnbmVkIGludAlpLEw7CisJdW5zaWduZWQgY2hhcglmbGFnczAJPSBjdHgtPm5vbmNlLmNbMF07CisJYmxvY2sxMjhfZglibG9jawk9IGN0eC0+YmxvY2s7CisJdm9pZCAqCQlrZXkJPSBjdHgtPmtleTsKKwl1bmlvbiB7IHU2NCB1WzJdOyB1OCBjWzE2XTsgfSBzY3JhdGNoOworCisJaWYgKCEoZmxhZ3MwJjB4NDApKQorCQkoKmJsb2NrKShjdHgtPm5vbmNlLmMsY3R4LT5jbWFjLmMsa2V5KSwKKwkJY3R4LT5ibG9ja3MrKzsKKworCWN0eC0+bm9uY2UuY1swXSA9IEwgPSBmbGFnczAmNzsKKwlmb3IgKG49MCxpPTE1LUw7aTwxNTsrK2kpIHsKKwkJbiB8PSBjdHgtPm5vbmNlLmNbaV07CisJCWN0eC0+bm9uY2UuY1tpXT0wOworCQluIDw8PSA4OworCX0KKwluIHw9IGN0eC0+bm9uY2UuY1sxNV07CS8qIHJlY29uc3RydWN0ZWQgbGVuZ3RoICovCisJY3R4LT5ub25jZS5jWzE1XT0xOworCisJaWYgKG4hPWxlbikgcmV0dXJuIC0xOwkvKiBsZW5ndGggbWlzbWF0Y2ggKi8KKworCWN0eC0+YmxvY2tzICs9ICgobGVuKzE1KT4+Myl8MTsKKwlpZiAoY3R4LT5ibG9ja3MgPiAoVTY0KDEpPDw2MSkpCXJldHVybiAtMjsgLyogdG9vIG11Y2ggZGF0YSAqLworCisJaWYgKChuPWxlbi8xNikpIHsKKwkJKCpzdHJlYW0pKGlucCxvdXQsbixrZXksY3R4LT5ub25jZS5jLGN0eC0+Y21hYy5jKTsKKwkJbiAgICo9IDE2OworCQlpbnAgKz0gbjsKKwkJb3V0ICs9IG47CisJCWxlbiAtPSBuOworCQlpZiAobGVuKSBjdHI2NF9hZGQoY3R4LT5ub25jZS5jLG4vMTYpOworCX0KKworCWlmIChsZW4pIHsKKwkJZm9yIChpPTA7IGk8bGVuOyArK2kpIGN0eC0+Y21hYy5jW2ldIF49IGlucFtpXTsKKwkJKCpibG9jaykoY3R4LT5jbWFjLmMsY3R4LT5jbWFjLmMsa2V5KTsKKwkJKCpibG9jaykoY3R4LT5ub25jZS5jLHNjcmF0Y2guYyxrZXkpOworCQlmb3IgKGk9MDsgaTxsZW47ICsraSkgb3V0W2ldID0gc2NyYXRjaC5jW2ldXmlucFtpXTsKKwl9CisKKwlmb3IgKGk9MTUtTDtpPDE2OysraSkKKwkJY3R4LT5ub25jZS5jW2ldPTA7CisKKwkoKmJsb2NrKShjdHgtPm5vbmNlLmMsc2NyYXRjaC5jLGtleSk7CisJY3R4LT5jbWFjLnVbMF0gXj0gc2NyYXRjaC51WzBdOworCWN0eC0+Y21hYy51WzFdIF49IHNjcmF0Y2gudVsxXTsKKworCWN0eC0+bm9uY2UuY1swXSA9IGZsYWdzMDsKKworCXJldHVybiAwOworfQorCitpbnQgQ1JZUFRPX2NjbTEyOF9kZWNyeXB0X2NjbTY0KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbixjY20xMjhfZiBzdHJlYW0pCit7CisJc2l6ZV90CQluOworCXVuc2lnbmVkIGludAlpLEw7CisJdW5zaWduZWQgY2hhcglmbGFnczAJPSBjdHgtPm5vbmNlLmNbMF07CisJYmxvY2sxMjhfZglibG9jawk9IGN0eC0+YmxvY2s7CisJdm9pZCAqCQlrZXkJPSBjdHgtPmtleTsKKwl1bmlvbiB7IHU2NCB1WzJdOyB1OCBjWzE2XTsgfSBzY3JhdGNoOworCisJaWYgKCEoZmxhZ3MwJjB4NDApKQorCQkoKmJsb2NrKShjdHgtPm5vbmNlLmMsY3R4LT5jbWFjLmMsa2V5KTsKKworCWN0eC0+bm9uY2UuY1swXSA9IEwgPSBmbGFnczAmNzsKKwlmb3IgKG49MCxpPTE1LUw7aTwxNTsrK2kpIHsKKwkJbiB8PSBjdHgtPm5vbmNlLmNbaV07CisJCWN0eC0+bm9uY2UuY1tpXT0wOworCQluIDw8PSA4OworCX0KKwluIHw9IGN0eC0+bm9uY2UuY1sxNV07CS8qIHJlY29uc3RydWN0ZWQgbGVuZ3RoICovCisJY3R4LT5ub25jZS5jWzE1XT0xOworCisJaWYgKG4hPWxlbikgcmV0dXJuIC0xOworCisJaWYgKChuPWxlbi8xNikpIHsKKwkJKCpzdHJlYW0pKGlucCxvdXQsbixrZXksY3R4LT5ub25jZS5jLGN0eC0+Y21hYy5jKTsKKwkJbiAgICo9IDE2OworCQlpbnAgKz0gbjsKKwkJb3V0ICs9IG47CisJCWxlbiAtPSBuOworCQlpZiAobGVuKSBjdHI2NF9hZGQoY3R4LT5ub25jZS5jLG4vMTYpOworCX0KKworCWlmIChsZW4pIHsKKwkJKCpibG9jaykoY3R4LT5ub25jZS5jLHNjcmF0Y2guYyxrZXkpOworCQlmb3IgKGk9MDsgaTxsZW47ICsraSkKKwkJCWN0eC0+Y21hYy5jW2ldIF49IChvdXRbaV0gPSBzY3JhdGNoLmNbaV1eaW5wW2ldKTsKKwkJKCpibG9jaykoY3R4LT5jbWFjLmMsY3R4LT5jbWFjLmMsa2V5KTsKKwl9CisKKwlmb3IgKGk9MTUtTDtpPDE2OysraSkKKwkJY3R4LT5ub25jZS5jW2ldPTA7CisKKwkoKmJsb2NrKShjdHgtPm5vbmNlLmMsc2NyYXRjaC5jLGtleSk7CisJY3R4LT5jbWFjLnVbMF0gXj0gc2NyYXRjaC51WzBdOworCWN0eC0+Y21hYy51WzFdIF49IHNjcmF0Y2gudVsxXTsKKworCWN0eC0+bm9uY2UuY1swXSA9IGZsYWdzMDsKKworCXJldHVybiAwOworfQorCitzaXplX3QgQ1JZUFRPX2NjbTEyOF90YWcoQ0NNMTI4X0NPTlRFWFQgKmN0eCx1bnNpZ25lZCBjaGFyICp0YWcsc2l6ZV90IGxlbikKK3sJdW5zaWduZWQgaW50IE0gPSAoY3R4LT5ub25jZS5jWzBdPj4zKSY3OwkvKiB0aGUgTSBwYXJhbWV0ZXIgKi8KKworCU0gKj0gMjsgTSArPSAyOworCWlmIChsZW48TSkJcmV0dXJuIDA7CisJbWVtY3B5KHRhZyxjdHgtPmNtYWMuYyxNKTsKKwlyZXR1cm4gTTsKK30KZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9jZmIxMjguYyBiL2NyeXB0by9tb2Rlcy9jZmIxMjguYwppbmRleCBlNTkzOGM2Li40ZTZmNWQzIDEwMDY0NAotLS0gYS9jcnlwdG8vbW9kZXMvY2ZiMTI4LmMKKysrIGIvY3J5cHRvL21vZGVzL2NmYjEyOC5jCkBAIC00OCw3ICs0OCw4IEBACiAgKgogICovCiAKLSNpbmNsdWRlICJtb2Rlcy5oIgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSAibW9kZXNfbGNsLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpZm5kZWYgTU9ERVNfREVCVUcKQEAgLTU4LDE0ICs1OSw2IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAotI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UCi0jaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKLSAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKLSAgICBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBcCi0gICAgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCi0jICB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCi0jZW5kaWYKLQogLyogVGhlIGlucHV0IGFuZCBvdXRwdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY2ZiIG1vZGUgaXMgYmVpbmcKICAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQogICogMTI4Yml0IGJsb2NrIHdlIGhhdmUgdXNlZCBpcyBjb250YWluZWQgaW4gKm51bTsKZGlmZiAtLWdpdCBhL2NyeXB0by9tb2Rlcy9jdHIxMjguYyBiL2NyeXB0by9tb2Rlcy9jdHIxMjguYwppbmRleCA5MzIwMzdmLi5lZTY0MmM1IDEwMDY0NAotLS0gYS9jcnlwdG8vbW9kZXMvY3RyMTI4LmMKKysrIGIvY3J5cHRvL21vZGVzL2N0cjEyOC5jCkBAIC00OCw3ICs0OCw4IEBACiAgKgogICovCiAKLSNpbmNsdWRlICJtb2Rlcy5oIgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSAibW9kZXNfbGNsLmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpZm5kZWYgTU9ERVNfREVCVUcKQEAgLTU4LDE3ICs1OSw2IEBACiAjZW5kaWYKICNpbmNsdWRlIDxhc3NlcnQuaD4KIAotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwotCi0jZGVmaW5lIFNUUklDVF9BTElHTk1FTlQKLSNpZiBkZWZpbmVkKF9faTM4NikJfHwgZGVmaW5lZChfX2kzODZfXykJfHwgXAotICAgIGRlZmluZWQoX194ODZfNjQpCXx8IGRlZmluZWQoX194ODZfNjRfXykJfHwgXAotICAgIGRlZmluZWQoX01fSVg4NikJfHwgZGVmaW5lZChfTV9BTUQ2NCkJfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKLSAgICBkZWZpbmVkKF9fczM5MF9fKQl8fCBkZWZpbmVkKF9fczM5MHhfXykKLSMgIHVuZGVmIFNUUklDVF9BTElHTk1FTlQKLSNlbmRpZgotCiAvKiBOT1RFOiB0aGUgSVYvY291bnRlciBDVFIgbW9kZSBpcyBiaWctZW5kaWFuLiAgVGhlIGNvZGUgaXRzZWxmCiAgKiBpcyBlbmRpYW4tbmV1dHJhbC4gKi8KIApAQCAtMTgyLDMgKzE3Miw4MSBAQAogCiAJKm51bT1uOwogfQorCisvKiBpbmNyZW1lbnQgdXBwZXIgOTYgYml0cyBvZiAxMjgtYml0IGNvdW50ZXIgYnkgMSAqLworc3RhdGljIHZvaWQgY3RyOTZfaW5jKHVuc2lnbmVkIGNoYXIgKmNvdW50ZXIpIHsKKwl1MzIgbj0xMjsKKwl1OCAgYzsKKworCWRvIHsKKwkJLS1uOworCQljID0gY291bnRlcltuXTsKKwkJKytjOworCQljb3VudGVyW25dID0gYzsKKwkJaWYgKGMpIHJldHVybjsKKwl9IHdoaWxlIChuKTsKK30KKwordm9pZCBDUllQVE9fY3RyMTI4X2VuY3J5cHRfY3RyMzIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIHVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZlsxNl0sCisJCQl1bnNpZ25lZCBpbnQgKm51bSwgY3RyMTI4X2YgZnVuYykKK3sKKwl1bnNpZ25lZCBpbnQgbixjdHIzMjsKKworCWFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGVjb3VudF9idWYgJiYgbnVtKTsKKwlhc3NlcnQoKm51bSA8IDE2KTsKKworCW4gPSAqbnVtOworCisJd2hpbGUgKG4gJiYgbGVuKSB7CisJCSoob3V0KyspID0gKihpbisrKSBeIGVjb3VudF9idWZbbl07CisJCS0tbGVuOworCQluID0gKG4rMSkgJSAxNjsKKwl9CisKKwljdHIzMiA9IEdFVFUzMihpdmVjKzEyKTsKKwl3aGlsZSAobGVuPj0xNikgeworCQlzaXplX3QgYmxvY2tzID0gbGVuLzE2OworCQkvKgorCQkgKiAxPDwyOCBpcyBqdXN0IGEgbm90LXNvLXNtYWxsIHlldCBub3Qtc28tbGFyZ2UgbnVtYmVyLi4uCisJCSAqIEJlbG93IGNvbmRpdGlvbiBpcyBwcmFjdGljYWxseSBuZXZlciBtZXQsIGJ1dCBpdCBoYXMgdG8KKwkJICogYmUgY2hlY2tlZCBmb3IgY29kZSBjb3JyZWN0bmVzcy4KKwkJICovCisJCWlmIChzaXplb2Yoc2l6ZV90KT5zaXplb2YodW5zaWduZWQgaW50KSAmJiBibG9ja3M+KDFVPDwyOCkpCisJCQlibG9ja3MgPSAoMVU8PDI4KTsKKwkJLyoKKwkJICogQXMgKCpmdW5jKSBvcGVyYXRlcyBvbiAzMi1iaXQgY291bnRlciwgY2FsbGVyCisJCSAqIGhhcyB0byBoYW5kbGUgb3ZlcmZsb3cuICdpZicgYmVsb3cgZGV0ZWN0cyB0aGUKKwkJICogb3ZlcmZsb3csIHdoaWNoIGlzIHRoZW4gaGFuZGxlZCBieSBsaW1pdGluZyB0aGUKKwkJICogYW1vdW50IG9mIGJsb2NrcyB0byB0aGUgZXhhY3Qgb3ZlcmZsb3cgcG9pbnQuLi4KKwkJICovCisJCWN0cjMyICs9ICh1MzIpYmxvY2tzOworCQlpZiAoY3RyMzIgPCBibG9ja3MpIHsKKwkJCWJsb2NrcyAtPSBjdHIzMjsKKwkJCWN0cjMyICAgPSAwOworCQl9CisJCSgqZnVuYykoaW4sb3V0LGJsb2NrcyxrZXksaXZlYyk7CisJCS8qICgqY3RyKSBkb2VzIG5vdCB1cGRhdGUgaXZlYywgY2FsbGVyIGRvZXM6ICovCisJCVBVVFUzMihpdmVjKzEyLGN0cjMyKTsKKwkJLyogLi4uIG92ZXJmbG93IHdhcyBkZXRlY3RlZCwgcHJvcG9nYXRlIGNhcnJ5LiAqLworCQlpZiAoY3RyMzIgPT0gMCkJY3RyOTZfaW5jKGl2ZWMpOworCQlibG9ja3MgKj0gMTY7CisJCWxlbiAtPSBibG9ja3M7CisJCW91dCArPSBibG9ja3M7CisJCWluICArPSBibG9ja3M7CisJfQorCWlmIChsZW4pIHsKKwkJbWVtc2V0KGVjb3VudF9idWYsMCwxNik7CisJCSgqZnVuYykoZWNvdW50X2J1ZixlY291bnRfYnVmLDEsa2V5LGl2ZWMpOworCQkrK2N0cjMyOworCQlQVVRVMzIoaXZlYysxMixjdHIzMik7CisJCWlmIChjdHIzMiA9PSAwKQljdHI5Nl9pbmMoaXZlYyk7CisJCXdoaWxlIChsZW4tLSkgeworCQkJb3V0W25dID0gaW5bbl0gXiBlY291bnRfYnVmW25dOworCQkJKytuOworCQl9CisJfQorCisJKm51bT1uOworfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL2djbTEyOC5jIGIvY3J5cHRvL21vZGVzL2djbTEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmQwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMvZ2NtMTI4LmMKQEAgLTAsMCArMSwxNzU3IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisKKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIE1PREVTX0RFQlVHCisjIGlmbmRlZiBOREVCVUcKKyMgIGRlZmluZSBOREVCVUcKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWYgZGVmaW5lZChCU1dBUDQpICYmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKy8qIHJlZGVmaW5lLCBiZWNhdXNlIGFsaWdubWVudCBpcyBlbnN1cmVkICovCisjdW5kZWYJR0VUVTMyCisjZGVmaW5lCUdFVFUzMihwKQlCU1dBUDQoKihjb25zdCB1MzIgKikocCkpCisjdW5kZWYJUFVUVTMyCisjZGVmaW5lCVBVVFUzMihwLHYpCSoodTMyICopKHApID0gQlNXQVA0KHYpCisjZW5kaWYKKworI2RlZmluZQlQQUNLKHMpCQkoKHNpemVfdCkocyk8PChzaXplb2Yoc2l6ZV90KSo4LTE2KSkKKyNkZWZpbmUgUkVEVUNFMUJJVChWKQlkbyB7IFwKKwlpZiAoc2l6ZW9mKHNpemVfdCk9PTgpIHsgXAorCQl1NjQgVCA9IFU2NCgweGUxMDAwMDAwMDAwMDAwMDApICYgKDAtKFYubG8mMSkpOyBcCisJCVYubG8gID0gKFYuaGk8PDYzKXwoVi5sbz4+MSk7IFwKKwkJVi5oaSAgPSAoVi5oaT4+MSApXlQ7IFwKKwl9IFwKKwllbHNlIHsgXAorCQl1MzIgVCA9IDB4ZTEwMDAwMDBVICYgKDAtKHUzMikoVi5sbyYxKSk7IFwKKwkJVi5sbyAgPSAoVi5oaTw8NjMpfChWLmxvPj4xKTsgXAorCQlWLmhpICA9IChWLmhpPj4xICleKCh1NjQpVDw8MzIpOyBcCisJfSBcCit9IHdoaWxlKDApCisKKy8qCisgKiBFdmVuIHRob3VnaCBwZXJtaXR0ZWQgdmFsdWVzIGZvciBUQUJMRV9CSVRTIGFyZSA4LCA0IGFuZCAxLCBpdCBzaG91bGQKKyAqIG5ldmVyIGJlIHNldCB0byA4LiA4IGlzIGVmZmVjdGl2ZWx5IHJlc2VydmVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICogVEFCTEVfQklUUz4xIGFyZSBsb29rdXAtdGFibGUtZHJpdmVuIGltcGxlbWVudGF0aW9ucyByZWZlcnJlZCB0byBhcworICogIlNob3VwJ3MiIGluIEdDTSBzcGVjaWZpY2F0aW9uLiBJbiBvdGhlciB3b3JkcyBPcGVuU1NMIGRvZXMgbm90IGNvdmVyCisgKiB3aG9sZSBzcGVjdHJ1bSBvZiBwb3NzaWJsZSB0YWJsZSBkcml2ZW4gaW1wbGVtZW50YXRpb25zLiBXaHk/IEluCisgKiBub24tIlNob3VwJ3MiIGNhc2UgbWVtb3J5IGFjY2VzcyBwYXR0ZXJuIGlzIHNlZ21lbnRlZCBpbiBzdWNoIG1hbm5lciwKKyAqIHRoYXQgaXQncyB0cml2aWFsIHRvIHNlZSB0aGF0IGNhY2hlIHRpbWluZyBpbmZvcm1hdGlvbiBjYW4gcmV2ZWFsCisgKiBmYWlyIHBvcnRpb24gb2YgaW50ZXJtZWRpYXRlIGhhc2ggdmFsdWUuIEdpdmVuIHRoYXQgY2lwaGVydGV4dCBpcworICogYWx3YXlzIGF2YWlsYWJsZSB0byBhdHRhY2tlciwgaXQncyBwb3NzaWJsZSBmb3IgaGltIHRvIGF0dGVtcHQgdG8KKyAqIGRlZHVjZSBzZWNyZXQgcGFyYW1ldGVyIEggYW5kIGlmIHN1Y2Nlc3NmdWwsIHRhbXBlciB3aXRoIG1lc3NhZ2VzCisgKiBbd2hpY2ggaXMgbm90aGluZyBidXQgdHJpdmlhbCBpbiBDVFIgbW9kZV0uIEluICJTaG91cCdzIiBjYXNlIGl0J3MKKyAqIG5vdCBhcyB0cml2aWFsLCBidXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGJlbGlldmUgdGhhdCBpdCdzIHJlc2lzdGFudAorICogdG8gY2FjaGUtdGltaW5nIGF0dGFjay4gQW5kIHRoZSB0aGluZyBhYm91dCAiOC1iaXQiIGltcGxlbWVudGF0aW9uIGlzCisgKiB0aGF0IGl0IGNvbnN1bWVzIDE2IChzaXh0ZWVuKSB0aW1lcyBtb3JlIG1lbW9yeSwgNEtCIHBlciBpbmRpdmlkdWFsCisgKiBrZXkgKyAxS0Igc2hhcmVkLiBXZWxsLCBvbiBwcm9zIHNpZGUgaXQgc2hvdWxkIGJlIHR3aWNlIGFzIGZhc3QgYXMKKyAqICI0LWJpdCIgdmVyc2lvbi4gQW5kIGZvciBnY2MtZ2VuZXJhdGVkIHg4NltfNjRdIGNvZGUsICI4LWJpdCIgdmVyc2lvbgorICogd2FzIG9ic2VydmVkIHRvIHJ1biB+NzUlIGZhc3RlciwgY2xvc2VyIHRvIDEwMCUgZm9yIGNvbW1lcmNpYWwKKyAqIGNvbXBpbGVycy4uLiBZZXQgIjQtYml0IiBwcm9jZWR1cmUgaXMgcHJlZmVycmVkLCBiZWNhdXNlIGl0J3MKKyAqIGJlbGlldmVkIHRvIHByb3ZpZGUgYmV0dGVyIHNlY3VyaXR5LXBlcmZvcm1hbmNlIGJhbGFuY2UgYW5kIGFkZXF1YXRlCisgKiBhbGwtcm91bmQgcGVyZm9ybWFuY2UuICJBbGwtcm91bmQiIHJlZmVycyB0byB0aGluZ3MgbGlrZToKKyAqCisgKiAtIHNob3J0ZXIgc2V0dXAgdGltZSBlZmZlY3RpdmVseSBpbXByb3ZlcyBvdmVyYWxsIHRpbWluZyBmb3IKKyAqICAgaGFuZGxpbmcgc2hvcnQgbWVzc2FnZXM7CisgKiAtIGxhcmdlciB0YWJsZSBhbGxvY2F0aW9uIGNhbiBiZWNvbWUgdW5iZWFyYWJsZSBiZWNhdXNlIG9mIFZNCisgKiAgIHN1YnN5c3RlbSBwZW5hbHRpZXMgKGZvciBleGFtcGxlIG9uIFdpbmRvd3MgbGFyZ2UgZW5vdWdoIGZyZWUKKyAqICAgcmVzdWx0cyBpbiBWTSB3b3JraW5nIHNldCB0cmltbWluZywgbWVhbmluZyB0aGF0IGNvbnNlcXVlbnQKKyAqICAgbWFsbG9jIHdvdWxkIGltbWVkaWF0ZWx5IGluY3VyIHdvcmtpbmcgc2V0IGV4cGFuc2lvbik7CisgKiAtIGxhcmdlciB0YWJsZSBoYXMgbGFyZ2VyIGNhY2hlIGZvb3RwcmludCwgd2hpY2ggY2FuIGFmZmVjdAorICogICBwZXJmb3JtYW5jZSBvZiBvdGhlciBjb2RlIHBhdGhzIChub3QgbmVjZXNzYXJpbHkgZXZlbiBmcm9tIHNhbWUKKyAqICAgdGhyZWFkIGluIEh5cGVyLVRocmVhZGluZyB3b3JsZCk7CisgKgorICogVmFsdWUgb2YgMSBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgKi8KKyNpZglUQUJMRV9CSVRTPT04CisKK3N0YXRpYyB2b2lkIGdjbV9pbml0XzhiaXQodTEyOCBIdGFibGVbMjU2XSwgdTY0IEhbMl0pCit7CisJaW50ICBpLCBqOworCXUxMjggVjsKKworCUh0YWJsZVswXS5oaSA9IDA7CisJSHRhYmxlWzBdLmxvID0gMDsKKwlWLmhpID0gSFswXTsKKwlWLmxvID0gSFsxXTsKKworCWZvciAoSHRhYmxlWzEyOF09ViwgaT02NDsgaT4wOyBpPj49MSkgeworCQlSRURVQ0UxQklUKFYpOworCQlIdGFibGVbaV0gPSBWOworCX0KKworCWZvciAoaT0yOyBpPDI1NjsgaTw8PTEpIHsKKwkJdTEyOCAqSGkgPSBIdGFibGUraSwgSDAgPSAqSGk7CisJCWZvciAoaj0xOyBqPGk7ICsraikgeworCQkJSGlbal0uaGkgPSBIMC5oaV5IdGFibGVbal0uaGk7CisJCQlIaVtqXS5sbyA9IEgwLmxvXkh0YWJsZVtqXS5sbzsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ2NtX2dtdWx0XzhiaXQodTY0IFhpWzJdLCBjb25zdCB1MTI4IEh0YWJsZVsyNTZdKQoreworCXUxMjggWiA9IHsgMCwgMH07CisJY29uc3QgdTggKnhpID0gKGNvbnN0IHU4ICopWGkrMTU7CisJc2l6ZV90IHJlbSwgbiA9ICp4aTsKKwljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CisJc3RhdGljIGNvbnN0IHNpemVfdCByZW1fOGJpdFsyNTZdID0geworCQlQQUNLKDB4MDAwMCksIFBBQ0soMHgwMUMyKSwgUEFDSygweDAzODQpLCBQQUNLKDB4MDI0NiksCisJCVBBQ0soMHgwNzA4KSwgUEFDSygweDA2Q0EpLCBQQUNLKDB4MDQ4QyksIFBBQ0soMHgwNTRFKSwKKwkJUEFDSygweDBFMTApLCBQQUNLKDB4MEZEMiksIFBBQ0soMHgwRDk0KSwgUEFDSygweDBDNTYpLAorCQlQQUNLKDB4MDkxOCksIFBBQ0soMHgwOERBKSwgUEFDSygweDBBOUMpLCBQQUNLKDB4MEI1RSksCisJCVBBQ0soMHgxQzIwKSwgUEFDSygweDFERTIpLCBQQUNLKDB4MUZBNCksIFBBQ0soMHgxRTY2KSwKKwkJUEFDSygweDFCMjgpLCBQQUNLKDB4MUFFQSksIFBBQ0soMHgxOEFDKSwgUEFDSygweDE5NkUpLAorCQlQQUNLKDB4MTIzMCksIFBBQ0soMHgxM0YyKSwgUEFDSygweDExQjQpLCBQQUNLKDB4MTA3NiksCisJCVBBQ0soMHgxNTM4KSwgUEFDSygweDE0RkEpLCBQQUNLKDB4MTZCQyksIFBBQ0soMHgxNzdFKSwKKwkJUEFDSygweDM4NDApLCBQQUNLKDB4Mzk4MiksIFBBQ0soMHgzQkM0KSwgUEFDSygweDNBMDYpLAorCQlQQUNLKDB4M0Y0OCksIFBBQ0soMHgzRThBKSwgUEFDSygweDNDQ0MpLCBQQUNLKDB4M0QwRSksCisJCVBBQ0soMHgzNjUwKSwgUEFDSygweDM3OTIpLCBQQUNLKDB4MzVENCksIFBBQ0soMHgzNDE2KSwKKwkJUEFDSygweDMxNTgpLCBQQUNLKDB4MzA5QSksIFBBQ0soMHgzMkRDKSwgUEFDSygweDMzMUUpLAorCQlQQUNLKDB4MjQ2MCksIFBBQ0soMHgyNUEyKSwgUEFDSygweDI3RTQpLCBQQUNLKDB4MjYyNiksCisJCVBBQ0soMHgyMzY4KSwgUEFDSygweDIyQUEpLCBQQUNLKDB4MjBFQyksIFBBQ0soMHgyMTJFKSwKKwkJUEFDSygweDJBNzApLCBQQUNLKDB4MkJCMiksIFBBQ0soMHgyOUY0KSwgUEFDSygweDI4MzYpLAorCQlQQUNLKDB4MkQ3OCksIFBBQ0soMHgyQ0JBKSwgUEFDSygweDJFRkMpLCBQQUNLKDB4MkYzRSksCisJCVBBQ0soMHg3MDgwKSwgUEFDSygweDcxNDIpLCBQQUNLKDB4NzMwNCksIFBBQ0soMHg3MkM2KSwKKwkJUEFDSygweDc3ODgpLCBQQUNLKDB4NzY0QSksIFBBQ0soMHg3NDBDKSwgUEFDSygweDc1Q0UpLAorCQlQQUNLKDB4N0U5MCksIFBBQ0soMHg3RjUyKSwgUEFDSygweDdEMTQpLCBQQUNLKDB4N0NENiksCisJCVBBQ0soMHg3OTk4KSwgUEFDSygweDc4NUEpLCBQQUNLKDB4N0ExQyksIFBBQ0soMHg3QkRFKSwKKwkJUEFDSygweDZDQTApLCBQQUNLKDB4NkQ2MiksIFBBQ0soMHg2RjI0KSwgUEFDSygweDZFRTYpLAorCQlQQUNLKDB4NkJBOCksIFBBQ0soMHg2QTZBKSwgUEFDSygweDY4MkMpLCBQQUNLKDB4NjlFRSksCisJCVBBQ0soMHg2MkIwKSwgUEFDSygweDYzNzIpLCBQQUNLKDB4NjEzNCksIFBBQ0soMHg2MEY2KSwKKwkJUEFDSygweDY1QjgpLCBQQUNLKDB4NjQ3QSksIFBBQ0soMHg2NjNDKSwgUEFDSygweDY3RkUpLAorCQlQQUNLKDB4NDhDMCksIFBBQ0soMHg0OTAyKSwgUEFDSygweDRCNDQpLCBQQUNLKDB4NEE4NiksCisJCVBBQ0soMHg0RkM4KSwgUEFDSygweDRFMEEpLCBQQUNLKDB4NEM0QyksIFBBQ0soMHg0RDhFKSwKKwkJUEFDSygweDQ2RDApLCBQQUNLKDB4NDcxMiksIFBBQ0soMHg0NTU0KSwgUEFDSygweDQ0OTYpLAorCQlQQUNLKDB4NDFEOCksIFBBQ0soMHg0MDFBKSwgUEFDSygweDQyNUMpLCBQQUNLKDB4NDM5RSksCisJCVBBQ0soMHg1NEUwKSwgUEFDSygweDU1MjIpLCBQQUNLKDB4NTc2NCksIFBBQ0soMHg1NkE2KSwKKwkJUEFDSygweDUzRTgpLCBQQUNLKDB4NTIyQSksIFBBQ0soMHg1MDZDKSwgUEFDSygweDUxQUUpLAorCQlQQUNLKDB4NUFGMCksIFBBQ0soMHg1QjMyKSwgUEFDSygweDU5NzQpLCBQQUNLKDB4NThCNiksCisJCVBBQ0soMHg1REY4KSwgUEFDSygweDVDM0EpLCBQQUNLKDB4NUU3QyksIFBBQ0soMHg1RkJFKSwKKwkJUEFDSygweEUxMDApLCBQQUNLKDB4RTBDMiksIFBBQ0soMHhFMjg0KSwgUEFDSygweEUzNDYpLAorCQlQQUNLKDB4RTYwOCksIFBBQ0soMHhFN0NBKSwgUEFDSygweEU1OEMpLCBQQUNLKDB4RTQ0RSksCisJCVBBQ0soMHhFRjEwKSwgUEFDSygweEVFRDIpLCBQQUNLKDB4RUM5NCksIFBBQ0soMHhFRDU2KSwKKwkJUEFDSygweEU4MTgpLCBQQUNLKDB4RTlEQSksIFBBQ0soMHhFQjlDKSwgUEFDSygweEVBNUUpLAorCQlQQUNLKDB4RkQyMCksIFBBQ0soMHhGQ0UyKSwgUEFDSygweEZFQTQpLCBQQUNLKDB4RkY2NiksCisJCVBBQ0soMHhGQTI4KSwgUEFDSygweEZCRUEpLCBQQUNLKDB4RjlBQyksIFBBQ0soMHhGODZFKSwKKwkJUEFDSygweEYzMzApLCBQQUNLKDB4RjJGMiksIFBBQ0soMHhGMEI0KSwgUEFDSygweEYxNzYpLAorCQlQQUNLKDB4RjQzOCksIFBBQ0soMHhGNUZBKSwgUEFDSygweEY3QkMpLCBQQUNLKDB4RjY3RSksCisJCVBBQ0soMHhEOTQwKSwgUEFDSygweEQ4ODIpLCBQQUNLKDB4REFDNCksIFBBQ0soMHhEQjA2KSwKKwkJUEFDSygweERFNDgpLCBQQUNLKDB4REY4QSksIFBBQ0soMHhERENDKSwgUEFDSygweERDMEUpLAorCQlQQUNLKDB4RDc1MCksIFBBQ0soMHhENjkyKSwgUEFDSygweEQ0RDQpLCBQQUNLKDB4RDUxNiksCisJCVBBQ0soMHhEMDU4KSwgUEFDSygweEQxOUEpLCBQQUNLKDB4RDNEQyksIFBBQ0soMHhEMjFFKSwKKwkJUEFDSygweEM1NjApLCBQQUNLKDB4QzRBMiksIFBBQ0soMHhDNkU0KSwgUEFDSygweEM3MjYpLAorCQlQQUNLKDB4QzI2OCksIFBBQ0soMHhDM0FBKSwgUEFDSygweEMxRUMpLCBQQUNLKDB4QzAyRSksCisJCVBBQ0soMHhDQjcwKSwgUEFDSygweENBQjIpLCBQQUNLKDB4QzhGNCksIFBBQ0soMHhDOTM2KSwKKwkJUEFDSygweENDNzgpLCBQQUNLKDB4Q0RCQSksIFBBQ0soMHhDRkZDKSwgUEFDSygweENFM0UpLAorCQlQQUNLKDB4OTE4MCksIFBBQ0soMHg5MDQyKSwgUEFDSygweDkyMDQpLCBQQUNLKDB4OTNDNiksCisJCVBBQ0soMHg5Njg4KSwgUEFDSygweDk3NEEpLCBQQUNLKDB4OTUwQyksIFBBQ0soMHg5NENFKSwKKwkJUEFDSygweDlGOTApLCBQQUNLKDB4OUU1MiksIFBBQ0soMHg5QzE0KSwgUEFDSygweDlERDYpLAorCQlQQUNLKDB4OTg5OCksIFBBQ0soMHg5OTVBKSwgUEFDSygweDlCMUMpLCBQQUNLKDB4OUFERSksCisJCVBBQ0soMHg4REEwKSwgUEFDSygweDhDNjIpLCBQQUNLKDB4OEUyNCksIFBBQ0soMHg4RkU2KSwKKwkJUEFDSygweDhBQTgpLCBQQUNLKDB4OEI2QSksIFBBQ0soMHg4OTJDKSwgUEFDSygweDg4RUUpLAorCQlQQUNLKDB4ODNCMCksIFBBQ0soMHg4MjcyKSwgUEFDSygweDgwMzQpLCBQQUNLKDB4ODFGNiksCisJCVBBQ0soMHg4NEI4KSwgUEFDSygweDg1N0EpLCBQQUNLKDB4ODczQyksIFBBQ0soMHg4NkZFKSwKKwkJUEFDSygweEE5QzApLCBQQUNLKDB4QTgwMiksIFBBQ0soMHhBQTQ0KSwgUEFDSygweEFCODYpLAorCQlQQUNLKDB4QUVDOCksIFBBQ0soMHhBRjBBKSwgUEFDSygweEFENEMpLCBQQUNLKDB4QUM4RSksCisJCVBBQ0soMHhBN0QwKSwgUEFDSygweEE2MTIpLCBQQUNLKDB4QTQ1NCksIFBBQ0soMHhBNTk2KSwKKwkJUEFDSygweEEwRDgpLCBQQUNLKDB4QTExQSksIFBBQ0soMHhBMzVDKSwgUEFDSygweEEyOUUpLAorCQlQQUNLKDB4QjVFMCksIFBBQ0soMHhCNDIyKSwgUEFDSygweEI2NjQpLCBQQUNLKDB4QjdBNiksCisJCVBBQ0soMHhCMkU4KSwgUEFDSygweEIzMkEpLCBQQUNLKDB4QjE2QyksIFBBQ0soMHhCMEFFKSwKKwkJUEFDSygweEJCRjApLCBQQUNLKDB4QkEzMiksIFBBQ0soMHhCODc0KSwgUEFDSygweEI5QjYpLAorCQlQQUNLKDB4QkNGOCksIFBBQ0soMHhCRDNBKSwgUEFDSygweEJGN0MpLCBQQUNLKDB4QkVCRSkgfTsKKworCXdoaWxlICgxKSB7CisJCVouaGkgXj0gSHRhYmxlW25dLmhpOworCQlaLmxvIF49IEh0YWJsZVtuXS5sbzsKKworCQlpZiAoKHU4ICopWGk9PXhpKQlicmVhazsKKworCQluID0gKigtLXhpKTsKKworCQlyZW0gID0gKHNpemVfdClaLmxvJjB4ZmY7CisJCVoubG8gPSAoWi5oaTw8NTYpfChaLmxvPj44KTsKKwkJWi5oaSA9IChaLmhpPj44KTsKKwkJaWYgKHNpemVvZihzaXplX3QpPT04KQorCQkJWi5oaSBePSByZW1fOGJpdFtyZW1dOworCQllbHNlCisJCQlaLmhpIF49ICh1NjQpcmVtXzhiaXRbcmVtXTw8MzI7CisJfQorCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpIHsKKyNpZmRlZiBCU1dBUDgKKwkJWGlbMF0gPSBCU1dBUDgoWi5oaSk7CisJCVhpWzFdID0gQlNXQVA4KFoubG8pOworI2Vsc2UKKwkJdTggKnAgPSAodTggKilYaTsKKwkJdTMyIHY7CisJCXYgPSAodTMyKShaLmhpPj4zMik7CVBVVFUzMihwLHYpOworCQl2ID0gKHUzMikoWi5oaSk7CVBVVFUzMihwKzQsdik7CisJCXYgPSAodTMyKShaLmxvPj4zMik7CVBVVFUzMihwKzgsdik7CisJCXYgPSAodTMyKShaLmxvKTsJUFVUVTMyKHArMTIsdik7CisjZW5kaWYKKwl9CisJZWxzZSB7CisJCVhpWzBdID0gWi5oaTsKKwkJWGlbMV0gPSBaLmxvOworCX0KK30KKyNkZWZpbmUgR0NNX01VTChjdHgsWGkpICAgZ2NtX2dtdWx0XzhiaXQoY3R4LT5YaS51LGN0eC0+SHRhYmxlKQorCisjZWxpZglUQUJMRV9CSVRTPT00CisKK3N0YXRpYyB2b2lkIGdjbV9pbml0XzRiaXQodTEyOCBIdGFibGVbMTZdLCB1NjQgSFsyXSkKK3sKKwl1MTI4IFY7CisjaWYgZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpbnQgIGk7CisjZW5kaWYKKworCUh0YWJsZVswXS5oaSA9IDA7CisJSHRhYmxlWzBdLmxvID0gMDsKKwlWLmhpID0gSFswXTsKKwlWLmxvID0gSFsxXTsKKworI2lmIGRlZmluZWQoT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQpCisJZm9yIChIdGFibGVbOF09ViwgaT00OyBpPjA7IGk+Pj0xKSB7CisJCVJFRFVDRTFCSVQoVik7CisJCUh0YWJsZVtpXSA9IFY7CisJfQorCisJZm9yIChpPTI7IGk8MTY7IGk8PD0xKSB7CisJCXUxMjggKkhpID0gSHRhYmxlK2k7CisJCWludCAgIGo7CisJCWZvciAoVj0qSGksIGo9MTsgajxpOyArK2opIHsKKwkJCUhpW2pdLmhpID0gVi5oaV5IdGFibGVbal0uaGk7CisJCQlIaVtqXS5sbyA9IFYubG9eSHRhYmxlW2pdLmxvOworCQl9CisJfQorI2Vsc2UKKwlIdGFibGVbOF0gPSBWOworCVJFRFVDRTFCSVQoVik7CisJSHRhYmxlWzRdID0gVjsKKwlSRURVQ0UxQklUKFYpOworCUh0YWJsZVsyXSA9IFY7CisJUkVEVUNFMUJJVChWKTsKKwlIdGFibGVbMV0gPSBWOworCUh0YWJsZVszXS5oaSAgPSBWLmhpXkh0YWJsZVsyXS5oaSwgSHRhYmxlWzNdLmxvICA9IFYubG9eSHRhYmxlWzJdLmxvOworCVY9SHRhYmxlWzRdOworCUh0YWJsZVs1XS5oaSAgPSBWLmhpXkh0YWJsZVsxXS5oaSwgSHRhYmxlWzVdLmxvICA9IFYubG9eSHRhYmxlWzFdLmxvOworCUh0YWJsZVs2XS5oaSAgPSBWLmhpXkh0YWJsZVsyXS5oaSwgSHRhYmxlWzZdLmxvICA9IFYubG9eSHRhYmxlWzJdLmxvOworCUh0YWJsZVs3XS5oaSAgPSBWLmhpXkh0YWJsZVszXS5oaSwgSHRhYmxlWzddLmxvICA9IFYubG9eSHRhYmxlWzNdLmxvOworCVY9SHRhYmxlWzhdOworCUh0YWJsZVs5XS5oaSAgPSBWLmhpXkh0YWJsZVsxXS5oaSwgSHRhYmxlWzldLmxvICA9IFYubG9eSHRhYmxlWzFdLmxvOworCUh0YWJsZVsxMF0uaGkgPSBWLmhpXkh0YWJsZVsyXS5oaSwgSHRhYmxlWzEwXS5sbyA9IFYubG9eSHRhYmxlWzJdLmxvOworCUh0YWJsZVsxMV0uaGkgPSBWLmhpXkh0YWJsZVszXS5oaSwgSHRhYmxlWzExXS5sbyA9IFYubG9eSHRhYmxlWzNdLmxvOworCUh0YWJsZVsxMl0uaGkgPSBWLmhpXkh0YWJsZVs0XS5oaSwgSHRhYmxlWzEyXS5sbyA9IFYubG9eSHRhYmxlWzRdLmxvOworCUh0YWJsZVsxM10uaGkgPSBWLmhpXkh0YWJsZVs1XS5oaSwgSHRhYmxlWzEzXS5sbyA9IFYubG9eSHRhYmxlWzVdLmxvOworCUh0YWJsZVsxNF0uaGkgPSBWLmhpXkh0YWJsZVs2XS5oaSwgSHRhYmxlWzE0XS5sbyA9IFYubG9eSHRhYmxlWzZdLmxvOworCUh0YWJsZVsxNV0uaGkgPSBWLmhpXkh0YWJsZVs3XS5oaSwgSHRhYmxlWzE1XS5sbyA9IFYubG9eSHRhYmxlWzddLmxvOworI2VuZGlmCisjaWYgZGVmaW5lZChHSEFTSF9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQorCS8qCisJICogQVJNIGFzc2VtYmxlciBleHBlY3RzIHNwZWNpZmljIGR3b3JkIG9yZGVyIGluIEh0YWJsZS4KKwkgKi8KKwl7CisJaW50IGo7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCWZvciAoaj0wO2o8MTY7KytqKSB7CisJCQlWID0gSHRhYmxlW2pdOworCQkJSHRhYmxlW2pdLmhpID0gVi5sbzsKKwkJCUh0YWJsZVtqXS5sbyA9IFYuaGk7CisJCX0KKwllbHNlCisJCWZvciAoaj0wO2o8MTY7KytqKSB7CisJCQlWID0gSHRhYmxlW2pdOworCQkJSHRhYmxlW2pdLmhpID0gVi5sbzw8MzJ8Vi5sbz4+MzI7CisJCQlIdGFibGVbal0ubG8gPSBWLmhpPDwzMnxWLmhpPj4zMjsKKwkJfQorCX0KKyNlbmRpZgorfQorCisjaWZuZGVmIEdIQVNIX0FTTQorc3RhdGljIGNvbnN0IHNpemVfdCByZW1fNGJpdFsxNl0gPSB7CisJUEFDSygweDAwMDApLCBQQUNLKDB4MUMyMCksIFBBQ0soMHgzODQwKSwgUEFDSygweDI0NjApLAorCVBBQ0soMHg3MDgwKSwgUEFDSygweDZDQTApLCBQQUNLKDB4NDhDMCksIFBBQ0soMHg1NEUwKSwKKwlQQUNLKDB4RTEwMCksIFBBQ0soMHhGRDIwKSwgUEFDSygweEQ5NDApLCBQQUNLKDB4QzU2MCksCisJUEFDSygweDkxODApLCBQQUNLKDB4OERBMCksIFBBQ0soMHhBOUMwKSwgUEFDSygweEI1RTApIH07CisKK3N0YXRpYyB2b2lkIGdjbV9nbXVsdF80Yml0KHU2NCBYaVsyXSwgY29uc3QgdTEyOCBIdGFibGVbMTZdKQoreworCXUxMjggWjsKKwlpbnQgY250ID0gMTU7CisJc2l6ZV90IHJlbSwgbmxvLCBuaGk7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCisJbmxvICA9ICgoY29uc3QgdTggKilYaSlbMTVdOworCW5oaSAgPSBubG8+PjQ7CisJbmxvICY9IDB4ZjsKKworCVouaGkgPSBIdGFibGVbbmxvXS5oaTsKKwlaLmxvID0gSHRhYmxlW25sb10ubG87CisKKwl3aGlsZSAoMSkgeworCQlyZW0gID0gKHNpemVfdClaLmxvJjB4ZjsKKwkJWi5sbyA9IChaLmhpPDw2MCl8KFoubG8+PjQpOworCQlaLmhpID0gKFouaGk+PjQpOworCQlpZiAoc2l6ZW9mKHNpemVfdCk9PTgpCisJCQlaLmhpIF49IHJlbV80Yml0W3JlbV07CisJCWVsc2UKKwkJCVouaGkgXj0gKHU2NClyZW1fNGJpdFtyZW1dPDwzMjsKKworCQlaLmhpIF49IEh0YWJsZVtuaGldLmhpOworCQlaLmxvIF49IEh0YWJsZVtuaGldLmxvOworCisJCWlmICgtLWNudDwwKQkJYnJlYWs7CisKKwkJbmxvICA9ICgoY29uc3QgdTggKilYaSlbY250XTsKKwkJbmhpICA9IG5sbz4+NDsKKwkJbmxvICY9IDB4ZjsKKworCQlyZW0gID0gKHNpemVfdClaLmxvJjB4ZjsKKwkJWi5sbyA9IChaLmhpPDw2MCl8KFoubG8+PjQpOworCQlaLmhpID0gKFouaGk+PjQpOworCQlpZiAoc2l6ZW9mKHNpemVfdCk9PTgpCisJCQlaLmhpIF49IHJlbV80Yml0W3JlbV07CisJCWVsc2UKKwkJCVouaGkgXj0gKHU2NClyZW1fNGJpdFtyZW1dPDwzMjsKKworCQlaLmhpIF49IEh0YWJsZVtubG9dLmhpOworCQlaLmxvIF49IEh0YWJsZVtubG9dLmxvOworCX0KKworCWlmIChpc19lbmRpYW4ubGl0dGxlKSB7CisjaWZkZWYgQlNXQVA4CisJCVhpWzBdID0gQlNXQVA4KFouaGkpOworCQlYaVsxXSA9IEJTV0FQOChaLmxvKTsKKyNlbHNlCisJCXU4ICpwID0gKHU4ICopWGk7CisJCXUzMiB2OworCQl2ID0gKHUzMikoWi5oaT4+MzIpOwlQVVRVMzIocCx2KTsKKwkJdiA9ICh1MzIpKFouaGkpOwlQVVRVMzIocCs0LHYpOworCQl2ID0gKHUzMikoWi5sbz4+MzIpOwlQVVRVMzIocCs4LHYpOworCQl2ID0gKHUzMikoWi5sbyk7CVBVVFUzMihwKzEyLHYpOworI2VuZGlmCisJfQorCWVsc2UgeworCQlYaVswXSA9IFouaGk7CisJCVhpWzFdID0gWi5sbzsKKwl9Cit9CisKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKy8qCisgKiBTdHJlYW1lZCBnY21fbXVsdF80Yml0LCBzZWUgQ1JZUFRPX2djbTEyOF9bZW58ZGVdY3J5cHQgZm9yCisgKiBkZXRhaWxzLi4uIENvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBnaXZlIGFueQorICogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIGF0IGxlYXN0IG5vdCBvbiB4ODZbXzY0XS4gSXQncyBoZXJlCisgKiBtb3N0bHkgYXMgcmVmZXJlbmNlIGFuZCBhIHBsYWNlaG9sZGVyIGZvciBwb3NzaWJsZSBmdXR1cmUKKyAqIG5vbi10cml2aWFsIG9wdGltaXphdGlvbltzXS4uLgorICovCitzdGF0aWMgdm9pZCBnY21fZ2hhc2hfNGJpdCh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdLAorCQkJCWNvbnN0IHU4ICppbnAsc2l6ZV90IGxlbikKK3sKKyAgICB1MTI4IFo7CisgICAgaW50IGNudDsKKyAgICBzaXplX3QgcmVtLCBubG8sIG5oaTsKKyAgICBjb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CisKKyNpZiAxCisgICAgZG8geworCWNudCAgPSAxNTsKKwlubG8gID0gKChjb25zdCB1OCAqKVhpKVsxNV07CisJbmxvIF49IGlucFsxNV07CisJbmhpICA9IG5sbz4+NDsKKwlubG8gJj0gMHhmOworCisJWi5oaSA9IEh0YWJsZVtubG9dLmhpOworCVoubG8gPSBIdGFibGVbbmxvXS5sbzsKKworCXdoaWxlICgxKSB7CisJCXJlbSAgPSAoc2l6ZV90KVoubG8mMHhmOworCQlaLmxvID0gKFouaGk8PDYwKXwoWi5sbz4+NCk7CisJCVouaGkgPSAoWi5oaT4+NCk7CisJCWlmIChzaXplb2Yoc2l6ZV90KT09OCkKKwkJCVouaGkgXj0gcmVtXzRiaXRbcmVtXTsKKwkJZWxzZQorCQkJWi5oaSBePSAodTY0KXJlbV80Yml0W3JlbV08PDMyOworCisJCVouaGkgXj0gSHRhYmxlW25oaV0uaGk7CisJCVoubG8gXj0gSHRhYmxlW25oaV0ubG87CisKKwkJaWYgKC0tY250PDApCQlicmVhazsKKworCQlubG8gID0gKChjb25zdCB1OCAqKVhpKVtjbnRdOworCQlubG8gXj0gaW5wW2NudF07CisJCW5oaSAgPSBubG8+PjQ7CisJCW5sbyAmPSAweGY7CisKKwkJcmVtICA9IChzaXplX3QpWi5sbyYweGY7CisJCVoubG8gPSAoWi5oaTw8NjApfChaLmxvPj40KTsKKwkJWi5oaSA9IChaLmhpPj40KTsKKwkJaWYgKHNpemVvZihzaXplX3QpPT04KQorCQkJWi5oaSBePSByZW1fNGJpdFtyZW1dOworCQllbHNlCisJCQlaLmhpIF49ICh1NjQpcmVtXzRiaXRbcmVtXTw8MzI7CisKKwkJWi5oaSBePSBIdGFibGVbbmxvXS5oaTsKKwkJWi5sbyBePSBIdGFibGVbbmxvXS5sbzsKKwl9CisjZWxzZQorICAgIC8qCisgICAgICogRXh0cmEgMjU2KzE2IGJ5dGVzIHBlci1rZXkgcGx1cyA1MTIgYnl0ZXMgc2hhcmVkIHRhYmxlcworICAgICAqIFtzaG91bGRdIGdpdmUgfjUwJSBpbXByb3ZlbWVudC4uLiBPbmUgY291bGQgaGF2ZSBQQUNLKCktZWQKKyAgICAgKiB0aGUgcmVtXzhiaXQgZXZlbiBoZXJlLCBidXQgdGhlIHByaW9yaXR5IGlzIHRvIG1pbmltaXplCisgICAgICogY2FjaGUgZm9vdHByaW50Li4uCisgICAgICovIAorICAgIHUxMjggSHNocjRbMTZdOwkvKiBIdGFibGUgc2hpZnRlZCByaWdodCBieSA0IGJpdHMgKi8KKyAgICB1OCAgIEhzaGw0WzE2XTsJLyogSHRhYmxlIHNoaWZ0ZWQgbGVmdCAgYnkgNCBiaXRzICovCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHJlbV84Yml0WzI1Nl0gPSB7CisJMHgwMDAwLCAweDAxQzIsIDB4MDM4NCwgMHgwMjQ2LCAweDA3MDgsIDB4MDZDQSwgMHgwNDhDLCAweDA1NEUsCisJMHgwRTEwLCAweDBGRDIsIDB4MEQ5NCwgMHgwQzU2LCAweDA5MTgsIDB4MDhEQSwgMHgwQTlDLCAweDBCNUUsCisJMHgxQzIwLCAweDFERTIsIDB4MUZBNCwgMHgxRTY2LCAweDFCMjgsIDB4MUFFQSwgMHgxOEFDLCAweDE5NkUsCisJMHgxMjMwLCAweDEzRjIsIDB4MTFCNCwgMHgxMDc2LCAweDE1MzgsIDB4MTRGQSwgMHgxNkJDLCAweDE3N0UsCisJMHgzODQwLCAweDM5ODIsIDB4M0JDNCwgMHgzQTA2LCAweDNGNDgsIDB4M0U4QSwgMHgzQ0NDLCAweDNEMEUsCisJMHgzNjUwLCAweDM3OTIsIDB4MzVENCwgMHgzNDE2LCAweDMxNTgsIDB4MzA5QSwgMHgzMkRDLCAweDMzMUUsCisJMHgyNDYwLCAweDI1QTIsIDB4MjdFNCwgMHgyNjI2LCAweDIzNjgsIDB4MjJBQSwgMHgyMEVDLCAweDIxMkUsCisJMHgyQTcwLCAweDJCQjIsIDB4MjlGNCwgMHgyODM2LCAweDJENzgsIDB4MkNCQSwgMHgyRUZDLCAweDJGM0UsCisJMHg3MDgwLCAweDcxNDIsIDB4NzMwNCwgMHg3MkM2LCAweDc3ODgsIDB4NzY0QSwgMHg3NDBDLCAweDc1Q0UsCisJMHg3RTkwLCAweDdGNTIsIDB4N0QxNCwgMHg3Q0Q2LCAweDc5OTgsIDB4Nzg1QSwgMHg3QTFDLCAweDdCREUsCisJMHg2Q0EwLCAweDZENjIsIDB4NkYyNCwgMHg2RUU2LCAweDZCQTgsIDB4NkE2QSwgMHg2ODJDLCAweDY5RUUsCisJMHg2MkIwLCAweDYzNzIsIDB4NjEzNCwgMHg2MEY2LCAweDY1QjgsIDB4NjQ3QSwgMHg2NjNDLCAweDY3RkUsCisJMHg0OEMwLCAweDQ5MDIsIDB4NEI0NCwgMHg0QTg2LCAweDRGQzgsIDB4NEUwQSwgMHg0QzRDLCAweDREOEUsCisJMHg0NkQwLCAweDQ3MTIsIDB4NDU1NCwgMHg0NDk2LCAweDQxRDgsIDB4NDAxQSwgMHg0MjVDLCAweDQzOUUsCisJMHg1NEUwLCAweDU1MjIsIDB4NTc2NCwgMHg1NkE2LCAweDUzRTgsIDB4NTIyQSwgMHg1MDZDLCAweDUxQUUsCisJMHg1QUYwLCAweDVCMzIsIDB4NTk3NCwgMHg1OEI2LCAweDVERjgsIDB4NUMzQSwgMHg1RTdDLCAweDVGQkUsCisJMHhFMTAwLCAweEUwQzIsIDB4RTI4NCwgMHhFMzQ2LCAweEU2MDgsIDB4RTdDQSwgMHhFNThDLCAweEU0NEUsCisJMHhFRjEwLCAweEVFRDIsIDB4RUM5NCwgMHhFRDU2LCAweEU4MTgsIDB4RTlEQSwgMHhFQjlDLCAweEVBNUUsCisJMHhGRDIwLCAweEZDRTIsIDB4RkVBNCwgMHhGRjY2LCAweEZBMjgsIDB4RkJFQSwgMHhGOUFDLCAweEY4NkUsCisJMHhGMzMwLCAweEYyRjIsIDB4RjBCNCwgMHhGMTc2LCAweEY0MzgsIDB4RjVGQSwgMHhGN0JDLCAweEY2N0UsCisJMHhEOTQwLCAweEQ4ODIsIDB4REFDNCwgMHhEQjA2LCAweERFNDgsIDB4REY4QSwgMHhERENDLCAweERDMEUsCisJMHhENzUwLCAweEQ2OTIsIDB4RDRENCwgMHhENTE2LCAweEQwNTgsIDB4RDE5QSwgMHhEM0RDLCAweEQyMUUsCisJMHhDNTYwLCAweEM0QTIsIDB4QzZFNCwgMHhDNzI2LCAweEMyNjgsIDB4QzNBQSwgMHhDMUVDLCAweEMwMkUsCisJMHhDQjcwLCAweENBQjIsIDB4QzhGNCwgMHhDOTM2LCAweENDNzgsIDB4Q0RCQSwgMHhDRkZDLCAweENFM0UsCisJMHg5MTgwLCAweDkwNDIsIDB4OTIwNCwgMHg5M0M2LCAweDk2ODgsIDB4OTc0QSwgMHg5NTBDLCAweDk0Q0UsCisJMHg5RjkwLCAweDlFNTIsIDB4OUMxNCwgMHg5REQ2LCAweDk4OTgsIDB4OTk1QSwgMHg5QjFDLCAweDlBREUsCisJMHg4REEwLCAweDhDNjIsIDB4OEUyNCwgMHg4RkU2LCAweDhBQTgsIDB4OEI2QSwgMHg4OTJDLCAweDg4RUUsCisJMHg4M0IwLCAweDgyNzIsIDB4ODAzNCwgMHg4MUY2LCAweDg0QjgsIDB4ODU3QSwgMHg4NzNDLCAweDg2RkUsCisJMHhBOUMwLCAweEE4MDIsIDB4QUE0NCwgMHhBQjg2LCAweEFFQzgsIDB4QUYwQSwgMHhBRDRDLCAweEFDOEUsCisJMHhBN0QwLCAweEE2MTIsIDB4QTQ1NCwgMHhBNTk2LCAweEEwRDgsIDB4QTExQSwgMHhBMzVDLCAweEEyOUUsCisJMHhCNUUwLCAweEI0MjIsIDB4QjY2NCwgMHhCN0E2LCAweEIyRTgsIDB4QjMyQSwgMHhCMTZDLCAweEIwQUUsCisJMHhCQkYwLCAweEJBMzIsIDB4Qjg3NCwgMHhCOUI2LCAweEJDRjgsIDB4QkQzQSwgMHhCRjdDLCAweEJFQkUgfTsKKyAgICAvKgorICAgICAqIFRoaXMgcHJlLXByb2Nlc3NpbmcgcGhhc2Ugc2xvd3MgZG93biBwcm9jZWR1cmUgYnkgYXBwcm94aW1hdGVseQorICAgICAqIHNhbWUgdGltZSBhcyBpdCBtYWtlcyBlYWNoIGxvb3Agc3BpbiBmYXN0ZXIuIEluIG90aGVyIHdvcmRzCisgICAgICogc2luZ2xlIGJsb2NrIHBlcmZvcm1hbmNlIGlzIGFwcHJveGltYXRlbHkgc2FtZSBhcyBzdHJhaWdodGZvcndhcmQKKyAgICAgKiAiNC1iaXQiIGltcGxlbWVudGF0aW9uLCBhbmQgdGhlbiBpdCBnb2VzIG9ubHkgZmFzdGVyLi4uCisgICAgICovCisgICAgZm9yIChjbnQ9MDsgY250PDE2OyArK2NudCkgeworCVouaGkgPSBIdGFibGVbY250XS5oaTsKKwlaLmxvID0gSHRhYmxlW2NudF0ubG87CisJSHNocjRbY250XS5sbyA9IChaLmhpPDw2MCl8KFoubG8+PjQpOworCUhzaHI0W2NudF0uaGkgPSAoWi5oaT4+NCk7CisJSHNobDRbY250XSAgICA9ICh1OCkoWi5sbzw8NCk7CisgICAgfQorCisgICAgZG8geworCWZvciAoWi5sbz0wLCBaLmhpPTAsIGNudD0xNTsgY250OyAtLWNudCkgeworCQlubG8gID0gKChjb25zdCB1OCAqKVhpKVtjbnRdOworCQlubG8gXj0gaW5wW2NudF07CisJCW5oaSAgPSBubG8+PjQ7CisJCW5sbyAmPSAweGY7CisKKwkJWi5oaSBePSBIdGFibGVbbmxvXS5oaTsKKwkJWi5sbyBePSBIdGFibGVbbmxvXS5sbzsKKworCQlyZW0gPSAoc2l6ZV90KVoubG8mMHhmZjsKKworCQlaLmxvID0gKFouaGk8PDU2KXwoWi5sbz4+OCk7CisJCVouaGkgPSAoWi5oaT4+OCk7CisKKwkJWi5oaSBePSBIc2hyNFtuaGldLmhpOworCQlaLmxvIF49IEhzaHI0W25oaV0ubG87CisJCVouaGkgXj0gKHU2NClyZW1fOGJpdFtyZW1eSHNobDRbbmhpXV08PDQ4OworCX0KKworCW5sbyAgPSAoKGNvbnN0IHU4ICopWGkpWzBdOworCW5sbyBePSBpbnBbMF07CisJbmhpICA9IG5sbz4+NDsKKwlubG8gJj0gMHhmOworCisJWi5oaSBePSBIdGFibGVbbmxvXS5oaTsKKwlaLmxvIF49IEh0YWJsZVtubG9dLmxvOworCisJcmVtID0gKHNpemVfdClaLmxvJjB4ZjsKKworCVoubG8gPSAoWi5oaTw8NjApfChaLmxvPj40KTsKKwlaLmhpID0gKFouaGk+PjQpOworCisJWi5oaSBePSBIdGFibGVbbmhpXS5oaTsKKwlaLmxvIF49IEh0YWJsZVtuaGldLmxvOworCVouaGkgXj0gKCh1NjQpcmVtXzhiaXRbcmVtPDw0XSk8PDQ4OworI2VuZGlmCisKKwlpZiAoaXNfZW5kaWFuLmxpdHRsZSkgeworI2lmZGVmIEJTV0FQOAorCQlYaVswXSA9IEJTV0FQOChaLmhpKTsKKwkJWGlbMV0gPSBCU1dBUDgoWi5sbyk7CisjZWxzZQorCQl1OCAqcCA9ICh1OCAqKVhpOworCQl1MzIgdjsKKwkJdiA9ICh1MzIpKFouaGk+PjMyKTsJUFVUVTMyKHAsdik7CisJCXYgPSAodTMyKShaLmhpKTsJUFVUVTMyKHArNCx2KTsKKwkJdiA9ICh1MzIpKFoubG8+PjMyKTsJUFVUVTMyKHArOCx2KTsKKwkJdiA9ICh1MzIpKFoubG8pOwlQVVRVMzIocCsxMix2KTsKKyNlbmRpZgorCX0KKwllbHNlIHsKKwkJWGlbMF0gPSBaLmhpOworCQlYaVsxXSA9IFoubG87CisJfQorICAgIH0gd2hpbGUgKGlucCs9MTYsIGxlbi09MTYpOworfQorI2VuZGlmCisjZWxzZQordm9pZCBnY21fZ211bHRfNGJpdCh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKTsKK3ZvaWQgZ2NtX2doYXNoXzRiaXQodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pOworI2VuZGlmCisKKyNkZWZpbmUgR0NNX01VTChjdHgsWGkpICAgZ2NtX2dtdWx0XzRiaXQoY3R4LT5YaS51LGN0eC0+SHRhYmxlKQorI2lmIGRlZmluZWQoR0hBU0hfQVNNKSB8fCAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKyNkZWZpbmUgR0hBU0goY3R4LGluLGxlbikgZ2NtX2doYXNoXzRiaXQoKGN0eCktPlhpLnUsKGN0eCktPkh0YWJsZSxpbixsZW4pCisvKiBHSEFTSF9DSFVOSyBpcyAic3RyaWRlIHBhcmFtZXRlciIgbWlzc2lvbmVkIHRvIG1pdGlnYXRlIGNhY2hlCisgKiB0cmFzaGluZyBlZmZlY3QuIEluIG90aGVyIHdvcmRzIGlkZWEgaXMgdG8gaGFzaCBkYXRhIHdoaWxlIGl0J3MKKyAqIHN0aWxsIGluIEwxIGNhY2hlIGFmdGVyIGVuY3J5cHRpb24gcGFzcy4uLiAqLworI2RlZmluZSBHSEFTSF9DSFVOSyAgICAgICAoMyoxMDI0KQorI2VuZGlmCisKKyNlbHNlCS8qIFRBQkxFX0JJVFMgKi8KKworc3RhdGljIHZvaWQgZ2NtX2dtdWx0XzFiaXQodTY0IFhpWzJdLGNvbnN0IHU2NCBIWzJdKQoreworCXUxMjggVixaID0geyAwLDAgfTsKKwlsb25nIFg7CisJaW50ICBpLGo7CisJY29uc3QgbG9uZyAqeGkgPSAoY29uc3QgbG9uZyAqKVhpOworCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKworCVYuaGkgPSBIWzBdOwkvKiBIIGlzIGluIGhvc3QgYnl0ZSBvcmRlciwgbm8gYnl0ZSBzd2FwcGluZyAqLworCVYubG8gPSBIWzFdOworCisJZm9yIChqPTA7IGo8MTYvc2l6ZW9mKGxvbmcpOyArK2opIHsKKwkJaWYgKGlzX2VuZGlhbi5saXR0bGUpIHsKKwkJCWlmIChzaXplb2YobG9uZyk9PTgpIHsKKyNpZmRlZiBCU1dBUDgKKwkJCQlYID0gKGxvbmcpKEJTV0FQOCh4aVtqXSkpOworI2Vsc2UKKwkJCQljb25zdCB1OCAqcCA9IChjb25zdCB1OCAqKSh4aStqKTsKKwkJCQlYID0gKGxvbmcpKCh1NjQpR0VUVTMyKHApPDwzMnxHRVRVMzIocCs0KSk7CisjZW5kaWYKKwkJCX0KKwkJCWVsc2UgeworCQkJCWNvbnN0IHU4ICpwID0gKGNvbnN0IHU4ICopKHhpK2opOworCQkJCVggPSAobG9uZylHRVRVMzIocCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJWCA9IHhpW2pdOworCisJCWZvciAoaT0wOyBpPDgqc2l6ZW9mKGxvbmcpOyArK2ksIFg8PD0xKSB7CisJCQl1NjQgTSA9ICh1NjQpKFg+Pig4KnNpemVvZihsb25nKS0xKSk7CisJCQlaLmhpIF49IFYuaGkmTTsKKwkJCVoubG8gXj0gVi5sbyZNOworCisJCQlSRURVQ0UxQklUKFYpOworCQl9CisJfQorCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpIHsKKyNpZmRlZiBCU1dBUDgKKwkJWGlbMF0gPSBCU1dBUDgoWi5oaSk7CisJCVhpWzFdID0gQlNXQVA4KFoubG8pOworI2Vsc2UKKwkJdTggKnAgPSAodTggKilYaTsKKwkJdTMyIHY7CisJCXYgPSAodTMyKShaLmhpPj4zMik7CVBVVFUzMihwLHYpOworCQl2ID0gKHUzMikoWi5oaSk7CVBVVFUzMihwKzQsdik7CisJCXYgPSAodTMyKShaLmxvPj4zMik7CVBVVFUzMihwKzgsdik7CisJCXYgPSAodTMyKShaLmxvKTsJUFVUVTMyKHArMTIsdik7CisjZW5kaWYKKwl9CisJZWxzZSB7CisJCVhpWzBdID0gWi5oaTsKKwkJWGlbMV0gPSBaLmxvOworCX0KK30KKyNkZWZpbmUgR0NNX01VTChjdHgsWGkpCSAgZ2NtX2dtdWx0XzFiaXQoY3R4LT5YaS51LGN0eC0+SC51KQorCisjZW5kaWYKKworI2lmCVRBQkxFX0JJVFM9PTQgJiYgZGVmaW5lZChHSEFTSF9BU00pCisjIGlmCSFkZWZpbmVkKEkzODZfT05MWSkgJiYgXAorCShkZWZpbmVkKF9faTM4NikJfHwgZGVmaW5lZChfX2kzODZfXykJfHwgXAorCSBkZWZpbmVkKF9feDg2XzY0KQl8fCBkZWZpbmVkKF9feDg2XzY0X18pCXx8IFwKKwkgZGVmaW5lZChfTV9JWDg2KQl8fCBkZWZpbmVkKF9NX0FNRDY0KQl8fCBkZWZpbmVkKF9NX1g2NCkpCisjICBkZWZpbmUgR0hBU0hfQVNNX1g4Nl9PUl82NAorIyAgZGVmaW5lIEdDTV9GVU5DUkVGXzRCSVQKK2V4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisKK3ZvaWQgZ2NtX2luaXRfY2xtdWwodTEyOCBIdGFibGVbMTZdLGNvbnN0IHU2NCBYaVsyXSk7Cit2b2lkIGdjbV9nbXVsdF9jbG11bCh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKTsKK3ZvaWQgZ2NtX2doYXNoX2NsbXVsKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0sY29uc3QgdTggKmlucCxzaXplX3QgbGVuKTsKKworIyAgaWYJZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikKKyMgICBkZWZpbmUgR0hBU0hfQVNNX1g4Ngordm9pZCBnY21fZ211bHRfNGJpdF9tbXgodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSk7Cit2b2lkIGdjbV9naGFzaF80Yml0X21teCh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdLGNvbnN0IHU4ICppbnAsc2l6ZV90IGxlbik7CisKK3ZvaWQgZ2NtX2dtdWx0XzRiaXRfeDg2KHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pOwordm9pZCBnY21fZ2hhc2hfNGJpdF94ODYodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pOworIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pCisjICBpbmNsdWRlICJhcm1fYXJjaC5oIgorIyAgaWYgX19BUk1fQVJDSF9fPj03CisjICAgZGVmaW5lIEdIQVNIX0FTTV9BUk0KKyMgICBkZWZpbmUgR0NNX0ZVTkNSRUZfNEJJVAordm9pZCBnY21fZ211bHRfbmVvbih1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKTsKK3ZvaWQgZ2NtX2doYXNoX25lb24odTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgR0NNX0ZVTkNSRUZfNEJJVAorIyB1bmRlZiAgR0NNX01VTAorIyBkZWZpbmUgR0NNX01VTChjdHgsWGkpCSgqZ2NtX2dtdWx0X3ApKGN0eC0+WGkudSxjdHgtPkh0YWJsZSkKKyMgaWZkZWYgR0hBU0gKKyMgIHVuZGVmICBHSEFTSAorIyAgZGVmaW5lIEdIQVNIKGN0eCxpbixsZW4pCSgqZ2NtX2doYXNoX3ApKGN0eC0+WGkudSxjdHgtPkh0YWJsZSxpbixsZW4pCisjIGVuZGlmCisjZW5kaWYKKwordm9pZCBDUllQVE9fZ2NtMTI4X2luaXQoR0NNMTI4X0NPTlRFWFQgKmN0eCx2b2lkICprZXksYmxvY2sxMjhfZiBibG9jaykKK3sKKwljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CisKKwltZW1zZXQoY3R4LDAsc2l6ZW9mKCpjdHgpKTsKKwljdHgtPmJsb2NrID0gYmxvY2s7CisJY3R4LT5rZXkgICA9IGtleTsKKworCSgqYmxvY2spKGN0eC0+SC5jLGN0eC0+SC5jLGtleSk7CisKKwlpZiAoaXNfZW5kaWFuLmxpdHRsZSkgeworCQkvKiBIIGlzIHN0b3JlZCBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KKyNpZmRlZiBCU1dBUDgKKwkJY3R4LT5ILnVbMF0gPSBCU1dBUDgoY3R4LT5ILnVbMF0pOworCQljdHgtPkgudVsxXSA9IEJTV0FQOChjdHgtPkgudVsxXSk7CisjZWxzZQorCQl1OCAqcCA9IGN0eC0+SC5jOworCQl1NjQgaGksbG87CisJCWhpID0gKHU2NClHRVRVMzIocCkgIDw8MzJ8R0VUVTMyKHArNCk7CisJCWxvID0gKHU2NClHRVRVMzIocCs4KTw8MzJ8R0VUVTMyKHArMTIpOworCQljdHgtPkgudVswXSA9IGhpOworCQljdHgtPkgudVsxXSA9IGxvOworI2VuZGlmCisJfQorCisjaWYJVEFCTEVfQklUUz09OAorCWdjbV9pbml0XzhiaXQoY3R4LT5IdGFibGUsY3R4LT5ILnUpOworI2VsaWYJVEFCTEVfQklUUz09NAorIyBpZglkZWZpbmVkKEdIQVNIX0FTTV9YODZfT1JfNjQpCisjICBpZgkhZGVmaW5lZChHSEFTSF9BU01fWDg2KSB8fCBkZWZpbmVkKE9QRU5TU0xfSUEzMl9TU0UyKQorCWlmIChPUEVOU1NMX2lhMzJjYXBfUFswXSYoMTw8MjQpICYmCS8qIGNoZWNrIEZYU1IgYml0ICovCisJICAgIE9QRU5TU0xfaWEzMmNhcF9QWzFdJigxPDwxKSApIHsJLyogY2hlY2sgUENMTVVMUURRIGJpdCAqLworCQlnY21faW5pdF9jbG11bChjdHgtPkh0YWJsZSxjdHgtPkgudSk7CisJCWN0eC0+Z211bHQgPSBnY21fZ211bHRfY2xtdWw7CisJCWN0eC0+Z2hhc2ggPSBnY21fZ2hhc2hfY2xtdWw7CisJCXJldHVybjsKKwl9CisjICBlbmRpZgorCWdjbV9pbml0XzRiaXQoY3R4LT5IdGFibGUsY3R4LT5ILnUpOworIyAgaWYJZGVmaW5lZChHSEFTSF9BU01fWDg2KQkJCS8qIHg4NiBvbmx5ICovCisjICAgaWYgZGVmaW5lZChPUEVOU1NMX0lBMzJfU1NFMikKKwlpZiAoT1BFTlNTTF9pYTMyY2FwX1BbMF0mKDE8PDI1KSkgewkvKiBjaGVjayBTU0UgYml0ICovCisjICAgZWxzZQorCWlmIChPUEVOU1NMX2lhMzJjYXBfUFswXSYoMTw8MjMpKSB7CS8qIGNoZWNrIE1NWCBiaXQgKi8KKyMgICBlbmRpZgorCQljdHgtPmdtdWx0ID0gZ2NtX2dtdWx0XzRiaXRfbW14OworCQljdHgtPmdoYXNoID0gZ2NtX2doYXNoXzRiaXRfbW14OworCX0gZWxzZSB7CisJCWN0eC0+Z211bHQgPSBnY21fZ211bHRfNGJpdF94ODY7CisJCWN0eC0+Z2hhc2ggPSBnY21fZ2hhc2hfNGJpdF94ODY7CisJfQorIyAgZWxzZQorCWN0eC0+Z211bHQgPSBnY21fZ211bHRfNGJpdDsKKwljdHgtPmdoYXNoID0gZ2NtX2doYXNoXzRiaXQ7CisjICBlbmRpZgorIyBlbGlmCWRlZmluZWQoR0hBU0hfQVNNX0FSTSkKKwlpZiAoT1BFTlNTTF9hcm1jYXBfUCAmIEFSTVY3X05FT04pIHsKKwkJY3R4LT5nbXVsdCA9IGdjbV9nbXVsdF9uZW9uOworCQljdHgtPmdoYXNoID0gZ2NtX2doYXNoX25lb247CisJfSBlbHNlIHsKKwkJZ2NtX2luaXRfNGJpdChjdHgtPkh0YWJsZSxjdHgtPkgudSk7CisJCWN0eC0+Z211bHQgPSBnY21fZ211bHRfNGJpdDsKKwkJY3R4LT5naGFzaCA9IGdjbV9naGFzaF80Yml0OworCX0KKyMgZWxzZQorCWdjbV9pbml0XzRiaXQoY3R4LT5IdGFibGUsY3R4LT5ILnUpOworIyBlbmRpZgorI2VuZGlmCit9CisKK3ZvaWQgQ1JZUFRPX2djbTEyOF9zZXRpdihHQ00xMjhfQ09OVEVYVCAqY3R4LGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LHNpemVfdCBsZW4pCit7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCXVuc2lnbmVkIGludCBjdHI7CisjaWZkZWYgR0NNX0ZVTkNSRUZfNEJJVAorCXZvaWQgKCpnY21fZ211bHRfcCkodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSkJPSBjdHgtPmdtdWx0OworI2VuZGlmCisKKwljdHgtPllpLnVbMF0gID0gMDsKKwljdHgtPllpLnVbMV0gID0gMDsKKwljdHgtPlhpLnVbMF0gID0gMDsKKwljdHgtPlhpLnVbMV0gID0gMDsKKwljdHgtPmxlbi51WzBdID0gMDsJLyogQUFEIGxlbmd0aCAqLworCWN0eC0+bGVuLnVbMV0gPSAwOwkvKiBtZXNzYWdlIGxlbmd0aCAqLworCWN0eC0+YXJlcyA9IDA7CisJY3R4LT5tcmVzID0gMDsKKworCWlmIChsZW49PTEyKSB7CisJCW1lbWNweShjdHgtPllpLmMsaXYsMTIpOworCQljdHgtPllpLmNbMTVdPTE7CisJCWN0cj0xOworCX0KKwllbHNlIHsKKwkJc2l6ZV90IGk7CisJCXU2NCBsZW4wID0gbGVuOworCisJCXdoaWxlIChsZW4+PTE2KSB7CisJCQlmb3IgKGk9MDsgaTwxNjsgKytpKSBjdHgtPllpLmNbaV0gXj0gaXZbaV07CisJCQlHQ01fTVVMKGN0eCxZaSk7CisJCQlpdiArPSAxNjsKKwkJCWxlbiAtPSAxNjsKKwkJfQorCQlpZiAobGVuKSB7CisJCQlmb3IgKGk9MDsgaTxsZW47ICsraSkgY3R4LT5ZaS5jW2ldIF49IGl2W2ldOworCQkJR0NNX01VTChjdHgsWWkpOworCQl9CisJCWxlbjAgPDw9IDM7CisJCWlmIChpc19lbmRpYW4ubGl0dGxlKSB7CisjaWZkZWYgQlNXQVA4CisJCQljdHgtPllpLnVbMV0gIF49IEJTV0FQOChsZW4wKTsKKyNlbHNlCisJCQljdHgtPllpLmNbOF0gIF49ICh1OCkobGVuMD4+NTYpOworCQkJY3R4LT5ZaS5jWzldICBePSAodTgpKGxlbjA+PjQ4KTsKKwkJCWN0eC0+WWkuY1sxMF0gXj0gKHU4KShsZW4wPj40MCk7CisJCQljdHgtPllpLmNbMTFdIF49ICh1OCkobGVuMD4+MzIpOworCQkJY3R4LT5ZaS5jWzEyXSBePSAodTgpKGxlbjA+PjI0KTsKKwkJCWN0eC0+WWkuY1sxM10gXj0gKHU4KShsZW4wPj4xNik7CisJCQljdHgtPllpLmNbMTRdIF49ICh1OCkobGVuMD4+OCk7CisJCQljdHgtPllpLmNbMTVdIF49ICh1OCkobGVuMCk7CisjZW5kaWYKKwkJfQorCQllbHNlCisJCQljdHgtPllpLnVbMV0gIF49IGxlbjA7CisKKwkJR0NNX01VTChjdHgsWWkpOworCisJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJY3RyID0gR0VUVTMyKGN0eC0+WWkuYysxMik7CisJCWVsc2UKKwkJCWN0ciA9IGN0eC0+WWkuZFszXTsKKwl9CisKKwkoKmN0eC0+YmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLMC5jLGN0eC0+a2V5KTsKKwkrK2N0cjsKKwlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJUFVUVTMyKGN0eC0+WWkuYysxMixjdHIpOworCWVsc2UKKwkJY3R4LT5ZaS5kWzNdID0gY3RyOworfQorCitpbnQgQ1JZUFRPX2djbTEyOF9hYWQoR0NNMTI4X0NPTlRFWFQgKmN0eCxjb25zdCB1bnNpZ25lZCBjaGFyICphYWQsc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgaTsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1NjQgYWxlbiA9IGN0eC0+bGVuLnVbMF07CisjaWZkZWYgR0NNX0ZVTkNSRUZfNEJJVAorCXZvaWQgKCpnY21fZ211bHRfcCkodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSkJPSBjdHgtPmdtdWx0OworIyBpZmRlZiBHSEFTSAorCXZvaWQgKCpnY21fZ2hhc2hfcCkodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSwKKwkJCQljb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pCT0gY3R4LT5naGFzaDsKKyMgZW5kaWYKKyNlbmRpZgorCisJaWYgKGN0eC0+bGVuLnVbMV0pIHJldHVybiAtMjsKKworCWFsZW4gKz0gbGVuOworCWlmIChhbGVuPihVNjQoMSk8PDYxKSB8fCAoc2l6ZW9mKGxlbik9PTggJiYgYWxlbjxsZW4pKQorCQlyZXR1cm4gLTE7CisJY3R4LT5sZW4udVswXSA9IGFsZW47CisKKwluID0gY3R4LT5hcmVzOworCWlmIChuKSB7CisJCXdoaWxlIChuICYmIGxlbikgeworCQkJY3R4LT5YaS5jW25dIF49ICooYWFkKyspOworCQkJLS1sZW47CisJCQluID0gKG4rMSklMTY7CisJCX0KKwkJaWYgKG49PTApIEdDTV9NVUwoY3R4LFhpKTsKKwkJZWxzZSB7CisJCQljdHgtPmFyZXMgPSBuOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKyNpZmRlZiBHSEFTSAorCWlmICgoaSA9IChsZW4mKHNpemVfdCktMTYpKSkgeworCQlHSEFTSChjdHgsYWFkLGkpOworCQlhYWQgKz0gaTsKKwkJbGVuIC09IGk7CisJfQorI2Vsc2UKKwl3aGlsZSAobGVuPj0xNikgeworCQlmb3IgKGk9MDsgaTwxNjsgKytpKSBjdHgtPlhpLmNbaV0gXj0gYWFkW2ldOworCQlHQ01fTVVMKGN0eCxYaSk7CisJCWFhZCArPSAxNjsKKwkJbGVuIC09IDE2OworCX0KKyNlbmRpZgorCWlmIChsZW4pIHsKKwkJbiA9ICh1bnNpZ25lZCBpbnQpbGVuOworCQlmb3IgKGk9MDsgaTxsZW47ICsraSkgY3R4LT5YaS5jW2ldIF49IGFhZFtpXTsKKwl9CisKKwljdHgtPmFyZXMgPSBuOworCXJldHVybiAwOworfQorCitpbnQgQ1JZUFRPX2djbTEyOF9lbmNyeXB0KEdDTTEyOF9DT05URVhUICpjdHgsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCXNpemVfdCBsZW4pCit7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCXVuc2lnbmVkIGludCBuLCBjdHI7CisJc2l6ZV90IGk7CisJdTY0ICAgICAgICBtbGVuICA9IGN0eC0+bGVuLnVbMV07CisJYmxvY2sxMjhfZiBibG9jayA9IGN0eC0+YmxvY2s7CisJdm9pZCAgICAgICprZXkgICA9IGN0eC0+a2V5OworI2lmZGVmIEdDTV9GVU5DUkVGXzRCSVQKKwl2b2lkICgqZ2NtX2dtdWx0X3ApKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pCT0gY3R4LT5nbXVsdDsKKyMgaWZkZWYgR0hBU0gKKwl2b2lkICgqZ2NtX2doYXNoX3ApKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0sCisJCQkJY29uc3QgdTggKmlucCxzaXplX3QgbGVuKQk9IGN0eC0+Z2hhc2g7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIDAKKwluID0gKHVuc2lnbmVkIGludCltbGVuJTE2OyAvKiBhbHRlcm5hdGl2ZSB0byBjdHgtPm1yZXMgKi8KKyNlbmRpZgorCW1sZW4gKz0gbGVuOworCWlmIChtbGVuPigoVTY0KDEpPDwzNiktMzIpIHx8IChzaXplb2YobGVuKT09OCAmJiBtbGVuPGxlbikpCisJCXJldHVybiAtMTsKKwljdHgtPmxlbi51WzFdID0gbWxlbjsKKworCWlmIChjdHgtPmFyZXMpIHsKKwkJLyogRmlyc3QgY2FsbCB0byBlbmNyeXB0IGZpbmFsaXplcyBHSEFTSChBQUQpICovCisJCUdDTV9NVUwoY3R4LFhpKTsKKwkJY3R4LT5hcmVzID0gMDsKKwl9CisKKwlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJY3RyID0gR0VUVTMyKGN0eC0+WWkuYysxMik7CisJZWxzZQorCQljdHIgPSBjdHgtPllpLmRbM107CisKKwluID0gY3R4LT5tcmVzOworI2lmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCWlmICgxNiVzaXplb2Yoc2l6ZV90KSA9PSAwKSBkbyB7CS8qIGFsd2F5cyB0cnVlIGFjdHVhbGx5ICovCisJCWlmIChuKSB7CisJCQl3aGlsZSAobiAmJiBsZW4pIHsKKwkJCQljdHgtPlhpLmNbbl0gXj0gKihvdXQrKykgPSAqKGluKyspXmN0eC0+RUtpLmNbbl07CisJCQkJLS1sZW47CisJCQkJbiA9IChuKzEpJTE2OworCQkJfQorCQkJaWYgKG49PTApIEdDTV9NVUwoY3R4LFhpKTsKKwkJCWVsc2UgeworCQkJCWN0eC0+bXJlcyA9IG47CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKyNpZiBkZWZpbmVkKFNUUklDVF9BTElHTk1FTlQpCisJCWlmICgoKHNpemVfdClpbnwoc2l6ZV90KW91dCklc2l6ZW9mKHNpemVfdCkgIT0gMCkKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChHSEFTSCkgJiYgZGVmaW5lZChHSEFTSF9DSFVOSykKKwkJd2hpbGUgKGxlbj49R0hBU0hfQ0hVTkspIHsKKwkJICAgIHNpemVfdCBqPUdIQVNIX0NIVU5LOworCisJCSAgICB3aGlsZSAoaikgeworCQkJKCpibG9jaykoY3R4LT5ZaS5jLGN0eC0+RUtpLmMsa2V5KTsKKwkJCSsrY3RyOworCQkJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCQkJUFVUVTMyKGN0eC0+WWkuYysxMixjdHIpOworCQkJZWxzZQorCQkJCWN0eC0+WWkuZFszXSA9IGN0cjsKKwkJCWZvciAoaT0wOyBpPDE2OyBpKz1zaXplb2Yoc2l6ZV90KSkKKwkJCQkqKHNpemVfdCAqKShvdXQraSkgPQorCQkJCSooc2l6ZV90ICopKGluK2kpXiooc2l6ZV90ICopKGN0eC0+RUtpLmMraSk7CisJCQlvdXQgKz0gMTY7CisJCQlpbiAgKz0gMTY7CisJCQlqICAgLT0gMTY7CisJCSAgICB9CisJCSAgICBHSEFTSChjdHgsb3V0LUdIQVNIX0NIVU5LLEdIQVNIX0NIVU5LKTsKKwkJICAgIGxlbiAtPSBHSEFTSF9DSFVOSzsKKwkJfQorCQlpZiAoKGkgPSAobGVuJihzaXplX3QpLTE2KSkpIHsKKwkJICAgIHNpemVfdCBqPWk7CisKKwkJICAgIHdoaWxlIChsZW4+PTE2KSB7CisJCQkoKmJsb2NrKShjdHgtPllpLmMsY3R4LT5FS2kuYyxrZXkpOworCQkJKytjdHI7CisJCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCQllbHNlCisJCQkJY3R4LT5ZaS5kWzNdID0gY3RyOworCQkJZm9yIChpPTA7IGk8MTY7IGkrPXNpemVvZihzaXplX3QpKQorCQkJCSooc2l6ZV90ICopKG91dCtpKSA9CisJCQkJKihzaXplX3QgKikoaW4raSleKihzaXplX3QgKikoY3R4LT5FS2kuYytpKTsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJCWxlbiAtPSAxNjsKKwkJICAgIH0KKwkJICAgIEdIQVNIKGN0eCxvdXQtaixqKTsKKwkJfQorI2Vsc2UKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLaS5jLGtleSk7CisJCQkrK2N0cjsKKwkJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJCWVsc2UKKwkJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCQlmb3IgKGk9MDsgaTwxNjsgaSs9c2l6ZW9mKHNpemVfdCkpCisJCQkJKihzaXplX3QgKikoY3R4LT5YaS5jK2kpIF49CisJCQkJKihzaXplX3QgKikob3V0K2kpID0KKwkJCQkqKHNpemVfdCAqKShpbitpKV4qKHNpemVfdCAqKShjdHgtPkVLaS5jK2kpOworCQkJR0NNX01VTChjdHgsWGkpOworCQkJb3V0ICs9IDE2OworCQkJaW4gICs9IDE2OworCQkJbGVuIC09IDE2OworCQl9CisjZW5kaWYKKwkJaWYgKGxlbikgeworCQkJKCpibG9jaykoY3R4LT5ZaS5jLGN0eC0+RUtpLmMsa2V5KTsKKwkJCSsrY3RyOworCQkJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCQkJUFVUVTMyKGN0eC0+WWkuYysxMixjdHIpOworCQkJZWxzZQorCQkJCWN0eC0+WWkuZFszXSA9IGN0cjsKKwkJCXdoaWxlIChsZW4tLSkgeworCQkJCWN0eC0+WGkuY1tuXSBePSBvdXRbbl0gPSBpbltuXV5jdHgtPkVLaS5jW25dOworCQkJCSsrbjsKKwkJCX0KKwkJfQorCisJCWN0eC0+bXJlcyA9IG47CisJCXJldHVybiAwOworCX0gd2hpbGUoMCk7CisjZW5kaWYKKwlmb3IgKGk9MDtpPGxlbjsrK2kpIHsKKwkJaWYgKG49PTApIHsKKwkJCSgqYmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLaS5jLGtleSk7CisJCQkrK2N0cjsKKwkJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJCWVsc2UKKwkJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCX0KKwkJY3R4LT5YaS5jW25dIF49IG91dFtpXSA9IGluW2ldXmN0eC0+RUtpLmNbbl07CisJCW4gPSAobisxKSUxNjsKKwkJaWYgKG49PTApCisJCQlHQ01fTVVMKGN0eCxYaSk7CisJfQorCisJY3R4LT5tcmVzID0gbjsKKwlyZXR1cm4gMDsKK30KKworaW50IENSWVBUT19nY20xMjhfZGVjcnlwdChHQ00xMjhfQ09OVEVYVCAqY3R4LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQlzaXplX3QgbGVuKQoreworCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKwl1bnNpZ25lZCBpbnQgbiwgY3RyOworCXNpemVfdCBpOworCXU2NCAgICAgICAgbWxlbiAgPSBjdHgtPmxlbi51WzFdOworCWJsb2NrMTI4X2YgYmxvY2sgPSBjdHgtPmJsb2NrOworCXZvaWQgICAgICAqa2V5ICAgPSBjdHgtPmtleTsKKyNpZmRlZiBHQ01fRlVOQ1JFRl80QklUCisJdm9pZCAoKmdjbV9nbXVsdF9wKSh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKQk9IGN0eC0+Z211bHQ7CisjIGlmZGVmIEdIQVNICisJdm9pZCAoKmdjbV9naGFzaF9wKSh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdLAorCQkJCWNvbnN0IHU4ICppbnAsc2l6ZV90IGxlbikJPSBjdHgtPmdoYXNoOworIyBlbmRpZgorI2VuZGlmCisKKwltbGVuICs9IGxlbjsKKwlpZiAobWxlbj4oKFU2NCgxKTw8MzYpLTMyKSB8fCAoc2l6ZW9mKGxlbik9PTggJiYgbWxlbjxsZW4pKQorCQlyZXR1cm4gLTE7CisJY3R4LT5sZW4udVsxXSA9IG1sZW47CisKKwlpZiAoY3R4LT5hcmVzKSB7CisJCS8qIEZpcnN0IGNhbGwgdG8gZGVjcnlwdCBmaW5hbGl6ZXMgR0hBU0goQUFEKSAqLworCQlHQ01fTVVMKGN0eCxYaSk7CisJCWN0eC0+YXJlcyA9IDA7CisJfQorCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCWN0ciA9IEdFVFUzMihjdHgtPllpLmMrMTIpOworCWVsc2UKKwkJY3RyID0gY3R4LT5ZaS5kWzNdOworCisJbiA9IGN0eC0+bXJlczsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoMTYlc2l6ZW9mKHNpemVfdCkgPT0gMCkgZG8gewkvKiBhbHdheXMgdHJ1ZSBhY3R1YWxseSAqLworCQlpZiAobikgeworCQkJd2hpbGUgKG4gJiYgbGVuKSB7CisJCQkJdTggYyA9ICooaW4rKyk7CisJCQkJKihvdXQrKykgPSBjXmN0eC0+RUtpLmNbbl07CisJCQkJY3R4LT5YaS5jW25dIF49IGM7CisJCQkJLS1sZW47CisJCQkJbiA9IChuKzEpJTE2OworCQkJfQorCQkJaWYgKG49PTApIEdDTV9NVUwgKGN0eCxYaSk7CisJCQllbHNlIHsKKwkJCQljdHgtPm1yZXMgPSBuOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlpZiAoKChzaXplX3QpaW58KHNpemVfdClvdXQpJXNpemVvZihzaXplX3QpICE9IDApCisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoR0hBU0gpICYmIGRlZmluZWQoR0hBU0hfQ0hVTkspCisJCXdoaWxlIChsZW4+PUdIQVNIX0NIVU5LKSB7CisJCSAgICBzaXplX3Qgaj1HSEFTSF9DSFVOSzsKKworCQkgICAgR0hBU0goY3R4LGluLEdIQVNIX0NIVU5LKTsKKwkJICAgIHdoaWxlIChqKSB7CisJCQkoKmJsb2NrKShjdHgtPllpLmMsY3R4LT5FS2kuYyxrZXkpOworCQkJKytjdHI7CisJCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCQllbHNlCisJCQkJY3R4LT5ZaS5kWzNdID0gY3RyOworCQkJZm9yIChpPTA7IGk8MTY7IGkrPXNpemVvZihzaXplX3QpKQorCQkJCSooc2l6ZV90ICopKG91dCtpKSA9CisJCQkJKihzaXplX3QgKikoaW4raSleKihzaXplX3QgKikoY3R4LT5FS2kuYytpKTsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJCWogICAtPSAxNjsKKwkJICAgIH0KKwkJICAgIGxlbiAtPSBHSEFTSF9DSFVOSzsKKwkJfQorCQlpZiAoKGkgPSAobGVuJihzaXplX3QpLTE2KSkpIHsKKwkJICAgIEdIQVNIKGN0eCxpbixpKTsKKwkJICAgIHdoaWxlIChsZW4+PTE2KSB7CisJCQkoKmJsb2NrKShjdHgtPllpLmMsY3R4LT5FS2kuYyxrZXkpOworCQkJKytjdHI7CisJCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCQllbHNlCisJCQkJY3R4LT5ZaS5kWzNdID0gY3RyOworCQkJZm9yIChpPTA7IGk8MTY7IGkrPXNpemVvZihzaXplX3QpKQorCQkJCSooc2l6ZV90ICopKG91dCtpKSA9CisJCQkJKihzaXplX3QgKikoaW4raSleKihzaXplX3QgKikoY3R4LT5FS2kuYytpKTsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJCWxlbiAtPSAxNjsKKwkJICAgIH0KKwkJfQorI2Vsc2UKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLaS5jLGtleSk7CisJCQkrK2N0cjsKKwkJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJCWVsc2UKKwkJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCQlmb3IgKGk9MDsgaTwxNjsgaSs9c2l6ZW9mKHNpemVfdCkpIHsKKwkJCQlzaXplX3QgYyA9ICooc2l6ZV90ICopKGluK2kpOworCQkJCSooc2l6ZV90ICopKG91dCtpKSA9IGNeKihzaXplX3QgKikoY3R4LT5FS2kuYytpKTsKKwkJCQkqKHNpemVfdCAqKShjdHgtPlhpLmMraSkgXj0gYzsKKwkJCX0KKwkJCUdDTV9NVUwoY3R4LFhpKTsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJCWxlbiAtPSAxNjsKKwkJfQorI2VuZGlmCisJCWlmIChsZW4pIHsKKwkJCSgqYmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLaS5jLGtleSk7CisJCQkrK2N0cjsKKwkJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJCWVsc2UKKwkJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQl1OCBjID0gaW5bbl07CisJCQkJY3R4LT5YaS5jW25dIF49IGM7CisJCQkJb3V0W25dID0gY15jdHgtPkVLaS5jW25dOworCQkJCSsrbjsKKwkJCX0KKwkJfQorCisJCWN0eC0+bXJlcyA9IG47CisJCXJldHVybiAwOworCX0gd2hpbGUoMCk7CisjZW5kaWYKKwlmb3IgKGk9MDtpPGxlbjsrK2kpIHsKKwkJdTggYzsKKwkJaWYgKG49PTApIHsKKwkJCSgqYmxvY2spKGN0eC0+WWkuYyxjdHgtPkVLaS5jLGtleSk7CisJCQkrK2N0cjsKKwkJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJCWVsc2UKKwkJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCX0KKwkJYyA9IGluW2ldOworCQlvdXRbaV0gPSBjXmN0eC0+RUtpLmNbbl07CisJCWN0eC0+WGkuY1tuXSBePSBjOworCQluID0gKG4rMSklMTY7CisJCWlmIChuPT0wKQorCQkJR0NNX01VTChjdHgsWGkpOworCX0KKworCWN0eC0+bXJlcyA9IG47CisJcmV0dXJuIDA7Cit9CisKK2ludCBDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzIoR0NNMTI4X0NPTlRFWFQgKmN0eCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJc2l6ZV90IGxlbiwgY3RyMTI4X2Ygc3RyZWFtKQoreworCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKwl1bnNpZ25lZCBpbnQgbiwgY3RyOworCXNpemVfdCBpOworCXU2NCAgIG1sZW4gPSBjdHgtPmxlbi51WzFdOworCXZvaWQgKmtleSAgPSBjdHgtPmtleTsKKyNpZmRlZiBHQ01fRlVOQ1JFRl80QklUCisJdm9pZCAoKmdjbV9nbXVsdF9wKSh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdKQk9IGN0eC0+Z211bHQ7CisjIGlmZGVmIEdIQVNICisJdm9pZCAoKmdjbV9naGFzaF9wKSh1NjQgWGlbMl0sY29uc3QgdTEyOCBIdGFibGVbMTZdLAorCQkJCWNvbnN0IHU4ICppbnAsc2l6ZV90IGxlbikJPSBjdHgtPmdoYXNoOworIyBlbmRpZgorI2VuZGlmCisKKwltbGVuICs9IGxlbjsKKwlpZiAobWxlbj4oKFU2NCgxKTw8MzYpLTMyKSB8fCAoc2l6ZW9mKGxlbik9PTggJiYgbWxlbjxsZW4pKQorCQlyZXR1cm4gLTE7CisJY3R4LT5sZW4udVsxXSA9IG1sZW47CisKKwlpZiAoY3R4LT5hcmVzKSB7CisJCS8qIEZpcnN0IGNhbGwgdG8gZW5jcnlwdCBmaW5hbGl6ZXMgR0hBU0goQUFEKSAqLworCQlHQ01fTVVMKGN0eCxYaSk7CisJCWN0eC0+YXJlcyA9IDA7CisJfQorCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCWN0ciA9IEdFVFUzMihjdHgtPllpLmMrMTIpOworCWVsc2UKKwkJY3RyID0gY3R4LT5ZaS5kWzNdOworCisJbiA9IGN0eC0+bXJlczsKKwlpZiAobikgeworCQl3aGlsZSAobiAmJiBsZW4pIHsKKwkJCWN0eC0+WGkuY1tuXSBePSAqKG91dCsrKSA9ICooaW4rKyleY3R4LT5FS2kuY1tuXTsKKwkJCS0tbGVuOworCQkJbiA9IChuKzEpJTE2OworCQl9CisJCWlmIChuPT0wKSBHQ01fTVVMKGN0eCxYaSk7CisJCWVsc2UgeworCQkJY3R4LT5tcmVzID0gbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorI2lmIGRlZmluZWQoR0hBU0gpICYmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCXdoaWxlIChsZW4+PUdIQVNIX0NIVU5LKSB7CisJCSgqc3RyZWFtKShpbixvdXQsR0hBU0hfQ0hVTksvMTYsa2V5LGN0eC0+WWkuYyk7CisJCWN0ciArPSBHSEFTSF9DSFVOSy8xNjsKKwkJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCWVsc2UKKwkJCWN0eC0+WWkuZFszXSA9IGN0cjsKKwkJR0hBU0goY3R4LG91dCxHSEFTSF9DSFVOSyk7CisJCW91dCArPSBHSEFTSF9DSFVOSzsKKwkJaW4gICs9IEdIQVNIX0NIVU5LOworCQlsZW4gLT0gR0hBU0hfQ0hVTks7CisJfQorI2VuZGlmCisJaWYgKChpID0gKGxlbiYoc2l6ZV90KS0xNikpKSB7CisJCXNpemVfdCBqPWkvMTY7CisKKwkJKCpzdHJlYW0pKGluLG91dCxqLGtleSxjdHgtPllpLmMpOworCQljdHIgKz0gKHVuc2lnbmVkIGludClqOworCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJZWxzZQorCQkJY3R4LT5ZaS5kWzNdID0gY3RyOworCQlpbiAgKz0gaTsKKwkJbGVuIC09IGk7CisjaWYgZGVmaW5lZChHSEFTSCkKKwkJR0hBU0goY3R4LG91dCxpKTsKKwkJb3V0ICs9IGk7CisjZWxzZQorCQl3aGlsZSAoai0tKSB7CisJCQlmb3IgKGk9MDtpPDE2OysraSkgY3R4LT5YaS5jW2ldIF49IG91dFtpXTsKKwkJCUdDTV9NVUwoY3R4LFhpKTsKKwkJCW91dCArPSAxNjsKKwkJfQorI2VuZGlmCisJfQorCWlmIChsZW4pIHsKKwkJKCpjdHgtPmJsb2NrKShjdHgtPllpLmMsY3R4LT5FS2kuYyxrZXkpOworCQkrK2N0cjsKKwkJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCWVsc2UKKwkJCWN0eC0+WWkuZFszXSA9IGN0cjsKKwkJd2hpbGUgKGxlbi0tKSB7CisJCQljdHgtPlhpLmNbbl0gXj0gb3V0W25dID0gaW5bbl1eY3R4LT5FS2kuY1tuXTsKKwkJCSsrbjsKKwkJfQorCX0KKworCWN0eC0+bXJlcyA9IG47CisJcmV0dXJuIDA7Cit9CisKK2ludCBDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzIoR0NNMTI4X0NPTlRFWFQgKmN0eCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJc2l6ZV90IGxlbixjdHIxMjhfZiBzdHJlYW0pCit7CisJY29uc3QgdW5pb24geyBsb25nIG9uZTsgY2hhciBsaXR0bGU7IH0gaXNfZW5kaWFuID0gezF9OworCXVuc2lnbmVkIGludCBuLCBjdHI7CisJc2l6ZV90IGk7CisJdTY0ICAgbWxlbiA9IGN0eC0+bGVuLnVbMV07CisJdm9pZCAqa2V5ICA9IGN0eC0+a2V5OworI2lmZGVmIEdDTV9GVU5DUkVGXzRCSVQKKwl2b2lkICgqZ2NtX2dtdWx0X3ApKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pCT0gY3R4LT5nbXVsdDsKKyMgaWZkZWYgR0hBU0gKKwl2b2lkICgqZ2NtX2doYXNoX3ApKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0sCisJCQkJY29uc3QgdTggKmlucCxzaXplX3QgbGVuKQk9IGN0eC0+Z2hhc2g7CisjIGVuZGlmCisjZW5kaWYKKworCW1sZW4gKz0gbGVuOworCWlmIChtbGVuPigoVTY0KDEpPDwzNiktMzIpIHx8IChzaXplb2YobGVuKT09OCAmJiBtbGVuPGxlbikpCisJCXJldHVybiAtMTsKKwljdHgtPmxlbi51WzFdID0gbWxlbjsKKworCWlmIChjdHgtPmFyZXMpIHsKKwkJLyogRmlyc3QgY2FsbCB0byBkZWNyeXB0IGZpbmFsaXplcyBHSEFTSChBQUQpICovCisJCUdDTV9NVUwoY3R4LFhpKTsKKwkJY3R4LT5hcmVzID0gMDsKKwl9CisKKwlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJY3RyID0gR0VUVTMyKGN0eC0+WWkuYysxMik7CisJZWxzZQorCQljdHIgPSBjdHgtPllpLmRbM107CisKKwluID0gY3R4LT5tcmVzOworCWlmIChuKSB7CisJCXdoaWxlIChuICYmIGxlbikgeworCQkJdTggYyA9ICooaW4rKyk7CisJCQkqKG91dCsrKSA9IGNeY3R4LT5FS2kuY1tuXTsKKwkJCWN0eC0+WGkuY1tuXSBePSBjOworCQkJLS1sZW47CisJCQluID0gKG4rMSklMTY7CisJCX0KKwkJaWYgKG49PTApIEdDTV9NVUwgKGN0eCxYaSk7CisJCWVsc2UgeworCQkJY3R4LT5tcmVzID0gbjsKKwkJCXJldHVybiAwOworCQl9CisJfQorI2lmIGRlZmluZWQoR0hBU0gpICYmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCXdoaWxlIChsZW4+PUdIQVNIX0NIVU5LKSB7CisJCUdIQVNIKGN0eCxpbixHSEFTSF9DSFVOSyk7CisJCSgqc3RyZWFtKShpbixvdXQsR0hBU0hfQ0hVTksvMTYsa2V5LGN0eC0+WWkuYyk7CisJCWN0ciArPSBHSEFTSF9DSFVOSy8xNjsKKwkJaWYgKGlzX2VuZGlhbi5saXR0bGUpCisJCQlQVVRVMzIoY3R4LT5ZaS5jKzEyLGN0cik7CisJCWVsc2UKKwkJCWN0eC0+WWkuZFszXSA9IGN0cjsKKwkJb3V0ICs9IEdIQVNIX0NIVU5LOworCQlpbiAgKz0gR0hBU0hfQ0hVTks7CisJCWxlbiAtPSBHSEFTSF9DSFVOSzsKKwl9CisjZW5kaWYKKwlpZiAoKGkgPSAobGVuJihzaXplX3QpLTE2KSkpIHsKKwkJc2l6ZV90IGo9aS8xNjsKKworI2lmIGRlZmluZWQoR0hBU0gpCisJCUdIQVNIKGN0eCxpbixpKTsKKyNlbHNlCisJCXdoaWxlIChqLS0pIHsKKwkJCXNpemVfdCBrOworCQkJZm9yIChrPTA7azwxNjsrK2spIGN0eC0+WGkuY1trXSBePSBpbltrXTsKKwkJCUdDTV9NVUwoY3R4LFhpKTsKKwkJCWluICs9IDE2OworCQl9CisJCWogICA9IGkvMTY7CisJCWluIC09IGk7CisjZW5kaWYKKwkJKCpzdHJlYW0pKGluLG91dCxqLGtleSxjdHgtPllpLmMpOworCQljdHIgKz0gKHVuc2lnbmVkIGludClqOworCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkKKwkJCVBVVFUzMihjdHgtPllpLmMrMTIsY3RyKTsKKwkJZWxzZQorCQkJY3R4LT5ZaS5kWzNdID0gY3RyOworCQlvdXQgKz0gaTsKKwkJaW4gICs9IGk7CisJCWxlbiAtPSBpOworCX0KKwlpZiAobGVuKSB7CisJCSgqY3R4LT5ibG9jaykoY3R4LT5ZaS5jLGN0eC0+RUtpLmMsa2V5KTsKKwkJKytjdHI7CisJCWlmIChpc19lbmRpYW4ubGl0dGxlKQorCQkJUFVUVTMyKGN0eC0+WWkuYysxMixjdHIpOworCQllbHNlCisJCQljdHgtPllpLmRbM10gPSBjdHI7CisJCXdoaWxlIChsZW4tLSkgeworCQkJdTggYyA9IGluW25dOworCQkJY3R4LT5YaS5jW25dIF49IGM7CisJCQlvdXRbbl0gPSBjXmN0eC0+RUtpLmNbbl07CisJCQkrK247CisJCX0KKwl9CisKKwljdHgtPm1yZXMgPSBuOworCXJldHVybiAwOworfQorCitpbnQgQ1JZUFRPX2djbTEyOF9maW5pc2goR0NNMTI4X0NPTlRFWFQgKmN0eCxjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsCisJCQlzaXplX3QgbGVuKQoreworCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKwl1NjQgYWxlbiA9IGN0eC0+bGVuLnVbMF08PDM7CisJdTY0IGNsZW4gPSBjdHgtPmxlbi51WzFdPDwzOworI2lmZGVmIEdDTV9GVU5DUkVGXzRCSVQKKwl2b2lkICgqZ2NtX2dtdWx0X3ApKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pCT0gY3R4LT5nbXVsdDsKKyNlbmRpZgorCisJaWYgKGN0eC0+bXJlcykKKwkJR0NNX01VTChjdHgsWGkpOworCisJaWYgKGlzX2VuZGlhbi5saXR0bGUpIHsKKyNpZmRlZiBCU1dBUDgKKwkJYWxlbiA9IEJTV0FQOChhbGVuKTsKKwkJY2xlbiA9IEJTV0FQOChjbGVuKTsKKyNlbHNlCisJCXU4ICpwID0gY3R4LT5sZW4uYzsKKworCQljdHgtPmxlbi51WzBdID0gYWxlbjsKKwkJY3R4LT5sZW4udVsxXSA9IGNsZW47CisKKwkJYWxlbiA9ICh1NjQpR0VUVTMyKHApICA8PDMyfEdFVFUzMihwKzQpOworCQljbGVuID0gKHU2NClHRVRVMzIocCs4KTw8MzJ8R0VUVTMyKHArMTIpOworI2VuZGlmCisJfQorCisJY3R4LT5YaS51WzBdIF49IGFsZW47CisJY3R4LT5YaS51WzFdIF49IGNsZW47CisJR0NNX01VTChjdHgsWGkpOworCisJY3R4LT5YaS51WzBdIF49IGN0eC0+RUswLnVbMF07CisJY3R4LT5YaS51WzFdIF49IGN0eC0+RUswLnVbMV07CisKKwlpZiAodGFnICYmIGxlbjw9c2l6ZW9mKGN0eC0+WGkpKQorCQlyZXR1cm4gbWVtY21wKGN0eC0+WGkuYyx0YWcsbGVuKTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKwordm9pZCBDUllQVE9fZ2NtMTI4X3RhZyhHQ00xMjhfQ09OVEVYVCAqY3R4LCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCBsZW4pCit7CisJQ1JZUFRPX2djbTEyOF9maW5pc2goY3R4LCBOVUxMLCAwKTsKKwltZW1jcHkodGFnLCBjdHgtPlhpLmMsIGxlbjw9c2l6ZW9mKGN0eC0+WGkuYyk/bGVuOnNpemVvZihjdHgtPlhpLmMpKTsKK30KKworR0NNMTI4X0NPTlRFWFQgKkNSWVBUT19nY20xMjhfbmV3KHZvaWQgKmtleSwgYmxvY2sxMjhfZiBibG9jaykKK3sKKwlHQ00xMjhfQ09OVEVYVCAqcmV0OworCisJaWYgKChyZXQgPSAoR0NNMTI4X0NPTlRFWFQgKilPUEVOU1NMX21hbGxvYyhzaXplb2YoR0NNMTI4X0NPTlRFWFQpKSkpCisJCUNSWVBUT19nY20xMjhfaW5pdChyZXQsa2V5LGJsb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgQ1JZUFRPX2djbTEyOF9yZWxlYXNlKEdDTTEyOF9DT05URVhUICpjdHgpCit7CisJaWYgKGN0eCkgeworCQlPUEVOU1NMX2NsZWFuc2UoY3R4LHNpemVvZigqY3R4KSk7CisJCU9QRU5TU0xfZnJlZShjdHgpOworCX0KK30KKworI2lmIGRlZmluZWQoU0VMRlRFU1QpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorCisvKiBUZXN0IENhc2UgMSAqLworc3RhdGljIGNvbnN0IHU4CUsxWzE2XSwKKwkJKlAxPU5VTEwsCisJCSpBMT1OVUxMLAorCQlJVjFbMTJdLAorCQkqQzE9TlVMTCwKKwkJVDFbXT0gIHsweDU4LDB4ZTIsMHhmYywweGNlLDB4ZmEsMHg3ZSwweDMwLDB4NjEsMHgzNiwweDdmLDB4MWQsMHg1NywweGE0LDB4ZTcsMHg0NSwweDVhfTsKKworLyogVGVzdCBDYXNlIDIgKi8KKyNkZWZpbmUgSzIgSzEKKyNkZWZpbmUgQTIgQTEKKyNkZWZpbmUgSVYyIElWMQorc3RhdGljIGNvbnN0IHU4CVAyWzE2XSwKKwkJQzJbXT0gIHsweDAzLDB4ODgsMHhkYSwweGNlLDB4NjAsMHhiNiwweGEzLDB4OTIsMHhmMywweDI4LDB4YzIsMHhiOSwweDcxLDB4YjIsMHhmZSwweDc4fSwKKwkJVDJbXT0gIHsweGFiLDB4NmUsMHg0NywweGQ0LDB4MmMsMHhlYywweDEzLDB4YmQsMHhmNSwweDNhLDB4NjcsMHhiMiwweDEyLDB4NTcsMHhiZCwweGRmfTsKKworLyogVGVzdCBDYXNlIDMgKi8KKyNkZWZpbmUgQTMgQTIKK3N0YXRpYyBjb25zdCB1OAlLM1tdPSAgezB4ZmUsMHhmZiwweGU5LDB4OTIsMHg4NiwweDY1LDB4NzMsMHgxYywweDZkLDB4NmEsMHg4ZiwweDk0LDB4NjcsMHgzMCwweDgzLDB4MDh9LAorCQlQM1tdPSAgezB4ZDksMHgzMSwweDMyLDB4MjUsMHhmOCwweDg0LDB4MDYsMHhlNSwweGE1LDB4NTksMHgwOSwweGM1LDB4YWYsMHhmNSwweDI2LDB4OWEsCisJCQkweDg2LDB4YTcsMHhhOSwweDUzLDB4MTUsMHgzNCwweGY3LDB4ZGEsMHgyZSwweDRjLDB4MzAsMHgzZCwweDhhLDB4MzEsMHg4YSwweDcyLAorCQkJMHgxYywweDNjLDB4MGMsMHg5NSwweDk1LDB4NjgsMHgwOSwweDUzLDB4MmYsMHhjZiwweDBlLDB4MjQsMHg0OSwweGE2LDB4YjUsMHgyNSwKKwkJCTB4YjEsMHg2YSwweGVkLDB4ZjUsMHhhYSwweDBkLDB4ZTYsMHg1NywweGJhLDB4NjMsMHg3YiwweDM5LDB4MWEsMHhhZiwweGQyLDB4NTV9LAorCQlJVjNbXT0gezB4Y2EsMHhmZSwweGJhLDB4YmUsMHhmYSwweGNlLDB4ZGIsMHhhZCwweGRlLDB4Y2EsMHhmOCwweDg4fSwKKwkJQzNbXT0gIHsweDQyLDB4ODMsMHgxZSwweGMyLDB4MjEsMHg3NywweDc0LDB4MjQsMHg0YiwweDcyLDB4MjEsMHhiNywweDg0LDB4ZDAsMHhkNCwweDljLAorCQkJMHhlMywweGFhLDB4MjEsMHgyZiwweDJjLDB4MDIsMHhhNCwweGUwLDB4MzUsMHhjMSwweDdlLDB4MjMsMHgyOSwweGFjLDB4YTEsMHgyZSwKKwkJCTB4MjEsMHhkNSwweDE0LDB4YjIsMHg1NCwweDY2LDB4OTMsMHgxYywweDdkLDB4OGYsMHg2YSwweDVhLDB4YWMsMHg4NCwweGFhLDB4MDUsCisJCQkweDFiLDB4YTMsMHgwYiwweDM5LDB4NmEsMHgwYSwweGFjLDB4OTcsMHgzZCwweDU4LDB4ZTAsMHg5MSwweDQ3LDB4M2YsMHg1OSwweDg1fSwKKwkJVDNbXT0gIHsweDRkLDB4NWMsMHgyYSwweGYzLDB4MjcsMHhjZCwweDY0LDB4YTYsMHgyYywweGYzLDB4NWEsMHhiZCwweDJiLDB4YTYsMHhmYSwweGI0fTsKKworLyogVGVzdCBDYXNlIDQgKi8KKyNkZWZpbmUgSzQgSzMKKyNkZWZpbmUgSVY0IElWMworc3RhdGljIGNvbnN0IHU4CVA0W109ICB7MHhkOSwweDMxLDB4MzIsMHgyNSwweGY4LDB4ODQsMHgwNiwweGU1LDB4YTUsMHg1OSwweDA5LDB4YzUsMHhhZiwweGY1LDB4MjYsMHg5YSwKKwkJCTB4ODYsMHhhNywweGE5LDB4NTMsMHgxNSwweDM0LDB4ZjcsMHhkYSwweDJlLDB4NGMsMHgzMCwweDNkLDB4OGEsMHgzMSwweDhhLDB4NzIsCisJCQkweDFjLDB4M2MsMHgwYywweDk1LDB4OTUsMHg2OCwweDA5LDB4NTMsMHgyZiwweGNmLDB4MGUsMHgyNCwweDQ5LDB4YTYsMHhiNSwweDI1LAorCQkJMHhiMSwweDZhLDB4ZWQsMHhmNSwweGFhLDB4MGQsMHhlNiwweDU3LDB4YmEsMHg2MywweDdiLDB4Mzl9LAorCQlBNFtdPSAgezB4ZmUsMHhlZCwweGZhLDB4Y2UsMHhkZSwweGFkLDB4YmUsMHhlZiwweGZlLDB4ZWQsMHhmYSwweGNlLDB4ZGUsMHhhZCwweGJlLDB4ZWYsCisJCQkweGFiLDB4YWQsMHhkYSwweGQyfSwKKwkJQzRbXT0gIHsweDQyLDB4ODMsMHgxZSwweGMyLDB4MjEsMHg3NywweDc0LDB4MjQsMHg0YiwweDcyLDB4MjEsMHhiNywweDg0LDB4ZDAsMHhkNCwweDljLAorCQkJMHhlMywweGFhLDB4MjEsMHgyZiwweDJjLDB4MDIsMHhhNCwweGUwLDB4MzUsMHhjMSwweDdlLDB4MjMsMHgyOSwweGFjLDB4YTEsMHgyZSwKKwkJCTB4MjEsMHhkNSwweDE0LDB4YjIsMHg1NCwweDY2LDB4OTMsMHgxYywweDdkLDB4OGYsMHg2YSwweDVhLDB4YWMsMHg4NCwweGFhLDB4MDUsCisJCQkweDFiLDB4YTMsMHgwYiwweDM5LDB4NmEsMHgwYSwweGFjLDB4OTcsMHgzZCwweDU4LDB4ZTAsMHg5MX0sCisJCVQ0W109ICB7MHg1YiwweGM5LDB4NGYsMHhiYywweDMyLDB4MjEsMHhhNSwweGRiLDB4OTQsMHhmYSwweGU5LDB4NWEsMHhlNywweDEyLDB4MWEsMHg0N307CisKKy8qIFRlc3QgQ2FzZSA1ICovCisjZGVmaW5lIEs1IEs0CisjZGVmaW5lIFA1IFA0CisjZGVmaW5lIEE1IEE0CitzdGF0aWMgY29uc3QgdTgJSVY1W109IHsweGNhLDB4ZmUsMHhiYSwweGJlLDB4ZmEsMHhjZSwweGRiLDB4YWR9LAorCQlDNVtdPSAgezB4NjEsMHgzNSwweDNiLDB4NGMsMHgyOCwweDA2LDB4OTMsMHg0YSwweDc3LDB4N2YsMHhmNSwweDFmLDB4YTIsMHgyYSwweDQ3LDB4NTUsCisJCQkweDY5LDB4OWIsMHgyYSwweDcxLDB4NGYsMHhjZCwweGM2LDB4ZjgsMHgzNywweDY2LDB4ZTUsMHhmOSwweDdiLDB4NmMsMHg3NCwweDIzLAorCQkJMHg3MywweDgwLDB4NjksMHgwMCwweGU0LDB4OWYsMHgyNCwweGIyLDB4MmIsMHgwOSwweDc1LDB4NDQsMHhkNCwweDg5LDB4NmIsMHg0MiwKKwkJCTB4NDksMHg4OSwweGI1LDB4ZTEsMHhlYiwweGFjLDB4MGYsMHgwNywweGMyLDB4M2YsMHg0NSwweDk4fSwKKwkJVDVbXT0gIHsweDM2LDB4MTIsMHhkMiwweGU3LDB4OWUsMHgzYiwweDA3LDB4ODUsMHg1NiwweDFiLDB4ZTEsMHg0YSwweGFjLDB4YTIsMHhmYywweGNifTsKKworLyogVGVzdCBDYXNlIDYgKi8KKyNkZWZpbmUgSzYgSzUKKyNkZWZpbmUgUDYgUDUKKyNkZWZpbmUgQTYgQTUKK3N0YXRpYyBjb25zdCB1OAlJVjZbXT0gezB4OTMsMHgxMywweDIyLDB4NWQsMHhmOCwweDg0LDB4MDYsMHhlNSwweDU1LDB4OTAsMHg5YywweDVhLDB4ZmYsMHg1MiwweDY5LDB4YWEsCisJCQkweDZhLDB4N2EsMHg5NSwweDM4LDB4NTMsMHg0ZiwweDdkLDB4YTEsMHhlNCwweGMzLDB4MDMsMHhkMiwweGEzLDB4MTgsMHhhNywweDI4LAorCQkJMHhjMywweGMwLDB4YzksMHg1MSwweDU2LDB4ODAsMHg5NSwweDM5LDB4ZmMsMHhmMCwweGUyLDB4NDIsMHg5YSwweDZiLDB4NTIsMHg1NCwKKwkJCTB4MTYsMHhhZSwweGRiLDB4ZjUsMHhhMCwweGRlLDB4NmEsMHg1NywweGE2LDB4MzcsMHhiMywweDlifSwKKwkJQzZbXT0gIHsweDhjLDB4ZTIsMHg0OSwweDk4LDB4NjIsMHg1NiwweDE1LDB4YjYsMHgwMywweGEwLDB4MzMsMHhhYywweGExLDB4M2YsMHhiOCwweDk0LAorCQkJMHhiZSwweDkxLDB4MTIsMHhhNSwweGMzLDB4YTIsMHgxMSwweGE4LDB4YmEsMHgyNiwweDJhLDB4M2MsMHhjYSwweDdlLDB4MmMsMHhhNywKKwkJCTB4MDEsMHhlNCwweGE5LDB4YTQsMHhmYiwweGE0LDB4M2MsMHg5MCwweGNjLDB4ZGMsMHhiMiwweDgxLDB4ZDQsMHg4YywweDdjLDB4NmYsCisJCQkweGQ2LDB4MjgsMHg3NSwweGQyLDB4YWMsMHhhNCwweDE3LDB4MDMsMHg0YywweDM0LDB4YWUsMHhlNX0sCisJCVQ2W109ICB7MHg2MSwweDljLDB4YzUsMHhhZSwweGZmLDB4ZmUsMHgwYiwweGZhLDB4NDYsMHgyYSwweGY0LDB4M2MsMHgxNiwweDk5LDB4ZDAsMHg1MH07CisKKy8qIFRlc3QgQ2FzZSA3ICovCitzdGF0aWMgY29uc3QgdTggSzdbMjRdLAorCQkqUDc9TlVMTCwKKwkJKkE3PU5VTEwsCisJCUlWN1sxMl0sCisJCSpDNz1OVUxMLAorCQlUN1tdPSAgezB4Y2QsMHgzMywweGIyLDB4OGEsMHhjNywweDczLDB4ZjcsMHg0YiwweGEwLDB4MGUsMHhkMSwweGYzLDB4MTIsMHg1NywweDI0LDB4MzV9OworCisvKiBUZXN0IENhc2UgOCAqLworI2RlZmluZSBLOCBLNworI2RlZmluZSBJVjggSVY3CisjZGVmaW5lIEE4IEE3CitzdGF0aWMgY29uc3QgdTgJUDhbMTZdLAorCQlDOFtdPSAgezB4OTgsMHhlNywweDI0LDB4N2MsMHgwNywweGYwLDB4ZmUsMHg0MSwweDFjLDB4MjYsMHg3ZSwweDQzLDB4ODQsMHhiMCwweGY2LDB4MDB9LAorCQlUOFtdPSAgezB4MmYsMHhmNSwweDhkLDB4ODAsMHgwMywweDM5LDB4MjcsMHhhYiwweDhlLDB4ZjQsMHhkNCwweDU4LDB4NzUsMHgxNCwweGYwLDB4ZmJ9OworCisvKiBUZXN0IENhc2UgOSAqLworI2RlZmluZSBBOSBBOAorc3RhdGljIGNvbnN0IHU4CUs5W109ICB7MHhmZSwweGZmLDB4ZTksMHg5MiwweDg2LDB4NjUsMHg3MywweDFjLDB4NmQsMHg2YSwweDhmLDB4OTQsMHg2NywweDMwLDB4ODMsMHgwOCwKKwkJCTB4ZmUsMHhmZiwweGU5LDB4OTIsMHg4NiwweDY1LDB4NzMsMHgxY30sCisJCVA5W109ICB7MHhkOSwweDMxLDB4MzIsMHgyNSwweGY4LDB4ODQsMHgwNiwweGU1LDB4YTUsMHg1OSwweDA5LDB4YzUsMHhhZiwweGY1LDB4MjYsMHg5YSwKKwkJCTB4ODYsMHhhNywweGE5LDB4NTMsMHgxNSwweDM0LDB4ZjcsMHhkYSwweDJlLDB4NGMsMHgzMCwweDNkLDB4OGEsMHgzMSwweDhhLDB4NzIsCisJCQkweDFjLDB4M2MsMHgwYywweDk1LDB4OTUsMHg2OCwweDA5LDB4NTMsMHgyZiwweGNmLDB4MGUsMHgyNCwweDQ5LDB4YTYsMHhiNSwweDI1LAorCQkJMHhiMSwweDZhLDB4ZWQsMHhmNSwweGFhLDB4MGQsMHhlNiwweDU3LDB4YmEsMHg2MywweDdiLDB4MzksMHgxYSwweGFmLDB4ZDIsMHg1NX0sCisJCUlWOVtdPSB7MHhjYSwweGZlLDB4YmEsMHhiZSwweGZhLDB4Y2UsMHhkYiwweGFkLDB4ZGUsMHhjYSwweGY4LDB4ODh9LAorCQlDOVtdPSAgezB4MzksMHg4MCwweGNhLDB4MGIsMHgzYywweDAwLDB4ZTgsMHg0MSwweGViLDB4MDYsMHhmYSwweGM0LDB4ODcsMHgyYSwweDI3LDB4NTcsCisJCQkweDg1LDB4OWUsMHgxYywweGVhLDB4YTYsMHhlZiwweGQ5LDB4ODQsMHg2MiwweDg1LDB4OTMsMHhiNCwweDBjLDB4YTEsMHhlMSwweDljLAorCQkJMHg3ZCwweDc3LDB4M2QsMHgwMCwweGMxLDB4NDQsMHhjNSwweDI1LDB4YWMsMHg2MSwweDlkLDB4MTgsMHhjOCwweDRhLDB4M2YsMHg0NywKKwkJCTB4MTgsMHhlMiwweDQ0LDB4OGIsMHgyZiwweGUzLDB4MjQsMHhkOSwweGNjLDB4ZGEsMHgyNywweDEwLDB4YWMsMHhhZCwweGUyLDB4NTZ9LAorCQlUOVtdPSAgezB4OTksMHgyNCwweGE3LDB4YzgsMHg1OCwweDczLDB4MzYsMHhiZiwweGIxLDB4MTgsMHgwMiwweDRkLDB4YjgsMHg2NywweDRhLDB4MTR9OworCisvKiBUZXN0IENhc2UgMTAgKi8KKyNkZWZpbmUgSzEwIEs5CisjZGVmaW5lIElWMTAgSVY5CitzdGF0aWMgY29uc3QgdTgJUDEwW109IHsweGQ5LDB4MzEsMHgzMiwweDI1LDB4ZjgsMHg4NCwweDA2LDB4ZTUsMHhhNSwweDU5LDB4MDksMHhjNSwweGFmLDB4ZjUsMHgyNiwweDlhLAorCQkJMHg4NiwweGE3LDB4YTksMHg1MywweDE1LDB4MzQsMHhmNywweGRhLDB4MmUsMHg0YywweDMwLDB4M2QsMHg4YSwweDMxLDB4OGEsMHg3MiwKKwkJCTB4MWMsMHgzYywweDBjLDB4OTUsMHg5NSwweDY4LDB4MDksMHg1MywweDJmLDB4Y2YsMHgwZSwweDI0LDB4NDksMHhhNiwweGI1LDB4MjUsCisJCQkweGIxLDB4NmEsMHhlZCwweGY1LDB4YWEsMHgwZCwweGU2LDB4NTcsMHhiYSwweDYzLDB4N2IsMHgzOX0sCisJCUExMFtdPSB7MHhmZSwweGVkLDB4ZmEsMHhjZSwweGRlLDB4YWQsMHhiZSwweGVmLDB4ZmUsMHhlZCwweGZhLDB4Y2UsMHhkZSwweGFkLDB4YmUsMHhlZiwKKwkJCTB4YWIsMHhhZCwweGRhLDB4ZDJ9LAorCQlDMTBbXT0gezB4MzksMHg4MCwweGNhLDB4MGIsMHgzYywweDAwLDB4ZTgsMHg0MSwweGViLDB4MDYsMHhmYSwweGM0LDB4ODcsMHgyYSwweDI3LDB4NTcsCisJCQkweDg1LDB4OWUsMHgxYywweGVhLDB4YTYsMHhlZiwweGQ5LDB4ODQsMHg2MiwweDg1LDB4OTMsMHhiNCwweDBjLDB4YTEsMHhlMSwweDljLAorCQkJMHg3ZCwweDc3LDB4M2QsMHgwMCwweGMxLDB4NDQsMHhjNSwweDI1LDB4YWMsMHg2MSwweDlkLDB4MTgsMHhjOCwweDRhLDB4M2YsMHg0NywKKwkJCTB4MTgsMHhlMiwweDQ0LDB4OGIsMHgyZiwweGUzLDB4MjQsMHhkOSwweGNjLDB4ZGEsMHgyNywweDEwfSwKKwkJVDEwW109IHsweDI1LDB4MTksMHg0OSwweDhlLDB4ODAsMHhmMSwweDQ3LDB4OGYsMHgzNywweGJhLDB4NTUsMHhiZCwweDZkLDB4MjcsMHg2MSwweDhjfTsKKworLyogVGVzdCBDYXNlIDExICovCisjZGVmaW5lIEsxMSBLMTAKKyNkZWZpbmUgUDExIFAxMAorI2RlZmluZSBBMTEgQTEwCitzdGF0aWMgY29uc3QgdTgJSVYxMVtdPXsweGNhLDB4ZmUsMHhiYSwweGJlLDB4ZmEsMHhjZSwweGRiLDB4YWR9LAorCQlDMTFbXT0gezB4MGYsMHgxMCwweGY1LDB4OTksMHhhZSwweDE0LDB4YTEsMHg1NCwweGVkLDB4MjQsMHhiMywweDZlLDB4MjUsMHgzMiwweDRkLDB4YjgsCisJCQkweGM1LDB4NjYsMHg2MywweDJlLDB4ZjIsMHhiYiwweGIzLDB4NGYsMHg4MywweDQ3LDB4MjgsMHgwZiwweGM0LDB4NTAsMHg3MCwweDU3LAorCQkJMHhmZCwweGRjLDB4MjksMHhkZiwweDlhLDB4NDcsMHgxZiwweDc1LDB4YzYsMHg2NSwweDQxLDB4ZDQsMHhkNCwweGRhLDB4ZDEsMHhjOSwKKwkJCTB4ZTksMHgzYSwweDE5LDB4YTUsMHg4ZSwweDhiLDB4NDcsMHgzZiwweGEwLDB4ZjAsMHg2MiwweGY3fSwKKwkJVDExW109IHsweDY1LDB4ZGMsMHhjNSwweDdmLDB4Y2YsMHg2MiwweDNhLDB4MjQsMHgwOSwweDRmLDB4Y2MsMHhhNCwweDBkLDB4MzUsMHgzMywweGY4fTsKKworLyogVGVzdCBDYXNlIDEyICovCisjZGVmaW5lIEsxMiBLMTEKKyNkZWZpbmUgUDEyIFAxMQorI2RlZmluZSBBMTIgQTExCitzdGF0aWMgY29uc3QgdTgJSVYxMltdPXsweDkzLDB4MTMsMHgyMiwweDVkLDB4ZjgsMHg4NCwweDA2LDB4ZTUsMHg1NSwweDkwLDB4OWMsMHg1YSwweGZmLDB4NTIsMHg2OSwweGFhLAorCQkJMHg2YSwweDdhLDB4OTUsMHgzOCwweDUzLDB4NGYsMHg3ZCwweGExLDB4ZTQsMHhjMywweDAzLDB4ZDIsMHhhMywweDE4LDB4YTcsMHgyOCwKKwkJCTB4YzMsMHhjMCwweGM5LDB4NTEsMHg1NiwweDgwLDB4OTUsMHgzOSwweGZjLDB4ZjAsMHhlMiwweDQyLDB4OWEsMHg2YiwweDUyLDB4NTQsCisJCQkweDE2LDB4YWUsMHhkYiwweGY1LDB4YTAsMHhkZSwweDZhLDB4NTcsMHhhNiwweDM3LDB4YjMsMHg5Yn0sCisJCUMxMltdPSB7MHhkMiwweDdlLDB4ODgsMHg2OCwweDFjLDB4ZTMsMHgyNCwweDNjLDB4NDgsMHgzMCwweDE2LDB4NWEsMHg4ZiwweGRjLDB4ZjksMHhmZiwKKwkJCTB4MWQsMHhlOSwweGExLDB4ZDgsMHhlNiwweGI0LDB4NDcsMHhlZiwweDZlLDB4ZjcsMHhiNywweDk4LDB4MjgsMHg2NiwweDZlLDB4NDUsCisJCQkweDgxLDB4ZTcsMHg5MCwweDEyLDB4YWYsMHgzNCwweGRkLDB4ZDksMHhlMiwweGYwLDB4MzcsMHg1OCwweDliLDB4MjksMHgyZCwweGIzLAorCQkJMHhlNiwweDdjLDB4MDMsMHg2NywweDQ1LDB4ZmEsMHgyMiwweGU3LDB4ZTksMHhiNywweDM3LDB4M2J9LAorCQlUMTJbXT0gezB4ZGMsMHhmNSwweDY2LDB4ZmYsMHgyOSwweDFjLDB4MjUsMHhiYiwweGI4LDB4NTYsMHg4ZiwweGMzLDB4ZDMsMHg3NiwweGE2LDB4ZDl9OworCisvKiBUZXN0IENhc2UgMTMgKi8KK3N0YXRpYyBjb25zdCB1OAlLMTNbMzJdLAorCQkqUDEzPU5VTEwsCisJCSpBMTM9TlVMTCwKKwkJSVYxM1sxMl0sCisJCSpDMTM9TlVMTCwKKwkJVDEzW109ezB4NTMsMHgwZiwweDhhLDB4ZmIsMHhjNywweDQ1LDB4MzYsMHhiOSwweGE5LDB4NjMsMHhiNCwweGYxLDB4YzQsMHhjYiwweDczLDB4OGJ9OworCisvKiBUZXN0IENhc2UgMTQgKi8KKyNkZWZpbmUgSzE0IEsxMworI2RlZmluZSBBMTQgQTEzCitzdGF0aWMgY29uc3QgdTgJUDE0WzE2XSwKKwkJSVYxNFsxMl0sCisJCUMxNFtdPSB7MHhjZSwweGE3LDB4NDAsMHgzZCwweDRkLDB4NjAsMHg2YiwweDZlLDB4MDcsMHg0ZSwweGM1LDB4ZDMsMHhiYSwweGYzLDB4OWQsMHgxOH0sCisJCVQxNFtdPSB7MHhkMCwweGQxLDB4YzgsMHhhNywweDk5LDB4OTksMHg2YiwweGYwLDB4MjYsMHg1YiwweDk4LDB4YjUsMHhkNCwweDhhLDB4YjksMHgxOX07CisKKy8qIFRlc3QgQ2FzZSAxNSAqLworI2RlZmluZSBBMTUgQTE0CitzdGF0aWMgY29uc3QgdTgJSzE1W109IHsweGZlLDB4ZmYsMHhlOSwweDkyLDB4ODYsMHg2NSwweDczLDB4MWMsMHg2ZCwweDZhLDB4OGYsMHg5NCwweDY3LDB4MzAsMHg4MywweDA4LAorCQkJMHhmZSwweGZmLDB4ZTksMHg5MiwweDg2LDB4NjUsMHg3MywweDFjLDB4NmQsMHg2YSwweDhmLDB4OTQsMHg2NywweDMwLDB4ODMsMHgwOH0sCisJCVAxNVtdPSB7MHhkOSwweDMxLDB4MzIsMHgyNSwweGY4LDB4ODQsMHgwNiwweGU1LDB4YTUsMHg1OSwweDA5LDB4YzUsMHhhZiwweGY1LDB4MjYsMHg5YSwKKwkJCTB4ODYsMHhhNywweGE5LDB4NTMsMHgxNSwweDM0LDB4ZjcsMHhkYSwweDJlLDB4NGMsMHgzMCwweDNkLDB4OGEsMHgzMSwweDhhLDB4NzIsCisJCQkweDFjLDB4M2MsMHgwYywweDk1LDB4OTUsMHg2OCwweDA5LDB4NTMsMHgyZiwweGNmLDB4MGUsMHgyNCwweDQ5LDB4YTYsMHhiNSwweDI1LAorCQkJMHhiMSwweDZhLDB4ZWQsMHhmNSwweGFhLDB4MGQsMHhlNiwweDU3LDB4YmEsMHg2MywweDdiLDB4MzksMHgxYSwweGFmLDB4ZDIsMHg1NX0sCisJCUlWMTVbXT17MHhjYSwweGZlLDB4YmEsMHhiZSwweGZhLDB4Y2UsMHhkYiwweGFkLDB4ZGUsMHhjYSwweGY4LDB4ODh9LAorCQlDMTVbXT0gezB4NTIsMHgyZCwweGMxLDB4ZjAsMHg5OSwweDU2LDB4N2QsMHgwNywweGY0LDB4N2YsMHgzNywweGEzLDB4MmEsMHg4NCwweDQyLDB4N2QsCisJCQkweDY0LDB4M2EsMHg4YywweGRjLDB4YmYsMHhlNSwweGMwLDB4YzksMHg3NSwweDk4LDB4YTIsMHhiZCwweDI1LDB4NTUsMHhkMSwweGFhLAorCQkJMHg4YywweGIwLDB4OGUsMHg0OCwweDU5LDB4MGQsMHhiYiwweDNkLDB4YTcsMHhiMCwweDhiLDB4MTAsMHg1NiwweDgyLDB4ODgsMHgzOCwKKwkJCTB4YzUsMHhmNiwweDFlLDB4NjMsMHg5MywweGJhLDB4N2EsMHgwYSwweGJjLDB4YzksMHhmNiwweDYyLDB4ODksMHg4MCwweDE1LDB4YWR9LAorCQlUMTVbXT0gezB4YjAsMHg5NCwweGRhLDB4YzUsMHhkOSwweDM0LDB4NzEsMHhiZCwweGVjLDB4MWEsMHg1MCwweDIyLDB4NzAsMHhlMywweGNjLDB4NmN9OworCisvKiBUZXN0IENhc2UgMTYgKi8KKyNkZWZpbmUgSzE2IEsxNQorI2RlZmluZSBJVjE2IElWMTUKK3N0YXRpYyBjb25zdCB1OAlQMTZbXT0gezB4ZDksMHgzMSwweDMyLDB4MjUsMHhmOCwweDg0LDB4MDYsMHhlNSwweGE1LDB4NTksMHgwOSwweGM1LDB4YWYsMHhmNSwweDI2LDB4OWEsCisJCQkweDg2LDB4YTcsMHhhOSwweDUzLDB4MTUsMHgzNCwweGY3LDB4ZGEsMHgyZSwweDRjLDB4MzAsMHgzZCwweDhhLDB4MzEsMHg4YSwweDcyLAorCQkJMHgxYywweDNjLDB4MGMsMHg5NSwweDk1LDB4NjgsMHgwOSwweDUzLDB4MmYsMHhjZiwweDBlLDB4MjQsMHg0OSwweGE2LDB4YjUsMHgyNSwKKwkJCTB4YjEsMHg2YSwweGVkLDB4ZjUsMHhhYSwweDBkLDB4ZTYsMHg1NywweGJhLDB4NjMsMHg3YiwweDM5fSwKKwkJQTE2W109IHsweGZlLDB4ZWQsMHhmYSwweGNlLDB4ZGUsMHhhZCwweGJlLDB4ZWYsMHhmZSwweGVkLDB4ZmEsMHhjZSwweGRlLDB4YWQsMHhiZSwweGVmLAorCQkJMHhhYiwweGFkLDB4ZGEsMHhkMn0sCisJCUMxNltdPSB7MHg1MiwweDJkLDB4YzEsMHhmMCwweDk5LDB4NTYsMHg3ZCwweDA3LDB4ZjQsMHg3ZiwweDM3LDB4YTMsMHgyYSwweDg0LDB4NDIsMHg3ZCwKKwkJCTB4NjQsMHgzYSwweDhjLDB4ZGMsMHhiZiwweGU1LDB4YzAsMHhjOSwweDc1LDB4OTgsMHhhMiwweGJkLDB4MjUsMHg1NSwweGQxLDB4YWEsCisJCQkweDhjLDB4YjAsMHg4ZSwweDQ4LDB4NTksMHgwZCwweGJiLDB4M2QsMHhhNywweGIwLDB4OGIsMHgxMCwweDU2LDB4ODIsMHg4OCwweDM4LAorCQkJMHhjNSwweGY2LDB4MWUsMHg2MywweDkzLDB4YmEsMHg3YSwweDBhLDB4YmMsMHhjOSwweGY2LDB4NjJ9LAorCQlUMTZbXT0gezB4NzYsMHhmYywweDZlLDB4Y2UsMHgwZiwweDRlLDB4MTcsMHg2OCwweGNkLDB4ZGYsMHg4OCwweDUzLDB4YmIsMHgyZCwweDU1LDB4MWJ9OworCisvKiBUZXN0IENhc2UgMTcgKi8KKyNkZWZpbmUgSzE3IEsxNgorI2RlZmluZSBQMTcgUDE2CisjZGVmaW5lIEExNyBBMTYKK3N0YXRpYyBjb25zdCB1OAlJVjE3W109ezB4Y2EsMHhmZSwweGJhLDB4YmUsMHhmYSwweGNlLDB4ZGIsMHhhZH0sCisJCUMxN1tdPSB7MHhjMywweDc2LDB4MmQsMHhmMSwweGNhLDB4NzgsMHg3ZCwweDMyLDB4YWUsMHg0NywweGMxLDB4M2IsMHhmMSwweDk4LDB4NDQsMHhjYiwKKwkJCTB4YWYsMHgxYSwweGUxLDB4NGQsMHgwYiwweDk3LDB4NmEsMHhmYSwweGM1LDB4MmYsMHhmNywweGQ3LDB4OWIsMHhiYSwweDlkLDB4ZTAsCisJCQkweGZlLDB4YjUsMHg4MiwweGQzLDB4MzksMHgzNCwweGE0LDB4ZjAsMHg5NSwweDRjLDB4YzIsMHgzNiwweDNiLDB4YzcsMHgzZiwweDc4LAorCQkJMHg2MiwweGFjLDB4NDMsMHgwZSwweDY0LDB4YWIsMHhlNCwweDk5LDB4ZjQsMHg3YywweDliLDB4MWZ9LAorCQlUMTdbXT0gezB4M2EsMHgzMywweDdkLDB4YmYsMHg0NiwweGE3LDB4OTIsMHhjNCwweDVlLDB4NDUsMHg0OSwweDEzLDB4ZmUsMHgyZSwweGE4LDB4ZjJ9OworCisvKiBUZXN0IENhc2UgMTggKi8KKyNkZWZpbmUgSzE4IEsxNworI2RlZmluZSBQMTggUDE3CisjZGVmaW5lIEExOCBBMTcKK3N0YXRpYyBjb25zdCB1OAlJVjE4W109ezB4OTMsMHgxMywweDIyLDB4NWQsMHhmOCwweDg0LDB4MDYsMHhlNSwweDU1LDB4OTAsMHg5YywweDVhLDB4ZmYsMHg1MiwweDY5LDB4YWEsCisJCQkweDZhLDB4N2EsMHg5NSwweDM4LDB4NTMsMHg0ZiwweDdkLDB4YTEsMHhlNCwweGMzLDB4MDMsMHhkMiwweGEzLDB4MTgsMHhhNywweDI4LAorCQkJMHhjMywweGMwLDB4YzksMHg1MSwweDU2LDB4ODAsMHg5NSwweDM5LDB4ZmMsMHhmMCwweGUyLDB4NDIsMHg5YSwweDZiLDB4NTIsMHg1NCwKKwkJCTB4MTYsMHhhZSwweGRiLDB4ZjUsMHhhMCwweGRlLDB4NmEsMHg1NywweGE2LDB4MzcsMHhiMywweDlifSwKKwkJQzE4W109IHsweDVhLDB4OGQsMHhlZiwweDJmLDB4MGMsMHg5ZSwweDUzLDB4ZjEsMHhmNywweDVkLDB4NzgsMHg1MywweDY1LDB4OWUsMHgyYSwweDIwLAorCQkJMHhlZSwweGIyLDB4YjIsMHgyYSwweGFmLDB4ZGUsMHg2NCwweDE5LDB4YTAsMHg1OCwweGFiLDB4NGYsMHg2ZiwweDc0LDB4NmIsMHhmNCwKKwkJCTB4MGYsMHhjMCwweGMzLDB4YjcsMHg4MCwweGYyLDB4NDQsMHg0NSwweDJkLDB4YTMsMHhlYiwweGYxLDB4YzUsMHhkOCwweDJjLDB4ZGUsCisJCQkweGEyLDB4NDEsMHg4OSwweDk3LDB4MjAsMHgwZSwweGY4LDB4MmUsMHg0NCwweGFlLDB4N2UsMHgzZn0sCisJCVQxOFtdPSB7MHhhNCwweDRhLDB4ODIsMHg2NiwweGVlLDB4MWMsMHg4ZSwweGIwLDB4YzgsMHhiNSwweGQ0LDB4Y2YsMHg1YSwweGU5LDB4ZjEsMHg5YX07CisKKyNkZWZpbmUgVEVTVF9DQVNFKG4pCWRvIHsJCQkJCVwKKwl1OCBvdXRbc2l6ZW9mKFAjI24pXTsJCQkJCVwKKwlBRVNfc2V0X2VuY3J5cHRfa2V5KEsjI24sc2l6ZW9mKEsjI24pKjgsJmtleSk7CQlcCisJQ1JZUFRPX2djbTEyOF9pbml0KCZjdHgsJmtleSwoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CVwKKwlDUllQVE9fZ2NtMTI4X3NldGl2KCZjdHgsSVYjI24sc2l6ZW9mKElWIyNuKSk7CQlcCisJbWVtc2V0KG91dCwwLHNpemVvZihvdXQpKTsJCQkJXAorCWlmIChBIyNuKSBDUllQVE9fZ2NtMTI4X2FhZCgmY3R4LEEjI24sc2l6ZW9mKEEjI24pKTsJXAorCWlmIChQIyNuKSBDUllQVE9fZ2NtMTI4X2VuY3J5cHQoJmN0eCxQIyNuLG91dCxzaXplb2Yob3V0KSk7CVwKKwlpZiAoQ1JZUFRPX2djbTEyOF9maW5pc2goJmN0eCxUIyNuLDE2KSB8fAkJXAorCSAgICAoQyMjbiAmJiBtZW1jbXAob3V0LEMjI24sc2l6ZW9mKG91dCkpKSkJCVwKKwkJcmV0KyssIHByaW50ZiAoImVuY3J5cHQgdGVzdCMlZCBmYWlsZWQuXG4iLG4pOwlcCisJQ1JZUFRPX2djbTEyOF9zZXRpdigmY3R4LElWIyNuLHNpemVvZihJViMjbikpOwkJXAorCW1lbXNldChvdXQsMCxzaXplb2Yob3V0KSk7CQkJCVwKKwlpZiAoQSMjbikgQ1JZUFRPX2djbTEyOF9hYWQoJmN0eCxBIyNuLHNpemVvZihBIyNuKSk7CVwKKwlpZiAoQyMjbikgQ1JZUFRPX2djbTEyOF9kZWNyeXB0KCZjdHgsQyMjbixvdXQsc2l6ZW9mKG91dCkpOwlcCisJaWYgKENSWVBUT19nY20xMjhfZmluaXNoKCZjdHgsVCMjbiwxNikgfHwJCVwKKwkgICAgKFAjI24gJiYgbWVtY21wKG91dCxQIyNuLHNpemVvZihvdXQpKSkpCQlcCisJCXJldCsrLCBwcmludGYgKCJkZWNyeXB0IHRlc3QjJWQgZmFpbGVkLlxuIixuKTsJXAorCX0gd2hpbGUoMCkKKworaW50IG1haW4oKQoreworCUdDTTEyOF9DT05URVhUIGN0eDsKKwlBRVNfS0VZIGtleTsKKwlpbnQgcmV0PTA7CisKKwlURVNUX0NBU0UoMSk7CisJVEVTVF9DQVNFKDIpOworCVRFU1RfQ0FTRSgzKTsKKwlURVNUX0NBU0UoNCk7CisJVEVTVF9DQVNFKDUpOworCVRFU1RfQ0FTRSg2KTsKKwlURVNUX0NBU0UoNyk7CisJVEVTVF9DQVNFKDgpOworCVRFU1RfQ0FTRSg5KTsKKwlURVNUX0NBU0UoMTApOworCVRFU1RfQ0FTRSgxMSk7CisJVEVTVF9DQVNFKDEyKTsKKwlURVNUX0NBU0UoMTMpOworCVRFU1RfQ0FTRSgxNCk7CisJVEVTVF9DQVNFKDE1KTsKKwlURVNUX0NBU0UoMTYpOworCVRFU1RfQ0FTRSgxNyk7CisJVEVTVF9DQVNFKDE4KTsKKworI2lmZGVmIE9QRU5TU0xfQ1BVSURfT0JKCisJeworCXNpemVfdCBzdGFydCxzdG9wLGdjbV90LGN0cl90LE9QRU5TU0xfcmR0c2MoKTsKKwl1bmlvbiB7IHU2NCB1OyB1OCBjWzEwMjRdOyB9IGJ1ZjsKKwlpbnQgaTsKKworCUFFU19zZXRfZW5jcnlwdF9rZXkoSzEsc2l6ZW9mKEsxKSo4LCZrZXkpOworCUNSWVBUT19nY20xMjhfaW5pdCgmY3R4LCZrZXksKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworCUNSWVBUT19nY20xMjhfc2V0aXYoJmN0eCxJVjEsc2l6ZW9mKElWMSkpOworCisJQ1JZUFRPX2djbTEyOF9lbmNyeXB0KCZjdHgsYnVmLmMsYnVmLmMsc2l6ZW9mKGJ1ZikpOworCXN0YXJ0ID0gT1BFTlNTTF9yZHRzYygpOworCUNSWVBUT19nY20xMjhfZW5jcnlwdCgmY3R4LGJ1Zi5jLGJ1Zi5jLHNpemVvZihidWYpKTsKKwlnY21fdCA9IE9QRU5TU0xfcmR0c2MoKSAtIHN0YXJ0OworCisJQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGJ1Zi5jLGJ1Zi5jLHNpemVvZihidWYpLAorCQkJJmtleSxjdHguWWkuYyxjdHguRUtpLmMsJmN0eC5tcmVzLAorCQkJKGJsb2NrMTI4X2YpQUVTX2VuY3J5cHQpOworCXN0YXJ0ID0gT1BFTlNTTF9yZHRzYygpOworCUNSWVBUT19jdHIxMjhfZW5jcnlwdChidWYuYyxidWYuYyxzaXplb2YoYnVmKSwKKwkJCSZrZXksY3R4LllpLmMsY3R4LkVLaS5jLCZjdHgubXJlcywKKwkJCShibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKwljdHJfdCA9IE9QRU5TU0xfcmR0c2MoKSAtIHN0YXJ0OworCisJcHJpbnRmKCIlLjJmLSUuMmY9JS4yZlxuIiwKKwkJCWdjbV90Lyhkb3VibGUpc2l6ZW9mKGJ1ZiksCisJCQljdHJfdC8oZG91YmxlKXNpemVvZihidWYpLAorCQkJKGdjbV90LWN0cl90KS8oZG91YmxlKXNpemVvZihidWYpKTsKKyNpZmRlZiBHSEFTSAorCUdIQVNIKCZjdHgsYnVmLmMsc2l6ZW9mKGJ1ZikpOworCXN0YXJ0ID0gT1BFTlNTTF9yZHRzYygpOworCWZvciAoaT0wO2k8MTAwOysraSkgR0hBU0goJmN0eCxidWYuYyxzaXplb2YoYnVmKSk7CisJZ2NtX3QgPSBPUEVOU1NMX3JkdHNjKCkgLSBzdGFydDsKKwlwcmludGYoIiUuMmZcbiIsZ2NtX3QvKGRvdWJsZSlzaXplb2YoYnVmKS8oZG91YmxlKWkpOworI2VuZGlmCisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vbW9kZXMvbW9kZXNfbGNsLmggYi9jcnlwdG8vbW9kZXMvbW9kZXNfbGNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4MmE5OAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9tb2Rlcy9tb2Rlc19sY2wuaApAQCAtMCwwICsxLDEzMSBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlzIGdvdmVybmVkIGJ5IE9wZW5TU0wgbGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPG9wZW5zc2wvbW9kZXMuaD4KKworCisjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQordHlwZWRlZiBfX2ludDY0IGk2NDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1NjQ7CisjZGVmaW5lIFU2NChDKSBDIyNVSTY0CisjZWxpZiBkZWZpbmVkKF9fYXJjaDY0X18pCit0eXBlZGVmIGxvbmcgaTY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHU2NDsKKyNkZWZpbmUgVTY0KEMpIEMjI1VMCisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgaTY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OworI2RlZmluZSBVNjQoQykgQyMjVUxMCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQgMQorI2lmIGRlZmluZWQoX19pMzg2KQl8fCBkZWZpbmVkKF9faTM4Nl9fKQl8fCBcCisgICAgZGVmaW5lZChfX3g4Nl82NCkJfHwgZGVmaW5lZChfX3g4Nl82NF9fKQl8fCBcCisgICAgZGVmaW5lZChfTV9JWDg2KQl8fCBkZWZpbmVkKF9NX0FNRDY0KQl8fCBkZWZpbmVkKF9NX1g2NCkgfHwgXAorICAgIGRlZmluZWQoX19zMzkwX18pCXx8IGRlZmluZWQoX19zMzkweF9fKQl8fCBcCisgICAgKCAoZGVmaW5lZChfX2FybV9fKQl8fCBkZWZpbmVkKF9fYXJtKSkgJiYgXAorICAgICAgKGRlZmluZWQoX19BUk1fQVJDSF83X18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF83QV9fKSB8fCBcCisgICAgICAgZGVmaW5lZChfX0FSTV9BUkNIXzdSX18pCXx8IGRlZmluZWQoX19BUk1fQVJDSF83TV9fKSkgKQorIyB1bmRlZiBTVFJJQ1RfQUxJR05NRU5UCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBFREFOVElDKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQorI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yCisjIGlmIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyMgIGRlZmluZSBCU1dBUDgoeCkgKHsJdTY0IHJldD0oeCk7CQkJXAorCQkJYXNtICgiYnN3YXBxICUwIgkJXAorCQkJOiAiK3IiKHJldCkpOwlyZXQ7CQl9KQorIyAgZGVmaW5lIEJTV0FQNCh4KSAoewl1MzIgcmV0PSh4KTsJCQlcCisJCQlhc20gKCJic3dhcGwgJTAiCQlcCisJCQk6ICIrciIocmV0KSk7CXJldDsJCX0pCisjIGVsaWYgKGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSkKKyMgIGRlZmluZSBCU1dBUDgoeCkgKHsJdTMyIGxvPSh1NjQpKHgpPj4zMixoaT0oeCk7CVwKKwkJCWFzbSAoImJzd2FwbCAlMDsgYnN3YXBsICUxIglcCisJCQk6ICIrciIoaGkpLCIrciIobG8pKTsJCVwKKwkJCSh1NjQpaGk8PDMyfGxvOwkJCX0pCisjICBkZWZpbmUgQlNXQVA0KHgpICh7CXUzMiByZXQ9KHgpOwkJCVwKKwkJCWFzbSAoImJzd2FwbCAlMCIJCVwKKwkJCTogIityIihyZXQpKTsJcmV0OwkJfSkKKyMgZWxpZiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkgJiYgIWRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKyMgIGRlZmluZSBCU1dBUDgoeCkgKHsJdTMyIGxvPSh1NjQpKHgpPj4zMixoaT0oeCk7CVwKKwkJCWFzbSAoInJldiAlMCwlMDsgcmV2ICUxLCUxIglcCisJCQk6ICIrciIoaGkpLCIrciIobG8pKTsJCVwKKwkJCSh1NjQpaGk8PDMyfGxvOwkJCX0pCisjICBkZWZpbmUgQlNXQVA0KHgpICh7CXUzMiByZXQ7CQkJXAorCQkJYXNtICgicmV2ICUwLCUxIgkJXAorCQkJOiAiPXIiKHJldCkgOiAiciIoKHUzMikoeCkpKTsJXAorCQkJcmV0OwkJCQl9KQorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgaWYgX01TQ19WRVI+PTEzMDAKKyMgIHByYWdtYSBpbnRyaW5zaWMoX2J5dGVzd2FwX3VpbnQ2NCxfYnl0ZXN3YXBfdWxvbmcpCisjICBkZWZpbmUgQlNXQVA4KHgpCV9ieXRlc3dhcF91aW50NjQoKHU2NCkoeCkpCisjICBkZWZpbmUgQlNXQVA0KHgpCV9ieXRlc3dhcF91bG9uZygodTMyKSh4KSkKKyMgZWxpZiBkZWZpbmVkKF9NX0lYODYpCisgICBfX2lubGluZSB1MzIgX2Jzd2FwNCh1MzIgdmFsKSB7CisJX2FzbSBtb3YgZWF4LHZhbAorCV9hc20gYnN3YXAgZWF4CisgICB9CisjICBkZWZpbmUgQlNXQVA0KHgpCV9ic3dhcDQoeCkKKyMgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJTV0FQNCkgJiYgIWRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKyNkZWZpbmUgR0VUVTMyKHApCUJTV0FQNCgqKGNvbnN0IHUzMiAqKShwKSkKKyNkZWZpbmUgUFVUVTMyKHAsdikJKih1MzIgKikocCkgPSBCU1dBUDQodikKKyNlbHNlCisjZGVmaW5lIEdFVFUzMihwKQkoKHUzMikocClbMF08PDI0fCh1MzIpKHApWzFdPDwxNnwodTMyKShwKVsyXTw8OHwodTMyKShwKVszXSkKKyNkZWZpbmUgUFVUVTMyKHAsdikJKChwKVswXT0odTgpKCh2KT4+MjQpLChwKVsxXT0odTgpKCh2KT4+MTYpLChwKVsyXT0odTgpKCh2KT4+OCksKHApWzNdPSh1OCkodikpCisjZW5kaWYKKworLyogR0NNIGRlZmluaXRpb25zICovCisKK3R5cGVkZWYgc3RydWN0IHsgdTY0IGhpLGxvOyB9IHUxMjg7CisKKyNpZmRlZglUQUJMRV9CSVRTCisjdW5kZWYJVEFCTEVfQklUUworI2VuZGlmCisvKgorICogRXZlbiB0aG91Z2ggcGVybWl0dGVkIHZhbHVlcyBmb3IgVEFCTEVfQklUUyBhcmUgOCwgNCBhbmQgMSwgaXQgc2hvdWxkCisgKiBuZXZlciBiZSBzZXQgdG8gOCBbb3IgMV0uIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIHNlZSBnY20xMjguYy4KKyAqLworI2RlZmluZQlUQUJMRV9CSVRTIDQKKworc3RydWN0IGdjbTEyOF9jb250ZXh0IHsKKwkvKiBGb2xsb3dpbmcgNiBuYW1lcyBmb2xsb3cgbmFtZXMgaW4gR0NNIHNwZWNpZmljYXRpb24gKi8KKwl1bmlvbiB7IHU2NCB1WzJdOyB1MzIgZFs0XTsgdTggY1sxNl07IH0JWWksRUtpLEVLMCxsZW4sCisJCQkJCQlYaSxIOworCS8qIFJlbGF0aXZlIHBvc2l0aW9uIG9mIFhpLCBIIGFuZCBwcmUtY29tcHV0ZWQgSHRhYmxlIGlzIHVzZWQKKwkgKiBpbiBzb21lIGFzc2VtYmxlciBtb2R1bGVzLCBpLmUuIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIhICovCisjaWYgVEFCTEVfQklUUz09OAorCXUxMjggSHRhYmxlWzI1Nl07CisjZWxzZQorCXUxMjggSHRhYmxlWzE2XTsKKwl2b2lkICgqZ211bHQpKHU2NCBYaVsyXSxjb25zdCB1MTI4IEh0YWJsZVsxNl0pOworCXZvaWQgKCpnaGFzaCkodTY0IFhpWzJdLGNvbnN0IHUxMjggSHRhYmxlWzE2XSxjb25zdCB1OCAqaW5wLHNpemVfdCBsZW4pOworI2VuZGlmCisJdW5zaWduZWQgaW50IG1yZXMsIGFyZXM7CisJYmxvY2sxMjhfZiBibG9jazsKKwl2b2lkICprZXk7Cit9OworCitzdHJ1Y3QgeHRzMTI4X2NvbnRleHQgeworCXZvaWQgICAgICAqa2V5MSwgKmtleTI7CisJYmxvY2sxMjhfZiBibG9jazEsYmxvY2syOworfTsKKworc3RydWN0IGNjbTEyOF9jb250ZXh0IHsKKwl1bmlvbiB7IHU2NCB1WzJdOyB1OCBjWzE2XTsgfSBub25jZSwgY21hYzsKKwl1NjQgYmxvY2tzOworCWJsb2NrMTI4X2YgYmxvY2s7CisJdm9pZCAqa2V5OworfTsKKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL29mYjEyOC5jIGIvY3J5cHRvL21vZGVzL29mYjEyOC5jCmluZGV4IGM3MzJlMmUuLjAxYzAxNzAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9tb2Rlcy9vZmIxMjguYworKysgYi9jcnlwdG8vbW9kZXMvb2ZiMTI4LmMKQEAgLTQ4LDcgKzQ4LDggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgIm1vZGVzLmgiCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNsdWRlICJtb2Rlc19sY2wuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2lmbmRlZiBNT0RFU19ERUJVRwpAQCAtNTgsMTQgKzU5LDYgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jZGVmaW5lIFNUUklDVF9BTElHTk1FTlQKLSNpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgXAotICAgIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAotICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKLSAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKLSMgIHVuZGVmIFNUUklDVF9BTElHTk1FTlQKLSNlbmRpZgotCiAvKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBvZmIgbW9kZSBpcyBiZWluZwogICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCiAgKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21vZGVzL3h0czEyOC5jIGIvY3J5cHRvL21vZGVzL3h0czEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjI3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vbW9kZXMveHRzMTI4LmMKQEAgLTAsMCArMSwxODcgQEAKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSAibW9kZXNfbGNsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgTU9ERVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK2ludCBDUllQVE9feHRzMTI4X2VuY3J5cHQoY29uc3QgWFRTMTI4X0NPTlRFWFQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciBpdlsxNl0sCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbiwgaW50IGVuYykKK3sKKwljb25zdCB1bmlvbiB7IGxvbmcgb25lOyBjaGFyIGxpdHRsZTsgfSBpc19lbmRpYW4gPSB7MX07CisJdW5pb24geyB1NjQgdVsyXTsgdTMyIGRbNF07IHU4IGNbMTZdOyB9IHR3ZWFrLCBzY3JhdGNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGxlbjwxNikgcmV0dXJuIC0xOworCisJbWVtY3B5KHR3ZWFrLmMsIGl2LCAxNik7CisKKwkoKmN0eC0+YmxvY2syKSh0d2Vhay5jLHR3ZWFrLmMsY3R4LT5rZXkyKTsKKworCWlmICghZW5jICYmIChsZW4lMTYpKSBsZW4tPTE2OworCisJd2hpbGUgKGxlbj49MTYpIHsKKyNpZiBkZWZpbmVkKFNUUklDVF9BTElHTk1FTlQpCisJCW1lbWNweShzY3JhdGNoLmMsaW5wLDE2KTsKKwkJc2NyYXRjaC51WzBdIF49IHR3ZWFrLnVbMF07CisJCXNjcmF0Y2gudVsxXSBePSB0d2Vhay51WzFdOworI2Vsc2UKKwkJc2NyYXRjaC51WzBdID0gKCh1NjQqKWlucClbMF1edHdlYWsudVswXTsKKwkJc2NyYXRjaC51WzFdID0gKCh1NjQqKWlucClbMV1edHdlYWsudVsxXTsKKyNlbmRpZgorCQkoKmN0eC0+YmxvY2sxKShzY3JhdGNoLmMsc2NyYXRjaC5jLGN0eC0+a2V5MSk7CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlzY3JhdGNoLnVbMF0gXj0gdHdlYWsudVswXTsKKwkJc2NyYXRjaC51WzFdIF49IHR3ZWFrLnVbMV07CisJCW1lbWNweShvdXQsc2NyYXRjaC5jLDE2KTsKKyNlbHNlCisJCSgodTY0KilvdXQpWzBdID0gc2NyYXRjaC51WzBdXj10d2Vhay51WzBdOworCQkoKHU2NCopb3V0KVsxXSA9IHNjcmF0Y2gudVsxXV49dHdlYWsudVsxXTsKKyNlbmRpZgorCQlpbnAgKz0gMTY7CisJCW91dCArPSAxNjsKKwkJbGVuIC09IDE2OworCisJCWlmIChsZW49PTApCXJldHVybiAwOworCisJCWlmIChpc19lbmRpYW4ubGl0dGxlKSB7CisJCQl1bnNpZ25lZCBpbnQgY2FycnkscmVzOworCQkJCisJCQlyZXMgPSAweDg3JigoKGludCl0d2Vhay5kWzNdKT4+MzEpOworCQkJY2FycnkgPSAodW5zaWduZWQgaW50KSh0d2Vhay51WzBdPj42Myk7CisJCQl0d2Vhay51WzBdID0gKHR3ZWFrLnVbMF08PDEpXnJlczsKKwkJCXR3ZWFrLnVbMV0gPSAodHdlYWsudVsxXTw8MSl8Y2Fycnk7CisJCX0KKwkJZWxzZSB7CisJCQlzaXplX3QgYzsKKworCQkJZm9yIChjPTAsaT0wO2k8MTY7KytpKSB7CisJCQkJLyorIHN1YnN0aXR1dGVzIGZvciB8LCBiZWNhdXNlIGMgaXMgMSBiaXQgKi8gCisJCQkJYyArPSAoKHNpemVfdCl0d2Vhay5jW2ldKTw8MTsKKwkJCQl0d2Vhay5jW2ldID0gKHU4KWM7CisJCQkJYyA9IGM+Pjg7CisJCQl9CisJCQl0d2Vhay5jWzBdIF49ICh1OCkoMHg4NyYoMC1jKSk7CisJCX0KKwl9CisJaWYgKGVuYykgeworCQlmb3IgKGk9MDtpPGxlbjsrK2kpIHsKKwkJCXU4IGMgPSBpbnBbaV07CisJCQlvdXRbaV0gPSBzY3JhdGNoLmNbaV07CisJCQlzY3JhdGNoLmNbaV0gPSBjOworCQl9CisJCXNjcmF0Y2gudVswXSBePSB0d2Vhay51WzBdOworCQlzY3JhdGNoLnVbMV0gXj0gdHdlYWsudVsxXTsKKwkJKCpjdHgtPmJsb2NrMSkoc2NyYXRjaC5jLHNjcmF0Y2guYyxjdHgtPmtleTEpOworCQlzY3JhdGNoLnVbMF0gXj0gdHdlYWsudVswXTsKKwkJc2NyYXRjaC51WzFdIF49IHR3ZWFrLnVbMV07CisJCW1lbWNweShvdXQtMTYsc2NyYXRjaC5jLDE2KTsKKwl9CisJZWxzZSB7CisJCXVuaW9uIHsgdTY0IHVbMl07IHU4IGNbMTZdOyB9IHR3ZWFrMTsKKworCQlpZiAoaXNfZW5kaWFuLmxpdHRsZSkgeworCQkJdW5zaWduZWQgaW50IGNhcnJ5LHJlczsKKworCQkJcmVzID0gMHg4NyYoKChpbnQpdHdlYWsuZFszXSk+PjMxKTsKKwkJCWNhcnJ5ID0gKHVuc2lnbmVkIGludCkodHdlYWsudVswXT4+NjMpOworCQkJdHdlYWsxLnVbMF0gPSAodHdlYWsudVswXTw8MSlecmVzOworCQkJdHdlYWsxLnVbMV0gPSAodHdlYWsudVsxXTw8MSl8Y2Fycnk7CisJCX0KKwkJZWxzZSB7CisJCQlzaXplX3QgYzsKKworCQkJZm9yIChjPTAsaT0wO2k8MTY7KytpKSB7CisJCQkJLyorIHN1YnN0aXR1dGVzIGZvciB8LCBiZWNhdXNlIGMgaXMgMSBiaXQgKi8gCisJCQkJYyArPSAoKHNpemVfdCl0d2Vhay5jW2ldKTw8MTsKKwkJCQl0d2VhazEuY1tpXSA9ICh1OCljOworCQkJCWMgPSBjPj44OworCQkJfQorCQkJdHdlYWsxLmNbMF0gXj0gKHU4KSgweDg3JigwLWMpKTsKKwkJfQorI2lmIGRlZmluZWQoU1RSSUNUX0FMSUdOTUVOVCkKKwkJbWVtY3B5KHNjcmF0Y2guYyxpbnAsMTYpOworCQlzY3JhdGNoLnVbMF0gXj0gdHdlYWsxLnVbMF07CisJCXNjcmF0Y2gudVsxXSBePSB0d2VhazEudVsxXTsKKyNlbHNlCisJCXNjcmF0Y2gudVswXSA9ICgodTY0KilpbnApWzBdXnR3ZWFrMS51WzBdOworCQlzY3JhdGNoLnVbMV0gPSAoKHU2NCopaW5wKVsxXV50d2VhazEudVsxXTsKKyNlbmRpZgorCQkoKmN0eC0+YmxvY2sxKShzY3JhdGNoLmMsc2NyYXRjaC5jLGN0eC0+a2V5MSk7CisJCXNjcmF0Y2gudVswXSBePSB0d2VhazEudVswXTsKKwkJc2NyYXRjaC51WzFdIF49IHR3ZWFrMS51WzFdOworCisJCWZvciAoaT0wO2k8bGVuOysraSkgeworCQkJdTggYyA9IGlucFsxNitpXTsKKwkJCW91dFsxNitpXSA9IHNjcmF0Y2guY1tpXTsKKwkJCXNjcmF0Y2guY1tpXSA9IGM7CisJCX0KKwkJc2NyYXRjaC51WzBdIF49IHR3ZWFrLnVbMF07CisJCXNjcmF0Y2gudVsxXSBePSB0d2Vhay51WzFdOworCQkoKmN0eC0+YmxvY2sxKShzY3JhdGNoLmMsc2NyYXRjaC5jLGN0eC0+a2V5MSk7CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlzY3JhdGNoLnVbMF0gXj0gdHdlYWsudVswXTsKKwkJc2NyYXRjaC51WzFdIF49IHR3ZWFrLnVbMV07CisJCW1lbWNweSAob3V0LHNjcmF0Y2guYywxNik7CisjZWxzZQorCQkoKHU2NCopb3V0KVswXSA9IHNjcmF0Y2gudVswXV50d2Vhay51WzBdOworCQkoKHU2NCopb3V0KVsxXSA9IHNjcmF0Y2gudVsxXV50d2Vhay51WzFdOworI2VuZGlmCisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jcnlwdG8vb19pbml0LmMgYi9jcnlwdG8vb19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0Y2RjNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9vX2luaXQuYwpAQCAtMCwwICsxLDgyIEBACisvKiBvX2luaXQuYyAqLworLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisgKiBwcm9qZWN0LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSA8ZV9vcy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisjZW5kaWYKKworLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKyAqLworCit2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorCXsKKwlzdGF0aWMgaW50IGRvbmUgPSAwOworCWlmIChkb25lKQorCQlyZXR1cm47CisJZG9uZSA9IDE7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xvY2ssIENSWVBUT19hZGRfbG9jayk7CisJRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOworCUZJUFNfc2V0X21hbGxvY19jYWxsYmFja3MoQ1JZUFRPX21hbGxvYywgQ1JZUFRPX2ZyZWUpOworCVJBTkRfaW5pdF9maXBzKCk7CisjZW5kaWYKKyNpZiAwCisJZnByaW50ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNTTF9pbml0XG4iKTsKKyNlbmRpZgorCX0KKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5oIGIvY3J5cHRvL29iamVjdHMvb2JqX2RhdC5oCmluZGV4IDY0NDliZTYuLmQ0MDRhZDAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vYmplY3RzL29ial9kYXQuaAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfZGF0LmgKQEAgLTYyLDEyICs2MiwxMiBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogCi0jZGVmaW5lIE5VTV9OSUQgODkzCi0jZGVmaW5lIE5VTV9TTiA4ODYKLSNkZWZpbmUgTlVNX0xOIDg4NgotI2RlZmluZSBOVU1fT0JKIDg0MAorI2RlZmluZSBOVU1fTklEIDkyMAorI2RlZmluZSBOVU1fU04gOTEzCisjZGVmaW5lIE5VTV9MTiA5MTMKKyNkZWZpbmUgTlVNX09CSiA4NTcKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbHZhbHVlc1s1ODI0XT17CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsdmFsdWVzWzU5ODBdPXsKIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFsgIDBdIE9CSl91bmRlZiAqLwogMHgyQSwweDg2LDB4NDgsMHg4NiwweEY3LDB4MEQsICAgICAgICAgICAgICAgLyogWyAgMV0gT0JKX3JzYWRzaSAqLwogMHgyQSwweDg2LDB4NDgsMHg4NiwweEY3LDB4MEQsMHgwMSwgICAgICAgICAgLyogWyAgN10gT0JKX3BrY3MgKi8KQEAgLTkwOCw2ICs5MDgsMjMgQEAKIDB4NTUsMHgwNCwweDM0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFs1ODE0XSBPQkpfc3VwcG9ydGVkQWxnb3JpdGhtcyAqLwogMHg1NSwweDA0LDB4MzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWzU4MTddIE9CSl9kZWx0YVJldm9jYXRpb25MaXN0ICovCiAweDU1LDB4MDQsMHgzNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBbNTgyMF0gT0JKX2RtZE5hbWUgKi8KKzB4MkEsMHg4NiwweDQ4LDB4ODYsMHhGNywweDBELDB4MDEsMHgwOSwweDEwLDB4MDMsMHgwOSwvKiBbNTgyM10gT0JKX2lkX2FsZ19QV1JJX0tFSyAqLworMHg2MCwweDg2LDB4NDgsMHgwMSwweDY1LDB4MDMsMHgwNCwweDAxLDB4MDYsLyogWzU4MzRdIE9CSl9hZXNfMTI4X2djbSAqLworMHg2MCwweDg2LDB4NDgsMHgwMSwweDY1LDB4MDMsMHgwNCwweDAxLDB4MDcsLyogWzU4NDNdIE9CSl9hZXNfMTI4X2NjbSAqLworMHg2MCwweDg2LDB4NDgsMHgwMSwweDY1LDB4MDMsMHgwNCwweDAxLDB4MDgsLyogWzU4NTJdIE9CSl9pZF9hZXMxMjhfd3JhcF9wYWQgKi8KKzB4NjAsMHg4NiwweDQ4LDB4MDEsMHg2NSwweDAzLDB4MDQsMHgwMSwweDFBLC8qIFs1ODYxXSBPQkpfYWVzXzE5Ml9nY20gKi8KKzB4NjAsMHg4NiwweDQ4LDB4MDEsMHg2NSwweDAzLDB4MDQsMHgwMSwweDFCLC8qIFs1ODcwXSBPQkpfYWVzXzE5Ml9jY20gKi8KKzB4NjAsMHg4NiwweDQ4LDB4MDEsMHg2NSwweDAzLDB4MDQsMHgwMSwweDFDLC8qIFs1ODc5XSBPQkpfaWRfYWVzMTkyX3dyYXBfcGFkICovCisweDYwLDB4ODYsMHg0OCwweDAxLDB4NjUsMHgwMywweDA0LDB4MDEsMHgyRSwvKiBbNTg4OF0gT0JKX2Flc18yNTZfZ2NtICovCisweDYwLDB4ODYsMHg0OCwweDAxLDB4NjUsMHgwMywweDA0LDB4MDEsMHgyRiwvKiBbNTg5N10gT0JKX2Flc18yNTZfY2NtICovCisweDYwLDB4ODYsMHg0OCwweDAxLDB4NjUsMHgwMywweDA0LDB4MDEsMHgzMCwvKiBbNTkwNl0gT0JKX2lkX2FlczI1Nl93cmFwX3BhZCAqLworMHgyQSwweDgzLDB4MDgsMHg4QywweDlBLDB4NEIsMHgzRCwweDAxLDB4MDEsMHgwMywweDAyLC8qIFs1OTE1XSBPQkpfaWRfY2FtZWxsaWExMjhfd3JhcCAqLworMHgyQSwweDgzLDB4MDgsMHg4QywweDlBLDB4NEIsMHgzRCwweDAxLDB4MDEsMHgwMywweDAzLC8qIFs1OTI2XSBPQkpfaWRfY2FtZWxsaWExOTJfd3JhcCAqLworMHgyQSwweDgzLDB4MDgsMHg4QywweDlBLDB4NEIsMHgzRCwweDAxLDB4MDEsMHgwMywweDA0LC8qIFs1OTM3XSBPQkpfaWRfY2FtZWxsaWEyNTZfd3JhcCAqLworMHg1NSwweDFELDB4MjUsMHgwMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogWzU5NDhdIE9CSl9hbnlFeHRlbmRlZEtleVVzYWdlICovCisweDJBLDB4ODYsMHg0OCwweDg2LDB4RjcsMHgwRCwweDAxLDB4MDEsMHgwOCwvKiBbNTk1Ml0gT0JKX21nZjEgKi8KKzB4MkEsMHg4NiwweDQ4LDB4ODYsMHhGNywweDBELDB4MDEsMHgwMSwweDBBLC8qIFs1OTYxXSBPQkpfcnNhc3NhUHNzICovCisweDJBLDB4ODYsMHg0OCwweDg2LDB4RjcsMHgwRCwweDAxLDB4MDEsMHgwNywvKiBbNTk3MF0gT0JKX3JzYWVzT2FlcCAqLwogfTsKIAogc3RhdGljIGNvbnN0IEFTTjFfT0JKRUNUIG5pZF9vYmpzW05VTV9OSURdPXsKQEAgLTIzNTEsMjggKzIzNjgsNzQgQEAKIHsiZGVsdGFSZXZvY2F0aW9uTGlzdCIsImRlbHRhUmV2b2NhdGlvbkxpc3QiLE5JRF9kZWx0YVJldm9jYXRpb25MaXN0LAogCTMsJihsdmFsdWVzWzU4MTddKSwwfSwKIHsiZG1kTmFtZSIsImRtZE5hbWUiLE5JRF9kbWROYW1lLDMsJihsdmFsdWVzWzU4MjBdKSwwfSwKK3siaWQtYWxnLVBXUkktS0VLIiwiaWQtYWxnLVBXUkktS0VLIixOSURfaWRfYWxnX1BXUklfS0VLLDExLAorCSYobHZhbHVlc1s1ODIzXSksMH0sCit7IkNNQUMiLCJjbWFjIixOSURfY21hYywwLE5VTEwsMH0sCit7ImlkLWFlczEyOC1HQ00iLCJhZXMtMTI4LWdjbSIsTklEX2Flc18xMjhfZ2NtLDksJihsdmFsdWVzWzU4MzRdKSwwfSwKK3siaWQtYWVzMTI4LUNDTSIsImFlcy0xMjgtY2NtIixOSURfYWVzXzEyOF9jY20sOSwmKGx2YWx1ZXNbNTg0M10pLDB9LAoreyJpZC1hZXMxMjgtd3JhcC1wYWQiLCJpZC1hZXMxMjgtd3JhcC1wYWQiLE5JRF9pZF9hZXMxMjhfd3JhcF9wYWQsOSwKKwkmKGx2YWx1ZXNbNTg1Ml0pLDB9LAoreyJpZC1hZXMxOTItR0NNIiwiYWVzLTE5Mi1nY20iLE5JRF9hZXNfMTkyX2djbSw5LCYobHZhbHVlc1s1ODYxXSksMH0sCit7ImlkLWFlczE5Mi1DQ00iLCJhZXMtMTkyLWNjbSIsTklEX2Flc18xOTJfY2NtLDksJihsdmFsdWVzWzU4NzBdKSwwfSwKK3siaWQtYWVzMTkyLXdyYXAtcGFkIiwiaWQtYWVzMTkyLXdyYXAtcGFkIixOSURfaWRfYWVzMTkyX3dyYXBfcGFkLDksCisJJihsdmFsdWVzWzU4NzldKSwwfSwKK3siaWQtYWVzMjU2LUdDTSIsImFlcy0yNTYtZ2NtIixOSURfYWVzXzI1Nl9nY20sOSwmKGx2YWx1ZXNbNTg4OF0pLDB9LAoreyJpZC1hZXMyNTYtQ0NNIiwiYWVzLTI1Ni1jY20iLE5JRF9hZXNfMjU2X2NjbSw5LCYobHZhbHVlc1s1ODk3XSksMH0sCit7ImlkLWFlczI1Ni13cmFwLXBhZCIsImlkLWFlczI1Ni13cmFwLXBhZCIsTklEX2lkX2FlczI1Nl93cmFwX3BhZCw5LAorCSYobHZhbHVlc1s1OTA2XSksMH0sCit7IkFFUy0xMjgtQ1RSIiwiYWVzLTEyOC1jdHIiLE5JRF9hZXNfMTI4X2N0ciwwLE5VTEwsMH0sCit7IkFFUy0xOTItQ1RSIiwiYWVzLTE5Mi1jdHIiLE5JRF9hZXNfMTkyX2N0ciwwLE5VTEwsMH0sCit7IkFFUy0yNTYtQ1RSIiwiYWVzLTI1Ni1jdHIiLE5JRF9hZXNfMjU2X2N0ciwwLE5VTEwsMH0sCit7ImlkLWNhbWVsbGlhMTI4LXdyYXAiLCJpZC1jYW1lbGxpYTEyOC13cmFwIixOSURfaWRfY2FtZWxsaWExMjhfd3JhcCwKKwkxMSwmKGx2YWx1ZXNbNTkxNV0pLDB9LAoreyJpZC1jYW1lbGxpYTE5Mi13cmFwIiwiaWQtY2FtZWxsaWExOTItd3JhcCIsTklEX2lkX2NhbWVsbGlhMTkyX3dyYXAsCisJMTEsJihsdmFsdWVzWzU5MjZdKSwwfSwKK3siaWQtY2FtZWxsaWEyNTYtd3JhcCIsImlkLWNhbWVsbGlhMjU2LXdyYXAiLE5JRF9pZF9jYW1lbGxpYTI1Nl93cmFwLAorCTExLCYobHZhbHVlc1s1OTM3XSksMH0sCit7ImFueUV4dGVuZGVkS2V5VXNhZ2UiLCJBbnkgRXh0ZW5kZWQgS2V5IFVzYWdlIiwKKwlOSURfYW55RXh0ZW5kZWRLZXlVc2FnZSw0LCYobHZhbHVlc1s1OTQ4XSksMH0sCit7Ik1HRjEiLCJtZ2YxIixOSURfbWdmMSw5LCYobHZhbHVlc1s1OTUyXSksMH0sCit7IlJTQVNTQS1QU1MiLCJyc2Fzc2FQc3MiLE5JRF9yc2Fzc2FQc3MsOSwmKGx2YWx1ZXNbNTk2MV0pLDB9LAoreyJBRVMtMTI4LVhUUyIsImFlcy0xMjgteHRzIixOSURfYWVzXzEyOF94dHMsMCxOVUxMLDB9LAoreyJBRVMtMjU2LVhUUyIsImFlcy0yNTYteHRzIixOSURfYWVzXzI1Nl94dHMsMCxOVUxMLDB9LAoreyJSQzQtSE1BQy1NRDUiLCJyYzQtaG1hYy1tZDUiLE5JRF9yYzRfaG1hY19tZDUsMCxOVUxMLDB9LAoreyJBRVMtMTI4LUNCQy1ITUFDLVNIQTEiLCJhZXMtMTI4LWNiYy1obWFjLXNoYTEiLAorCU5JRF9hZXNfMTI4X2NiY19obWFjX3NoYTEsMCxOVUxMLDB9LAoreyJBRVMtMTkyLUNCQy1ITUFDLVNIQTEiLCJhZXMtMTkyLWNiYy1obWFjLXNoYTEiLAorCU5JRF9hZXNfMTkyX2NiY19obWFjX3NoYTEsMCxOVUxMLDB9LAoreyJBRVMtMjU2LUNCQy1ITUFDLVNIQTEiLCJhZXMtMjU2LWNiYy1obWFjLXNoYTEiLAorCU5JRF9hZXNfMjU2X2NiY19obWFjX3NoYTEsMCxOVUxMLDB9LAoreyJSU0FFUy1PQUVQIiwicnNhZXNPYWVwIixOSURfcnNhZXNPYWVwLDksJihsdmFsdWVzWzU5NzBdKSwwfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc25fb2Jqc1tOVU1fU05dPXsKIDM2NCwJLyogIkFEX0RWQ1MiICovCiA0MTksCS8qICJBRVMtMTI4LUNCQyIgKi8KKzkxNiwJLyogIkFFUy0xMjgtQ0JDLUhNQUMtU0hBMSIgKi8KIDQyMSwJLyogIkFFUy0xMjgtQ0ZCIiAqLwogNjUwLAkvKiAiQUVTLTEyOC1DRkIxIiAqLwogNjUzLAkvKiAiQUVTLTEyOC1DRkI4IiAqLworOTA0LAkvKiAiQUVTLTEyOC1DVFIiICovCiA0MTgsCS8qICJBRVMtMTI4LUVDQiIgKi8KIDQyMCwJLyogIkFFUy0xMjgtT0ZCIiAqLworOTEzLAkvKiAiQUVTLTEyOC1YVFMiICovCiA0MjMsCS8qICJBRVMtMTkyLUNCQyIgKi8KKzkxNywJLyogIkFFUy0xOTItQ0JDLUhNQUMtU0hBMSIgKi8KIDQyNSwJLyogIkFFUy0xOTItQ0ZCIiAqLwogNjUxLAkvKiAiQUVTLTE5Mi1DRkIxIiAqLwogNjU0LAkvKiAiQUVTLTE5Mi1DRkI4IiAqLworOTA1LAkvKiAiQUVTLTE5Mi1DVFIiICovCiA0MjIsCS8qICJBRVMtMTkyLUVDQiIgKi8KIDQyNCwJLyogIkFFUy0xOTItT0ZCIiAqLwogNDI3LAkvKiAiQUVTLTI1Ni1DQkMiICovCis5MTgsCS8qICJBRVMtMjU2LUNCQy1ITUFDLVNIQTEiICovCiA0MjksCS8qICJBRVMtMjU2LUNGQiIgKi8KIDY1MiwJLyogIkFFUy0yNTYtQ0ZCMSIgKi8KIDY1NSwJLyogIkFFUy0yNTYtQ0ZCOCIgKi8KKzkwNiwJLyogIkFFUy0yNTYtQ1RSIiAqLwogNDI2LAkvKiAiQUVTLTI1Ni1FQ0IiICovCiA0MjgsCS8qICJBRVMtMjU2LU9GQiIgKi8KKzkxNCwJLyogIkFFUy0yNTYtWFRTIiAqLwogOTEsCS8qICJCRi1DQkMiICovCiA5MywJLyogIkJGLUNGQiIgKi8KIDkyLAkvKiAiQkYtRUNCIiAqLwpAQCAtMjQwMCw2ICsyNDYzLDcgQEAKIDExMCwJLyogIkNBU1Q1LUNGQiIgKi8KIDEwOSwJLyogIkNBU1Q1LUVDQiIgKi8KIDExMSwJLyogIkNBU1Q1LU9GQiIgKi8KKzg5NCwJLyogIkNNQUMiICovCiAxMywJLyogIkNOIiAqLwogMTQxLAkvKiAiQ1JMUmVhc29uIiAqLwogNDE3LAkvKiAiQ1NQTmFtZSIgKi8KQEAgLTI0NTEsNiArMjUxNSw3IEBACiAgNCwJLyogIk1ENSIgKi8KIDExNCwJLyogIk1ENS1TSEExIiAqLwogOTUsCS8qICJNREMyIiAqLworOTExLAkvKiAiTUdGMSIgKi8KIDM4OCwJLyogIk1haWwiICovCiAzOTMsCS8qICJOVUxMIiAqLwogNDA0LAkvKiAiTlVMTCIgKi8KQEAgLTI0ODcsNiArMjU1Miw3IEBACiA0MCwJLyogIlJDMi1PRkIiICovCiAgNSwJLyogIlJDNCIgKi8KIDk3LAkvKiAiUkM0LTQwIiAqLworOTE1LAkvKiAiUkM0LUhNQUMtTUQ1IiAqLwogMTIwLAkvKiAiUkM1LUNCQyIgKi8KIDEyMiwJLyogIlJDNS1DRkIiICovCiAxMjEsCS8qICJSQzUtRUNCIiAqLwpAQCAtMjUwNyw2ICsyNTczLDggQEAKIDY2OCwJLyogIlJTQS1TSEEyNTYiICovCiA2NjksCS8qICJSU0EtU0hBMzg0IiAqLwogNjcwLAkvKiAiUlNBLVNIQTUxMiIgKi8KKzkxOSwJLyogIlJTQUVTLU9BRVAiICovCis5MTIsCS8qICJSU0FTU0EtUFNTIiAqLwogNzc3LAkvKiAiU0VFRC1DQkMiICovCiA3NzksCS8qICJTRUVELUNGQiIgKi8KIDc3NiwJLyogIlNFRUQtRUNCIiAqLwpAQCAtMjU0MCw2ICsyNjA4LDcgQEAKIDM2MywJLyogImFkX3RpbWVzdGFtcGluZyIgKi8KIDM3NiwJLyogImFsZ29yaXRobSIgKi8KIDQwNSwJLyogImFuc2ktWDktNjIiICovCis5MTAsCS8qICJhbnlFeHRlbmRlZEtleVVzYWdlIiAqLwogNzQ2LAkvKiAiYW55UG9saWN5IiAqLwogMzcwLAkvKiAiYXJjaGl2ZUN1dG9mZiIgKi8KIDQ4NCwJLyogImFzc29jaWF0ZWREb21haW4iICovCkBAIC0yNzE2LDE0ICsyNzg1LDI3IEBACiAzNTcsCS8qICJpZC1hY2EtZ3JvdXAiICovCiAzNTgsCS8qICJpZC1hY2Etcm9sZSIgKi8KIDE3NiwJLyogImlkLWFkIiAqLworODk2LAkvKiAiaWQtYWVzMTI4LUNDTSIgKi8KKzg5NSwJLyogImlkLWFlczEyOC1HQ00iICovCiA3ODgsCS8qICJpZC1hZXMxMjgtd3JhcCIgKi8KKzg5NywJLyogImlkLWFlczEyOC13cmFwLXBhZCIgKi8KKzg5OSwJLyogImlkLWFlczE5Mi1DQ00iICovCis4OTgsCS8qICJpZC1hZXMxOTItR0NNIiAqLwogNzg5LAkvKiAiaWQtYWVzMTkyLXdyYXAiICovCis5MDAsCS8qICJpZC1hZXMxOTItd3JhcC1wYWQiICovCis5MDIsCS8qICJpZC1hZXMyNTYtQ0NNIiAqLworOTAxLAkvKiAiaWQtYWVzMjU2LUdDTSIgKi8KIDc5MCwJLyogImlkLWFlczI1Ni13cmFwIiAqLworOTAzLAkvKiAiaWQtYWVzMjU2LXdyYXAtcGFkIiAqLwogMjYyLAkvKiAiaWQtYWxnIiAqLworODkzLAkvKiAiaWQtYWxnLVBXUkktS0VLIiAqLwogMzIzLAkvKiAiaWQtYWxnLWRlczQwIiAqLwogMzI2LAkvKiAiaWQtYWxnLWRoLXBvcCIgKi8KIDMyNSwJLyogImlkLWFsZy1kaC1zaWctaG1hYy1zaGExIiAqLwogMzI0LAkvKiAiaWQtYWxnLW5vU2lnbmF0dXJlIiAqLworOTA3LAkvKiAiaWQtY2FtZWxsaWExMjgtd3JhcCIgKi8KKzkwOCwJLyogImlkLWNhbWVsbGlhMTkyLXdyYXAiICovCis5MDksCS8qICJpZC1jYW1lbGxpYTI1Ni13cmFwIiAqLwogMjY4LAkvKiAiaWQtY2N0IiAqLwogMzYxLAkvKiAiaWQtY2N0LVBLSURhdGEiICovCiAzNjIsCS8qICJpZC1jY3QtUEtJUmVzcG9uc2UiICovCkBAIC0zMjQ2LDYgKzMzMjgsNyBAQAogMzYzLAkvKiAiQUQgVGltZSBTdGFtcGluZyIgKi8KIDQwNSwJLyogIkFOU0kgWDkuNjIiICovCiAzNjgsCS8qICJBY2NlcHRhYmxlIE9DU1AgUmVzcG9uc2VzIiAqLworOTEwLAkvKiAiQW55IEV4dGVuZGVkIEtleSBVc2FnZSIgKi8KIDY2NCwJLyogIkFueSBsYW5ndWFnZSIgKi8KIDE3NywJLyogIkF1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3MiICovCiAzNjUsCS8qICJCYXNpYyBPQ1NQIFJlc3BvbnNlIiAqLwpAQCAtMzM4NiwyMyArMzQ2OSwzNyBAQAogMzY0LAkvKiAiYWQgZHZjcyIgKi8KIDYwNiwJLyogImFkZGl0aW9uYWwgdmVyaWZpY2F0aW9uIiAqLwogNDE5LAkvKiAiYWVzLTEyOC1jYmMiICovCis5MTYsCS8qICJhZXMtMTI4LWNiYy1obWFjLXNoYTEiICovCis4OTYsCS8qICJhZXMtMTI4LWNjbSIgKi8KIDQyMSwJLyogImFlcy0xMjgtY2ZiIiAqLwogNjUwLAkvKiAiYWVzLTEyOC1jZmIxIiAqLwogNjUzLAkvKiAiYWVzLTEyOC1jZmI4IiAqLworOTA0LAkvKiAiYWVzLTEyOC1jdHIiICovCiA0MTgsCS8qICJhZXMtMTI4LWVjYiIgKi8KKzg5NSwJLyogImFlcy0xMjgtZ2NtIiAqLwogNDIwLAkvKiAiYWVzLTEyOC1vZmIiICovCis5MTMsCS8qICJhZXMtMTI4LXh0cyIgKi8KIDQyMywJLyogImFlcy0xOTItY2JjIiAqLworOTE3LAkvKiAiYWVzLTE5Mi1jYmMtaG1hYy1zaGExIiAqLworODk5LAkvKiAiYWVzLTE5Mi1jY20iICovCiA0MjUsCS8qICJhZXMtMTkyLWNmYiIgKi8KIDY1MSwJLyogImFlcy0xOTItY2ZiMSIgKi8KIDY1NCwJLyogImFlcy0xOTItY2ZiOCIgKi8KKzkwNSwJLyogImFlcy0xOTItY3RyIiAqLwogNDIyLAkvKiAiYWVzLTE5Mi1lY2IiICovCis4OTgsCS8qICJhZXMtMTkyLWdjbSIgKi8KIDQyNCwJLyogImFlcy0xOTItb2ZiIiAqLwogNDI3LAkvKiAiYWVzLTI1Ni1jYmMiICovCis5MTgsCS8qICJhZXMtMjU2LWNiYy1obWFjLXNoYTEiICovCis5MDIsCS8qICJhZXMtMjU2LWNjbSIgKi8KIDQyOSwJLyogImFlcy0yNTYtY2ZiIiAqLwogNjUyLAkvKiAiYWVzLTI1Ni1jZmIxIiAqLwogNjU1LAkvKiAiYWVzLTI1Ni1jZmI4IiAqLworOTA2LAkvKiAiYWVzLTI1Ni1jdHIiICovCiA0MjYsCS8qICJhZXMtMjU2LWVjYiIgKi8KKzkwMSwJLyogImFlcy0yNTYtZ2NtIiAqLwogNDI4LAkvKiAiYWVzLTI1Ni1vZmIiICovCis5MTQsCS8qICJhZXMtMjU2LXh0cyIgKi8KIDM3NiwJLyogImFsZ29yaXRobSIgKi8KIDQ4NCwJLyogImFzc29jaWF0ZWREb21haW4iICovCiA0ODUsCS8qICJhc3NvY2lhdGVkTmFtZSIgKi8KQEAgLTM0NjcsNiArMzU2NCw3IEBACiA0MDcsCS8qICJjaGFyYWN0ZXJpc3RpYy10d28tZmllbGQiICovCiAzOTUsCS8qICJjbGVhcmFuY2UiICovCiA2MzMsCS8qICJjbGVhcnRleHQgdHJhY2sgMiIgKi8KKzg5NCwJLyogImNtYWMiICovCiAxMywJLyogImNvbW1vbk5hbWUiICovCiA1MTMsCS8qICJjb250ZW50IHR5cGVzIiAqLwogNTAsCS8qICJjb250ZW50VHlwZSIgKi8KQEAgLTM2MDIsMTMgKzM3MDAsMjAgQEAKIDM1OCwJLyogImlkLWFjYS1yb2xlIiAqLwogMTc2LAkvKiAiaWQtYWQiICovCiA3ODgsCS8qICJpZC1hZXMxMjgtd3JhcCIgKi8KKzg5NywJLyogImlkLWFlczEyOC13cmFwLXBhZCIgKi8KIDc4OSwJLyogImlkLWFlczE5Mi13cmFwIiAqLworOTAwLAkvKiAiaWQtYWVzMTkyLXdyYXAtcGFkIiAqLwogNzkwLAkvKiAiaWQtYWVzMjU2LXdyYXAiICovCis5MDMsCS8qICJpZC1hZXMyNTYtd3JhcC1wYWQiICovCiAyNjIsCS8qICJpZC1hbGciICovCis4OTMsCS8qICJpZC1hbGctUFdSSS1LRUsiICovCiAzMjMsCS8qICJpZC1hbGctZGVzNDAiICovCiAzMjYsCS8qICJpZC1hbGctZGgtcG9wIiAqLwogMzI1LAkvKiAiaWQtYWxnLWRoLXNpZy1obWFjLXNoYTEiICovCiAzMjQsCS8qICJpZC1hbGctbm9TaWduYXR1cmUiICovCis5MDcsCS8qICJpZC1jYW1lbGxpYTEyOC13cmFwIiAqLworOTA4LAkvKiAiaWQtY2FtZWxsaWExOTItd3JhcCIgKi8KKzkwOSwJLyogImlkLWNhbWVsbGlhMjU2LXdyYXAiICovCiAyNjgsCS8qICJpZC1jY3QiICovCiAzNjEsCS8qICJpZC1jY3QtUEtJRGF0YSIgKi8KIDM2MiwJLyogImlkLWNjdC1QS0lSZXNwb25zZSIgKi8KQEAgLTM4MDYsNiArMzkxMSw3IEBACiA2MDIsCS8qICJtZXJjaGFudCBpbml0aWF0ZWQgYXV0aCIgKi8KIDUxNCwJLyogIm1lc3NhZ2UgZXh0ZW5zaW9ucyIgKi8KIDUxLAkvKiAibWVzc2FnZURpZ2VzdCIgKi8KKzkxMSwJLyogIm1nZjEiICovCiA1MDYsCS8qICJtaW1lLW1ocy1ib2RpZXMiICovCiA1MDUsCS8qICJtaW1lLW1ocy1oZWFkaW5ncyIgKi8KIDQ4OCwJLyogIm1vYmlsZVRlbGVwaG9uZU51bWJlciIgKi8KQEAgLTM4ODksNiArMzk5NSw3IEBACiA0MCwJLyogInJjMi1vZmIiICovCiAgNSwJLyogInJjNCIgKi8KIDk3LAkvKiAicmM0LTQwIiAqLworOTE1LAkvKiAicmM0LWhtYWMtbWQ1IiAqLwogMTIwLAkvKiAicmM1LWNiYyIgKi8KIDEyMiwJLyogInJjNS1jZmIiICovCiAxMjEsCS8qICJyYzUtZWNiIiAqLwpAQCAtMzkwNSw2ICs0MDEyLDggQEAKICA2LAkvKiAicnNhRW5jcnlwdGlvbiIgKi8KIDY0NCwJLyogInJzYU9BRVBFbmNyeXB0aW9uU0VUIiAqLwogMzc3LAkvKiAicnNhU2lnbmF0dXJlIiAqLworOTE5LAkvKiAicnNhZXNPYWVwIiAqLworOTEyLAkvKiAicnNhc3NhUHNzIiAqLwogMTI0LAkvKiAicnVuIGxlbmd0aCBjb21wcmVzc2lvbiIgKi8KIDQ4MiwJLyogInNPQVJlY29yZCIgKi8KIDE1NSwJLyogInNhZmVDb250ZW50c0JhZyIgKi8KQEAgLTQyNTQsNiArNDM2Myw3IEBACiA5NiwJLyogT0JKX21kYzJXaXRoUlNBICAgICAgICAgICAgICAgICAgMiA1IDggMyAxMDAgKi8KIDk1LAkvKiBPQkpfbWRjMiAgICAgICAgICAgICAgICAgICAgICAgICAyIDUgOCAzIDEwMSAqLwogNzQ2LAkvKiBPQkpfYW55X3BvbGljeSAgICAgICAgICAgICAgICAgICAyIDUgMjkgMzIgMCAqLworOTEwLAkvKiBPQkpfYW55RXh0ZW5kZWRLZXlVc2FnZSAgICAgICAgICAyIDUgMjkgMzcgMCAqLwogNTE5LAkvKiBPQkpfc2V0Y3RfUEFORGF0YSAgICAgICAgICAgICAgICAyIDIzIDQyIDAgMCAqLwogNTIwLAkvKiBPQkpfc2V0Y3RfUEFOVG9rZW4gICAgICAgICAgICAgICAyIDIzIDQyIDAgMSAqLwogNTIxLAkvKiBPQkpfc2V0Y3RfUEFOT25seSAgICAgICAgICAgICAgICAyIDIzIDQyIDAgMiAqLwpAQCAtNDcyMCw2ICs0ODMwLDkgQEAKICA4LAkvKiBPQkpfbWQ1V2l0aFJTQUVuY3J5cHRpb24gICAgICAgICAxIDIgODQwIDExMzU0OSAxIDEgNCAqLwogNjUsCS8qIE9CSl9zaGExV2l0aFJTQUVuY3J5cHRpb24gICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA1ICovCiA2NDQsCS8qIE9CSl9yc2FPQUVQRW5jcnlwdGlvblNFVCAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA2ICovCis5MTksCS8qIE9CSl9yc2Flc09hZXAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA3ICovCis5MTEsCS8qIE9CSl9tZ2YxICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSA4ICovCis5MTIsCS8qIE9CSl9yc2Fzc2FQc3MgICAgICAgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxMCAqLwogNjY4LAkvKiBPQkpfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24gICAgICAxIDIgODQwIDExMzU0OSAxIDEgMTEgKi8KIDY2OSwJLyogT0JKX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uICAgICAgMSAyIDg0MCAxMTM1NDkgMSAxIDEyICovCiA2NzAsCS8qIE9CSl9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgMSAxMyAqLwpAQCAtNDc4NSwxNiArNDg5OCwyNSBAQAogNDIwLAkvKiBPQkpfYWVzXzEyOF9vZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAzICovCiA0MjEsCS8qIE9CSl9hZXNfMTI4X2NmYjEyOCAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDQgKi8KIDc4OCwJLyogT0JKX2lkX2FlczEyOF93cmFwICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgNSAqLworODk1LAkvKiBPQkpfYWVzXzEyOF9nY20gICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA2ICovCis4OTYsCS8qIE9CSl9hZXNfMTI4X2NjbSAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAxIDcgKi8KKzg5NywJLyogT0JKX2lkX2FlczEyOF93cmFwX3BhZCAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDEgOCAqLwogNDIyLAkvKiBPQkpfYWVzXzE5Ml9lY2IgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyMSAqLwogNDIzLAkvKiBPQkpfYWVzXzE5Ml9jYmMgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyMiAqLwogNDI0LAkvKiBPQkpfYWVzXzE5Ml9vZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyMyAqLwogNDI1LAkvKiBPQkpfYWVzXzE5Ml9jZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyNCAqLwogNzg5LAkvKiBPQkpfaWRfYWVzMTkyX3dyYXAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyNSAqLworODk4LAkvKiBPQkpfYWVzXzE5Ml9nY20gICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyNiAqLworODk5LAkvKiBPQkpfYWVzXzE5Ml9jY20gICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyNyAqLworOTAwLAkvKiBPQkpfaWRfYWVzMTkyX3dyYXBfcGFkICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSAyOCAqLwogNDI2LAkvKiBPQkpfYWVzXzI1Nl9lY2IgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0MSAqLwogNDI3LAkvKiBPQkpfYWVzXzI1Nl9jYmMgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0MiAqLwogNDI4LAkvKiBPQkpfYWVzXzI1Nl9vZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0MyAqLwogNDI5LAkvKiBPQkpfYWVzXzI1Nl9jZmIxMjggICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0NCAqLwogNzkwLAkvKiBPQkpfaWRfYWVzMjU2X3dyYXAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0NSAqLworOTAxLAkvKiBPQkpfYWVzXzI1Nl9nY20gICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0NiAqLworOTAyLAkvKiBPQkpfYWVzXzI1Nl9jY20gICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0NyAqLworOTAzLAkvKiBPQkpfaWRfYWVzMjU2X3dyYXBfcGFkICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMSA0OCAqLwogNjcyLAkvKiBPQkpfc2hhMjU2ICAgICAgICAgICAgICAgICAgICAgICAyIDE2IDg0MCAxIDEwMSAzIDQgMiAxICovCiA2NzMsCS8qIE9CSl9zaGEzODQgICAgICAgICAgICAgICAgICAgICAgIDIgMTYgODQwIDEgMTAxIDMgNCAyIDIgKi8KIDY3NCwJLyogT0JKX3NoYTUxMiAgICAgICAgICAgICAgICAgICAgICAgMiAxNiA4NDAgMSAxMDEgMyA0IDIgMyAqLwpAQCAtNDkwMSw2ICs1MDIzLDkgQEAKIDc1MSwJLyogT0JKX2NhbWVsbGlhXzEyOF9jYmMgICAgICAgICAgICAgMSAyIDM5MiAyMDAwMTEgNjEgMSAxIDEgMiAqLwogNzUyLAkvKiBPQkpfY2FtZWxsaWFfMTkyX2NiYyAgICAgICAgICAgICAxIDIgMzkyIDIwMDAxMSA2MSAxIDEgMSAzICovCiA3NTMsCS8qIE9CSl9jYW1lbGxpYV8yNTZfY2JjICAgICAgICAgICAgIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDQgKi8KKzkwNywJLyogT0JKX2lkX2NhbWVsbGlhMTI4X3dyYXAgICAgICAgICAgMSAyIDM5MiAyMDAwMTEgNjEgMSAxIDMgMiAqLworOTA4LAkvKiBPQkpfaWRfY2FtZWxsaWExOTJfd3JhcCAgICAgICAgICAxIDIgMzkyIDIwMDAxMSA2MSAxIDEgMyAzICovCis5MDksCS8qIE9CSl9pZF9jYW1lbGxpYTI1Nl93cmFwICAgICAgICAgIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAzIDQgKi8KIDE5NiwJLyogT0JKX2lkX3NtaW1lX21vZF9jbXMgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDAgMSAqLwogMTk3LAkvKiBPQkpfaWRfc21pbWVfbW9kX2VzcyAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMCAyICovCiAxOTgsCS8qIE9CSl9pZF9zbWltZV9tb2Rfb2lkICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAwIDMgKi8KQEAgLTQ5NTYsNiArNTA4MSw3IEBACiAyNDYsCS8qIE9CSl9pZF9zbWltZV9hbGdfQ01TM0RFU3dyYXAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDYgKi8KIDI0NywJLyogT0JKX2lkX3NtaW1lX2FsZ19DTVNSQzJ3cmFwICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDMgNyAqLwogMTI1LAkvKiBPQkpfemxpYl9jb21wcmVzc2lvbiAgICAgICAgICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgMyA4ICovCis4OTMsCS8qIE9CSl9pZF9hbGdfUFdSSV9LRUsgICAgICAgICAgICAgIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiAzIDkgKi8KIDI0OCwJLyogT0JKX2lkX3NtaW1lX2NkX2xkYXAgICAgICAgICAgICAgMSAyIDg0MCAxMTM1NDkgMSA5IDE2IDQgMSAqLwogMjQ5LAkvKiBPQkpfaWRfc21pbWVfc3BxX2V0c19zcXRfdXJpICAgICAxIDIgODQwIDExMzU0OSAxIDkgMTYgNSAxICovCiAyNTAsCS8qIE9CSl9pZF9zbWltZV9zcHFfZXRzX3NxdF91bm90aWNlIDEgMiA4NDAgMTEzNTQ5IDEgOSAxNiA1IDIgKi8KZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ial9tYWMuaCBiL2NyeXB0by9vYmplY3RzL29ial9tYWMuaAppbmRleCAyODJmMTFhLi5iNWVhN2NkIDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLmgKKysrIGIvY3J5cHRvL29iamVjdHMvb2JqX21hYy5oCkBAIC01ODAsNiArNTgwLDIxIEBACiAjZGVmaW5lIE5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24JCTY1CiAjZGVmaW5lIE9CSl9zaGExV2l0aFJTQUVuY3J5cHRpb24JCU9CSl9wa2NzMSw1TAogCisjZGVmaW5lIFNOX3JzYWVzT2FlcAkJIlJTQUVTLU9BRVAiCisjZGVmaW5lIExOX3JzYWVzT2FlcAkJInJzYWVzT2FlcCIKKyNkZWZpbmUgTklEX3JzYWVzT2FlcAkJOTE5CisjZGVmaW5lIE9CSl9yc2Flc09hZXAJCU9CSl9wa2NzMSw3TAorCisjZGVmaW5lIFNOX21nZjEJCSJNR0YxIgorI2RlZmluZSBMTl9tZ2YxCQkibWdmMSIKKyNkZWZpbmUgTklEX21nZjEJCTkxMQorI2RlZmluZSBPQkpfbWdmMQkJT0JKX3BrY3MxLDhMCisKKyNkZWZpbmUgU05fcnNhc3NhUHNzCQkiUlNBU1NBLVBTUyIKKyNkZWZpbmUgTE5fcnNhc3NhUHNzCQkicnNhc3NhUHNzIgorI2RlZmluZSBOSURfcnNhc3NhUHNzCQk5MTIKKyNkZWZpbmUgT0JKX3JzYXNzYVBzcwkJT0JKX3BrY3MxLDEwTAorCiAjZGVmaW5lIFNOX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uCQkiUlNBLVNIQTI1NiIKICNkZWZpbmUgTE5fc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24JCSJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiIKICNkZWZpbmUgTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uCQk2NjgKQEAgLTk4MSw2ICs5OTYsMTAgQEAKICNkZWZpbmUgTklEX2lkX3NtaW1lX2FsZ19DTVNSQzJ3cmFwCQkyNDcKICNkZWZpbmUgT0JKX2lkX3NtaW1lX2FsZ19DTVNSQzJ3cmFwCQlPQkpfaWRfc21pbWVfYWxnLDdMCiAKKyNkZWZpbmUgU05faWRfYWxnX1BXUklfS0VLCQkiaWQtYWxnLVBXUkktS0VLIgorI2RlZmluZSBOSURfaWRfYWxnX1BXUklfS0VLCQk4OTMKKyNkZWZpbmUgT0JKX2lkX2FsZ19QV1JJX0tFSwkJT0JKX2lkX3NtaW1lX2FsZyw5TAorCiAjZGVmaW5lIFNOX2lkX3NtaW1lX2NkX2xkYXAJCSJpZC1zbWltZS1jZC1sZGFwIgogI2RlZmluZSBOSURfaWRfc21pbWVfY2RfbGRhcAkJMjQ4CiAjZGVmaW5lIE9CSl9pZF9zbWltZV9jZF9sZGFwCQlPQkpfaWRfc21pbWVfY2QsMUwKQEAgLTIzOTksNiArMjQxOCwxMSBAQAogI2RlZmluZSBOSURfbm9fcmV2X2F2YWlsCQk0MDMKICNkZWZpbmUgT0JKX25vX3Jldl9hdmFpbAkJT0JKX2lkX2NlLDU2TAogCisjZGVmaW5lIFNOX2FueUV4dGVuZGVkS2V5VXNhZ2UJCSJhbnlFeHRlbmRlZEtleVVzYWdlIgorI2RlZmluZSBMTl9hbnlFeHRlbmRlZEtleVVzYWdlCQkiQW55IEV4dGVuZGVkIEtleSBVc2FnZSIKKyNkZWZpbmUgTklEX2FueUV4dGVuZGVkS2V5VXNhZ2UJCTkxMAorI2RlZmluZSBPQkpfYW55RXh0ZW5kZWRLZXlVc2FnZQkJT0JKX2V4dF9rZXlfdXNhZ2UsMEwKKwogI2RlZmluZSBTTl9uZXRzY2FwZQkJIk5ldHNjYXBlIgogI2RlZmluZSBMTl9uZXRzY2FwZQkJIk5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnAuIgogI2RlZmluZSBOSURfbmV0c2NhcGUJCTU3CkBAIC0yNTg2LDYgKzI2MTAsMjQgQEAKICNkZWZpbmUgTklEX2Flc18xMjhfY2ZiMTI4CQk0MjEKICNkZWZpbmUgT0JKX2Flc18xMjhfY2ZiMTI4CQlPQkpfYWVzLDRMCiAKKyNkZWZpbmUgU05faWRfYWVzMTI4X3dyYXAJCSJpZC1hZXMxMjgtd3JhcCIKKyNkZWZpbmUgTklEX2lkX2FlczEyOF93cmFwCQk3ODgKKyNkZWZpbmUgT0JKX2lkX2FlczEyOF93cmFwCQlPQkpfYWVzLDVMCisKKyNkZWZpbmUgU05fYWVzXzEyOF9nY20JCSJpZC1hZXMxMjgtR0NNIgorI2RlZmluZSBMTl9hZXNfMTI4X2djbQkJImFlcy0xMjgtZ2NtIgorI2RlZmluZSBOSURfYWVzXzEyOF9nY20JCTg5NQorI2RlZmluZSBPQkpfYWVzXzEyOF9nY20JCU9CSl9hZXMsNkwKKworI2RlZmluZSBTTl9hZXNfMTI4X2NjbQkJImlkLWFlczEyOC1DQ00iCisjZGVmaW5lIExOX2Flc18xMjhfY2NtCQkiYWVzLTEyOC1jY20iCisjZGVmaW5lIE5JRF9hZXNfMTI4X2NjbQkJODk2CisjZGVmaW5lIE9CSl9hZXNfMTI4X2NjbQkJT0JKX2Flcyw3TAorCisjZGVmaW5lIFNOX2lkX2FlczEyOF93cmFwX3BhZAkJImlkLWFlczEyOC13cmFwLXBhZCIKKyNkZWZpbmUgTklEX2lkX2FlczEyOF93cmFwX3BhZAkJODk3CisjZGVmaW5lIE9CSl9pZF9hZXMxMjhfd3JhcF9wYWQJCU9CSl9hZXMsOEwKKwogI2RlZmluZSBTTl9hZXNfMTkyX2VjYgkJIkFFUy0xOTItRUNCIgogI2RlZmluZSBMTl9hZXNfMTkyX2VjYgkJImFlcy0xOTItZWNiIgogI2RlZmluZSBOSURfYWVzXzE5Ml9lY2IJCTQyMgpAQCAtMjYwNiw2ICsyNjQ4LDI0IEBACiAjZGVmaW5lIE5JRF9hZXNfMTkyX2NmYjEyOAkJNDI1CiAjZGVmaW5lIE9CSl9hZXNfMTkyX2NmYjEyOAkJT0JKX2FlcywyNEwKIAorI2RlZmluZSBTTl9pZF9hZXMxOTJfd3JhcAkJImlkLWFlczE5Mi13cmFwIgorI2RlZmluZSBOSURfaWRfYWVzMTkyX3dyYXAJCTc4OQorI2RlZmluZSBPQkpfaWRfYWVzMTkyX3dyYXAJCU9CSl9hZXMsMjVMCisKKyNkZWZpbmUgU05fYWVzXzE5Ml9nY20JCSJpZC1hZXMxOTItR0NNIgorI2RlZmluZSBMTl9hZXNfMTkyX2djbQkJImFlcy0xOTItZ2NtIgorI2RlZmluZSBOSURfYWVzXzE5Ml9nY20JCTg5OAorI2RlZmluZSBPQkpfYWVzXzE5Ml9nY20JCU9CSl9hZXMsMjZMCisKKyNkZWZpbmUgU05fYWVzXzE5Ml9jY20JCSJpZC1hZXMxOTItQ0NNIgorI2RlZmluZSBMTl9hZXNfMTkyX2NjbQkJImFlcy0xOTItY2NtIgorI2RlZmluZSBOSURfYWVzXzE5Ml9jY20JCTg5OQorI2RlZmluZSBPQkpfYWVzXzE5Ml9jY20JCU9CSl9hZXMsMjdMCisKKyNkZWZpbmUgU05faWRfYWVzMTkyX3dyYXBfcGFkCQkiaWQtYWVzMTkyLXdyYXAtcGFkIgorI2RlZmluZSBOSURfaWRfYWVzMTkyX3dyYXBfcGFkCQk5MDAKKyNkZWZpbmUgT0JKX2lkX2FlczE5Ml93cmFwX3BhZAkJT0JKX2FlcywyOEwKKwogI2RlZmluZSBTTl9hZXNfMjU2X2VjYgkJIkFFUy0yNTYtRUNCIgogI2RlZmluZSBMTl9hZXNfMjU2X2VjYgkJImFlcy0yNTYtZWNiIgogI2RlZmluZSBOSURfYWVzXzI1Nl9lY2IJCTQyNgpAQCAtMjYyNiw2ICsyNjg2LDI0IEBACiAjZGVmaW5lIE5JRF9hZXNfMjU2X2NmYjEyOAkJNDI5CiAjZGVmaW5lIE9CSl9hZXNfMjU2X2NmYjEyOAkJT0JKX2Flcyw0NEwKIAorI2RlZmluZSBTTl9pZF9hZXMyNTZfd3JhcAkJImlkLWFlczI1Ni13cmFwIgorI2RlZmluZSBOSURfaWRfYWVzMjU2X3dyYXAJCTc5MAorI2RlZmluZSBPQkpfaWRfYWVzMjU2X3dyYXAJCU9CSl9hZXMsNDVMCisKKyNkZWZpbmUgU05fYWVzXzI1Nl9nY20JCSJpZC1hZXMyNTYtR0NNIgorI2RlZmluZSBMTl9hZXNfMjU2X2djbQkJImFlcy0yNTYtZ2NtIgorI2RlZmluZSBOSURfYWVzXzI1Nl9nY20JCTkwMQorI2RlZmluZSBPQkpfYWVzXzI1Nl9nY20JCU9CSl9hZXMsNDZMCisKKyNkZWZpbmUgU05fYWVzXzI1Nl9jY20JCSJpZC1hZXMyNTYtQ0NNIgorI2RlZmluZSBMTl9hZXNfMjU2X2NjbQkJImFlcy0yNTYtY2NtIgorI2RlZmluZSBOSURfYWVzXzI1Nl9jY20JCTkwMgorI2RlZmluZSBPQkpfYWVzXzI1Nl9jY20JCU9CSl9hZXMsNDdMCisKKyNkZWZpbmUgU05faWRfYWVzMjU2X3dyYXBfcGFkCQkiaWQtYWVzMjU2LXdyYXAtcGFkIgorI2RlZmluZSBOSURfaWRfYWVzMjU2X3dyYXBfcGFkCQk5MDMKKyNkZWZpbmUgT0JKX2lkX2FlczI1Nl93cmFwX3BhZAkJT0JKX2Flcyw0OEwKKwogI2RlZmluZSBTTl9hZXNfMTI4X2NmYjEJCSJBRVMtMTI4LUNGQjEiCiAjZGVmaW5lIExOX2Flc18xMjhfY2ZiMQkJImFlcy0xMjgtY2ZiMSIKICNkZWZpbmUgTklEX2Flc18xMjhfY2ZiMQkJNjUwCkBAIC0yNjUwLDYgKzI3MjgsMjYgQEAKICNkZWZpbmUgTE5fYWVzXzI1Nl9jZmI4CQkiYWVzLTI1Ni1jZmI4IgogI2RlZmluZSBOSURfYWVzXzI1Nl9jZmI4CQk2NTUKIAorI2RlZmluZSBTTl9hZXNfMTI4X2N0cgkJIkFFUy0xMjgtQ1RSIgorI2RlZmluZSBMTl9hZXNfMTI4X2N0cgkJImFlcy0xMjgtY3RyIgorI2RlZmluZSBOSURfYWVzXzEyOF9jdHIJCTkwNAorCisjZGVmaW5lIFNOX2Flc18xOTJfY3RyCQkiQUVTLTE5Mi1DVFIiCisjZGVmaW5lIExOX2Flc18xOTJfY3RyCQkiYWVzLTE5Mi1jdHIiCisjZGVmaW5lIE5JRF9hZXNfMTkyX2N0cgkJOTA1CisKKyNkZWZpbmUgU05fYWVzXzI1Nl9jdHIJCSJBRVMtMjU2LUNUUiIKKyNkZWZpbmUgTE5fYWVzXzI1Nl9jdHIJCSJhZXMtMjU2LWN0ciIKKyNkZWZpbmUgTklEX2Flc18yNTZfY3RyCQk5MDYKKworI2RlZmluZSBTTl9hZXNfMTI4X3h0cwkJIkFFUy0xMjgtWFRTIgorI2RlZmluZSBMTl9hZXNfMTI4X3h0cwkJImFlcy0xMjgteHRzIgorI2RlZmluZSBOSURfYWVzXzEyOF94dHMJCTkxMworCisjZGVmaW5lIFNOX2Flc18yNTZfeHRzCQkiQUVTLTI1Ni1YVFMiCisjZGVmaW5lIExOX2Flc18yNTZfeHRzCQkiYWVzLTI1Ni14dHMiCisjZGVmaW5lIE5JRF9hZXNfMjU2X3h0cwkJOTE0CisKICNkZWZpbmUgU05fZGVzX2NmYjEJCSJERVMtQ0ZCMSIKICNkZWZpbmUgTE5fZGVzX2NmYjEJCSJkZXMtY2ZiMSIKICNkZWZpbmUgTklEX2Rlc19jZmIxCQk2NTYKQEAgLTI2NjYsMTggKzI3NjQsNiBAQAogI2RlZmluZSBMTl9kZXNfZWRlM19jZmI4CQkiZGVzLWVkZTMtY2ZiOCIKICNkZWZpbmUgTklEX2Rlc19lZGUzX2NmYjgJCTY1OQogCi0jZGVmaW5lIFNOX2lkX2FlczEyOF93cmFwCQkiaWQtYWVzMTI4LXdyYXAiCi0jZGVmaW5lIE5JRF9pZF9hZXMxMjhfd3JhcAkJNzg4Ci0jZGVmaW5lIE9CSl9pZF9hZXMxMjhfd3JhcAkJT0JKX2Flcyw1TAotCi0jZGVmaW5lIFNOX2lkX2FlczE5Ml93cmFwCQkiaWQtYWVzMTkyLXdyYXAiCi0jZGVmaW5lIE5JRF9pZF9hZXMxOTJfd3JhcAkJNzg5Ci0jZGVmaW5lIE9CSl9pZF9hZXMxOTJfd3JhcAkJT0JKX2FlcywyNUwKLQotI2RlZmluZSBTTl9pZF9hZXMyNTZfd3JhcAkJImlkLWFlczI1Ni13cmFwIgotI2RlZmluZSBOSURfaWRfYWVzMjU2X3dyYXAJCTc5MAotI2RlZmluZSBPQkpfaWRfYWVzMjU2X3dyYXAJCU9CSl9hZXMsNDVMCi0KICNkZWZpbmUgT0JKX25pc3RfaGFzaGFsZ3MJCU9CSl9uaXN0QWxnb3JpdGhtcywyTAogCiAjZGVmaW5lIFNOX3NoYTI1NgkJIlNIQTI1NiIKQEAgLTM4MTAsNiArMzg5NiwxOCBAQAogI2RlZmluZSBOSURfY2FtZWxsaWFfMjU2X2NiYwkJNzUzCiAjZGVmaW5lIE9CSl9jYW1lbGxpYV8yNTZfY2JjCQkxTCwyTCwzOTJMLDIwMDAxMUwsNjFMLDFMLDFMLDFMLDRMCiAKKyNkZWZpbmUgU05faWRfY2FtZWxsaWExMjhfd3JhcAkJImlkLWNhbWVsbGlhMTI4LXdyYXAiCisjZGVmaW5lIE5JRF9pZF9jYW1lbGxpYTEyOF93cmFwCQk5MDcKKyNkZWZpbmUgT0JKX2lkX2NhbWVsbGlhMTI4X3dyYXAJCTFMLDJMLDM5MkwsMjAwMDExTCw2MUwsMUwsMUwsM0wsMkwKKworI2RlZmluZSBTTl9pZF9jYW1lbGxpYTE5Ml93cmFwCQkiaWQtY2FtZWxsaWExOTItd3JhcCIKKyNkZWZpbmUgTklEX2lkX2NhbWVsbGlhMTkyX3dyYXAJCTkwOAorI2RlZmluZSBPQkpfaWRfY2FtZWxsaWExOTJfd3JhcAkJMUwsMkwsMzkyTCwyMDAwMTFMLDYxTCwxTCwxTCwzTCwzTAorCisjZGVmaW5lIFNOX2lkX2NhbWVsbGlhMjU2X3dyYXAJCSJpZC1jYW1lbGxpYTI1Ni13cmFwIgorI2RlZmluZSBOSURfaWRfY2FtZWxsaWEyNTZfd3JhcAkJOTA5CisjZGVmaW5lIE9CSl9pZF9jYW1lbGxpYTI1Nl93cmFwCQkxTCwyTCwzOTJMLDIwMDAxMUwsNjFMLDFMLDFMLDNMLDRMCisKICNkZWZpbmUgT0JKX250dF9kcwkJMEwsM0wsNDQwMUwsNUwKIAogI2RlZmluZSBPQkpfY2FtZWxsaWEJCU9CSl9udHRfZHMsM0wsMUwsOUwKQEAgLTM5MTIsMyArNDAxMCwyMyBAQAogI2RlZmluZSBMTl9obWFjCQkiaG1hYyIKICNkZWZpbmUgTklEX2htYWMJCTg1NQogCisjZGVmaW5lIFNOX2NtYWMJCSJDTUFDIgorI2RlZmluZSBMTl9jbWFjCQkiY21hYyIKKyNkZWZpbmUgTklEX2NtYWMJCTg5NAorCisjZGVmaW5lIFNOX3JjNF9obWFjX21kNQkJIlJDNC1ITUFDLU1ENSIKKyNkZWZpbmUgTE5fcmM0X2htYWNfbWQ1CQkicmM0LWhtYWMtbWQ1IgorI2RlZmluZSBOSURfcmM0X2htYWNfbWQ1CQk5MTUKKworI2RlZmluZSBTTl9hZXNfMTI4X2NiY19obWFjX3NoYTEJCSJBRVMtMTI4LUNCQy1ITUFDLVNIQTEiCisjZGVmaW5lIExOX2Flc18xMjhfY2JjX2htYWNfc2hhMQkJImFlcy0xMjgtY2JjLWhtYWMtc2hhMSIKKyNkZWZpbmUgTklEX2Flc18xMjhfY2JjX2htYWNfc2hhMQkJOTE2CisKKyNkZWZpbmUgU05fYWVzXzE5Ml9jYmNfaG1hY19zaGExCQkiQUVTLTE5Mi1DQkMtSE1BQy1TSEExIgorI2RlZmluZSBMTl9hZXNfMTkyX2NiY19obWFjX3NoYTEJCSJhZXMtMTkyLWNiYy1obWFjLXNoYTEiCisjZGVmaW5lIE5JRF9hZXNfMTkyX2NiY19obWFjX3NoYTEJCTkxNworCisjZGVmaW5lIFNOX2Flc18yNTZfY2JjX2htYWNfc2hhMQkJIkFFUy0yNTYtQ0JDLUhNQUMtU0hBMSIKKyNkZWZpbmUgTE5fYWVzXzI1Nl9jYmNfaG1hY19zaGExCQkiYWVzLTI1Ni1jYmMtaG1hYy1zaGExIgorI2RlZmluZSBOSURfYWVzXzI1Nl9jYmNfaG1hY19zaGExCQk5MTgKKwpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX21hYy5udW0gYi9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLm51bQppbmRleCA4YzUwYWFjLi4xZDBhN2M4IDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLm51bQorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfbWFjLm51bQpAQCAtODkwLDMgKzg5MCwzMCBAQAogc3VwcG9ydGVkQWxnb3JpdGhtcwkJODkwCiBkZWx0YVJldm9jYXRpb25MaXN0CQk4OTEKIGRtZE5hbWUJCTg5MgoraWRfYWxnX1BXUklfS0VLCQk4OTMKK2NtYWMJCTg5NAorYWVzXzEyOF9nY20JCTg5NQorYWVzXzEyOF9jY20JCTg5NgoraWRfYWVzMTI4X3dyYXBfcGFkCQk4OTcKK2Flc18xOTJfZ2NtCQk4OTgKK2Flc18xOTJfY2NtCQk4OTkKK2lkX2FlczE5Ml93cmFwX3BhZAkJOTAwCithZXNfMjU2X2djbQkJOTAxCithZXNfMjU2X2NjbQkJOTAyCitpZF9hZXMyNTZfd3JhcF9wYWQJCTkwMworYWVzXzEyOF9jdHIJCTkwNAorYWVzXzE5Ml9jdHIJCTkwNQorYWVzXzI1Nl9jdHIJCTkwNgoraWRfY2FtZWxsaWExMjhfd3JhcAkJOTA3CitpZF9jYW1lbGxpYTE5Ml93cmFwCQk5MDgKK2lkX2NhbWVsbGlhMjU2X3dyYXAJCTkwOQorYW55RXh0ZW5kZWRLZXlVc2FnZQkJOTEwCittZ2YxCQk5MTEKK3JzYXNzYVBzcwkJOTEyCithZXNfMTI4X3h0cwkJOTEzCithZXNfMjU2X3h0cwkJOTE0CityYzRfaG1hY19tZDUJCTkxNQorYWVzXzEyOF9jYmNfaG1hY19zaGExCQk5MTYKK2Flc18xOTJfY2JjX2htYWNfc2hhMQkJOTE3CithZXNfMjU2X2NiY19obWFjX3NoYTEJCTkxOAorcnNhZXNPYWVwCQk5MTkKZGlmZiAtLWdpdCBhL2NyeXB0by9vYmplY3RzL29ial94cmVmLmMgYi9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5jCmluZGV4IDE1MmVjYTUuLjlmNzQ0YmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vYmplY3RzL29ial94cmVmLmMKKysrIGIvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYuYwpAQCAtMTEwLDggKzExMCwxMCBAQAogI2VuZGlmCiAJaWYgKHJ2ID09IE5VTEwpCiAJCXJldHVybiAwOwotCSpwZGlnX25pZCA9IHJ2LT5oYXNoX2lkOwotCSpwcGtleV9uaWQgPSBydi0+cGtleV9pZDsKKwlpZiAocGRpZ19uaWQpCisJCSpwZGlnX25pZCA9IHJ2LT5oYXNoX2lkOworCWlmIChwcGtleV9uaWQpCisJCSpwcGtleV9uaWQgPSBydi0+cGtleV9pZDsKIAlyZXR1cm4gMTsKIAl9CiAKQEAgLTE0NCw3ICsxNDYsOCBAQAogI2VuZGlmCiAJaWYgKHJ2ID09IE5VTEwpCiAJCXJldHVybiAwOwotCSpwc2lnbmlkID0gKCpydiktPnNpZ25faWQ7CisJaWYgKHBzaWduaWQpCisJCSpwc2lnbmlkID0gKCpydiktPnNpZ25faWQ7CiAJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5oIGIvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYuaAppbmRleCBkNWI5YjhlLi5lMjM5MzhjIDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi5oCisrKyBiL2NyeXB0by9vYmplY3RzL29ial94cmVmLmgKQEAgLTM4LDEwICszOCwxMiBAQAogCXtOSURfaWRfR29zdFIzNDExXzk0X3dpdGhfR29zdFIzNDEwXzk0LCBOSURfaWRfR29zdFIzNDExXzk0LCBOSURfaWRfR29zdFIzNDEwXzk0fSwKIAl7TklEX2lkX0dvc3RSMzQxMV85NF93aXRoX0dvc3RSMzQxMF85NF9jYywgTklEX2lkX0dvc3RSMzQxMV85NCwgTklEX2lkX0dvc3RSMzQxMF85NF9jY30sCiAJe05JRF9pZF9Hb3N0UjM0MTFfOTRfd2l0aF9Hb3N0UjM0MTBfMjAwMV9jYywgTklEX2lkX0dvc3RSMzQxMV85NCwgTklEX2lkX0dvc3RSMzQxMF8yMDAxX2NjfSwKKwl7TklEX3JzYXNzYVBzcywgTklEX3VuZGVmLCBOSURfcnNhRW5jcnlwdGlvbn0sCiAJfTsKIAogc3RhdGljIGNvbnN0IG5pZF90cmlwbGUgKiBjb25zdCBzaWdvaWRfc3J0X3hyZWZbXSA9CiAJeworCSZzaWdvaWRfc3J0WzI5XSwKIAkmc2lnb2lkX3NydFsxN10sCiAJJnNpZ29pZF9zcnRbMThdLAogCSZzaWdvaWRfc3J0WzBdLApkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYudHh0IGIvY3J5cHRvL29iamVjdHMvb2JqX3hyZWYudHh0CmluZGV4IGU0NWIzZDMuLmNiOTE3MTggMTAwNjQ0Ci0tLSBhL2NyeXB0by9vYmplY3RzL29ial94cmVmLnR4dAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmpfeHJlZi50eHQKQEAgLTEzLDYgKzEzLDEwIEBACiBzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbglzaGEyMjQJcnNhRW5jcnlwdGlvbgogbWRjMldpdGhSU0EJCW1kYzIJcnNhRW5jcnlwdGlvbgogcmlwZW1kMTYwV2l0aFJTQQlyaXBlbWQxNjAgcnNhRW5jcnlwdGlvbgorIyBGb3IgUFNTIHRoZSBkaWdlc3QgYWxnb3JpdGhtIGNhbiB2YXJ5IGFuZCBkZXBlbmRzIG9uIHRoZSBpbmNsdWRlZAorIyBBbGdvcml0aG1JZGVudGlmaWVyLiBUaGUgZGlnZXN0ICJ1bmRlZiIgaW5kaWNhdGVzIHRoZSBwdWJsaWMga2V5CisjIG1ldGhvZCBzaG91bGQgaGFuZGxlIHRoaXMgZXhwbGljaXRseS4KK3JzYXNzYVBzcwkJdW5kZWYJcnNhRW5jcnlwdGlvbgogCiAjIEFsdGVybmF0aXZlIGRlcHJlY2F0ZWQgT0lEcy4gQnkgdXNpbmcgdGhlIG9sZGVyICJyc2EiIE9JRCB0aGlzCiAjIHR5cGUgd2lsbCBiZSByZWNvZ25pemVkIGJ5IG5vdCBub3JtYWxseSB1c2VkLgpkaWZmIC0tZ2l0IGEvY3J5cHRvL29iamVjdHMvb2JqZWN0cy50eHQgYi9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLnR4dAppbmRleCBlNjFmZTYwLi5kM2JmYWQ3IDEwMDY0NAotLS0gYS9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLnR4dAorKysgYi9jcnlwdG8vb2JqZWN0cy9vYmplY3RzLnR4dApAQCAtMTY2LDYgKzE2NiwxMCBAQAogcGtjczEgNAkJCTogUlNBLU1ENQkJOiBtZDVXaXRoUlNBRW5jcnlwdGlvbgogcGtjczEgNQkJCTogUlNBLVNIQTEJCTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCiAjIEFjY29yZGluZyB0byBQS0NTICMxIHZlcnNpb24gMi4xCitwa2NzMSA3CQkJOiBSU0FFUy1PQUVQCQk6IHJzYWVzT2FlcAorcGtjczEgOAkJCTogTUdGMQkJCTogbWdmMQorcGtjczEgMTAJCTogUlNBU1NBLVBTUwkJOiByc2Fzc2FQc3MKKwogcGtjczEgMTEJCTogUlNBLVNIQTI1NgkJOiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgogcGtjczEgMTIJCTogUlNBLVNIQTM4NAkJOiBzaGEzODRXaXRoUlNBRW5jcnlwdGlvbgogcGtjczEgMTMJCTogUlNBLVNIQTUxMgkJOiBzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbgpAQCAtMjk5LDYgKzMwMyw3IEBACiBpZC1zbWltZS1hbGcgNQkJOiBpZC1zbWltZS1hbGctRVNESAogaWQtc21pbWUtYWxnIDYJCTogaWQtc21pbWUtYWxnLUNNUzNERVN3cmFwCiBpZC1zbWltZS1hbGcgNwkJOiBpZC1zbWltZS1hbGctQ01TUkMyd3JhcAoraWQtc21pbWUtYWxnIDkJCTogaWQtYWxnLVBXUkktS0VLCiAKICMgUy9NSU1FIENlcnRpZmljYXRlIERpc3RyaWJ1dGlvbgogaWQtc21pbWUtY2QgMQkJOiBpZC1zbWltZS1jZC1sZGFwCkBAIC03NzAsNiArNzc1LDEwIEBACiAhQ25hbWUgbm8tcmV2LWF2YWlsCiBpZC1jZSA1NgkJOiBub1JldkF2YWlsCQk6IFg1MDl2MyBObyBSZXZvY2F0aW9uIEF2YWlsYWJsZQogCisjIEZyb20gUkZDNTI4MAorZXh0LWtleS11c2FnZSAwCQk6IGFueUV4dGVuZGVkS2V5VXNhZ2UJOiBBbnkgRXh0ZW5kZWQgS2V5IFVzYWdlCisKKwogIUNuYW1lIG5ldHNjYXBlCiAyIDE2IDg0MCAxIDExMzczMAk6IE5ldHNjYXBlCQk6IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnAuCiAhQ25hbWUgbmV0c2NhcGUtY2VydC1leHRlbnNpb24KQEAgLTg0Niw2ICs4NTUsMTAgQEAKIGFlcyAzCQkJOiBBRVMtMTI4LU9GQgkJOiBhZXMtMTI4LW9mYgogIUNuYW1lIGFlcy0xMjgtY2ZiMTI4CiBhZXMgNAkJCTogQUVTLTEyOC1DRkIJCTogYWVzLTEyOC1jZmIKK2FlcyA1CQkJOiBpZC1hZXMxMjgtd3JhcAorYWVzIDYJCQk6IGlkLWFlczEyOC1HQ00JCTogYWVzLTEyOC1nY20KK2FlcyA3CQkJOiBpZC1hZXMxMjgtQ0NNCQk6IGFlcy0xMjgtY2NtCithZXMgOAkJCTogaWQtYWVzMTI4LXdyYXAtcGFkCiAKIGFlcyAyMQkJCTogQUVTLTE5Mi1FQ0IJCTogYWVzLTE5Mi1lY2IKIGFlcyAyMgkJCTogQUVTLTE5Mi1DQkMJCTogYWVzLTE5Mi1jYmMKQEAgLTg1Myw2ICs4NjYsMTAgQEAKIGFlcyAyMwkJCTogQUVTLTE5Mi1PRkIJCTogYWVzLTE5Mi1vZmIKICFDbmFtZSBhZXMtMTkyLWNmYjEyOAogYWVzIDI0CQkJOiBBRVMtMTkyLUNGQgkJOiBhZXMtMTkyLWNmYgorYWVzIDI1CQkJOiBpZC1hZXMxOTItd3JhcAorYWVzIDI2CQkJOiBpZC1hZXMxOTItR0NNCQk6IGFlcy0xOTItZ2NtCithZXMgMjcJCQk6IGlkLWFlczE5Mi1DQ00JCTogYWVzLTE5Mi1jY20KK2FlcyAyOAkJCTogaWQtYWVzMTkyLXdyYXAtcGFkCiAKIGFlcyA0MQkJCTogQUVTLTI1Ni1FQ0IJCTogYWVzLTI1Ni1lY2IKIGFlcyA0MgkJCTogQUVTLTI1Ni1DQkMJCTogYWVzLTI1Ni1jYmMKQEAgLTg2MCw2ICs4NzcsMTAgQEAKIGFlcyA0MwkJCTogQUVTLTI1Ni1PRkIJCTogYWVzLTI1Ni1vZmIKICFDbmFtZSBhZXMtMjU2LWNmYjEyOAogYWVzIDQ0CQkJOiBBRVMtMjU2LUNGQgkJOiBhZXMtMjU2LWNmYgorYWVzIDQ1CQkJOiBpZC1hZXMyNTYtd3JhcAorYWVzIDQ2CQkJOiBpZC1hZXMyNTYtR0NNCQk6IGFlcy0yNTYtZ2NtCithZXMgNDcJCQk6IGlkLWFlczI1Ni1DQ00JCTogYWVzLTI1Ni1jY20KK2FlcyA0OAkJCTogaWQtYWVzMjU2LXdyYXAtcGFkCiAKICMgVGhlcmUgYXJlIG5vIE9JRHMgZm9yIHRoZXNlIG1vZGVzLi4uCiAKQEAgLTg2OSwxNSArODkwLDE2IEBACiAJCQk6IEFFUy0xMjgtQ0ZCOAkJOiBhZXMtMTI4LWNmYjgKIAkJCTogQUVTLTE5Mi1DRkI4CQk6IGFlcy0xOTItY2ZiOAogCQkJOiBBRVMtMjU2LUNGQjgJCTogYWVzLTI1Ni1jZmI4CisJCQk6IEFFUy0xMjgtQ1RSCQk6IGFlcy0xMjgtY3RyCisJCQk6IEFFUy0xOTItQ1RSCQk6IGFlcy0xOTItY3RyCisJCQk6IEFFUy0yNTYtQ1RSCQk6IGFlcy0yNTYtY3RyCisJCQk6IEFFUy0xMjgtWFRTCQk6IGFlcy0xMjgteHRzCisJCQk6IEFFUy0yNTYtWFRTCQk6IGFlcy0yNTYteHRzCiAJCQk6IERFUy1DRkIxCQk6IGRlcy1jZmIxCiAJCQk6IERFUy1DRkI4CQk6IGRlcy1jZmI4CiAJCQk6IERFUy1FREUzLUNGQjEJCTogZGVzLWVkZTMtY2ZiMQogCQkJOiBERVMtRURFMy1DRkI4CQk6IGRlcy1lZGUzLWNmYjgKIAotYWVzIDUJCQk6IGlkLWFlczEyOC13cmFwIAotYWVzIDI1CQkJOiBpZC1hZXMxOTItd3JhcCAKLWFlcyA0NQkJCTogaWQtYWVzMjU2LXdyYXAgCi0KICMgT0lEcyBmb3IgU0hBMjI0LCBTSEEyNTYsIFNIQTM4NSBhbmQgU0hBNTEyLCBhY2NvcmRpbmcgdG8geDkuODQuCiAhQWxpYXMgbmlzdF9oYXNoYWxncyBuaXN0QWxnb3JpdGhtcyAyCiBuaXN0X2hhc2hhbGdzIDEJCTogU0hBMjU2CQk6IHNoYTI1NgpAQCAtMTIxMSw2ICsxMjMzLDkgQEAKIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDIgOiBDQU1FTExJQS0xMjgtQ0JDCQk6IGNhbWVsbGlhLTEyOC1jYmMKIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDMgOiBDQU1FTExJQS0xOTItQ0JDCQk6IGNhbWVsbGlhLTE5Mi1jYmMKIDEgMiAzOTIgMjAwMDExIDYxIDEgMSAxIDQgOiBDQU1FTExJQS0yNTYtQ0JDCQk6IGNhbWVsbGlhLTI1Ni1jYmMKKzEgMiAzOTIgMjAwMDExIDYxIDEgMSAzIDIgOiBpZC1jYW1lbGxpYTEyOC13cmFwCisxIDIgMzkyIDIwMDAxMSA2MSAxIDEgMyAzIDogaWQtY2FtZWxsaWExOTItd3JhcAorMSAyIDM5MiAyMDAwMTEgNjEgMSAxIDMgNCA6IGlkLWNhbWVsbGlhMjU2LXdyYXAKIAogIyBEZWZpbml0aW9ucyBmb3IgQ2FtZWxsaWEgY2lwaGVyIC0gRUNCLCBDRkIsIE9GQiBNT0RFCiAKQEAgLTEyNTcsMyArMTI4MiwxMSBAQAogIyBUaGVyZSBpcyBubyBPSUQgdGhhdCBqdXN0IGRlbm90ZXMgIkhNQUMiIG9kZGx5IGVub3VnaC4uLgogCiAJCQk6IEhNQUMJCQkJOiBobWFjCisjIE5vciBDTUFDIGVpdGhlcgorCQkJOiBDTUFDCQkJCTogY21hYworCisjIFN5bnRoZXRpYyBjb21wb3NpdGUgY2lwaGVyc3VpdGVzCisJCQk6IFJDNC1ITUFDLU1ENQkJCTogcmM0LWhtYWMtbWQ1CisJCQk6IEFFUy0xMjgtQ0JDLUhNQUMtU0hBMQkJOiBhZXMtMTI4LWNiYy1obWFjLXNoYTEKKwkJCTogQUVTLTE5Mi1DQkMtSE1BQy1TSEExCQk6IGFlcy0xOTItY2JjLWhtYWMtc2hhMQorCQkJOiBBRVMtMjU2LUNCQy1ITUFDLVNIQTEJCTogYWVzLTI1Ni1jYmMtaG1hYy1zaGExCmRpZmYgLS1naXQgYS9jcnlwdG8vb2NzcC9vY3NwX2xpYi5jIGIvY3J5cHRvL29jc3Avb2NzcF9saWIuYwppbmRleCBlOTJiODZjLi5hOTRkYzgzIDEwMDY0NAotLS0gYS9jcnlwdG8vb2NzcC9vY3NwX2xpYi5jCisrKyBiL2NyeXB0by9vY3NwL29jc3BfbGliLmMKQEAgLTEyNCw3ICsxMjQsOCBAQAogCWlmICghKEFTTjFfT0NURVRfU1RSSU5HX3NldChjaWQtPmlzc3Vlck5hbWVIYXNoLCBtZCwgaSkpKSBnb3RvIGVycjsKIAogCS8qIENhbGN1bGF0ZSB0aGUgaXNzdWVyS2V5IGhhc2gsIGV4Y2x1ZGluZyB0YWcgYW5kIGxlbmd0aCAqLwotCUVWUF9EaWdlc3QoaXNzdWVyS2V5LT5kYXRhLCBpc3N1ZXJLZXktPmxlbmd0aCwgbWQsICZpLCBkZ3N0LCBOVUxMKTsKKwlpZiAoIUVWUF9EaWdlc3QoaXNzdWVyS2V5LT5kYXRhLCBpc3N1ZXJLZXktPmxlbmd0aCwgbWQsICZpLCBkZ3N0LCBOVUxMKSkKKwkJZ290byBlcnI7CiAKIAlpZiAoIShBU04xX09DVEVUX1NUUklOR19zZXQoY2lkLT5pc3N1ZXJLZXlIYXNoLCBtZCwgaSkpKSBnb3RvIGVycjsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL29wZW5zc2xjb25mLmggYi9jcnlwdG8vb3BlbnNzbGNvbmYuaAppbmRleCAyNmFjNmJhLi5mMTdlYWE5IDEwMDY0NAotLS0gYS9jcnlwdG8vb3BlbnNzbGNvbmYuaAorKysgYi9jcnlwdG8vb3BlbnNzbGNvbmYuaApAQCAtOCw2ICs4LDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19DQVNUCiAjIGRlZmluZSBPUEVOU1NMX05PX0NBU1QKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjgKKyMgZGVmaW5lIE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOAorI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fR01QCiAjIGRlZmluZSBPUEVOU1NMX05PX0dNUAogI2VuZGlmCkBAIC0yOSw2ICszMiw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUkZDMzc3OQogIyBkZWZpbmUgT1BFTlNTTF9OT19SRkMzNzc5CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisjIGRlZmluZSBPUEVOU1NMX05PX1NDVFAKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKICMgZGVmaW5lIE9QRU5TU0xfTk9fU0VFRAogI2VuZGlmCkBAIC01OSw2ICs2NSw5IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19DQVNUKSAmJiAhZGVmaW5lZChOT19DQVNUKQogIyAgZGVmaW5lIE5PX0NBU1QKICMgZW5kaWYKKyMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjgpICYmICFkZWZpbmVkKE5PX0VDX05JU1RQXzY0X0dDQ18xMjgpCisjICBkZWZpbmUgTk9fRUNfTklTVFBfNjRfR0NDXzEyOAorIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fR01QKSAmJiAhZGVmaW5lZChOT19HTVApCiAjICBkZWZpbmUgTk9fR01QCiAjIGVuZGlmCkBAIC04MCw2ICs4OSw5IEBACiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19SRkMzNzc5KSAmJiAhZGVmaW5lZChOT19SRkMzNzc5KQogIyAgZGVmaW5lIE5PX1JGQzM3NzkKICMgZW5kaWYKKyMgaWYgZGVmaW5lZChPUEVOU1NMX05PX1NDVFApICYmICFkZWZpbmVkKE5PX1NDVFApCisjICBkZWZpbmUgTk9fU0NUUAorIyBlbmRpZgogIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fU0VFRCkgJiYgIWRlZmluZWQoTk9fU0VFRCkKICMgIGRlZmluZSBOT19TRUVECiAjIGVuZGlmCmRpZmYgLS1naXQgYS9jcnlwdG8vb3BlbnNzbHYuaCBiL2NyeXB0by9vcGVuc3Nsdi5oCmluZGV4IDY2YTZkMGQuLmJmNDI1NTYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9vcGVuc3Nsdi5oCisrKyBiL2NyeXB0by9vcGVuc3Nsdi5oCkBAIC0yNSwxMSArMjUsMTEgQEAKICAqIChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50IHNjaGVtZSB3YXMgdXNlZDogTU1OTkZGUkJCIGZvcgogICogIG1ham9yIG1pbm9yIGZpeCBmaW5hbCBwYXRjaC9iZXRhKQogICovCi0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDA4ZkwKKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAxMDBmTAogI2lmZGVmIE9QRU5TU0xfRklQUwotI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMGgtZmlwcyAxMiBNYXIgMjAxMiIKKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMS4wLjEtZmlwcyAxNCBNYXIgMjAxMiIKICNlbHNlCi0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4waCAxMiBNYXIgMjAxMiIKKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMS4wLjEgMTQgTWFyIDIwMTIiCiAjZW5kaWYKICNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1BURVhUCSIgcGFydCBvZiAiIE9QRU5TU0xfVkVSU0lPTl9URVhUCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9vc3NsX3R5cC5oIGIvY3J5cHRvL29zc2xfdHlwLmgKaW5kZXggMTJiZDcwMS4uZWE5MjI3ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL29zc2xfdHlwLmgKKysrIGIvY3J5cHRvL29zc2xfdHlwLmgKQEAgLTkxLDEwICs5MSwxMiBAQAogdHlwZWRlZiBzdHJ1Y3QgYXNuMV9zdHJpbmdfc3QgQVNOMV9HRU5FUkFMSVpFRFRJTUU7CiB0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdCBBU04xX1ZJU0lCTEVTVFJJTkc7CiB0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdCBBU04xX1VURjhTVFJJTkc7Cit0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdCBBU04xX1NUUklORzsKIHR5cGVkZWYgaW50IEFTTjFfQk9PTEVBTjsKIHR5cGVkZWYgaW50IEFTTjFfTlVMTDsKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBBU04xX0lURU1fc3QgQVNOMV9JVEVNOwogdHlwZWRlZiBzdHJ1Y3QgYXNuMV9wY3R4X3N0IEFTTjFfUENUWDsKIAogI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCmRpZmYgLS1naXQgYS9jcnlwdG8vcGFyaXNjaWQucGwgYi9jcnlwdG8vcGFyaXNjaWQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3ZWM5YgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9wYXJpc2NpZC5wbApAQCAtMCwwICsxLDIyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsKKwkkTEVWRUwJCT0iMi4wVyI7CisJJFNJWkVfVAkJPTg7CisJJFNUCQk9InN0ZCI7Cit9IGVsc2UgeworCSRMRVZFTAkJPSIxLjEiOworCSRTSVpFX1QJCT00OworCSRTVAkJPSJzdHciOworfQorCiskcnA9IiVyMiI7Ciskc3A9IiVyMzAiOworJHJ2PSIlcjI4IjsKKworJGNvZGU9PDxfX187CisJLkxFVkVMCSRMRVZFTAorCS5TUEFDRQlcJFRFWFRcJAorCS5TVUJTUEEJXCRDT0RFXCQsUVVBRD0wLEFMSUdOPTgsQUNDRVNTPTB4MkMsQ09ERV9PTkxZCisKKwkuRVhQT1JUCU9QRU5TU0xfY3B1aWRfc2V0dXAsRU5UUlkKKwkuQUxJR04JOAorT1BFTlNTTF9jcHVpZF9zZXR1cAorCS5QUk9DCisJLkNBTExJTkZPCU5PX0NBTExTCisJLkVOVFJZCisJYnYJKCRycCkKKwkuRVhJVAorCW5vcAorCS5QUk9DRU5ECisKKwkuRVhQT1JUCU9QRU5TU0xfcmR0c2MsRU5UUlkKKwkuQUxJR04JOAorT1BFTlNTTF9yZHRzYworCS5QUk9DCisJLkNBTExJTkZPCU5PX0NBTExTCisJLkVOVFJZCisJbWZjdGwJJWNyMTYsJHJ2CisJYnYJKCRycCkKKwkuRVhJVAorCW5vcAorCS5QUk9DRU5ECisKKwkuRVhQT1JUCU9QRU5TU0xfd2lwZV9jcHUsRU5UUlkKKwkuQUxJR04JOAorT1BFTlNTTF93aXBlX2NwdQorCS5QUk9DCisJLkNBTExJTkZPCU5PX0NBTExTCisJLkVOVFJZCisJeG9yCQklcjAsJXIwLCVyMQorCWZjcHksZGJsCSVmcjAsJWZyNAorCXhvcgkJJXIwLCVyMCwlcjE5CisJZmNweSxkYmwJJWZyMCwlZnI1CisJeG9yCQklcjAsJXIwLCVyMjAKKwlmY3B5LGRibAklZnIwLCVmcjYKKwl4b3IJCSVyMCwlcjAsJXIyMQorCWZjcHksZGJsCSVmcjAsJWZyNworCXhvcgkJJXIwLCVyMCwlcjIyCisJZmNweSxkYmwJJWZyMCwlZnI4CisJeG9yCQklcjAsJXIwLCVyMjMKKwlmY3B5LGRibAklZnIwLCVmcjkKKwl4b3IJCSVyMCwlcjAsJXIyNAorCWZjcHksZGJsCSVmcjAsJWZyMTAKKwl4b3IJCSVyMCwlcjAsJXIyNQorCWZjcHksZGJsCSVmcjAsJWZyMTEKKwl4b3IJCSVyMCwlcjAsJXIyNgorCWZjcHksZGJsCSVmcjAsJWZyMjIKKwl4b3IJCSVyMCwlcjAsJXIyOQorCWZjcHksZGJsCSVmcjAsJWZyMjMKKwl4b3IJCSVyMCwlcjAsJXIzMQorCWZjcHksZGJsCSVmcjAsJWZyMjQKKwlmY3B5LGRibAklZnIwLCVmcjI1CisJZmNweSxkYmwJJWZyMCwlZnIyNgorCWZjcHksZGJsCSVmcjAsJWZyMjcKKwlmY3B5LGRibAklZnIwLCVmcjI4CisJZmNweSxkYmwJJWZyMCwlZnIyOQorCWZjcHksZGJsCSVmcjAsJWZyMzAKKwlmY3B5LGRibAklZnIwLCVmcjMxCisJYnYJCSgkcnApCisJLkVYSVQKKwlsZG8JCTAoJHNwKSwkcnYKKwkuUFJPQ0VORAorX19fCit7CitteSAkaW5wPSIlcjI2IjsKK215ICRsZW49IiVyMjUiOworCiskY29kZS49PDxfX187CisJLkVYUE9SVAlPUEVOU1NMX2NsZWFuc2UsRU5UUlksQVJHVzA9R1IsQVJHVzE9R1IKKwkuQUxJR04JOAorT1BFTlNTTF9jbGVhbnNlCisJLlBST0MKKwkuQ0FMTElORk8JTk9fQ0FMTFMKKwkuRU5UUlkKKwljbXBpYiwqPQkwLCRsZW4sTGRvbmUKKwlub3AKKwljbXBpYiwqPj49CTE1LCRsZW4sTGl0dGxlCisJbGRpCQkkU0laRV9ULTEsJXIxCisKK0xhbGlnbgorCWFuZCwqPD4JCSRpbnAsJXIxLCVyMjgKKwliLG4JCUxhbGlnbmVkCisJc3RiCQklcjAsMCgkaW5wKQorCWxkbwkJLTEoJGxlbiksJGxlbgorCWIJCUxhbGlnbgorCWxkbwkJMSgkaW5wKSwkaW5wCisKK0xhbGlnbmVkCisJYW5kY20JCSRsZW4sJXIxLCVyMjgKK0xvdAorCSRTVAkJJXIwLDAoJGlucCkKKwlhZGRpYiwqPD4JLSRTSVpFX1QsJXIyOCxMb3QKKwlsZG8JCSRTSVpFX1QoJGlucCksJGlucAorCisJYW5kLCo8PgkJJGxlbiwlcjEsJGxlbgorCWIsbgkJTGRvbmUKK0xpdHRsZQorCXN0YgkJJXIwLDAoJGlucCkKKwlhZGRpYiwqPD4JLTEsJGxlbixMaXR0bGUKKwlsZG8JCTEoJGlucCksJGlucAorTGRvbmUKKwlidgkJKCRycCkKKwkuRVhJVAorCW5vcAorCS5QUk9DRU5ECitfX18KK30KK3sKK215ICgkb3V0LCRjbnQsJG1heCk9KCIlcjI2IiwiJXIyNSIsIiVyMjQiKTsKK215ICgkdGljaywkbGFzdHRpY2spPSgiJXIyMyIsIiVyMjIiKTsKK215ICgkZGlmZiwkbGFzdGRpZmYpPSgiJXIyMSIsIiVyMjAiKTsKKworJGNvZGUuPTw8X19fOworCS5FWFBPUlQJT1BFTlNTTF9pbnN0cnVtZW50X2J1cyxFTlRSWSxBUkdXMD1HUixBUkdXMT1HUgorCS5BTElHTgk4CitPUEVOU1NMX2luc3RydW1lbnRfYnVzCisJLlBST0MKKwkuQ0FMTElORk8JTk9fQ0FMTFMKKwkuRU5UUlkKKwljb3B5CQkkY250LCRydgorCW1mY3RsCQklY3IxNiwkdGljaworCWNvcHkJCSR0aWNrLCRsYXN0dGljaworCWxkaQkJMCwkZGlmZgorCisJZmRjCQkwKCRvdXQpCisJbGR3CQkwKCRvdXQpLCR0aWNrCisJYWRkCQkkZGlmZiwkdGljaywkdGljaworCXN0dwkJJHRpY2ssMCgkb3V0KQorTG9vcAorCW1mY3RsCQklY3IxNiwkdGljaworCXN1YgkJJHRpY2ssJGxhc3R0aWNrLCRkaWZmCisJY29weQkJJHRpY2ssJGxhc3R0aWNrCisKKwlmZGMJCTAoJG91dCkKKwlsZHcJCTAoJG91dCksJHRpY2sKKwlhZGQJCSRkaWZmLCR0aWNrLCR0aWNrCisJc3R3CQkkdGljaywwKCRvdXQpCisKKwlhZGRpYiw8PgktMSwkY250LExvb3AKKwlhZGRpCQk0LCRvdXQsJG91dAorCisJYnYJCSgkcnApCisJLkVYSVQKKwlzdWIJCSRydiwkY250LCRydgorCS5QUk9DRU5ECisKKwkuRVhQT1JUCU9QRU5TU0xfaW5zdHJ1bWVudF9idXMyLEVOVFJZLEFSR1cwPUdSLEFSR1cxPUdSCisJLkFMSUdOCTgKK09QRU5TU0xfaW5zdHJ1bWVudF9idXMyCisJLlBST0MKKwkuQ0FMTElORk8JTk9fQ0FMTFMKKwkuRU5UUlkKKwljb3B5CQkkY250LCRydgorCXN1YgkJJXIwLCRjbnQsJGNudAorCisJbWZjdGwJCSVjcjE2LCR0aWNrCisJY29weQkJJHRpY2ssJGxhc3R0aWNrCisJbGRpCQkwLCRkaWZmCisKKwlmZGMJCTAoJG91dCkKKwlsZHcJCTAoJG91dCksJHRpY2sKKwlhZGQJCSRkaWZmLCR0aWNrLCR0aWNrCisJc3R3CQkkdGljaywwKCRvdXQpCisKKwltZmN0bAkJJWNyMTYsJHRpY2sKKwlzdWIJCSR0aWNrLCRsYXN0dGljaywkZGlmZgorCWNvcHkJCSR0aWNrLCRsYXN0dGljaworTG9vcDIKKwljb3B5CQkkZGlmZiwkbGFzdGRpZmYKKwlmZGMJCTAoJG91dCkKKwlsZHcJCTAoJG91dCksJHRpY2sKKwlhZGQJCSRkaWZmLCR0aWNrLCR0aWNrCisJc3R3CQkkdGljaywwKCRvdXQpCisKKwlhZGRpYiw9CQktMSwkbWF4LExkb25lMgorCW5vcAorCisJbWZjdGwJCSVjcjE2LCR0aWNrCisJc3ViCQkkdGljaywkbGFzdHRpY2ssJGRpZmYKKwljb3B5CQkkdGljaywkbGFzdHRpY2sKKwljbXBjbHIsPD4JJGxhc3RkaWZmLCRkaWZmLCR0aWNrCisJbGRpCQkxLCR0aWNrCisKKwlsZGkJCTEsJXIxCisJeG9yCQklcjEsJHRpY2ssJHRpY2sKKwlhZGRiLDw+CQkkdGljaywkY250LExvb3AyCisJc2hsYWRkLGwJJHRpY2ssMiwkb3V0LCRvdXQKK0xkb25lMgorCWJ2CQkoJHJwKQorCS5FWElUCisJYWRkCQkkcnYsJGNudCwkcnYKKwkuUFJPQ0VORAorX19fCit9CiskY29kZSA9fiBzL2NtcGliLFwqL2NvbWliLC9nbSBpZiAoJFNJWkVfVD09NCk7CiskY29kZSA9fiBzLyxcKi8sL2dtIGlmICgkU0laRV9UPT00KTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOworCmRpZmYgLS1naXQgYS9jcnlwdG8vcGVtL3B2a2ZtdC5jIGIvY3J5cHRvL3BlbS9wdmtmbXQuYwppbmRleCA1ZjEzMGM0Li5iMWJmNzFhIDEwMDY0NAotLS0gYS9jcnlwdG8vcGVtL3B2a2ZtdC5jCisrKyBiL2NyeXB0by9wZW0vcHZrZm10LmMKQEAgLTcwOSwxMyArNzA5LDE2IEBACiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbikKIAl7CiAJRVZQX01EX0NUWCBtY3R4OworCWludCBydiA9IDE7CiAJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLQlFVlBfRGlnZXN0SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCk7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmbWN0eCwgc2FsdCwgc2FsdGxlbik7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmbWN0eCwgcGFzcywgcGFzc2xlbik7Ci0JRVZQX0RpZ2VzdEZpbmFsX2V4KCZtY3R4LCBrZXksIE5VTEwpOworCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpCisJCXx8ICFFVlBfRGlnZXN0VXBkYXRlKCZtY3R4LCBzYWx0LCBzYWx0bGVuKQorCQl8fCAhRVZQX0RpZ2VzdFVwZGF0ZSgmbWN0eCwgcGFzcywgcGFzc2xlbikKKwkJfHwgIUVWUF9EaWdlc3RGaW5hbF9leCgmbWN0eCwga2V5LCBOVUxMKSkKKwkJCXJ2ID0gMDsKKwogCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIHJ2OwogCX0KIAkKIApAQCAtNzI3LDExICs3MzAsMTIgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKmluOwogCXVuc2lnbmVkIGludCBtYWdpYzsKIAl1bnNpZ25lZCBjaGFyICplbmN0bXAgPSBOVUxMLCAqcTsKKwlFVlBfQ0lQSEVSX0NUWCBjY3R4OworCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmNjdHgpOwogCWlmIChzYWx0bGVuKQogCQl7CiAJCWNoYXIgcHNidWZbUEVNX0JVRlNJWkVdOwogCQl1bnNpZ25lZCBjaGFyIGtleWJ1ZlsyMF07Ci0JCUVWUF9DSVBIRVJfQ1RYIGNjdHg7CiAJCWludCBlbmN0bXBsZW4sIGlubGVuOwogCQlpZiAoY2IpCiAJCQlpbmxlbj1jYihwc2J1ZixQRU1fQlVGU0laRSwwLHUpOwpAQCAtNzU3LDM3ICs3NjEsNDEgQEAKIAkJcCArPSA4OwogCQlpbmxlbiA9IGtleWxlbiAtIDg7CiAJCXEgPSBlbmN0bXAgKyA4OwotCQlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjY3R4KTsKLQkJRVZQX0RlY3J5cHRJbml0X2V4KCZjY3R4LCBFVlBfcmM0KCksIE5VTEwsIGtleWJ1ZiwgTlVMTCk7Ci0JCUVWUF9EZWNyeXB0VXBkYXRlKCZjY3R4LCBxLCAmZW5jdG1wbGVuLCBwLCBpbmxlbik7Ci0JCUVWUF9EZWNyeXB0RmluYWxfZXgoJmNjdHgsIHEgKyBlbmN0bXBsZW4sICZlbmN0bXBsZW4pOworCQlpZiAoIUVWUF9EZWNyeXB0SW5pdF9leCgmY2N0eCwgRVZQX3JjNCgpLCBOVUxMLCBrZXlidWYsIE5VTEwpKQorCQkJZ290byBlcnI7CisJCWlmICghRVZQX0RlY3J5cHRVcGRhdGUoJmNjdHgsIHEsICZlbmN0bXBsZW4sIHAsIGlubGVuKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoIUVWUF9EZWNyeXB0RmluYWxfZXgoJmNjdHgsIHEgKyBlbmN0bXBsZW4sICZlbmN0bXBsZW4pKQorCQkJZ290byBlcnI7CiAJCW1hZ2ljID0gcmVhZF9sZWR3b3JkKChjb25zdCB1bnNpZ25lZCBjaGFyICoqKSZxKTsKIAkJaWYgKG1hZ2ljICE9IE1TX1JTQTJNQUdJQyAmJiBtYWdpYyAhPSBNU19EU1MyTUFHSUMpCiAJCQl7CiAJCQlxID0gZW5jdG1wICsgODsKIAkJCW1lbXNldChrZXlidWYgKyA1LCAwLCAxMSk7Ci0JCQlFVlBfRGVjcnlwdEluaXRfZXgoJmNjdHgsIEVWUF9yYzQoKSwgTlVMTCwga2V5YnVmLAotCQkJCQkJCQlOVUxMKTsKKwkJCWlmICghRVZQX0RlY3J5cHRJbml0X2V4KCZjY3R4LCBFVlBfcmM0KCksIE5VTEwsIGtleWJ1ZiwKKwkJCQkJCQkJTlVMTCkpCisJCQkJZ290byBlcnI7CiAJCQlPUEVOU1NMX2NsZWFuc2Uoa2V5YnVmLCAyMCk7Ci0JCQlFVlBfRGVjcnlwdFVwZGF0ZSgmY2N0eCwgcSwgJmVuY3RtcGxlbiwgcCwgaW5sZW4pOwotCQkJRVZQX0RlY3J5cHRGaW5hbF9leCgmY2N0eCwgcSArIGVuY3RtcGxlbiwKLQkJCQkJCQkJJmVuY3RtcGxlbik7CisJCQlpZiAoIUVWUF9EZWNyeXB0VXBkYXRlKCZjY3R4LCBxLCAmZW5jdG1wbGVuLCBwLCBpbmxlbikpCisJCQkJZ290byBlcnI7CisJCQlpZiAoIUVWUF9EZWNyeXB0RmluYWxfZXgoJmNjdHgsIHEgKyBlbmN0bXBsZW4sCisJCQkJCQkJCSZlbmN0bXBsZW4pKQorCQkJCWdvdG8gZXJyOwogCQkJbWFnaWMgPSByZWFkX2xlZHdvcmQoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopJnEpOwogCQkJaWYgKG1hZ2ljICE9IE1TX1JTQTJNQUdJQyAmJiBtYWdpYyAhPSBNU19EU1MyTUFHSUMpCiAJCQkJewotCQkJCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmNjdHgpOwogCQkJCVBFTWVycihQRU1fRl9ET19QVktfQk9EWSwgUEVNX1JfQkFEX0RFQ1JZUFQpOwogCQkJCWdvdG8gZXJyOwogCQkJCX0KIAkJCX0KIAkJZWxzZQogCQkJT1BFTlNTTF9jbGVhbnNlKGtleWJ1ZiwgMjApOwotCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjY3R4KTsKIAkJcCA9IGVuY3RtcDsKIAkJfQogCiAJcmV0ID0gYjJpX1ByaXZhdGVLZXkoJnAsIGtleWxlbik7CiAJZXJyOgorCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmNjdHgpOwogCWlmIChlbmN0bXAgJiYgc2FsdGxlbikKIAkJT1BFTlNTTF9mcmVlKGVuY3RtcCk7CiAJcmV0dXJuIHJldDsKQEAgLTg0MSw2ICs4NDksOCBAQAogCXsKIAlpbnQgb3V0bGVuID0gMjQsIHBrbGVuOwogCXVuc2lnbmVkIGNoYXIgKnAsICpzYWx0ID0gTlVMTDsKKwlFVlBfQ0lQSEVSX0NUWCBjY3R4OworCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmNjdHgpOwogCWlmIChlbmNsZXZlbCkKIAkJb3V0bGVuICs9IFBWS19TQUxUTEVOOwogCXBrbGVuID0gZG9faTJiKE5VTEwsIHBrLCAwKTsKQEAgLTg4NSw3ICs4OTUsNiBAQAogCQl7CiAJCWNoYXIgcHNidWZbUEVNX0JVRlNJWkVdOwogCQl1bnNpZ25lZCBjaGFyIGtleWJ1ZlsyMF07Ci0JCUVWUF9DSVBIRVJfQ1RYIGNjdHg7CiAJCWludCBlbmN0bXBsZW4sIGlubGVuOwogCQlpZiAoY2IpCiAJCQlpbmxlbj1jYihwc2J1ZixQRU1fQlVGU0laRSwxLHUpOwpAQCAtOTAyLDE2ICs5MTEsMTkgQEAKIAkJaWYgKGVuY2xldmVsID09IDEpCiAJCQltZW1zZXQoa2V5YnVmICsgNSwgMCwgMTEpOwogCQlwID0gc2FsdCArIFBWS19TQUxUTEVOICsgODsKLQkJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY2N0eCk7Ci0JCUVWUF9FbmNyeXB0SW5pdF9leCgmY2N0eCwgRVZQX3JjNCgpLCBOVUxMLCBrZXlidWYsIE5VTEwpOworCQlpZiAoIUVWUF9FbmNyeXB0SW5pdF9leCgmY2N0eCwgRVZQX3JjNCgpLCBOVUxMLCBrZXlidWYsIE5VTEwpKQorCQkJZ290byBlcnJvcjsKIAkJT1BFTlNTTF9jbGVhbnNlKGtleWJ1ZiwgMjApOwotCQlFVlBfRGVjcnlwdFVwZGF0ZSgmY2N0eCwgcCwgJmVuY3RtcGxlbiwgcCwgcGtsZW4gLSA4KTsKLQkJRVZQX0RlY3J5cHRGaW5hbF9leCgmY2N0eCwgcCArIGVuY3RtcGxlbiwgJmVuY3RtcGxlbik7Ci0JCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmNjdHgpOworCQlpZiAoIUVWUF9EZWNyeXB0VXBkYXRlKCZjY3R4LCBwLCAmZW5jdG1wbGVuLCBwLCBwa2xlbiAtIDgpKQorCQkJZ290byBlcnJvcjsKKwkJaWYgKCFFVlBfRGVjcnlwdEZpbmFsX2V4KCZjY3R4LCBwICsgZW5jdG1wbGVuLCAmZW5jdG1wbGVuKSkKKwkJCWdvdG8gZXJyb3I7CiAJCX0KKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjY3R4KTsKIAlyZXR1cm4gb3V0bGVuOwogCiAJZXJyb3I6CisJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY2N0eCk7CiAJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Blcmxhc20vcHBjLXhsYXRlLnBsIGIvY3J5cHRvL3Blcmxhc20vcHBjLXhsYXRlLnBsCmluZGV4IDQ1Nzk2NzEuLmEzZWRkOTggMTAwNzU1Ci0tLSBhL2NyeXB0by9wZXJsYXNtL3BwYy14bGF0ZS5wbAorKysgYi9jcnlwdG8vcGVybGFzbS9wcGMteGxhdGUucGwKQEAgLTMxLDEwICszMSw5IEBACiAJCQkJJHJldCAuPSAiLnR5cGUJJG5hbWUsXEBmdW5jdGlvbiI7CiAJCQkJbGFzdDsKIAkJCSAgICAgIH07Ci0JL2xpbnV4Lio2NC8JJiYgZG8gewkkcmV0IC49ICIuZ2xvYmwJLiRuYW1lXG4iOwotCQkJCSRyZXQgLj0gIi50eXBlCS4kbmFtZSxcQGZ1bmN0aW9uXG4iOworCS9saW51eC4qNjQvCSYmIGRvIHsJJHJldCAuPSAiLmdsb2JsCSRuYW1lXG4iOworCQkJCSRyZXQgLj0gIi50eXBlCSRuYW1lLFxAZnVuY3Rpb25cbiI7CiAJCQkJJHJldCAuPSAiLnNlY3Rpb24JXCIub3BkXCIsXCJhd1wiXG4iOwotCQkJCSRyZXQgLj0gIi5nbG9ibAkkbmFtZVxuIjsKIAkJCQkkcmV0IC49ICIuYWxpZ24JM1xuIjsKIAkJCQkkcmV0IC49ICIkbmFtZTpcbiI7CiAJCQkJJHJldCAuPSAiLnF1YWQJLiRuYW1lLC5UT0MuXEB0b2NiYXNlLDBcbiI7CkBAIC02Miw2ICs2MSwxNCBAQAogICAgIH0KICAgICAiLm1hY2hpbmUJJGFyY2giOwogfTsKK215ICRzaXplID0gc3ViIHsKKyAgICBpZiAoJGZsYXZvdXIgPX4gL2xpbnV4LiozMi8pCisgICAgewlzaGlmdDsKKwkiLnNpemUJIiAuIGpvaW4oIiwiLEBfKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsJIiI7CX0KK307CiBteSAkYXNjaXogPSBzdWIgewogICAgIHNoaWZ0OwogICAgIG15ICRsaW5lID0gam9pbigiLCIsQF8pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGIvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCmluZGV4IDY3NGRhM2IuLjU2ZDliNjQgMTAwNzU1Ci0tLSBhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorKysgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKQEAgLTYyLDEyICs2Miw4IEBACiBteSAkb3V0cHV0ICA9IHNoaWZ0OwogaWYgKCRmbGF2b3VyID1+IC9cLi8pIHsgJG91dHB1dCA9ICRmbGF2b3VyOyB1bmRlZiAkZmxhdm91cjsgfQogCi17IG15ICgkc3RkZGV2LCRzdGRpbm8sQGp1bmspPXN0YXQoU1RET1VUKTsKLSAgbXkgKCRvdXRkZXYsJG91dGlubyxAanVuayk9c3RhdCgkb3V0cHV0KTsKLQotICAgIG9wZW4gU1RET1VULCI+JG91dHB1dCIgfHwgZGllICJjYW4ndCBvcGVuICRvdXRwdXQ6ICQhIgotCWlmICgkc3RkZGV2IT0kb3V0ZGV2IHx8ICRzdGRpbm8hPSRvdXRpbm8pOwotfQorb3BlbiBTVERPVVQsIj4kb3V0cHV0IiB8fCBkaWUgImNhbid0IG9wZW4gJG91dHB1dDogJCEiCisJaWYgKGRlZmluZWQoJG91dHB1dCkpOwogCiBteSAkZ2FzPTE7CSRnYXM9MCBpZiAoJG91dHB1dCA9fiAvXC5hc20kLyk7CiBteSAkZWxmPTE7CSRlbGY9MCBpZiAoISRnYXMpOwpAQCAtMTE2LDEyICsxMTIsMTYgQEAKIAkgICAgJGxpbmUgPSBzdWJzdHIoJGxpbmUsQCtbMF0pOyAkbGluZSA9fiBzL15ccysvLzsKIAogCSAgICB1bmRlZiAkc2VsZi0+e3N6fTsKLQkgICAgaWYgKCRzZWxmLT57b3B9ID1+IC9eKG1vdnopYi4qLykgewkjIG1vdnogaXMgcGFpbi4uLgorCSAgICBpZiAoJHNlbGYtPntvcH0gPX4gL14obW92eil4PyhbYnddKS4qLykgewkjIG1vdnogaXMgcGFpbi4uLgogCQkkc2VsZi0+e29wfSA9ICQxOwotCQkkc2VsZi0+e3N6fSA9ICJiIjsKKwkJJHNlbGYtPntzen0gPSAkMjsKIAkgICAgfSBlbHNpZiAoJHNlbGYtPntvcH0gPX4gL2NhbGx8am1wLykgewogCQkkc2VsZi0+e3N6fSA9ICIiOwotCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvXnAvICYmICQnICF+IC9eKHVzaHxvcCkvKSB7ICMgU1NFbgorCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvXnAvICYmICQnICF+IC9eKHVzaHxvcHxpbnNydykvKSB7ICMgU1NFbgorCQkkc2VsZi0+e3N6fSA9ICIiOworCSAgICB9IGVsc2lmICgkc2VsZi0+e29wfSA9fiAvXnYvKSB7ICMgVkVYCisJCSRzZWxmLT57c3p9ID0gIiI7CisJICAgIH0gZWxzaWYgKCRzZWxmLT57b3B9ID1+IC9tb3ZxLyAmJiAkbGluZSA9fiAvJXhtbS8pIHsKIAkJJHNlbGYtPntzen0gPSAiIjsKIAkgICAgfSBlbHNpZiAoJHNlbGYtPntvcH0gPX4gLyhbYS16XXszLH0pKFtxbHdiXSkkLykgewogCQkkc2VsZi0+e29wfSA9ICQxOwpAQCAtMjQ2LDM1ICsyNDYsMzkgQEAKIAkkc2VsZi0+e2luZGV4fSA9fiBzL15bZXJdKC4/WzAtOXhwaV0pW2RdPyQvclwxLzsKIAkkc2VsZi0+e2Jhc2V9ICA9fiBzL15bZXJdKC4/WzAtOXhwaV0pW2RdPyQvclwxLzsKIAorCSMgU29sYXJpcyAvdXNyL2Njcy9iaW4vYXMgY2FuJ3QgaGFuZGxlIG11bHRpcGxpY2F0aW9ucworCSMgaW4gJHNlbGYtPntsYWJlbH0sIG5ldyBnYXMgcmVxdWlyZXMgc2lnbiBleHRlbnNpb24uLi4KKwl1c2UgaW50ZWdlcjsKKwkkc2VsZi0+e2xhYmVsfSA9fiBzLyg/PCFbXHdcJFwuXSkoMHg/WzAtOWEtZl0rKS9vY3QoJDEpL2VnaTsKKwkkc2VsZi0+e2xhYmVsfSA9fiBzLyhbMC05XStccypbXCpcL1wlXVxzKlswLTldKykvZXZhbCgkMSkvZWc7CisJJHNlbGYtPntsYWJlbH0gPX4gcy8oWzAtOV0rKS8kMTw8MzI+PjMyL2VnOworCiAJaWYgKCRnYXMpIHsKLQkgICAgIyBTb2xhcmlzIC91c3IvY2NzL2Jpbi9hcyBjYW4ndCBoYW5kbGUgbXVsdGlwbGljYXRpb25zCi0JICAgICMgaW4gJHNlbGYtPntsYWJlbH0sIG5ldyBnYXMgcmVxdWlyZXMgc2lnbiBleHRlbnNpb24uLi4KLQkgICAgdXNlIGludGVnZXI7Ci0JICAgICRzZWxmLT57bGFiZWx9ID1+IHMvKD88IVtcd1wkXC5dKSgweD9bMC05YS1mXSspL29jdCgkMSkvZWdpOwotCSAgICAkc2VsZi0+e2xhYmVsfSA9fiBzLyhbMC05XStccypbXCpcL1wlXVxzKlswLTldKykvZXZhbCgkMSkvZWc7Ci0JICAgICRzZWxmLT57bGFiZWx9ID1+IHMvKFswLTldKykvJDE8PDMyPj4zMi9lZzsKIAkgICAgJHNlbGYtPntsYWJlbH0gPX4gcy9eX19faW1wXy9fX2ltcF9fLyAgIGlmICgkZmxhdm91ciBlcSAibWluZ3c2NCIpOwogCiAJICAgIGlmIChkZWZpbmVkKCRzZWxmLT57aW5kZXh9KSkgewotCQlzcHJpbnRmICIlcyVzKCUlJXMsJSUlcywlZCkiLCRzZWxmLT57YXN0ZXJpc2t9LAotCQkJCQkkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9LAorCQlzcHJpbnRmICIlcyVzKCVzLCUlJXMsJWQpIiwkc2VsZi0+e2FzdGVyaXNrfSwKKwkJCQkJJHNlbGYtPntsYWJlbH0sCisJCQkJCSRzZWxmLT57YmFzZX0/IiUkc2VsZi0+e2Jhc2V9IjoiIiwKIAkJCQkJJHNlbGYtPntpbmRleH0sJHNlbGYtPntzY2FsZX07CiAJICAgIH0gZWxzZSB7CiAJCXNwcmludGYgIiVzJXMoJSUlcykiLAkkc2VsZi0+e2FzdGVyaXNrfSwkc2VsZi0+e2xhYmVsfSwkc2VsZi0+e2Jhc2V9OwogCSAgICB9CiAJfSBlbHNlIHsKLQkgICAgJXN6bWFwID0gKCBiPT4iQllURSRQVFIiLCB3PT4iV09SRCRQVFIiLCBsPT4iRFdPUkQkUFRSIiwgcT0+IlFXT1JEJFBUUiIgKTsKKwkgICAgJXN6bWFwID0gKAliPT4iQllURSRQVFIiLCB3PT4iV09SRCRQVFIiLCBsPT4iRFdPUkQkUFRSIiwKKwkgICAgCQlxPT4iUVdPUkQkUFRSIixvPT4iT1dPUkQkUFRSIix4PT4iWE1NV09SRCRQVFIiICk7CiAKIAkgICAgJHNlbGYtPntsYWJlbH0gPX4gcy9cLi9cJC9nOwogCSAgICAkc2VsZi0+e2xhYmVsfSA9fiBzLyg/PCFbXHdcJFwuXSkweChbMC05YS1mXSspLzAkMWgvaWc7CiAJICAgICRzZWxmLT57bGFiZWx9ID0gIigkc2VsZi0+e2xhYmVsfSkiIGlmICgkc2VsZi0+e2xhYmVsfSA9fiAvW1wqXCtcLVwvXS8pOwotCSAgICAkc3o9InEiIGlmICgkc2VsZi0+e2FzdGVyaXNrfSk7CisJICAgICRzej0icSIgaWYgKCRzZWxmLT57YXN0ZXJpc2t9IHx8IG9wY29kZS0+bW5lbW9uaWMoKSBlcSAibW92cSIpOworCSAgICAkc3o9ImwiIGlmIChvcGNvZGUtPm1uZW1vbmljKCkgZXEgIm1vdmQiKTsKIAogCSAgICBpZiAoZGVmaW5lZCgkc2VsZi0+e2luZGV4fSkpIHsKLQkJc3ByaW50ZiAiJXNbJXMlcyolZCslc10iLCRzem1hcHskc3p9LAorCQlzcHJpbnRmICIlc1slcyVzKiVkJXNdIiwkc3ptYXB7JHN6fSwKIAkJCQkJJHNlbGYtPntsYWJlbH0/IiRzZWxmLT57bGFiZWx9KyI6IiIsCiAJCQkJCSRzZWxmLT57aW5kZXh9LCRzZWxmLT57c2NhbGV9LAotCQkJCQkkc2VsZi0+e2Jhc2V9OworCQkJCQkkc2VsZi0+e2Jhc2V9PyIrJHNlbGYtPntiYXNlfSI6IiI7CiAJICAgIH0gZWxzaWYgKCRzZWxmLT57YmFzZX0gZXEgInJpcCIpIHsKIAkJc3ByaW50ZiAiJXNbJXNdIiwkc3ptYXB7JHN6fSwkc2VsZi0+e2xhYmVsfTsKIAkgICAgfSBlbHNlIHsKQEAgLTUwNiw2ICs1MTAsMTIgQEAKIAkJICAgIH0KIAkJfSBlbHNpZiAoJGRpciA9fiAvXC4odGV4dHxkYXRhKS8pIHsKIAkJICAgICRjdXJyZW50X3NlZ21lbnQ9Ii4kMSI7CisJCX0gZWxzaWYgKCRkaXIgPX4gL1wuaGlkZGVuLykgeworCQkgICAgaWYgICAgKCRmbGF2b3VyIGVxICJtYWNvc3giKSAgeyAkc2VsZi0+e3ZhbHVlfSA9ICIucHJpdmF0ZV9leHRlcm5cdCRwcmVmaXgkbGluZSI7IH0KKwkJICAgIGVsc2lmICgkZmxhdm91ciBlcSAibWluZ3c2NCIpIHsgJHNlbGYtPnt2YWx1ZX0gPSAiIjsgfQorCQl9IGVsc2lmICgkZGlyID1+IC9cLmNvbW0vKSB7CisJCSAgICAkc2VsZi0+e3ZhbHVlfSA9ICIkZGlyXHQkcHJlZml4JGxpbmUiOworCQkgICAgJHNlbGYtPnt2YWx1ZX0gPX4gc3wsKFswLTldKyksKFswLTldKykkfCIsJDEsIi5sb2coJDIpL2xvZygyKXxlIGlmICgkZmxhdm91ciBlcSAibWFjb3N4Iik7CiAJCX0KIAkJJGxpbmUgPSAiIjsKIAkJcmV0dXJuICRzZWxmOwpAQCAtNTc4LDcgKzU4OCw3IEBACiAJCQkJCSAgICAkc2VsZi0+e3ZhbHVlfT0iJHtkZWNvcn1TRUhfZW5kXyRjdXJyZW50X2Z1bmN0aW9uLT57bmFtZX06IjsKIAkJCQkJICAgICRzZWxmLT57dmFsdWV9Lj0iOlxuIiBpZigkbWFzbSk7CiAJCQkJCX0KLQkJCQkJJHNlbGYtPnt2YWx1ZX0uPSIkY3VycmVudF9mdW5jdGlvbi0+e25hbWV9XHRFTkRQIiBpZigkbWFzbSk7CisJCQkJCSRzZWxmLT57dmFsdWV9Lj0iJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfVx0RU5EUCIgaWYoJG1hc20gJiYgJGN1cnJlbnRfZnVuY3Rpb24tPntuYW1lfSk7CiAJCQkJCXVuZGVmICRjdXJyZW50X2Z1bmN0aW9uOwogCQkJCSAgICB9CiAJCQkJICAgIGxhc3Q7CkBAIC02MTQsNiArNjI0LDE5IEBACiAJCQkJCQkuam9pbigiLCIsQHN0cikgaWYgKEBzdHIpOwogCQkJCSAgICBsYXN0OwogCQkJCSAgfTsKKwkJL1wuY29tbS8gICAgJiYgZG8geyBteSBAc3RyPXNwbGl0KC8sXHMqLywkbGluZSk7CisJCQkJICAgIG15ICR2PXVuZGVmOworCQkJCSAgICBpZiAoJG5hc20pIHsKKwkJCQkJJHYuPSJjb21tb24JJHByZWZpeEBzdHJbMF0gQHN0clsxXSI7CisJCQkJICAgIH0gZWxzZSB7CisJCQkJCSR2PSIkY3VycmVudF9zZWdtZW50XHRFTkRTXG4iIGlmICgkY3VycmVudF9zZWdtZW50KTsKKwkJCQkJJGN1cnJlbnRfc2VnbWVudCA9ICJfREFUQSI7CisJCQkJCSR2Lj0iJGN1cnJlbnRfc2VnbWVudFx0U0VHTUVOVFxuIjsKKwkJCQkJJHYuPSJDT01NCUBzdHJbMF06RFdPUkQ6Ii5Ac3RyWzFdLzQ7CisJCQkJICAgIH0KKwkJCQkgICAgJHNlbGYtPnt2YWx1ZX0gPSAkdjsKKwkJCQkgICAgbGFzdDsKKwkJCQkgIH07CiAJICAgIH0KIAkgICAgJGxpbmUgPSAiIjsKIAl9CkBAIC02MjYsOSArNjQ5LDEzMyBAQAogICAgIH0KIH0KIAorc3ViIHJleCB7CisgbG9jYWwgKm9wY29kZT1zaGlmdDsKKyBteSAoJGRzdCwkc3JjLCRyZXgpPUBfOworCisgICAkcmV4fD0weDA0IGlmKCRkc3Q+PTgpOworICAgJHJleHw9MHgwMSBpZigkc3JjPj04KTsKKyAgIHB1c2ggQG9wY29kZSwoJHJleHwweDQwKSBpZiAoJHJleCk7Cit9CisKKyMgb2xkZXIgZ2FzIGFuZCBtbDY0IGRvbid0IGhhbmRsZSBTU0U+MiBpbnN0cnVjdGlvbnMKK215ICVyZWdybSA9ICgJIiVlYXgiPT4wLCAiJWVjeCI9PjEsICIlZWR4Ij0+MiwgIiVlYngiPT4zLAorCQkiJWVzcCI9PjQsICIlZWJwIj0+NSwgIiVlc2kiPT42LCAiJWVkaSI9PjcJKTsKKworbXkgJG1vdnEgPSBzdWIgewkjIGVsZGVybHkgZ2FzIGNhbid0IGhhbmRsZSBpbnRlci1yZWdpc3RlciBtb3ZxCisgIG15ICRhcmcgPSBzaGlmdDsKKyAgbXkgQG9wY29kZT0oMHg2Nik7CisgICAgaWYgKCRhcmcgPX4gLyV4bW0oWzAtOV0rKSxccyolcihcdyspLykgeworCW15ICgkc3JjLCRkc3QpPSgkMSwkMik7CisJaWYgKCRkc3QgIX4gL1swLTldKy8pCXsgJGRzdCA9ICRyZWdybXsiJWUkZHN0In07IH0KKwlyZXgoXEBvcGNvZGUsJHNyYywkZHN0LDB4OCk7CisJcHVzaCBAb3Bjb2RlLDB4MGYsMHg3ZTsKKwlwdXNoIEBvcGNvZGUsMHhjMHwoKCRzcmMmNyk8PDMpfCgkZHN0JjcpOwkjIE1vZFIvTQorCUBvcGNvZGU7CisgICAgfSBlbHNpZiAoJGFyZyA9fiAvJXIoXHcrKSxccyoleG1tKFswLTldKykvKSB7CisJbXkgKCRzcmMsJGRzdCk9KCQyLCQxKTsKKwlpZiAoJGRzdCAhfiAvWzAtOV0rLykJeyAkZHN0ID0gJHJlZ3JteyIlZSRkc3QifTsgfQorCXJleChcQG9wY29kZSwkc3JjLCRkc3QsMHg4KTsKKwlwdXNoIEBvcGNvZGUsMHgwZiwweDZlOworCXB1c2ggQG9wY29kZSwweGMwfCgoJHNyYyY3KTw8Myl8KCRkc3QmNyk7CSMgTW9kUi9NCisJQG9wY29kZTsKKyAgICB9IGVsc2UgeworCSgpOworICAgIH0KK307CisKK215ICRwZXh0cmQgPSBzdWIgeworICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSxccyoleG1tKFswLTldKyksXHMqKCVcdyspLykgeworICAgICAgbXkgQG9wY29kZT0oMHg2Nik7CisJJGltbT0kMTsKKwkkc3JjPSQyOworCSRkc3Q9JDM7CisJaWYgKCRkc3QgPX4gLyVyKFswLTldKylkLykJeyAkZHN0ID0gJDE7IH0KKwllbHNpZiAoJGRzdCA9fiAvJWUvKQkJeyAkZHN0ID0gJHJlZ3JteyRkc3R9OyB9CisJcmV4KFxAb3Bjb2RlLCRzcmMsJGRzdCk7CisJcHVzaCBAb3Bjb2RlLDB4MGYsMHgzYSwweDE2OworCXB1c2ggQG9wY29kZSwweGMwfCgoJHNyYyY3KTw8Myl8KCRkc3QmNyk7CSMgTW9kUi9NCisJcHVzaCBAb3Bjb2RlLCRpbW07CisJQG9wY29kZTsKKyAgICB9IGVsc2UgeworCSgpOworICAgIH0KK307CisKK215ICRwaW5zcmQgPSBzdWIgeworICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSxccyooJVx3KyksXHMqJXhtbShbMC05XSspLykgeworICAgICAgbXkgQG9wY29kZT0oMHg2Nik7CisJJGltbT0kMTsKKwkkc3JjPSQyOworCSRkc3Q9JDM7CisJaWYgKCRzcmMgPX4gLyVyKFswLTldKykvKQl7ICRzcmMgPSAkMTsgfQorCWVsc2lmICgkc3JjID1+IC8lZS8pCQl7ICRzcmMgPSAkcmVncm17JHNyY307IH0KKwlyZXgoXEBvcGNvZGUsJGRzdCwkc3JjKTsKKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4MjI7CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCgkZHN0JjcpPDwzKXwoJHNyYyY3KTsJIyBNb2RSL00KKwlwdXNoIEBvcGNvZGUsJGltbTsKKwlAb3Bjb2RlOworICAgIH0gZWxzZSB7CisJKCk7CisgICAgfQorfTsKKworbXkgJHBzaHVmYiA9IHN1YiB7CisgICAgaWYgKHNoaWZ0ID1+IC8leG1tKFswLTldKyksXHMqJXhtbShbMC05XSspLykgeworICAgICAgbXkgQG9wY29kZT0oMHg2Nik7CisJcmV4KFxAb3Bjb2RlLCQyLCQxKTsKKwlwdXNoIEBvcGNvZGUsMHgwZiwweDM4LDB4MDA7CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCQxJjcpfCgoJDImNyk8PDMpOwkJIyBNb2RSL00KKwlAb3Bjb2RlOworICAgIH0gZWxzZSB7CisJKCk7CisgICAgfQorfTsKKworbXkgJHBhbGlnbnIgPSBzdWIgeworICAgIGlmIChzaGlmdCA9fiAvXCQoWzAtOV0rKSxccyoleG1tKFswLTldKyksXHMqJXhtbShbMC05XSspLykgeworICAgICAgbXkgQG9wY29kZT0oMHg2Nik7CisJcmV4KFxAb3Bjb2RlLCQzLCQyKTsKKwlwdXNoIEBvcGNvZGUsMHgwZiwweDNhLDB4MGY7CisJcHVzaCBAb3Bjb2RlLDB4YzB8KCQyJjcpfCgoJDMmNyk8PDMpOwkJIyBNb2RSL00KKwlwdXNoIEBvcGNvZGUsJDE7CisJQG9wY29kZTsKKyAgICB9IGVsc2UgeworCSgpOworICAgIH0KK307CisKK215ICRwY2xtdWxxZHEgPSBzdWIgeworICAgIGlmIChzaGlmdCA9fiAvXCQoW3gwLTlhLWZdKyksXHMqJXhtbShbMC05XSspLFxzKiV4bW0oWzAtOV0rKS8pIHsKKyAgICAgIG15IEBvcGNvZGU9KDB4NjYpOworCXJleChcQG9wY29kZSwkMywkMik7CisJcHVzaCBAb3Bjb2RlLDB4MGYsMHgzYSwweDQ0OworCXB1c2ggQG9wY29kZSwweGMwfCgkMiY3KXwoKCQzJjcpPDwzKTsJCSMgTW9kUi9NCisJbXkgJGM9JDE7CisJcHVzaCBAb3Bjb2RlLCRjPX4vXjAvP29jdCgkYyk6JGM7CisJQG9wY29kZTsKKyAgICB9IGVsc2UgeworCSgpOworICAgIH0KK307CisKK215ICRyZHJhbmQgPSBzdWIgeworICAgIGlmIChzaGlmdCA9fiAvJVtlcl0oXHcrKS8pIHsKKyAgICAgIG15IEBvcGNvZGU9KCk7CisgICAgICBteSAkZHN0PSQxOworCWlmICgkZHN0ICF+IC9bMC05XSsvKSB7ICRkc3QgPSAkcmVncm17IiVlJGRzdCJ9OyB9CisJcmV4KFxAb3Bjb2RlLDAsJDEsOCk7CisJcHVzaCBAb3Bjb2RlLDB4MGYsMHhjNywweGYwfCgkZHN0JjcpOworCUBvcGNvZGU7CisgICAgfSBlbHNlIHsKKwkoKTsKKyAgICB9Cit9OworCiBpZiAoJG5hc20pIHsKICAgICBwcmludCA8PF9fXzsKIGRlZmF1bHQJcmVsCislZGVmaW5lIFhNTVdPUkQKIF9fXwogfSBlbHNpZiAoJG1hc20pIHsKICAgICBwcmludCA8PF9fXzsKQEAgLTY0NSwxNCArNzkyLDIyIEBACiAKICAgICB1bmRlZiAkbGFiZWw7CiAgICAgdW5kZWYgJG9wY29kZTsKLSAgICB1bmRlZiAkc3o7CiAgICAgdW5kZWYgQGFyZ3M7CiAKICAgICBpZiAoJGxhYmVsPWxhYmVsLT5yZShcJGxpbmUpKQl7IHByaW50ICRsYWJlbC0+b3V0KCk7IH0KIAogICAgIGlmIChkaXJlY3RpdmUtPnJlKFwkbGluZSkpIHsKIAlwcmludGYgIiVzIixkaXJlY3RpdmUtPm91dCgpOwotICAgIH0gZWxzaWYgKCRvcGNvZGU9b3Bjb2RlLT5yZShcJGxpbmUpKSB7IEFSR1VNRU5UOiB3aGlsZSAoMSkgeworICAgIH0gZWxzaWYgKCRvcGNvZGU9b3Bjb2RlLT5yZShcJGxpbmUpKSB7CisJbXkgJGFzbSA9IGV2YWwoIlwkIi4kb3Bjb2RlLT5tbmVtb25pYygpKTsKKwl1bmRlZiBAYnl0ZXM7CisJCisJaWYgKChyZWYoJGFzbSkgZXEgJ0NPREUnKSAmJiBzY2FsYXIoQGJ5dGVzPSYkYXNtKCRsaW5lKSkpIHsKKwkgICAgcHJpbnQgJGdhcz8iLmJ5dGVcdCI6IkRCXHQiLGpvaW4oJywnLEBieXRlcyksIlxuIjsKKwkgICAgbmV4dDsKKwl9CisKKwlBUkdVTUVOVDogd2hpbGUgKDEpIHsKIAlteSAkYXJnOwogCiAJaWYgKCRhcmc9cmVnaXN0ZXItPnJlKFwkbGluZSkpCXsgb3Bjb2RlLT5zaXplKCRhcmctPnNpemUoKSk7IH0KQEAgLTY2OCwxOSArODIzLDI2IEBACiAJJGxpbmUgPX4gcy9eLFxzKi8vOwogCX0gIyBBUkdVTUVOVDoKIAotCSRzej1vcGNvZGUtPnNpemUoKTsKLQogCWlmICgkI2FyZ3M+PTApIHsKIAkgICAgbXkgJGluc247CisJICAgIG15ICRzej1vcGNvZGUtPnNpemUoKTsKKwogCSAgICBpZiAoJGdhcykgewogCQkkaW5zbiA9ICRvcGNvZGUtPm91dCgkI2FyZ3M+PTE/JGFyZ3NbJCNhcmdzXS0+c2l6ZSgpOiRzeik7CisJCUBhcmdzID0gbWFwKCRfLT5vdXQoJHN6KSxAYXJncyk7CisJCXByaW50ZiAiXHQlc1x0JXMiLCRpbnNuLGpvaW4oIiwiLEBhcmdzKTsKIAkgICAgfSBlbHNlIHsKIAkJJGluc24gPSAkb3Bjb2RlLT5vdXQoKTsKLQkJJGluc24gLj0gJHN6IGlmIChtYXAoJF8tPm91dCgpID1+IC94P21tLyxAYXJncykpOworCQlmb3JlYWNoIChAYXJncykgeworCQkgICAgbXkgJGFyZyA9ICRfLT5vdXQoKTsKKwkJICAgICMgJGluc24uPSRzeiBjb21wZW5zYXRlcyBmb3IgbW92cSwgcGluc3J3LCAuLi4KKwkJICAgIGlmICgkYXJnID1+IC9eeG1tWzAtOV0rJC8pIHsgJGluc24uPSRzejsgJHN6PSJ4IiBpZighJHN6KTsgbGFzdDsgfQorCQkgICAgaWYgKCRhcmcgPX4gL15tbVswLTldKyQvKSAgeyAkaW5zbi49JHN6OyAkc3o9InEiIGlmKCEkc3opOyBsYXN0OyB9CisJCX0KIAkJQGFyZ3MgPSByZXZlcnNlKEBhcmdzKTsKIAkJdW5kZWYgJHN6IGlmICgkbmFzbSAmJiAkb3Bjb2RlLT5tbmVtb25pYygpIGVxICJsZWEiKTsKKwkJcHJpbnRmICJcdCVzXHQlcyIsJGluc24sam9pbigiLCIsbWFwKCRfLT5vdXQoJHN6KSxAYXJncykpOwogCSAgICB9Ci0JICAgIHByaW50ZiAiXHQlc1x0JXMiLCRpbnNuLGpvaW4oIiwiLG1hcCgkXy0+b3V0KCRzeiksQGFyZ3MpKTsKIAl9IGVsc2UgewogCSAgICBwcmludGYgIlx0JXMiLCRvcGNvZGUtPm91dCgpOwogCX0KZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4NmFzbS5wbCBiL2NyeXB0by9wZXJsYXNtL3g4NmFzbS5wbAppbmRleCAyODA4MGNhLi5lYjU0M2RiIDEwMDY0NAotLS0gYS9jcnlwdG8vcGVybGFzbS94ODZhc20ucGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2YXNtLnBsCkBAIC04MCw2ICs4MCw1NyBAQAogICAgIHsJJjo6Z2VuZXJpYygibW92cSIsQF8pOwkJCX0KIH0KIAorIyBTU0U+MiBpbnN0cnVjdGlvbnMKK215ICVyZWdybSA9ICgJImVheCI9PjAsICJlY3giPT4xLCAiZWR4Ij0+MiwgImVieCI9PjMsCisJCSJlc3AiPT40LCAiZWJwIj0+NSwgImVzaSI9PjYsICJlZGkiPT43CSk7CitzdWIgOjpwZXh0cmQKK3sgbXkoJGRzdCwkc3JjLCRpbW0pPUBfOworICAgIGlmICgiJGRzdDokc3JjIiA9fiAvKGVbYS1kc2RdW2l4cF0pOnhtbShbMC03XSkvKQorICAgIHsJJjo6ZGF0YV9ieXRlKDB4NjYsMHgwZiwweDNhLDB4MTYsMHhjMHwoJDI8PDMpfCRyZWdybXskMX0sJGltbSk7CX0KKyAgICBlbHNlCisgICAgewkmOjpnZW5lcmljKCJwZXh0cmQiLEBfKTsJCX0KK30KKworc3ViIDo6cGluc3JkCit7IG15KCRkc3QsJHNyYywkaW1tKT1AXzsKKyAgICBpZiAoIiRkc3Q6JHNyYyIgPX4gL3htbShbMC03XSk6KGVbYS1kc2RdW2l4cF0pLykKKyAgICB7CSY6OmRhdGFfYnl0ZSgweDY2LDB4MGYsMHgzYSwweDIyLDB4YzB8KCQxPDwzKXwkcmVncm17JDJ9LCRpbW0pOwl9CisgICAgZWxzZQorICAgIHsJJjo6Z2VuZXJpYygicGluc3JkIixAXyk7CQl9Cit9CisKK3N1YiA6OnBzaHVmYgoreyBteSgkZHN0LCRzcmMpPUBfOworICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKKyAgICB7CSZkYXRhX2J5dGUoMHg2NiwweDBmLDB4MzgsMHgwMCwweGMwfCgkMTw8Myl8JDIpOwl9CisgICAgZWxzZQorICAgIHsJJjo6Z2VuZXJpYygicHNodWZiIixAXyk7CQl9Cit9CisKK3N1YiA6OnBhbGlnbnIKK3sgbXkoJGRzdCwkc3JjLCRpbW0pPUBfOworICAgIGlmICgiJGRzdDokc3JjIiA9fiAveG1tKFswLTddKTp4bW0oWzAtN10pLykKKyAgICB7CSY6OmRhdGFfYnl0ZSgweDY2LDB4MGYsMHgzYSwweDBmLDB4YzB8KCQxPDwzKXwkMiwkaW1tKTsJfQorICAgIGVsc2UKKyAgICB7CSY6OmdlbmVyaWMoInBhbGlnbnIiLEBfKTsJCX0KK30KKworc3ViIDo6cGNsbXVscWRxCit7IG15KCRkc3QsJHNyYywkaW1tKT1AXzsKKyAgICBpZiAoIiRkc3Q6JHNyYyIgPX4gL3htbShbMC03XSk6eG1tKFswLTddKS8pCisgICAgewkmOjpkYXRhX2J5dGUoMHg2NiwweDBmLDB4M2EsMHg0NCwweGMwfCgkMTw8Myl8JDIsJGltbSk7CX0KKyAgICBlbHNlCisgICAgewkmOjpnZW5lcmljKCJwY2xtdWxxZHEiLEBfKTsJCX0KK30KKworc3ViIDo6cmRyYW5kCit7IG15ICgkZHN0KT1AXzsKKyAgICBpZiAoJGRzdCA9fiAvKGVbYS1kc2RdW2l4cF0pLykKKyAgICB7CSY6OmRhdGFfYnl0ZSgweDBmLDB4YzcsMHhmMHwkcmVncm17JGRzdH0pOwl9CisgICAgZWxzZQorICAgIHsJJjo6Z2VuZXJpYygicmRyYW5kIixAXyk7CX0KK30KKwogIyBsYWJlbCBtYW5hZ2VtZW50CiAkbGJkZWNvcj0iTCI7CQkjIGxvY2FsIGxhYmVsIGRlY29yYXRpb24sIHNldCBieSBwYWNrYWdlCiAkbGFiZWw9IjAwMCI7CkBAIC0xNjcsNyArMjE4LDcgQEAKICAgICAkZmlsZW5hbWU9JGZuOwogICAgICRpMzg2PSRjcHU7CiAKLSAgICAkZWxmPSRjcHA9JGNvZmY9JGFvdXQ9JG1hY29zeD0kd2luMzI9JG5ldHdhcmU9JG13ZXJrcz0wOworICAgICRlbGY9JGNwcD0kY29mZj0kYW91dD0kbWFjb3N4PSR3aW4zMj0kbmV0d2FyZT0kbXdlcmtzPSRhbmRyb2lkPTA7CiAgICAgaWYgICAgKCgkdHlwZSBlcSAiZWxmIikpCiAgICAgewkkZWxmPTE7CQkJcmVxdWlyZSAieDg2Z2FzLnBsIjsJfQogICAgIGVsc2lmICgoJHR5cGUgZXEgImFcLm91dCIpKQpAQCAtMTg0LDYgKzIzNSw4IEBACiAgICAgewkkd2luMzI9MTsJCXJlcXVpcmUgIng4Nm1hc20ucGwiOwl9CiAgICAgZWxzaWYgKCgkdHlwZSBlcSAibWFjb3N4IikpCiAgICAgewkkYW91dD0xOyAkbWFjb3N4PTE7CXJlcXVpcmUgIng4Nmdhcy5wbCI7CX0KKyAgICBlbHNpZiAoKCR0eXBlIGVxICJhbmRyb2lkIikpCisgICAgewkkZWxmPTE7ICRhbmRyb2lkPTE7CXJlcXVpcmUgIng4Nmdhcy5wbCI7CX0KICAgICBlbHNlCiAgICAgewlwcmludCBTVERFUlIgPDwiRU9GIjsKIFBpY2sgb25lIHRhcmdldCB0eXBlIGZyb20KZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbCBiL2NyeXB0by9wZXJsYXNtL3g4Nmdhcy5wbAppbmRleCA2ZWFiNzI3Li42ODJhM2EzIDEwMDY0NAotLS0gYS9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCkBAIC00NSw5ICs0NSw4IEBACiAgICAgdW5kZWYgJHN1ZmZpeCBpZiAoJGRzdCA9fiBtL14lW3htXS9vIHx8ICRzcmMgPX4gbS9eJVt4bV0vbyk7CiAKICAgICBpZiAoJCNfPT0wKQkJCQl7ICY6OmVtaXQoJG9wY29kZSk7CQl9Ci0gICAgZWxzaWYgKCRvcGNvZGUgPX4gbS9eai9vICYmICQjXz09MSkJeyAmOjplbWl0KCRvcGNvZGUsQGFyZyk7CX0KLSAgICBlbHNpZiAoJG9wY29kZSBlcSAiY2FsbCIgJiYgJCNfPT0xKQl7ICY6OmVtaXQoJG9wY29kZSxAYXJnKTsJfQotICAgIGVsc2lmICgkb3Bjb2RlID1+IG0vXnNldC8mJiAkI189PTEpCXsgJjo6ZW1pdCgkb3Bjb2RlLEBhcmcpOwl9CisgICAgZWxzaWYgKCQjXz09MSAmJiAkb3Bjb2RlID1+IG0vXihjYWxsfGNsZmx1c2h8anxsb29wfHNldCkvbykKKwkJCQkJeyAmOjplbWl0KCRvcGNvZGUsQGFyZyk7CX0KICAgICBlbHNlCQkJCXsgJjo6ZW1pdCgkb3Bjb2RlLiRzdWZmaXgsQGFyZyk7fQogCiAgIDE7CkBAIC05MSw2ICs5MCw3IEBACiB9CiBzdWIgOjpRV1AJeyAmOjpEV1AoQF8pOwl9CiBzdWIgOjpCUAl7ICY6OkRXUChAXyk7CX0KK3N1YiA6OldQCXsgJjo6RFdQKEBfKTsJfQogc3ViIDo6QkMJeyBAXzsJCX0KIHN1YiA6OkRXQwl7IEBfOwkJfQogCkBAIC0xNDksMjIgKzE0OSwyNCBAQAogeyAgIHB1c2goQG91dCwiLmdsb2JsXHQiLiY6OkxBQkVMKCRfWzBdLCRubWRlY29yLiRfWzBdKS4iXG4iKTsgICB9CiAKIHN1YiA6OmZpbGVfZW5kCi17ICAgaWYgKGdyZXAgey9cYiR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUFxiL2l9IEBvdXQpIHsKLQlteSAkdG1wPSIuY29tbVx0JHtubWRlY29yfU9QRU5TU0xfaWEzMmNhcF9QLDQiOwotCWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQotCWVsc2UJCXsgcHVzaCAoQG91dCwiJHRtcFxuIik7IH0KLSAgICB9Ci0gICAgaWYgKCQ6Om1hY29zeCkKK3sgICBpZiAoJDo6bWFjb3N4KQogICAgIHsJaWYgKCVub25fbGF6eV9wdHIpCiAgICAgCXsgICBwdXNoKEBvdXQsIi5zZWN0aW9uIF9fSU1QT1JULF9fcG9pbnRlcnMsbm9uX2xhenlfc3ltYm9sX3BvaW50ZXJzXG4iKTsKIAkgICAgZm9yZWFjaCAkaSAoa2V5cyAlbm9uX2xhenlfcHRyKQogCSAgICB7CXB1c2goQG91dCwiJG5vbl9sYXp5X3B0cnskaX06XG4uaW5kaXJlY3Rfc3ltYm9sXHQkaVxuLmxvbmdcdDBcbiIpOyAgIH0KIAl9CiAgICAgfQorICAgIGlmIChncmVwIHsvXGIke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1BcYi9pfSBAb3V0KSB7CisJbXkgJHRtcD0iLmNvbW1cdCR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCw4IjsKKwlpZiAoJDo6bWFjb3N4KQl7IHB1c2ggKEBvdXQsIiR0bXAsMlxuIik7IH0KKwllbHNpZiAoJDo6ZWxmKQl7IHB1c2ggKEBvdXQsIiR0bXAsNFxuIik7IH0KKwllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisgICAgfQogICAgIHB1c2goQG91dCwkaW5pdHNlZykgaWYgKCRpbml0c2VnKTsKIH0KIAogc3ViIDo6ZGF0YV9ieXRlCXsgICBwdXNoKEBvdXQsIi5ieXRlXHQiLmpvaW4oJywnLEBfKS4iXG4iKTsgICB9CitzdWIgOjpkYXRhX3Nob3J0eyAgIHB1c2goQG91dCwiLnZhbHVlXHQiLmpvaW4oJywnLEBfKS4iXG4iKTsgIH0KIHN1YiA6OmRhdGFfd29yZCB7ICAgcHVzaChAb3V0LCIubG9uZ1x0Ii5qb2luKCcsJyxAXykuIlxuIik7ICAgfQogCiBzdWIgOjphbGlnbgpAQCAtMTgwLDcgKzE4Miw3IEBACiBzdWIgOjpwaWNtZXVwCiB7IG15KCRkc3QsJHN5bSwkYmFzZSwkcmVmbGFiZWwpPUBfOwogCi0gICAgaWYgKCQ6OnBpYyAmJiAoJDo6ZWxmIHx8ICQ6OmFvdXQpKQorICAgIGlmICgoJDo6cGljICYmICgkOjplbGYgfHwgJDo6YW91dCkpIHx8ICQ6Om1hY29zeCkKICAgICB7CWlmICghZGVmaW5lZCgkYmFzZSkpCiAJeyAgICY6OmNhbGwoJjo6bGFiZWwoIlBJQ19tZV91cCIpKTsKIAkgICAgJjo6c2V0X2xhYmVsKCJQSUNfbWVfdXAiKTsKQEAgLTIwNiwxMyArMjA4LDE3IEBACiBzdWIgOjppbml0c2VnCiB7IG15ICRmPSRubWRlY29yLnNoaWZ0OwogCi0gICAgaWYgKCQ6OmVsZikKKyAgICBpZiAoJDo6YW5kcm9pZCkKKyAgICB7CSRpbml0c2VnLj08PF9fXzsKKy5zZWN0aW9uCS5pbml0X2FycmF5CisuYWxpZ24JNAorLmxvbmcJJGYKK19fXworICAgIH0KKyAgICBlbHNpZiAoJDo6ZWxmKQogICAgIHsJJGluaXRzZWcuPTw8X19fOwogLnNlY3Rpb24JLmluaXQKIAljYWxsCSRmCi0Jam1wCS5MaW5pdGFsaWduCi0uYWxpZ24JJGFsaWduCi0uTGluaXRhbGlnbjoKIF9fXwogICAgIH0KICAgICBlbHNpZiAoJDo6Y29mZikKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nm1hc20ucGwgYi9jcnlwdG8vcGVybGFzbS94ODZtYXNtLnBsCmluZGV4IDNkNTBlNGEuLjNhZjA0NTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZXJsYXNtL3g4Nm1hc20ucGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2bWFzbS5wbApAQCAtMTQsOSArMTQsMTEgQEAKIHsgbXkgKCRvcGNvZGUsQGFyZyk9QF87CiAKICAgICAjIGZpeCBoZXhhZGVjaW1hbCBjb25zdGFudHMKLSAgICBmb3IgKEBhcmcpIHsgcy8weChbMC05YS1mXSspLzAkMWgvb2k7IH0KKyAgICBmb3IgKEBhcmcpIHsgcy8oPzwhW1x3XCRcLl0pMHgoWzAtOWEtZl0rKS8wJDFoL29pOyB9CiAKLSAgICBpZiAoJG9wY29kZSAhfiAvbW92cS8pCisgICAgaWYgKCRvcGNvZGUgPX4gL2xlYS8gJiYgQGFyZ1sxXSA9fiBzLy4qUFRSXHMrKFteXFtdKykkLyQxLykJIyBubyBbXQorICAgIHsJJG9wY29kZT0ibW92IjsJfQorICAgIGVsc2lmICgkb3Bjb2RlICF+IC9tb3ZxLykKICAgICB7CSMgZml4IHhtbSByZWZlcmVuY2VzCiAJJGFyZ1swXSA9fiBzL1xiW0EtWl0rV09SRFxzK1BUUi9YTU1XT1JEIFBUUi9pIGlmICgkYXJnWzFdPX4vXGJ4bW1bMC03XVxiL2kpOwogCSRhcmdbMV0gPX4gcy9cYltBLVpdK1dPUkRccytQVFIvWE1NV09SRCBQVFIvaSBpZiAoJGFyZ1swXT1+L1xieG1tWzAtN11cYi9pKTsKQEAgLTY1LDYgKzY3LDcgQEAKICAgJHJldDsKIH0KIHN1YiA6OkJQCXsgJmdldF9tZW0oIkJZVEUiLEBfKTsgIH0KK3N1YiA6OldQCXsgJmdldF9tZW0oIldPUkQiLEBfKTsJfQogc3ViIDo6RFdQCXsgJmdldF9tZW0oIkRXT1JEIixAXyk7IH0KIHN1YiA6OlFXUAl7ICZnZXRfbWVtKCJRV09SRCIsQF8pOyB9CiBzdWIgOjpCQwl7ICJAXyI7ICB9CkBAIC0xMjksNyArMTMyLDcgQEAKICAgICBpZiAoZ3JlcCB7L1xiJHtubWRlY29yfU9QRU5TU0xfaWEzMmNhcF9QXGIvaX0gQG91dCkKICAgICB7CW15ICRjb21tPTw8X19fOwogLmJzcwlTRUdNRU5UICdCU1MnCi1DT01NCSR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUDpEV09SRAorQ09NTQkke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1A6UVdPUkQKIC5ic3MJRU5EUwogX19fCiAJIyBjb21tZW50IG91dCBPUEVOU1NMX2lhMzJjYXBfUCBkZWNsYXJhdGlvbnMKQEAgLTE1Niw2ICsxNTksOSBAQAogc3ViIDo6ZGF0YV9ieXRlCiB7ICAgcHVzaChAb3V0LCgiREJcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQogCitzdWIgOjpkYXRhX3Nob3J0Cit7ICAgcHVzaChAb3V0LCgiRFdcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQorCiBzdWIgOjpkYXRhX3dvcmQKIHsgICBwdXNoKEBvdXQsKCJERFx0Iikuam9pbignLCcsQF8pLiJcbiIpOwl9CiAKQEAgLTE4MSw0ICsxODcsMTEgQEAKIHN1YiA6OmRhdGFzZWcKIHsgICBwdXNoKEBvdXQsIiRzZWdtZW50XHRFTkRTXG5fREFUQVx0U0VHTUVOVFxuIik7ICRzZWdtZW50PSJfREFUQSI7ICAgfQogCitzdWIgOjpzYWZlc2VoCit7IG15ICRubT1zaGlmdDsKKyAgICBwdXNoKEBvdXQsIklGIFxAVmVyc2lvbiBHRSA3MTBcbiIpOworICAgIHB1c2goQG91dCwiLlNBRkVTRUgJIi4mOjpMQUJFTCgkbm0sJG5tZGVjb3IuJG5tKS4iXG4iKTsKKyAgICBwdXNoKEBvdXQsIkVORElGXG4iKTsKK30KKwogMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wZXJsYXNtL3g4Nm5hc20ucGwgYi9jcnlwdG8vcGVybGFzbS94ODZuYXNtLnBsCmluZGV4IGNlMmJlZDkuLmNhMjUxMWMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wZXJsYXNtL3g4Nm5hc20ucGwKKysrIGIvY3J5cHRvL3Blcmxhc20veDg2bmFzbS5wbApAQCAtMTksNiArMTksOCBAQAogCXsgICAkX1swXSA9ICJORUFSICRfWzBdIjsgICAJfQogCWVsc2lmICgkb3Bjb2RlIGVxICJsZWEiICYmICQjXz09MSkgICMgd2lwZSBzdG9yYWdlIHF1YWxpZmllciBmcm9tIGxlYQogCXsgICAkX1sxXSA9fiBzL15bXlxbXSpcWy9cWy9vOwl9CisJZWxzaWYgKCRvcGNvZGUgZXEgImNsZmx1c2giICYmICQjXz09MCkKKwl7ICAgJF9bMF0gPX4gcy9eW15cW10qXFsvXFsvbzsJfQogICAgIH0KICAgICAmOjplbWl0KCRvcGNvZGUsQF8pOwogICAxOwpAQCAtNjcsNiArNjksNyBAQAogfQogc3ViIDo6QlAJeyAmZ2V0X21lbSgiQllURSIsQF8pOyAgfQogc3ViIDo6RFdQCXsgJmdldF9tZW0oIkRXT1JEIixAXyk7IH0KK3N1YiA6OldQCXsgJmdldF9tZW0oIldPUkQiLEBfKTsJfQogc3ViIDo6UVdQCXsgJmdldF9tZW0oIiIsQF8pOyAgICAgIH0KIHN1YiA6OkJDCXsgKCgkOjptd2Vya3MpPyIiOiJCWVRFICIpLiJAXyI7ICB9CiBzdWIgOjpEV0MJeyAoKCQ6Om13ZXJrcyk/IiI6IkRXT1JEICIpLiJAXyI7IH0KQEAgLTExNCw3ICsxMTcsNyBAQAogeyAgIGlmIChncmVwIHsvXGIke25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1BcYi9pfSBAb3V0KQogICAgIHsJbXkgJGNvbW09PDxfX187CiAke2RyZGVjb3J9c2VnbWVudAkuYnNzCi0ke2RyZGVjb3J9Y29tbW9uCSR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCA0Ciske2RyZGVjb3J9Y29tbW9uCSR7bm1kZWNvcn1PUEVOU1NMX2lhMzJjYXBfUCA4CiBfX18KIAkjIGNvbW1lbnQgb3V0IE9QRU5TU0xfaWEzMmNhcF9QIGRlY2xhcmF0aW9ucwogCWdyZXAge3MvKF5leHRlcm5ccyske25tZGVjb3J9T1BFTlNTTF9pYTMyY2FwX1ApL1w7JDEvfSBAb3V0OwpAQCAtMTM1LDcgKzEzOCw4IEBACiAKIHN1YiA6OmRhdGFfYnl0ZQogeyAgIHB1c2goQG91dCwoKCQ6Om13ZXJrcyk/Ii5ieXRlXHQiOiJkYlx0Iikuam9pbignLCcsQF8pLiJcbiIpOwl9Ci0KK3N1YiA6OmRhdGFfc2hvcnQKK3sgICBwdXNoKEBvdXQsKCgkOjptd2Vya3MpPyIud29yZFx0IjoiZHdcdCIpLmpvaW4oJywnLEBfKS4iXG4iKTsJfQogc3ViIDo6ZGF0YV93b3JkCiB7ICAgcHVzaChAb3V0LCgoJDo6bXdlcmtzKT8iLmxvbmdcdCI6ImRkXHQiKS5qb2luKCcsJyxAXykuIlxuIik7CX0KIApAQCAtMTYzLDQgKzE2NywxMSBAQAogICAgIGVsc2UJCXsgcHVzaChAb3V0LCJzZWN0aW9uXHQuZGF0YSBhbGlnbj00XG4iKTsgfQogfQogCitzdWIgOjpzYWZlc2VoCit7IG15ICRubT1zaGlmdDsKKyAgICBwdXNoKEBvdXQsIiVpZglfX05BU01fVkVSU0lPTl9JRF9fID49IDB4MDIwMzAwMDBcbiIpOworICAgIHB1c2goQG91dCwic2FmZXNlaAkiLiY6OkxBQkVMKCRubSwkbm1kZWNvci4kbm0pLiJcbiIpOworICAgIHB1c2goQG91dCwiJWVuZGlmXG4iKTsKK30KKwogMTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzMTIvcDEyX2RlY3IuYyBiL2NyeXB0by9wa2NzMTIvcDEyX2RlY3IuYwppbmRleCBiYTc3ZGJiLi45ZDM1NTdlIDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczEyL3AxMl9kZWNyLmMKKysrIGIvY3J5cHRvL3BrY3MxMi9wMTJfZGVjci5jCkBAIC04OSw3ICs4OSwxNCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlFVlBfQ2lwaGVyVXBkYXRlKCZjdHgsIG91dCwgJmksIGluLCBpbmxlbik7CisJaWYgKCFFVlBfQ2lwaGVyVXBkYXRlKCZjdHgsIG91dCwgJmksIGluLCBpbmxlbikpCisJCXsKKwkJT1BFTlNTTF9mcmVlKG91dCk7CisJCW91dCA9IE5VTEw7CisJCVBLQ1MxMmVycihQS0NTMTJfRl9QS0NTMTJfUEJFX0NSWVBULEVSUl9SX0VWUF9MSUIpOworCQlnb3RvIGVycjsKKwkJfQorCiAJb3V0bGVuID0gaTsKIAlpZighRVZQX0NpcGhlckZpbmFsX2V4KCZjdHgsIG91dCArIGksICZpKSkgewogCQlPUEVOU1NMX2ZyZWUob3V0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wa2NzMTIvcDEyX2tleS5jIGIvY3J5cHRvL3BrY3MxMi9wMTJfa2V5LmMKaW5kZXggNDI0MjAzZi4uYzU1YzdiNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3BrY3MxMi9wMTJfa2V5LmMKKysrIGIvY3J5cHRvL3BrY3MxMi9wMTJfa2V5LmMKQEAgLTE1MiwxNCArMTUyLDE2IEBACiAJZm9yIChpID0gMDsgaSA8IFNsZW47IGkrKykgKnArKyA9IHNhbHRbaSAlIHNhbHRsZW5dOwogCWZvciAoaSA9IDA7IGkgPCBQbGVuOyBpKyspICpwKysgPSBwYXNzW2kgJSBwYXNzbGVuXTsKIAlmb3IgKDs7KSB7Ci0JCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kX3R5cGUsIE5VTEwpOwotCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIEQsIHYpOwotCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIEksIElsZW4pOwotCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgQWksIE5VTEwpOworCQlpZiAoIUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kX3R5cGUsIE5VTEwpCisJCQl8fCAhRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBELCB2KQorCQkJfHwgIUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgSSwgSWxlbikKKwkJCXx8ICFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgQWksIE5VTEwpKQorCQkJZ290byBlcnI7CiAJCWZvciAoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKLQkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kX3R5cGUsIE5VTEwpOwotCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBBaSwgdSk7Ci0JCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgQWksIE5VTEwpOworCQkJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZF90eXBlLCBOVUxMKQorCQkJCXx8ICFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIEFpLCB1KQorCQkJCXx8ICFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgQWksIE5VTEwpKQorCQkJZ290byBlcnI7CiAJCX0KIAkJbWVtY3B5IChvdXQsIEFpLCBtaW4gKG4sIHUpKTsKIAkJaWYgKHUgPj0gbikgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3MxMi9wMTJfbXV0bC5jIGIvY3J5cHRvL3BrY3MxMi9wMTJfbXV0bC5jCmluZGV4IDlhYjc0MGQuLjk2ZGUxYmQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9wa2NzMTIvcDEyX211dGwuYworKysgYi9jcnlwdG8vcGtjczEyL3AxMl9tdXRsLmMKQEAgLTk3LDEwICs5NywxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAJSE1BQ19DVFhfaW5pdCgmaG1hYyk7Ci0JSE1BQ19Jbml0X2V4KCZobWFjLCBrZXksIG1kX3NpemUsIG1kX3R5cGUsIE5VTEwpOwotICAgIAlITUFDX1VwZGF0ZSgmaG1hYywgcDEyLT5hdXRoc2FmZXMtPmQuZGF0YS0+ZGF0YSwKLQkJCQkJIHAxMi0+YXV0aHNhZmVzLT5kLmRhdGEtPmxlbmd0aCk7Ci0gICAgCUhNQUNfRmluYWwoJmhtYWMsIG1hYywgbWFjbGVuKTsKKwlpZiAoIUhNQUNfSW5pdF9leCgmaG1hYywga2V5LCBtZF9zaXplLCBtZF90eXBlLCBOVUxMKQorICAgIAkJfHwgIUhNQUNfVXBkYXRlKCZobWFjLCBwMTItPmF1dGhzYWZlcy0+ZC5kYXRhLT5kYXRhLAorCQkJCQkgcDEyLT5hdXRoc2FmZXMtPmQuZGF0YS0+bGVuZ3RoKQorICAgIAkJfHwgIUhNQUNfRmluYWwoJmhtYWMsIG1hYywgbWFjbGVuKSkKKwkJeworICAgIAkJSE1BQ19DVFhfY2xlYW51cCgmaG1hYyk7CisJCXJldHVybiAwOworCQl9CiAgICAgCUhNQUNfQ1RYX2NsZWFudXAoJmhtYWMpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BrY3M3L3BrN19kb2l0LmMgYi9jcnlwdG8vcGtjczcvcGs3X2RvaXQuYwppbmRleCBlNGIwOTVlLi5mYWU4ZWRhIDEwMDY0NAotLS0gYS9jcnlwdG8vcGtjczcvcGs3X2RvaXQuYworKysgYi9jcnlwdG8vcGtjczcvcGs3X2RvaXQuYwpAQCAtNzA1LDcgKzcwNSwxMSBAQAogCQl9CiAKIAkvKiBBZGQgZGlnZXN0ICovCi0JRVZQX0RpZ2VzdEZpbmFsX2V4KG1jdHgsIG1kX2RhdGEsJm1kX2xlbik7CisJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgobWN0eCwgbWRfZGF0YSwmbWRfbGVuKSkKKwkJeworCQlQS0NTN2VycihQS0NTN19GX0RPX1BLQ1M3X1NJR05FRF9BVFRSSUIsIEVSUl9SX0VWUF9MSUIpOworCQlyZXR1cm4gMDsKKwkJfQogCWlmICghUEtDUzdfYWRkMV9hdHRyaWJfZGlnZXN0KHNpLCBtZF9kYXRhLCBtZF9sZW4pKQogCQl7CiAJCVBLQ1M3ZXJyKFBLQ1M3X0ZfRE9fUEtDUzdfU0lHTkVEX0FUVFJJQiwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwpAQCAtODEzLDcgKzgxNyw4IEBACiAKIAkJCS8qIFdlIG5vdyBoYXZlIHRoZSBFVlBfTURfQ1RYLCBsZXRzIGRvIHRoZQogCQkJICogc2lnbmluZy4gKi8KLQkJCUVWUF9NRF9DVFhfY29weV9leCgmY3R4X3RtcCxtZGMpOworCQkJaWYgKCFFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eF90bXAsbWRjKSkKKwkJCQlnb3RvIGVycjsKIAogCQkJc2s9c2ktPmF1dGhfYXR0cjsKIApAQCAtODUxLDcgKzg1Niw4IEBACiAJCWlmICghUEtDUzdfZmluZF9kaWdlc3QoJm1kYywgYmlvLAogCQkJCU9CSl9vYmoybmlkKHA3LT5kLmRpZ2VzdC0+bWQtPmFsZ29yaXRobSkpKQogCQkJZ290byBlcnI7Ci0JCUVWUF9EaWdlc3RGaW5hbF9leChtZGMsbWRfZGF0YSwmbWRfbGVuKTsKKwkJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgobWRjLG1kX2RhdGEsJm1kX2xlbikpCisJCQlnb3RvIGVycjsKIAkJTV9BU04xX09DVEVUX1NUUklOR19zZXQocDctPmQuZGlnZXN0LT5kaWdlc3QsIG1kX2RhdGEsIG1kX2xlbik7CiAJCX0KIApAQCAtMTA0NCw3ICsxMDUwLDggQEAKIAogCS8qIG1kYyBpcyB0aGUgZGlnZXN0IGN0eCB0aGF0IHdlIHdhbnQsIHVubGVzcyB0aGVyZSBhcmUgYXR0cmlidXRlcywKIAkgKiBpbiB3aGljaCBjYXNlIHRoZSBkaWdlc3QgaXMgdGhlIHNpZ25lZCBhdHRyaWJ1dGVzICovCi0JRVZQX01EX0NUWF9jb3B5X2V4KCZtZGNfdG1wLG1kYyk7CisJaWYgKCFFVlBfTURfQ1RYX2NvcHlfZXgoJm1kY190bXAsbWRjKSkKKwkJZ290byBlcnI7CiAKIAlzaz1zaS0+YXV0aF9hdHRyOwogCWlmICgoc2sgIT0gTlVMTCkgJiYgKHNrX1g1MDlfQVRUUklCVVRFX251bShzaykgIT0gMCkpCkBAIC0xMDU0LDcgKzEwNjEsOCBAQAogCQlpbnQgYWxlbjsKIAkJQVNOMV9PQ1RFVF9TVFJJTkcgKm1lc3NhZ2VfZGlnZXN0OwogCi0JCUVWUF9EaWdlc3RGaW5hbF9leCgmbWRjX3RtcCxtZF9kYXQsJm1kX2xlbik7CisJCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KCZtZGNfdG1wLG1kX2RhdCwmbWRfbGVuKSkKKwkJCWdvdG8gZXJyOwogCQltZXNzYWdlX2RpZ2VzdD1QS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzKHNrKTsKIAkJaWYgKCFtZXNzYWdlX2RpZ2VzdCkKIAkJCXsKQEAgLTEwNzksNyArMTA4Nyw4IEBACiAJCQlnb3RvIGVycjsKIAkJCX0KIAotCQlFVlBfVmVyaWZ5SW5pdF9leCgmbWRjX3RtcCxFVlBfZ2V0X2RpZ2VzdGJ5bmlkKG1kX3R5cGUpLCBOVUxMKTsKKwkJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWRjX3RtcCxFVlBfZ2V0X2RpZ2VzdGJ5bmlkKG1kX3R5cGUpLCBOVUxMKSkKKwkJCWdvdG8gZXJyOwogCiAJCWFsZW4gPSBBU04xX2l0ZW1faTJkKChBU04xX1ZBTFVFICopc2ssICZhYnVmLAogCQkJCQkJQVNOMV9JVEVNX3JwdHIoUEtDUzdfQVRUUl9WRVJJRlkpKTsKQEAgLTEwODksNyArMTA5OCw4IEBACiAJCQlyZXQgPSAtMTsKIAkJCWdvdG8gZXJyOwogCQkJfQotCQlFVlBfVmVyaWZ5VXBkYXRlKCZtZGNfdG1wLCBhYnVmLCBhbGVuKTsKKwkJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtZGNfdG1wLCBhYnVmLCBhbGVuKSkKKwkJCWdvdG8gZXJyOwogCiAJCU9QRU5TU0xfZnJlZShhYnVmKTsKIAkJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3BwY2NwdWlkLnBsIGIvY3J5cHRvL3BwY2NwdWlkLnBsCmluZGV4IDM2OWUxZDAuLjA2Nzc0NjkgMTAwNzU1Ci0tLSBhL2NyeXB0by9wcGNjcHVpZC5wbAorKysgYi9jcnlwdG8vcHBjY3B1aWQucGwKQEAgLTIzLDM2ICsyMyw2NyBAQAogLm1hY2hpbmUJImFueSIKIC50ZXh0CiAKLS5nbG9ibAkuT1BFTlNTTF9jcHVpZF9zZXR1cAorLmdsb2JsCS5PUEVOU1NMX3BwYzY0X3Byb2JlCiAuYWxpZ24JNAotLk9QRU5TU0xfY3B1aWRfc2V0dXA6CisuT1BFTlNTTF9wcGM2NF9wcm9iZToKKwlmY2ZpZAlmMSxmMQorCWV4dHJkaQlyMCxyMCwzMiwwCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwwLDAKKworLmdsb2JsCS5PUEVOU1NMX2FsdGl2ZWNfcHJvYmUKKy5hbGlnbgk0CisuT1BFTlNTTF9hbHRpdmVjX3Byb2JlOgorCS5sb25nCTB4MTAwMDA0ODQJIyB2b3IJdjAsdjAsdjAKKwlibHIKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAogCiAuZ2xvYmwJLk9QRU5TU0xfd2lwZV9jcHUKIC5hbGlnbgk0CiAuT1BFTlNTTF93aXBlX2NwdToKIAl4b3IJcjAscjAscjAKKwlmbXIJZjAsZjMxCisJZm1yCWYxLGYzMQorCWZtcglmMixmMzEKIAltcglyMyxyMQorCWZtcglmMyxmMzEKIAl4b3IJcjQscjQscjQKKwlmbXIJZjQsZjMxCiAJeG9yCXI1LHI1LHI1CisJZm1yCWY1LGYzMQogCXhvcglyNixyNixyNgorCWZtcglmNixmMzEKIAl4b3IJcjcscjcscjcKKwlmbXIJZjcsZjMxCiAJeG9yCXI4LHI4LHI4CisJZm1yCWY4LGYzMQogCXhvcglyOSxyOSxyOQorCWZtcglmOSxmMzEKIAl4b3IJcjEwLHIxMCxyMTAKKwlmbXIJZjEwLGYzMQogCXhvcglyMTEscjExLHIxMQorCWZtcglmMTEsZjMxCiAJeG9yCXIxMixyMTIscjEyCisJZm1yCWYxMixmMzEKKwlmbXIJZjEzLGYzMQogCWJscgorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMCwwCiAKIC5nbG9ibAkuT1BFTlNTTF9hdG9taWNfYWRkCiAuYWxpZ24JNAogLk9QRU5TU0xfYXRvbWljX2FkZDoKLUxvb3A6CWx3YXJ4CXI1LDAscjMKK0xhZGQ6CWx3YXJ4CXI1LDAscjMKIAlhZGQJcjAscjQscjUKIAlzdHdjeC4JcjAsMCxyMwotCWJuZS0JTG9vcAorCWJuZS0JTGFkZAogCSRTSUdOWAlyMyxyMAogCWJscgorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMiwwCisJLmxvbmcJMAogCiAuZ2xvYmwJLk9QRU5TU0xfcmR0c2MKIC5hbGlnbgk0CkBAIC02MCw2ICs5MSw4IEBACiAJbWZ0YglyMwogCW1mdGJ1CXI0CiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwwLDAKIAogLmdsb2JsCS5PUEVOU1NMX2NsZWFuc2UKIC5hbGlnbgk0CkBAIC04OSw2ICsxMjIsOSBAQAogCWFuZGkuCXI0LHI0LDMKIAlibmUJTGl0dGxlCiAJYmxyCisJLmxvbmcJMAorCS5ieXRlCTAsMTIsMHgxNCwwLDAsMCwyLDAKKwkubG9uZwkwCiBfX18KIAogJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMgYi9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKaW5kZXggYjJmMDRmZi4uZmNkZDNmMiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCisrKyBiL2NyeXB0by9yYW5kL21kX3JhbmQuYwpAQCAtMTA5LDYgKzEwOSw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgT1BFTlNTTF9GSVBTRVZQCisKICNpZmRlZiBNRF9SQU5EX0RFQlVHCiAjIGlmbmRlZiBOREVCVUcKICMgICBkZWZpbmUgTkRFQlVHCkBAIC0xNTcsMTMgKzE1OSwxNCBAQAogc3RhdGljIHZvaWQgc3NsZWF5X3JhbmRfY2xlYW51cCh2b2lkKTsKIHN0YXRpYyB2b2lkIHNzbGVheV9yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKIHN0YXRpYyB2b2lkIHNzbGVheV9yYW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBhZGRfZW50cm9weSk7Ci1zdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSk7CitzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSwgaW50IHBzZXVkbyk7CitzdGF0aWMgaW50IHNzbGVheV9yYW5kX25vcHNldWRvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSk7CiBzdGF0aWMgaW50IHNzbGVheV9yYW5kX3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pOwogc3RhdGljIGludCBzc2xlYXlfcmFuZF9zdGF0dXModm9pZCk7CiAKIFJBTkRfTUVUSE9EIHJhbmRfc3NsZWF5X21ldGg9ewogCXNzbGVheV9yYW5kX3NlZWQsCi0Jc3NsZWF5X3JhbmRfYnl0ZXMsCisJc3NsZWF5X3JhbmRfbm9wc2V1ZG9fYnl0ZXMsCiAJc3NsZWF5X3JhbmRfY2xlYW51cCwKIAlzc2xlYXlfcmFuZF9hZGQsCiAJc3NsZWF5X3JhbmRfcHNldWRvX2J5dGVzLApAQCAtMzI4LDcgKzMzMSw3IEBACiAJc3NsZWF5X3JhbmRfYWRkKGJ1ZiwgbnVtLCAoZG91YmxlKW51bSk7CiAJfQogCi1zdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKK3N0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtLCBpbnQgcHNldWRvKQogCXsKIAlzdGF0aWMgdm9sYXRpbGUgaW50IHN0aXJyZWRfcG9vbCA9IDA7CiAJaW50IGksaixrLHN0X251bSxzdF9pZHg7CkBAIC01MTcsNyArNTIwLDkgQEAKIAlFVlBfTURfQ1RYX2NsZWFudXAoJm0pOwogCWlmIChvaykKIAkJcmV0dXJuKDEpOwotCWVsc2UKKwllbHNlIGlmIChwc2V1ZG8pCisJCXJldHVybiAwOworCWVsc2UgCiAJCXsKIAkJUkFORGVycihSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7CiAJCUVSUl9hZGRfZXJyb3JfZGF0YSgxLCAiWW91IG5lZWQgdG8gcmVhZCB0aGUgT3BlblNTTCBGQVEsICIKQEAgLTUyNiwyMiArNTMxLDE2IEBACiAJCX0KIAl9CiAKK3N0YXRpYyBpbnQgc3NsZWF5X3JhbmRfbm9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQorCXsKKwlyZXR1cm4gc3NsZWF5X3JhbmRfYnl0ZXMoYnVmLCBudW0sIDApOworCX0KKwogLyogcHNldWRvLXJhbmRvbSBieXRlcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBidXQgbm90CiAgICB1bnByZWRpY3RhYmxlICovCiBzdGF0aWMgaW50IHNzbGVheV9yYW5kX3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pIAogCXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZXJyOwotCi0JcmV0ID0gUkFORF9ieXRlcyhidWYsIG51bSk7Ci0JaWYgKHJldCA9PSAwKQotCQl7Ci0JCWVyciA9IEVSUl9wZWVrX2Vycm9yKCk7Ci0JCWlmIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfUkFORCAmJgotCQkgICAgRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBSQU5EX1JfUFJOR19OT1RfU0VFREVEKQotCQkJRVJSX2NsZWFyX2Vycm9yKCk7Ci0JCX0KLQlyZXR1cm4gKHJldCk7CisJcmV0dXJuIHNzbGVheV9yYW5kX2J5dGVzKGJ1ZiwgbnVtLCAxKTsKIAl9CiAKIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfc3RhdHVzKHZvaWQpCmRpZmYgLS1naXQgYS9jcnlwdG8vcmFuZC9yYW5kLmggYi9jcnlwdG8vcmFuZC9yYW5kLmgKaW5kZXggYWM2YzAyMS4uZGM4ZmNmOSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZC5oCisrKyBiL2NyeXB0by9yYW5kL3JhbmQuaApAQCAtMTE5LDYgKzExOSwxMSBAQAogCiAjZW5kaWYKIAorI2lmZGVmIE9QRU5TU0xfRklQUwordm9pZCBSQU5EX3NldF9maXBzX2RyYmdfdHlwZShpbnQgdHlwZSwgaW50IGZsYWdzKTsKK2ludCBSQU5EX2luaXRfZmlwcyh2b2lkKTsKKyNlbmRpZgorCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMTI5LDkgKzEzNCwxMyBAQAogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQorI2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgogI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEwMgorI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEwMworI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDEwMQogI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYyBiL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMKaW5kZXggMDNjZGE0ZC4uYjg1ODZjOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYworKysgYi9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCkBAIC0xLDYgKzEsNiBAQAogLyogY3J5cHRvL3JhbmQvcmFuZF9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDEyICs3MSwxNiBAQAogc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXT0KIAl7CiB7RVJSX0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIlJBTkRfZ2V0X3JhbmRfbWV0aG9kIn0sCit7RVJSX0ZVTkMoUkFORF9GX1JBTkRfSU5JVF9GSVBTKSwJIlJBTkRfaW5pdF9maXBzIn0sCiB7RVJSX0ZVTkMoUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCiB7MCxOVUxMfQogCX07CiAKIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfcmVhc29uc1tdPQogCXsKK3tFUlJfUkVBU09OKFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyksImVycm9yIGluaXRpYWxpc2luZyBkcmJnIn0sCit7RVJSX1JFQVNPTihSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHKSwiZXJyb3IgaW5zdGFudGlhdGluZyBkcmJnIn0sCit7RVJSX1JFQVNPTihSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVCksIm5vIGZpcHMgcmFuZG9tIG1ldGhvZCBzZXQifSwKIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKIHswLE5VTEx9CiAJfTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYW5kL3JhbmRfbGliLmMgYi9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCmluZGV4IDUxM2UzMzguLmRhZjFkYWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYW5kL3JhbmRfbGliLmMKKysrIGIvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwpAQCAtNjAsMTAgKzYwLDE2IEBACiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgogI2VuZGlmCiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorI2VuZGlmCisKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKIC8qIG5vbi1OVUxMIGlmIGRlZmF1bHRfUkFORF9tZXRoIGlzIEVOR0lORS1wcm92aWRlZCAqLwogc3RhdGljIEVOR0lORSAqZnVuY3RfcmVmID1OVUxMOwpAQCAtMTc0LDMgKzE4MCwxMTYgQEAKIAkJcmV0dXJuIG1ldGgtPnN0YXR1cygpOwogCXJldHVybiAwOwogCX0KKworI2lmZGVmIE9QRU5TU0xfRklQUworCisvKiBGSVBTIERSQkcgaW5pdGlhbGlzYXRpb24gY29kZS4gVGhpcyBzZXRzIHVwIHRoZSBEUkJHIGZvciB1c2UgYnkgdGhlCisgKiByZXN0IG9mIE9wZW5TU0wuIAorICovCisKKy8qIEVudHJvcHkgZ2F0aGVyZXI6IHVzZSBzdGFuZGFyZCBPcGVuU1NMIFBSTkcgdG8gc2VlZCAodGhpcyB3aWxsIGdhdGhlcgorICogZW50cm9weSBpbnRlcm5hbGx5IHRocm91Z2ggUkFORF9wb2xsKCkuCisgKi8KKworc3RhdGljIHNpemVfdCBkcmJnX2dldF9lbnRyb3B5KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorICAgICAgICB7CisJLyogUm91bmQgdXAgcmVxdWVzdCB0byBtdWx0aXBsZSBvZiBibG9jayBzaXplICovCisJbWluX2xlbiA9ICgobWluX2xlbiArIDE5KSAvIDIwKSAqIDIwOworCSpwb3V0ID0gT1BFTlNTTF9tYWxsb2MobWluX2xlbik7CisJaWYgKCEqcG91dCkKKwkJcmV0dXJuIDA7CisJaWYgKFJBTkRfU1NMZWF5KCktPmJ5dGVzKCpwb3V0LCBtaW5fbGVuKSA8PSAwKQorCQl7CisJCU9QRU5TU0xfZnJlZSgqcG91dCk7CisJCSpwb3V0ID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJCX0KKyAgICAgICAgcmV0dXJuIG1pbl9sZW47CisgICAgICAgIH0KKworc3RhdGljIHZvaWQgZHJiZ19mcmVlX2VudHJvcHkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikKKwl7CisJT1BFTlNTTF9jbGVhbnNlKG91dCwgb2xlbik7CisJT1BFTlNTTF9mcmVlKG91dCk7CisJfQorCisvKiBTZXQgImFkZGl0aW9uYWwgaW5wdXQiIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gZGF0YS4gVGhpcyB1c2VzIHRoZQorICogY3VycmVudCBQSUQsIGEgdGltZSB2YWx1ZSBhbmQgYSBjb3VudGVyLgorICovCisKK3N0YXRpYyBzaXplX3QgZHJiZ19nZXRfYWRpbihEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCkKKyAgICAJeworCS8qIFVzZSBvZiBzdGF0aWMgdmFyaWFibGVzIGlzIE9LIGFzIHRoaXMgaGFwcGVucyB1bmRlciBhIGxvY2sgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBidWZbMTZdOworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50ZXI7CisJRklQU19nZXRfdGltZXZlYyhidWYsICZjb3VudGVyKTsKKwkqcG91dCA9IGJ1ZjsKKwlyZXR1cm4gc2l6ZW9mKGJ1Zik7CisJfQorCisvKiBSQU5EX2FkZCgpIGFuZCBSQU5EX3NlZWQoKSBwYXNzIHRocm91Z2ggdG8gT3BlblNTTCBQUk5HIHNvIGl0IGlzIAorICogY29ycmVjdGx5IHNlZWRlZCBieSBSQU5EX3BvbGwoKS4KKyAqLworCitzdGF0aWMgaW50IGRyYmdfcmFuZF9hZGQoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqaW4sIGludCBpbmxlbiwKKwkJCQlkb3VibGUgZW50cm9weSkKKwl7CisJUkFORF9TU0xlYXkoKS0+YWRkKGluLCBpbmxlbiwgZW50cm9weSk7CisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IGRyYmdfcmFuZF9zZWVkKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmluLCBpbnQgaW5sZW4pCisJeworCVJBTkRfU1NMZWF5KCktPnNlZWQoaW4sIGlubGVuKTsKKwlyZXR1cm4gMTsKKwl9CisKKyNpZm5kZWYgT1BFTlNTTF9EUkJHX0RFRkFVTFRfVFlQRQorI2RlZmluZSBPUEVOU1NMX0RSQkdfREVGQVVMVF9UWVBFCU5JRF9hZXNfMjU2X2N0cgorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfRFJCR19ERUZBVUxUX0ZMQUdTCisjZGVmaW5lIE9QRU5TU0xfRFJCR19ERUZBVUxUX0ZMQUdTCURSQkdfRkxBR19DVFJfVVNFX0RGCisjZW5kaWYgCisKK3N0YXRpYyBpbnQgZmlwc19kcmJnX3R5cGUgPSBPUEVOU1NMX0RSQkdfREVGQVVMVF9UWVBFOworc3RhdGljIGludCBmaXBzX2RyYmdfZmxhZ3MgPSBPUEVOU1NMX0RSQkdfREVGQVVMVF9GTEFHUzsKKwordm9pZCBSQU5EX3NldF9maXBzX2RyYmdfdHlwZShpbnQgdHlwZSwgaW50IGZsYWdzKQorCXsKKwlmaXBzX2RyYmdfdHlwZSA9IHR5cGU7CisJZmlwc19kcmJnX2ZsYWdzID0gZmxhZ3M7CisJfQorCitpbnQgUkFORF9pbml0X2ZpcHModm9pZCkKKwl7CisJRFJCR19DVFggKmRjdHg7CisJc2l6ZV90IHBsZW47CisJdW5zaWduZWQgY2hhciBwZXJzWzMyXSwgKnA7CisJZGN0eCA9IEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpOworICAgICAgICBpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgZmlwc19kcmJnX3R5cGUsIGZpcHNfZHJiZ19mbGFncykgPD0gMCkKKwkJeworCQlSQU5EZXJyKFJBTkRfRl9SQU5EX0lOSVRfRklQUywgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHKTsKKwkJcmV0dXJuIDA7CisJCX0KKwkJCisgICAgICAgIEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsCisJCQkJZHJiZ19nZXRfZW50cm9weSwgZHJiZ19mcmVlX2VudHJvcHksIDIwLAorCQkJCWRyYmdfZ2V0X2VudHJvcHksIGRyYmdfZnJlZV9lbnRyb3B5KTsKKwlGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKGRjdHgsIGRyYmdfZ2V0X2FkaW4sIDAsCisJCQkJCWRyYmdfcmFuZF9zZWVkLCBkcmJnX3JhbmRfYWRkKTsKKwkvKiBQZXJzb25hbGlzYXRpb24gc3RyaW5nOiBhIHN0cmluZyBmb2xsb3dlZCBieSBkYXRlIHRpbWUgdmVjdG9yICovCisJc3RyY3B5KChjaGFyICopcGVycywgIk9wZW5TU0wgRFJCRzIuMCIpOworCXBsZW4gPSBkcmJnX2dldF9hZGluKGRjdHgsICZwKTsKKwltZW1jcHkocGVycyArIDE2LCBwLCBwbGVuKTsKKworICAgICAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHNpemVvZihwZXJzKSkgPD0gMCkKKwkJeworCQlSQU5EZXJyKFJBTkRfRl9SQU5EX0lOSVRfRklQUywgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyk7CisJCXJldHVybiAwOworCQl9CisgICAgICAgIEZJUFNfcmFuZF9zZXRfbWV0aG9kKEZJUFNfZHJiZ19tZXRob2QoKSk7CisJcmV0dXJuIDE7CisJfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzIvcmMyLmggYi9jcnlwdG8vcmMyL3JjMi5oCmluZGV4IDM0YzgzNjIuLmU1NDJlYzkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzIvcmMyLmgKKysrIGIvY3J5cHRvL3JjMi9yYzIuaApAQCAtNzksNyArNzksOSBAQAogCVJDMl9JTlQgZGF0YVs2NF07CiAJfSBSQzJfS0VZOwogCi0gCisjaWZkZWYgT1BFTlNTTF9GSVBTIAordm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CisjZW5kaWYKIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxSQzJfS0VZICprZXksCiAJCSAgICAgaW50IGVuYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmMyL3JjMl9za2V5LmMgYi9jcnlwdG8vcmMyL3JjMl9za2V5LmMKaW5kZXggMDE1MGIwZS4uNjY2OGFjMCAxMDA2NDQKLS0tIGEvY3J5cHRvL3JjMi9yYzJfc2tleS5jCisrKyBiL2NyeXB0by9yYzIvcmMyX3NrZXkuYwpAQCAtNTYsNiArNTYsNyBAQAogICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KICAqLwogCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgogI2luY2x1ZGUgInJjMl9sb2NsLmgiCiAKQEAgLTk1LDYgKzk2LDEzIEBACiAgKiB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIDEwMjQgZm9yIHRoZSAnYml0cycgcGFyYW1ldGVyLiAgQnNhZmUgdXNlcwogICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyBsZW4qOCAqLwogdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQorI2lmZGVmIE9QRU5TU0xfRklQUworCXsKKwlmaXBzX2NpcGhlcl9hYm9ydChSQzIpOworCXByaXZhdGVfUkMyX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOworCX0KK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQorI2VuZGlmCiAJewogCWludCBpLGo7CiAJdW5zaWduZWQgY2hhciAqazsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwgYi9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCmluZGV4IDM4YTQ0YTcuLjVjOWFjNmEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwKKysrIGIvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbApAQCAtMjgsNiArMjgsMzQgQEAKICMKICMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIAorIyBNYXkgMjAxMQorIworIyBPcHRpbWl6ZSBmb3IgQ29yZTIgYW5kIFdlc3RtZXJlIFthbmQgaW5jaWRlbnRhbGx5IE9wdGVyb25dLiBDdXJyZW50CisjIHBlcmZvcm1hbmNlIGluIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgKGxlc3MgaXMgYmV0dGVyKSBhbmQKKyMgaW1wcm92ZW1lbnQgcmVsYXRpdmUgdG8gcHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSBpczoKKyMKKyMgUGVudGl1bQkxMC4yCQkJIyBvcmlnaW5hbCBudW1iZXJzCisjIFBlbnRpdW0gSUlJCTcuOCgqKQorIyBJbnRlbCBQNAk3LjUKKyMKKyMgT3B0ZXJvbgk2LjEvKzIwJQkJIyBuZXcgTU1YIG51bWJlcnMKKyMgQ29yZTIJCTUuMy8rNjclKCoqKQorIyBXZXN0bWVyZQk1LjEvKzk0JSgqKikKKyMgU2FuZHkgQnJpZGdlCTUuMC8rOCUKKyMgQXRvbQkJMTIuNi8rNiUKKyMKKyMgKCopCVBJSUkgY2FuIGFjdHVhbGx5IGRlbGl2ZXIgNi42IGN5Y2xlcyBwZXIgYnl0ZSB3aXRoIE1NWCBjb2RlLAorIwlidXQgdGhpcyBzcGVjaWZpYyBjb2RlIHBlcmZvcm1zIHBvb3JseSBvbiBDb3JlMi4gQW5kIHZpY2UKKyMJdmVyc2EsIGJlbG93IE1NWC9TU0UgY29kZSBkZWxpdmVyaW5nIDUuOC83LjEgb24gQ29yZTIgcGVyZm9ybXMKKyMJcG9vcmx5IG9uIFBJSUksIGF0IDguMC8xNC41Oi0oIEFzIFBJSUkgaXMgbm90IGEgImhvdCIgQ1BVCisjCVthbnltb3JlXSwgSSBjaG9zZSB0byBkaXNjYXJkIFBJSUktc3BlY2lmaWMgY29kZSBwYXRoIGFuZCBvcHQKKyMJZm9yIG9yaWdpbmFsIElBTFUtb25seSBjb2RlLCB3aGljaCBpcyB3aHkgTU1YL1NTRSBjb2RlIHBhdGgKKyMJaXMgZ3VhcmRlZCBieSBTU0UyIGJpdCAoc2VlIGJlbG93KSwgbm90IE1NWC9TU0UuCisjICgqKikJUGVyZm9ybWFuY2UgdnMuIGJsb2NrIHNpemUgb24gQ29yZTIgYW5kIFdlc3RtZXJlIGhhZCBhIG1heGltdW0KKyMJYXQgLi4uIDY0IGJ5dGVzIGJsb2NrIHNpemUuIEFuZCBpdCB3YXMgcXVpdGUgYSBtYXhpbXVtLCA0MC02MCUKKyMJaW4gY29tcGFyaXNvbiB0byBsYXJnZXN0IDhLQiBibG9jayBzaXplLiBBYm92ZSBpbXByb3ZlbWVudAorIwljb2VmZmljaWVudHMgYXJlIGZvciB0aGUgbGFyZ2VzdCBibG9jayBzaXplLgorCiAkMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwogcHVzaChASU5DLCIke2Rpcn0iLCIke2Rpcn0uLi8uLi9wZXJsYXNtIik7CiByZXF1aXJlICJ4ODZhc20ucGwiOwpAQCAtNjIsNiArOTAsNjggQEAKIAkmJGZ1bmMJKCRvdXQsJkRXUCgwLCRkYXQsJHR5LDQpKTsKIH0KIAoraWYgKCRhbHQ9MCkgeworICAjID4yMCUgZmFzdGVyIG9uIEF0b20gYW5kIFNhbmR5IEJyaWRnZVshXSwgOCUgZmFzdGVyIG9uIE9wdGVyb24sCisgICMgYnV0IH40MCUgc2xvd2VyIG9uIENvcmUyIGFuZCBXZXN0bWVyZS4uLiBBdHRlbXB0IHRvIGFkZCBtb3Z6CisgICMgYnJpbmdzIGRvd24gT3B0ZXJvbiBieSAyNSUsIEF0b20gYW5kIFNhbmR5IEJyaWRnZSBieSAxNSUsIHlldAorICAjIG9uIENvcmUyIHdpdGggbW92eiBpdCdzIGFsbW9zdCAyMCUgc2xvd2VyIHRoYW4gYmVsb3cgYWx0ZXJuYXRpdmUKKyAgIyBjb2RlLi4uIFllcywgaXQncyBhIHRvdGFsIG1lc3MuLi4KKyAgbXkgQFhYPSgkeHgsJG91dCk7CisgICRSQzRfbG9vcF9tbXggPSBzdWIgewkJIyBTU0UgYWN0dWFsbHkuLi4KKyAgICBteSAkaT1zaGlmdDsKKyAgICBteSAkaj0kaTw9MD8wOiRpPj4xOworICAgIG15ICRtbT0kaTw9MD8ibW0wIjoibW0iLigkaSYxKTsKKworCSZhZGQJKCZMQigkeXkpLCZMQigkdHgpKTsKKwkmbGVhCShAWFhbMV0sJkRXUCgxLEBYWFswXSkpOworCSZweG9yCSgibW0yIiwibW0wIikJCQkJaWYgKCRpPT0wKTsKKwkmcHNsbHEJKCJtbTEiLDgpCQkJCWlmICgkaT09MCk7CisJJmFuZAkoQFhYWzFdLDB4ZmYpOworCSZweG9yCSgibW0wIiwibW0wIikJCQkJaWYgKCRpPD0wKTsKKwkmbW92CSgkdHksJkRXUCgwLCRkYXQsJHl5LDQpKTsKKwkmbW92CSgmRFdQKDAsJGRhdCwkeXksNCksJHR4KTsKKwkmcHhvcgkoIm1tMSIsIm1tMiIpCQkJCWlmICgkaT09MCk7CisJJm1vdgkoJkRXUCgwLCRkYXQsJFhYWzBdLDQpLCR0eSk7CisJJmFkZAkoJkxCKCR0eSksJkxCKCR0eCkpOworCSZtb3ZkCShAWFhbMF0sIm1tNyIpCQkJCWlmICgkaT09MCk7CisJJm1vdgkoJHR4LCZEV1AoMCwkZGF0LEBYWFsxXSw0KSk7CisJJnB4b3IJKCJtbTEiLCJtbTEiKQkJCQlpZiAoJGk9PTEpOworCSZtb3ZxCSgibW0yIiwmUVdQKDAsJGlucCkpCQkJaWYgKCRpPT0xKTsKKwkmbW92cQkoJlFXUCgtOCwoQFhYWzBdLCRpbnApKSwibW0xIikJCWlmICgkaT09MCk7CisJJnBpbnNydwkoJG1tLCZEV1AoMCwkZGF0LCR0eSw0KSwkaik7CisKKwlwdXNoCShAWFgsc2hpZnQoQFhYKSkJCQlpZiAoJGk+PTApOworICB9Cit9IGVsc2UgeworICAjIFVzaW5nIHBpbnNydyBoZXJlIGltcHJvdmVzIHBlcmZvcm1hbmUgb24gSW50ZWwgQ1BVcyBieSAyLTMlLCBidXQKKyAgIyBicmluZ3MgZG93biBBTUQgYnkgNyUuLi4KKyAgJFJDNF9sb29wX21teCA9IHN1YiB7CisgICAgbXkgJGk9c2hpZnQ7CisKKwkmYWRkCSgmTEIoJHl5KSwmTEIoJHR4KSk7CisJJnBzbGxxCSgibW0xIiw4KigoJGktMSkmNykpCQkJaWYgKGFicygkaSkhPTEpOworCSZtb3YJKCR0eSwmRFdQKDAsJGRhdCwkeXksNCkpOworCSZtb3YJKCZEV1AoMCwkZGF0LCR5eSw0KSwkdHgpOworCSZtb3YJKCZEV1AoMCwkZGF0LCR4eCw0KSwkdHkpOworCSZpbmMJKCR4eCk7CisJJmFkZAkoJHR5LCR0eCk7CisJJm1vdnoJKCR4eCwmTEIoJHh4KSk7CQkJCSMgKCopCisJJm1vdnoJKCR0eSwmTEIoJHR5KSk7CQkJCSMgKCopCisJJnB4b3IJKCJtbTIiLCRpPT0xPyJtbTAiOiJtbTEiKQkJaWYgKCRpPj0wKTsKKwkmbW92cQkoIm1tMCIsJlFXUCgwLCRpbnApKQkJCWlmICgkaTw9MCk7CisJJm1vdnEJKCZRV1AoLTgsKCRvdXQsJGlucCkpLCJtbTIiKQkJaWYgKCRpPT0wKTsKKwkmbW92CSgkdHgsJkRXUCgwLCRkYXQsJHh4LDQpKTsKKwkmbW92ZAkoJGk+MD8ibW0xIjoibW0yIiwmRFdQKDAsJGRhdCwkdHksNCkpOworCisJIyAoKikJVGhpcyBpcyB0aGUga2V5IHRvIENvcmUyIGFuZCBXZXN0bWVyZSBwZXJmb3JtYW5jZS4KKwkjCVdoaXRob3V0IG1vdnogb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbiBsb2dpYyBjb25mdXNlcworCSMJaXRzZWxmIGFuZCBmYWlscyB0byByZW9yZGVyIGxvYWRzIGFuZCBzdG9yZXMuIFByb2JsZW0KKwkjCWFwcGVhcnMgdG8gYmUgZml4ZWQgaW4gU2FuZHkgQnJpZGdlLi4uCisgIH0KK30KKworJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOworCiAjIHZvaWQgUkM0KFJDNF9LRVkgKmtleSxzaXplX3QgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCx1bnNpZ25lZCBjaGFyICpvdXQpOwogJmZ1bmN0aW9uX2JlZ2luKCJSQzQiKTsKIAkmbW92CSgkZGF0LCZ3cGFyYW0oMCkpOwkjIGxvYWQga2V5IHNjaGVkdWxlIHBvaW50ZXIKQEAgLTk0LDExICsxODQsNTYgQEAKIAkmYW5kCSgkdHksLTQpOwkJIyBob3cgbWFueSA0LWJ5dGUgY2h1bmtzPwogCSZqegkoJmxhYmVsKCJsb29wMSIpKTsKIAorCSZ0ZXN0CSgkdHksLTgpOworCSZtb3YJKCZ3cGFyYW0oMyksJG91dCk7CSMgJG91dCBhcyBhY2N1bXVsYXRvciBpbiB0aGVzZSBsb29wcworCSZqegkoJmxhYmVsKCJnbzRsb29wNCIpKTsKKworCSZwaWNtZXVwKCRvdXQsIk9QRU5TU0xfaWEzMmNhcF9QIik7CisJJmJ0CSgmRFdQKDAsJG91dCksMjYpOwkjIGNoZWNrIFNTRTIgYml0IFtjb3VsZCBoYXZlIGJlZW4gTU1YXQorCSZqbmMJKCZsYWJlbCgiZ280bG9vcDQiKSk7CisKKwkmbW92CSgkb3V0LCZ3cGFyYW0oMykpCWlmICghJGFsdCk7CisJJm1vdmQJKCJtbTciLCZ3cGFyYW0oMykpCWlmICgkYWx0KTsKKwkmYW5kCSgkdHksLTgpOworCSZsZWEJKCR0eSwmRFdQKC04LCRpbnAsJHR5KSk7CisJJm1vdgkoJkRXUCgtNCwkZGF0KSwkdHkpOwkjIHNhdmUgaW5wdXQrKGxlbi84KSo4LTgKKworCSYkUkM0X2xvb3BfbW14KC0xKTsKKwkmam1wKCZsYWJlbCgibG9vcF9tbXhfZW50ZXIiKSk7CisKKwkmc2V0X2xhYmVsKCJsb29wX21teCIsMTYpOworCQkmJFJDNF9sb29wX21teCgwKTsKKwkmc2V0X2xhYmVsKCJsb29wX21teF9lbnRlciIpOworCQlmb3IgCSgkaT0xOyRpPDg7JGkrKykgeyAmJFJDNF9sb29wX21teCgkaSk7IH0KKwkJJm1vdgkoJHR5LCR5eSk7CisJCSZ4b3IJKCR5eSwkeXkpOwkJIyB0aGlzIGlzIHNlY29uZCBrZXkgdG8gQ29yZTIKKwkJJm1vdgkoJkxCKCR5eSksJkxCKCR0eSkpOwkjIGFuZCBXZXN0bWVyZSBwZXJmb3JtYW5jZS4uLgorCQkmY21wCSgkaW5wLCZEV1AoLTQsJGRhdCkpOworCQkmbGVhCSgkaW5wLCZEV1AoOCwkaW5wKSk7CisJJmpiCSgmbGFiZWwoImxvb3BfbW14IikpOworCisgICAgaWYgKCRhbHQpIHsKKwkmbW92ZAkoJG91dCwibW03Iik7CisJJnB4b3IJKCJtbTIiLCJtbTAiKTsKKwkmcHNsbHEJKCJtbTEiLDgpOworCSZweG9yCSgibW0xIiwibW0yIik7CisJJm1vdnEJKCZRV1AoLTgsJG91dCwkaW5wKSwibW0xIik7CisgICAgfSBlbHNlIHsKKwkmcHNsbHEJKCJtbTEiLDU2KTsKKwkmcHhvcgkoIm1tMiIsIm1tMSIpOworCSZtb3ZxCSgmUVdQKC04LCRvdXQsJGlucCksIm1tMiIpOworICAgIH0KKwkmZW1tcwkoKTsKKworCSZjbXAJKCRpbnAsJndwYXJhbSgxKSk7CSMgY29tcGFyZSB0byBpbnB1dCtsZW4KKwkmamUJKCZsYWJlbCgiZG9uZSIpKTsKKwkmam1wCSgmbGFiZWwoImxvb3AxIikpOworCismc2V0X2xhYmVsKCJnbzRsb29wNCIsMTYpOwogCSZsZWEJKCR0eSwmRFdQKC00LCRpbnAsJHR5KSk7CiAJJm1vdgkoJndwYXJhbSgyKSwkdHkpOwkjIHNhdmUgaW5wdXQrKGxlbi80KSo0LTQKLQkmbW92CSgmd3BhcmFtKDMpLCRvdXQpOwkjICRvdXQgYXMgYWNjdW11bGF0b3IgaW4gdGhpcyBsb29wCiAKLQkmc2V0X2xhYmVsKCJsb29wNCIsMTYpOworCSZzZXRfbGFiZWwoImxvb3A0Iik7CiAJCWZvciAoJGk9MDskaTw0OyRpKyspIHsgUkM0X2xvb3AoJGkpOyB9CiAJCSZyb3IJKCRvdXQsOCk7CiAJCSZ4b3IJKCRvdXQsJkRXUCgwLCRpbnApKTsKQEAgLTE1MSw3ICsyODYsNyBAQAogCiAmc2V0X2xhYmVsKCJkb25lIik7CiAJJmRlYwkoJkxCKCR4eCkpOwotCSZtb3YJKCZCUCgtNCwkZGF0KSwmTEIoJHl5KSk7CSMgc2F2ZSBrZXktPnkKKwkmbW92CSgmRFdQKC00LCRkYXQpLCR5eSk7CQkjIHNhdmUga2V5LT55CiAJJm1vdgkoJkJQKC04LCRkYXQpLCZMQigkeHgpKTsJIyBzYXZlIGtleS0+eAogJnNldF9sYWJlbCgiYWJvcnQiKTsKICZmdW5jdGlvbl9lbmQoIlJDNCIpOwpAQCAtMTY0LDEwICsyOTksOCBAQAogJGlkbz0iZWN4IjsKICRpZHg9ImVkeCI7CiAKLSZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKLQogIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotJmZ1bmN0aW9uX2JlZ2luKCJSQzRfc2V0X2tleSIpOworJmZ1bmN0aW9uX2JlZ2luKCJwcml2YXRlX1JDNF9zZXRfa2V5Iik7CiAJJm1vdgkoJG91dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKIAkmbW92CSgkaWRpLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIGxlbgogCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgZGF0YQpAQCAtMjQ1LDcgKzM3OCw3IEBACiAJJnhvcgkoImVheCIsImVheCIpOwogCSZtb3YJKCZEV1AoLTgsJG91dCksImVheCIpOwkJIyBrZXktPng9MDsKIAkmbW92CSgmRFdQKC00LCRvdXQpLCJlYXgiKTsJCSMga2V5LT55PTA7Ci0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tleSIpOworJmZ1bmN0aW9uX2VuZCgicHJpdmF0ZV9SQzRfc2V0X2tleSIpOwogCiAjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOwogJmZ1bmN0aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7CkBAIC0yNTQsMTQgKzM4NywyMSBAQAogCSZibGluZHBvcCgiZWF4Iik7CiAJJmxlYQkoImVheCIsJkRXUCgmbGFiZWwoIm9wdHMiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWF4IikpOwogCSZwaWNtZXVwKCJlZHgiLCJPUEVOU1NMX2lhMzJjYXBfUCIpOwotCSZidAkoJkRXUCgwLCJlZHgiKSwyMCk7Ci0JJmpuYwkoJmxhYmVsKCJza2lwIikpOwotCSAgJmFkZAkoImVheCIsMTIpOwotCSZzZXRfbGFiZWwoInNraXAiKTsKKwkmbW92CSgiZWR4IiwmRFdQKDAsImVkeCIpKTsKKwkmYnQJKCJlZHgiLDIwKTsKKwkmamMJKCZsYWJlbCgiMXhjaGFyIikpOworCSZidAkoImVkeCIsMjYpOworCSZqbmMJKCZsYWJlbCgicmV0IikpOworCSZhZGQJKCJlYXgiLDI1KTsKKwkmcmV0CSgpOworJnNldF9sYWJlbCgiMXhjaGFyIik7CisJJmFkZAkoImVheCIsMTIpOworJnNldF9sYWJlbCgicmV0Iik7CiAJJnJldAkoKTsKICZzZXRfbGFiZWwoIm9wdHMiLDY0KTsKICZhc2NpegkoInJjNCg0eCxpbnQpIik7CiAmYXNjaXoJKCJyYzQoMXgsY2hhcikiKTsKKyZhc2NpegkoInJjNCg4eCxtbXgpIik7CiAmYXNjaXoJKCJSQzQgZm9yIHg4NiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIpOwogJmFsaWduCSg2NCk7CiAmZnVuY3Rpb25fZW5kX0IoIlJDNF9vcHRpb25zIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmM0L2FzbS9yYzQtbWQ1LXg4Nl82NC5wbCBiL2NyeXB0by9yYzQvYXNtL3JjNC1tZDUteDg2XzY0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNjg0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcmM0L2FzbS9yYzQtbWQ1LXg4Nl82NC5wbApAQCAtMCwwICsxLDYzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBKdW5lIDIwMTEKKyMKKyMgVGhpcyBpcyBSQzQrTUQ1ICJzdGl0Y2giIGltcGxlbWVudGF0aW9uLiBUaGUgaWRlYSwgYXMgc3BlbGxlZCBpbgorIyBodHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9pbnRhcmNoL3BhcGVycy8zMjM2ODYucGRmLCBpcyB0aGF0CisjIHNpbmNlIGJvdGggYWxnb3JpdGhtcyBleGhpYml0IGluc3RydWN0aW9uLWxldmVsIHBhcmFsbGVsaXNtLCBJTFAsCisjIGJlbG93IHRoZW9yZXRpY2FsIG1heGltdW0sIGludGVybGVhdmluZyB0aGVtIHdvdWxkIGFsbG93IHRvIHV0aWxpemUKKyMgcHJvY2Vzc29yIHJlc291cmNlcyBiZXR0ZXIgYW5kIGFjaGlldmUgYmV0dGVyIHBlcmZvcm1hbmNlLiBSQzQKKyMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UgaXMgdmlydHVhbGx5IGlkZW50aWNhbCB0byByYzQteDg2XzY0LnBsLCB3aGljaAorIyBpcyBoZWF2aWx5IGJhc2VkIG9uIHN1Ym1pc3Npb24gYnkgTWF4aW0gUGVybWlub3YsIE1heGltIExvY2t0eXVraGluCisjIGFuZCBKaW0gR3VpbGZvcmQgb2YgSW50ZWwuIE1ENSBpcyBmcmVzaCBpbXBsZW1lbnRhdGlvbiBhaW1pbmcgdG8KKyMgbWluaW1pemUgcmVnaXN0ZXIgdXNhZ2UsIHdoaWNoIHdhcyB1c2VkIGFzICJtYWluIHRocmVhZCIgd2l0aCBSQzQKKyMgd2VhdmVkIGludG8gaXQsIG9uZSBSQzQgcm91bmQgcGVyIG9uZSBNRDUgcm91bmQuIEluIGFkZGl0aW9uIHRvIHRoZQorIyBzdGljaGVkIHN1YnJvdXRpbmUgdGhlIHNjcmlwdCBjYW4gZ2VuZXJhdGUgc3RhbmRhbG9uZSByZXBsYWNlbWVudAorIyBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIgYW5kIFJDNC4gQmVsb3cgYXJlIHBlcmZvcm1hbmNlIG51bWJlcnMgaW4KKyMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSwgbGVzcyBpcyBiZXR0ZXIsIGZvciB0aGVzZSB0aGUgc3RhbmRhbG9uZQorIyBzdWJyb3V0aW5lcywgc3VtIG9mIHRoZW0sIGFuZCBzdGl0Y2hlZCBvbmU6CisjCisjCQlSQzQJTUQ1CVJDNCtNRDUJc3RpdGNoCWdhaW4KKyMgT3B0ZXJvbgk2LjUoKikJNS40CTExLjkJNy4wCSs3MCUoKikKKyMgQ29yZTIJCTYuNQk1LjgJMTIuMwk3LjcJKzYwJQorIyBXZXN0bWVyZQk0LjMJNS4yCTkuNQk3LjAJKzM2JQorIyBTYW5keSBCcmlkZ2UJNC4yCTUuNQk5LjcJNi44CSs0MyUKKyMgQXRvbQkJOS4zCTYuNQkxNS44CTExLjEJKzQyJQorIworIyAoKikJcmM0LXg4Nl82NC5wbCBkZWxpdmVycyA1LjMgb24gT3B0ZXJvbiwgc28gcmVhbCBpbXByb3ZlbWVudAorIwlpcyArNTMlLi4uCisKK215ICgkcmM0LCRtZDUpPSgxLDEpOwkjIHdoYXQgdG8gZ2VuZXJhdGU/CitteSAkRD0iIyIgaWYgKCEkbWQ1KTsJIyBpZiBzZXQgdG8gIiMiLCBNRDUgaXMgc3RpdGNoZWQgaW50byBSQzQoKSwKKwkJCSMgYnV0IGl0cyByZXN1bHQgaXMgZGlzY2FyZGVkLiBJZGVhIGhlcmUgaXMKKwkJCSMgdG8gYmUgYWJsZSB0byB1c2UgJ29wZW5zc2wgc3BlZWQgcmM0JyBmb3IKKwkJCSMgYmVuY2htYXJraW5nIHRoZSBzdGl0Y2hlZCBzdWJyb3V0aW5lLi4uIAorCitteSAkZmxhdm91ciA9IHNoaWZ0OworbXkgJG91dHB1dCAgPSBzaGlmdDsKK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKworbXkgJHdpbjY0PTA7ICR3aW42ND0xIGlmICgkZmxhdm91ciA9fiAvW25tXWFzbXxtaW5ndzY0LyB8fCAkb3V0cHV0ID1+IC9cLmFzbSQvKTsKKworJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgbXkgJGRpcj0kMTsgbXkgJHhsYXRlOworKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOworCitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOworCitteSAoJGRhdCwkaW4wLCRvdXQsJGN0eCwkaW5wLCRsZW4sICRmdW5jLCRuYXJncyk7CisKK2lmICgkcmM0ICYmICEkbWQ1KSB7CisgICgkZGF0LCRsZW4sJGluMCwkb3V0KSA9ICgiJXJkaSIsIiVyc2kiLCIlcmR4IiwiJXJjeCIpOworICAkZnVuYz0iUkM0IjsJCQkJJG5hcmdzPTQ7Cit9IGVsc2lmICgkbWQ1ICYmICEkcmM0KSB7CisgICgkY3R4LCRpbnAsJGxlbikgPSAoIiVyZGkiLCIlcnNpIiwiJXJkeCIpOworICAkZnVuYz0ibWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyIjsJJG5hcmdzPTM7Cit9IGVsc2UgeworICAoJGRhdCwkaW4wLCRvdXQsJGN0eCwkaW5wLCRsZW4pID0gKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4IiwiJXI4IiwiJXI5Iik7CisgICRmdW5jPSJyYzRfbWQ1X2VuYyI7CQkJJG5hcmdzPTY7CisgICMgdm9pZCByYzRfbWQ1X2VuYygKKyAgIwkJUkM0X0tFWSAqa2V5LAkJIworICAjCQljb25zdCB2b2lkICppbjAsCSMgUkM0IGlucHV0CisgICMJCXZvaWQgKm91dCwJCSMgUkM0IG91dHB1dAorICAjCQlNRDVfQ1RYICpjdHgsCQkjCisgICMJCWNvbnN0IHZvaWQgKmlucCwJIyBNRDUgaW5wdXQKKyAgIwkJc2l6ZV90IGxlbik7CQkjIG51bWJlciBvZiA2NC1ieXRlIGJsb2NrcworfQorCitteSBASz0oCTB4ZDc2YWE0NzgsMHhlOGM3Yjc1NiwweDI0MjA3MGRiLDB4YzFiZGNlZWUsCisJMHhmNTdjMGZhZiwweDQ3ODdjNjJhLDB4YTgzMDQ2MTMsMHhmZDQ2OTUwMSwKKwkweDY5ODA5OGQ4LDB4OGI0NGY3YWYsMHhmZmZmNWJiMSwweDg5NWNkN2JlLAorCTB4NmI5MDExMjIsMHhmZDk4NzE5MywweGE2Nzk0MzhlLDB4NDliNDA4MjEsCisKKwkweGY2MWUyNTYyLDB4YzA0MGIzNDAsMHgyNjVlNWE1MSwweGU5YjZjN2FhLAorCTB4ZDYyZjEwNWQsMHgwMjQ0MTQ1MywweGQ4YTFlNjgxLDB4ZTdkM2ZiYzgsCisJMHgyMWUxY2RlNiwweGMzMzcwN2Q2LDB4ZjRkNTBkODcsMHg0NTVhMTRlZCwKKwkweGE5ZTNlOTA1LDB4ZmNlZmEzZjgsMHg2NzZmMDJkOSwweDhkMmE0YzhhLAorCisJMHhmZmZhMzk0MiwweDg3NzFmNjgxLDB4NmQ5ZDYxMjIsMHhmZGU1MzgwYywKKwkweGE0YmVlYTQ0LDB4NGJkZWNmYTksMHhmNmJiNGI2MCwweGJlYmZiYzcwLAorCTB4Mjg5YjdlYzYsMHhlYWExMjdmYSwweGQ0ZWYzMDg1LDB4MDQ4ODFkMDUsCisJMHhkOWQ0ZDAzOSwweGU2ZGI5OWU1LDB4MWZhMjdjZjgsMHhjNGFjNTY2NSwKKworCTB4ZjQyOTIyNDQsMHg0MzJhZmY5NywweGFiOTQyM2E3LDB4ZmM5M2EwMzksCisJMHg2NTViNTljMywweDhmMGNjYzkyLDB4ZmZlZmY0N2QsMHg4NTg0NWRkMSwKKwkweDZmYTg3ZTRmLDB4ZmUyY2U2ZTAsMHhhMzAxNDMxNCwweDRlMDgxMWExLAorCTB4Zjc1MzdlODIsMHhiZDNhZjIzNSwweDJhZDdkMmJiLDB4ZWI4NmQzOTEJKTsKKworbXkgQFY9KCIlcjhkIiwiJXI5ZCIsIiVyMTBkIiwiJXIxMWQiKTsJIyBNRDUgcmVnaXN0ZXJzCitteSAkdG1wPSIlcjEyZCI7CisKK215IEBYWD0oIiVyYnAiLCIlcnNpIik7CQkJIyBSQzQgcmVnaXN0ZXJzCitteSBAVFg9KCIlcmF4IiwiJXJieCIpOworbXkgJFlZPSIlcmN4IjsKK215ICRUWT0iJXJkeCI7CisKK215ICRNT0Q9MzI7CQkJCSMgMTYsIDMyIG9yIDY0CisKKyRjb2RlLj08PF9fXzsKKy50ZXh0CisuYWxpZ24gMTYKKworLmdsb2JsCSRmdW5jCisudHlwZQkkZnVuYyxcQGZ1bmN0aW9uLCRuYXJncworJGZ1bmM6CisJY21wCVwkMCwkbGVuCisJamUJLkxhYm9ydAorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCXB1c2gJJXIxMworCXB1c2gJJXIxNAorCXB1c2gJJXIxNQorCXN1YglcJDQwLCVyc3AKKy5MYm9keToKK19fXworaWYgKCRyYzQpIHsKKyRjb2RlLj08PF9fXzsKKyREI21kNSMJbW92CSRjdHgsJXIxMQkJIyByZWFzc2lnbiBhcmd1bWVudHMKKwltb3YJJGxlbiwlcjEyCisJbW92CSRpbjAsJXIxMworCW1vdgkkb3V0LCVyMTQKKyREI21kNSMJbW92CSRpbnAsJXIxNQorX19fCisgICAgJGN0eD0iJXIxMSIJaWYgKCRtZDUpOwkJIyByZWFzc2lnbiBhcmd1bWVudHMKKyAgICAkbGVuPSIlcjEyIjsKKyAgICAkaW4wPSIlcjEzIjsKKyAgICAkb3V0PSIlcjE0IjsKKyAgICAkaW5wPSIlcjE1IglpZiAoJG1kNSk7CisgICAgJGlucD0kaW4wCWlmICghJG1kNSk7CiskY29kZS49PDxfX187CisJeG9yCSRYWFswXSwkWFhbMF0KKwl4b3IJJFlZLCRZWQorCisJbGVhCTgoJGRhdCksJGRhdAorCW1vdgktOCgkZGF0KSwkWFhbMF0jYgorCW1vdgktNCgkZGF0KSwkWVkjYgorCisJaW5jCSRYWFswXSNiCisJc3ViCSRpbjAsJG91dAorCW1vdmwJKCRkYXQsJFhYWzBdLDQpLCRUWFswXSNkCitfX18KKyRjb2RlLj08PF9fXyBpZiAoISRtZDUpOworCXhvcgkkVFhbMV0sJFRYWzFdCisJdGVzdAlcJC0xMjgsJGxlbgorCWp6CS5Mb29wMQorCXN1YgkkWFhbMF0sJFRYWzFdCisJYW5kCVwkYCRNT0QtMWAsJFRYWzFdCisJanoJLkxvb3Ake01PRH1faXNfaG90CisJc3ViCSRUWFsxXSwkbGVuCisuTG9vcCR7TU9EfV93YXJtdXA6CisJYWRkCSRUWFswXSNiLCRZWSNiCisJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKKwltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQorCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCisJYWRkCSRUWSNiLCRUWFswXSNiCisJaW5jCSRYWFswXSNiCisJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKKwltb3ZsCSgkZGF0LCRYWFswXSw0KSwkVFhbMF0jZAorCXhvcmIJKCRpbjApLCRUWSNiCisJbW92YgkkVFkjYiwoJG91dCwkaW4wKQorCWxlYQkxKCRpbjApLCRpbjAKKwlkZWMJJFRYWzFdCisJam56CS5Mb29wJHtNT0R9X3dhcm11cAorCisJbW92CSRZWSwkVFhbMV0KKwl4b3IJJFlZLCRZWQorCW1vdgkkVFhbMV0jYiwkWVkjYgorCisuTG9vcCR7TU9EfV9pc19ob3Q6CisJbW92CSRsZW4sMzIoJXJzcCkJCSMgc2F2ZSBvcmlnaW5hbCAkbGVuCisJc2hyCVwkNiwkbGVuCQkjIG51bWJlciBvZiA2NC1ieXRlIGJsb2NrcworX19fCisgIGlmICgkRCAmJiAhJG1kNSkgewkJCSMgc3RpdGNoIGluIGR1bW15IE1ENQorICAgICRtZDU9MTsKKyAgICAkY3R4PSIlcjExIjsKKyAgICAkaW5wPSIlcjE1IjsKKyAgICAkY29kZS49PDxfX187CisJbW92CSVyc3AsJGN0eAorCW1vdgkkaW4wLCRpbnAKK19fXworICB9Cit9CiskY29kZS49PDxfX187CisjcmM0IwlhZGQJJFRYWzBdI2IsJFlZI2IKKyNyYzQjCWxlYQkoJGRhdCwkWFhbMF0sNCksJFhYWzFdCisJc2hsCVwkNiwkbGVuCisJYWRkCSRpbnAsJGxlbgkJIyBwb2ludGVyIHRvIHRoZSBlbmQgb2YgaW5wdXQKKwltb3YJJGxlbiwxNiglcnNwKQorCisjbWQ1Iwltb3YJJGN0eCwyNCglcnNwKQkJIyBzYXZlIHBvaW50ZXIgdG8gTUQ1X0NUWAorI21kNSMJbW92CTAqNCgkY3R4KSwkVlswXQkJIyBsb2FkIGN1cnJlbnQgaGFzaCB2YWx1ZSBmcm9tIE1ENV9DVFgKKyNtZDUjCW1vdgkxKjQoJGN0eCksJFZbMV0KKyNtZDUjCW1vdgkyKjQoJGN0eCksJFZbMl0KKyNtZDUjCW1vdgkzKjQoJGN0eCksJFZbM10KKwlqbXAJLkxvb3AKKworLmFsaWduCTE2CisuTG9vcDoKKyNtZDUjCW1vdgkkVlswXSwwKjQoJXJzcCkJCSMgcHV0IGFzaWRlIGN1cnJlbnQgaGFzaCB2YWx1ZQorI21kNSMJbW92CSRWWzFdLDEqNCglcnNwKQorI21kNSMJbW92CSRWWzJdLDIqNCglcnNwKQorI21kNSMJbW92CSRWWzNdLCR0bXAJCSMgZm9yd2FyZCByZWZlcmVuY2UKKyNtZDUjCW1vdgkkVlszXSwzKjQoJXJzcCkKK19fXworCitzdWIgUjAgeworICBteSAoJGksJGEsJGIsJGMsJGQpPUBfOworICBteSBAcm90MD0oNywxMiwxNywyMik7CisgIG15ICRqPSRpJTE2OworICBteSAkaz0kaSUkTU9EOworICBteSAkeG1tPSIleG1tIi4oJGomMSk7CisgICAgJGNvZGUuPSIJbW92ZHF1CSgkaW4wKSwleG1tMlxuIgkJaWYgKCRyYzQgJiYgJGo9PTE1KTsKKyAgICAkY29kZS49IglhZGQJXCQkTU9ELCRYWFswXSNiXG4iCWlmICgkcmM0ICYmICRqPT0xNSAmJiAkaz09JE1PRC0xKTsKKyAgICAkY29kZS49IglweG9yCSR4bW0sJHhtbVxuIgkJaWYgKCRyYzQgJiYgJGo8PTEpOworICAgICRjb2RlLj08PF9fXzsKKyNyYzQjCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCisjbWQ1Iwl4b3IJJGMsJHRtcAorI3JjNCMJbW92bAkkVFhbMF0jZCwoJGRhdCwkWVksNCkKKyNtZDUjCWFuZAkkYiwkdG1wCisjbWQ1IwlhZGQJNCpgJGpgKCRpbnApLCRhCisjcmM0IwlhZGQJJFRZI2IsJFRYWzBdI2IKKyNyYzQjCW1vdmwJYDQqKCgkaysxKSUkTU9EKWAoYCRrPT0kTU9ELTE/IiRkYXQsJFhYWzBdLDQiOiIkWFhbMV0iYCksJFRYWzFdI2QKKyNtZDUjCWFkZAlcJCRLWyRpXSwkYQorI21kNSMJeG9yCSRkLCR0bXAKKyNyYzQjCW1vdnoJJFRYWzBdI2IsJFRYWzBdI2QKKyNyYzQjCW1vdmwJJFRZI2QsNCokaygkWFhbMV0pCisjbWQ1IwlhZGQJJHRtcCwkYQorI3JjNCMJYWRkCSRUWFsxXSNiLCRZWSNiCisjbWQ1Iwlyb2wJXCQkcm90MFskaiU0XSwkYQorI21kNSMJbW92CWAkaj09MTU/IiRiIjoiJGMiYCwkdG1wCQkjIGZvcndhcmQgcmVmZXJlbmNlCisjcmM0IwlwaW5zcncJXCRgKCRqPj4xKSY3YCwoJGRhdCwkVFhbMF0sNCksJHhtbVxuCisjbWQ1IwlhZGQJJGIsJGEKK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJHJjNCAmJiAkaj09MTUgJiYgJGs9PSRNT0QtMSk7CisJbW92CSRZWSwkWFhbMV0KKwl4b3IJJFlZLCRZWQkJCQkjIGtleXdvcmQgdG8gcGFydGlhbCByZWdpc3RlcgorCW1vdgkkWFhbMV0jYiwkWVkjYgorCWxlYQkoJGRhdCwkWFhbMF0sNCksJFhYWzFdCitfX18KKyAgICAkY29kZS49PDxfX18gaWYgKCRyYzQgJiYgJGo9PTE1KTsKKwlwc2xscQlcJDgsJXhtbTEKKwlweG9yCSV4bW0wLCV4bW0yCisJcHhvcgkleG1tMSwleG1tMgorX19fCit9CitzdWIgUjEgeworICBteSAoJGksJGEsJGIsJGMsJGQpPUBfOworICBteSBAcm90MT0oNSw5LDE0LDIwKTsKKyAgbXkgJGo9JGklMTY7CisgIG15ICRrPSRpJSRNT0Q7CisgIG15ICR4bW09IiV4bW0iLigkaiYxKTsKKyAgICAkY29kZS49Igltb3ZkcXUJMTYoJGluMCksJXhtbTNcbiIJaWYgKCRyYzQgJiYgJGo9PTE1KTsKKyAgICAkY29kZS49IglhZGQJXCQkTU9ELCRYWFswXSNiXG4iCWlmICgkcmM0ICYmICRqPT0xNSAmJiAkaz09JE1PRC0xKTsKKyAgICAkY29kZS49IglweG9yCSR4bW0sJHhtbVxuIgkJaWYgKCRyYzQgJiYgJGo8PTEpOworICAgICRjb2RlLj08PF9fXzsKKyNyYzQjCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCisjbWQ1Iwl4b3IJJGIsJHRtcAorI3JjNCMJbW92bAkkVFhbMF0jZCwoJGRhdCwkWVksNCkKKyNtZDUjCWFuZAkkZCwkdG1wCisjbWQ1IwlhZGQJNCpgKCgxKzUqJGopJTE2KWAoJGlucCksJGEKKyNyYzQjCWFkZAkkVFkjYiwkVFhbMF0jYgorI3JjNCMJbW92bAlgNCooKCRrKzEpJSRNT0QpYChgJGs9PSRNT0QtMT8iJGRhdCwkWFhbMF0sNCI6IiRYWFsxXSJgKSwkVFhbMV0jZAorI21kNSMJYWRkCVwkJEtbJGldLCRhCisjbWQ1Iwl4b3IJJGMsJHRtcAorI3JjNCMJbW92egkkVFhbMF0jYiwkVFhbMF0jZAorI3JjNCMJbW92bAkkVFkjZCw0KiRrKCRYWFsxXSkKKyNtZDUjCWFkZAkkdG1wLCRhCisjcmM0IwlhZGQJJFRYWzFdI2IsJFlZI2IKKyNtZDUjCXJvbAlcJCRyb3QxWyRqJTRdLCRhCisjbWQ1Iwltb3YJYCRqPT0xNT8iJGMiOiIkYiJgLCR0bXAJCSMgZm9yd2FyZCByZWZlcmVuY2UKKyNyYzQjCXBpbnNydwlcJGAoJGo+PjEpJjdgLCgkZGF0LCRUWFswXSw0KSwkeG1tXG4KKyNtZDUjCWFkZAkkYiwkYQorX19fCisgICAgJGNvZGUuPTw8X19fIGlmICgkcmM0ICYmICRqPT0xNSAmJiAkaz09JE1PRC0xKTsKKwltb3YJJFlZLCRYWFsxXQorCXhvcgkkWVksJFlZCQkJCSMga2V5d29yZCB0byBwYXJ0aWFsIHJlZ2lzdGVyCisJbW92CSRYWFsxXSNiLCRZWSNiCisJbGVhCSgkZGF0LCRYWFswXSw0KSwkWFhbMV0KK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJHJjNCAmJiAkaj09MTUpOworCXBzbGxxCVwkOCwleG1tMQorCXB4b3IJJXhtbTAsJXhtbTMKKwlweG9yCSV4bW0xLCV4bW0zCitfX18KK30KK3N1YiBSMiB7CisgIG15ICgkaSwkYSwkYiwkYywkZCk9QF87CisgIG15IEByb3QyPSg0LDExLDE2LDIzKTsKKyAgbXkgJGo9JGklMTY7CisgIG15ICRrPSRpJSRNT0Q7CisgIG15ICR4bW09IiV4bW0iLigkaiYxKTsKKyAgICAkY29kZS49Igltb3ZkcXUJMzIoJGluMCksJXhtbTRcbiIJaWYgKCRyYzQgJiYgJGo9PTE1KTsKKyAgICAkY29kZS49IglhZGQJXCQkTU9ELCRYWFswXSNiXG4iCWlmICgkcmM0ICYmICRqPT0xNSAmJiAkaz09JE1PRC0xKTsKKyAgICAkY29kZS49IglweG9yCSR4bW0sJHhtbVxuIgkJaWYgKCRyYzQgJiYgJGo8PTEpOworICAgICRjb2RlLj08PF9fXzsKKyNyYzQjCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCisjbWQ1Iwl4b3IJJGMsJHRtcAorI3JjNCMJbW92bAkkVFhbMF0jZCwoJGRhdCwkWVksNCkKKyNtZDUjCXhvcgkkYiwkdG1wCisjbWQ1IwlhZGQJNCpgKCg1KzMqJGopJTE2KWAoJGlucCksJGEKKyNyYzQjCWFkZAkkVFkjYiwkVFhbMF0jYgorI3JjNCMJbW92bAlgNCooKCRrKzEpJSRNT0QpYChgJGs9PSRNT0QtMT8iJGRhdCwkWFhbMF0sNCI6IiRYWFsxXSJgKSwkVFhbMV0jZAorI21kNSMJYWRkCVwkJEtbJGldLCRhCisjcmM0Iwltb3Z6CSRUWFswXSNiLCRUWFswXSNkCisjbWQ1IwlhZGQJJHRtcCwkYQorI3JjNCMJbW92bAkkVFkjZCw0KiRrKCRYWFsxXSkKKyNyYzQjCWFkZAkkVFhbMV0jYiwkWVkjYgorI21kNSMJcm9sCVwkJHJvdDJbJGolNF0sJGEKKyNtZDUjCW1vdglgJGo9PTE1PyJcXFwkLTEiOiIkYyJgLCR0bXAJIyBmb3J3YXJkIHJlZmVyZW5jZQorI3JjNCMJcGluc3J3CVwkYCgkaj4+MSkmN2AsKCRkYXQsJFRYWzBdLDQpLCR4bW1cbgorI21kNSMJYWRkCSRiLCRhCitfX18KKyAgICAkY29kZS49PDxfX18gaWYgKCRyYzQgJiYgJGo9PTE1ICYmICRrPT0kTU9ELTEpOworCW1vdgkkWVksJFhYWzFdCisJeG9yCSRZWSwkWVkJCQkJIyBrZXl3b3JkIHRvIHBhcnRpYWwgcmVnaXN0ZXIKKwltb3YJJFhYWzFdI2IsJFlZI2IKKwlsZWEJKCRkYXQsJFhYWzBdLDQpLCRYWFsxXQorX19fCisgICAgJGNvZGUuPTw8X19fIGlmICgkcmM0ICYmICRqPT0xNSk7CisJcHNsbHEJXCQ4LCV4bW0xCisJcHhvcgkleG1tMCwleG1tNAorCXB4b3IJJXhtbTEsJXhtbTQKK19fXworfQorc3ViIFIzIHsKKyAgbXkgKCRpLCRhLCRiLCRjLCRkKT1AXzsKKyAgbXkgQHJvdDM9KDYsMTAsMTUsMjEpOworICBteSAkaj0kaSUxNjsKKyAgbXkgJGs9JGklJE1PRDsKKyAgbXkgJHhtbT0iJXhtbSIuKCRqJjEpOworICAgICRjb2RlLj0iCW1vdmRxdQk0OCgkaW4wKSwleG1tNVxuIglpZiAoJHJjNCAmJiAkaj09MTUpOworICAgICRjb2RlLj0iCWFkZAlcJCRNT0QsJFhYWzBdI2JcbiIJaWYgKCRyYzQgJiYgJGo9PTE1ICYmICRrPT0kTU9ELTEpOworICAgICRjb2RlLj0iCXB4b3IJJHhtbSwkeG1tXG4iCQlpZiAoJHJjNCAmJiAkajw9MSk7CisgICAgJGNvZGUuPTw8X19fOworI3JjNCMJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKKyNtZDUjCXhvcgkkZCwkdG1wCisjcmM0Iwltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQorI21kNSMJb3IJJGIsJHRtcAorI21kNSMJYWRkCTQqYCgoNyokaiklMTYpYCgkaW5wKSwkYQorI3JjNCMJYWRkCSRUWSNiLCRUWFswXSNiCisjcmM0Iwltb3ZsCWA0KigoJGsrMSklJE1PRClgKGAkaz09JE1PRC0xPyIkZGF0LCRYWFswXSw0IjoiJFhYWzFdImApLCRUWFsxXSNkCisjbWQ1IwlhZGQJXCQkS1skaV0sJGEKKyNyYzQjCW1vdnoJJFRYWzBdI2IsJFRYWzBdI2QKKyNtZDUjCXhvcgkkYywkdG1wCisjcmM0Iwltb3ZsCSRUWSNkLDQqJGsoJFhYWzFdKQorI21kNSMJYWRkCSR0bXAsJGEKKyNyYzQjCWFkZAkkVFhbMV0jYiwkWVkjYgorI21kNSMJcm9sCVwkJHJvdDNbJGolNF0sJGEKKyNtZDUjCW1vdglcJC0xLCR0bXAJCQkjIGZvcndhcmQgcmVmZXJlbmNlCisjcmM0IwlwaW5zcncJXCRgKCRqPj4xKSY3YCwoJGRhdCwkVFhbMF0sNCksJHhtbVxuCisjbWQ1IwlhZGQJJGIsJGEKK19fXworICAgICRjb2RlLj08PF9fXyBpZiAoJHJjNCAmJiAkaj09MTUpOworCW1vdgkkWFhbMF0sJFhYWzFdCisJeG9yCSRYWFswXSwkWFhbMF0JCQkjIGtleXdvcmQgdG8gcGFydGlhbCByZWdpc3RlcgorCW1vdgkkWFhbMV0jYiwkWFhbMF0jYgorCW1vdgkkWVksJFhYWzFdCisJeG9yCSRZWSwkWVkJCQkJIyBrZXl3b3JkIHRvIHBhcnRpYWwgcmVnaXN0ZXIKKwltb3YJJFhYWzFdI2IsJFlZI2IKKwlsZWEJKCRkYXQsJFhYWzBdLDQpLCRYWFsxXQorCXBzbGxxCVwkOCwleG1tMQorCXB4b3IJJXhtbTAsJXhtbTUKKwlweG9yCSV4bW0xLCV4bW01CitfX18KK30KKworbXkgJGk9MDsKK2Zvcig7JGk8MTY7JGkrKykgeyBSMCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHB1c2goQFRYLHNoaWZ0KEBUWCkpOyB9Citmb3IoOyRpPDMyOyRpKyspIHsgUjEoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyBwdXNoKEBUWCxzaGlmdChAVFgpKTsgfQorZm9yKDskaTw0ODskaSsrKSB7IFIyKCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgcHVzaChAVFgsc2hpZnQoQFRYKSk7IH0KK2Zvcig7JGk8NjQ7JGkrKykgeyBSMygkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHB1c2goQFRYLHNoaWZ0KEBUWCkpOyB9CisKKyRjb2RlLj08PF9fXzsKKyNtZDUjCWFkZAkwKjQoJXJzcCksJFZbMF0JCSMgYWNjdW11bGF0ZSBoYXNoIHZhbHVlCisjbWQ1IwlhZGQJMSo0KCVyc3ApLCRWWzFdCisjbWQ1IwlhZGQJMio0KCVyc3ApLCRWWzJdCisjbWQ1IwlhZGQJMyo0KCVyc3ApLCRWWzNdCisKKyNyYzQjCW1vdmRxdQkleG1tMiwoJG91dCwkaW4wKQkjIHdyaXRlIFJDNCBvdXRwdXQKKyNyYzQjCW1vdmRxdQkleG1tMywxNigkb3V0LCRpbjApCisjcmM0Iwltb3ZkcXUJJXhtbTQsMzIoJG91dCwkaW4wKQorI3JjNCMJbW92ZHF1CSV4bW01LDQ4KCRvdXQsJGluMCkKKyNtZDUjCWxlYQk2NCgkaW5wKSwkaW5wCisjcmM0IwlsZWEJNjQoJGluMCksJGluMAorCWNtcAkxNiglcnNwKSwkaW5wCQkjIGFyZSB3ZSBkb25lPworCWpiCS5Mb29wCisKKyNtZDUjCW1vdgkyNCglcnNwKSwkbGVuCQkjIHJlc3RvcmUgcG9pbnRlciB0byBNRDVfQ1RYCisjcmM0IwlzdWIJJFRYWzBdI2IsJFlZI2IJCSMgY29ycmVjdCAkWVkKKyNtZDUjCW1vdgkkVlswXSwwKjQoJGxlbikJCSMgd3JpdGUgTUQ1X0NUWAorI21kNSMJbW92CSRWWzFdLDEqNCgkbGVuKQorI21kNSMJbW92CSRWWzJdLDIqNCgkbGVuKQorI21kNSMJbW92CSRWWzNdLDMqNCgkbGVuKQorX19fCiskY29kZS49PDxfX18gaWYgKCRyYzQgJiYgKCEkbWQ1IHx8ICREKSk7CisJbW92CTMyKCVyc3ApLCRsZW4JCSMgcmVzdG9yZSBvcmlnaW5hbCAkbGVuCisJYW5kCVwkNjMsJGxlbgkJIyByZW1haW5pbmcgYnl0ZXMKKwlqbnoJLkxvb3AxCisJam1wCS5MZG9uZQorCQorLmFsaWduCTE2CisuTG9vcDE6CisJYWRkCSRUWFswXSNiLCRZWSNiCisJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKKwltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQorCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCisJYWRkCSRUWSNiLCRUWFswXSNiCisJaW5jCSRYWFswXSNiCisJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKKwltb3ZsCSgkZGF0LCRYWFswXSw0KSwkVFhbMF0jZAorCXhvcmIJKCRpbjApLCRUWSNiCisJbW92YgkkVFkjYiwoJG91dCwkaW4wKQorCWxlYQkxKCRpbjApLCRpbjAKKwlkZWMJJGxlbgorCWpuegkuTG9vcDEKKworLkxkb25lOgorX19fCiskY29kZS49PDxfX187CisjcmM0IwlzdWIJXCQxLCRYWFswXSNiCisjcmM0Iwltb3ZsCSRYWFswXSNkLC04KCRkYXQpCisjcmM0Iwltb3ZsCSRZWSNkLC00KCRkYXQpCisKKwltb3YJNDAoJXJzcCksJXIxNQorCW1vdgk0OCglcnNwKSwlcjE0CisJbW92CTU2KCVyc3ApLCVyMTMKKwltb3YJNjQoJXJzcCksJXIxMgorCW1vdgk3MiglcnNwKSwlcmJwCisJbW92CTgwKCVyc3ApLCVyYngKKwlsZWEJODgoJXJzcCksJXJzcAorLkxlcGlsb2d1ZToKKy5MYWJvcnQ6CisJcmV0Cisuc2l6ZSAkZnVuYywuLSRmdW5jCitfX18KKworaWYgKCRyYzQgJiYgJEQpIHsJIyBzb2xlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIGlzIHRvIHByb3ZpZGUKKwkJCSMgb3B0aW9uIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIG1vZHVsZSBhcyBkcm9wLWluCisJCQkjIHJlcGxhY2VtZW50IGZvciByYzQteDg2XzY0LnBsIGZvciBkZWJ1Z2dpbmcKKwkJCSMgYW5kIHRlc3RpbmcgcHVycG9zZXMuLi4KK215ICgkaWR4LCRpZG8pPSgiJXI4IiwiJXI5Iik7CitteSAoJGRhdCwkbGVuLCRpbnApPSgiJXJkaSIsIiVyc2kiLCIlcmR4Iik7CisKKyRjb2RlLj08PF9fXzsKKy5nbG9ibAlSQzRfc2V0X2tleQorLnR5cGUJUkM0X3NldF9rZXksXEBmdW5jdGlvbiwzCisuYWxpZ24JMTYKK1JDNF9zZXRfa2V5OgorCWxlYQk4KCRkYXQpLCRkYXQKKwlsZWEJKCRpbnAsJGxlbiksJGlucAorCW5lZwkkbGVuCisJbW92CSRsZW4sJXJjeAorCXhvcgklZWF4LCVlYXgKKwl4b3IJJGlkbywkaWRvCisJeG9yCSVyMTAsJXIxMAorCXhvcgklcjExLCVyMTEKKwlqbXAJLkx3MXN0bG9vcAorCisuYWxpZ24JMTYKKy5MdzFzdGxvb3A6CisJbW92CSVlYXgsKCRkYXQsJXJheCw0KQorCWFkZAlcJDEsJWFsCisJam5jCS5MdzFzdGxvb3AKKworCXhvcgkkaWRvLCRpZG8KKwl4b3IJJGlkeCwkaWR4CisuYWxpZ24JMTYKKy5MdzJuZGxvb3A6CisJbW92CSgkZGF0LCRpZG8sNCksJXIxMGQKKwlhZGQJKCRpbnAsJGxlbiwxKSwkaWR4I2IKKwlhZGQJJXIxMGIsJGlkeCNiCisJYWRkCVwkMSwkbGVuCisJbW92CSgkZGF0LCRpZHgsNCksJXIxMWQKKwljbW92egklcmN4LCRsZW4KKwltb3YJJXIxMGQsKCRkYXQsJGlkeCw0KQorCW1vdgklcjExZCwoJGRhdCwkaWRvLDQpCisJYWRkCVwkMSwkaWRvI2IKKwlqbmMJLkx3Mm5kbG9vcAorCisJeG9yCSVlYXgsJWVheAorCW1vdgklZWF4LC04KCRkYXQpCisJbW92CSVlYXgsLTQoJGRhdCkKKwlyZXQKKy5zaXplCVJDNF9zZXRfa2V5LC4tUkM0X3NldF9rZXkKKworLmdsb2JsCVJDNF9vcHRpb25zCisudHlwZQlSQzRfb3B0aW9ucyxcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK1JDNF9vcHRpb25zOgorCWxlYQkuTG9wdHMoJXJpcCksJXJheAorCXJldAorLmFsaWduCTY0CisuTG9wdHM6CisuYXNjaXoJInJjNCg2NHgsaW50KSIKKy5hbGlnbgk2NAorLnNpemUJUkM0X29wdGlvbnMsLi1SQzRfb3B0aW9ucworX19fCit9CisjIEVYQ0VQVElPTl9ESVNQT1NJVElPTiBoYW5kbGVyIChFWENFUFRJT05fUkVDT1JEICpyZWMsVUxPTkc2NCBmcmFtZSwKKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQoraWYgKCR3aW42NCkgeworbXkgJHJlYz0iJXJjeCI7CitteSAkZnJhbWU9IiVyZHgiOworbXkgJGNvbnRleHQ9IiVyOCI7CitteSAkZGlzcD0iJXI5IjsKKworJGNvZGUuPTw8X19fOworLmV4dGVybglfX2ltcF9SdGxWaXJ0dWFsVW53aW5kCisudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorc2VfaGFuZGxlcjoKKwlwdXNoCSVyc2kKKwlwdXNoCSVyZGkKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKKwlwdXNoCSVyMTQKKwlwdXNoCSVyMTUKKwlwdXNoZnEKKwlzdWIJXCQ2NCwlcnNwCisKKwltb3YJMTIwKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SYXgKKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKworCWxlYQkuTGJvZHkoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPC5MYm9keQorCWpiCS5MaW5fcHJvbG9ndWUKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbGVhCS5MZXBpbG9ndWUoJXJpcCksJXIxMAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0uTGVwaWxvZ3VlCisJamFlCS5MaW5fcHJvbG9ndWUKKworCW1vdgk0MCglcmF4KSwlcjE1CisJbW92CTQ4KCVyYXgpLCVyMTQKKwltb3YJNTYoJXJheCksJXIxMworCW1vdgk2NCglcmF4KSwlcjEyCisJbW92CTcyKCVyYXgpLCVyYnAKKwltb3YJODAoJXJheCksJXJieAorCWxlYQk4OCglcmF4KSwlcmF4CisKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxNCwyMzIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTUKKworLkxpbl9wcm9sb2d1ZToKKwltb3YJOCglcmF4KSwlcmRpCisJbW92CTE2KCVyYXgpLCVyc2kKKwltb3YJJXJheCwxNTIoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc3AKKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKKwltb3YJJXJkaSwxNzYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SZGkKKworCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisJbW92CSRjb250ZXh0LCVyc2kJCSMgY29udGV4dAorCW1vdglcJDE1NCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKworCW1vdgkkZGlzcCwlcnNpCisJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorCW1vdgk4KCVyc2kpLCVyZHgJCSMgYXJnMiwgZGlzcC0+SW1hZ2VCYXNlCisJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorCW1vdgk0MCglcnNpKSwlcjEwCQkjIGRpc3AtPkNvbnRleHRSZWNvcmQKKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+SGFuZGxlckRhdGEKKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorCW1vdgklcjEwLDMyKCVyc3ApCQkjIGFyZzUKKwltb3YJJXIxMSw0MCglcnNwKQkJIyBhcmc2CisJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworCW1vdgklcmN4LDU2KCVyc3ApCQkjIGFyZzgsIChOVUxMKQorCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKworCW1vdglcJDEsJWVheAkJIyBFeGNlcHRpb25Db250aW51ZVNlYXJjaAorCWFkZAlcJDY0LCVyc3AKKwlwb3BmcQorCXBvcAklcjE1CisJcG9wCSVyMTQKKwlwb3AJJXIxMworCXBvcAklcjEyCisJcG9wCSVyYnAKKwlwb3AJJXJieAorCXBvcAklcmRpCisJcG9wCSVyc2kKKwlyZXQKKy5zaXplCXNlX2hhbmRsZXIsLi1zZV9oYW5kbGVyCisKKy5zZWN0aW9uCS5wZGF0YQorLmFsaWduCTQKKwkucnZhCS5MU0VIX2JlZ2luXyRmdW5jCisJLnJ2YQkuTFNFSF9lbmRfJGZ1bmMKKwkucnZhCS5MU0VIX2luZm9fJGZ1bmMKKworLnNlY3Rpb24JLnhkYXRhCisuYWxpZ24JOAorLkxTRUhfaW5mb18kZnVuYzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzZV9oYW5kbGVyCitfX18KK30KKworc3ViIHJlZ19wYXJ0IHsKK215ICgkcmVnLCRjb252KT1AXzsKKyAgICBpZiAoJHJlZyA9fiAvJXJbMC05XSsvKSAgICAgeyAkcmVnIC49ICRjb252OyB9CisgICAgZWxzaWYgKCRjb252IGVxICJiIikgICAgICAgIHsgJHJlZyA9fiBzLyVbZXJdKFteeF0rKXg/LyUkMWwvOyAgICAgICB9CisgICAgZWxzaWYgKCRjb252IGVxICJ3IikgICAgICAgIHsgJHJlZyA9fiBzLyVbZXJdKC4rKS8lJDEvOyAgICAgICAgICAgICB9CisgICAgZWxzaWYgKCRjb252IGVxICJkIikgICAgICAgIHsgJHJlZyA9fiBzLyVbZXJdKC4rKS8lZSQxLzsgICAgICAgICAgICB9CisgICAgcmV0dXJuICRyZWc7Cit9CisKKyRjb2RlID1+IHMvKCVbYS16MC05XSspIyhbYndkXSkvcmVnX3BhcnQoJDEsJDIpL2dlbTsKKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworJGNvZGUgPX4gcy9waW5zcndccytcJDAsL21vdmQJL2dtOworCiskY29kZSA9fiBzLyNtZDUjLy9nbQlpZiAoJG1kNSk7CiskY29kZSA9fiBzLyNyYzQjLy9nbQlpZiAoJHJjNCk7CisKK3ByaW50ICRjb2RlOworCitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmM0L2FzbS9yYzQtcGFyaXNjLnBsIGIvY3J5cHRvL3JjNC9hc20vcmM0LXBhcmlzYy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY1MDY3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3JjNC9hc20vcmM0LXBhcmlzYy5wbApAQCAtMCwwICsxLDMxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+IGZvciB0aGUgT3BlblNTTAorIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCisjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIFJDNCBmb3IgUEEtUklTQy4KKworIyBKdW5lIDIwMDkuCisjCisjIFBlcmZvcm1hbmNlIGlzIDMzJSBiZXR0ZXIgdGhhbiBnY2MgMy4yIGdlbmVyYXRlZCBjb2RlIG9uIFBBLTcxMDBMQy4KKyMgRm9yIHJlZmVyZW5jZSwgWzR4XSB1bnJvbGxlZCBsb29wIGlzID40MCUgZmFzdGVyIHRoYW4gZm9sZGVkIG9uZS4KKyMgSXQncyBwb3NzaWJsZSB0byB1bnJvbGwgbG9vcCA4IHRpbWVzIG9uIFBBLVJJU0MgMi4wLCBidXQgaW1wcm92ZW1lbnQKKyMgaXMgYmVsaWV2ZWQgdG8gYmUgbm90IHN1ZmZpY2llbnQgdG8ganVzdGlmeSB0aGUgZWZmb3J0Li4uCisjCisjIFNwZWNpYWwgdGhhbmtzIHRvIHBvbGFyaG9tZS5jb20gZm9yIHByb3ZpZGluZyBIUC1VWCBhY2NvdW50LgorCiskMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworCiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsKKwkkTEVWRUwJCT0iMi4wVyI7CisJJFNJWkVfVAkJPTg7CisJJEZSQU1FX01BUktFUgk9ODA7CisJJFNBVkVEX1JQCT0xNjsKKwkkUFVTSAkJPSJzdGQiOworCSRQVVNITUEJCT0ic3RkLG1hIjsKKwkkUE9QCQk9ImxkZCI7CisJJFBPUE1CCQk9ImxkZCxtYiI7Cit9IGVsc2UgeworCSRMRVZFTAkJPSIxLjAiOworCSRTSVpFX1QJCT00OworCSRGUkFNRV9NQVJLRVIJPTQ4OworCSRTQVZFRF9SUAk9MjA7CisJJFBVU0gJCT0ic3R3IjsKKwkkUFVTSE1BCQk9InN0d20iOworCSRQT1AJCT0ibGR3IjsKKwkkUE9QTUIJCT0ibGR3bSI7Cit9CisKKyRGUkFNRT00KiRTSVpFX1QrJEZSQU1FX01BUktFUjsJIyA0IHNhdmVkIHJlZ3MgKyBmcmFtZSBtYXJrZXIKKwkJCQkjICAgICAgICAgICAgICAgIFsrIGFyZ3VtZW50IHRyYW5zZmVyXQorJFNaPTE7CQkJCSMgZGVmYXVsdHMgdG8gUkM0X0NIQVIKK2lmIChvcGVuIENPTkYsIjwke2Rpcn0uLi8uLi9vcGVuc3NsY29uZi5oIikgeworICAgIHdoaWxlKDxDT05GPikgeworCWlmIChtLyNccypkZWZpbmVccytSQzRfSU5UXHMrKC4qKS8pIHsKKwkgICAgJFNaID0gKCQxPX4vY2hhciQvKSA/IDEgOiA0OworCSAgICBsYXN0OworCX0KKyAgICB9CisgICAgY2xvc2UgQ09ORjsKK30KKworaWYgKCRTWj09MSkgewkjIFJDNF9DSEFSCisgICAgJExEPSJsZGIiOworICAgICRMRFg9ImxkYngiOworICAgICRNS1g9ImFkZGwiOworICAgICRTVD0ic3RiIjsKK30gZWxzZSB7CSMgUkM0X0lOVCAofjUlIGZhc3RlciB0aGFuIFJDNF9DSEFSIG9uIFBBLTcxMDBMQykKKyAgICAkTEQ9ImxkdyI7CisgICAgJExEWD0ibGR3eCxzIjsKKyAgICAkTUtYPSJzaDJhZGRsIjsKKyAgICAkU1Q9InN0dyI7Cit9CisKKyRrZXk9IiVyMjYiOworJGxlbj0iJXIyNSI7CiskaW5wPSIlcjI0IjsKKyRvdXQ9IiVyMjMiOworCitAWFg9KCIlcjE5IiwiJXIyMCIpOworQFRYPSgiJXIyMSIsIiVyMjIiKTsKKyRZWT0iJXIyOCI7CiskVFk9IiVyMjkiOworCiskYWNjPSIlcjEiOworJGl4PSIlcjIiOworJGl5PSIlcjMiOworJGRhdDA9IiVyNCI7CiskZGF0MT0iJXI1IjsKKyRyZW09IiVyNiI7CiskbWFzaz0iJXIzMSI7CisKK3N1YiB1bnJvbGxlZGxvb3Bib2R5IHsKK2ZvciAoJGk9MDskaTw0OyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwlsZG8JMSgkWFhbMF0pLCRYWFsxXQorCWBzcHJpbnRmKCIkTERYCSUkVFkoJSRrZXkpLCUkZGF0MSIpIGlmICgkaT4wKWAJCisJYW5kCSRtYXNrLCRYWFsxXSwkWFhbMV0KKwkkTERYCSRZWSgka2V5KSwkVFkKKwkkTUtYCSRZWSwka2V5LCRpeAorCSRMRFgJJFhYWzFdKCRrZXkpLCRUWFsxXQorCSRNS1gJJFhYWzBdLCRrZXksJGl5CisJJFNUCSRUWFswXSwwKCRpeCkKKwljb21jbHIsPD4gJFhYWzFdLCRZWSwlcjAJOyBjb25kaXRpb25hbAorCWNvcHkJJFRYWzBdLCRUWFsxXQkJOyBtb3ZlCisJYHNwcmludGYoIiVzZGVwCSUkZGF0MSwlZCw4LCUkYWNjIiwkaT09MT8ieiI6IiIsOCooJGktMSkrNykgaWYgKCRpPjApYAorCSRTVAkkVFksMCgkaXkpCisJYWRkbAkkVFhbMF0sJFRZLCRUWQorCWFkZGwJJFRYWzFdLCRZWSwkWVkKKwlhbmQJJG1hc2ssJFRZLCRUWQorCWFuZAkkbWFzaywkWVksJFlZCitfX18KK3B1c2goQFRYLHNoaWZ0KEBUWCkpOyBwdXNoKEBYWCxzaGlmdChAWFgpKTsJIyAicm90YXRlIiByZWdpc3RlcnMKK30gfQorCitzdWIgZm9sZGVkbG9vcCB7CitteSAoJGxhYmVsLCRjb3VudCk9QF87CiskY29kZS49PDxfX187CiskbGFiZWwKKwkkTUtYCSRZWSwka2V5LCRpeQorCSRMRFgJJFlZKCRrZXkpLCRUWQorCSRNS1gJJFhYWzBdLCRrZXksJGl4CisJJFNUCSRUWFswXSwwKCRpeSkKKwlsZG8JMSgkWFhbMF0pLCRYWFswXQorCSRTVAkkVFksMCgkaXgpCisJYWRkbAkkVFhbMF0sJFRZLCRUWQorCWxkYngJJGlucCgkb3V0KSwkZGF0MQorCWFuZAkkbWFzaywkVFksJFRZCisJYW5kCSRtYXNrLCRYWFswXSwkWFhbMF0KKwkkTERYCSRUWSgka2V5KSwkYWNjCisJJExEWAkkWFhbMF0oJGtleSksJFRYWzBdCisJbGRvCTEoJG91dCksJG91dAorCXhvcgkkZGF0MSwkYWNjLCRhY2MKKwlhZGRsCSRUWFswXSwkWVksJFlZCisJc3RiCSRhY2MsLTEoJG91dCkKKwlhZGRpYiw8PiAtMSwkY291bnQsJGxhYmVsCTsgJGNvdW50IGlzIGFsd2F5cyBzbWFsbAorCWFuZAkkbWFzaywkWVksJFlZCitfX18KK30KKworJGNvZGU9PDxfX187CisJLkxFVkVMCSRMRVZFTAorCS5TUEFDRQlcJFRFWFRcJAorCS5TVUJTUEEJXCRDT0RFXCQsUVVBRD0wLEFMSUdOPTgsQUNDRVNTPTB4MkMsQ09ERV9PTkxZCisKKwkuRVhQT1JUCVJDNCxFTlRSWSxBUkdXMD1HUixBUkdXMT1HUixBUkdXMj1HUixBUkdXMz1HUgorUkM0CisJLlBST0MKKwkuQ0FMTElORk8JRlJBTUU9YCRGUkFNRS00KiRTSVpFX1RgLE5PX0NBTExTLFNBVkVfUlAsRU5UUllfR1I9NgorCS5FTlRSWQorCSRQVVNICSVyMiwtJFNBVkVEX1JQKCVzcCkJOyBzdGFuZGFyZCBwcm9sb2d1ZQorCSRQVVNITUEJJXIzLCRGUkFNRSglc3ApCisJJFBVU0gJJXI0LGAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNSxgLSRGUkFNRSsyKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjYsYC0kRlJBTUUrMyokU0laRV9UYCglc3ApCisKKwljbXBpYiwqPSAwLCRsZW4sTFwkYWJvcnQKKwlzdWIJJGlucCwkb3V0LCRpbnAJCTsgZGlzdGFuY2UgYmV0d2VlbiAkaW5wIGFuZCAkb3V0CisKKwkkTEQJYDAqJFNaYCgka2V5KSwkWFhbMF0KKwkkTEQJYDEqJFNaYCgka2V5KSwkWVkKKwlsZG8JYDIqJFNaYCgka2V5KSwka2V5CisKKwlsZGkJMHhmZiwkbWFzaworCWxkaQkzLCRkYXQwCQkKKworCWxkbwkxKCRYWFswXSksJFhYWzBdCTsgd2FybSB1cCBsb29wCisJYW5kCSRtYXNrLCRYWFswXSwkWFhbMF0KKwkkTERYCSRYWFswXSgka2V5KSwkVFhbMF0KKwlhZGRsCSRUWFswXSwkWVksJFlZCisJY21waWIsKj4+PSA2LCRsZW4sTFwkb29wMQk7IGlzICRsZW4gbGFyZ2UgZW5vdWdoIHRvIGJvdGhlcj8KKwlhbmQJJG1hc2ssJFlZLCRZWQorCisJYW5kLDw+CSRvdXQsJGRhdDAsJHJlbQkJOyBpcyAkb3V0IGFsaWduZWQ/CisJYglMXCRhbGlnbmVkb3V0CisJc3ViaQk0LCRyZW0sJHJlbQorCXN1YgkkbGVuLCRyZW0sJGxlbgorX19fCismZm9sZGVkbG9vcCgiTFwkYWxpZ25vdXQiLCRyZW0pOwkjIHByb2Nlc3MgdGlsbCAkb3V0IGlzIGFsaWduZWQKKworJGNvZGUuPTw8X19fOworTFwkYWxpZ25lZG91dAkJCQk7ICRsZW4gaXMgYXQgbGVhc3QgNCBoZXJlCisJYW5kLDw+CSRpbnAsJGRhdDAsJGFjYwkJOyBpcyAkaW5wIGFsaWduZWQ/CisJYglMXCRvb3A0CisJc3ViCSRpbnAsJGFjYywkcmVtCQk7IGFsaWduICRpbnAKKworCXNoM2FkZGwJJGFjYywlcjAsJGFjYworCXN1YmkJMzIsJGFjYywkYWNjCisJbXRjdGwJJGFjYywlY3IxMQkJOyBsb2FkICVzYXIgd2l0aCB2c2hkIGFsaWduIGZhY3RvcgorCWxkd3gJJHJlbSgkb3V0KSwkZGF0MAorCWxkbwk0KCRyZW0pLCRyZW0KK0xcJG9vcDRtaXNhbGlnbmVkaW5wCitfX18KKyZ1bnJvbGxlZGxvb3Bib2R5KCk7CiskY29kZS49PDxfX187CisJJExEWAkkVFkoJGtleSksJGl4CisJbGR3eAkkcmVtKCRvdXQpLCRkYXQxCisJbGRvCS00KCRsZW4pLCRsZW4KKwlvcgkkaXgsJGFjYywkYWNjCQk7IGxhc3QgcGllY2UsIG5vIG5lZWQgdG8gZGVwCisJdnNoZAkkZGF0MCwkZGF0MSwkaXkJCTsgYWxpZ24gZGF0YQorCWNvcHkJJGRhdDEsJGRhdDAKKwl4b3IJJGl5LCRhY2MsJGFjYworCXN0dwkkYWNjLDAoJG91dCkKKwljbXBpYiwqPDwgMywkbGVuLExcJG9vcDRtaXNhbGlnbmVkaW5wCisJbGRvCTQoJG91dCksJG91dAorCWNtcGliLCo9IDAsJGxlbixMXCRkb25lCisJbm9wCisJYglMXCRvb3AxCisJbm9wCisKKwkuQUxJR04JOAorTFwkb29wNAorX19fCismdW5yb2xsZWRsb29wYm9keSgpOworJGNvZGUuPTw8X19fOworCSRMRFgJJFRZKCRrZXkpLCRpeAorCWxkd3gJJGlucCgkb3V0KSwkZGF0MAorCWxkbwktNCgkbGVuKSwkbGVuCisJb3IJJGl4LCRhY2MsJGFjYwkJOyBsYXN0IHBpZWNlLCBubyBuZWVkIHRvIGRlcAorCXhvcgkkZGF0MCwkYWNjLCRhY2MKKwlzdHcJJGFjYywwKCRvdXQpCisJY21waWIsKjw8IDMsJGxlbixMXCRvb3A0CisJbGRvCTQoJG91dCksJG91dAorCWNtcGliLCo9IDAsJGxlbixMXCRkb25lCisJbm9wCitfX18KKyZmb2xkZWRsb29wKCJMXCRvb3AxIiwkbGVuKTsKKyRjb2RlLj08PF9fXzsKK0xcJGRvbmUKKwkkUE9QCWAtJEZSQU1FLSRTQVZFRF9SUGAoJXNwKSwlcjIKKwlsZG8JLTEoJFhYWzBdKSwkWFhbMF0JOyBjaGlsbCBvdXQgbG9vcAorCXN1YgkkWVksJFRYWzBdLCRZWQorCWFuZAkkbWFzaywkWFhbMF0sJFhYWzBdCisJYW5kCSRtYXNrLCRZWSwkWVkKKwkkU1QJJFhYWzBdLGAtMiokU1pgKCRrZXkpCisJJFNUCSRZWSxgLTEqJFNaYCgka2V5KQorCSRQT1AJYC0kRlJBTUUrMSokU0laRV9UYCglc3ApLCVyNAorCSRQT1AJYC0kRlJBTUUrMiokU0laRV9UYCglc3ApLCVyNQorCSRQT1AJYC0kRlJBTUUrMyokU0laRV9UYCglc3ApLCVyNgorTFwkYWJvcnQKKwlidgkoJXIyKQorCS5FWElUCisJJFBPUE1CCS0kRlJBTUUoJXNwKSwlcjMKKwkuUFJPQ0VORAorX19fCisKKyRjb2RlLj08PF9fXzsKKworCS5FWFBPUlQJcHJpdmF0ZV9SQzRfc2V0X2tleSxFTlRSWSxBUkdXMD1HUixBUkdXMT1HUixBUkdXMj1HUgorCS5BTElHTgk4Citwcml2YXRlX1JDNF9zZXRfa2V5CisJLlBST0MKKwkuQ0FMTElORk8JTk9fQ0FMTFMKKwkuRU5UUlkKKwkkU1QJJXIwLGAwKiRTWmAoJGtleSkKKwkkU1QJJXIwLGAxKiRTWmAoJGtleSkKKwlsZG8JYDIqJFNaYCgka2V5KSwka2V5CisJY29weQklcjAsQFhYWzBdCitMXCQxc3QKKwkkU1QJQFhYWzBdLDAoJGtleSkKKwlsZG8JMShAWFhbMF0pLEBYWFswXQorCWJiLD49CUBYWFswXSxgMzEtOGAsTFwkMXN0CTsgQFhYWzBdPDI1NgorCWxkbwkkU1ooJGtleSksJGtleQorCisJbGRvCWAtMjU2KiRTWmAoJGtleSksJGtleQk7IHJld2luZCAka2V5CisJYWRkbAkkbGVuLCRpbnAsJGlucAkJOyAkaW5wIHRvIHBvaW50IGF0IHRoZSBlbmQKKwlzdWIJJXIwLCRsZW4sJXIyMwkJOyBpbnZlcnNlIGluZGV4CisJY29weQklcjAsQFhYWzBdCisJY29weQklcjAsQFhYWzFdCisJbGRpCTB4ZmYsJG1hc2sKKworTFwkMm5kCisJJExEWAlAWFhbMF0oJGtleSksQFRYWzBdCisJbGRieAklcjIzKCRpbnApLEBUWFsxXQorCWFkZGksbnV2IDEsJXIyMywlcjIzCQk7IGluY3JlbWVudCBhbmQgY29uZGl0aW9uYWwKKwlzdWIJJXIwLCRsZW4sJXIyMwkJOyBpbnZlcnNlIGluZGV4CisJYWRkbAlAVFhbMF0sQFhYWzFdLEBYWFsxXQorCWFkZGwJQFRYWzFdLEBYWFsxXSxAWFhbMV0KKwlhbmQJJG1hc2ssQFhYWzFdLEBYWFsxXQorCSRNS1gJQFhYWzBdLCRrZXksJFRZCisJJExEWAlAWFhbMV0oJGtleSksQFRYWzFdCisJJE1LWAlAWFhbMV0sJGtleSwkWVkKKwlsZG8JMShAWFhbMF0pLEBYWFswXQorCSRTVAlAVFhbMF0sMCgkWVkpCisJYmIsPj0JQFhYWzBdLGAzMS04YCxMXCQybmQJOyBAWFhbMF08MjU2CisJJFNUCUBUWFsxXSwwKCRUWSkKKworCWJ2LG4JKCVyMikKKwkuRVhJVAorCW5vcAorCS5QUk9DRU5ECisKKwkuRVhQT1JUCVJDNF9vcHRpb25zLEVOVFJZCisJLkFMSUdOCTgKK1JDNF9vcHRpb25zCisJLlBST0MKKwkuQ0FMTElORk8JTk9fQ0FMTFMKKwkuRU5UUlkKKwlibHIJJXIwLCVyMjgKKwlsZGkJMywlcjEKK0xcJHBpYworCWFuZGNtCSVyMjgsJXIxLCVyMjgKKwlidgkoJXIyKQorCS5FWElUCisJbGRvCUxcJG9wdHMtTFwkcGljKCVyMjgpLCVyMjgKKwkuUFJPQ0VORAorCS5BTElHTgk4CitMXCRvcHRzCisJLlNUUklOR1ogInJjNCg0eCxgJFNaPT0xPyJjaGFyIjoiaW50ImApIgorCS5TVFJJTkdaICJSQzQgZm9yIFBBLVJJU0MsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOworJGNvZGUgPX4gcy9jbXBpYixcKi9jb21pYiwvZ20gaWYgKCRTSVpFX1Q9PTQpOworCitwcmludCAkY29kZTsKK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbCBiL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAppbmRleCA5NjY4MWZhLi4xYWE3NTQ4IDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwKKysrIGIvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCkBAIC0xMyw2ICsxMywyOSBAQAogIyAiY2x1c3RlciIgQWRkcmVzcyBHZW5lcmF0aW9uIEludGVybG9ja3MsIHNvIHRoYXQgb25lIHBpcGVsaW5lIHN0YWxsCiAjIHJlc29sdmVzIHNldmVyYWwgZGVwZW5kZW5jaWVzLgogCisjIE5vdmVtYmVyIDIwMTAuCisjCisjIEFkYXB0IGZvciAtbTMxIGJ1aWxkLiBJZiBrZXJuZWwgc3VwcG9ydHMgd2hhdCdzIGNhbGxlZCAiaGlnaGdwcnMiCisjIGZlYXR1cmUgb24gTGludXggW3NlZSAvcHJvYy9jcHVpbmZvXSwgaXQncyBwb3NzaWJsZSB0byB1c2UgNjQtYml0CisjIGluc3RydWN0aW9ucyBhbmQgYWNoaWV2ZSAiNjQtYml0IiBwZXJmb3JtYW5jZSBldmVuIGluIDMxLWJpdCBsZWdhY3kKKyMgYXBwbGljYXRpb24gY29udGV4dC4gVGhlIGZlYXR1cmUgaXMgbm90IHNwZWNpZmljIHRvIGFueSBwYXJ0aWN1bGFyCisjIHByb2Nlc3NvciwgYXMgbG9uZyBhcyBpdCdzICJ6LUNQVSIuIExhdHRlciBpbXBsaWVzIHRoYXQgdGhlIGNvZGUKKyMgcmVtYWlucyB6L0FyY2hpdGVjdHVyZSBzcGVjaWZpYy4gT24gejk5MCBpdCB3YXMgbWVhc3VyZWQgdG8gcGVyZm9ybQorIyA1MCUgYmV0dGVyIHRoYW4gY29kZSBnZW5lcmF0ZWQgYnkgZ2NjIDQuMy4KKworJGZsYXZvdXIgPSBzaGlmdDsKKworaWYgKCRmbGF2b3VyID1+IC8zWzEyXS8pIHsKKwkkU0laRV9UPTQ7CisJJGc9IiI7Cit9IGVsc2UgeworCSRTSVpFX1Q9ODsKKwkkZz0iZyI7Cit9CisKK3doaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CitvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworCiAkcnA9IiVyMTQiOwogJHNwPSIlcjE1IjsKICRjb2RlPTw8X19fOwpAQCAtMzksNyArNjIsMTIgQEAKIC50eXBlCVJDNCxcQGZ1bmN0aW9uCiAuYWxpZ24JNjQKIFJDNDoKLQlzdG1nCSVyNiwlcjExLDQ4KCRzcCkKKwlzdG0ke2d9CSVyNiwlcjExLDYqJFNJWkVfVCgkc3ApCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gLzNbMTJdLyk7CisJbGxnZnIJJGxlbiwkbGVuCitfX18KKyRjb2RlLj08PF9fXzsKIAlsbGdjCSRYWFswXSwwKCRrZXkpCiAJbGxnYwkkWVksMSgka2V5KQogCWxhCSRYWFswXSwxKCRYWFswXSkKQEAgLTkwLDcgKzExOCw3IEBACiAJeGdyCSRhY2MsJFRYWzFdCiAJc3RnCSRhY2MsMCgkb3V0KQogCWxhCSRvdXQsOCgkb3V0KQotCWJyY3QJJGNudCwuTG9vcDgKKwlicmN0ZwkkY250LC5Mb29wOAogCiAuTHNob3J0OgogCWxnaGkJJGFjYyw3CkBAIC0xMjIsNyArMTUwLDcgQEAKIAlhaGkJJFhYWzBdLC0xCiAJc3RjCSRYWFswXSwwKCRrZXkpCiAJc3RjCSRZWSwxKCRrZXkpCi0JbG1nCSVyNiwlcjExLDQ4KCRzcCkKKwlsbSR7Z30JJXI2LCVyMTEsNiokU0laRV9UKCRzcCkKIAlicgkkcnAKIC5zaXplCVJDNCwuLVJDNAogLnN0cmluZwkiUkM0IGZvciBzMzkweCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKQEAgLTE0Nyw3ICsxNzUsNyBAQAogLnR5cGUJUkM0X3NldF9rZXksXEBmdW5jdGlvbgogLmFsaWduCTY0CiBSQzRfc2V0X2tleToKLQlzdG1nCSVyNiwlcjgsNDgoJHNwKQorCXN0bSR7Z30JJXI2LCVyOCw2KiRTSVpFX1QoJHNwKQogCWxoaQkkY250LDI1NgogCWxhCSRpZHgsMCglcjApCiAJc3RoCSRpZHgsMCgka2V5KQpAQCAtMTgwLDcgKzIwOCw3IEBACiAJbGEJJGlpbnAsMCglcjApCiAJagkuTDJuZGxvb3AKIC5MZG9uZToKLQlsbWcJJXI2LCVyOCw0OCgkc3ApCisJbG0ke2d9CSVyNiwlcjgsNiokU0laRV9UKCRzcCkKIAlicgkkcnAKIC5zaXplCVJDNF9zZXRfa2V5LC4tUkM0X3NldF9rZXkKIApAQCAtMjAzLDMgKzIzMSw0IEBACiBfX18KIAogcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CSMgZm9yY2UgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwgYi9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCmluZGV4IDY3N2JlNWYuLmQ2ZWFjMjAgMTAwNzU1Ci0tLSBhL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwKKysrIGIvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbApAQCAtNyw2ICs3LDggQEAKICMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjCisjIEp1bHkgMjAwNAorIwogIyAyLjIyeCBSQzQgdHVuZS11cDotKSBJdCBzaG91bGQgYmUgbm90ZWQgdGhvdWdoIHRoYXQgbXkgaGFuZCBbYXMgaW4KICMgImhhbmQtY29kZWQgYXNzZW1ibGVyIl0gZG9lc24ndCBzdGFuZCBmb3IgdGhlIHdob2xlIGltcHJvdmVtZW50CiAjIGNvZWZmaWNpZW50LiBJdCB0dXJuZWQgb3V0IHRoYXQgZWxpbWluYXRpbmcgUkM0X0NIQVIgZnJvbSBjb25maWcKQEAgLTE5LDYgKzIxLDggQEAKICMgdG8gb3BlcmF0ZSBvbiBwYXJ0aWFsIHJlZ2lzdGVycywgaXQgdHVybmVkIG91dCB0byBiZSB0aGUgYmVzdCBiZXQuCiAjIEF0IGxlYXN0IGZvciBBTUQuLi4gSG93IElBMzJFIHdvdWxkIHBlcmZvcm0gcmVtYWlucyB0byBiZSBzZWVuLi4uCiAKKyMgTm92ZW1iZXIgMjAwNAorIwogIyBBcyB3YXMgc2hvd24gYnkgTWFyYyBCZXZhbmQgcmVvcmRlcmluZyBvZiBjb3VwbGUgb2YgbG9hZCBvcGVyYXRpb25zCiAjIHJlc3VsdHMgaW4gZXZlbiBoaWdoZXIgcGVyZm9ybWFuY2UgZ2FpbiBvZiAzLjN4Oi0pIEF0IGxlYXN0IG9uCiAjIE9wdGVyb24uLi4gRm9yIHJlZmVyZW5jZSwgMXggaW4gdGhpcyBjYXNlIGlzIFJDNF9DSEFSIEMtY29kZQpAQCAtMjYsNiArMzAsOCBAQAogIyBMYXR0ZXIgbWVhbnMgdGhhdCBpZiB5b3Ugd2FudCB0byAqZXN0aW1hdGUqIHdoYXQgdG8gZXhwZWN0IGZyb20KICMgKnlvdXIqIE9wdGVyb24sIHRoZW4gbXVsdGlwbHkgNTQgYnkgMy4zIGFuZCBjbG9jayBmcmVxdWVuY3kgaW4gR0h6LgogCisjIE5vdmVtYmVyIDIwMDQKKyMKICMgSW50ZWwgUDQgRU02NFQgY29yZSB3YXMgZm91bmQgdG8gcnVuIHRoZSBBTUQ2NCBjb2RlIHJlYWxseSBzbG93Li4uCiAjIFRoZSBvbmx5IHdheSB0byBhY2hpZXZlIGNvbXBhcmFibGUgcGVyZm9ybWFuY2Ugb24gUDQgd2FzIHRvIGtlZXAKICMgUkM0X0NIQVIuIEtpbmQgb2YgaXJvbmljLCBodWg/IEFzIGl0J3MgYXBwYXJlbnRseSBpbXBvc3NpYmxlIHRvCkBAIC0zMywxMCArMzksMTQgQEAKICMgb24gZWl0aGVyIEFNRCBhbmQgSW50ZWwgcGxhdGZvcm1zLCBJIGltcGxlbWVudCBib3RoIGNhc2VzLiBTZWUKICMgcmM0X3NrZXkuYyBmb3IgZnVydGhlciBkZXRhaWxzLi4uCiAKKyMgQXByaWwgMjAwNQorIwogIyBQNCBFTTY0VCBjb3JlIGFwcGVhcnMgdG8gYmUgImFsbGVyZ2ljIiB0byA2NC1iaXQgaW5jL2RlYy4gUmVwbGFjaW5nIAogIyB0aG9zZSB3aXRoIGFkZC9zdWIgcmVzdWx0cyBpbiA1MCUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb2YgZm9sZGVkCiAjIGxvb3AuLi4KIAorIyBNYXkgMjAwNQorIwogIyBBcyB3YXMgc2hvd24gYnkgWm91IE5hbmhhaSBsb29wIHVucm9sbGluZyBjYW4gaW1wcm92ZSBJbnRlbCBFTTY0VAogIyBwZXJmb3JtYW5jZSBieSA+MzAlIFt1bmxpa2UgUDQgMzItYml0IGNhc2UgdGhhdCBpc10uIEJ1dCB0aGlzIGlzCiAjIHByb3ZpZGVkIHRoYXQgbG9hZHMgYXJlIHJlb3JkZXJlZCBldmVuIG1vcmUgYWdncmVzc2l2ZWx5ISBCb3RoIGNvZGUKQEAgLTUwLDYgKzYwLDggQEAKICMgaXMgbm90IGltcGxlbWVudGVkLCB0aGVuIHRoaXMgZmluYWwgUkM0X0NIQVIgY29kZS1wYXRoIHNob3VsZCBiZQogIyBwcmVmZXJyZWQsIGFzIGl0IHByb3ZpZGVzIGJldHRlciAqYWxsLXJvdW5kKiBwZXJmb3JtYW5jZV0uCiAKKyMgTWFyY2ggMjAwNworIwogIyBJbnRlbCBDb3JlMiB3YXMgb2JzZXJ2ZWQgdG8gcGVyZm9ybSBwb29ybHkgb24gYm90aCBjb2RlIHBhdGhzOi0oIEl0CiAjIGFwcGFyZW50bHkgc3VmZmVycyBmcm9tIHNvbWUga2luZCBvZiBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxsLCB3aGljaAogIyBvY2N1cnMgaW4gNjQtYml0IG1vZGUgb25seSBbYXMgdmlydHVhbGx5IGlkZW50aWNhbCAzMi1iaXQgbG9vcCB3YXMKQEAgLTU4LDYgKzcwLDM3IEBACiAjIGZpdCBmb3IgQ29yZTIgYW5kIHRoZXJlZm9yZSB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gc2tpcCBjbG9vcDggb24KICMgdGhpcyBDUFUuCiAKKyMgTWF5IDIwMTAKKyMKKyMgSW50ZWwgV2VzdG1lcmUgd2FzIG9ic2VydmVkIHRvIHBlcmZvcm0gc3Vib3B0aW1hbGx5LiBBZGRpbmcgeWV0CisjIGFub3RoZXIgbW92emIgdG8gY2xvb3AxIGltcHJvdmVkIHBlcmZvcm1hbmNlIGJ5IGFsbW9zdCA1MCUhIENvcmUyCisjIHBlcmZvcm1hbmNlIGlzIGltcHJvdmVkIHRvbywgYnV0IG5vbWluYWxseS4uLgorCisjIE1heSAyMDExCisjCisjIFRoZSBvbmx5IGNvZGUgcGF0aCB0aGF0IHdhcyBub3QgbW9kaWZpZWQgaXMgUDQtc3BlY2lmaWMgb25lLiBOb24tUDQKKyMgSW50ZWwgY29kZSBwYXRoIG9wdGltaXphdGlvbiBpcyBoZWF2aWx5IGJhc2VkIG9uIHN1Ym1pc3Npb24gYnkgTWF4aW0KKyMgUGVybWlub3YsIE1heGltIExvY2t0eXVraGluIGFuZCBKaW0gR3VpbGZvcmQgb2YgSW50ZWwuIEkndmUgdXNlZAorIyBzb21lIG9mIHRoZSBpZGVhcyBldmVuIGluIGF0dGVtcHQgdG8gb3B0bWl6ZSB0aGUgb3JpZ2luYWwgUkM0X0lOVAorIyBjb2RlIHBhdGguLi4gQ3VycmVudCBwZXJmb3JtYW5jZSBpbiBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIChsZXNzCisjIGlzIGJldHRlcikgYW5kIGltcHJvdmVtZW50IGNvZWZmaWNpZW50cyByZWxhdGl2ZSB0byBwcmV2aW91cworIyB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlIGFyZToKKyMKKyMgT3B0ZXJvbgk1LjMvKzAlKCopCisjIFA0CQk2LjUKKyMgQ29yZTIJCTYuMi8rMTUlKCoqKQorIyBXZXN0bWVyZQk0LjIvKzYwJQorIyBTYW5keSBCcmlkZ2UJNC4yLysxMjAlCisjIEF0b20JCTkuMy8rODAlCisjCisjICgqKQlCdXQgY29ycmVzcG9uZGluZyBsb29wIGhhcyBsZXNzIGluc3RydWN0aW9ucywgd2hpY2ggc2hvdWxkIGhhdmUKKyMJcG9zaXRpdmUgZWZmZWN0IG9uIHVwY29taW5nIEJ1bGxkb3plciwgd2hpY2ggaGFzIG9uZSBsZXNzIEFMVS4KKyMJRm9yIHJlZmVyZW5jZSwgSW50ZWwgY29kZSBydW5zIGF0IDYuOCBjcGIgcmF0ZSBvbiBPcHRlcm9uLgorIyAoKiopCU5vdGUgdGhhdCBDb3JlMiByZXN1bHQgaXMgfjE1JSBsb3dlciB0aGFuIGNvcnJlc3BvbmRpbmcgcmVzdWx0CisjCWZvciAzMi1iaXQgY29kZSwgbWVhbmluZyB0aGF0IGl0J3MgcG9zc2libGUgdG8gaW1wcm92ZSBpdCwKKyMJYnV0IG1vcmUgdGhhbiBsaWtlbHkgYXQgdGhlIGNvc3Qgb2YgdGhlIG90aGVycyAoc2VlIHJjNC01ODYucGwKKyMJdG8gZ2V0IHRoZSBpZGVhKS4uLgorCiAkZmxhdm91ciA9IHNoaWZ0OwogJG91dHB1dCAgPSBzaGlmdDsKIGlmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KQEAgLTc2LDEzICsxMTksMTAgQEAKICRpbnA9IiVyZHgiOwkgICAgIyBhcmczCiAkb3V0PSIlcmN4IjsJICAgICMgYXJnNAogCi1AWFg9KCIlcjgiLCIlcjEwIik7Ci1AVFg9KCIlcjkiLCIlcjExIik7Ci0kWVk9IiVyMTIiOwotJFRZPSIlcjEzIjsKLQorewogJGNvZGU9PDxfX187CiAudGV4dAorLmV4dGVybglPUEVOU1NMX2lhMzJjYXBfUAogCiAuZ2xvYmwJUkM0CiAudHlwZQlSQzQsXEBmdW5jdGlvbiw0CkBAIC05NSw0OCArMTM1LDE3MyBAQAogCXB1c2gJJXIxMgogCXB1c2gJJXIxMwogLkxwcm9sb2d1ZToKKwltb3YJJGxlbiwlcjExCisJbW92CSRpbnAsJXIxMgorCW1vdgkkb3V0LCVyMTMKK19fXworbXkgJGxlbj0iJXIxMSI7CQkjIHJlYXNzaWduIGlucHV0IGFyZ3VtZW50cworbXkgJGlucD0iJXIxMiI7CitteSAkb3V0PSIlcjEzIjsKIAotCWFkZAlcJDgsJGRhdAotCW1vdmwJLTgoJGRhdCksJFhYWzBdI2QKLQltb3ZsCS00KCRkYXQpLCRZWSNkCitteSBAWFg9KCIlcjEwIiwiJXJzaSIpOworbXkgQFRYPSgiJXJheCIsIiVyYngiKTsKK215ICRZWT0iJXJjeCI7CitteSAkVFk9IiVyZHgiOworCiskY29kZS49PDxfX187CisJeG9yCSRYWFswXSwkWFhbMF0KKwl4b3IJJFlZLCRZWQorCisJbGVhCTgoJGRhdCksJGRhdAorCW1vdgktOCgkZGF0KSwkWFhbMF0jYgorCW1vdgktNCgkZGF0KSwkWVkjYgogCWNtcGwJXCQtMSwyNTYoJGRhdCkKIAlqZQkuTFJDNF9DSEFSCisJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVyOGQKKwl4b3IJJFRYWzFdLCRUWFsxXQogCWluYwkkWFhbMF0jYgorCXN1YgkkWFhbMF0sJFRYWzFdCisJc3ViCSRpbnAsJG91dAogCW1vdmwJKCRkYXQsJFhYWzBdLDQpLCRUWFswXSNkCi0JdGVzdAlcJC04LCRsZW4KKwl0ZXN0CVwkLTE2LCRsZW4KIAlqegkuTGxvb3AxCi0Jam1wCS5MbG9vcDgKKwlidAlcJDMwLCVyOGQJIyBJbnRlbCBDUFU/CisJamMJLkxpbnRlbAorCWFuZAlcJDcsJFRYWzFdCisJbGVhCTEoJFhYWzBdKSwkWFhbMV0KKwlqegkuTG9vcDgKKwlzdWIJJFRYWzFdLCRsZW4KKy5Mb29wOF93YXJtdXA6CisJYWRkCSRUWFswXSNiLCRZWSNiCisJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKKwltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQorCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCisJYWRkCSRUWSNiLCRUWFswXSNiCisJaW5jCSRYWFswXSNiCisJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKKwltb3ZsCSgkZGF0LCRYWFswXSw0KSwkVFhbMF0jZAorCXhvcmIJKCRpbnApLCRUWSNiCisJbW92YgkkVFkjYiwoJG91dCwkaW5wKQorCWxlYQkxKCRpbnApLCRpbnAKKwlkZWMJJFRYWzFdCisJam56CS5Mb29wOF93YXJtdXAKKworCWxlYQkxKCRYWFswXSksJFhYWzFdCisJam1wCS5Mb29wOAogLmFsaWduCTE2Ci0uTGxvb3A4OgorLkxvb3A4OgogX19fCiBmb3IgKCRpPTA7JGk8ODskaSsrKSB7CiskY29kZS49PDxfX18gaWYgKCRpPT03KTsKKwlhZGQJXCQ4LCRYWFsxXSNiCitfX18KICRjb2RlLj08PF9fXzsKIAlhZGQJJFRYWzBdI2IsJFlZI2IKLQltb3YJJFhYWzBdLCRYWFsxXQogCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkCi0Jcm9yCVwkOCwlcmF4CQkJIyByb3IgaXMgcmVkdW5kYW50IHdoZW4gJGk9MAotCWluYwkkWFhbMV0jYgotCW1vdmwJKCRkYXQsJFhYWzFdLDQpLCRUWFsxXSNkCi0JY21wCSRYWFsxXSwkWVkKIAltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQotCWNtb3ZlCSRUWFswXSwkVFhbMV0KLQltb3ZsCSRUWSNkLCgkZGF0LCRYWFswXSw0KQorCW1vdmwJYDQqKCRpPT03Py0xOiRpKWAoJGRhdCwkWFhbMV0sNCksJFRYWzFdI2QKKwlyb3IJXCQ4LCVyOAkJCQkjIHJvciBpcyByZWR1bmRhbnQgd2hlbiAkaT0wCisJbW92bAkkVFkjZCw0KiRpKCRkYXQsJFhYWzBdLDQpCiAJYWRkCSRUWFswXSNiLCRUWSNiCi0JbW92YgkoJGRhdCwkVFksNCksJWFsCisJbW92YgkoJGRhdCwkVFksNCksJXI4YgogX19fCi1wdXNoKEBUWCxzaGlmdChAVFgpKTsgcHVzaChAWFgsc2hpZnQoQFhYKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCitwdXNoKEBUWCxzaGlmdChAVFgpKTsgI3B1c2goQFhYLHNoaWZ0KEBYWCkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycwogfQogJGNvZGUuPTw8X19fOwotCXJvcglcJDgsJXJheAorCWFkZAlcJDgsJFhYWzBdI2IKKwlyb3IJXCQ4LCVyOAogCXN1YglcJDgsJGxlbgogCi0JeG9yCSgkaW5wKSwlcmF4Ci0JYWRkCVwkOCwkaW5wCi0JbW92CSVyYXgsKCRvdXQpCi0JYWRkCVwkOCwkb3V0CisJeG9yCSgkaW5wKSwlcjgKKwltb3YJJXI4LCgkb3V0LCRpbnApCisJbGVhCTgoJGlucCksJGlucAogCiAJdGVzdAlcJC04LCRsZW4KLQlqbnoJLkxsb29wOAorCWpuegkuTG9vcDgKKwljbXAJXCQwLCRsZW4KKwlqbmUJLkxsb29wMQorCWptcAkuTGV4aXQKKworLmFsaWduCTE2CisuTGludGVsOgorCXRlc3QJXCQtMzIsJGxlbgorCWp6CS5MbG9vcDEKKwlhbmQJXCQxNSwkVFhbMV0KKwlqegkuTG9vcDE2X2lzX2hvdAorCXN1YgkkVFhbMV0sJGxlbgorLkxvb3AxNl93YXJtdXA6CisJYWRkCSRUWFswXSNiLCRZWSNiCisJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKKwltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQorCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCisJYWRkCSRUWSNiLCRUWFswXSNiCisJaW5jCSRYWFswXSNiCisJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKKwltb3ZsCSgkZGF0LCRYWFswXSw0KSwkVFhbMF0jZAorCXhvcmIJKCRpbnApLCRUWSNiCisJbW92YgkkVFkjYiwoJG91dCwkaW5wKQorCWxlYQkxKCRpbnApLCRpbnAKKwlkZWMJJFRYWzFdCisJam56CS5Mb29wMTZfd2FybXVwCisKKwltb3YJJFlZLCRUWFsxXQorCXhvcgkkWVksJFlZCisJbW92CSRUWFsxXSNiLCRZWSNiCisKKy5Mb29wMTZfaXNfaG90OgorCWxlYQkoJGRhdCwkWFhbMF0sNCksJFhYWzFdCitfX18KK3N1YiBSQzRfbG9vcCB7CisgIG15ICRpPXNoaWZ0OworICBteSAkaj0kaTwwPzA6JGk7CisgIG15ICR4bW09IiV4bW0iLigkaiYxKTsKKworICAgICRjb2RlLj0iCWFkZAlcJDE2LCRYWFswXSNiXG4iCQlpZiAoJGk9PTE1KTsKKyAgICAkY29kZS49Igltb3ZkcXUJKCRpbnApLCV4bW0yXG4iCQkJaWYgKCRpPT0xNSk7CisgICAgJGNvZGUuPSIJYWRkCSRUWFswXSNiLCRZWSNiXG4iCQlpZiAoJGk8PTApOworICAgICRjb2RlLj0iCW1vdmwJKCRkYXQsJFlZLDQpLCRUWSNkXG4iOworICAgICRjb2RlLj0iCXB4b3IJJXhtbTAsJXhtbTJcbiIJCQlpZiAoJGk9PTApOworICAgICRjb2RlLj0iCXBzbGxxCVwkOCwleG1tMVxuIgkJCWlmICgkaT09MCk7CisgICAgJGNvZGUuPSIJcHhvcgkkeG1tLCR4bW1cbiIJCQlpZiAoJGk8PTEpOworICAgICRjb2RlLj0iCW1vdmwJJFRYWzBdI2QsKCRkYXQsJFlZLDQpXG4iOworICAgICRjb2RlLj0iCWFkZAkkVFkjYiwkVFhbMF0jYlxuIjsKKyAgICAkY29kZS49Igltb3ZsCWA0KigkaisxKWAoJFhYWzFdKSwkVFhbMV0jZFxuIglpZiAoJGk8MTUpOworICAgICRjb2RlLj0iCW1vdnoJJFRYWzBdI2IsJFRYWzBdI2RcbiI7CisgICAgJGNvZGUuPSIJbW92bAkkVFkjZCw0KiRqKCRYWFsxXSlcbiI7CisgICAgJGNvZGUuPSIJcHhvcgkleG1tMSwleG1tMlxuIgkJCWlmICgkaT09MCk7CisgICAgJGNvZGUuPSIJbGVhCSgkZGF0LCRYWFswXSw0KSwkWFhbMV1cbiIJaWYgKCRpPT0xNSk7CisgICAgJGNvZGUuPSIJYWRkCSRUWFsxXSNiLCRZWSNiXG4iCQlpZiAoJGk8MTUpOworICAgICRjb2RlLj0iCXBpbnNydwlcJGAoJGo+PjEpJjdgLCgkZGF0LCRUWFswXSw0KSwkeG1tXG4iOworICAgICRjb2RlLj0iCW1vdmRxdQkleG1tMiwoJG91dCwkaW5wKVxuIgkJaWYgKCRpPT0wKTsKKyAgICAkY29kZS49IglsZWEJMTYoJGlucCksJGlucFxuIgkJaWYgKCRpPT0wKTsKKyAgICAkY29kZS49Igltb3ZsCSgkWFhbMV0pLCRUWFsxXSNkXG4iCQlpZiAoJGk9PTE1KTsKK30KKwlSQzRfbG9vcCgtMSk7CiskY29kZS49PDxfX187CisJam1wCS5Mb29wMTZfZW50ZXIKKy5hbGlnbgkxNgorLkxvb3AxNjoKK19fXworCitmb3IgKCRpPTA7JGk8MTY7JGkrKykgeworICAgICRjb2RlLj0iLkxvb3AxNl9lbnRlcjpcbiIJCWlmICgkaT09MSk7CisJUkM0X2xvb3AoJGkpOworCXB1c2goQFRYLHNoaWZ0KEBUWCkpOyAJCSMgInJvdGF0ZSIgcmVnaXN0ZXJzCit9CiskY29kZS49PDxfX187CisJbW92CSRZWSwkVFhbMV0KKwl4b3IJJFlZLCRZWQkJCSMga2V5d29yZCB0byBwYXJ0aWFsIHJlZ2lzdGVyCisJc3ViCVwkMTYsJGxlbgorCW1vdgkkVFhbMV0jYiwkWVkjYgorCXRlc3QJXCQtMTYsJGxlbgorCWpuegkuTG9vcDE2CisKKwlwc2xscQlcJDgsJXhtbTEKKwlweG9yCSV4bW0wLCV4bW0yCisJcHhvcgkleG1tMSwleG1tMgorCW1vdmRxdQkleG1tMiwoJG91dCwkaW5wKQorCWxlYQkxNigkaW5wKSwkaW5wCisKIAljbXAJXCQwLCRsZW4KIAlqbmUJLkxsb29wMQogCWptcAkuTGV4aXQKQEAgLTE1Miw5ICszMTcsOCBAQAogCW1vdmwJKCRkYXQsJFRYWzBdLDQpLCRUWSNkCiAJbW92bAkoJGRhdCwkWFhbMF0sNCksJFRYWzBdI2QKIAl4b3JiCSgkaW5wKSwkVFkjYgotCWluYwkkaW5wCi0JbW92YgkkVFkjYiwoJG91dCkKLQlpbmMJJG91dAorCW1vdmIJJFRZI2IsKCRvdXQsJGlucCkKKwlsZWEJMSgkaW5wKSwkaW5wCiAJZGVjCSRsZW4KIAlqbnoJLkxsb29wMQogCWptcAkuTGV4aXQKQEAgLTE2NSwxMyArMzI5LDExIEBACiAJbW92emIJKCRkYXQsJFhYWzBdKSwkVFhbMF0jZAogCXRlc3QJXCQtOCwkbGVuCiAJanoJLkxjbG9vcDEKLQljbXBsCVwkMCwyNjAoJGRhdCkKLQlqbnoJLkxjbG9vcDEKIAlqbXAJLkxjbG9vcDgKIC5hbGlnbgkxNgogLkxjbG9vcDg6Ci0JbW92CSgkaW5wKSwlZWF4Ci0JbW92CTQoJGlucCksJWVieAorCW1vdgkoJGlucCksJXI4ZAorCW1vdgk0KCRpbnApLCVyOWQKIF9fXwogIyB1bnJvbGwgMng0LXdpc2UsIGJlY2F1c2UgNjQtYml0IHJvdGF0ZXMga2lsbCBJbnRlbCBQNC4uLgogZm9yICgkaT0wOyRpPDQ7JGkrKykgewpAQCAtMTg4LDggKzM1MCw4IEBACiAJbW92CSRUWFswXSwkVFhbMV0KIC5MY21vdiRpOgogCWFkZAkkVFhbMF0jYiwkVFkjYgotCXhvcgkoJGRhdCwkVFkpLCVhbAotCXJvcglcJDgsJWVheAorCXhvcgkoJGRhdCwkVFkpLCVyOGIKKwlyb3IJXCQ4LCVyOGQKIF9fXwogcHVzaChAVFgsc2hpZnQoQFRYKSk7IHB1c2goQFhYLHNoaWZ0KEBYWCkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycwogfQpAQCAtMjA3LDE2ICszNjksMTYgQEAKIAltb3YJJFRYWzBdLCRUWFsxXQogLkxjbW92JGk6CiAJYWRkCSRUWFswXSNiLCRUWSNiCi0JeG9yCSgkZGF0LCRUWSksJWJsCi0Jcm9yCVwkOCwlZWJ4CisJeG9yCSgkZGF0LCRUWSksJXI5YgorCXJvcglcJDgsJXI5ZAogX19fCiBwdXNoKEBUWCxzaGlmdChAVFgpKTsgcHVzaChAWFgsc2hpZnQoQFhYKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCiB9CiAkY29kZS49PDxfX187CiAJbGVhCS04KCRsZW4pLCRsZW4KLQltb3YJJWVheCwoJG91dCkKKwltb3YJJXI4ZCwoJG91dCkKIAlsZWEJOCgkaW5wKSwkaW5wCi0JbW92CSVlYngsNCgkb3V0KQorCW1vdgklcjlkLDQoJG91dCkKIAlsZWEJOCgkb3V0KSwkb3V0CiAKIAl0ZXN0CVwkLTgsJGxlbgpAQCAtMjI5LDYgKzM5MSw3IEBACiAuYWxpZ24JMTYKIC5MY2xvb3AxOgogCWFkZAkkVFhbMF0jYiwkWVkjYgorCW1vdnpiCSRZWSNiLCRZWSNkCiAJbW92emIJKCRkYXQsJFlZKSwkVFkjZAogCW1vdmIJJFRYWzBdI2IsKCRkYXQsJFlZKQogCW1vdmIJJFRZI2IsKCRkYXQsJFhYWzBdKQpAQCAtMjYwLDE2ICs0MjMsMTYgQEAKIAlyZXQKIC5zaXplCVJDNCwuLVJDNAogX19fCit9CiAKICRpZHg9IiVyOCI7CiAkaWRvPSIlcjkiOwogCiAkY29kZS49PDxfX187Ci0uZXh0ZXJuCU9QRU5TU0xfaWEzMmNhcF9QCi0uZ2xvYmwJUkM0X3NldF9rZXkKLS50eXBlCVJDNF9zZXRfa2V5LFxAZnVuY3Rpb24sMworLmdsb2JsCXByaXZhdGVfUkM0X3NldF9rZXkKKy50eXBlCXByaXZhdGVfUkM0X3NldF9rZXksXEBmdW5jdGlvbiwzCiAuYWxpZ24JMTYKLVJDNF9zZXRfa2V5OgorcHJpdmF0ZV9SQzRfc2V0X2tleToKIAlsZWEJOCgkZGF0KSwkZGF0CiAJbGVhCSgkaW5wLCRsZW4pLCRpbnAKIAluZWcJJGxlbgpAQCAtMjgwLDEyICs0NDMsOSBAQAogCXhvcgklcjExLCVyMTEKIAogCW1vdglPUEVOU1NMX2lhMzJjYXBfUCglcmlwKSwkaWR4I2QKLQlidAlcJDIwLCRpZHgjZAotCWpuYwkuTHcxc3Rsb29wCi0JYnQJXCQzMCwkaWR4I2QKLQlzZXRjCSRpZG8jYgotCW1vdgkkaWRvI2QsMjYwKCRkYXQpCi0Jam1wCS5MYzFzdGxvb3AKKwlidAlcJDIwLCRpZHgjZAkjIFJDNF9DSEFSPworCWpjCS5MYzFzdGxvb3AKKwlqbXAJLkx3MXN0bG9vcAogCiAuYWxpZ24JMTYKIC5MdzFzdGxvb3A6CkBAIC0zMzksNyArNDk5LDcgQEAKIAltb3YJJWVheCwtOCgkZGF0KQogCW1vdgklZWF4LC00KCRkYXQpCiAJcmV0Ci0uc2l6ZQlSQzRfc2V0X2tleSwuLVJDNF9zZXRfa2V5Cisuc2l6ZQlwcml2YXRlX1JDNF9zZXRfa2V5LC4tcHJpdmF0ZV9SQzRfc2V0X2tleQogCiAuZ2xvYmwJUkM0X29wdGlvbnMKIC50eXBlCVJDNF9vcHRpb25zLFxAYWJpLW9tbmlwb3RlbnQKQEAgLTM0OCwxOCArNTA4LDIwIEBACiAJbGVhCS5Mb3B0cyglcmlwKSwlcmF4CiAJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVlZHgKIAlidAlcJDIwLCVlZHgKLQlqbmMJLkxkb25lCi0JYWRkCVwkMTIsJXJheAorCWpjCS5MOHhjaGFyCiAJYnQJXCQzMCwlZWR4CiAJam5jCS5MZG9uZQotCWFkZAlcJDEzLCVyYXgKKwlhZGQJXCQyNSwlcmF4CisJcmV0CisuTDh4Y2hhcjoKKwlhZGQJXCQxMiwlcmF4CiAuTGRvbmU6CiAJcmV0CiAuYWxpZ24JNjQKIC5Mb3B0czoKIC5hc2NpegkicmM0KDh4LGludCkiCiAuYXNjaXoJInJjNCg4eCxjaGFyKSIKLS5hc2NpegkicmM0KDF4LGNoYXIpIgorLmFzY2l6CSJyYzQoMTZ4LGludCkiCiAuYXNjaXoJIlJDNCBmb3IgeDg2XzY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgogLmFsaWduCTY0CiAuc2l6ZQlSQzRfb3B0aW9ucywuLVJDNF9vcHRpb25zCkBAIC00ODIsMjIgKzY0NCwzMiBAQAogCS5ydmEJLkxTRUhfZW5kX1JDNAogCS5ydmEJLkxTRUhfaW5mb19SQzQKIAotCS5ydmEJLkxTRUhfYmVnaW5fUkM0X3NldF9rZXkKLQkucnZhCS5MU0VIX2VuZF9SQzRfc2V0X2tleQotCS5ydmEJLkxTRUhfaW5mb19SQzRfc2V0X2tleQorCS5ydmEJLkxTRUhfYmVnaW5fcHJpdmF0ZV9SQzRfc2V0X2tleQorCS5ydmEJLkxTRUhfZW5kX3ByaXZhdGVfUkM0X3NldF9rZXkKKwkucnZhCS5MU0VIX2luZm9fcHJpdmF0ZV9SQzRfc2V0X2tleQogCiAuc2VjdGlvbgkueGRhdGEKIC5hbGlnbgk4CiAuTFNFSF9pbmZvX1JDNDoKIAkuYnl0ZQk5LDAsMCwwCiAJLnJ2YQlzdHJlYW1fc2VfaGFuZGxlcgotLkxTRUhfaW5mb19SQzRfc2V0X2tleToKKy5MU0VIX2luZm9fcHJpdmF0ZV9SQzRfc2V0X2tleToKIAkuYnl0ZQk5LDAsMCwwCiAJLnJ2YQlrZXlfc2VfaGFuZGxlcgogX19fCiB9CiAKLSRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207CitzdWIgcmVnX3BhcnQgeworbXkgKCRyZWcsJGNvbnYpPUBfOworICAgIGlmICgkcmVnID1+IC8lclswLTldKy8pCXsgJHJlZyAuPSAkY29udjsgfQorICAgIGVsc2lmICgkY29udiBlcSAiYiIpCXsgJHJlZyA9fiBzLyVbZXJdKFteeF0rKXg/LyUkMWwvOwl9CisgICAgZWxzaWYgKCRjb252IGVxICJ3IikJeyAkcmVnID1+IHMvJVtlcl0oLispLyUkMS87CQl9CisgICAgZWxzaWYgKCRjb252IGVxICJkIikJeyAkcmVnID1+IHMvJVtlcl0oLispLyVlJDEvOwkJfQorICAgIHJldHVybiAkcmVnOworfQorCiskY29kZSA9fiBzLyglW2EtejAtOV0rKSMoW2J3ZF0pL3JlZ19wYXJ0KCQxLCQyKS9nZW07CiskY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKIAogcHJpbnQgJGNvZGU7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9yYzQvcmM0LmggYi9jcnlwdG8vcmM0L3JjNC5oCmluZGV4IDI5ZDFhY2MuLjg4Y2ViNDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzQvcmM0LmgKKysrIGIvY3J5cHRvL3JjNC9yYzQuaApAQCAtNzksNiArNzksNyBAQAogIAogY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7CiB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cit2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKIHZvaWQgUkM0KFJDNF9LRVkgKmtleSwgc2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAogCQl1bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzRfc2tleS5jIGIvY3J5cHRvL3JjNC9yYzRfc2tleS5jCmluZGV4IGIyMmM0MGIuLmZkYTI3NjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yYzQvcmM0X3NrZXkuYworKysgYi9jcnlwdG8vcmM0L3JjNF9za2V5LmMKQEAgLTg1LDcgKzg1LDcgQEAKICAqIERhdGU6IFdlZCwgMTQgU2VwIDE5OTQgMDY6MzU6MzEgR01UCiAgKi8KIAotdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogCXsKICAgICAgICAgcmVnaXN0ZXIgUkM0X0lOVCB0bXA7CiAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOwpAQCAtMTA0LDQwICsxMDQsNiBAQAogCQlkWyhuKV09ZFtpZDJdOyBcCiAJCWRbaWQyXT10bXA7IH0KIAotI2lmIGRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKQotIyBpZglkZWZpbmVkKF9faTM4NikgICB8fCBkZWZpbmVkKF9faTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAotCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCi0JZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KQotCWlmIChzaXplb2YoUkM0X0lOVCkgPiAxKSB7Ci0JCS8qCi0JCSAqIFVubGlrZSBhbGwgb3RoZXIgeDg2IFthbmQgeDg2XzY0XSBpbXBsZW1lbnRhdGlvbnMsCi0JCSAqIEludGVsIFA0IGNvcmUgW2luY2x1ZGluZyBFTTY0VF0gd2FzIGZvdW5kIHRvIHBlcmZvcm0KLQkJICogcG9vcmx5IHdpdGggd2lkZXIgUkM0X0lOVC4gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQKLQkJICogZm9yIElBLTMyIGhhbmQtY29kZWQgYXNzZW1ibGVyIHR1cm5lZCBvdXQgdG8gYmUgMi44eAotCQkgKiBpZiByZS1jb2RlZCBmb3IgUkM0X0NIQVIhIEl0J3MgaG93ZXZlciBpbmFwcHJvcHJpYXRlCi0JCSAqIHRvIGp1c3Qgc3dpdGNoIHRvIFJDNF9DSEFSIGZvciB4ODZbXzY0XSwgYXMgbm9uLVA0Ci0JCSAqIGltcGxlbWVudGF0aW9ucyBzdWZmZXIgZnJvbSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQotCQkgKiBsb3NzZXMgdGhlbiwgZS5nLiBQSUlJIGV4aGliaXRzID4yeCBkZXRlcmlvcmF0aW9uLAotCQkgKiBhbmQgc28gZG9lcyBPcHRlcm9uLiBJbiBvcmRlciB0byBhc3N1cmUgb3B0aW1hbAotCQkgKiBhbGwtcm91bmQgcGVyZm9ybWFuY2UsIGxldCB1cyBbdHJ5IHRvXSBkZXRlY3QgUDQgYXQKLQkJICogcnVuLXRpbWUgYnkgY2hlY2tpbmcgdXBvbiBIVFQgYml0IGluIENQVSBjYXBhYmlsaXR5Ci0JCSAqIHZlY3RvciBhbmQgc2V0IHVwIGNvbXByZXNzZWQga2V5IHNjaGVkdWxlLCB3aGljaCBpcwotCQkgKiByZWNvZ25pemVkIGJ5IGNvcnJlc3BvbmRpbmdseSB1cGRhdGVkIGFzc2VtYmxlcgotCQkgKiBtb2R1bGUuLi4KLQkJICoJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgotCQkgKi8KLQkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgewotCQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOwotCi0JCQlmb3IgKGk9MDtpPDI1NjtpKyspIGNwW2ldPWk7Ci0JCQlmb3IgKGk9MDtpPDI1NjtpKyspIFNLX0xPT1AoY3AsaSk7Ci0JCQkvKiBtYXJrIHNjaGVkdWxlIGFzIGNvbXByZXNzZWQhICovCi0JCQlkWzI1Ni9zaXplb2YoUkM0X0lOVCldPS0xOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotIyBlbmRpZgotI2VuZGlmCiAJZm9yIChpPTA7IGkgPCAyNTY7IGkrKykgZFtpXT1pOwogCWZvciAoaT0wOyBpIDwgMjU2OyBpKz00KQogCQl7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmM0L3JjNF91dGwuYyBiL2NyeXB0by9yYzQvcmM0X3V0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiM2YwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcmM0L3JjNF91dGwuYwpAQCAtMCwwICsxLDYyIEBACisvKiBjcnlwdG8vcmM0L3JjNF91dGwuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+CisKK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlmaXBzX2NpcGhlcl9hYm9ydChSQzQpOworI2VuZGlmCisJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisJfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JjNC9yYzR0ZXN0LmMgYi9jcnlwdG8vcmM0L3JjNHRlc3QuYwppbmRleCA2MzNhNzllLi40MzEyNjA1IDEwMDY0NAotLS0gYS9jcnlwdG8vcmM0L3JjNHRlc3QuYworKysgYi9jcnlwdG8vcmM0L3JjNHRlc3QuYwpAQCAtMTIwLDYgKzEyMCwxMiBAQAogCVJDNF9LRVkga2V5OwogCXVuc2lnbmVkIGNoYXIgb2J1Zls1MTJdOwogCisjaWYgIWRlZmluZWQoT1BFTlNTTF9QSUMpCisJdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpOworCisJT1BFTlNTTF9jcHVpZF9zZXR1cCgpOworI2VuZGlmCisKIAlmb3IgKGk9MDsgaTw2OyBpKyspCiAJCXsKIAkJUkM0X3NldF9rZXkoJmtleSxrZXlzW2ldWzBdLCYoa2V5c1tpXVsxXSkpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaCBiL2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKaW5kZXggNTk0MmViNi4uMTg5YmQ4YyAxMDA2NDQKLS0tIGEvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAorKysgYi9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCkBAIC05MSw2ICs5MSw5IEBACiAJdW5zaWduZWQgaW50ICAgbnVtOwogCX0gUklQRU1EMTYwX0NUWDsKIAorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7CisjZW5kaWYKIGludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKIGludCBSSVBFTUQxNjBfVXBkYXRlKFJJUEVNRDE2MF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgUklQRU1EMTYwX0NUWCAqYyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMgYi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKaW5kZXggNTliMDE3Zi4uNjNmMGQ5OCAxMDA2NDQKLS0tIGEvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCisrKyBiL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAicm1kX2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KIAogY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CiAKQEAgLTY5LDcgKzcwLDcgQEAKICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKICMgIGVuZGlmCiAKLWludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQorZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKIAl7CiAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+QT1SSVBFTUQxNjBfQTsKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhLmggYi9jcnlwdG8vcnNhL3JzYS5oCmluZGV4IGNmNzQzNDMuLjQ4MTRhMmYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhLmgKKysrIGIvY3J5cHRvL3JzYS9yc2EuaApAQCAtMjIyLDEyICsyMjIsMjIgQEAKIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgLTEsIEVWUF9QS0VZX0NUUkxfUlNBX1BBRERJTkcsIFwKIAkJCQlwYWQsIE5VTEwpCiAKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX2dldF9yc2FfcGFkZGluZyhjdHgsIHBwYWQpIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgLTEsIFwKKwkJCQlFVlBfUEtFWV9DVFJMX0dFVF9SU0FfUEFERElORywgMCwgcHBhZCkKKwogI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihjdHgsIGxlbikgXAogCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBcCiAJCQkJKEVWUF9QS0VZX09QX1NJR058RVZQX1BLRVlfT1BfVkVSSUZZKSwgXAogCQkJCUVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOLCBcCiAJCQkJbGVuLCBOVUxMKQogCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9nZXRfcnNhX3Bzc19zYWx0bGVuKGN0eCwgcGxlbikgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBcCisJCQkJKEVWUF9QS0VZX09QX1NJR058RVZQX1BLRVlfT1BfVkVSSUZZKSwgXAorCQkJCUVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QU1NfU0FMVExFTiwgXAorCQkJCTAsIHBsZW4pCisKICNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9yc2Ffa2V5Z2VuX2JpdHMoY3R4LCBiaXRzKSBcCiAJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX0tFWUdFTiwgXAogCQkJCUVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9CSVRTLCBiaXRzLCBOVUxMKQpAQCAtMjM2LDExICsyNDYsMjQgQEAKIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgRVZQX1BLRVlfT1BfS0VZR0VOLCBcCiAJCQkJRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUCwgMCwgcHViZXhwKQogCisjZGVmaW5lCSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9tZ2YxX21kKGN0eCwgbWQpCVwKKwkJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX1RZUEVfU0lHLCAgXAorCQkJCUVWUF9QS0VZX0NUUkxfUlNBX01HRjFfTUQsIDAsICh2b2lkICopbWQpCisKKyNkZWZpbmUJIEVWUF9QS0VZX0NUWF9nZXRfcnNhX21nZjFfbWQoY3R4LCBwbWQpCVwKKwkJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX1RZUEVfU0lHLCAgXAorCQkJCUVWUF9QS0VZX0NUUkxfR0VUX1JTQV9NR0YxX01ELCAwLCAodm9pZCAqKXBtZCkKKwogI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9QQURESU5HCShFVlBfUEtFWV9BTEdfQ1RSTCArIDEpCiAjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOCShFVlBfUEtFWV9BTEdfQ1RSTCArIDIpCiAKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX0JJVFMJKEVWUF9QS0VZX0FMR19DVFJMICsgMykKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUAkoRVZQX1BLRVlfQUxHX0NUUkwgKyA0KQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9NR0YxX01ECShFVlBfUEtFWV9BTEdfQ1RSTCArIDUpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9HRVRfUlNBX1BBRERJTkcJCShFVlBfUEtFWV9BTEdfQ1RSTCArIDYpCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QU1NfU0FMVExFTgkoRVZQX1BLRVlfQUxHX0NUUkwgKyA3KQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX0dFVF9SU0FfTUdGMV9NRAkJKEVWUF9QS0VZX0FMR19DVFJMICsgOCkKIAogI2RlZmluZSBSU0FfUEtDUzFfUEFERElORwkxCiAjZGVmaW5lIFJTQV9TU0xWMjNfUEFERElORwkyCkBAIC0zMDAsNiArMzIzLDE2IEBACiBERUNMQVJFX0FTTjFfRU5DT0RFX0ZVTkNUSU9OU19jb25zdChSU0EsIFJTQVB1YmxpY0tleSkKIERFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KFJTQSwgUlNBUHJpdmF0ZUtleSkKIAordHlwZWRlZiBzdHJ1Y3QgcnNhX3Bzc19wYXJhbXNfc3QKKwl7CisJWDUwOV9BTEdPUiAqaGFzaEFsZ29yaXRobTsKKwlYNTA5X0FMR09SICptYXNrR2VuQWxnb3JpdGhtOworCUFTTjFfSU5URUdFUiAqc2FsdExlbmd0aDsKKwlBU04xX0lOVEVHRVIgKnRyYWlsZXJGaWVsZDsKKwl9IFJTQV9QU1NfUEFSQU1TOworCitERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFJTQV9QU1NfUEFSQU1TKQorCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQJUlNBX3ByaW50X2ZwKEZJTEUgKmZwLCBjb25zdCBSU0EgKnIsaW50IG9mZnNldCk7CiAjZW5kaWYKQEAgLTM4MCw2ICs0MTMsMTQgQEAKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAogCQkJY29uc3QgRVZQX01EICpIYXNoLCBpbnQgc0xlbik7CiAKK2ludCBSU0FfdmVyaWZ5X1BLQ1MxX1BTU19tZ2YxKFJTQSAqcnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICptSGFzaCwKKwkJCWNvbnN0IEVWUF9NRCAqSGFzaCwgY29uc3QgRVZQX01EICptZ2YxSGFzaCwgCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpFTSwgaW50IHNMZW4pOworCitpbnQgUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxKFJTQSAqcnNhLCB1bnNpZ25lZCBjaGFyICpFTSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAorCQkJY29uc3QgRVZQX01EICpIYXNoLCBjb25zdCBFVlBfTUQgKm1nZjFIYXNoLCBpbnQgc0xlbik7CisKIGludCBSU0FfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAogCUNSWVBUT19FWF9kdXAgKmR1cF9mdW5jLCBDUllQVE9fRVhfZnJlZSAqZnJlZV9mdW5jKTsKIGludCBSU0Ffc2V0X2V4X2RhdGEoUlNBICpyLGludCBpZHgsdm9pZCAqYXJnKTsKQEAgLTM4OCw2ICs0MjksMjUgQEAKIFJTQSAqUlNBUHVibGljS2V5X2R1cChSU0EgKnJzYSk7CiBSU0EgKlJTQVByaXZhdGVLZXlfZHVwKFJTQSAqcnNhKTsKIAorLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgorICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXNwb25zaWJpbGl0eQorICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgorICovCisKKyNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKKworLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQorICogdXNhZ2UgaXMgY29tcGxpYW50LgorICovCisKKyNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKy8qIEFwcGxpY2F0aW9uIGhhcyBkZWNpZGVkIFBSTkcgaXMgZ29vZCBlbm91Z2ggdG8gZ2VuZXJhdGUgYSBrZXk6IGRvbid0CisgKiBjaGVjay4KKyAqLworI2RlZmluZSBSU0FfRkxBR19DSEVDS0VECQkJMHgwODAwCisKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCkBAIC00MDUsNiArNDY1LDcgQEAKICNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfQ1RSTAkJCQkgMTQzCiAjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSCQkJCSAxNDQKICNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfU0lHTgkJCQkgMTQyCisjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX1ZFUklGWQkJCQkgMTU0CiAjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX1ZFUklGWVJFQ09WRVIJCQkgMTQxCiAjZGVmaW5lIFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjkKICNkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWQkJCQkgMTIzCkBAIC00MTMsNiArNDc0LDggQEAKICNkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMDMKICNkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMDQKICNkZWZpbmUgUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWQkJCQkgMTA1CisjZGVmaW5lIFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgJCQkgMTU1CisjZGVmaW5lIFJTQV9GX1JTQV9JVEVNX1ZFUklGWQkJCQkgMTU2CiAjZGVmaW5lIFJTQV9GX1JTQV9NRU1PUllfTE9DSwkJCQkgMTMwCiAjZGVmaW5lIFJTQV9GX1JTQV9ORVdfTUVUSE9ECQkJCSAxMDYKICNkZWZpbmUgUlNBX0ZfUlNBX05VTEwJCQkJCSAxMjQKQEAgLTQyNCw2ICs0ODcsNyBAQAogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVAJCSAxMjEKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4CiAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMApAQCAtNDM2LDggKzUwMCwxMiBAQAogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAogI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE1MgorI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCiAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgogI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwpAQCAtNDQ1LDYgKzUxMyw3IEBACiAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQogI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCiAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgorI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJCSAxMDAKQEAgLTQ3MCwxOSArNTM5LDI0IEBACiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfSEVBREVSCQkJCSAxMzcKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9LRVlCSVRTCQkJCSAxNDUKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSAkJCSAxMzEKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkgMTQxCisjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTQ5CiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2CisjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTUwCiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5CiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCiAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAogI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CiAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJCSAxNTcKICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAogI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwogI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4CiAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAogI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOApAQCAtNDkzLDcgKzU2NywxMiBAQAogI2RlZmluZSBSU0FfUl9TU0xWM19ST0xMQkFDS19BVFRBQ0sJCQkgMTE1CiAjZGVmaW5lIFJTQV9SX1RIRV9BU04xX09CSkVDVF9JREVOVElGSUVSX0lTX05PVF9LTk9XTl9GT1JfVEhJU19NRCAxMTYKICNkZWZpbmUgUlNBX1JfVU5LTk9XTl9BTEdPUklUSE1fVFlQRQkJCSAxMTcKKyNkZWZpbmUgUlNBX1JfVU5LTk9XTl9NQVNLX0RJR0VTVAkJCSAxNTEKICNkZWZpbmUgUlNBX1JfVU5LTk9XTl9QQURESU5HX1RZUEUJCQkgMTE4CisjZGVmaW5lIFJTQV9SX1VOS05PV05fUFNTX0RJR0VTVAkJCSAxNTIKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfTUFTS19BTEdPUklUSE0JCSAxNTMKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfTUFTS19QQVJBTUVURVIJCSAxNTQKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfU0lHTkFUVVJFX1RZUEUJCSAxNTUKICNkZWZpbmUgUlNBX1JfVkFMVUVfTUlTU0lORwkJCQkgMTQ3CiAjZGVmaW5lIFJTQV9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgJCQkgMTE5CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX2FtZXRoLmMgYi9jcnlwdG8vcnNhL3JzYV9hbWV0aC5jCmluZGV4IDhjMzIwOTguLjI0NjA5MTAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX2FtZXRoLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfYW1ldGguYwpAQCAtMjY1LDYgKzI2NSwxNDcgQEAKIAlyZXR1cm4gZG9fcnNhX3ByaW50KGJwLCBwa2V5LT5wa2V5LnJzYSwgaW5kZW50LCAxKTsKIAl9CiAKK3N0YXRpYyBSU0FfUFNTX1BBUkFNUyAqcnNhX3Bzc19kZWNvZGUoY29uc3QgWDUwOV9BTEdPUiAqYWxnLAorCQkJCQlYNTA5X0FMR09SICoqcG1hc2tIYXNoKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwOworCWludCBwbGVuOworCVJTQV9QU1NfUEFSQU1TICpwc3M7CisKKwkqcG1hc2tIYXNoID0gTlVMTDsKKworCWlmICghYWxnLT5wYXJhbWV0ZXIgfHwgYWxnLT5wYXJhbWV0ZXItPnR5cGUgIT0gVl9BU04xX1NFUVVFTkNFKQorCQlyZXR1cm4gTlVMTDsKKwlwID0gYWxnLT5wYXJhbWV0ZXItPnZhbHVlLnNlcXVlbmNlLT5kYXRhOworCXBsZW4gPSBhbGctPnBhcmFtZXRlci0+dmFsdWUuc2VxdWVuY2UtPmxlbmd0aDsKKwlwc3MgPSBkMmlfUlNBX1BTU19QQVJBTVMoTlVMTCwgJnAsIHBsZW4pOworCisJaWYgKCFwc3MpCisJCXJldHVybiBOVUxMOworCQorCWlmIChwc3MtPm1hc2tHZW5BbGdvcml0aG0pCisJCXsKKwkJQVNOMV9UWVBFICpwYXJhbSA9IHBzcy0+bWFza0dlbkFsZ29yaXRobS0+cGFyYW1ldGVyOworCQlpZiAoT0JKX29iajJuaWQocHNzLT5tYXNrR2VuQWxnb3JpdGhtLT5hbGdvcml0aG0pID09IE5JRF9tZ2YxCisJCQkmJiBwYXJhbS0+dHlwZSA9PSBWX0FTTjFfU0VRVUVOQ0UpCisJCQl7CisJCQlwID0gcGFyYW0tPnZhbHVlLnNlcXVlbmNlLT5kYXRhOworCQkJcGxlbiA9IHBhcmFtLT52YWx1ZS5zZXF1ZW5jZS0+bGVuZ3RoOworCQkJKnBtYXNrSGFzaCA9IGQyaV9YNTA5X0FMR09SKE5VTEwsICZwLCBwbGVuKTsKKwkJCX0KKwkJfQorCisJcmV0dXJuIHBzczsKKwl9CisKK3N0YXRpYyBpbnQgcnNhX3Bzc19wYXJhbV9wcmludChCSU8gKmJwLCBSU0FfUFNTX1BBUkFNUyAqcHNzLCAKKwkJCQlYNTA5X0FMR09SICptYXNrSGFzaCwgaW50IGluZGVudCkKKwl7CisJaW50IHJ2ID0gMDsKKwlpZiAoIXBzcykKKwkJeworCQlpZiAoQklPX3B1dHMoYnAsICIgKElOVkFMSUQgUFNTIFBBUkFNRVRFUlMpXG4iKSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAxOworCQl9CisJaWYgKEJJT19wdXRzKGJwLCAiXG4iKSA8PSAwKQorCQlnb3RvIGVycjsKKwlpZiAoIUJJT19pbmRlbnQoYnAsIGluZGVudCwgMTI4KSkKKwkJZ290byBlcnI7CisJaWYgKEJJT19wdXRzKGJwLCAiSGFzaCBBbGdvcml0aG06ICIpIDw9IDApCisJCWdvdG8gZXJyOworCisJaWYgKHBzcy0+aGFzaEFsZ29yaXRobSkKKwkJeworCQlpZiAoaTJhX0FTTjFfT0JKRUNUKGJwLCBwc3MtPmhhc2hBbGdvcml0aG0tPmFsZ29yaXRobSkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQl9CisJZWxzZSBpZiAoQklPX3B1dHMoYnAsICJzaGExIChkZWZhdWx0KSIpIDw9IDApCisJCWdvdG8gZXJyOworCisJaWYgKEJJT19wdXRzKGJwLCAiXG4iKSA8PSAwKQorCQlnb3RvIGVycjsKKworCWlmICghQklPX2luZGVudChicCwgaW5kZW50LCAxMjgpKQorCQlnb3RvIGVycjsKKworCWlmIChCSU9fcHV0cyhicCwgIk1hc2sgQWxnb3JpdGhtOiAiKSA8PSAwKQorCQkJZ290byBlcnI7CisJaWYgKHBzcy0+bWFza0dlbkFsZ29yaXRobSkKKwkJeworCQlpZiAoaTJhX0FTTjFfT0JKRUNUKGJwLCBwc3MtPm1hc2tHZW5BbGdvcml0aG0tPmFsZ29yaXRobSkgPD0gMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoQklPX3B1dHMoYnAsICIgd2l0aCAiKSA8PSAwKQorCQkJZ290byBlcnI7CisJCWlmIChtYXNrSGFzaCkKKwkJCXsKKwkJCWlmIChpMmFfQVNOMV9PQkpFQ1QoYnAsIG1hc2tIYXNoLT5hbGdvcml0aG0pIDw9IDApCisJCQlnb3RvIGVycjsKKwkJCX0KKwkJZWxzZSBpZiAoQklPX3B1dHMoYnAsICJJTlZBTElEIikgPD0gMCkKKwkJCWdvdG8gZXJyOworCQl9CisJZWxzZSBpZiAoQklPX3B1dHMoYnAsICJtZ2YxIHdpdGggc2hhMSAoZGVmYXVsdCkiKSA8PSAwKQorCQlnb3RvIGVycjsKKwlCSU9fcHV0cyhicCwgIlxuIik7CisKKwlpZiAoIUJJT19pbmRlbnQoYnAsIGluZGVudCwgMTI4KSkKKwkJZ290byBlcnI7CisJaWYgKEJJT19wdXRzKGJwLCAiU2FsdCBMZW5ndGg6ICIpIDw9IDApCisJCQlnb3RvIGVycjsKKwlpZiAocHNzLT5zYWx0TGVuZ3RoKQorCQl7CisJCWlmIChpMmFfQVNOMV9JTlRFR0VSKGJwLCBwc3MtPnNhbHRMZW5ndGgpIDw9IDApCisJCQlnb3RvIGVycjsKKwkJfQorCWVsc2UgaWYgKEJJT19wdXRzKGJwLCAiMjAgKGRlZmF1bHQpIikgPD0gMCkKKwkJZ290byBlcnI7CisJQklPX3B1dHMoYnAsICJcbiIpOworCisJaWYgKCFCSU9faW5kZW50KGJwLCBpbmRlbnQsIDEyOCkpCisJCWdvdG8gZXJyOworCWlmIChCSU9fcHV0cyhicCwgIlRyYWlsZXIgRmllbGQ6ICIpIDw9IDApCisJCQlnb3RvIGVycjsKKwlpZiAocHNzLT50cmFpbGVyRmllbGQpCisJCXsKKwkJaWYgKGkyYV9BU04xX0lOVEVHRVIoYnAsIHBzcy0+dHJhaWxlckZpZWxkKSA8PSAwKQorCQkJZ290byBlcnI7CisJCX0KKwllbHNlIGlmIChCSU9fcHV0cyhicCwgIjB4YmMgKGRlZmF1bHQpIikgPD0gMCkKKwkJZ290byBlcnI7CisJQklPX3B1dHMoYnAsICJcbiIpOworCQorCXJ2ID0gMTsKKworCWVycjoKKwlyZXR1cm4gcnY7CisKKwl9CisKK3N0YXRpYyBpbnQgcnNhX3NpZ19wcmludChCSU8gKmJwLCBjb25zdCBYNTA5X0FMR09SICpzaWdhbGcsCisJCQkJCWNvbnN0IEFTTjFfU1RSSU5HICpzaWcsCisJCQkJCWludCBpbmRlbnQsIEFTTjFfUENUWCAqcGN0eCkKKwl7CisJaWYgKE9CSl9vYmoybmlkKHNpZ2FsZy0+YWxnb3JpdGhtKSA9PSBOSURfcnNhc3NhUHNzKQorCQl7CisJCWludCBydjsKKwkJUlNBX1BTU19QQVJBTVMgKnBzczsKKwkJWDUwOV9BTEdPUiAqbWFza0hhc2g7CisJCXBzcyA9IHJzYV9wc3NfZGVjb2RlKHNpZ2FsZywgJm1hc2tIYXNoKTsKKwkJcnYgPSByc2FfcHNzX3BhcmFtX3ByaW50KGJwLCBwc3MsIG1hc2tIYXNoLCBpbmRlbnQpOworCQlpZiAocHNzKQorCQkJUlNBX1BTU19QQVJBTVNfZnJlZShwc3MpOworCQlpZiAobWFza0hhc2gpCisJCQlYNTA5X0FMR09SX2ZyZWUobWFza0hhc2gpOworCQlpZiAoIXJ2KQorCQkJcmV0dXJuIDA7CisJCX0KKwllbHNlIGlmICghc2lnICYmIEJJT19wdXRzKGJwLCAiXG4iKSA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoc2lnKQorCQlyZXR1cm4gWDUwOV9zaWduYXR1cmVfZHVtcChicCwgc2lnLCBpbmRlbnQpOworCXJldHVybiAxOworCX0KIAogc3RhdGljIGludCByc2FfcGtleV9jdHJsKEVWUF9QS0VZICpwa2V5LCBpbnQgb3AsIGxvbmcgYXJnMSwgdm9pZCAqYXJnMikKIAl7CkBAIC0zMTAsNiArNDUxLDIxMSBAQAogCiAJfQogCisvKiBDdXN0b21pc2VkIFJTQSBpdGVtIHZlcmlmaWNhdGlvbiByb3V0aW5lLiBUaGlzIGlzIGNhbGxlZCAKKyAqIHdoZW4gYSBzaWduYXR1cmUgaXMgZW5jb3VudGVyZWQgcmVxdWlyaW5nIHNwZWNpYWwgaGFuZGxpbmcuIFdlIAorICogY3VycmVudGx5IG9ubHkgaGFuZGxlIFBTUy4KKyAqLworCisKK3N0YXRpYyBpbnQgcnNhX2l0ZW1fdmVyaWZ5KEVWUF9NRF9DVFggKmN0eCwgY29uc3QgQVNOMV9JVEVNICppdCwgdm9pZCAqYXNuLAorCQkJWDUwOV9BTEdPUiAqc2lnYWxnLCBBU04xX0JJVF9TVFJJTkcgKnNpZywKKwkJCUVWUF9QS0VZICpwa2V5KQorCXsKKwlpbnQgcnYgPSAtMTsKKwlpbnQgc2FsdGxlbjsKKwljb25zdCBFVlBfTUQgKm1nZjFtZCA9IE5VTEwsICptZCA9IE5VTEw7CisJUlNBX1BTU19QQVJBTVMgKnBzczsKKwlYNTA5X0FMR09SICptYXNrSGFzaDsKKwlFVlBfUEtFWV9DVFggKnBrY3R4OworCS8qIFNhbml0eSBjaGVjazogbWFrZSBzdXJlIGl0IGlzIFBTUyAqLworCWlmIChPQkpfb2JqMm5pZChzaWdhbGctPmFsZ29yaXRobSkgIT0gTklEX3JzYXNzYVBzcykKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX0lURU1fVkVSSUZZLCBSU0FfUl9VTlNVUFBPUlRFRF9TSUdOQVRVUkVfVFlQRSk7CisJCXJldHVybiAtMTsKKwkJfQorCS8qIERlY29kZSBQU1MgcGFyYW1ldGVycyAqLworCXBzcyA9IHJzYV9wc3NfZGVjb2RlKHNpZ2FsZywgJm1hc2tIYXNoKTsKKworCWlmIChwc3MgPT0gTlVMTCkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX0lURU1fVkVSSUZZLCBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTKTsKKwkJZ290byBlcnI7CisJCX0KKwkvKiBDaGVjayBtYXNrIGFuZCBsb29rdXAgbWFzayBoYXNoIGFsZ29yaXRobSAqLworCWlmIChwc3MtPm1hc2tHZW5BbGdvcml0aG0pCisJCXsKKwkJaWYgKE9CSl9vYmoybmlkKHBzcy0+bWFza0dlbkFsZ29yaXRobS0+YWxnb3JpdGhtKSAhPSBOSURfbWdmMSkKKwkJCXsKKwkJCVJTQWVycihSU0FfRl9SU0FfSVRFTV9WRVJJRlksIFJTQV9SX1VOU1VQUE9SVEVEX01BU0tfQUxHT1JJVEhNKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlpZiAoIW1hc2tIYXNoKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1JTQV9JVEVNX1ZFUklGWSwgUlNBX1JfVU5TVVBQT1JURURfTUFTS19QQVJBTUVURVIpOworCQkJZ290byBlcnI7CisJCQl9CisJCW1nZjFtZCA9IEVWUF9nZXRfZGlnZXN0YnlvYmoobWFza0hhc2gtPmFsZ29yaXRobSk7CisJCWlmIChtZ2YxbWQgPT0gTlVMTCkKKwkJCXsKKwkJCVJTQWVycihSU0FfRl9SU0FfSVRFTV9WRVJJRlksIFJTQV9SX1VOS05PV05fTUFTS19ESUdFU1QpOworCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwllbHNlCisJCW1nZjFtZCA9IEVWUF9zaGExKCk7CisKKwlpZiAocHNzLT5oYXNoQWxnb3JpdGhtKQorCQl7CisJCW1kID0gRVZQX2dldF9kaWdlc3RieW9iaihwc3MtPmhhc2hBbGdvcml0aG0tPmFsZ29yaXRobSk7CisJCWlmIChtZCA9PSBOVUxMKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1JTQV9JVEVNX1ZFUklGWSwgUlNBX1JfVU5LTk9XTl9QU1NfRElHRVNUKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJZWxzZQorCQltZCA9IEVWUF9zaGExKCk7CisKKwlpZiAocHNzLT5zYWx0TGVuZ3RoKQorCQl7CisJCXNhbHRsZW4gPSBBU04xX0lOVEVHRVJfZ2V0KHBzcy0+c2FsdExlbmd0aCk7CisKKwkJLyogQ291bGQgcGVyZm9ybSBtb3JlIHNhbHQgbGVuZ3RoIHNhbml0eSBjaGVja3MgYnV0IHRoZSBtYWluCisJCSAqIFJTQSByb3V0aW5lcyB3aWxsIHRyYXAgb3RoZXIgaW52YWxpZCB2YWx1ZXMgYW55d2F5LgorCQkgKi8KKwkJaWYgKHNhbHRsZW4gPCAwKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1JTQV9JVEVNX1ZFUklGWSwgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSCk7CisJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCWVsc2UKKwkJc2FsdGxlbiA9IDIwOworCisJLyogbG93LWxldmVsIHJvdXRpbmVzIHN1cHBvcnQgb25seSB0cmFpbGVyIGZpZWxkIDB4YmMgKHZhbHVlIDEpCisJICogYW5kIFBLQ1MjMSBzYXlzIHdlIHNob3VsZCByZWplY3QgYW55IG90aGVyIHZhbHVlIGFueXdheS4KKwkgKi8KKwlpZiAocHNzLT50cmFpbGVyRmllbGQgJiYgQVNOMV9JTlRFR0VSX2dldChwc3MtPnRyYWlsZXJGaWVsZCkgIT0gMSkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX0lURU1fVkVSSUZZLCBSU0FfUl9JTlZBTElEX1RSQUlMRVIpOworCQlnb3RvIGVycjsKKwkJfQorCisJLyogV2UgaGF2ZSBhbGwgcGFyYW1ldGVycyBub3cgc2V0IHVwIGNvbnRleHQgKi8KKworCWlmICghRVZQX0RpZ2VzdFZlcmlmeUluaXQoY3R4LCAmcGtjdHgsIG1kLCBOVUxMLCBwa2V5KSkKKwkJZ290byBlcnI7CisKKwlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorCQlnb3RvIGVycjsKKworCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKwkJZ290byBlcnI7CisKKwlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfbWdmMV9tZChwa2N0eCwgbWdmMW1kKSA8PSAwKQorCQlnb3RvIGVycjsKKwkvKiBDYXJyeSBvbiAqLworCXJ2ID0gMjsKKworCWVycjoKKwlSU0FfUFNTX1BBUkFNU19mcmVlKHBzcyk7CisJaWYgKG1hc2tIYXNoKQorCQlYNTA5X0FMR09SX2ZyZWUobWFza0hhc2gpOworCXJldHVybiBydjsKKwl9CisKK3N0YXRpYyBpbnQgcnNhX2l0ZW1fc2lnbihFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEFTTjFfSVRFTSAqaXQsIHZvaWQgKmFzbiwKKwkJCQlYNTA5X0FMR09SICphbGcxLCBYNTA5X0FMR09SICphbGcyLCAKKwkJCQlBU04xX0JJVF9TVFJJTkcgKnNpZykKKwl7CisJaW50IHBhZF9tb2RlOworCUVWUF9QS0VZX0NUWCAqcGtjdHggPSBjdHgtPnBjdHg7CisJaWYgKEVWUF9QS0VZX0NUWF9nZXRfcnNhX3BhZGRpbmcocGtjdHgsICZwYWRfbW9kZSkgPD0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5HKQorCQlyZXR1cm4gMjsKKwlpZiAocGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BTU19QQURESU5HKQorCQl7CisJCWNvbnN0IEVWUF9NRCAqc2lnbWQsICptZ2YxbWQ7CisJCVJTQV9QU1NfUEFSQU1TICpwc3MgPSBOVUxMOworCQlYNTA5X0FMR09SICptZ2YxYWxnID0gTlVMTDsKKwkJQVNOMV9TVFJJTkcgKm9zMSA9IE5VTEwsICpvczIgPSBOVUxMOworCQlFVlBfUEtFWSAqcGsgPSBFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5KHBrY3R4KTsKKwkJaW50IHNhbHRsZW4sIHJ2ID0gMDsKKwkJc2lnbWQgPSBFVlBfTURfQ1RYX21kKGN0eCk7CisJCWlmIChFVlBfUEtFWV9DVFhfZ2V0X3JzYV9tZ2YxX21kKHBrY3R4LCAmbWdmMW1kKSA8PSAwKQorCQkJZ290byBlcnI7CisJCWlmICghRVZQX1BLRVlfQ1RYX2dldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsICZzYWx0bGVuKSkKKwkJCWdvdG8gZXJyOworCQlpZiAoc2FsdGxlbiA9PSAtMSkKKwkJCXNhbHRsZW4gPSBFVlBfTURfc2l6ZShzaWdtZCk7CisJCWVsc2UgaWYgKHNhbHRsZW4gPT0gLTIpCisJCQl7CisJCQlzYWx0bGVuID0gRVZQX1BLRVlfc2l6ZShwaykgLSBFVlBfTURfc2l6ZShzaWdtZCkgLSAyOworCQkJaWYgKCgoRVZQX1BLRVlfYml0cyhwaykgLSAxKSAmIDB4NykgPT0gMCkKKwkJCQlzYWx0bGVuLS07CisJCQl9CisJCXBzcyA9IFJTQV9QU1NfUEFSQU1TX25ldygpOworCQlpZiAoIXBzcykKKwkJCWdvdG8gZXJyOworCQlpZiAoc2FsdGxlbiAhPSAyMCkKKwkJCXsKKwkJCXBzcy0+c2FsdExlbmd0aCA9IEFTTjFfSU5URUdFUl9uZXcoKTsKKwkJCWlmICghcHNzLT5zYWx0TGVuZ3RoKQorCQkJCWdvdG8gZXJyOworCQkJaWYgKCFBU04xX0lOVEVHRVJfc2V0KHBzcy0+c2FsdExlbmd0aCwgc2FsdGxlbikpCisJCQkJZ290byBlcnI7CisJCQl9CisJCWlmIChFVlBfTURfdHlwZShzaWdtZCkgIT0gTklEX3NoYTEpCisJCQl7CisJCQlwc3MtPmhhc2hBbGdvcml0aG0gPSBYNTA5X0FMR09SX25ldygpOworCQkJaWYgKCFwc3MtPmhhc2hBbGdvcml0aG0pCisJCQkJZ290byBlcnI7CisJCQlYNTA5X0FMR09SX3NldF9tZChwc3MtPmhhc2hBbGdvcml0aG0sIHNpZ21kKTsKKwkJCX0KKwkJaWYgKEVWUF9NRF90eXBlKG1nZjFtZCkgIT0gTklEX3NoYTEpCisJCQl7CisJCQlBU04xX1NUUklORyAqc3RtcCA9IE5VTEw7CisJCQkvKiBuZWVkIHRvIGVtYmVkIGFsZ29yaXRobSBJRCBpbnNpZGUgYW5vdGhlciAqLworCQkJbWdmMWFsZyA9IFg1MDlfQUxHT1JfbmV3KCk7CisJCQlYNTA5X0FMR09SX3NldF9tZChtZ2YxYWxnLCBtZ2YxbWQpOworCQkJaWYgKCFBU04xX2l0ZW1fcGFjayhtZ2YxYWxnLCBBU04xX0lURU1fcnB0cihYNTA5X0FMR09SKSwKKwkJCQkJCQkJCSZzdG1wKSkKKwkJCQkJZ290byBlcnI7CisJCQlwc3MtPm1hc2tHZW5BbGdvcml0aG0gPSBYNTA5X0FMR09SX25ldygpOworCQkJaWYgKCFwc3MtPm1hc2tHZW5BbGdvcml0aG0pCisJCQkJZ290byBlcnI7CisJCQlYNTA5X0FMR09SX3NldDAocHNzLT5tYXNrR2VuQWxnb3JpdGhtLAorCQkJCQlPQkpfbmlkMm9iaihOSURfbWdmMSksCisJCQkJCVZfQVNOMV9TRVFVRU5DRSwgc3RtcCk7CisJCQl9CisJCS8qIEZpbmFsbHkgY3JlYXRlIHN0cmluZyB3aXRoIHBzcyBwYXJhbWV0ZXIgZW5jb2RpbmcuICovCisJCWlmICghQVNOMV9pdGVtX3BhY2socHNzLCBBU04xX0lURU1fcnB0cihSU0FfUFNTX1BBUkFNUyksICZvczEpKQorCQkJZ290byBlcnI7CisJCWlmIChhbGcyKQorCQkJeworCQkJb3MyID0gQVNOMV9TVFJJTkdfZHVwKG9zMSk7CisJCQlpZiAoIW9zMikKKwkJCQlnb3RvIGVycjsKKwkJCVg1MDlfQUxHT1Jfc2V0MChhbGcyLCBPQkpfbmlkMm9iaihOSURfcnNhc3NhUHNzKSwKKwkJCQkJCVZfQVNOMV9TRVFVRU5DRSwgb3MyKTsKKwkJCX0KKwkJWDUwOV9BTEdPUl9zZXQwKGFsZzEsIE9CSl9uaWQyb2JqKE5JRF9yc2Fzc2FQc3MpLAorCQkJCQlWX0FTTjFfU0VRVUVOQ0UsIG9zMSk7CisJCW9zMSA9IG9zMiA9IE5VTEw7CisJCXJ2ID0gMzsKKwkJZXJyOgorCQlpZiAobWdmMWFsZykKKwkJCVg1MDlfQUxHT1JfZnJlZShtZ2YxYWxnKTsKKwkJaWYgKHBzcykKKwkJCVJTQV9QU1NfUEFSQU1TX2ZyZWUocHNzKTsKKwkJaWYgKG9zMSkKKwkJCUFTTjFfU1RSSU5HX2ZyZWUob3MxKTsKKwkJcmV0dXJuIHJ2OworCQkKKwkJfQorCXJldHVybiAyOworCX0KIAogY29uc3QgRVZQX1BLRVlfQVNOMV9NRVRIT0QgcnNhX2FzbjFfbWV0aHNbXSA9IAogCXsKQEAgLTMzNSwxMCArNjgxLDEzIEBACiAKIAkJMCwwLDAsMCwwLDAsCiAKKwkJcnNhX3NpZ19wcmludCwKIAkJaW50X3JzYV9mcmVlLAogCQlyc2FfcGtleV9jdHJsLAogCQlvbGRfcnNhX3ByaXZfZGVjb2RlLAotCQlvbGRfcnNhX3ByaXZfZW5jb2RlCisJCW9sZF9yc2FfcHJpdl9lbmNvZGUsCisJCXJzYV9pdGVtX3ZlcmlmeSwKKwkJcnNhX2l0ZW1fc2lnbgogCQl9LAogCiAJCXsKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX2FzbjEuYyBiL2NyeXB0by9yc2EvcnNhX2FzbjEuYwppbmRleCA0ZWZjYThjLi42ZWQ1ZGUzIDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9hc24xLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfYXNuMS5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2FzbjF0Lmg+CiAKIC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGZyZWUgYW5kIG5ldyBtZXRob2RzICovCkBAIC05Niw2ICs5NywxNSBAQAogCUFTTjFfU0lNUExFKFJTQSwgZSwgQklHTlVNKSwKIH0gQVNOMV9TRVFVRU5DRV9FTkRfY2IoUlNBLCBSU0FQdWJsaWNLZXkpCiAKK0FTTjFfU0VRVUVOQ0UoUlNBX1BTU19QQVJBTVMpID0geworCUFTTjFfRVhQX09QVChSU0FfUFNTX1BBUkFNUywgaGFzaEFsZ29yaXRobSwgWDUwOV9BTEdPUiwwKSwKKwlBU04xX0VYUF9PUFQoUlNBX1BTU19QQVJBTVMsIG1hc2tHZW5BbGdvcml0aG0sIFg1MDlfQUxHT1IsMSksCisJQVNOMV9FWFBfT1BUKFJTQV9QU1NfUEFSQU1TLCBzYWx0TGVuZ3RoLCBBU04xX0lOVEVHRVIsMiksCisJQVNOMV9FWFBfT1BUKFJTQV9QU1NfUEFSQU1TLCB0cmFpbGVyRmllbGQsIEFTTjFfSU5URUdFUiwzKQorfSBBU04xX1NFUVVFTkNFX0VORChSU0FfUFNTX1BBUkFNUykKKworSU1QTEVNRU5UX0FTTjFfRlVOQ1RJT05TKFJTQV9QU1NfUEFSQU1TKQorCiBJTVBMRU1FTlRfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0X2ZuYW1lKFJTQSwgUlNBUHJpdmF0ZUtleSwgUlNBUHJpdmF0ZUtleSkKIAogSU1QTEVNRU5UX0FTTjFfRU5DT0RFX0ZVTkNUSU9OU19jb25zdF9mbmFtZShSU0EsIFJTQVB1YmxpY0tleSwgUlNBUHVibGljS2V5KQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfY3JwdC5jIGIvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTQ0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qIGNyeXB0by9yc2EvcnNhX2xpYi5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyNpbmNsdWRlIDxvcGVuc3NsL2xoYXNoLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KKyNlbmRpZgorCitpbnQgUlNBX3NpemUoY29uc3QgUlNBICpyKQorCXsKKwlyZXR1cm4oQk5fbnVtX2J5dGVzKHItPm4pKTsKKwl9CisKK2ludCBSU0FfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisJCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9lbmMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOworCX0KKworaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisJCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCXJldHVybihyc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7CisJfQorCitpbnQgUlNBX3ByaXZhdGVfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCisJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKKwl9CisKK2ludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorCXsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCisJCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisJCXsKKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOworCX0KKworaW50IFJTQV9mbGFncyhjb25zdCBSU0EgKnIpCisJeworCXJldHVybigociA9PSBOVUxMKT8wOnItPm1ldGgtPmZsYWdzKTsKKwl9CisKK3ZvaWQgUlNBX2JsaW5kaW5nX29mZihSU0EgKnJzYSkKKwl7CisJaWYgKHJzYS0+YmxpbmRpbmcgIT0gTlVMTCkKKwkJeworCQlCTl9CTElORElOR19mcmVlKHJzYS0+YmxpbmRpbmcpOworCQlyc2EtPmJsaW5kaW5nPU5VTEw7CisJCX0KKwlyc2EtPmZsYWdzICY9IH5SU0FfRkxBR19CTElORElORzsKKwlyc2EtPmZsYWdzIHw9IFJTQV9GTEFHX05PX0JMSU5ESU5HOworCX0KKworaW50IFJTQV9ibGluZGluZ19vbihSU0EgKnJzYSwgQk5fQ1RYICpjdHgpCisJeworCWludCByZXQ9MDsKKworCWlmIChyc2EtPmJsaW5kaW5nICE9IE5VTEwpCisJCVJTQV9ibGluZGluZ19vZmYocnNhKTsKKworCXJzYS0+YmxpbmRpbmcgPSBSU0Ffc2V0dXBfYmxpbmRpbmcocnNhLCBjdHgpOworCWlmIChyc2EtPmJsaW5kaW5nID09IE5VTEwpCisJCWdvdG8gZXJyOworCisJcnNhLT5mbGFncyB8PSBSU0FfRkxBR19CTElORElORzsKKwlyc2EtPmZsYWdzICY9IH5SU0FfRkxBR19OT19CTElORElORzsKKwlyZXQ9MTsKK2VycjoKKwlyZXR1cm4ocmV0KTsKKwl9CisKK3N0YXRpYyBCSUdOVU0gKnJzYV9nZXRfcHVibGljX2V4cChjb25zdCBCSUdOVU0gKmQsIGNvbnN0IEJJR05VTSAqcCwKKwljb25zdCBCSUdOVU0gKnEsIEJOX0NUWCAqY3R4KQoreworCUJJR05VTSAqcmV0ID0gTlVMTCwgKnIwLCAqcjEsICpyMjsKKworCWlmIChkID09IE5VTEwgfHwgcCA9PSBOVUxMIHx8IHEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlCTl9DVFhfc3RhcnQoY3R4KTsKKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKKwlpZiAocjIgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwlpZiAoIUJOX3N1YihyMSwgcCwgQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKwlpZiAoIUJOX3N1YihyMiwgcSwgQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKKwlpZiAoIUJOX211bChyMCwgcjEsIHIyLCBjdHgpKSBnb3RvIGVycjsKKworCXJldCA9IEJOX21vZF9pbnZlcnNlKE5VTEwsIGQsIHIwLCBjdHgpOworZXJyOgorCUJOX0NUWF9lbmQoY3R4KTsKKwlyZXR1cm4gcmV0OworfQorCitCTl9CTElORElORyAqUlNBX3NldHVwX2JsaW5kaW5nKFJTQSAqcnNhLCBCTl9DVFggKmluX2N0eCkKK3sKKwlCSUdOVU0gbG9jYWxfbjsKKwlCSUdOVU0gKmUsKm47CisJQk5fQ1RYICpjdHg7CisJQk5fQkxJTkRJTkcgKnJldCA9IE5VTEw7CisKKwlpZiAoaW5fY3R4ID09IE5VTEwpCisJCXsKKwkJaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIHJldHVybiAwOworCQl9CisJZWxzZQorCQljdHggPSBpbl9jdHg7CisKKwlCTl9DVFhfc3RhcnQoY3R4KTsKKwllICA9IEJOX0NUWF9nZXQoY3R4KTsKKwlpZiAoZSA9PSBOVUxMKQorCQl7CisJCVJTQWVycihSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJZ290byBlcnI7CisJCX0KKworCWlmIChyc2EtPmUgPT0gTlVMTCkKKwkJeworCQllID0gcnNhX2dldF9wdWJsaWNfZXhwKHJzYS0+ZCwgcnNhLT5wLCByc2EtPnEsIGN0eCk7CisJCWlmIChlID09IE5VTEwpCisJCQl7CisJCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HLCBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQpOworCQkJZ290byBlcnI7CisJCQl9CisJCX0KKwllbHNlCisJCWUgPSByc2EtPmU7CisKKwkKKwlpZiAoKFJBTkRfc3RhdHVzKCkgPT0gMCkgJiYgcnNhLT5kICE9IE5VTEwgJiYgcnNhLT5kLT5kICE9IE5VTEwpCisJCXsKKwkJLyogaWYgUFJORyBpcyBub3QgcHJvcGVybHkgc2VlZGVkLCByZXNvcnQgdG8gc2VjcmV0CisJCSAqIGV4cG9uZW50IGFzIHVucHJlZGljdGFibGUgc2VlZCAqLworCQlSQU5EX2FkZChyc2EtPmQtPmQsIHJzYS0+ZC0+ZG1heCAqIHNpemVvZiByc2EtPmQtPmRbMF0sIDAuMCk7CisJCX0KKworCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorCQl7CisJCS8qIFNldCBCTl9GTEdfQ09OU1RUSU1FIGZsYWcgKi8KKwkJbiA9ICZsb2NhbF9uOworCQlCTl93aXRoX2ZsYWdzKG4sIHJzYS0+biwgQk5fRkxHX0NPTlNUVElNRSk7CisJCX0KKwllbHNlCisJCW4gPSByc2EtPm47CisKKwlyZXQgPSBCTl9CTElORElOR19jcmVhdGVfcGFyYW0oTlVMTCwgZSwgbiwgY3R4LAorCQkJcnNhLT5tZXRoLT5ibl9tb2RfZXhwLCByc2EtPl9tZXRob2RfbW9kX24pOworCWlmIChyZXQgPT0gTlVMTCkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HLCBFUlJfUl9CTl9MSUIpOworCQlnb3RvIGVycjsKKwkJfQorCUNSWVBUT19USFJFQURJRF9jdXJyZW50KEJOX0JMSU5ESU5HX3RocmVhZF9pZChyZXQpKTsKK2VycjoKKwlCTl9DVFhfZW5kKGN0eCk7CisJaWYgKGluX2N0eCA9PSBOVUxMKQorCQlCTl9DVFhfZnJlZShjdHgpOworCWlmKHJzYS0+ZSA9PSBOVUxMKQorCQlCTl9mcmVlKGUpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX2Vyci5jIGIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKaW5kZXggY2Y5ZjExMC4uNDZlMGJmOSAxMDA2NDQKLS0tIGEvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjcnlwdG8vcnNhL3JzYV9lcnIuYyAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc4LDYgKzc4LDcgQEAKIHtFUlJfRlVOQyhSU0FfRl9QS0VZX1JTQV9DVFJMKSwJIlBLRVlfUlNBX0NUUkwifSwKIHtFUlJfRlVOQyhSU0FfRl9QS0VZX1JTQV9DVFJMX1NUUiksCSJQS0VZX1JTQV9DVFJMX1NUUiJ9LAoge0VSUl9GVU5DKFJTQV9GX1BLRVlfUlNBX1NJR04pLAkiUEtFWV9SU0FfU0lHTiJ9LAore0VSUl9GVU5DKFJTQV9GX1BLRVlfUlNBX1ZFUklGWSksCSJQS0VZX1JTQV9WRVJJRlkifSwKIHtFUlJfRlVOQyhSU0FfRl9QS0VZX1JTQV9WRVJJRllSRUNPVkVSKSwJIlBLRVlfUlNBX1ZFUklGWVJFQ09WRVIifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfQlVJTFRJTl9LRVlHRU4pLAkiUlNBX0JVSUxUSU5fS0VZR0VOIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0NIRUNLX0tFWSksCSJSU0FfY2hlY2tfa2V5In0sCkBAIC04Niw2ICs4Nyw4IEBACiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCksCSJSU0FfRUFZX1BVQkxJQ19FTkNSWVBUIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWSksCSJSU0FfZ2VuZXJhdGVfa2V5In0sCit7RVJSX0ZVTkMoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCksCSJSU0FfZ2VuZXJhdGVfa2V5X2V4In0sCit7RVJSX0ZVTkMoUlNBX0ZfUlNBX0lURU1fVkVSSUZZKSwJIlJTQV9JVEVNX1ZFUklGWSJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9NRU1PUllfTE9DSyksCSJSU0FfbWVtb3J5X2xvY2sifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfTkVXX01FVEhPRCksCSJSU0FfbmV3X21ldGhvZCJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9OVUxMKSwJIlJTQV9OVUxMIn0sCkBAIC05Nyw2ICsxMDAsNyBAQAoge0VSUl9GVU5DKFJTQV9GX1JTQV9QQURESU5HX0FERF9OT05FKSwJIlJTQV9wYWRkaW5nX2FkZF9ub25lIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVApLAkiUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX09BRVAifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTKSwJIlJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1MifSwKK3tFUlJfRlVOQyhSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEpLAkiUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMSksCSJSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8xIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMiksCSJSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1NTTFYyMyksCSJSU0FfcGFkZGluZ19hZGRfU1NMdjIzIn0sCkBAIC0xMDksOCArMTEzLDEyIEBACiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BBRERJTkdfQ0hFQ0tfWDkzMSksCSJSU0FfcGFkZGluZ19jaGVja19YOTMxIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSU5UKSwJIlJTQV9wcmludCJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklOVF9GUCksCSJSU0FfcHJpbnRfZnAifSwKK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUKSwJIlJTQV9wcml2YXRlX2RlY3J5cHQifSwKK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVl9ERUNPREUpLAkiUlNBX1BSSVZfREVDT0RFIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAore0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCksCSJSU0FfcHVibGljX2RlY3J5cHQifSwKK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1YmxpY19lbmNyeXB0In0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCiB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKQEAgLTExOCw2ICsxMjYsNyBAQAoge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3ZlcmlmeV9BU04xX09DVEVUX1NUUklORyJ9LAoge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTKSwJIlJTQV92ZXJpZnlfUEtDUzFfUFNTIn0sCit7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMSksCSJSU0FfdmVyaWZ5X1BLQ1MxX1BTU19tZ2YxIn0sCiB7MCxOVUxMfQogCX07CiAKQEAgLTE0NiwxOSArMTU1LDI0IEBACiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX0hFQURFUikgICAgICAgICwiaW52YWxpZCBoZWFkZXIifSwKIHtFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfS0VZQklUUykgICAgICAgLCJpbnZhbGlkIGtleWJpdHMifSwKIHtFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpLCJpbnZhbGlkIG1lc3NhZ2UgbGVuZ3RoIn0sCit7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX01HRjFfTUQpICAgICAgICwiaW52YWxpZCBtZ2YxIG1kIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1BBRERJTkcpICAgICAgICwiaW52YWxpZCBwYWRkaW5nIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERSkgICwiaW52YWxpZCBwYWRkaW5nIG1vZGUifSwKK3tFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMpLCJpbnZhbGlkIHBzcyBwYXJhbWV0ZXJzIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOKSAgICwiaW52YWxpZCBwc3Mgc2FsdGxlbiJ9LAore0VSUl9SRUFTT04oUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSCkgICAsImludmFsaWQgc2FsdCBsZW5ndGgifSwKIHtFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfVFJBSUxFUikgICAgICAgLCJpbnZhbGlkIHRyYWlsZXIifSwKIHtFUlJfUkVBU09OKFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QpICAgLCJpbnZhbGlkIHg5MzEgZGlnZXN0In0sCiB7RVJSX1JFQVNPTihSU0FfUl9JUU1QX05PVF9JTlZFUlNFX09GX1EpICwiaXFtcCBub3QgaW52ZXJzZSBvZiBxIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpICAgICwibGFzdCBvY3RldCBpbnZhbGlkIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKK3tFUlJfUkVBU09OKFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpICAgLCJub24gZmlwcyByc2EgbWV0aG9kIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQpICAgICwibm8gcHVibGljIGV4cG9uZW50In0sCiB7RVJSX1JFQVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxvY2sgbWlzc2luZyJ9LAoge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SKSAgICwib2FlcCBkZWNvZGluZyBlcnJvciJ9LAore0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBpbiBmaXBzIG1vZGUifSwKIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCkgICwicGFkZGluZyBjaGVjayBmYWlsZWQifSwKIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAgICAgICAgICAgLCJwIG5vdCBwcmltZSJ9LApAQCAtMTY5LDcgKzE4MywxMiBAQAoge0VSUl9SRUFTT04oUlNBX1JfU1NMVjNfUk9MTEJBQ0tfQVRUQUNLKSAsInNzbHYzIHJvbGxiYWNrIGF0dGFjayJ9LAoge0VSUl9SRUFTT04oUlNBX1JfVEhFX0FTTjFfT0JKRUNUX0lERU5USUZJRVJfSVNfTk9UX0tOT1dOX0ZPUl9USElTX01EKSwidGhlIGFzbjEgb2JqZWN0IGlkZW50aWZpZXIgaXMgbm90IGtub3duIGZvciB0aGlzIG1kIn0sCiB7RVJSX1JFQVNPTihSU0FfUl9VTktOT1dOX0FMR09SSVRITV9UWVBFKSwidW5rbm93biBhbGdvcml0aG0gdHlwZSJ9LAore0VSUl9SRUFTT04oUlNBX1JfVU5LTk9XTl9NQVNLX0RJR0VTVCkgICAsInVua25vd24gbWFzayBkaWdlc3QifSwKIHtFUlJfUkVBU09OKFJTQV9SX1VOS05PV05fUEFERElOR19UWVBFKSAgLCJ1bmtub3duIHBhZGRpbmcgdHlwZSJ9LAore0VSUl9SRUFTT04oUlNBX1JfVU5LTk9XTl9QU1NfRElHRVNUKSAgICAsInVua25vd24gcHNzIGRpZ2VzdCJ9LAore0VSUl9SRUFTT04oUlNBX1JfVU5TVVBQT1JURURfTUFTS19BTEdPUklUSE0pLCJ1bnN1cHBvcnRlZCBtYXNrIGFsZ29yaXRobSJ9LAore0VSUl9SRUFTT04oUlNBX1JfVU5TVVBQT1JURURfTUFTS19QQVJBTUVURVIpLCJ1bnN1cHBvcnRlZCBtYXNrIHBhcmFtZXRlciJ9LAore0VSUl9SRUFTT04oUlNBX1JfVU5TVVBQT1JURURfU0lHTkFUVVJFX1RZUEUpLCJ1bnN1cHBvcnRlZCBzaWduYXR1cmUgdHlwZSJ9LAoge0VSUl9SRUFTT04oUlNBX1JfVkFMVUVfTUlTU0lORykgICAgICAgICAsInZhbHVlIG1pc3NpbmcifSwKIHtFUlJfUkVBU09OKFJTQV9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgpLCJ3cm9uZyBzaWduYXR1cmUgbGVuZ3RoIn0sCiB7MCxOVUxMfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMgYi9jcnlwdG8vcnNhL3JzYV9nZW4uYwppbmRleCA3NjdmN2FiLi40MjI5MGNjIDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9nZW4uYworKysgYi9jcnlwdG8vcnNhL3JzYV9nZW4uYwpAQCAtNjcsNiArNjcsOSBAQAogI2luY2x1ZGUgImNyeXB0bGliLmgiCiAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgogI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKIAogc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7CiAKQEAgLTc3LDggKzgwLDIwIEBACiAgKiBub3cganVzdCBiZWNhdXNlIGtleS1nZW5lcmF0aW9uIGlzIHBhcnQgb2YgUlNBX01FVEhPRC4gKi8KIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpCiAJeworI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKwkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKwkJeworCQlSU0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAlpZihyc2EtPm1ldGgtPnJzYV9rZXlnZW4pCiAJCXJldHVybiByc2EtPm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpKQorCQlyZXR1cm4gRklQU19yc2FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOworI2VuZGlmCiAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX2xpYi5jIGIvY3J5cHRvL3JzYS9yc2FfbGliLmMKaW5kZXggZGU0NTA4OC4uYzk1Y2VhZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3JzYS9yc2FfbGliLmMKKysrIGIvY3J5cHRvL3JzYS9yc2FfbGliLmMKQEAgLTY3LDYgKzY3LDEwIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KICNlbmRpZgogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKKwogY29uc3QgY2hhciBSU0FfdmVyc2lvbltdPSJSU0EiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIAogc3RhdGljIGNvbnN0IFJTQV9NRVRIT0QgKmRlZmF1bHRfUlNBX21ldGg9TlVMTDsKQEAgLTg3LDEyICs5MSwxNSBAQAogCXsKIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxMKQogCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWlmIChGSVBTX21vZGUoKSkKKwkJCXJldHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKKwkJZWxzZQorCQkJcmV0dXJuIFJTQV9QS0NTMV9TU0xlYXkoKTsKKyNlbHNlCiAjaWZkZWYgUlNBX05VTEwKIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfbnVsbF9tZXRob2QoKTsKICNlbHNlCi0jaWYgMCAvKiB3YXM6ICNpZmRlZiBSU0FyZWYgKi8KLQkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfUEtDUzFfUlNBcmVmKCk7Ci0jZWxzZQogCQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9QS0NTMV9TU0xlYXkoKTsKICNlbmRpZgogI2VuZGlmCkBAIC0xODEsNyArMTg4LDcgQEAKIAlyZXQtPmJsaW5kaW5nPU5VTEw7CiAJcmV0LT5tdF9ibGluZGluZz1OVUxMOwogCXJldC0+YmlnbnVtX2RhdGE9TlVMTDsKLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3M7CisJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9GSVBTX0FMTE9XOwogCWlmICghQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCiAJCXsKICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKQEAgLTI4MCwxNjMgKzI4Nyw2IEBACiAJcmV0dXJuKENSWVBUT19nZXRfZXhfZGF0YSgmci0+ZXhfZGF0YSxpZHgpKTsKIAl9CiAKLWludCBSU0Ffc2l6ZShjb25zdCBSU0EgKnIpCi0JewotCXJldHVybihCTl9udW1fYnl0ZXMoci0+bikpOwotCX0KLQotaW50IFJTQV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0JICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0JewotCXJldHVybihyc2EtPm1ldGgtPnJzYV9wdWJfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKLQl9Ci0KLWludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKLQkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLQl7Ci0JcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKLQl9Ci0KLWludCBSU0FfcHJpdmF0ZV9kZWNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKLQkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLQl7Ci0JcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKLQl9Ci0KLWludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotCXsKLQlyZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHViX2RlYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7Ci0JfQotCi1pbnQgUlNBX2ZsYWdzKGNvbnN0IFJTQSAqcikKLQl7Ci0JcmV0dXJuKChyID09IE5VTEwpPzA6ci0+bWV0aC0+ZmxhZ3MpOwotCX0KLQotdm9pZCBSU0FfYmxpbmRpbmdfb2ZmKFJTQSAqcnNhKQotCXsKLQlpZiAocnNhLT5ibGluZGluZyAhPSBOVUxMKQotCQl7Ci0JCUJOX0JMSU5ESU5HX2ZyZWUocnNhLT5ibGluZGluZyk7Ci0JCXJzYS0+YmxpbmRpbmc9TlVMTDsKLQkJfQotCXJzYS0+ZmxhZ3MgJj0gflJTQV9GTEFHX0JMSU5ESU5HOwotCXJzYS0+ZmxhZ3MgfD0gUlNBX0ZMQUdfTk9fQkxJTkRJTkc7Ci0JfQotCi1pbnQgUlNBX2JsaW5kaW5nX29uKFJTQSAqcnNhLCBCTl9DVFggKmN0eCkKLQl7Ci0JaW50IHJldD0wOwotCi0JaWYgKHJzYS0+YmxpbmRpbmcgIT0gTlVMTCkKLQkJUlNBX2JsaW5kaW5nX29mZihyc2EpOwotCi0JcnNhLT5ibGluZGluZyA9IFJTQV9zZXR1cF9ibGluZGluZyhyc2EsIGN0eCk7Ci0JaWYgKHJzYS0+YmxpbmRpbmcgPT0gTlVMTCkKLQkJZ290byBlcnI7Ci0KLQlyc2EtPmZsYWdzIHw9IFJTQV9GTEFHX0JMSU5ESU5HOwotCXJzYS0+ZmxhZ3MgJj0gflJTQV9GTEFHX05PX0JMSU5ESU5HOwotCXJldD0xOwotZXJyOgotCXJldHVybihyZXQpOwotCX0KLQotc3RhdGljIEJJR05VTSAqcnNhX2dldF9wdWJsaWNfZXhwKGNvbnN0IEJJR05VTSAqZCwgY29uc3QgQklHTlVNICpwLAotCWNvbnN0IEJJR05VTSAqcSwgQk5fQ1RYICpjdHgpCi17Ci0JQklHTlVNICpyZXQgPSBOVUxMLCAqcjAsICpyMSwgKnIyOwotCi0JaWYgKGQgPT0gTlVMTCB8fCBwID09IE5VTEwgfHwgcSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCUJOX0NUWF9zdGFydChjdHgpOwotCXIwID0gQk5fQ1RYX2dldChjdHgpOwotCXIxID0gQk5fQ1RYX2dldChjdHgpOwotCXIyID0gQk5fQ1RYX2dldChjdHgpOwotCWlmIChyMiA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQotCWlmICghQk5fc3ViKHIxLCBwLCBCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwotCWlmICghQk5fc3ViKHIyLCBxLCBCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOwotCWlmICghQk5fbXVsKHIwLCByMSwgcjIsIGN0eCkpIGdvdG8gZXJyOwotCi0JcmV0ID0gQk5fbW9kX2ludmVyc2UoTlVMTCwgZCwgcjAsIGN0eCk7Ci1lcnI6Ci0JQk5fQ1RYX2VuZChjdHgpOwotCXJldHVybiByZXQ7Ci19Ci0KLUJOX0JMSU5ESU5HICpSU0Ffc2V0dXBfYmxpbmRpbmcoUlNBICpyc2EsIEJOX0NUWCAqaW5fY3R4KQotewotCUJJR05VTSBsb2NhbF9uOwotCUJJR05VTSAqZSwqbjsKLQlCTl9DVFggKmN0eDsKLQlCTl9CTElORElORyAqcmV0ID0gTlVMTDsKLQotCWlmIChpbl9jdHggPT0gTlVMTCkKLQkJewotCQlpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgcmV0dXJuIDA7Ci0JCX0KLQllbHNlCi0JCWN0eCA9IGluX2N0eDsKLQotCUJOX0NUWF9zdGFydChjdHgpOwotCWUgID0gQk5fQ1RYX2dldChjdHgpOwotCWlmIChlID09IE5VTEwpCi0JCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9TRVRVUF9CTElORElORywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotCQlnb3RvIGVycjsKLQkJfQotCi0JaWYgKHJzYS0+ZSA9PSBOVUxMKQotCQl7Ci0JCWUgPSByc2FfZ2V0X3B1YmxpY19leHAocnNhLT5kLCByc2EtPnAsIHJzYS0+cSwgY3R4KTsKLQkJaWYgKGUgPT0gTlVMTCkKLQkJCXsKLQkJCVJTQWVycihSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcsIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCk7Ci0JCQlnb3RvIGVycjsKLQkJCX0KLQkJfQotCWVsc2UKLQkJZSA9IHJzYS0+ZTsKLQotCQotCWlmICgoUkFORF9zdGF0dXMoKSA9PSAwKSAmJiByc2EtPmQgIT0gTlVMTCAmJiByc2EtPmQtPmQgIT0gTlVMTCkKLQkJewotCQkvKiBpZiBQUk5HIGlzIG5vdCBwcm9wZXJseSBzZWVkZWQsIHJlc29ydCB0byBzZWNyZXQKLQkJICogZXhwb25lbnQgYXMgdW5wcmVkaWN0YWJsZSBzZWVkICovCi0JCVJBTkRfYWRkKHJzYS0+ZC0+ZCwgcnNhLT5kLT5kbWF4ICogc2l6ZW9mIHJzYS0+ZC0+ZFswXSwgMC4wKTsKLQkJfQotCi0JaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0JCXsKLQkJLyogU2V0IEJOX0ZMR19DT05TVFRJTUUgZmxhZyAqLwotCQluID0gJmxvY2FsX247Ci0JCUJOX3dpdGhfZmxhZ3MobiwgcnNhLT5uLCBCTl9GTEdfQ09OU1RUSU1FKTsKLQkJfQotCWVsc2UKLQkJbiA9IHJzYS0+bjsKLQotCXJldCA9IEJOX0JMSU5ESU5HX2NyZWF0ZV9wYXJhbShOVUxMLCBlLCBuLCBjdHgsCi0JCQlyc2EtPm1ldGgtPmJuX21vZF9leHAsIHJzYS0+X21ldGhvZF9tb2Rfbik7Ci0JaWYgKHJldCA9PSBOVUxMKQotCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcsIEVSUl9SX0JOX0xJQik7Ci0JCWdvdG8gZXJyOwotCQl9Ci0JQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoQk5fQkxJTkRJTkdfdGhyZWFkX2lkKHJldCkpOwotZXJyOgotCUJOX0NUWF9lbmQoY3R4KTsKLQlpZiAoaW5fY3R4ID09IE5VTEwpCi0JCUJOX0NUWF9mcmVlKGN0eCk7Ci0JaWYocnNhLT5lID09IE5VTEwpCi0JCUJOX2ZyZWUoZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgUlNBX21lbW9yeV9sb2NrKFJTQSAqcikKIAl7CiAJaW50IGksaixrLG9mZjsKZGlmZiAtLWdpdCBhL2NyeXB0by9yc2EvcnNhX29hZXAuYyBiL2NyeXB0by9yc2EvcnNhX29hZXAuYwppbmRleCAxOGQzMDdlLi41NTNkMjEyIDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9vYWVwLmMKKysrIGIvY3J5cHRvL3JzYS9yc2Ffb2FlcC5jCkBAIC01Niw3ICs1Niw4IEBACiAJc2VlZCA9IHRvICsgMTsKIAlkYiA9IHRvICsgU0hBX0RJR0VTVF9MRU5HVEggKyAxOwogCi0JRVZQX0RpZ2VzdCgodm9pZCAqKXBhcmFtLCBwbGVuLCBkYiwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KCh2b2lkICopcGFyYW0sIHBsZW4sIGRiLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkKKwkJcmV0dXJuIDA7CiAJbWVtc2V0KGRiICsgU0hBX0RJR0VTVF9MRU5HVEgsIDAsCiAJCWVtbGVuIC0gZmxlbiAtIDIgKiBTSEFfRElHRVNUX0xFTkdUSCAtIDEpOwogCWRiW2VtbGVuIC0gZmxlbiAtIFNIQV9ESUdFU1RfTEVOR1RIIC0gMV0gPSAweDAxOwpAQCAtMTQ1LDcgKzE0Niw4IEBACiAJZm9yIChpID0gMDsgaSA8IGRibGVuOyBpKyspCiAJCWRiW2ldIF49IG1hc2tlZGRiW2ldOwogCi0JRVZQX0RpZ2VzdCgodm9pZCAqKXBhcmFtLCBwbGVuLCBwaGFzaCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KCh2b2lkICopcGFyYW0sIHBsZW4sIHBoYXNoLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKG1lbWNtcChkYiwgcGhhc2gsIFNIQV9ESUdFU1RfTEVOR1RIKSAhPSAwIHx8IGJhZCkKIAkJZ290byBkZWNvZGluZ19lcnI7CmRpZmYgLS1naXQgYS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jIGIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwppbmRleCBjNjg5MmVjLi41YjJlY2Y1IDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCisrKyBiL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMKQEAgLTYzLDYgKzYzLDEyIEBACiAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgorI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKICNpbmNsdWRlICJldnBfbG9jbC5oIgogI2luY2x1ZGUgInJzYV9sb2NsLmgiCiAKQEAgLTc5LDYgKzg1LDggQEAKIAlpbnQgcGFkX21vZGU7CiAJLyogbWVzc2FnZSBkaWdlc3QgKi8KIAljb25zdCBFVlBfTUQgKm1kOworCS8qIG1lc3NhZ2UgZGlnZXN0IGZvciBNR0YxICovCisJY29uc3QgRVZQX01EICptZ2YxbWQ7CiAJLyogUFNTL09BRVAgc2FsdCBsZW5ndGggKi8KIAlpbnQgc2FsdGxlbjsKIAkvKiBUZW1wIGJ1ZmZlciAqLwpAQCAtOTUsNiArMTAzLDcgQEAKIAlyY3R4LT5wdWJfZXhwID0gTlVMTDsKIAlyY3R4LT5wYWRfbW9kZSA9IFJTQV9QS0NTMV9QQURESU5HOwogCXJjdHgtPm1kID0gTlVMTDsKKwlyY3R4LT5tZ2YxbWQgPSBOVUxMOwogCXJjdHgtPnRidWYgPSBOVUxMOwogCiAJcmN0eC0+c2FsdGxlbiA9IC0yOwpAQCAtMTQ3LDYgKzE1NiwzMSBAQAogCQlPUEVOU1NMX2ZyZWUocmN0eCk7CiAJCX0KIAl9CisjaWZkZWYgT1BFTlNTTF9GSVBTCisvKiBGSVAgY2hlY2tlci4gUmV0dXJuIHZhbHVlIGluZGljYXRlcyBzdGF0dXMgb2YgY29udGV4dCBwYXJhbWV0ZXJzOgorICogMSAgOiByZWRpcmVjdCB0byBGSVBTLgorICogMCAgOiBkb24ndCByZWRpcmVjdCB0byBGSVBTLgorICogLTEgOiBpbGxlZ2FsIG9wZXJhdGlvbiBpbiBGSVBTIG1vZGUuCisgKi8KKworc3RhdGljIGludCBwa2V5X2ZpcHNfY2hlY2tfY3R4KEVWUF9QS0VZX0NUWCAqY3R4KQorCXsKKwlSU0FfUEtFWV9DVFggKnJjdHggPSBjdHgtPmRhdGE7CisJUlNBICpyc2EgPSBjdHgtPnBrZXktPnBrZXkucnNhOworCWludCBydiA9IC0xOworCWlmICghRklQU19tb2RlKCkpCisJCXJldHVybiAwOworCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisJCXJ2ID0gMDsKKwlpZiAoIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpICYmIHJ2KQorCQlyZXR1cm4gLTE7CisJaWYgKHJjdHgtPm1kICYmICEocmN0eC0+bWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykpCisJCXJldHVybiBydjsKKwlpZiAocmN0eC0+bWdmMW1kICYmICEocmN0eC0+bWdmMW1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpKQorCQlyZXR1cm4gcnY7CisJcmV0dXJuIDE7CisJfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBfUEtFWV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqc2lnLCBzaXplX3QgKnNpZ2xlbiwKIAkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBzaXplX3QgdGJzbGVuKQpAQCAtMTU1LDYgKzE4OSwxNSBAQAogCVJTQV9QS0VZX0NUWCAqcmN0eCA9IGN0eC0+ZGF0YTsKIAlSU0EgKnJzYSA9IGN0eC0+cGtleS0+cGtleS5yc2E7CiAKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlyZXQgPSBwa2V5X2ZpcHNfY2hlY2tfY3R4KGN0eCk7CisJaWYgKHJldCA8IDApCisJCXsKKwkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX1NJR04sIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCiAJaWYgKHJjdHgtPm1kKQogCQl7CiAJCWlmICh0YnNsZW4gIT0gKHNpemVfdClFVlBfTURfc2l6ZShyY3R4LT5tZCkpCkBAIC0xNjMsNyArMjA2LDM2IEBACiAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7CiAJCQlyZXR1cm4gLTE7CiAJCQl9Ci0JCWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfWDkzMV9QQURESU5HKQorI2lmZGVmIE9QRU5TU0xfRklQUworCQlpZiAocmV0ID4gMCkKKwkJCXsKKwkJCXVuc2lnbmVkIGludCBzbGVuOworCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdlc3QocnNhLCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCisJCQkJCQkJcmN0eC0+cGFkX21vZGUsCisJCQkJCQkJcmN0eC0+c2FsdGxlbiwKKwkJCQkJCQlyY3R4LT5tZ2YxbWQsCisJCQkJCQkJc2lnLCAmc2xlbik7CisJCQlpZiAocmV0ID4gMCkKKwkJCQkqc2lnbGVuID0gc2xlbjsKKwkJCWVsc2UKKwkJCQkqc2lnbGVuID0gMDsKKwkJCXJldHVybiByZXQ7CisJCQl9CisjZW5kaWYKKworCQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09IE5JRF9tZGMyKQorCQkJeworCQkJdW5zaWduZWQgaW50IHNsdG1wOworCQkJaWYgKHJjdHgtPnBhZF9tb2RlICE9IFJTQV9QS0NTMV9QQURESU5HKQorCQkJCXJldHVybiAtMTsKKwkJCXJldCA9IFJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HKE5JRF9tZGMyLAorCQkJCQkJdGJzLCB0YnNsZW4sIHNpZywgJnNsdG1wLCByc2EpOworCisJCQlpZiAocmV0IDw9IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCXJldCA9IHNsdG1wOworCQkJfQorCQllbHNlIGlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfWDkzMV9QQURESU5HKQogCQkJewogCQkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCiAJCQkJcmV0dXJuIC0xOwpAQCAtMTg2LDggKzI1OCwxMCBAQAogCQkJewogCQkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCiAJCQkJcmV0dXJuIC0xOwotCQkJaWYgKCFSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTKHJzYSwgcmN0eC0+dGJ1ZiwgdGJzLAotCQkJCQkJcmN0eC0+bWQsIHJjdHgtPnNhbHRsZW4pKQorCQkJaWYgKCFSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjEocnNhLAorCQkJCQkJcmN0eC0+dGJ1ZiwgdGJzLAorCQkJCQkJcmN0eC0+bWQsIHJjdHgtPm1nZjFtZCwKKwkJCQkJCXJjdHgtPnNhbHRsZW4pKQogCQkJCXJldHVybiAtMTsKIAkJCXJldCA9IFJTQV9wcml2YXRlX2VuY3J5cHQoUlNBX3NpemUocnNhKSwgcmN0eC0+dGJ1ZiwKIAkJCQkJCXNpZywgcnNhLCBSU0FfTk9fUEFERElORyk7CkBAIC0yNjksOCArMzQzLDMwIEBACiAJUlNBX1BLRVlfQ1RYICpyY3R4ID0gY3R4LT5kYXRhOwogCVJTQSAqcnNhID0gY3R4LT5wa2V5LT5wa2V5LnJzYTsKIAlzaXplX3QgcnNsZW47CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaW50IHJ2OworCXJ2ID0gcGtleV9maXBzX2NoZWNrX2N0eChjdHgpOworCWlmIChydiA8IDApCisJCXsKKwkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX1ZFUklGWSwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCiAJaWYgKHJjdHgtPm1kKQogCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWlmIChydiA+IDApCisJCQl7CisJCQlyZXR1cm4gRklQU19yc2FfdmVyaWZ5X2RpZ2VzdChyc2EsCisJCQkJCQkJdGJzLCB0YnNsZW4sCisJCQkJCQkJcmN0eC0+bWQsCisJCQkJCQkJcmN0eC0+cGFkX21vZGUsCisJCQkJCQkJcmN0eC0+c2FsdGxlbiwKKwkJCQkJCQlyY3R4LT5tZ2YxbWQsCisJCQkJCQkJc2lnLCBzaWdsZW4pOworCQkJCQkJCQorCQkJfQorI2VuZGlmCiAJCWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKIAkJCXJldHVybiBSU0FfdmVyaWZ5KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0YnNsZW4sCiAJCQkJCXNpZywgc2lnbGVuLCByc2EpOwpAQCAtMjg5LDcgKzM4NSw4IEBACiAJCQkJCQkJcnNhLCBSU0FfTk9fUEFERElORyk7CiAJCQlpZiAocmV0IDw9IDApCiAJCQkJcmV0dXJuIDA7Ci0JCQlyZXQgPSBSU0FfdmVyaWZ5X1BLQ1MxX1BTUyhyc2EsIHRicywgcmN0eC0+bWQsCisJCQlyZXQgPSBSU0FfdmVyaWZ5X1BLQ1MxX1BTU19tZ2YxKHJzYSwgdGJzLAorCQkJCQkJcmN0eC0+bWQsIHJjdHgtPm1nZjFtZCwKIAkJCQkJCXJjdHgtPnRidWYsIHJjdHgtPnNhbHRsZW4pOwogCQkJaWYgKHJldCA8PSAwKQogCQkJCXJldHVybiAwOwpAQCAtNDAzLDE1ICs1MDAsMjUgQEAKIAkJCQlSU0FfUl9JTExFR0FMX09SX1VOU1VQUE9SVEVEX1BBRERJTkdfTU9ERSk7CiAJCXJldHVybiAtMjsKIAorCQljYXNlIEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QQURESU5HOgorCQkqKGludCAqKXAyID0gcmN0eC0+cGFkX21vZGU7CisJCXJldHVybiAxOworCiAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9SU0FfUFNTX1NBTFRMRU46Ci0JCWlmIChwMSA8IC0yKQotCQkJcmV0dXJuIC0yOworCQljYXNlIEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QU1NfU0FMVExFTjoKIAkJaWYgKHJjdHgtPnBhZF9tb2RlICE9IFJTQV9QS0NTMV9QU1NfUEFERElORykKIAkJCXsKIAkJCVJTQWVycihSU0FfRl9QS0VZX1JTQV9DVFJMLCBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOKTsKIAkJCXJldHVybiAtMjsKIAkJCX0KLQkJcmN0eC0+c2FsdGxlbiA9IHAxOworCQlpZiAodHlwZSA9PSBFVlBfUEtFWV9DVFJMX0dFVF9SU0FfUFNTX1NBTFRMRU4pCisJCQkqKGludCAqKXAyID0gcmN0eC0+c2FsdGxlbjsKKwkJZWxzZQorCQkJeworCQkJaWYgKHAxIDwgLTIpCisJCQkJcmV0dXJuIC0yOworCQkJcmN0eC0+c2FsdGxlbiA9IHAxOworCQkJfQogCQlyZXR1cm4gMTsKIAogCQljYXNlIEVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9CSVRTOgpAQCAtNDM1LDE2ICs1NDIsNDUgQEAKIAkJcmN0eC0+bWQgPSBwMjsKIAkJcmV0dXJuIDE7CiAKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX1JTQV9NR0YxX01EOgorCQljYXNlIEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9NR0YxX01EOgorCQlpZiAocmN0eC0+cGFkX21vZGUgIT0gUlNBX1BLQ1MxX1BTU19QQURESU5HKQorCQkJeworCQkJUlNBZXJyKFJTQV9GX1BLRVlfUlNBX0NUUkwsIFJTQV9SX0lOVkFMSURfTUdGMV9NRCk7CisJCQlyZXR1cm4gLTI7CisJCQl9CisJCWlmICh0eXBlID09IEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9NR0YxX01EKQorCQkJeworCQkJaWYgKHJjdHgtPm1nZjFtZCkKKwkJCQkqKGNvbnN0IEVWUF9NRCAqKilwMiA9IHJjdHgtPm1nZjFtZDsKKwkJCWVsc2UKKwkJCQkqKGNvbnN0IEVWUF9NRCAqKilwMiA9IHJjdHgtPm1kOworCQkJfQorCQllbHNlCisJCQlyY3R4LT5tZ2YxbWQgPSBwMjsKKwkJcmV0dXJuIDE7CisKIAkJY2FzZSBFVlBfUEtFWV9DVFJMX0RJR0VTVElOSVQ6CiAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9QS0NTN19FTkNSWVBUOgogCQljYXNlIEVWUF9QS0VZX0NUUkxfUEtDUzdfREVDUllQVDoKIAkJY2FzZSBFVlBfUEtFWV9DVFJMX1BLQ1M3X1NJR046Ci0jaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0JCWNhc2UgRVZQX1BLRVlfQ1RSTF9DTVNfRU5DUllQVDoKLQkJY2FzZSBFVlBfUEtFWV9DVFJMX0NNU19ERUNSWVBUOgotCQljYXNlIEVWUF9QS0VZX0NUUkxfQ01TX1NJR046Ci0jZW5kaWYKIAkJcmV0dXJuIDE7CisjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9DTVNfREVDUllQVDoKKwkJeworCQlYNTA5X0FMR09SICphbGcgPSBOVUxMOworCQlBU04xX09CSkVDVCAqZW5jYWxnID0gTlVMTDsKKwkJaWYgKHAyKQorCQkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3MocDIsIE5VTEwsIE5VTEwsICZhbGcpOworCQlpZiAoYWxnKQorCQkJWDUwOV9BTEdPUl9nZXQwKCZlbmNhbGcsIE5VTEwsIE5VTEwsIGFsZyk7CisJCWlmIChlbmNhbGcgJiYgT0JKX29iajJuaWQoZW5jYWxnKSA9PSBOSURfcnNhZXNPYWVwKQorCQkJcmN0eC0+cGFkX21vZGUgPSBSU0FfUEtDUzFfT0FFUF9QQURESU5HOworCQl9CisJCWNhc2UgRVZQX1BLRVlfQ1RSTF9DTVNfRU5DUllQVDoKKwkJY2FzZSBFVlBfUEtFWV9DVFJMX0NNU19TSUdOOgorCQlyZXR1cm4gMTsKKyNlbmRpZgogCQljYXNlIEVWUF9QS0VZX0NUUkxfUEVFUl9LRVk6CiAJCQlSU0FlcnIoUlNBX0ZfUEtFWV9SU0FfQ1RSTCwKIAkJCVJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2FfcHNzLmMgYi9jcnlwdG8vcnNhL3JzYV9wc3MuYwppbmRleCBhYzIxMWUyLi41ZjlmNTMzIDEwMDY0NAotLS0gYS9jcnlwdG8vcnNhL3JzYV9wc3MuYworKysgYi9jcnlwdG8vcnNhL3JzYV9wc3MuYwpAQCAtNzMsNiArNzMsMTMgQEAKIGludCBSU0FfdmVyaWZ5X1BLQ1MxX1BTUyhSU0EgKnJzYSwgY29uc3QgdW5zaWduZWQgY2hhciAqbUhhc2gsCiAJCQljb25zdCBFVlBfTUQgKkhhc2gsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKkVNLCBpbnQgc0xlbikKIAl7CisJcmV0dXJuIFJTQV92ZXJpZnlfUEtDUzFfUFNTX21nZjEocnNhLCBtSGFzaCwgSGFzaCwgTlVMTCwgRU0sIHNMZW4pOworCX0KKworaW50IFJTQV92ZXJpZnlfUEtDUzFfUFNTX21nZjEoUlNBICpyc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAorCQkJY29uc3QgRVZQX01EICpIYXNoLCBjb25zdCBFVlBfTUQgKm1nZjFIYXNoLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqRU0sIGludCBzTGVuKQorCXsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaExlbiwgbWFza2VkREJMZW4sIE1TQml0cywgZW1MZW47CkBAIC04MCw2ICs4NywxMCBAQAogCXVuc2lnbmVkIGNoYXIgKkRCID0gTlVMTDsKIAlFVlBfTURfQ1RYIGN0eDsKIAl1bnNpZ25lZCBjaGFyIEhfW0VWUF9NQVhfTURfU0laRV07CisJRVZQX01EX0NUWF9pbml0KCZjdHgpOworCisJaWYgKG1nZjFIYXNoID09IE5VTEwpCisJCW1nZjFIYXNoID0gSGFzaDsKIAogCWhMZW4gPSBFVlBfTURfc2l6ZShIYXNoKTsKIAlpZiAoaExlbiA8IDApCkBAIC05NCw3ICsxMDUsNyBAQAogCWVsc2UgaWYgKHNMZW4gPT0gLTIpCXNMZW4gPSAtMjsKIAllbHNlIGlmIChzTGVuIDwgLTIpCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTLCBSU0FfUl9TTEVOX0NIRUNLX0ZBSUxFRCk7CisJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxLCBSU0FfUl9TTEVOX0NIRUNLX0ZBSUxFRCk7CiAJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTEwMiw3ICsxMTMsNyBAQAogCWVtTGVuID0gUlNBX3NpemUocnNhKTsKIAlpZiAoRU1bMF0gJiAoMHhGRiA8PCBNU0JpdHMpKQogCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTUywgUlNBX1JfRklSU1RfT0NURVRfSU5WQUxJRCk7CisJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxLCBSU0FfUl9GSVJTVF9PQ1RFVF9JTlZBTElEKTsKIAkJZ290byBlcnI7CiAJCX0KIAlpZiAoTVNCaXRzID09IDApCkBAIC0xMTIsMTIgKzEyMywxMiBAQAogCQl9CiAJaWYgKGVtTGVuIDwgKGhMZW4gKyBzTGVuICsgMikpIC8qIHNMZW4gY2FuIGJlIHNtYWxsIG5lZ2F0aXZlICovCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTLCBSU0FfUl9EQVRBX1RPT19MQVJHRSk7CisJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxLCBSU0FfUl9EQVRBX1RPT19MQVJHRSk7CiAJCWdvdG8gZXJyOwogCQl9CiAJaWYgKEVNW2VtTGVuIC0gMV0gIT0gMHhiYykKIAkJewotCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MsIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCk7CisJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxLCBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpOwogCQlnb3RvIGVycjsKIAkJfQogCW1hc2tlZERCTGVuID0gZW1MZW4gLSBoTGVuIC0gMTsKQEAgLTEyNSwxMCArMTM2LDEwIEBACiAJREIgPSBPUEVOU1NMX21hbGxvYyhtYXNrZWREQkxlbik7CiAJaWYgKCFEQikKIAkJewotCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKwkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJZ290byBlcnI7CiAJCX0KLQlpZiAoUEtDUzFfTUdGMShEQiwgbWFza2VkREJMZW4sIEgsIGhMZW4sIEhhc2gpIDwgMCkKKwlpZiAoUEtDUzFfTUdGMShEQiwgbWFza2VkREJMZW4sIEgsIGhMZW4sIG1nZjFIYXNoKSA8IDApCiAJCWdvdG8gZXJyOwogCWZvciAoaSA9IDA7IGkgPCBtYXNrZWREQkxlbjsgaSsrKQogCQlEQltpXSBePSBFTVtpXTsKQEAgLTEzNywyNSArMTQ4LDI4IEBACiAJZm9yIChpID0gMDsgREJbaV0gPT0gMCAmJiBpIDwgKG1hc2tlZERCTGVuLTEpOyBpKyspIDsKIAlpZiAoREJbaSsrXSAhPSAweDEpCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTLCBSU0FfUl9TTEVOX1JFQ09WRVJZX0ZBSUxFRCk7CisJCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxLCBSU0FfUl9TTEVOX1JFQ09WRVJZX0ZBSUxFRCk7CiAJCWdvdG8gZXJyOwogCQl9CiAJaWYgKHNMZW4gPj0gMCAmJiAobWFza2VkREJMZW4gLSBpKSAhPSBzTGVuKQogCQl7Ci0JCVJTQWVycihSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTUywgUlNBX1JfU0xFTl9DSEVDS19GQUlMRUQpOworCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMSwgUlNBX1JfU0xFTl9DSEVDS19GQUlMRUQpOwogCQlnb3RvIGVycjsKIAkJfQotCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBIYXNoLCBOVUxMKTsKLQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIHplcm9lcywgc2l6ZW9mIHplcm9lcyk7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtSGFzaCwgaExlbik7CisJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBIYXNoLCBOVUxMKQorCQl8fCAhRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCB6ZXJvZXMsIHNpemVvZiB6ZXJvZXMpCisJCXx8ICFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG1IYXNoLCBoTGVuKSkKKwkJZ290byBlcnI7CiAJaWYgKG1hc2tlZERCTGVuIC0gaSkKLQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBEQiArIGksIG1hc2tlZERCTGVuIC0gaSk7Ci0JRVZQX0RpZ2VzdEZpbmFsKCZjdHgsIEhfLCBOVUxMKTsKLQlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisJCXsKKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIERCICsgaSwgbWFza2VkREJMZW4gLSBpKSkKKwkJCWdvdG8gZXJyOworCQl9CisJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgSF8sIE5VTEwpKQorCQlnb3RvIGVycjsKIAlpZiAobWVtY21wKEhfLCBILCBoTGVuKSkKIAkJewotCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MsIFJTQV9SX0JBRF9TSUdOQVRVUkUpOworCQlSU0FlcnIoUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMSwgUlNBX1JfQkFEX1NJR05BVFVSRSk7CiAJCXJldCA9IDA7CiAJCX0KIAllbHNlIApAQCAtMTY0LDYgKzE3OCw3IEBACiAJZXJyOgogCWlmIChEQikKIAkJT1BFTlNTTF9mcmVlKERCKTsKKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNzMsMTIgKzE4OCwyMiBAQAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbUhhc2gsCiAJCQljb25zdCBFVlBfTUQgKkhhc2gsIGludCBzTGVuKQogCXsKKwlyZXR1cm4gUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxKHJzYSwgRU0sIG1IYXNoLCBIYXNoLCBOVUxMLCBzTGVuKTsKKwl9CisKK2ludCBSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjEoUlNBICpyc2EsIHVuc2lnbmVkIGNoYXIgKkVNLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbUhhc2gsCisJCQljb25zdCBFVlBfTUQgKkhhc2gsIGNvbnN0IEVWUF9NRCAqbWdmMUhhc2gsIGludCBzTGVuKQorCXsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaExlbiwgbWFza2VkREJMZW4sIE1TQml0cywgZW1MZW47CiAJdW5zaWduZWQgY2hhciAqSCwgKnNhbHQgPSBOVUxMLCAqcDsKIAlFVlBfTURfQ1RYIGN0eDsKIAorCWlmIChtZ2YxSGFzaCA9PSBOVUxMKQorCQltZ2YxSGFzaCA9IEhhc2g7CisKIAloTGVuID0gRVZQX01EX3NpemUoSGFzaCk7CiAJaWYgKGhMZW4gPCAwKQogCQlnb3RvIGVycjsKQEAgLTE5Miw3ICsyMTcsNyBAQAogCWVsc2UgaWYgKHNMZW4gPT0gLTIpCXNMZW4gPSAtMjsKIAllbHNlIGlmIChzTGVuIDwgLTIpCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1MsIFJTQV9SX1NMRU5fQ0hFQ0tfRkFJTEVEKTsKKwkJUlNBZXJyKFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMSwgUlNBX1JfU0xFTl9DSEVDS19GQUlMRUQpOwogCQlnb3RvIGVycjsKIAkJfQogCkBAIC0yMDksOCArMjM0LDcgQEAKIAkJfQogCWVsc2UgaWYgKGVtTGVuIDwgKGhMZW4gKyBzTGVuICsgMikpCiAJCXsKLQkJUlNBZXJyKFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1MsCi0JCSAgIFJTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSk7CisJCVJTQWVycihSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEsUlNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKTsKIAkJZ290byBlcnI7CiAJCX0KIAlpZiAoc0xlbiA+IDApCkBAIC0yMTgsOCArMjQyLDcgQEAKIAkJc2FsdCA9IE9QRU5TU0xfbWFsbG9jKHNMZW4pOwogCQlpZiAoIXNhbHQpCiAJCQl7Ci0JCQlSU0FlcnIoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTUywKLQkJICAgCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJCQlSU0FlcnIoUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKIAkJCWdvdG8gZXJyOwogCQkJfQogCQlpZiAoUkFORF9ieXRlcyhzYWx0LCBzTGVuKSA8PSAwKQpAQCAtMjI4LDE2ICsyNTEsMTggQEAKIAltYXNrZWREQkxlbiA9IGVtTGVuIC0gaExlbiAtIDE7CiAJSCA9IEVNICsgbWFza2VkREJMZW47CiAJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIEhhc2gsIE5VTEwpOwotCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgemVyb2VzLCBzaXplb2YgemVyb2VzKTsKLQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG1IYXNoLCBoTGVuKTsKLQlpZiAoc0xlbikKLQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBzYWx0LCBzTGVuKTsKLQlFVlBfRGlnZXN0RmluYWwoJmN0eCwgSCwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBIYXNoLCBOVUxMKQorCQl8fCAhRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCB6ZXJvZXMsIHNpemVvZiB6ZXJvZXMpCisJCXx8ICFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG1IYXNoLCBoTGVuKSkKKwkJZ290byBlcnI7CisJaWYgKHNMZW4gJiYgIUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgc2FsdCwgc0xlbikpCisJCWdvdG8gZXJyOworCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIEgsIE5VTEwpKQorCQlnb3RvIGVycjsKIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CiAKIAkvKiBHZW5lcmF0ZSBkYk1hc2sgaW4gcGxhY2UgdGhlbiBwZXJmb3JtIFhPUiBvbiBpdCAqLwotCWlmIChQS0NTMV9NR0YxKEVNLCBtYXNrZWREQkxlbiwgSCwgaExlbiwgSGFzaCkpCisJaWYgKFBLQ1MxX01HRjEoRU0sIG1hc2tlZERCTGVuLCBILCBoTGVuLCBtZ2YxSGFzaCkpCiAJCWdvdG8gZXJyOwogCiAJcCA9IEVNOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jIGIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCmluZGV4IDBiZTRlYzcuLmI2ZjYwMzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9yc2EvcnNhX3NpZ24uYworKysgYi9jcnlwdG8vcnNhL3JzYV9zaWduLmMKQEAgLTc3LDYgKzc3LDE0IEBACiAJY29uc3QgdW5zaWduZWQgY2hhciAqcyA9IE5VTEw7CiAJWDUwOV9BTEdPUiBhbGdvcjsKIAlBU04xX09DVEVUX1NUUklORyBkaWdlc3Q7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorCQl7CisJCVJTQWVycihSU0FfRl9SU0FfU0lHTiwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAlpZigocnNhLT5mbGFncyAmIFJTQV9GTEFHX1NJR05fVkVSKSAmJiByc2EtPm1ldGgtPnJzYV9zaWduKQogCQl7CiAJCXJldHVybiByc2EtPm1ldGgtPnJzYV9zaWduKHR5cGUsIG0sIG1fbGVuLApAQCAtMTUzLDYgKzE2MSwxNSBAQAogCXVuc2lnbmVkIGNoYXIgKnM7CiAJWDUwOV9TSUcgKnNpZz1OVUxMOwogCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorCQl7CisJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisJCXJldHVybiAwOworCQl9CisjZW5kaWYKKwogCWlmIChzaWdsZW4gIT0gKHVuc2lnbmVkIGludClSU0Ffc2l6ZShyc2EpKQogCQl7CiAJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9XUk9OR19TSUdOQVRVUkVfTEVOR1RIKTsKQEAgLTE4Miw2ICsxOTksMjIgQEAKIAlpPVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwogCiAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisJLyogT2RkYmFsbCBNREMyIGNhc2U6IHNpZ25hdHVyZSBjYW4gYmUgT0NURVQgU1RSSU5HLgorCSAqIGNoZWNrIGZvciBjb3JyZWN0IHRhZyBhbmQgbGVuZ3RoIG9jdGV0cy4KKwkgKi8KKwlpZiAoZHR5cGUgPT0gTklEX21kYzIgJiYgaSA9PSAxOCAmJiBzWzBdID09IDB4MDQgJiYgc1sxXSA9PSAweDEwKQorCQl7CisJCWlmIChybSkKKwkJCXsKKwkJCW1lbWNweShybSwgcyArIDIsIDE2KTsKKwkJCSpwcm1fbGVuID0gMTY7CisJCQlyZXQgPSAxOworCQkJfQorCQllbHNlIGlmKG1lbWNtcChtLCBzICsgMiwgMTYpKQorCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLFJTQV9SX0JBRF9TSUdOQVRVUkUpOworCQllbHNlCisJCQlyZXQgPSAxOworCQl9CiAKIAkvKiBTcGVjaWFsIGNhc2U6IFNTTCBzaWduYXR1cmUgKi8KIAlpZihkdHlwZSA9PSBOSURfbWQ1X3NoYTEpIHsKZGlmZiAtLWdpdCBhL2NyeXB0by9zMzkweGNhcC5jIGIvY3J5cHRvL3MzOTB4Y2FwLmMKaW5kZXggZmZiZTAyMy4uZjJlOTRlZiAxMDA2NDQKLS0tIGEvY3J5cHRvL3MzOTB4Y2FwLmMKKysrIGIvY3J5cHRvL3MzOTB4Y2FwLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIE9QRU5TU0xfczM5MHhjYXBfUDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIE9QRU5TU0xfczM5MHhjYXBfUFtdOwogCiBzdGF0aWMgc2lnam1wX2J1ZiBpbGxfam1wOwogc3RhdGljIHZvaWQgaWxsX2hhbmRsZXIgKGludCBzaWcpIHsgc2lnbG9uZ2ptcChpbGxfam1wLHNpZyk7IH0KQEAgLTE2LDcgKzE2LDkgQEAKIAlzaWdzZXRfdCBvc2V0OwogCXN0cnVjdCBzaWdhY3Rpb24gaWxsX2FjdCxvYWN0OwogCi0JaWYgKE9QRU5TU0xfczM5MHhjYXBfUCkgcmV0dXJuOworCWlmIChPUEVOU1NMX3MzOTB4Y2FwX1BbMF0pIHJldHVybjsKKworCU9QRU5TU0xfczM5MHhjYXBfUFswXSA9IDFVTDw8KDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLTEpOwogCiAJbWVtc2V0KCZpbGxfYWN0LDAsc2l6ZW9mKGlsbF9hY3QpKTsKIAlpbGxfYWN0LnNhX2hhbmRsZXIgPSBpbGxfaGFuZGxlcjsKQEAgLTI3LDEwICsyOSw4IEBACiAJc2lnYWN0aW9uIChTSUdJTEwsJmlsbF9hY3QsJm9hY3QpOwogCiAJLyogcHJvdGVjdGlvbiBhZ2FpbnN0IG1pc3Npbmcgc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZCAqLwotCWlmIChzaWdzZXRqbXAoaWxsX2ptcCwwKSA9PSAwKQotCQlPUEVOU1NMX3MzOTB4Y2FwX1AgPSBPUEVOU1NMX3MzOTB4X2ZhY2lsaXRpZXMoKTsKLQllbHNlCi0JCU9QRU5TU0xfczM5MHhjYXBfUCA9IDFVTDw8NjM7CisJaWYgKHNpZ3NldGptcChpbGxfam1wLDEpID09IDApCisJCU9QRU5TU0xfczM5MHhfZmFjaWxpdGllcygpOwogCiAJc2lnYWN0aW9uIChTSUdJTEwsJm9hY3QsTlVMTCk7CiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssJm9zZXQsTlVMTCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vczM5MHhjcHVpZC5TIGIvY3J5cHRvL3MzOTB4Y3B1aWQuUwppbmRleCBiMDUzYzZhLi4wNjgxNTM0IDEwMDY0NAotLS0gYS9jcnlwdG8vczM5MHhjcHVpZC5TCisrKyBiL2NyeXB0by9zMzkweGNwdWlkLlMKQEAgLTUsMTAgKzUsMTQgQEAKIC5hbGlnbgkxNgogT1BFTlNTTF9zMzkweF9mYWNpbGl0aWVzOgogCWxnaGkJJXIwLDAKLQkubG9uZwkweGIyYjBmMDEwCSMgc3RmbGUJMTYoJXIxNSkKLQlsZwklcjIsMTYoJXIxNSkKLQlsYXJsCSVyMSxPUEVOU1NMX3MzOTB4Y2FwX1AKLQlzdGcJJXIyLDAoJXIxKQorCWxhcmwJJXIyLE9QRU5TU0xfczM5MHhjYXBfUAorCXN0ZwklcjAsOCglcjIpCisJLmxvbmcJMHhiMmIwMjAwMAkjIHN0ZmxlCTAoJXIyKQorCWJyYwk4LC5MZG9uZQorCWxnaGkJJXIwLDEKKwkubG9uZwkweGIyYjAyMDAwCSMgc3RmbGUgMCglcjIpCisuTGRvbmU6CisJbGcJJXIyLDAoJXIyKQogCWJyCSVyMTQKIC5zaXplCU9QRU5TU0xfczM5MHhfZmFjaWxpdGllcywuLU9QRU5TU0xfczM5MHhfZmFjaWxpdGllcwogCkBAIC01OCw2ICs2Miw5IEBACiAudHlwZQlPUEVOU1NMX2NsZWFuc2UsQGZ1bmN0aW9uCiAuYWxpZ24JMTYKIE9QRU5TU0xfY2xlYW5zZToKKyNpZiAhZGVmaW5lZChfX3MzOTB4X18pICYmICFkZWZpbmVkKF9fczM5MHgpCisJbGxnZnIJJXIzLCVyMworI2VuZGlmCiAJbGdoaQklcjQsMTUKIAlsZ2hpCSVyMCwwCiAJY2xncgklcjMsJXI0CkBAIC04OSw0ICs5Niw0IEBACiAuc2VjdGlvbgkuaW5pdAogCWJyYXNsCSVyMTQsT1BFTlNTTF9jcHVpZF9zZXR1cAogCi0uY29tbQlPUEVOU1NMX3MzOTB4Y2FwX1AsOCw4CisuY29tbQlPUEVOU1NMX3MzOTB4Y2FwX1AsMTYsOApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS01ODYucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLTU4Ni5wbAppbmRleCBhMWY4NzYyLi4xMDg0ZDIyIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGExLTU4Ni5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLTU4Ni5wbApAQCAtMTIsNiArMTIsOCBAQAogIyBjb21tZW50YXJ5IGJlbG93XSwgYW5kIGluIDIwMDYgdGhlIHJlc3Qgd2FzIHJld3JpdHRlbiBpbiBvcmRlciB0bwogIyBnYWluIGZyZWVkb20gdG8gbGliZXJhdGUgbGljZW5zaW5nIHRlcm1zLgogCisjIEphbnVhcnksIFNlcHRlbWJlciAyMDA0LgorIwogIyBJdCB3YXMgbm90ZWQgdGhhdCBJbnRlbCBJQS0zMiBDIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHdoaWNoCiAjIHBlcmZvcm1zIH4zMCUgKmZhc3Rlciogb24gUDQgQ1BVIHRoYW4gb3JpZ2luYWwgKmhhbmQtY29kZWQqCiAjIFNIQTEgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uLiBUbyBhZGRyZXNzIHRoaXMgcHJvYmxlbSAoYW5kCkBAIC0zMSwxMiArMzMsOTIgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgogCisjIEF1Z3VzdCAyMDA5LgorIworIyBHZW9yZ2UgU3BlbHZpbiBoYXMgdGlwcGVkIHRoYXQgRl80MF81OShiLGMsZCkgY2FuIGJlIHJld3JpdHRlbiBhcworIyAnKGMmZCkgKyAoYiYoY15kKSknLCB3aGljaCBhbGxvd3MgdG8gYWNjdW11bGF0ZSBwYXJ0aWFsIHJlc3VsdHMKKyMgYW5kIGxpZ2h0ZW4gInByZXNzdXJlIiBvbiBzY3JhdGNoIHJlZ2lzdGVycy4gVGhpcyByZXN1bHRlZCBpbgorIyA+MTIlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIGNvbnRlbXBvcmFyeSBBTUQgY29yZXMgKHdpdGggbm8KKyMgZGVncmFkYXRpb24gb24gb3RoZXIgQ1BVczotKS4gQWxzbywgdGhlIGNvZGUgd2FzIHJldmlzZWQgdG8gbWF4aW1pemUKKyMgImRpc3RhbmNlIiBiZXR3ZWVuIGluc3RydWN0aW9ucyBwcm9kdWNpbmcgaW5wdXQgdG8gJ2xlYScgaW5zdHJ1Y3Rpb24KKyMgYW5kIHRoZSAnbGVhJyBpbnN0cnVjdGlvbiBpdHNlbGYsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgSW50ZWwgQXRvbQorIyBjb3JlIGFuZCByZXN1bHRlZCBpbiB+MTUlIGltcHJvdmVtZW50LgorCisjIE9jdG9iZXIgMjAxMC4KKyMKKyMgQWRkIFNTU0UzLCBTdXBwbGVtZW50YWxbIV0gU1NFMywgaW1wbGVtZW50YXRpb24uIFRoZSBpZGVhIGJlaGluZCBpdAorIyBpcyB0byBvZmZsb2FkIG1lc3NhZ2Ugc2NoZWR1bGUgZGVub3RlZCBieSBXdCBpbiBOSVNUIHNwZWNpZmljYXRpb24sCisjIG9yIFh1cGRhdGUgaW4gT3BlblNTTCBzb3VyY2UsIHRvIFNJTUQgdW5pdC4gVGhlIGlkZWEgaXMgbm90IG5vdmVsLAorIyBhbmQgaW4gU1NFMiBjb250ZXh0IHdhcyBmaXJzdCBleHBsb3JlZCBieSBEZWFuIEdhdWRldCBpbiAyMDA0LCBzZWUKKyMgaHR0cDovL2FyY3RpYy5vcmcvfmRlYW4vY3J5cHRvL3NoYTEuaHRtbC4gU2luY2UgdGhlbiBzZXZlcmFsIHRoaW5ncworIyBoYXZlIGNoYW5nZWQgdGhhdCBtYWRlIGl0IGludGVyZXN0aW5nIGFnYWluOgorIworIyBhKSBYTU0gdW5pdHMgYmVjYW1lIGZhc3RlciBhbmQgd2lkZXI7CisjIGIpIGluc3RydWN0aW9uIHNldCBiZWNhbWUgbW9yZSB2ZXJzYXRpbGU7CisjIGMpIGFuIGltcG9ydGFudCBvYnNlcnZhdGlvbiB3YXMgbWFkZSBieSBNYXggTG9ja3R5a2hpbiwgd2hpY2ggbWFkZQorIyAgICBpdCBwb3NzaWJsZSB0byByZWR1Y2UgYW1vdW50IG9mIGluc3RydWN0aW9ucyByZXF1aXJlZCB0byBwZXJmb3JtCisjICAgIHRoZSBvcGVyYXRpb24gaW4gcXVlc3Rpb24sIGZvciBmdXJ0aGVyIGRldGFpbHMgc2VlCisjICAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vZW4tdXMvYXJ0aWNsZXMvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi10aGUtc2VjdXJlLWhhc2gtYWxnb3JpdGhtLTEvLgorCisjIEFwcmlsIDIwMTEuCisjCisjIEFkZCBBVlggY29kZSBwYXRoLCBwcm9iYWJseSBtb3N0IGNvbnRyb3ZlcnNpYWwuLi4gVGhlIHRoaW5nIGlzIHRoYXQKKyMgc3dpdGNoIHRvIEFWWCBhbG9uZSBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieSBhcyBsaXR0bGUgYXMgNCUgaW4KKyMgY29tcGFyaXNvbiB0byBTU1NFMyBjb2RlIHBhdGguIEJ1dCBiZWxvdyByZXN1bHQgZG9lc24ndCBsb29rIGxpa2UKKyMgNCUgaW1wcm92ZW1lbnQuLi4gVHJvdWJsZSBpcyB0aGF0IFNhbmR5IEJyaWRnZSBkZWNvZGVzICdyb1tybF0nIGFzCisjIHBhaXIgb2YgtS1vcHMsIGFuZCBpdCdzIHRoZSBhZGRpdGlvbmFsILUtb3BzLCB0d28gcGVyIHJvdW5kLCB0aGF0CisjIG1ha2UgaXQgcnVuIHNsb3dlciB0aGFuIENvcmUyIGFuZCBXZXN0bWVyZS4gQnV0ICdzaFtybF1kJyBpcyBkZWNvZGVkCisjIGFzIHNpbmdsZSC1LW9wIGJ5IFNhbmR5IEJyaWRnZSBhbmQgaXQncyByZXBsYWNpbmcgJ3JvW3JsXScgd2l0aAorIyBlcXVpdmFsZW50ICdzaFtybF1kJyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW1wcmVzc2l2ZSA1LjEKKyMgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4gQnV0ICdzaFtybF1kJyBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdXNlZAorIyB0byBiZSBmYXN0LCBub3IgZG9lcyBpdCBhcHBlYXIgdG8gYmUgZmFzdCBpbiB1cGNvbWluZyBCdWxsZG96ZXIKKyMgW2FjY29yZGluZyB0byBpdHMgb3B0aW1pemF0aW9uIG1hbnVhbF0uIFdoaWNoIGlzIHdoeSBBVlggY29kZSBwYXRoCisjIGlzIGd1YXJkZWQgYnkgKmJvdGgqIEFWWCBhbmQgc3ludGhldGljIGJpdCBkZW5vdGluZyBJbnRlbCBDUFVzLgorIyBPbmUgY2FuIGFyZ3VlIHRoYXQgaXQncyB1bmZhaXIgdG8gQU1ELCBidXQgd2l0aG91dCAnc2hbcmxdZCcgaXQKKyMgbWFrZXMgbm8gc2Vuc2UgdG8ga2VlcCB0aGUgQVZYIGNvZGUgcGF0aC4gSWYgc29tZWJvZHkgZmVlbHMgdGhhdAorIyBzdHJvbmdseSwgaXQncyBwcm9iYWJseSBtb3JlIGFwcHJvcHJpYXRlIHRvIGRpc2N1c3MgcG9zc2liaWxpdHkgb2YKKyMgdXNpbmcgdmVjdG9yIHJvdGF0ZSBYT1Agb24gQU1ELi4uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3VycmVudCBwZXJmb3JtYW5jZSBpcyBzdW1tYXJpemVkIGluIGZvbGxvd2luZyB0YWJsZS4gTnVtYmVycyBhcmUKKyMgQ1BVIGNsb2NrIGN5Y2xlcyBzcGVudCB0byBwcm9jZXNzIHNpbmdsZSBieXRlIChsZXNzIGlzIGJldHRlcikuCisjCisjCQl4ODYJCVNTU0UzCQlBVlgKKyMgUGVudGl1bQkxNS43CQktCisjIFBJSUkJCTExLjUJCS0KKyMgUDQJCTEwLjYJCS0KKyMgQU1EIEs4CTcuMQkJLQorIyBDb3JlMgkJNy4zCQk2LjEvKzIwJQktCisjIEF0b20JCTEyLjUJCTkuNSgqKS8rMzIlCS0KKyMgV2VzdG1lcmUJNy4zCQk1LjYvKzMwJQktCisjIFNhbmR5IEJyaWRnZQk4LjgJCTYuMi8rNDAlCTUuMSgqKikvKzcwJQorIworIyAoKikJTG9vcCBpcyAxMDU2IGluc3RydWN0aW9ucyBsb25nIGFuZCBleHBlY3RlZCByZXN1bHQgaXMgfjguMjUuCisjCUl0IHJlbWFpbnMgbXlzdGVyeSBbdG8gbWVdIHdoeSBJTFAgaXMgbGltaXRlZCB0byAxLjcuCisjCisjICgqKikJQXMgcGVyIGFib3ZlIGNvbW1lbnQsIHRoZSByZXN1bHQgaXMgZm9yIEFWWCAqcGx1cyogc2hbcmxdZC4KKwogJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKIHB1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwogcmVxdWlyZSAieDg2YXNtLnBsIjsKIAogJmFzbV9pbml0KCRBUkdWWzBdLCJzaGExLTU4Ni5wbCIsJEFSR1ZbJCNBUkdWXSBlcSAiMzg2Iik7CiAKKyR4bW09JHltbT0wOworZm9yIChAQVJHVikgeyAkeG1tPTEgaWYgKC8tRE9QRU5TU0xfSUEzMl9TU0UyLyk7IH0KKworJHltbT0xIGlmICgkeG1tICYmCisJCWAkRU5We0NDfSAtV2EsLXYgLWMgLW8gL2Rldi9udWxsIC14IGFzc2VtYmxlciAvZGV2L251bGwgMj4mMWAKKwkJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgorCQkkMT49Mi4xOSk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAorCiskeW1tPTEgaWYgKCR4bW0gJiYgISR5bW0gJiYgJEFSR1ZbMF0gZXEgIndpbjMybiIgJiYgCisJCWBuYXNtIC12IDI+JjFgID1+IC9OQVNNIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgorCQkkMT49Mi4wMyk7CSMgZmlyc3QgdmVyc2lvbiBzdXBwb3J0aW5nIEFWWAorCismZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIikgaWYgKCR4bW0pOworCisKICRBPSJlYXgiOwogJEI9ImVieCI7CiAkQz0iZWN4IjsKQEAgLTQ3LDYgKzEyOSwxMCBAQAogCiBAVj0oJEEsJEIsJEMsJEQsJEUsJFQpOwogCiskYWx0PTA7CSMgMSBkZW5vdGVzIGFsdGVybmF0aXZlIElBTFUgaW1wbGVtZW50YXRpb24sIHdoaWNoIHBlcmZvcm1zCisJIyA4JSAqd29yc2UqIG9uIFA0LCBzYW1lIG9uIFdlc3RtZXJlIGFuZCBBdG9tLCAyJSBiZXR0ZXIgb24KKwkjIFNhbmR5IEJyaWRnZS4uLgorCiBzdWIgQk9EWV8wMF8xNQogCXsKIAlsb2NhbCgkbiwkYSwkYiwkYywkZCwkZSwkZik9QF87CkBAIC01OSwxNiArMTQ1LDE4IEBACiAJJnJvdGwoJHRtcDEsNSk7CQkJIyB0bXAxPVJPVEFURShhLDUpCiAJICZ4b3IoJGYsJGQpOwogCSZhZGQoJHRtcDEsJGUpOwkJCSMgdG1wMSs9ZTsKLQkgJmFuZCgkZiwkYik7Ci0JJm1vdigkZSwmc3d0bXAoJG4lMTYpKTsJCSMgZSBiZWNvbWVzIHZvbGF0aWxlIGFuZCBpcyBsb2FkZWQKKwkgJm1vdigkZSwmc3d0bXAoJG4lMTYpKTsJIyBlIGJlY29tZXMgdm9sYXRpbGUgYW5kIGlzIGxvYWRlZAogCSAJCQkJIyB3aXRoIHhpLCBhbHNvIG5vdGUgdGhhdCBlIGJlY29tZXMKIAkJCQkJIyBmIGluIG5leHQgcm91bmQuLi4KLQkgJnhvcigkZiwkZCk7CQkJIyBmIGhvbGRzIEZfMDBfMTkoYixjLGQpCisJJmFuZCgkZiwkYik7CiAJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQotCSAmbGVhKCR0bXAxLCZEV1AoMHg1YTgyNzk5OSwkdG1wMSwkZSkpOwkjIHRtcDErPUtfMDBfMTkreGkKKwkgJnhvcigkZiwkZCk7CQkJIyBmIGhvbGRzIEZfMDBfMTkoYixjLGQpCisJJmxlYSgkdG1wMSwmRFdQKDB4NWE4Mjc5OTksJHRtcDEsJGUpKTsJIyB0bXAxKz1LXzAwXzE5K3hpCiAKLQlpZiAoJG49PTE1KSB7ICZhZGQoJGYsJHRtcDEpOyB9CSMgZis9dG1wMQorCWlmICgkbj09MTUpIHsgJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7IyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAorCQkgICAgICAmYWRkKCRmLCR0bXAxKTsgfQkjIGYrPXRtcDEKIAllbHNlICAgICAgICB7ICZhZGQoJHRtcDEsJGYpOyB9CSMgZiBiZWNvbWVzIGEgaW4gbmV4dCByb3VuZAorCSZtb3YoJHRtcDEsJGEpCQkJaWYgKCRhbHQgJiYgJG49PTE1KTsKIAl9CiAKIHN1YiBCT0RZXzE2XzE5CkBAIC03NywyMiArMTY1LDQxIEBACiAKIAkmY29tbWVudCgiMTZfMTkgJG4iKTsKIAotCSZtb3YoJGYsJnN3dG1wKCRuJTE2KSk7CQkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQotCSAmbW92KCR0bXAxLCRjKTsJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpCi0JJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7Ci0JICZ4b3IoJHRtcDEsJGQpOwotCSZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOwotCSAmYW5kKCR0bXAxLCRiKTsJCSMgdG1wMSBob2xkcyBGXzAwXzE5KGIsYyxkKQotCSZyb3RyKCRiLDIpOwkJCSMgYj1ST1RBVEUoYiwzMCkKK2lmICgkYWx0KSB7CisJJnhvcigkYywkZCk7CisJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQorCSZhbmQoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpLCBiJj1jXmQKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CisJJnhvcigkdG1wMSwkZCk7CQkJIyB0bXAxPUZfMDBfMTkoYixjLGQpCisJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCisJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCisJICZhZGQoJGUsJHRtcDEpOwkJIyBlKz1GXzAwXzE5KGIsYyxkKQorCSZ4b3IoJGMsJGQpOwkJCSMgcmVzdG9yZSAkYworCSAmbW92KCR0bXAxLCRhKTsJCSMgYiBpbiBuZXh0IHJvdW5kCisJJnJvdHIoJGIsJG49PTE2PzI6Nyk7CQkjIGI9Uk9UQVRFKGIsMzApCisJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgorCSZyb3RsKCRhLDUpOwkJCSMgUk9UQVRFKGEsNSkKKwkgJmxlYSgkZiwmRFdQKDB4NWE4Mjc5OTksJGYsJGUpKTsjIGYrPUZfMDBfMTkoYixjLGQpK2UKKwkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAorCSAmYWRkKCRmLCRhKTsJCQkjIGYrPVJPVEFURShhLDUpCit9IGVsc2UgeworCSZtb3YoJHRtcDEsJGMpOwkJCSMgdG1wMSB0byBob2xkIEZfMDBfMTkoYixjLGQpCisJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQorCSZ4b3IoJHRtcDEsJGQpOworCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKKwkmYW5kKCR0bXAxLCRiKTsKIAkgJnhvcigkZiwmc3d0bXAoKCRuKzEzKSUxNikpOwkjIGYgaG9sZHMgeGFeeGJeeGNeeGQKIAkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKIAkgJnhvcigkdG1wMSwkZCk7CQkjIHRtcDE9Rl8wMF8xOShiLGMsZCkKLQkmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkJIyB4aT1mCi0JJmxlYSgkZiwmRFdQKDB4NWE4Mjc5OTksJGYsJGUpKTsjIGYrPUtfMDBfMTkrZQotCSAmbW92KCRlLCRhKTsJCQkjIGUgYmVjb21lcyB2b2xhdGlsZQotCSZyb3RsKCRlLDUpOwkJCSMgZT1ST1RBVEUoYSw1KQotCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9Rl8wMF8xOShiLGMsZCkKLQkmYWRkKCRmLCRlKTsJCQkjIGYrPVJPVEFURShhLDUpCisJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1GXzAwXzE5KGIsYyxkKQorCSAmbW92KCR0bXAxLCRhKTsKKwkmcm90cigkYiwyKTsJCQkjIGI9Uk9UQVRFKGIsMzApCisJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgorCSZyb3RsKCR0bXAxLDUpOwkJCSMgUk9UQVRFKGEsNSkKKwkgJmxlYSgkZiwmRFdQKDB4NWE4Mjc5OTksJGYsJGUpKTsjIGYrPUZfMDBfMTkoYixjLGQpK2UKKwkmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKTsJIyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAorCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9Uk9UQVRFKGEsNSkKK30KIAl9CiAKIHN1YiBCT0RZXzIwXzM5CkBAIC0xMDIsMjEgKzIwOSw0MSBAQAogCiAJJmNvbW1lbnQoIjIwXzM5ICRuIik7CiAKK2lmICgkYWx0KSB7CisJJnhvcigkdG1wMSwkYyk7CQkJIyB0bXAxIHRvIGhvbGQgRl8yMF8zOShiLGMsZCksIGJePWMKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCisJJnhvcigkdG1wMSwkZCk7CQkJIyB0bXAxIGhvbGRzIEZfMjBfMzkoYixjLGQpCisJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOworCSZhZGQoJGUsJHRtcDEpOwkJCSMgZSs9Rl8yMF8zOShiLGMsZCkKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzEzKSUxNikpOwkjIGYgaG9sZHMgeGFeeGJeeGNeeGQKKwkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKKwkgJm1vdigkdG1wMSwkYSk7CQkjIGIgaW4gbmV4dCByb3VuZAorCSZyb3RyKCRiLDcpOwkJCSMgYj1ST1RBVEUoYiwzMCkKKwkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKQkJaWYoJG48NzcpOyMgeGk9ZgorCSZyb3RsKCRhLDUpOwkJCSMgUk9UQVRFKGEsNSkKKwkgJnhvcigkYiwkYykJCQlpZigkbj09MzkpOyMgd2FybSB1cCBmb3IgQk9EWV80MF81OQorCSZhbmQoJHRtcDEsJGIpCQkJaWYoJG49PTM5KTsKKwkgJmxlYSgkZiwmRFdQKCRLLCRmLCRlKSk7CSMgZis9ZStLX1hYX1lZCisJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSkJaWYoJG48NzkpOyMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKKwkgJmFkZCgkZiwkYSk7CQkJIyBmKz1ST1RBVEUoYSw1KQorCSZyb3RyKCRhLDUpCQkJaWYgKCRuPT03OSk7Cit9IGVsc2UgewogCSZtb3YoJHRtcDEsJGIpOwkJCSMgdG1wMSB0byBob2xkIEZfMjBfMzkoYixjLGQpCi0JICZtb3YoJGYsJnN3dG1wKCRuJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCi0JJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQotCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzIpJTE2KSk7CSMgZiB0byBob2xkIFh1cGRhdGUoeGkseGEseGIseGMseGQpCiAJJnhvcigkdG1wMSwkYyk7CiAJICZ4b3IoJGYsJnN3dG1wKCgkbis4KSUxNikpOwogCSZ4b3IoJHRtcDEsJGQpOwkJCSMgdG1wMSBob2xkcyBGXzIwXzM5KGIsYyxkKQogCSAmeG9yKCRmLCZzd3RtcCgoJG4rMTMpJTE2KSk7CSMgZiBob2xkcyB4YV54Yl54Y154ZAogCSZyb3RsKCRmLDEpOwkJCSMgZj1ST1RBVEUoZiwxKQotCSAmYWRkKCR0bXAxLCRlKTsKLQkmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkJIyB4aT1mCi0JICZtb3YoJGUsJGEpOwkJCSMgZSBiZWNvbWVzIHZvbGF0aWxlCi0JJnJvdGwoJGUsNSk7CQkJIyBlPVJPVEFURShhLDUpCi0JICZsZWEoJGYsJkRXUCgkSywkZiwkdG1wMSkpOwkjIGYrPUtfMjBfMzkrZQotCSZhZGQoJGYsJGUpOwkJCSMgZis9Uk9UQVRFKGEsNSkKKwkgJmFkZCgkZSwkdG1wMSk7CQkjIGUrPUZfMjBfMzkoYixjLGQpCisJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQorCSAmbW92KCR0bXAxLCRhKTsKKwkmcm90bCgkdG1wMSw1KTsJCQkjIFJPVEFURShhLDUpCisJICZtb3YoJnN3dG1wKCRuJTE2KSwkZikgaWYoJG48NzcpOyMgeGk9ZgorCSZsZWEoJGYsJkRXUCgkSywkZiwkZSkpOwkjIGYrPWUrS19YWF9ZWQorCSAmbW92KCRlLCZzd3RtcCgoJG4rMSklMTYpKSBpZigkbjw3OSk7IyBwcmUtZmV0Y2ggZiBmb3IgbmV4dCByb3VuZAorCSZhZGQoJGYsJHRtcDEpOwkJCSMgZis9Uk9UQVRFKGEsNSkKK30KIAl9CiAKIHN1YiBCT0RZXzQwXzU5CkBAIC0xMjUsNDEgKzI1Miw4NiBAQAogCiAJJmNvbW1lbnQoIjQwXzU5ICRuIik7CiAKLQkmbW92KCRmLCZzd3RtcCgkbiUxNikpOwkJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKLQkgJm1vdigkdG1wMSwmc3d0bXAoKCRuKzIpJTE2KSk7Ci0JJnhvcigkZiwkdG1wMSk7Ci0JICZtb3YoJHRtcDEsJnN3dG1wKCgkbis4KSUxNikpOwotCSZ4b3IoJGYsJHRtcDEpOwotCSAmbW92KCR0bXAxLCZzd3RtcCgoJG4rMTMpJTE2KSk7Ci0JJnhvcigkZiwkdG1wMSk7CQkJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCi0JICZtb3YoJHRtcDEsJGIpOwkJIyB0bXAxIHRvIGhvbGQgRl80MF81OShiLGMsZCkKK2lmICgkYWx0KSB7CisJJmFkZCgkZSwkdG1wMSk7CQkJIyBlKz1iJihjXmQpCisJICZ4b3IoJGYsJnN3dG1wKCgkbisyKSUxNikpOwkjIGYgdG8gaG9sZCBYdXBkYXRlKHhpLHhhLHhiLHhjLHhkKQorCSZtb3YoJHRtcDEsJGQpOworCSAmeG9yKCRmLCZzd3RtcCgoJG4rOCklMTYpKTsKKwkmeG9yKCRjLCRkKTsJCQkjIHJlc3RvcmUgJGMKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzEzKSUxNikpOwkjIGYgaG9sZHMgeGFeeGJeeGNeeGQKIAkmcm90bCgkZiwxKTsJCQkjIGY9Uk9UQVRFKGYsMSkKLQkgJm9yKCR0bXAxLCRjKTsKLQkmbW92KCZzd3RtcCgkbiUxNiksJGYpOwkJIyB4aT1mCi0JICZhbmQoJHRtcDEsJGQpOwotCSZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCRlKSk7IyBmKz1LXzQwXzU5K2UKLQkgJm1vdigkZSwkYik7CQkJIyBlIGJlY29tZXMgdm9sYXRpbGUgYW5kIGlzIHVzZWQKLQkJCQkJIyB0byBjYWxjdWxhdGUgRl80MF81OShiLGMsZCkKKwkgJmFuZCgkdG1wMSwkYyk7CisJJnJvdHIoJGIsNyk7CQkJIyBiPVJPVEFURShiLDMwKQorCSAmYWRkKCRlLCR0bXAxKTsJCSMgZSs9YyZkCisJJm1vdigkdG1wMSwkYSk7CQkJIyBiIGluIG5leHQgcm91bmQKKwkgJm1vdigmc3d0bXAoJG4lMTYpLCRmKTsJIyB4aT1mCisJJnJvdGwoJGEsNSk7CQkJIyBST1RBVEUoYSw1KQorCSAmeG9yKCRiLCRjKQkJCWlmICgkbjw1OSk7CisJJmFuZCgkdG1wMSwkYikJCQlpZiAoJG48NTkpOyMgdG1wMSB0byBob2xkIEZfNDBfNTkoYixjLGQpCisJICZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCRlKSk7IyBmKz1LXzQwXzU5K2UrKGImKGNeZCkpCisJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKKwkgJmFkZCgkZiwkYSk7CQkJIyBmKz1ST1RBVEUoYSw1KQorfSBlbHNlIHsKKwkmbW92KCR0bXAxLCRjKTsJCQkjIHRtcDEgdG8gaG9sZCBGXzQwXzU5KGIsYyxkKQorCSAmeG9yKCRmLCZzd3RtcCgoJG4rMiklMTYpKTsJIyBmIHRvIGhvbGQgWHVwZGF0ZSh4aSx4YSx4Yix4Yyx4ZCkKKwkmeG9yKCR0bXAxLCRkKTsKKwkgJnhvcigkZiwmc3d0bXAoKCRuKzgpJTE2KSk7CisJJmFuZCgkdG1wMSwkYik7CisJICZ4b3IoJGYsJnN3dG1wKCgkbisxMyklMTYpKTsJIyBmIGhvbGRzIHhhXnhiXnhjXnhkCisJJnJvdGwoJGYsMSk7CQkJIyBmPVJPVEFURShmLDEpCisJICZhZGQoJHRtcDEsJGUpOwkJIyBiJihjXmQpKz1lCiAJJnJvdHIoJGIsMik7CQkJIyBiPVJPVEFURShiLDMwKQotCSAmYW5kKCRlLCRjKTsKLQkmb3IoJHRtcDEsJGUpOwkJCSMgdG1wMSBob2xkcyBGXzQwXzU5KGIsYyxkKQkJCi0JICZtb3YoJGUsJGEpOwotCSZyb3RsKCRlLDUpOwkJCSMgZT1ST1RBVEUoYSw1KQotCSAmYWRkKCRmLCR0bXAxKTsJCSMgZis9dG1wMTsKKwkgJm1vdigkZSwkYSk7CQkJIyBlIGJlY29tZXMgdm9sYXRpbGUKKwkmcm90bCgkZSw1KTsJCQkjIFJPVEFURShhLDUpCisJICZtb3YoJnN3dG1wKCRuJTE2KSwkZik7CSMgeGk9ZgorCSZsZWEoJGYsJkRXUCgweDhmMWJiY2RjLCRmLCR0bXAxKSk7IyBmKz1LXzQwXzU5K2UrKGImKGNeZCkpCisJICZtb3YoJHRtcDEsJGMpOwogCSZhZGQoJGYsJGUpOwkJCSMgZis9Uk9UQVRFKGEsNSkKKwkgJmFuZCgkdG1wMSwkZCk7CisJJm1vdigkZSwmc3d0bXAoKCRuKzEpJTE2KSk7CSMgcHJlLWZldGNoIGYgZm9yIG5leHQgcm91bmQKKwkgJmFkZCgkZiwkdG1wMSk7CQkjIGYrPWMmZAorfQogCX0KIAogJmZ1bmN0aW9uX2JlZ2luKCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKK2lmICgkeG1tKSB7CisgICZzdGF0aWNfbGFiZWwoInNzc2UzX3Nob3J0Y3V0Iik7CisgICZzdGF0aWNfbGFiZWwoImF2eF9zaG9ydGN1dCIpCQlpZiAoJHltbSk7CisgICZzdGF0aWNfbGFiZWwoIktfWFhfWFgiKTsKKworCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludCIpKTsJIyBtYWtlIGl0IFBJQyEKKyAgJnNldF9sYWJlbCgicGljX3BvaW50Iik7CisJJmJsaW5kcG9wKCR0bXAxKTsKKwkmcGljbWV1cCgkVCwiT1BFTlNTTF9pYTMyY2FwX1AiLCR0bXAxLCZsYWJlbCgicGljX3BvaW50IikpOworCSZsZWEJKCR0bXAxLCZEV1AoJmxhYmVsKCJLX1hYX1hYIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksJHRtcDEpKTsKKworCSZtb3YJKCRBLCZEV1AoMCwkVCkpOworCSZtb3YJKCRELCZEV1AoNCwkVCkpOworCSZ0ZXN0CSgkRCwxPDw5KTsJCSMgY2hlY2sgU1NTRTMgYml0CisJJmp6CSgmbGFiZWwoIng4NiIpKTsKKwkmdGVzdAkoJEEsMTw8MjQpOwkJIyBjaGVjayBGWFNSIGJpdAorCSZqegkoJmxhYmVsKCJ4ODYiKSk7CisJaWYgKCR5bW0pIHsKKwkJJmFuZAkoJEQsMTw8MjgpOwkJIyBtYXNrIEFWWCBiaXQKKwkJJmFuZAkoJEEsMTw8MzApOwkJIyBtYXNrICJJbnRlbCBDUFUiIGJpdAorCQkmb3IJKCRBLCREKTsKKwkJJmNtcAkoJEEsMTw8Mjh8MTw8MzApOworCQkmamUJKCZsYWJlbCgiYXZ4X3Nob3J0Y3V0IikpOworCX0KKwkmam1wCSgmbGFiZWwoInNzc2UzX3Nob3J0Y3V0IikpOworICAmc2V0X2xhYmVsKCJ4ODYiLDE2KTsKK30KIAkmbW92KCR0bXAxLCZ3cGFyYW0oMCkpOwkjIFNIQV9DVFggKmMKIAkmbW92KCRULCZ3cGFyYW0oMSkpOwkjIGNvbnN0IHZvaWQgKmlucHV0CiAJJm1vdigkQSwmd3BhcmFtKDIpKTsJIyBzaXplX3QgbnVtCi0JJnN0YWNrX3B1c2goMTYpOwkjIGFsbG9jYXRlIFhbMTZdCisJJnN0YWNrX3B1c2goMTYrMyk7CSMgYWxsb2NhdGUgWFsxNl0KIAkmc2hsKCRBLDYpOwogCSZhZGQoJEEsJFQpOwogCSZtb3YoJndwYXJhbSgyKSwkQSk7CSMgcG9pbnRlciBiZXlvbmQgdGhlIGVuZCBvZiBpbnB1dAogCSZtb3YoJEUsJkRXUCgxNiwkdG1wMSkpOyMgcHJlLWxvYWQgRQorCSZqbXAoJmxhYmVsKCJsb29wIikpOwogCi0JJnNldF9sYWJlbCgibG9vcCIsMTYpOworJnNldF9sYWJlbCgibG9vcCIsMTYpOwogCiAJIyBjb3B5IGlucHV0IGNodW5rIHRvIFgsIGJ1dCByZXZlcnNpbmcgYnl0ZSBvcmRlciEKIAlmb3IgKCRpPTA7ICRpPDE2OyAkaSs9NCkKQEAgLTIxMyw4ICszODUsODQ1IEBACiAJJm1vdigmRFdQKDE2LCR0bXAxKSwkQyk7CiAJJmpiKCZsYWJlbCgibG9vcCIpKTsKIAotCSZzdGFja19wb3AoMTYpOworCSZzdGFja19wb3AoMTYrMyk7CiAmZnVuY3Rpb25fZW5kKCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKKworaWYgKCR4bW0pIHsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIFNTU0UzIGltcGxlbWVudGF0aW9uLgorIworIyAleG1tWzAtN10gYXJlIHVzZWQgYXMgcmluZyBAWFtdIGJ1ZmZlciBjb250YWluaW5nIHF1YWRydXBsZXMgb2YgbGFzdAorIyAzMiBlbGVtZW50cyBvZiB0aGUgbWVzc2FnZSBzY2hlZHVsZSBvciBYdXBkYXRlIG91dHB1dHMuIEZpcnN0IDQKKyMgcXVhZHJ1cGxlcyBhcmUgc2ltcGx5IGJ5dGUtc3dhcHBlZCBpbnB1dCwgbmV4dCA0IGFyZSBjYWxjdWxhdGVkCisjIGFjY29yZGluZyB0byBtZXRob2Qgb3JpZ2luYWxseSBzdWdnZXN0ZWQgYnkgRGVhbiBHYXVkZXQgKG1vZHVsbworIyBiZWluZyBpbXBsZW1lbnRlZCBpbiBTU1NFMykuIE9uY2UgOCBxdWFkcnVwbGVzIG9yIDMyIGVsZW1lbnRzIGFyZQorIyBjb2xsZWN0ZWQsIGl0IHN3aXRjaGVzIHRvIHJvdXRpbmUgcHJvcG9zZWQgYnkgTWF4IExvY2t0eXVraGluLgorIworIyBDYWxjdWxhdGlvbnMgaW5ldml0YWJseSByZXF1aXJlIHRlbXBvcmFyeSByZXFpc3RlcnMsIGFuZCB0aGVyZSBhcmUKKyMgbm8gJXhtbSByZWdpc3RlcnMgbGVmdCB0byBzcGFyZS4gRm9yIHRoaXMgcmVhc29uIHBhcnQgb2YgdGhlIHJpbmcKKyMgYnVmZmVyLCBYWzIuLjRdIHRvIGJlIHNwZWNpZmljLCBpcyBvZmZsb2FkZWQgdG8gMyBxdWFkcmlwbGVzIHJpbmcKKyMgYnVmZmVyIG9uIHRoZSBzdGFjay4gS2VlcCBpbiBtaW5kIHRoYXQgWFsyXSBpcyBhbGlhcyBYWy02XSwgWFszXSAtCisjIFhbLTVdLCBhbmQgWFs0XSAtIFhbLTRdLi4uCisjCisjIEFub3RoZXIgbm90YWJsZSBvcHRpbWl6YXRpb24gaXMgYWdncmVzc2l2ZSBzdGFjayBmcmFtZSBjb21wcmVzc2lvbgorIyBhaW1pbmcgdG8gbWluaW1pemUgYW1vdW50IG9mIDktYnl0ZSBpbnN0cnVjdGlvbnMuLi4KKyMKKyMgWWV0IGFub3RoZXIgbm90YWJsZSBvcHRpbWl6YXRpb24gaXMgImp1bXBpbmciICRCIHZhcmlhYmxlLiBJdCBtZWFucworIyB0aGF0IHRoZXJlIGlzIG5vIHJlZ2lzdGVyIHBlcm1hbmVudGx5IGFsbG9jYXRlZCBmb3IgJEIgdmFsdWUuIFRoaXMKKyMgYWxsb3dlZCB0byBlbGltaW5hdGUgb25lIGluc3RydWN0aW9uIGZyb20gYm9keV8yMF8zOS4uLgorIworbXkgJFhpPTQ7CQkJIyA0eFNJTUQgWHVwZGF0ZSByb3VuZCwgc3RhcnQgcHJlLXNlZWRlZAorbXkgQFg9bWFwKCJ4bW0kXyIsKDQuLjcsMC4uMykpOwkjIHByZS1zZWVkZWQgZm9yICRYaT00CitteSBAVj0oJEEsJEIsJEMsJEQsJEUpOworbXkgJGo9MDsJCQkjIGhhc2ggcm91bmQKK215IEBUPSgkVCwkdG1wMSk7CitteSAkaW5wOworCitteSAkX3JvbD1zdWIgeyAmcm9sKEBfKSB9OworbXkgJF9yb3I9c3ViIHsgJnJvcihAXykgfTsKKworJmZ1bmN0aW9uX2JlZ2luKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzIik7CisJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQorCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOworCSZibGluZHBvcCgkdG1wMSk7CisJJmxlYQkoJHRtcDEsJkRXUCgmbGFiZWwoIktfWFhfWFgiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwkdG1wMSkpOworJnNldF9sYWJlbCgic3NzZTNfc2hvcnRjdXQiKTsKKworCSZtb3ZkcWEJKEBYWzNdLCZRV1AoMCwkdG1wMSkpOwkJIyBLXzAwXzE5CisJJm1vdmRxYQkoQFhbNF0sJlFXUCgxNiwkdG1wMSkpOwkJIyBLXzIwXzM5CisJJm1vdmRxYQkoQFhbNV0sJlFXUCgzMiwkdG1wMSkpOwkJIyBLXzQwXzU5CisJJm1vdmRxYQkoQFhbNl0sJlFXUCg0OCwkdG1wMSkpOwkJIyBLXzYwXzc5CisJJm1vdmRxYQkoQFhbMl0sJlFXUCg2NCwkdG1wMSkpOwkJIyBwYnN3YXAgbWFzaworCisJJm1vdgkoJEUsJndwYXJhbSgwKSk7CQkjIGxvYWQgYXJndW1lbnQgYmxvY2sKKwkmbW92CSgkaW5wPUBUWzFdLCZ3cGFyYW0oMSkpOworCSZtb3YJKCRELCZ3cGFyYW0oMikpOworCSZtb3YJKEBUWzBdLCJlc3AiKTsKKworCSMgc3RhY2sgZnJhbWUgbGF5b3V0CisJIworCSMgKzAJWFswXStLCVhbMV0rSwlYWzJdK0sJWFszXStLCSMgWE1NLT5JQUxVIHhmZXIgYXJlYQorCSMJWFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCisJIwlYWzhdK0sJWFs5XStLCVhbMTBdK0sJWFsxMV0rSworCSMJWFsxMl0rSwlYWzEzXStLCVhbMTRdK0sJWFsxNV0rSworCSMKKwkjICs2NAlYWzBdCVhbMV0JWFsyXQlYWzNdCSMgWE1NLT5YTU0gYmFja3RyYWNlIGFyZWEKKwkjCVhbNF0JWFs1XQlYWzZdCVhbN10KKwkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQgZm9yIEtfMDBfMTkKKwkjCisJIyArMTEyCUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJIyBjb25zdGFudHMKKwkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKKwkjCUtfNjBfNzkJS182MF83OQlLXzYwXzc5CUtfNjBfNzkKKwkjCUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkKKwkjCXBic3dhcCBtYXNrCisJIworCSMgKzE5MgljdHgJCQkJIyBhcmd1bWVudCBibG9jaworCSMgKzE5NglpbnAKKwkjICsyMDAJZW5kCisJIyArMjA0CWVzcAorCSZzdWIJKCJlc3AiLDIwOCk7CisJJmFuZAkoImVzcCIsLTY0KTsKKworCSZtb3ZkcWEJKCZRV1AoMTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cworCSZtb3ZkcWEJKCZRV1AoMTEyKzE2LCJlc3AiKSxAWFs1XSk7CisJJm1vdmRxYQkoJlFXUCgxMTIrMzIsImVzcCIpLEBYWzZdKTsKKwkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKKwkmbW92ZHFhCSgmUVdQKDExMis0OCwiZXNwIiksQFhbM10pOworCSZhZGQJKCRELCRpbnApOwkJCSMgZW5kIG9mIGlucHV0CisJJm1vdmRxYQkoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKKwkmYWRkCSgkaW5wLDY0KTsKKwkmbW92CSgmRFdQKDE5MiswLCJlc3AiKSwkRSk7CQkjIHNhdmUgYXJndW1lbnQgYmxvY2sKKwkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKKwkmbW92CSgmRFdQKDE5Mis4LCJlc3AiKSwkRCk7CisJJm1vdgkoJkRXUCgxOTIrMTIsImVzcCIpLEBUWzBdKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKKworCSZtb3YJKCRBLCZEV1AoMCwkRSkpOwkJIyBsb2FkIGNvbnRleHQKKwkmbW92CSgkQiwmRFdQKDQsJEUpKTsKKwkmbW92CSgkQywmRFdQKDgsJEUpKTsKKwkmbW92CSgkRCwmRFdQKDEyLCRFKSk7CisJJm1vdgkoJEUsJkRXUCgxNiwkRSkpOworCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1hZ2ljIHNlZWQKKworCSZtb3ZkcXUJKEBYWy00JjddLCZRV1AoLTY0LCRpbnApKTsJIyBsb2FkIGlucHV0IHRvICV4bW1bMC0zXQorCSZtb3ZkcXUJKEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsKKwkmbW92ZHF1CShAWFstMiY3XSwmUVdQKC0zMiwkaW5wKSk7CisJJm1vdmRxdQkoQFhbLTEmN10sJlFXUCgtMTYsJGlucCkpOworCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCisJJnBzaHVmYgkoQFhbLTMmN10sQFhbMl0pOworCSZwc2h1ZmIJKEBYWy0yJjddLEBYWzJdKTsKKwkmbW92ZHFhCSgmUVdQKDExMi0xNiwiZXNwIiksQFhbM10pOwkjIGJvcnJvdyBsYXN0IGJhY2t0cmFjZSBzbG90CisJJnBzaHVmYgkoQFhbLTEmN10sQFhbMl0pOworCSZwYWRkZAkoQFhbLTQmN10sQFhbM10pOwkJIyBhZGQgS18wMF8xOQorCSZwYWRkZAkoQFhbLTMmN10sQFhbM10pOworCSZwYWRkZAkoQFhbLTImN10sQFhbM10pOworCSZtb3ZkcWEJKCZRV1AoMCwiZXNwIiksQFhbLTQmN10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQorCSZwc3ViZAkoQFhbLTQmN10sQFhbM10pOwkJIyByZXN0b3JlIFhbXQorCSZtb3ZkcWEJKCZRV1AoMCsxNiwiZXNwIiksQFhbLTMmN10pOworCSZwc3ViZAkoQFhbLTMmN10sQFhbM10pOworCSZtb3ZkcWEJKCZRV1AoMCszMiwiZXNwIiksQFhbLTImN10pOworCSZwc3ViZAkoQFhbLTImN10sQFhbM10pOworCSZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKKwkmam1wCSgmbGFiZWwoImxvb3AiKSk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU1NFIGluc3RydWN0aW9uIHNlcXVlbmNlIGlzIGZpcnN0IGJyb2tlbiB0byBncm91cHMgb2YgaW5kZXBlbnRlbnQKKyMgaW5zdHJ1Y3Rpb25zLCBpbmRlcGVuZGVudCBpbiByZXNwZWN0IHRvIHRoZWlyIGlucHV0cyBhbmQgc2hpZnRlcgorIyAobm90IGFsbCBhcmNoaXRlY3R1cmVzIGhhdmUgbW9yZSB0aGFuIG9uZSkuIFRoZW4gSUFMVSBpbnN0cnVjdGlvbnMKKyMgYXJlICJrbml0dGVkIGluIiBiZXR3ZWVuIHRoZSBTU0UgZ3JvdXBzLiBEaXN0YW5jZSBpcyBtYWludGFpbmVkIGZvcgorIyBTU0UgbGF0ZW5jeSBvZiAyIGluIGhvcGUgdGhhdCBpdCBmaXRzIGJldHRlciB1cGNvbWluZyBBTUQgQnVsbGRvemVyCisjIFt3aGljaCBhbGxlZ2VkbHkgYWxzbyBpbXBsZW1lbnRzIFNTU0UzXS4uLgorIworIyBUZW1wb3JhcnkgcmVnaXN0ZXJzIHVzYWdlLiBYWzJdIGlzIHZvbGF0aWxlIGF0IHRoZSBlbnRyeSBhbmQgYXQgdGhlCisjIGVuZCBpcyByZXN0b3JlZCBmcm9tIGJhY2t0cmFjZSByaW5nIGJ1ZmZlci4gWFszXSBpcyBleHBlY3RlZCB0bworIyBjb250YWluIGN1cnJlbnQgS19YWF9YWCBjb25zdGFudCBhbmQgaXMgdXNlZCB0byBjYWNsdWxhdGUgWFstMV0rSworIyBmcm9tIHByZXZpb3VzIHJvdW5kLCBpdCBiZWNvbWVzIHZvbGF0aWxlIHRoZSBtb21lbnQgdGhlIHZhbHVlIGlzCisjIHNhdmVkIHRvIHN0YWNrIGZvciB0cmFuc2ZlciB0byBJQUxVLiBYWzRdIGJlY29tZXMgdm9sYXRpbGUgd2hlbmV2ZXIKKyMgWFstNF0gaXMgYWNjdW11bGF0ZWQgYW5kIG9mZmxvYWRlZCB0byBiYWNrdHJhY2UgcmluZyBidWZmZXIsIGF0IHRoZQorIyBlbmQgaXQgaXMgbG9hZGVkIHdpdGggbmV4dCBLX1hYX1hYIFt3aGljaCBiZWNvbWVzIFhbM10gaW4gbmV4dAorIyByb3VuZF0uLi4KKyMKK3N1YiBYdXBkYXRlX3Nzc2UzXzE2XzMxKCkJCSMgcmVjYWxsIHRoYXQgJFhpIHN0YXJ0cyB3dGloIDQKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDQwIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnBhbGlnbnIoQFhbMF0sQFhbLTQmN10sOCk7CSMgY29tcG9zZSAiWFstMTRdIiBpbiAiWFswXSIKKwkmbW92ZHFhCShAWFsyXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOworCSAgJm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOyMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc3JsZHEJKEBYWzJdLDQpOwkJIyAiWFstM10iLCAzIGR3b3JkcworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZweG9yCShAWFswXSxAWFstNCY3XSk7CSMgIlhbMF0iXj0iWFstMTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnB4b3IJKEBYWzJdLEBYWy0yJjddKTsJIyAiWFstM10iXiJYWy04XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTNdIl4iWFstOF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZtb3ZkcWEJKEBYWzRdLEBYWzBdKTsKKwkmbW92ZHFhCShAWFsyXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNsbGRxCShAWFs0XSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCisJJnBhZGRkCShAWFswXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBYWzJdLDMxKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmbW92ZHFhCShAWFszXSxAWFs0XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBYWzRdLDMwKTsKKwkmcG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0xCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmbW92ZHFhCShAWFsyXSwmUVdQKDY0KzE2KigoJFhpLTYpJTMpLCJlc3AiKSkgaWYgKCRYaT41KTsJIyByZXN0b3JlIFhbXSBmcm9tIGJhY2t0cmFjZSBidWZmZXIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZwc2xsZAkoQFhbM10sMik7CisJJnB4b3IJKEBYWzBdLEBYWzRdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZtb3ZkcWEJKEBYWzRdLCZRV1AoMTEyLTE2KzE2KigoJFhpKS81KSwiZXNwIikpOwkjIEtfWFhfWFgKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAWFszXSk7CQkjICJYWzBdIl49KCJYWzBdIjw8OTYpPDw8MgorCSAgJm1vdmRxYQkoQFhbMV0sQFhbLTImN10pCWlmICgkWGk8Nyk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCisKKyAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KK30KKworc3ViIFh1cGRhdGVfc3NzZTNfMzJfNzkoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDggaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwkmbW92ZHFhCShAWFsyXSxAWFstMSY3XSkJaWYgKCRYaT09OCk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKKwkmcHhvcgkoQFhbMF0sQFhbLTQmN10pOwkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgorCSZwYWxpZ25yKEBYWzJdLEBYWy0yJjddLDgpOwkjIGNvbXBvc2UgIlhbLTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKworCSZweG9yCShAWFswXSxAWFstNyY3XSk7CSMgIlhbMF0iXj0iWFstMjhdIgorCSAgJm1vdmRxYQkoJlFXUCg2NCsxNiooKCRYaS00KSUzKSwiZXNwIiksQFhbLTQmN10pOwkjIHNhdmUgWFtdIHRvIGJhY2t0cmFjZSBidWZmZXIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgaWYgKCRYaSU1KSB7CisJICAmbW92ZHFhCShAWFs0XSxAWFszXSk7CSMgInBlcnBldHVhdGUiIEtfWFhfWFguLi4KKwkgfSBlbHNlIHsJCQkjIC4uLiBvciBsb2FkIG5leHQgb25lCisJICAmbW92ZHFhCShAWFs0XSwmUVdQKDExMi0xNisxNiooJFhpLzUpLCJlc3AiKSk7CisJIH0KKwkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJm1vdmRxYQkoQFhbMl0sQFhbMF0pOworCSAgJm1vdmRxYQkoJlFXUCgwKzE2KigoJFhpLTEpJjMpLCJlc3AiKSxAWFszXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnBzbGxkCShAWFswXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc3JsZAkoQFhbMl0sMzApOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcG9yCShAWFswXSxAWFsyXSk7CQkjICJYWzBdIjw8PD0yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIGJvZHlfMjBfMzkKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZigkWGk8MTkpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJICAmbW92ZHFhCShAWFszXSxAWFswXSkJaWYgKCRYaTwxOSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKyAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KK30KKworc3ViIFh1cGxhc3Rfc3NzZTNfODAoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZwYWRkZAkoQFhbM10sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJICAmbW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIElBTFUKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKwkmbW92CSgkaW5wPUBUWzFdLCZEV1AoMTkyKzQsImVzcCIpKTsKKwkmY21wCSgkaW5wLCZEV1AoMTkyKzgsImVzcCIpKTsKKwkmamUJKCZsYWJlbCgiZG9uZSIpKTsKKworCSZtb3ZkcWEJKEBYWzNdLCZRV1AoMTEyKzQ4LCJlc3AiKSk7CSMgS18wMF8xOQorCSZtb3ZkcWEJKEBYWzJdLCZRV1AoMTEyKzY0LCJlc3AiKSk7CSMgcGJzd2FwIG1hc2sKKwkmbW92ZHF1CShAWFstNCY3XSwmUVdQKDAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmbW92ZHF1CShAWFstMyY3XSwmUVdQKDE2LCRpbnApKTsKKwkmbW92ZHF1CShAWFstMiY3XSwmUVdQKDMyLCRpbnApKTsKKwkmbW92ZHF1CShAWFstMSY3XSwmUVdQKDQ4LCRpbnApKTsKKwkmYWRkCSgkaW5wLDY0KTsKKwkmcHNodWZiCShAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAorCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOworCSZtb3ZkcWEJKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKKworICAkWGk9MDsKK30KKworc3ViIFhsb29wX3Nzc2UzKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnBzaHVmYgkoQFhbKCRYaS0zKSY3XSxAWFsyXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnBhZGRkCShAWFsoJFhpLTQpJjddLEBYWzNdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmbW92ZHFhCSgmUVdQKDArMTYqJFhpLCJlc3AiKSxAWFsoJFhpLTQpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmcHN1YmQJKEBYWygkWGktNCkmN10sQFhbM10pOworCisJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KKyAgJFhpKys7Cit9CisKK3N1YiBYdGFpbF9zc3NlMygpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9Cit9CisKK3N1YiBib2R5XzAwXzE5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KKwknJmFkZAkoJGUsJkRXUCg0KigkaiYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIKKwknJnhvcgkoJGMsJGQpOycsCisJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKKwknJiRfcm9sCSgkYSw1KTsnLAorCScmYW5kCShAVFswXSwkYyk7JywJIyAoJGImKCRjXiRkKSkKKwknJnhvcgkoJGMsJGQpOycsCSMgcmVzdG9yZSAkYworCScmeG9yCShAVFswXSwkZCk7JywKKwknJmFkZAkoJGUsJGEpOycsCisJJyYkX3JvcgkoJGIsJGo/NzoyKTsnLAkjICRiPj4+MgorCScmYWRkCSgkZSxAVFswXSk7JwkuJyRqKys7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JworCSk7Cit9CisKK3N1YiBib2R5XzIwXzM5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KKwknJmFkZAkoJGUsJkRXUCg0KigkaisrJjE1KSwiZXNwIikpOycsCSMgWFtdK0sgeGZlcgorCScmeG9yCShAVFswXSwkZCk7JywJIyAoJGJeJGQpCisJJyZtb3YJKEBUWzFdLCRhKTsnLAkjICRiIGluIG5leHQgcm91bmQKKwknJiRfcm9sCSgkYSw1KTsnLAorCScmeG9yCShAVFswXSwkYyk7JywJIyAoJGJeJGReJGMpCisJJyZhZGQJKCRlLCRhKTsnLAorCScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCisJJyZhZGQJKCRlLEBUWzBdKTsnCS4ndW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCisJKTsKK30KKworc3ViIGJvZHlfNDBfNTkgKCkgeworCSgKKwknKCRhLCRiLCRjLCRkLCRlKT1AVjsnLgorCScmbW92CShAVFsxXSwkYyk7JywKKwknJnhvcgkoJGMsJGQpOycsCisJJyZhZGQJKCRlLCZEV1AoNCooJGorKyYxNSksImVzcCIpKTsnLAkjIFhbXStLIHhmZXIKKwknJmFuZAkoQFRbMV0sJGQpOycsCisJJyZhbmQJKEBUWzBdLCRjKTsnLAkjICgkYiYoJGNeJGQpKQorCScmJF9yb3IJKCRiLDcpOycsCSMgJGI+Pj4yCisJJyZhZGQJKCRlLEBUWzFdKTsnLAorCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJvdW5kCisJJyYkX3JvbAkoJGEsNSk7JywKKwknJmFkZAkoJGUsQFRbMF0pOycsCisJJyZ4b3IJKCRjLCRkKTsnLAkjIHJlc3RvcmUgJGMKKwknJmFkZAkoJGUsJGEpOycJLid1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKKwkpOworfQorCismc2V0X2xhYmVsKCJsb29wIiwxNik7CisJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwbGFzdF9zc3NlM184MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgorCisJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOworCisJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CisJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CisJJlhsb29wX3Nzc2UzKFwmYm9keV8yMF8zOSk7CisKKwkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CisJJmFkZAkoJEEsJkRXUCgwLEBUWzFdKSk7CisJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCisJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CisJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CisJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOworCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOworCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKKwkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKKwkmbW92CSgkQixAVFswXSk7CisJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOworCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKKwkmbW92ZHFhCShAWFswXSxAWFstMyY3XSk7CisKKwkmam1wCSgmbGFiZWwoImxvb3AiKSk7CisKKyZzZXRfbGFiZWwoImRvbmUiLDE2KTsJCSRqPSRzYXZlZF9qOyBAVj1Ac2F2ZWRfVjsKKworCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOworCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOworCSZYdGFpbF9zc3NlMyhcJmJvZHlfMjBfMzkpOworCisJJm1vdgkoQFRbMV0sJkRXUCgxOTIsImVzcCIpKTsJIyB1cGRhdGUgY29udGV4dAorCSZhZGQJKCRBLCZEV1AoMCxAVFsxXSkpOworCSZtb3YJKCJlc3AiLCZEV1AoMTkyKzEyLCJlc3AiKSk7CSMgcmVzdG9yZSAlZXNwCisJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCisJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CisJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CisJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOworCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOworCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKKwkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKKwkmbW92CSgmRFdQKDEyLEBUWzFdKSwkRCk7CisJJm1vdgkoJkRXUCgxNixAVFsxXSksJEUpOworCismZnVuY3Rpb25fZW5kKCJfc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzIik7CisKK2lmICgkeW1tKSB7CitteSAkWGk9NDsJCQkjIDR4U0lNRCBYdXBkYXRlIHJvdW5kLCBzdGFydCBwcmUtc2VlZGVkCitteSBAWD1tYXAoInhtbSRfIiwoNC4uNywwLi4zKSk7CSMgcHJlLXNlZWRlZCBmb3IgJFhpPTQKK215IEBWPSgkQSwkQiwkQywkRCwkRSk7CitteSAkaj0wOwkJCSMgaGFzaCByb3VuZAorbXkgQFQ9KCRULCR0bXAxKTsKK215ICRpbnA7CisKK215ICRfcm9sPXN1YiB7ICZzaGxkKEBfWzBdLEBfKSB9OworbXkgJF9yb3I9c3ViIHsgJnNocmQoQF9bMF0sQF8pIH07CisKKyZmdW5jdGlvbl9iZWdpbigiX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdngiKTsKKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQiKSk7CSMgbWFrZSBpdCBQSUMhCisJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CisJJmJsaW5kcG9wKCR0bXAxKTsKKwkmbGVhCSgkdG1wMSwmRFdQKCZsYWJlbCgiS19YWF9YWCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCR0bXAxKSk7Cismc2V0X2xhYmVsKCJhdnhfc2hvcnRjdXQiKTsKKwkmdnplcm9hbGwoKTsKKworCSZ2bW92ZHFhKEBYWzNdLCZRV1AoMCwkdG1wMSkpOwkJIyBLXzAwXzE5CisJJnZtb3ZkcWEoQFhbNF0sJlFXUCgxNiwkdG1wMSkpOwkJIyBLXzIwXzM5CisJJnZtb3ZkcWEoQFhbNV0sJlFXUCgzMiwkdG1wMSkpOwkJIyBLXzQwXzU5CisJJnZtb3ZkcWEoQFhbNl0sJlFXUCg0OCwkdG1wMSkpOwkJIyBLXzYwXzc5CisJJnZtb3ZkcWEoQFhbMl0sJlFXUCg2NCwkdG1wMSkpOwkJIyBwYnN3YXAgbWFzaworCisJJm1vdgkoJEUsJndwYXJhbSgwKSk7CQkjIGxvYWQgYXJndW1lbnQgYmxvY2sKKwkmbW92CSgkaW5wPUBUWzFdLCZ3cGFyYW0oMSkpOworCSZtb3YJKCRELCZ3cGFyYW0oMikpOworCSZtb3YJKEBUWzBdLCJlc3AiKTsKKworCSMgc3RhY2sgZnJhbWUgbGF5b3V0CisJIworCSMgKzAJWFswXStLCVhbMV0rSwlYWzJdK0sJWFszXStLCSMgWE1NLT5JQUxVIHhmZXIgYXJlYQorCSMJWFs0XStLCVhbNV0rSwlYWzZdK0sJWFs3XStLCisJIwlYWzhdK0sJWFs5XStLCVhbMTBdK0sJWFsxMV0rSworCSMJWFsxMl0rSwlYWzEzXStLCVhbMTRdK0sJWFsxNV0rSworCSMKKwkjICs2NAlYWzBdCVhbMV0JWFsyXQlYWzNdCSMgWE1NLT5YTU0gYmFja3RyYWNlIGFyZWEKKwkjCVhbNF0JWFs1XQlYWzZdCVhbN10KKwkjCVhbOF0JWFs5XQlYWzEwXQlYWzExXQkjIGV2ZW4gYm9ycm93ZWQgZm9yIEtfMDBfMTkKKwkjCisJIyArMTEyCUtfMjBfMzkJS18yMF8zOQlLXzIwXzM5CUtfMjBfMzkJIyBjb25zdGFudHMKKwkjCUtfNDBfNTkJS180MF81OQlLXzQwXzU5CUtfNDBfNTkKKwkjCUtfNjBfNzkJS182MF83OQlLXzYwXzc5CUtfNjBfNzkKKwkjCUtfMDBfMTkJS18wMF8xOQlLXzAwXzE5CUtfMDBfMTkKKwkjCXBic3dhcCBtYXNrCisJIworCSMgKzE5MgljdHgJCQkJIyBhcmd1bWVudCBibG9jaworCSMgKzE5NglpbnAKKwkjICsyMDAJZW5kCisJIyArMjA0CWVzcAorCSZzdWIJKCJlc3AiLDIwOCk7CisJJmFuZAkoImVzcCIsLTY0KTsKKworCSZ2bW92ZHFhKCZRV1AoMTEyKzAsImVzcCIpLEBYWzRdKTsJIyBjb3B5IGNvbnN0YW50cworCSZ2bW92ZHFhKCZRV1AoMTEyKzE2LCJlc3AiKSxAWFs1XSk7CisJJnZtb3ZkcWEoJlFXUCgxMTIrMzIsImVzcCIpLEBYWzZdKTsKKwkmc2hsCSgkRCw2KTsJCQkJIyBsZW4qNjQKKwkmdm1vdmRxYSgmUVdQKDExMis0OCwiZXNwIiksQFhbM10pOworCSZhZGQJKCRELCRpbnApOwkJCSMgZW5kIG9mIGlucHV0CisJJnZtb3ZkcWEoJlFXUCgxMTIrNjQsImVzcCIpLEBYWzJdKTsKKwkmYWRkCSgkaW5wLDY0KTsKKwkmbW92CSgmRFdQKDE5MiswLCJlc3AiKSwkRSk7CQkjIHNhdmUgYXJndW1lbnQgYmxvY2sKKwkmbW92CSgmRFdQKDE5Mis0LCJlc3AiKSwkaW5wKTsKKwkmbW92CSgmRFdQKDE5Mis4LCJlc3AiKSwkRCk7CisJJm1vdgkoJkRXUCgxOTIrMTIsImVzcCIpLEBUWzBdKTsJIyBzYXZlIG9yaWdpbmFsICVlc3AKKworCSZtb3YJKCRBLCZEV1AoMCwkRSkpOwkJIyBsb2FkIGNvbnRleHQKKwkmbW92CSgkQiwmRFdQKDQsJEUpKTsKKwkmbW92CSgkQywmRFdQKDgsJEUpKTsKKwkmbW92CSgkRCwmRFdQKDEyLCRFKSk7CisJJm1vdgkoJEUsJkRXUCgxNiwkRSkpOworCSZtb3YJKEBUWzBdLCRCKTsJCQkjIG1hZ2ljIHNlZWQKKworCSZ2bW92ZHF1KEBYWy00JjddLCZRV1AoLTY0LCRpbnApKTsJIyBsb2FkIGlucHV0IHRvICV4bW1bMC0zXQorCSZ2bW92ZHF1KEBYWy0zJjddLCZRV1AoLTQ4LCRpbnApKTsKKwkmdm1vdmRxdShAWFstMiY3XSwmUVdQKC0zMiwkaW5wKSk7CisJJnZtb3ZkcXUoQFhbLTEmN10sJlFXUCgtMTYsJGlucCkpOworCSZ2cHNodWZiKEBYWy00JjddLEBYWy00JjddLEBYWzJdKTsJIyBieXRlIHN3YXAKKwkmdnBzaHVmYihAWFstMyY3XSxAWFstMyY3XSxAWFsyXSk7CisJJnZwc2h1ZmIoQFhbLTImN10sQFhbLTImN10sQFhbMl0pOworCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKKwkmdnBzaHVmYihAWFstMSY3XSxAWFstMSY3XSxAWFsyXSk7CisJJnZwYWRkZAkoQFhbMF0sQFhbLTQmN10sQFhbM10pOwkJIyBhZGQgS18wMF8xOQorCSZ2cGFkZGQJKEBYWzFdLEBYWy0zJjddLEBYWzNdKTsKKwkmdnBhZGRkCShAWFsyXSxAWFstMiY3XSxAWFszXSk7CisJJnZtb3ZkcWEoJlFXUCgwLCJlc3AiKSxAWFswXSk7CQkjIFhbXStLIHhmZXIgdG8gSUFMVQorCSZ2bW92ZHFhKCZRV1AoMCsxNiwiZXNwIiksQFhbMV0pOworCSZ2bW92ZHFhKCZRV1AoMCszMiwiZXNwIiksQFhbMl0pOworCSZqbXAJKCZsYWJlbCgibG9vcCIpKTsKKworc3ViIFh1cGRhdGVfYXZ4XzE2XzMxKCkJCSMgcmVjYWxsIHRoYXQgJFhpIHN0YXJ0cyB3dGloIDQKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDQwIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZ2cGFkZGQJKEBYWzNdLEBYWzNdLEBYWy0xJjddKTsKKwkgICZ2bW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7IyBzYXZlIFhbXSB0byBiYWNrdHJhY2UgYnVmZmVyCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwc3JsZHEoQFhbMl0sQFhbLTEmN10sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIl49IlhbLTE2XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHhvcgkoQFhbMl0sQFhbMl0sQFhbLTImN10pOwkJIyAiWFstM10iXiJYWy04XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkJIyAiWFswXSJePSJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZwc3JsZAkoQFhbMl0sQFhbMF0sMzEpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZwc2xsZHEoQFhbNF0sQFhbMF0sMTIpOwkJIyAiWFswXSI8PDk2LCBleHRyYWN0IG9uZSBkd29yZAorCSZ2cGFkZGQJKEBYWzBdLEBYWzBdLEBYWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHNybGQJKEBYWzNdLEBYWzRdLDMwKTsKKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFhbMl0pOwkJIyAiWFswXSI8PDw9MQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZwc2xsZAkoQFhbNF0sQFhbNF0sMik7CisJICAmdm1vdmRxYQkoQFhbMl0sJlFXUCg2NCsxNiooKCRYaS02KSUzKSwiZXNwIikpIGlmICgkWGk+NSk7CSMgcmVzdG9yZSBYW10gZnJvbSBiYWNrdHJhY2UgYnVmZmVyCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZweG9yCShAWFswXSxAWFswXSxAWFszXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWzRdKTsJCSMgIlhbMF0iXj0oIlhbMF0iPDw5Nik8PDwyCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCgkWGkpLzUpLCJlc3AiKSk7CSMgS19YWF9YWAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucyBbaWYgYW55XQorCisgICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCit9CisKK3N1YiBYdXBkYXRlX2F2eF8zMl83OSgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiB0byA0OCBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2cGFsaWducihAWFsyXSxAWFstMSY3XSxAWFstMiY3XSw4KTsJIyBjb21wb3NlICJYWy02XSIKKwkmdnB4b3IJKEBYWzBdLEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJeIlhbLTE2XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKworCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTcmN10pOwkjICJYWzBdIl49IlhbLTI4XSIKKwkgICZ2bW92ZHFhCSgmUVdQKDY0KzE2KigoJFhpLTQpJTMpLCJlc3AiKSxAWFstNCY3XSk7CSMgc2F2ZSBYW10gdG8gYmFja3RyYWNlIGJ1ZmZlcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBpZiAoJFhpJTUpIHsKKwkgICZ2bW92ZHFhCShAWFs0XSxAWFszXSk7CSMgInBlcnBldHVhdGUiIEtfWFhfWFguLi4KKwkgfSBlbHNlIHsJCQkjIC4uLiBvciBsb2FkIG5leHQgb25lCisJICAmdm1vdmRxYQkoQFhbNF0sJlFXUCgxMTItMTYrMTYqKCRYaS81KSwiZXNwIikpOworCSB9CisJICAmdnBhZGRkCShAWFszXSxAWFszXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAWFsyXSk7CQkjICJYWzBdIl49IlhbLTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJnZwc3JsZAkoQFhbMl0sQFhbMF0sMzApOworCSAgJnZtb3ZkcWEJKCZRV1AoMCsxNiooKCRYaS0xKSYzKSwiZXNwIiksQFhbM10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHNsbGQJKEBYWzBdLEBYWzBdLDIpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb3IKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cG9yCShAWFswXSxAWFswXSxAWFsyXSk7CSMgIlhbMF0iPDw8PTIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZtb3ZkcWEJKEBYWzJdLCZRV1AoNjQrMTYqKCgkWGktNiklMyksImVzcCIpKSBpZigkWGk8MTkpOwkjIHJlc3RvcmUgWFtdIGZyb20gYmFja3RyYWNlIGJ1ZmZlcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKyAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KK30KKworc3ViIFh1cGxhc3RfYXZ4XzgwKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnBhZGRkCShAWFszXSxAWFszXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZ2bW92ZHFhCSgmUVdQKDArMTYqKCgkWGktMSkmMyksImVzcCIpLEBYWzNdKTsJIyBYW10rSyB4ZmVyIElBTFUKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKwkmbW92CSgkaW5wPUBUWzFdLCZEV1AoMTkyKzQsImVzcCIpKTsKKwkmY21wCSgkaW5wLCZEV1AoMTkyKzgsImVzcCIpKTsKKwkmamUJKCZsYWJlbCgiZG9uZSIpKTsKKworCSZ2bW92ZHFhKEBYWzNdLCZRV1AoMTEyKzQ4LCJlc3AiKSk7CSMgS18wMF8xOQorCSZ2bW92ZHFhKEBYWzJdLCZRV1AoMTEyKzY0LCJlc3AiKSk7CSMgcGJzd2FwIG1hc2sKKwkmdm1vdmRxdShAWFstNCY3XSwmUVdQKDAsJGlucCkpOwkjIGxvYWQgaW5wdXQKKwkmdm1vdmRxdShAWFstMyY3XSwmUVdQKDE2LCRpbnApKTsKKwkmdm1vdmRxdShAWFstMiY3XSwmUVdQKDMyLCRpbnApKTsKKwkmdm1vdmRxdShAWFstMSY3XSwmUVdQKDQ4LCRpbnApKTsKKwkmYWRkCSgkaW5wLDY0KTsKKwkmdnBzaHVmYihAWFstNCY3XSxAWFstNCY3XSxAWFsyXSk7CQkjIGJ5dGUgc3dhcAorCSZtb3YJKCZEV1AoMTkyKzQsImVzcCIpLCRpbnApOworCSZ2bW92ZHFhKCZRV1AoMTEyLTE2LCJlc3AiKSxAWFszXSk7CSMgYm9ycm93IGxhc3QgYmFja3RyYWNlIHNsb3QKKworICAkWGk9MDsKK30KKworc3ViIFhsb29wX2F2eCgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cHNodWZiCShAWFsoJFhpLTMpJjddLEBYWygkWGktMykmN10sQFhbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cGFkZGQJKEBYWyRYaSY3XSxAWFsoJFhpLTQpJjddLEBYWzNdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdm1vdmRxYQkoJlFXUCgwKzE2KiRYaSwiZXNwIiksQFhbJFhpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CisgICRYaSsrOworfQorCitzdWIgWHRhaWxfYXZ4KCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KK30KKworJnNldF9sYWJlbCgibG9vcCIsMTYpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBsYXN0X2F2eF84MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgorCisJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOworCisJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOworCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3BfYXZ4KFwmYm9keV8yMF8zOSk7CisKKwkmbW92CShAVFsxXSwmRFdQKDE5MiwiZXNwIikpOwkjIHVwZGF0ZSBjb250ZXh0CisJJmFkZAkoJEEsJkRXUCgwLEBUWzFdKSk7CisJJmFkZAkoQFRbMF0sJkRXUCg0LEBUWzFdKSk7CQkjICRiCisJJmFkZAkoJEMsJkRXUCg4LEBUWzFdKSk7CisJJm1vdgkoJkRXUCgwLEBUWzFdKSwkQSk7CisJJmFkZAkoJEQsJkRXUCgxMixAVFsxXSkpOworCSZtb3YJKCZEV1AoNCxAVFsxXSksQFRbMF0pOworCSZhZGQJKCRFLCZEV1AoMTYsQFRbMV0pKTsKKwkmbW92CSgmRFdQKDgsQFRbMV0pLCRDKTsKKwkmbW92CSgkQixAVFswXSk7CisJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOworCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKKworCSZqbXAJKCZsYWJlbCgibG9vcCIpKTsKKworJnNldF9sYWJlbCgiZG9uZSIsMTYpOwkJJGo9JHNhdmVkX2o7IEBWPUBzYXZlZF9WOworCisJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOworCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKKwkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CisKKwkmdnplcm9hbGwoKTsKKworCSZtb3YJKEBUWzFdLCZEV1AoMTkyLCJlc3AiKSk7CSMgdXBkYXRlIGNvbnRleHQKKwkmYWRkCSgkQSwmRFdQKDAsQFRbMV0pKTsKKwkmbW92CSgiZXNwIiwmRFdQKDE5MisxMiwiZXNwIikpOwkjIHJlc3RvcmUgJWVzcAorCSZhZGQJKEBUWzBdLCZEV1AoNCxAVFsxXSkpOwkJIyAkYgorCSZhZGQJKCRDLCZEV1AoOCxAVFsxXSkpOworCSZtb3YJKCZEV1AoMCxAVFsxXSksJEEpOworCSZhZGQJKCRELCZEV1AoMTIsQFRbMV0pKTsKKwkmbW92CSgmRFdQKDQsQFRbMV0pLEBUWzBdKTsKKwkmYWRkCSgkRSwmRFdQKDE2LEBUWzFdKSk7CisJJm1vdgkoJkRXUCg4LEBUWzFdKSwkQyk7CisJJm1vdgkoJkRXUCgxMixAVFsxXSksJEQpOworCSZtb3YJKCZEV1AoMTYsQFRbMV0pLCRFKTsKKyZmdW5jdGlvbl9lbmQoIl9zaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4Iik7Cit9Cismc2V0X2xhYmVsKCJLX1hYX1hYIiw2NCk7CismZGF0YV93b3JkKDB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTkpOwkjIEtfMDBfMTkKKyZkYXRhX3dvcmQoMHg2ZWQ5ZWJhMSwweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSk7CSMgS18yMF8zOQorJmRhdGFfd29yZCgweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYywweDhmMWJiY2RjKTsJIyBLXzQwXzU5CismZGF0YV93b3JkKDB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYpOwkjIEtfNjBfNzkKKyZkYXRhX3dvcmQoMHgwMDAxMDIwMywweDA0MDUwNjA3LDB4MDgwOTBhMGIsMHgwYzBkMGUwZik7CSMgcGJzd2FwIG1hc2sKK30KICZhc2NpeigiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHg4NiwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIpOwogCiAmYXNtX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1hbHBoYS5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYWxwaGEucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0YjkyNQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYWxwaGEucGwKQEAgLTAsMCArMSwzMjIgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAorIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgorIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyBTSEExIGJsb2NrIHByb2NlZHVyZSBmb3IgQWxwaGEuCisKKyMgT24gMjEyNjQgcGVyZm9ybWFuY2UgaXMgMzMlIGJldHRlciB0aGFuIGNvZGUgZ2VuZXJhdGVkIGJ5IHZlbmRvcgorIyBjb21waWxlciwgYW5kIDc1JSBiZXR0ZXIgdGhhbiBHQ0MgWzMuNF0sIGFuZCBpbiBhYnNvbHV0ZSB0ZXJtcyBpcworIyA4LjcgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4gSW1wbGVtZW50YXRpb24gZmVhdHVyZXMgdmVjdG9yaXplZAorIyBieXRlIHN3YXAsIGJ1dCBub3QgWHVwZGF0ZS4KKworQFg9KAkiXCQwIiwJIlwkMSIsCSJcJDIiLAkiXCQzIiwJIlwkNCIsCSJcJDUiLAkiXCQ2IiwJIlwkNyIsCisJIlwkOCIsCSJcJDkiLAkiXCQxMCIsCSJcJDExIiwJIlwkMTIiLAkiXCQxMyIsCSJcJDE0IiwJIlwkMTUiKTsKKyRjdHg9ImEwIjsJIyAkMTYKKyRpbnA9ImExIjsKKyRudW09ImEyIjsKKyRBPSJhMyI7CiskQj0iYTQiOwkjIDIwCiskQz0iYTUiOworJEQ9InQ4IjsKKyRFPSJ0OSI7CUBWPSgkQSwkQiwkQywkRCwkRSk7CiskdDA9InQxMCI7CSMgMjQKKyR0MT0idDExIjsKKyR0Mj0icmEiOworJHQzPSJ0MTIiOworJEs9IkFUIjsJIyAyOAorCitzdWIgQk9EWV8wMF8xOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9JGkrMTsKKyRjb2RlLj08PF9fXyBpZiAoJGk9PTApOworCWxkcV91CUBYWzBdLDArMCgkaW5wKQorCWxkcV91CUBYWzFdLDArNygkaW5wKQorX19fCiskY29kZS49PDxfX18gaWYgKCEoJGkmMSkgJiYgJGk8MTQpOworCWxkcV91CUBYWyRpKzJdLCgkaSsyKSo0KzAoJGlucCkKKwlsZHFfdQlAWFskaSszXSwoJGkrMikqNCs3KCRpbnApCitfX18KKyRjb2RlLj08PF9fXyBpZiAoISgkaSYxKSAmJiAkaTwxNSk7CisJZXh0cWwJQFhbJGldLCRpbnAsQFhbJGldCisJZXh0cWgJQFhbJGkrMV0sJGlucCxAWFskaSsxXQorCisJb3IJQFhbJGkrMV0sQFhbJGldLEBYWyRpXQkjIHBhaXIgb2YgMzItYml0IHZhbHVlcyBhcmUgZmV0Y2hlZAorCisJc3JsCUBYWyRpXSwyNCwkdDAJCSMgdmVjdG9yaXplZCBieXRlIHN3YXAKKwlzcmwJQFhbJGldLDgsJHQyCisKKwlzbGwJQFhbJGldLDgsJHQzCisJc2xsCUBYWyRpXSwyNCxAWFskaV0KKwl6YXBub3QJJHQwLDB4MTEsJHQwCisJemFwbm90CSR0MiwweDIyLCR0MgorCisJemFwbm90CUBYWyRpXSwweDg4LEBYWyRpXQorCW9yCSR0MCwkdDIsJHQwCisJemFwbm90CSR0MywweDQ0LCR0MworCXNsbAkkYSw1LCR0MQorCisJb3IJQFhbJGldLCR0MCxAWFskaV0KKwlhZGRsCSRLLCRlLCRlCisJYW5kCSRiLCRjLCR0MgorCXphcG5vdAkkYSwweGYsJGEKKworCW9yCUBYWyRpXSwkdDMsQFhbJGldCisJc3JsCSRhLDI3LCR0MAorCWJpYwkkZCwkYiwkdDMKKwlzbGwJJGIsMzAsJGIKKworCWV4dGxsCUBYWyRpXSw0LEBYWyRpKzFdCSMgZXh0cmFjdCB1cHBlciBoYWxmCisJb3IJJHQyLCR0MywkdDIKKwlhZGRsCUBYWyRpXSwkZSwkZQorCisJYWRkbAkkdDEsJGUsJGUKKwlzcmwJJGIsMzIsJHQzCisJemFwbm90CUBYWyRpXSwweGYsQFhbJGldCisKKwlhZGRsCSR0MCwkZSwkZQorCWFkZGwJJHQyLCRlLCRlCisJb3IJJHQzLCRiLCRiCitfX18KKyRjb2RlLj08PF9fXyBpZiAoKCRpJjEpICYmICRpPDE1KTsKKwlzbGwJJGEsNSwkdDEKKwlhZGRsCSRLLCRlLCRlCisJYW5kCSRiLCRjLCR0MgorCXphcG5vdAkkYSwweGYsJGEKKworCXNybAkkYSwyNywkdDAKKwlhZGRsCUBYWyRpJTE2XSwkZSwkZQorCWJpYwkkZCwkYiwkdDMKKwlzbGwJJGIsMzAsJGIKKworCW9yCSR0MiwkdDMsJHQyCisJYWRkbAkkdDEsJGUsJGUKKwlzcmwJJGIsMzIsJHQzCisJemFwbm90CUBYWyRpXSwweGYsQFhbJGldCisKKwlhZGRsCSR0MCwkZSwkZQorCWFkZGwJJHQyLCRlLCRlCisJb3IJJHQzLCRiLCRiCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk+PTE1KTsJIyB3aXRoIGZvcndhcmQgWHVwZGF0ZQorCXNsbAkkYSw1LCR0MQorCWFkZGwJJEssJGUsJGUKKwlhbmQJJGIsJGMsJHQyCisJeG9yCUBYWygkaisyKSUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCisJemFwbm90CSRhLDB4ZiwkYQorCWFkZGwJQFhbJGklMTZdLCRlLCRlCisJYmljCSRkLCRiLCR0MworCXhvcglAWFsoJGorOCklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNybAkkYSwyNywkdDAKKwlhZGRsCSR0MSwkZSwkZQorCW9yCSR0MiwkdDMsJHQyCisJeG9yCUBYWygkaisxMyklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNsbAkkYiwzMCwkYgorCWFkZGwJJHQwLCRlLCRlCisJc3JsCUBYWyRqJTE2XSwzMSwkdDEKKworCWFkZGwJJHQyLCRlLCRlCisJc3JsCSRiLDMyLCR0MworCWFkZGwJQFhbJGolMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCW9yCSR0MywkYiwkYgorCXphcG5vdAlAWFskaSUxNl0sMHhmLEBYWyRpJTE2XQorCW9yCSR0MSxAWFskaiUxNl0sQFhbJGolMTZdCitfX18KK30KKworc3ViIEJPRFlfMjBfMzkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpKzE7CiskY29kZS49PDxfX18gaWYgKCRpPDc5KTsJIyB3aXRoIGZvcndhcmQgWHVwZGF0ZQorCXNsbAkkYSw1LCR0MQorCWFkZGwJJEssJGUsJGUKKwl6YXBub3QJJGEsMHhmLCRhCisJeG9yCUBYWygkaisyKSUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCisJc2xsCSRiLDMwLCR0MworCWFkZGwJJHQxLCRlLCRlCisJeG9yCSRiLCRjLCR0MgorCXhvcglAWFsoJGorOCklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNybAkkYiwyLCRiCisJYWRkbAlAWFskaSUxNl0sJGUsJGUKKwl4b3IJJGQsJHQyLCR0MgorCXhvcglAWFsoJGorMTMpJTE2XSxAWFskaiUxNl0sQFhbJGolMTZdCisKKwlzcmwJQFhbJGolMTZdLDMxLCR0MQorCWFkZGwJJHQyLCRlLCRlCisJc3JsCSRhLDI3LCR0MAorCWFkZGwJQFhbJGolMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCW9yCSR0MywkYiwkYgorCWFkZGwJJHQwLCRlLCRlCisJb3IJJHQxLEBYWyRqJTE2XSxAWFskaiUxNl0KK19fXworJGNvZGUuPTw8X19fIGlmICgkaTw3Nyk7CisJemFwbm90CUBYWyRpJTE2XSwweGYsQFhbJGklMTZdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk9PTc5KTsJIyB3aXRoIGNvbnRleHQgZmV0Y2gKKwlzbGwJJGEsNSwkdDEKKwlhZGRsCSRLLCRlLCRlCisJemFwbm90CSRhLDB4ZiwkYQorCWxkbAlAWFswXSwwKCRjdHgpCisKKwlzbGwJJGIsMzAsJHQzCisJYWRkbAkkdDEsJGUsJGUKKwl4b3IJJGIsJGMsJHQyCisJbGRsCUBYWzFdLDQoJGN0eCkKKworCXNybAkkYiwyLCRiCisJYWRkbAlAWFskaSUxNl0sJGUsJGUKKwl4b3IJJGQsJHQyLCR0MgorCWxkbAlAWFsyXSw4KCRjdHgpCisKKwlzcmwJJGEsMjcsJHQwCisJYWRkbAkkdDIsJGUsJGUKKwlsZGwJQFhbM10sMTIoJGN0eCkKKworCW9yCSR0MywkYiwkYgorCWFkZGwJJHQwLCRlLCRlCisJbGRsCUBYWzRdLDE2KCRjdHgpCitfX18KK30KKworc3ViIEJPRFlfNDBfNTkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpKzE7CiskY29kZS49PDxfX187CSMgd2l0aCBmb3J3YXJkIFh1cGRhdGUKKwlzbGwJJGEsNSwkdDEKKwlhZGRsCSRLLCRlLCRlCisJemFwbm90CSRhLDB4ZiwkYQorCXhvcglAWFsoJGorMiklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNybAkkYSwyNywkdDAKKwlhbmQJJGIsJGMsJHQyCisJYW5kCSRiLCRkLCR0MworCXhvcglAWFsoJGorOCklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNsbAkkYiwzMCwkYgorCWFkZGwJJHQxLCRlLCRlCisJeG9yCUBYWygkaisxMyklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKworCXNybAlAWFskaiUxNl0sMzEsJHQxCisJYWRkbAkkdDAsJGUsJGUKKwlvcgkkdDIsJHQzLCR0MgorCWFuZAkkYywkZCwkdDMKKworCW9yCSR0MiwkdDMsJHQyCisJc3JsCSRiLDMyLCR0MworCWFkZGwJQFhbJGklMTZdLCRlLCRlCisJYWRkbAlAWFskaiUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCisJb3IJJHQzLCRiLCRiCisJYWRkbAkkdDIsJGUsJGUKKwlvcgkkdDEsQFhbJGolMTZdLEBYWyRqJTE2XQorCXphcG5vdAlAWFskaSUxNl0sMHhmLEBYWyRpJTE2XQorX19fCit9CisKKyRjb2RlPTw8X19fOworI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLmg+CisjaW5jbHVkZSA8cmVnZGVmLmg+CisjZW5kaWYKKworLnRleHQKKworLnNldAlub2F0Cisuc2V0CW5vcmVvcmRlcgorLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLmFsaWduCTUKKy5lbnQJc2hhMV9ibG9ja19kYXRhX29yZGVyCitzaGExX2Jsb2NrX2RhdGFfb3JkZXI6CisJbGRhCXNwLC02NChzcCkKKwlzdHEJcmEsMChzcCkKKwlzdHEJczAsOChzcCkKKwlzdHEJczEsMTYoc3ApCisJc3RxCXMyLDI0KHNwKQorCXN0cQlzMywzMihzcCkKKwlzdHEJczQsNDAoc3ApCisJc3RxCXM1LDQ4KHNwKQorCXN0cQlmcCw1NihzcCkKKwkubWFzawkweDA0MDBmZTAwLC02NAorCS5mcmFtZQlzcCw2NCxyYQorCS5wcm9sb2d1ZSAwCisKKwlsZGwJJEEsMCgkY3R4KQorCWxkbAkkQiw0KCRjdHgpCisJc2xsCSRudW0sNiwkbnVtCisJbGRsCSRDLDgoJGN0eCkKKwlsZGwJJEQsMTIoJGN0eCkKKwlsZGwJJEUsMTYoJGN0eCkKKwlhZGRxCSRpbnAsJG51bSwkbnVtCisKKy5MbG9vcDoKKwkuc2V0CW5vcmVvcmRlcgorCWxkYWgJJEssMjMxNzAoemVybykKKwl6YXBub3QJJEIsMHhmLCRCCisJbGRhCSRLLDMxMTI5KCRLKQkjIEtfMDBfMTkKK19fXworZm9yICgkaT0wOyRpPDIwOyRpKyspIHsgJkJPRFlfMDBfMTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CisKKyRjb2RlLj08PF9fXzsKKwlsZGFoCSRLLDI4Mzc4KHplcm8pCisJbGRhCSRLLC01MjE1KCRLKQkjIEtfMjBfMzkKK19fXworZm9yICg7JGk8NDA7JGkrKykgeyAmQk9EWV8yMF8zOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKworJGNvZGUuPTw8X19fOworCWxkYWgJJEssLTI4OTAwKHplcm8pCisJbGRhCSRLLC0xNzE4OCgkSykJIyBLXzQwXzU5CitfX18KK2ZvciAoOyRpPDYwOyRpKyspIHsgJkJPRFlfNDBfNTkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CisKKyRjb2RlLj08PF9fXzsKKwlsZGFoCSRLLC0xMzcyNSh6ZXJvKQorCWxkYQkkSywtMTU5MTQoJEspCSMgS182MF83OQorX19fCitmb3IgKDskaTw4MDskaSsrKSB7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorCiskY29kZS49PDxfX187CisJYWRkbAlAWFswXSwkQSwkQQorCWFkZGwJQFhbMV0sJEIsJEIKKwlhZGRsCUBYWzJdLCRDLCRDCisJYWRkbAlAWFszXSwkRCwkRAorCWFkZGwJQFhbNF0sJEUsJEUKKwlzdGwJJEEsMCgkY3R4KQorCXN0bAkkQiw0KCRjdHgpCisJYWRkcQkkaW5wLDY0LCRpbnAKKwlzdGwJJEMsOCgkY3R4KQorCXN0bAkkRCwxMigkY3R4KQorCXN0bAkkRSwxNigkY3R4KQorCWNtcHVsdAkkaW5wLCRudW0sJHQxCisJYm5lCSR0MSwuTGxvb3AKKworCS5zZXQJbm9yZW9yZGVyCisJbGRxCXJhLDAoc3ApCisJbGRxCXMwLDgoc3ApCisJbGRxCXMxLDE2KHNwKQorCWxkcQlzMiwyNChzcCkKKwlsZHEJczMsMzIoc3ApCisJbGRxCXM0LDQwKHNwKQorCWxkcQlzNSw0OChzcCkKKwlsZHEJZnAsNTYoc3ApCisJbGRhCXNwLDY0KHNwKQorCXJldAkocmEpCisuZW5kCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLmFzY2lpCSJTSEExIGJsb2NrIHRyYW5zZm9ybSBmb3IgQWxwaGEsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisuYWxpZ24JMgorX19fCiskb3V0cHV0PXNoaWZ0IGFuZCBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworcHJpbnQgJGNvZGU7CitjbG9zZSBTVERPVVQ7CmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY0LWxhcmdlLnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5wbAppbmRleCA3OWUzZjYxLi5kYjgzYzUxIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY0LWxhcmdlLnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucGwKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjIENvcnRleCBBOCBjb3JlIGFuZCBpbiBhYnNvbHV0ZSB0ZXJtcyB+ODcwIGN5Y2xlcyBwZXIgaW5wdXQgYmxvY2sKICMgW29yIDEzLjYgY3ljbGVzIHBlciBieXRlXS4KIAorIyBGZWJydWFyeSAyMDExLgorIworIyBQcm9maWxlci1hc3Npc3RlZCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uIHJlc3VsdGVkIGluIDEwJQorIyBpbXByb3ZlbWVudCBvbiBDb3J0ZXggQTggY29yZSBhbmQgMTIuMiBjeWNsZXMgcGVyIGJ5dGUuCiAKIHdoaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CiBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwpAQCAtNzYsMzEgKzgwLDQxIEBACiAJYWRkCSRlLCRLLCRlLHJvciMyCQkJQCBFKz1LX3h4X3h4CiAJbGRyCSR0MyxbJFhpLCMyKjRdCiAJZW9yCSR0MCwkdDAsJHQxCi0JZW9yCSR0MiwkdDIsJHQzCisJZW9yCSR0MiwkdDIsJHQzCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCSR0MSwkYywkZAkJCUAgRl94eF94eAogCW1vdgkkdDAsJHQwLHJvciMzMQogCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcgkkdDAsJHQwLCR0Mixyb3IjMzEKKwlzdHIJJHQwLFskWGksIy00XSEKIAkkb3B0MQkJCQkJQCBGX3h4X3h4CiAJJG9wdDIJCQkJCUAgRl94eF94eAogCWFkZAkkZSwkZSwkdDAJCQlAIEUrPVhbaV0KLQlzdHIJJHQwLFskWGksIy00XSEKIF9fXwogfQogCiBzdWIgQk9EWV8wMF8xNSB7CiBteSAoJGEsJGIsJGMsJGQsJGUpPUBfOwogJGNvZGUuPTw8X19fOwotCWxkcmIJJHQwLFskaW5wXSwjNAotCWxkcmIJJHQxLFskaW5wLCMtMV0KLQlsZHJiCSR0MixbJGlucCwjLTJdCisjaWYgX19BUk1fQVJDSF9fPDcKKwlsZHJiCSR0MSxbJGlucCwjMl0KKwlsZHJiCSR0MCxbJGlucCwjM10KKwlsZHJiCSR0MixbJGlucCwjMV0KIAlhZGQJJGUsJEssJGUscm9yIzIJCQlAIEUrPUtfMDBfMTkKLQlsZHJiCSR0MyxbJGlucCwjLTNdCi0JYWRkCSRlLCRlLCRhLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0Jb3JyCSR0MCwkdDEsJHQwLGxzbCMyNAorCWxkcmIJJHQzLFskaW5wXSwjNAorCW9ycgkkdDAsJHQwLCR0MSxsc2wjOAogCWVvcgkkdDEsJGMsJGQJCQlAIEZfeHhfeHgKLQlvcnIJJHQwLCR0MCwkdDIsbHNsIzgKLQlvcnIJJHQwLCR0MCwkdDMsbHNsIzE2CisJb3JyCSR0MCwkdDAsJHQyLGxzbCMxNgorCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorCW9ycgkkdDAsJHQwLCR0Myxsc2wjMjQKKyNlbHNlCisJbGRyCSR0MCxbJGlucF0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCSRlLCRLLCRlLHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCSR0MSwkYywkZAkJCUAgRl94eF94eAorCWFkZAkkZSwkZSwkYSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldgkkdDAsJHQwCQkJCUAgYnl0ZSBzd2FwCisjZW5kaWYKKyNlbmRpZgogCWFuZAkkdDEsJGIsJHQxLHJvciMyCiAJYWRkCSRlLCRlLCR0MAkJCUAgRSs9WFtpXQogCWVvcgkkdDEsJHQxLCRkLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCkBAIC0xMzYsNiArMTUwLDggQEAKIH0KIAogJGNvZGU9PDxfX187CisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKwogLnRleHQKIAogLmdsb2JhbAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIKQEAgLTIxMCwxMCArMjI2LDE0IEBACiAJdGVxCSRpbnAsJGxlbgogCWJuZQkuTGxvb3AJCQlAIFsrMThdLCB0b3RhbCAxMzA3CiAKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKyNlbHNlCiAJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9CiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisjZW5kaWYKIC5hbGlnbgkyCiAuTEtfMDBfMTk6CS53b3JkCTB4NWE4Mjc5OTkKIC5MS18yMF8zOToJLndvcmQJMHg2ZWQ5ZWJhMQpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5zIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1hcm12NC1sYXJnZS5zCmluZGV4IDdmNjg3ZDkuLjk3YWQ4YmUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTEtYXJtdjQtbGFyZ2UucworKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLWFybXY0LWxhcmdlLnMKQEAgLTEsMyArMSw1IEBACisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKwogLnRleHQKIAogLmdsb2JhbAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIKQEAgLTE2LDc2ICsxOCwxMjYgQEAKIAltb3YJcjYscjYscm9yIzMwCiAJbW92CXI3LHI3LHJvciMzMAkJQCBbNl0KIC5MXzAwXzE1OgotCWxkcmIJcjksW3IxXSwjNAotCWxkcmIJcjEwLFtyMSwjLTFdCi0JbGRyYglyMTEsW3IxLCMtMl0KKyNpZiBfX0FSTV9BUkNIX188NworCWxkcmIJcjEwLFtyMSwjMl0KKwlsZHJiCXI5LFtyMSwjM10KKwlsZHJiCXIxMSxbcjEsIzFdCiAJYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0JbGRyYglyMTIsW3IxLCMtM10KLQlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjkscjEwLHI5LGxzbCMyNAorCWxkcmIJcjEyLFtyMV0sIzQKKwlvcnIJcjkscjkscjEwLGxzbCM4CiAJZW9yCXIxMCxyNSxyNgkJCUAgRl94eF94eAotCW9ycglyOSxyOSxyMTEsbHNsIzgKLQlvcnIJcjkscjkscjEyLGxzbCMxNgorCW9ycglyOSxyOSxyMTEsbHNsIzE2CisJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHI5LHIxMixsc2wjMjQKKyNlbHNlCisJbGRyCXI5LFtyMV0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCXIxMCxyNSxyNgkJCUAgRl94eF94eAorCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOSxyOQkJCQlAIGJ5dGUgc3dhcAorI2VuZGlmCisjZW5kaWYKIAlhbmQJcjEwLHI0LHIxMCxyb3IjMgogCWFkZAlyNyxyNyxyOQkJCUAgRSs9WFtpXQogCWVvcglyMTAscjEwLHI2LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCiAJc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjcscjcscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjksW3IxXSwjNAotCWxkcmIJcjEwLFtyMSwjLTFdCi0JbGRyYglyMTEsW3IxLCMtMl0KKyNpZiBfX0FSTV9BUkNIX188NworCWxkcmIJcjEwLFtyMSwjMl0KKwlsZHJiCXI5LFtyMSwjM10KKwlsZHJiCXIxMSxbcjEsIzFdCiAJYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0JbGRyYglyMTIsW3IxLCMtM10KLQlhZGQJcjYscjYscjcscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjkscjEwLHI5LGxzbCMyNAorCWxkcmIJcjEyLFtyMV0sIzQKKwlvcnIJcjkscjkscjEwLGxzbCM4CiAJZW9yCXIxMCxyNCxyNQkJCUAgRl94eF94eAotCW9ycglyOSxyOSxyMTEsbHNsIzgKLQlvcnIJcjkscjkscjEyLGxzbCMxNgorCW9ycglyOSxyOSxyMTEsbHNsIzE2CisJYWRkCXI2LHI2LHI3LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHI5LHIxMixsc2wjMjQKKyNlbHNlCisJbGRyCXI5LFtyMV0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCXI2LHI4LHI2LHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCXIxMCxyNCxyNQkJCUAgRl94eF94eAorCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOSxyOQkJCQlAIGJ5dGUgc3dhcAorI2VuZGlmCisjZW5kaWYKIAlhbmQJcjEwLHIzLHIxMCxyb3IjMgogCWFkZAlyNixyNixyOQkJCUAgRSs9WFtpXQogCWVvcglyMTAscjEwLHI1LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCiAJc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjYscjYscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjksW3IxXSwjNAotCWxkcmIJcjEwLFtyMSwjLTFdCi0JbGRyYglyMTEsW3IxLCMtMl0KKyNpZiBfX0FSTV9BUkNIX188NworCWxkcmIJcjEwLFtyMSwjMl0KKwlsZHJiCXI5LFtyMSwjM10KKwlsZHJiCXIxMSxbcjEsIzFdCiAJYWRkCXI1LHI4LHI1LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0JbGRyYglyMTIsW3IxLCMtM10KLQlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjkscjEwLHI5LGxzbCMyNAorCWxkcmIJcjEyLFtyMV0sIzQKKwlvcnIJcjkscjkscjEwLGxzbCM4CiAJZW9yCXIxMCxyMyxyNAkJCUAgRl94eF94eAotCW9ycglyOSxyOSxyMTEsbHNsIzgKLQlvcnIJcjkscjkscjEyLGxzbCMxNgorCW9ycglyOSxyOSxyMTEsbHNsIzE2CisJYWRkCXI1LHI1LHI2LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHI5LHIxMixsc2wjMjQKKyNlbHNlCisJbGRyCXI5LFtyMV0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCXI1LHI4LHI1LHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCXIxMCxyMyxyNAkJCUAgRl94eF94eAorCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOSxyOQkJCQlAIGJ5dGUgc3dhcAorI2VuZGlmCisjZW5kaWYKIAlhbmQJcjEwLHI3LHIxMCxyb3IjMgogCWFkZAlyNSxyNSxyOQkJCUAgRSs9WFtpXQogCWVvcglyMTAscjEwLHI0LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCiAJc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjUscjUscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjksW3IxXSwjNAotCWxkcmIJcjEwLFtyMSwjLTFdCi0JbGRyYglyMTEsW3IxLCMtMl0KKyNpZiBfX0FSTV9BUkNIX188NworCWxkcmIJcjEwLFtyMSwjMl0KKwlsZHJiCXI5LFtyMSwjM10KKwlsZHJiCXIxMSxbcjEsIzFdCiAJYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0JbGRyYglyMTIsW3IxLCMtM10KLQlhZGQJcjQscjQscjUscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjkscjEwLHI5LGxzbCMyNAorCWxkcmIJcjEyLFtyMV0sIzQKKwlvcnIJcjkscjkscjEwLGxzbCM4CiAJZW9yCXIxMCxyNyxyMwkJCUAgRl94eF94eAotCW9ycglyOSxyOSxyMTEsbHNsIzgKLQlvcnIJcjkscjkscjEyLGxzbCMxNgorCW9ycglyOSxyOSxyMTEsbHNsIzE2CisJYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHI5LHIxMixsc2wjMjQKKyNlbHNlCisJbGRyCXI5LFtyMV0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCXIxMCxyNyxyMwkJCUAgRl94eF94eAorCWFkZAlyNCxyNCxyNSxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOSxyOQkJCQlAIGJ5dGUgc3dhcAorI2VuZGlmCisjZW5kaWYKIAlhbmQJcjEwLHI2LHIxMCxyb3IjMgogCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQogCWVvcglyMTAscjEwLHIzLHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCiAJc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjQscjQscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQotCWxkcmIJcjksW3IxXSwjNAotCWxkcmIJcjEwLFtyMSwjLTFdCi0JbGRyYglyMTEsW3IxLCMtMl0KKyNpZiBfX0FSTV9BUkNIX188NworCWxkcmIJcjEwLFtyMSwjMl0KKwlsZHJiCXI5LFtyMSwjM10KKwlsZHJiCXIxMSxbcjEsIzFdCiAJYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LXzAwXzE5Ci0JbGRyYglyMTIsW3IxLCMtM10KLQlhZGQJcjMscjMscjQscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKLQlvcnIJcjkscjEwLHI5LGxzbCMyNAorCWxkcmIJcjEyLFtyMV0sIzQKKwlvcnIJcjkscjkscjEwLGxzbCM4CiAJZW9yCXIxMCxyNixyNwkJCUAgRl94eF94eAotCW9ycglyOSxyOSxyMTEsbHNsIzgKLQlvcnIJcjkscjkscjEyLGxzbCMxNgorCW9ycglyOSxyOSxyMTEsbHNsIzE2CisJYWRkCXIzLHIzLHI0LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCisJb3JyCXI5LHI5LHIxMixsc2wjMjQKKyNlbHNlCisJbGRyCXI5LFtyMV0sIzQJCQlAIGhhbmRsZXMgdW5hbGlnbmVkCisJYWRkCXIzLHI4LHIzLHJvciMyCQkJQCBFKz1LXzAwXzE5CisJZW9yCXIxMCxyNixyNwkJCUAgRl94eF94eAorCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorI2lmZGVmIF9fQVJNRUxfXworCXJldglyOSxyOQkJCQlAIGJ5dGUgc3dhcAorI2VuZGlmCisjZW5kaWYKIAlhbmQJcjEwLHI1LHIxMCxyb3IjMgogCWFkZAlyMyxyMyxyOQkJCUAgRSs9WFtpXQogCWVvcglyMTAscjEwLHI3LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCkBAIC05NCwxNiArMTQ2LDI2IEBACiAJdGVxCXIxNCxzcAogCWJuZQkuTF8wMF8xNQkJQCBbKCgxMSs0KSo1KzIpKjNdCiAJc3ViCXNwLHNwLCM1KjQKLQlsZHJiCXI5LFtyMV0sIzQKLQlsZHJiCXIxMCxbcjEsIy0xXQotCWxkcmIJcjExLFtyMSwjLTJdCisjaWYgX19BUk1fQVJDSF9fPDcKKwlsZHJiCXIxMCxbcjEsIzJdCisJbGRyYglyOSxbcjEsIzNdCisJbGRyYglyMTEsW3IxLCMxXQogCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S18wMF8xOQotCWxkcmIJcjEyLFtyMSwjLTNdCi0JYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCi0Jb3JyCXI5LHIxMCxyOSxsc2wjMjQKKwlsZHJiCXIxMixbcjFdLCM0CisJb3JyCXI5LHI5LHIxMCxsc2wjOAogCWVvcglyMTAscjUscjYJCQlAIEZfeHhfeHgKLQlvcnIJcjkscjkscjExLGxzbCM4Ci0Jb3JyCXI5LHI5LHIxMixsc2wjMTYKKwlvcnIJcjkscjkscjExLGxzbCMxNgorCWFkZAlyNyxyNyxyMyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQorCW9ycglyOSxyOSxyMTIsbHNsIzI0CisjZWxzZQorCWxkcglyOSxbcjFdLCM0CQkJQCBoYW5kbGVzIHVuYWxpZ25lZAorCWFkZAlyNyxyOCxyNyxyb3IjMgkJCUAgRSs9S18wMF8xOQorCWVvcglyMTAscjUscjYJCQlAIEZfeHhfeHgKKwlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKKyNpZmRlZiBfX0FSTUVMX18KKwlyZXYJcjkscjkJCQkJQCBieXRlIHN3YXAKKyNlbmRpZgorI2VuZGlmCiAJYW5kCXIxMCxyNCxyMTAscm9yIzIKIAlhZGQJcjcscjcscjkJCQlAIEUrPVhbaV0KIAllb3IJcjEwLHIxMCxyNixyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQpAQCAtMTE1LDE1ICsxNzcsMTUgQEAKIAlhZGQJcjYscjgscjYscm9yIzIJCQlAIEUrPUtfeHhfeHgKIAlsZHIJcjEyLFtyMTQsIzIqNF0KIAllb3IJcjkscjkscjEwCi0JZW9yCXIxMSxyMTEscjEyCisJZW9yCXIxMSxyMTEscjEyCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCXIxMCxyNCxyNQkJCUAgRl94eF94eAogCW1vdglyOSxyOSxyb3IjMzEKIAlhZGQJcjYscjYscjcscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKIAllb3IJcjkscjkscjExLHJvciMzMQorCXN0cglyOSxbcjE0LCMtNF0hCiAJYW5kIHIxMCxyMyxyMTAscm9yIzIJCQkJCUAgRl94eF94eAogCQkJCQkJQCBGX3h4X3h4CiAJYWRkCXI2LHI2LHI5CQkJQCBFKz1YW2ldCi0Jc3RyCXI5LFtyMTQsIy00XSEKIAllb3IJcjEwLHIxMCxyNSxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQogCWFkZAlyNixyNixyMTAJCQlAIEUrPUZfMDBfMTkoQixDLEQpCiAJbGRyCXI5LFtyMTQsIzE1KjRdCkBAIC0xMzIsMTUgKzE5NCwxNSBAQAogCWFkZAlyNSxyOCxyNSxyb3IjMgkJCUAgRSs9S194eF94eAogCWxkcglyMTIsW3IxNCwjMio0XQogCWVvcglyOSxyOSxyMTAKLQllb3IJcjExLHIxMSxyMTIKKwllb3IJcjExLHIxMSxyMTIJCQlAIDEgY3ljbGUgc3RhbGwKIAllb3IJcjEwLHIzLHI0CQkJQCBGX3h4X3h4CiAJbW92CXI5LHI5LHJvciMzMQogCWFkZAlyNSxyNSxyNixyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcglyOSxyOSxyMTEscm9yIzMxCisJc3RyCXI5LFtyMTQsIy00XSEKIAlhbmQgcjEwLHI3LHIxMCxyb3IjMgkJCQkJQCBGX3h4X3h4CiAJCQkJCQlAIEZfeHhfeHgKIAlhZGQJcjUscjUscjkJCQlAIEUrPVhbaV0KLQlzdHIJcjksW3IxNCwjLTRdIQogCWVvcglyMTAscjEwLHI0LHJvciMyCQlAIEZfMDBfMTkoQixDLEQpCiAJYWRkCXI1LHI1LHIxMAkJCUAgRSs9Rl8wMF8xOShCLEMsRCkKIAlsZHIJcjksW3IxNCwjMTUqNF0KQEAgLTE0OSwxNSArMjExLDE1IEBACiAJYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LX3h4X3h4CiAJbGRyCXIxMixbcjE0LCMyKjRdCiAJZW9yCXI5LHI5LHIxMAotCWVvcglyMTEscjExLHIxMgorCWVvcglyMTEscjExLHIxMgkJCUAgMSBjeWNsZSBzdGFsbAogCWVvcglyMTAscjcscjMJCQlAIEZfeHhfeHgKIAltb3YJcjkscjkscm9yIzMxCiAJYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCiAJZW9yCXI5LHI5LHIxMSxyb3IjMzEKKwlzdHIJcjksW3IxNCwjLTRdIQogCWFuZCByMTAscjYscjEwLHJvciMyCQkJCQlAIEZfeHhfeHgKIAkJCQkJCUAgRl94eF94eAogCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQotCXN0cglyOSxbcjE0LCMtNF0hCiAJZW9yCXIxMCxyMTAscjMscm9yIzIJCUAgRl8wMF8xOShCLEMsRCkKIAlhZGQJcjQscjQscjEwCQkJQCBFKz1GXzAwXzE5KEIsQyxEKQogCWxkcglyOSxbcjE0LCMxNSo0XQpAQCAtMTY2LDE1ICsyMjgsMTUgQEAKIAlhZGQJcjMscjgscjMscm9yIzIJCQlAIEUrPUtfeHhfeHgKIAlsZHIJcjEyLFtyMTQsIzIqNF0KIAllb3IJcjkscjkscjEwCi0JZW9yCXIxMSxyMTEscjEyCisJZW9yCXIxMSxyMTEscjEyCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCXIxMCxyNixyNwkJCUAgRl94eF94eAogCW1vdglyOSxyOSxyb3IjMzEKIAlhZGQJcjMscjMscjQscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKIAllb3IJcjkscjkscjExLHJvciMzMQorCXN0cglyOSxbcjE0LCMtNF0hCiAJYW5kIHIxMCxyNSxyMTAscm9yIzIJCQkJCUAgRl94eF94eAogCQkJCQkJQCBGX3h4X3h4CiAJYWRkCXIzLHIzLHI5CQkJQCBFKz1YW2ldCi0Jc3RyCXI5LFtyMTQsIy00XSEKIAllb3IJcjEwLHIxMCxyNyxyb3IjMgkJQCBGXzAwXzE5KEIsQyxEKQogCWFkZAlyMyxyMyxyMTAJCQlAIEUrPUZfMDBfMTkoQixDLEQpCiAKQEAgLTE4OCwxNSArMjUwLDE1IEBACiAJYWRkCXI3LHI4LHI3LHJvciMyCQkJQCBFKz1LX3h4X3h4CiAJbGRyCXIxMixbcjE0LCMyKjRdCiAJZW9yCXI5LHI5LHIxMAotCWVvcglyMTEscjExLHIxMgorCWVvcglyMTEscjExLHIxMgkJCUAgMSBjeWNsZSBzdGFsbAogCWVvcglyMTAscjUscjYJCQlAIEZfeHhfeHgKIAltb3YJcjkscjkscm9yIzMxCiAJYWRkCXI3LHI3LHIzLHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCiAJZW9yCXI5LHI5LHIxMSxyb3IjMzEKKwlzdHIJcjksW3IxNCwjLTRdIQogCWVvciByMTAscjQscjEwLHJvciMyCQkJCQlAIEZfeHhfeHgKIAkJCQkJCUAgRl94eF94eAogCWFkZAlyNyxyNyxyOQkJCUAgRSs9WFtpXQotCXN0cglyOSxbcjE0LCMtNF0hCiAJYWRkCXI3LHI3LHIxMAkJCUAgRSs9Rl8yMF8zOShCLEMsRCkKIAlsZHIJcjksW3IxNCwjMTUqNF0KIAlsZHIJcjEwLFtyMTQsIzEzKjRdCkBAIC0yMDQsMTUgKzI2NiwxNSBAQAogCWFkZAlyNixyOCxyNixyb3IjMgkJCUAgRSs9S194eF94eAogCWxkcglyMTIsW3IxNCwjMio0XQogCWVvcglyOSxyOSxyMTAKLQllb3IJcjExLHIxMSxyMTIKKwllb3IJcjExLHIxMSxyMTIJCQlAIDEgY3ljbGUgc3RhbGwKIAllb3IJcjEwLHI0LHI1CQkJQCBGX3h4X3h4CiAJbW92CXI5LHI5LHJvciMzMQogCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcglyOSxyOSxyMTEscm9yIzMxCisJc3RyCXI5LFtyMTQsIy00XSEKIAllb3IgcjEwLHIzLHIxMCxyb3IjMgkJCQkJQCBGX3h4X3h4CiAJCQkJCQlAIEZfeHhfeHgKIAlhZGQJcjYscjYscjkJCQlAIEUrPVhbaV0KLQlzdHIJcjksW3IxNCwjLTRdIQogCWFkZAlyNixyNixyMTAJCQlAIEUrPUZfMjBfMzkoQixDLEQpCiAJbGRyCXI5LFtyMTQsIzE1KjRdCiAJbGRyCXIxMCxbcjE0LCMxMyo0XQpAQCAtMjIwLDE1ICsyODIsMTUgQEAKIAlhZGQJcjUscjgscjUscm9yIzIJCQlAIEUrPUtfeHhfeHgKIAlsZHIJcjEyLFtyMTQsIzIqNF0KIAllb3IJcjkscjkscjEwCi0JZW9yCXIxMSxyMTEscjEyCisJZW9yCXIxMSxyMTEscjEyCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCXIxMCxyMyxyNAkJCUAgRl94eF94eAogCW1vdglyOSxyOSxyb3IjMzEKIAlhZGQJcjUscjUscjYscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKIAllb3IJcjkscjkscjExLHJvciMzMQorCXN0cglyOSxbcjE0LCMtNF0hCiAJZW9yIHIxMCxyNyxyMTAscm9yIzIJCQkJCUAgRl94eF94eAogCQkJCQkJQCBGX3h4X3h4CiAJYWRkCXI1LHI1LHI5CQkJQCBFKz1YW2ldCi0Jc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjUscjUscjEwCQkJQCBFKz1GXzIwXzM5KEIsQyxEKQogCWxkcglyOSxbcjE0LCMxNSo0XQogCWxkcglyMTAsW3IxNCwjMTMqNF0KQEAgLTIzNiwxNSArMjk4LDE1IEBACiAJYWRkCXI0LHI4LHI0LHJvciMyCQkJQCBFKz1LX3h4X3h4CiAJbGRyCXIxMixbcjE0LCMyKjRdCiAJZW9yCXI5LHI5LHIxMAotCWVvcglyMTEscjExLHIxMgorCWVvcglyMTEscjExLHIxMgkJCUAgMSBjeWNsZSBzdGFsbAogCWVvcglyMTAscjcscjMJCQlAIEZfeHhfeHgKIAltb3YJcjkscjkscm9yIzMxCiAJYWRkCXI0LHI0LHI1LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCiAJZW9yCXI5LHI5LHIxMSxyb3IjMzEKKwlzdHIJcjksW3IxNCwjLTRdIQogCWVvciByMTAscjYscjEwLHJvciMyCQkJCQlAIEZfeHhfeHgKIAkJCQkJCUAgRl94eF94eAogCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQotCXN0cglyOSxbcjE0LCMtNF0hCiAJYWRkCXI0LHI0LHIxMAkJCUAgRSs9Rl8yMF8zOShCLEMsRCkKIAlsZHIJcjksW3IxNCwjMTUqNF0KIAlsZHIJcjEwLFtyMTQsIzEzKjRdCkBAIC0yNTIsMTUgKzMxNCwxNSBAQAogCWFkZAlyMyxyOCxyMyxyb3IjMgkJCUAgRSs9S194eF94eAogCWxkcglyMTIsW3IxNCwjMio0XQogCWVvcglyOSxyOSxyMTAKLQllb3IJcjExLHIxMSxyMTIKKwllb3IJcjExLHIxMSxyMTIJCQlAIDEgY3ljbGUgc3RhbGwKIAllb3IJcjEwLHI2LHI3CQkJQCBGX3h4X3h4CiAJbW92CXI5LHI5LHJvciMzMQogCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcglyOSxyOSxyMTEscm9yIzMxCisJc3RyCXI5LFtyMTQsIy00XSEKIAllb3IgcjEwLHI1LHIxMCxyb3IjMgkJCQkJQCBGX3h4X3h4CiAJCQkJCQlAIEZfeHhfeHgKIAlhZGQJcjMscjMscjkJCQlAIEUrPVhbaV0KLQlzdHIJcjksW3IxNCwjLTRdIQogCWFkZAlyMyxyMyxyMTAJCQlAIEUrPUZfMjBfMzkoQixDLEQpCiAJdGVxCXIxNCxzcAkJCUAgcHJlc2VydmUgY2FycnkKIAlibmUJLkxfMjBfMzlfb3JfNjBfNzkJQCBbKygoMTIrMykqNSsyKSo0XQpAQCAtMjc1LDE1ICszMzcsMTUgQEAKIAlhZGQJcjcscjgscjcscm9yIzIJCQlAIEUrPUtfeHhfeHgKIAlsZHIJcjEyLFtyMTQsIzIqNF0KIAllb3IJcjkscjkscjEwCi0JZW9yCXIxMSxyMTEscjEyCisJZW9yCXIxMSxyMTEscjEyCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCXIxMCxyNSxyNgkJCUAgRl94eF94eAogCW1vdglyOSxyOSxyb3IjMzEKIAlhZGQJcjcscjcscjMscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKIAllb3IJcjkscjkscjExLHJvciMzMQorCXN0cglyOSxbcjE0LCMtNF0hCiAJYW5kIHIxMCxyNCxyMTAscm9yIzIJCQkJCUAgRl94eF94eAogCWFuZCByMTEscjUscjYJCQkJCUAgRl94eF94eAogCWFkZAlyNyxyNyxyOQkJCUAgRSs9WFtpXQotCXN0cglyOSxbcjE0LCMtNF0hCiAJYWRkCXI3LHI3LHIxMAkJCUAgRSs9Rl80MF81OShCLEMsRCkKIAlhZGQJcjcscjcscjExLHJvciMyCiAJbGRyCXI5LFtyMTQsIzE1KjRdCkBAIC0yOTIsMTUgKzM1NCwxNSBAQAogCWFkZAlyNixyOCxyNixyb3IjMgkJCUAgRSs9S194eF94eAogCWxkcglyMTIsW3IxNCwjMio0XQogCWVvcglyOSxyOSxyMTAKLQllb3IJcjExLHIxMSxyMTIKKwllb3IJcjExLHIxMSxyMTIJCQlAIDEgY3ljbGUgc3RhbGwKIAllb3IJcjEwLHI0LHI1CQkJQCBGX3h4X3h4CiAJbW92CXI5LHI5LHJvciMzMQogCWFkZAlyNixyNixyNyxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcglyOSxyOSxyMTEscm9yIzMxCisJc3RyCXI5LFtyMTQsIy00XSEKIAlhbmQgcjEwLHIzLHIxMCxyb3IjMgkJCQkJQCBGX3h4X3h4CiAJYW5kIHIxMSxyNCxyNQkJCQkJQCBGX3h4X3h4CiAJYWRkCXI2LHI2LHI5CQkJQCBFKz1YW2ldCi0Jc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjYscjYscjEwCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQogCWFkZAlyNixyNixyMTEscm9yIzIKIAlsZHIJcjksW3IxNCwjMTUqNF0KQEAgLTMwOSwxNSArMzcxLDE1IEBACiAJYWRkCXI1LHI4LHI1LHJvciMyCQkJQCBFKz1LX3h4X3h4CiAJbGRyCXIxMixbcjE0LCMyKjRdCiAJZW9yCXI5LHI5LHIxMAotCWVvcglyMTEscjExLHIxMgorCWVvcglyMTEscjExLHIxMgkJCUAgMSBjeWNsZSBzdGFsbAogCWVvcglyMTAscjMscjQJCQlAIEZfeHhfeHgKIAltb3YJcjkscjkscm9yIzMxCiAJYWRkCXI1LHI1LHI2LHJvciMyNwkJCUAgRSs9Uk9SKEEsMjcpCiAJZW9yCXI5LHI5LHIxMSxyb3IjMzEKKwlzdHIJcjksW3IxNCwjLTRdIQogCWFuZCByMTAscjcscjEwLHJvciMyCQkJCQlAIEZfeHhfeHgKIAlhbmQgcjExLHIzLHI0CQkJCQlAIEZfeHhfeHgKIAlhZGQJcjUscjUscjkJCQlAIEUrPVhbaV0KLQlzdHIJcjksW3IxNCwjLTRdIQogCWFkZAlyNSxyNSxyMTAJCQlAIEUrPUZfNDBfNTkoQixDLEQpCiAJYWRkCXI1LHI1LHIxMSxyb3IjMgogCWxkcglyOSxbcjE0LCMxNSo0XQpAQCAtMzI2LDE1ICszODgsMTUgQEAKIAlhZGQJcjQscjgscjQscm9yIzIJCQlAIEUrPUtfeHhfeHgKIAlsZHIJcjEyLFtyMTQsIzIqNF0KIAllb3IJcjkscjkscjEwCi0JZW9yCXIxMSxyMTEscjEyCisJZW9yCXIxMSxyMTEscjEyCQkJQCAxIGN5Y2xlIHN0YWxsCiAJZW9yCXIxMCxyNyxyMwkJCUAgRl94eF94eAogCW1vdglyOSxyOSxyb3IjMzEKIAlhZGQJcjQscjQscjUscm9yIzI3CQkJQCBFKz1ST1IoQSwyNykKIAllb3IJcjkscjkscjExLHJvciMzMQorCXN0cglyOSxbcjE0LCMtNF0hCiAJYW5kIHIxMCxyNixyMTAscm9yIzIJCQkJCUAgRl94eF94eAogCWFuZCByMTEscjcscjMJCQkJCUAgRl94eF94eAogCWFkZAlyNCxyNCxyOQkJCUAgRSs9WFtpXQotCXN0cglyOSxbcjE0LCMtNF0hCiAJYWRkCXI0LHI0LHIxMAkJCUAgRSs9Rl80MF81OShCLEMsRCkKIAlhZGQJcjQscjQscjExLHJvciMyCiAJbGRyCXI5LFtyMTQsIzE1KjRdCkBAIC0zNDMsMTUgKzQwNSwxNSBAQAogCWFkZAlyMyxyOCxyMyxyb3IjMgkJCUAgRSs9S194eF94eAogCWxkcglyMTIsW3IxNCwjMio0XQogCWVvcglyOSxyOSxyMTAKLQllb3IJcjExLHIxMSxyMTIKKwllb3IJcjExLHIxMSxyMTIJCQlAIDEgY3ljbGUgc3RhbGwKIAllb3IJcjEwLHI2LHI3CQkJQCBGX3h4X3h4CiAJbW92CXI5LHI5LHJvciMzMQogCWFkZAlyMyxyMyxyNCxyb3IjMjcJCQlAIEUrPVJPUihBLDI3KQogCWVvcglyOSxyOSxyMTEscm9yIzMxCisJc3RyCXI5LFtyMTQsIy00XSEKIAlhbmQgcjEwLHI1LHIxMCxyb3IjMgkJCQkJQCBGX3h4X3h4CiAJYW5kIHIxMSxyNixyNwkJCQkJQCBGX3h4X3h4CiAJYWRkCXIzLHIzLHI5CQkJQCBFKz1YW2ldCi0Jc3RyCXI5LFtyMTQsIy00XSEKIAlhZGQJcjMscjMscjEwCQkJQCBFKz1GXzQwXzU5KEIsQyxEKQogCWFkZAlyMyxyMyxyMTEscm9yIzIKIAl0ZXEJcjE0LHNwCkBAIC0zNzMsMTAgKzQzNSwxNCBAQAogCXRlcQlyMSxyMgogCWJuZQkuTGxvb3AJCQlAIFsrMThdLCB0b3RhbCAxMzA3CiAKKyNpZiBfX0FSTV9BUkNIX18+PTUKKwlsZG1pYQlzcCEse3I0LXIxMixwY30KKyNlbHNlCiAJbGRtaWEJc3AhLHtyNC1yMTIsbHJ9CiAJdHN0CWxyLCMxCiAJbW92ZXEJcGMsbHIJCQlAIGJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggVjQsIHlldAogCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgogLmFsaWduCTIKIC5MS18wMF8xOToJLndvcmQJMHg1YTgyNzk5OQogLkxLXzIwXzM5Ogkud29yZAkweDZlZDllYmExCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGExLWlhNjQucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLWlhNjQucGwKaW5kZXggNTFjNGY0Ny4uZGIyOGYwOCAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhMS1pYTY0LnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtaWE2NC5wbApAQCAtMTUsNyArMTUsNyBAQAogIyBpcyA+NTAlIGJldHRlciB0aGFuIEhQIEMgYW5kID4yeCBiZXR0ZXIgdGhhbiBnY2MuCiAKICRjb2RlPTw8X19fOwotLmlkZW50ICBcInNoYTEtaWE2NC5zLCB2ZXJzaW9uIDEuMlwiCisuaWRlbnQgIFwic2hhMS1pYTY0LnMsIHZlcnNpb24gMS4zXCIKIC5pZGVudCAgXCJJQS02NCBJU0EgYXJ0d29yayBieSBBbmR5IFBvbHlha292IDxhcHByb1xAZnkuY2hhbG1lcnMuc2U+XCIKIC5leHBsaWNpdAogCkBAIC0yNiwxNCArMjYsMTAgQEAKICAgICAkQUREUD0iYWRkcDQiOwogICAgIGZvciAoQEFSR1YpIHsgJEFERFA9ImFkZCIgaWYgKC9bXCtERHxcLW1scF02NC8pOyB9CiB9IGVsc2UgeyAkQUREUD0iYWRkIjsgfQotZm9yIChAQVJHVikgewkkYmlnX2VuZGlhbj0xIGlmICgvXC1EQl9FTkRJQU4vKTsKLQkJJGJpZ19lbmRpYW49MCBpZiAoL1wtRExfRU5ESUFOLyk7ICAgfQotaWYgKCFkZWZpbmVkKCRiaWdfZW5kaWFuKSkKLQkgICAgewkkYmlnX2VuZGlhbj0odW5wYWNrKCdMJyxwYWNrKCdOJywxKSk9PTEpOyAgIH0KIAogIyRodW1hbj0xOwogaWYgKCRodW1hbikgewkjIHVzZWZ1bCBmb3IgdmlzdWFsIGNvZGUgYXVkaXRpbmcuLi4KLQkoJEEsJEIsJEMsJEQsJEUsJFQpICAgPSAoIkEiLCJCIiwiQyIsIkQiLCJFIiwiVCIpOworCSgkQSwkQiwkQywkRCwkRSkgICA9ICgiQSIsIkIiLCJDIiwiRCIsIkUiKTsKIAkoJGgwLCRoMSwkaDIsJGgzLCRoNCkgPSAoImgwIiwiaDEiLCJoMiIsImgzIiwiaDQiKTsKIAkoJEtfMDBfMTksICRLXzIwXzM5LCAkS180MF81OSwgJEtfNjBfNzkpID0KIAkgICAgKAkiS18wMF8xOSIsIktfMjBfMzkiLCJLXzQwXzU5IiwiS182MF83OSIJKTsKQEAgLTQxLDQ3ICszNyw1MCBAQAogCQkiWDgiLCAiWDkiLCJYMTAiLCJYMTEiLCJYMTIiLCJYMTMiLCJYMTQiLCJYMTUiCSk7CiB9CiBlbHNlIHsKLQkoJEEsJEIsJEMsJEQsJEUsJFQpICAgPSAoImxvYzAiLCJsb2MxIiwibG9jMiIsImxvYzMiLCJsb2M0IiwibG9jNSIpOwotCSgkaDAsJGgxLCRoMiwkaDMsJGg0KSA9ICgibG9jNiIsImxvYzciLCJsb2M4IiwibG9jOSIsImxvYzEwIik7CisJKCRBLCRCLCRDLCRELCRFKSAgID0gICAgKCJsb2MwIiwibG9jMSIsImxvYzIiLCJsb2MzIiwibG9jNCIpOworCSgkaDAsJGgxLCRoMiwkaDMsJGg0KSA9ICgibG9jNSIsImxvYzYiLCJsb2M3IiwibG9jOCIsImxvYzkiKTsKIAkoJEtfMDBfMTksICRLXzIwXzM5LCAkS180MF81OSwgJEtfNjBfNzkpID0KLQkgICAgKAkicjE0IiwgInIxNSIsICJsb2MxMSIsICJsb2MxMiIJKTsKKwkgICAgKAkicjE0IiwgInIxNSIsICJsb2MxMCIsICJsb2MxMSIJKTsKIAlAWD0gKAkicjE2IiwgInIxNyIsICJyMTgiLCAicjE5IiwgInIyMCIsICJyMjEiLCAicjIyIiwgInIyMyIsCiAJCSJyMjQiLCAicjI1IiwgInIyNiIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAicjMxIgkpOwogfQogCiBzdWIgQk9EWV8wMF8xNSB7CiBsb2NhbAkqY29kZT1zaGlmdDsKLWxvY2FsCSgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87CitteQkoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkJJGo9JGkrMTsKK215CSRYbj1AWFskaiUxNl07CiAKICRjb2RlLj08PF9fXyBpZiAoJGk9PTApOwoteyAubW1pOwlsZDEJJFhbJGkmMHhmXT1baW5wXSwyCSAgICAvLyBNU0IKK3sgLm1taTsJbGQxCSRYWyRpXT1baW5wXSwyCQkgICAgLy8gTVNCCiAJbGQxCXRtcDI9W3RtcDNdLDIJCX07OwogeyAubW1pOwlsZDEJdG1wMD1baW5wXSwyCiAJbGQxCXRtcDQ9W3RtcDNdLDIJCSAgICAvLyBMU0IKLQlkZXAJJFhbJGkmMHhmXT0kWFskaSYweGZdLHRtcDIsOCw4CX07OworCWRlcAkkWFskaV09JFhbJGldLHRtcDIsOCw4CX07OwogX19fCiBpZiAoJGk8MTUpIHsKIAkkY29kZS49PDxfX187Ci17IC5tbWk7CWxkMQkkWFsoJGkrMSkmMHhmXT1baW5wXSwyCSAgICAvLyArMQoreyAubW1pOwlsZDEJJFhuPVtpbnBdLDIJCSAgICAvLyBmb3J3YXJkIFhsb2FkCisJbm9wLm0JMHgwCiAJZGVwCXRtcDE9dG1wMCx0bXA0LDgsOAl9OzsKLXsgLm1taTsJbGQxCXRtcDI9W3RtcDNdLDIJCSAgICAvLyArMQoreyAubW1pOwlsZDEJdG1wMj1bdG1wM10sMgkJICAgIC8vIGZvcndhcmQgWGxvYWQKIAlhbmQJdG1wND0kYywkYgotCWRlcAkkWFskaSYweGZdPSRYWyRpJjB4Zl0sdG1wMSwxNiwxNgl9IC8vOzsKLXsgLm1taTsJYW5kY20JdG1wMT0kZCwkYgotCWFkZAl0bXAwPSRlLCRLXzAwXzE5CisJZGVwCSRYWyRpXT0kWFskaV0sdG1wMSwxNiwxNn0gLy87OworeyAubW1pOwlhZGQJJGU9JGUsJEtfMDBfMTkJCSAgICAvLyBlKz1LXzAwXzE5CisJYW5kY20JdG1wMT0kZCwkYgogCWRlcC56CXRtcDU9JGEsNSwyNwkJfTs7IC8vIGE8PDUKLXsgLm1taTsJb3IJdG1wND10bXA0LHRtcDEJCSAgICAvLyBGXzAwXzE5KGIsYyxkKT0oYiZjKXwofmImZCkKLQlhZGQJJGY9dG1wMCwkWFskaSYweGZdCSAgICAvLyBmPXhpK2UrS18wMF8xOQoreyAubW1pOwlhZGQJJGU9JGUsJFhbJGldCQkgICAgLy8gZSs9WGxvYWQKKwlvcgl0bXA0PXRtcDQsdG1wMQkJICAgIC8vIEZfMDBfMTkoYixjLGQpPShiJmMpfCh+YiZkKQogCWV4dHIudQl0bXAxPSRhLDI3LDUJCX07OyAvLyBhPj4yNwoteyAubW1pOwlsZDEJdG1wMD1baW5wXSwyCQkgICAgLy8gKzEKLQlhZGQJJGY9JGYsdG1wNAkJICAgIC8vIGYrPUZfMDBfMTkoYixjLGQpCit7IC5tbWk7CWxkMQl0bXAwPVtpbnBdLDIJCSAgICAvLyBmb3J3YXJkIFhsb2FkCisJYWRkCSRlPSRlLHRtcDQJCSAgICAvLyBlKz1GXzAwXzE5KGIsYyxkKQogCXNocnAJJGI9dG1wNix0bXA2LDIJCX0gICAvLyBiPVJPVEFURShiLDMwKQoteyAubW1pOwlsZDEJdG1wND1bdG1wM10sMgkJICAgIC8vICsxCit7IC5tbWk7CWxkMQl0bXA0PVt0bXAzXSwyCQkgICAgLy8gZm9yd2FyZCBYbG9hZAogCW9yCXRtcDU9dG1wMSx0bXA1CQkgICAgLy8gUk9UQVRFKGEsNSkKIAltdXgyCXRtcDY9JGEsMHg0NAkJfTs7IC8vIHNlZSBiIGluIG5leHQgaXRlcmF0aW9uCi17IC5taWk7CWFkZAkkZj0kZix0bXA1CQkgICAgLy8gZis9Uk9UQVRFKGEsNSkKLQlkZXAJJFhbKCRpKzEpJjB4Zl09JFhbKCRpKzEpJjB4Zl0sdG1wMiw4LDgJLy8gKzEKLQltdXgyCSRYWyRpJjB4Zl09JFhbJGkmMHhmXSwweDQ0CX0gLy87OworeyAubWlpOwlhZGQJJGU9JGUsdG1wNQkJICAgIC8vIGUrPVJPVEFURShhLDUpCisJZGVwCSRYbj0kWG4sdG1wMiw4LDgJICAgIC8vIGZvcndhcmQgWGxvYWQKKwltdXgyCSRYWyRpXT0kWFskaV0sMHg0NAl9IC8vOzsKIAogX19fCiAJfQpAQCAtODksMjQgKzg4LDI0IEBACiAJJGNvZGUuPTw8X19fOwogeyAubWlpOwlhbmQJdG1wMz0kYywkYgogCWRlcAl0bXAxPXRtcDAsdG1wNCw4LDg7OwotCWRlcAkkWFskaSYweGZdPSRYWyRpJjB4Zl0sdG1wMSwxNiwxNgl9IC8vOzsKLXsgLm1taTsJYW5kY20JdG1wMT0kZCwkYgotCWFkZAl0bXAwPSRlLCRLXzAwXzE5CisJZGVwCSRYWyRpXT0kWFskaV0sdG1wMSwxNiwxNn0gLy87OworeyAubW1pOwlhZGQJJGU9JGUsJEtfMDBfMTkJCSAgICAvLyBlKz1LXzAwXzE5CisJYW5kY20JdG1wMT0kZCwkYgogCWRlcC56CXRtcDU9JGEsNSwyNwkJfTs7IC8vIGE8PDUKLXsgLm1taTsJb3IJdG1wND10bXAzLHRtcDEJCSAgICAvLyBGXzAwXzE5KGIsYyxkKT0oYiZjKXwofmImZCkKLQlhZGQJJGY9dG1wMCwkWFskaSYweGZdCSAgICAvLyBmPXhpK2UrS18wMF8xOQoreyAubW1pOwlhZGQJJGU9JGUsJFhbJGldCQkgICAgLy8gZSs9WHVwZGF0ZQorCW9yCXRtcDQ9dG1wMyx0bXAxCQkgICAgLy8gRl8wMF8xOShiLGMsZCk9KGImYyl8KH5iJmQpCiAJZXh0ci51CXRtcDE9JGEsMjcsNQkJfSAgIC8vIGE+PjI3Ci17IC5tbWk7CXhvcgl0bXAyPSRYWygkaSswKzEpJjB4Zl0sJFhbKCRpKzIrMSkmMHhmXQkvLyArMQotCXhvcgl0bXAzPSRYWygkaSs4KzEpJjB4Zl0sJFhbKCRpKzEzKzEpJjB4Zl0gLy8gKzEKK3sgLm1taTsJeG9yCSRYbj0kWG4sJFhbKCRqKzIpJTE2XQkgICAgLy8gZm9yd2FyZCBYdXBkYXRlCisJeG9yCXRtcDM9JFhbKCRqKzgpJTE2XSwkWFsoJGorMTMpJTE2XSAvLyBmb3J3YXJkIFh1cGRhdGUKIAlub3AuaQkwCQkJfTs7Ci17IC5tbWk7CWFkZAkkZj0kZix0bXA0CQkgICAgLy8gZis9Rl8wMF8xOShiLGMsZCkKLQl4b3IJdG1wMj10bXAyLHRtcDMJCSAgICAvLyArMQoreyAubW1pOwlhZGQJJGU9JGUsdG1wNAkJICAgIC8vIGUrPUZfMDBfMTkoYixjLGQpCisJeG9yCSRYbj0kWG4sdG1wMwkJICAgIC8vIGZvcndhcmQgWHVwZGF0ZQogCXNocnAJJGI9dG1wNix0bXA2LDIJCX0gICAvLyBiPVJPVEFURShiLDMwKQogeyAubW1pOyBvcgl0bXAxPXRtcDEsdG1wNQkJICAgIC8vIFJPVEFURShhLDUpCiAJbXV4Mgl0bXA2PSRhLDB4NDQJCX07OyAvLyBzZWUgYiBpbiBuZXh0IGl0ZXJhdGlvbgoteyAubWlpOwlhZGQJJGY9JGYsdG1wMQkJICAgIC8vIGYrPVJPVEFURShhLDUpCi0Jc2hycAkkZT10bXAyLHRtcDIsMzEJCSAgICAvLyBmKzE9Uk9UQVRFKHhbMF1eeFsyXV54WzhdXnhbMTNdLDEpCi0JbXV4MgkkWFskaSYweGZdPSRYWyRpJjB4Zl0sMHg0NCAgfTs7Cit7IC5taWk7CWFkZAkkZT0kZSx0bXAxCQkgICAgLy8gZSs9Uk9UQVRFKGEsNSkKKwlzaHJwCSRYbj0kWG4sJFhuLDMxCQkgICAgLy8gUk9UQVRFKHhbMF1eeFsyXV54WzhdXnhbMTNdLDEpCisJbXV4MgkkWFskaV09JFhbJGldLDB4NDQJfTs7CiAKIF9fXwogCX0KQEAgLTExNCwyNyArMTEzLDI4IEBACiAKIHN1YiBCT0RZXzE2XzE5IHsKIGxvY2FsCSpjb2RlPXNoaWZ0OwotbG9jYWwJKCRpLCRhLCRiLCRjLCRkLCRlLCRmKT1AXzsKK215CSgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteQkkaj0kaSsxOworbXkJJFhuPUBYWyRqJTE2XTsKIAogJGNvZGUuPTw8X19fOwoteyAubW1pOwltb3YJJFhbJGkmMHhmXT0kZgkJICAgIC8vIFh1cGRhdGUKLQlhbmQJdG1wMD0kYywkYgoreyAubWliOwlhZGQJJGU9JGUsJEtfMDBfMTkJCSAgICAvLyBlKz1LXzAwXzE5CiAJZGVwLnoJdG1wNT0kYSw1LDI3CQl9ICAgLy8gYTw8NQoteyAubW1pOwlhbmRjbQl0bXAxPSRkLCRiCi0JYWRkCXRtcDQ9JGUsJEtfMDBfMTkJfTs7Ci17IC5tbWk7CW9yCXRtcDA9dG1wMCx0bXAxCQkgICAgLy8gRl8wMF8xOShiLGMsZCk9KGImYyl8KH5iJmQpCi0JYWRkCSRmPSRmLHRtcDQJCSAgICAvLyBmKz1lK0tfMDBfMTkKK3sgLm1pYjsJYW5kY20JdG1wMT0kZCwkYgorCWFuZAl0bXAwPSRjLCRiCQl9OzsKK3sgLm1taTsJYWRkCSRlPSRlLCRYWyRpJTE2XQkJICAgIC8vIGUrPVh1cGRhdGUKKwlvcgl0bXAwPXRtcDAsdG1wMQkJICAgIC8vIEZfMDBfMTkoYixjLGQpPShiJmMpfCh+YiZkKQogCWV4dHIudQl0bXAxPSRhLDI3LDUJCX0gICAvLyBhPj4yNwoteyAubW1pOwl4b3IJdG1wMj0kWFsoJGkrMCsxKSYweGZdLCRYWygkaSsyKzEpJjB4Zl0JLy8gKzEKLQl4b3IJdG1wMz0kWFsoJGkrOCsxKSYweGZdLCRYWygkaSsxMysxKSYweGZdCS8vICsxCit7IC5tbWk7CXhvcgkkWG49JFhuLCRYWygkaisyKSUxNl0JICAgIC8vIGZvcndhcmQgWHVwZGF0ZQorCXhvcgl0bXAzPSRYWygkais4KSUxNl0sJFhbKCRqKzEzKSUxNl0JLy8gZm9yd2FyZCBYdXBkYXRlCiAJbm9wLmkJMAkJCX07OwoteyAubW1pOwlhZGQJJGY9JGYsdG1wMAkJICAgIC8vIGYrPUZfMDBfMTkoYixjLGQpCi0JeG9yCXRtcDI9dG1wMix0bXAzCQkgICAgLy8gKzEKK3sgLm1taTsJYWRkCSRlPSRlLHRtcDAJCSAgICAvLyBmKz1GXzAwXzE5KGIsYyxkKQorCXhvcgkkWG49JFhuLHRtcDMJCSAgICAvLyBmb3J3YXJkIFh1cGRhdGUKIAlzaHJwCSRiPXRtcDYsdG1wNiwyCQl9ICAgLy8gYj1ST1RBVEUoYiwzMCkKIHsgLm1taTsJb3IJdG1wMT10bXAxLHRtcDUJCSAgICAvLyBST1RBVEUoYSw1KQogCW11eDIJdG1wNj0kYSwweDQ0CQl9OzsgLy8gc2VlIGIgaW4gbmV4dCBpdGVyYXRpb24KLXsgLm1paTsJYWRkCSRmPSRmLHRtcDEJCSAgICAvLyBmKz1ST1RBVEUoYSw1KQotCXNocnAJJGU9dG1wMix0bXAyLDMxCQkgICAgLy8gZisxPVJPVEFURSh4WzBdXnhbMl1eeFs4XV54WzEzXSwxKQoreyAubWlpOwlhZGQJJGU9JGUsdG1wMQkJICAgIC8vIGUrPVJPVEFURShhLDUpCisJc2hycAkkWG49JFhuLCRYbiwzMQkJICAgIC8vIFJPVEFURSh4WzBdXnhbMl1eeFs4XV54WzEzXSwxKQogCW5vcC5pCTAJCQl9OzsKIAogX19fCkBAIC0xNDIsNDkgKzE0Miw0NyBAQAogCiBzdWIgQk9EWV8yMF8zOSB7CiBsb2NhbAkqY29kZT1zaGlmdDsKLWxvY2FsCSgkaSwkYSwkYiwkYywkZCwkZSwkZiwkS29uc3QpPUBfOworbXkJKCRpLCRhLCRiLCRjLCRkLCRlLCRLb25zdCk9QF87CiAJJEtvbnN0ID0gJEtfMjBfMzkgaWYgKCFkZWZpbmVkKCRLb25zdCkpOworbXkJJGo9JGkrMTsKK215CSRYbj1AWFskaiUxNl07CiAKIGlmICgkaTw3OSkgewogJGNvZGUuPTw8X19fOwoteyAubWliOwltb3YJJFhbJGkmMHhmXT0kZgkJICAgIC8vIFh1cGRhdGUKK3sgLm1pYjsJYWRkCSRlPSRlLCRLb25zdAkJICAgIC8vIGUrPUtfWFhfWFgKIAlkZXAuegl0bXA1PSRhLDUsMjcJCX0gICAvLyBhPDw1CiB7IC5taWI7CXhvcgl0bXAwPSRjLCRiCi0JYWRkCXRtcDQ9JGUsJEtvbnN0CQl9OzsKLXsgLm1taTsJeG9yCXRtcDA9dG1wMCwkZAkJICAgIC8vIEZfMjBfMzkoYixjLGQpPWJeY15kCi0JYWRkCSRmPSRmLHRtcDQJCSAgICAvLyBmKz1lK0tfMjBfMzkKKwl4b3IJJFhuPSRYbiwkWFsoJGorMiklMTZdCX07OyAvLyBmb3J3YXJkIFh1cGRhdGUKK3sgLm1pYjsJYWRkCSRlPSRlLCRYWyRpJTE2XQkJICAgIC8vIGUrPVh1cGRhdGUKIAlleHRyLnUJdG1wMT0kYSwyNyw1CQl9ICAgLy8gYT4+MjcKLXsgLm1taTsJeG9yCXRtcDI9JFhbKCRpKzArMSkmMHhmXSwkWFsoJGkrMisxKSYweGZdCS8vICsxCi0JeG9yCXRtcDM9JFhbKCRpKzgrMSkmMHhmXSwkWFsoJGkrMTMrMSkmMHhmXQkvLyArMQotCW5vcC5pCTAJCQl9OzsKLXsgLm1taTsJYWRkCSRmPSRmLHRtcDAJCSAgICAvLyBmKz1GXzIwXzM5KGIsYyxkKQotCXhvcgl0bXAyPXRtcDIsdG1wMwkJICAgIC8vICsxCit7IC5taWI7CXhvcgl0bXAwPXRtcDAsJGQJCSAgICAvLyBGXzIwXzM5KGIsYyxkKT1iXmNeZAorCXhvcgkkWG49JFhuLCRYWygkais4KSUxNl0JfTs7IC8vIGZvcndhcmQgWHVwZGF0ZQoreyAubW1pOwlhZGQJJGU9JGUsdG1wMAkJICAgIC8vIGUrPUZfMjBfMzkoYixjLGQpCisJeG9yCSRYbj0kWG4sJFhbKCRqKzEzKSUxNl0JICAgIC8vIGZvcndhcmQgWHVwZGF0ZQogCXNocnAJJGI9dG1wNix0bXA2LDIJCX0gICAvLyBiPVJPVEFURShiLDMwKQogeyAubW1pOwlvcgl0bXAxPXRtcDEsdG1wNQkJICAgIC8vIFJPVEFURShhLDUpCiAJbXV4Mgl0bXA2PSRhLDB4NDQJCX07OyAvLyBzZWUgYiBpbiBuZXh0IGl0ZXJhdGlvbgoteyAubWlpOwlhZGQJJGY9JGYsdG1wMQkJICAgIC8vIGYrPVJPVEFURShhLDUpCi0Jc2hycAkkZT10bXAyLHRtcDIsMzEJCSAgICAvLyBmKzE9Uk9UQVRFKHhbMF1eeFsyXV54WzhdXnhbMTNdLDEpCit7IC5taWk7CWFkZAkkZT0kZSx0bXAxCQkgICAgLy8gZSs9Uk9UQVRFKGEsNSkKKwlzaHJwCSRYbj0kWG4sJFhuLDMxCQkgICAgLy8gUk9UQVRFKHhbMF1eeFsyXV54WzhdXnhbMTNdLDEpCiAJbm9wLmkJMAkJCX07OwogCiBfX18KIH0KIGVsc2UgewogJGNvZGUuPTw8X19fOwoteyAubWliOwltb3YJJFhbJGkmMHhmXT0kZgkJICAgIC8vIFh1cGRhdGUKK3sgLm1pYjsJYWRkCSRlPSRlLCRLb25zdAkJICAgIC8vIGUrPUtfNjBfNzkKIAlkZXAuegl0bXA1PSRhLDUsMjcJCX0gICAvLyBhPDw1CiB7IC5taWI7CXhvcgl0bXAwPSRjLCRiCi0JYWRkCXRtcDQ9JGUsJEtvbnN0CQl9OzsKLXsgLm1pYjsJeG9yCXRtcDA9dG1wMCwkZAkJICAgIC8vIEZfMjBfMzkoYixjLGQpPWJeY15kCi0JZXh0ci51CXRtcDE9JGEsMjcsNQkJfSAgIC8vIGE+PjI3Ci17IC5taWI7CWFkZAkkZj0kZix0bXA0CQkgICAgLy8gZis9ZStLXzIwXzM5CiAJYWRkCSRoMT0kaDEsJGEJCX07OyAvLyB3cmFwIHVwCi17IC5tbWk7CWFkZAkkZj0kZix0bXAwCQkgICAgLy8gZis9Rl8yMF8zOShiLGMsZCkKLQlzaHJwCSRiPXRtcDYsdG1wNiwyCQl9ICAgLy8gYj1ST1RBVEUoYiwzMCkgOzs/Ci17IC5tbWk7CW9yCXRtcDE9dG1wMSx0bXA1CQkgICAgLy8gUk9UQVRFKGEsNSkKK3sgLm1pYjsJYWRkCSRlPSRlLCRYWyRpJTE2XQkJICAgIC8vIGUrPVh1cGRhdGUKKwlleHRyLnUJdG1wMT0kYSwyNyw1CQl9ICAgLy8gYT4+MjcKK3sgLm1pYjsJeG9yCXRtcDA9dG1wMCwkZAkJICAgIC8vIEZfMjBfMzkoYixjLGQpPWJeY15kCiAJYWRkCSRoMz0kaDMsJGMJCX07OyAvLyB3cmFwIHVwCi17IC5taWI7CWFkZAl0bXAzPTEsaW5wCQkgICAgLy8gdXNlZCBpbiB1bmFsaWduZWQgY29kZXBhdGgKLQlhZGQJJGY9JGYsdG1wMQkJfSAgIC8vIGYrPVJPVEFURShhLDUpCi17IC5taWI7CWFkZAkkaDI9JGgyLCRiCQkgICAgLy8gd3JhcCB1cAoreyAubW1pOwlhZGQJJGU9JGUsdG1wMAkJICAgIC8vIGUrPUZfMjBfMzkoYixjLGQpCisJb3IJdG1wMT10bXAxLHRtcDUJCSAgICAvLyBST1RBVEUoYSw1KQorCXNocnAJJGI9dG1wNix0bXA2LDIJCX07OyAvLyBiPVJPVEFURShiLDMwKSA7Oz8KK3sgLm1taTsJYWRkCSRlPSRlLHRtcDEJCSAgICAvLyBlKz1ST1RBVEUoYSw1KQorCWFkZAl0bXAzPTEsaW5wCQkgICAgLy8gdXNlZCBpbiB1bmFsaWduZWQgY29kZXBhdGgKIAlhZGQJJGg0PSRoNCwkZAkJfTs7IC8vIHdyYXAgdXAKIAogX19fCkBAIC0xOTMsMjkgKzE5MSwyOSBAQAogCiBzdWIgQk9EWV80MF81OSB7CiBsb2NhbAkqY29kZT1zaGlmdDsKLWxvY2FsCSgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87CitteQkoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkJJGo9JGkrMTsKK215CSRYbj1AWFskaiUxNl07CiAKICRjb2RlLj08PF9fXzsKLXsgLm1taTsJbW92CSRYWyRpJjB4Zl09JGYJCSAgICAvLyBYdXBkYXRlCi0JYW5kCXRtcDA9JGMsJGIKK3sgLm1pYjsJYWRkCSRlPSRlLCRLXzQwXzU5CQkgICAgLy8gZSs9S180MF81OQogCWRlcC56CXRtcDU9JGEsNSwyNwkJfSAgIC8vIGE8PDUKLXsgLm1taTsJYW5kCXRtcDE9JGQsJGIKLQlhZGQJdG1wND0kZSwkS180MF81OQl9OzsKLXsgLm1taTsJb3IJdG1wMD10bXAwLHRtcDEJCSAgICAvLyAoYiZjKXwoYiZkKQotCWFkZAkkZj0kZix0bXA0CQkgICAgLy8gZis9ZStLXzQwXzU5Cit7IC5taWI7CWFuZAl0bXAxPSRjLCRkCisJeG9yCXRtcDA9JGMsJGQJCX07OworeyAubW1pOwlhZGQJJGU9JGUsJFhbJGklMTZdCQkgICAgLy8gZSs9WHVwZGF0ZQorCWFkZAl0bXA1PXRtcDUsdG1wMQkJICAgIC8vIGE8PDUrKGMmZCkKIAlleHRyLnUJdG1wMT0kYSwyNyw1CQl9ICAgLy8gYT4+MjcKLXsgLm1taTsJYW5kCXRtcDQ9JGMsJGQKLQl4b3IJdG1wMj0kWFsoJGkrMCsxKSYweGZdLCRYWygkaSsyKzEpJjB4Zl0JLy8gKzEKLQl4b3IJdG1wMz0kWFsoJGkrOCsxKSYweGZdLCRYWygkaSsxMysxKSYweGZdCS8vICsxCi0JfTs7Ci17IC5tbWk7CW9yCXRtcDE9dG1wMSx0bXA1CQkgICAgLy8gUk9UQVRFKGEsNSkKLQl4b3IJdG1wMj10bXAyLHRtcDMJCSAgICAvLyArMQoreyAubW1pOwlhbmQJdG1wMD10bXAwLCRiCisJeG9yCSRYbj0kWG4sJFhbKCRqKzIpJTE2XQkgICAgLy8gZm9yd2FyZCBYdXBkYXRlCisJeG9yCXRtcDM9JFhbKCRqKzgpJTE2XSwkWFsoJGorMTMpJTE2XSB9OzsJLy8gZm9yd2FyZCBYdXBkYXRlCit7IC5tbWk7CWFkZAkkZT0kZSx0bXAwCQkgICAgLy8gZSs9YiYoY15kKQorCWFkZAl0bXA1PXRtcDUsdG1wMQkJICAgIC8vIFJPVEFURShhLDUpKyhjJmQpCiAJc2hycAkkYj10bXA2LHRtcDYsMgkJfSAgIC8vIGI9Uk9UQVRFKGIsMzApCi17IC5tbWk7CW9yCXRtcDA9dG1wMCx0bXA0CQkgICAgLy8gRl80MF81OShiLGMsZCk9KGImYyl8KGImZCl8KGMmZCkKK3sgLm1taTsJeG9yCSRYbj0kWG4sdG1wMwogCW11eDIJdG1wNj0kYSwweDQ0CQl9OzsgLy8gc2VlIGIgaW4gbmV4dCBpdGVyYXRpb24KLXsgLm1paTsJYWRkCSRmPSRmLHRtcDAJCSAgICAvLyBmKz1GXzQwXzU5KGIsYyxkKQotCXNocnAJJGU9dG1wMix0bXAyLDMxOzsJICAgIC8vIGYrMT1ST1RBVEUoeFswXV54WzJdXnhbOF1eeFsxM10sMSkKLQlhZGQJJGY9JGYsdG1wMQkJfTs7IC8vIGYrPVJPVEFURShhLDUpCit7IC5taWk7CWFkZAkkZT0kZSx0bXA1CQkgICAgLy8gZSs9Uk9UQVRFKGEsNSkrKGMmZCkKKwlzaHJwCSRYbj0kWG4sJFhuLDMxCQkgICAgLy8gUk9UQVRFKHhbMF1eeFsyXV54WzhdXnhbMTNdLDEpCisJbm9wLmkJMHgwCQkJfTs7CiAKIF9fXwogfQpAQCAtMjM3LDcgKzIzNSw3IEBACiAuYWxpZ24JMzIKIHNoYTFfYmxvY2tfZGF0YV9vcmRlcjoKIAkucHJvbG9ndWUKLXsgLm1taTsJYWxsb2MJdG1wMT1hci5wZnMsMywxNSwwLDAKK3sgLm1taTsJYWxsb2MJdG1wMT1hci5wZnMsMywxNCwwLDAKIAkkQUREUAl0bXAwPTQsY3R4CiAJLnNhdmUJYXIubGMscjMKIAltb3YJcjM9YXIubGMJCX0KQEAgLTI0NSw4ICsyNDMsOCBAQAogCSRBRERQCWlucD0wLGlucAogCW1vdglyMj1wcgkJCX07OwogdG1wND1pbjI7Ci10bXA1PWxvYzEzOwotdG1wNj1sb2MxNDsKK3RtcDU9bG9jMTI7Cit0bXA2PWxvYzEzOwogCS5ib2R5CiB7IC5tbHg7CWxkNAkkaDA9W2N0eF0sOAogCW1vdmwJJEtfMDBfMTk9MHg1YTgyNzk5OQl9CkBAIC0yNzMsNyArMjcxLDcgQEAKIAogX19fCiAKLXsgbXkgJGksQFY9KCRBLCRCLCRDLCRELCRFLCRUKTsKK3sgbXkgJGksQFY9KCRBLCRCLCRDLCRELCRFKTsKIAogCWZvcigkaT0wOyRpPDE2OyRpKyspCXsgJkJPRFlfMDBfMTUoXCRjb2RlLCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQogCWZvcig7JGk8MjA7JGkrKykJeyAmQk9EWV8xNl8xOShcJGNvZGUsJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CkBAIC0yODEsMTIgKzI3OSwxMiBAQAogCWZvcig7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OShcJGNvZGUsJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiAJZm9yKDskaTw4MDskaSsrKQl7ICZCT0RZXzYwXzc5KFwkY29kZSwkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KIAotCSgoJFZbNV0gZXEgJEQpIGFuZCAoJFZbMF0gZXEgJEUpKSBvciBkaWU7CSMgZG91YmxlLWNoZWNrCisJKCgkVlswXSBlcSAkQSkgYW5kICgkVls0XSBlcSAkRSkpIG9yIGRpZTsJIyBkb3VibGUtY2hlY2sKIH0KIAogJGNvZGUuPTw8X19fOwoteyAubW1iOwlhZGQJJGgwPSRoMCwkRQotCW5vcC5tCTAKK3sgLm1tYjsJYWRkCSRoMD0kaDAsJEEKKwlhZGQJJGgyPSRoMiwkQwogCWJyLmN0b3AuZHB0ay5tYW55CS5MZHRvcAl9OzsKIC5MZGVuZDoKIHsgLm1taTsJYWRkCXRtcDA9NCxjdHgKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtcGFyaXNjLnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1wYXJpc2MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3YmY0OQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTEtcGFyaXNjLnBsCkBAIC0wLDAgKzEsMjU5IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgU0hBMSBibG9jayBwcm9jZWR1cmUgZm9yIFBBLVJJU0MuCisKKyMgSnVuZSAyMDA5LgorIworIyBPbiBQQS03MTAwTEMgcGVyZm9ybWFuY2UgaXMgPjMwJSBiZXR0ZXIgdGhhbiBnY2MgMy4yIGdlbmVyYXRlZCBjb2RlCisjIGZvciBhbGlnbmVkIGlucHV0IGFuZCA+NTAlIGJldHRlciBmb3IgdW5hbGlnbmVkLiBDb21wYXJlZCB0byB2ZW5kb3IKKyMgY29tcGlsZXIgb24gUEEtODYwMCBpdCdzIGFsbW9zdCA2MCUgZmFzdGVyIGluIDY0LWJpdCBidWlsZCBhbmQganVzdAorIyBmZXcgcGVyY2VudCBmYXN0ZXIgaW4gMzItYml0IG9uZSAodGhpcyBmb3IgYWxpZ25lZCBpbnB1dCwgZGF0YSBmb3IKKyMgdW5hbGlnbmVkIGlucHV0IGlzIG5vdCBhdmFpbGFibGUpLgorIworIyBTcGVjaWFsIHRoYW5rcyB0byBwb2xhcmhvbWUuY29tIGZvciBwcm92aWRpbmcgSFAtVVggYWNjb3VudC4KKworJGZsYXZvdXIgPSBzaGlmdDsKKyRvdXRwdXQgPSBzaGlmdDsKK29wZW4gU1RET1VULCI+JG91dHB1dCI7CisKK2lmICgkZmxhdm91ciA9fiAvNjQvKSB7CisJJExFVkVMCQk9IjIuMFciOworCSRTSVpFX1QJCT04OworCSRGUkFNRV9NQVJLRVIJPTgwOworCSRTQVZFRF9SUAk9MTY7CisJJFBVU0gJCT0ic3RkIjsKKwkkUFVTSE1BCQk9InN0ZCxtYSI7CisJJFBPUAkJPSJsZGQiOworCSRQT1BNQgkJPSJsZGQsbWIiOworfSBlbHNlIHsKKwkkTEVWRUwJCT0iMS4wIjsKKwkkU0laRV9UCQk9NDsKKwkkRlJBTUVfTUFSS0VSCT00ODsKKwkkU0FWRURfUlAJPTIwOworCSRQVVNICQk9InN0dyI7CisJJFBVU0hNQQkJPSJzdHdtIjsKKwkkUE9QCQk9ImxkdyI7CisJJFBPUE1CCQk9Imxkd20iOworfQorCiskRlJBTUU9MTQqJFNJWkVfVCskRlJBTUVfTUFSS0VSOyMgMTQgc2F2ZWQgcmVncyArIGZyYW1lIG1hcmtlcgorCQkJCSMgICAgICAgICAgICAgICAgIFsrIGFyZ3VtZW50IHRyYW5zZmVyXQorJGN0eD0iJXIyNiI7CQkjIGFyZzAKKyRpbnA9IiVyMjUiOwkJIyBhcmcxCiskbnVtPSIlcjI0IjsJCSMgYXJnMgorCiskdDA9IiVyMjgiOworJHQxPSIlcjI5IjsKKyRLPSIlcjMxIjsKKworQFg9KCIlcjEiLCAiJXIyIiwgIiVyMyIsICIlcjQiLCAiJXI1IiwgIiVyNiIsICIlcjciLCAiJXI4IiwKKyAgICAiJXI5IiwgIiVyMTAiLCIlcjExIiwiJXIxMiIsIiVyMTMiLCIlcjE0IiwiJXIxNSIsIiVyMTYiLCR0MCk7CisKK0BWPSgkQSwkQiwkQywkRCwkRSk9KCIlcjE5IiwiJXIyMCIsIiVyMjEiLCIlcjIyIiwiJXIyMyIpOworCitzdWIgQk9EWV8wMF8xOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9JGkrMTsKKyRjb2RlLj08PF9fXyBpZiAoJGk8MTUpOworCWFkZGwJJEssJGUsJGUJOyAkaQorCXNoZAkkYSwkYSwyNywkdDEKKwlhZGRsCUBYWyRpXSwkZSwkZQorCWFuZAkkYywkYiwkdDAKKwlhZGRsCSR0MSwkZSwkZQorCWFuZGNtCSRkLCRiLCR0MQorCXNoZAkkYiwkYiwyLCRiCisJb3IJJHQxLCR0MCwkdDAKKwlhZGRsCSR0MCwkZSwkZQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPj0xNSk7CSMgd2l0aCBmb3J3YXJkIFh1cGRhdGUKKwlhZGRsCSRLLCRlLCRlCTsgJGkKKwlzaGQJJGEsJGEsMjcsJHQxCisJeG9yCUBYWygkaisyKSUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCWFkZGwJQFhbJGklMTZdLCRlLCRlCisJYW5kCSRjLCRiLCR0MAorCXhvcglAWFsoJGorOCklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKwlhZGRsCSR0MSwkZSwkZQorCWFuZGNtCSRkLCRiLCR0MQorCXNoZAkkYiwkYiwyLCRiCisJb3IJJHQxLCR0MCwkdDAKKwl4b3IJQFhbKCRqKzEzKSUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCWFkZAkkdDAsJGUsJGUKKwlzaGQJQFhbJGolMTZdLEBYWyRqJTE2XSwzMSxAWFskaiUxNl0KK19fXworfQorCitzdWIgQk9EWV8yMF8zOSB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOworbXkgJGo9JGkrMTsKKyRjb2RlLj08PF9fXyBpZiAoJGk8NzkpOworCXhvcglAWFsoJGorMiklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0JOyAkaQorCWFkZGwJJEssJGUsJGUKKwlzaGQJJGEsJGEsMjcsJHQxCisJeG9yCUBYWygkais4KSUxNl0sQFhbJGolMTZdLEBYWyRqJTE2XQorCWFkZGwJQFhbJGklMTZdLCRlLCRlCisJeG9yCSRiLCRjLCR0MAorCXhvcglAWFsoJGorMTMpJTE2XSxAWFskaiUxNl0sQFhbJGolMTZdCisJYWRkbAkkdDEsJGUsJGUKKwlzaGQJJGIsJGIsMiwkYgorCXhvcgkkZCwkdDAsJHQwCisJc2hkCUBYWyRqJTE2XSxAWFskaiUxNl0sMzEsQFhbJGolMTZdCisJYWRkbAkkdDAsJGUsJGUKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOwkjIHdpdGggY29udGV4dCBsb2FkCisJbGR3CTAoJGN0eCksQFhbMF0JOyAkaQorCWFkZGwJJEssJGUsJGUKKwlzaGQJJGEsJGEsMjcsJHQxCisJbGR3CTQoJGN0eCksQFhbMV0KKwlhZGRsCUBYWyRpJTE2XSwkZSwkZQorCXhvcgkkYiwkYywkdDAKKwlsZHcJOCgkY3R4KSxAWFsyXQorCWFkZGwJJHQxLCRlLCRlCisJc2hkCSRiLCRiLDIsJGIKKwl4b3IJJGQsJHQwLCR0MAorCWxkdwkxMigkY3R4KSxAWFszXQorCWFkZGwJJHQwLCRlLCRlCisJbGR3CTE2KCRjdHgpLEBYWzRdCitfX18KK30KKworc3ViIEJPRFlfNDBfNTkgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKK215ICRqPSRpKzE7CiskY29kZS49PDxfX187CisJc2hkCSRhLCRhLDI3LCR0MQk7ICRpCisJYWRkbAkkSywkZSwkZQorCXhvcglAWFsoJGorMiklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKwl4b3IJJGQsJGMsJHQwCisJYWRkbAlAWFskaSUxNl0sJGUsJGUKKwl4b3IJQFhbKCRqKzgpJTE2XSxAWFskaiUxNl0sQFhbJGolMTZdCisJYW5kCSRiLCR0MCwkdDAKKwlhZGRsCSR0MSwkZSwkZQorCXNoZAkkYiwkYiwyLCRiCisJeG9yCUBYWygkaisxMyklMTZdLEBYWyRqJTE2XSxAWFskaiUxNl0KKwlhZGRsCSR0MCwkZSwkZQorCWFuZAkkZCwkYywkdDEKKwlzaGQJQFhbJGolMTZdLEBYWyRqJTE2XSwzMSxAWFskaiUxNl0KKwlhZGRsCSR0MSwkZSwkZQorX19fCit9CisKKyRjb2RlPTw8X19fOworCS5MRVZFTAkkTEVWRUwKKwkuU1BBQ0UJXCRURVhUXCQKKwkuU1VCU1BBCVwkQ09ERVwkLFFVQUQ9MCxBTElHTj04LEFDQ0VTUz0weDJDLENPREVfT05MWQorCisJLkVYUE9SVAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIsRU5UUlksQVJHVzA9R1IsQVJHVzE9R1IsQVJHVzI9R1IKK3NoYTFfYmxvY2tfZGF0YV9vcmRlcgorCS5QUk9DCisJLkNBTExJTkZPCUZSQU1FPWAkRlJBTUUtMTQqJFNJWkVfVGAsTk9fQ0FMTFMsU0FWRV9SUCxFTlRSWV9HUj0xNgorCS5FTlRSWQorCSRQVVNICSVyMiwtJFNBVkVEX1JQKCVzcCkJOyBzdGFuZGFyZCBwcm9sb2d1ZQorCSRQVVNITUEJJXIzLCRGUkFNRSglc3ApCisJJFBVU0gJJXI0LGAtJEZSQU1FKzEqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNSxgLSRGUkFNRSsyKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjYsYC0kRlJBTUUrMyokU0laRV9UYCglc3ApCisJJFBVU0gJJXI3LGAtJEZSQU1FKzQqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyOCxgLSRGUkFNRSs1KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjksYC0kRlJBTUUrNiokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMCxgLSRGUkFNRSs3KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjExLGAtJEZSQU1FKzgqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTIsYC0kRlJBTUUrOSokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMyxgLSRGUkFNRSsxMCokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxNCxgLSRGUkFNRSsxMSokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxNSxgLSRGUkFNRSsxMiokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxNixgLSRGUkFNRSsxMyokU0laRV9UYCglc3ApCisKKwlsZHcJMCgkY3R4KSwkQQorCWxkdwk0KCRjdHgpLCRCCisJbGR3CTgoJGN0eCksJEMKKwlsZHcJMTIoJGN0eCksJEQKKwlsZHcJMTYoJGN0eCksJEUKKworCWV4dHJ1CSRpbnAsMzEsMiwkdDAJCTsgdDA9aW5wJjM7CisJc2gzYWRkbAkkdDAsJXIwLCR0MAkJOyB0MCo9ODsKKwlzdWJpCTMyLCR0MCwkdDAJCTsgdDA9MzItdDA7CisJbXRjdGwJJHQwLCVjcjExCQk7ICVzYXI9dDA7CisKK0xcJG9vcAorCWxkaQkzLCR0MAorCWFuZGNtCSRpbnAsJHQwLCR0MAkJOyA2NC1iaXQgbmV1dHJhbAorX19fCisJZm9yICgkaT0wOyRpPDE1OyRpKyspIHsJCSMgbG9hZCBpbnB1dCBibG9jaworCSRjb2RlLj0iXHRsZHcJYDQqJGlgKCR0MCksQFhbJGldXG4iOwkJfQorJGNvZGUuPTw8X19fOworCWNtcGIsKj0JJGlucCwkdDAsTFwkYWxpZ25lZAorCWxkdwk2MCgkdDApLEBYWzE1XQorCWxkdwk2NCgkdDApLEBYWzE2XQorX19fCisJZm9yICgkaT0wOyRpPDE2OyRpKyspIHsJCSMgYWxpZ24gaW5wdXQKKwkkY29kZS49Ilx0dnNoZAlAWFskaV0sQFhbJGkrMV0sQFhbJGldXG4iOwl9CiskY29kZS49PDxfX187CitMXCRhbGlnbmVkCisJbGRpbAlMJzB4NWE4MjcwMDAsJEsJCTsgS18wMF8xOQorCWxkbwkweDk5OSgkSyksJEsKK19fXworZm9yICgkaT0wOyRpPDIwOyRpKyspICAgeyAmQk9EWV8wMF8xOSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlsZGlsCUwnMHg2ZWQ5ZTAwMCwkSwkJOyBLXzIwXzM5CisJbGRvCTB4YmExKCRLKSwkSworX19fCisKK2ZvciAoOyRpPDQwOyRpKyspICAgICAgIHsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49PDxfX187CisJbGRpbAlMJzB4OGYxYmIwMDAsJEsJCTsgS180MF81OQorCWxkbwkweGNkYygkSyksJEsKK19fXworCitmb3IgKDskaTw2MDskaSsrKSAgICAgICB7ICZCT0RZXzQwXzU5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWxkaWwJTCcweGNhNjJjMDAwLCRLCQk7IEtfNjBfNzkKKwlsZG8JMHgxZDYoJEspLCRLCitfX18KK2ZvciAoOyRpPDgwOyRpKyspICAgICAgIHsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CisKKyRjb2RlLj08PF9fXzsKKwlhZGRsCUBYWzBdLCRBLCRBCisJYWRkbAlAWFsxXSwkQiwkQgorCWFkZGwJQFhbMl0sJEMsJEMKKwlhZGRsCUBYWzNdLCRELCRECisJYWRkbAlAWFs0XSwkRSwkRQorCXN0dwkkQSwwKCRjdHgpCisJc3R3CSRCLDQoJGN0eCkKKwlzdHcJJEMsOCgkY3R4KQorCXN0dwkkRCwxMigkY3R4KQorCXN0dwkkRSwxNigkY3R4KQorCWFkZGliLCo8PiAtMSwkbnVtLExcJG9vcAorCWxkbwk2NCgkaW5wKSwkaW5wCisKKwkkUE9QCWAtJEZSQU1FLSRTQVZFRF9SUGAoJXNwKSwlcjIJOyBzdGFuZGFyZCBlcGlsb2d1ZQorCSRQT1AJYC0kRlJBTUUrMSokU0laRV9UYCglc3ApLCVyNAorCSRQT1AJYC0kRlJBTUUrMiokU0laRV9UYCglc3ApLCVyNQorCSRQT1AJYC0kRlJBTUUrMyokU0laRV9UYCglc3ApLCVyNgorCSRQT1AJYC0kRlJBTUUrNCokU0laRV9UYCglc3ApLCVyNworCSRQT1AJYC0kRlJBTUUrNSokU0laRV9UYCglc3ApLCVyOAorCSRQT1AJYC0kRlJBTUUrNiokU0laRV9UYCglc3ApLCVyOQorCSRQT1AJYC0kRlJBTUUrNyokU0laRV9UYCglc3ApLCVyMTAKKwkkUE9QCWAtJEZSQU1FKzgqJFNJWkVfVGAoJXNwKSwlcjExCisJJFBPUAlgLSRGUkFNRSs5KiRTSVpFX1RgKCVzcCksJXIxMgorCSRQT1AJYC0kRlJBTUUrMTAqJFNJWkVfVGAoJXNwKSwlcjEzCisJJFBPUAlgLSRGUkFNRSsxMSokU0laRV9UYCglc3ApLCVyMTQKKwkkUE9QCWAtJEZSQU1FKzEyKiRTSVpFX1RgKCVzcCksJXIxNQorCSRQT1AJYC0kRlJBTUUrMTMqJFNJWkVfVGAoJXNwKSwlcjE2CisJYnYJKCVyMikKKwkuRVhJVAorCSRQT1BNQgktJEZSQU1FKCVzcCksJXIzCisJLlBST0NFTkQKKwkuU1RSSU5HWiAiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIFBBLVJJU0MsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCitfX18KKworJGNvZGUgPX4gcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZW07CiskY29kZSA9fiBzLyxcKi8sL2dtIGlmICgkU0laRV9UPT00KTsKK3ByaW50ICRjb2RlOworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1wcGMucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXBwYy5wbAppbmRleCBkY2QwZmNkLi4yMTQwZGQyIDEwMDc1NQotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGExLXBwYy5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXBwYy5wbApAQCAtMjQsMTIgKzI0LDE0IEBACiAKIGlmICgkZmxhdm91ciA9fiAvNjQvKSB7CiAJJFNJWkVfVAk9ODsKKwkkTFJTQVZFCT0yKiRTSVpFX1Q7CiAJJFVDTVAJPSJjbXBsZCI7CiAJJFNUVQk9InN0ZHUiOwogCSRQT1AJPSJsZCI7CiAJJFBVU0gJPSJzdGQiOwogfSBlbHNpZiAoJGZsYXZvdXIgPX4gLzMyLykgewogCSRTSVpFX1QJPTQ7CisJJExSU0FWRQk9JFNJWkVfVDsKIAkkVUNNUAk9ImNtcGx3IjsKIAkkU1RVCT0ic3R3dSI7CiAJJFBPUAk9Imx3eiI7CkBAIC00Myw3ICs0NSw4IEBACiAKIG9wZW4gU1RET1VULCJ8ICReWCAkeGxhdGUgJGZsYXZvdXIgIi5zaGlmdCB8fCBkaWUgImNhbid0IGNhbGwgJHhsYXRlOiAkISI7CiAKLSRGUkFNRT0yNCokU0laRV9UOworJEZSQU1FPTI0KiRTSVpFX1QrNjQ7CiskTE9DQUxTPTYqJFNJWkVfVDsKIAogJEsgID0icjAiOwogJHNwID0icjEiOwpAQCAtMTYyLDkgKzE2NSw4IEBACiAuZ2xvYmwJLnNoYTFfYmxvY2tfZGF0YV9vcmRlcgogLmFsaWduCTQKIC5zaGExX2Jsb2NrX2RhdGFfb3JkZXI6CisJJFNUVQkkc3AsLSRGUkFNRSgkc3ApCiAJbWZscglyMAotCSRTVFUJJHNwLGAtKCRGUkFNRSs2NClgKCRzcCkKLQkkUFVTSAlyMCxgJEZSQU1FLSRTSVpFX1QqMThgKCRzcCkKIAkkUFVTSAlyMTUsYCRGUkFNRS0kU0laRV9UKjE3YCgkc3ApCiAJJFBVU0gJcjE2LGAkRlJBTUUtJFNJWkVfVCoxNmAoJHNwKQogCSRQVVNICXIxNyxgJEZSQU1FLSRTSVpFX1QqMTVgKCRzcCkKQEAgLTE4Miw2ICsxODQsNyBAQAogCSRQVVNICXIyOSxgJEZSQU1FLSRTSVpFX1QqM2AoJHNwKQogCSRQVVNICXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQogCSRQVVNICXIzMSxgJEZSQU1FLSRTSVpFX1QqMWAoJHNwKQorCSRQVVNICXIwLGAkRlJBTUUrJExSU0FWRWAoJHNwKQogCWx3egkkQSwwKCRjdHgpCiAJbHd6CSRCLDQoJGN0eCkKIAlsd3oJJEMsOCgkY3R4KQpAQCAtMTkyLDggKzE5NSw1MyBAQAogTGFsaWduZWQ6CiAJbXRjdHIJJG51bQogCWJsCUxzaGExX2Jsb2NrX3ByaXZhdGUKKwliCUxkb25lCisKKzsgUG93ZXJQQyBzcGVjaWZpY2F0aW9uIGFsbG93cyBhbiBpbXBsZW1lbnRhdGlvbiB0byBiZSBpbGwtYmVoYXZlZAorOyB1cG9uIHVuYWxpZ25lZCBhY2Nlc3Mgd2hpY2ggY3Jvc3NlcyBwYWdlIGJvdW5kYXJ5LiAiQmV0dGVyIHNhZmUKKzsgdGhhbiBzb3JyeSIgcHJpbmNpcGxlIG1ha2VzIG1lIHRyZWF0IGl0IHNwZWNpYWxseS4gQnV0IEkgZG9uJ3QKKzsgbG9vayBmb3IgcGFydGljdWxhciBvZmZlbmRpbmcgd29yZCwgYnV0IHJhdGhlciBmb3IgNjQtYnl0ZSBpbnB1dAorOyBibG9jayB3aGljaCBjcm9zc2VzIHRoZSBib3VuZGFyeS4gT25jZSBmb3VuZCB0aGF0IGJsb2NrIGlzIGFsaWduZWQKKzsgYW5kIGhhc2hlZCBzZXBhcmF0ZWx5Li4uCisuYWxpZ24JNAorTHVuYWxpZ25lZDoKKwlzdWJmaWMJJHQxLCRpbnAsNDA5NgorCWFuZGkuCSR0MSwkdDEsNDA5NQk7IGRpc3RhbmNlIHRvIGNsb3Nlc3QgcGFnZSBib3VuZGFyeQorCXNyd2kuCSR0MSwkdDEsNgk7IHQxLz02NAorCWJlcQlMY3Jvc3NfcGFnZQorCSRVQ01QCSRudW0sJHQxCisJYmxlLQlMYWxpZ25lZAk7IGRpZG4ndCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeQorCW10Y3RyCSR0MQorCXN1YmZjCSRudW0sJHQxLCRudW0KKwlibAlMc2hhMV9ibG9ja19wcml2YXRlCitMY3Jvc3NfcGFnZToKKwlsaQkkdDEsMTYKKwltdGN0cgkkdDEKKwlhZGRpCXIyMCwkc3AsJExPQ0FMUwk7IHNwb3Qgd2l0aGluIHRoZSBmcmFtZQorTG1lbWNweToKKwlsYnoJcjE2LDAoJGlucCkKKwlsYnoJcjE3LDEoJGlucCkKKwlsYnoJcjE4LDIoJGlucCkKKwlsYnoJcjE5LDMoJGlucCkKKwlhZGRpCSRpbnAsJGlucCw0CisJc3RiCXIxNiwwKHIyMCkKKwlzdGIJcjE3LDEocjIwKQorCXN0YglyMTgsMihyMjApCisJc3RiCXIxOSwzKHIyMCkKKwlhZGRpCXIyMCxyMjAsNAorCWJkbnoJTG1lbWNweQorCisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMThgKCRzcCkKKwlsaQkkdDEsMQorCWFkZGkJJGlucCwkc3AsJExPQ0FMUworCW10Y3RyCSR0MQorCWJsCUxzaGExX2Jsb2NrX3ByaXZhdGUKKwkkUE9QCSRpbnAsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCisJYWRkaWMuCSRudW0sJG51bSwtMQorCWJuZS0JTHVuYWxpZ25lZAorCiBMZG9uZToKLQkkUE9QCXIwLGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQorCSRQT1AJcjAsYCRGUkFNRSskTFJTQVZFYCgkc3ApCiAJJFBPUAlyMTUsYCRGUkFNRS0kU0laRV9UKjE3YCgkc3ApCiAJJFBPUAlyMTYsYCRGUkFNRS0kU0laRV9UKjE2YCgkc3ApCiAJJFBPUAlyMTcsYCRGUkFNRS0kU0laRV9UKjE1YCgkc3ApCkBAIC0yMTIsNTQgKzI2MCwxMSBAQAogCSRQT1AJcjMwLGAkRlJBTUUtJFNJWkVfVCoyYCgkc3ApCiAJJFBPUAlyMzEsYCRGUkFNRS0kU0laRV9UKjFgKCRzcCkKIAltdGxyCXIwCi0JYWRkaQkkc3AsJHNwLGAkRlJBTUUrNjRgCisJYWRkaQkkc3AsJHNwLCRGUkFNRQogCWJscgotX19fCi0KLSMgUG93ZXJQQyBzcGVjaWZpY2F0aW9uIGFsbG93cyBhbiBpbXBsZW1lbnRhdGlvbiB0byBiZSBpbGwtYmVoYXZlZAotIyB1cG9uIHVuYWxpZ25lZCBhY2Nlc3Mgd2hpY2ggY3Jvc3NlcyBwYWdlIGJvdW5kYXJ5LiAiQmV0dGVyIHNhZmUKLSMgdGhhbiBzb3JyeSIgcHJpbmNpcGxlIG1ha2VzIG1lIHRyZWF0IGl0IHNwZWNpYWxseS4gQnV0IEkgZG9uJ3QKLSMgbG9vayBmb3IgcGFydGljdWxhciBvZmZlbmRpbmcgd29yZCwgYnV0IHJhdGhlciBmb3IgNjQtYnl0ZSBpbnB1dAotIyBibG9jayB3aGljaCBjcm9zc2VzIHRoZSBib3VuZGFyeS4gT25jZSBmb3VuZCB0aGF0IGJsb2NrIGlzIGFsaWduZWQKLSMgYW5kIGhhc2hlZCBzZXBhcmF0ZWx5Li4uCi0kY29kZS49PDxfX187Ci0uYWxpZ24JNAotTHVuYWxpZ25lZDoKLQlzdWJmaWMJJHQxLCRpbnAsNDA5NgotCWFuZGkuCSR0MSwkdDEsNDA5NQk7IGRpc3RhbmNlIHRvIGNsb3Nlc3QgcGFnZSBib3VuZGFyeQotCXNyd2kuCSR0MSwkdDEsNgk7IHQxLz02NAotCWJlcQlMY3Jvc3NfcGFnZQotCSRVQ01QCSRudW0sJHQxCi0JYmxlLQlMYWxpZ25lZAk7IGRpZG4ndCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeQotCW10Y3RyCSR0MQotCXN1YmZjCSRudW0sJHQxLCRudW0KLQlibAlMc2hhMV9ibG9ja19wcml2YXRlCi1MY3Jvc3NfcGFnZToKLQlsaQkkdDEsMTYKLQltdGN0cgkkdDEKLQlhZGRpCXIyMCwkc3AsJEZSQU1FCTsgc3BvdCBiZWxvdyB0aGUgZnJhbWUKLUxtZW1jcHk6Ci0JbGJ6CXIxNiwwKCRpbnApCi0JbGJ6CXIxNywxKCRpbnApCi0JbGJ6CXIxOCwyKCRpbnApCi0JbGJ6CXIxOSwzKCRpbnApCi0JYWRkaQkkaW5wLCRpbnAsNAotCXN0YglyMTYsMChyMjApCi0Jc3RiCXIxNywxKHIyMCkKLQlzdGIJcjE4LDIocjIwKQotCXN0YglyMTksMyhyMjApCi0JYWRkaQlyMjAscjIwLDQKLQliZG56CUxtZW1jcHkKLQotCSRQVVNICSRpbnAsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCi0JbGkJJHQxLDEKLQlhZGRpCSRpbnAsJHNwLCRGUkFNRQotCW10Y3RyCSR0MQotCWJsCUxzaGExX2Jsb2NrX3ByaXZhdGUKLQkkUE9QCSRpbnAsYCRGUkFNRS0kU0laRV9UKjE5YCgkc3ApCi0JYWRkaWMuCSRudW0sJG51bSwtMQotCWJuZS0JTHVuYWxpZ25lZAotCWIJTGRvbmUKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiw0LDEsMHg4MCwxOCwzLDAKKwkubG9uZwkwCiBfX18KIAogIyBUaGlzIGlzIHByaXZhdGUgYmxvY2sgZnVuY3Rpb24sIHdoaWNoIHVzZXMgdGFpbG9yZWQgY2FsbGluZwpAQCAtMzA5LDYgKzMxNCw4IEBACiAJYWRkaQkkaW5wLCRpbnAsYDE2KjRgCiAJYmRuei0JTHNoYTFfYmxvY2tfcHJpdmF0ZQogCWJscgorCS5sb25nCTAKKwkuYnl0ZQkwLDEyLDB4MTQsMCwwLDAsMCwwCiBfX18KICRjb2RlLj08PF9fXzsKIC5hc2NpegkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIFBQQywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQGZ5LmNoYWxtZXJzLnNlPiIKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEtczM5MHgucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGExLXMzOTB4LnBsCmluZGV4IDRiMTc4NDguLjkxOTNkZGEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTEtczM5MHgucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1zMzkweC5wbApAQCAtMjEsOSArMjEsMjggQEAKICMgaW5zdHJ1Y3Rpb25zIHRvIGZhdm91ciBkdWFsLWlzc3VlIHoxMCBwaXBlbGluZS4gT24gejEwIGhhcmR3YXJlIGlzCiAjICJvbmx5IiB+Mi4zeCBmYXN0ZXIgdGhhbiBzb2Z0d2FyZS4KIAorIyBOb3ZlbWJlciAyMDEwLgorIworIyBBZGFwdCBmb3IgLW0zMSBidWlsZC4gSWYga2VybmVsIHN1cHBvcnRzIHdoYXQncyBjYWxsZWQgImhpZ2hncHJzIgorIyBmZWF0dXJlIG9uIExpbnV4IFtzZWUgL3Byb2MvY3B1aW5mb10sIGl0J3MgcG9zc2libGUgdG8gdXNlIDY0LWJpdAorIyBpbnN0cnVjdGlvbnMgYW5kIGFjaGlldmUgIjY0LWJpdCIgcGVyZm9ybWFuY2UgZXZlbiBpbiAzMS1iaXQgbGVnYWN5CisjIGFwcGxpY2F0aW9uIGNvbnRleHQuIFRoZSBmZWF0dXJlIGlzIG5vdCBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhcgorIyBwcm9jZXNzb3IsIGFzIGxvbmcgYXMgaXQncyAiei1DUFUiLiBMYXR0ZXIgaW1wbGllcyB0aGF0IHRoZSBjb2RlCisjIHJlbWFpbnMgei9BcmNoaXRlY3R1cmUgc3BlY2lmaWMuCisKICRraW1kZnVuYz0xOwkjIG1hZ2ljIGZ1bmN0aW9uIGNvZGUgZm9yIGtpbWQgaW5zdHJ1Y3Rpb24KIAotJG91dHB1dD1zaGlmdDsKKyRmbGF2b3VyID0gc2hpZnQ7CisKK2lmICgkZmxhdm91ciA9fiAvM1sxMl0vKSB7CisJJFNJWkVfVD00OworCSRnPSIiOworfSBlbHNlIHsKKwkkU0laRV9UPTg7CisJJGc9ImciOworfQorCit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQogb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKIAogJEtfMDBfMzk9IiVyMCI7ICRLPSRLXzAwXzM5OwpAQCAtNDIsMTMgKzYxLDE0IEBACiBAWD0oIiVyMTIiLCIlcjEzIiwiJXIxNCIpOwogJHNwPSIlcjE1IjsKIAotJGZyYW1lPTE2MCsxNio0OworJHN0ZGZyYW1lPTE2KiRTSVpFX1QrNCo4OworJGZyYW1lPSRzdGRmcmFtZSsxNio0OwogCiBzdWIgWHVwZGF0ZSB7CiBteSAkaT1zaGlmdDsKIAogJGNvZGUuPTw8X19fIGlmICgkaT09MTUpOwotCWxnCSRwcmVmZXRjaCwxNjAoJHNwKQkjIyMgWHVwZGF0ZSgxNikgd2FybS11cAorCWxnCSRwcmVmZXRjaCwkc3RkZnJhbWUoJHNwKQkjIyMgWHVwZGF0ZSgxNikgd2FybS11cAogCWxyCSRYWzBdLCRYWzJdCiBfX18KIHJldHVybiBpZiAoJGkmMSk7CSMgWHVwZGF0ZSBpcyB2ZWN0b3JpemVkIGFuZCBleGVjdXRlZCBldmVyeSAybmQgY3ljbGUKQEAgLTU4LDggKzc4LDggQEAKIF9fXwogJGNvZGUuPTw8X19fIGlmICgkaT49MTYpOwogCXhncgkkWFswXSwkcHJlZmV0Y2gJCSMjIyBYdXBkYXRlKCRpKQotCWxnCSRwcmVmZXRjaCxgMTYwKzQqKCgkaSsyKSUxNilgKCRzcCkKLQl4ZwkkWFswXSxgMTYwKzQqKCgkaSs4KSUxNilgKCRzcCkKKwlsZwkkcHJlZmV0Y2gsYCRzdGRmcmFtZSs0KigoJGkrMiklMTYpYCgkc3ApCisJeGcJJFhbMF0sYCRzdGRmcmFtZSs0KigoJGkrOCklMTYpYCgkc3ApCiAJeGdyCSRYWzBdLCRwcmVmZXRjaAogCXJsbAkkWFswXSwkWFswXSwxCiAJcmxsZwkkWFsxXSwkWFswXSwzMgpAQCAtNjgsNyArODgsNyBAQAogCWxyCSRYWzJdLCRYWzFdCQkjIGZlZWRiYWNrCiBfX18KICRjb2RlLj08PF9fXyBpZiAoJGk8PTcwKTsKLQlzdGcJJFhbMF0sYDE2MCs0KigkaSUxNilgKCRzcCkKKwlzdGcJJFhbMF0sYCRzdGRmcmFtZSs0KigkaSUxNilgKCRzcCkKIF9fXwogdW5zaGlmdChAWCxwb3AoQFgpKTsKIH0KQEAgLTE0OCw5ICsxNjgsOSBAQAogCXRtaGwJJXIwLDB4NDAwMAkjIGNoZWNrIGZvciBtZXNzYWdlLXNlY3VyaXR5IGFzc2lzdAogCWp6CS5Mc29mdHdhcmUKIAlsZ2hpCSVyMCwwCi0JbGEJJXIxLDE2KCRzcCkKKwlsYQklcjEsYDIqJFNJWkVfVGAoJHNwKQogCS5sb25nCTB4YjkzZTAwMDIJIyBraW1kICVyMCwlcjIKLQlsZwklcjAsMTYoJHNwKQorCWxnCSVyMCxgMiokU0laRV9UYCgkc3ApCiAJdG1oaAklcjAsYDB4ODAwMD4+JGtpbWRmdW5jYAogCWp6CS5Mc29mdHdhcmUKIAlsZ2hpCSVyMCwka2ltZGZ1bmMKQEAgLTE2NSwxMSArMTg1LDExIEBACiBfX18KICRjb2RlLj08PF9fXzsKIAlsZ2hpCSVyMSwtJGZyYW1lCi0Jc3RnCSRjdHgsMTYoJHNwKQotCXN0bWcJJXI2LCVyMTUsNDgoJHNwKQorCXN0JHtnfQkkY3R4LGAyKiRTSVpFX1RgKCRzcCkKKwlzdG0ke2d9CSVyNiwlcjE1LGA2KiRTSVpFX1RgKCRzcCkKIAlsZ3IJJXIwLCRzcAogCWxhCSRzcCwwKCVyMSwkc3ApCi0Jc3RnCSVyMCwwKCRzcCkKKwlzdCR7Z30JJXIwLDAoJHNwKQogCiAJbGFybAkkdDAsS3RhYmxlCiAJbGxnZgkkQSwwKCRjdHgpCkBAIC0xOTksNyArMjE5LDcgQEAKIGZvciAoOyRpPDgwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiAkY29kZS49PDxfX187CiAKLQlsZwkkY3R4LGAkZnJhbWUrMTZgKCRzcCkKKwlsJHtnfQkkY3R4LGAkZnJhbWUrMiokU0laRV9UYCgkc3ApCiAJbGEJJGlucCw2NCgkaW5wKQogCWFsCSRBLDAoJGN0eCkKIAlhbAkkQiw0KCRjdHgpCkBAIC0yMTEsMTMgKzIzMSwxMyBAQAogCXN0CSRDLDgoJGN0eCkKIAlzdAkkRCwxMigkY3R4KQogCXN0CSRFLDE2KCRjdHgpCi0JYnJjdAkkbGVuLC5MbG9vcAorCWJyY3Qke2d9ICRsZW4sLkxsb29wCiAKLQlsbWcJJXI2LCVyMTUsYCRmcmFtZSs0OGAoJHNwKQorCWxtJHtnfQklcjYsJXIxNSxgJGZyYW1lKzYqJFNJWkVfVGAoJHNwKQogCWJyCSVyMTQKIC5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTFfYmxvY2tfZGF0YV9vcmRlcgogLnN0cmluZwkiU0hBMSBibG9jayB0cmFuc2Zvcm0gZm9yIHMzOTB4LCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotLmNvbW0JT1BFTlNTTF9zMzkweGNhcF9QLDgsOAorLmNvbW0JT1BFTlNTTF9zMzkweGNhcF9QLDE2LDgKIF9fXwogCiAkY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwKaW5kZXggNGVkYzVlYS4uZjI3YzFlMyAxMDA3NTUKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwKQEAgLTE2LDcgKzE2LDcgQEAKICMgVGhlcmUgd2FzIHN1Z2dlc3Rpb24gdG8gbWVjaGFuaWNhbGx5IHRyYW5zbGF0ZSAzMi1iaXQgY29kZSwgYnV0IEkKICMgZGlzbWlzc2VkIGl0LCByZWFzb25pbmcgdGhhdCB4ODZfNjQgb2ZmZXJzIGVub3VnaCByZWdpc3RlciBiYW5rCiAjIGNhcGFjaXR5IHRvIGZ1bGx5IHV0aWxpemUgU0hBLTEgcGFyYWxsZWxpc20uIFRoZXJlZm9yZSB0aGlzIGZyZXNoCi0jIGltcGxlbWVudGF0aW9uOi0pIEhvd2V2ZXIhIFdoaWxlIDY0LWJpdCBjb2RlIGRvZXMgcGVyZm9ybXMgYmV0dGVyCisjIGltcGxlbWVudGF0aW9uOi0pIEhvd2V2ZXIhIFdoaWxlIDY0LWJpdCBjb2RlIGRvZXMgcGVyZm9ybSBiZXR0ZXIKICMgb24gT3B0ZXJvbiwgSSBmYWlsZWQgdG8gYmVhdCAzMi1iaXQgYXNzZW1ibGVyIG9uIEVNNjRUIGNvcmUuIFdlbGwsCiAjIHg4Nl82NCBkb2VzIG9mZmVyIGxhcmdlciAqYWRkcmVzc2FibGUqIGJhbmssIGJ1dCBvdXQtb2Ytb3JkZXIgY29yZQogIyByZWFjaGVzIGZvciBldmVuIG1vcmUgcmVnaXN0ZXJzIHRocm91Z2ggZHluYW1pYyBhbGlhc2luZywgYW5kIEVNNjRUCkBAIC0yOSw2ICsyOSwzOCBAQAogIyBYZW9uIFA0CSs2NSUJCSswJQkJOS45CiAjIENvcmUyCQkrNjAlCQkrMTAlCQk3LjAKIAorIyBBdWd1c3QgMjAwOS4KKyMKKyMgVGhlIGNvZGUgd2FzIHJldmlzZWQgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCB0byBtYXhpbWl6ZQorIyAiZGlzdGFuY2UiIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIHByb2R1Y2luZyBpbnB1dCB0byAnbGVhJworIyBpbnN0cnVjdGlvbiBhbmQgdGhlICdsZWEnIGluc3RydWN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgZXNzZW50aWFsCisjIGZvciBJbnRlbCBBdG9tIGNvcmUuCisKKyMgT2N0b2JlciAyMDEwLgorIworIyBBZGQgU1NTRTMsIFN1cHBsZW1lbnRhbFshXSBTU0UzLCBpbXBsZW1lbnRhdGlvbi4gVGhlIGlkZWEgYmVoaW5kIGl0CisjIGlzIHRvIG9mZmxvYWQgbWVzc2FnZSBzY2hlZHVsZSBkZW5vdGVkIGJ5IFd0IGluIE5JU1Qgc3BlY2lmaWNhdGlvbiwKKyMgb3IgWHVwZGF0ZSBpbiBPcGVuU1NMIHNvdXJjZSwgdG8gU0lNRCB1bml0LiBTZWUgc2hhMS01ODYucGwgbW9kdWxlCisjIGZvciBiYWNrZ3JvdW5kIGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBUaGUgb25seSBkaWZmZXJlbmNlIGZyb20KKyMgMzItYml0IGNvZGUgaXMgdGhhdCA2NC1iaXQgY29kZSBkb2Vzbid0IGhhdmUgdG8gc3BpbGwgQFhbXSBlbGVtZW50cworIyB0byBmcmVlIHRlbXBvcmFyeSByZWdpc3RlcnMuCisKKyMgQXByaWwgMjAxMS4KKyMKKyMgQWRkIEFWWCBjb2RlIHBhdGguIFNlZSBzaGExLTU4Ni5wbCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDdXJyZW50IHBlcmZvcm1hbmNlIGlzIHN1bW1hcml6ZWQgaW4gZm9sbG93aW5nIHRhYmxlLiBOdW1iZXJzIGFyZQorIyBDUFUgY2xvY2sgY3ljbGVzIHNwZW50IHRvIHByb2Nlc3Mgc2luZ2xlIGJ5dGUgKGxlc3MgaXMgYmV0dGVyKS4KKyMKKyMJCXg4Nl82NAkJU1NTRTMJCUFWWAorIyBQNAkJOS44CQktCisjIE9wdGVyb24JNi42CQktCisjIENvcmUyCQk2LjcJCTYuMS8rMTAlCS0KKyMgQXRvbQkJMTEuMAkJOS43LysxMyUJLQorIyBXZXN0bWVyZQk3LjEJCTUuNi8rMjclCS0KKyMgU2FuZHkgQnJpZGdlCTcuOQkJNi4zLysyNSUJNS4yLys1MSUKKwogJGZsYXZvdXIgPSBzaGlmdDsKICRvdXRwdXQgID0gc2hpZnQ7CiBpZiAoJGZsYXZvdXIgPX4gL1wuLykgeyAkb3V0cHV0ID0gJGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CkBAIC00MCw2ICs3MiwxNiBAQAogKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgogZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKIAorJGF2eD0xIGlmIChgJEVOVntDQ30gLVdhLC12IC1jIC1vIC9kZXYvbnVsbCAteCBhc3NlbWJsZXIgL2Rldi9udWxsIDI+JjFgCisJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLyAmJgorCSAgICQxPj0yLjE5KTsKKyRhdng9MSBpZiAoISRhdnggJiYgJHdpbjY0ICYmICgkZmxhdm91ciA9fiAvbmFzbS8gfHwgJEVOVntBU019ID1+IC9uYXNtLykgJiYKKwkgICBgbmFzbSAtdiAyPiYxYCA9fiAvTkFTTSB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8gJiYKKwkgICAkMT49Mi4wOSk7CiskYXZ4PTEgaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL21hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbWw2NC8pICYmCisJICAgYG1sNjQgMj4mMWAgPX4gL1ZlcnNpb24gKFswLTldKylcLi8gJiYKKwkgICAkMT49MTApOworCiBvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOwogCiAkY3R4PSIlcmRpIjsJIyAxc3QgYXJnCkBAIC01MSwyOCArOTMsMTU0IEBACiAkaW5wPSIlcjkiOwogJG51bT0iJXIxMCI7CiAKLSR4aT0iJWVheCI7Ci0kdDA9IiVlYngiOwotJHQxPSIlZWN4IjsKLSRBPSIlZWR4IjsKLSRCPSIlZXNpIjsKLSRDPSIlZWRpIjsKLSREPSIlZWJwIjsKLSRFPSIlcjExZCI7Ci0kVD0iJXIxMmQiOworJHQwPSIlZWF4IjsKKyR0MT0iJWVieCI7CiskdDI9IiVlY3giOworQHhpPSgiJWVkeCIsIiVlYnAiKTsKKyRBPSIlZXNpIjsKKyRCPSIlZWRpIjsKKyRDPSIlcjExZCI7CiskRD0iJXIxMmQiOworJEU9IiVyMTNkIjsKIAotQFY9KCRBLCRCLCRDLCRELCRFLCRUKTsKK0BWPSgkQSwkQiwkQywkRCwkRSk7CiAKLXN1YiBQUk9MT0dVRSB7Ci1teSAkZnVuYz1zaGlmdDsKK3N1YiBCT0RZXzAwXzE5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteSAkaj0kaSsxOworJGNvZGUuPTw8X19fIGlmICgkaT09MCk7CisJbW92CWA0KiRpYCgkaW5wKSwkeGlbMF0KKwlic3dhcAkkeGlbMF0KKwltb3YJJHhpWzBdLGA0KiRpYCglcnNwKQorX19fCiskY29kZS49PDxfX18gaWYgKCRpPDE1KTsKKwltb3YJJGMsJHQwCisJbW92CWA0KiRqYCgkaW5wKSwkeGlbMV0KKwltb3YJJGEsJHQyCisJeG9yCSRkLCR0MAorCWJzd2FwCSR4aVsxXQorCXJvbAlcJDUsJHQyCisJbGVhCTB4NWE4Mjc5OTkoJHhpWzBdLCRlKSwkZQorCWFuZAkkYiwkdDAKKwltb3YJJHhpWzFdLGA0KiRqYCglcnNwKQorCWFkZAkkdDIsJGUKKwl4b3IJJGQsJHQwCisJcm9sCVwkMzAsJGIKKwlhZGQJJHQwLCRlCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk+PTE1KTsKKwltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpWzFdCisJbW92CSRjLCR0MAorCW1vdgkkYSwkdDIKKwl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aVsxXQorCXhvcgkkZCwkdDAKKwlyb2wJXCQ1LCR0MgorCXhvcglgNCooKCRqKzgpJTE2KWAoJXJzcCksJHhpWzFdCisJYW5kCSRiLCR0MAorCWxlYQkweDVhODI3OTk5KCR4aVswXSwkZSksJGUKKwl4b3IJYDQqKCgkaisxMyklMTYpYCglcnNwKSwkeGlbMV0KKwl4b3IJJGQsJHQwCisJcm9sCVwkMSwkeGlbMV0KKwlhZGQJJHQyLCRlCisJcm9sCVwkMzAsJGIKKwltb3YJJHhpWzFdLGA0KigkaiUxNilgKCVyc3ApCisJYWRkCSR0MCwkZQorX19fCit1bnNoaWZ0KEB4aSxwb3AoQHhpKSk7Cit9CisKK3N1YiBCT0RZXzIwXzM5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteSAkaj0kaSsxOworbXkgJEs9KCRpPDQwKT8weDZlZDllYmExOjB4Y2E2MmMxZDY7CiskY29kZS49PDxfX18gaWYgKCRpPDc5KTsKKwltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpWzFdCisJbW92CSRjLCR0MAorCW1vdgkkYSwkdDIKKwl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aVsxXQorCXhvcgkkYiwkdDAKKwlyb2wJXCQ1LCR0MgorCWxlYQkkSygkeGlbMF0sJGUpLCRlCisJeG9yCWA0KigoJGorOCklMTYpYCglcnNwKSwkeGlbMV0KKwl4b3IJJGQsJHQwCisJYWRkCSR0MiwkZQorCXhvcglgNCooKCRqKzEzKSUxNilgKCVyc3ApLCR4aVsxXQorCXJvbAlcJDMwLCRiCisJYWRkCSR0MCwkZQorCXJvbAlcJDEsJHhpWzFdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGk8NzYpOworCW1vdgkkeGlbMV0sYDQqKCRqJTE2KWAoJXJzcCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOworCW1vdgkkYywkdDAKKwltb3YJJGEsJHQyCisJeG9yCSRiLCR0MAorCWxlYQkkSygkeGlbMF0sJGUpLCRlCisJcm9sCVwkNSwkdDIKKwl4b3IJJGQsJHQwCisJYWRkCSR0MiwkZQorCXJvbAlcJDMwLCRiCisJYWRkCSR0MCwkZQorX19fCit1bnNoaWZ0KEB4aSxwb3AoQHhpKSk7Cit9CisKK3N1YiBCT0RZXzQwXzU5IHsKK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87CitteSAkaj0kaSsxOwogJGNvZGUuPTw8X19fOwotLmdsb2JsCSRmdW5jCi0udHlwZQkkZnVuYyxcQGZ1bmN0aW9uLDMKKwltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpWzFdCisJbW92CSRjLCR0MAorCW1vdgkkYywkdDEKKwl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aVsxXQorCWFuZAkkZCwkdDAKKwltb3YJJGEsJHQyCisJeG9yCWA0KigoJGorOCklMTYpYCglcnNwKSwkeGlbMV0KKwl4b3IJJGQsJHQxCisJbGVhCTB4OGYxYmJjZGMoJHhpWzBdLCRlKSwkZQorCXJvbAlcJDUsJHQyCisJeG9yCWA0KigoJGorMTMpJTE2KWAoJXJzcCksJHhpWzFdCisJYWRkCSR0MCwkZQorCWFuZAkkYiwkdDEKKwlyb2wJXCQxLCR4aVsxXQorCWFkZAkkdDEsJGUKKwlyb2wJXCQzMCwkYgorCW1vdgkkeGlbMV0sYDQqKCRqJTE2KWAoJXJzcCkKKwlhZGQJJHQyLCRlCitfX18KK3Vuc2hpZnQoQHhpLHBvcChAeGkpKTsKK30KKworJGNvZGUuPTw8X19fOworLnRleHQKKy5leHRlcm4JT1BFTlNTTF9pYTMyY2FwX1AKKworLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgorLnR5cGUJc2hhMV9ibG9ja19kYXRhX29yZGVyLFxAZnVuY3Rpb24sMwogLmFsaWduCTE2Ci0kZnVuYzoKK3NoYTFfYmxvY2tfZGF0YV9vcmRlcjoKKwltb3YJT1BFTlNTTF9pYTMyY2FwX1ArMCglcmlwKSwlcjlkCisJbW92CU9QRU5TU0xfaWEzMmNhcF9QKzQoJXJpcCksJXI4ZAorCXRlc3QJXCRgMTw8OWAsJXI4ZAkJIyBjaGVjayBTU1NFMyBiaXQKKwlqegkuTGlhbHUKK19fXworJGNvZGUuPTw8X19fIGlmICgkYXZ4KTsKKwlhbmQJXCRgMTw8MjhgLCVyOGQJCSMgbWFzayBBVlggYml0CisJYW5kCVwkYDE8PDMwYCwlcjlkCQkjIG1hc2sgIkludGVsIENQVSIgYml0CisJb3IJJXI5ZCwlcjhkCisJY21wCVwkYDE8PDI4fDE8PDMwYCwlcjhkCisJamUJX2F2eF9zaG9ydGN1dAorX19fCiskY29kZS49PDxfX187CisJam1wCV9zc3NlM19zaG9ydGN1dAorCisuYWxpZ24JMTYKKy5MaWFsdToKIAlwdXNoCSVyYngKIAlwdXNoCSVyYnAKIAlwdXNoCSVyMTIKKwlwdXNoCSVyMTMKIAltb3YJJXJzcCwlcjExCiAJbW92CSVyZGksJGN0eAkjIHJlYXNzaWduZWQgYXJndW1lbnQKIAlzdWIJXCRgOCsxNio0YCwlcnNwCkBAIC04NywxNjAgKzI1NSw4MzIgQEAKIAltb3YJOCgkY3R4KSwkQwogCW1vdgkxMigkY3R4KSwkRAogCW1vdgkxNigkY3R4KSwkRQotX19fCi19CisJam1wCS5MbG9vcAogCi1zdWIgRVBJTE9HVUUgewotbXkgJGZ1bmM9c2hpZnQ7Ci0kY29kZS49PDxfX187Ci0JbW92CWAxNio0YCglcnNwKSwlcnNpCi0JbW92CSglcnNpKSwlcjEyCi0JbW92CTgoJXJzaSksJXJicAotCW1vdgkxNiglcnNpKSwlcmJ4Ci0JbGVhCTI0KCVyc2kpLCVyc3AKLS5MZXBpbG9ndWU6Ci0JcmV0Ci0uc2l6ZQkkZnVuYywuLSRmdW5jCisuYWxpZ24JMTYKKy5MbG9vcDoKIF9fXwotfQotCi1zdWIgQk9EWV8wMF8xOSB7Ci1teSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGhvc3QpPUBfOwotbXkgJGo9JGkrMTsKLSRjb2RlLj08PF9fXyBpZiAoJGk9PTApOwotCW1vdglgNCokaWAoJGlucCksJHhpCQotCWAiYnN3YXAJJHhpIglpZighZGVmaW5lZCgkaG9zdCkpYAotCW1vdgkkeGksYDQqJGlgKCVyc3ApCi1fX18KLSRjb2RlLj08PF9fXyBpZiAoJGk8MTUpOwotCWxlYQkweDVhODI3OTk5KCR4aSwkZSksJGYKLQltb3YJJGMsJHQwCi0JbW92CWA0KiRqYCgkaW5wKSwkeGkKLQltb3YJJGEsJGUKLQl4b3IJJGQsJHQwCi0JYCJic3dhcAkkeGkiCWlmKCFkZWZpbmVkKCRob3N0KSlgCQotCXJvbAlcJDUsJGUKLQlhbmQJJGIsJHQwCi0JbW92CSR4aSxgNCokamAoJXJzcCkKLQlhZGQJJGUsJGYKLQl4b3IJJGQsJHQwCi0Jcm9sCVwkMzAsJGIKLQlhZGQJJHQwLCRmCi1fX18KLSRjb2RlLj08PF9fXyBpZiAoJGk+PTE1KTsKLQlsZWEJMHg1YTgyNzk5OSgkeGksJGUpLCRmCi0JbW92CWA0KigkaiUxNilgKCVyc3ApLCR4aQotCW1vdgkkYywkdDAKLQltb3YJJGEsJGUKLQl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aQotCXhvcgkkZCwkdDAKLQlyb2wJXCQ1LCRlCi0JeG9yCWA0KigoJGorOCklMTYpYCglcnNwKSwkeGkKLQlhbmQJJGIsJHQwCi0JYWRkCSRlLCRmCi0JeG9yCWA0KigoJGorMTMpJTE2KWAoJXJzcCksJHhpCi0JeG9yCSRkLCR0MAotCXJvbAlcJDMwLCRiCi0JYWRkCSR0MCwkZgotCXJvbAlcJDEsJHhpCi0JbW92CSR4aSxgNCooJGolMTYpYCglcnNwKQotX19fCi19Ci0KLXN1YiBCT0RZXzIwXzM5IHsKLW15ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci1teSAkaj0kaSsxOwotbXkgJEs9KCRpPDQwKT8weDZlZDllYmExOjB4Y2E2MmMxZDY7Ci0kY29kZS49PDxfX18gaWYgKCRpPDc5KTsKLQlsZWEJJEsoJHhpLCRlKSwkZgotCW1vdglgNCooJGolMTYpYCglcnNwKSwkeGkKLQltb3YJJGMsJHQwCi0JbW92CSRhLCRlCi0JeG9yCWA0KigoJGorMiklMTYpYCglcnNwKSwkeGkKLQl4b3IJJGIsJHQwCi0Jcm9sCVwkNSwkZQotCXhvcglgNCooKCRqKzgpJTE2KWAoJXJzcCksJHhpCi0JeG9yCSRkLCR0MAotCWFkZAkkZSwkZgotCXhvcglgNCooKCRqKzEzKSUxNilgKCVyc3ApLCR4aQotCXJvbAlcJDMwLCRiCi0JYWRkCSR0MCwkZgotCXJvbAlcJDEsJHhpCi1fX18KLSRjb2RlLj08PF9fXyBpZiAoJGk8NzYpOwotCW1vdgkkeGksYDQqKCRqJTE2KWAoJXJzcCkKLV9fXwotJGNvZGUuPTw8X19fIGlmICgkaT09NzkpOwotCWxlYQkkSygkeGksJGUpLCRmCi0JbW92CSRjLCR0MAotCW1vdgkkYSwkZQotCXhvcgkkYiwkdDAKLQlyb2wJXCQ1LCRlCi0JeG9yCSRkLCR0MAotCWFkZAkkZSwkZgotCXJvbAlcJDMwLCRiCi0JYWRkCSR0MCwkZgotX19fCi19Ci0KLXN1YiBCT0RZXzQwXzU5IHsKLW15ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci1teSAkaj0kaSsxOwotJGNvZGUuPTw8X19fOwotCWxlYQkweDhmMWJiY2RjKCR4aSwkZSksJGYKLQltb3YJYDQqKCRqJTE2KWAoJXJzcCksJHhpCi0JbW92CSRiLCR0MAotCW1vdgkkYiwkdDEKLQl4b3IJYDQqKCgkaisyKSUxNilgKCVyc3ApLCR4aQotCW1vdgkkYSwkZQotCWFuZAkkYywkdDAKLQl4b3IJYDQqKCgkais4KSUxNilgKCVyc3ApLCR4aQotCW9yCSRjLCR0MQotCXJvbAlcJDUsJGUKLQl4b3IJYDQqKCgkaisxMyklMTYpYCglcnNwKSwkeGkKLQlhbmQJJGQsJHQxCi0JYWRkCSRlLCRmCi0Jcm9sCVwkMSwkeGkKLQlvcgkkdDEsJHQwCi0Jcm9sCVwkMzAsJGIKLQltb3YJJHhpLGA0KigkaiUxNilgKCVyc3ApCi0JYWRkCSR0MCwkZgotX19fCi19Ci0KLSRjb2RlPSIudGV4dFxuIjsKLQotJlBST0xPR1VFKCJzaGExX2Jsb2NrX2RhdGFfb3JkZXIiKTsKLSRjb2RlLj0iLmFsaWduCTRcbi5MbG9vcDpcbiI7CiBmb3IoJGk9MDskaTwyMDskaSsrKQl7ICZCT0RZXzAwXzE5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQogZm9yKDskaTw0MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQogZm9yKDskaTw2MDskaSsrKQl7ICZCT0RZXzQwXzU5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQogZm9yKDskaTw4MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQogJGNvZGUuPTw8X19fOwotCWFkZAkwKCRjdHgpLCRFCi0JYWRkCTQoJGN0eCksJFQKLQlhZGQJOCgkY3R4KSwkQQotCWFkZAkxMigkY3R4KSwkQgotCWFkZAkxNigkY3R4KSwkQwotCW1vdgkkRSwwKCRjdHgpCi0JbW92CSRULDQoJGN0eCkKLQltb3YJJEEsOCgkY3R4KQotCW1vdgkkQiwxMigkY3R4KQotCW1vdgkkQywxNigkY3R4KQorCWFkZAkwKCRjdHgpLCRBCisJYWRkCTQoJGN0eCksJEIKKwlhZGQJOCgkY3R4KSwkQworCWFkZAkxMigkY3R4KSwkRAorCWFkZAkxNigkY3R4KSwkRQorCW1vdgkkQSwwKCRjdHgpCisJbW92CSRCLDQoJGN0eCkKKwltb3YJJEMsOCgkY3R4KQorCW1vdgkkRCwxMigkY3R4KQorCW1vdgkkRSwxNigkY3R4KQogCi0JeGNoZwkkRSwkQQkjIG1vdgkkRSwkQQotCXhjaGcJJFQsJEIJIyBtb3YJJFQsJEIKLQl4Y2hnCSRFLCRDCSMgbW92CSRBLCRDCi0JeGNoZwkkVCwkRAkjIG1vdgkkQiwkRAotCQkJIyBtb3YJJEMsJEUKLQlsZWEJYDE2KjRgKCRpbnApLCRpbnAKIAlzdWIJXCQxLCRudW0KKwlsZWEJYDE2KjRgKCRpbnApLCRpbnAKIAlqbnoJLkxsb29wCisKKwltb3YJYDE2KjRgKCVyc3ApLCVyc2kKKwltb3YJKCVyc2kpLCVyMTMKKwltb3YJOCglcnNpKSwlcjEyCisJbW92CTE2KCVyc2kpLCVyYnAKKwltb3YJMjQoJXJzaSksJXJieAorCWxlYQkzMiglcnNpKSwlcnNwCisuTGVwaWxvZ3VlOgorCXJldAorLnNpemUJc2hhMV9ibG9ja19kYXRhX29yZGVyLC4tc2hhMV9ibG9ja19kYXRhX29yZGVyCiBfX18KLSZFUElMT0dVRSgic2hhMV9ibG9ja19kYXRhX29yZGVyIik7Cit7e3sKK215ICRYaT00OworbXkgQFg9bWFwKCIleG1tJF8iLCg0Li43LDAuLjMpKTsKK215IEBUeD1tYXAoIiV4bW0kXyIsKDguLjEwKSk7CitteSBAVj0oJEEsJEIsJEMsJEQsJEUpPSgiJWVheCIsIiVlYngiLCIlZWN4IiwiJWVkeCIsIiVlYnAiKTsJIyBzaXplIG9wdGltaXphdGlvbgorbXkgQFQ9KCIlZXNpIiwiJWVkaSIpOworbXkgJGo9MDsKK215ICRLX1hYX1hYPSIlcjExIjsKKworbXkgJF9yb2w9c3ViIHsgJnJvbChAXykgfTsKK215ICRfcm9yPXN1YiB7ICZyb3IoQF8pIH07CisKKyRjb2RlLj08PF9fXzsKKy50eXBlCXNoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMyxcQGZ1bmN0aW9uLDMKKy5hbGlnbgkxNgorc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzOgorX3Nzc2UzX3Nob3J0Y3V0OgorCXB1c2gJJXJieAorCXB1c2gJJXJicAorCXB1c2gJJXIxMgorCWxlYQlgLTY0LSgkd2luNjQ/NSoxNjowKWAoJXJzcCksJXJzcAorX19fCiskY29kZS49PDxfX18gaWYgKCR3aW42NCk7CisJbW92YXBzCSV4bW02LDY0KzAoJXJzcCkKKwltb3ZhcHMJJXhtbTcsNjQrMTYoJXJzcCkKKwltb3ZhcHMJJXhtbTgsNjQrMzIoJXJzcCkKKwltb3ZhcHMJJXhtbTksNjQrNDgoJXJzcCkKKwltb3ZhcHMJJXhtbTEwLDY0KzY0KCVyc3ApCisuTHByb2xvZ3VlX3Nzc2UzOgorX19fCiskY29kZS49PDxfX187CisJbW92CSVyZGksJGN0eAkjIHJlYXNzaWduZWQgYXJndW1lbnQKKwltb3YJJXJzaSwkaW5wCSMgcmVhc3NpZ25lZCBhcmd1bWVudAorCW1vdgklcmR4LCRudW0JIyByZWFzc2lnbmVkIGFyZ3VtZW50CisKKwlzaGwJXCQ2LCRudW0KKwlhZGQJJGlucCwkbnVtCisJbGVhCUtfWFhfWFgoJXJpcCksJEtfWFhfWFgKKworCW1vdgkwKCRjdHgpLCRBCQkjIGxvYWQgY29udGV4dAorCW1vdgk0KCRjdHgpLCRCCisJbW92CTgoJGN0eCksJEMKKwltb3YJMTIoJGN0eCksJEQKKwltb3YJJEIsQFRbMF0JCSMgbWFnaWMgc2VlZAorCW1vdgkxNigkY3R4KSwkRQorCisJbW92ZHFhCTY0KCRLX1hYX1hYKSxAWFsyXQkjIHBic3dhcCBtYXNrCisJbW92ZHFhCTAoJEtfWFhfWFgpLEBUeFsxXQkjIEtfMDBfMTkKKwltb3ZkcXUJMCgkaW5wKSxAWFstNCY3XQkjIGxvYWQgaW5wdXQgdG8gJXhtbVswLTNdCisJbW92ZHF1CTE2KCRpbnApLEBYWy0zJjddCisJbW92ZHF1CTMyKCRpbnApLEBYWy0yJjddCisJbW92ZHF1CTQ4KCRpbnApLEBYWy0xJjddCisJcHNodWZiCUBYWzJdLEBYWy00JjddCQkjIGJ5dGUgc3dhcAorCWFkZAlcJDY0LCRpbnAKKwlwc2h1ZmIJQFhbMl0sQFhbLTMmN10KKwlwc2h1ZmIJQFhbMl0sQFhbLTImN10KKwlwc2h1ZmIJQFhbMl0sQFhbLTEmN10KKwlwYWRkZAlAVHhbMV0sQFhbLTQmN10JCSMgYWRkIEtfMDBfMTkKKwlwYWRkZAlAVHhbMV0sQFhbLTMmN10KKwlwYWRkZAlAVHhbMV0sQFhbLTImN10KKwltb3ZkcWEJQFhbLTQmN10sMCglcnNwKQkjIFhbXStLIHhmZXIgdG8gSUFMVQorCXBzdWJkCUBUeFsxXSxAWFstNCY3XQkJIyByZXN0b3JlIFhbXQorCW1vdmRxYQlAWFstMyY3XSwxNiglcnNwKQorCXBzdWJkCUBUeFsxXSxAWFstMyY3XQorCW1vdmRxYQlAWFstMiY3XSwzMiglcnNwKQorCXBzdWJkCUBUeFsxXSxAWFstMiY3XQorCWptcAkuTG9vcF9zc3NlMworX19fCisKK3N1YiBBVVRPTE9BRCgpCQkjIHRodW5rIFtzaW1wbGlmaWVkXSAzMi1iaXQgc3R5bGUgcGVybGFzbQoreyBteSAkb3Bjb2RlID0gJEFVVE9MT0FEOyAkb3Bjb2RlID1+IHMvLio6Oi8vOworICBteSAkYXJnID0gcG9wOworICAgICRhcmcgPSAiXCQkYXJnIiBpZiAoJGFyZyoxIGVxICRhcmcpOworICAgICRjb2RlIC49ICJcdCRvcGNvZGVcdCIuam9pbignLCcsJGFyZyxyZXZlcnNlIEBfKS4iXG4iOworfQorCitzdWIgWHVwZGF0ZV9zc3NlM18xNl8zMSgpCQkjIHJlY2FsbCB0aGF0ICRYaSBzdGFydHMgd3RpaCA0Cit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyA0MCBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZtb3ZkcWEJKEBYWzBdLEBYWy0zJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmbW92ZHFhCShAVHhbMF0sQFhbLTEmN10pOworCSZwYWxpZ25yKEBYWzBdLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZwYWRkZAkoQFR4WzFdLEBYWy0xJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmcHNybGRxCShAVHhbMF0sNCk7CQkjICJYWy0zXSIsIDMgZHdvcmRzCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSJePSJYWy0xNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHhvcgkoQFR4WzBdLEBYWy0yJjddKTsJIyAiWFstM10iXiJYWy04XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZtb3ZkcWEJKEBUeFsyXSxAWFswXSk7CisJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZwc2xsZHEJKEBUeFsyXSwxMik7CQkjICJYWzBdIjw8OTYsIGV4dHJhY3Qgb25lIGR3b3JkCisJJnBhZGRkCShAWFswXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBUeFswXSwzMSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJm1vdmRxYQkoQFR4WzFdLEBUeFsyXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmcHNybGQJKEBUeFsyXSwzMCk7CisJJnBvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTEKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZwc2xsZAkoQFR4WzFdLDIpOworCSZweG9yCShAWFswXSxAVHhbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoQFR4WzJdLGV2YWwoMTYqKCgkWGkpLzUpKS4iKCRLX1hYX1hYKSIpOwkjIEtfWFhfWFgKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZweG9yCShAWFswXSxAVHhbMV0pOwkJIyAiWFswXSJePSgiWFswXSI+Pjk2KTw8PDIKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMgW2lmIGFueV0KKworICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQorCQlwdXNoKEBUeCxzaGlmdChAVHgpKTsKK30KKworc3ViIFh1cGRhdGVfc3NzZTNfMzJfNzkoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgdG8gNDggaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwkmbW92ZHFhCShAVHhbMF0sQFhbLTEmN10pCWlmICgkWGk9PTgpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJJnB4b3IJKEBYWzBdLEBYWy00JjddKTsJIyAiWFswXSI9IlhbLTMyXSJeIlhbLTE2XSIKKwkmcGFsaWducihAVHhbMF0sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJnB4b3IJKEBYWzBdLEBYWy03JjddKTsJIyAiWFswXSJePSJYWy0yOF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSkJaWYgKEBpbnNuc1swXSAhfiAvJnJvW3JsXS8pOworCWlmICgkWGklNSkgeworCSAgJm1vdmRxYQkoQFR4WzJdLEBUeFsxXSk7IyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgorCX0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQorCSAgJm1vdmRxYQkoQFR4WzJdLGV2YWwoMTYqKCRYaS81KSkuIigkS19YWF9YWCkiKTsKKwl9CisJICAmcGFkZGQJKEBUeFsxXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnB4b3IJKEBYWzBdLEBUeFswXSk7CQkjICJYWzBdIl49IlhbLTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJm1vdmRxYQkoQFR4WzBdLEBYWzBdKTsKKwkgICZtb3ZkcWEJKGV2YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnBzbGxkCShAWFswXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc3JsZAkoQFR4WzBdLDMwKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnBvcgkoQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJm1vdmRxYQkoQFR4WzFdLEBYWzBdKQlpZiAoJFhpPDE5KTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9sCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CSMgcmVtYWluaW5nIGluc3RydWN0aW9ucworCisgICRYaSsrOwlwdXNoKEBYLHNoaWZ0KEBYKSk7CSMgInJvdGF0ZSIgWFtdCisJCXB1c2goQFR4LHNoaWZ0KEBUeCkpOworfQorCitzdWIgWHVwbGFzdF9zc3NlM184MCgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnBhZGRkCShAVHhbMV0sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJICAmbW92ZHFhCShldmFsKDE2KigoJFhpLTEpJjMpKS4iKCVyc3ApIixAVHhbMV0pOwkjIFhbXStLIHhmZXIgSUFMVQorCisJIGZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKKworCSZjbXAJKCRpbnAsJG51bSk7CisJJmplCSgiLkxkb25lX3Nzc2UzIik7CisKKwl1bnNoaWZ0KEBUeCxwb3AoQFR4KSk7CisKKwkmbW92ZHFhCShAWFsyXSwiNjQoJEtfWFhfWFgpIik7CQkjIHBic3dhcCBtYXNrCisJJm1vdmRxYQkoQFR4WzFdLCIwKCRLX1hYX1hYKSIpOwkJIyBLXzAwXzE5CisJJm1vdmRxdQkoQFhbLTQmN10sIjAoJGlucCkiKTsJCSMgbG9hZCBpbnB1dAorCSZtb3ZkcXUJKEBYWy0zJjddLCIxNigkaW5wKSIpOworCSZtb3ZkcXUJKEBYWy0yJjddLCIzMigkaW5wKSIpOworCSZtb3ZkcXUJKEBYWy0xJjddLCI0OCgkaW5wKSIpOworCSZwc2h1ZmIJKEBYWy00JjddLEBYWzJdKTsJCSMgYnl0ZSBzd2FwCisJJmFkZAkoJGlucCw2NCk7CisKKyAgJFhpPTA7Cit9CisKK3N1YiBYbG9vcF9zc3NlMygpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwc2h1ZmIJKEBYWygkWGktMykmN10sQFhbMl0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZwYWRkZAkoQFhbKCRYaS00KSY3XSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZtb3ZkcWEJKGV2YWwoMTYqJFhpKS4iKCVyc3ApIixAWFsoJFhpLTQpJjddKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmcHN1YmQJKEBYWygkWGktNCkmN10sQFR4WzFdKTsKKworCWZvcmVhY2ggKEBpbnNucykgeyBldmFsOyB9CisgICRYaSsrOworfQorCitzdWIgWHRhaWxfc3NzZTMoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwlmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQorfQorCitzdWIgYm9keV8wMF8xOSAoKSB7CisJKAorCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCisJJyZhZGQJKCRlLGV2YWwoNCooJGomMTUpKS4iKCVyc3ApIik7JywJIyBYW10rSyB4ZmVyCisJJyZ4b3IJKCRjLCRkKTsnLAorCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJvdW5kCisJJyYkX3JvbAkoJGEsNSk7JywKKwknJmFuZAkoQFRbMF0sJGMpOycsCSMgKCRiJigkY14kZCkpCisJJyZ4b3IJKCRjLCRkKTsnLAkjIHJlc3RvcmUgJGMKKwknJnhvcgkoQFRbMF0sJGQpOycsCisJJyZhZGQJKCRlLCRhKTsnLAorCScmJF9yb3IJKCRiLCRqPzc6Mik7JywJIyAkYj4+PjIKKwknJmFkZAkoJGUsQFRbMF0pOycJLickaisrOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBULHBvcChAVCkpOycKKwkpOworfQorCitzdWIgYm9keV8yMF8zOSAoKSB7CisJKAorCScoJGEsJGIsJGMsJGQsJGUpPUBWOycuCisJJyZhZGQJKCRlLGV2YWwoNCooJGorKyYxNSkpLiIoJXJzcCkiKTsnLAkjIFhbXStLIHhmZXIKKwknJnhvcgkoQFRbMF0sJGQpOycsCSMgKCRiXiRkKQorCScmbW92CShAVFsxXSwkYSk7JywJIyAkYiBpbiBuZXh0IHJvdW5kCisJJyYkX3JvbAkoJGEsNSk7JywKKwknJnhvcgkoQFRbMF0sJGMpOycsCSMgKCRiXiRkXiRjKQorCScmYWRkCSgkZSwkYSk7JywKKwknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgorCScmYWRkCSgkZSxAVFswXSk7JwkuJ3Vuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFQscG9wKEBUKSk7JworCSk7Cit9CisKK3N1YiBib2R5XzQwXzU5ICgpIHsKKwkoCisJJygkYSwkYiwkYywkZCwkZSk9QFY7Jy4KKwknJm1vdgkoQFRbMV0sJGMpOycsCisJJyZ4b3IJKCRjLCRkKTsnLAorCScmYWRkCSgkZSxldmFsKDQqKCRqKysmMTUpKS4iKCVyc3ApIik7JywJIyBYW10rSyB4ZmVyCisJJyZhbmQJKEBUWzFdLCRkKTsnLAorCScmYW5kCShAVFswXSwkYyk7JywJIyAoJGImKCRjXiRkKSkKKwknJiRfcm9yCSgkYiw3KTsnLAkjICRiPj4+MgorCScmYWRkCSgkZSxAVFsxXSk7JywKKwknJm1vdgkoQFRbMV0sJGEpOycsCSMgJGIgaW4gbmV4dCByb3VuZAorCScmJF9yb2wJKCRhLDUpOycsCisJJyZhZGQJKCRlLEBUWzBdKTsnLAorCScmeG9yCSgkYywkZCk7JywJIyByZXN0b3JlICRjCisJJyZhZGQJKCRlLCRhKTsnCS4ndW5zaGlmdChAVixwb3AoQFYpKTsgdW5zaGlmdChAVCxwb3AoQFQpKTsnCisJKTsKK30KKyRjb2RlLj08PF9fXzsKKy5hbGlnbgkxNgorLkxvb3Bfc3NzZTM6CitfX18KKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzE2XzMxKFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfc3NzZTNfMTZfMzEoXCZib2R5XzAwXzE5KTsKKwkmWHVwZGF0ZV9zc3NlM18xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8wMF8xOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV8yMF8zOSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzIwXzM5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX3Nzc2UzXzMyXzc5KFwmYm9keV80MF81OSk7CisJJlh1cGRhdGVfc3NzZTNfMzJfNzkoXCZib2R5XzQwXzU5KTsKKwkmWHVwZGF0ZV9zc3NlM18zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBsYXN0X3Nzc2UzXzgwKFwmYm9keV8yMF8zOSk7CSMgY2FuIGp1bXAgdG8gImRvbmUiCisKKwkJCQkkc2F2ZWRfaj0kajsgQHNhdmVkX1Y9QFY7CisKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3Bfc3NzZTMoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCWFkZAkwKCRjdHgpLCRBCQkJIyB1cGRhdGUgY29udGV4dAorCWFkZAk0KCRjdHgpLEBUWzBdCisJYWRkCTgoJGN0eCksJEMKKwlhZGQJMTIoJGN0eCksJEQKKwltb3YJJEEsMCgkY3R4KQorCWFkZAkxNigkY3R4KSwkRQorCW1vdglAVFswXSw0KCRjdHgpCisJbW92CUBUWzBdLCRCCQkJIyBtYWdpYyBzZWVkCisJbW92CSRDLDgoJGN0eCkKKwltb3YJJEQsMTIoJGN0eCkKKwltb3YJJEUsMTYoJGN0eCkKKwlqbXAJLkxvb3Bfc3NzZTMKKworLmFsaWduCTE2CisuTGRvbmVfc3NzZTM6CitfX18KKwkJCQkkaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CisKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKwkmWHRhaWxfc3NzZTMoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCWFkZAkwKCRjdHgpLCRBCQkJIyB1cGRhdGUgY29udGV4dAorCWFkZAk0KCRjdHgpLEBUWzBdCisJYWRkCTgoJGN0eCksJEMKKwltb3YJJEEsMCgkY3R4KQorCWFkZAkxMigkY3R4KSwkRAorCW1vdglAVFswXSw0KCRjdHgpCisJYWRkCTE2KCRjdHgpLCRFCisJbW92CSRDLDgoJGN0eCkKKwltb3YJJEQsMTIoJGN0eCkKKwltb3YJJEUsMTYoJGN0eCkKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwk2NCswKCVyc3ApLCV4bW02CisJbW92YXBzCTY0KzE2KCVyc3ApLCV4bW03CisJbW92YXBzCTY0KzMyKCVyc3ApLCV4bW04CisJbW92YXBzCTY0KzQ4KCVyc3ApLCV4bW05CisJbW92YXBzCTY0KzY0KCVyc3ApLCV4bW0xMAorX19fCiskY29kZS49PDxfX187CisJbGVhCWA2NCsoJHdpbjY0PzUqMTY6MClgKCVyc3ApLCVyc2kKKwltb3YJMCglcnNpKSwlcjEyCisJbW92CTgoJXJzaSksJXJicAorCW1vdgkxNiglcnNpKSwlcmJ4CisJbGVhCTI0KCVyc2kpLCVyc3AKKy5MZXBpbG9ndWVfc3NzZTM6CisJcmV0Cisuc2l6ZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfc3NzZTMsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXJfc3NzZTMKK19fXworCitpZiAoJGF2eCkgeworbXkgJFhpPTQ7CitteSBAWD1tYXAoIiV4bW0kXyIsKDQuLjcsMC4uMykpOworbXkgQFR4PW1hcCgiJXhtbSRfIiwoOC4uMTApKTsKK215IEBWPSgkQSwkQiwkQywkRCwkRSk9KCIlZWF4IiwiJWVieCIsIiVlY3giLCIlZWR4IiwiJWVicCIpOwkjIHNpemUgb3B0aW1pemF0aW9uCitteSBAVD0oIiVlc2kiLCIlZWRpIik7CitteSAkaj0wOworbXkgJEtfWFhfWFg9IiVyMTEiOworCitteSAkX3JvbD1zdWIgeyAmc2hsZChAX1swXSxAXykgfTsKK215ICRfcm9yPXN1YiB7ICZzaHJkKEBfWzBdLEBfKSB9OworCiskY29kZS49PDxfX187CisudHlwZQlzaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4LFxAZnVuY3Rpb24sMworLmFsaWduCTE2CitzaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4OgorX2F2eF9zaG9ydGN1dDoKKwlwdXNoCSVyYngKKwlwdXNoCSVyYnAKKwlwdXNoCSVyMTIKKwlsZWEJYC02NC0oJHdpbjY0PzUqMTY6MClgKCVyc3ApLCVyc3AKK19fXworJGNvZGUuPTw8X19fIGlmICgkd2luNjQpOworCW1vdmFwcwkleG1tNiw2NCswKCVyc3ApCisJbW92YXBzCSV4bW03LDY0KzE2KCVyc3ApCisJbW92YXBzCSV4bW04LDY0KzMyKCVyc3ApCisJbW92YXBzCSV4bW05LDY0KzQ4KCVyc3ApCisJbW92YXBzCSV4bW0xMCw2NCs2NCglcnNwKQorLkxwcm9sb2d1ZV9hdng6CitfX18KKyRjb2RlLj08PF9fXzsKKwltb3YJJXJkaSwkY3R4CSMgcmVhc3NpZ25lZCBhcmd1bWVudAorCW1vdgklcnNpLCRpbnAJIyByZWFzc2lnbmVkIGFyZ3VtZW50CisJbW92CSVyZHgsJG51bQkjIHJlYXNzaWduZWQgYXJndW1lbnQKKwl2emVyb2FsbAorCisJc2hsCVwkNiwkbnVtCisJYWRkCSRpbnAsJG51bQorCWxlYQlLX1hYX1hYKCVyaXApLCRLX1hYX1hYCisKKwltb3YJMCgkY3R4KSwkQQkJIyBsb2FkIGNvbnRleHQKKwltb3YJNCgkY3R4KSwkQgorCW1vdgk4KCRjdHgpLCRDCisJbW92CTEyKCRjdHgpLCRECisJbW92CSRCLEBUWzBdCQkjIG1hZ2ljIHNlZWQKKwltb3YJMTYoJGN0eCksJEUKKworCXZtb3ZkcWEJNjQoJEtfWFhfWFgpLEBYWzJdCSMgcGJzd2FwIG1hc2sKKwl2bW92ZHFhCTAoJEtfWFhfWFgpLEBUeFsxXQkjIEtfMDBfMTkKKwl2bW92ZHF1CTAoJGlucCksQFhbLTQmN10JIyBsb2FkIGlucHV0IHRvICV4bW1bMC0zXQorCXZtb3ZkcXUJMTYoJGlucCksQFhbLTMmN10KKwl2bW92ZHF1CTMyKCRpbnApLEBYWy0yJjddCisJdm1vdmRxdQk0OCgkaW5wKSxAWFstMSY3XQorCXZwc2h1ZmIJQFhbMl0sQFhbLTQmN10sQFhbLTQmN10JIyBieXRlIHN3YXAKKwlhZGQJXCQ2NCwkaW5wCisJdnBzaHVmYglAWFsyXSxAWFstMyY3XSxAWFstMyY3XQorCXZwc2h1ZmIJQFhbMl0sQFhbLTImN10sQFhbLTImN10KKwl2cHNodWZiCUBYWzJdLEBYWy0xJjddLEBYWy0xJjddCisJdnBhZGRkCUBUeFsxXSxAWFstNCY3XSxAWFswXQkjIGFkZCBLXzAwXzE5CisJdnBhZGRkCUBUeFsxXSxAWFstMyY3XSxAWFsxXQorCXZwYWRkZAlAVHhbMV0sQFhbLTImN10sQFhbMl0KKwl2bW92ZHFhCUBYWzBdLDAoJXJzcCkJCSMgWFtdK0sgeGZlciB0byBJQUxVCisJdm1vdmRxYQlAWFsxXSwxNiglcnNwKQorCXZtb3ZkcWEJQFhbMl0sMzIoJXJzcCkKKwlqbXAJLkxvb3BfYXZ4CitfX18KKworc3ViIFh1cGRhdGVfYXZ4XzE2XzMxKCkJCSMgcmVjYWxsIHRoYXQgJFhpIHN0YXJ0cyB3dGloIDQKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDQwIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwYWxpZ25yKEBYWzBdLEBYWy0zJjddLEBYWy00JjddLDgpOwkjIGNvbXBvc2UgIlhbLTE0XSIgaW4gIlhbMF0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkgICZ2cGFkZGQJKEBUeFsxXSxAVHhbMV0sQFhbLTEmN10pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cHNybGRxKEBUeFswXSxAWFstMSY3XSw0KTsJIyAiWFstM10iLCAzIGR3b3JkcworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2cHhvcgkoQFhbMF0sQFhbMF0sQFhbLTQmN10pOwkJIyAiWFswXSJePSJYWy0xNl0iCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnB4b3IJKEBUeFswXSxAVHhbMF0sQFhbLTImN10pOwkjICJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy0zXSJeIlhbLThdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZtb3ZkcWEJKGV2YWwoMTYqKCgkWGktMSkmMykpLiIoJXJzcCkiLEBUeFsxXSk7CSMgWFtdK0sgeGZlciB0byBJQUxVCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzcmxkCShAVHhbMF0sQFhbMF0sMzEpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZwc2xsZHEoQFR4WzJdLEBYWzBdLDEyKTsJCSMgIlhbMF0iPDw5NiwgZXh0cmFjdCBvbmUgZHdvcmQKKwkmdnBhZGRkCShAWFswXSxAWFswXSxAWFswXSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzcmxkCShAVHhbMV0sQFR4WzJdLDMwKTsKKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTEKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSZ2cHNsbGQJKEBUeFsyXSxAVHhbMl0sMik7CisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMl0pOwkJIyAiWFswXSJePSgiWFswXSI+Pjk2KTw8PDIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgICZ2bW92ZHFhCShAVHhbMl0sZXZhbCgxNiooKCRYaSkvNSkpLiIoJEtfWFhfWFgpIik7CSMgS19YWF9YWAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisKKwkgZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zIFtpZiBhbnldCisKKyAgJFhpKys7CXB1c2goQFgsc2hpZnQoQFgpKTsJIyAicm90YXRlIiBYW10KKwkJcHVzaChAVHgsc2hpZnQoQFR4KSk7Cit9CisKK3N1YiBYdXBkYXRlX2F2eF8zMl83OSgpCit7IHVzZSBpbnRlZ2VyOworICBteSAkYm9keSA9IHNoaWZ0OworICBteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAzMiB0byA0OCBpbnN0cnVjdGlvbnMKKyAgbXkgKCRhLCRiLCRjLCRkLCRlKTsKKworCSZ2cGFsaWducihAVHhbMF0sQFhbLTEmN10sQFhbLTImN10sOCk7CSMgY29tcG9zZSAiWFstNl0iCisJJnZweG9yCShAWFswXSxAWFswXSxAWFstNCY3XSk7CQkjICJYWzBdIj0iWFstMzJdIl4iWFstMTZdIgorCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyBib2R5XzIwXzM5CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCisJJnZweG9yCShAWFswXSxAWFswXSxAWFstNyY3XSk7CQkjICJYWzBdIl49IlhbLTI4XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKQlpZiAoQGluc25zWzBdICF+IC8mcm9bcmxdLyk7CisJaWYgKCRYaSU1KSB7CisJICAmdm1vdmRxYQkoQFR4WzJdLEBUeFsxXSk7IyAicGVycGV0dWF0ZSIgS19YWF9YWC4uLgorCX0gZWxzZSB7CQkJIyAuLi4gb3IgbG9hZCBuZXh0IG9uZQorCSAgJnZtb3ZkcWEJKEBUeFsyXSxldmFsKDE2KigkWGkvNSkpLiIoJEtfWFhfWFgpIik7CisJfQorCSAgJnZwYWRkZAkoQFR4WzFdLEBUeFsxXSxAWFstMSY3XSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvcgorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJJnZweG9yCShAWFswXSxAWFswXSxAVHhbMF0pOwkJIyAiWFswXSJePSJYWy02XSIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKworCSZ2cHNybGQJKEBUeFswXSxAWFswXSwzMCk7CisJICAmdm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIHRvIElBTFUKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBzbGxkCShAWFswXSxAWFswXSwyKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgcm9yCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisKKwkmdnBvcgkoQFhbMF0sQFhbMF0sQFR4WzBdKTsJCSMgIlhbMF0iPDw8PTIKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsJCSMgYm9keV8yMF8zOQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSAgJnZtb3ZkcWEJKEBUeFsxXSxAWFswXSkJaWYgKCRYaTwxOSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CQkjIHJvbAorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOwkJIyByb2wKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkjIHJlbWFpbmluZyBpbnN0cnVjdGlvbnMKKworICAkWGkrKzsJcHVzaChAWCxzaGlmdChAWCkpOwkjICJyb3RhdGUiIFhbXQorCQlwdXNoKEBUeCxzaGlmdChAVHgpKTsKK30KKworc3ViIFh1cGxhc3RfYXZ4XzgwKCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJICAmdnBhZGRkCShAVHhbMV0sQFR4WzFdLEBYWy0xJjddKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKworCSAgJm1vdmRxYQkoZXZhbCgxNiooKCRYaS0xKSYzKSkuIiglcnNwKSIsQFR4WzFdKTsJIyBYW10rSyB4ZmVyIElBTFUKKworCSBmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCisKKwkmY21wCSgkaW5wLCRudW0pOworCSZqZQkoIi5MZG9uZV9hdngiKTsKKworCXVuc2hpZnQoQFR4LHBvcChAVHgpKTsKKworCSZ2bW92ZHFhKEBYWzJdLCI2NCgkS19YWF9YWCkiKTsJCSMgcGJzd2FwIG1hc2sKKwkmdm1vdmRxYShAVHhbMV0sIjAoJEtfWFhfWFgpIik7CQkjIEtfMDBfMTkKKwkmdm1vdmRxdShAWFstNCY3XSwiMCgkaW5wKSIpOwkJIyBsb2FkIGlucHV0CisJJnZtb3ZkcXUoQFhbLTMmN10sIjE2KCRpbnApIik7CisJJnZtb3ZkcXUoQFhbLTImN10sIjMyKCRpbnApIik7CisJJnZtb3ZkcXUoQFhbLTEmN10sIjQ4KCRpbnApIik7CisJJnZwc2h1ZmIoQFhbLTQmN10sQFhbLTQmN10sQFhbMl0pOwkjIGJ5dGUgc3dhcAorCSZhZGQJKCRpbnAsNjQpOworCisgICRYaT0wOworfQorCitzdWIgWGxvb3BfYXZ4KCkKK3sgdXNlIGludGVnZXI7CisgIG15ICRib2R5ID0gc2hpZnQ7CisgIG15IEBpbnNucyA9ICgmJGJvZHksJiRib2R5LCYkYm9keSwmJGJvZHkpOwkjIDMyIGluc3RydWN0aW9ucworICBteSAoJGEsJGIsJGMsJGQsJGUpOworCisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJIGV2YWwoc2hpZnQoQGluc25zKSk7CisJJnZwc2h1ZmIoQFhbKCRYaS0zKSY3XSxAWFsoJFhpLTMpJjddLEBYWzJdKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkgZXZhbChzaGlmdChAaW5zbnMpKTsKKwkmdnBhZGRkCShAWFskWGkmN10sQFhbKCRYaS00KSY3XSxAVHhbMV0pOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSZ2bW92ZHFhKGV2YWwoMTYqJFhpKS4iKCVyc3ApIixAWFskWGkmN10pOwkjIFhbXStLIHhmZXIgdG8gSUFMVQorCSBldmFsKHNoaWZ0KEBpbnNucykpOworCSBldmFsKHNoaWZ0KEBpbnNucykpOworCisJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0KKyAgJFhpKys7Cit9CisKK3N1YiBYdGFpbF9hdngoKQoreyB1c2UgaW50ZWdlcjsKKyAgbXkgJGJvZHkgPSBzaGlmdDsKKyAgbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMzIgaW5zdHJ1Y3Rpb25zCisgIG15ICgkYSwkYiwkYywkZCwkZSk7CisKKwlmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQorfQorCiskY29kZS49PDxfX187CisuYWxpZ24JMTYKKy5Mb29wX2F2eDoKK19fXworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8xNl8zMShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMDBfMTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfNDBfNTkpOworCSZYdXBkYXRlX2F2eF8zMl83OShcJmJvZHlfMjBfMzkpOworCSZYdXBsYXN0X2F2eF84MChcJmJvZHlfMjBfMzkpOwkjIGNhbiBqdW1wIHRvICJkb25lIgorCisJCQkJJHNhdmVkX2o9JGo7IEBzYXZlZF9WPUBWOworCisJJlhsb29wX2F2eChcJmJvZHlfMjBfMzkpOworCSZYbG9vcF9hdngoXCZib2R5XzIwXzM5KTsKKwkmWGxvb3BfYXZ4KFwmYm9keV8yMF8zOSk7CisKKyRjb2RlLj08PF9fXzsKKwlhZGQJMCgkY3R4KSwkQQkJCSMgdXBkYXRlIGNvbnRleHQKKwlhZGQJNCgkY3R4KSxAVFswXQorCWFkZAk4KCRjdHgpLCRDCisJYWRkCTEyKCRjdHgpLCRECisJbW92CSRBLDAoJGN0eCkKKwlhZGQJMTYoJGN0eCksJEUKKwltb3YJQFRbMF0sNCgkY3R4KQorCW1vdglAVFswXSwkQgkJCSMgbWFnaWMgc2VlZAorCW1vdgkkQyw4KCRjdHgpCisJbW92CSRELDEyKCRjdHgpCisJbW92CSRFLDE2KCRjdHgpCisJam1wCS5Mb29wX2F2eAorCisuYWxpZ24JMTYKKy5MZG9uZV9hdng6CitfX18KKwkJCQkkaj0kc2F2ZWRfajsgQFY9QHNhdmVkX1Y7CisKKwkmWHRhaWxfYXZ4KFwmYm9keV8yMF8zOSk7CisJJlh0YWlsX2F2eChcJmJvZHlfMjBfMzkpOworCSZYdGFpbF9hdngoXCZib2R5XzIwXzM5KTsKKworJGNvZGUuPTw8X19fOworCXZ6ZXJvYWxsCisKKwlhZGQJMCgkY3R4KSwkQQkJCSMgdXBkYXRlIGNvbnRleHQKKwlhZGQJNCgkY3R4KSxAVFswXQorCWFkZAk4KCRjdHgpLCRDCisJbW92CSRBLDAoJGN0eCkKKwlhZGQJMTIoJGN0eCksJEQKKwltb3YJQFRbMF0sNCgkY3R4KQorCWFkZAkxNigkY3R4KSwkRQorCW1vdgkkQyw4KCRjdHgpCisJbW92CSRELDEyKCRjdHgpCisJbW92CSRFLDE2KCRjdHgpCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJHdpbjY0KTsKKwltb3ZhcHMJNjQrMCglcnNwKSwleG1tNgorCW1vdmFwcwk2NCsxNiglcnNwKSwleG1tNworCW1vdmFwcwk2NCszMiglcnNwKSwleG1tOAorCW1vdmFwcwk2NCs0OCglcnNwKSwleG1tOQorCW1vdmFwcwk2NCs2NCglcnNwKSwleG1tMTAKK19fXworJGNvZGUuPTw8X19fOworCWxlYQlgNjQrKCR3aW42ND81KjE2OjApYCglcnNwKSwlcnNpCisJbW92CTAoJXJzaSksJXIxMgorCW1vdgk4KCVyc2kpLCVyYnAKKwltb3YJMTYoJXJzaSksJXJieAorCWxlYQkyNCglcnNpKSwlcnNwCisuTGVwaWxvZ3VlX2F2eDoKKwlyZXQKKy5zaXplCXNoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdngsLi1zaGExX2Jsb2NrX2RhdGFfb3JkZXJfYXZ4CitfX18KK30KKyRjb2RlLj08PF9fXzsKKy5hbGlnbgk2NAorS19YWF9YWDoKKy5sb25nCTB4NWE4Mjc5OTksMHg1YTgyNzk5OSwweDVhODI3OTk5LDB4NWE4Mjc5OTkJIyBLXzAwXzE5CisubG9uZwkweDZlZDllYmExLDB4NmVkOWViYTEsMHg2ZWQ5ZWJhMSwweDZlZDllYmExCSMgS18yMF8zOQorLmxvbmcJMHg4ZjFiYmNkYywweDhmMWJiY2RjLDB4OGYxYmJjZGMsMHg4ZjFiYmNkYwkjIEtfNDBfNTkKKy5sb25nCTB4Y2E2MmMxZDYsMHhjYTYyYzFkNiwweGNhNjJjMWQ2LDB4Y2E2MmMxZDYJIyBLXzYwXzc5CisubG9uZwkweDAwMDEwMjAzLDB4MDQwNTA2MDcsMHgwODA5MGEwYiwweDBjMGQwZTBmCSMgcGJzd2FwIG1hc2sKK19fXworfX19CiAkY29kZS49PDxfX187CiAuYXNjaXoJIlNIQTEgYmxvY2sgdHJhbnNmb3JtIGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi0uYWxpZ24JMTYKKy5hbGlnbgk2NAogX19fCiAKICMgRVhDRVBUSU9OX0RJU1BPU0lUSU9OIGhhbmRsZXIgKEVYQ0VQVElPTl9SRUNPUkQgKnJlYyxVTE9ORzY0IGZyYW1lLApAQCAtMjcyLDI1ICsxMTEyLDc1IEBACiAKIAlsZWEJLkxwcm9sb2d1ZSglcmlwKSwlcjEwCiAJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8Lkxwcm9sb2d1ZQotCWpiCS5MaW5fcHJvbG9ndWUKKwlqYgkuTGNvbW1vbl9zZWhfdGFpbAogCiAJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCiAKIAlsZWEJLkxlcGlsb2d1ZSglcmlwKSwlcjEwCiAJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PS5MZXBpbG9ndWUKLQlqYWUJLkxpbl9wcm9sb2d1ZQorCWphZQkuTGNvbW1vbl9zZWhfdGFpbAogCiAJbW92CWAxNio0YCglcmF4KSwlcmF4CSMgcHVsbCBzYXZlZCBzdGFjayBwb2ludGVyCi0JbGVhCTI0KCVyYXgpLCVyYXgKKwlsZWEJMzIoJXJheCksJXJheAorCisJbW92CS04KCVyYXgpLCVyYngKKwltb3YJLTE2KCVyYXgpLCVyYnAKKwltb3YJLTI0KCVyYXgpLCVyMTIKKwltb3YJLTMyKCVyYXgpLCVyMTMKKwltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKKwltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMywyMjQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTMKKworCWptcAkuTGNvbW1vbl9zZWhfdGFpbAorLnNpemUJc2VfaGFuZGxlciwuLXNlX2hhbmRsZXIKKworLnR5cGUJc3NzZTNfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisuYWxpZ24JMTYKK3Nzc2UzX2hhbmRsZXI6CisJcHVzaAklcnNpCisJcHVzaAklcmRpCisJcHVzaAklcmJ4CisJcHVzaAklcmJwCisJcHVzaAklcjEyCisJcHVzaAklcjEzCisJcHVzaAklcjE0CisJcHVzaAklcjE1CisJcHVzaGZxCisJc3ViCVwkNjQsJXJzcAorCisJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisKKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKwltb3YJNTYoJGRpc3ApLCVyMTEJCSMgZGlzcC0+SGFuZGxlckRhdGEKKworCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisJbGVhCSglcnNpLCVyMTApLCVyMTAJIyBwcm9sb2d1ZSBsYWJlbAorCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPHByb2xvZ3VlIGxhYmVsCisJamIJLkxjb21tb25fc2VoX3RhaWwKKworCW1vdgkxNTIoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJzcAorCisJbW92CTQoJXIxMSksJXIxMGQJCSMgSGFuZGxlckRhdGFbMV0KKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIGVwaWxvZ3VlIGxhYmVsCisJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisJamFlCS5MY29tbW9uX3NlaF90YWlsCisKKwlsZWEJNjQoJXJheCksJXJzaQorCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisJbW92CVwkMTAsJWVjeAorCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKwlsZWEJYDI0KzY0KzUqMTZgKCVyYXgpLCVyYXgJIyBhZGp1c3Qgc3RhY2sgcG9pbnRlcgogCiAJbW92CS04KCVyYXgpLCVyYngKIAltb3YJLTE2KCVyYXgpLCVyYnAKIAltb3YJLTI0KCVyYXgpLCVyMTIKIAltb3YJJXJieCwxNDQoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYngKIAltb3YJJXJicCwxNjAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SYnAKLQltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb3RuZXh0LT5SMTIKIAotLkxpbl9wcm9sb2d1ZToKKy5MY29tbW9uX3NlaF90YWlsOgogCW1vdgk4KCVyYXgpLCVyZGkKIAltb3YJMTYoJXJheCksJXJzaQogCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcApAQCAtMzI4LDE5ICsxMjE4LDM4IEBACiAJcG9wCSVyZGkKIAlwb3AJJXJzaQogCXJldAotLnNpemUJc2VfaGFuZGxlciwuLXNlX2hhbmRsZXIKKy5zaXplCXNzc2UzX2hhbmRsZXIsLi1zc3NlM19oYW5kbGVyCiAKIC5zZWN0aW9uCS5wZGF0YQogLmFsaWduCTQKIAkucnZhCS5MU0VIX2JlZ2luX3NoYTFfYmxvY2tfZGF0YV9vcmRlcgogCS5ydmEJLkxTRUhfZW5kX3NoYTFfYmxvY2tfZGF0YV9vcmRlcgogCS5ydmEJLkxTRUhfaW5mb19zaGExX2Jsb2NrX2RhdGFfb3JkZXIKLQorCS5ydmEJLkxTRUhfYmVnaW5fc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzCisJLnJ2YQkuTFNFSF9lbmRfc2hhMV9ibG9ja19kYXRhX29yZGVyX3Nzc2UzCisJLnJ2YQkuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMworX19fCiskY29kZS49PDxfX18gaWYgKCRhdngpOworCS5ydmEJLkxTRUhfYmVnaW5fc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eAorCS5ydmEJLkxTRUhfZW5kX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdngKKwkucnZhCS5MU0VIX2luZm9fc2hhMV9ibG9ja19kYXRhX29yZGVyX2F2eAorX19fCiskY29kZS49PDxfX187CiAuc2VjdGlvbgkueGRhdGEKIC5hbGlnbgk4CiAuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcjoKIAkuYnl0ZQk5LDAsMCwwCiAJLnJ2YQlzZV9oYW5kbGVyCisuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9zc3NlMzoKKwkuYnl0ZQk5LDAsMCwwCisJLnJ2YQlzc3NlM19oYW5kbGVyCisJLnJ2YQkuTHByb2xvZ3VlX3Nzc2UzLC5MZXBpbG9ndWVfc3NzZTMJIyBIYW5kbGVyRGF0YVtdCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJGF2eCk7CisuTFNFSF9pbmZvX3NoYTFfYmxvY2tfZGF0YV9vcmRlcl9hdng6CisJLmJ5dGUJOSwwLDAsMAorCS5ydmEJc3NzZTNfaGFuZGxlcgorCS5ydmEJLkxwcm9sb2d1ZV9hdngsLkxlcGlsb2d1ZV9hdngJCSMgSGFuZGxlckRhdGFbXQogX19fCiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni01ODYucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtNTg2LnBsCmluZGV4IGVjYzhiNjkuLjkyOGVjNTMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni01ODYucGwKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LTU4Ni5wbApAQCAtMTQsOCArMTQsOCBAQAogIwkJUGVudGl1bQlQSUlJCVA0CUFNRCBLOAlDb3JlMgogIyBnY2MJCTQ2CTM2CTQxCTI3CTI2CiAjIGljYwkJNTcJMzMJMzgJMjUJMjMJCi0jIHg4NiBhc20JNDAJMzAJMzUJMjAJMjAKLSMgeDg2XzY0IGFzbSgqKQktCS0JMjEJMTUuOAkxNi41CisjIHg4NiBhc20JNDAJMzAJMzMJMjAJMTgKKyMgeDg2XzY0IGFzbSgqKQktCS0JMjEJMTYJMTYKICMKICMgKCopIHg4Nl82NCBhc3NlbWJsZXIgcGVyZm9ybWFuY2UgaXMgcHJlc2VudGVkIGZvciByZWZlcmVuY2UKICMgICAgIHB1cnBvc2VzLgpAQCAtNDgsMjAgKzQ4LDE5IEBACiAgICAgbXkgJGluXzE2XzYzPXNoaWZ0OwogCiAJJm1vdgkoImVjeCIsJEUpOwotCSAmYWRkCSgkVCwmRFdQKDQqKDgrMTUrMTYtOSksImVzcCIpKQlpZiAoJGluXzE2XzYzKTsJIyBUICs9IFhbLTddCi0JJnJvcgkoImVjeCIsNik7Ci0JJm1vdgkoImVkaSIsJEUpOwotCSZyb3IJKCJlZGkiLDExKTsKKwkgJmFkZAkoJFQsImVkaSIpCQkJaWYgKCRpbl8xNl82Myk7CSMgVCArPSBzaWdtYTEoWFstMl0pCisJJnJvcgkoImVjeCIsMjUtMTEpOwogCSAmbW92CSgiZXNpIiwkRm9mZik7Ci0JJnhvcgkoImVjeCIsImVkaSIpOwotCSZyb3IJKCJlZGkiLDI1LTExKTsKKwkmeG9yCSgiZWN4IiwkRSk7CisJJnJvcgkoImVjeCIsMTEtNik7CiAJICZtb3YJKCZEV1AoNCooOCsxNSksImVzcCIpLCRUKQlpZiAoJGluXzE2XzYzKTsJIyBzYXZlIFhbMF0KLQkmeG9yCSgiZWN4IiwiZWRpIik7CSMgU2lnbWExKGUpCisJJnhvcgkoImVjeCIsJEUpOworCSZyb3IJKCJlY3giLDYpOwkjIFNpZ21hMShlKQogCSAmbW92CSgiZWRpIiwkR29mZik7CiAJJmFkZAkoJFQsImVjeCIpOwkjIFQgKz0gU2lnbWExKGUpCi0JICZtb3YJKCRFb2ZmLCRFKTsJIyBtb2R1bG8tc2NoZWR1bGVkCiAKIAkmeG9yCSgiZXNpIiwiZWRpIik7CisJICZtb3YJKCRFb2ZmLCRFKTsJIyBtb2R1bG8tc2NoZWR1bGVkCiAJICZtb3YJKCJlY3giLCRBKTsKIAkmYW5kCSgiZXNpIiwkRSk7CiAJICZtb3YJKCRFLCREb2ZmKTsJIyBlIGJlY29tZXMgZCwgd2hpY2ggaXMgZSBpbiBuZXh0IGl0ZXJhdGlvbgpAQCAtNjksMTQgKzY4LDE0IEBACiAJICZtb3YJKCJlZGkiLCRBKTsKIAkmYWRkCSgkVCwiZXNpIik7CSMgVCArPSBDaChlLGYsZykKIAotCSZyb3IJKCJlY3giLDIpOworCSZyb3IJKCJlY3giLDIyLTEzKTsKIAkgJmFkZAkoJFQsJEhvZmYpOwkjIFQgKz0gaAotCSZyb3IJKCJlZGkiLDEzKTsKKwkmeG9yCSgiZWN4IiwkQSk7CisJJnJvcgkoImVjeCIsMTMtMik7CiAJICZtb3YJKCJlc2kiLCRCb2ZmKTsKLQkmeG9yCSgiZWN4IiwiZWRpIik7Ci0JJnJvcgkoImVkaSIsMjItMTMpOworCSZ4b3IJKCJlY3giLCRBKTsKKwkmcm9yCSgiZWN4IiwyKTsJIyBTaWdtYTAoYSkKIAkgJmFkZAkoJEUsJFQpOwkjIGQgKz0gVAotCSZ4b3IJKCJlY3giLCJlZGkiKTsJIyBTaWdtYTAoYSkKIAkgJm1vdgkoImVkaSIsJENvZmYpOwogCiAJJmFkZAkoJFQsImVjeCIpOwkjIFQgKz0gU2lnbWEwKGEpCkBAIC0xNjgsMjMgKzE2NywyMiBAQAogJnNldF9sYWJlbCgiMTZfNjMiLDE2KTsKIAkmbW92CSgiZXNpIiwkVCk7CiAJICZtb3YJKCJlY3giLCZEV1AoNCooOCsxNSsxNi0xNCksImVzcCIpKTsKLQkmc2hyCSgkVCwzKTsKLQkmcm9yCSgiZXNpIiw3KTsKLQkmeG9yCSgkVCwiZXNpIik7CiAJJnJvcgkoImVzaSIsMTgtNyk7CiAJICZtb3YJKCJlZGkiLCJlY3giKTsKLQkmeG9yCSgkVCwiZXNpIik7CQkJIyBUID0gc2lnbWEwKFhbLTE1XSkKKwkmeG9yCSgiZXNpIiwkVCk7CisJJnJvcgkoImVzaSIsNyk7CisJJnNocgkoJFQsMyk7CiAKLQkmc2hyCSgiZWN4IiwxMCk7Ci0JICZtb3YJKCJlc2kiLCZEV1AoNCooOCsxNSsxNiksImVzcCIpKTsKLQkmcm9yCSgiZWRpIiwxNyk7Ci0JJnhvcgkoImVjeCIsImVkaSIpOwogCSZyb3IJKCJlZGkiLDE5LTE3KTsKLQkgJmFkZAkoJFQsImVzaSIpOwkJCSMgVCArPSBYWy0xNl0KLQkmeG9yCSgiZWRpIiwiZWN4IikJCQkjIHNpZ21hMShYWy0yXSkKKwkgJnhvcgkoJFQsImVzaSIpOwkJCSMgVCA9IHNpZ21hMChYWy0xNV0pCisJJnhvcgkoImVkaSIsImVjeCIpOworCSZyb3IJKCJlZGkiLDE3KTsKKwkmc2hyCSgiZWN4IiwxMCk7CisJICZhZGQJKCRULCZEV1AoNCooOCsxNSsxNiksImVzcCIpKTsJIyBUICs9IFhbLTE2XQorCSZ4b3IJKCJlZGkiLCJlY3giKTsJCQkjIHNpZ21hMShYWy0yXSkKIAotCSZhZGQJKCRULCJlZGkiKTsJCQkjIFQgKz0gc2lnbWExKFhbLTJdKQotCSMgJmFkZAkoJFQsJkRXUCg0Kig4KzE1KzE2LTkpLCJlc3AiKSk7CSMgVCArPSBYWy03XSwgbW92ZWQgdG8gQk9EWV8wMF8xNSgxKQorCSAmYWRkCSgkVCwmRFdQKDQqKDgrMTUrMTYtOSksImVzcCIpKTsJIyBUICs9IFhbLTddCisJIyAmYWRkCSgkVCwiZWRpIik7CQkJIyBUICs9IHNpZ21hMShYWy0yXSkKIAkjICZtb3YJKCZEV1AoNCooOCsxNSksImVzcCIpLCRUKTsJIyBzYXZlIFhbMF0KIAogCSZCT0RZXzAwXzE1KDEpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMjU2LWFybXY0LnBsCmluZGV4IDQ5MmNiNjIuLjljODRlOGQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucGwKQEAgLTE4LDExICsxOCwxNiBAQAogIyBSZXNjaGVkdWxpbmcgZm9yIGR1YWwtaXNzdWUgcGlwZWxpbmUgcmVzdWx0ZWQgaW4gMjIlIGltcHJvdmVtZW50IG9uCiAjIENvcnRleCBBOCBjb3JlIGFuZCB+MjAgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZS4KIAorIyBGZWJydWFyeSAyMDExLgorIworIyBQcm9maWxlci1hc3Npc3RlZCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uIHJlc3VsdGVkIGluIDE2JQorIyBpbXByb3ZlbWVudCBvbiBDb3J0ZXggQTggY29yZSBhbmQgfjE3IGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCisKIHdoaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9CiBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwogCiAkY3R4PSJyMCI7CSR0MD0icjAiOwotJGlucD0icjEiOworJGlucD0icjEiOwkkdDM9InIxIjsKICRsZW49InIyIjsJJHQxPSJyMiI7CiAkVDE9InIzIjsKICRBPSJyNCI7CkBAIC00Niw2ICs1MSw5IEBACiBteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpID0gQF87CiAKICRjb2RlLj08PF9fXyBpZiAoJGk8MTYpOworI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcgkkVDEsWyRpbnBdLCM0CisjZWxzZQogCWxkcmIJJFQxLFskaW5wLCMzXQkJCUAgJGkKIAlsZHJiCSR0MixbJGlucCwjMl0KIAlsZHJiCSR0MSxbJGlucCwjMV0KQEAgLTUzLDE2ICs2MSwyNCBAQAogCW9ycgkkVDEsJFQxLCR0Mixsc2wjOAogCW9ycgkkVDEsJFQxLCR0MSxsc2wjMTYKIAlvcnIJJFQxLCRUMSwkdDAsbHNsIzI0Ci0JYCJzdHIJJGlucCxbc3AsIzE3KjRdIglpZiAoJGk9PTE1KWAKKyNlbmRpZgogX19fCiAkY29kZS49PDxfX187Ci0JbGRyCSR0MixbJEt0YmxdLCM0CQkJQCAqSzI1NisrCiAJbW92CSR0MCwkZSxyb3IjJFNpZ21hMVswXQotCXN0cgkkVDEsW3NwLCNgJGklMTZgKjRdCisJbGRyCSR0MixbJEt0YmxdLCM0CQkJQCAqSzI1NisrCiAJZW9yCSR0MCwkdDAsJGUscm9yIyRTaWdtYTFbMV0KIAllb3IJJHQxLCRmLCRnCisjaWYgJGk+PTE2CisJYWRkCSRUMSwkVDEsJHQzCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJJFQxLCRUMQorI2VuZGlmCisjaWYgJGk9PTE1CisJc3RyCSRpbnAsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgJHQzCisjZW5kaWYKIAllb3IJJHQwLCR0MCwkZSxyb3IjJFNpZ21hMVsyXQlAIFNpZ21hMShlKQogCWFuZAkkdDEsJHQxLCRlCisJc3RyCSRUMSxbc3AsI2AkaSUxNmAqNF0KIAlhZGQJJFQxLCRUMSwkdDAKIAllb3IJJHQxLCR0MSwkZwkJCUAgQ2goZSxmLGcpCiAJYWRkCSRUMSwkVDEsJGgKQEAgLTcxLDYgKzg3LDkgQEAKIAllb3IJJGgsJGgsJGEscm9yIyRTaWdtYTBbMV0KIAlhZGQJJFQxLCRUMSwkdDIKIAllb3IJJGgsJGgsJGEscm9yIyRTaWdtYTBbMl0JCUAgU2lnbWEwKGEpCisjaWYgJGk+PTE1CisJbGRyCSR0Myxbc3AsI2AoJGkrMiklMTZgKjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCSR0MCwkYSwkYgogCWFuZAkkdDEsJGEsJGIKIAlhbmQJJHQwLCR0MCwkYwpAQCAtODUsMjQgKzEwNCwyNiBAQAogbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKSA9IEBfOwogCiAkY29kZS49PDxfX187Ci0JbGRyCSR0MSxbc3AsI2AoJGkrMSklMTZgKjRdCQlAICRpCisJQCBsZHIJJHQzLFtzcCwjYCgkaSsxKSUxNmAqNF0JCUAgJGkKIAlsZHIJJHQyLFtzcCwjYCgkaSsxNCklMTZgKjRdCisJbW92CSR0MCwkdDMscm9yIyRzaWdtYTBbMF0KIAlsZHIJJFQxLFtzcCwjYCgkaSswKSUxNmAqNF0KLQltb3YJJHQwLCR0MSxyb3IjJHNpZ21hMFswXQotCWxkcgkkaW5wLFtzcCwjYCgkaSs5KSUxNmAqNF0KLQllb3IJJHQwLCR0MCwkdDEscm9yIyRzaWdtYTBbMV0KLQllb3IJJHQwLCR0MCwkdDEsbHNyIyRzaWdtYTBbMl0JQCBzaWdtYTAoWFtpKzFdKQotCW1vdgkkdDEsJHQyLHJvciMkc2lnbWExWzBdCisJZW9yCSR0MCwkdDAsJHQzLHJvciMkc2lnbWEwWzFdCisJbGRyCSR0MSxbc3AsI2AoJGkrOSklMTZgKjRdCisJZW9yCSR0MCwkdDAsJHQzLGxzciMkc2lnbWEwWzJdCUAgc2lnbWEwKFhbaSsxXSkKKwltb3YJJHQzLCR0Mixyb3IjJHNpZ21hMVswXQogCWFkZAkkVDEsJFQxLCR0MAotCWVvcgkkdDEsJHQxLCR0Mixyb3IjJHNpZ21hMVsxXQotCWFkZAkkVDEsJFQxLCRpbnAKLQllb3IJJHQxLCR0MSwkdDIsbHNyIyRzaWdtYTFbMl0JQCBzaWdtYTEoWFtpKzE0XSkKKwllb3IJJHQzLCR0MywkdDIscm9yIyRzaWdtYTFbMV0KIAlhZGQJJFQxLCRUMSwkdDEKKwllb3IJJHQzLCR0MywkdDIsbHNyIyRzaWdtYTFbMl0JQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAkkVDEsJFQxLCR0MwogX19fCiAJJkJPRFlfMDBfMTUoQF8pOwogfQogCiAkY29kZT08PF9fXzsKKyNpbmNsdWRlICJhcm1fYXJjaC5oIgorCiAudGV4dAogLmNvZGUJMzIKIApAQCAtMTMyLDcgKzE1Myw3IEBACiBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcjoKIAlzdWIJcjMscGMsIzgJCUAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIKIAlhZGQJJGxlbiwkaW5wLCRsZW4sbHNsIzYJQCBsZW4gdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiBpbnAKLQlzdG1kYglzcCEseyRjdHgsJGlucCwkbGVuLHI0LXIxMixscn0KKwlzdG1kYglzcCEseyRjdHgsJGlucCwkbGVuLHI0LXIxMSxscn0KIAlsZG1pYQkkY3R4LHskQSwkQiwkQywkRCwkRSwkRiwkRywkSH0KIAlzdWIJJEt0YmwscjMsIzI1NgkJQCBLMjU2CiAJc3ViCXNwLHNwLCMxNio0CQlAIGFsbG9jYShYWzE2XSkKQEAgLTE3MSwxMCArMTkyLDE0IEBACiAJYm5lCS5Mb29wCiAKIAlhZGQJc3Asc3AsI2AxNiszYCo0CUAgZGVzdHJveSBmcmFtZQotCWxkbWlhCXNwISx7cjQtcjEyLGxyfQorI2lmIF9fQVJNX0FSQ0hfXz49NQorCWxkbWlhCXNwISx7cjQtcjExLHBjfQorI2Vsc2UKKwlsZG1pYQlzcCEse3I0LXIxMSxscn0KIAl0c3QJbHIsIzEKIAltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CiAJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKyNlbmRpZgogLnNpemUgICBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyCiAuYXNjaXogICJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKIC5hbGlnbgkyCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGEyNTYtYXJtdjQucyBiL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5zCmluZGV4IGVlOTAzZGMuLjljMjBhNjMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5zCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTI1Ni1hcm12NC5zCkBAIC0xLDMgKzEsNSBAQAorI2luY2x1ZGUgImFybV9hcmNoLmgiCisKIC50ZXh0CiAuY29kZQkzMgogCkBAIC0yNywxMSArMjksMTQgQEAKIHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyOgogCXN1YglyMyxwYywjOAkJQCBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgogCWFkZAlyMixyMSxyMixsc2wjNglAIGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mIGlucAotCXN0bWRiCXNwISx7cjAscjEscjIscjQtcjEyLGxyfQorCXN0bWRiCXNwISx7cjAscjEscjIscjQtcjExLGxyfQogCWxkbWlhCXIwLHtyNCxyNSxyNixyNyxyOCxyOSxyMTAscjExfQogCXN1YglyMTQscjMsIzI1NgkJQCBLMjU2CiAJc3ViCXNwLHNwLCMxNio0CQlAIGFsbG9jYShYWzE2XSkKIC5Mb29wOgorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMAogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTM5LDE0ICs0NCwyMiBAQAogCW9ycglyMyxyMyxyMTIsbHNsIzgKIAlvcnIJcjMscjMscjIsbHNsIzE2CiAJb3JyCXIzLHIzLHIwLGxzbCMyNAotCQotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKyNlbmRpZgogCW1vdglyMCxyOCxyb3IjNgotCXN0cglyMyxbc3AsIzAqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI4LHJvciMxMQogCWVvcglyMixyOSxyMTAKKyNpZiAwPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAwPT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI4LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyOAorCXN0cglyMyxbc3AsIzAqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjEwCQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjExCkBAIC01NSw2ICs2OCw5IEBACiAJZW9yCXIxMSxyMTEscjQscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyMTEscjExLHI0LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAwPj0xNQorCWxkcglyMSxbc3AsIzIqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjQscjUKIAlhbmQJcjIscjQscjUKIAlhbmQJcjAscjAscjYKQEAgLTYyLDYgKzc4LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjcscjcscjMKIAlhZGQJcjExLHIxMSxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMQogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTY5LDE0ICs4OCwyMiBAQAogCW9ycglyMyxyMyxyMTIsbHNsIzgKIAlvcnIJcjMscjMscjIsbHNsIzE2CiAJb3JyCXIzLHIzLHIwLGxzbCMyNAotCQotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKyNlbmRpZgogCW1vdglyMCxyNyxyb3IjNgotCXN0cglyMyxbc3AsIzEqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI3LHJvciMxMQogCWVvcglyMixyOCxyOQorI2lmIDE+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDE9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjcscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI3CisJc3RyCXIzLFtzcCwjMSo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyOQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHIxMApAQCAtODUsNiArMTEyLDkgQEAKIAllb3IJcjEwLHIxMCxyMTEscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyMTAscjEwLHIxMSxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMT49MTUKKwlsZHIJcjEsW3NwLCMzKjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHIxMSxyNAogCWFuZAlyMixyMTEscjQKIAlhbmQJcjAscjAscjUKQEAgLTkyLDYgKzEyMiw5IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI2LHI2LHIzCiAJYWRkCXIxMCxyMTAscjAKKyNpZiBfX0FSTV9BUkNIX18+PTcKKwlsZHIJcjMsW3IxXSwjNAorI2Vsc2UKIAlsZHJiCXIzLFtyMSwjM10JCQlAIDIKIAlsZHJiCXIxMixbcjEsIzJdCiAJbGRyYglyMixbcjEsIzFdCkBAIC05OSwxNCArMTMyLDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI2LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMio0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjYscm9yIzExCiAJZW9yCXIyLHI3LHI4CisjaWYgMj49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMj09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNixyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjYKKwlzdHIJcjMsW3NwLCMyKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI4CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjkKQEAgLTExNSw2ICsxNTYsOSBAQAogCWVvcglyOSxyOSxyMTAscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyOSxyOSxyMTAscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDI+PTE1CisJbGRyCXIxLFtzcCwjNCo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyMTAscjExCiAJYW5kCXIyLHIxMCxyMTEKIAlhbmQJcjAscjAscjQKQEAgLTEyMiw2ICsxNjYsOSBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyNSxyNSxyMwogCWFkZAlyOSxyOSxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMwogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTEyOSwxNCArMTc2LDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI1LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMyo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjUscm9yIzExCiAJZW9yCXIyLHI2LHI3CisjaWYgMz49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMz09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNSxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjUKKwlzdHIJcjMsW3NwLCMzKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI3CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjgKQEAgLTE0NSw2ICsyMDAsOSBAQAogCWVvcglyOCxyOCxyOSxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI4LHI4LHI5LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAzPj0xNQorCWxkcglyMSxbc3AsIzUqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjkscjEwCiAJYW5kCXIyLHI5LHIxMAogCWFuZAlyMCxyMCxyMTEKQEAgLTE1Miw2ICsyMTAsOSBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyNCxyNCxyMwogCWFkZAlyOCxyOCxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgNAogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTE1OSwxNCArMjIwLDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI0LHJvciM2Ci0Jc3RyCXIzLFtzcCwjNCo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjQscm9yIzExCiAJZW9yCXIyLHI1LHI2CisjaWYgND49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgND09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjQKKwlzdHIJcjMsW3NwLCM0KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI2CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjcKQEAgLTE3NSw2ICsyNDQsOSBAQAogCWVvcglyNyxyNyxyOCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI3LHI3LHI4LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiA0Pj0xNQorCWxkcglyMSxbc3AsIzYqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjgscjkKIAlhbmQJcjIscjgscjkKIAlhbmQJcjAscjAscjEwCkBAIC0xODIsNiArMjU0LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjExLHIxMSxyMwogCWFkZAlyNyxyNyxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgNQogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTE4OSwxNCArMjY0LDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHIxMSxyb3IjNgotCXN0cglyMyxbc3AsIzUqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHIxMSxyb3IjMTEKIAllb3IJcjIscjQscjUKKyNpZiA1Pj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiA1PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHIxMSxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjExCisJc3RyCXIzLFtzcCwjNSo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyNQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI2CkBAIC0yMDUsNiArMjg4LDkgQEAKIAllb3IJcjYscjYscjcscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNixyNixyNyxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgNT49MTUKKwlsZHIJcjEsW3NwLCM3KjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI3LHI4CiAJYW5kCXIyLHI3LHI4CiAJYW5kCXIwLHIwLHI5CkBAIC0yMTIsNiArMjk4LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjEwLHIxMCxyMwogCWFkZAlyNixyNixyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgNgogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTIxOSwxNCArMzA4LDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHIxMCxyb3IjNgotCXN0cglyMyxbc3AsIzYqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHIxMCxyb3IjMTEKIAllb3IJcjIscjExLHI0CisjaWYgNj49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgNj09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyMTAscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHIxMAorCXN0cglyMyxbc3AsIzYqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNQpAQCAtMjM1LDYgKzMzMiw5IEBACiAJZW9yCXI1LHI1LHI2LHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjUscjUscjYscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDY+PTE1CisJbGRyCXIxLFtzcCwjOCo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNixyNwogCWFuZAlyMixyNixyNwogCWFuZAlyMCxyMCxyOApAQCAtMjQyLDYgKzM0Miw5IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI5LHI5LHIzCiAJYWRkCXI1LHI1LHIwCisjaWYgX19BUk1fQVJDSF9fPj03CisJbGRyCXIzLFtyMV0sIzQKKyNlbHNlCiAJbGRyYglyMyxbcjEsIzNdCQkJQCA3CiAJbGRyYglyMTIsW3IxLCMyXQogCWxkcmIJcjIsW3IxLCMxXQpAQCAtMjQ5LDE0ICszNTIsMjIgQEAKIAlvcnIJcjMscjMscjEyLGxzbCM4CiAJb3JyCXIzLHIzLHIyLGxzbCMxNgogCW9ycglyMyxyMyxyMCxsc2wjMjQKLQkKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisjZW5kaWYKIAltb3YJcjAscjkscm9yIzYKLQlzdHIJcjMsW3NwLCM3KjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyOSxyb3IjMTEKIAllb3IJcjIscjEwLHIxMQorI2lmIDc+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDc9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjkscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI5CisJc3RyCXIzLFtzcCwjNyo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyMTEJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNApAQCAtMjY1LDYgKzM3Niw5IEBACiAJZW9yCXI0LHI0LHI1LHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjQscjQscjUscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDc+PTE1CisJbGRyCXIxLFtzcCwjOSo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNSxyNgogCWFuZAlyMixyNSxyNgogCWFuZAlyMCxyMCxyNwpAQCAtMjcyLDYgKzM4Niw5IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI4LHI4LHIzCiAJYWRkCXI0LHI0LHIwCisjaWYgX19BUk1fQVJDSF9fPj03CisJbGRyCXIzLFtyMV0sIzQKKyNlbHNlCiAJbGRyYglyMyxbcjEsIzNdCQkJQCA4CiAJbGRyYglyMTIsW3IxLCMyXQogCWxkcmIJcjIsW3IxLCMxXQpAQCAtMjc5LDE0ICszOTYsMjIgQEAKIAlvcnIJcjMscjMscjEyLGxzbCM4CiAJb3JyCXIzLHIzLHIyLGxzbCMxNgogCW9ycglyMyxyMyxyMCxsc2wjMjQKLQkKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisjZW5kaWYKIAltb3YJcjAscjgscm9yIzYKLQlzdHIJcjMsW3NwLCM4KjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyOCxyb3IjMTEKIAllb3IJcjIscjkscjEwCisjaWYgOD49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgOD09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyOCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjgKKwlzdHIJcjMsW3NwLCM4KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHIxMAkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHIxMQpAQCAtMjk1LDYgKzQyMCw5IEBACiAJZW9yCXIxMSxyMTEscjQscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyMTEscjExLHI0LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiA4Pj0xNQorCWxkcglyMSxbc3AsIzEwKjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI0LHI1CiAJYW5kCXIyLHI0LHI1CiAJYW5kCXIwLHIwLHI2CkBAIC0zMDIsNiArNDMwLDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjcscjcscjMKIAlhZGQJcjExLHIxMSxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgOQogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTMwOSwxNCArNDQwLDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI3LHJvciM2Ci0Jc3RyCXIzLFtzcCwjOSo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjcscm9yIzExCiAJZW9yCXIyLHI4LHI5CisjaWYgOT49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgOT09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNyxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjcKKwlzdHIJcjMsW3NwLCM5KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI5CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjEwCkBAIC0zMjUsNiArNDY0LDkgQEAKIAllb3IJcjEwLHIxMCxyMTEscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyMTAscjEwLHIxMSxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgOT49MTUKKwlsZHIJcjEsW3NwLCMxMSo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyMTEscjQKIAlhbmQJcjIscjExLHI0CiAJYW5kCXIwLHIwLHI1CkBAIC0zMzIsNiArNDc0LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjYscjYscjMKIAlhZGQJcjEwLHIxMCxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTAKIAlsZHJiCXIxMixbcjEsIzJdCiAJbGRyYglyMixbcjEsIzFdCkBAIC0zMzksMTQgKzQ4NCwyMiBAQAogCW9ycglyMyxyMyxyMTIsbHNsIzgKIAlvcnIJcjMscjMscjIsbHNsIzE2CiAJb3JyCXIzLHIzLHIwLGxzbCMyNAotCQotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKyNlbmRpZgogCW1vdglyMCxyNixyb3IjNgotCXN0cglyMyxbc3AsIzEwKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyNixyb3IjMTEKIAllb3IJcjIscjcscjgKKyNpZiAxMD49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMTA9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjYscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI2CisJc3RyCXIzLFtzcCwjMTAqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjgJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyOQpAQCAtMzU1LDYgKzUwOCw5IEBACiAJZW9yCXI5LHI5LHIxMCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI5LHI5LHIxMCxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMTA+PTE1CisJbGRyCXIxLFtzcCwjMTIqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjEwLHIxMQogCWFuZAlyMixyMTAscjExCiAJYW5kCXIwLHIwLHI0CkBAIC0zNjIsNiArNTE4LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjUscjUscjMKIAlhZGQJcjkscjkscjAKKyNpZiBfX0FSTV9BUkNIX18+PTcKKwlsZHIJcjMsW3IxXSwjNAorI2Vsc2UKIAlsZHJiCXIzLFtyMSwjM10JCQlAIDExCiAJbGRyYglyMTIsW3IxLCMyXQogCWxkcmIJcjIsW3IxLCMxXQpAQCAtMzY5LDE0ICs1MjgsMjIgQEAKIAlvcnIJcjMscjMscjEyLGxzbCM4CiAJb3JyCXIzLHIzLHIyLGxzbCMxNgogCW9ycglyMyxyMyxyMCxsc2wjMjQKLQkKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisjZW5kaWYKIAltb3YJcjAscjUscm9yIzYKLQlzdHIJcjMsW3NwLCMxMSo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjUscm9yIzExCiAJZW9yCXIyLHI2LHI3CisjaWYgMTE+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDExPT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI1LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyNQorCXN0cglyMyxbc3AsIzExKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI3CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjgKQEAgLTM4NSw2ICs1NTIsOSBAQAogCWVvcglyOCxyOCxyOSxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI4LHI4LHI5LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAxMT49MTUKKwlsZHIJcjEsW3NwLCMxMyo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyOSxyMTAKIAlhbmQJcjIscjkscjEwCiAJYW5kCXIwLHIwLHIxMQpAQCAtMzkyLDYgKzU2Miw5IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI0LHI0LHIzCiAJYWRkCXI4LHI4LHIwCisjaWYgX19BUk1fQVJDSF9fPj03CisJbGRyCXIzLFtyMV0sIzQKKyNlbHNlCiAJbGRyYglyMyxbcjEsIzNdCQkJQCAxMgogCWxkcmIJcjEyLFtyMSwjMl0KIAlsZHJiCXIyLFtyMSwjMV0KQEAgLTM5OSwxNCArNTcyLDIyIEBACiAJb3JyCXIzLHIzLHIxMixsc2wjOAogCW9ycglyMyxyMyxyMixsc2wjMTYKIAlvcnIJcjMscjMscjAsbHNsIzI0Ci0JCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI0LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMTIqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI0LHJvciMxMQogCWVvcglyMixyNSxyNgorI2lmIDEyPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAxMj09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjQKKwlzdHIJcjMsW3NwLCMxMio0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyNgkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI3CkBAIC00MTUsNiArNTk2LDkgQEAKIAllb3IJcjcscjcscjgscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNyxyNyxyOCxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMTI+PTE1CisJbGRyCXIxLFtzcCwjMTQqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjgscjkKIAlhbmQJcjIscjgscjkKIAlhbmQJcjAscjAscjEwCkBAIC00MjIsNiArNjA2LDkgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjExLHIxMSxyMwogCWFkZAlyNyxyNyxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTMKIAlsZHJiCXIxMixbcjEsIzJdCiAJbGRyYglyMixbcjEsIzFdCkBAIC00MjksMTQgKzYxNiwyMiBAQAogCW9ycglyMyxyMyxyMTIsbHNsIzgKIAlvcnIJcjMscjMscjIsbHNsIzE2CiAJb3JyCXIzLHIzLHIwLGxzbCMyNAotCQotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKyNlbmRpZgogCW1vdglyMCxyMTEscm9yIzYKLQlzdHIJcjMsW3NwLCMxMyo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjExLHJvciMxMQogCWVvcglyMixyNCxyNQorI2lmIDEzPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAxMz09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyMTEscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHIxMQorCXN0cglyMyxbc3AsIzEzKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI1CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjYKQEAgLTQ0NSw2ICs2NDAsOSBAQAogCWVvcglyNixyNixyNyxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI2LHI2LHI3LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAxMz49MTUKKwlsZHIJcjEsW3NwLCMxNSo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNyxyOAogCWFuZAlyMixyNyxyOAogCWFuZAlyMCxyMCxyOQpAQCAtNDUyLDYgKzY1MCw5IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXIxMCxyMTAscjMKIAlhZGQJcjYscjYscjAKKyNpZiBfX0FSTV9BUkNIX18+PTcKKwlsZHIJcjMsW3IxXSwjNAorI2Vsc2UKIAlsZHJiCXIzLFtyMSwjM10JCQlAIDE0CiAJbGRyYglyMTIsW3IxLCMyXQogCWxkcmIJcjIsW3IxLCMxXQpAQCAtNDU5LDE0ICs2NjAsMjIgQEAKIAlvcnIJcjMscjMscjEyLGxzbCM4CiAJb3JyCXIzLHIzLHIyLGxzbCMxNgogCW9ycglyMyxyMyxyMCxsc2wjMjQKLQkKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisjZW5kaWYKIAltb3YJcjAscjEwLHJvciM2Ci0Jc3RyCXIzLFtzcCwjMTQqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHIxMCxyb3IjMTEKIAllb3IJcjIscjExLHI0CisjaWYgMTQ+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDE0PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHIxMCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjEwCisJc3RyCXIzLFtzcCwjMTQqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNQpAQCAtNDc1LDYgKzY4NCw5IEBACiAJZW9yCXI1LHI1LHI2LHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjUscjUscjYscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDE0Pj0xNQorCWxkcglyMSxbc3AsIzAqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjYscjcKIAlhbmQJcjIscjYscjcKIAlhbmQJcjAscjAscjgKQEAgLTQ4Miw2ICs2OTQsOSBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyOSxyOSxyMwogCWFkZAlyNSxyNSxyMAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMyxbcjFdLCM0CisjZWxzZQogCWxkcmIJcjMsW3IxLCMzXQkJCUAgMTUKIAlsZHJiCXIxMixbcjEsIzJdCiAJbGRyYglyMixbcjEsIzFdCkBAIC00ODksMTQgKzcwNCwyMiBAQAogCW9ycglyMyxyMyxyMTIsbHNsIzgKIAlvcnIJcjMscjMscjIsbHNsIzE2CiAJb3JyCXIzLHIzLHIwLGxzbCMyNAotCXN0cglyMSxbc3AsIzE3KjRdCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworI2VuZGlmCiAJbW92CXIwLHI5LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMTUqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI5LHJvciMxMQogCWVvcglyMixyMTAscjExCisjaWYgMTU+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDE1PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI5LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyOQorCXN0cglyMyxbc3AsIzE1KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHIxMQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI0CkBAIC01MDUsNiArNzI4LDkgQEAKIAllb3IJcjQscjQscjUscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNCxyNCxyNSxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMTU+PTE1CisJbGRyCXIxLFtzcCwjMSo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNSxyNgogCWFuZAlyMixyNSxyNgogCWFuZAlyMCxyMCxyNwpAQCAtNTEzLDI2ICs3MzksMzQgQEAKIAlhZGQJcjgscjgscjMKIAlhZGQJcjQscjQscjAKIC5Mcm91bmRzXzE2X3h4OgotCWxkcglyMixbc3AsIzEqNF0JCUAgMTYKKwlAIGxkcglyMSxbc3AsIzEqNF0JCUAgMTYKIAlsZHIJcjEyLFtzcCwjMTQqNF0KKwltb3YJcjAscjEscm9yIzcKIAlsZHIJcjMsW3NwLCMwKjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjOSo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzkqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjgscm9yIzYKLQlzdHIJcjMsW3NwLCMwKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyOCxyb3IjMTEKIAllb3IJcjIscjkscjEwCisjaWYgMTY+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDE2PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI4LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyOAorCXN0cglyMyxbc3AsIzAqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjEwCQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjExCkBAIC01NDEsNiArNzc1LDkgQEAKIAllb3IJcjExLHIxMSxyNCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXIxMSxyMTEscjQscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDE2Pj0xNQorCWxkcglyMSxbc3AsIzIqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjQscjUKIAlhbmQJcjIscjQscjUKIAlhbmQJcjAscjAscjYKQEAgLTU0OCwyNiArNzg1LDM0IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI3LHI3LHIzCiAJYWRkCXIxMSxyMTEscjAKLQlsZHIJcjIsW3NwLCMyKjRdCQlAIDE3CisJQCBsZHIJcjEsW3NwLCMyKjRdCQlAIDE3CiAJbGRyCXIxMixbc3AsIzE1KjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjMSo0XQotCW1vdglyMCxyMixyb3IjNwotCWxkcglyMSxbc3AsIzEwKjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjMTAqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjcscm9yIzYKLQlzdHIJcjMsW3NwLCMxKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyNyxyb3IjMTEKIAllb3IJcjIscjgscjkKKyNpZiAxNz49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMTc9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjcscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI3CisJc3RyCXIzLFtzcCwjMSo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyOQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHIxMApAQCAtNTc2LDYgKzgyMSw5IEBACiAJZW9yCXIxMCxyMTAscjExLHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjEwLHIxMCxyMTEscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDE3Pj0xNQorCWxkcglyMSxbc3AsIzMqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjExLHI0CiAJYW5kCXIyLHIxMSxyNAogCWFuZAlyMCxyMCxyNQpAQCAtNTgzLDI2ICs4MzEsMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjYscjYscjMKIAlhZGQJcjEwLHIxMCxyMAotCWxkcglyMixbc3AsIzMqNF0JCUAgMTgKKwlAIGxkcglyMSxbc3AsIzMqNF0JCUAgMTgKIAlsZHIJcjEyLFtzcCwjMCo0XQorCW1vdglyMCxyMSxyb3IjNwogCWxkcglyMyxbc3AsIzIqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCMxMSo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzExKjRdCisJZW9yCXIwLHIwLHIxLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKKwltb3YJcjEscjEyLHJvciMxNwogCWFkZAlyMyxyMyxyMAotCWVvcglyMixyMixyMTIscm9yIzE5Ci0JYWRkCXIzLHIzLHIxCi0JZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwllb3IJcjEscjEscjEyLHJvciMxOQogCWFkZAlyMyxyMyxyMgotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKwllb3IJcjEscjEscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCUAgYWRkCXIzLHIzLHIxCiAJbW92CXIwLHI2LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMio0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjYscm9yIzExCiAJZW9yCXIyLHI3LHI4CisjaWYgMTg+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDE4PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI2LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyNgorCXN0cglyMyxbc3AsIzIqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjgJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyOQpAQCAtNjExLDYgKzg2Nyw5IEBACiAJZW9yCXI5LHI5LHIxMCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI5LHI5LHIxMCxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMTg+PTE1CisJbGRyCXIxLFtzcCwjNCo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyMTAscjExCiAJYW5kCXIyLHIxMCxyMTEKIAlhbmQJcjAscjAscjQKQEAgLTYxOCwyNiArODc3LDM0IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI1LHI1LHIzCiAJYWRkCXI5LHI5LHIwCi0JbGRyCXIyLFtzcCwjNCo0XQkJQCAxOQorCUAgbGRyCXIxLFtzcCwjNCo0XQkJQCAxOQogCWxkcglyMTIsW3NwLCMxKjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjMyo0XQotCW1vdglyMCxyMixyb3IjNwotCWxkcglyMSxbc3AsIzEyKjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjMTIqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjUscm9yIzYKLQlzdHIJcjMsW3NwLCMzKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyNSxyb3IjMTEKIAllb3IJcjIscjYscjcKKyNpZiAxOT49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMTk9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjUscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI1CisJc3RyCXIzLFtzcCwjMyo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyNwkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI4CkBAIC02NDYsNiArOTEzLDkgQEAKIAllb3IJcjgscjgscjkscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyOCxyOCxyOSxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMTk+PTE1CisJbGRyCXIxLFtzcCwjNSo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyOSxyMTAKIAlhbmQJcjIscjkscjEwCiAJYW5kCXIwLHIwLHIxMQpAQCAtNjUzLDI2ICs5MjMsMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjQscjQscjMKIAlhZGQJcjgscjgscjAKLQlsZHIJcjIsW3NwLCM1KjRdCQlAIDIwCisJQCBsZHIJcjEsW3NwLCM1KjRdCQlAIDIwCiAJbGRyCXIxMixbc3AsIzIqNF0KKwltb3YJcjAscjEscm9yIzcKIAlsZHIJcjMsW3NwLCM0KjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjMTMqNF0KLQllb3IJcjAscjAscjIscm9yIzE4Ci0JZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLQltb3YJcjIscjEyLHJvciMxNworCWVvcglyMCxyMCxyMSxyb3IjMTgKKwlsZHIJcjIsW3NwLCMxMyo0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyNCxyb3IjNgotCXN0cglyMyxbc3AsIzQqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI0LHJvciMxMQogCWVvcglyMixyNSxyNgorI2lmIDIwPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAyMD09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyNCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjQKKwlzdHIJcjMsW3NwLCM0KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI2CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjcKQEAgLTY4MSw2ICs5NTksOSBAQAogCWVvcglyNyxyNyxyOCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI3LHI3LHI4LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAyMD49MTUKKwlsZHIJcjEsW3NwLCM2KjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI4LHI5CiAJYW5kCXIyLHI4LHI5CiAJYW5kCXIwLHIwLHIxMApAQCAtNjg4LDI2ICs5NjksMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjExLHIxMSxyMwogCWFkZAlyNyxyNyxyMAotCWxkcglyMixbc3AsIzYqNF0JCUAgMjEKKwlAIGxkcglyMSxbc3AsIzYqNF0JCUAgMjEKIAlsZHIJcjEyLFtzcCwjMyo0XQorCW1vdglyMCxyMSxyb3IjNwogCWxkcglyMyxbc3AsIzUqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCMxNCo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzE0KjRdCisJZW9yCXIwLHIwLHIxLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKKwltb3YJcjEscjEyLHJvciMxNwogCWFkZAlyMyxyMyxyMAotCWVvcglyMixyMixyMTIscm9yIzE5Ci0JYWRkCXIzLHIzLHIxCi0JZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwllb3IJcjEscjEscjEyLHJvciMxOQogCWFkZAlyMyxyMyxyMgotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKwllb3IJcjEscjEscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCUAgYWRkCXIzLHIzLHIxCiAJbW92CXIwLHIxMSxyb3IjNgotCXN0cglyMyxbc3AsIzUqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHIxMSxyb3IjMTEKIAllb3IJcjIscjQscjUKKyNpZiAyMT49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMjE9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjExLHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyMTEKKwlzdHIJcjMsW3NwLCM1KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI1CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjYKQEAgLTcxNiw2ICsxMDA1LDkgQEAKIAllb3IJcjYscjYscjcscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNixyNixyNyxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMjE+PTE1CisJbGRyCXIxLFtzcCwjNyo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNyxyOAogCWFuZAlyMixyNyxyOAogCWFuZAlyMCxyMCxyOQpAQCAtNzIzLDI2ICsxMDE1LDM0IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXIxMCxyMTAscjMKIAlhZGQJcjYscjYscjAKLQlsZHIJcjIsW3NwLCM3KjRdCQlAIDIyCisJQCBsZHIJcjEsW3NwLCM3KjRdCQlAIDIyCiAJbGRyCXIxMixbc3AsIzQqNF0KKwltb3YJcjAscjEscm9yIzcKIAlsZHIJcjMsW3NwLCM2KjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjMTUqNF0KLQllb3IJcjAscjAscjIscm9yIzE4Ci0JZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLQltb3YJcjIscjEyLHJvciMxNworCWVvcglyMCxyMCxyMSxyb3IjMTgKKwlsZHIJcjIsW3NwLCMxNSo0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyMTAscm9yIzYKLQlzdHIJcjMsW3NwLCM2KjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyMTAscm9yIzExCiAJZW9yCXIyLHIxMSxyNAorI2lmIDIyPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAyMj09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyMTAscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHIxMAorCXN0cglyMyxbc3AsIzYqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNQpAQCAtNzUxLDYgKzEwNTEsOSBAQAogCWVvcglyNSxyNSxyNixyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI1LHI1LHI2LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAyMj49MTUKKwlsZHIJcjEsW3NwLCM4KjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI2LHI3CiAJYW5kCXIyLHI2LHI3CiAJYW5kCXIwLHIwLHI4CkBAIC03NTgsMjYgKzEwNjEsMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjkscjkscjMKIAlhZGQJcjUscjUscjAKLQlsZHIJcjIsW3NwLCM4KjRdCQlAIDIzCisJQCBsZHIJcjEsW3NwLCM4KjRdCQlAIDIzCiAJbGRyCXIxMixbc3AsIzUqNF0KKwltb3YJcjAscjEscm9yIzcKIAlsZHIJcjMsW3NwLCM3KjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjMCo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzAqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjkscm9yIzYKLQlzdHIJcjMsW3NwLCM3KjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyOSxyb3IjMTEKIAllb3IJcjIscjEwLHIxMQorI2lmIDIzPj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAyMz09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyOSxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjkKKwlzdHIJcjMsW3NwLCM3KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHIxMQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI0CkBAIC03ODYsNiArMTA5Nyw5IEBACiAJZW9yCXI0LHI0LHI1LHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjQscjQscjUscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDIzPj0xNQorCWxkcglyMSxbc3AsIzkqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjUscjYKIAlhbmQJcjIscjUscjYKIAlhbmQJcjAscjAscjcKQEAgLTc5MywyNiArMTEwNywzNCBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyOCxyOCxyMwogCWFkZAlyNCxyNCxyMAotCWxkcglyMixbc3AsIzkqNF0JCUAgMjQKKwlAIGxkcglyMSxbc3AsIzkqNF0JCUAgMjQKIAlsZHIJcjEyLFtzcCwjNio0XQorCW1vdglyMCxyMSxyb3IjNwogCWxkcglyMyxbc3AsIzgqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCMxKjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjMSo0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyOCxyb3IjNgotCXN0cglyMyxbc3AsIzgqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI4LHJvciMxMQogCWVvcglyMixyOSxyMTAKKyNpZiAyND49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMjQ9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjgscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI4CisJc3RyCXIzLFtzcCwjOCo0XQogCWFkZAlyMyxyMyxyMAogCWVvcglyMixyMixyMTAJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyMTEKQEAgLTgyMSw2ICsxMTQzLDkgQEAKIAllb3IJcjExLHIxMSxyNCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXIxMSxyMTEscjQscm9yIzIyCQlAIFNpZ21hMChhKQorI2lmIDI0Pj0xNQorCWxkcglyMSxbc3AsIzEwKjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI0LHI1CiAJYW5kCXIyLHI0LHI1CiAJYW5kCXIwLHIwLHI2CkBAIC04MjgsMjYgKzExNTMsMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjcscjcscjMKIAlhZGQJcjExLHIxMSxyMAotCWxkcglyMixbc3AsIzEwKjRdCQlAIDI1CisJQCBsZHIJcjEsW3NwLCMxMCo0XQkJQCAyNQogCWxkcglyMTIsW3NwLCM3KjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjOSo0XQotCW1vdglyMCxyMixyb3IjNwotCWxkcglyMSxbc3AsIzIqNF0KLQllb3IJcjAscjAscjIscm9yIzE4Ci0JZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLQltb3YJcjIscjEyLHJvciMxNworCWVvcglyMCxyMCxyMSxyb3IjMTgKKwlsZHIJcjIsW3NwLCMyKjRdCisJZW9yCXIwLHIwLHIxLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKKwltb3YJcjEscjEyLHJvciMxNwogCWFkZAlyMyxyMyxyMAotCWVvcglyMixyMixyMTIscm9yIzE5Ci0JYWRkCXIzLHIzLHIxCi0JZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwllb3IJcjEscjEscjEyLHJvciMxOQogCWFkZAlyMyxyMyxyMgotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKwllb3IJcjEscjEscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCUAgYWRkCXIzLHIzLHIxCiAJbW92CXIwLHI3LHJvciM2Ci0Jc3RyCXIzLFtzcCwjOSo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjcscm9yIzExCiAJZW9yCXIyLHI4LHI5CisjaWYgMjU+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDI1PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI3LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyNworCXN0cglyMyxbc3AsIzkqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjkJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyMTAKQEAgLTg1Niw2ICsxMTg5LDkgQEAKIAllb3IJcjEwLHIxMCxyMTEscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyMTAscjEwLHIxMSxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMjU+PTE1CisJbGRyCXIxLFtzcCwjMTEqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjExLHI0CiAJYW5kCXIyLHIxMSxyNAogCWFuZAlyMCxyMCxyNQpAQCAtODYzLDI2ICsxMTk5LDM0IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI2LHI2LHIzCiAJYWRkCXIxMCxyMTAscjAKLQlsZHIJcjIsW3NwLCMxMSo0XQkJQCAyNgorCUAgbGRyCXIxLFtzcCwjMTEqNF0JCUAgMjYKIAlsZHIJcjEyLFtzcCwjOCo0XQorCW1vdglyMCxyMSxyb3IjNwogCWxkcglyMyxbc3AsIzEwKjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjMyo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzMqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjYscm9yIzYKLQlzdHIJcjMsW3NwLCMxMCo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjYscm9yIzExCiAJZW9yCXIyLHI3LHI4CisjaWYgMjY+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDI2PT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI2LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyNgorCXN0cglyMyxbc3AsIzEwKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI4CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjkKQEAgLTg5MSw2ICsxMjM1LDkgQEAKIAllb3IJcjkscjkscjEwLHJvciMxMwogCWFkZAlyMyxyMyxyMTIKIAllb3IJcjkscjkscjEwLHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAyNj49MTUKKwlsZHIJcjEsW3NwLCMxMio0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyMTAscjExCiAJYW5kCXIyLHIxMCxyMTEKIAlhbmQJcjAscjAscjQKQEAgLTg5OCwyNiArMTI0NSwzNCBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyNSxyNSxyMwogCWFkZAlyOSxyOSxyMAotCWxkcglyMixbc3AsIzEyKjRdCQlAIDI3CisJQCBsZHIJcjEsW3NwLCMxMio0XQkJQCAyNwogCWxkcglyMTIsW3NwLCM5KjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjMTEqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCM0KjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjNCo0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyNSxyb3IjNgotCXN0cglyMyxbc3AsIzExKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyNSxyb3IjMTEKIAllb3IJcjIscjYscjcKKyNpZiAyNz49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMjc9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjUscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI1CisJc3RyCXIzLFtzcCwjMTEqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjcJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyOApAQCAtOTI2LDYgKzEyODEsOSBAQAogCWVvcglyOCxyOCxyOSxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI4LHI4LHI5LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAyNz49MTUKKwlsZHIJcjEsW3NwLCMxMyo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyOSxyMTAKIAlhbmQJcjIscjkscjEwCiAJYW5kCXIwLHIwLHIxMQpAQCAtOTMzLDI2ICsxMjkxLDM0IEBACiAJb3JyCXIwLHIwLHIyCQkJQCBNYWooYSxiLGMpCiAJYWRkCXI0LHI0LHIzCiAJYWRkCXI4LHI4LHIwCi0JbGRyCXIyLFtzcCwjMTMqNF0JCUAgMjgKKwlAIGxkcglyMSxbc3AsIzEzKjRdCQlAIDI4CiAJbGRyCXIxMixbc3AsIzEwKjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjMTIqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCM1KjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjNSo0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyNCxyb3IjNgotCXN0cglyMyxbc3AsIzEyKjRdCisJbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKwogCWVvcglyMCxyMCxyNCxyb3IjMTEKIAllb3IJcjIscjUscjYKKyNpZiAyOD49MTYKKwlhZGQJcjMscjMscjEJCQlAIGZyb20gQk9EWV8xNl94eAorI2VsaWYgX19BUk1fQVJDSF9fPj03ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXJldglyMyxyMworI2VuZGlmCisjaWYgMjg9PTE1CisJc3RyCXIxLFtzcCwjMTcqNF0JCQlAIGxlYXZlIHJvb20gZm9yIHIxCisjZW5kaWYKIAllb3IJcjAscjAscjQscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHI0CisJc3RyCXIzLFtzcCwjMTIqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjYJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNwpAQCAtOTYxLDYgKzEzMjcsOSBAQAogCWVvcglyNyxyNyxyOCxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI3LHI3LHI4LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAyOD49MTUKKwlsZHIJcjEsW3NwLCMxNCo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyOCxyOQogCWFuZAlyMixyOCxyOQogCWFuZAlyMCxyMCxyMTAKQEAgLTk2OCwyNiArMTMzNywzNCBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyMTEscjExLHIzCiAJYWRkCXI3LHI3LHIwCi0JbGRyCXIyLFtzcCwjMTQqNF0JCUAgMjkKKwlAIGxkcglyMSxbc3AsIzE0KjRdCQlAIDI5CiAJbGRyCXIxMixbc3AsIzExKjRdCisJbW92CXIwLHIxLHJvciM3CiAJbGRyCXIzLFtzcCwjMTMqNF0KLQltb3YJcjAscjIscm9yIzcKLQlsZHIJcjEsW3NwLCM2KjRdCi0JZW9yCXIwLHIwLHIyLHJvciMxOAotCWVvcglyMCxyMCxyMixsc3IjMwlAIHNpZ21hMChYW2krMV0pCi0JbW92CXIyLHIxMixyb3IjMTcKKwllb3IJcjAscjAscjEscm9yIzE4CisJbGRyCXIyLFtzcCwjNio0XQorCWVvcglyMCxyMCxyMSxsc3IjMwlAIHNpZ21hMChYW2krMV0pCisJbW92CXIxLHIxMixyb3IjMTcKIAlhZGQJcjMscjMscjAKLQllb3IJcjIscjIscjEyLHJvciMxOQotCWFkZAlyMyxyMyxyMQotCWVvcglyMixyMixyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJZW9yCXIxLHIxLHIxMixyb3IjMTkKIAlhZGQJcjMscjMscjIKLQlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCisJZW9yCXIxLHIxLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwlAIGFkZAlyMyxyMyxyMQogCW1vdglyMCxyMTEscm9yIzYKLQlzdHIJcjMsW3NwLCMxMyo0XQorCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKIAllb3IJcjAscjAscjExLHJvciMxMQogCWVvcglyMixyNCxyNQorI2lmIDI5Pj0xNgorCWFkZAlyMyxyMyxyMQkJCUAgZnJvbSBCT0RZXzE2X3h4CisjZWxpZiBfX0FSTV9BUkNIX18+PTcgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJcmV2CXIzLHIzCisjZW5kaWYKKyNpZiAyOT09MTUKKwlzdHIJcjEsW3NwLCMxNyo0XQkJCUAgbGVhdmUgcm9vbSBmb3IgcjEKKyNlbmRpZgogCWVvcglyMCxyMCxyMTEscm9yIzI1CUAgU2lnbWExKGUpCiAJYW5kCXIyLHIyLHIxMQorCXN0cglyMyxbc3AsIzEzKjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHI1CQkJQCBDaChlLGYsZykKIAlhZGQJcjMscjMscjYKQEAgLTk5Niw2ICsxMzczLDkgQEAKIAllb3IJcjYscjYscjcscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNixyNixyNyxyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMjk+PTE1CisJbGRyCXIxLFtzcCwjMTUqNF0JCUAgZnJvbSBCT0RZXzE2X3h4CisjZW5kaWYKIAlvcnIJcjAscjcscjgKIAlhbmQJcjIscjcscjgKIAlhbmQJcjAscjAscjkKQEAgLTEwMDMsMjYgKzEzODMsMzQgQEAKIAlvcnIJcjAscjAscjIJCQlAIE1haihhLGIsYykKIAlhZGQJcjEwLHIxMCxyMwogCWFkZAlyNixyNixyMAotCWxkcglyMixbc3AsIzE1KjRdCQlAIDMwCisJQCBsZHIJcjEsW3NwLCMxNSo0XQkJQCAzMAogCWxkcglyMTIsW3NwLCMxMio0XQorCW1vdglyMCxyMSxyb3IjNwogCWxkcglyMyxbc3AsIzE0KjRdCi0JbW92CXIwLHIyLHJvciM3Ci0JbGRyCXIxLFtzcCwjNyo0XQotCWVvcglyMCxyMCxyMixyb3IjMTgKLQllb3IJcjAscjAscjIsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQotCW1vdglyMixyMTIscm9yIzE3CisJZW9yCXIwLHIwLHIxLHJvciMxOAorCWxkcglyMixbc3AsIzcqNF0KKwllb3IJcjAscjAscjEsbHNyIzMJQCBzaWdtYTAoWFtpKzFdKQorCW1vdglyMSxyMTIscm9yIzE3CiAJYWRkCXIzLHIzLHIwCi0JZW9yCXIyLHIyLHIxMixyb3IjMTkKLQlhZGQJcjMscjMscjEKLQllb3IJcjIscjIscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCWVvcglyMSxyMSxyMTIscm9yIzE5CiAJYWRkCXIzLHIzLHIyCi0JbGRyCXIxMixbcjE0XSwjNAkJCUAgKksyNTYrKworCWVvcglyMSxyMSxyMTIsbHNyIzEwCUAgc2lnbWExKFhbaSsxNF0pCisJQCBhZGQJcjMscjMscjEKIAltb3YJcjAscjEwLHJvciM2Ci0Jc3RyCXIzLFtzcCwjMTQqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHIxMCxyb3IjMTEKIAllb3IJcjIscjExLHI0CisjaWYgMzA+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDMwPT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHIxMCxyb3IjMjUJQCBTaWdtYTEoZSkKIAlhbmQJcjIscjIscjEwCisJc3RyCXIzLFtzcCwjMTQqNF0KIAlhZGQJcjMscjMscjAKIAllb3IJcjIscjIscjQJCQlAIENoKGUsZixnKQogCWFkZAlyMyxyMyxyNQpAQCAtMTAzMSw2ICsxNDE5LDkgQEAKIAllb3IJcjUscjUscjYscm9yIzEzCiAJYWRkCXIzLHIzLHIxMgogCWVvcglyNSxyNSxyNixyb3IjMjIJCUAgU2lnbWEwKGEpCisjaWYgMzA+PTE1CisJbGRyCXIxLFtzcCwjMCo0XQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbmRpZgogCW9ycglyMCxyNixyNwogCWFuZAlyMixyNixyNwogCWFuZAlyMCxyMCxyOApAQCAtMTAzOCwyNiArMTQyOSwzNCBAQAogCW9ycglyMCxyMCxyMgkJCUAgTWFqKGEsYixjKQogCWFkZAlyOSxyOSxyMwogCWFkZAlyNSxyNSxyMAotCWxkcglyMixbc3AsIzAqNF0JCUAgMzEKKwlAIGxkcglyMSxbc3AsIzAqNF0JCUAgMzEKIAlsZHIJcjEyLFtzcCwjMTMqNF0KKwltb3YJcjAscjEscm9yIzcKIAlsZHIJcjMsW3NwLCMxNSo0XQotCW1vdglyMCxyMixyb3IjNwotCWxkcglyMSxbc3AsIzgqNF0KLQllb3IJcjAscjAscjIscm9yIzE4Ci0JZW9yCXIwLHIwLHIyLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKLQltb3YJcjIscjEyLHJvciMxNworCWVvcglyMCxyMCxyMSxyb3IjMTgKKwlsZHIJcjIsW3NwLCM4KjRdCisJZW9yCXIwLHIwLHIxLGxzciMzCUAgc2lnbWEwKFhbaSsxXSkKKwltb3YJcjEscjEyLHJvciMxNwogCWFkZAlyMyxyMyxyMAotCWVvcglyMixyMixyMTIscm9yIzE5Ci0JYWRkCXIzLHIzLHIxCi0JZW9yCXIyLHIyLHIxMixsc3IjMTAJQCBzaWdtYTEoWFtpKzE0XSkKKwllb3IJcjEscjEscjEyLHJvciMxOQogCWFkZAlyMyxyMyxyMgotCWxkcglyMTIsW3IxNF0sIzQJCQlAICpLMjU2KysKKwllb3IJcjEscjEscjEyLGxzciMxMAlAIHNpZ21hMShYW2krMTRdKQorCUAgYWRkCXIzLHIzLHIxCiAJbW92CXIwLHI5LHJvciM2Ci0Jc3RyCXIzLFtzcCwjMTUqNF0KKwlsZHIJcjEyLFtyMTRdLCM0CQkJQCAqSzI1NisrCiAJZW9yCXIwLHIwLHI5LHJvciMxMQogCWVvcglyMixyMTAscjExCisjaWYgMzE+PTE2CisJYWRkCXIzLHIzLHIxCQkJQCBmcm9tIEJPRFlfMTZfeHgKKyNlbGlmIF9fQVJNX0FSQ0hfXz49NyAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwlyZXYJcjMscjMKKyNlbmRpZgorI2lmIDMxPT0xNQorCXN0cglyMSxbc3AsIzE3KjRdCQkJQCBsZWF2ZSByb29tIGZvciByMQorI2VuZGlmCiAJZW9yCXIwLHIwLHI5LHJvciMyNQlAIFNpZ21hMShlKQogCWFuZAlyMixyMixyOQorCXN0cglyMyxbc3AsIzE1KjRdCiAJYWRkCXIzLHIzLHIwCiAJZW9yCXIyLHIyLHIxMQkJCUAgQ2goZSxmLGcpCiAJYWRkCXIzLHIzLHI0CkBAIC0xMDY2LDYgKzE0NjUsOSBAQAogCWVvcglyNCxyNCxyNSxyb3IjMTMKIAlhZGQJcjMscjMscjEyCiAJZW9yCXI0LHI0LHI1LHJvciMyMgkJQCBTaWdtYTAoYSkKKyNpZiAzMT49MTUKKwlsZHIJcjEsW3NwLCMxKjRdCQlAIGZyb20gQk9EWV8xNl94eAorI2VuZGlmCiAJb3JyCXIwLHI1LHI2CiAJYW5kCXIyLHI1LHI2CiAJYW5kCXIwLHIwLHI3CkBAIC0xMTAyLDEwICsxNTA0LDE0IEBACiAJYm5lCS5Mb29wCiAKIAlhZGQJc3Asc3AsIzE5KjQJQCBkZXN0cm95IGZyYW1lCi0JbGRtaWEJc3AhLHtyNC1yMTIsbHJ9CisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTEscGN9CisjZWxzZQorCWxkbWlhCXNwISx7cjQtcjExLGxyfQogCXRzdAlsciwjMQogCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKIAkud29yZAkweGUxMmZmZjFlCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisjZW5kaWYKIC5zaXplICAgc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGEyNTZfYmxvY2tfZGF0YV9vcmRlcgogLmFzY2l6ICAiU0hBMjU2IGJsb2NrIHRyYW5zZm9ybSBmb3IgQVJNdjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvQG9wZW5zc2wub3JnPiIKIC5hbGlnbgkyCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItYXJtdjQucGwKaW5kZXggM2EzNTg2MS4uN2ZhZjM3YiAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1hcm12NC5wbApAQCAtMTgsMjIgKzE4LDMzIEBACiAjIFJlc2NoZWR1bGluZyBmb3IgZHVhbC1pc3N1ZSBwaXBlbGluZSByZXN1bHRlZCBpbiA2JSBpbXByb3ZlbWVudCBvbgogIyBDb3J0ZXggQTggY29yZSBhbmQgfjQwIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUuCiAKKyMgRmVicnVhcnkgMjAxMS4KKyMKKyMgUHJvZmlsZXItYXNzaXN0ZWQgYW5kIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbiByZXN1bHRlZCBpbiA3JQorIyBpbXByb3ZlbWVudCBvbiBDb3h0ZXggQTggY29yZSBhbmQgfjM4IGN5Y2xlcyBwZXIgYnl0ZS4KKworIyBNYXJjaCAyMDExLgorIworIyBBZGQgTkVPTiBpbXBsZW1lbnRhdGlvbi4gT24gQ29ydGV4IEE4IGl0IHdhcyBtZWFzdXJlZCB0byBwcm9jZXNzCisjIG9uZSBieXRlIGluIDI1LjUgY3ljbGVzIG9yIDQ3JSBmYXN0ZXIgdGhhbiBpbnRlZ2VyLW9ubHkgY29kZS4KKwogIyBCeXRlIG9yZGVyIFtpbl1kZXBlbmRlbmNlLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwotIyBDYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbWFpbnRhaW4gc3BlY2lmaWMgKmR3b3JkKiBvcmRlciBpbiBoWzAtN10sCi0jIG5hbWVseSB3aXRoIG1vc3Qgc2lnbmlmaWNhbnQgZHdvcmQgYXQgKmxvd2VyKiBhZGRyZXNzLCB3aGljaCBpcwotIyByZWZsZWN0ZWQgaW4gYmVsb3cgdHdvIHBhcmFtZXRlcnMuICpCeXRlKiBvcmRlciB3aXRoaW4gdGhlc2UgZHdvcmRzCi0jIGluIHR1cm4gaXMgd2hhdGV2ZXIgKm5hdGl2ZSogYnl0ZSBvcmRlciBvbiBjdXJyZW50IHBsYXRmb3JtLgotJGhpPTA7Ci0kbG89NDsKKyMgT3JpZ2luYWxseSBjYWxsZXIgd2FzIGV4cGVjdGVkIHRvIG1haW50YWluIHNwZWNpZmljICpkd29yZCogb3JkZXIgaW4KKyMgaFswLTddLCBuYW1lbHkgd2l0aCBtb3N0IHNpZ25pZmljYW50IGR3b3JkIGF0ICpsb3dlciogYWRkcmVzcywgd2hpY2gKKyMgd2FzIHJlZmxlY3RlZCBpbiBiZWxvdyB0d28gcGFyYW1ldGVycyBhcyAwIGFuZCA0LiBOb3cgY2FsbGVyIGlzCisjIGV4cGVjdGVkIHRvIG1haW50YWluIG5hdGl2ZSBieXRlIG9yZGVyIGZvciB3aG9sZSA2NC1iaXQgdmFsdWVzLgorJGhpPSJISSI7CiskbG89IkxPIjsKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30KIG9wZW4gU1RET1VULCI+JG91dHB1dCI7CiAKLSRjdHg9InIwIjsKKyRjdHg9InIwIjsJIyBwYXJhbWV0ZXIgYmxvY2sKICRpbnA9InIxIjsKICRsZW49InIyIjsKKwogJFRsbz0icjMiOwogJFRoaT0icjQiOwogJEFsbz0icjUiOwpAQCAtNjEsMTUgKzcyLDE3IEBACiBzdWIgQk9EWV8wMF8xNSgpIHsKIG15ICRtYWdpYyA9IHNoaWZ0OwogJGNvZGUuPTw8X19fOwotCWxkcgkkdDIsW3NwLCMkSG9mZiswXQlAIGgubG8KLQlsZHIJJHQzLFtzcCwjJEhvZmYrNF0JQCBoLmhpCiAJQCBTaWdtYTEoeCkJKFJPVFIoKHgpLDE0KSBeIFJPVFIoKHgpLDE4KSAgXiBST1RSKCh4KSw0MSkpCiAJQCBMTwkJbG8+PjE0XmhpPDwxOCBeIGxvPj4xOF5oaTw8MTQgXiBoaT4+OV5sbzw8MjMKIAlAIEhJCQloaT4+MTRebG88PDE4IF4gaGk+PjE4XmxvPDwxNCBeIGxvPj45XmhpPDwyMwogCW1vdgkkdDAsJEVsbyxsc3IjMTQKKwlzdHIJJFRsbyxbc3AsIyRYb2ZmKzBdCiAJbW92CSR0MSwkRWhpLGxzciMxNAorCXN0cgkkVGhpLFtzcCwjJFhvZmYrNF0KIAllb3IJJHQwLCR0MCwkRWhpLGxzbCMxOAorCWxkcgkkdDIsW3NwLCMkSG9mZiswXQlAIGgubG8KIAllb3IJJHQxLCR0MSwkRWxvLGxzbCMxOAorCWxkcgkkdDMsW3NwLCMkSG9mZis0XQlAIGguaGkKIAllb3IJJHQwLCR0MCwkRWxvLGxzciMxOAogCWVvcgkkdDEsJHQxLCRFaGksbHNyIzE4CiAJZW9yCSR0MCwkdDAsJEVoaSxsc2wjMTQKQEAgLTk2LDI1ICsxMDksMjQgQEAKIAlhbmQJJHQxLCR0MSwkRWhpCiAJc3RyCSRBaGksW3NwLCMkQW9mZis0XQogCWVvcgkkdDAsJHQwLCR0MgotCWxkcgkkdDIsWyRLdGJsLCM0XQkJQCBLW2ldLmxvCisJbGRyCSR0MixbJEt0YmwsIyRsb10JQCBLW2ldLmxvCiAJZW9yCSR0MSwkdDEsJHQzCQlAIENoKGUsZixnKQotCWxkcgkkdDMsWyRLdGJsLCMwXQkJQCBLW2ldLmhpCisJbGRyCSR0MyxbJEt0YmwsIyRoaV0JQCBLW2ldLmhpCiAKIAlhZGRzCSRUbG8sJFRsbywkdDAKIAlsZHIJJEVsbyxbc3AsIyREb2ZmKzBdCUAgZC5sbwogCWFkYwkkVGhpLCRUaGksJHQxCQlAIFQgKz0gQ2goZSxmLGcpCiAJbGRyCSRFaGksW3NwLCMkRG9mZis0XQlAIGQuaGkKIAlhZGRzCSRUbG8sJFRsbywkdDIKKwlhbmQJJHQwLCR0MiwjMHhmZgogCWFkYwkkVGhpLCRUaGksJHQzCQlAIFQgKz0gS1tpXQogCWFkZHMJJEVsbywkRWxvLCRUbG8KLQlhZGMJJEVoaSwkRWhpLCRUaGkJCUAgZCArPSBUCi0KLQlhbmQJJHQwLCR0MiwjMHhmZgotCXRlcQkkdDAsIyRtYWdpYwotCW9ycmVxCSRLdGJsLCRLdGJsLCMxCi0KIAlsZHIJJHQyLFtzcCwjJEJvZmYrMF0JQCBiLmxvCisJYWRjCSRFaGksJEVoaSwkVGhpCQlAIGQgKz0gVAorCXRlcQkkdDAsIyRtYWdpYworCiAJbGRyCSR0Myxbc3AsIyRDb2ZmKzBdCUAgYy5sbworCW9ycmVxCSRLdGJsLCRLdGJsLCMxCiAJQCBTaWdtYTAoeCkJKFJPVFIoKHgpLDI4KSBeIFJPVFIoKHgpLDM0KSBeIFJPVFIoKHgpLDM5KSkKIAlAIExPCQlsbz4+MjheaGk8PDQgIF4gaGk+PjJebG88PDMwIF4gaGk+PjdebG88PDI1CiAJQCBISQkJaGk+PjI4XmxvPDw0ICBeIGxvPj4yXmhpPDwzMCBeIGxvPj43XmhpPDwyNQpAQCAtMTMxLDgwICsxNDMsMTAwIEBACiAJZW9yCSR0MCwkdDAsJEFsbyxsc2wjMjUKIAllb3IJJHQxLCR0MSwkQWhpLGxzbCMyNQlAIFNpZ21hMChhKQogCWFkZHMJJFRsbywkVGxvLCR0MAorCWFuZAkkdDAsJEFsbywkdDIKIAlhZGMJJFRoaSwkVGhpLCR0MQkJQCBUICs9IFNpZ21hMChhKQogCi0JYW5kCSR0MCwkQWxvLCR0MgotCW9ycgkkQWxvLCRBbG8sJHQyCiAJbGRyCSR0MSxbc3AsIyRCb2ZmKzRdCUAgYi5oaQorCW9ycgkkQWxvLCRBbG8sJHQyCiAJbGRyCSR0Mixbc3AsIyRDb2ZmKzRdCUAgYy5oaQogCWFuZAkkQWxvLCRBbG8sJHQzCi0Jb3JyCSRBbG8sJEFsbywkdDAJCUAgTWFqKGEsYixjKS5sbwogCWFuZAkkdDMsJEFoaSwkdDEKIAlvcnIJJEFoaSwkQWhpLCR0MQorCW9ycgkkQWxvLCRBbG8sJHQwCQlAIE1haihhLGIsYykubG8KIAlhbmQJJEFoaSwkQWhpLCR0MgotCW9ycgkkQWhpLCRBaGksJHQzCQlAIE1haihhLGIsYykuaGkKIAlhZGRzCSRBbG8sJEFsbywkVGxvCi0JYWRjCSRBaGksJEFoaSwkVGhpCQlAIGggKz0gVAotCisJb3JyCSRBaGksJEFoaSwkdDMJCUAgTWFqKGEsYixjKS5oaQogCXN1YglzcCxzcCwjOAorCWFkYwkkQWhpLCRBaGksJFRoaQkJQCBoICs9IFQKKwl0c3QJJEt0YmwsIzEKIAlhZGQJJEt0YmwsJEt0YmwsIzgKIF9fXwogfQogJGNvZGU9PDxfX187CisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKyNpZmRlZiBfX0FSTUVMX18KKyMgZGVmaW5lIExPIDAKKyMgZGVmaW5lIEhJIDQKKyMgZGVmaW5lIFdPUkQ2NChoaTAsbG8wLGhpMSxsbzEpCS53b3JkCWxvMCxoaTAsIGxvMSxoaTEKKyNlbHNlCisjIGRlZmluZSBISSAwCisjIGRlZmluZSBMTyA0CisjIGRlZmluZSBXT1JENjQoaGkwLGxvMCxoaTEsbG8xKQkud29yZAloaTAsbG8wLCBoaTEsbG8xCisjZW5kaWYKKwogLnRleHQKIC5jb2RlCTMyCiAudHlwZQlLNTEyLCVvYmplY3QKIC5hbGlnbgk1CiBLNTEyOgotLndvcmQJMHg0MjhhMmY5OCwweGQ3MjhhZTIyLCAweDcxMzc0NDkxLDB4MjNlZjY1Y2QKLS53b3JkCTB4YjVjMGZiY2YsMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwweDgxODlkYmJjCi0ud29yZAkweDM5NTZjMjViLDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsMHhiNjA1ZDAxOQotLndvcmQJMHg5MjNmODJhNCwweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LDB4ZGE2ZDgxMTgKLS53b3JkCTB4ZDgwN2FhOTgsMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwweDQ1NzA2ZmJlCi0ud29yZAkweDI0MzE4NWJlLDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsMHhkNWZmYjRlMgotLndvcmQJMHg3MmJlNWQ3NCwweGYyN2I4OTZmLCAweDgwZGViMWZlLDB4M2IxNjk2YjEKLS53b3JkCTB4OWJkYzA2YTcsMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwweGNmNjkyNjk0Ci0ud29yZAkweGU0OWI2OWMxLDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsMHgzODRmMjVlMwotLndvcmQJMHgwZmMxOWRjNiwweDhiOGNkNWI1LCAweDI0MGNhMWNjLDB4NzdhYzljNjUKLS53b3JkCTB4MmRlOTJjNmYsMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwweDZlYTZlNDgzCi0ud29yZAkweDVjYjBhOWRjLDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsMHg4MzExNTNiNQotLndvcmQJMHg5ODNlNTE1MiwweGVlNjZkZmFiLCAweGE4MzFjNjZkLDB4MmRiNDMyMTAKLS53b3JkCTB4YjAwMzI3YzgsMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywweGJlZWYwZWU0Ci0ud29yZAkweGM2ZTAwYmYzLDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsMHg5MzBhYTcyNQotLndvcmQJMHgwNmNhNjM1MSwweGUwMDM4MjZmLCAweDE0MjkyOTY3LDB4MGEwZTZlNzAKLS53b3JkCTB4MjdiNzBhODUsMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwweDVjMjZjOTI2Ci0ud29yZAkweDRkMmM2ZGZjLDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsMHg5ZDk1YjNkZgotLndvcmQJMHg2NTBhNzM1NCwweDhiYWY2M2RlLCAweDc2NmEwYWJiLDB4M2M3N2IyYTgKLS53b3JkCTB4ODFjMmM5MmUsMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwweDE0ODIzNTNiCi0ud29yZAkweGEyYmZlOGExLDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsMHhiYzQyMzAwMQotLndvcmQJMHhjMjRiOGI3MCwweGQwZjg5NzkxLCAweGM3NmM1MWEzLDB4MDY1NGJlMzAKLS53b3JkCTB4ZDE5MmU4MTksMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwweDU1NjVhOTEwCi0ud29yZAkweGY0MGUzNTg1LDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsMHgzMmJiZDFiOAotLndvcmQJMHgxOWE0YzExNiwweGI4ZDJkMGM4LCAweDFlMzc2YzA4LDB4NTE0MWFiNTMKLS53b3JkCTB4Mjc0ODc3NGMsMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwweGUxOWI0OGE4Ci0ud29yZAkweDM5MWMwY2IzLDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsMHhlMzQxOGFjYgotLndvcmQJMHg1YjljY2E0ZiwweDc3NjNlMzczLCAweDY4MmU2ZmYzLDB4ZDZiMmI4YTMKLS53b3JkCTB4NzQ4ZjgyZWUsMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwweDQzMTcyZjYwCi0ud29yZAkweDg0Yzg3ODE0LDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsMHgxYTY0MzllYwotLndvcmQJMHg5MGJlZmZmYSwweDIzNjMxZTI4LCAweGE0NTA2Y2ViLDB4ZGU4MmJkZTkKLS53b3JkCTB4YmVmOWEzZjcsMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwweGUzNzI1MzJiCi0ud29yZAkweGNhMjczZWNlLDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsMHgyMWMwYzIwNwotLndvcmQJMHhlYWRhN2RkNiwweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLDB4ZWU2ZWQxNzgKLS53b3JkCTB4MDZmMDY3YWEsMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwweGEyYzg5OGE2Ci0ud29yZAkweDExM2Y5ODA0LDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsMHgxMzFjNDcxYgotLndvcmQJMHgyOGRiNzdmNSwweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLDB4NDBjNzI0OTMKLS53b3JkCTB4M2M5ZWJlMGEsMHgxNWM5YmViYywgMHg0MzFkNjdjNCwweDljMTAwZDRjCi0ud29yZAkweDRjYzVkNGJlLDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsMHhmYzY1N2UyYQotLndvcmQJMHg1ZmNiNmZhYiwweDNhZDZmYWVjLCAweDZjNDQxOThjLDB4NGE0NzU4MTcKK1dPUkQ2NCgweDQyOGEyZjk4LDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsMHgyM2VmNjVjZCkKK1dPUkQ2NCgweGI1YzBmYmNmLDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsMHg4MTg5ZGJiYykKK1dPUkQ2NCgweDM5NTZjMjViLDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsMHhiNjA1ZDAxOSkKK1dPUkQ2NCgweDkyM2Y4MmE0LDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsMHhkYTZkODExOCkKK1dPUkQ2NCgweGQ4MDdhYTk4LDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsMHg0NTcwNmZiZSkKK1dPUkQ2NCgweDI0MzE4NWJlLDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsMHhkNWZmYjRlMikKK1dPUkQ2NCgweDcyYmU1ZDc0LDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsMHgzYjE2OTZiMSkKK1dPUkQ2NCgweDliZGMwNmE3LDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsMHhjZjY5MjY5NCkKK1dPUkQ2NCgweGU0OWI2OWMxLDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsMHgzODRmMjVlMykKK1dPUkQ2NCgweDBmYzE5ZGM2LDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsMHg3N2FjOWM2NSkKK1dPUkQ2NCgweDJkZTkyYzZmLDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsMHg2ZWE2ZTQ4MykKK1dPUkQ2NCgweDVjYjBhOWRjLDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsMHg4MzExNTNiNSkKK1dPUkQ2NCgweDk4M2U1MTUyLDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsMHgyZGI0MzIxMCkKK1dPUkQ2NCgweGIwMDMyN2M4LDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsMHhiZWVmMGVlNCkKK1dPUkQ2NCgweGM2ZTAwYmYzLDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsMHg5MzBhYTcyNSkKK1dPUkQ2NCgweDA2Y2E2MzUxLDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsMHgwYTBlNmU3MCkKK1dPUkQ2NCgweDI3YjcwYTg1LDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsMHg1YzI2YzkyNikKK1dPUkQ2NCgweDRkMmM2ZGZjLDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsMHg5ZDk1YjNkZikKK1dPUkQ2NCgweDY1MGE3MzU0LDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsMHgzYzc3YjJhOCkKK1dPUkQ2NCgweDgxYzJjOTJlLDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsMHgxNDgyMzUzYikKK1dPUkQ2NCgweGEyYmZlOGExLDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsMHhiYzQyMzAwMSkKK1dPUkQ2NCgweGMyNGI4YjcwLDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsMHgwNjU0YmUzMCkKK1dPUkQ2NCgweGQxOTJlODE5LDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsMHg1NTY1YTkxMCkKK1dPUkQ2NCgweGY0MGUzNTg1LDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsMHgzMmJiZDFiOCkKK1dPUkQ2NCgweDE5YTRjMTE2LDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsMHg1MTQxYWI1MykKK1dPUkQ2NCgweDI3NDg3NzRjLDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsMHhlMTliNDhhOCkKK1dPUkQ2NCgweDM5MWMwY2IzLDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsMHhlMzQxOGFjYikKK1dPUkQ2NCgweDViOWNjYTRmLDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsMHhkNmIyYjhhMykKK1dPUkQ2NCgweDc0OGY4MmVlLDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsMHg0MzE3MmY2MCkKK1dPUkQ2NCgweDg0Yzg3ODE0LDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsMHgxYTY0MzllYykKK1dPUkQ2NCgweDkwYmVmZmZhLDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsMHhkZTgyYmRlOSkKK1dPUkQ2NCgweGJlZjlhM2Y3LDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsMHhlMzcyNTMyYikKK1dPUkQ2NCgweGNhMjczZWNlLDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsMHgyMWMwYzIwNykKK1dPUkQ2NCgweGVhZGE3ZGQ2LDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsMHhlZTZlZDE3OCkKK1dPUkQ2NCgweDA2ZjA2N2FhLDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsMHhhMmM4OThhNikKK1dPUkQ2NCgweDExM2Y5ODA0LDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsMHgxMzFjNDcxYikKK1dPUkQ2NCgweDI4ZGI3N2Y1LDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsMHg0MGM3MjQ5MykKK1dPUkQ2NCgweDNjOWViZTBhLDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsMHg5YzEwMGQ0YykKK1dPUkQ2NCgweDRjYzVkNGJlLDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsMHhmYzY1N2UyYSkKK1dPUkQ2NCgweDVmY2I2ZmFiLDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsMHg0YTQ3NTgxNykKIC5zaXplCUs1MTIsLi1LNTEyCisuTE9QRU5TU0xfYXJtY2FwOgorLndvcmQJT1BFTlNTTF9hcm1jYXBfUC1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgorLnNraXAJMzItNAogCiAuZ2xvYmFsCXNoYTUxMl9ibG9ja19kYXRhX29yZGVyCiAudHlwZQlzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciwlZnVuY3Rpb24KIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyOgogCXN1YglyMyxwYywjOAkJQCBzaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgogCWFkZAkkbGVuLCRpbnAsJGxlbixsc2wjNwlAIGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mIGlucAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMTIsLkxPUEVOU1NMX2FybWNhcAorCWxkcglyMTIsW3IzLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorCXRzdAlyMTIsIzEKKwlibmUJLkxORU9OCisjZW5kaWYKIAlzdG1kYglzcCEse3I0LXIxMixscn0KLQlzdWIJJEt0YmwscjMsIzY0MAkJQCBLNTEyCisJc3ViCSRLdGJsLHIzLCM2NzIJCUAgSzUxMgogCXN1YglzcCxzcCwjOSo4CiAKIAlsZHIJJEVsbyxbJGN0eCwjJEVvZmYrJGxvXQpAQCAtMjM4LDYgKzI3MCw3IEBACiAJc3RyCSRUaGksW3NwLCMkRm9mZis0XQogCiAuTDAwXzE1OgorI2lmIF9fQVJNX0FSQ0hfXzw3CiAJbGRyYgkkVGxvLFskaW5wLCM3XQogCWxkcmIJJHQwLCBbJGlucCwjNl0KIAlsZHJiCSR0MSwgWyRpbnAsIzVdCkBAIC0yNTIsMjYgKzI4NSwzMCBAQAogCW9ycgkkVGhpLCRUaGksJHQzLGxzbCM4CiAJb3JyCSRUaGksJFRoaSwkdDAsbHNsIzE2CiAJb3JyCSRUaGksJFRoaSwkdDEsbHNsIzI0Ci0Jc3RyCSRUbG8sW3NwLCMkWG9mZiswXQotCXN0cgkkVGhpLFtzcCwjJFhvZmYrNF0KKyNlbHNlCisJbGRyCSRUbG8sWyRpbnAsIzRdCisJbGRyCSRUaGksWyRpbnBdLCM4CisjaWZkZWYgX19BUk1FTF9fCisJcmV2CSRUbG8sJFRsbworCXJldgkkVGhpLCRUaGkKKyNlbmRpZgorI2VuZGlmCiBfX18KIAkmQk9EWV8wMF8xNSgweDk0KTsKICRjb2RlLj08PF9fXzsKIAl0c3QJJEt0YmwsIzEKIAliZXEJLkwwMF8xNQotCWJpYwkkS3RibCwkS3RibCwjMQotCi0uTDE2Xzc5OgogCWxkcgkkdDAsW3NwLCNgJFhvZmYrOCooMTYtMSlgKzBdCiAJbGRyCSR0MSxbc3AsI2AkWG9mZis4KigxNi0xKWArNF0KLQlsZHIJJHQyLFtzcCwjYCRYb2ZmKzgqKDE2LTE0KWArMF0KLQlsZHIJJHQzLFtzcCwjYCRYb2ZmKzgqKDE2LTE0KWArNF0KLQorCWJpYwkkS3RibCwkS3RibCwjMQorLkwxNl83OToKIAlAIHNpZ21hMCh4KQkoUk9UUigoeCksMSkgIF4gUk9UUigoeCksOCkgIF4gKCh4KT4+NykpCiAJQCBMTwkJbG8+PjFeaGk8PDMxICBeIGxvPj44XmhpPDwyNCBeIGxvPj43XmhpPDwyNQogCUAgSEkJCWhpPj4xXmxvPDwzMSAgXiBoaT4+OF5sbzw8MjQgXiBoaT4+NwogCW1vdgkkVGxvLCR0MCxsc3IjMQorCWxkcgkkdDIsW3NwLCNgJFhvZmYrOCooMTYtMTQpYCswXQogCW1vdgkkVGhpLCR0MSxsc3IjMQorCWxkcgkkdDMsW3NwLCNgJFhvZmYrOCooMTYtMTQpYCs0XQogCWVvcgkkVGxvLCRUbG8sJHQxLGxzbCMzMQogCWVvcgkkVGhpLCRUaGksJHQwLGxzbCMzMQogCWVvcgkkVGxvLCRUbG8sJHQwLGxzciM4CkBAIC0yOTUsMjUgKzMzMiwyNCBAQAogCWVvcgkkdDEsJHQxLCR0Myxsc2wjMwogCWVvcgkkdDAsJHQwLCR0Mixsc3IjNgogCWVvcgkkdDEsJHQxLCR0Myxsc3IjNgorCWxkcgkkdDIsW3NwLCNgJFhvZmYrOCooMTYtOSlgKzBdCiAJZW9yCSR0MCwkdDAsJHQzLGxzbCMyNgogCi0JbGRyCSR0Mixbc3AsI2AkWG9mZis4KigxNi05KWArMF0KIAlsZHIJJHQzLFtzcCwjYCRYb2ZmKzgqKDE2LTkpYCs0XQogCWFkZHMJJFRsbywkVGxvLCR0MAorCWxkcgkkdDAsW3NwLCNgJFhvZmYrOCoxNmArMF0KIAlhZGMJJFRoaSwkVGhpLCR0MQogCi0JbGRyCSR0MCxbc3AsI2AkWG9mZis4KjE2YCswXQogCWxkcgkkdDEsW3NwLCNgJFhvZmYrOCoxNmArNF0KIAlhZGRzCSRUbG8sJFRsbywkdDIKIAlhZGMJJFRoaSwkVGhpLCR0MwogCWFkZHMJJFRsbywkVGxvLCR0MAogCWFkYwkkVGhpLCRUaGksJHQxCi0Jc3RyCSRUbG8sW3NwLCMkWG9mZiswXQotCXN0cgkkVGhpLFtzcCwjJFhvZmYrNF0KIF9fXwogCSZCT0RZXzAwXzE1KDB4MTcpOwogJGNvZGUuPTw8X19fOwotCXRzdAkkS3RibCwjMQorCWxkcmVxCSR0MCxbc3AsI2AkWG9mZis4KigxNi0xKWArMF0KKwlsZHJlcQkkdDEsW3NwLCNgJFhvZmYrOCooMTYtMSlgKzRdCiAJYmVxCS5MMTZfNzkKIAliaWMJJEt0YmwsJEt0YmwsIzEKIApAQCAtMzI0LDEyICszNjAsMTIgQEAKIAlsZHIJJHQyLCBbJGN0eCwjJEJvZmYrJGxvXQogCWxkcgkkdDMsIFskY3R4LCMkQm9mZiskaGldCiAJYWRkcwkkdDAsJEFsbywkdDAKLQlhZGMJJHQxLCRBaGksJHQxCi0JYWRkcwkkdDIsJFRsbywkdDIKLQlhZGMJJHQzLCRUaGksJHQzCiAJc3RyCSR0MCwgWyRjdHgsIyRBb2ZmKyRsb10KKwlhZGMJJHQxLCRBaGksJHQxCiAJc3RyCSR0MSwgWyRjdHgsIyRBb2ZmKyRoaV0KKwlhZGRzCSR0MiwkVGxvLCR0MgogCXN0cgkkdDIsIFskY3R4LCMkQm9mZiskbG9dCisJYWRjCSR0MywkVGhpLCR0MwogCXN0cgkkdDMsIFskY3R4LCMkQm9mZiskaGldCiAKIAlsZHIJJEFsbyxbc3AsIyRDb2ZmKzBdCkBAIC0zNDEsMTIgKzM3NywxMiBAQAogCWxkcgkkdDIsIFskY3R4LCMkRG9mZiskbG9dCiAJbGRyCSR0MywgWyRjdHgsIyREb2ZmKyRoaV0KIAlhZGRzCSR0MCwkQWxvLCR0MAotCWFkYwkkdDEsJEFoaSwkdDEKLQlhZGRzCSR0MiwkVGxvLCR0MgotCWFkYwkkdDMsJFRoaSwkdDMKIAlzdHIJJHQwLCBbJGN0eCwjJENvZmYrJGxvXQorCWFkYwkkdDEsJEFoaSwkdDEKIAlzdHIJJHQxLCBbJGN0eCwjJENvZmYrJGhpXQorCWFkZHMJJHQyLCRUbG8sJHQyCiAJc3RyCSR0MiwgWyRjdHgsIyREb2ZmKyRsb10KKwlhZGMJJHQzLCRUaGksJHQzCiAJc3RyCSR0MywgWyRjdHgsIyREb2ZmKyRoaV0KIAogCWxkcgkkVGxvLFtzcCwjJEZvZmYrMF0KQEAgLTM1NiwxMiArMzkyLDEyIEBACiAJbGRyCSR0MiwgWyRjdHgsIyRGb2ZmKyRsb10KIAlsZHIJJHQzLCBbJGN0eCwjJEZvZmYrJGhpXQogCWFkZHMJJEVsbywkRWxvLCR0MAotCWFkYwkkRWhpLCRFaGksJHQxCi0JYWRkcwkkdDIsJFRsbywkdDIKLQlhZGMJJHQzLCRUaGksJHQzCiAJc3RyCSRFbG8sWyRjdHgsIyRFb2ZmKyRsb10KKwlhZGMJJEVoaSwkRWhpLCR0MQogCXN0cgkkRWhpLFskY3R4LCMkRW9mZiskaGldCisJYWRkcwkkdDIsJFRsbywkdDIKIAlzdHIJJHQyLCBbJGN0eCwjJEZvZmYrJGxvXQorCWFkYwkkdDMsJFRoaSwkdDMKIAlzdHIJJHQzLCBbJGN0eCwjJEZvZmYrJGhpXQogCiAJbGRyCSRBbG8sW3NwLCMkR29mZiswXQpAQCAtMzczLDEyICs0MDksMTIgQEAKIAlsZHIJJHQyLCBbJGN0eCwjJEhvZmYrJGxvXQogCWxkcgkkdDMsIFskY3R4LCMkSG9mZiskaGldCiAJYWRkcwkkdDAsJEFsbywkdDAKLQlhZGMJJHQxLCRBaGksJHQxCi0JYWRkcwkkdDIsJFRsbywkdDIKLQlhZGMJJHQzLCRUaGksJHQzCiAJc3RyCSR0MCwgWyRjdHgsIyRHb2ZmKyRsb10KKwlhZGMJJHQxLCRBaGksJHQxCiAJc3RyCSR0MSwgWyRjdHgsIyRHb2ZmKyRoaV0KKwlhZGRzCSR0MiwkVGxvLCR0MgogCXN0cgkkdDIsIFskY3R4LCMkSG9mZiskbG9dCisJYWRjCSR0MywkVGhpLCR0MwogCXN0cgkkdDMsIFskY3R4LCMkSG9mZiskaGldCiAKIAlhZGQJc3Asc3AsIzY0MApAQCAtMzg4LDEzICs0MjQsMTU2IEBACiAJYm5lCS5Mb29wCiAKIAlhZGQJc3Asc3AsIzgqOQkJQCBkZXN0cm95IGZyYW1lCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTIscGN9CisjZWxzZQogCWxkbWlhCXNwISx7cjQtcjEyLGxyfQogCXRzdAlsciwjMQogCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKIAlieAlscgkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQotLnNpemUgICBzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTUxMl9ibG9ja19kYXRhX29yZGVyCi0uYXNjaXogICJTSEE1MTIgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKyNlbmRpZgorX19fCisKK3sKK215IEBTaWdtYTA9KDI4LDM0LDM5KTsKK215IEBTaWdtYTE9KDE0LDE4LDQxKTsKK215IEBzaWdtYTA9KDEsIDgsIDcpOworbXkgQHNpZ21hMT0oMTksNjEsNik7CisKK215ICRLdGJsPSJyMyI7CitteSAkY250PSJyMTIiOwkjIHZvbGF0aWxlIHJlZ2lzdGVyIGtub3duIGFzIGlwLCBpbnRyYS1wcm9jZWR1cmUtY2FsbCBzY3JhdGNoCisKK215IEBYPW1hcCgiZCRfIiwoMC4uMTUpKTsKK215IEBWPSgkQSwkQiwkQywkRCwkRSwkRiwkRywkSCk9bWFwKCJkJF8iLCgxNi4uMjMpKTsKKworc3ViIE5FT05fMDBfMTUoKSB7CitteSAkaT1zaGlmdDsKK215ICgkYSwkYiwkYywkZCwkZSwkZiwkZywkaCk9QF87CitteSAoJHQwLCR0MSwkdDIsJFQxLCRLLCRDaCwkTWFqKT1tYXAoImQkXyIsKDI0Li4zMSkpOwkjIHRlbXBzCisKKyRjb2RlLj08PF9fXyBpZiAoJGk8MTYgfHwgJGkmMSk7CisJdnNoci51NjQJJHQwLCRlLCNAU2lnbWExWzBdCUAgJGkKKyNpZiAkaTwxNgorCXZsZDEuNjQJCXtAWFskaSUxNl19LFskaW5wXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJJHQxLCRlLCNAU2lnbWExWzFdCisJdnNoci51NjQJJHQyLCRlLCNAU2lnbWExWzJdCitfX18KKyRjb2RlLj08PF9fXzsKKwl2bGQxLjY0CQl7JEt9LFskS3RibCw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCSR0MCwkZSwjYDY0LUBTaWdtYTFbMF1gCisJdnNsaS42NAkJJHQxLCRlLCNgNjQtQFNpZ21hMVsxXWAKKwl2c2xpLjY0CQkkdDIsJGUsI2A2NC1AU2lnbWExWzJdYAorI2lmICRpPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CUBYWyRpXSxAWFskaV0KKyNlbmRpZgorCXZhZGQuaTY0CSRUMSwkSywkaAorCXZlb3IJCSRDaCwkZiwkZworCXZlb3IJCSR0MCwkdDEKKwl2YW5kCQkkQ2gsJGUKKwl2ZW9yCQkkdDAsJHQyCQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQkkQ2gsJGcJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CSRUMSwkdDAKKwl2c2hyLnU2NAkkdDAsJGEsI0BTaWdtYTBbMF0KKwl2YWRkLmk2NAkkVDEsJENoCisJdnNoci51NjQJJHQxLCRhLCNAU2lnbWEwWzFdCisJdnNoci51NjQJJHQyLCRhLCNAU2lnbWEwWzJdCisJdnNsaS42NAkJJHQwLCRhLCNgNjQtQFNpZ21hMFswXWAKKwl2c2xpLjY0CQkkdDEsJGEsI2A2NC1AU2lnbWEwWzFdYAorCXZzbGkuNjQJCSR0MiwkYSwjYDY0LUBTaWdtYTBbMl1gCisJdmFkZC5pNjQJJFQxLEBYWyRpJTE2XQorCXZvcnIJCSRNYWosJGEsJGMKKwl2YW5kCQkkQ2gsJGEsJGMKKwl2ZW9yCQkkaCwkdDAsJHQxCisJdmFuZAkJJE1haiwkYgorCXZlb3IJCSRoLCR0MgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJJE1haiwkQ2gJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CSRoLCRUMQorCXZhZGQuaTY0CSRkLCRUMQorCXZhZGQuaTY0CSRoLCRNYWoKK19fXworfQorCitzdWIgTkVPTl8xNl83OSgpIHsKK215ICRpPXNoaWZ0OworCitpZiAoJGkmMSkJeyAmTkVPTl8wMF8xNSgkaSxAXyk7IHJldHVybjsgfQorCisjIDJ4LXZlY3Rvcml6ZWQsIHRoZXJlZm9yZSBydW5zIGV2ZXJ5IDJuZCByb3VuZAorbXkgQFg9bWFwKCJxJF8iLCgwLi43KSk7CQkJIyB2aWV3IEBYIGFzIDEyOC1iaXQgdmVjdG9yCitteSAoJHQwLCR0MSwkczAsJHMxKSA9IG1hcCgicSRfIiwoMTIuLjE1KSk7CSMgdGVtcHMKK215ICgkZDAsJGQxLCRkMikgPSBtYXAoImQkXyIsKDI0Li4yNikpOwkJIyB0ZW1wcyBmcm9tIE5FT05fMDBfMTUKK215ICRlPUBfWzRdOwkJCQkJIyAkZSBmcm9tIE5FT05fMDBfMTUKKyRpIC89IDI7CiskY29kZS49PDxfX187CisJdnNoci51NjQJJHQwLEBYWygkaSs3KSU4XSwjQHNpZ21hMVswXQorCXZzaHIudTY0CSR0MSxAWFsoJGkrNyklOF0sI0BzaWdtYTFbMV0KKwl2c2hyLnU2NAkkczEsQFhbKCRpKzcpJThdLCNAc2lnbWExWzJdCisJdnNsaS42NAkJJHQwLEBYWygkaSs3KSU4XSwjYDY0LUBzaWdtYTFbMF1gCisJdmV4dC44CQkkczAsQFhbJGklOF0sQFhbKCRpKzEpJThdLCM4CUAgWFtpKzFdCisJdnNsaS42NAkJJHQxLEBYWygkaSs3KSU4XSwjYDY0LUBzaWdtYTFbMV1gCisJdmVvcgkJJHMxLCR0MAorCXZzaHIudTY0CSR0MCwkczAsI0BzaWdtYTBbMF0KKwl2ZW9yCQkkczEsJHQxCQkJCUAgc2lnbWExKFhbaSsxNF0pCisJdnNoci51NjQJJHQxLCRzMCwjQHNpZ21hMFsxXQorCXZhZGQuaTY0CUBYWyRpJThdLCRzMQorCXZzaHIudTY0CSRzMSwkczAsI0BzaWdtYTBbMl0KKwl2c2xpLjY0CQkkdDAsJHMwLCNgNjQtQHNpZ21hMFswXWAKKwl2c2xpLjY0CQkkdDEsJHMwLCNgNjQtQHNpZ21hMFsxXWAKKwl2ZXh0LjgJCSRzMCxAWFsoJGkrNCklOF0sQFhbKCRpKzUpJThdLCM4CUAgWFtpKzldCisJdmVvcgkJJHMxLCR0MAorCXZzaHIudTY0CSRkMCwkZSwjQFNpZ21hMVswXQkJQCBmcm9tIE5FT05fMDBfMTUKKwl2YWRkLmk2NAlAWFskaSU4XSwkczAKKwl2c2hyLnU2NAkkZDEsJGUsI0BTaWdtYTFbMV0JCUAgZnJvbSBORU9OXzAwXzE1CisJdmVvcgkJJHMxLCR0MQkJCQlAIHNpZ21hMChYW2krMV0pCisJdnNoci51NjQJJGQyLCRlLCNAU2lnbWExWzJdCQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CUBYWyRpJThdLCRzMQorX19fCisJJk5FT05fMDBfMTUoMiokaSxAXyk7Cit9CisKKyRjb2RlLj08PF9fXzsKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5mcHUJbmVvbgorCisuYWxpZ24JNAorLkxORU9OOgorCWRtYgkJCQlAIGVycmF0YSAjNDUxMDM0IG9uIGVhcmx5IENvcnRleCBBOAorCXZzdG1kYglzcCEse2Q4LWQxNX0JCUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworCXN1YgkkS3RibCxyMywjNjcyCQlAIEs1MTIKKwl2bGRtaWEJJGN0eCx7JEEtJEh9CQlAIGxvYWQgY29udGV4dAorLkxvb3BfbmVvbjoKK19fXworZm9yKCRpPTA7JGk8MTY7JGkrKykJeyAmTkVPTl8wMF8xNSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwltb3YJCSRjbnQsIzQKKy5MMTZfNzlfbmVvbjoKKwlzdWJzCQkkY250LCMxCitfX18KK2Zvcig7JGk8MzI7JGkrKykJeyAmTkVPTl8xNl83OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKyRjb2RlLj08PF9fXzsKKwlibmUJCS5MMTZfNzlfbmVvbgorCisJdmxkbWlhCQkkY3R4LHtkMjQtZDMxfQlAIGxvYWQgY29udGV4dCB0byB0ZW1wCisJdmFkZC5pNjQJcTgscTEyCQlAIHZlY3Rvcml6ZWQgYWNjdW11bGF0ZQorCXZhZGQuaTY0CXE5LHExMworCXZhZGQuaTY0CXExMCxxMTQKKwl2YWRkLmk2NAlxMTEscTE1CisJdnN0bWlhCQkkY3R4LHskQS0kSH0JQCBzYXZlIGNvbnRleHQKKwl0ZXEJCSRpbnAsJGxlbgorCXN1YgkJJEt0YmwsIzY0MAlAIHJld2luZCBLNTEyCisJYm5lCQkuTG9vcF9uZW9uCisKKwl2bGRtaWEJc3AhLHtkOC1kMTV9CQlAIGVwaWxvZ3VlCisJYngJbHIKKyNlbmRpZgorX19fCit9CiskY29kZS49PDxfX187Cisuc2l6ZQlzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciwuLXNoYTUxMl9ibG9ja19kYXRhX29yZGVyCisuYXNjaXoJIlNIQTUxMiBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0L05FT04sIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCiAuYWxpZ24JMgorLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKIF9fXwogCiAkY29kZSA9fiBzL1xgKFteXGBdKilcYC9ldmFsICQxL2dlbTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1hcm12NC5zIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKaW5kZXggYjAzMGMxNi4uNTczMDE5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLWFybXY0LnMKQEAgLTEsOTAgKzEsMTExIEBACisjaW5jbHVkZSAiYXJtX2FyY2guaCIKKyNpZmRlZiBfX0FSTUVMX18KKyMgZGVmaW5lIExPIDAKKyMgZGVmaW5lIEhJIDQKKyMgZGVmaW5lIFdPUkQ2NChoaTAsbG8wLGhpMSxsbzEpCS53b3JkCWxvMCxoaTAsIGxvMSxoaTEKKyNlbHNlCisjIGRlZmluZSBISSAwCisjIGRlZmluZSBMTyA0CisjIGRlZmluZSBXT1JENjQoaGkwLGxvMCxoaTEsbG8xKQkud29yZAloaTAsbG8wLCBoaTEsbG8xCisjZW5kaWYKKwogLnRleHQKIC5jb2RlCTMyCiAudHlwZQlLNTEyLCVvYmplY3QKIC5hbGlnbgk1CiBLNTEyOgotLndvcmQJMHg0MjhhMmY5OCwweGQ3MjhhZTIyLCAweDcxMzc0NDkxLDB4MjNlZjY1Y2QKLS53b3JkCTB4YjVjMGZiY2YsMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwweDgxODlkYmJjCi0ud29yZAkweDM5NTZjMjViLDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsMHhiNjA1ZDAxOQotLndvcmQJMHg5MjNmODJhNCwweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LDB4ZGE2ZDgxMTgKLS53b3JkCTB4ZDgwN2FhOTgsMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwweDQ1NzA2ZmJlCi0ud29yZAkweDI0MzE4NWJlLDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsMHhkNWZmYjRlMgotLndvcmQJMHg3MmJlNWQ3NCwweGYyN2I4OTZmLCAweDgwZGViMWZlLDB4M2IxNjk2YjEKLS53b3JkCTB4OWJkYzA2YTcsMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwweGNmNjkyNjk0Ci0ud29yZAkweGU0OWI2OWMxLDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsMHgzODRmMjVlMwotLndvcmQJMHgwZmMxOWRjNiwweDhiOGNkNWI1LCAweDI0MGNhMWNjLDB4NzdhYzljNjUKLS53b3JkCTB4MmRlOTJjNmYsMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwweDZlYTZlNDgzCi0ud29yZAkweDVjYjBhOWRjLDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsMHg4MzExNTNiNQotLndvcmQJMHg5ODNlNTE1MiwweGVlNjZkZmFiLCAweGE4MzFjNjZkLDB4MmRiNDMyMTAKLS53b3JkCTB4YjAwMzI3YzgsMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywweGJlZWYwZWU0Ci0ud29yZAkweGM2ZTAwYmYzLDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsMHg5MzBhYTcyNQotLndvcmQJMHgwNmNhNjM1MSwweGUwMDM4MjZmLCAweDE0MjkyOTY3LDB4MGEwZTZlNzAKLS53b3JkCTB4MjdiNzBhODUsMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwweDVjMjZjOTI2Ci0ud29yZAkweDRkMmM2ZGZjLDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsMHg5ZDk1YjNkZgotLndvcmQJMHg2NTBhNzM1NCwweDhiYWY2M2RlLCAweDc2NmEwYWJiLDB4M2M3N2IyYTgKLS53b3JkCTB4ODFjMmM5MmUsMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwweDE0ODIzNTNiCi0ud29yZAkweGEyYmZlOGExLDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsMHhiYzQyMzAwMQotLndvcmQJMHhjMjRiOGI3MCwweGQwZjg5NzkxLCAweGM3NmM1MWEzLDB4MDY1NGJlMzAKLS53b3JkCTB4ZDE5MmU4MTksMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwweDU1NjVhOTEwCi0ud29yZAkweGY0MGUzNTg1LDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsMHgzMmJiZDFiOAotLndvcmQJMHgxOWE0YzExNiwweGI4ZDJkMGM4LCAweDFlMzc2YzA4LDB4NTE0MWFiNTMKLS53b3JkCTB4Mjc0ODc3NGMsMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwweGUxOWI0OGE4Ci0ud29yZAkweDM5MWMwY2IzLDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsMHhlMzQxOGFjYgotLndvcmQJMHg1YjljY2E0ZiwweDc3NjNlMzczLCAweDY4MmU2ZmYzLDB4ZDZiMmI4YTMKLS53b3JkCTB4NzQ4ZjgyZWUsMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwweDQzMTcyZjYwCi0ud29yZAkweDg0Yzg3ODE0LDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsMHgxYTY0MzllYwotLndvcmQJMHg5MGJlZmZmYSwweDIzNjMxZTI4LCAweGE0NTA2Y2ViLDB4ZGU4MmJkZTkKLS53b3JkCTB4YmVmOWEzZjcsMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwweGUzNzI1MzJiCi0ud29yZAkweGNhMjczZWNlLDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsMHgyMWMwYzIwNwotLndvcmQJMHhlYWRhN2RkNiwweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLDB4ZWU2ZWQxNzgKLS53b3JkCTB4MDZmMDY3YWEsMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwweGEyYzg5OGE2Ci0ud29yZAkweDExM2Y5ODA0LDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsMHgxMzFjNDcxYgotLndvcmQJMHgyOGRiNzdmNSwweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLDB4NDBjNzI0OTMKLS53b3JkCTB4M2M5ZWJlMGEsMHgxNWM5YmViYywgMHg0MzFkNjdjNCwweDljMTAwZDRjCi0ud29yZAkweDRjYzVkNGJlLDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsMHhmYzY1N2UyYQotLndvcmQJMHg1ZmNiNmZhYiwweDNhZDZmYWVjLCAweDZjNDQxOThjLDB4NGE0NzU4MTcKK1dPUkQ2NCgweDQyOGEyZjk4LDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsMHgyM2VmNjVjZCkKK1dPUkQ2NCgweGI1YzBmYmNmLDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsMHg4MTg5ZGJiYykKK1dPUkQ2NCgweDM5NTZjMjViLDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsMHhiNjA1ZDAxOSkKK1dPUkQ2NCgweDkyM2Y4MmE0LDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsMHhkYTZkODExOCkKK1dPUkQ2NCgweGQ4MDdhYTk4LDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsMHg0NTcwNmZiZSkKK1dPUkQ2NCgweDI0MzE4NWJlLDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsMHhkNWZmYjRlMikKK1dPUkQ2NCgweDcyYmU1ZDc0LDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsMHgzYjE2OTZiMSkKK1dPUkQ2NCgweDliZGMwNmE3LDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsMHhjZjY5MjY5NCkKK1dPUkQ2NCgweGU0OWI2OWMxLDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsMHgzODRmMjVlMykKK1dPUkQ2NCgweDBmYzE5ZGM2LDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsMHg3N2FjOWM2NSkKK1dPUkQ2NCgweDJkZTkyYzZmLDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsMHg2ZWE2ZTQ4MykKK1dPUkQ2NCgweDVjYjBhOWRjLDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsMHg4MzExNTNiNSkKK1dPUkQ2NCgweDk4M2U1MTUyLDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsMHgyZGI0MzIxMCkKK1dPUkQ2NCgweGIwMDMyN2M4LDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsMHhiZWVmMGVlNCkKK1dPUkQ2NCgweGM2ZTAwYmYzLDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsMHg5MzBhYTcyNSkKK1dPUkQ2NCgweDA2Y2E2MzUxLDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsMHgwYTBlNmU3MCkKK1dPUkQ2NCgweDI3YjcwYTg1LDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsMHg1YzI2YzkyNikKK1dPUkQ2NCgweDRkMmM2ZGZjLDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsMHg5ZDk1YjNkZikKK1dPUkQ2NCgweDY1MGE3MzU0LDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsMHgzYzc3YjJhOCkKK1dPUkQ2NCgweDgxYzJjOTJlLDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsMHgxNDgyMzUzYikKK1dPUkQ2NCgweGEyYmZlOGExLDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsMHhiYzQyMzAwMSkKK1dPUkQ2NCgweGMyNGI4YjcwLDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsMHgwNjU0YmUzMCkKK1dPUkQ2NCgweGQxOTJlODE5LDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsMHg1NTY1YTkxMCkKK1dPUkQ2NCgweGY0MGUzNTg1LDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsMHgzMmJiZDFiOCkKK1dPUkQ2NCgweDE5YTRjMTE2LDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsMHg1MTQxYWI1MykKK1dPUkQ2NCgweDI3NDg3NzRjLDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsMHhlMTliNDhhOCkKK1dPUkQ2NCgweDM5MWMwY2IzLDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsMHhlMzQxOGFjYikKK1dPUkQ2NCgweDViOWNjYTRmLDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsMHhkNmIyYjhhMykKK1dPUkQ2NCgweDc0OGY4MmVlLDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsMHg0MzE3MmY2MCkKK1dPUkQ2NCgweDg0Yzg3ODE0LDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsMHgxYTY0MzllYykKK1dPUkQ2NCgweDkwYmVmZmZhLDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsMHhkZTgyYmRlOSkKK1dPUkQ2NCgweGJlZjlhM2Y3LDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsMHhlMzcyNTMyYikKK1dPUkQ2NCgweGNhMjczZWNlLDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsMHgyMWMwYzIwNykKK1dPUkQ2NCgweGVhZGE3ZGQ2LDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsMHhlZTZlZDE3OCkKK1dPUkQ2NCgweDA2ZjA2N2FhLDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsMHhhMmM4OThhNikKK1dPUkQ2NCgweDExM2Y5ODA0LDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsMHgxMzFjNDcxYikKK1dPUkQ2NCgweDI4ZGI3N2Y1LDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsMHg0MGM3MjQ5MykKK1dPUkQ2NCgweDNjOWViZTBhLDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsMHg5YzEwMGQ0YykKK1dPUkQ2NCgweDRjYzVkNGJlLDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsMHhmYzY1N2UyYSkKK1dPUkQ2NCgweDVmY2I2ZmFiLDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsMHg0YTQ3NTgxNykKIC5zaXplCUs1MTIsLi1LNTEyCisuTE9QRU5TU0xfYXJtY2FwOgorLndvcmQJT1BFTlNTTF9hcm1jYXBfUC1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgorLnNraXAJMzItNAogCiAuZ2xvYmFsCXNoYTUxMl9ibG9ja19kYXRhX29yZGVyCiAudHlwZQlzaGE1MTJfYmxvY2tfZGF0YV9vcmRlciwlZnVuY3Rpb24KIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyOgogCXN1YglyMyxwYywjOAkJQCBzaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgogCWFkZAlyMixyMSxyMixsc2wjNwlAIGxlbiB0byBwb2ludCBhdCB0aGUgZW5kIG9mIGlucAorI2lmIF9fQVJNX0FSQ0hfXz49NworCWxkcglyMTIsLkxPUEVOU1NMX2FybWNhcAorCWxkcglyMTIsW3IzLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorCXRzdAlyMTIsIzEKKwlibmUJLkxORU9OCisjZW5kaWYKIAlzdG1kYglzcCEse3I0LXIxMixscn0KLQlzdWIJcjE0LHIzLCM2NDAJCUAgSzUxMgorCXN1YglyMTQscjMsIzY3MgkJQCBLNTEyCiAJc3ViCXNwLHNwLCM5KjgKIAotCWxkcglyNyxbcjAsIzMyKzRdCi0JbGRyCXI4LFtyMCwjMzIrMF0KLQlsZHIJcjksIFtyMCwjNDgrNF0KLQlsZHIJcjEwLCBbcjAsIzQ4KzBdCi0JbGRyCXIxMSwgW3IwLCM1Nis0XQotCWxkcglyMTIsIFtyMCwjNTYrMF0KKwlsZHIJcjcsW3IwLCMzMitMT10KKwlsZHIJcjgsW3IwLCMzMitISV0KKwlsZHIJcjksIFtyMCwjNDgrTE9dCisJbGRyCXIxMCwgW3IwLCM0OCtISV0KKwlsZHIJcjExLCBbcjAsIzU2K0xPXQorCWxkcglyMTIsIFtyMCwjNTYrSEldCiAuTG9vcDoKIAlzdHIJcjksIFtzcCwjNDgrMF0KIAlzdHIJcjEwLCBbc3AsIzQ4KzRdCiAJc3RyCXIxMSwgW3NwLCM1NiswXQogCXN0cglyMTIsIFtzcCwjNTYrNF0KLQlsZHIJcjUsW3IwLCMwKzRdCi0JbGRyCXI2LFtyMCwjMCswXQotCWxkcglyMyxbcjAsIzgrNF0KLQlsZHIJcjQsW3IwLCM4KzBdCi0JbGRyCXI5LCBbcjAsIzE2KzRdCi0JbGRyCXIxMCwgW3IwLCMxNiswXQotCWxkcglyMTEsIFtyMCwjMjQrNF0KLQlsZHIJcjEyLCBbcjAsIzI0KzBdCisJbGRyCXI1LFtyMCwjMCtMT10KKwlsZHIJcjYsW3IwLCMwK0hJXQorCWxkcglyMyxbcjAsIzgrTE9dCisJbGRyCXI0LFtyMCwjOCtISV0KKwlsZHIJcjksIFtyMCwjMTYrTE9dCisJbGRyCXIxMCwgW3IwLCMxNitISV0KKwlsZHIJcjExLCBbcjAsIzI0K0xPXQorCWxkcglyMTIsIFtyMCwjMjQrSEldCiAJc3RyCXIzLFtzcCwjOCswXQogCXN0cglyNCxbc3AsIzgrNF0KIAlzdHIJcjksIFtzcCwjMTYrMF0KIAlzdHIJcjEwLCBbc3AsIzE2KzRdCiAJc3RyCXIxMSwgW3NwLCMyNCswXQogCXN0cglyMTIsIFtzcCwjMjQrNF0KLQlsZHIJcjMsW3IwLCM0MCs0XQotCWxkcglyNCxbcjAsIzQwKzBdCisJbGRyCXIzLFtyMCwjNDArTE9dCisJbGRyCXI0LFtyMCwjNDArSEldCiAJc3RyCXIzLFtzcCwjNDArMF0KIAlzdHIJcjQsW3NwLCM0MCs0XQogCiAuTDAwXzE1OgorI2lmIF9fQVJNX0FSQ0hfXzw3CiAJbGRyYglyMyxbcjEsIzddCiAJbGRyYglyOSwgW3IxLCM2XQogCWxkcmIJcjEwLCBbcjEsIzVdCkBAIC05OSwxNyArMTIwLDI1IEBACiAJb3JyCXI0LHI0LHIxMixsc2wjOAogCW9ycglyNCxyNCxyOSxsc2wjMTYKIAlvcnIJcjQscjQscjEwLGxzbCMyNAotCXN0cglyMyxbc3AsIzY0KzBdCi0Jc3RyCXI0LFtzcCwjNjQrNF0KLQlsZHIJcjExLFtzcCwjNTYrMF0JQCBoLmxvCi0JbGRyCXIxMixbc3AsIzU2KzRdCUAgaC5oaQorI2Vsc2UKKwlsZHIJcjMsW3IxLCM0XQorCWxkcglyNCxbcjFdLCM4CisjaWZkZWYgX19BUk1FTF9fCisJcmV2CXIzLHIzCisJcmV2CXI0LHI0CisjZW5kaWYKKyNlbmRpZgogCUAgU2lnbWExKHgpCShST1RSKCh4KSwxNCkgXiBST1RSKCh4KSwxOCkgIF4gUk9UUigoeCksNDEpKQogCUAgTE8JCWxvPj4xNF5oaTw8MTggXiBsbz4+MTheaGk8PDE0IF4gaGk+PjlebG88PDIzCiAJQCBISQkJaGk+PjE0XmxvPDwxOCBeIGhpPj4xOF5sbzw8MTQgXiBsbz4+OV5oaTw8MjMKIAltb3YJcjkscjcsbHNyIzE0CisJc3RyCXIzLFtzcCwjNjQrMF0KIAltb3YJcjEwLHI4LGxzciMxNAorCXN0cglyNCxbc3AsIzY0KzRdCiAJZW9yCXI5LHI5LHI4LGxzbCMxOAorCWxkcglyMTEsW3NwLCM1NiswXQlAIGgubG8KIAllb3IJcjEwLHIxMCxyNyxsc2wjMTgKKwlsZHIJcjEyLFtzcCwjNTYrNF0JQCBoLmhpCiAJZW9yCXI5LHI5LHI3LGxzciMxOAogCWVvcglyMTAscjEwLHI4LGxzciMxOAogCWVvcglyOSxyOSxyOCxsc2wjMTQKQEAgLTEzNiwyNSArMTY1LDI0IEBACiAJYW5kCXIxMCxyMTAscjgKIAlzdHIJcjYsW3NwLCMwKzRdCiAJZW9yCXI5LHI5LHIxMQotCWxkcglyMTEsW3IxNCwjNF0JCUAgS1tpXS5sbworCWxkcglyMTEsW3IxNCwjTE9dCUAgS1tpXS5sbwogCWVvcglyMTAscjEwLHIxMgkJQCBDaChlLGYsZykKLQlsZHIJcjEyLFtyMTQsIzBdCQlAIEtbaV0uaGkKKwlsZHIJcjEyLFtyMTQsI0hJXQlAIEtbaV0uaGkKIAogCWFkZHMJcjMscjMscjkKIAlsZHIJcjcsW3NwLCMyNCswXQlAIGQubG8KIAlhZGMJcjQscjQscjEwCQlAIFQgKz0gQ2goZSxmLGcpCiAJbGRyCXI4LFtzcCwjMjQrNF0JQCBkLmhpCiAJYWRkcwlyMyxyMyxyMTEKKwlhbmQJcjkscjExLCMweGZmCiAJYWRjCXI0LHI0LHIxMgkJQCBUICs9IEtbaV0KIAlhZGRzCXI3LHI3LHIzCi0JYWRjCXI4LHI4LHI0CQlAIGQgKz0gVAotCi0JYW5kCXI5LHIxMSwjMHhmZgotCXRlcQlyOSwjMTQ4Ci0Jb3JyZXEJcjE0LHIxNCwjMQotCiAJbGRyCXIxMSxbc3AsIzgrMF0JQCBiLmxvCisJYWRjCXI4LHI4LHI0CQlAIGQgKz0gVAorCXRlcQlyOSwjMTQ4CisKIAlsZHIJcjEyLFtzcCwjMTYrMF0JQCBjLmxvCisJb3JyZXEJcjE0LHIxNCwjMQogCUAgU2lnbWEwKHgpCShST1RSKCh4KSwyOCkgXiBST1RSKCh4KSwzNCkgXiBST1RSKCh4KSwzOSkpCiAJQCBMTwkJbG8+PjI4XmhpPDw0ICBeIGhpPj4yXmxvPDwzMCBeIGhpPj43XmxvPDwyNQogCUAgSEkJCWhpPj4yOF5sbzw8NCAgXiBsbz4+Ml5oaTw8MzAgXiBsbz4+N15oaTw8MjUKQEAgLTE3MSwzOCArMTk5LDM2IEBACiAJZW9yCXI5LHI5LHI1LGxzbCMyNQogCWVvcglyMTAscjEwLHI2LGxzbCMyNQlAIFNpZ21hMChhKQogCWFkZHMJcjMscjMscjkKKwlhbmQJcjkscjUscjExCiAJYWRjCXI0LHI0LHIxMAkJQCBUICs9IFNpZ21hMChhKQogCi0JYW5kCXI5LHI1LHIxMQotCW9ycglyNSxyNSxyMTEKIAlsZHIJcjEwLFtzcCwjOCs0XQlAIGIuaGkKKwlvcnIJcjUscjUscjExCiAJbGRyCXIxMSxbc3AsIzE2KzRdCUAgYy5oaQogCWFuZAlyNSxyNSxyMTIKLQlvcnIJcjUscjUscjkJCUAgTWFqKGEsYixjKS5sbwogCWFuZAlyMTIscjYscjEwCiAJb3JyCXI2LHI2LHIxMAorCW9ycglyNSxyNSxyOQkJQCBNYWooYSxiLGMpLmxvCiAJYW5kCXI2LHI2LHIxMQotCW9ycglyNixyNixyMTIJCUAgTWFqKGEsYixjKS5oaQogCWFkZHMJcjUscjUscjMKLQlhZGMJcjYscjYscjQJCUAgaCArPSBUCi0KKwlvcnIJcjYscjYscjEyCQlAIE1haihhLGIsYykuaGkKIAlzdWIJc3Asc3AsIzgKKwlhZGMJcjYscjYscjQJCUAgaCArPSBUCisJdHN0CXIxNCwjMQogCWFkZAlyMTQscjE0LCM4CiAJdHN0CXIxNCwjMQogCWJlcQkuTDAwXzE1Ci0JYmljCXIxNCxyMTQsIzEKLQotLkwxNl83OToKIAlsZHIJcjksW3NwLCMxODQrMF0KIAlsZHIJcjEwLFtzcCwjMTg0KzRdCi0JbGRyCXIxMSxbc3AsIzgwKzBdCi0JbGRyCXIxMixbc3AsIzgwKzRdCi0KKwliaWMJcjE0LHIxNCwjMQorLkwxNl83OToKIAlAIHNpZ21hMCh4KQkoUk9UUigoeCksMSkgIF4gUk9UUigoeCksOCkgIF4gKCh4KT4+NykpCiAJQCBMTwkJbG8+PjFeaGk8PDMxICBeIGxvPj44XmhpPDwyNCBeIGxvPj43XmhpPDwyNQogCUAgSEkJCWhpPj4xXmxvPDwzMSAgXiBoaT4+OF5sbzw8MjQgXiBoaT4+NwogCW1vdglyMyxyOSxsc3IjMQorCWxkcglyMTEsW3NwLCM4MCswXQogCW1vdglyNCxyMTAsbHNyIzEKKwlsZHIJcjEyLFtzcCwjODArNF0KIAllb3IJcjMscjMscjEwLGxzbCMzMQogCWVvcglyNCxyNCxyOSxsc2wjMzEKIAllb3IJcjMscjMscjksbHNyIzgKQEAgLTIyNiwzMCArMjUyLDMwIEBACiAJZW9yCXIxMCxyMTAscjEyLGxzbCMzCiAJZW9yCXI5LHI5LHIxMSxsc3IjNgogCWVvcglyMTAscjEwLHIxMixsc3IjNgorCWxkcglyMTEsW3NwLCMxMjArMF0KIAllb3IJcjkscjkscjEyLGxzbCMyNgogCi0JbGRyCXIxMSxbc3AsIzEyMCswXQogCWxkcglyMTIsW3NwLCMxMjArNF0KIAlhZGRzCXIzLHIzLHI5CisJbGRyCXI5LFtzcCwjMTkyKzBdCiAJYWRjCXI0LHI0LHIxMAogCi0JbGRyCXI5LFtzcCwjMTkyKzBdCiAJbGRyCXIxMCxbc3AsIzE5Mis0XQogCWFkZHMJcjMscjMscjExCiAJYWRjCXI0LHI0LHIxMgogCWFkZHMJcjMscjMscjkKIAlhZGMJcjQscjQscjEwCi0Jc3RyCXIzLFtzcCwjNjQrMF0KLQlzdHIJcjQsW3NwLCM2NCs0XQotCWxkcglyMTEsW3NwLCM1NiswXQlAIGgubG8KLQlsZHIJcjEyLFtzcCwjNTYrNF0JQCBoLmhpCiAJQCBTaWdtYTEoeCkJKFJPVFIoKHgpLDE0KSBeIFJPVFIoKHgpLDE4KSAgXiBST1RSKCh4KSw0MSkpCiAJQCBMTwkJbG8+PjE0XmhpPDwxOCBeIGxvPj4xOF5oaTw8MTQgXiBoaT4+OV5sbzw8MjMKIAlAIEhJCQloaT4+MTRebG88PDE4IF4gaGk+PjE4XmxvPDwxNCBeIGxvPj45XmhpPDwyMwogCW1vdglyOSxyNyxsc3IjMTQKKwlzdHIJcjMsW3NwLCM2NCswXQogCW1vdglyMTAscjgsbHNyIzE0CisJc3RyCXI0LFtzcCwjNjQrNF0KIAllb3IJcjkscjkscjgsbHNsIzE4CisJbGRyCXIxMSxbc3AsIzU2KzBdCUAgaC5sbwogCWVvcglyMTAscjEwLHI3LGxzbCMxOAorCWxkcglyMTIsW3NwLCM1Nis0XQlAIGguaGkKIAllb3IJcjkscjkscjcsbHNyIzE4CiAJZW9yCXIxMCxyMTAscjgsbHNyIzE4CiAJZW9yCXI5LHI5LHI4LGxzbCMxNApAQCAtMjc2LDI1ICszMDIsMjQgQEAKIAlhbmQJcjEwLHIxMCxyOAogCXN0cglyNixbc3AsIzArNF0KIAllb3IJcjkscjkscjExCi0JbGRyCXIxMSxbcjE0LCM0XQkJQCBLW2ldLmxvCisJbGRyCXIxMSxbcjE0LCNMT10JQCBLW2ldLmxvCiAJZW9yCXIxMCxyMTAscjEyCQlAIENoKGUsZixnKQotCWxkcglyMTIsW3IxNCwjMF0JCUAgS1tpXS5oaQorCWxkcglyMTIsW3IxNCwjSEldCUAgS1tpXS5oaQogCiAJYWRkcwlyMyxyMyxyOQogCWxkcglyNyxbc3AsIzI0KzBdCUAgZC5sbwogCWFkYwlyNCxyNCxyMTAJCUAgVCArPSBDaChlLGYsZykKIAlsZHIJcjgsW3NwLCMyNCs0XQlAIGQuaGkKIAlhZGRzCXIzLHIzLHIxMQorCWFuZAlyOSxyMTEsIzB4ZmYKIAlhZGMJcjQscjQscjEyCQlAIFQgKz0gS1tpXQogCWFkZHMJcjcscjcscjMKLQlhZGMJcjgscjgscjQJCUAgZCArPSBUCi0KLQlhbmQJcjkscjExLCMweGZmCi0JdGVxCXI5LCMyMwotCW9ycmVxCXIxNCxyMTQsIzEKLQogCWxkcglyMTEsW3NwLCM4KzBdCUAgYi5sbworCWFkYwlyOCxyOCxyNAkJQCBkICs9IFQKKwl0ZXEJcjksIzIzCisKIAlsZHIJcjEyLFtzcCwjMTYrMF0JQCBjLmxvCisJb3JyZXEJcjE0LHIxNCwjMQogCUAgU2lnbWEwKHgpCShST1RSKCh4KSwyOCkgXiBST1RSKCh4KSwzNCkgXiBST1RSKCh4KSwzOSkpCiAJQCBMTwkJbG8+PjI4XmhpPDw0ICBeIGhpPj4yXmxvPDwzMCBeIGhpPj43XmxvPDwyNQogCUAgSEkJCWhpPj4yOF5sbzw8NCAgXiBsbz4+Ml5oaTw8MzAgXiBsbz4+N15oaTw8MjUKQEAgLTMxMSw5MCArMzM2LDkxIEBACiAJZW9yCXI5LHI5LHI1LGxzbCMyNQogCWVvcglyMTAscjEwLHI2LGxzbCMyNQlAIFNpZ21hMChhKQogCWFkZHMJcjMscjMscjkKKwlhbmQJcjkscjUscjExCiAJYWRjCXI0LHI0LHIxMAkJQCBUICs9IFNpZ21hMChhKQogCi0JYW5kCXI5LHI1LHIxMQotCW9ycglyNSxyNSxyMTEKIAlsZHIJcjEwLFtzcCwjOCs0XQlAIGIuaGkKKwlvcnIJcjUscjUscjExCiAJbGRyCXIxMSxbc3AsIzE2KzRdCUAgYy5oaQogCWFuZAlyNSxyNSxyMTIKLQlvcnIJcjUscjUscjkJCUAgTWFqKGEsYixjKS5sbwogCWFuZAlyMTIscjYscjEwCiAJb3JyCXI2LHI2LHIxMAorCW9ycglyNSxyNSxyOQkJQCBNYWooYSxiLGMpLmxvCiAJYW5kCXI2LHI2LHIxMQotCW9ycglyNixyNixyMTIJCUAgTWFqKGEsYixjKS5oaQogCWFkZHMJcjUscjUscjMKLQlhZGMJcjYscjYscjQJCUAgaCArPSBUCi0KKwlvcnIJcjYscjYscjEyCQlAIE1haihhLGIsYykuaGkKIAlzdWIJc3Asc3AsIzgKLQlhZGQJcjE0LHIxNCwjOAorCWFkYwlyNixyNixyNAkJQCBoICs9IFQKIAl0c3QJcjE0LCMxCisJYWRkCXIxNCxyMTQsIzgKKwlsZHJlcQlyOSxbc3AsIzE4NCswXQorCWxkcmVxCXIxMCxbc3AsIzE4NCs0XQogCWJlcQkuTDE2Xzc5CiAJYmljCXIxNCxyMTQsIzEKIAogCWxkcglyMyxbc3AsIzgrMF0KIAlsZHIJcjQsW3NwLCM4KzRdCi0JbGRyCXI5LCBbcjAsIzArNF0KLQlsZHIJcjEwLCBbcjAsIzArMF0KLQlsZHIJcjExLCBbcjAsIzgrNF0KLQlsZHIJcjEyLCBbcjAsIzgrMF0KKwlsZHIJcjksIFtyMCwjMCtMT10KKwlsZHIJcjEwLCBbcjAsIzArSEldCisJbGRyCXIxMSwgW3IwLCM4K0xPXQorCWxkcglyMTIsIFtyMCwjOCtISV0KIAlhZGRzCXI5LHI1LHI5CisJc3RyCXI5LCBbcjAsIzArTE9dCiAJYWRjCXIxMCxyNixyMTAKKwlzdHIJcjEwLCBbcjAsIzArSEldCiAJYWRkcwlyMTEscjMscjExCisJc3RyCXIxMSwgW3IwLCM4K0xPXQogCWFkYwlyMTIscjQscjEyCi0Jc3RyCXI5LCBbcjAsIzArNF0KLQlzdHIJcjEwLCBbcjAsIzArMF0KLQlzdHIJcjExLCBbcjAsIzgrNF0KLQlzdHIJcjEyLCBbcjAsIzgrMF0KKwlzdHIJcjEyLCBbcjAsIzgrSEldCiAKIAlsZHIJcjUsW3NwLCMxNiswXQogCWxkcglyNixbc3AsIzE2KzRdCiAJbGRyCXIzLFtzcCwjMjQrMF0KIAlsZHIJcjQsW3NwLCMyNCs0XQotCWxkcglyOSwgW3IwLCMxNis0XQotCWxkcglyMTAsIFtyMCwjMTYrMF0KLQlsZHIJcjExLCBbcjAsIzI0KzRdCi0JbGRyCXIxMiwgW3IwLCMyNCswXQorCWxkcglyOSwgW3IwLCMxNitMT10KKwlsZHIJcjEwLCBbcjAsIzE2K0hJXQorCWxkcglyMTEsIFtyMCwjMjQrTE9dCisJbGRyCXIxMiwgW3IwLCMyNCtISV0KIAlhZGRzCXI5LHI1LHI5CisJc3RyCXI5LCBbcjAsIzE2K0xPXQogCWFkYwlyMTAscjYscjEwCisJc3RyCXIxMCwgW3IwLCMxNitISV0KIAlhZGRzCXIxMSxyMyxyMTEKKwlzdHIJcjExLCBbcjAsIzI0K0xPXQogCWFkYwlyMTIscjQscjEyCi0Jc3RyCXI5LCBbcjAsIzE2KzRdCi0Jc3RyCXIxMCwgW3IwLCMxNiswXQotCXN0cglyMTEsIFtyMCwjMjQrNF0KLQlzdHIJcjEyLCBbcjAsIzI0KzBdCisJc3RyCXIxMiwgW3IwLCMyNCtISV0KIAogCWxkcglyMyxbc3AsIzQwKzBdCiAJbGRyCXI0LFtzcCwjNDArNF0KLQlsZHIJcjksIFtyMCwjMzIrNF0KLQlsZHIJcjEwLCBbcjAsIzMyKzBdCi0JbGRyCXIxMSwgW3IwLCM0MCs0XQotCWxkcglyMTIsIFtyMCwjNDArMF0KKwlsZHIJcjksIFtyMCwjMzIrTE9dCisJbGRyCXIxMCwgW3IwLCMzMitISV0KKwlsZHIJcjExLCBbcjAsIzQwK0xPXQorCWxkcglyMTIsIFtyMCwjNDArSEldCiAJYWRkcwlyNyxyNyxyOQorCXN0cglyNyxbcjAsIzMyK0xPXQogCWFkYwlyOCxyOCxyMTAKKwlzdHIJcjgsW3IwLCMzMitISV0KIAlhZGRzCXIxMSxyMyxyMTEKKwlzdHIJcjExLCBbcjAsIzQwK0xPXQogCWFkYwlyMTIscjQscjEyCi0Jc3RyCXI3LFtyMCwjMzIrNF0KLQlzdHIJcjgsW3IwLCMzMiswXQotCXN0cglyMTEsIFtyMCwjNDArNF0KLQlzdHIJcjEyLCBbcjAsIzQwKzBdCisJc3RyCXIxMiwgW3IwLCM0MCtISV0KIAogCWxkcglyNSxbc3AsIzQ4KzBdCiAJbGRyCXI2LFtzcCwjNDgrNF0KIAlsZHIJcjMsW3NwLCM1NiswXQogCWxkcglyNCxbc3AsIzU2KzRdCi0JbGRyCXI5LCBbcjAsIzQ4KzRdCi0JbGRyCXIxMCwgW3IwLCM0OCswXQotCWxkcglyMTEsIFtyMCwjNTYrNF0KLQlsZHIJcjEyLCBbcjAsIzU2KzBdCisJbGRyCXI5LCBbcjAsIzQ4K0xPXQorCWxkcglyMTAsIFtyMCwjNDgrSEldCisJbGRyCXIxMSwgW3IwLCM1NitMT10KKwlsZHIJcjEyLCBbcjAsIzU2K0hJXQogCWFkZHMJcjkscjUscjkKKwlzdHIJcjksIFtyMCwjNDgrTE9dCiAJYWRjCXIxMCxyNixyMTAKKwlzdHIJcjEwLCBbcjAsIzQ4K0hJXQogCWFkZHMJcjExLHIzLHIxMQorCXN0cglyMTEsIFtyMCwjNTYrTE9dCiAJYWRjCXIxMixyNCxyMTIKLQlzdHIJcjksIFtyMCwjNDgrNF0KLQlzdHIJcjEwLCBbcjAsIzQ4KzBdCi0Jc3RyCXIxMSwgW3IwLCM1Nis0XQotCXN0cglyMTIsIFtyMCwjNTYrMF0KKwlzdHIJcjEyLCBbcjAsIzU2K0hJXQogCiAJYWRkCXNwLHNwLCM2NDAKIAlzdWIJcjE0LHIxNCwjNjQwCkBAIC00MDMsMTAgKzQyOSwxMzU1IEBACiAJYm5lCS5Mb29wCiAKIAlhZGQJc3Asc3AsIzgqOQkJQCBkZXN0cm95IGZyYW1lCisjaWYgX19BUk1fQVJDSF9fPj01CisJbGRtaWEJc3AhLHtyNC1yMTIscGN9CisjZWxzZQogCWxkbWlhCXNwISx7cjQtcjEyLGxyfQogCXRzdAlsciwjMQogCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKIAkud29yZAkweGUxMmZmZjFlCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCi0uc2l6ZSAgIHNoYTUxMl9ibG9ja19kYXRhX29yZGVyLC4tc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIKLS5hc2NpeiAgIlNIQTUxMiBibG9jayB0cmFuc2Zvcm0gZm9yIEFSTXY0LCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIX18+PTcKKy5mcHUJbmVvbgorCisuYWxpZ24JNAorLkxORU9OOgorCWRtYgkJCQlAIGVycmF0YSAjNDUxMDM0IG9uIGVhcmx5IENvcnRleCBBOAorCXZzdG1kYglzcCEse2Q4LWQxNX0JCUAgQUJJIHNwZWNpZmljYXRpb24gc2F5cyBzbworCXN1YglyMyxyMywjNjcyCQlAIEs1MTIKKwl2bGRtaWEJcjAse2QxNi1kMjN9CQlAIGxvYWQgY29udGV4dAorLkxvb3BfbmVvbjoKKwl2c2hyLnU2NAlkMjQsZDIwLCMxNAlAIDAKKyNpZiAwPDE2CisJdmxkMS42NAkJe2QwfSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDIwLCMxOAorCXZzaHIudTY0CWQyNixkMjAsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMCwjNTAKKwl2c2xpLjY0CQlkMjUsZDIwLCM0NgorCXZzbGkuNjQJCWQyNixkMjAsIzIzCisjaWYgMDwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkMCxkMAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjMKKwl2ZW9yCQlkMjksZDIxLGQyMgorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIwCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQyMgkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTYsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTYsIzM0CisJdnNoci51NjQJZDI2LGQxNiwjMzkKKwl2c2xpLjY0CQlkMjQsZDE2LCMzNgorCXZzbGkuNjQJCWQyNSxkMTYsIzMwCisJdnNsaS42NAkJZDI2LGQxNiwjMjUKKwl2YWRkLmk2NAlkMjcsZDAKKwl2b3JyCQlkMzAsZDE2LGQxOAorCXZhbmQJCWQyOSxkMTYsZDE4CisJdmVvcgkJZDIzLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE3CisJdmVvcgkJZDIzLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIzLGQyNworCXZhZGQuaTY0CWQxOSxkMjcKKwl2YWRkLmk2NAlkMjMsZDMwCisJdnNoci51NjQJZDI0LGQxOSwjMTQJQCAxCisjaWYgMTwxNgorCXZsZDEuNjQJCXtkMX0sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQxOSwjMTgKKwl2c2hyLnU2NAlkMjYsZDE5LCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTksIzUwCisJdnNsaS42NAkJZDI1LGQxOSwjNDYKKwl2c2xpLjY0CQlkMjYsZDE5LCMyMworI2lmIDE8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJZDEsZDEKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDIyCisJdmVvcgkJZDI5LGQyMCxkMjEKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxOQorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjEJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIzLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIzLCMzNAorCXZzaHIudTY0CWQyNixkMjMsIzM5CisJdnNsaS42NAkJZDI0LGQyMywjMzYKKwl2c2xpLjY0CQlkMjUsZDIzLCMzMAorCXZzbGkuNjQJCWQyNixkMjMsIzI1CisJdmFkZC5pNjQJZDI3LGQxCisJdm9ycgkJZDMwLGQyMyxkMTcKKwl2YW5kCQlkMjksZDIzLGQxNworCXZlb3IJCWQyMixkMjQsZDI1CisJdmFuZAkJZDMwLGQxNgorCXZlb3IJCWQyMixkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQyMixkMjcKKwl2YWRkLmk2NAlkMTgsZDI3CisJdmFkZC5pNjQJZDIyLGQzMAorCXZzaHIudTY0CWQyNCxkMTgsIzE0CUAgMgorI2lmIDI8MTYKKwl2bGQxLjY0CQl7ZDJ9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMTgsIzE4CisJdnNoci51NjQJZDI2LGQxOCwjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDE4LCM1MAorCXZzbGkuNjQJCWQyNSxkMTgsIzQ2CisJdnNsaS42NAkJZDI2LGQxOCwjMjMKKyNpZiAyPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CWQyLGQyCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQyMQorCXZlb3IJCWQyOSxkMTksZDIwCisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMTgKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDIwCQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQyMiwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQyMiwjMzQKKwl2c2hyLnU2NAlkMjYsZDIyLCMzOQorCXZzbGkuNjQJCWQyNCxkMjIsIzM2CisJdnNsaS42NAkJZDI1LGQyMiwjMzAKKwl2c2xpLjY0CQlkMjYsZDIyLCMyNQorCXZhZGQuaTY0CWQyNyxkMgorCXZvcnIJCWQzMCxkMjIsZDE2CisJdmFuZAkJZDI5LGQyMixkMTYKKwl2ZW9yCQlkMjEsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjMKKwl2ZW9yCQlkMjEsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMjEsZDI3CisJdmFkZC5pNjQJZDE3LGQyNworCXZhZGQuaTY0CWQyMSxkMzAKKwl2c2hyLnU2NAlkMjQsZDE3LCMxNAlAIDMKKyNpZiAzPDE2CisJdmxkMS42NAkJe2QzfSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDE3LCMxOAorCXZzaHIudTY0CWQyNixkMTcsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxNywjNTAKKwl2c2xpLjY0CQlkMjUsZDE3LCM0NgorCXZzbGkuNjQJCWQyNixkMTcsIzIzCisjaWYgMzwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkMyxkMworI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjAKKwl2ZW9yCQlkMjksZDE4LGQxOQorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE3CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxOQkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjEsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjEsIzM0CisJdnNoci51NjQJZDI2LGQyMSwjMzkKKwl2c2xpLjY0CQlkMjQsZDIxLCMzNgorCXZzbGkuNjQJCWQyNSxkMjEsIzMwCisJdnNsaS42NAkJZDI2LGQyMSwjMjUKKwl2YWRkLmk2NAlkMjcsZDMKKwl2b3JyCQlkMzAsZDIxLGQyMworCXZhbmQJCWQyOSxkMjEsZDIzCisJdmVvcgkJZDIwLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDIyCisJdmVvcgkJZDIwLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIwLGQyNworCXZhZGQuaTY0CWQxNixkMjcKKwl2YWRkLmk2NAlkMjAsZDMwCisJdnNoci51NjQJZDI0LGQxNiwjMTQJQCA0CisjaWYgNDwxNgorCXZsZDEuNjQJCXtkNH0sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQxNiwjMTgKKwl2c2hyLnU2NAlkMjYsZDE2LCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTYsIzUwCisJdnNsaS42NAkJZDI1LGQxNiwjNDYKKwl2c2xpLjY0CQlkMjYsZDE2LCMyMworI2lmIDQ8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJZDQsZDQKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE5CisJdmVvcgkJZDI5LGQxNyxkMTgKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxNgorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMTgJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIwLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIwLCMzNAorCXZzaHIudTY0CWQyNixkMjAsIzM5CisJdnNsaS42NAkJZDI0LGQyMCwjMzYKKwl2c2xpLjY0CQlkMjUsZDIwLCMzMAorCXZzbGkuNjQJCWQyNixkMjAsIzI1CisJdmFkZC5pNjQJZDI3LGQ0CisJdm9ycgkJZDMwLGQyMCxkMjIKKwl2YW5kCQlkMjksZDIwLGQyMgorCXZlb3IJCWQxOSxkMjQsZDI1CisJdmFuZAkJZDMwLGQyMQorCXZlb3IJCWQxOSxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxOSxkMjcKKwl2YWRkLmk2NAlkMjMsZDI3CisJdmFkZC5pNjQJZDE5LGQzMAorCXZzaHIudTY0CWQyNCxkMjMsIzE0CUAgNQorI2lmIDU8MTYKKwl2bGQxLjY0CQl7ZDV9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMjMsIzE4CisJdnNoci51NjQJZDI2LGQyMywjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDIzLCM1MAorCXZzbGkuNjQJCWQyNSxkMjMsIzQ2CisJdnNsaS42NAkJZDI2LGQyMywjMjMKKyNpZiA1PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CWQ1LGQ1CisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxOAorCXZlb3IJCWQyOSxkMTYsZDE3CisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMjMKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDE3CQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQxOSwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQxOSwjMzQKKwl2c2hyLnU2NAlkMjYsZDE5LCMzOQorCXZzbGkuNjQJCWQyNCxkMTksIzM2CisJdnNsaS42NAkJZDI1LGQxOSwjMzAKKwl2c2xpLjY0CQlkMjYsZDE5LCMyNQorCXZhZGQuaTY0CWQyNyxkNQorCXZvcnIJCWQzMCxkMTksZDIxCisJdmFuZAkJZDI5LGQxOSxkMjEKKwl2ZW9yCQlkMTgsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjAKKwl2ZW9yCQlkMTgsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMTgsZDI3CisJdmFkZC5pNjQJZDIyLGQyNworCXZhZGQuaTY0CWQxOCxkMzAKKwl2c2hyLnU2NAlkMjQsZDIyLCMxNAlAIDYKKyNpZiA2PDE2CisJdmxkMS42NAkJe2Q2fSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDIyLCMxOAorCXZzaHIudTY0CWQyNixkMjIsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMiwjNTAKKwl2c2xpLjY0CQlkMjUsZDIyLCM0NgorCXZzbGkuNjQJCWQyNixkMjIsIzIzCisjaWYgNjwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkNixkNgorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMTcKKwl2ZW9yCQlkMjksZDIzLGQxNgorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIyCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxNgkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTgsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTgsIzM0CisJdnNoci51NjQJZDI2LGQxOCwjMzkKKwl2c2xpLjY0CQlkMjQsZDE4LCMzNgorCXZzbGkuNjQJCWQyNSxkMTgsIzMwCisJdnNsaS42NAkJZDI2LGQxOCwjMjUKKwl2YWRkLmk2NAlkMjcsZDYKKwl2b3JyCQlkMzAsZDE4LGQyMAorCXZhbmQJCWQyOSxkMTgsZDIwCisJdmVvcgkJZDE3LGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE5CisJdmVvcgkJZDE3LGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDE3LGQyNworCXZhZGQuaTY0CWQyMSxkMjcKKwl2YWRkLmk2NAlkMTcsZDMwCisJdnNoci51NjQJZDI0LGQyMSwjMTQJQCA3CisjaWYgNzwxNgorCXZsZDEuNjQJCXtkN30sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQyMSwjMTgKKwl2c2hyLnU2NAlkMjYsZDIxLCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMjEsIzUwCisJdnNsaS42NAkJZDI1LGQyMSwjNDYKKwl2c2xpLjY0CQlkMjYsZDIxLCMyMworI2lmIDc8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJZDcsZDcKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE2CisJdmVvcgkJZDI5LGQyMixkMjMKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQyMQorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjMJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDE3LCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDE3LCMzNAorCXZzaHIudTY0CWQyNixkMTcsIzM5CisJdnNsaS42NAkJZDI0LGQxNywjMzYKKwl2c2xpLjY0CQlkMjUsZDE3LCMzMAorCXZzbGkuNjQJCWQyNixkMTcsIzI1CisJdmFkZC5pNjQJZDI3LGQ3CisJdm9ycgkJZDMwLGQxNyxkMTkKKwl2YW5kCQlkMjksZDE3LGQxOQorCXZlb3IJCWQxNixkMjQsZDI1CisJdmFuZAkJZDMwLGQxOAorCXZlb3IJCWQxNixkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxNixkMjcKKwl2YWRkLmk2NAlkMjAsZDI3CisJdmFkZC5pNjQJZDE2LGQzMAorCXZzaHIudTY0CWQyNCxkMjAsIzE0CUAgOAorI2lmIDg8MTYKKwl2bGQxLjY0CQl7ZDh9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMjAsIzE4CisJdnNoci51NjQJZDI2LGQyMCwjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDIwLCM1MAorCXZzbGkuNjQJCWQyNSxkMjAsIzQ2CisJdnNsaS42NAkJZDI2LGQyMCwjMjMKKyNpZiA4PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CWQ4LGQ4CisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQyMworCXZlb3IJCWQyOSxkMjEsZDIyCisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMjAKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDIyCQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQxNiwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQxNiwjMzQKKwl2c2hyLnU2NAlkMjYsZDE2LCMzOQorCXZzbGkuNjQJCWQyNCxkMTYsIzM2CisJdnNsaS42NAkJZDI1LGQxNiwjMzAKKwl2c2xpLjY0CQlkMjYsZDE2LCMyNQorCXZhZGQuaTY0CWQyNyxkOAorCXZvcnIJCWQzMCxkMTYsZDE4CisJdmFuZAkJZDI5LGQxNixkMTgKKwl2ZW9yCQlkMjMsZDI0LGQyNQorCXZhbmQJCWQzMCxkMTcKKwl2ZW9yCQlkMjMsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMjMsZDI3CisJdmFkZC5pNjQJZDE5LGQyNworCXZhZGQuaTY0CWQyMyxkMzAKKwl2c2hyLnU2NAlkMjQsZDE5LCMxNAlAIDkKKyNpZiA5PDE2CisJdmxkMS42NAkJe2Q5fSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDE5LCMxOAorCXZzaHIudTY0CWQyNixkMTksIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxOSwjNTAKKwl2c2xpLjY0CQlkMjUsZDE5LCM0NgorCXZzbGkuNjQJCWQyNixkMTksIzIzCisjaWYgOTwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkOSxkOQorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjIKKwl2ZW9yCQlkMjksZDIwLGQyMQorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE5CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQyMQkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjMsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjMsIzM0CisJdnNoci51NjQJZDI2LGQyMywjMzkKKwl2c2xpLjY0CQlkMjQsZDIzLCMzNgorCXZzbGkuNjQJCWQyNSxkMjMsIzMwCisJdnNsaS42NAkJZDI2LGQyMywjMjUKKwl2YWRkLmk2NAlkMjcsZDkKKwl2b3JyCQlkMzAsZDIzLGQxNworCXZhbmQJCWQyOSxkMjMsZDE3CisJdmVvcgkJZDIyLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE2CisJdmVvcgkJZDIyLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIyLGQyNworCXZhZGQuaTY0CWQxOCxkMjcKKwl2YWRkLmk2NAlkMjIsZDMwCisJdnNoci51NjQJZDI0LGQxOCwjMTQJQCAxMAorI2lmIDEwPDE2CisJdmxkMS42NAkJe2QxMH0sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQxOCwjMTgKKwl2c2hyLnU2NAlkMjYsZDE4LCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTgsIzUwCisJdnNsaS42NAkJZDI1LGQxOCwjNDYKKwl2c2xpLjY0CQlkMjYsZDE4LCMyMworI2lmIDEwPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CWQxMCxkMTAKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDIxCisJdmVvcgkJZDI5LGQxOSxkMjAKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxOAorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjAJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIyLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIyLCMzNAorCXZzaHIudTY0CWQyNixkMjIsIzM5CisJdnNsaS42NAkJZDI0LGQyMiwjMzYKKwl2c2xpLjY0CQlkMjUsZDIyLCMzMAorCXZzbGkuNjQJCWQyNixkMjIsIzI1CisJdmFkZC5pNjQJZDI3LGQxMAorCXZvcnIJCWQzMCxkMjIsZDE2CisJdmFuZAkJZDI5LGQyMixkMTYKKwl2ZW9yCQlkMjEsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjMKKwl2ZW9yCQlkMjEsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMjEsZDI3CisJdmFkZC5pNjQJZDE3LGQyNworCXZhZGQuaTY0CWQyMSxkMzAKKwl2c2hyLnU2NAlkMjQsZDE3LCMxNAlAIDExCisjaWYgMTE8MTYKKwl2bGQxLjY0CQl7ZDExfSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDE3LCMxOAorCXZzaHIudTY0CWQyNixkMTcsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxNywjNTAKKwl2c2xpLjY0CQlkMjUsZDE3LCM0NgorCXZzbGkuNjQJCWQyNixkMTcsIzIzCisjaWYgMTE8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJZDExLGQxMQorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjAKKwl2ZW9yCQlkMjksZDE4LGQxOQorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE3CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxOQkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjEsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjEsIzM0CisJdnNoci51NjQJZDI2LGQyMSwjMzkKKwl2c2xpLjY0CQlkMjQsZDIxLCMzNgorCXZzbGkuNjQJCWQyNSxkMjEsIzMwCisJdnNsaS42NAkJZDI2LGQyMSwjMjUKKwl2YWRkLmk2NAlkMjcsZDExCisJdm9ycgkJZDMwLGQyMSxkMjMKKwl2YW5kCQlkMjksZDIxLGQyMworCXZlb3IJCWQyMCxkMjQsZDI1CisJdmFuZAkJZDMwLGQyMgorCXZlb3IJCWQyMCxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQyMCxkMjcKKwl2YWRkLmk2NAlkMTYsZDI3CisJdmFkZC5pNjQJZDIwLGQzMAorCXZzaHIudTY0CWQyNCxkMTYsIzE0CUAgMTIKKyNpZiAxMjwxNgorCXZsZDEuNjQJCXtkMTJ9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMTYsIzE4CisJdnNoci51NjQJZDI2LGQxNiwjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDE2LCM1MAorCXZzbGkuNjQJCWQyNSxkMTYsIzQ2CisJdnNsaS42NAkJZDI2LGQxNiwjMjMKKyNpZiAxMjwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkMTIsZDEyCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxOQorCXZlb3IJCWQyOSxkMTcsZDE4CisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMTYKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDE4CQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQyMCwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQyMCwjMzQKKwl2c2hyLnU2NAlkMjYsZDIwLCMzOQorCXZzbGkuNjQJCWQyNCxkMjAsIzM2CisJdnNsaS42NAkJZDI1LGQyMCwjMzAKKwl2c2xpLjY0CQlkMjYsZDIwLCMyNQorCXZhZGQuaTY0CWQyNyxkMTIKKwl2b3JyCQlkMzAsZDIwLGQyMgorCXZhbmQJCWQyOSxkMjAsZDIyCisJdmVvcgkJZDE5LGQyNCxkMjUKKwl2YW5kCQlkMzAsZDIxCisJdmVvcgkJZDE5LGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDE5LGQyNworCXZhZGQuaTY0CWQyMyxkMjcKKwl2YWRkLmk2NAlkMTksZDMwCisJdnNoci51NjQJZDI0LGQyMywjMTQJQCAxMworI2lmIDEzPDE2CisJdmxkMS42NAkJe2QxM30sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQyMywjMTgKKwl2c2hyLnU2NAlkMjYsZDIzLCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMjMsIzUwCisJdnNsaS42NAkJZDI1LGQyMywjNDYKKwl2c2xpLjY0CQlkMjYsZDIzLCMyMworI2lmIDEzPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CWQxMyxkMTMKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE4CisJdmVvcgkJZDI5LGQxNixkMTcKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQyMworCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMTcJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDE5LCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDE5LCMzNAorCXZzaHIudTY0CWQyNixkMTksIzM5CisJdnNsaS42NAkJZDI0LGQxOSwjMzYKKwl2c2xpLjY0CQlkMjUsZDE5LCMzMAorCXZzbGkuNjQJCWQyNixkMTksIzI1CisJdmFkZC5pNjQJZDI3LGQxMworCXZvcnIJCWQzMCxkMTksZDIxCisJdmFuZAkJZDI5LGQxOSxkMjEKKwl2ZW9yCQlkMTgsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjAKKwl2ZW9yCQlkMTgsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMTgsZDI3CisJdmFkZC5pNjQJZDIyLGQyNworCXZhZGQuaTY0CWQxOCxkMzAKKwl2c2hyLnU2NAlkMjQsZDIyLCMxNAlAIDE0CisjaWYgMTQ8MTYKKwl2bGQxLjY0CQl7ZDE0fSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDIyLCMxOAorCXZzaHIudTY0CWQyNixkMjIsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMiwjNTAKKwl2c2xpLjY0CQlkMjUsZDIyLCM0NgorCXZzbGkuNjQJCWQyNixkMjIsIzIzCisjaWYgMTQ8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJZDE0LGQxNAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMTcKKwl2ZW9yCQlkMjksZDIzLGQxNgorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIyCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxNgkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTgsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTgsIzM0CisJdnNoci51NjQJZDI2LGQxOCwjMzkKKwl2c2xpLjY0CQlkMjQsZDE4LCMzNgorCXZzbGkuNjQJCWQyNSxkMTgsIzMwCisJdnNsaS42NAkJZDI2LGQxOCwjMjUKKwl2YWRkLmk2NAlkMjcsZDE0CisJdm9ycgkJZDMwLGQxOCxkMjAKKwl2YW5kCQlkMjksZDE4LGQyMAorCXZlb3IJCWQxNyxkMjQsZDI1CisJdmFuZAkJZDMwLGQxOQorCXZlb3IJCWQxNyxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxNyxkMjcKKwl2YWRkLmk2NAlkMjEsZDI3CisJdmFkZC5pNjQJZDE3LGQzMAorCXZzaHIudTY0CWQyNCxkMjEsIzE0CUAgMTUKKyNpZiAxNTwxNgorCXZsZDEuNjQJCXtkMTV9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMjEsIzE4CisJdnNoci51NjQJZDI2LGQyMSwjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDIxLCM1MAorCXZzbGkuNjQJCWQyNSxkMjEsIzQ2CisJdnNsaS42NAkJZDI2LGQyMSwjMjMKKyNpZiAxNTwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAlkMTUsZDE1CisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxNgorCXZlb3IJCWQyOSxkMjIsZDIzCisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMjEKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDIzCQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQxNywjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQxNywjMzQKKwl2c2hyLnU2NAlkMjYsZDE3LCMzOQorCXZzbGkuNjQJCWQyNCxkMTcsIzM2CisJdnNsaS42NAkJZDI1LGQxNywjMzAKKwl2c2xpLjY0CQlkMjYsZDE3LCMyNQorCXZhZGQuaTY0CWQyNyxkMTUKKwl2b3JyCQlkMzAsZDE3LGQxOQorCXZhbmQJCWQyOSxkMTcsZDE5CisJdmVvcgkJZDE2LGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE4CisJdmVvcgkJZDE2LGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDE2LGQyNworCXZhZGQuaTY0CWQyMCxkMjcKKwl2YWRkLmk2NAlkMTYsZDMwCisJbW92CQlyMTIsIzQKKy5MMTZfNzlfbmVvbjoKKwlzdWJzCQlyMTIsIzEKKwl2c2hyLnU2NAlxMTIscTcsIzE5CisJdnNoci51NjQJcTEzLHE3LCM2MQorCXZzaHIudTY0CXExNSxxNywjNgorCXZzbGkuNjQJCXExMixxNywjNDUKKwl2ZXh0LjgJCXExNCxxMCxxMSwjOAlAIFhbaSsxXQorCXZzbGkuNjQJCXExMyxxNywjMworCXZlb3IJCXExNSxxMTIKKwl2c2hyLnU2NAlxMTIscTE0LCMxCisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMShYW2krMTRdKQorCXZzaHIudTY0CXExMyxxMTQsIzgKKwl2YWRkLmk2NAlxMCxxMTUKKwl2c2hyLnU2NAlxMTUscTE0LCM3CisJdnNsaS42NAkJcTEyLHExNCwjNjMKKwl2c2xpLjY0CQlxMTMscTE0LCM1NgorCXZleHQuOAkJcTE0LHE0LHE1LCM4CUAgWFtpKzldCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CWQyNCxkMjAsIzE0CQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXEwLHExNAorCXZzaHIudTY0CWQyNSxkMjAsIzE4CQlAIGZyb20gTkVPTl8wMF8xNQorCXZlb3IJCXExNSxxMTMJCQkJQCBzaWdtYTAoWFtpKzFdKQorCXZzaHIudTY0CWQyNixkMjAsIzQxCQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXEwLHExNQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMjAsIzUwCisJdnNsaS42NAkJZDI1LGQyMCwjNDYKKwl2c2xpLjY0CQlkMjYsZDIwLCMyMworI2lmIDE2PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDIzCisJdmVvcgkJZDI5LGQyMSxkMjIKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQyMAorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjIJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDE2LCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDE2LCMzNAorCXZzaHIudTY0CWQyNixkMTYsIzM5CisJdnNsaS42NAkJZDI0LGQxNiwjMzYKKwl2c2xpLjY0CQlkMjUsZDE2LCMzMAorCXZzbGkuNjQJCWQyNixkMTYsIzI1CisJdmFkZC5pNjQJZDI3LGQwCisJdm9ycgkJZDMwLGQxNixkMTgKKwl2YW5kCQlkMjksZDE2LGQxOAorCXZlb3IJCWQyMyxkMjQsZDI1CisJdmFuZAkJZDMwLGQxNworCXZlb3IJCWQyMyxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQyMyxkMjcKKwl2YWRkLmk2NAlkMTksZDI3CisJdmFkZC5pNjQJZDIzLGQzMAorCXZzaHIudTY0CWQyNCxkMTksIzE0CUAgMTcKKyNpZiAxNzwxNgorCXZsZDEuNjQJCXtkMX0sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQxOSwjMTgKKwl2c2hyLnU2NAlkMjYsZDE5LCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTksIzUwCisJdnNsaS42NAkJZDI1LGQxOSwjNDYKKwl2c2xpLjY0CQlkMjYsZDE5LCMyMworI2lmIDE3PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDIyCisJdmVvcgkJZDI5LGQyMCxkMjEKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxOQorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjEJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIzLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIzLCMzNAorCXZzaHIudTY0CWQyNixkMjMsIzM5CisJdnNsaS42NAkJZDI0LGQyMywjMzYKKwl2c2xpLjY0CQlkMjUsZDIzLCMzMAorCXZzbGkuNjQJCWQyNixkMjMsIzI1CisJdmFkZC5pNjQJZDI3LGQxCisJdm9ycgkJZDMwLGQyMyxkMTcKKwl2YW5kCQlkMjksZDIzLGQxNworCXZlb3IJCWQyMixkMjQsZDI1CisJdmFuZAkJZDMwLGQxNgorCXZlb3IJCWQyMixkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQyMixkMjcKKwl2YWRkLmk2NAlkMTgsZDI3CisJdmFkZC5pNjQJZDIyLGQzMAorCXZzaHIudTY0CXExMixxMCwjMTkKKwl2c2hyLnU2NAlxMTMscTAsIzYxCisJdnNoci51NjQJcTE1LHEwLCM2CisJdnNsaS42NAkJcTEyLHEwLCM0NQorCXZleHQuOAkJcTE0LHExLHEyLCM4CUAgWFtpKzFdCisJdnNsaS42NAkJcTEzLHEwLCMzCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CXExMixxMTQsIzEKKwl2ZW9yCQlxMTUscTEzCQkJCUAgc2lnbWExKFhbaSsxNF0pCisJdnNoci51NjQJcTEzLHExNCwjOAorCXZhZGQuaTY0CXExLHExNQorCXZzaHIudTY0CXExNSxxMTQsIzcKKwl2c2xpLjY0CQlxMTIscTE0LCM2MworCXZzbGkuNjQJCXExMyxxMTQsIzU2CisJdmV4dC44CQlxMTQscTUscTYsIzgJQCBYW2krOV0KKwl2ZW9yCQlxMTUscTEyCisJdnNoci51NjQJZDI0LGQxOCwjMTQJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTEscTE0CisJdnNoci51NjQJZDI1LGQxOCwjMTgJCUAgZnJvbSBORU9OXzAwXzE1CisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMChYW2krMV0pCisJdnNoci51NjQJZDI2LGQxOCwjNDEJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTEscTE1CisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxOCwjNTAKKwl2c2xpLjY0CQlkMjUsZDE4LCM0NgorCXZzbGkuNjQJCWQyNixkMTgsIzIzCisjaWYgMTg8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjEKKwl2ZW9yCQlkMjksZDE5LGQyMAorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE4CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQyMAkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjIsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjIsIzM0CisJdnNoci51NjQJZDI2LGQyMiwjMzkKKwl2c2xpLjY0CQlkMjQsZDIyLCMzNgorCXZzbGkuNjQJCWQyNSxkMjIsIzMwCisJdnNsaS42NAkJZDI2LGQyMiwjMjUKKwl2YWRkLmk2NAlkMjcsZDIKKwl2b3JyCQlkMzAsZDIyLGQxNgorCXZhbmQJCWQyOSxkMjIsZDE2CisJdmVvcgkJZDIxLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDIzCisJdmVvcgkJZDIxLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIxLGQyNworCXZhZGQuaTY0CWQxNyxkMjcKKwl2YWRkLmk2NAlkMjEsZDMwCisJdnNoci51NjQJZDI0LGQxNywjMTQJQCAxOQorI2lmIDE5PDE2CisJdmxkMS42NAkJe2QzfSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDE3LCMxOAorCXZzaHIudTY0CWQyNixkMTcsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxNywjNTAKKwl2c2xpLjY0CQlkMjUsZDE3LCM0NgorCXZzbGkuNjQJCWQyNixkMTcsIzIzCisjaWYgMTk8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjAKKwl2ZW9yCQlkMjksZDE4LGQxOQorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE3CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxOQkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjEsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjEsIzM0CisJdnNoci51NjQJZDI2LGQyMSwjMzkKKwl2c2xpLjY0CQlkMjQsZDIxLCMzNgorCXZzbGkuNjQJCWQyNSxkMjEsIzMwCisJdnNsaS42NAkJZDI2LGQyMSwjMjUKKwl2YWRkLmk2NAlkMjcsZDMKKwl2b3JyCQlkMzAsZDIxLGQyMworCXZhbmQJCWQyOSxkMjEsZDIzCisJdmVvcgkJZDIwLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDIyCisJdmVvcgkJZDIwLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIwLGQyNworCXZhZGQuaTY0CWQxNixkMjcKKwl2YWRkLmk2NAlkMjAsZDMwCisJdnNoci51NjQJcTEyLHExLCMxOQorCXZzaHIudTY0CXExMyxxMSwjNjEKKwl2c2hyLnU2NAlxMTUscTEsIzYKKwl2c2xpLjY0CQlxMTIscTEsIzQ1CisJdmV4dC44CQlxMTQscTIscTMsIzgJQCBYW2krMV0KKwl2c2xpLjY0CQlxMTMscTEsIzMKKwl2ZW9yCQlxMTUscTEyCisJdnNoci51NjQJcTEyLHExNCwjMQorCXZlb3IJCXExNSxxMTMJCQkJQCBzaWdtYTEoWFtpKzE0XSkKKwl2c2hyLnU2NAlxMTMscTE0LCM4CisJdmFkZC5pNjQJcTIscTE1CisJdnNoci51NjQJcTE1LHExNCwjNworCXZzbGkuNjQJCXExMixxMTQsIzYzCisJdnNsaS42NAkJcTEzLHExNCwjNTYKKwl2ZXh0LjgJCXExNCxxNixxNywjOAlAIFhbaSs5XQorCXZlb3IJCXExNSxxMTIKKwl2c2hyLnU2NAlkMjQsZDE2LCMxNAkJQCBmcm9tIE5FT05fMDBfMTUKKwl2YWRkLmk2NAlxMixxMTQKKwl2c2hyLnU2NAlkMjUsZDE2LCMxOAkJQCBmcm9tIE5FT05fMDBfMTUKKwl2ZW9yCQlxMTUscTEzCQkJCUAgc2lnbWEwKFhbaSsxXSkKKwl2c2hyLnU2NAlkMjYsZDE2LCM0MQkJQCBmcm9tIE5FT05fMDBfMTUKKwl2YWRkLmk2NAlxMixxMTUKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDE2LCM1MAorCXZzbGkuNjQJCWQyNSxkMTYsIzQ2CisJdnNsaS42NAkJZDI2LGQxNiwjMjMKKyNpZiAyMDwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAksCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxOQorCXZlb3IJCWQyOSxkMTcsZDE4CisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMTYKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDE4CQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQyMCwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQyMCwjMzQKKwl2c2hyLnU2NAlkMjYsZDIwLCMzOQorCXZzbGkuNjQJCWQyNCxkMjAsIzM2CisJdnNsaS42NAkJZDI1LGQyMCwjMzAKKwl2c2xpLjY0CQlkMjYsZDIwLCMyNQorCXZhZGQuaTY0CWQyNyxkNAorCXZvcnIJCWQzMCxkMjAsZDIyCisJdmFuZAkJZDI5LGQyMCxkMjIKKwl2ZW9yCQlkMTksZDI0LGQyNQorCXZhbmQJCWQzMCxkMjEKKwl2ZW9yCQlkMTksZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMTksZDI3CisJdmFkZC5pNjQJZDIzLGQyNworCXZhZGQuaTY0CWQxOSxkMzAKKwl2c2hyLnU2NAlkMjQsZDIzLCMxNAlAIDIxCisjaWYgMjE8MTYKKwl2bGQxLjY0CQl7ZDV9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMjMsIzE4CisJdnNoci51NjQJZDI2LGQyMywjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDIzLCM1MAorCXZzbGkuNjQJCWQyNSxkMjMsIzQ2CisJdnNsaS42NAkJZDI2LGQyMywjMjMKKyNpZiAyMTwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAksCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxOAorCXZlb3IJCWQyOSxkMTYsZDE3CisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMjMKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDE3CQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQxOSwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQxOSwjMzQKKwl2c2hyLnU2NAlkMjYsZDE5LCMzOQorCXZzbGkuNjQJCWQyNCxkMTksIzM2CisJdnNsaS42NAkJZDI1LGQxOSwjMzAKKwl2c2xpLjY0CQlkMjYsZDE5LCMyNQorCXZhZGQuaTY0CWQyNyxkNQorCXZvcnIJCWQzMCxkMTksZDIxCisJdmFuZAkJZDI5LGQxOSxkMjEKKwl2ZW9yCQlkMTgsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjAKKwl2ZW9yCQlkMTgsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMTgsZDI3CisJdmFkZC5pNjQJZDIyLGQyNworCXZhZGQuaTY0CWQxOCxkMzAKKwl2c2hyLnU2NAlxMTIscTIsIzE5CisJdnNoci51NjQJcTEzLHEyLCM2MQorCXZzaHIudTY0CXExNSxxMiwjNgorCXZzbGkuNjQJCXExMixxMiwjNDUKKwl2ZXh0LjgJCXExNCxxMyxxNCwjOAlAIFhbaSsxXQorCXZzbGkuNjQJCXExMyxxMiwjMworCXZlb3IJCXExNSxxMTIKKwl2c2hyLnU2NAlxMTIscTE0LCMxCisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMShYW2krMTRdKQorCXZzaHIudTY0CXExMyxxMTQsIzgKKwl2YWRkLmk2NAlxMyxxMTUKKwl2c2hyLnU2NAlxMTUscTE0LCM3CisJdnNsaS42NAkJcTEyLHExNCwjNjMKKwl2c2xpLjY0CQlxMTMscTE0LCM1NgorCXZleHQuOAkJcTE0LHE3LHEwLCM4CUAgWFtpKzldCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CWQyNCxkMjIsIzE0CQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXEzLHExNAorCXZzaHIudTY0CWQyNSxkMjIsIzE4CQlAIGZyb20gTkVPTl8wMF8xNQorCXZlb3IJCXExNSxxMTMJCQkJQCBzaWdtYTAoWFtpKzFdKQorCXZzaHIudTY0CWQyNixkMjIsIzQxCQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXEzLHExNQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMjIsIzUwCisJdnNsaS42NAkJZDI1LGQyMiwjNDYKKwl2c2xpLjY0CQlkMjYsZDIyLCMyMworI2lmIDIyPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE3CisJdmVvcgkJZDI5LGQyMyxkMTYKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQyMgorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMTYJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDE4LCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDE4LCMzNAorCXZzaHIudTY0CWQyNixkMTgsIzM5CisJdnNsaS42NAkJZDI0LGQxOCwjMzYKKwl2c2xpLjY0CQlkMjUsZDE4LCMzMAorCXZzbGkuNjQJCWQyNixkMTgsIzI1CisJdmFkZC5pNjQJZDI3LGQ2CisJdm9ycgkJZDMwLGQxOCxkMjAKKwl2YW5kCQlkMjksZDE4LGQyMAorCXZlb3IJCWQxNyxkMjQsZDI1CisJdmFuZAkJZDMwLGQxOQorCXZlb3IJCWQxNyxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxNyxkMjcKKwl2YWRkLmk2NAlkMjEsZDI3CisJdmFkZC5pNjQJZDE3LGQzMAorCXZzaHIudTY0CWQyNCxkMjEsIzE0CUAgMjMKKyNpZiAyMzwxNgorCXZsZDEuNjQJCXtkN30sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQyMSwjMTgKKwl2c2hyLnU2NAlkMjYsZDIxLCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMjEsIzUwCisJdnNsaS42NAkJZDI1LGQyMSwjNDYKKwl2c2xpLjY0CQlkMjYsZDIxLCMyMworI2lmIDIzPDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE2CisJdmVvcgkJZDI5LGQyMixkMjMKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQyMQorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMjMJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDE3LCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDE3LCMzNAorCXZzaHIudTY0CWQyNixkMTcsIzM5CisJdnNsaS42NAkJZDI0LGQxNywjMzYKKwl2c2xpLjY0CQlkMjUsZDE3LCMzMAorCXZzbGkuNjQJCWQyNixkMTcsIzI1CisJdmFkZC5pNjQJZDI3LGQ3CisJdm9ycgkJZDMwLGQxNyxkMTkKKwl2YW5kCQlkMjksZDE3LGQxOQorCXZlb3IJCWQxNixkMjQsZDI1CisJdmFuZAkJZDMwLGQxOAorCXZlb3IJCWQxNixkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxNixkMjcKKwl2YWRkLmk2NAlkMjAsZDI3CisJdmFkZC5pNjQJZDE2LGQzMAorCXZzaHIudTY0CXExMixxMywjMTkKKwl2c2hyLnU2NAlxMTMscTMsIzYxCisJdnNoci51NjQJcTE1LHEzLCM2CisJdnNsaS42NAkJcTEyLHEzLCM0NQorCXZleHQuOAkJcTE0LHE0LHE1LCM4CUAgWFtpKzFdCisJdnNsaS42NAkJcTEzLHEzLCMzCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CXExMixxMTQsIzEKKwl2ZW9yCQlxMTUscTEzCQkJCUAgc2lnbWExKFhbaSsxNF0pCisJdnNoci51NjQJcTEzLHExNCwjOAorCXZhZGQuaTY0CXE0LHExNQorCXZzaHIudTY0CXExNSxxMTQsIzcKKwl2c2xpLjY0CQlxMTIscTE0LCM2MworCXZzbGkuNjQJCXExMyxxMTQsIzU2CisJdmV4dC44CQlxMTQscTAscTEsIzgJQCBYW2krOV0KKwl2ZW9yCQlxMTUscTEyCisJdnNoci51NjQJZDI0LGQyMCwjMTQJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTQscTE0CisJdnNoci51NjQJZDI1LGQyMCwjMTgJCUAgZnJvbSBORU9OXzAwXzE1CisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMChYW2krMV0pCisJdnNoci51NjQJZDI2LGQyMCwjNDEJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTQscTE1CisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMCwjNTAKKwl2c2xpLjY0CQlkMjUsZDIwLCM0NgorCXZzbGkuNjQJCWQyNixkMjAsIzIzCisjaWYgMjQ8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjMKKwl2ZW9yCQlkMjksZDIxLGQyMgorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIwCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQyMgkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTYsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTYsIzM0CisJdnNoci51NjQJZDI2LGQxNiwjMzkKKwl2c2xpLjY0CQlkMjQsZDE2LCMzNgorCXZzbGkuNjQJCWQyNSxkMTYsIzMwCisJdnNsaS42NAkJZDI2LGQxNiwjMjUKKwl2YWRkLmk2NAlkMjcsZDgKKwl2b3JyCQlkMzAsZDE2LGQxOAorCXZhbmQJCWQyOSxkMTYsZDE4CisJdmVvcgkJZDIzLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE3CisJdmVvcgkJZDIzLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIzLGQyNworCXZhZGQuaTY0CWQxOSxkMjcKKwl2YWRkLmk2NAlkMjMsZDMwCisJdnNoci51NjQJZDI0LGQxOSwjMTQJQCAyNQorI2lmIDI1PDE2CisJdmxkMS42NAkJe2Q5fSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDE5LCMxOAorCXZzaHIudTY0CWQyNixkMTksIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQxOSwjNTAKKwl2c2xpLjY0CQlkMjUsZDE5LCM0NgorCXZzbGkuNjQJCWQyNixkMTksIzIzCisjaWYgMjU8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMjIKKwl2ZW9yCQlkMjksZDIwLGQyMQorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDE5CisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQyMQkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMjMsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMjMsIzM0CisJdnNoci51NjQJZDI2LGQyMywjMzkKKwl2c2xpLjY0CQlkMjQsZDIzLCMzNgorCXZzbGkuNjQJCWQyNSxkMjMsIzMwCisJdnNsaS42NAkJZDI2LGQyMywjMjUKKwl2YWRkLmk2NAlkMjcsZDkKKwl2b3JyCQlkMzAsZDIzLGQxNworCXZhbmQJCWQyOSxkMjMsZDE3CisJdmVvcgkJZDIyLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE2CisJdmVvcgkJZDIyLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIyLGQyNworCXZhZGQuaTY0CWQxOCxkMjcKKwl2YWRkLmk2NAlkMjIsZDMwCisJdnNoci51NjQJcTEyLHE0LCMxOQorCXZzaHIudTY0CXExMyxxNCwjNjEKKwl2c2hyLnU2NAlxMTUscTQsIzYKKwl2c2xpLjY0CQlxMTIscTQsIzQ1CisJdmV4dC44CQlxMTQscTUscTYsIzgJQCBYW2krMV0KKwl2c2xpLjY0CQlxMTMscTQsIzMKKwl2ZW9yCQlxMTUscTEyCisJdnNoci51NjQJcTEyLHExNCwjMQorCXZlb3IJCXExNSxxMTMJCQkJQCBzaWdtYTEoWFtpKzE0XSkKKwl2c2hyLnU2NAlxMTMscTE0LCM4CisJdmFkZC5pNjQJcTUscTE1CisJdnNoci51NjQJcTE1LHExNCwjNworCXZzbGkuNjQJCXExMixxMTQsIzYzCisJdnNsaS42NAkJcTEzLHExNCwjNTYKKwl2ZXh0LjgJCXExNCxxMSxxMiwjOAlAIFhbaSs5XQorCXZlb3IJCXExNSxxMTIKKwl2c2hyLnU2NAlkMjQsZDE4LCMxNAkJQCBmcm9tIE5FT05fMDBfMTUKKwl2YWRkLmk2NAlxNSxxMTQKKwl2c2hyLnU2NAlkMjUsZDE4LCMxOAkJQCBmcm9tIE5FT05fMDBfMTUKKwl2ZW9yCQlxMTUscTEzCQkJCUAgc2lnbWEwKFhbaSsxXSkKKwl2c2hyLnU2NAlkMjYsZDE4LCM0MQkJQCBmcm9tIE5FT05fMDBfMTUKKwl2YWRkLmk2NAlxNSxxMTUKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDE4LCM1MAorCXZzbGkuNjQJCWQyNSxkMTgsIzQ2CisJdnNsaS42NAkJZDI2LGQxOCwjMjMKKyNpZiAyNjwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAksCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQyMQorCXZlb3IJCWQyOSxkMTksZDIwCisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMTgKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDIwCQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQyMiwjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQyMiwjMzQKKwl2c2hyLnU2NAlkMjYsZDIyLCMzOQorCXZzbGkuNjQJCWQyNCxkMjIsIzM2CisJdnNsaS42NAkJZDI1LGQyMiwjMzAKKwl2c2xpLjY0CQlkMjYsZDIyLCMyNQorCXZhZGQuaTY0CWQyNyxkMTAKKwl2b3JyCQlkMzAsZDIyLGQxNgorCXZhbmQJCWQyOSxkMjIsZDE2CisJdmVvcgkJZDIxLGQyNCxkMjUKKwl2YW5kCQlkMzAsZDIzCisJdmVvcgkJZDIxLGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDIxLGQyNworCXZhZGQuaTY0CWQxNyxkMjcKKwl2YWRkLmk2NAlkMjEsZDMwCisJdnNoci51NjQJZDI0LGQxNywjMTQJQCAyNworI2lmIDI3PDE2CisJdmxkMS42NAkJe2QxMX0sW3IxXSEJQCBoYW5kbGVzIHVuYWxpZ25lZAorI2VuZGlmCisJdnNoci51NjQJZDI1LGQxNywjMTgKKwl2c2hyLnU2NAlkMjYsZDE3LCM0MQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTcsIzUwCisJdnNsaS42NAkJZDI1LGQxNywjNDYKKwl2c2xpLjY0CQlkMjYsZDE3LCMyMworI2lmIDI3PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDIwCisJdmVvcgkJZDI5LGQxOCxkMTkKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxNworCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMTkJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIxLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIxLCMzNAorCXZzaHIudTY0CWQyNixkMjEsIzM5CisJdnNsaS42NAkJZDI0LGQyMSwjMzYKKwl2c2xpLjY0CQlkMjUsZDIxLCMzMAorCXZzbGkuNjQJCWQyNixkMjEsIzI1CisJdmFkZC5pNjQJZDI3LGQxMQorCXZvcnIJCWQzMCxkMjEsZDIzCisJdmFuZAkJZDI5LGQyMSxkMjMKKwl2ZW9yCQlkMjAsZDI0LGQyNQorCXZhbmQJCWQzMCxkMjIKKwl2ZW9yCQlkMjAsZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMjAsZDI3CisJdmFkZC5pNjQJZDE2LGQyNworCXZhZGQuaTY0CWQyMCxkMzAKKwl2c2hyLnU2NAlxMTIscTUsIzE5CisJdnNoci51NjQJcTEzLHE1LCM2MQorCXZzaHIudTY0CXExNSxxNSwjNgorCXZzbGkuNjQJCXExMixxNSwjNDUKKwl2ZXh0LjgJCXExNCxxNixxNywjOAlAIFhbaSsxXQorCXZzbGkuNjQJCXExMyxxNSwjMworCXZlb3IJCXExNSxxMTIKKwl2c2hyLnU2NAlxMTIscTE0LCMxCisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMShYW2krMTRdKQorCXZzaHIudTY0CXExMyxxMTQsIzgKKwl2YWRkLmk2NAlxNixxMTUKKwl2c2hyLnU2NAlxMTUscTE0LCM3CisJdnNsaS42NAkJcTEyLHExNCwjNjMKKwl2c2xpLjY0CQlxMTMscTE0LCM1NgorCXZleHQuOAkJcTE0LHEyLHEzLCM4CUAgWFtpKzldCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CWQyNCxkMTYsIzE0CQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXE2LHExNAorCXZzaHIudTY0CWQyNSxkMTYsIzE4CQlAIGZyb20gTkVPTl8wMF8xNQorCXZlb3IJCXExNSxxMTMJCQkJQCBzaWdtYTAoWFtpKzFdKQorCXZzaHIudTY0CWQyNixkMTYsIzQxCQlAIGZyb20gTkVPTl8wMF8xNQorCXZhZGQuaTY0CXE2LHExNQorCXZsZDEuNjQJCXtkMjh9LFtyMyw6NjRdIQlAIEtbaSsrXQorCXZzbGkuNjQJCWQyNCxkMTYsIzUwCisJdnNsaS42NAkJZDI1LGQxNiwjNDYKKwl2c2xpLjY0CQlkMjYsZDE2LCMyMworI2lmIDI4PDE2ICYmIGRlZmluZWQoX19BUk1FTF9fKQorCXZyZXY2NC44CSwKKyNlbmRpZgorCXZhZGQuaTY0CWQyNyxkMjgsZDE5CisJdmVvcgkJZDI5LGQxNyxkMTgKKwl2ZW9yCQlkMjQsZDI1CisJdmFuZAkJZDI5LGQxNgorCXZlb3IJCWQyNCxkMjYJCQlAIFNpZ21hMShlKQorCXZlb3IJCWQyOSxkMTgJCQlAIENoKGUsZixnKQorCXZhZGQuaTY0CWQyNyxkMjQKKwl2c2hyLnU2NAlkMjQsZDIwLCMyOAorCXZhZGQuaTY0CWQyNyxkMjkKKwl2c2hyLnU2NAlkMjUsZDIwLCMzNAorCXZzaHIudTY0CWQyNixkMjAsIzM5CisJdnNsaS42NAkJZDI0LGQyMCwjMzYKKwl2c2xpLjY0CQlkMjUsZDIwLCMzMAorCXZzbGkuNjQJCWQyNixkMjAsIzI1CisJdmFkZC5pNjQJZDI3LGQxMgorCXZvcnIJCWQzMCxkMjAsZDIyCisJdmFuZAkJZDI5LGQyMCxkMjIKKwl2ZW9yCQlkMTksZDI0LGQyNQorCXZhbmQJCWQzMCxkMjEKKwl2ZW9yCQlkMTksZDI2CQkJQCBTaWdtYTAoYSkKKwl2b3JyCQlkMzAsZDI5CQlAIE1haihhLGIsYykKKwl2YWRkLmk2NAlkMTksZDI3CisJdmFkZC5pNjQJZDIzLGQyNworCXZhZGQuaTY0CWQxOSxkMzAKKwl2c2hyLnU2NAlkMjQsZDIzLCMxNAlAIDI5CisjaWYgMjk8MTYKKwl2bGQxLjY0CQl7ZDEzfSxbcjFdIQlAIGhhbmRsZXMgdW5hbGlnbmVkCisjZW5kaWYKKwl2c2hyLnU2NAlkMjUsZDIzLCMxOAorCXZzaHIudTY0CWQyNixkMjMsIzQxCisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMywjNTAKKwl2c2xpLjY0CQlkMjUsZDIzLCM0NgorCXZzbGkuNjQJCWQyNixkMjMsIzIzCisjaWYgMjk8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMTgKKwl2ZW9yCQlkMjksZDE2LGQxNworCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIzCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxNwkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTksIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTksIzM0CisJdnNoci51NjQJZDI2LGQxOSwjMzkKKwl2c2xpLjY0CQlkMjQsZDE5LCMzNgorCXZzbGkuNjQJCWQyNSxkMTksIzMwCisJdnNsaS42NAkJZDI2LGQxOSwjMjUKKwl2YWRkLmk2NAlkMjcsZDEzCisJdm9ycgkJZDMwLGQxOSxkMjEKKwl2YW5kCQlkMjksZDE5LGQyMQorCXZlb3IJCWQxOCxkMjQsZDI1CisJdmFuZAkJZDMwLGQyMAorCXZlb3IJCWQxOCxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxOCxkMjcKKwl2YWRkLmk2NAlkMjIsZDI3CisJdmFkZC5pNjQJZDE4LGQzMAorCXZzaHIudTY0CXExMixxNiwjMTkKKwl2c2hyLnU2NAlxMTMscTYsIzYxCisJdnNoci51NjQJcTE1LHE2LCM2CisJdnNsaS42NAkJcTEyLHE2LCM0NQorCXZleHQuOAkJcTE0LHE3LHEwLCM4CUAgWFtpKzFdCisJdnNsaS42NAkJcTEzLHE2LCMzCisJdmVvcgkJcTE1LHExMgorCXZzaHIudTY0CXExMixxMTQsIzEKKwl2ZW9yCQlxMTUscTEzCQkJCUAgc2lnbWExKFhbaSsxNF0pCisJdnNoci51NjQJcTEzLHExNCwjOAorCXZhZGQuaTY0CXE3LHExNQorCXZzaHIudTY0CXExNSxxMTQsIzcKKwl2c2xpLjY0CQlxMTIscTE0LCM2MworCXZzbGkuNjQJCXExMyxxMTQsIzU2CisJdmV4dC44CQlxMTQscTMscTQsIzgJQCBYW2krOV0KKwl2ZW9yCQlxMTUscTEyCisJdnNoci51NjQJZDI0LGQyMiwjMTQJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTcscTE0CisJdnNoci51NjQJZDI1LGQyMiwjMTgJCUAgZnJvbSBORU9OXzAwXzE1CisJdmVvcgkJcTE1LHExMwkJCQlAIHNpZ21hMChYW2krMV0pCisJdnNoci51NjQJZDI2LGQyMiwjNDEJCUAgZnJvbSBORU9OXzAwXzE1CisJdmFkZC5pNjQJcTcscTE1CisJdmxkMS42NAkJe2QyOH0sW3IzLDo2NF0hCUAgS1tpKytdCisJdnNsaS42NAkJZDI0LGQyMiwjNTAKKwl2c2xpLjY0CQlkMjUsZDIyLCM0NgorCXZzbGkuNjQJCWQyNixkMjIsIzIzCisjaWYgMzA8MTYgJiYgZGVmaW5lZChfX0FSTUVMX18pCisJdnJldjY0LjgJLAorI2VuZGlmCisJdmFkZC5pNjQJZDI3LGQyOCxkMTcKKwl2ZW9yCQlkMjksZDIzLGQxNgorCXZlb3IJCWQyNCxkMjUKKwl2YW5kCQlkMjksZDIyCisJdmVvcgkJZDI0LGQyNgkJCUAgU2lnbWExKGUpCisJdmVvcgkJZDI5LGQxNgkJCUAgQ2goZSxmLGcpCisJdmFkZC5pNjQJZDI3LGQyNAorCXZzaHIudTY0CWQyNCxkMTgsIzI4CisJdmFkZC5pNjQJZDI3LGQyOQorCXZzaHIudTY0CWQyNSxkMTgsIzM0CisJdnNoci51NjQJZDI2LGQxOCwjMzkKKwl2c2xpLjY0CQlkMjQsZDE4LCMzNgorCXZzbGkuNjQJCWQyNSxkMTgsIzMwCisJdnNsaS42NAkJZDI2LGQxOCwjMjUKKwl2YWRkLmk2NAlkMjcsZDE0CisJdm9ycgkJZDMwLGQxOCxkMjAKKwl2YW5kCQlkMjksZDE4LGQyMAorCXZlb3IJCWQxNyxkMjQsZDI1CisJdmFuZAkJZDMwLGQxOQorCXZlb3IJCWQxNyxkMjYJCQlAIFNpZ21hMChhKQorCXZvcnIJCWQzMCxkMjkJCUAgTWFqKGEsYixjKQorCXZhZGQuaTY0CWQxNyxkMjcKKwl2YWRkLmk2NAlkMjEsZDI3CisJdmFkZC5pNjQJZDE3LGQzMAorCXZzaHIudTY0CWQyNCxkMjEsIzE0CUAgMzEKKyNpZiAzMTwxNgorCXZsZDEuNjQJCXtkMTV9LFtyMV0hCUAgaGFuZGxlcyB1bmFsaWduZWQKKyNlbmRpZgorCXZzaHIudTY0CWQyNSxkMjEsIzE4CisJdnNoci51NjQJZDI2LGQyMSwjNDEKKwl2bGQxLjY0CQl7ZDI4fSxbcjMsOjY0XSEJQCBLW2krK10KKwl2c2xpLjY0CQlkMjQsZDIxLCM1MAorCXZzbGkuNjQJCWQyNSxkMjEsIzQ2CisJdnNsaS42NAkJZDI2LGQyMSwjMjMKKyNpZiAzMTwxNiAmJiBkZWZpbmVkKF9fQVJNRUxfXykKKwl2cmV2NjQuOAksCisjZW5kaWYKKwl2YWRkLmk2NAlkMjcsZDI4LGQxNgorCXZlb3IJCWQyOSxkMjIsZDIzCisJdmVvcgkJZDI0LGQyNQorCXZhbmQJCWQyOSxkMjEKKwl2ZW9yCQlkMjQsZDI2CQkJQCBTaWdtYTEoZSkKKwl2ZW9yCQlkMjksZDIzCQkJQCBDaChlLGYsZykKKwl2YWRkLmk2NAlkMjcsZDI0CisJdnNoci51NjQJZDI0LGQxNywjMjgKKwl2YWRkLmk2NAlkMjcsZDI5CisJdnNoci51NjQJZDI1LGQxNywjMzQKKwl2c2hyLnU2NAlkMjYsZDE3LCMzOQorCXZzbGkuNjQJCWQyNCxkMTcsIzM2CisJdnNsaS42NAkJZDI1LGQxNywjMzAKKwl2c2xpLjY0CQlkMjYsZDE3LCMyNQorCXZhZGQuaTY0CWQyNyxkMTUKKwl2b3JyCQlkMzAsZDE3LGQxOQorCXZhbmQJCWQyOSxkMTcsZDE5CisJdmVvcgkJZDE2LGQyNCxkMjUKKwl2YW5kCQlkMzAsZDE4CisJdmVvcgkJZDE2LGQyNgkJCUAgU2lnbWEwKGEpCisJdm9ycgkJZDMwLGQyOQkJQCBNYWooYSxiLGMpCisJdmFkZC5pNjQJZDE2LGQyNworCXZhZGQuaTY0CWQyMCxkMjcKKwl2YWRkLmk2NAlkMTYsZDMwCisJYm5lCQkuTDE2Xzc5X25lb24KKworCXZsZG1pYQkJcjAse2QyNC1kMzF9CUAgbG9hZCBjb250ZXh0IHRvIHRlbXAKKwl2YWRkLmk2NAlxOCxxMTIJCUAgdmVjdG9yaXplZCBhY2N1bXVsYXRlCisJdmFkZC5pNjQJcTkscTEzCisJdmFkZC5pNjQJcTEwLHExNAorCXZhZGQuaTY0CXExMSxxMTUKKwl2c3RtaWEJCXIwLHtkMTYtZDIzfQlAIHNhdmUgY29udGV4dAorCXRlcQkJcjEscjIKKwlzdWIJCXIzLCM2NDAJQCByZXdpbmQgSzUxMgorCWJuZQkJLkxvb3BfbmVvbgorCisJdmxkbWlhCXNwISx7ZDgtZDE1fQkJQCBlcGlsb2d1ZQorCS53b3JkCTB4ZTEyZmZmMWUKKyNlbmRpZgorLnNpemUJc2hhNTEyX2Jsb2NrX2RhdGFfb3JkZXIsLi1zaGE1MTJfYmxvY2tfZGF0YV9vcmRlcgorLmFzY2l6CSJTSEE1MTIgYmxvY2sgdHJhbnNmb3JtIGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4iCiAuYWxpZ24JMgorLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1wYXJpc2MucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItcGFyaXNjLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyNGVlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItcGFyaXNjLnBsCkBAIC0wLDAgKzEsNzkxIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCisjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgU0hBMjU2LzUxMiBibG9jayBwcm9jZWR1cmUgZm9yIFBBLVJJU0MuCisKKyMgSnVuZSAyMDA5LgorIworIyBTSEEyNTYgcGVyZm9ybWFuY2UgaXMgPjc1JSBiZXR0ZXIgdGhhbiBnY2MgMy4yIGdlbmVyYXRlZCBjb2RlIG9uCisjIFBBLTcxMDBMQy4gQ29tcGFyZWQgdG8gY29kZSBnZW5lcmF0ZWQgYnkgdmVuZG9yIGNvbXBpbGVyIHRoaXMKKyMgaW1wbGVtZW50YXRpb24gaXMgYWxtb3N0IDcwJSBmYXN0ZXIgaW4gNjQtYml0IGJ1aWxkLCBidXQgZGVsaXZlcnMKKyMgdmlydHVhbGx5IHNhbWUgcGVyZm9ybWFuY2UgaW4gMzItYml0IGJ1aWxkIG9uIFBBLTg2MDAuCisjCisjIFNIQTUxMiBwZXJmb3JtYW5jZSBpcyA+Mi45eCBiZXR0ZXIgdGhhbiBnY2MgMy4yIGdlbmVyYXRlZCBjb2RlIG9uCisjIFBBLTcxMDBMQywgUEEtUklTQyAxLjEgcHJvY2Vzc29yLiBUaGVuIGltcGxlbWVudGF0aW9uIGRldGVjdHMgaWYgdGhlCisjIGNvZGUgaXMgZXhlY3V0ZWQgb24gUEEtUklTQyAyLjAgcHJvY2Vzc29yIGFuZCBzd2l0Y2hlcyB0byA2NC1iaXQKKyMgY29kZSBwYXRoIGRlbGl2ZXJpbmcgYWRlcXVhdGUgcGVmb3JtYW5jZSBldmVuIGluICJibGVuZGVkIiAzMi1iaXQKKyMgYnVpbGQuIFRob3VnaCA2NC1iaXQgY29kZSBpcyBub3QgYW55IGZhc3RlciB0aGFuIGNvZGUgZ2VuZXJhdGVkIGJ5CisjIHZlbmRvciBjb21waWxlciBvbiBQQS04NjAwLi4uCisjCisjIFNwZWNpYWwgdGhhbmtzIHRvIHBvbGFyaG9tZS5jb20gZm9yIHByb3ZpZGluZyBIUC1VWCBhY2NvdW50LgorCiskZmxhdm91ciA9IHNoaWZ0OworJG91dHB1dCA9IHNoaWZ0Oworb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKworaWYgKCRmbGF2b3VyID1+IC82NC8pIHsKKwkkTEVWRUwJCT0iMi4wVyI7CisJJFNJWkVfVAkJPTg7CisJJEZSQU1FX01BUktFUgk9ODA7CisJJFNBVkVEX1JQCT0xNjsKKwkkUFVTSAkJPSJzdGQiOworCSRQVVNITUEJCT0ic3RkLG1hIjsKKwkkUE9QCQk9ImxkZCI7CisJJFBPUE1CCQk9ImxkZCxtYiI7Cit9IGVsc2UgeworCSRMRVZFTAkJPSIxLjAiOworCSRTSVpFX1QJCT00OworCSRGUkFNRV9NQVJLRVIJPTQ4OworCSRTQVZFRF9SUAk9MjA7CisJJFBVU0gJCT0ic3R3IjsKKwkkUFVTSE1BCQk9InN0d20iOworCSRQT1AJCT0ibGR3IjsKKwkkUE9QTUIJCT0ibGR3bSI7Cit9CisKK2lmICgkb3V0cHV0ID1+IC81MTIvKSB7CisJJGZ1bmM9InNoYTUxMl9ibG9ja19kYXRhX29yZGVyIjsKKwkkU1o9ODsKKwlAU2lnbWEwPSgyOCwzNCwzOSk7CisJQFNpZ21hMT0oMTQsMTgsNDEpOworCUBzaWdtYTA9KDEsICA4LCA3KTsKKwlAc2lnbWExPSgxOSw2MSwgNik7CisJJHJvdW5kcz04MDsKKwkkTEFTVDEwQklUUz0weDAxNzsKKwkkTEQ9ImxkZCI7CisJJExETT0ibGRkLG1hIjsKKwkkU1Q9InN0ZCI7Cit9IGVsc2UgeworCSRmdW5jPSJzaGEyNTZfYmxvY2tfZGF0YV9vcmRlciI7CisJJFNaPTQ7CisJQFNpZ21hMD0oIDIsMTMsMjIpOworCUBTaWdtYTE9KCA2LDExLDI1KTsKKwlAc2lnbWEwPSggNywxOCwgMyk7CisJQHNpZ21hMT0oMTcsMTksMTApOworCSRyb3VuZHM9NjQ7CisJJExBU1QxMEJJVFM9MHgwZjI7CisJJExEPSJsZHciOworCSRMRE09Imxkd20iOworCSRTVD0ic3R3IjsKK30KKworJEZSQU1FPTE2KiRTSVpFX1QrJEZSQU1FX01BUktFUjsjIDE2IHNhdmVkIHJlZ3MgKyBmcmFtZSBtYXJrZXIKKwkJCQkjICAgICAgICAgICAgICAgICBbKyBhcmd1bWVudCB0cmFuc2Zlcl0KKyRYT0ZGPTE2KiRTWiszMjsJCSMgbG9jYWwgdmFyaWFibGVzCiskRlJBTUUrPSRYT0ZGOworJFhPRkYrPSRGUkFNRV9NQVJLRVI7CQkjIGRpc3RhbmNlIGJldHdlZW4gJXNwIGFuZCBsb2NhbCB2YXJpYWJsZXMKKworJGN0eD0iJXIyNiI7CSMgemFwcGVkIGJ5ICRhMAorJGlucD0iJXIyNSI7CSMgemFwcGVkIGJ5ICRhMQorJG51bT0iJXIyNCI7CSMgemFwcGVkIGJ5ICR0MAorCiskYTAgPSIlcjI2IjsKKyRhMSA9IiVyMjUiOworJHQwID0iJXIyNCI7CiskdDEgPSIlcjI5IjsKKyRUYmw9IiVyMzEiOworCitAVj0oJEEsJEIsJEMsJEQsJEUsJEYsJEcsJEgpPSgiJXIxNyIsIiVyMTgiLCIlcjE5IiwiJXIyMCIsIiVyMjEiLCIlcjIyIiwiJXIyMyIsIiVyMjgiKTsKKworQFg9KCIlcjEiLCAiJXIyIiwgIiVyMyIsICIlcjQiLCAiJXI1IiwgIiVyNiIsICIlcjciLCAiJXI4IiwKKyAgICAiJXI5IiwgIiVyMTAiLCIlcjExIiwiJXIxMiIsIiVyMTMiLCIlcjE0IiwiJXIxNSIsIiVyMTYiLCRpbnApOworCitzdWIgUk9VTkRfMDBfMTUgeworbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKT1AXzsKKyRjb2RlLj08PF9fXzsKKwlfcm9yCSRlLCRTaWdtYTFbMF0sJGEwCisJYW5kCSRmLCRlLCR0MAorCV9yb3IJJGUsJFNpZ21hMVsxXSwkYTEKKwlhZGRsCSR0MSwkaCwkaAorCWFuZGNtCSRnLCRlLCR0MQorCXhvcgkkYTEsJGEwLCRhMAorCV9yb3IJJGExLGAkU2lnbWExWzJdLSRTaWdtYTFbMV1gLCRhMQorCW9yCSR0MCwkdDEsJHQxCQk7IENoKGUsZixnKQorCWFkZGwJQFhbJGklMTZdLCRoLCRoCisJeG9yCSRhMCwkYTEsJGExCQk7IFNpZ21hMShlKQorCWFkZGwJJHQxLCRoLCRoCisJX3JvcgkkYSwkU2lnbWEwWzBdLCRhMAorCWFkZGwJJGExLCRoLCRoCisKKwlfcm9yCSRhLCRTaWdtYTBbMV0sJGExCisJYW5kCSRhLCRiLCR0MAorCWFuZAkkYSwkYywkdDEKKwl4b3IJJGExLCRhMCwkYTAKKwlfcm9yCSRhMSxgJFNpZ21hMFsyXS0kU2lnbWEwWzFdYCwkYTEKKwl4b3IJJHQxLCR0MCwkdDAKKwlhbmQJJGIsJGMsJHQxCisJeG9yCSRhMCwkYTEsJGExCQk7IFNpZ21hMChhKQorCWFkZGwJJGgsJGQsJGQKKwl4b3IJJHQxLCR0MCwkdDAJCTsgTWFqKGEsYixjKQorCWAiJExETQkkU1ooJFRibCksJHQxIiBpZiAoJGk8MTUpYAorCWFkZGwJJGExLCRoLCRoCisJYWRkbAkkdDAsJGgsJGgKKworX19fCit9CisKK3N1YiBST1VORF8xNl94eCB7CitteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpPUBfOworJGktPTE2OworJGNvZGUuPTw8X19fOworCV9yb3IJQFhbKCRpKzEpJTE2XSwkc2lnbWEwWzBdLCRhMAorCV9yb3IJQFhbKCRpKzEpJTE2XSwkc2lnbWEwWzFdLCRhMQorCWFkZGwJQFhbKCRpKzkpJTE2XSxAWFskaV0sQFhbJGldCisJX3JvcglAWFsoJGkrMTQpJTE2XSwkc2lnbWExWzBdLCR0MAorCV9yb3IJQFhbKCRpKzE0KSUxNl0sJHNpZ21hMVsxXSwkdDEKKwl4b3IJJGExLCRhMCwkYTAKKwlfc2hyCUBYWygkaSsxKSUxNl0sJHNpZ21hMFsyXSwkYTEKKwl4b3IJJHQxLCR0MCwkdDAKKwlfc2hyCUBYWygkaSsxNCklMTZdLCRzaWdtYTFbMl0sJHQxCisJeG9yCSRhMSwkYTAsJGEwCQk7IHNpZ21hMChYWyhpKzEpJjB4MGZdKQorCXhvcgkkdDEsJHQwLCR0MAkJOyBzaWdtYTEoWFsoaSsxNCkmMHgwZl0pCisJJExETQkkU1ooJFRibCksJHQxCisJYWRkbAkkYTAsQFhbJGldLEBYWyRpXQorCWFkZGwJJHQwLEBYWyRpXSxAWFskaV0KK19fXworJGNvZGUuPTw8X19fIGlmICgkaT09MTUpOworCWV4dHJ1CSR0MSwzMSwxMCwkYTEKKwljb21pY2xyLDw+ICRMQVNUMTBCSVRTLCRhMSwlcjAKKwlsZG8JMSgkVGJsKSwkVGJsCQk7IHNpZ25hbCBlbmQgb2YgJFRibAorX19fCismUk9VTkRfMDBfMTUoJGkrMTYsJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpOworfQorCiskY29kZT08PF9fXzsKKwkuTEVWRUwJJExFVkVMCisJLlNQQUNFCVwkVEVYVFwkCisJLlNVQlNQQQlcJENPREVcJCxRVUFEPTAsQUxJR049OCxBQ0NFU1M9MHgyQyxDT0RFX09OTFkKKworCS5BTElHTgk2NAorTFwkdGFibGUKK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTgpOworCS5XT1JECTB4NDI4YTJmOTgsMHhkNzI4YWUyMiwweDcxMzc0NDkxLDB4MjNlZjY1Y2QKKwkuV09SRAkweGI1YzBmYmNmLDB4ZWM0ZDNiMmYsMHhlOWI1ZGJhNSwweDgxODlkYmJjCisJLldPUkQJMHgzOTU2YzI1YiwweGYzNDhiNTM4LDB4NTlmMTExZjEsMHhiNjA1ZDAxOQorCS5XT1JECTB4OTIzZjgyYTQsMHhhZjE5NGY5YiwweGFiMWM1ZWQ1LDB4ZGE2ZDgxMTgKKwkuV09SRAkweGQ4MDdhYTk4LDB4YTMwMzAyNDIsMHgxMjgzNWIwMSwweDQ1NzA2ZmJlCisJLldPUkQJMHgyNDMxODViZSwweDRlZTRiMjhjLDB4NTUwYzdkYzMsMHhkNWZmYjRlMgorCS5XT1JECTB4NzJiZTVkNzQsMHhmMjdiODk2ZiwweDgwZGViMWZlLDB4M2IxNjk2YjEKKwkuV09SRAkweDliZGMwNmE3LDB4MjVjNzEyMzUsMHhjMTliZjE3NCwweGNmNjkyNjk0CisJLldPUkQJMHhlNDliNjljMSwweDllZjE0YWQyLDB4ZWZiZTQ3ODYsMHgzODRmMjVlMworCS5XT1JECTB4MGZjMTlkYzYsMHg4YjhjZDViNSwweDI0MGNhMWNjLDB4NzdhYzljNjUKKwkuV09SRAkweDJkZTkyYzZmLDB4NTkyYjAyNzUsMHg0YTc0ODRhYSwweDZlYTZlNDgzCisJLldPUkQJMHg1Y2IwYTlkYywweGJkNDFmYmQ0LDB4NzZmOTg4ZGEsMHg4MzExNTNiNQorCS5XT1JECTB4OTgzZTUxNTIsMHhlZTY2ZGZhYiwweGE4MzFjNjZkLDB4MmRiNDMyMTAKKwkuV09SRAkweGIwMDMyN2M4LDB4OThmYjIxM2YsMHhiZjU5N2ZjNywweGJlZWYwZWU0CisJLldPUkQJMHhjNmUwMGJmMywweDNkYTg4ZmMyLDB4ZDVhNzkxNDcsMHg5MzBhYTcyNQorCS5XT1JECTB4MDZjYTYzNTEsMHhlMDAzODI2ZiwweDE0MjkyOTY3LDB4MGEwZTZlNzAKKwkuV09SRAkweDI3YjcwYTg1LDB4NDZkMjJmZmMsMHgyZTFiMjEzOCwweDVjMjZjOTI2CisJLldPUkQJMHg0ZDJjNmRmYywweDVhYzQyYWVkLDB4NTMzODBkMTMsMHg5ZDk1YjNkZgorCS5XT1JECTB4NjUwYTczNTQsMHg4YmFmNjNkZSwweDc2NmEwYWJiLDB4M2M3N2IyYTgKKwkuV09SRAkweDgxYzJjOTJlLDB4NDdlZGFlZTYsMHg5MjcyMmM4NSwweDE0ODIzNTNiCisJLldPUkQJMHhhMmJmZThhMSwweDRjZjEwMzY0LDB4YTgxYTY2NGIsMHhiYzQyMzAwMQorCS5XT1JECTB4YzI0YjhiNzAsMHhkMGY4OTc5MSwweGM3NmM1MWEzLDB4MDY1NGJlMzAKKwkuV09SRAkweGQxOTJlODE5LDB4ZDZlZjUyMTgsMHhkNjk5MDYyNCwweDU1NjVhOTEwCisJLldPUkQJMHhmNDBlMzU4NSwweDU3NzEyMDJhLDB4MTA2YWEwNzAsMHgzMmJiZDFiOAorCS5XT1JECTB4MTlhNGMxMTYsMHhiOGQyZDBjOCwweDFlMzc2YzA4LDB4NTE0MWFiNTMKKwkuV09SRAkweDI3NDg3NzRjLDB4ZGY4ZWViOTksMHgzNGIwYmNiNSwweGUxOWI0OGE4CisJLldPUkQJMHgzOTFjMGNiMywweGM1Yzk1YTYzLDB4NGVkOGFhNGEsMHhlMzQxOGFjYgorCS5XT1JECTB4NWI5Y2NhNGYsMHg3NzYzZTM3MywweDY4MmU2ZmYzLDB4ZDZiMmI4YTMKKwkuV09SRAkweDc0OGY4MmVlLDB4NWRlZmIyZmMsMHg3OGE1NjM2ZiwweDQzMTcyZjYwCisJLldPUkQJMHg4NGM4NzgxNCwweGExZjBhYjcyLDB4OGNjNzAyMDgsMHgxYTY0MzllYworCS5XT1JECTB4OTBiZWZmZmEsMHgyMzYzMWUyOCwweGE0NTA2Y2ViLDB4ZGU4MmJkZTkKKwkuV09SRAkweGJlZjlhM2Y3LDB4YjJjNjc5MTUsMHhjNjcxNzhmMiwweGUzNzI1MzJiCisJLldPUkQJMHhjYTI3M2VjZSwweGVhMjY2MTljLDB4ZDE4NmI4YzcsMHgyMWMwYzIwNworCS5XT1JECTB4ZWFkYTdkZDYsMHhjZGUwZWIxZSwweGY1N2Q0ZjdmLDB4ZWU2ZWQxNzgKKwkuV09SRAkweDA2ZjA2N2FhLDB4NzIxNzZmYmEsMHgwYTYzN2RjNSwweGEyYzg5OGE2CisJLldPUkQJMHgxMTNmOTgwNCwweGJlZjkwZGFlLDB4MWI3MTBiMzUsMHgxMzFjNDcxYgorCS5XT1JECTB4MjhkYjc3ZjUsMHgyMzA0N2Q4NCwweDMyY2FhYjdiLDB4NDBjNzI0OTMKKwkuV09SRAkweDNjOWViZTBhLDB4MTVjOWJlYmMsMHg0MzFkNjdjNCwweDljMTAwZDRjCisJLldPUkQJMHg0Y2M1ZDRiZSwweGNiM2U0MmI2LDB4NTk3ZjI5OWMsMHhmYzY1N2UyYQorCS5XT1JECTB4NWZjYjZmYWIsMHgzYWQ2ZmFlYywweDZjNDQxOThjLDB4NGE0NzU4MTcKK19fXworJGNvZGUuPTw8X19fIGlmICgkU1o9PTQpOworCS5XT1JECTB4NDI4YTJmOTgsMHg3MTM3NDQ5MSwweGI1YzBmYmNmLDB4ZTliNWRiYTUKKwkuV09SRAkweDM5NTZjMjViLDB4NTlmMTExZjEsMHg5MjNmODJhNCwweGFiMWM1ZWQ1CisJLldPUkQJMHhkODA3YWE5OCwweDEyODM1YjAxLDB4MjQzMTg1YmUsMHg1NTBjN2RjMworCS5XT1JECTB4NzJiZTVkNzQsMHg4MGRlYjFmZSwweDliZGMwNmE3LDB4YzE5YmYxNzQKKwkuV09SRAkweGU0OWI2OWMxLDB4ZWZiZTQ3ODYsMHgwZmMxOWRjNiwweDI0MGNhMWNjCisJLldPUkQJMHgyZGU5MmM2ZiwweDRhNzQ4NGFhLDB4NWNiMGE5ZGMsMHg3NmY5ODhkYQorCS5XT1JECTB4OTgzZTUxNTIsMHhhODMxYzY2ZCwweGIwMDMyN2M4LDB4YmY1OTdmYzcKKwkuV09SRAkweGM2ZTAwYmYzLDB4ZDVhNzkxNDcsMHgwNmNhNjM1MSwweDE0MjkyOTY3CisJLldPUkQJMHgyN2I3MGE4NSwweDJlMWIyMTM4LDB4NGQyYzZkZmMsMHg1MzM4MGQxMworCS5XT1JECTB4NjUwYTczNTQsMHg3NjZhMGFiYiwweDgxYzJjOTJlLDB4OTI3MjJjODUKKwkuV09SRAkweGEyYmZlOGExLDB4YTgxYTY2NGIsMHhjMjRiOGI3MCwweGM3NmM1MWEzCisJLldPUkQJMHhkMTkyZTgxOSwweGQ2OTkwNjI0LDB4ZjQwZTM1ODUsMHgxMDZhYTA3MAorCS5XT1JECTB4MTlhNGMxMTYsMHgxZTM3NmMwOCwweDI3NDg3NzRjLDB4MzRiMGJjYjUKKwkuV09SRAkweDM5MWMwY2IzLDB4NGVkOGFhNGEsMHg1YjljY2E0ZiwweDY4MmU2ZmYzCisJLldPUkQJMHg3NDhmODJlZSwweDc4YTU2MzZmLDB4ODRjODc4MTQsMHg4Y2M3MDIwOAorCS5XT1JECTB4OTBiZWZmZmEsMHhhNDUwNmNlYiwweGJlZjlhM2Y3LDB4YzY3MTc4ZjIKK19fXworJGNvZGUuPTw8X19fOworCisJLkVYUE9SVAkkZnVuYyxFTlRSWSxBUkdXMD1HUixBUkdXMT1HUixBUkdXMj1HUgorCS5BTElHTgk2NAorJGZ1bmMKKwkuUFJPQworCS5DQUxMSU5GTwlGUkFNRT1gJEZSQU1FLTE2KiRTSVpFX1RgLE5PX0NBTExTLFNBVkVfUlAsRU5UUllfR1I9MTgKKwkuRU5UUlkKKwkkUFVTSAklcjIsLSRTQVZFRF9SUCglc3ApCTsgc3RhbmRhcmQgcHJvbG9ndWUKKwkkUFVTSE1BCSVyMywkRlJBTUUoJXNwKQorCSRQVVNICSVyNCxgLSRGUkFNRSsxKiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjUsYC0kRlJBTUUrMiokU0laRV9UYCglc3ApCisJJFBVU0gJJXI2LGAtJEZSQU1FKzMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyNyxgLSRGUkFNRSs0KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjgsYC0kRlJBTUUrNSokU0laRV9UYCglc3ApCisJJFBVU0gJJXI5LGAtJEZSQU1FKzYqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTAsYC0kRlJBTUUrNyokU0laRV9UYCglc3ApCisJJFBVU0gJJXIxMSxgLSRGUkFNRSs4KiRTSVpFX1RgKCVzcCkKKwkkUFVTSAklcjEyLGAtJEZSQU1FKzkqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTMsYC0kRlJBTUUrMTAqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTQsYC0kRlJBTUUrMTEqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTUsYC0kRlJBTUUrMTIqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTYsYC0kRlJBTUUrMTMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTcsYC0kRlJBTUUrMTQqJFNJWkVfVGAoJXNwKQorCSRQVVNICSVyMTgsYC0kRlJBTUUrMTUqJFNJWkVfVGAoJXNwKQorCisJX3NobAkkbnVtLGBsb2coMTYqJFNaKS9sb2coMilgLCRudW0KKwlhZGRsCSRpbnAsJG51bSwkbnVtCQk7ICRudW0gdG8gcG9pbnQgYXQgdGhlIGVuZCBvZiAkaW5wCisKKwkkUFVTSAkkbnVtLGAtJEZSQU1FX01BUktFUi00KiRTSVpFX1RgKCVzcCkJOyBzYXZlIGFyZ3VtZW50cworCSRQVVNICSRpbnAsYC0kRlJBTUVfTUFSS0VSLTMqJFNJWkVfVGAoJXNwKQorCSRQVVNICSRjdHgsYC0kRlJBTUVfTUFSS0VSLTIqJFNJWkVfVGAoJXNwKQorCisJYmxyCSVyMCwkVGJsCisJbGRpCTMsJHQxCitMXCRwaWMKKwlhbmRjbQkkVGJsLCR0MSwkVGJsCQk7IHdpcGUgcHJpdmlsZWdlIGxldmVsCisJbGRvCUxcJHRhYmxlLUxcJHBpYygkVGJsKSwkVGJsCitfX18KKyRjb2RlLj08PF9fXyBpZiAoJFNaPT04ICYmICRTSVpFX1Q9PTQpOworCWxkaQkzMSwkdDEKKwltdGN0bAkkdDEsJWNyMTEKKwlleHRyZCx1LCo9ICR0MSwlc2FyLDEsJHQxCTsgZXhlY3V0ZXMgb24gUEEtUklTQyAxLjAKKwliCUxcJHBhcmlzYzEKKwlub3AKK19fXworJGNvZGUuPTw8X19fOworCSRMRAlgMCokU1pgKCRjdHgpLCRBCTsgbG9hZCBjb250ZXh0CisJJExECWAxKiRTWmAoJGN0eCksJEIKKwkkTEQJYDIqJFNaYCgkY3R4KSwkQworCSRMRAlgMyokU1pgKCRjdHgpLCRECisJJExECWA0KiRTWmAoJGN0eCksJEUKKwkkTEQJYDUqJFNaYCgkY3R4KSwkRgorCSRMRAlgNiokU1pgKCRjdHgpLCRHCisJJExECWA3KiRTWmAoJGN0eCksJEgKKworCWV4dHJ1CSRpbnAsMzEsYGxvZygkU1opL2xvZygyKWAsJHQwCisJc2gzYWRkbAkkdDAsJXIwLCR0MAorCXN1YmkJYDgqJFNaYCwkdDAsJHQwCisJbXRjdGwJJHQwLCVjcjExCQk7IGxvYWQgJXNhciB3aXRoIGFsaWduIGZhY3RvcgorCitMXCRvb3AKKwlsZGkJYCRTWi0xYCwkdDAKKwkkTERNCSRTWigkVGJsKSwkdDEKKwlhbmRjbQkkaW5wLCR0MCwkdDAJCTsgYWxpZ24gJGlucAorX19fCisJZm9yICgkaT0wOyRpPDE1OyRpKyspIHsJCSMgbG9hZCBpbnB1dCBibG9jaworCSRjb2RlLj0iXHQkTEQJYCRTWiokaWAoJHQwKSxAWFskaV1cbiI7CQl9CiskY29kZS49PDxfX187CisJY21wYiwqPQkkaW5wLCR0MCxMXCRhbGlnbmVkCisJJExECWAkU1oqMTVgKCR0MCksQFhbMTVdCisJJExECWAkU1oqMTZgKCR0MCksQFhbMTZdCitfX18KKwlmb3IgKCRpPTA7JGk8MTY7JGkrKykgewkJIyBhbGlnbiBkYXRhCisJJGNvZGUuPSJcdF9hbGlnbglAWFskaV0sQFhbJGkrMV0sQFhbJGldXG4iOwl9CiskY29kZS49PDxfX187CitMXCRhbGlnbmVkCisJbm9wCTsgb3RoZXJ3aXNlIC91c3IvY2NzL2Jpbi9hcyBpcyBjb25mdXNlZCBieSBiZWxvdyAuV09SRAorX19fCisKK2ZvcigkaT0wOyRpPDE2OyRpKyspCXsgJlJPVU5EXzAwXzE1KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworTFwkcm91bmRzCisJbm9wCTsgb3RoZXJ3aXNlIC91c3IvY2NzL2Jpbi9hcyBpcyBjb25mdXNlZCBieSBiZWxvdyAuV09SRAorX19fCitmb3IoOyRpPDMyOyRpKyspCXsgJlJPVU5EXzE2X3h4KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQorJGNvZGUuPTw8X19fOworCWJiLD49CSRUYmwsMzEsTFwkcm91bmRzCTsgZW5kIG9mICRUYmwgc2lnbmFsbGVkPworCW5vcAorCisJJFBPUAlgLSRGUkFNRV9NQVJLRVItMiokU0laRV9UYCglc3ApLCRjdHgJOyByZXN0b3JlIGFyZ3VtZW50cworCSRQT1AJYC0kRlJBTUVfTUFSS0VSLTMqJFNJWkVfVGAoJXNwKSwkaW5wCisJJFBPUAlgLSRGUkFNRV9NQVJLRVItNCokU0laRV9UYCglc3ApLCRudW0KKwlsZG8JYC0kcm91bmRzKiRTWi0xYCgkVGJsKSwkVGJsCQk7IHJld2luZCAkVGJsCisKKwkkTEQJYDAqJFNaYCgkY3R4KSxAWFswXQk7IGxvYWQgY29udGV4dAorCSRMRAlgMSokU1pgKCRjdHgpLEBYWzFdCisJJExECWAyKiRTWmAoJGN0eCksQFhbMl0KKwkkTEQJYDMqJFNaYCgkY3R4KSxAWFszXQorCSRMRAlgNCokU1pgKCRjdHgpLEBYWzRdCisJJExECWA1KiRTWmAoJGN0eCksQFhbNV0KKwlhZGRsCUBYWzBdLCRBLCRBCisJJExECWA2KiRTWmAoJGN0eCksQFhbNl0KKwlhZGRsCUBYWzFdLCRCLCRCCisJJExECWA3KiRTWmAoJGN0eCksQFhbN10KKwlsZG8JYDE2KiRTWmAoJGlucCksJGlucAk7IGFkdmFuY2UgJGlucAorCisJJFNUCSRBLGAwKiRTWmAoJGN0eCkJOyBzYXZlIGNvbnRleHQKKwlhZGRsCUBYWzJdLCRDLCRDCisJJFNUCSRCLGAxKiRTWmAoJGN0eCkKKwlhZGRsCUBYWzNdLCRELCRECisJJFNUCSRDLGAyKiRTWmAoJGN0eCkKKwlhZGRsCUBYWzRdLCRFLCRFCisJJFNUCSRELGAzKiRTWmAoJGN0eCkKKwlhZGRsCUBYWzVdLCRGLCRGCisJJFNUCSRFLGA0KiRTWmAoJGN0eCkKKwlhZGRsCUBYWzZdLCRHLCRHCisJJFNUCSRGLGA1KiRTWmAoJGN0eCkKKwlhZGRsCUBYWzddLCRILCRICisJJFNUCSRHLGA2KiRTWmAoJGN0eCkKKwkkU1QJJEgsYDcqJFNaYCgkY3R4KQorCisJY21wYiwqPD4sbiAkaW5wLCRudW0sTFwkb29wCisJJFBVU0gJJGlucCxgLSRGUkFNRV9NQVJLRVItMyokU0laRV9UYCglc3ApCTsgc2F2ZSAkaW5wCitfX18KK2lmICgkU1o9PTggJiYgJFNJWkVfVD09NCkJIyBTSEE1MTIgZm9yIDMyLWJpdCBQQS1SSVNDIDEuMAore3sKKyRjb2RlLj08PF9fXzsKKwliCUxcJGRvbmUKKwlub3AKKworCS5BTElHTgk2NAorTFwkcGFyaXNjMQorX19fCisKK0BWPSggICRBaGksICAkQWxvLCAgJEJoaSwgICRCbG8sICAkQ2hpLCAgJENsbywgICREaGksICAkRGxvLAorICAgICAgJEVoaSwgICRFbG8sICAkRmhpLCAgJEZsbywgICRHaGksICAkR2xvLCAgJEhoaSwgICRIbG8pID0gCisgICAoICIlcjEiLCAiJXIyIiwgIiVyMyIsICIlcjQiLCAiJXI1IiwgIiVyNiIsICIlcjciLCAiJXI4IiwKKyAgICAgIiVyOSIsIiVyMTAiLCIlcjExIiwiJXIxMiIsIiVyMTMiLCIlcjE0IiwiJXIxNSIsIiVyMTYiKTsKKyRhMCA9IiVyMTciOworJGExID0iJXIxOCI7CiskYTIgPSIlcjE5IjsKKyRhMyA9IiVyMjAiOworJHQwID0iJXIyMSI7CiskdDEgPSIlcjIyIjsKKyR0MiA9IiVyMjgiOworJHQzID0iJXIyOSI7CiskVGJsPSIlcjMxIjsKKworQFg9KCIlcjIzIiwiJXIyNCIsIiVyMjUiLCIlcjI2Iik7CSMgemFwcyAkbnVtLCRpbnAsJGN0eAorCitzdWIgUk9VTkRfMDBfMTVfcGExIHsKK215ICgkaSwkYWhpLCRhbG8sJGJoaSwkYmxvLCRjaGksJGNsbywkZGhpLCRkbG8sCisgICAgICAgJGVoaSwkZWxvLCRmaGksJGZsbywkZ2hpLCRnbG8sJGhoaSwkaGxvLCRmbGFnKT1AXzsKK215ICgkWGhpLCRYbG8sJFhuaGksJFhubG8pID0gQFg7CisKKyRjb2RlLj08PF9fXyBpZiAoISRmbGFnKTsKKwlsZHcJYC0kWE9GRis4KigoJGkrMSklMTYpYCglc3ApLCRYbmhpCisJbGR3CWAtJFhPRkYrOCooKCRpKzEpJTE2KSs0YCglc3ApLCRYbmxvCTsgbG9hZCBYW2krMV0KK19fXworJGNvZGUuPTw8X19fOworCXNoZAkkZWhpLCRlbG8sJFNpZ21hMVswXSwkdDAKKwkgYWRkCSRYbG8sJGhsbywkaGxvCisJc2hkCSRlbG8sJGVoaSwkU2lnbWExWzBdLCR0MQorCSBhZGRjCSRYaGksJGhoaSwkaGhpCQk7IGggKz0gWFtpXQorCXNoZAkkZWhpLCRlbG8sJFNpZ21hMVsxXSwkdDIKKwkgbGR3bQk4KCRUYmwpLCRYaGkKKwlzaGQJJGVsbywkZWhpLCRTaWdtYTFbMV0sJHQzCisJIGxkdwktNCgkVGJsKSwkWGxvCQk7IGxvYWQgS1tpXQorCXhvcgkkdDIsJHQwLCR0MAorCXhvcgkkdDMsJHQxLCR0MQorCSBhbmQJJGZsbywkZWxvLCRhMAorCSBhbmQJJGZoaSwkZWhpLCRhMQorCXNoZAkkZWhpLCRlbG8sJFNpZ21hMVsyXSwkdDIKKwkgYW5kY20JJGdsbywkZWxvLCRhMgorCXNoZAkkZWxvLCRlaGksJFNpZ21hMVsyXSwkdDMKKwkgYW5kY20JJGdoaSwkZWhpLCRhMworCXhvcgkkdDIsJHQwLCR0MAorCXhvcgkkdDMsJHQxLCR0MQkJOyBTaWdtYTEoZSkKKwlhZGQJJFhsbywkaGxvLCRobG8KKwkgeG9yCSRhMiwkYTAsJGEwCisJYWRkYwkkWGhpLCRoaGksJGhoaQkJOyBoICs9IEtbaV0KKwkgeG9yCSRhMywkYTEsJGExCQk7IENoKGUsZixnKQorCisJIGFkZAkkdDAsJGhsbywkaGxvCisJc2hkCSRhaGksJGFsbywkU2lnbWEwWzBdLCR0MAorCSBhZGRjCSR0MSwkaGhpLCRoaGkJCTsgaCArPSBTaWdtYTEoZSkKKwlzaGQJJGFsbywkYWhpLCRTaWdtYTBbMF0sJHQxCQorCSBhZGQJJGEwLCRobG8sJGhsbworCXNoZAkkYWhpLCRhbG8sJFNpZ21hMFsxXSwkdDIKKwkgYWRkYwkkYTEsJGhoaSwkaGhpCQk7IGggKz0gQ2goZSxmLGcpCisJc2hkCSRhbG8sJGFoaSwkU2lnbWEwWzFdLCR0MworCisJeG9yCSR0MiwkdDAsJHQwCisJeG9yCSR0MywkdDEsJHQxCisJc2hkCSRhaGksJGFsbywkU2lnbWEwWzJdLCR0MgorCWFuZAkkYWxvLCRibG8sJGEwCisJc2hkCSRhbG8sJGFoaSwkU2lnbWEwWzJdLCR0MworCWFuZAkkYWhpLCRiaGksJGExCisJeG9yCSR0MiwkdDAsJHQwCisJeG9yCSR0MywkdDEsJHQxCQk7IFNpZ21hMChhKQorCisJYW5kCSRhbG8sJGNsbywkYTIKKwlhbmQJJGFoaSwkY2hpLCRhMworCXhvcgkkYTIsJGEwLCRhMAorCSBhZGQJJGhsbywkZGxvLCRkbG8KKwl4b3IJJGEzLCRhMSwkYTEKKwkgYWRkYwkkaGhpLCRkaGksJGRoaQkJOyBkICs9IGgKKwlhbmQJJGJsbywkY2xvLCRhMgorCSBhZGQJJHQwLCRobG8sJGhsbworCWFuZAkkYmhpLCRjaGksJGEzCisJIGFkZGMJJHQxLCRoaGksJGhoaQkJOyBoICs9IFNpZ21hMChhKQorCXhvcgkkYTIsJGEwLCRhMAorCSBhZGQJJGEwLCRobG8sJGhsbworCXhvcgkkYTMsJGExLCRhMQkJOyBNYWooYSxiLGMpCisJIGFkZGMJJGExLCRoaGksJGhoaQkJOyBoICs9IE1haihhLGIsYykKKworX19fCiskY29kZS49PDxfX18gaWYgKCRpPT0xNSAmJiAkZmxhZyk7CisJZXh0cnUJJFhsbywzMSwxMCwkWGxvCisJY29taWNsciw9ICRMQVNUMTBCSVRTLCRYbG8sJXIwCisJYglMXCRyb3VuZHNfcGExCisJbm9wCitfX18KK3B1c2goQFgsc2hpZnQoQFgpKTsgcHVzaChAWCxzaGlmdChAWCkpOworfQorCitzdWIgUk9VTkRfMTZfeHhfcGExIHsKK215ICgkWGhpLCRYbG8sJFhuaGksJFhubG8pID0gQFg7CitteSAoJGkpPXNoaWZ0OworJGktPTE2OworJGNvZGUuPTw8X19fOworCWxkdwlgLSRYT0ZGKzgqKCgkaSsxKSUxNilgKCVzcCksJFhuaGkKKwlsZHcJYC0kWE9GRis4KigoJGkrMSklMTYpKzRgKCVzcCksJFhubG8JOyBsb2FkIFhbaSsxXQorCWxkdwlgLSRYT0ZGKzgqKCgkaSs5KSUxNilgKCVzcCksJGExCisJbGR3CWAtJFhPRkYrOCooKCRpKzkpJTE2KSs0YCglc3ApLCRhMAk7IGxvYWQgWFtpKzldCisJbGR3CWAtJFhPRkYrOCooKCRpKzE0KSUxNilgKCVzcCksJGEzCisJbGR3CWAtJFhPRkYrOCooKCRpKzE0KSUxNikrNGAoJXNwKSwkYTIJOyBsb2FkIFhbaSsxNF0KKwlzaGQJJFhuaGksJFhubG8sJHNpZ21hMFswXSwkdDAKKwlzaGQJJFhubG8sJFhuaGksJHNpZ21hMFswXSwkdDEKKwkgYWRkCSRhMCwkWGxvLCRYbG8KKwlzaGQJJFhuaGksJFhubG8sJHNpZ21hMFsxXSwkdDIKKwkgYWRkYwkkYTEsJFhoaSwkWGhpCisJc2hkCSRYbmxvLCRYbmhpLCRzaWdtYTBbMV0sJHQzCisJeG9yCSR0MiwkdDAsJHQwCisJc2hkCSRYbmhpLCRYbmxvLCRzaWdtYTBbMl0sJHQyCisJeG9yCSR0MywkdDEsJHQxCisJZXh0cnUJJFhuaGksYDMxLSRzaWdtYTBbMl1gLGAzMi0kc2lnbWEwWzJdYCwkdDMKKwl4b3IJJHQyLCR0MCwkdDAKKwkgc2hkCSRhMywkYTIsJHNpZ21hMVswXSwkYTAKKwl4b3IJJHQzLCR0MSwkdDEJCTsgc2lnbWEwKFhbaSsxKSYweDBmXSkKKwkgc2hkCSRhMiwkYTMsJHNpZ21hMVswXSwkYTEKKwlhZGQJJHQwLCRYbG8sJFhsbworCSBzaGQJJGEzLCRhMiwkc2lnbWExWzFdLCR0MgorCWFkZGMJJHQxLCRYaGksJFhoaQorCSBzaGQJJGEyLCRhMywkc2lnbWExWzFdLCR0MworCXhvcgkkdDIsJGEwLCRhMAorCXNoZAkkYTMsJGEyLCRzaWdtYTFbMl0sJHQyCisJeG9yCSR0MywkYTEsJGExCisJZXh0cnUJJGEzLGAzMS0kc2lnbWExWzJdYCxgMzItJHNpZ21hMVsyXWAsJHQzCisJeG9yCSR0MiwkYTAsJGEwCisJeG9yCSR0MywkYTEsJGExCQk7IHNpZ21hMChYW2krMTQpJjB4MGZdKQorCWFkZAkkYTAsJFhsbywkWGxvCisJYWRkYwkkYTEsJFhoaSwkWGhpCisKKwlzdHcJJFhoaSxgLSRYT0ZGKzgqKCRpJTE2KWAoJXNwKQorCXN0dwkkWGxvLGAtJFhPRkYrOCooJGklMTYpKzRgKCVzcCkKK19fXworJlJPVU5EXzAwXzE1X3BhMSgkaSxAXywxKTsKK30KKyRjb2RlLj08PF9fXzsKKwlsZHcJYDAqNGAoJGN0eCksJEFoaQkJOyBsb2FkIGNvbnRleHQKKwlsZHcJYDEqNGAoJGN0eCksJEFsbworCWxkdwlgMio0YCgkY3R4KSwkQmhpCisJbGR3CWAzKjRgKCRjdHgpLCRCbG8KKwlsZHcJYDQqNGAoJGN0eCksJENoaQorCWxkdwlgNSo0YCgkY3R4KSwkQ2xvCisJbGR3CWA2KjRgKCRjdHgpLCREaGkKKwlsZHcJYDcqNGAoJGN0eCksJERsbworCWxkdwlgOCo0YCgkY3R4KSwkRWhpCisJbGR3CWA5KjRgKCRjdHgpLCRFbG8KKwlsZHcJYDEwKjRgKCRjdHgpLCRGaGkKKwlsZHcJYDExKjRgKCRjdHgpLCRGbG8KKwlsZHcJYDEyKjRgKCRjdHgpLCRHaGkKKwlsZHcJYDEzKjRgKCRjdHgpLCRHbG8KKwlsZHcJYDE0KjRgKCRjdHgpLCRIaGkKKwlsZHcJYDE1KjRgKCRjdHgpLCRIbG8KKworCWV4dHJ1CSRpbnAsMzEsMiwkdDAKKwlzaDNhZGRsCSR0MCwlcjAsJHQwCisJc3ViaQkzMiwkdDAsJHQwCisJbXRjdGwJJHQwLCVjcjExCQk7IGxvYWQgJXNhciB3aXRoIGFsaWduIGZhY3RvcgorCitMXCRvb3BfcGExCisJZXh0cnUJJGlucCwzMSwyLCRhMworCWNvbWliLD0JMCwkYTMsTFwkYWxpZ25lZF9wYTEKKwlzdWIJJGlucCwkYTMsJGlucAorCisJbGR3CWAwKjRgKCRpbnApLCRYWzBdCisJbGR3CWAxKjRgKCRpbnApLCRYWzFdCisJbGR3CWAyKjRgKCRpbnApLCR0MgorCWxkdwlgMyo0YCgkaW5wKSwkdDMKKwlsZHcJYDQqNGAoJGlucCksJGEwCisJbGR3CWA1KjRgKCRpbnApLCRhMQorCWxkdwlgNio0YCgkaW5wKSwkYTIKKwlsZHcJYDcqNGAoJGlucCksJGEzCisJdnNoZAkkWFswXSwkWFsxXSwkWFswXQorCXZzaGQJJFhbMV0sJHQyLCRYWzFdCisJc3R3CSRYWzBdLGAtJFhPRkYrMCo0YCglc3ApCisJbGR3CWA4KjRgKCRpbnApLCR0MAorCXZzaGQJJHQyLCR0MywkdDIKKwlzdHcJJFhbMV0sYC0kWE9GRisxKjRgKCVzcCkKKwlsZHcJYDkqNGAoJGlucCksJHQxCisJdnNoZAkkdDMsJGEwLCR0MworX19fCit7CitteSBAdD0oJHQyLCR0MywkYTAsJGExLCRhMiwkYTMsJHQwLCR0MSk7Citmb3IgKCRpPTI7JGk8PSgxMjgvNC04KTskaSsrKSB7CiskY29kZS49PDxfX187CisJc3R3CSR0WzBdLGAtJFhPRkYrJGkqNGAoJXNwKQorCWxkdwlgKDgrJGkpKjRgKCRpbnApLCR0WzBdCisJdnNoZAkkdFsxXSwkdFsyXSwkdFsxXQorX19fCitwdXNoKEB0LHNoaWZ0KEB0KSk7Cit9Citmb3IgKDskaTwoMTI4LzQtMSk7JGkrKykgeworJGNvZGUuPTw8X19fOworCXN0dwkkdFswXSxgLSRYT0ZGKyRpKjRgKCVzcCkKKwl2c2hkCSR0WzFdLCR0WzJdLCR0WzFdCitfX18KK3B1c2goQHQsc2hpZnQoQHQpKTsKK30KKyRjb2RlLj08PF9fXzsKKwliCUxcJGNvbGxlY3RlZF9wYTEKKwlzdHcJJHRbMF0sYC0kWE9GRiskaSo0YCglc3ApCisKK19fXworfQorJGNvZGUuPTw8X19fOworTFwkYWxpZ25lZF9wYTEKKwlsZHcJYDAqNGAoJGlucCksJFhbMF0KKwlsZHcJYDEqNGAoJGlucCksJFhbMV0KKwlsZHcJYDIqNGAoJGlucCksJHQyCisJbGR3CWAzKjRgKCRpbnApLCR0MworCWxkdwlgNCo0YCgkaW5wKSwkYTAKKwlsZHcJYDUqNGAoJGlucCksJGExCisJbGR3CWA2KjRgKCRpbnApLCRhMgorCWxkdwlgNyo0YCgkaW5wKSwkYTMKKwlzdHcJJFhbMF0sYC0kWE9GRiswKjRgKCVzcCkKKwlsZHcJYDgqNGAoJGlucCksJHQwCisJc3R3CSRYWzFdLGAtJFhPRkYrMSo0YCglc3ApCisJbGR3CWA5KjRgKCRpbnApLCR0MQorX19fCit7CitteSBAdD0oJHQyLCR0MywkYTAsJGExLCRhMiwkYTMsJHQwLCR0MSk7Citmb3IgKCRpPTI7JGk8KDEyOC80LTgpOyRpKyspIHsKKyRjb2RlLj08PF9fXzsKKwlzdHcJJHRbMF0sYC0kWE9GRiskaSo0YCglc3ApCisJbGR3CWAoOCskaSkqNGAoJGlucCksJHRbMF0KK19fXworcHVzaChAdCxzaGlmdChAdCkpOworfQorZm9yICg7JGk8MTI4LzQ7JGkrKykgeworJGNvZGUuPTw8X19fOworCXN0dwkkdFswXSxgLSRYT0ZGKyRpKjRgKCVzcCkKK19fXworcHVzaChAdCxzaGlmdChAdCkpOworfQorJGNvZGUuPSJMXCRjb2xsZWN0ZWRfcGExXG4iOworfQorCitmb3IoJGk9MDskaTwxNjskaSsrKQl7ICZST1VORF8wMF8xNV9wYTEoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9CiskY29kZS49IkxcJHJvdW5kc19wYTFcbiI7Citmb3IoOyRpPDMyOyRpKyspCXsgJlJPVU5EXzE2X3h4X3BhMSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KKworJGNvZGUuPTw8X19fOworCSRQT1AJYC0kRlJBTUVfTUFSS0VSLTIqJFNJWkVfVGAoJXNwKSwkY3R4CTsgcmVzdG9yZSBhcmd1bWVudHMKKwkkUE9QCWAtJEZSQU1FX01BUktFUi0zKiRTSVpFX1RgKCVzcCksJGlucAorCSRQT1AJYC0kRlJBTUVfTUFSS0VSLTQqJFNJWkVfVGAoJXNwKSwkbnVtCisJbGRvCWAtJHJvdW5kcyokU1pgKCRUYmwpLCRUYmwJCTsgcmV3aW5kICRUYmwKKworCWxkdwlgMCo0YCgkY3R4KSwkdDEJCTsgdXBkYXRlIGNvbnRleHQKKwlsZHcJYDEqNGAoJGN0eCksJHQwCisJbGR3CWAyKjRgKCRjdHgpLCR0MworCWxkdwlgMyo0YCgkY3R4KSwkdDIKKwlsZHcJYDQqNGAoJGN0eCksJGExCisJbGR3CWA1KjRgKCRjdHgpLCRhMAorCWxkdwlgNio0YCgkY3R4KSwkYTMKKwlhZGQJJHQwLCRBbG8sJEFsbworCWxkdwlgNyo0YCgkY3R4KSwkYTIKKwlhZGRjCSR0MSwkQWhpLCRBaGkKKwlsZHcJYDgqNGAoJGN0eCksJHQxCisJYWRkCSR0MiwkQmxvLCRCbG8KKwlsZHcJYDkqNGAoJGN0eCksJHQwCisJYWRkYwkkdDMsJEJoaSwkQmhpCisJbGR3CWAxMCo0YCgkY3R4KSwkdDMKKwlhZGQJJGEwLCRDbG8sJENsbworCWxkdwlgMTEqNGAoJGN0eCksJHQyCisJYWRkYwkkYTEsJENoaSwkQ2hpCisJbGR3CWAxMio0YCgkY3R4KSwkYTEKKwlhZGQJJGEyLCREbG8sJERsbworCWxkdwlgMTMqNGAoJGN0eCksJGEwCisJYWRkYwkkYTMsJERoaSwkRGhpCisJbGR3CWAxNCo0YCgkY3R4KSwkYTMKKwlhZGQJJHQwLCRFbG8sJEVsbworCWxkdwlgMTUqNGAoJGN0eCksJGEyCisJYWRkYwkkdDEsJEVoaSwkRWhpCisJc3R3CSRBaGksYDAqNGAoJGN0eCkKKwlhZGQJJHQyLCRGbG8sJEZsbworCXN0dwkkQWxvLGAxKjRgKCRjdHgpCisJYWRkYwkkdDMsJEZoaSwkRmhpCisJc3R3CSRCaGksYDIqNGAoJGN0eCkKKwlhZGQJJGEwLCRHbG8sJEdsbworCXN0dwkkQmxvLGAzKjRgKCRjdHgpCisJYWRkYwkkYTEsJEdoaSwkR2hpCisJc3R3CSRDaGksYDQqNGAoJGN0eCkKKwlhZGQJJGEyLCRIbG8sJEhsbworCXN0dwkkQ2xvLGA1KjRgKCRjdHgpCisJYWRkYwkkYTMsJEhoaSwkSGhpCisJc3R3CSREaGksYDYqNGAoJGN0eCkKKwlsZG8JYDE2KiRTWmAoJGlucCksJGlucAk7IGFkdmFuY2UgJGlucAorCXN0dwkkRGxvLGA3KjRgKCRjdHgpCisJc3R3CSRFaGksYDgqNGAoJGN0eCkKKwlzdHcJJEVsbyxgOSo0YCgkY3R4KQorCXN0dwkkRmhpLGAxMCo0YCgkY3R4KQorCXN0dwkkRmxvLGAxMSo0YCgkY3R4KQorCXN0dwkkR2hpLGAxMio0YCgkY3R4KQorCXN0dwkkR2xvLGAxMyo0YCgkY3R4KQorCXN0dwkkSGhpLGAxNCo0YCgkY3R4KQorCWNvbWIsPQkkaW5wLCRudW0sTFwkZG9uZQorCXN0dwkkSGxvLGAxNSo0YCgkY3R4KQorCWIJTFwkb29wX3BhMQorCSRQVVNICSRpbnAsYC0kRlJBTUVfTUFSS0VSLTMqJFNJWkVfVGAoJXNwKQk7IHNhdmUgJGlucAorTFwkZG9uZQorX19fCit9fQorJGNvZGUuPTw8X19fOworCSRQT1AJYC0kRlJBTUUtJFNBVkVEX1JQYCglc3ApLCVyMgkJOyBzdGFuZGFyZCBlcGlsb2d1ZQorCSRQT1AJYC0kRlJBTUUrMSokU0laRV9UYCglc3ApLCVyNAorCSRQT1AJYC0kRlJBTUUrMiokU0laRV9UYCglc3ApLCVyNQorCSRQT1AJYC0kRlJBTUUrMyokU0laRV9UYCglc3ApLCVyNgorCSRQT1AJYC0kRlJBTUUrNCokU0laRV9UYCglc3ApLCVyNworCSRQT1AJYC0kRlJBTUUrNSokU0laRV9UYCglc3ApLCVyOAorCSRQT1AJYC0kRlJBTUUrNiokU0laRV9UYCglc3ApLCVyOQorCSRQT1AJYC0kRlJBTUUrNyokU0laRV9UYCglc3ApLCVyMTAKKwkkUE9QCWAtJEZSQU1FKzgqJFNJWkVfVGAoJXNwKSwlcjExCisJJFBPUAlgLSRGUkFNRSs5KiRTSVpFX1RgKCVzcCksJXIxMgorCSRQT1AJYC0kRlJBTUUrMTAqJFNJWkVfVGAoJXNwKSwlcjEzCisJJFBPUAlgLSRGUkFNRSsxMSokU0laRV9UYCglc3ApLCVyMTQKKwkkUE9QCWAtJEZSQU1FKzEyKiRTSVpFX1RgKCVzcCksJXIxNQorCSRQT1AJYC0kRlJBTUUrMTMqJFNJWkVfVGAoJXNwKSwlcjE2CisJJFBPUAlgLSRGUkFNRSsxNCokU0laRV9UYCglc3ApLCVyMTcKKwkkUE9QCWAtJEZSQU1FKzE1KiRTSVpFX1RgKCVzcCksJXIxOAorCWJ2CSglcjIpCisJLkVYSVQKKwkkUE9QTUIJLSRGUkFNRSglc3ApLCVyMworCS5QUk9DRU5ECisJLlNUUklOR1ogIlNIQWA2NCokU1pgIGJsb2NrIHRyYW5zZm9ybSBmb3IgUEEtUklTQywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKK19fXworCisjIEV4cGxpY2l0bHkgZW5jb2RlIFBBLVJJU0MgMi4wIGluc3RydWN0aW9ucyB1c2VkIGluIHRoaXMgbW9kdWxlLCBzbworIyB0aGF0IGl0IGNhbiBiZSBjb21waWxlZCB3aXRoIC5MRVZFTCAxLjAuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IEkKKyMgd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLCBpZiBHTlUgYXNzZW1ibGVyIHVuZGVyc3Rvb2QgLkFMTE9XIDIuMAorIyBkaXJlY3RpdmUuLi4KKworbXkgJGxkZCA9IHN1YiB7CisgIG15ICgkbW9kLCRhcmdzKSA9IEBfOworICBteSAkb3JpZyA9ICJsZGQkbW9kXHQkYXJncyI7CisKKyAgICBpZiAoJGFyZ3MgPX4gLyhcLT9bMC05XSspXCglcihbMC05XSspXCksJXIoWzAtOV0rKS8pICMgZm9ybWF0IDMgc3VmZmljZXMKKyAgICB7CW15ICRvcGNvZGU9KDB4MTQ8PDI2KXwoJDI8PDIxKXwoJDM8PDE2KXwoKCQxJjB4MUZGOCk8PDEpfCgoJDE+PjEzKSYxKTsKKwkkb3Bjb2RlfD0oMTw8MykgaWYgKCRtb2QgPX4gL14sbS8pOworCSRvcGNvZGV8PSgxPDwyKSBpZiAoJG1vZCA9fiAvXixtYi8pOworCXNwcmludGYgIlx0LldPUkRcdDB4JTA4eFx0OyAlcyIsJG9wY29kZSwkb3JpZzsKKyAgICB9CisgICAgZWxzZSB7ICJcdCIuJG9yaWc7IH0KK307CisKK215ICRzdGQgPSBzdWIgeworICBteSAoJG1vZCwkYXJncykgPSBAXzsKKyAgbXkgJG9yaWcgPSAic3RkJG1vZFx0JGFyZ3MiOworCisgICAgaWYgKCRhcmdzID1+IC8lcihbMC05XSspLChcLT9bMC05XSspXCglcihbMC05XSspXCkvKSAjIGZvcm1hdCAzIHN1ZmZpY2VzCisgICAgewlteSAkb3Bjb2RlPSgweDFjPDwyNil8KCQzPDwyMSl8KCQxPDwxNil8KCgkMiYweDFGRjgpPDwxKXwoKCQyPj4xMykmMSk7CisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNlIHsgIlx0Ii4kb3JpZzsgfQorfTsKKworbXkgJGV4dHJkID0gc3ViIHsKKyAgbXkgKCRtb2QsJGFyZ3MpID0gQF87CisgIG15ICRvcmlnID0gImV4dHJkJG1vZFx0JGFyZ3MiOworCisgICAgIyBJIG9ubHkgaGF2ZSAiLHUiIGNvbXBsZXRlciwgaXQncyBpbXBsaWNpdGx5IGVuY29kZWQuLi4KKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksKFswLTldKyksKFswLTldKyksJXIoWzAtOV0rKS8pCSMgZm9ybWF0IDE1CisgICAgewlteSAkb3Bjb2RlPSgweDM2PDwyNil8KCQxPDwyMSl8KCQ0PDwxNik7CisJbXkgJGxlbj0zMi0kMzsKKwkkb3Bjb2RlIHw9ICgoJDImMHgyMCk8PDYpfCgoJDImMHgxZik8PDUpOwkJIyBlbmNvZGUgcG9zCisJJG9wY29kZSB8PSAoKCRsZW4mMHgyMCk8PDcpfCgkbGVuJjB4MWYpOwkJIyBlbmNvZGUgbGVuCisJc3ByaW50ZiAiXHQuV09SRFx0MHglMDh4XHQ7ICVzIiwkb3Bjb2RlLCRvcmlnOworICAgIH0KKyAgICBlbHNpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksJXNhciwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTIKKyAgICB7CW15ICRvcGNvZGU9KDB4MzQ8PDI2KXwoJDE8PDIxKXwoJDM8PDE2KXwoMjw8MTEpfCgxPDw5KTsKKwlteSAkbGVuPTMyLSQyOworCSRvcGNvZGUgfD0gKCgkbGVuJjB4MjApPDwzKXwoJGxlbiYweDFmKTsJCSMgZW5jb2RlIGxlbgorCSRvcGNvZGUgfD0gKDE8PDEzKSBpZiAoJG1vZCA9fiAvLFwqKj0vKTsKKwlzcHJpbnRmICJcdC5XT1JEXHQweCUwOHhcdDsgJXMiLCRvcGNvZGUsJG9yaWc7CisgICAgfQorICAgIGVsc2UgeyAiXHQiLiRvcmlnOyB9Cit9OworCitteSAkc2hycGQgPSBzdWIgeworICBteSAoJG1vZCwkYXJncykgPSBAXzsKKyAgbXkgJG9yaWcgPSAic2hycGQkbW9kXHQkYXJncyI7CisKKyAgICBpZiAoJGFyZ3MgPX4gLyVyKFswLTldKyksJXIoWzAtOV0rKSwoWzAtOV0rKSwlcihbMC05XSspLykJIyBmb3JtYXQgMTQKKyAgICB7CW15ICRvcGNvZGU9KDB4MzQ8PDI2KXwoJDI8PDIxKXwoJDE8PDE2KXwoMTw8MTApfCQ0OworCW15ICRjcG9zPTYzLSQzOworCSRvcGNvZGUgfD0gKCgkY3BvcyYweDIwKTw8Nil8KCgkY3BvcyYweDFmKTw8NSk7CQkjIGVuY29kZSBzYQorCXNwcmludGYgIlx0LldPUkRcdDB4JTA4eFx0OyAlcyIsJG9wY29kZSwkb3JpZzsKKyAgICB9CisgICAgZWxzaWYgKCRhcmdzID1+IC8lcihbMC05XSspLCVyKFswLTldKyksJXNhciwlcihbMC05XSspLykJIyBmb3JtYXQgMTEKKyAgICB7CXNwcmludGYgIlx0LldPUkRcdDB4JTA4eFx0OyAlcyIsCisJCSgweDM0PDwyNil8KCQyPDwyMSl8KCQxPDwxNil8KDE8PDkpfCQzLCRvcmlnOworICAgIH0KKyAgICBlbHNlIHsgIlx0Ii4kb3JpZzsgfQorfTsKKworc3ViIGFzc2VtYmxlIHsKKyAgbXkgKCRtbmVtb25pYywkbW9kLCRhcmdzKT1AXzsKKyAgbXkgJG9wY29kZSA9IGV2YWwoIlwkJG1uZW1vbmljIik7CisKKyAgICByZWYoJG9wY29kZSkgZXEgJ0NPREUnID8gJiRvcGNvZGUoJG1vZCwkYXJncykgOiAiXHQkbW5lbW9uaWMkbW9kXHQkYXJncyI7Cit9CisKK2ZvcmVhY2ggKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZTsKKworCXMvc2hkXHMrKCVyWzAtOV0rKSwoJXJbMC05XSspLChbMC05XSspLworCQkkMz4zMSA/IHNwcmludGYoInNoZFx0JSQyLCUkMSwlZCIsJDMtMzIpCSMgcm90YXRpb24gZm9yID49MzIKKwkJOiAgICAgICBzcHJpbnRmKCJzaGRcdCUkMSwlJDIsJWQiLCQzKS9lCQkJb3IKKwkjIHRyYW5zbGF0ZSBtYWRlIHVwIGluc3RydWN0b25zOiBfcm9yLCBfc2hyLCBfYWxpZ24sIF9zaGwKKwlzL19yb3IoXHMrKSglclswLTldKyksLworCQkoJFNaPT00ID8gInNoZCIgOiAic2hycGQiKS4iJDEkMiwkMiwiL2UJCQlvcgorCisJcy9fc2hyKFxzKyVyWzAtOV0rKSwoWzAtOV0rKSwvCisJCSRTWj09NCA/IHNwcmludGYoImV4dHJ1JXMsJWQsJWQsIiwkMSwzMS0kMiwzMi0kMikKKwkJOiAgICAgICAgc3ByaW50ZigiZXh0cmQsdSVzLCVkLCVkLCIsJDEsNjMtJDIsNjQtJDIpL2UJb3IKKworCXMvX2FsaWduKFxzKyVyWzAtOV0rLCVyWzAtOV0rKSwvCisJCSgkU1o9PTQgPyAidnNoZCQxLCIgOiAic2hycGQkMSwlc2FyLCIpL2UJCW9yCisKKwlzL19zaGwoXHMrJXJbMC05XSspLChbMC05XSspLC8KKwkJJFNJWkVfVD09NCA/IHNwcmludGYoInpkZXAlcywlZCwlZCwiLCQxLDMxLSQyLDMyLSQyKQorCQk6ICAgICAgICAgICAgc3ByaW50ZigiZGVwZCx6JXMsJWQsJWQsIiwkMSw2My0kMiw2NC0kMikvZTsKKworCXMvXlxzKyhbYS16XSspKFtcU10qKVxzKyhbXFNdKikvJmFzc2VtYmxlKCQxLCQyLCQzKS9lIGlmICgkU0laRV9UPT00KTsKKworCXMvY21wYixcKi9jb21iLC8gaWYgKCRTSVpFX1Q9PTQpOworCisJcHJpbnQgJF8sIlxuIjsKK30KKworY2xvc2UgU1RET1VUOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXBwYy5wbCBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1wcGMucGwKaW5kZXggNzY4YTZhNi4uNmI0NGE2OCAxMDA3NTUKLS0tIGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXBwYy5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItcHBjLnBsCkBAIC00MCw2ICs0MCw3IEBACiAKIGlmICgkZmxhdm91ciA9fiAvNjQvKSB7CiAJJFNJWkVfVD04OworCSRMUlNBVkU9MiokU0laRV9UOwogCSRTVFU9InN0ZHUiOwogCSRVQ01QPSJjbXBsZCI7CiAJJFNITD0ic2xkaSI7CkBAIC00Nyw2ICs0OCw3IEBACiAJJFBVU0g9InN0ZCI7CiB9IGVsc2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CiAJJFNJWkVfVD00OworCSRMUlNBVkU9JFNJWkVfVDsKIAkkU1RVPSJzdHd1IjsKIAkkVUNNUD0iY21wbHciOwogCSRTSEw9InNsd2kiOwpAQCAtODcsNyArODksOCBAQAogCSRTSFI9InNyd2kiOwogfQogCi0kRlJBTUU9MzIqJFNJWkVfVDsKKyRGUkFNRT0zMiokU0laRV9UKzE2KiRTWjsKKyRMT0NBTFM9NiokU0laRV9UOwogCiAkc3AgPSJyMSI7CiAkdG9jPSJyMiI7CkBAIC0xNzksMTMgKzE4MiwxMiBAQAogLmdsb2JsCSRmdW5jCiAuYWxpZ24JNgogJGZ1bmM6CisJJFNUVQkkc3AsLSRGUkFNRSgkc3ApCiAJbWZscglyMAotCSRTVFUJJHNwLGAtKCRGUkFNRSsxNiokU1opYCgkc3ApCiAJJFNITAkkbnVtLCRudW0sYGxvZygxNiokU1opL2xvZygyKWAKIAogCSRQVVNICSRjdHgsYCRGUkFNRS0kU0laRV9UKjIyYCgkc3ApCiAKLQkkUFVTSAlyMCxgJEZSQU1FLSRTSVpFX1QqMjFgKCRzcCkKIAkkUFVTSAkkdG9jLGAkRlJBTUUtJFNJWkVfVCoyMGAoJHNwKQogCSRQVVNICXIxMyxgJEZSQU1FLSRTSVpFX1QqMTlgKCRzcCkKIAkkUFVTSAlyMTQsYCRGUkFNRS0kU0laRV9UKjE4YCgkc3ApCkBAIC0yMDYsNiArMjA4LDcgQEAKIAkkUFVTSAlyMjksYCRGUkFNRS0kU0laRV9UKjNgKCRzcCkKIAkkUFVTSAlyMzAsYCRGUkFNRS0kU0laRV9UKjJgKCRzcCkKIAkkUFVTSAlyMzEsYCRGUkFNRS0kU0laRV9UKjFgKCRzcCkKKwkkUFVTSAlyMCxgJEZSQU1FKyRMUlNBVkVgKCRzcCkKIAogCSRMRAkkQSxgMCokU1pgKCRjdHgpCiAJbXIJJGlucCxyNAkJCQk7IGluY2FybmF0ZSAkaW5wCkBAIC0yMTcsNyArMjIwLDcgQEAKIAkkTEQJJEcsYDYqJFNaYCgkY3R4KQogCSRMRAkkSCxgNyokU1pgKCRjdHgpCiAKLQliCUxQSUNtZXVwCisJYmwJTFBJQ21ldXAKIExQSUNlZHVwOgogCWFuZGkuCXIwLCRpbnAsMwogCWJuZQlMdW5hbGlnbmVkCkBAIC0yMjYsOCArMjI5LDYwIEBACiAJJFBVU0gJJG51bSxgJEZSQU1FLSRTSVpFX1QqMjRgKCRzcCkJOyBlbmQgcG9pbnRlcgogCSRQVVNICSRpbnAsYCRGUkFNRS0kU0laRV9UKjIzYCgkc3ApCTsgaW5wIHBvaW50ZXIKIAlibAlMc2hhMl9ibG9ja19wcml2YXRlCisJYglMZG9uZQorCis7IFBvd2VyUEMgc3BlY2lmaWNhdGlvbiBhbGxvd3MgYW4gaW1wbGVtZW50YXRpb24gdG8gYmUgaWxsLWJlaGF2ZWQKKzsgdXBvbiB1bmFsaWduZWQgYWNjZXNzIHdoaWNoIGNyb3NzZXMgcGFnZSBib3VuZGFyeS4gIkJldHRlciBzYWZlCis7IHRoYW4gc29ycnkiIHByaW5jaXBsZSBtYWtlcyBtZSB0cmVhdCBpdCBzcGVjaWFsbHkuIEJ1dCBJIGRvbid0Cis7IGxvb2sgZm9yIHBhcnRpY3VsYXIgb2ZmZW5kaW5nIHdvcmQsIGJ1dCByYXRoZXIgZm9yIHRoZSBpbnB1dAorOyBibG9jayB3aGljaCBjcm9zc2VzIHRoZSBib3VuZGFyeS4gT25jZSBmb3VuZCB0aGF0IGJsb2NrIGlzIGFsaWduZWQKKzsgYW5kIGhhc2hlZCBzZXBhcmF0ZWx5Li4uCisuYWxpZ24JNAorTHVuYWxpZ25lZDoKKwlzdWJmaWMJJHQxLCRpbnAsNDA5NgorCWFuZGkuCSR0MSwkdDEsYDQwOTYtMTYqJFNaYAk7IGRpc3RhbmNlIHRvIGNsb3Nlc3QgcGFnZSBib3VuZGFyeQorCWJlcQlMY3Jvc3NfcGFnZQorCSRVQ01QCSRudW0sJHQxCisJYmxlLQlMYWxpZ25lZAkJOyBkaWRuJ3QgY3Jvc3MgdGhlIHBhZ2UgYm91bmRhcnkKKwlzdWJmYwkkbnVtLCR0MSwkbnVtCisJYWRkCSR0MSwkaW5wLCR0MQorCSRQVVNICSRudW0sYCRGUkFNRS0kU0laRV9UKjI1YCgkc3ApCTsgc2F2ZSByZWFsIHJlbWFpbmluZyBudW0KKwkkUFVTSAkkdDEsYCRGUkFNRS0kU0laRV9UKjI0YCgkc3ApCTsgaW50ZXJtZWRpYXRlIGVuZCBwb2ludGVyCisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjNgKCRzcCkJOyBpbnAgcG9pbnRlcgorCWJsCUxzaGEyX2Jsb2NrX3ByaXZhdGUKKwk7ICRpbnAgZXF1YWxzIHRvIHRoZSBpbnRlcm1lZGlhdGUgZW5kIHBvaW50ZXIgaGVyZQorCSRQT1AJJG51bSxgJEZSQU1FLSRTSVpFX1QqMjVgKCRzcCkJOyByZXN0b3JlIHJlYWwgcmVtYWluaW5nIG51bQorTGNyb3NzX3BhZ2U6CisJbGkJJHQxLGAxNiokU1ovNGAKKwltdGN0cgkkdDEKKwlhZGRpCXIyMCwkc3AsJExPQ0FMUwkJCTsgYWxpZ25lZCBzcG90IGJlbG93IHRoZSBmcmFtZQorTG1lbWNweToKKwlsYnoJcjE2LDAoJGlucCkKKwlsYnoJcjE3LDEoJGlucCkKKwlsYnoJcjE4LDIoJGlucCkKKwlsYnoJcjE5LDMoJGlucCkKKwlhZGRpCSRpbnAsJGlucCw0CisJc3RiCXIxNiwwKHIyMCkKKwlzdGIJcjE3LDEocjIwKQorCXN0YglyMTgsMihyMjApCisJc3RiCXIxOSwzKHIyMCkKKwlhZGRpCXIyMCxyMjAsNAorCWJkbnoJTG1lbWNweQorCisJJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjZgKCRzcCkJOyBzYXZlIHJlYWwgaW5wCisJYWRkaQkkdDEsJHNwLGAkTE9DQUxTKzE2KiRTWmAJOyBmaWN0aXRpb3VzIGVuZCBwb2ludGVyCisJYWRkaQkkaW5wLCRzcCwkTE9DQUxTCQk7IGZpY3RpdGlvdXMgaW5wIHBvaW50ZXIKKwkkUFVTSAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHNhdmUgcmVhbCBudW0KKwkkUFVTSAkkdDEsYCRGUkFNRS0kU0laRV9UKjI0YCgkc3ApCTsgZW5kIHBvaW50ZXIKKwkkUFVTSAkkaW5wLGAkRlJBTUUtJFNJWkVfVCoyM2AoJHNwKQk7IGlucCBwb2ludGVyCisJYmwJTHNoYTJfYmxvY2tfcHJpdmF0ZQorCSRQT1AJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjZgKCRzcCkJOyByZXN0b3JlIHJlYWwgaW5wCisJJFBPUAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHJlc3RvcmUgcmVhbCBudW0KKwlhZGRpYy4JJG51bSwkbnVtLGAtMTYqJFNaYAkJOyBudW0tLQorCWJuZS0JTHVuYWxpZ25lZAorCiBMZG9uZToKLQkkUE9QCXIwLGAkRlJBTUUtJFNJWkVfVCoyMWAoJHNwKQorCSRQT1AJcjAsYCRGUkFNRSskTFJTQVZFYCgkc3ApCiAJJFBPUAkkdG9jLGAkRlJBTUUtJFNJWkVfVCoyMGAoJHNwKQogCSRQT1AJcjEzLGAkRlJBTUUtJFNJWkVfVCoxOWAoJHNwKQogCSRQT1AJcjE0LGAkRlJBTUUtJFNJWkVfVCoxOGAoJHNwKQpAQCAtMjQ5LDY0ICszMDQsMTIgQEAKIAkkUE9QCXIzMCxgJEZSQU1FLSRTSVpFX1QqMmAoJHNwKQogCSRQT1AJcjMxLGAkRlJBTUUtJFNJWkVfVCoxYCgkc3ApCiAJbXRscglyMAotCWFkZGkJJHNwLCRzcCxgJEZSQU1FKzE2KiRTWmAKKwlhZGRpCSRzcCwkc3AsJEZSQU1FCiAJYmxyCi1fX18KKwkubG9uZwkwCisJLmJ5dGUJMCwxMiw0LDEsMHg4MCwxOCwzLDAKKwkubG9uZwkwCiAKLSMgUG93ZXJQQyBzcGVjaWZpY2F0aW9uIGFsbG93cyBhbiBpbXBsZW1lbnRhdGlvbiB0byBiZSBpbGwtYmVoYXZlZAotIyB1cG9uIHVuYWxpZ25lZCBhY2Nlc3Mgd2hpY2ggY3Jvc3NlcyBwYWdlIGJvdW5kYXJ5LiAiQmV0dGVyIHNhZmUKLSMgdGhhbiBzb3JyeSIgcHJpbmNpcGxlIG1ha2VzIG1lIHRyZWF0IGl0IHNwZWNpYWxseS4gQnV0IEkgZG9uJ3QKLSMgbG9vayBmb3IgcGFydGljdWxhciBvZmZlbmRpbmcgd29yZCwgYnV0IHJhdGhlciBmb3IgdGhlIGlucHV0Ci0jIGJsb2NrIHdoaWNoIGNyb3NzZXMgdGhlIGJvdW5kYXJ5LiBPbmNlIGZvdW5kIHRoYXQgYmxvY2sgaXMgYWxpZ25lZAotIyBhbmQgaGFzaGVkIHNlcGFyYXRlbHkuLi4KLSRjb2RlLj08PF9fXzsKLS5hbGlnbgk0Ci1MdW5hbGlnbmVkOgotCXN1YmZpYwkkdDEsJGlucCw0MDk2Ci0JYW5kaS4JJHQxLCR0MSxgNDA5Ni0xNiokU1pgCTsgZGlzdGFuY2UgdG8gY2xvc2VzdCBwYWdlIGJvdW5kYXJ5Ci0JYmVxCUxjcm9zc19wYWdlCi0JJFVDTVAJJG51bSwkdDEKLQlibGUtCUxhbGlnbmVkCQk7IGRpZG4ndCBjcm9zcyB0aGUgcGFnZSBib3VuZGFyeQotCXN1YmZjCSRudW0sJHQxLCRudW0KLQlhZGQJJHQxLCRpbnAsJHQxCi0JJFBVU0gJJG51bSxgJEZSQU1FLSRTSVpFX1QqMjVgKCRzcCkJOyBzYXZlIHJlYWwgcmVtYWluaW5nIG51bQotCSRQVVNICSR0MSxgJEZSQU1FLSRTSVpFX1QqMjRgKCRzcCkJOyBpbnRlcm1lZGlhdGUgZW5kIHBvaW50ZXIKLQkkUFVTSAkkaW5wLGAkRlJBTUUtJFNJWkVfVCoyM2AoJHNwKQk7IGlucCBwb2ludGVyCi0JYmwJTHNoYTJfYmxvY2tfcHJpdmF0ZQotCTsgJGlucCBlcXVhbHMgdG8gdGhlIGludGVybWVkaWF0ZSBlbmQgcG9pbnRlciBoZXJlCi0JJFBPUAkkbnVtLGAkRlJBTUUtJFNJWkVfVCoyNWAoJHNwKQk7IHJlc3RvcmUgcmVhbCByZW1haW5pbmcgbnVtCi1MY3Jvc3NfcGFnZToKLQlsaQkkdDEsYDE2KiRTWi80YAotCW10Y3RyCSR0MQotCWFkZGkJcjIwLCRzcCwkRlJBTUUJCQk7IGFsaWduZWQgc3BvdCBiZWxvdyB0aGUgZnJhbWUKLUxtZW1jcHk6Ci0JbGJ6CXIxNiwwKCRpbnApCi0JbGJ6CXIxNywxKCRpbnApCi0JbGJ6CXIxOCwyKCRpbnApCi0JbGJ6CXIxOSwzKCRpbnApCi0JYWRkaQkkaW5wLCRpbnAsNAotCXN0YglyMTYsMChyMjApCi0Jc3RiCXIxNywxKHIyMCkKLQlzdGIJcjE4LDIocjIwKQotCXN0YglyMTksMyhyMjApCi0JYWRkaQlyMjAscjIwLDQKLQliZG56CUxtZW1jcHkKLQotCSRQVVNICSRpbnAsYCRGUkFNRS0kU0laRV9UKjI2YCgkc3ApCTsgc2F2ZSByZWFsIGlucAotCWFkZGkJJHQxLCRzcCxgJEZSQU1FKzE2KiRTWmAJCTsgZmljdGl0aW91cyBlbmQgcG9pbnRlcgotCWFkZGkJJGlucCwkc3AsJEZSQU1FCQkJOyBmaWN0aXRpb3VzIGlucCBwb2ludGVyCi0JJFBVU0gJJG51bSxgJEZSQU1FLSRTSVpFX1QqMjVgKCRzcCkJOyBzYXZlIHJlYWwgbnVtCi0JJFBVU0gJJHQxLGAkRlJBTUUtJFNJWkVfVCoyNGAoJHNwKQk7IGVuZCBwb2ludGVyCi0JJFBVU0gJJGlucCxgJEZSQU1FLSRTSVpFX1QqMjNgKCRzcCkJOyBpbnAgcG9pbnRlcgotCWJsCUxzaGEyX2Jsb2NrX3ByaXZhdGUKLQkkUE9QCSRpbnAsYCRGUkFNRS0kU0laRV9UKjI2YCgkc3ApCTsgcmVzdG9yZSByZWFsIGlucAotCSRQT1AJJG51bSxgJEZSQU1FLSRTSVpFX1QqMjVgKCRzcCkJOyByZXN0b3JlIHJlYWwgbnVtCi0JYWRkaWMuCSRudW0sJG51bSxgLTE2KiRTWmAJCTsgbnVtLS0KLQlibmUtCUx1bmFsaWduZWQKLQliCUxkb25lCi1fX18KLQotJGNvZGUuPTw8X19fOwogLmFsaWduCTQKIExzaGEyX2Jsb2NrX3ByaXZhdGU6CiBfX18KQEAgLTM3Miw2ICszNzUsOCBAQAogCSRTVAkkSCxgNyokU1pgKCRjdHgpCiAJYm5lCUxzaGEyX2Jsb2NrX3ByaXZhdGUKIAlibHIKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAogX19fCiAKICMgVWdseSBoYWNrIGhlcmUsIGJlY2F1c2UgUFBDIGFzc2VtYmxlciBzeW50YXggc2VlbSB0byB2YXJ5IHRvbwpAQCAtMzc5LDIyICszODQsMTUgQEAKICRjb2RlLj08PF9fXzsKIC5hbGlnbgk2CiBMUElDbWV1cDoKLQlibAlMUElDCi0JYWRkaQkkVGJsLCRUYmwsYDY0LTRgCTsgImRpc3RhbmNlIiBiZXR3ZWVuIC4gYW5kIGxhc3Qgbm9wCi0JYglMUElDZWR1cAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotTFBJQzoJbWZscgkkVGJsCisJbWZscglyMAorCWJjbAkyMCwzMSxcJCs0CisJbWZscgkkVGJsCTsgdnZ2dnZ2ICJkaXN0YW5jZSIgYmV0d2VlbiAuIGFuZCAxc3QgZGF0YSBlbnRyeQorCWFkZGkJJFRibCwkVGJsLGA2NC04YAorCW10bHIJcjAKIAlibHIKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlub3AKKwkubG9uZwkwCisJLmJ5dGUJMCwxMiwweDE0LDAsMCwwLDAsMAorCS5zcGFjZQlgNjQtOSo0YAogX19fCiAkY29kZS49PDxfX18gaWYgKCRTWj09OCk7CiAJLmxvbmcJMHg0MjhhMmY5OCwweGQ3MjhhZTIyLDB4NzEzNzQ0OTEsMHgyM2VmNjVjZApkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXMzOTB4LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXMzOTB4LnBsCmluZGV4IGU3ZWYyZDUuLjA3OWEzZmMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1zMzkweC5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItczM5MHgucGwKQEAgLTI2LDYgKzI2LDI2IEBACiAjIGZhdm91ciBkdWFsLWlzc3VlIHoxMCBwaXBlbGluZS4gSGFyZHdhcmUgU0hBMjU2LzUxMiBpcyB+NC43eCBmYXN0ZXIKICMgdGhhbiBzb2Z0d2FyZS4KIAorIyBOb3ZlbWJlciAyMDEwLgorIworIyBBZGFwdCBmb3IgLW0zMSBidWlsZC4gSWYga2VybmVsIHN1cHBvcnRzIHdoYXQncyBjYWxsZWQgImhpZ2hncHJzIgorIyBmZWF0dXJlIG9uIExpbnV4IFtzZWUgL3Byb2MvY3B1aW5mb10sIGl0J3MgcG9zc2libGUgdG8gdXNlIDY0LWJpdAorIyBpbnN0cnVjdGlvbnMgYW5kIGFjaGlldmUgIjY0LWJpdCIgcGVyZm9ybWFuY2UgZXZlbiBpbiAzMS1iaXQgbGVnYWN5CisjIGFwcGxpY2F0aW9uIGNvbnRleHQuIFRoZSBmZWF0dXJlIGlzIG5vdCBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhcgorIyBwcm9jZXNzb3IsIGFzIGxvbmcgYXMgaXQncyAiei1DUFUiLiBMYXR0ZXIgaW1wbGllcyB0aGF0IHRoZSBjb2RlCisjIHJlbWFpbnMgei9BcmNoaXRlY3R1cmUgc3BlY2lmaWMuIE9uIHo5MDAgU0hBMjU2IHdhcyBtZWFzdXJlZCB0bworIyBwZXJmb3JtIDIuNHggYW5kIFNIQTUxMiAtIDEzeCBiZXR0ZXIgdGhhbiBjb2RlIGdlbmVyYXRlZCBieSBnY2MgNC4zLgorCiskZmxhdm91ciA9IHNoaWZ0OworCitpZiAoJGZsYXZvdXIgPX4gLzNbMTJdLykgeworCSRTSVpFX1Q9NDsKKwkkZz0iIjsKK30gZWxzZSB7CisJJFNJWkVfVD04OworCSRnPSJnIjsKK30KKwogJHQwPSIlcjAiOwogJHQxPSIlcjEiOwogJGN0eD0iJXIyIjsJJHQyPSIlcjIiOwpAQCAtNDQsNyArNjQsNyBAQAogJFQxPSIlcjE0IjsKICRzcD0iJXIxNSI7CiAKLSRvdXRwdXQ9c2hpZnQ7Cit3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQogb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKIAogaWYgKCRvdXRwdXQgPX4gLzUxMi8pIHsKQEAgLTc4LDcgKzk4LDggQEAKIH0KICRGdW5jPSJzaGEke2xhYmVsfV9ibG9ja19kYXRhX29yZGVyIjsKICRUYWJsZT0iSyR7bGFiZWx9IjsKLSRmcmFtZT0xNjArMTYqJFNaOworJHN0ZGZyYW1lPTE2KiRTSVpFX1QrNCo4OworJGZyYW1lPSRzdGRmcmFtZSsxNiokU1o7CiAKIHN1YiBCT0RZXzAwXzE1IHsKIG15ICgkaSwkYSwkYiwkYywkZCwkZSwkZiwkZywkaCkgPSBAXzsKQEAgLTkzLDkgKzExNCw5IEBACiAJeGdyCSR0MCwkdDEKIAkkUk9UCSR0MSwkdDEsYCRTaWdtYTFbMl0tJFNpZ21hMVsxXWAKIAkgeGdyCSR0MiwkZwotCSRTVAkkVDEsYDE2MCskU1oqKCRpJTE2KWAoJHNwKQorCSRTVAkkVDEsYCRzdGRmcmFtZSskU1oqKCRpJTE2KWAoJHNwKQogCXhncgkkdDAsJHQxCQkJIyBTaWdtYTEoZSkKLQlsYQkkVDEsMCgkVDEsJGgpCQkjIFQxKz1oCisJYWxncgkkVDEsJGgJCQkjIFQxKz1oCiAJIG5ncgkkdDIsJGUKIAkgbGdyCSR0MSwkYQogCWFsZ3IJJFQxLCR0MAkJCSMgVDErPVNpZ21hMShlKQpAQCAtMTEzLDcgKzEzNCw3IEBACiAJIG5ncgkkdDIsJGIKIAlhbGdyCSRoLCRUMQkJCSMgaCs9VDEKIAkgb2dyCSR0MiwkdDEJCQkjIE1haihhLGIsYykKLQlsYQkkZCwwKCRkLCRUMSkJCSMgZCs9VDEKKwlhbGdyCSRkLCRUMQkJCSMgZCs9VDEKIAlhbGdyCSRoLCR0MgkJCSMgaCs9TWFqKGEsYixjKQogX19fCiB9CkBAIC0xMjIsMTkgKzE0MywxOSBAQAogbXkgKCRpLCRhLCRiLCRjLCRkLCRlLCRmLCRnLCRoKSA9IEBfOwogCiAkY29kZS49PDxfX187Ci0JJExECSRUMSxgMTYwKyRTWiooKCRpKzEpJTE2KWAoJHNwKQkjIyMgJGkKLQkkTEQJJHQxLGAxNjArJFNaKigoJGkrMTQpJTE2KWAoJHNwKQorCSRMRAkkVDEsYCRzdGRmcmFtZSskU1oqKCgkaSsxKSUxNilgKCRzcCkJIyMjICRpCisJJExECSR0MSxgJHN0ZGZyYW1lKyRTWiooKCRpKzE0KSUxNilgKCRzcCkKIAkkUk9UCSR0MCwkVDEsJHNpZ21hMFswXQogCSRTSFIJJFQxLCRzaWdtYTBbMl0KIAkkUk9UCSR0MiwkdDAsYCRzaWdtYTBbMV0tJHNpZ21hMFswXWAKIAl4Z3IJJFQxLCR0MAogCSRST1QJJHQwLCR0MSwkc2lnbWExWzBdCi0JeGdyCSRUMSwkdDIJCQkJIyBzaWdtYTAoWFtpKzFdKQorCXhncgkkVDEsJHQyCQkJCQkjIHNpZ21hMChYW2krMV0pCiAJJFNIUgkkdDEsJHNpZ21hMVsyXQotCSRBREQJJFQxLGAxNjArJFNaKigkaSUxNilgKCRzcCkJIyArPVhbaV0KKwkkQURECSRUMSxgJHN0ZGZyYW1lKyRTWiooJGklMTYpYCgkc3ApCSMgKz1YW2ldCiAJeGdyCSR0MSwkdDAKIAkkUk9UCSR0MCwkdDAsYCRzaWdtYTFbMV0tJHNpZ21hMVswXWAKLQkkQURECSRUMSxgMTYwKyRTWiooKCRpKzkpJTE2KWAoJHNwKQkjICs9WFtpKzldCisJJEFERAkkVDEsYCRzdGRmcmFtZSskU1oqKCgkaSs5KSUxNilgKCRzcCkJIyArPVhbaSs5XQogCXhncgkkdDEsJHQwCQkJCSMgc2lnbWExKFhbaSsxNF0pCiAJYWxncgkkVDEsJHQxCQkJCSMgKz1zaWdtYTEoWFtpKzE0XSkKIF9fXwpAQCAtMjEyLDYgKzIzMyw3IEBACiAuZ2xvYmwJJEZ1bmMKIC50eXBlCSRGdW5jLFxAZnVuY3Rpb24KICRGdW5jOgorCXNsbGcJJGxlbiwkbGVuLGBsb2coMTYqJFNaKS9sb2coMilgCiBfX18KICRjb2RlLj08PF9fXyBpZiAoJGtpbWRmdW5jKTsKIAlsYXJsCSVyMSxPUEVOU1NMX3MzOTB4Y2FwX1AKQEAgLTIxOSwxNSArMjQxLDE1IEBACiAJdG1obAklcjAsMHg0MDAwCSMgY2hlY2sgZm9yIG1lc3NhZ2Utc2VjdXJpdHkgYXNzaXN0CiAJanoJLkxzb2Z0d2FyZQogCWxnaGkJJXIwLDAKLQlsYQklcjEsMTYoJHNwKQorCWxhCSVyMSxgMiokU0laRV9UYCgkc3ApCiAJLmxvbmcJMHhiOTNlMDAwMgkjIGtpbWQgJXIwLCVyMgotCWxnCSVyMCwxNigkc3ApCisJbGcJJXIwLGAyKiRTSVpFX1RgKCRzcCkKIAl0bWhoCSVyMCxgMHg4MDAwPj4ka2ltZGZ1bmNgCiAJanoJLkxzb2Z0d2FyZQogCWxnaGkJJXIwLCRraW1kZnVuYwogCWxncgklcjEsJGN0eAogCWxncgklcjIsJGlucAotCXNsbGcJJXIzLCRsZW4sYGxvZygxNiokU1opL2xvZygyKWAKKwlsZ3IJJXIzLCRsZW4KIAkubG9uZwkweGI5M2UwMDAyCSMga2ltZCAlcjAsJXIyCiAJYnJjCTEsLi00CQkjIHBheSBhdHRlbnRpb24gdG8gInBhcnRpYWwgY29tcGxldGlvbiIKIAlicgklcjE0CkBAIC0yMzUsMTMgKzI1NywxMiBAQAogLkxzb2Z0d2FyZToKIF9fXwogJGNvZGUuPTw8X19fOwotCXNsbGcJJGxlbiwkbGVuLGBsb2coMTYqJFNaKS9sb2coMilgCiAJbGdoaQklcjEsLSRmcmFtZQotCWFncgkkbGVuLCRpbnAKLQlzdG1nCSRjdHgsJXIxNSwxNigkc3ApCisJbGEJJGxlbiwwKCRsZW4sJGlucCkKKwlzdG0ke2d9CSRjdHgsJXIxNSxgMiokU0laRV9UYCgkc3ApCiAJbGdyCSVyMCwkc3AKIAlsYQkkc3AsMCglcjEsJHNwKQotCXN0ZwklcjAsMCgkc3ApCisJc3Qke2d9CSVyMCwwKCRzcCkKIAogCWxhcmwJJHRibCwkVGFibGUKIAkkTEQJJEEsYDAqJFNaYCgkY3R4KQpAQCAtMjY1LDcgKzI4Niw3IEBACiAJY2xncgkkbGVuLCR0MAogCWpuZQkuTHJvdW5kc18xNl94eAogCi0JbGcJJGN0eCxgJGZyYW1lKzE2YCgkc3ApCisJbCR7Z30JJGN0eCxgJGZyYW1lKzIqJFNJWkVfVGAoJHNwKQogCWxhCSRpbnAsYDE2KiRTWmAoJGlucCkKIAkkQURECSRBLGAwKiRTWmAoJGN0eCkKIAkkQURECSRCLGAxKiRTWmAoJGN0eCkKQEAgLTI4MywxNCArMzA0LDE0IEBACiAJJFNUCSRGLGA1KiRTWmAoJGN0eCkKIAkkU1QJJEcsYDYqJFNaYCgkY3R4KQogCSRTVAkkSCxgNyokU1pgKCRjdHgpCi0JY2xnCSRpbnAsYCRmcmFtZSszMmAoJHNwKQorCWNsJHtnfQkkaW5wLGAkZnJhbWUrNCokU0laRV9UYCgkc3ApCiAJam5lCS5MbG9vcAogCi0JbG1nCSVyNiwlcjE1LGAkZnJhbWUrNDhgKCRzcCkJCisJbG0ke2d9CSVyNiwlcjE1LGAkZnJhbWUrNiokU0laRV9UYCgkc3ApCQogCWJyCSVyMTQKIC5zaXplCSRGdW5jLC4tJEZ1bmMKIC5zdHJpbmcJIlNIQSR7bGFiZWx9IGJsb2NrIHRyYW5zZm9ybSBmb3IgczM5MHgsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi0uY29tbQlPUEVOU1NMX3MzOTB4Y2FwX1AsOCw4CisuY29tbQlPUEVOU1NMX3MzOTB4Y2FwX1AsMTYsOAogX19fCiAKICRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXNwYXJjdjkucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3BhcmN2OS5wbAppbmRleCBlYzVkNzgxLi41ODU3NDA3IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3BhcmN2OS5wbAorKysgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItc3BhcmN2OS5wbApAQCAtMzA1LDkgKzMwNSw5IEBACiAJc3JseAlAWFsoKCRpKzkpLzIpJThdLDMyLCR0bXAxCSEgWFtpKzldCiAJeG9yCSR0bXAwLCR0bXAyLCR0bXAyCQkhIHNpZ21hMShYW2krMTRdKQogCXNybAlAWFsoJGkvMiklOF0sMCwkdG1wMAorCWFkZAkkdG1wMiwkdG1wMSwkdG1wMQogCWFkZAkkeGksJFQxLCRUMQkJCSEgKz1YW2ldCiAJeG9yCSR0bXAwLEBYWygkaS8yKSU4XSxAWFsoJGkvMiklOF0KLQlhZGQJJHRtcDIsJFQxLCRUMQogCWFkZAkkdG1wMSwkVDEsJFQxCiAKIAlzcmwJJFQxLDAsJFQxCkBAIC0zMTgsOSArMzE4LDkgQEAKICRjb2RlLj08PF9fXzsKIAlzcmx4CUBYWygkaS8yKSU4XSwzMiwkdG1wMQkJISBYW2ldCiAJeG9yCSR0bXAwLCR0bXAyLCR0bXAyCQkhIHNpZ21hMShYW2krMTRdKQotCXNybAlAWFsoJGkvMiklOF0sMCxAWFsoJGkvMiklOF0KIAlhZGQJJHhpLCRUMSwkVDEJCQkhICs9WFtpKzldCi0JYWRkCSR0bXAyLCRUMSwkVDEKKwlhZGQJJHRtcDIsJHRtcDEsJHRtcDEKKwlzcmwJQFhbKCRpLzIpJThdLDAsQFhbKCRpLzIpJThdCiAJYWRkCSR0bXAxLCRUMSwkVDEKIAogCXNsbHgJJFQxLDMyLCR0bXAwCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTIteDg2XzY0LnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhNTEyLXg4Nl82NC5wbAppbmRleCBlNjY0M2Y4Li5mNjExYTJkIDEwMDc1NQotLS0gYS9jcnlwdG8vc2hhL2FzbS9zaGE1MTIteDg2XzY0LnBsCisrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi14ODZfNjQucGwKQEAgLTk1LDUwICs5NSw0NCBAQAogeyBteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpID0gQF87CiAKICRjb2RlLj08PF9fXzsKLQltb3YJJGUsJGEwCi0JbW92CSRlLCRhMQorCXJvcglcJGAkU2lnbWExWzJdLSRTaWdtYTFbMV1gLCRhMAogCW1vdgkkZiwkYTIKLQotCXJvcglcJCRTaWdtYTFbMF0sJGEwCi0Jcm9yCVwkJFNpZ21hMVsxXSwkYTEKLQl4b3IJJGcsJGEyCQkJIyBmXmcKLQotCXhvcgkkYTEsJGEwCi0Jcm9yCVwkYCRTaWdtYTFbMl0tJFNpZ21hMVsxXWAsJGExCi0JYW5kCSRlLCRhMgkJCSMgKGZeZykmZQogCW1vdgkkVDEsYCRTWiooJGkmMHhmKWAoJXJzcCkKIAotCXhvcgkkYTEsJGEwCQkJIyBTaWdtYTEoZSkKLQl4b3IJJGcsJGEyCQkJIyBDaChlLGYsZyk9KChmXmcpJmUpXmcKKwlyb3IJXCRgJFNpZ21hMFsyXS0kU2lnbWEwWzFdYCwkYTEKKwl4b3IJJGUsJGEwCisJeG9yCSRnLCRhMgkJCSMgZl5nCisKKwlyb3IJXCRgJFNpZ21hMVsxXS0kU2lnbWExWzBdYCwkYTAKIAlhZGQJJGgsJFQxCQkJIyBUMSs9aAorCXhvcgkkYSwkYTEKIAotCW1vdgkkYSwkaAotCWFkZAkkYTAsJFQxCQkJIyBUMSs9U2lnbWExKGUpCi0KLQlhZGQJJGEyLCRUMQkJCSMgVDErPUNoKGUsZixnKQotCW1vdgkkYSwkYTAKLQltb3YJJGEsJGExCi0KLQlyb3IJXCQkU2lnbWEwWzBdLCRoCi0Jcm9yCVwkJFNpZ21hMFsxXSwkYTAKLQltb3YJJGEsJGEyCiAJYWRkCSgkVGJsLCRyb3VuZCwkU1opLCRUMQkjIFQxKz1LW3JvdW5kXQorCWFuZAkkZSwkYTIJCQkjIChmXmcpJmUKKwltb3YJJGIsJGgKIAotCXhvcgkkYTAsJGgKLQlyb3IJXCRgJFNpZ21hMFsyXS0kU2lnbWEwWzFdYCwkYTAKLQlvcgkkYywkYTEJCQkjIGF8YworCXJvcglcJGAkU2lnbWEwWzFdLSRTaWdtYTBbMF1gLCRhMQorCXhvcgkkZSwkYTAKKwl4b3IJJGcsJGEyCQkJIyBDaChlLGYsZyk9KChmXmcpJmUpXmcKIAotCXhvcgkkYTAsJGgJCQkjIGg9U2lnbWEwKGEpCi0JYW5kCSRjLCRhMgkJCSMgYSZjCisJeG9yCSRjLCRoCQkJIyBiXmMKKwl4b3IJJGEsJGExCisJYWRkCSRhMiwkVDEJCQkjIFQxKz1DaChlLGYsZykKKwltb3YJJGIsJGEyCisKKwlyb3IJXCQkU2lnbWExWzBdLCRhMAkjIFNpZ21hMShlKQorCWFuZAkkYSwkaAkJCSMgaD0oYl5jKSZhCisJYW5kCSRjLCRhMgkJCSMgYiZjCisKKwlyb3IJXCQkU2lnbWEwWzBdLCRhMQkjIFNpZ21hMChhKQorCWFkZAkkYTAsJFQxCQkJIyBUMSs9U2lnbWExKGUpCisJYWRkCSRhMiwkaAkJCSMgaCs9YiZjIChjb21wbGV0ZXMgKz1NYWooYSxiLGMpCisKIAlhZGQJJFQxLCRkCQkJIyBkKz1UMQotCi0JYW5kCSRiLCRhMQkJCSMgKGF8YykmYgogCWFkZAkkVDEsJGgJCQkjIGgrPVQxCi0KLQlvcgkkYTIsJGExCQkJIyBNYWooYSxiLGMpPSgoYXxjKSZiKXwoYSZjKQogCWxlYQkxKCRyb3VuZCksJHJvdW5kCSMgcm91bmQrKworCWFkZAkkYTEsJGgJCQkjIGgrPVNpZ21hMChhKQogCi0JYWRkCSRhMSwkaAkJCSMgaCs9TWFqKGEsYixjKQogX19fCiB9CiAKQEAgLTE0NywzMiArMTQxLDMwIEBACiAKICRjb2RlLj08PF9fXzsKIAltb3YJYCRTWiooKCRpKzEpJjB4ZilgKCVyc3ApLCRhMAotCW1vdglgJFNaKigoJGkrMTQpJjB4ZilgKCVyc3ApLCRUMQorCW1vdglgJFNaKigoJGkrMTQpJjB4ZilgKCVyc3ApLCRhMQorCW1vdgkkYTAsJFQxCisJbW92CSRhMSwkYTIKIAotCW1vdgkkYTAsJGEyCi0KKwlyb3IJXCRgJHNpZ21hMFsxXS0kc2lnbWEwWzBdYCwkVDEKKwl4b3IJJGEwLCRUMQogCXNocglcJCRzaWdtYTBbMl0sJGEwCi0Jcm9yCVwkJHNpZ21hMFswXSwkYTIKIAotCXhvcgkkYTIsJGEwCi0Jcm9yCVwkYCRzaWdtYTBbMV0tJHNpZ21hMFswXWAsJGEyCisJcm9yCVwkJHNpZ21hMFswXSwkVDEKKwl4b3IJJFQxLCRhMAkJCSMgc2lnbWEwKFhbKGkrMSkmMHhmXSkKKwltb3YJYCRTWiooKCRpKzkpJjB4ZilgKCVyc3ApLCRUMQogCi0JeG9yCSRhMiwkYTAJCQkjIHNpZ21hMChYWyhpKzEpJjB4Zl0pCi0JbW92CSRUMSwkYTEKKwlyb3IJXCRgJHNpZ21hMVsxXS0kc2lnbWExWzBdYCwkYTIKKwl4b3IJJGExLCRhMgorCXNocglcJCRzaWdtYTFbMl0sJGExCiAKLQlzaHIJXCQkc2lnbWExWzJdLCRUMQotCXJvcglcJCRzaWdtYTFbMF0sJGExCi0KLQl4b3IJJGExLCRUMQotCXJvcglcJGAkc2lnbWExWzFdLSRzaWdtYTFbMF1gLCRhMQotCi0JeG9yCSRhMSwkVDEJCQkjIHNpZ21hMShYWyhpKzE0KSYweGZdKQotCisJcm9yCVwkJHNpZ21hMVswXSwkYTIKIAlhZGQJJGEwLCRUMQotCi0JYWRkCWAkU1oqKCgkaSs5KSYweGYpYCglcnNwKSwkVDEKKwl4b3IJJGEyLCRhMQkJCSMgc2lnbWExKFhbKGkrMTQpJjB4Zl0pCiAKIAlhZGQJYCRTWiooJGkmMHhmKWAoJXJzcCksJFQxCisJbW92CSRlLCRhMAorCWFkZAkkYTEsJFQxCisJbW92CSRhLCRhMQogX19fCiAJJlJPVU5EXzAwXzE1KEBfKTsKIH0KQEAgLTIxOSw2ICsyMTEsOCBAQAogX19fCiAJZm9yKCRpPTA7JGk8MTY7JGkrKykgewogCQkkY29kZS49Igltb3YJJFNaKiRpKCRpbnApLCRUMVxuIjsKKwkJJGNvZGUuPSIJbW92CUBST1RbNF0sJGEwXG4iOworCQkkY29kZS49Igltb3YJQFJPVFswXSwkYTFcbiI7CiAJCSRjb2RlLj0iCWJzd2FwCSRUMVxuIjsKIAkJJlJPVU5EXzAwXzE1KCRpLEBST1QpOwogCQl1bnNoaWZ0KEBST1QscG9wKEBST1QpKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhLmggYi9jcnlwdG8vc2hhL3NoYS5oCmluZGV4IDE2Y2FjZjkuLjhhNmJmNGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhLmgKKysrIGIvY3J5cHRvL3NoYS9zaGEuaApAQCAtMTA2LDYgKzEwNiw5IEBACiAJfSBTSEFfQ1RYOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CisjZW5kaWYKIGludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7CkBAIC0xMTMsNiArMTE2LDkgQEAKIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX1NIQTFfSW5pdChTSEFfQ1RYICpjKTsKKyNlbmRpZgogaW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKIGludCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKQEAgLTEzNSw2ICsxNDEsMTAgQEAKIAl9IFNIQTI1Nl9DVFg7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CisjZW5kaWYKIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7CkBAIC0xODIsNiArMTkyLDEwIEBACiAjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyNlbmRpZgogaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOwogaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhMWRnc3QuYyBiL2NyeXB0by9zaGEvc2hhMWRnc3QuYwppbmRleCA1MGQxOTI1Li44MTIxOWFmIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKKysrIGIvY3J5cHRvL3NoYS9zaGExZGdzdC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCiAKICN1bmRlZiAgU0hBXzAKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhMjU2LmMgYi9jcnlwdG8vc2hhL3NoYTI1Ni5jCmluZGV4IDg5NTJkODcuLmY4OGQzZDYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEvc2hhMjU2LmMKKysrIGIvY3J5cHRvL3NoYS9zaGEyNTYuYwpAQCAtMTYsNyArMTYsNyBAQAogCiBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKIAotaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQorZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKIAl7CiAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOwpAQCAtMjcsNyArMjcsNyBAQAogCXJldHVybiAxOwogCX0KIAotaW50IFNIQTI1Nl9Jbml0IChTSEEyNTZfQ1RYICpjKQorZmlwc19tZF9pbml0KFNIQTI1NikKIAl7CiAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CiAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9zaGE1MTIuYyBiL2NyeXB0by9zaGEvc2hhNTEyLmMKaW5kZXggY2JjMGU1OC4uNTBkZDdkYyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYS9zaGE1MTIuYworKysgYi9jcnlwdG8vc2hhL3NoYTUxMi5jCkBAIC01OSwyMSArNTksOCBAQAogI2RlZmluZSBTSEE1MTJfQkxPQ0tfQ0FOX01BTkFHRV9VTkFMSUdORURfREFUQQogI2VuZGlmCiAKLWludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKK2ZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCiAJewotI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCi0JLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLwotCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotCi0JaFswXSAgPSAweGNiYmI5ZDVkOyBoWzFdICA9IDB4YzEwNTllZDg7Ci0JaFsyXSAgPSAweDYyOWEyOTJhOyBoWzNdICA9IDB4MzY3Y2Q1MDc7Ci0JaFs0XSAgPSAweDkxNTkwMTVhOyBoWzVdICA9IDB4MzA3MGRkMTc7Ci0JaFs2XSAgPSAweDE1MmZlY2Q4OyBoWzddICA9IDB4ZjcwZTU5Mzk7Ci0JaFs4XSAgPSAweDY3MzMyNjY3OyBoWzldICA9IDB4ZmZjMDBiMzE7Ci0JaFsxMF0gPSAweDhlYjQ0YTg3OyBoWzExXSA9IDB4Njg1ODE1MTE7Ci0JaFsxMl0gPSAweGRiMGMyZTBkOyBoWzEzXSA9IDB4NjRmOThmYTc7Ci0JaFsxNF0gPSAweDQ3YjU0ODFkOyBoWzE1XSA9IDB4YmVmYTRmYTQ7Ci0jZWxzZQogCWMtPmhbMF09VTY0KDB4Y2JiYjlkNWRjMTA1OWVkOCk7CiAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKIAljLT5oWzJdPVU2NCgweDkxNTkwMTVhMzA3MGRkMTcpOwpAQCAtODIsMjcgKzY5LDE0IEBACiAJYy0+aFs1XT1VNjQoMHg4ZWI0NGE4NzY4NTgxNTExKTsKIAljLT5oWzZdPVU2NCgweGRiMGMyZTBkNjRmOThmYTcpOwogCWMtPmhbN109VTY0KDB4NDdiNTQ4MWRiZWZhNGZhNCk7Ci0jZW5kaWYKKwogICAgICAgICBjLT5ObD0wOyAgICAgICAgYy0+Tmg9MDsKICAgICAgICAgYy0+bnVtPTA7ICAgICAgIGMtPm1kX2xlbj1TSEEzODRfRElHRVNUX0xFTkdUSDsKICAgICAgICAgcmV0dXJuIDE7CiAJfQogCi1pbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFggKmMpCitmaXBzX21kX2luaXQoU0hBNTEyKQogCXsKLSNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQotCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KLQl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKLQotCWhbMF0gID0gMHg2YTA5ZTY2NzsgaFsxXSAgPSAweGYzYmNjOTA4OwotCWhbMl0gID0gMHhiYjY3YWU4NTsgaFszXSAgPSAweDg0Y2FhNzNiOwotCWhbNF0gID0gMHgzYzZlZjM3MjsgaFs1XSAgPSAweGZlOTRmODJiOwotCWhbNl0gID0gMHhhNTRmZjUzYTsgaFs3XSAgPSAweDVmMWQzNmYxOwotCWhbOF0gID0gMHg1MTBlNTI3ZjsgaFs5XSAgPSAweGFkZTY4MmQxOwotCWhbMTBdID0gMHg5YjA1Njg4YzsgaFsxMV0gPSAweDJiM2U2YzFmOwotCWhbMTJdID0gMHgxZjgzZDlhYjsgaFsxM10gPSAweGZiNDFiZDZiOwotCWhbMTRdID0gMHg1YmUwY2QxOTsgaFsxNV0gPSAweDEzN2UyMTc5OwotI2Vsc2UKIAljLT5oWzBdPVU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOwogCWMtPmhbMV09VTY0KDB4YmI2N2FlODU4NGNhYTczYik7CiAJYy0+aFsyXT1VNjQoMHgzYzZlZjM3MmZlOTRmODJiKTsKQEAgLTExMSw3ICs4NSw3IEBACiAJYy0+aFs1XT1VNjQoMHg5YjA1Njg4YzJiM2U2YzFmKTsKIAljLT5oWzZdPVU2NCgweDFmODNkOWFiZmI0MWJkNmIpOwogCWMtPmhbN109VTY0KDB4NWJlMGNkMTkxMzdlMjE3OSk7Ci0jZW5kaWYKKwogICAgICAgICBjLT5ObD0wOyAgICAgICAgYy0+Tmg9MDsKICAgICAgICAgYy0+bnVtPTA7ICAgICAgIGMtPm1kX2xlbj1TSEE1MTJfRElHRVNUX0xFTkdUSDsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0xNjAsMjQgKzEzNCw2IEBACiAKIAlpZiAobWQ9PTApIHJldHVybiAwOwogCi0jaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKLQkvKiByZWNhbGwgYXNzZW1ibGVyIGR3b3JkIG9yZGVyLi4uICovCi0JbiA9IGMtPm1kX2xlbjsKLQlpZiAobiA9PSBTSEEzODRfRElHRVNUX0xFTkdUSCB8fCBuID09IFNIQTUxMl9ESUdFU1RfTEVOR1RIKQotCQl7Ci0JCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oLCB0OwotCi0JCWZvciAobi89NDtuO24tLSkKLQkJCXsKLQkJCXQgPSAqKGgrKyk7Ci0JCQkqKG1kKyspID0gKHVuc2lnbmVkIGNoYXIpKHQ+PjI0KTsKLQkJCSoobWQrKykgPSAodW5zaWduZWQgY2hhcikodD4+MTYpOwotCQkJKihtZCsrKSA9ICh1bnNpZ25lZCBjaGFyKSh0Pj44KTsKLQkJCSoobWQrKykgPSAodW5zaWduZWQgY2hhcikodCk7Ci0JCQl9Ci0JCX0KLQllbHNlCXJldHVybiAwOwotI2Vsc2UKIAlzd2l0Y2ggKGMtPm1kX2xlbikKIAkJewogCQkvKiBMZXQgY29tcGlsZXIgZGVjaWRlIGlmIGl0J3MgYXBwcm9wcmlhdGUgdG8gdW5yb2xsLi4uICovCkBAIC0yMTQsNyArMTcwLDcgQEAKIAkJLyogLi4uIGFzIHdlbGwgYXMgbWFrZSBzdXJlIG1kX2xlbiBpcyBub3QgYWJ1c2VkLiAqLwogCQlkZWZhdWx0OglyZXR1cm4gMDsKIAkJfQotI2VuZGlmCisKIAlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhX2Rnc3QuYyBiL2NyeXB0by9zaGEvc2hhX2Rnc3QuYwppbmRleCA3MGViNTYwLi5jOTQ2YWQ4IDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKKysrIGIvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgogI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCiAKICN1bmRlZiAgU0hBXzEKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEvc2hhX2xvY2wuaCBiL2NyeXB0by9zaGEvc2hhX2xvY2wuaAppbmRleCA2NzJjMjZlLi43YTBjM2NhIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKKysrIGIvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCkBAIC0xMjIsNyArMTIyLDExIEBACiAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAogCi1pbnQgSEFTSF9JTklUIChTSEFfQ1RYICpjKQorI2lmZGVmIFNIQV8wCitmaXBzX21kX2luaXQoU0hBKQorI2Vsc2UKK2ZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQorI2VuZGlmCiAJewogCW1lbXNldCAoYywwLHNpemVvZigqYykpOwogCWMtPmgwPUlOSVRfREFUQV9oMDsKZGlmZiAtLWdpdCBhL2NyeXB0by9zcGFyY3Y5Y2FwLmMgYi9jcnlwdG8vc3BhcmN2OWNhcC5jCmluZGV4IGVkMTk1YWIuLjQzYjNhYzYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zcGFyY3Y5Y2FwLmMKKysrIGIvY3J5cHRvL3NwYXJjdjljYXAuYwpAQCAtMTksNyArMTksOCBAQAogCWludCBibl9tdWxfbW9udF9mcHUoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSk7CiAJaW50IGJuX211bF9tb250X2ludChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLCBjb25zdCBCTl9VTE9ORyAqbnAsY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVtKTsKIAotCWlmICgoT1BFTlNTTF9zcGFyY3Y5Y2FwX1AmKFNQQVJDVjlfUFJFRkVSX0ZQVXxTUEFSQ1Y5X1ZJUzEpKSA9PQorCWlmIChudW0+PTggJiYgIShudW0mMSkgJiYKKwkgICAgKE9QRU5TU0xfc3BhcmN2OWNhcF9QJihTUEFSQ1Y5X1BSRUZFUl9GUFV8U1BBUkNWOV9WSVMxKSkgPT0KIAkJKFNQQVJDVjlfUFJFRkVSX0ZQVXxTUEFSQ1Y5X1ZJUzEpKQogCQlyZXR1cm4gYm5fbXVsX21vbnRfZnB1KHJwLGFwLGJwLG5wLG4wLG51bSk7CiAJZWxzZQpAQCAtMTY5LDcgKzE3MCw2IEBACiAJY2hhciAqZTsKIAlzdHJ1Y3Qgc2lnYWN0aW9uCWNvbW1vbl9hY3QsaWxsX29hY3QsYnVzX29hY3Q7CiAJc2lnc2V0X3QJCWFsbF9tYXNrZWQsb3NldDsKLQlpbnQJCQlzaWc7CiAJc3RhdGljIGludCB0cmlnZ2VyPTA7CiAKIAlpZiAodHJpZ2dlcikgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NycC9zcnAuaCBiL2NyeXB0by9zcnAvc3JwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjNzgyNQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9zcnAvc3JwLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qIGNyeXB0by9zcnAvc3JwLmggKi8KKy8qIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZSBSZW5vdSAoY2hyaXN0b3BoZS5yZW5vdUBlZGVsd2ViLmZyKSB3aXRoIAorICogdGhlIHByZWNpb3VzIGhlbHAgb2YgUGV0ZXIgU3lsdmVzdGVyIChwZXRlci5zeWx2ZXN0ZXJAZWRlbHdlYi5mcikgCisgKiBmb3IgdGhlIEVkZWxLZXkgcHJvamVjdCBhbmQgY29udHJpYnV0ZWQgdG8gdGhlIE9wZW5TU0wgcHJvamVjdCAyMDA0LgorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisjaWZuZGVmIF9fU1JQX0hfXworI2RlZmluZSBfX1NSUF9IX18KKworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW5zc2wvc2FmZXN0YWNrLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisKK3R5cGVkZWYgc3RydWN0IFNSUF9nTl9jYWNoZV9zdAorCXsKKwljaGFyICpiNjRfYm47CisJQklHTlVNICpibjsKKwl9IFNSUF9nTl9jYWNoZTsKKworCitERUNMQVJFX1NUQUNLX09GKFNSUF9nTl9jYWNoZSkKKwordHlwZWRlZiBzdHJ1Y3QgU1JQX3VzZXJfcHdkX3N0CisJeworCWNoYXIgKmlkOworCUJJR05VTSAqczsKKwlCSUdOVU0gKnY7CisJY29uc3QgQklHTlVNICpnOworCWNvbnN0IEJJR05VTSAqTjsKKwljaGFyICppbmZvOworCX0gU1JQX3VzZXJfcHdkOworCitERUNMQVJFX1NUQUNLX09GKFNSUF91c2VyX3B3ZCkKKwordHlwZWRlZiBzdHJ1Y3QgU1JQX1ZCQVNFX3N0CisJeworCVNUQUNLX09GKFNSUF91c2VyX3B3ZCkgKnVzZXJzX3B3ZDsKKwlTVEFDS19PRihTUlBfZ05fY2FjaGUpICpnTl9jYWNoZTsKKy8qIHRvIHNpbXVsYXRlIGEgdXNlciAqLworCWNoYXIgKnNlZWRfa2V5OworCUJJR05VTSAqZGVmYXVsdF9nOworCUJJR05VTSAqZGVmYXVsdF9OOworCX0gU1JQX1ZCQVNFOworCisKKy8qU3RydWN0dXJlIGludGVybmUgcG91ciByZXRlbmlyIGxlcyBjb3VwbGVzIE4gZXQgZyovCit0eXBlZGVmIHN0cnVjdCBTUlBfZ05fc3QKKwl7CisJY2hhciAqaWQ7CisJQklHTlVNICpnOworCUJJR05VTSAqTjsKKwl9IFNSUF9nTjsKKworREVDTEFSRV9TVEFDS19PRihTUlBfZ04pCisKK1NSUF9WQkFTRSAqU1JQX1ZCQVNFX25ldyhjaGFyICpzZWVkX2tleSk7CitpbnQgU1JQX1ZCQVNFX2ZyZWUoU1JQX1ZCQVNFICp2Yik7CitpbnQgU1JQX1ZCQVNFX2luaXQoU1JQX1ZCQVNFICp2YiwgY2hhciAqIHZlcmlmaWVyX2ZpbGUpOworU1JQX3VzZXJfcHdkICpTUlBfVkJBU0VfZ2V0X2J5X3VzZXIoU1JQX1ZCQVNFICp2YiwgY2hhciAqdXNlcm5hbWUpOworY2hhciAqU1JQX2NyZWF0ZV92ZXJpZmllcihjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpwYXNzLCBjaGFyICoqc2FsdCwKKwkJCSAgY2hhciAqKnZlcmlmaWVyLCBjb25zdCBjaGFyICpOLCBjb25zdCBjaGFyICpnKTsKK2ludCBTUlBfY3JlYXRlX3ZlcmlmaWVyX0JOKGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MsIEJJR05VTSAqKnNhbHQsIEJJR05VTSAqKnZlcmlmaWVyLCBCSUdOVU0gKk4sIEJJR05VTSAqZyk7CisKKworI2RlZmluZSBTUlBfTk9fRVJST1IgMAorI2RlZmluZSBTUlBfRVJSX1ZCQVNFX0lOQ09NUExFVEVfRklMRSAxCisjZGVmaW5lIFNSUF9FUlJfVkJBU0VfQk5fTElCIDIKKyNkZWZpbmUgU1JQX0VSUl9PUEVOX0ZJTEUgMworI2RlZmluZSBTUlBfRVJSX01FTU9SWSA0CisKKyNkZWZpbmUgREJfc3JwdHlwZQkwCisjZGVmaW5lIERCX3NycHZlcmlmaWVyCTEKKyNkZWZpbmUgREJfc3Jwc2FsdCAJMgorI2RlZmluZSBEQl9zcnBpZAkzICAgICAgICAgICAgICAKKyNkZWZpbmUgREJfc3JwZ04JNCAgICAgICAKKyNkZWZpbmUgREJfc3JwaW5mbwk1IAorI3VuZGVmICBEQl9OVU1CRVIgICAgICAKKyNkZWZpbmUgREJfTlVNQkVSICAgICAgIDYKKworI2RlZmluZSBEQl9TUlBfSU5ERVgJJ0knCisjZGVmaW5lIERCX1NSUF9WQUxJRAknVicKKyNkZWZpbmUgREJfU1JQX1JFVk9LRUQJJ1InCisjZGVmaW5lIERCX1NSUF9NT0RJRgkndicKKworCisvKiBzZWUgc3JwLmMgKi8KK2NoYXIgKiBTUlBfY2hlY2tfa25vd25fZ05fcGFyYW0oQklHTlVNKiBnLCBCSUdOVU0qIE4pOyAKK1NSUF9nTiAqU1JQX2dldF9kZWZhdWx0X2dOKGNvbnN0IGNoYXIgKiBpZCkgOworCisvKiBzZXJ2ZXIgc2lkZSAuLi4uICovCitCSUdOVU0gKlNSUF9DYWxjX3NlcnZlcl9rZXkoQklHTlVNICpBLCBCSUdOVU0gKnYsIEJJR05VTSAqdSwgQklHTlVNICpiLCBCSUdOVU0gKk4pOworQklHTlVNICpTUlBfQ2FsY19CKEJJR05VTSAqYiwgQklHTlVNICpOLCBCSUdOVU0gKmcsIEJJR05VTSAqdik7CitpbnQgU1JQX1ZlcmlmeV9BX21vZF9OKEJJR05VTSAqQSwgQklHTlVNICpOKTsKK0JJR05VTSAqU1JQX0NhbGNfdShCSUdOVU0gKkEsIEJJR05VTSAqQiwgQklHTlVNICpOKSA7CisKKworCisvKiBjbGllbnQgc2lkZSAuLi4uICovCitCSUdOVU0gKlNSUF9DYWxjX3goQklHTlVNICpzLCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpwYXNzKTsKK0JJR05VTSAqU1JQX0NhbGNfQShCSUdOVU0gKmEsIEJJR05VTSAqTiwgQklHTlVNICpnKTsKK0JJR05VTSAqU1JQX0NhbGNfY2xpZW50X2tleShCSUdOVU0gKk4sIEJJR05VTSAqQiwgQklHTlVNICpnLCBCSUdOVU0gKngsIEJJR05VTSAqYSwgQklHTlVNICp1KTsKK2ludCBTUlBfVmVyaWZ5X0JfbW9kX04oQklHTlVNICpCLCBCSUdOVU0gKk4pOworCisjZGVmaW5lIFNSUF9NSU5JTUFMX04gMTAyNAorCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NyeXB0by9zcnAvc3JwX2dycHMuaCBiL2NyeXB0by9zcnAvc3JwX2dycHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdjOWZmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NycC9zcnBfZ3Jwcy5oCkBAIC0wLDAgKzEsNTE3IEBACisvKiBzdGFydCBvZiBnZW5lcmF0ZWQgZGF0YSAqLworCitzdGF0aWMgQk5fVUxPTkcgYm5fZ3JvdXBfMTAyNF92YWx1ZVtdID0geworCWJuX3BhY2s0KDlGQzYsMUQyRixDMEVCLDA2RTMpLAorCWJuX3BhY2s0KEZENTEsMzhGRSw4Mzc2LDQzNUIpLAorCWJuX3BhY2s0KDJGRDQsQ0JGNCw5NzZFLEFBOUEpLAorCWJuX3BhY2s0KDY4RUQsQkMzQywwNTcyLDZDQzApLAorCWJuX3BhY2s0KEM1MjksRjU2Niw2NjBFLDU3RUMpLAorCWJuX3BhY2s0KDgyNTUsOUIyOSw3QkNGLDE4ODUpLAorCWJuX3BhY2s0KENFOEUsRjRBRCw2OUIxLDVENDkpLAorCWJuX3BhY2s0KDVEQzcsRDdCNCw2MTU0LEQ2QjYpLAorCWJuX3BhY2s0KDhFNDksNUMxRCw2MDg5LERBRDEpLAorCWJuX3BhY2s0KEUwRDUsRDhFMiw1MEI5LDhCRTQpLAorCWJuX3BhY2s0KDM4M0IsNDgxMyxENjkyLEM2RTApLAorCWJuX3BhY2s0KEQ2NzQsREY3NCw5NkVBLDgxRDMpLAorCWJuX3BhY2s0KDlFQTIsMzE0Qyw5QzI1LDY1NzYpLAorCWJuX3BhY2s0KDYwNzIsNjE4Nyw3NUZGLDNDMEIpLAorCWJuX3BhY2s0KDlDMzMsRjgwQSxGQThGLEM1RTgpLAorCWJuX3BhY2s0KEVFQUYsMEFCOSxBREIzLDhERDYpCit9Oworc3RhdGljIEJJR05VTSBibl9ncm91cF8xMDI0ID0geworCWJuX2dyb3VwXzEwMjRfdmFsdWUsCisJKHNpemVvZiBibl9ncm91cF8xMDI0X3ZhbHVlKS9zaXplb2YoQk5fVUxPTkcpLAorCShzaXplb2YgYm5fZ3JvdXBfMTAyNF92YWx1ZSkvc2l6ZW9mKEJOX1VMT05HKSwKKwkwLAorCUJOX0ZMR19TVEFUSUNfREFUQQorfTsKKworc3RhdGljIEJOX1VMT05HIGJuX2dyb3VwXzE1MzZfdmFsdWVbXSA9IHsKKwlibl9wYWNrNChDRjc2LEUzRkUsRDEzNSxGOUJCKSwKKwlibl9wYWNrNCgxNTE4LDBGOTMsNDk5QSwyMzREKSwKKwlibl9wYWNrNCg4Q0U3LEEyOEMsMjQ0MixDNkYzKSwKKwlibl9wYWNrNCg1QTAyLDFGRkYsNUU5MSw0NzlFKSwKKwlibl9wYWNrNCg3RjhBLDJGRTksQjhCNSwyOTJFKSwKKwlibl9wYWNrNCg4MzdDLDI2NEEsRTNBOSxCRUI4KSwKKwlibl9wYWNrNChFNDQyLDczNEEsRjdDQyxCN0FFKSwKKwlibl9wYWNrNCg2NTc3LDJFNDMsN0Q2Qyw3RjhDKSwKKwlibl9wYWNrNChEQjJGLEQ1M0QsMjRCNyxDNDg2KSwKKwlibl9wYWNrNCg2RURGLDAxOTUsMzkzNCw5NjI3KSwKKwlibl9wYWNrNCgxNThCLEZEM0UsMkI5Qyw4Q0Y1KSwKKwlibl9wYWNrNCg3NjRFLDNGNEIsNTNERCw5REExKSwKKwlibl9wYWNrNCg0NzU0LDgzODEsREJDNSxCMUZDKSwKKwlibl9wYWNrNCg5QjYwLDlFMEIsRTNCQSxCNjNEKSwKKwlibl9wYWNrNCg4MTM0LEIxQzgsQjk3OSw4OTE0KSwKKwlibl9wYWNrNChERjAyLDhBN0MsRUM2NyxGMEQwKSwKKwlibl9wYWNrNCg4MEI2LDU1QkIsOUEyMixFOERDKSwKKwlibl9wYWNrNCgxNTU4LDkwM0IsQTBEMCxGODQzKSwKKwlibl9wYWNrNCg1MUM2LEE5NEIsRTQ2MCw3QTI5KSwKKwlibl9wYWNrNCg1RjRGLDVGNTUsNkUyNyxDQkRFKSwKKwlibl9wYWNrNChCRUVFLEE5NjEsNEIxOSxDQzREKSwKKwlibl9wYWNrNChEQkE1LDFERjQsOTlBQyw0QzgwKSwKKwlibl9wYWNrNChCMUYxLDJBODYsMTdBNCw3QkJCKSwKKwlibl9wYWNrNCg5REVGLDNDQUYsQjkzOSwyNzdBKQorfTsKK3N0YXRpYyBCSUdOVU0gYm5fZ3JvdXBfMTUzNiA9IHsKKwlibl9ncm91cF8xNTM2X3ZhbHVlLAorCShzaXplb2YgYm5fZ3JvdXBfMTUzNl92YWx1ZSkvc2l6ZW9mKEJOX1VMT05HKSwKKwkoc2l6ZW9mIGJuX2dyb3VwXzE1MzZfdmFsdWUpL3NpemVvZihCTl9VTE9ORyksCisJMCwKKwlCTl9GTEdfU1RBVElDX0RBVEEKK307CisKK3N0YXRpYyBCTl9VTE9ORyBibl9ncm91cF8yMDQ4X3ZhbHVlW10gPSB7CisJYm5fcGFjazQoMEZBNywxMTFGLDlFNEEsRkY3MyksCisJYm5fcGFjazQoOUI2NSxFMzcyLEZDRDYsOEVGMiksCisJYm5fcGFjazQoMzVERSwyMzZELDUyNUYsNTQ3NSksCisJYm5fcGFjazQoOTRCNSxDODAzLEQ4OUYsN0FFNCksCisJYm5fcGFjazQoNzFBRSwzNUY4LEU5REIsRkJCNiksCisJYm5fcGFjazQoMkE1Niw5OEYzLEE4RDAsQzM4MiksCisJYm5fcGFjazQoOUNDQywwNDFDLDdCQzMsMDhEOCksCisJYm5fcGFjazQoQUY4Nyw0RTczLDAzQ0UsNTMyOSksCisJYm5fcGFjazQoNjE2MCwyNzkwLDA0RTUsN0FFNiksCisJYm5fcGFjazQoMDMyQyxGQkRCLEY1MkYsQjM3OCksCisJYm5fcGFjazQoNUVBNyw3QTI3LDc1RDIsRUNGQSksCisJYm5fcGFjazQoNTQ0NSwyM0I1LDI0QjAsRDU3RCksCisJYm5fcGFjazQoNUI5RCwzMkU2LDg4RjgsNzc0OCksCisJYm5fcGFjazQoRjFEMixCOTA3LDg3MTcsNDYxQSksCisJYm5fcGFjazQoNzZCRCwyMDdBLDQzNkMsNjQ4MSksCisJYm5fcGFjazQoQ0E5NyxCNDNBLDIzRkIsODAxNiksCisJYm5fcGFjazQoMUQyOCwxRTQ0LDZCMTQsNzczQiksCisJYm5fcGFjazQoNzM1OSxEMDQxLEQ1QzMsM0VBNyksCisJYm5fcGFjazQoQTgwRCw3NDBBLERCRjQsRkY3NCksCisJYm5fcGFjazQoNTVGOSw3OTkzLEVDOTcsNUVFQSksCisJYm5fcGFjazQoMjkxOCxBOTk2LDJGMEIsOTNCOCksCisJYm5fcGFjazQoNjYxQSwwNUZCLEQ1RkEsQUFFOCksCisJYm5fcGFjazQoQ0Y2MCw5NTE3LDlBMTYsM0FCMyksCisJYm5fcGFjazQoRTgwOCwzOTY5LEVEQjcsNjdCMCksCisJYm5fcGFjazQoQ0Q3Riw0OEE5LERBMDQsRkQ1MCksCisJYm5fcGFjazQoRDUyMywxMkFCLDRCMDMsMzEwRCksCisJYm5fcGFjazQoODE5MyxFMDc1LDc3NjcsQTEzRCksCisJYm5fcGFjazQoQTM3MywyOUNCLEI0QTAsOTlFRCksCisJYm5fcGFjazQoRkMzMSw5Mjk0LDNEQjUsNjA1MCksCisJYm5fcGFjazQoQUY3MixCNjY1LDE5ODcsRUUwNyksCisJYm5fcGFjazQoRjE2NixERTVFLDEzODksNTgyRiksCisJYm5fcGFjazQoQUM2QixEQjQxLDMyNEEsOUE5QikKK307CitzdGF0aWMgQklHTlVNIGJuX2dyb3VwXzIwNDggPSB7CisJYm5fZ3JvdXBfMjA0OF92YWx1ZSwKKwkoc2l6ZW9mIGJuX2dyb3VwXzIwNDhfdmFsdWUpL3NpemVvZihCTl9VTE9ORyksCisJKHNpemVvZiBibl9ncm91cF8yMDQ4X3ZhbHVlKS9zaXplb2YoQk5fVUxPTkcpLAorCTAsCisJQk5fRkxHX1NUQVRJQ19EQVRBCit9OworCitzdGF0aWMgQk5fVUxPTkcgYm5fZ3JvdXBfMzA3Ml92YWx1ZVtdID0geworCWJuX3BhY2s0KEZGRkYsRkZGRixGRkZGLEZGRkYpLAorCWJuX3BhY2s0KDRCODIsRDEyMCxBOTNBLEQyQ0EpLAorCWJuX3BhY2s0KDQzREIsNUJGQyxFMEZELDEwOEUpLAorCWJuX3BhY2s0KDA4RTIsNEZBMCw3NEU1LEFCMzEpLAorCWJuX3BhY2s0KDc3MDksODhDMCxCQUQ5LDQ2RTIpLAorCWJuX3BhY2s0KEJCRTEsMTc1Nyw3QTYxLDVENkMpLAorCWJuX3BhY2s0KDUyMUYsMkIxOCwxNzdCLDIwMEMpLAorCWJuX3BhY2s0KEQ4NzYsMDI3MywzRUM4LDZBNjQpLAorCWJuX3BhY2s0KEYxMkYsRkEwNixEOThBLDA4NjQpLAorCWJuX3BhY2s0KENFRTMsRDIyNiwxQUQyLEVFNkIpLAorCWJuX3BhY2s0KDFFOEMsOTRFMCw0QTI1LDYxOUQpLAorCWJuX3BhY2s0KEFCRjUsQUU4QyxEQjA5LDMzRDcpLAorCWJuX3BhY2s0KEIzOTcsMEY4NSxBNkUxLEU0QzcpLAorCWJuX3BhY2s0KDhBRUEsNzE1Nyw1RDA2LDBDN0QpLAorCWJuX3BhY2s0KEVDRkIsODUwNCw1OERCLEVGMEEpLAorCWJuX3BhY2s0KEE4NTUsMjFBQixERjFDLEJBNjQpLAorCWJuX3BhY2s0KEFEMzMsMTcwRCwwNDUwLDdBMzMpLAorCWJuX3BhY2s0KDE1NzIsOEU1QSw4QUFBLEM0MkQpLAorCWJuX3BhY2s0KDE1RDIsMjYxOCw5OEZBLDA1MTApLAorCWJuX3BhY2s0KDM5OTUsNDk3QyxFQTk1LDZBRTUpLAorCWJuX3BhY2s0KERFMkIsQ0JGNiw5NTU4LDE3MTgpLAorCWJuX3BhY2s0KEI1QzUsNURGMCw2RjRDLDUyQzkpLAorCWJuX3BhY2s0KDlCMjcsODNBMixFQzA3LEEyOEYpLAorCWJuX3BhY2s0KEUzOUUsNzcyQywxODBFLDg2MDMpLAorCWJuX3BhY2s0KDMyOTAsNUU0NiwyRTM2LENFM0IpLAorCWJuX3BhY2s0KEYxNzQsNkMwOCxDQTE4LDIxN0MpLAorCWJuX3BhY2s0KDY3MEMsMzU0RSw0QUJDLDk4MDQpLAorCWJuX3BhY2s0KDlFRDUsMjkwNyw3MDk2LDk2NkQpLAorCWJuX3BhY2s0KDFDNjIsRjM1NiwyMDg1LDUyQkIpLAorCWJuX3BhY2s0KDgzNjUsNUQyMyxEQ0EzLEFEOTYpLAorCWJuX3BhY2s0KDY5MTYsM0ZBOCxGRDI0LENGNUYpLAorCWJuX3BhY2s0KDk4REEsNDgzNiwxQzU1LEQzOUEpLAorCWJuX3BhY2s0KEMyMDAsN0NCOCxBMTYzLEJGMDUpLAorCWJuX3BhY2s0KDQ5MjgsNjY1MSxFQ0U0LDVCM0QpLAorCWJuX3BhY2s0KEFFOUYsMjQxMSw3QzRCLDFGRTYpLAorCWJuX3BhY2s0KEVFMzgsNkJGQiw1QTg5LDlGQTUpLAorCWJuX3BhY2s0KDBCRkYsNUNCNixGNDA2LEI3RUQpLAorCWJuX3BhY2s0KEY0NEMsNDJFOSxBNjM3LEVENkIpLAorCWJuX3BhY2s0KEU0ODUsQjU3Niw2MjVFLDdFQzYpLAorCWJuX3BhY2s0KDRGRTEsMzU2RCw2RDUxLEMyNDUpLAorCWJuX3BhY2s0KDMwMkIsMEE2RCxGMjVGLDE0MzcpLAorCWJuX3BhY2s0KEVGOTUsMTlCMyxDRDNBLDQzMUIpLAorCWJuX3BhY2s0KDUxNEEsMDg3OSw4RTM0LDA0REQpLAorCWJuX3BhY2s0KDAyMEIsQkVBNiwzQjEzLDlCMjIpLAorCWJuX3BhY2s0KDI5MDIsNEUwOCw4QTY3LENDNzQpLAorCWJuX3BhY2s0KEM0QzYsNjI4Qiw4MERDLDFDRDEpLAorCWJuX3BhY2s0KEM5MEYsREFBMiwyMTY4LEMyMzQpLAorCWJuX3BhY2s0KEZGRkYsRkZGRixGRkZGLEZGRkYpCit9Oworc3RhdGljIEJJR05VTSBibl9ncm91cF8zMDcyID0geworCWJuX2dyb3VwXzMwNzJfdmFsdWUsCisJKHNpemVvZiBibl9ncm91cF8zMDcyX3ZhbHVlKS9zaXplb2YoQk5fVUxPTkcpLAorCShzaXplb2YgYm5fZ3JvdXBfMzA3Ml92YWx1ZSkvc2l6ZW9mKEJOX1VMT05HKSwKKwkwLAorCUJOX0ZMR19TVEFUSUNfREFUQQorfTsKKworc3RhdGljIEJOX1VMT05HIGJuX2dyb3VwXzQwOTZfdmFsdWVbXSA9IHsKKwlibl9wYWNrNChGRkZGLEZGRkYsRkZGRixGRkZGKSwKKwlibl9wYWNrNCg0REY0LDM1QzksMzQwNiwzMTk5KSwKKwlibl9wYWNrNCg4NkZGLEI3REMsOTBBNixDMDhGKSwKKwlibl9wYWNrNCg5M0I0LEVBOTgsOEQ4RixEREMxKSwKKwlibl9wYWNrNChEMDA2LDkxMjcsRDVCMCw1QUE5KSwKKwlibl9wYWNrNChCODFCLERENzYsMjE3MCw0ODFDKSwKKwlibl9wYWNrNCgxRjYxLDI5NzAsQ0VFMixEN0FGKSwKKwlibl9wYWNrNCgyMzNCLEExODYsNTE1QixFN0VEKSwKKwlibl9wYWNrNCg5OUIyLDk2NEYsQTA5MCxDM0EyKSwKKwlibl9wYWNrNCgyODdDLDU5NDcsNEU2QixDMDVEKSwKKwlibl9wYWNrNCgyRThFLEZDMTQsMUZCRSxDQUE2KSwKKwlibl9wYWNrNChEQkJCLEMyREIsMDRERSw4RUY5KSwKKwlibl9wYWNrNCgyNTgzLEU5Q0EsMkFENCw0Q0U4KSwKKwlibl9wYWNrNCgxQTk0LDY4MzQsQjYxNSwwQkRBKSwKKwlibl9wYWNrNCg5OUMzLDI3MTgsNkFGNCxFMjNDKSwKKwlibl9wYWNrNCg4ODcxLDlBMTAsQkRCQSw1QjI2KSwKKwlibl9wYWNrNCgxQTcyLDNDMTIsQTc4NyxFNkQ3KSwKKwlibl9wYWNrNCg0QjgyLEQxMjAsQTkyMSwwODAxKSwKKwlibl9wYWNrNCg0M0RCLDVCRkMsRTBGRCwxMDhFKSwKKwlibl9wYWNrNCgwOEUyLDRGQTAsNzRFNSxBQjMxKSwKKwlibl9wYWNrNCg3NzA5LDg4QzAsQkFEOSw0NkUyKSwKKwlibl9wYWNrNChCQkUxLDE3NTcsN0E2MSw1RDZDKSwKKwlibl9wYWNrNCg1MjFGLDJCMTgsMTc3QiwyMDBDKSwKKwlibl9wYWNrNChEODc2LDAyNzMsM0VDOCw2QTY0KSwKKwlibl9wYWNrNChGMTJGLEZBMDYsRDk4QSwwODY0KSwKKwlibl9wYWNrNChDRUUzLEQyMjYsMUFEMixFRTZCKSwKKwlibl9wYWNrNCgxRThDLDk0RTAsNEEyNSw2MTlEKSwKKwlibl9wYWNrNChBQkY1LEFFOEMsREIwOSwzM0Q3KSwKKwlibl9wYWNrNChCMzk3LDBGODUsQTZFMSxFNEM3KSwKKwlibl9wYWNrNCg4QUVBLDcxNTcsNUQwNiwwQzdEKSwKKwlibl9wYWNrNChFQ0ZCLDg1MDQsNThEQixFRjBBKSwKKwlibl9wYWNrNChBODU1LDIxQUIsREYxQyxCQTY0KSwKKwlibl9wYWNrNChBRDMzLDE3MEQsMDQ1MCw3QTMzKSwKKwlibl9wYWNrNCgxNTcyLDhFNUEsOEFBQSxDNDJEKSwKKwlibl9wYWNrNCgxNUQyLDI2MTgsOThGQSwwNTEwKSwKKwlibl9wYWNrNCgzOTk1LDQ5N0MsRUE5NSw2QUU1KSwKKwlibl9wYWNrNChERTJCLENCRjYsOTU1OCwxNzE4KSwKKwlibl9wYWNrNChCNUM1LDVERjAsNkY0Qyw1MkM5KSwKKwlibl9wYWNrNCg5QjI3LDgzQTIsRUMwNyxBMjhGKSwKKwlibl9wYWNrNChFMzlFLDc3MkMsMTgwRSw4NjAzKSwKKwlibl9wYWNrNCgzMjkwLDVFNDYsMkUzNixDRTNCKSwKKwlibl9wYWNrNChGMTc0LDZDMDgsQ0ExOCwyMTdDKSwKKwlibl9wYWNrNCg2NzBDLDM1NEUsNEFCQyw5ODA0KSwKKwlibl9wYWNrNCg5RUQ1LDI5MDcsNzA5Niw5NjZEKSwKKwlibl9wYWNrNCgxQzYyLEYzNTYsMjA4NSw1MkJCKSwKKwlibl9wYWNrNCg4MzY1LDVEMjMsRENBMyxBRDk2KSwKKwlibl9wYWNrNCg2OTE2LDNGQTgsRkQyNCxDRjVGKSwKKwlibl9wYWNrNCg5OERBLDQ4MzYsMUM1NSxEMzlBKSwKKwlibl9wYWNrNChDMjAwLDdDQjgsQTE2MyxCRjA1KSwKKwlibl9wYWNrNCg0OTI4LDY2NTEsRUNFNCw1QjNEKSwKKwlibl9wYWNrNChBRTlGLDI0MTEsN0M0QiwxRkU2KSwKKwlibl9wYWNrNChFRTM4LDZCRkIsNUE4OSw5RkE1KSwKKwlibl9wYWNrNCgwQkZGLDVDQjYsRjQwNixCN0VEKSwKKwlibl9wYWNrNChGNDRDLDQyRTksQTYzNyxFRDZCKSwKKwlibl9wYWNrNChFNDg1LEI1NzYsNjI1RSw3RUM2KSwKKwlibl9wYWNrNCg0RkUxLDM1NkQsNkQ1MSxDMjQ1KSwKKwlibl9wYWNrNCgzMDJCLDBBNkQsRjI1RiwxNDM3KSwKKwlibl9wYWNrNChFRjk1LDE5QjMsQ0QzQSw0MzFCKSwKKwlibl9wYWNrNCg1MTRBLDA4NzksOEUzNCwwNEREKSwKKwlibl9wYWNrNCgwMjBCLEJFQTYsM0IxMyw5QjIyKSwKKwlibl9wYWNrNCgyOTAyLDRFMDgsOEE2NyxDQzc0KSwKKwlibl9wYWNrNChDNEM2LDYyOEIsODBEQywxQ0QxKSwKKwlibl9wYWNrNChDOTBGLERBQTIsMjE2OCxDMjM0KSwKKwlibl9wYWNrNChGRkZGLEZGRkYsRkZGRixGRkZGKQorfTsKK3N0YXRpYyBCSUdOVU0gYm5fZ3JvdXBfNDA5NiA9IHsKKwlibl9ncm91cF80MDk2X3ZhbHVlLAorCShzaXplb2YgYm5fZ3JvdXBfNDA5Nl92YWx1ZSkvc2l6ZW9mKEJOX1VMT05HKSwKKwkoc2l6ZW9mIGJuX2dyb3VwXzQwOTZfdmFsdWUpL3NpemVvZihCTl9VTE9ORyksCisJMCwKKwlCTl9GTEdfU1RBVElDX0RBVEEKK307CisKK3N0YXRpYyBCTl9VTE9ORyBibl9ncm91cF82MTQ0X3ZhbHVlW10gPSB7CisJYm5fcGFjazQoRkZGRixGRkZGLEZGRkYsRkZGRiksCisJYm5fcGFjazQoRTY5NCxGOTFFLDZEQ0MsNDAyNCksCisJYm5fcGFjazQoMTJCRiwyRDVCLDBCNzQsNzRENiksCisJYm5fcGFjazQoMDQzRSw4RjY2LDNGNDgsNjBFRSksCisJYm5fcGFjazQoMzg3RixFOEQ3LDZFM0MsMDQ2OCksCisJYm5fcGFjazQoREE1NixDOUVDLDJFRjIsOTYzMiksCisJYm5fcGFjazQoRUIxOSxDQ0IxLEEzMTMsRDU1QyksCisJYm5fcGFjazQoRjU1MCxBQTNELDhBMUYsQkZGMCksCisJYm5fcGFjazQoMDZBMSxENThCLEI3QzUsREE3NiksCisJYm5fcGFjazQoQTc5NywxNUVFLEYyOUIsRTMyOCksCisJYm5fcGFjazQoMTRDQyw1RUQyLDBGODAsMzdFMCksCisJYm5fcGFjazQoQ0M4Riw2RDdFLEJGNDgsRTFEOCksCisJYm5fcGFjazQoNEJENCwwN0IyLDJCNDEsNTRBQSksCisJYm5fcGFjazQoMEYxRCw0NUI3LEZGNTgsNUFDNSksCisJYm5fcGFjazQoMjNBOSw3QTdFLDM2Q0MsODhCRSksCisJYm5fcGFjazQoNTlFNyxDOTdGLEJFQzcsRThGMyksCisJYm5fcGFjazQoQjVBOCw0MDMxLDkwMEIsMUM5RSksCisJYm5fcGFjazQoRDU1RSw3MDJGLDQ2OTgsMEM4MiksCisJYm5fcGFjazQoRjQ4MixEN0NFLDZFNzQsRkVGNiksCisJYm5fcGFjazQoRjAzMixFQTE1LEQxNzIsMUQwMyksCisJYm5fcGFjazQoNTk4MyxDQTAxLEM2NEIsOTJFQyksCisJYm5fcGFjazQoNkZCOCxGNDAxLDM3OEMsRDJCRiksCisJYm5fcGFjazQoMzMyMCw1MTUxLDJCRDcsQUY0MiksCisJYm5fcGFjazQoREI3RiwxNDQ3LEU2Q0MsMjU0QiksCisJYm5fcGFjazQoNDRDRSw2Q0JBLENFRDQsQkIxQiksCisJYm5fcGFjazQoREEzRSxEQkVCLENGOUIsMTRFRCksCisJYm5fcGFjazQoMTc5NywyN0IwLDg2NUEsODkxOCksCisJYm5fcGFjazQoQjA2QSw1M0VELDkwMjcsRDgzMSksCisJYm5fcGFjazQoRTVEQiwzODJGLDQxMzAsMDFBRSksCisJYm5fcGFjazQoRjhGRiw5NDA2LEFEOUUsNTMwRSksCisJYm5fcGFjazQoQzk3NSwxRTc2LDNEQkEsMzdCRCksCisJYm5fcGFjazQoQzFENCxEQ0IyLDYwMjYsNDZERSksCisJYm5fcGFjazQoMzZDMyxGQUI0LEQyN0MsNzAyNiksCisJYm5fcGFjazQoNERGNCwzNUM5LDM0MDIsODQ5MiksCisJYm5fcGFjazQoODZGRixCN0RDLDkwQTYsQzA4RiksCisJYm5fcGFjazQoOTNCNCxFQTk4LDhEOEYsRERDMSksCisJYm5fcGFjazQoRDAwNiw5MTI3LEQ1QjAsNUFBOSksCisJYm5fcGFjazQoQjgxQixERDc2LDIxNzAsNDgxQyksCisJYm5fcGFjazQoMUY2MSwyOTcwLENFRTIsRDdBRiksCisJYm5fcGFjazQoMjMzQixBMTg2LDUxNUIsRTdFRCksCisJYm5fcGFjazQoOTlCMiw5NjRGLEEwOTAsQzNBMiksCisJYm5fcGFjazQoMjg3Qyw1OTQ3LDRFNkIsQzA1RCksCisJYm5fcGFjazQoMkU4RSxGQzE0LDFGQkUsQ0FBNiksCisJYm5fcGFjazQoREJCQixDMkRCLDA0REUsOEVGOSksCisJYm5fcGFjazQoMjU4MyxFOUNBLDJBRDQsNENFOCksCisJYm5fcGFjazQoMUE5NCw2ODM0LEI2MTUsMEJEQSksCisJYm5fcGFjazQoOTlDMywyNzE4LDZBRjQsRTIzQyksCisJYm5fcGFjazQoODg3MSw5QTEwLEJEQkEsNUIyNiksCisJYm5fcGFjazQoMUE3MiwzQzEyLEE3ODcsRTZENyksCisJYm5fcGFjazQoNEI4MixEMTIwLEE5MjEsMDgwMSksCisJYm5fcGFjazQoNDNEQiw1QkZDLEUwRkQsMTA4RSksCisJYm5fcGFjazQoMDhFMiw0RkEwLDc0RTUsQUIzMSksCisJYm5fcGFjazQoNzcwOSw4OEMwLEJBRDksNDZFMiksCisJYm5fcGFjazQoQkJFMSwxNzU3LDdBNjEsNUQ2QyksCisJYm5fcGFjazQoNTIxRiwyQjE4LDE3N0IsMjAwQyksCisJYm5fcGFjazQoRDg3NiwwMjczLDNFQzgsNkE2NCksCisJYm5fcGFjazQoRjEyRixGQTA2LEQ5OEEsMDg2NCksCisJYm5fcGFjazQoQ0VFMyxEMjI2LDFBRDIsRUU2QiksCisJYm5fcGFjazQoMUU4Qyw5NEUwLDRBMjUsNjE5RCksCisJYm5fcGFjazQoQUJGNSxBRThDLERCMDksMzNENyksCisJYm5fcGFjazQoQjM5NywwRjg1LEE2RTEsRTRDNyksCisJYm5fcGFjazQoOEFFQSw3MTU3LDVEMDYsMEM3RCksCisJYm5fcGFjazQoRUNGQiw4NTA0LDU4REIsRUYwQSksCisJYm5fcGFjazQoQTg1NSwyMUFCLERGMUMsQkE2NCksCisJYm5fcGFjazQoQUQzMywxNzBELDA0NTAsN0EzMyksCisJYm5fcGFjazQoMTU3Miw4RTVBLDhBQUEsQzQyRCksCisJYm5fcGFjazQoMTVEMiwyNjE4LDk4RkEsMDUxMCksCisJYm5fcGFjazQoMzk5NSw0OTdDLEVBOTUsNkFFNSksCisJYm5fcGFjazQoREUyQixDQkY2LDk1NTgsMTcxOCksCisJYm5fcGFjazQoQjVDNSw1REYwLDZGNEMsNTJDOSksCisJYm5fcGFjazQoOUIyNyw4M0EyLEVDMDcsQTI4RiksCisJYm5fcGFjazQoRTM5RSw3NzJDLDE4MEUsODYwMyksCisJYm5fcGFjazQoMzI5MCw1RTQ2LDJFMzYsQ0UzQiksCisJYm5fcGFjazQoRjE3NCw2QzA4LENBMTgsMjE3QyksCisJYm5fcGFjazQoNjcwQywzNTRFLDRBQkMsOTgwNCksCisJYm5fcGFjazQoOUVENSwyOTA3LDcwOTYsOTY2RCksCisJYm5fcGFjazQoMUM2MixGMzU2LDIwODUsNTJCQiksCisJYm5fcGFjazQoODM2NSw1RDIzLERDQTMsQUQ5NiksCisJYm5fcGFjazQoNjkxNiwzRkE4LEZEMjQsQ0Y1RiksCisJYm5fcGFjazQoOThEQSw0ODM2LDFDNTUsRDM5QSksCisJYm5fcGFjazQoQzIwMCw3Q0I4LEExNjMsQkYwNSksCisJYm5fcGFjazQoNDkyOCw2NjUxLEVDRTQsNUIzRCksCisJYm5fcGFjazQoQUU5RiwyNDExLDdDNEIsMUZFNiksCisJYm5fcGFjazQoRUUzOCw2QkZCLDVBODksOUZBNSksCisJYm5fcGFjazQoMEJGRiw1Q0I2LEY0MDYsQjdFRCksCisJYm5fcGFjazQoRjQ0Qyw0MkU5LEE2MzcsRUQ2QiksCisJYm5fcGFjazQoRTQ4NSxCNTc2LDYyNUUsN0VDNiksCisJYm5fcGFjazQoNEZFMSwzNTZELDZENTEsQzI0NSksCisJYm5fcGFjazQoMzAyQiwwQTZELEYyNUYsMTQzNyksCisJYm5fcGFjazQoRUY5NSwxOUIzLENEM0EsNDMxQiksCisJYm5fcGFjazQoNTE0QSwwODc5LDhFMzQsMDRERCksCisJYm5fcGFjazQoMDIwQixCRUE2LDNCMTMsOUIyMiksCisJYm5fcGFjazQoMjkwMiw0RTA4LDhBNjcsQ0M3NCksCisJYm5fcGFjazQoQzRDNiw2MjhCLDgwREMsMUNEMSksCisJYm5fcGFjazQoQzkwRixEQUEyLDIxNjgsQzIzNCksCisJYm5fcGFjazQoRkZGRixGRkZGLEZGRkYsRkZGRikKK307CitzdGF0aWMgQklHTlVNIGJuX2dyb3VwXzYxNDQgPSB7CisJYm5fZ3JvdXBfNjE0NF92YWx1ZSwKKwkoc2l6ZW9mIGJuX2dyb3VwXzYxNDRfdmFsdWUpL3NpemVvZihCTl9VTE9ORyksCisJKHNpemVvZiBibl9ncm91cF82MTQ0X3ZhbHVlKS9zaXplb2YoQk5fVUxPTkcpLAorCTAsCisJQk5fRkxHX1NUQVRJQ19EQVRBCit9OworCitzdGF0aWMgQk5fVUxPTkcgYm5fZ3JvdXBfODE5Ml92YWx1ZVtdID0geworCWJuX3BhY2s0KEZGRkYsRkZGRixGRkZGLEZGRkYpLAorCWJuX3BhY2s0KDYwQzksODBERCw5OEVELEQzREYpLAorCWJuX3BhY2s0KEM4MUYsNTZFOCw4MEI5LDZFNzEpLAorCWJuX3BhY2s0KDlFMzAsNTBFMiw3NjU2LDk0REYpLAorCWJuX3BhY2s0KDk1NTgsRTQ0Nyw1Njc3LEU5QUEpLAorCWJuX3BhY2s0KEM5MTksMERBNixGQzAyLDZFNDcpLAorCWJuX3BhY2s0KDg4OUEsMDAyRSxENUVFLDM4MkIpLAorCWJuX3BhY2s0KDQwMDksNDM4Qiw0ODFDLDZDRDcpLAorCWJuX3BhY2s0KDM1OTAsNDZGNCxFQjg3LDlGOTIpLAorCWJuX3BhY2s0KEZBRjMsNkJDMywxRUNGLEEyNjgpLAorCWJuX3BhY2s0KEIxRDUsMTBCRCw3RUU3LDRENzMpLAorCWJuX3BhY2s0KEY5QUIsNDgxOSw1REVELDdFQTEpLAorCWJuX3BhY2s0KDY0RjMsMUNDNSwwODQ2LDg1MUQpLAorCWJuX3BhY2s0KDQ1OTcsRTg5OSxBMDI1LDVEQzEpLAorCWJuX3BhY2s0KERGMzEsMEVFMCw3NEFCLDZBMzYpLAorCWJuX3BhY2s0KDZEMkEsMTNGOCwzRjQ0LEY4MkQpLAorCWJuX3BhY2s0KDA2MkIsM0NGNSxCM0EyLDc4QTYpLAorCWJuX3BhY2s0KDc5NjgsMzMwMyxFRDVCLEREM0EpLAorCWJuX3BhY2s0KEZBOUQsNEI3RixBMkMwLDg3RTgpLAorCWJuX3BhY2s0KDRCQ0IsQzg4NiwyRjgzLDg1REQpLAorCWJuX3BhY2s0KDM0NzMsRkM2NCw2Q0VBLDMwNkIpLAorCWJuX3BhY2s0KDEzRUIsNTdBOCwxQTIzLEYwQzcpLAorCWJuX3BhY2s0KDIyMjIsMkUwNCxBNDAzLDdDMDcpLAorCWJuX3BhY2s0KEUzRkQsQjhCRSxGQzg0LDhBRDkpLAorCWJuX3BhY2s0KDIzOEYsMTZDQixFMzlELDY1MkQpLAorCWJuX3BhY2s0KDM0MjMsQjQ3NCwyQkYxLEM5NzgpLAorCWJuX3BhY2s0KDNBQUIsNjM5Qyw1QUU0LEY1NjgpLAorCWJuX3BhY2s0KDI1NzYsRjY5Myw2QkE0LDI0NjYpLAorCWJuX3BhY2s0KDc0MUYsQTdCRiw4QUZDLDQ3RUQpLAorCWJuX3BhY2s0KDNCQzgsMzJCNiw4RDlELEQzMDApLAorCWJuX3BhY2s0KEQ4QkUsQzREMCw3M0I5LDMxQkEpLAorCWJuX3BhY2s0KDM4NzcsN0NCNixBOTMyLERGOEMpLAorCWJuX3BhY2s0KDc0QTMsOTI2RiwxMkZFLEU1RTQpLAorCWJuX3BhY2s0KEU2OTQsRjkxRSw2REJFLDExNTkpLAorCWJuX3BhY2s0KDEyQkYsMkQ1QiwwQjc0LDc0RDYpLAorCWJuX3BhY2s0KDA0M0UsOEY2NiwzRjQ4LDYwRUUpLAorCWJuX3BhY2s0KDM4N0YsRThENyw2RTNDLDA0NjgpLAorCWJuX3BhY2s0KERBNTYsQzlFQywyRUYyLDk2MzIpLAorCWJuX3BhY2s0KEVCMTksQ0NCMSxBMzEzLEQ1NUMpLAorCWJuX3BhY2s0KEY1NTAsQUEzRCw4QTFGLEJGRjApLAorCWJuX3BhY2s0KDA2QTEsRDU4QixCN0M1LERBNzYpLAorCWJuX3BhY2s0KEE3OTcsMTVFRSxGMjlCLEUzMjgpLAorCWJuX3BhY2s0KDE0Q0MsNUVEMiwwRjgwLDM3RTApLAorCWJuX3BhY2s0KENDOEYsNkQ3RSxCRjQ4LEUxRDgpLAorCWJuX3BhY2s0KDRCRDQsMDdCMiwyQjQxLDU0QUEpLAorCWJuX3BhY2s0KDBGMUQsNDVCNyxGRjU4LDVBQzUpLAorCWJuX3BhY2s0KDIzQTksN0E3RSwzNkNDLDg4QkUpLAorCWJuX3BhY2s0KDU5RTcsQzk3RixCRUM3LEU4RjMpLAorCWJuX3BhY2s0KEI1QTgsNDAzMSw5MDBCLDFDOUUpLAorCWJuX3BhY2s0KEQ1NUUsNzAyRiw0Njk4LDBDODIpLAorCWJuX3BhY2s0KEY0ODIsRDdDRSw2RTc0LEZFRjYpLAorCWJuX3BhY2s0KEYwMzIsRUExNSxEMTcyLDFEMDMpLAorCWJuX3BhY2s0KDU5ODMsQ0EwMSxDNjRCLDkyRUMpLAorCWJuX3BhY2s0KDZGQjgsRjQwMSwzNzhDLEQyQkYpLAorCWJuX3BhY2s0KDMzMjAsNTE1MSwyQkQ3LEFGNDIpLAorCWJuX3BhY2s0KERCN0YsMTQ0NyxFNkNDLDI1NEIpLAorCWJuX3BhY2s0KDQ0Q0UsNkNCQSxDRUQ0LEJCMUIpLAorCWJuX3BhY2s0KERBM0UsREJFQixDRjlCLDE0RUQpLAorCWJuX3BhY2s0KDE3OTcsMjdCMCw4NjVBLDg5MTgpLAorCWJuX3BhY2s0KEIwNkEsNTNFRCw5MDI3LEQ4MzEpLAorCWJuX3BhY2s0KEU1REIsMzgyRiw0MTMwLDAxQUUpLAorCWJuX3BhY2s0KEY4RkYsOTQwNixBRDlFLDUzMEUpLAorCWJuX3BhY2s0KEM5NzUsMUU3NiwzREJBLDM3QkQpLAorCWJuX3BhY2s0KEMxRDQsRENCMiw2MDI2LDQ2REUpLAorCWJuX3BhY2s0KDM2QzMsRkFCNCxEMjdDLDcwMjYpLAorCWJuX3BhY2s0KDRERjQsMzVDOSwzNDAyLDg0OTIpLAorCWJuX3BhY2s0KDg2RkYsQjdEQyw5MEE2LEMwOEYpLAorCWJuX3BhY2s0KDkzQjQsRUE5OCw4RDhGLEREQzEpLAorCWJuX3BhY2s0KEQwMDYsOTEyNyxENUIwLDVBQTkpLAorCWJuX3BhY2s0KEI4MUIsREQ3NiwyMTcwLDQ4MUMpLAorCWJuX3BhY2s0KDFGNjEsMjk3MCxDRUUyLEQ3QUYpLAorCWJuX3BhY2s0KDIzM0IsQTE4Niw1MTVCLEU3RUQpLAorCWJuX3BhY2s0KDk5QjIsOTY0RixBMDkwLEMzQTIpLAorCWJuX3BhY2s0KDI4N0MsNTk0Nyw0RTZCLEMwNUQpLAorCWJuX3BhY2s0KDJFOEUsRkMxNCwxRkJFLENBQTYpLAorCWJuX3BhY2s0KERCQkIsQzJEQiwwNERFLDhFRjkpLAorCWJuX3BhY2s0KDI1ODMsRTlDQSwyQUQ0LDRDRTgpLAorCWJuX3BhY2s0KDFBOTQsNjgzNCxCNjE1LDBCREEpLAorCWJuX3BhY2s0KDk5QzMsMjcxOCw2QUY0LEUyM0MpLAorCWJuX3BhY2s0KDg4NzEsOUExMCxCREJBLDVCMjYpLAorCWJuX3BhY2s0KDFBNzIsM0MxMixBNzg3LEU2RDcpLAorCWJuX3BhY2s0KDRCODIsRDEyMCxBOTIxLDA4MDEpLAorCWJuX3BhY2s0KDQzREIsNUJGQyxFMEZELDEwOEUpLAorCWJuX3BhY2s0KDA4RTIsNEZBMCw3NEU1LEFCMzEpLAorCWJuX3BhY2s0KDc3MDksODhDMCxCQUQ5LDQ2RTIpLAorCWJuX3BhY2s0KEJCRTEsMTc1Nyw3QTYxLDVENkMpLAorCWJuX3BhY2s0KDUyMUYsMkIxOCwxNzdCLDIwMEMpLAorCWJuX3BhY2s0KEQ4NzYsMDI3MywzRUM4LDZBNjQpLAorCWJuX3BhY2s0KEYxMkYsRkEwNixEOThBLDA4NjQpLAorCWJuX3BhY2s0KENFRTMsRDIyNiwxQUQyLEVFNkIpLAorCWJuX3BhY2s0KDFFOEMsOTRFMCw0QTI1LDYxOUQpLAorCWJuX3BhY2s0KEFCRjUsQUU4QyxEQjA5LDMzRDcpLAorCWJuX3BhY2s0KEIzOTcsMEY4NSxBNkUxLEU0QzcpLAorCWJuX3BhY2s0KDhBRUEsNzE1Nyw1RDA2LDBDN0QpLAorCWJuX3BhY2s0KEVDRkIsODUwNCw1OERCLEVGMEEpLAorCWJuX3BhY2s0KEE4NTUsMjFBQixERjFDLEJBNjQpLAorCWJuX3BhY2s0KEFEMzMsMTcwRCwwNDUwLDdBMzMpLAorCWJuX3BhY2s0KDE1NzIsOEU1QSw4QUFBLEM0MkQpLAorCWJuX3BhY2s0KDE1RDIsMjYxOCw5OEZBLDA1MTApLAorCWJuX3BhY2s0KDM5OTUsNDk3QyxFQTk1LDZBRTUpLAorCWJuX3BhY2s0KERFMkIsQ0JGNiw5NTU4LDE3MTgpLAorCWJuX3BhY2s0KEI1QzUsNURGMCw2RjRDLDUyQzkpLAorCWJuX3BhY2s0KDlCMjcsODNBMixFQzA3LEEyOEYpLAorCWJuX3BhY2s0KEUzOUUsNzcyQywxODBFLDg2MDMpLAorCWJuX3BhY2s0KDMyOTAsNUU0NiwyRTM2LENFM0IpLAorCWJuX3BhY2s0KEYxNzQsNkMwOCxDQTE4LDIxN0MpLAorCWJuX3BhY2s0KDY3MEMsMzU0RSw0QUJDLDk4MDQpLAorCWJuX3BhY2s0KDlFRDUsMjkwNyw3MDk2LDk2NkQpLAorCWJuX3BhY2s0KDFDNjIsRjM1NiwyMDg1LDUyQkIpLAorCWJuX3BhY2s0KDgzNjUsNUQyMyxEQ0EzLEFEOTYpLAorCWJuX3BhY2s0KDY5MTYsM0ZBOCxGRDI0LENGNUYpLAorCWJuX3BhY2s0KDk4REEsNDgzNiwxQzU1LEQzOUEpLAorCWJuX3BhY2s0KEMyMDAsN0NCOCxBMTYzLEJGMDUpLAorCWJuX3BhY2s0KDQ5MjgsNjY1MSxFQ0U0LDVCM0QpLAorCWJuX3BhY2s0KEFFOUYsMjQxMSw3QzRCLDFGRTYpLAorCWJuX3BhY2s0KEVFMzgsNkJGQiw1QTg5LDlGQTUpLAorCWJuX3BhY2s0KDBCRkYsNUNCNixGNDA2LEI3RUQpLAorCWJuX3BhY2s0KEY0NEMsNDJFOSxBNjM3LEVENkIpLAorCWJuX3BhY2s0KEU0ODUsQjU3Niw2MjVFLDdFQzYpLAorCWJuX3BhY2s0KDRGRTEsMzU2RCw2RDUxLEMyNDUpLAorCWJuX3BhY2s0KDMwMkIsMEE2RCxGMjVGLDE0MzcpLAorCWJuX3BhY2s0KEVGOTUsMTlCMyxDRDNBLDQzMUIpLAorCWJuX3BhY2s0KDUxNEEsMDg3OSw4RTM0LDA0REQpLAorCWJuX3BhY2s0KDAyMEIsQkVBNiwzQjEzLDlCMjIpLAorCWJuX3BhY2s0KDI5MDIsNEUwOCw4QTY3LENDNzQpLAorCWJuX3BhY2s0KEM0QzYsNjI4Qiw4MERDLDFDRDEpLAorCWJuX3BhY2s0KEM5MEYsREFBMiwyMTY4LEMyMzQpLAorCWJuX3BhY2s0KEZGRkYsRkZGRixGRkZGLEZGRkYpCit9Oworc3RhdGljIEJJR05VTSBibl9ncm91cF84MTkyID0geworCWJuX2dyb3VwXzgxOTJfdmFsdWUsCisJKHNpemVvZiBibl9ncm91cF84MTkyX3ZhbHVlKS9zaXplb2YoQk5fVUxPTkcpLAorCShzaXplb2YgYm5fZ3JvdXBfODE5Ml92YWx1ZSkvc2l6ZW9mKEJOX1VMT05HKSwKKwkwLAorCUJOX0ZMR19TVEFUSUNfREFUQQorfTsKKworc3RhdGljIEJOX1VMT05HIGJuX2dlbmVyYXRvcl8xOV92YWx1ZVtdID0gezE5fSA7CitzdGF0aWMgQklHTlVNIGJuX2dlbmVyYXRvcl8xOSA9IHsKKwlibl9nZW5lcmF0b3JfMTlfdmFsdWUsCisJMSwKKwkxLAorCTAsCisJQk5fRkxHX1NUQVRJQ19EQVRBCit9Oworc3RhdGljIEJOX1VMT05HIGJuX2dlbmVyYXRvcl81X3ZhbHVlW10gPSB7NX0gOworc3RhdGljIEJJR05VTSBibl9nZW5lcmF0b3JfNSA9IHsKKwlibl9nZW5lcmF0b3JfNV92YWx1ZSwKKwkxLAorCTEsCisJMCwKKwlCTl9GTEdfU1RBVElDX0RBVEEKK307CitzdGF0aWMgQk5fVUxPTkcgYm5fZ2VuZXJhdG9yXzJfdmFsdWVbXSA9IHsyfSA7CitzdGF0aWMgQklHTlVNIGJuX2dlbmVyYXRvcl8yID0geworCWJuX2dlbmVyYXRvcl8yX3ZhbHVlLAorCTEsCisJMSwKKwkwLAorCUJOX0ZMR19TVEFUSUNfREFUQQorfTsKKworc3RhdGljIFNSUF9nTiBrbm93bmdOW10gPSB7CisJeyI4MTkyIiwmYm5fZ2VuZXJhdG9yXzE5ICwgJmJuX2dyb3VwXzgxOTJ9LAorCXsiNjE0NCIsJmJuX2dlbmVyYXRvcl81ICwgJmJuX2dyb3VwXzYxNDR9LAorCXsiNDA5NiIsJmJuX2dlbmVyYXRvcl81ICwgJmJuX2dyb3VwXzQwOTZ9LAorCXsiMzA3MiIsJmJuX2dlbmVyYXRvcl81ICwgJmJuX2dyb3VwXzMwNzJ9LAorCXsiMjA0OCIsJmJuX2dlbmVyYXRvcl8yICwgJmJuX2dyb3VwXzIwNDh9LAorCXsiMTUzNiIsJmJuX2dlbmVyYXRvcl8yICwgJmJuX2dyb3VwXzE1MzZ9LAorCXsiMTAyNCIsJmJuX2dlbmVyYXRvcl8yICwgJmJuX2dyb3VwXzEwMjR9LAorfTsKKyNkZWZpbmUgS05PV05fR05fTlVNQkVSIHNpemVvZihrbm93bmdOKSAvIHNpemVvZihTUlBfZ04pCisKKy8qIGVuZCBvZiBnZW5lcmF0ZWQgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NycC9zcnBfbGNsLmggYi9jcnlwdG8vc3JwL3NycF9sY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJkYTNmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NycC9zcnBfbGNsLmgKQEAgLTAsMCArMSw4MyBAQAorLyogY3J5cHRvL3NycC9zcnBfbGNsLmggKi8KKy8qIFdyaXR0ZW4gYnkgUGV0ZXIgU3lsdmVzdGVyIChwZXRlci5zeWx2ZXN0ZXJAZWRlbHdlYi5mcikgIAorICogZm9yIHRoZSBFZGVsS2V5IHByb2plY3QgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2lmbmRlZiBIRUFERVJfU1JQX0xDTF9ICisjZGVmaW5lIEhFQURFUl9TUlBfTENMX0gKKworI2luY2x1ZGUgPG9wZW5zc2wvc3JwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKworI2lmIDAKKyNkZWZpbmUgc3JwX2JuX3ByaW50KGEpIHtmcHJpbnRmKHN0ZGVyciwgI2EgIj0iKTsgQk5fcHJpbnRfZnAoc3RkZXJyLGEpOyBcCisgICBmcHJpbnRmKHN0ZGVyciwiXG4iKTt9CisjZWxzZQorI2RlZmluZSAgIHNycF9ibl9wcmludChhKQorI2VuZGlmCisKKworCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NycC9zcnBfbGliLmMgYi9jcnlwdG8vc3JwL3NycF9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNlYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NycC9zcnBfbGliLmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qIGNyeXB0by9zcnAvc3JwX2xpYi5jICovCisvKiBXcml0dGVuIGJ5IENocmlzdG9waGUgUmVub3UgKGNocmlzdG9waGUucmVub3VAZWRlbHdlYi5mcikgd2l0aCAKKyAqIHRoZSBwcmVjaW91cyBoZWxwIG9mIFBldGVyIFN5bHZlc3RlciAocGV0ZXIuc3lsdmVzdGVyQGVkZWx3ZWIuZnIpIAorICogZm9yIHRoZSBFZGVsS2V5IHByb2plY3QgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSAic3JwX2xjbC5oIgorI2luY2x1ZGUgPG9wZW5zc2wvc3JwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKworI2lmIChCTl9CWVRFUyA9PSA4KQorI2RlZmluZSBibl9wYWNrNChhMSxhMixhMyxhNCkgMHgjI2ExIyNhMiMjYTMjI2E0IyN1bAorI2VuZGlmCisjaWYgKEJOX0JZVEVTID09IDQpCisjZGVmaW5lIGJuX3BhY2s0KGExLGEyLGEzLGE0KSAgMHgjI2EzIyNhNCMjdWwsIDB4IyNhMSMjYTIjI3VsCisjZW5kaWYKKyNpZiAoQk5fQllURVMgPT0gMikKKyNkZWZpbmUgYm5fcGFjazQoYTEsYTIsYTMsYTQpIDB4IyNhNCMjdSwweCMjYTMjI3UsMHgjI2EyIyN1LDB4IyNhMSMjdQorI2VuZGlmCisKKworI2luY2x1ZGUgInNycF9ncnBzLmgiCisKK3N0YXRpYyBCSUdOVU0gKnNycF9DYWxjX2soQklHTlVNICpOLCBCSUdOVU0gKmcpCisJeworCS8qIGsgPSBTSEExKE4gfCBQQUQoZykpIC0tIHRscy1zcnAgZHJhZnQgOCAqLworCisJdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgKnRtcDsKKwlFVlBfTURfQ1RYIGN0eHQ7CisJaW50IGxvbmdnIDsKKwlpbnQgbG9uZ04gPSBCTl9udW1fYnl0ZXMoTik7CisKKwlpZiAoKHRtcCA9IE9QRU5TU0xfbWFsbG9jKGxvbmdOKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJQk5fYm4yYmluKE4sdG1wKSA7CisKKwlFVlBfTURfQ1RYX2luaXQoJmN0eHQpOworCUVWUF9EaWdlc3RJbml0X2V4KCZjdHh0LCBFVlBfc2hhMSgpLCBOVUxMKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZjdHh0LCB0bXAsIGxvbmdOKTsKKworCW1lbXNldCh0bXAsIDAsIGxvbmdOKTsKKwlsb25nZyA9IEJOX2JuMmJpbihnLHRtcCkgOworICAgICAgICAvKiB1c2UgdGhlIHplcm9zIGJlaGluZCB0byBwYWQgb24gbGVmdCAqLworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIHRtcCArIGxvbmdnLCBsb25nTi1sb25nZyk7CisJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4dCwgdG1wLCBsb25nZyk7CisJT1BFTlNTTF9mcmVlKHRtcCk7CisKKwlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eHQsIGRpZ2VzdCwgTlVMTCk7CisJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHh0KTsKKwlyZXR1cm4gQk5fYmluMmJuKGRpZ2VzdCwgc2l6ZW9mKGRpZ2VzdCksIE5VTEwpOwkKKwl9CisKK0JJR05VTSAqU1JQX0NhbGNfdShCSUdOVU0gKkEsIEJJR05VTSAqQiwgQklHTlVNICpOKQorCXsKKwkvKiBrID0gU0hBMShQQUQoQSkgfHwgUEFEKEIpICkgLS0gdGxzLXNycCBkcmFmdCA4ICovCisKKwlCSUdOVU0gKnU7CQorCXVuc2lnbmVkIGNoYXIgY3VbU0hBX0RJR0VTVF9MRU5HVEhdOworCXVuc2lnbmVkIGNoYXIgKmNBQjsKKwlFVlBfTURfQ1RYIGN0eHQ7CisJaW50IGxvbmdOOyAgCisJaWYgKChBID09IE5VTEwpIHx8KEIgPT0gTlVMTCkgfHwgKE4gPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworCisJbG9uZ049IEJOX251bV9ieXRlcyhOKTsKKworCWlmICgoY0FCID0gT1BFTlNTTF9tYWxsb2MoMipsb25nTikpID09IE5VTEwpIAorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChjQUIsIDAsIGxvbmdOKTsKKworCUVWUF9NRF9DVFhfaW5pdCgmY3R4dCk7CisJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eHQsIEVWUF9zaGExKCksIE5VTEwpOworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIGNBQiArIEJOX2JuMmJpbihBLGNBQitsb25nTiksIGxvbmdOKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZjdHh0LCBjQUIgKyBCTl9ibjJiaW4oQixjQUIrbG9uZ04pLCBsb25nTik7CisJT1BFTlNTTF9mcmVlKGNBQik7CisJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHh0LCBjdSwgTlVMTCk7CisJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHh0KTsKKworCWlmICghKHUgPSBCTl9iaW4yYm4oY3UsIHNpemVvZihjdSksIE5VTEwpKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFCTl9pc196ZXJvKHUpKQorCQlyZXR1cm4gdTsKKwlCTl9mcmVlKHUpOworCXJldHVybiBOVUxMOworfQorCitCSUdOVU0gKlNSUF9DYWxjX3NlcnZlcl9rZXkoQklHTlVNICpBLCBCSUdOVU0gKnYsIEJJR05VTSAqdSwgQklHTlVNICpiLCBCSUdOVU0gKk4pCisJeworCUJJR05VTSAqdG1wID0gTlVMTCwgKlMgPSBOVUxMOworCUJOX0NUWCAqYm5fY3R4OyAKKwkKKwlpZiAodSA9PSBOVUxMIHx8IEEgPT0gTlVMTCB8fCB2ID09IE5VTEwgfHwgYiA9PSBOVUxMIHx8IE4gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7IAorCisJaWYgKChibl9jdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwgfHwKKwkJKHRtcCA9IEJOX25ldygpKSA9PSBOVUxMIHx8CisJCShTID0gQk5fbmV3KCkpID09IE5VTEwgKQorCQlnb3RvIGVycjsKKworCS8qIFMgPSAoQSp2Kip1KSAqKiBiICovIAorCisJaWYgKCFCTl9tb2RfZXhwKHRtcCx2LHUsTixibl9jdHgpKQorCQlnb3RvIGVycjsKKwlpZiAoIUJOX21vZF9tdWwodG1wLEEsdG1wLE4sYm5fY3R4KSkKKwkJZ290byBlcnI7CisJaWYgKCFCTl9tb2RfZXhwKFMsdG1wLGIsTixibl9jdHgpKQorCQlnb3RvIGVycjsKK2VycjoKKwlCTl9DVFhfZnJlZShibl9jdHgpOworCUJOX2NsZWFyX2ZyZWUodG1wKTsKKwlyZXR1cm4gUzsKKwl9CisKK0JJR05VTSAqU1JQX0NhbGNfQihCSUdOVU0gKmIsIEJJR05VTSAqTiwgQklHTlVNICpnLCBCSUdOVU0gKnYpCisJeworCUJJR05VTSAgKmt2ID0gTlVMTCwgKmdiID0gTlVMTDsKKwlCSUdOVU0gKkIgPSBOVUxMLCAqayA9IE5VTEw7CisJQk5fQ1RYICpibl9jdHg7CisKKwlpZiAoYiA9PSBOVUxMIHx8IE4gPT0gTlVMTCB8fCBnID09IE5VTEwgfHwgdiA9PSBOVUxMIHx8CisJCShibl9jdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisJCXJldHVybiBOVUxMOyAKKworCWlmICggKGt2ID0gQk5fbmV3KCkpID09IE5VTEwgfHwKKwkJKGdiID0gQk5fbmV3KCkpID09IE5VTEwgfHwKKwkJKEIgPSBCTl9uZXcoKSk9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCS8qIEIgPSBnKipiICsgayp2ICovCisKKwlpZiAoIUJOX21vZF9leHAoZ2IsZyxiLE4sYm5fY3R4KSB8fAorCSAgICEoayA9IHNycF9DYWxjX2soTixnKSkgfHwKKwkgICAhQk5fbW9kX211bChrdix2LGssTixibl9jdHgpIHx8IAorCSAgICFCTl9tb2RfYWRkKEIsZ2Isa3YsTixibl9jdHgpKQorCQl7CisJCUJOX2ZyZWUoQik7CisJCUIgPSBOVUxMOworCQl9CitlcnI6CisJQk5fQ1RYX2ZyZWUoYm5fY3R4KTsKKwlCTl9jbGVhcl9mcmVlKGt2KTsKKwlCTl9jbGVhcl9mcmVlKGdiKTsKKwlCTl9mcmVlKGspOyAKKwlyZXR1cm4gQjsKKwl9CisKK0JJR05VTSAqU1JQX0NhbGNfeChCSUdOVU0gKnMsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCisJeworCXVuc2lnbmVkIGNoYXIgZGlnW1NIQV9ESUdFU1RfTEVOR1RIXTsKKwlFVlBfTURfQ1RYIGN0eHQ7CisJdW5zaWduZWQgY2hhciAqY3M7CisKKwlpZiAoKHMgPT0gTlVMTCkgfHwKKwkJKHVzZXIgPT0gTlVMTCkgfHwKKwkJKHBhc3MgPT0gTlVMTCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKChjcyA9IE9QRU5TU0xfbWFsbG9jKEJOX251bV9ieXRlcyhzKSkpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJRVZQX01EX0NUWF9pbml0KCZjdHh0KTsKKwlFVlBfRGlnZXN0SW5pdF9leCgmY3R4dCwgRVZQX3NoYTEoKSwgTlVMTCk7CisJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4dCwgdXNlciwgc3RybGVuKHVzZXIpKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZjdHh0LCAiOiIsIDEpOworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIHBhc3MsIHN0cmxlbihwYXNzKSk7CisJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHh0LCBkaWcsIE5VTEwpOworCisJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eHQsIEVWUF9zaGExKCksIE5VTEwpOworCUJOX2JuMmJpbihzLGNzKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZjdHh0LCBjcywgQk5fbnVtX2J5dGVzKHMpKTsKKwlPUEVOU1NMX2ZyZWUoY3MpOworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIGRpZywgc2l6ZW9mKGRpZykpOworCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4dCwgZGlnLCBOVUxMKTsKKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eHQpOworCisJcmV0dXJuIEJOX2JpbjJibihkaWcsIHNpemVvZihkaWcpLCBOVUxMKTsKKwl9CisKK0JJR05VTSAqU1JQX0NhbGNfQShCSUdOVU0gKmEsIEJJR05VTSAqTiwgQklHTlVNICpnKQorCXsKKwlCTl9DVFggKmJuX2N0eDsgCisJQklHTlVNICogQSA9IE5VTEw7CisKKwlpZiAoYSA9PSBOVUxMIHx8IE4gPT0gTlVMTCB8fCBnID09IE5VTEwgfHwKKwkJKGJuX2N0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgCisJCXJldHVybiBOVUxMOworCisJaWYgKChBID0gQk5fbmV3KCkpICE9IE5VTEwgJiYKKwkgICAhQk5fbW9kX2V4cChBLGcsYSxOLGJuX2N0eCkpCisJCXsKKwkJQk5fZnJlZShBKTsKKwkJQSA9IE5VTEw7CisJCX0KKwlCTl9DVFhfZnJlZShibl9jdHgpOworCXJldHVybiBBOworCX0KKworCitCSUdOVU0gKlNSUF9DYWxjX2NsaWVudF9rZXkoQklHTlVNICpOLCBCSUdOVU0gKkIsIEJJR05VTSAqZywgQklHTlVNICp4LCBCSUdOVU0gKmEsIEJJR05VTSAqdSkKKwl7CisJQklHTlVNICp0bXAgPSBOVUxMLCAqdG1wMiA9IE5VTEwsICp0bXAzID0gTlVMTCAsICprID0gTlVMTCwgKksgPSBOVUxMOworCUJOX0NUWCAqYm5fY3R4OworCisJaWYgKHUgPT0gTlVMTCB8fCBCID09IE5VTEwgfHwgTiA9PSBOVUxMIHx8IGcgPT0gTlVMTCB8fCB4ID09IE5VTEwgfHwgYSA9PSBOVUxMIHx8CisJCShibl9jdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisJCXJldHVybiBOVUxMOyAKKworCWlmICgodG1wID0gQk5fbmV3KCkpID09IE5VTEwgfHwKKwkJKHRtcDIgPSBCTl9uZXcoKSk9PSBOVUxMIHx8CisJCSh0bXAzID0gQk5fbmV3KCkpPT0gTlVMTCB8fAorCQkoSyA9IEJOX25ldygpKSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwkKKwlpZiAoIUJOX21vZF9leHAodG1wLGcseCxOLGJuX2N0eCkpCisJCWdvdG8gZXJyOworCWlmICghKGsgPSBzcnBfQ2FsY19rKE4sZykpKQorCQlnb3RvIGVycjsKKwlpZiAoIUJOX21vZF9tdWwodG1wMix0bXAsayxOLGJuX2N0eCkpCisJCWdvdG8gZXJyOworCWlmICghQk5fbW9kX3N1Yih0bXAsQix0bXAyLE4sYm5fY3R4KSkKKwkJZ290byBlcnI7CisKKwlpZiAoIUJOX21vZF9tdWwodG1wMyx1LHgsTixibl9jdHgpKQorCQlnb3RvIGVycjsKKwlpZiAoIUJOX21vZF9hZGQodG1wMixhLHRtcDMsTixibl9jdHgpKQorCQlnb3RvIGVycjsKKwlpZiAoIUJOX21vZF9leHAoSyx0bXAsdG1wMixOLGJuX2N0eCkpCisJCWdvdG8gZXJyOworCitlcnIgOgorCUJOX0NUWF9mcmVlKGJuX2N0eCk7CisJQk5fY2xlYXJfZnJlZSh0bXApOworCUJOX2NsZWFyX2ZyZWUodG1wMik7CisJQk5fY2xlYXJfZnJlZSh0bXAzKTsKKwlCTl9mcmVlKGspOworCXJldHVybiBLOwkKKwl9CisKK2ludCBTUlBfVmVyaWZ5X0JfbW9kX04oQklHTlVNICpCLCBCSUdOVU0gKk4pCisJeworCUJJR05VTSAqcjsKKwlCTl9DVFggKmJuX2N0eDsgCisJaW50IHJldCA9IDA7CisKKwlpZiAoQiA9PSBOVUxMIHx8IE4gPT0gTlVMTCB8fAorCQkoYm5fY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmICgociA9IEJOX25ldygpKSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwkvKiBDaGVja3MgaWYgQiAlIE4gPT0gMCAqLworCWlmICghQk5fbm5tb2QocixCLE4sYm5fY3R4KSkKKwkJZ290byBlcnI7CisJcmV0ID0gIUJOX2lzX3plcm8ocik7CitlcnI6CisJQk5fQ1RYX2ZyZWUoYm5fY3R4KTsKKwlCTl9mcmVlKHIpOworCXJldHVybiByZXQ7CisJfQorCitpbnQgU1JQX1ZlcmlmeV9BX21vZF9OKEJJR05VTSAqQSwgQklHTlVNICpOKQorCXsKKwkvKiBDaGVja3MgaWYgQSAlIE4gPT0gMCAqLworCXJldHVybiBTUlBfVmVyaWZ5X0JfbW9kX04oQSxOKSA7CisJfQorCisKKy8qIENoZWNrIGlmIEcgYW5kIE4gYXJlIGt3b3duIHBhcmFtZXRlcnMuIAorICAgVGhlIHZhbHVlcyBoYXZlIGJlZW4gZ2VuZXJhdGVkIGZyb20gdGhlIGlldGYtdGxzLXNycCBkcmFmdCB2ZXJzaW9uIDgKKyovCitjaGFyICpTUlBfY2hlY2tfa25vd25fZ05fcGFyYW0oQklHTlVNICpnLCBCSUdOVU0gKk4pCisJeworCXNpemVfdCBpOworCWlmICgoZyA9PSBOVUxMKSB8fCAoTiA9PSBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlzcnBfYm5fcHJpbnQoZyk7CisJc3JwX2JuX3ByaW50KE4pOworCisJZm9yKGkgPSAwOyBpIDwgS05PV05fR05fTlVNQkVSOyBpKyspCisJCXsKKwkJaWYgKEJOX2NtcChrbm93bmdOW2ldLmcsIGcpID09IDAgJiYgQk5fY21wKGtub3duZ05baV0uTiwgTikgPT0gMCkgCisJCQlyZXR1cm4ga25vd25nTltpXS5pZDsKKwkJfQorCXJldHVybiBOVUxMOworCX0KKworU1JQX2dOICpTUlBfZ2V0X2RlZmF1bHRfZ04oY29uc3QgY2hhciAqaWQpCisJeworCXNpemVfdCBpOworCisJaWYgKGlkID09IE5VTEwpIAorCQlyZXR1cm4ga25vd25nTjsKKwlmb3IoaSA9IDA7IGkgPCBLTk9XTl9HTl9OVU1CRVI7IGkrKykKKwkJeworCQlpZiAoc3RyY21wKGtub3duZ05baV0uaWQsIGlkKT09MCkKKwkJCXJldHVybiBrbm93bmdOICsgaTsKKwkJfQorCXJldHVybiBOVUxMOworCX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NycC9zcnBfdmZ5LmMgYi9jcnlwdG8vc3JwL3NycF92ZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGJlOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3NycC9zcnBfdmZ5LmMKQEAgLTAsMCArMSw2NTcgQEAKKy8qIGNyeXB0by9zcnAvc3JwX3ZmeS5jICovCisvKiBXcml0dGVuIGJ5IENocmlzdG9waGUgUmVub3UgKGNocmlzdG9waGUucmVub3VAZWRlbHdlYi5mcikgd2l0aCAKKyAqIHRoZSBwcmVjaW91cyBoZWxwIG9mIFBldGVyIFN5bHZlc3RlciAocGV0ZXIuc3lsdmVzdGVyQGVkZWx3ZWIuZnIpIAorICogZm9yIHRoZSBFZGVsS2V5IHByb2plY3QgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorI2luY2x1ZGUgImNyeXB0bGliLmgiCisjaW5jbHVkZSAic3JwX2xjbC5oIgorI2luY2x1ZGUgPG9wZW5zc2wvc3JwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2J1ZmZlci5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvdHh0X2RiLmg+CisKKyNkZWZpbmUgU1JQX1JBTkRPTV9TQUxUX0xFTiAyMAorI2RlZmluZSBNQVhfTEVOIDI1MDAKKworc3RhdGljIGNoYXIgYjY0dGFibGVbXSA9CisgICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vIjsKKworLyogdGhlIGZvbGxvd2luZyB0d28gY29udmVyc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW5zcGlyZWQgYnkgY29kZSBmcm9tIFN0YW5mb3JkICovIAorCisvKgorICogQ29udmVydCBhIGJhc2U2NCBzdHJpbmcgaW50byByYXcgYnl0ZSBhcnJheSByZXByZXNlbnRhdGlvbi4KKyAqLworc3RhdGljIGludCB0X2Zyb21iNjQodW5zaWduZWQgY2hhciAqYSwgY29uc3QgY2hhciAqc3JjKQorCXsKKwljaGFyICpsb2M7CisJaW50IGksIGo7CisJaW50IHNpemU7CisKKwl3aGlsZSgqc3JjICYmICgqc3JjID09ICcgJyB8fCAqc3JjID09ICdcdCcgfHwgKnNyYyA9PSAnXG4nKSkKKwkJKytzcmM7CisJc2l6ZSA9IHN0cmxlbihzcmMpOworCWkgPSAwOworCXdoaWxlKGkgPCBzaXplKQorCQl7CisJCWxvYyA9IHN0cmNocihiNjR0YWJsZSwgc3JjW2ldKTsKKwkJaWYobG9jID09IChjaGFyICopIDApIGJyZWFrOworCQllbHNlIGFbaV0gPSBsb2MgLSBiNjR0YWJsZTsKKwkJKytpOworCQl9CisJc2l6ZSA9IGk7CisJaSA9IHNpemUgLSAxOworCWogPSBzaXplOworCXdoaWxlKDEpCisJCXsKKwkJYVtqXSA9IGFbaV07CisJCWlmKC0taSA8IDApIGJyZWFrOworCQlhW2pdIHw9IChhW2ldICYgMykgPDwgNjsKKwkJLS1qOworCQlhW2pdID0gKHVuc2lnbmVkIGNoYXIpICgoYVtpXSAmIDB4M2MpID4+IDIpOworCQlpZigtLWkgPCAwKSBicmVhazsKKwkJYVtqXSB8PSAoYVtpXSAmIDB4ZikgPDwgNDsKKwkJLS1qOworCQlhW2pdID0gKHVuc2lnbmVkIGNoYXIpICgoYVtpXSAmIDB4MzApID4+IDQpOworCQlpZigtLWkgPCAwKSBicmVhazsKKwkJYVtqXSB8PSAoYVtpXSA8PCAyKTsKKworCQlhWy0tal0gPSAwOworCQlpZigtLWkgPCAwKSBicmVhazsKKwkJfQorCXdoaWxlKGFbal0gPT0gMCAmJiBqIDw9IHNpemUpICsrajsKKwlpID0gMDsKKwl3aGlsZSAoaiA8PSBzaXplKSBhW2krK10gPSBhW2orK107CisJcmV0dXJuIGk7CisJfQorCisKKy8qCisgKiBDb252ZXJ0IGEgcmF3IGJ5dGUgc3RyaW5nIGludG8gYSBudWxsLXRlcm1pbmF0ZWQgYmFzZTY0IEFTQ0lJIHN0cmluZy4KKyAqLworc3RhdGljIGNoYXIgKnRfdG9iNjQoY2hhciAqZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBzaXplKQorCXsKKwlpbnQgYywgcG9zID0gc2l6ZSAlIDM7CisJdW5zaWduZWQgY2hhciBiMCA9IDAsIGIxID0gMCwgYjIgPSAwLCBub3RsZWFkaW5nID0gMDsKKwljaGFyICpvbGRkc3QgPSBkc3Q7CisKKwlzd2l0Y2gocG9zKQorCQl7CisJY2FzZSAxOgorCQliMiA9IHNyY1swXTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQliMSA9IHNyY1swXTsKKwkJYjIgPSBzcmNbMV07CisJCWJyZWFrOworCQl9CisKKwl3aGlsZSgxKQorCQl7CisJCWMgPSAoYjAgJiAweGZjKSA+PiAyOworCQlpZihub3RsZWFkaW5nIHx8IGMgIT0gMCkKKwkJCXsKKwkJCSpkc3QrKyA9IGI2NHRhYmxlW2NdOworCQkJbm90bGVhZGluZyA9IDE7CisJCQl9CisJCWMgPSAoKGIwICYgMykgPDwgNCkgfCAoKGIxICYgMHhmMCkgPj4gNCk7CisJCWlmKG5vdGxlYWRpbmcgfHwgYyAhPSAwKQorCQkJeworCQkJKmRzdCsrID0gYjY0dGFibGVbY107CisJCQlub3RsZWFkaW5nID0gMTsKKwkJCX0KKwkJYyA9ICgoYjEgJiAweGYpIDw8IDIpIHwgKChiMiAmIDB4YzApID4+IDYpOworCQlpZihub3RsZWFkaW5nIHx8IGMgIT0gMCkKKwkJCXsKKwkJCSpkc3QrKyA9IGI2NHRhYmxlW2NdOworCQkJbm90bGVhZGluZyA9IDE7CisJCQl9CisJCWMgPSBiMiAmIDB4M2Y7CisJCWlmKG5vdGxlYWRpbmcgfHwgYyAhPSAwKQorCQkJeworCQkJKmRzdCsrID0gYjY0dGFibGVbY107CisJCQlub3RsZWFkaW5nID0gMTsKKwkJCX0KKwkJaWYocG9zID49IHNpemUpIGJyZWFrOworCQllbHNlCisJCQl7CisJCQliMCA9IHNyY1twb3MrK107CisJCQliMSA9IHNyY1twb3MrK107CisJCQliMiA9IHNyY1twb3MrK107CisJCQl9CisJCX0KKworCSpkc3QrKyA9ICdcMCc7CisJcmV0dXJuIG9sZGRzdDsKKwl9CisKK3N0YXRpYyB2b2lkIFNSUF91c2VyX3B3ZF9mcmVlKFNSUF91c2VyX3B3ZCAqdXNlcl9wd2QpCisJeworCWlmICh1c2VyX3B3ZCA9PSBOVUxMKSAKKwkJcmV0dXJuOworCUJOX2ZyZWUodXNlcl9wd2QtPnMpOworCUJOX2NsZWFyX2ZyZWUodXNlcl9wd2QtPnYpOworCU9QRU5TU0xfZnJlZSh1c2VyX3B3ZC0+aWQpOworCU9QRU5TU0xfZnJlZSh1c2VyX3B3ZC0+aW5mbyk7CisJT1BFTlNTTF9mcmVlKHVzZXJfcHdkKTsKKwl9CisKK3N0YXRpYyBTUlBfdXNlcl9wd2QgKlNSUF91c2VyX3B3ZF9uZXcoKQorCXsKKwlTUlBfdXNlcl9wd2QgKnJldCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihTUlBfdXNlcl9wd2QpKTsKKwlpZiAocmV0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOwkJCQkJCQkJCisJcmV0LT5OID0gTlVMTDsKKwlyZXQtPmcgPSBOVUxMOwkKKwlyZXQtPnMgPSBOVUxMOworCXJldC0+diA9IE5VTEw7CisJcmV0LT5pZCA9IE5VTEwgOworCXJldC0+aW5mbyA9IE5VTEw7CisJcmV0dXJuIHJldDsKKwl9CisKK3N0YXRpYyB2b2lkIFNSUF91c2VyX3B3ZF9zZXRfZ04oU1JQX3VzZXJfcHdkICp2aW5mbywgY29uc3QgQklHTlVNICpnLAorCQkJCWNvbnN0IEJJR05VTSAqTikKKwl7CisJdmluZm8tPk4gPSBOOworCXZpbmZvLT5nID0gZzsJCisJfQorCitzdGF0aWMgaW50IFNSUF91c2VyX3B3ZF9zZXRfaWRzKFNSUF91c2VyX3B3ZCAqdmluZm8sIGNvbnN0IGNoYXIgKmlkLAorCQkJCWNvbnN0IGNoYXIgKmluZm8pCisJeworCWlmIChpZCAhPSBOVUxMICYmIE5VTEwgPT0gKHZpbmZvLT5pZCA9IEJVRl9zdHJkdXAoaWQpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChpbmZvID09IE5VTEwgfHwgTlVMTCAhPSAodmluZm8tPmluZm8gPSBCVUZfc3RyZHVwKGluZm8pKSkgOworCX0KKworc3RhdGljIGludCBTUlBfdXNlcl9wd2Rfc2V0X3N2KFNSUF91c2VyX3B3ZCAqdmluZm8sIGNvbnN0IGNoYXIgKnMsCisJCQkgICAgICAgY29uc3QgY2hhciAqdikKKwl7CisJdW5zaWduZWQgY2hhciB0bXBbTUFYX0xFTl07CisJaW50IGxlbjsKKworCWlmIChzdHJsZW4ocykgPiBNQVhfTEVOIHx8IHN0cmxlbih2KSA+IE1BWF9MRU4pIAorCQlyZXR1cm4gMDsgCisJbGVuID0gdF9mcm9tYjY0KHRtcCwgdik7CisJaWYgKE5VTEwgPT0gKHZpbmZvLT52ID0gQk5fYmluMmJuKHRtcCwgbGVuLCBOVUxMKSkgKQorCQlyZXR1cm4gMDsKKwlsZW4gPSB0X2Zyb21iNjQodG1wLCBzKTsKKwlyZXR1cm4gKCh2aW5mby0+cyA9IEJOX2JpbjJibih0bXAsIGxlbiwgTlVMTCkpICE9IE5VTEwpIDsKKwl9CisKK3N0YXRpYyBpbnQgU1JQX3VzZXJfcHdkX3NldF9zdl9CTihTUlBfdXNlcl9wd2QgKnZpbmZvLCBCSUdOVU0gKnMsIEJJR05VTSAqdikKKwl7CisJdmluZm8tPnYgPSB2OworCXZpbmZvLT5zID0gczsKKwlyZXR1cm4gKHZpbmZvLT5zICE9IE5VTEwgJiYgdmluZm8tPnYgIT0gTlVMTCkgOworCX0KKworU1JQX1ZCQVNFICpTUlBfVkJBU0VfbmV3KGNoYXIgKnNlZWRfa2V5KQorCXsKKwlTUlBfVkJBU0UgKnZiID0gKFNSUF9WQkFTRSAqKSBPUEVOU1NMX21hbGxvYyhzaXplb2YoU1JQX1ZCQVNFKSk7CisKKwlpZiAodmIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCEodmItPnVzZXJzX3B3ZCA9IHNrX1NSUF91c2VyX3B3ZF9uZXdfbnVsbCgpKSB8fAorCQkhKHZiLT5nTl9jYWNoZSA9IHNrX1NSUF9nTl9jYWNoZV9uZXdfbnVsbCgpKSkKKwkJeworCQlPUEVOU1NMX2ZyZWUodmIpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCXZiLT5kZWZhdWx0X2cgPSBOVUxMOworCXZiLT5kZWZhdWx0X04gPSBOVUxMOworCXZiLT5zZWVkX2tleSA9IE5VTEw7CisJaWYgKChzZWVkX2tleSAhPSBOVUxMKSAmJiAKKwkJKHZiLT5zZWVkX2tleSA9IEJVRl9zdHJkdXAoc2VlZF9rZXkpKSA9PSBOVUxMKQorCQl7CisJCXNrX1NSUF91c2VyX3B3ZF9mcmVlKHZiLT51c2Vyc19wd2QpOworCQlza19TUlBfZ05fY2FjaGVfZnJlZSh2Yi0+Z05fY2FjaGUpOworCQlPUEVOU1NMX2ZyZWUodmIpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCXJldHVybiB2YjsKKwl9CisKKworaW50IFNSUF9WQkFTRV9mcmVlKFNSUF9WQkFTRSAqdmIpCisJeworCXNrX1NSUF91c2VyX3B3ZF9wb3BfZnJlZSh2Yi0+dXNlcnNfcHdkLFNSUF91c2VyX3B3ZF9mcmVlKTsKKwlza19TUlBfZ05fY2FjaGVfZnJlZSh2Yi0+Z05fY2FjaGUpOworCU9QRU5TU0xfZnJlZSh2Yi0+c2VlZF9rZXkpOworCU9QRU5TU0xfZnJlZSh2Yik7CisJcmV0dXJuIDA7CisJfQorCisKK3N0YXRpYyBTUlBfZ05fY2FjaGUgKlNSUF9nTl9uZXdfaW5pdChjb25zdCBjaGFyICpjaCkKKwl7CisJdW5zaWduZWQgY2hhciB0bXBbTUFYX0xFTl07CisJaW50IGxlbjsKKworCVNSUF9nTl9jYWNoZSAqbmV3Z04gPSAoU1JQX2dOX2NhY2hlICopT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFNSUF9nTl9jYWNoZSkpOworCWlmIChuZXdnTiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICgobmV3Z04tPmI2NF9ibiA9IEJVRl9zdHJkdXAoY2gpKSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCWxlbiA9IHRfZnJvbWI2NCh0bXAsIGNoKTsKKwlpZiAoKG5ld2dOLT5ibiA9IEJOX2JpbjJibih0bXAsIGxlbiwgTlVMTCkpKQorCQlyZXR1cm4gbmV3Z047CisKKwlPUEVOU1NMX2ZyZWUobmV3Z04tPmI2NF9ibik7CitlcnI6CisJT1BFTlNTTF9mcmVlKG5ld2dOKTsKKwlyZXR1cm4gTlVMTDsKKwl9CisKKworc3RhdGljIHZvaWQgU1JQX2dOX2ZyZWUoU1JQX2dOX2NhY2hlICpnTl9jYWNoZSkKKwl7CisJaWYgKGdOX2NhY2hlID09IE5VTEwpCisJCXJldHVybjsKKwlPUEVOU1NMX2ZyZWUoZ05fY2FjaGUtPmI2NF9ibik7CisJQk5fZnJlZShnTl9jYWNoZS0+Ym4pOworCU9QRU5TU0xfZnJlZShnTl9jYWNoZSk7CisJfQorCitzdGF0aWMgU1JQX2dOICpTUlBfZ2V0X2dOX2J5X2lkKGNvbnN0IGNoYXIgKmlkLCBTVEFDS19PRihTUlBfZ04pICpnTl90YWIpCisJeworCWludCBpOworCisJU1JQX2dOICpnTjsKKwlpZiAoZ05fdGFiICE9IE5VTEwpIAorCWZvcihpID0gMDsgaSA8IHNrX1NSUF9nTl9udW0oZ05fdGFiKTsgaSsrKQorCQl7CisJCWdOID0gc2tfU1JQX2dOX3ZhbHVlKGdOX3RhYiwgaSk7CisJCWlmIChnTiAmJiAoaWQgPT0gTlVMTCB8fCBzdHJjbXAoZ04tPmlkLGlkKT09MCkpCisJCQlyZXR1cm4gZ047CisJCX0KKwkKKwlyZXR1cm4gU1JQX2dldF9kZWZhdWx0X2dOKGlkKTsKKwl9CisKK3N0YXRpYyBCSUdOVU0gKlNSUF9nTl9wbGFjZV9ibihTVEFDS19PRihTUlBfZ05fY2FjaGUpICpnTl9jYWNoZSwgY2hhciAqY2gpCisJeworCWludCBpOworCWlmIChnTl9jYWNoZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHNlYXJjaCBpZiB3ZSBoYXZlIGFscmVhZHkgb25lLi4uICovCisJZm9yKGkgPSAwOyBpIDwgc2tfU1JQX2dOX2NhY2hlX251bShnTl9jYWNoZSk7IGkrKykKKwkJeworCQlTUlBfZ05fY2FjaGUgKmNhY2hlID0gc2tfU1JQX2dOX2NhY2hlX3ZhbHVlKGdOX2NhY2hlLCBpKTsKKwkJaWYgKHN0cmNtcChjYWNoZS0+YjY0X2JuLGNoKT09MCkKKwkJCXJldHVybiBjYWNoZS0+Ym47CisJCX0KKwkJewkJLyogaXQgaXMgdGhlIGZpcnN0IHRpbWUgdGhhdCB3ZSBmaW5kIGl0ICovCisJCVNSUF9nTl9jYWNoZSAqbmV3Z04gPSBTUlBfZ05fbmV3X2luaXQoY2gpOworCQlpZiAobmV3Z04pCisJCQl7CisJCQlpZiAoc2tfU1JQX2dOX2NhY2hlX2luc2VydChnTl9jYWNoZSxuZXdnTiwwKT4wKQorCQkJCXJldHVybiBuZXdnTi0+Ym47CisJCQlTUlBfZ05fZnJlZShuZXdnTik7CisJCQl9CisJCX0KKwlyZXR1cm4gTlVMTDsKKwl9CisKKy8qIHRoaXMgZnVuY3Rpb24gcGFyc2VzIHZlcmlmaWVyIGZpbGUuIEZvcm1hdCBpczoKKyAqIHN0cmluZyhpbmRleCk6YmFzZTY0KE4pOmJhc2U2NChnKTowCisgKiBzdHJpbmcodXNlcm5hbWUpOmJhc2U2NCh2KTpiYXNlNjQoc2FsdCk6aW50KGluZGV4KQorICovCisKKworaW50IFNSUF9WQkFTRV9pbml0KFNSUF9WQkFTRSAqdmIsIGNoYXIgKnZlcmlmaWVyX2ZpbGUpCisJeworCWludCBlcnJvcl9jb2RlIDsKKwlTVEFDS19PRihTUlBfZ04pICpTUlBfZ05fdGFiID0gc2tfU1JQX2dOX25ld19udWxsKCk7CisJY2hhciAqbGFzdF9pbmRleCA9IE5VTEw7CisJaW50IGk7CisJY2hhciAqKnBwOworCisJU1JQX2dOICpnTiA9IE5VTEw7CisJU1JQX3VzZXJfcHdkICp1c2VyX3B3ZCA9IE5VTEwgOworCisJVFhUX0RCICp0bXBkYiA9IE5VTEw7CisJQklPICppbiA9IEJJT19uZXcoQklPX3NfZmlsZSgpKTsKKworCWVycm9yX2NvZGUgPSBTUlBfRVJSX09QRU5fRklMRTsKKworCWlmIChpbiA9PSBOVUxMIHx8IEJJT19yZWFkX2ZpbGVuYW1lKGluLHZlcmlmaWVyX2ZpbGUpIDw9IDApCisJCWdvdG8gZXJyOworCisJZXJyb3JfY29kZSA9IFNSUF9FUlJfVkJBU0VfSU5DT01QTEVURV9GSUxFOworCisJaWYgKCh0bXBkYiA9VFhUX0RCX3JlYWQoaW4sREJfTlVNQkVSKSkgPT0gTlVMTCkKKwkJZ290byBlcnI7CisKKwllcnJvcl9jb2RlID0gU1JQX0VSUl9NRU1PUlk7CisKKworCWlmICh2Yi0+c2VlZF9rZXkpCisJCXsKKwkJbGFzdF9pbmRleCA9IFNSUF9nZXRfZGVmYXVsdF9nTihOVUxMKS0+aWQ7CisJCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9QU1RSSU5HX251bSh0bXBkYi0+ZGF0YSk7IGkrKykKKwkJeworCQlwcCA9IChjaGFyICoqKXNrX09QRU5TU0xfUFNUUklOR192YWx1ZSh0bXBkYi0+ZGF0YSxpKTsKKwkJaWYgKHBwW0RCX3NycHR5cGVdWzBdID09IERCX1NSUF9JTkRFWCkKKwkJCXsKKwkJCS8qd2UgYWRkIHRoaXMgY291cGxlIGluIHRoZSBpbnRlcm5hbCBTdGFjayAqLworCisJCQlpZiAoKGdOID0gKFNSUF9nTiAqKU9QRU5TU0xfbWFsbG9jKHNpemVvZihTUlBfZ04pKSkgPT0gTlVMTCkgCisgCQkJCWdvdG8gZXJyOworCisJCQlpZiAgKCEoZ04tPmlkID0gQlVGX3N0cmR1cChwcFtEQl9zcnBpZF0pKQorCSAgICAgICAgICAgICAgICB8fCAgIShnTi0+TiA9IFNSUF9nTl9wbGFjZV9ibih2Yi0+Z05fY2FjaGUscHBbREJfc3JwdmVyaWZpZXJdKSkKKwkJCXx8ICAhKGdOLT5nID0gU1JQX2dOX3BsYWNlX2JuKHZiLT5nTl9jYWNoZSxwcFtEQl9zcnBzYWx0XSkpCisJCQl8fCAgc2tfU1JQX2dOX2luc2VydChTUlBfZ05fdGFiLGdOLDApID09IDApCisJCQkJZ290byBlcnI7CisKKwkJCWdOID0gTlVMTDsKKworCQkJaWYgKHZiLT5zZWVkX2tleSAhPSBOVUxMKQorCQkJCXsKKwkJCQlsYXN0X2luZGV4ID0gcHBbREJfc3JwaWRdOworCQkJCX0KKwkJCX0KKwkJZWxzZSBpZiAocHBbREJfc3JwdHlwZV1bMF0gPT0gREJfU1JQX1ZBTElEKQorCQkJeworCQkJLyogaXQgaXMgYSB1c2VyIC4uLi4gKi8KKwkJCVNSUF9nTiAqbGdOOworCQkJaWYgKChsZ04gPSBTUlBfZ2V0X2dOX2J5X2lkKHBwW0RCX3NycGdOXSxTUlBfZ05fdGFiKSkhPU5VTEwpCisJCQkJeworCQkJCWVycm9yX2NvZGUgPSBTUlBfRVJSX01FTU9SWTsKKwkJCQlpZiAoKHVzZXJfcHdkID0gU1JQX3VzZXJfcHdkX25ldygpKSA9PSBOVUxMKSAKKwkJCQkJZ290byBlcnI7CisJCQkJCisJCQkJU1JQX3VzZXJfcHdkX3NldF9nTih1c2VyX3B3ZCxsZ04tPmcsbGdOLT5OKTsKKwkJCQlpZiAoIVNSUF91c2VyX3B3ZF9zZXRfaWRzKHVzZXJfcHdkLCBwcFtEQl9zcnBpZF0scHBbREJfc3JwaW5mb10pKQorCQkJCQlnb3RvIGVycjsKKwkJCQkKKwkJCQllcnJvcl9jb2RlID0gU1JQX0VSUl9WQkFTRV9CTl9MSUI7CisJCQkJaWYgKCFTUlBfdXNlcl9wd2Rfc2V0X3N2KHVzZXJfcHdkLCBwcFtEQl9zcnBzYWx0XSxwcFtEQl9zcnB2ZXJpZmllcl0pKQorCQkJCQlnb3RvIGVycjsKKworCQkJCWlmIChza19TUlBfdXNlcl9wd2RfaW5zZXJ0KHZiLT51c2Vyc19wd2QsIHVzZXJfcHdkLCAwKSA9PSAwKQorCQkJCQlnb3RvIGVycjsKKwkJCQl1c2VyX3B3ZCA9IE5VTEw7IC8qIGFiYW5kb24gcmVzcG9uc2FiaWxpdHkgKi8KKwkJCQl9CisJCQl9CisJCX0KKwkKKwlpZiAobGFzdF9pbmRleCAhPSBOVUxMKQorCQl7CisJCS8qIHRoaXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvIHNpbXVsYXRlIGEgZGVmYXVsdCB1c2VyICovCisKKwkJaWYgKCgoZ04gPSBTUlBfZ2V0X2dOX2J5X2lkKGxhc3RfaW5kZXgsU1JQX2dOX3RhYikpPT1OVUxMKSkKKwkJCXsKKwkJCWVycm9yX2NvZGUgPSBTUlBfRVJSX1ZCQVNFX0JOX0xJQjsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl2Yi0+ZGVmYXVsdF9nID0gZ04tPmcgOworCQl2Yi0+ZGVmYXVsdF9OID0gZ04tPk4gOworCQlnTiA9IE5VTEwgOworCQl9CisJZXJyb3JfY29kZSA9IFNSUF9OT19FUlJPUjsKKworIGVycjoKKwkvKiB0aGVyZSBtYXkgYmUgc3RpbGwgc29tZSBsZWFrcyB0byBmaXgsIGlmIHRoaXMgZmFpbHMsIHRoZSBhcHBsaWNhdGlvbiB0ZXJtaW5hdGVzIG1vc3QgbGlrZWx5ICovCisKKwlpZiAoZ04gIT0gTlVMTCkKKwkJeworCQlPUEVOU1NMX2ZyZWUoZ04tPmlkKTsKKwkJT1BFTlNTTF9mcmVlKGdOKTsKKwkJfQorCisJU1JQX3VzZXJfcHdkX2ZyZWUodXNlcl9wd2QpOworCisJaWYgKHRtcGRiKSBUWFRfREJfZnJlZSh0bXBkYik7CisJaWYgKGluKSBCSU9fZnJlZV9hbGwoaW4pOworCisJc2tfU1JQX2dOX2ZyZWUoU1JQX2dOX3RhYik7CisKKwlyZXR1cm4gZXJyb3JfY29kZTsKKworCX0KKworCitTUlBfdXNlcl9wd2QgKlNSUF9WQkFTRV9nZXRfYnlfdXNlcihTUlBfVkJBU0UgKnZiLCBjaGFyICp1c2VybmFtZSkKKwl7CisJaW50IGk7CisJU1JQX3VzZXJfcHdkICp1c2VyOworCXVuc2lnbmVkIGNoYXIgZGlndltTSEFfRElHRVNUX0xFTkdUSF07CisJdW5zaWduZWQgY2hhciBkaWdzW1NIQV9ESUdFU1RfTEVOR1RIXTsKKwlFVlBfTURfQ1RYIGN0eHQ7CisKKwlpZiAodmIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yKGkgPSAwOyBpIDwgc2tfU1JQX3VzZXJfcHdkX251bSh2Yi0+dXNlcnNfcHdkKTsgaSsrKQorCQl7CisJCXVzZXIgPSBza19TUlBfdXNlcl9wd2RfdmFsdWUodmItPnVzZXJzX3B3ZCwgaSk7CisJCWlmIChzdHJjbXAodXNlci0+aWQsdXNlcm5hbWUpPT0wKQorCQkJcmV0dXJuIHVzZXI7CisJCX0KKwlpZiAoKHZiLT5zZWVkX2tleSA9PSBOVUxMKSB8fAorCQkodmItPmRlZmF1bHRfZyA9PSBOVUxMKSB8fAorCQkodmItPmRlZmF1bHRfTiA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKy8qIGlmIHRoZSB1c2VyIGlzIHVua25vd24gd2Ugc2V0IHBhcmFtZXRlcnMgYXMgd2VsbCBpZiB3ZSBoYXZlIGEgc2VlZF9rZXkgKi8KKworCWlmICgodXNlciA9IFNSUF91c2VyX3B3ZF9uZXcoKSkgPT0gTlVMTCkgCisJCXJldHVybiBOVUxMOworCisJU1JQX3VzZXJfcHdkX3NldF9nTih1c2VyLHZiLT5kZWZhdWx0X2csdmItPmRlZmF1bHRfTik7CisJCQkJCisJaWYgKCFTUlBfdXNlcl9wd2Rfc2V0X2lkcyh1c2VyLHVzZXJuYW1lLE5VTEwpKQorCQlnb3RvIGVycjsKKwkJCisJUkFORF9wc2V1ZG9fYnl0ZXMoZGlndiwgU0hBX0RJR0VTVF9MRU5HVEgpOworCUVWUF9NRF9DVFhfaW5pdCgmY3R4dCk7CisJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eHQsIEVWUF9zaGExKCksIE5VTEwpOworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIHZiLT5zZWVkX2tleSwgc3RybGVuKHZiLT5zZWVkX2tleSkpOworCUVWUF9EaWdlc3RVcGRhdGUoJmN0eHQsIHVzZXJuYW1lLCBzdHJsZW4odXNlcm5hbWUpKTsKKwlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eHQsIGRpZ3MsIE5VTEwpOworCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4dCk7CisJaWYgKFNSUF91c2VyX3B3ZF9zZXRfc3ZfQk4odXNlciwgQk5fYmluMmJuKGRpZ3MsU0hBX0RJR0VTVF9MRU5HVEgsTlVMTCksIEJOX2JpbjJibihkaWd2LFNIQV9ESUdFU1RfTEVOR1RILCBOVUxMKSkpIAorCQlyZXR1cm4gdXNlcjsKKworZXJyOiAgICBTUlBfdXNlcl9wd2RfZnJlZSh1c2VyKTsKKwlyZXR1cm4gTlVMTDsKKwl9CisKKworLyoKKyAgIGNyZWF0ZSBhIHZlcmlmaWVyICgqc2FsdCwqdmVyaWZpZXIsZyBhbmQgTiBhcmUgaW4gYmFzZTY0KQorKi8KK2NoYXIgKlNSUF9jcmVhdGVfdmVyaWZpZXIoY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcywgY2hhciAqKnNhbHQsCisJCQkgIGNoYXIgKip2ZXJpZmllciwgY29uc3QgY2hhciAqTiwgY29uc3QgY2hhciAqZykKKwl7CisJaW50IGxlbjsKKwljaGFyICogcmVzdWx0PU5VTEw7CisJY2hhciAqdmY7CisJQklHTlVNICpOX2JuID0gTlVMTCwgKmdfYm4gPSBOVUxMLCAqcyA9IE5VTEwsICp2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHRtcFtNQVhfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHRtcDJbTUFYX0xFTl07CisJY2hhciAqIGRlZmdOaWQgPSBOVUxMOworCisJaWYgKCh1c2VyID09IE5VTEwpfHwKKwkJKHBhc3MgPT0gTlVMTCl8fAorCQkoc2FsdCA9PSBOVUxMKXx8CisJCSh2ZXJpZmllciA9PSBOVUxMKSkKKwkJZ290byBlcnI7CisKKwlpZiAoTikKKwkJeworCQlpZiAoIShsZW4gPSB0X2Zyb21iNjQodG1wLCBOKSkpIGdvdG8gZXJyOworCQlOX2JuID0gQk5fYmluMmJuKHRtcCwgbGVuLCBOVUxMKTsKKwkJaWYgKCEobGVuID0gdF9mcm9tYjY0KHRtcCwgZykpKSBnb3RvIGVycjsKKwkJZ19ibiA9IEJOX2JpbjJibih0bXAsIGxlbiwgTlVMTCk7CisJCWRlZmdOaWQgPSAiKiI7CisJCX0KKwllbHNlCisJCXsgCisJCVNSUF9nTiAqIGdOID0gU1JQX2dldF9nTl9ieV9pZChnLCBOVUxMKSA7CisJCWlmIChnTiA9PSBOVUxMKQorCQkJZ290byBlcnI7CisJCU5fYm4gPSBnTi0+TjsKKwkJZ19ibiA9IGdOLT5nOworCQlkZWZnTmlkID0gZ04tPmlkOworCQl9CisKKwlpZiAoKnNhbHQgPT0gTlVMTCkKKwkJeworCQlSQU5EX3BzZXVkb19ieXRlcyh0bXAyLCBTUlBfUkFORE9NX1NBTFRfTEVOKTsKKworCQlzID0gQk5fYmluMmJuKHRtcDIsIFNSUF9SQU5ET01fU0FMVF9MRU4sIE5VTEwpOworCQl9CisJZWxzZQorCQl7CisJCWlmICghKGxlbiA9IHRfZnJvbWI2NCh0bXAyLCAqc2FsdCkpKQorCQkJZ290byBlcnI7CisJCXMgPSBCTl9iaW4yYm4odG1wMiwgbGVuLCBOVUxMKTsKKwkJfQorCisKKwlpZighU1JQX2NyZWF0ZV92ZXJpZmllcl9CTih1c2VyLCBwYXNzLCAmcywgJnYsIE5fYm4sIGdfYm4pKSBnb3RvIGVycjsKKworCUJOX2JuMmJpbih2LHRtcCk7CisJaWYgKCgodmYgPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXModikqMikpID09IE5VTEwpKQorCQlnb3RvIGVycjsKKwl0X3RvYjY0KHZmLCB0bXAsIEJOX251bV9ieXRlcyh2KSk7CisKKwkqdmVyaWZpZXIgPSB2ZjsKKwlpZiAoKnNhbHQgPT0gTlVMTCkKKwkJeworCQljaGFyICp0bXBfc2FsdDsKKwkJaWYgKCh0bXBfc2FsdCA9IChjaGFyICopT1BFTlNTTF9tYWxsb2MoU1JQX1JBTkRPTV9TQUxUX0xFTiAqIDIpKSA9PSBOVUxMKQorCQkJeworCQkJT1BFTlNTTF9mcmVlKHZmKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQl0X3RvYjY0KHRtcF9zYWx0LCB0bXAyLCBTUlBfUkFORE9NX1NBTFRfTEVOKTsKKwkJKnNhbHQgPSB0bXBfc2FsdDsKKwkJfQorCisJcmVzdWx0PWRlZmdOaWQ7CisKK2VycjoKKwlpZihOKQorCQl7CisJCUJOX2ZyZWUoTl9ibik7CisJCUJOX2ZyZWUoZ19ibik7CisJCX0KKwlyZXR1cm4gcmVzdWx0OworCX0KKworLyoKKyAgIGNyZWF0ZSBhIHZlcmlmaWVyICgqc2FsdCwqdmVyaWZpZXIsZyBhbmQgTiBhcmUgQklHTlVNcykKKyovCitpbnQgU1JQX2NyZWF0ZV92ZXJpZmllcl9CTihjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpwYXNzLCBCSUdOVU0gKipzYWx0LCBCSUdOVU0gKip2ZXJpZmllciwgQklHTlVNICpOLCBCSUdOVU0gKmcpCisJeworCWludCByZXN1bHQ9MDsKKwlCSUdOVU0gKnggPSBOVUxMOworCUJOX0NUWCAqYm5fY3R4ID0gQk5fQ1RYX25ldygpOworCXVuc2lnbmVkIGNoYXIgdG1wMltNQVhfTEVOXTsKKworCWlmICgodXNlciA9PSBOVUxMKXx8CisJCShwYXNzID09IE5VTEwpfHwKKwkJKHNhbHQgPT0gTlVMTCl8fAorCQkodmVyaWZpZXIgPT0gTlVMTCl8fAorCQkoTiA9PSBOVUxMKXx8CisJCShnID09IE5VTEwpfHwKKwkJKGJuX2N0eCA9PSBOVUxMKSkKKwkJZ290byBlcnI7CisKKwlzcnBfYm5fcHJpbnQoTik7CisJc3JwX2JuX3ByaW50KGcpOworCisJaWYgKCpzYWx0ID09IE5VTEwpCisJCXsKKwkJUkFORF9wc2V1ZG9fYnl0ZXModG1wMiwgU1JQX1JBTkRPTV9TQUxUX0xFTik7CisKKwkJKnNhbHQgPSBCTl9iaW4yYm4odG1wMixTUlBfUkFORE9NX1NBTFRfTEVOLE5VTEwpOworCQl9CisKKwl4ID0gU1JQX0NhbGNfeCgqc2FsdCx1c2VyLHBhc3MpOworCisJKnZlcmlmaWVyID0gQk5fbmV3KCk7CisJaWYoKnZlcmlmaWVyID09IE5VTEwpIGdvdG8gZXJyOworCisJaWYgKCFCTl9tb2RfZXhwKCp2ZXJpZmllcixnLHgsTixibl9jdHgpKQorCQl7CisJCUJOX2NsZWFyX2ZyZWUoKnZlcmlmaWVyKTsKKwkJZ290byBlcnI7CisJCX0KKworCXNycF9ibl9wcmludCgqdmVyaWZpZXIpOworCisJcmVzdWx0PTE7CisKK2VycjoKKworCUJOX2NsZWFyX2ZyZWUoeCk7CisJQk5fQ1RYX2ZyZWUoYm5fY3R4KTsKKwlyZXR1cm4gcmVzdWx0OworCX0KKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oIGIvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oCmluZGV4IDNlNzZhYTUuLmVhM2FhMGQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaAorKysgYi9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgKQEAgLTE0NTksNiArMTQ1OSw5NCBAQAogI2RlZmluZSBza19QT0xJQ1lfTUFQUElOR19zb3J0KHN0KSBTS01fc2tfc29ydChQT0xJQ1lfTUFQUElORywgKHN0KSkKICNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFBPTElDWV9NQVBQSU5HLCAoc3QpKQogCisjZGVmaW5lIHNrX1NSUF9nTl9uZXcoY21wKSBTS01fc2tfbmV3KFNSUF9nTiwgKGNtcCkpCisjZGVmaW5lIHNrX1NSUF9nTl9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTUlBfZ04pCisjZGVmaW5lIHNrX1NSUF9nTl9mcmVlKHN0KSBTS01fc2tfZnJlZShTUlBfZ04sIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9udW0oc3QpIFNLTV9za19udW0oU1JQX2dOLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShTUlBfZ04sIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX2dOX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KFNSUF9nTiwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX2dOX3plcm8oc3QpIFNLTV9za196ZXJvKFNSUF9nTiwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goU1JQX2dOLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX2dOX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoU1JQX2dOLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoU1JQX2dOLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoU1JQX2dOLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShTUlBfZ04sIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoU1JQX2dOLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KFNSUF9nTiwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX2dOX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKFNSUF9nTiwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX1NSUF9nTl9kdXAoc3QpIFNLTV9za19kdXAoU1JQX2dOLCBzdCkKKyNkZWZpbmUgc2tfU1JQX2dOX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShTUlBfZ04sIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19TUlBfZ05fc2hpZnQoc3QpIFNLTV9za19zaGlmdChTUlBfZ04sIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9wb3Aoc3QpIFNLTV9za19wb3AoU1JQX2dOLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fc29ydChzdCkgU0tNX3NrX3NvcnQoU1JQX2dOLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05faXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNSUF9nTiwgKHN0KSkKKworI2RlZmluZSBza19TUlBfZ05fY2FjaGVfbmV3KGNtcCkgU0tNX3NrX25ldyhTUlBfZ05fY2FjaGUsIChjbXApKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1JQX2dOX2NhY2hlKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1JQX2dOX2NhY2hlLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfbnVtKHN0KSBTS01fc2tfbnVtKFNSUF9nTl9jYWNoZSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoU1JQX2dOX2NhY2hlLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChTUlBfZ05fY2FjaGUsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV96ZXJvKHN0KSBTS01fc2tfemVybyhTUlBfZ05fY2FjaGUsIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKFNSUF9nTl9jYWNoZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KFNSUF9nTl9jYWNoZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKFNSUF9nTl9jYWNoZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KFNSUF9nTl9jYWNoZSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoU1JQX2dOX2NhY2hlLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKFNSUF9nTl9jYWNoZSwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChTUlBfZ05fY2FjaGUsIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhTUlBfZ05fY2FjaGUsIChzdCksIChjbXApKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZHVwKHN0KSBTS01fc2tfZHVwKFNSUF9nTl9jYWNoZSwgc3QpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoU1JQX2dOX2NhY2hlLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoU1JQX2dOX2NhY2hlLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfcG9wKHN0KSBTS01fc2tfcG9wKFNSUF9nTl9jYWNoZSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX3NvcnQoc3QpIFNLTV9za19zb3J0KFNSUF9nTl9jYWNoZSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTUlBfZ05fY2FjaGUsIChzdCkpCisKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX25ldyhjbXApIFNLTV9za19uZXcoU1JQX3VzZXJfcHdkLCAoY21wKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNSUF91c2VyX3B3ZCkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNSUF91c2VyX3B3ZCwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX251bShzdCkgU0tNX3NrX251bShTUlBfdXNlcl9wd2QsIChzdCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKFNSUF91c2VyX3B3ZCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2Rfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoU1JQX3VzZXJfcHdkLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfemVybyhzdCkgU0tNX3NrX3plcm8oU1JQX3VzZXJfcHdkLCAoc3QpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChTUlBfdXNlcl9wd2QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChTUlBfdXNlcl9wd2QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChTUlBfdXNlcl9wd2QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChTUlBfdXNlcl9wd2QsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFNSUF91c2VyX3B3ZCwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihTUlBfdXNlcl9wd2QsIChzdCksIChwdHIpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoU1JQX3VzZXJfcHdkLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2Rfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoU1JQX3VzZXJfcHdkLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2R1cChzdCkgU0tNX3NrX2R1cChTUlBfdXNlcl9wd2QsIHN0KQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKFNSUF91c2VyX3B3ZCwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFNSUF91c2VyX3B3ZCwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3BvcChzdCkgU0tNX3NrX3BvcChTUlBfdXNlcl9wd2QsIChzdCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9zb3J0KHN0KSBTS01fc2tfc29ydChTUlBfdXNlcl9wd2QsIChzdCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1JQX3VzZXJfcHdkLCAoc3QpKQorCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX25ldyhjbXApIFNLTV9za19uZXcoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChjbXApKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX251bShzdCkgU0tNX3NrX251bShTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfemVybyhzdCkgU0tNX3NrX3plcm8oU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2R1cChzdCkgU0tNX3NrX2R1cChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgc3QpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3BvcChzdCkgU0tNX3NrX3BvcChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfc29ydChzdCkgU0tNX3NrX3NvcnQoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSkKKwogI2RlZmluZSBza19TU0xfQ0lQSEVSX25ldyhjbXApIFNLTV9za19uZXcoU1NMX0NJUEhFUiwgKGNtcCkpCiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1NMX0NJUEhFUikKICNkZWZpbmUgc2tfU1NMX0NJUEhFUl9mcmVlKHN0KSBTS01fc2tfZnJlZShTU0xfQ0lQSEVSLCAoc3QpKQpAQCAtMjA1NiwzMSArMjE0NCw2IEBACiAjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPUEVOU1NMX1NUUklORywgKHN0KSkKIAogCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19uZXcoY21wKSAoKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyhPUEVOU1NMX1NUUklORywgY21wKSkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19uZXdfbnVsbCgpICgoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSAqKXNrX25ld19udWxsKCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1BTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgaSkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9QU1RSSU5HLCBzdCkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1BTVFJJTkcsIGZyZWVfZnVuYykpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpLCBpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT1BFTlNTTF9QU1RSSU5HLCBzdCkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NldChzdCwgaSwgdmFsKSBza19zZXQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX1BTVFJJTkcsIChzdCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9QU1RSSU5HLCAoc3QpLCAoaSkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChPUEVOU1NMX1BTVFJJTkcgKilza19kZWxldGVfcHRyKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCBwdHIpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0X2NtcF9mdW5jKHN0LCBjbXApICBcCi0JKChpbnQgKCopKGNvbnN0IE9QRU5TU0xfU1RSSU5HICogY29uc3QgKixjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICopKSBcCi0Jc2tfc2V0X2NtcF9mdW5jKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfUFNUUklORywgc3QpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3BvcChzdCkgKE9QRU5TU0xfU1RSSU5HICopc2tfcG9wKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zb3J0KHN0KSBTS01fc2tfc29ydChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQotCi0KICNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19uZXcoY21wKSAoKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkModm9pZCwgY21wKSkpCiAjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICopc2tfbmV3X251bGwoKSkKICNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX0JMT0NLLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCkBAIC0yMTA2LDYgKzIxNjksMzEgQEAKICNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9CTE9DSywgKHN0KSkKIAogCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19uZXcoY21wKSAoKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyhPUEVOU1NMX1NUUklORywgY21wKSkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19uZXdfbnVsbCgpICgoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSAqKXNrX25ld19udWxsKCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1BTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgaSkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9QU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1BTVFJJTkcsIGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpLCBpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZnJlZShzdCkgU0tNX3NrX2ZyZWUoT1BFTlNTTF9QU1RSSU5HLCBzdCkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NldChzdCwgaSwgdmFsKSBza19zZXQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoQ0hFQ0tFRF9TVEFDS19PRihPUEVOU1NMX1BTVFJJTkcsIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0YoT1BFTlNTTF9TVFJJTkcsIHZhbCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9QU1RSSU5HLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChPUEVOU1NMX1BTVFJJTkcgKilza19kZWxldGVfcHRyKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCBwdHIpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0X2NtcF9mdW5jKHN0LCBjbXApICBcCisJKChpbnQgKCopKGNvbnN0IE9QRU5TU0xfU1RSSU5HICogY29uc3QgKixjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICopKSBcCisJc2tfc2V0X2NtcF9mdW5jKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfUFNUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3BvcChzdCkgKE9QRU5TU0xfU1RSSU5HICopc2tfcG9wKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zb3J0KHN0KSBTS01fc2tfc29ydChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQorCisKICNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTihzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFzcykgXAogCVNLTV9BU04xX1NFVF9PRl9kMmkoQUNDRVNTX0RFU0NSSVBUSU9OLCAoc3QpLCAocHApLCAobGVuZ3RoKSwgKGQyaV9mdW5jKSwgKGZyZWVfZnVuYyksIChleF90YWcpLCAoZXhfY2xhc3MpKSAKICNkZWZpbmUgaTJkX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQVElPTihzdCwgcHAsIGkyZF9mdW5jLCBleF90YWcsIGV4X2NsYXNzLCBpc19zZXQpIFwKZGlmZiAtLWdpdCBhL2NyeXB0by9zeW1oYWNrcy5oIGIvY3J5cHRvL3N5bWhhY2tzLmgKaW5kZXggM2ZkNGE4MS4uNDAzZjU5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL3N5bWhhY2tzLmgKKysrIGIvY3J5cHRvL3N5bWhhY2tzLmgKQEAgLTE3Niw3ICsxNzYsNiBAQAogI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YSAgU1NMX0NUWF9zZXRfZGVmX3Bhc3N3ZF9jYl91ZAogI3VuZGVmIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCiAjZGVmaW5lIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzCi0KICN1bmRlZiBzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4dAogI2RlZmluZSBzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4dAlzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnX2V4dAogI3VuZGVmIHNzbF9hZGRfc2VydmVyaGVsbG9fcmVuZWdvdGlhdGVfZXh0CkBAIC0xODUsNiArMTg0LDI2IEBACiAjZGVmaW5lIHNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQJc3NsX3BhcnNlX2NsaWVudGhlbGxvX3JlbmVnX2V4dAogI3VuZGVmIHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb19yZW5lZ290aWF0ZV9leHQKICNkZWZpbmUgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dAlzc2xfcGFyc2Vfc2VydmVyaGVsbG9fcmVuZWdfZXh0CisjdW5kZWYgU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZQorI2RlZmluZSBTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdW4KKyN1bmRlZiBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjaworI2RlZmluZSBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYgorI3VuZGVmIFNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2sKKyNkZWZpbmUgU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfdmZ5X3BhcmFtX2NiCisjdW5kZWYgU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrCisjZGVmaW5lIFNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfdW5fY2IKKyN1bmRlZiBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dAorI2RlZmluZSBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dCBzc2xfYWRkX2NsaWhlbGxvX3VzZV9zcnRwX2V4dAorI3VuZGVmIHNzbF9hZGRfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0CisjZGVmaW5lIHNzbF9hZGRfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0IHNzbF9hZGRfc2VyaGVsbG9fdXNlX3NydHBfZXh0CisjdW5kZWYgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dAorI2RlZmluZSBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0IHNzbF9wYXJzZV9jbGloZWxsb191c2Vfc3J0cF9leHQKKyN1bmRlZiBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0CisjZGVmaW5lIHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb191c2Vfc3J0cF9leHQgc3NsX3BhcnNlX3NlcmhlbGxvX3VzZV9zcnRwX2V4dAorI3VuZGVmIFNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYiBTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2IKKyN1bmRlZiBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYgorI2RlZmluZSBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYiBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbF9jYgogCiAvKiBIYWNrIHNvbWUgbG9uZyBFTkdJTkUgbmFtZXMgKi8KICN1bmRlZiBFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQKQEAgLTIzOCw2ICsyNTcsOSBAQAogI2RlZmluZSBFQ19HUk9VUF9nZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtCUVDX0dST1VQX2dldF9wb2ludF9jb252X2Zvcm0KICN1bmRlZiBFQ19HUk9VUF9jbGVhcl9mcmVlX2FsbF9leHRyYV9kYXRhCiAjZGVmaW5lIEVDX0dST1VQX2NsZWFyX2ZyZWVfYWxsX2V4dHJhX2RhdGEJRUNfR1JPVVBfY2xyX2ZyZWVfYWxsX3h0cmFfZGF0YQorI3VuZGVmIEVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMKKyNkZWZpbmUgRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlcyBcCisJCQkJCQlFQ19LRVlfc2V0X3B1Yl9rZXlfYWZmX2Nvb3JkcwogI3VuZGVmIEVDX1BPSU5UX3NldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAKICNkZWZpbmUgRUNfUE9JTlRfc2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ19QT0lOVF9zZXRfSnByb2pfY29vcmRzX0dGcApAQCAtMzk5LDYgKzQyMSwxMiBAQAogI3VuZGVmIGR0bHMxX3JldHJhbnNtaXRfYnVmZmVyZWRfbWVzc2FnZXMKICNkZWZpbmUgZHRsczFfcmV0cmFuc21pdF9idWZmZXJlZF9tZXNzYWdlcwlkdGxzMV9yZXRyYW5zbWl0X2J1ZmZlcmVkX21zZ3MKIAorLyogSGFjayBzb21lIGxvbmcgU1JQIG5hbWVzICovCisjdW5kZWYgU1JQX2dlbmVyYXRlX3NlcnZlcl9tYXN0ZXJfc2VjcmV0CisjZGVmaW5lIFNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldAlTUlBfZ2VuX3NlcnZlcl9tYXN0ZXJfc2VjcmV0CisjdW5kZWYgU1JQX2dlbmVyYXRlX2NsaWVudF9tYXN0ZXJfc2VjcmV0CisjZGVmaW5lIFNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldAlTUlBfZ2VuX2NsaWVudF9tYXN0ZXJfc2VjcmV0CisKIC8qIEhhY2sgc29tZSBsb25nIFVJIG5hbWVzICovCiAjdW5kZWYgVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3IKICNkZWZpbmUgVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3IJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3VpL3VpLmggYi9jcnlwdG8vdWkvdWkuaAppbmRleCAyYjFjZmEyLi5iZDc4YWE0IDEwMDY0NAotLS0gYS9jcnlwdG8vdWkvdWkuaAorKysgYi9jcnlwdG8vdWkvdWkuaApAQCAtMzE2LDcgKzMxNiw3IEBACiBpbnQgKCpVSV9tZXRob2RfZ2V0X2ZsdXNoZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSopOwogaW50ICgqVUlfbWV0aG9kX2dldF9yZWFkZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSosVUlfU1RSSU5HKik7CiBpbnQgKCpVSV9tZXRob2RfZ2V0X2Nsb3NlcihVSV9NRVRIT0QgKm1ldGhvZCkpKFVJKik7Ci1jaGFyKiAoKlVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworY2hhciAqICgqVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3IoVUlfTUVUSE9EICptZXRob2QpKShVSSosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBoZWxwZXJzIGZvciBtZXRob2Qgd3JpdGVycyB0byBhY2Nlc3MgcmVsZXZhbnQKICAgIGRhdGEgZnJvbSBhIFVJX1NUUklORy4gKi8KZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDkuaCBiL2NyeXB0by94NTA5L3g1MDkuaAppbmRleCBlNmY4YTQwLi4wOTJkZDc0IDEwMDY0NAotLS0gYS9jcnlwdG8veDUwOS94NTA5LmgKKysrIGIvY3J5cHRvL3g1MDkveDUwOS5oCkBAIC02NTcsMTEgKzY1NywxNSBAQAogCiBpbnQgTkVUU0NBUEVfU1BLSV9wcmludChCSU8gKm91dCwgTkVUU0NBUEVfU1BLSSAqc3BraSk7CiAKK2ludCBYNTA5X3NpZ25hdHVyZV9kdW1wKEJJTyAqYnAsY29uc3QgQVNOMV9TVFJJTkcgKnNpZywgaW50IGluZGVudCk7CiBpbnQgWDUwOV9zaWduYXR1cmVfcHJpbnQoQklPICpicCxYNTA5X0FMR09SICphbGcsIEFTTjFfU1RSSU5HICpzaWcpOwogCiBpbnQgWDUwOV9zaWduKFg1MDkgKngsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kKTsKK2ludCBYNTA5X3NpZ25fY3R4KFg1MDkgKngsIEVWUF9NRF9DVFggKmN0eCk7CiBpbnQgWDUwOV9SRVFfc2lnbihYNTA5X1JFUSAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQpOworaW50IFg1MDlfUkVRX3NpZ25fY3R4KFg1MDlfUkVRICp4LCBFVlBfTURfQ1RYICpjdHgpOwogaW50IFg1MDlfQ1JMX3NpZ24oWDUwOV9DUkwgKngsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kKTsKK2ludCBYNTA5X0NSTF9zaWduX2N0eChYNTA5X0NSTCAqeCwgRVZQX01EX0NUWCAqY3R4KTsKIGludCBORVRTQ0FQRV9TUEtJX3NpZ24oTkVUU0NBUEVfU1BLSSAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQpOwogCiBpbnQgWDUwOV9wdWJrZXlfZGlnZXN0KGNvbnN0IFg1MDkgKmRhdGEsY29uc3QgRVZQX01EICp0eXBlLApAQCAtNzYzLDYgKzc2Nyw3IEBACiBpbnQgWDUwOV9BTEdPUl9zZXQwKFg1MDlfQUxHT1IgKmFsZywgQVNOMV9PQkpFQ1QgKmFvYmosIGludCBwdHlwZSwgdm9pZCAqcHZhbCk7CiB2b2lkIFg1MDlfQUxHT1JfZ2V0MChBU04xX09CSkVDVCAqKnBhb2JqLCBpbnQgKnBwdHlwZSwgdm9pZCAqKnBwdmFsLAogCQkJCQkJWDUwOV9BTEdPUiAqYWxnb3IpOwordm9pZCBYNTA5X0FMR09SX3NldF9tZChYNTA5X0FMR09SICphbGcsIGNvbnN0IEVWUF9NRCAqbWQpOwogCiBYNTA5X05BTUUgKlg1MDlfTkFNRV9kdXAoWDUwOV9OQU1FICp4bik7CiBYNTA5X05BTUVfRU5UUlkgKlg1MDlfTkFNRV9FTlRSWV9kdXAoWDUwOV9OQU1FX0VOVFJZICpuZSk7CkBAIC04OTYsNiArOTAxLDkgQEAKIGludCBBU04xX2l0ZW1fc2lnbihjb25zdCBBU04xX0lURU0gKml0LCBYNTA5X0FMR09SICphbGdvcjEsIFg1MDlfQUxHT1IgKmFsZ29yMiwKIAlBU04xX0JJVF9TVFJJTkcgKnNpZ25hdHVyZSwKIAl2b2lkICpkYXRhLCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICp0eXBlKTsKK2ludCBBU04xX2l0ZW1fc2lnbl9jdHgoY29uc3QgQVNOMV9JVEVNICppdCwKKwkJWDUwOV9BTEdPUiAqYWxnb3IxLCBYNTA5X0FMR09SICphbGdvcjIsCisJICAgICAJQVNOMV9CSVRfU1RSSU5HICpzaWduYXR1cmUsIHZvaWQgKmFzbiwgRVZQX01EX0NUWCAqY3R4KTsKICNlbmRpZgogCiBpbnQgCQlYNTA5X3NldF92ZXJzaW9uKFg1MDkgKngsbG9uZyB2ZXJzaW9uKTsKQEAgLTExNjEsNiArMTE2OSw5IEBACiAJCQkJIHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLAogCQkJCSB1bnNpZ25lZCBjaGFyICphaXYsIGludCBwcmZfbmlkKTsKIAorWDUwOV9BTEdPUiAqUEtDUzVfcGJrZGYyX3NldChpbnQgaXRlciwgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCisJCQkJaW50IHByZl9uaWQsIGludCBrZXlsZW4pOworCiAvKiBQS0NTIzggdXRpbGl0aWVzICovCiAKIERFQ0xBUkVfQVNOMV9GVU5DVElPTlMoUEtDUzhfUFJJVl9LRVlfSU5GTykKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDlfY21wLmMgYi9jcnlwdG8veDUwOS94NTA5X2NtcC5jCmluZGV4IDRiYzlkYTAuLjdjMmFhZWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDlfY21wLmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOV9jbXAuYwpAQCAtODcsMTUgKzg3LDIwIEBACiAJRVZQX01EX0NUWF9pbml0KCZjdHgpOwogCWY9WDUwOV9OQU1FX29uZWxpbmUoYS0+Y2VydF9pbmZvLT5pc3N1ZXIsTlVMTCwwKTsKIAlyZXQ9c3RybGVuKGYpOwotCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIEVWUF9tZDUoKSwgTlVMTCk7Ci0JRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCh1bnNpZ25lZCBjaGFyICopZixyZXQpOworCWlmICghRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgRVZQX21kNSgpLCBOVUxMKSkKKwkJZ290byBlcnI7CisJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKCZjdHgsKHVuc2lnbmVkIGNoYXIgKilmLHJldCkpCisJCWdvdG8gZXJyOwogCU9QRU5TU0xfZnJlZShmKTsKLQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsKHVuc2lnbmVkIGNoYXIgKilhLT5jZXJ0X2luZm8tPnNlcmlhbE51bWJlci0+ZGF0YSwKLQkJKHVuc2lnbmVkIGxvbmcpYS0+Y2VydF9pbmZvLT5zZXJpYWxOdW1iZXItPmxlbmd0aCk7Ci0JRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsJihtZFswXSksTlVMTCk7CisJaWYoIUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwodW5zaWduZWQgY2hhciAqKWEtPmNlcnRfaW5mby0+c2VyaWFsTnVtYmVyLT5kYXRhLAorCQkodW5zaWduZWQgbG9uZylhLT5jZXJ0X2luZm8tPnNlcmlhbE51bWJlci0+bGVuZ3RoKSkKKwkJZ290byBlcnI7CisJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwmKG1kWzBdKSxOVUxMKSkKKwkJZ290byBlcnI7CiAJcmV0PSgJKCh1bnNpZ25lZCBsb25nKW1kWzBdICAgICApfCgodW5zaWduZWQgbG9uZyltZFsxXTw8OEwpfAogCQkoKHVuc2lnbmVkIGxvbmcpbWRbMl08PDE2TCl8KCh1bnNpZ25lZCBsb25nKW1kWzNdPDwyNEwpCiAJCSkmMHhmZmZmZmZmZkw7CisJZXJyOgogCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKIAlyZXR1cm4ocmV0KTsKIAl9CkBAIC0yMTksNyArMjI0LDkgQEAKIAogCS8qIE1ha2Ugc3VyZSBYNTA5X05BTUUgc3RydWN0dXJlIGNvbnRhaW5zIHZhbGlkIGNhY2hlZCBlbmNvZGluZyAqLwogCWkyZF9YNTA5X05BTUUoeCxOVUxMKTsKLQlFVlBfRGlnZXN0KHgtPmNhbm9uX2VuYywgeC0+Y2Fub25fZW5jbGVuLCBtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KHgtPmNhbm9uX2VuYywgeC0+Y2Fub25fZW5jbGVuLCBtZCwgTlVMTCwgRVZQX3NoYTEoKSwKKwkJTlVMTCkpCisJCXJldHVybiAwOwogCiAJcmV0PSgJKCh1bnNpZ25lZCBsb25nKW1kWzBdICAgICApfCgodW5zaWduZWQgbG9uZyltZFsxXTw8OEwpfAogCQkoKHVuc2lnbmVkIGxvbmcpbWRbMl08PDE2TCl8KCh1bnNpZ25lZCBsb25nKW1kWzNdPDwyNEwpCkBAIC0yMzQsMTIgKzI0MSwxOCBAQAogCiB1bnNpZ25lZCBsb25nIFg1MDlfTkFNRV9oYXNoX29sZChYNTA5X05BTUUgKngpCiAJeworCUVWUF9NRF9DVFggbWRfY3R4OwogCXVuc2lnbmVkIGxvbmcgcmV0PTA7CiAJdW5zaWduZWQgY2hhciBtZFsxNl07CiAKIAkvKiBNYWtlIHN1cmUgWDUwOV9OQU1FIHN0cnVjdHVyZSBjb250YWlucyB2YWxpZCBjYWNoZWQgZW5jb2RpbmcgKi8KIAlpMmRfWDUwOV9OQU1FKHgsTlVMTCk7Ci0JRVZQX0RpZ2VzdCh4LT5ieXRlcy0+ZGF0YSwgeC0+Ynl0ZXMtPmxlbmd0aCwgbWQsIE5VTEwsIEVWUF9tZDUoKSwgTlVMTCk7CisJRVZQX01EX0NUWF9pbml0KCZtZF9jdHgpOworCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwgRVZQX21kNSgpLCBOVUxMKTsKKwlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsIHgtPmJ5dGVzLT5kYXRhLCB4LT5ieXRlcy0+bGVuZ3RoKTsKKwlFVlBfRGlnZXN0RmluYWxfZXgoJm1kX2N0eCxtZCxOVUxMKTsKKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1kX2N0eCk7CiAKIAlyZXQ9KAkoKHVuc2lnbmVkIGxvbmcpbWRbMF0gICAgICl8KCh1bnNpZ25lZCBsb25nKW1kWzFdPDw4TCl8CiAJCSgodW5zaWduZWQgbG9uZyltZFsyXTw8MTZMKXwoKHVuc2lnbmVkIGxvbmcpbWRbM108PDI0TCkKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5L3g1MDl0eXBlLmMgYi9jcnlwdG8veDUwOS94NTA5dHlwZS5jCmluZGV4IDMzODVhZDMuLjk3MDJlYzUgMTAwNjQ0Ci0tLSBhL2NyeXB0by94NTA5L3g1MDl0eXBlLmMKKysrIGIvY3J5cHRvL3g1MDkveDUwOXR5cGUuYwpAQCAtMTAwLDIwICsxMDAsMjYgQEAKIAkJYnJlYWs7CiAJCX0KIAotCWk9WDUwOV9nZXRfc2lnbmF0dXJlX3R5cGUoeCk7Ci0Jc3dpdGNoIChpKQorCWk9T0JKX29iajJuaWQoeC0+c2lnX2FsZy0+YWxnb3JpdGhtKTsKKwlpZiAoaSAmJiBPQkpfZmluZF9zaWdpZF9hbGdzKGksIE5VTEwsICZpKSkKIAkJewotCWNhc2UgRVZQX1BLRVlfUlNBOgotCQlyZXR8PUVWUF9QS1NfUlNBOwotCQlicmVhazsKLQljYXNlIEVWUF9QS0VZX0RTQToKLQkJcmV0fD1FVlBfUEtTX0RTQTsKLQkJYnJlYWs7Ci0JY2FzZSBFVlBfUEtFWV9FQzoKLQkJcmV0fD1FVlBfUEtTX0VDOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKworCQlzd2l0Y2ggKGkpCisJCQl7CisJCWNhc2UgTklEX3JzYUVuY3J5cHRpb246CisJCWNhc2UgTklEX3JzYToKKwkJCXJldHw9RVZQX1BLU19SU0E7CisJCQlicmVhazsKKwkJY2FzZSBOSURfZHNhOgorCQljYXNlIE5JRF9kc2FfMjoKKwkJCXJldHw9RVZQX1BLU19EU0E7CisJCQlicmVhazsKKwkJY2FzZSBOSURfWDlfNjJfaWRfZWNQdWJsaWNLZXk6CisJCQlyZXR8PUVWUF9QS1NfRUM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQkJfQogCQl9CiAKIAlpZiAoRVZQX1BLRVlfc2l6ZShwaykgPD0gMTAyNC84KS8qIC84IGJlY2F1c2UgaXQncyAxMDI0IGJpdHMgd2UgbG9vawpkaWZmIC0tZ2l0IGEvY3J5cHRvL3g1MDkveF9hbGwuYyBiL2NyeXB0by94NTA5L3hfYWxsLmMKaW5kZXggOGVjODhjMi4uYjk0YWVlYiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDkveF9hbGwuYworKysgYi9jcnlwdG8veDUwOS94X2FsbC5jCkBAIC05NSwxMiArOTUsMjUgQEAKIAkJeC0+c2lnX2FsZywgeC0+c2lnbmF0dXJlLCB4LT5jZXJ0X2luZm8scGtleSxtZCkpOwogCX0KIAoraW50IFg1MDlfc2lnbl9jdHgoWDUwOSAqeCwgRVZQX01EX0NUWCAqY3R4KQorCXsKKwlyZXR1cm4gQVNOMV9pdGVtX3NpZ25fY3R4KEFTTjFfSVRFTV9ycHRyKFg1MDlfQ0lORiksCisJCXgtPmNlcnRfaW5mby0+c2lnbmF0dXJlLAorCQl4LT5zaWdfYWxnLCB4LT5zaWduYXR1cmUsIHgtPmNlcnRfaW5mbywgY3R4KTsKKwl9CisKIGludCBYNTA5X1JFUV9zaWduKFg1MDlfUkVRICp4LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCkKIAl7CiAJcmV0dXJuKEFTTjFfaXRlbV9zaWduKEFTTjFfSVRFTV9ycHRyKFg1MDlfUkVRX0lORk8pLHgtPnNpZ19hbGcsIE5VTEwsCiAJCXgtPnNpZ25hdHVyZSwgeC0+cmVxX2luZm8scGtleSxtZCkpOwogCX0KIAoraW50IFg1MDlfUkVRX3NpZ25fY3R4KFg1MDlfUkVRICp4LCBFVlBfTURfQ1RYICpjdHgpCisJeworCXJldHVybiBBU04xX2l0ZW1fc2lnbl9jdHgoQVNOMV9JVEVNX3JwdHIoWDUwOV9SRVFfSU5GTyksCisJCXgtPnNpZ19hbGcsIE5VTEwsIHgtPnNpZ25hdHVyZSwgeC0+cmVxX2luZm8sIGN0eCk7CisJfQorCiBpbnQgWDUwOV9DUkxfc2lnbihYNTA5X0NSTCAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQpCiAJewogCXgtPmNybC0+ZW5jLm1vZGlmaWVkID0gMTsKQEAgLTEwOCw2ICsxMjEsMTIgQEAKIAkJeC0+c2lnX2FsZywgeC0+c2lnbmF0dXJlLCB4LT5jcmwscGtleSxtZCkpOwogCX0KIAoraW50IFg1MDlfQ1JMX3NpZ25fY3R4KFg1MDlfQ1JMICp4LCBFVlBfTURfQ1RYICpjdHgpCisJeworCXJldHVybiBBU04xX2l0ZW1fc2lnbl9jdHgoQVNOMV9JVEVNX3JwdHIoWDUwOV9DUkxfSU5GTyksCisJCXgtPmNybC0+c2lnX2FsZywgeC0+c2lnX2FsZywgeC0+c2lnbmF0dXJlLCB4LT5jcmwsIGN0eCk7CisJfQorCiBpbnQgTkVUU0NBUEVfU1BLSV9zaWduKE5FVFNDQVBFX1NQS0kgKngsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKm1kKQogCXsKIAlyZXR1cm4oQVNOMV9pdGVtX3NpZ24oQVNOMV9JVEVNX3JwdHIoTkVUU0NBUEVfU1BLQUMpLCB4LT5zaWdfYWxnb3IsTlVMTCwKZGlmZiAtLWdpdCBhL2NyeXB0by94NTA5djMvdjNfc2tleS5jIGIvY3J5cHRvL3g1MDl2My92M19za2V5LmMKaW5kZXggMjAyYzllNC4uMGE5ODRmYiAxMDA2NDQKLS0tIGEvY3J5cHRvL3g1MDl2My92M19za2V5LmMKKysrIGIvY3J5cHRvL3g1MDl2My92M19za2V5LmMKQEAgLTEyOSw3ICsxMjksOCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlFVlBfRGlnZXN0KHBrLT5kYXRhLCBway0+bGVuZ3RoLCBwa2V5X2RpZywgJmRpZ2xlbiwgRVZQX3NoYTEoKSwgTlVMTCk7CisJaWYgKCFFVlBfRGlnZXN0KHBrLT5kYXRhLCBway0+bGVuZ3RoLCBwa2V5X2RpZywgJmRpZ2xlbiwgRVZQX3NoYTEoKSwgTlVMTCkpCisJCWdvdG8gZXJyOwogCiAJaWYoIU1fQVNOMV9PQ1RFVF9TVFJJTkdfc2V0KG9jdCwgcGtleV9kaWcsIGRpZ2xlbikpIHsKIAkJWDUwOVYzZXJyKFg1MDlWM19GX1MySV9TS0VZX0lELEVSUl9SX01BTExPQ19GQUlMVVJFKTsKZGlmZiAtLWdpdCBhL2NyeXB0by94ODZfNjRjcHVpZC5wbCBiL2NyeXB0by94ODZfNjRjcHVpZC5wbAppbmRleCBjOTY4MjFhLi43YjdiOTNiIDEwMDY0NAotLS0gYS9jcnlwdG8veDg2XzY0Y3B1aWQucGwKKysrIGIvY3J5cHRvL3g4Nl82NGNwdWlkLnBsCkBAIC03LDE1ICs3LDI0IEBACiAkd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOwogCiAkMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwotb3BlbiBTVERPVVQsInwgJF5YICR7ZGlyfXBlcmxhc20veDg2XzY0LXhsYXRlLnBsICRmbGF2b3VyICRvdXRwdXQiOworKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisoICR4bGF0ZT0iJHtkaXJ9cGVybGFzbS94ODZfNjQteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCitkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOwogCi1pZiAoJHdpbjY0KQl7ICRhcmcxPSIlcmN4IjsgJGFyZzI9IiVyZHgiOyB9Ci1lbHNlCQl7ICRhcmcxPSIlcmRpIjsgJGFyZzI9IiVyc2kiOyB9CitvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiOworCisoJGFyZzEsJGFyZzIsJGFyZzMsJGFyZzQpPSR3aW42ND8oIiVyY3giLCIlcmR4IiwiJXI4IiwgIiVyOSIpIDoJIyBXaW42NCBvcmRlcgorCQkJCSAoIiVyZGkiLCIlcnNpIiwiJXJkeCIsIiVyY3giKTsJIyBVbml4IG9yZGVyCisKIHByaW50PDxfX187CiAuZXh0ZXJuCQlPUEVOU1NMX2NwdWlkX3NldHVwCisuaGlkZGVuCQlPUEVOU1NMX2NwdWlkX3NldHVwCiAuc2VjdGlvbgkuaW5pdAogCWNhbGwJT1BFTlNTTF9jcHVpZF9zZXR1cAogCisuaGlkZGVuCU9QRU5TU0xfaWEzMmNhcF9QCisuY29tbQlPUEVOU1NMX2lhMzJjYXBfUCw4LDQKKwogLnRleHQKIAogLmdsb2JsCU9QRU5TU0xfYXRvbWljX2FkZApAQCAtNDYsNyArNTUsNyBAQAogLnR5cGUJT1BFTlNTTF9pYTMyX2NwdWlkLFxAYWJpLW9tbmlwb3RlbnQKIC5hbGlnbgkxNgogT1BFTlNTTF9pYTMyX2NwdWlkOgotCW1vdgklcmJ4LCVyOAorCW1vdgklcmJ4LCVyOAkJIyBzYXZlICVyYngKIAogCXhvcgklZWF4LCVlYXgKIAljcHVpZApAQCAtNzgsNyArODcsMTUgQEAKIAkjIEFNRCBzcGVjaWZpYwogCW1vdglcJDB4ODAwMDAwMDAsJWVheAogCWNwdWlkCi0JY21wCVwkMHg4MDAwMDAwOCwlZWF4CisJY21wCVwkMHg4MDAwMDAwMSwlZWF4CisJamIJLkxpbnRlbAorCW1vdgklZWF4LCVyMTBkCisJbW92CVwkMHg4MDAwMDAwMSwlZWF4CisJY3B1aWQKKwlvcgklZWN4LCVyOWQKKwlhbmQJXCQweDAwMDAwODAxLCVyOWQJIyBpc29sYXRlIEFNRCBYT1AgYml0LCAxPDwxMQorCisJY21wCVwkMHg4MDAwMDAwOCwlcjEwZAogCWpiCS5MaW50ZWwKIAogCW1vdglcJDB4ODAwMDAwMDgsJWVheApAQCAtODksMTIgKzEwNiwxMiBAQAogCW1vdglcJDEsJWVheAogCWNwdWlkCiAJYnQJXCQyOCwlZWR4CQkjIHRlc3QgaHlwZXItdGhyZWFkaW5nIGJpdAotCWpuYwkuTGRvbmUKKwlqbmMJLkxnZW5lcmljCiAJc2hyCVwkMTYsJWVieAkJIyBudW1iZXIgb2YgbG9naWNhbCBwcm9jZXNzb3JzCiAJY21wCSVyMTBiLCVibAotCWphCS5MZG9uZQorCWphCS5MZ2VuZXJpYwogCWFuZAlcJDB4ZWZmZmZmZmYsJWVkeAkjIH4oMTw8MjgpCi0Jam1wCS5MZG9uZQorCWptcAkuTGdlbmVyaWMKIAogLkxpbnRlbDoKIAljbXAJXCQ0LCVyMTFkCkBAIC0xMTEsMzAgKzEyOCw0NyBAQAogLkxub2NhY2hlaW5mbzoKIAltb3YJXCQxLCVlYXgKIAljcHVpZAorCWFuZAlcJDB4YmZlZmZmZmYsJWVkeAkjIGZvcmNlIHJlc2VydmVkIGJpdHMgdG8gMAogCWNtcAlcJDAsJXI5ZAogCWpuZQkuTG5vdGludGVsCi0Jb3IJXCQweDAwMTAwMDAwLCVlZHgJIyB1c2UgcmVzZXJ2ZWQgMjB0aCBiaXQgdG8gZW5nYWdlIFJDNF9DSEFSCisJb3IJXCQweDQwMDAwMDAwLCVlZHgJIyBzZXQgcmVzZXJ2ZWQgYml0IzMwIG9uIEludGVsIENQVXMKIAlhbmQJXCQxNSwlYWgKIAljbXAJXCQxNSwlYWgJCSMgZXhhbWluZSBGYW1pbHkgSUQKLQlqZQkuTG5vdGludGVsCi0Jb3IJXCQweDQwMDAwMDAwLCVlZHgJIyB1c2UgcmVzZXJ2ZWQgYml0IHRvIHNraXAgdW5yb2xsZWQgbG9vcAorCWpuZQkuTG5vdGludGVsCisJb3IJXCQweDAwMTAwMDAwLCVlZHgJIyBzZXQgcmVzZXJ2ZWQgYml0IzIwIHRvIGVuZ2FnZSBSQzRfQ0hBUgogLkxub3RpbnRlbDoKIAlidAlcJDI4LCVlZHgJCSMgdGVzdCBoeXBlci10aHJlYWRpbmcgYml0Ci0Jam5jCS5MZG9uZQorCWpuYwkuTGdlbmVyaWMKIAlhbmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQogCWNtcAlcJDAsJXIxMGQKLQlqZQkuTGRvbmUKKwlqZQkuTGdlbmVyaWMKIAogCW9yCVwkMHgxMDAwMDAwMCwlZWR4CSMgMTw8MjgKIAlzaHIJXCQxNiwlZWJ4CiAJY21wCVwkMSwlYmwJCQkjIHNlZSBpZiBjYWNoZSBpcyBzaGFyZWQKLQlqYQkuTGRvbmUKKwlqYQkuTGdlbmVyaWMKIAlhbmQJXCQweGVmZmZmZmZmLCVlZHgJIyB+KDE8PDI4KQorLkxnZW5lcmljOgorCWFuZAlcJDB4MDAwMDA4MDAsJXI5ZAkjIGlzb2xhdGUgQU1EIFhPUCBmbGFnCisJYW5kCVwkMHhmZmZmZjdmZiwlZWN4CisJb3IJJWVjeCwlcjlkCQkjIG1lcmdlIEFNRCBYT1AgZmxhZworCisJbW92CSVlZHgsJXIxMGQJCSMgJXI5ZDolcjEwZCBpcyBjb3B5IG9mICVlY3g6JWVkeAorCWJ0CVwkMjcsJXI5ZAkJIyBjaGVjayBPU1hTQVZFIGJpdAorCWpuYwkuTGNsZWFyX2F2eAorCXhvcgklZWN4LCVlY3gJCSMgWENSMAorCS5ieXRlCTB4MGYsMHgwMSwweGQwCQkjIHhnZXRidgorCWFuZAlcJDYsJWVheAkJIyBpc29sYXRlIFhNTSBhbmQgWU1NIHN0YXRlIHN1cHBvcnQKKwljbXAJXCQ2LCVlYXgKKwlqZQkuTGRvbmUKKy5MY2xlYXJfYXZ4OgorCW1vdglcJDB4ZWZmZmU3ZmYsJWVheAkjIH4oMTw8Mjh8MTw8MTJ8MTw8MTEpCisJYW5kCSVlYXgsJXI5ZAkJIyBjbGVhciBBVlgsIEZNQSBhbmQgQU1EIFhPUCBiaXRzCiAuTGRvbmU6Ci0Jc2hsCVwkMzIsJXJjeAotCW1vdgklZWR4LCVlYXgKLQltb3YJJXI4LCVyYngKLQlvcgklcmN4LCVyYXgKKwlzaGwJXCQzMiwlcjkKKwltb3YJJXIxMGQsJWVheAorCW1vdgklcjgsJXJieAkJIyByZXN0b3JlICVyYngKKwlvcgklcjksJXJheAogCXJldAogLnNpemUJT1BFTlNTTF9pYTMyX2NwdWlkLC4tT1BFTlNTTF9pYTMyX2NwdWlkCiAKQEAgLTIyOSw0ICsyNjMsMjEgQEAKIC5zaXplCU9QRU5TU0xfd2lwZV9jcHUsLi1PUEVOU1NMX3dpcGVfY3B1CiBfX18KIAorcHJpbnQ8PF9fXzsKKy5nbG9ibAlPUEVOU1NMX2lhMzJfcmRyYW5kCisudHlwZQlPUEVOU1NMX2lhMzJfcmRyYW5kLFxAYWJpLW9tbmlwb3RlbnQKKy5hbGlnbgkxNgorT1BFTlNTTF9pYTMyX3JkcmFuZDoKKwltb3YJXCQ4LCVlY3gKKy5Mb29wX3JkcmFuZDoKKwlyZHJhbmQJJXJheAorCWpjCS5MYnJlYWtfcmRyYW5kCisJbG9vcAkuTG9vcF9yZHJhbmQKKy5MYnJlYWtfcmRyYW5kOgorCWNtcAlcJDAsJXJheAorCWNtb3ZlCSVyY3gsJXJheAorCXJldAorLnNpemUJT1BFTlNTTF9pYTMyX3JkcmFuZCwuLU9QRU5TU0xfaWEzMl9yZHJhbmQKK19fXworCiBjbG9zZSBTVERPVVQ7CSMgZmx1c2gKZGlmZiAtLWdpdCBhL2NyeXB0by94ODZjcHVpZC5wbCBiL2NyeXB0by94ODZjcHVpZC5wbAppbmRleCBhNzQ2NGFmLi4zOWZkOGYyIDEwMDY0NAotLS0gYS9jcnlwdG8veDg2Y3B1aWQucGwKKysrIGIvY3J5cHRvL3g4NmNwdWlkLnBsCkBAIC0xOSw5ICsxOSw5IEBACiAJJnB1c2hmCSgpOwogCSZwb3AJKCJlYXgiKTsKIAkmeG9yCSgiZWN4IiwiZWF4Iik7Ci0JJmJ0CSgiZWN4IiwyMSk7Ci0JJmpuYwkoJmxhYmVsKCJkb25lIikpOwogCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKwkmYnQJKCJlY3giLDIxKTsKKwkmam5jCSgmbGFiZWwoIm5vY3B1aWQiKSk7CiAJJmNwdWlkCSgpOwogCSZtb3YJKCJlZGkiLCJlYXgiKTsJCSMgbWF4IHZhbHVlIGZvciBzdGFuZGFyZCBxdWVyeSBsZXZlbAogCkBAIC01MSw3ICs1MSwxNCBAQAogCSMgQU1EIHNwZWNpZmljCiAJJm1vdgkoImVheCIsMHg4MDAwMDAwMCk7CiAJJmNwdWlkCSgpOwotCSZjbXAJKCJlYXgiLDB4ODAwMDAwMDgpOworCSZjbXAJKCJlYXgiLDB4ODAwMDAwMDEpOworCSZqYgkoJmxhYmVsKCJpbnRlbCIpKTsKKwkmbW92CSgiZXNpIiwiZWF4Iik7CisJJm1vdgkoImVheCIsMHg4MDAwMDAwMSk7CisJJmNwdWlkCSgpOworCSZvcgkoImVicCIsImVjeCIpOworCSZhbmQJKCJlYnAiLDE8PDExfDEpOwkjIGlzb2xhdGUgWE9QIGJpdAorCSZjbXAJKCJlc2kiLDB4ODAwMDAwMDgpOwogCSZqYgkoJmxhYmVsKCJpbnRlbCIpKTsKIAogCSZtb3YJKCJlYXgiLDB4ODAwMDAwMDgpOwpAQCAtNjIsMTMgKzY5LDEzIEBACiAJJm1vdgkoImVheCIsMSk7CiAJJmNwdWlkCSgpOwogCSZidAkoImVkeCIsMjgpOwotCSZqbmMJKCZsYWJlbCgiZG9uZSIpKTsKKwkmam5jCSgmbGFiZWwoImdlbmVyaWMiKSk7CiAJJnNocgkoImVieCIsMTYpOwogCSZhbmQJKCJlYngiLDB4ZmYpOwogCSZjbXAJKCJlYngiLCJlc2kiKTsKLQkmamEJKCZsYWJlbCgiZG9uZSIpKTsKKwkmamEJKCZsYWJlbCgiZ2VuZXJpYyIpKTsKIAkmYW5kCSgiZWR4IiwweGVmZmZmZmZmKTsJIyBjbGVhciBoeXBlci10aHJlYWRpbmcgYml0Ci0JJmptcAkoJmxhYmVsKCJkb25lIikpOworCSZqbXAJKCZsYWJlbCgiZ2VuZXJpYyIpKTsKIAkKICZzZXRfbGFiZWwoImludGVsIik7CiAJJmNtcAkoImVkaSIsNCk7CkBAIC04NSwyNyArOTIsNTEgQEAKICZzZXRfbGFiZWwoIm5vY2FjaGVpbmZvIik7CiAJJm1vdgkoImVheCIsMSk7CiAJJmNwdWlkCSgpOworCSZhbmQJKCJlZHgiLDB4YmZlZmZmZmYpOwkjIGZvcmNlIHJlc2VydmVkIGJpdHMgIzIwLCAjMzAgdG8gMAogCSZjbXAJKCJlYnAiLDApOwotCSZqbmUJKCZsYWJlbCgibm90UDQiKSk7CisJJmpuZQkoJmxhYmVsKCJub3RpbnRlbCIpKTsKKwkmb3IJKCJlZHgiLDE8PDMwKTsJCSMgc2V0IHJlc2VydmVkIGJpdCMzMCBvbiBJbnRlbCBDUFVzCiAJJmFuZAkoJkhCKCJlYXgiKSwxNSk7CSMgZmFtaWxpeSBJRAogCSZjbXAJKCZIQigiZWF4IiksMTUpOwkjIFA0PwotCSZqbmUJKCZsYWJlbCgibm90UDQiKSk7Ci0JJm9yCSgiZWR4IiwxPDwyMCk7CQkjIHVzZSByZXNlcnZlZCBiaXQgdG8gZW5nYWdlIFJDNF9DSEFSCi0mc2V0X2xhYmVsKCJub3RQNCIpOworCSZqbmUJKCZsYWJlbCgibm90aW50ZWwiKSk7CisJJm9yCSgiZWR4IiwxPDwyMCk7CQkjIHNldCByZXNlcnZlZCBiaXQjMjAgdG8gZW5nYWdlIFJDNF9DSEFSCismc2V0X2xhYmVsKCJub3RpbnRlbCIpOwogCSZidAkoImVkeCIsMjgpOwkJIyB0ZXN0IGh5cGVyLXRocmVhZGluZyBiaXQKLQkmam5jCSgmbGFiZWwoImRvbmUiKSk7CisJJmpuYwkoJmxhYmVsKCJnZW5lcmljIikpOwogCSZhbmQJKCJlZHgiLDB4ZWZmZmZmZmYpOwogCSZjbXAJKCJlZGkiLDApOwotCSZqZQkoJmxhYmVsKCJkb25lIikpOworCSZqZQkoJmxhYmVsKCJnZW5lcmljIikpOwogCiAJJm9yCSgiZWR4IiwweDEwMDAwMDAwKTsKIAkmc2hyCSgiZWJ4IiwxNik7CiAJJmNtcAkoJkxCKCJlYngiKSwxKTsKLQkmamEJKCZsYWJlbCgiZG9uZSIpKTsKKwkmamEJKCZsYWJlbCgiZ2VuZXJpYyIpKTsKIAkmYW5kCSgiZWR4IiwweGVmZmZmZmZmKTsJIyBjbGVhciBoeXBlci10aHJlYWRpbmcgYml0IGlmIG5vdAorCismc2V0X2xhYmVsKCJnZW5lcmljIik7CisJJmFuZAkoImVicCIsMTw8MTEpOwkJIyBpc29sYXRlIEFNRCBYT1AgZmxhZworCSZhbmQJKCJlY3giLDB4ZmZmZmY3ZmYpOwkjIGZvcmNlIDExdGggYml0IHRvIDAKKwkmbW92CSgiZXNpIiwiZWR4Iik7CisJJm9yCSgiZWJwIiwiZWN4Iik7CQkjIG1lcmdlIEFNRCBYT1AgZmxhZworCisJJmJ0CSgiZWN4IiwyNyk7CQkjIGNoZWNrIE9TWFNBVkUgYml0CisJJmpuYwkoJmxhYmVsKCJjbGVhcl9hdngiKSk7CisJJnhvcgkoImVjeCIsImVjeCIpOworCSZkYXRhX2J5dGUoMHgwZiwweDAxLDB4ZDApOwkjIHhnZXRidgorCSZhbmQJKCJlYXgiLDYpOworCSZjbXAJKCJlYXgiLDYpOworCSZqZQkoJmxhYmVsKCJkb25lIikpOworCSZjbXAJKCJlYXgiLDIpOworCSZqZQkoJmxhYmVsKCJjbGVhcl9hdngiKSk7Cismc2V0X2xhYmVsKCJjbGVhcl94bW0iKTsKKwkmYW5kCSgiZWJwIiwweGZkZmZmZmZkKTsJIyBjbGVhciBBRVNOSSBhbmQgUENMTVVMUURRIGJpdHMKKwkmYW5kCSgiZXNpIiwweGZlZmZmZmZmKTsJIyBjbGVhciBGWFNSCismc2V0X2xhYmVsKCJjbGVhcl9hdngiKTsKKwkmYW5kCSgiZWJwIiwweGVmZmZlN2ZmKTsJIyBjbGVhciBBVlgsIEZNQSBhbmQgQU1EIFhPUCBiaXRzCiAmc2V0X2xhYmVsKCJkb25lIik7Ci0JJm1vdgkoImVheCIsImVkeCIpOwotCSZtb3YJKCJlZHgiLCJlY3giKTsKKwkmbW92CSgiZWF4IiwiZXNpIik7CisJJm1vdgkoImVkeCIsImVicCIpOworJnNldF9sYWJlbCgibm9jcHVpZCIpOwogJmZ1bmN0aW9uX2VuZCgiT1BFTlNTTF9pYTMyX2NwdWlkIik7CiAKICZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKQEAgLTE5OSw4ICsyMzAsOSBAQAogCSZidAkoJkRXUCgwLCJlY3giKSwxKTsKIAkmam5jCSgmbGFiZWwoIm5vX3g4NyIpKTsKIAlpZiAoJHNzZTIpIHsKLQkJJmJ0CSgmRFdQKDAsImVjeCIpLDI2KTsKLQkJJmpuYwkoJmxhYmVsKCJub19zc2UyIikpOworCQkmYW5kCSgiZWN4IiwxPDwyNnwxPDwyNCk7CSMgY2hlY2sgU1NFMiBhbmQgRlhTUiBiaXRzCisJCSZjbXAJKCJlY3giLDE8PDI2fDE8PDI0KTsKKwkJJmpuZQkoJmxhYmVsKCJub19zc2UyIikpOwogCQkmcHhvcgkoInhtbTAiLCJ4bW0wIik7CiAJCSZweG9yCSgieG1tMSIsInhtbTEiKTsKIAkJJnB4b3IJKCJ4bW0yIiwieG1tMiIpOwpAQCAtMzA3LDYgKzMzOSwxOCBAQAogCSZyZXQJKCk7CiAmZnVuY3Rpb25fZW5kX0IoIk9QRU5TU0xfY2xlYW5zZSIpOwogCismZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pYTMyX3JkcmFuZCIpOworCSZtb3YJKCJlY3giLDgpOworJnNldF9sYWJlbCgibG9vcCIpOworCSZyZHJhbmQJKCJlYXgiKTsKKwkmamMJKCZsYWJlbCgiYnJlYWsiKSk7CisJJmxvb3AJKCZsYWJlbCgibG9vcCIpKTsKKyZzZXRfbGFiZWwoImJyZWFrIik7CisJJmNtcAkoImVheCIsMCk7CisJJmNtb3ZlCSgiZWF4IiwiZWN4Iik7CisJJnJldAkoKTsKKyZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9pYTMyX3JkcmFuZCIpOworCiAmaW5pdHNlZygiT1BFTlNTTF9jcHVpZF9zZXR1cCIpOwogCiAmYXNtX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvZV9vcy5oIGIvZV9vcy5oCmluZGV4IDVjZWVlZWIuLjc5YzEzOTIgMTAwNjQ0Ci0tLSBhL2Vfb3MuaAorKysgYi9lX29zLmgKQEAgLTk5LDcgKzk5LDYgQEAKICMgIGlmbmRlZiBNQUNfT1NfR1VTSV9TT1VSQ0UKICMgICAgZGVmaW5lIE1BQ19PU19wcmVfWAogIyAgICBkZWZpbmUgTk9fU1lTX1RZUEVTX0gKLSAgICAgdHlwZWRlZiBsb25nIHNzaXplX3Q7CiAjICBlbmRpZgogIyAgZGVmaW5lIE5PX1NZU19QQVJBTV9ICiAjICBkZWZpbmUgTk9fQ0hNT0QKQEAgLTM0MCw4ICszMzksNiBAQAogIyAgICBkZWZpbmUgT1BFTlNTTF9OT19QT1NJWF9JTwogIyAgZW5kaWYKIAotIyAgZGVmaW5lIHNzaXplX3QgbG9uZwotCiAjICBpZiBkZWZpbmVkIChfX0JPUkxBTkRDX18pCiAjICAgIGRlZmluZSBfc2V0bW9kZSBzZXRtb2RlCiAjICAgIGRlZmluZSBfT19URVhUIE9fVEVYVApAQCAtNDU2LDkgKzQ1Myw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAodW5sZXNzIHdoZW4gY29tcGlsaW5nIHdpdGggLURfUE9TSVhfU09VUkNFLAogICAgICAgICAgICAgICAgICAgICAgICAgICogd2hpY2ggZG9lc24ndCB3b3JrIGZvciB1cykgKi8KICMgICAgZW5kaWYKLSMgICAgaWYgZGVmaW5lZChOZVhUKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX05FV1M0KSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1NVTk9TKQotIyAgICAgIGRlZmluZSBzc2l6ZV90IGludCAvKiBkaXR0byAqLwotIyAgICBlbmRpZgogIyAgICBpZmRlZiBPUEVOU1NMX1NZU19ORVdTNCAvKiBzZXR2YnVmIGlzIG1pc3Npbmcgb24gbWlwcy1zb255LWJzZCAqLwogIyAgICAgIGRlZmluZSBzZXR2YnVmKGEsIGIsIGMsIGQpIHNldGJ1ZmZlcigoYSksIChiKSwgKGQpKQogICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBjbG9ja190OwpAQCAtNjM3LDEyICs2MzEsNiBAQAogCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX191bHRyaXgpCi0jICBpZm5kZWYgc3NpemVfdAotIyAgICBkZWZpbmUgc3NpemVfdCBpbnQgCi0jICBlbmRpZgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKHN1bikgJiYgIWRlZmluZWQoX19zdnI0X18pICYmICFkZWZpbmVkKF9fU1ZSNCkKICAgLyogaW5jbHVkZSBoZWFkZXJzIGZpcnN0LCBzbyBvdXIgZGVmaW5lcyBkb24ndCBicmVhayBpdCAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgpkaWZmIC0tZ2l0IGEvZV9vczIuaCBiL2Vfb3MyLmgKaW5kZXggZDMwNzI0ZC4uZDIyYzAzNiAxMDA2NDQKLS0tIGEvZV9vczIuaAorKysgYi9lX29zMi5oCkBAIC0yODksNiArMjg5LDI2IEBACiAjIGRlZmluZSBPUEVOU1NMX0dMT0JBTF9SRUYobmFtZSkgX3NoYWRvd18jI25hbWUKICNlbmRpZgogCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNJTlRPU0hfQ0xBU1NJQykgJiYgbWFjaW50b3NoPT0xICYmICFkZWZpbmVkKE1BQ19PU19HVVNJX1NPVVJDRSkKKyMgIGRlZmluZSBvc3NsX3NzaXplX3QgbG9uZworI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX1NZU19NU0RPUworIyAgZGVmaW5lIG9zc2xfc3NpemVfdCBsb25nCisjZW5kaWYKKworI2lmIGRlZmluZWQoTmVYVCkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVdTNCkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19TVU5PUykKKyMgIGRlZmluZSBzc2l6ZV90IGludAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fdWx0cml4KSAmJiAhZGVmaW5lZChzc2l6ZV90KQorIyAgZGVmaW5lIG9zc2xfc3NpemVfdCBpbnQgCisjZW5kaWYKKworI2lmbmRlZiBvc3NsX3NzaXplX3QKKyMgIGRlZmluZSBvc3NsX3NzaXplX3Qgc3NpemVfdAorI2VuZGlmCisKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2Flcy5oIGIvaW5jbHVkZS9vcGVuc3NsL2Flcy5oCmluZGV4IGQyYzk5NzMuLjAzMWFiZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKQEAgLTkwLDYgKzkwLDExIEBACiBpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIAlBRVNfS0VZICprZXkpOwogCitpbnQgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CitpbnQgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CisKIHZvaWQgQUVTX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKIAljb25zdCBBRVNfS0VZICprZXkpOwogdm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCBiL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKaW5kZXggNTk1NDBlNC4uMjIwYTBjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCkBAIC0yMzUsNyArMjM1LDcgQEAKICAqLwogI2RlZmluZSBBU04xX1NUUklOR19GTEFHX01TVFJJTkcgMHgwNDAgCiAvKiBUaGlzIGlzIHRoZSBiYXNlIHR5cGUgdGhhdCBob2xkcyBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgOi0pICovCi10eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdAorc3RydWN0IGFzbjFfc3RyaW5nX3N0CiAJewogCWludCBsZW5ndGg7CiAJaW50IHR5cGU7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgKiBpbnB1dCBkYXRhIGhhcyBhIG5vbi16ZXJvICd1bnVzZWQgYml0cycgdmFsdWUsIGl0IHdpbGwgYmUKIAkgKiBoYW5kbGVkIGNvcnJlY3RseSAqLwogCWxvbmcgZmxhZ3M7Ci0JfSBBU04xX1NUUklORzsKKwl9OwogCiAvKiBBU04xX0VOQ09ESU5HIHN0cnVjdHVyZTogdGhpcyBpcyB1c2VkIHRvIHNhdmUgdGhlIHJlY2VpdmVkCiAgKiBlbmNvZGluZyBvZiBhbiBBU04xIHR5cGUuIFRoaXMgaXMgdXNlZnVsIHRvIGdldCByb3VuZApAQCAtMjkzLDcgKzI5Myw2IEBACiAgKiBzZWUgYXNuMXQuaAogICovCiB0eXBlZGVmIHN0cnVjdCBBU04xX1RFTVBMQVRFX3N0IEFTTjFfVEVNUExBVEU7Ci10eXBlZGVmIHN0cnVjdCBBU04xX0lURU1fc3QgQVNOMV9JVEVNOwogdHlwZWRlZiBzdHJ1Y3QgQVNOMV9UTENfc3QgQVNOMV9UTEM7CiAvKiBUaGlzIGlzIGp1c3QgYW4gb3BhcXVlIHBvaW50ZXIgKi8KIHR5cGVkZWYgc3RydWN0IEFTTjFfVkFMVUVfc3QgQVNOMV9WQUxVRTsKQEAgLTExOTQsNiArMTE5Myw3IEBACiAjZGVmaW5lIEFTTjFfRl9BU04xX0lURU1fSTJEX0ZQCQkJCSAxOTMKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9QQUNLCQkJCSAxOTgKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9TSUdOCQkJCSAxOTUKKyNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9TSUdOX0NUWAkJCSAyMjAKICNkZWZpbmUgQVNOMV9GX0FTTjFfSVRFTV9VTlBBQ0sJCQkJIDE5OQogI2RlZmluZSBBU04xX0ZfQVNOMV9JVEVNX1ZFUklGWQkJCQkgMTk3CiAjZGVmaW5lIEFTTjFfRl9BU04xX01CU1RSSU5HX05DT1BZCQkJIDEyMgpAQCAtMTI2Niw2ICsxMjY2LDcgQEAKICNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCRTJfU0VUX0lWCQkJIDE2NwogI2RlZmluZSBBU04xX0ZfUEtDUzVfUEJFX1NFVAkJCQkgMjAyCiAjZGVmaW5lIEFTTjFfRl9QS0NTNV9QQkVfU0VUMF9BTEdPUgkJCSAyMTUKKyNkZWZpbmUgQVNOMV9GX1BLQ1M1X1BCS0RGMl9TRVQJCQkJIDIxOQogI2RlZmluZSBBU04xX0ZfU01JTUVfUkVBRF9BU04xCQkJCSAyMTIKICNkZWZpbmUgQVNOMV9GX1NNSU1FX1RFWFQJCQkJIDIxMwogI2RlZmluZSBBU04xX0ZfWDUwOV9DSU5GX05FVwkJCQkgMTY4CkBAIC0xMjkxLDYgKzEyOTIsNyBAQAogI2RlZmluZSBBU04xX1JfQk9PTEVBTl9JU19XUk9OR19MRU5HVEgJCQkgMTA2CiAjZGVmaW5lIEFTTjFfUl9CVUZGRVJfVE9PX1NNQUxMCQkJCSAxMDcKICNkZWZpbmUgQVNOMV9SX0NJUEhFUl9IQVNfTk9fT0JKRUNUX0lERU5USUZJRVIJCSAxMDgKKyNkZWZpbmUgQVNOMV9SX0NPTlRFWFRfTk9UX0lOSVRJQUxJU0VECQkJIDIxNwogI2RlZmluZSBBU04xX1JfREFUQV9JU19XUk9ORwkJCQkgMTA5CiAjZGVmaW5lIEFTTjFfUl9ERUNPREVfRVJST1IJCQkJIDExMAogI2RlZmluZSBBU04xX1JfREVDT0RJTkdfRVJST1IJCQkJIDExMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2Jpby5oIGIvaW5jbHVkZS9vcGVuc3NsL2Jpby5oCmluZGV4IDNjMzlkMTguLjA1Njk5YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKQEAgLTY4LDYgKzY4LDE0IEBACiAKICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgogCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorIyBpZm5kZWYgT1BFTlNTTF9TWVNfVk1TCisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbHNlCisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjIGVuZGlmCisjZW5kaWYKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTk1LDYgKzEwMyw5IEBACiAjZGVmaW5lIEJJT19UWVBFX0JJTwkJKDE5fDB4MDQwMCkJCS8qIChoYWxmIGEpIEJJTyBwYWlyICovCiAjZGVmaW5lIEJJT19UWVBFX0xJTkVCVUZGRVIJKDIwfDB4MDIwMCkJCS8qIGZpbHRlciAqLwogI2RlZmluZSBCSU9fVFlQRV9ER1JBTQkJKDIxfDB4MDQwMHwweDAxMDApCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorI2RlZmluZSBCSU9fVFlQRV9ER1JBTV9TQ1RQCSgyNHwweDA0MDB8MHgwMTAwKQorI2VuZGlmCiAjZGVmaW5lIEJJT19UWVBFX0FTTjEgCQkoMjJ8MHgwMjAwKQkJLyogZmlsdGVyICovCiAjZGVmaW5lIEJJT19UWVBFX0NPTVAgCQkoMjN8MHgwMjAwKQkJLyogZmlsdGVyICovCiAKQEAgLTE2Miw3ICsxNzMsMjIgQEAKICNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0VUX1BFRVIgICAgICAgICAgIDQ0IC8qIERlc3RpbmF0aW9uIGZvciB0aGUgZGF0YSAqLwogCiAjZGVmaW5lIEJJT19DVFJMX0RHUkFNX1NFVF9ORVhUX1RJTUVPVVQgICA0NSAvKiBOZXh0IERUTFMgaGFuZHNoYWtlIHRpbWVvdXQgdG8KLQkJCQkJCQkJCQkJICAqIGFkanVzdCBzb2NrZXQgdGltZW91dHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFkanVzdCBzb2NrZXQgdGltZW91dHMgKi8KKworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKy8qIFNDVFAgc3R1ZmYgKi8KKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfSU5fSEFORFNIQUtFCTUwCisjZGVmaW5lIEJJT19DVFJMX0RHUkFNX1NDVFBfQUREX0FVVEhfS0VZCQk1MQorI2RlZmluZSBCSU9fQ1RSTF9ER1JBTV9TQ1RQX05FWFRfQVVUSF9LRVkJCTUyCisjZGVmaW5lIEJJT19DVFJMX0RHUkFNX1NDVFBfQVVUSF9DQ1NfUkNWRAkJNTMKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9HRVRfU05ESU5GTwkJNjAKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfU05ESU5GTwkJNjEKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9HRVRfUkNWSU5GTwkJNjIKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfUkNWSU5GTwkJNjMKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9HRVRfUFJJTkZPCQkJNjQKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfUFJJTkZPCQkJNjUKKyNkZWZpbmUgQklPX0NUUkxfREdSQU1fU0NUUF9TQVZFX1NIVVRET1dOCQk3MAorI2VuZGlmCiAKIC8qIG1vZGlmaWVycyAqLwogI2RlZmluZSBCSU9fRlBfUkVBRAkJMHgwMgpAQCAtMzMyLDYgKzM1OCwzNCBAQAogLyogUHJlZml4IGFuZCBzdWZmaXggY2FsbGJhY2sgaW4gQVNOMSBCSU8gKi8KIHR5cGVkZWYgaW50IGFzbjFfcHNfZnVuYyhCSU8gKmIsIHVuc2lnbmVkIGNoYXIgKipwYnVmLCBpbnQgKnBsZW4sIHZvaWQgKnBhcmcpOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorLyogU0NUUCBwYXJhbWV0ZXIgc3RydWN0cyAqLworc3RydWN0IGJpb19kZ3JhbV9zY3RwX3NuZGluZm8KKwl7CisJdWludDE2X3Qgc25kX3NpZDsKKwl1aW50MTZfdCBzbmRfZmxhZ3M7CisJdWludDMyX3Qgc25kX3BwaWQ7CisJdWludDMyX3Qgc25kX2NvbnRleHQ7CisJfTsKKworc3RydWN0IGJpb19kZ3JhbV9zY3RwX3JjdmluZm8KKwl7CisJdWludDE2X3QgcmN2X3NpZDsKKwl1aW50MTZfdCByY3Zfc3NuOworCXVpbnQxNl90IHJjdl9mbGFnczsKKwl1aW50MzJfdCByY3ZfcHBpZDsKKwl1aW50MzJfdCByY3ZfdHNuOworCXVpbnQzMl90IHJjdl9jdW10c247CisJdWludDMyX3QgcmN2X2NvbnRleHQ7CisJfTsKKworc3RydWN0IGJpb19kZ3JhbV9zY3RwX3ByaW5mbworCXsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDMyX3QgcHJfdmFsdWU7CisJfTsKKyNlbmRpZgorCiAvKiBjb25uZWN0IEJJTyBzdHVmZiAqLwogI2RlZmluZSBCSU9fQ09OTl9TX0JFRk9SRQkJMQogI2RlZmluZSBCSU9fQ09OTl9TX0dFVF9JUAkJMgpAQCAtNjI5LDYgKzY4Myw5IEBACiBCSU9fTUVUSE9EICpCSU9fZl9uYmlvX3Rlc3Qodm9pZCk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fREdSQU0KIEJJT19NRVRIT0QgKkJJT19zX2RhdGFncmFtKHZvaWQpOworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKK0JJT19NRVRIT0QgKkJJT19zX2RhdGFncmFtX3NjdHAodm9pZCk7CisjZW5kaWYKICNlbmRpZgogCiAvKiBCSU9fTUVUSE9EICpCSU9fZl9iZXIodm9pZCk7ICovCkBAIC02NzEsNiArNzI4LDE1IEBACiAKIEJJTyAqQklPX25ld19zb2NrZXQoaW50IHNvY2ssIGludCBjbG9zZV9mbGFnKTsKIEJJTyAqQklPX25ld19kZ3JhbShpbnQgZmQsIGludCBjbG9zZV9mbGFnKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCitCSU8gKkJJT19uZXdfZGdyYW1fc2N0cChpbnQgZmQsIGludCBjbG9zZV9mbGFnKTsKK2ludCBCSU9fZGdyYW1faXNfc2N0cChCSU8gKmJpbyk7CitpbnQgQklPX2RncmFtX3NjdHBfbm90aWZpY2F0aW9uX2NiKEJJTyAqYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmhhbmRsZV9ub3RpZmljYXRpb25zKShCSU8gKmJpbywgdm9pZCAqY29udGV4dCwgdm9pZCAqYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCk7CitpbnQgQklPX2RncmFtX3NjdHBfd2FpdF9mb3JfZHJ5KEJJTyAqYik7CitpbnQgQklPX2RncmFtX3NjdHBfbXNnX3dhaXRpbmcoQklPICpiKTsKKyNlbmRpZgogQklPICpCSU9fbmV3X2ZkKGludCBmZCwgaW50IGNsb3NlX2ZsYWcpOwogQklPICpCSU9fbmV3X2Nvbm5lY3QoY2hhciAqaG9zdF9wb3J0KTsKIEJJTyAqQklPX25ld19hY2NlcHQoY2hhciAqaG9zdF9wb3J0KTsKQEAgLTczNSw2ICs4MDEsNyBAQAogI2RlZmluZSBCSU9fRl9CVUZGRVJfQ1RSTAkJCQkgMTE0CiAjZGVmaW5lIEJJT19GX0NPTk5fQ1RSTAkJCQkJIDEyNwogI2RlZmluZSBCSU9fRl9DT05OX1NUQVRFCQkJCSAxMTUKKyNkZWZpbmUgQklPX0ZfREdSQU1fU0NUUF9SRUFECQkJCSAxMzIKICNkZWZpbmUgQklPX0ZfRklMRV9DVFJMCQkJCQkgMTE2CiAjZGVmaW5lIEJJT19GX0ZJTEVfUkVBRAkJCQkJIDEzMAogI2RlZmluZSBCSU9fRl9MSU5FQlVGRkVSX0NUUkwJCQkJIDEyOQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmggYi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaAppbmRleCBiOTdlNzZmLi40YjZjODkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaApAQCAtMTA0LDcgKzEwNCw5IEBACiAJQkZfTE9ORyBTWzQqMjU2XTsKIAl9IEJGX0tFWTsKIAotIAorI2lmZGVmIE9QRU5TU0xfRklQUyAKK3ZvaWQgcHJpdmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgogdm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKIAogdm9pZCBCRl9lbmNyeXB0KEJGX0xPTkcgKmRhdGEsY29uc3QgQkZfS0VZICprZXkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2JuLmggYi9pbmNsdWRlL29wZW5zc2wvYm4uaAppbmRleCBhMGJjNDc4Li5mMzQyNDhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvYm4uaAorKysgYi9pbmNsdWRlL29wZW5zc2wvYm4uaApAQCAtNTU4LDYgKzU1OCwxNyBAQAogaW50CUJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbmNoZWNrcywgQk5fQ1RYICpjdHgsCiAJCWludCBkb190cmlhbF9kaXZpc2lvbiwgQk5fR0VOQ0IgKmNiKTsKIAoraW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpOworCitpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwgQk5fR0VOQ0IgKmNiKTsKK2ludCBCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKKwkJCWNvbnN0IEJJR05VTSAqWHAsCisJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAorCQkJQk5fR0VOQ0IgKmNiKTsKKwogQk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7CiB2b2lkIEJOX01PTlRfQ1RYX2luaXQoQk5fTU9OVF9DVFggKmN0eCk7CiBpbnQgQk5fbW9kX211bF9tb250Z29tZXJ5KEJJR05VTSAqcixjb25zdCBCSUdOVU0gKmEsY29uc3QgQklHTlVNICpiLApAQCAtNjEyLDYgKzYyMyw4IEBACiBpbnQJQk5fZGl2X3JlY3AoQklHTlVNICpkdiwgQklHTlVNICpyZW0sIGNvbnN0IEJJR05VTSAqbSwKIAlCTl9SRUNQX0NUWCAqcmVjcCwgQk5fQ1RYICpjdHgpOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQorCiAvKiBGdW5jdGlvbnMgZm9yIGFyaXRobWV0aWMgb3ZlciBiaW5hcnkgcG9seW5vbWlhbHMgcmVwcmVzZW50ZWQgYnkgQklHTlVNcy4gCiAgKgogICogVGhlIEJJR05VTTo6bmVnIHByb3BlcnR5IG9mIEJJR05VTXMgcmVwcmVzZW50aW5nIGJpbmFyeSBwb2x5bm9taWFscyBpcwpAQCAtNjYzLDYgKzY3Niw4IEBACiBpbnQJQk5fR0YybV9wb2x5MmFycihjb25zdCBCSUdOVU0gKmEsIGludCBwW10sIGludCBtYXgpOwogaW50CUJOX0dGMm1fYXJyMnBvbHkoY29uc3QgaW50IHBbXSwgQklHTlVNICphKTsKIAorI2VuZGlmCisKIC8qIGZhc3RlciBtb2QgZnVuY3Rpb25zIGZvciB0aGUgJ05JU1QgcHJpbWVzJyAKICAqIDAgPD0gYSA8IHBeMiAqLwogaW50IEJOX25pc3RfbW9kXzE5MihCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgY29uc3QgQklHTlVNICpwLCBCTl9DVFggKmN0eCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvY21hYy5oIGIvaW5jbHVkZS9vcGVuc3NsL2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJlOTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2NtYWMuaApAQCAtMCwwICsxLDgyIEBACisvKiBjcnlwdG8vY21hYy9jbWFjLmggKi8KKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorICogcHJvamVjdC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisKKyNpZm5kZWYgSEVBREVSX0NNQUNfSAorI2RlZmluZSBIRUFERVJfQ01BQ19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisKKy8qIE9wYXF1ZSAqLwordHlwZWRlZiBzdHJ1Y3QgQ01BQ19DVFhfc3QgQ01BQ19DVFg7CisKK0NNQUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCk7Cit2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01BQ19DVFggKmN0eCk7Cit2b2lkIENNQUNfQ1RYX2ZyZWUoQ01BQ19DVFggKmN0eCk7CitFVlBfQ0lQSEVSX0NUWCAqQ01BQ19DVFhfZ2V0MF9jaXBoZXJfY3R4KENNQUNfQ1RYICpjdHgpOworaW50IENNQUNfQ1RYX2NvcHkoQ01BQ19DVFggKm91dCwgY29uc3QgQ01BQ19DVFggKmluKTsKKworaW50IENNQUNfSW5pdChDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkICprZXksIHNpemVfdCBrZXlsZW4sIAorCQkJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBFTkdJTkUgKmltcGwpOworaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkbGVuKTsKK2ludCBDTUFDX0ZpbmFsKENNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVuKTsKK2ludCBDTUFDX3Jlc3VtZShDTUFDX0NUWCAqY3R4KTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCBiL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAppbmRleCBiMDM2MGNlLi42YWVkYTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC01NDcsNiArNTQ3LDMzIEBACiAjZGVmaW5lIE9QRU5TU0xfaWEzMmNhcCAoKihPUEVOU1NMX2lhMzJjYXBfbG9jKCkpKQogaW50IE9QRU5TU0xfaXNzZXJ2aWNlKHZvaWQpOwogCitpbnQgRklQU19tb2RlKHZvaWQpOworaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOworCit2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKworI2RlZmluZSBmaXBzX21kX2luaXQoYWxnKSBmaXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQorCisjaWZkZWYgT1BFTlNTTF9GSVBTCisjZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCisJeyBcCisJaWYgKEZJUFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCisJfSBcCisJaW50IHByaXZhdGVfIyNhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorCisjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgXAorCWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQorCisjZWxzZQorI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKwlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKyNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCkBAIC01NjIsMTEgKzU4OSwxMyBAQAogI2RlZmluZSBDUllQVE9fRl9DUllQVE9fU0VUX0VYX0RBVEEJCQkgMTAyCiAjZGVmaW5lIENSWVBUT19GX0RFRl9BRERfSU5ERVgJCQkJIDEwNAogI2RlZmluZSBDUllQVE9fRl9ERUZfR0VUX0NMQVNTCQkJCSAxMDUKKyNkZWZpbmUgQ1JZUFRPX0ZfRklQU19NT0RFX1NFVAkJCQkgMTA5CiAjZGVmaW5lIENSWVBUT19GX0lOVF9EVVBfRVhfREFUQQkJCSAxMDYKICNkZWZpbmUgQ1JZUFRPX0ZfSU5UX0ZSRUVfRVhfREFUQQkJCSAxMDcKICNkZWZpbmUgQ1JZUFRPX0ZfSU5UX05FV19FWF9EQVRBCQkJIDEwOAogCiAvKiBSZWFzb24gY29kZXMuICovCisjZGVmaW5lIENSWVBUT19SX0ZJUFNfTU9ERV9OT1RfU1VQUE9SVEVECQkgMTAxCiAjZGVmaW5lIENSWVBUT19SX05PX0RZTkxPQ0tfQ1JFQVRFX0NBTExCQUNLCQkgMTAwCiAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCBiL2luY2x1ZGUvb3BlbnNzbC9kZXMuaAppbmRleCA5MmI2NjYzLi4xZWFlZGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZGVzLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2Rlcy5oCkBAIC0yMjQsNiArMjI0LDkgQEAKIGludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CiBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwogdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK3ZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyNlbmRpZgogdm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5KTsKIHZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKIHZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2RoLmggYi9pbmNsdWRlL29wZW5zc2wvZGguaAppbmRleCA4NDkzMDlhLi5lYTU5ZTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZGguaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZGguaApAQCAtODYsNiArODYsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgdXNlZCBmb3IgYWxsIGV4cG9uZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERIIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgorICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKyAqLworCisjZGVmaW5lIERIX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKKworLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQorICogdXNhZ2UgaXMgY29tcGxpYW50LgorICovCisKKyNkZWZpbmUgREhfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAorCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMjMwLDYgKzI0NSw5IEBACiAjZGVmaW5lIERIX0ZfQ09NUFVURV9LRVkJCQkJIDEwMgogI2RlZmluZSBESF9GX0RIUEFSQU1TX1BSSU5UX0ZQCQkJCSAxMDEKICNkZWZpbmUgREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDYKKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0CisjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJCSAxMTUKKyNkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkJIDExNgogI2RlZmluZSBESF9GX0RIX05FV19NRVRIT0QJCQkJIDEwNQogI2RlZmluZSBESF9GX0RIX1BBUkFNX0RFQ09ERQkJCQkgMTA3CiAjZGVmaW5lIERIX0ZfREhfUFJJVl9ERUNPREUJCQkJIDExMApAQCAtMjQ5LDcgKzI2Nyw5IEBACiAjZGVmaW5lIERIX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKICNkZWZpbmUgREhfUl9JTlZBTElEX1BVQktFWQkJCQkgMTAyCiAjZGVmaW5lIERIX1JfS0VZU19OT1RfU0VUCQkJCSAxMDgKKyNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDExMAogI2RlZmluZSBESF9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKyNkZWZpbmUgREhfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQogI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKICNkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZHNhLmggYi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKaW5kZXggYWM1MGE1Yy4uYTZmNmQwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2RzYS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtOTcsNiArOTcsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAorLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgorICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKyAqLworCisjZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCisKKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KKyAqLworCisjZGVmaW5lIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XCQkJMHgwNDAwCisKICNpZmRlZiAgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC0yNzIsNiArMjg3LDggQEAKICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQogI2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCiAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMworI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJCSAxMjQKKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwogI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKQEAgLTI4Miw2ICsyOTksNyBAQAogI2RlZmluZSBEU0FfRl9EU0FfU0lHTgkJCQkJIDEwNgogI2RlZmluZSBEU0FfRl9EU0FfU0lHTl9TRVRVUAkJCQkgMTA3CiAjZGVmaW5lIERTQV9GX0RTQV9TSUdfTkVXCQkJCSAxMDkKKyNkZWZpbmUgRFNBX0ZfRFNBX1NJR19QUklOVAkJCQkgMTI1CiAjZGVmaW5lIERTQV9GX0RTQV9WRVJJRlkJCQkJIDEwOAogI2RlZmluZSBEU0FfRl9JMkRfRFNBX1NJRwkJCQkgMTExCiAjZGVmaW5lIERTQV9GX09MRF9EU0FfUFJJVl9ERUNPREUJCQkgMTIyCkBAIC0yOTgsNiArMzE2LDggQEAKICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQogI2RlZmluZSBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTAzCisjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKKyNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRAkJCSAxMTEKICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwogI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIGIvaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKaW5kZXggMjkwMGQxZC4uNTAwOGJmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKQEAgLTEwNSw2ICsxMDUsMTEgQEAKICNkZWZpbmUgRFRMUzFfQUxfSEVBREVSX0xFTkdUSCAgICAgICAgICAgICAgICAgICAyCiAjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKyNkZWZpbmUgRFRMUzFfU0NUUF9BVVRIX0xBQkVMCSJFWFBPUlRFUl9EVExTX09WRVJfU0NUUCIKKyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBkdGxzMV9iaXRtYXBfc3QKIAl7CkBAIC0yMjcsNyArMjMyLDcgQEAKIAogCXN0cnVjdCBkdGxzMV90aW1lb3V0X3N0IHRpbWVvdXQ7CiAKLQkvKiBJbmRpY2F0ZXMgd2hlbiB0aGUgbGFzdCBoYW5kc2hha2UgbXNnIHNlbnQgd2lsbCB0aW1lb3V0ICovCisJLyogSW5kaWNhdGVzIHdoZW4gdGhlIGxhc3QgaGFuZHNoYWtlIG1zZyBvciBoZWFydGJlYXQgc2VudCB3aWxsIHRpbWVvdXQgKi8KIAlzdHJ1Y3QgdGltZXZhbCBuZXh0X3RpbWVvdXQ7CiAKIAkvKiBUaW1lb3V0IGR1cmF0aW9uICovCkBAIC0yNDMsNiArMjQ4LDEzIEBACiAJdW5zaWduZWQgaW50IHJldHJhbnNtaXR0aW5nOwogCXVuc2lnbmVkIGludCBjaGFuZ2VfY2lwaGVyX3NwZWNfb2s7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJLyogdXNlZCB3aGVuIFNTTF9TVF9YWF9GTFVTSCBpcyBlbnRlcmVkICovCisJaW50IG5leHRfc3RhdGU7CisKKwlpbnQgc2h1dGRvd25fcmVjZWl2ZWQ7CisjZW5kaWYKKwogCX0gRFRMUzFfU1RBVEU7CiAKIHR5cGVkZWYgc3RydWN0IGR0bHMxX3JlY29yZF9kYXRhX3N0CkBAIC0yNTEsOCArMjYzLDEyIEBACiAJdW5zaWduZWQgaW50ICAgcGFja2V0X2xlbmd0aDsKIAlTU0wzX0JVRkZFUiAgICByYnVmOwogCVNTTDNfUkVDT1JEICAgIHJyZWM7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCXN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvIHJlY29yZGluZm87CisjZW5kaWYKIAl9IERUTFMxX1JFQ09SRF9EQVRBOwogCisjZW5kaWYKIAogLyogVGltZW91dCBtdWx0aXBsaWVycyAodGltZW91dCBzbGljZSBpcyBkZWZpbmVkIGluIGFwcHMvdGltZW91dHMuaCAqLwogI2RlZmluZSBEVExTMV9UTU9fUkVBRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCBiL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCmluZGV4IGQzMDcyNGQuLmQyMmMwMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCkBAIC0yODksNiArMjg5LDI2IEBACiAjIGRlZmluZSBPUEVOU1NMX0dMT0JBTF9SRUYobmFtZSkgX3NoYWRvd18jI25hbWUKICNlbmRpZgogCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19NQUNJTlRPU0hfQ0xBU1NJQykgJiYgbWFjaW50b3NoPT0xICYmICFkZWZpbmVkKE1BQ19PU19HVVNJX1NPVVJDRSkKKyMgIGRlZmluZSBvc3NsX3NzaXplX3QgbG9uZworI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX1NZU19NU0RPUworIyAgZGVmaW5lIG9zc2xfc3NpemVfdCBsb25nCisjZW5kaWYKKworI2lmIGRlZmluZWQoTmVYVCkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19ORVdTNCkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19TVU5PUykKKyMgIGRlZmluZSBzc2l6ZV90IGludAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fdWx0cml4KSAmJiAhZGVmaW5lZChzc2l6ZV90KQorIyAgZGVmaW5lIG9zc2xfc3NpemVfdCBpbnQgCisjZW5kaWYKKworI2lmbmRlZiBvc3NsX3NzaXplX3QKKyMgIGRlZmluZSBvc3NsX3NzaXplX3Qgc3NpemVfdAorI2VuZGlmCisKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2VjLmggYi9pbmNsdWRlL29wZW5zc2wvZWMuaAppbmRleCBlZTcwNzgxLi45ZDAxMzI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZWMuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZWMuaApAQCAtMTUxLDcgKzE1MSwyNCBAQAogICovCiBjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9uaXN0X21ldGhvZCh2b2lkKTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjgKKy8qKiBSZXR1cm5zIDY0LWJpdCBvcHRpbWl6ZWQgbWV0aG9kcyBmb3IgbmlzdHAyMjQKKyAqICBccmV0dXJuICBFQ19NRVRIT0Qgb2JqZWN0CisgKi8KK2NvbnN0IEVDX01FVEhPRCAqRUNfR0ZwX25pc3RwMjI0X21ldGhvZCh2b2lkKTsKIAorLyoqIFJldHVybnMgNjQtYml0IG9wdGltaXplZCBtZXRob2RzIGZvciBuaXN0cDI1NgorICogIFxyZXR1cm4gIEVDX01FVEhPRCBvYmplY3QKKyAqLworY29uc3QgRUNfTUVUSE9EICpFQ19HRnBfbmlzdHAyNTZfbWV0aG9kKHZvaWQpOworCisvKiogUmV0dXJucyA2NC1iaXQgb3B0aW1pemVkIG1ldGhvZHMgZm9yIG5pc3RwNTIxCisgKiAgXHJldHVybiAgRUNfTUVUSE9EIG9iamVjdAorICovCitjb25zdCBFQ19NRVRIT0QgKkVDX0dGcF9uaXN0cDUyMV9tZXRob2Qodm9pZCk7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCiAvKiAgICAgICAgICAgRUNfTUVUSE9EIGZvciBjdXJ2ZXMgb3ZlciBHRigyXm0pICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjEsNiArMTc4LDggQEAKICAqLwogY29uc3QgRUNfTUVUSE9EICpFQ19HRjJtX3NpbXBsZV9tZXRob2Qodm9pZCk7CiAKKyNlbmRpZgorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgIEVDX0dST1VQIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI4Miw2ICszMDEsNyBAQAogICovCiBpbnQgRUNfR1JPVVBfZ2V0X2N1cnZlX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEJJR05VTSAqcCwgQklHTlVNICphLCBCSUdOVU0gKmIsIEJOX0NUWCAqY3R4KTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIC8qKiBTZXRzIHRoZSBwYXJhbWV0ZXIgb2YgYSBlYyBvdmVyIEdGMm0gZGVmaW5lZCBieSB5XjIgKyB4KnkgPSB4XjMgKyBhKnheMiArIGIKICAqICBccGFyYW0gIGdyb3VwICBFQ19HUk9VUCBvYmplY3QKICAqICBccGFyYW0gIHAgICAgICBCSUdOVU0gd2l0aCB0aGUgcG9seW5vbWlhbCBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBmaWVsZApAQCAtMzAxLDcgKzMyMSw3IEBACiAgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgaWYgYW4gZXJyb3Igb2NjdXJlZAogICovCiBpbnQgRUNfR1JPVVBfZ2V0X2N1cnZlX0dGMm0oY29uc3QgRUNfR1JPVVAgKmdyb3VwLCBCSUdOVU0gKnAsIEJJR05VTSAqYSwgQklHTlVNICpiLCBCTl9DVFggKmN0eCk7Ci0KKyNlbmRpZgogLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgYSBmaWVsZCBlbGVtZW50IAogICogIFxwYXJhbSAgZ3JvdXAgIEVDX0dST1VQIG9iamVjdAogICogIFxyZXR1cm4gbnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIHJlcHJlc2VudCBhIGZpZWxkIGVsZW1lbnQKQEAgLTM0Miw3ICszNjIsNyBAQAogICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKICAqLwogRUNfR1JPVVAgKkVDX0dST1VQX25ld19jdXJ2ZV9HRnAoY29uc3QgQklHTlVNICpwLCBjb25zdCBCSUdOVU0gKmEsIGNvbnN0IEJJR05VTSAqYiwgQk5fQ1RYICpjdHgpOwotCisjaWZuZGVmIE9QRU5TU0xfTk9fRUMyTQogLyoqIENyZWF0ZXMgYSBuZXcgRUNfR1JPVVAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGRlZmluZWQKICAqICBvdmVyIEdGMm0gKGRlZmluZWQgYnkgdGhlIGVxdWF0aW9uIHleMiArIHgqeSA9IHheMyArIGEqeF4yICsgYikKICAqICBccGFyYW0gIHAgICAgQklHTlVNIHdpdGggdGhlIHBvbHlub21pYWwgZGVmaW5pbmcgdGhlIHVuZGVybHlpbmcgZmllbGQKQEAgLTM1Miw3ICszNzIsNyBAQAogICogIFxyZXR1cm4gbmV3bHkgY3JlYXRlZCBFQ19HUk9VUCBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKICAqLwogRUNfR1JPVVAgKkVDX0dST1VQX25ld19jdXJ2ZV9HRjJtKGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICphLCBjb25zdCBCSUdOVU0gKmIsIEJOX0NUWCAqY3R4KTsKLQorI2VuZGlmCiAvKiogQ3JlYXRlcyBhIEVDX0dST1VQIG9iamVjdCB3aXRoIGEgY3VydmUgc3BlY2lmaWVkIGJ5IGEgTklECiAgKiAgXHBhcmFtICBuaWQgIE5JRCBvZiB0aGUgT0lEIG9mIHRoZSBjdXJ2ZSBuYW1lCiAgKiAgXHJldHVybiBuZXdseSBjcmVhdGVkIEVDX0dST1VQIG9iamVjdCB3aXRoIHNwZWNpZmllZCBjdXJ2ZSBvciBOVUxMCkBAIC00ODEsNyArNTAxLDcgQEAKICAqLwogaW50IEVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcChjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwLAogCWNvbnN0IEJJR05VTSAqeCwgaW50IHlfYml0LCBCTl9DVFggKmN0eCk7Ci0KKyNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCiAvKiogU2V0cyB0aGUgYWZmaW5lIGNvb3JkaW5hdGVzIG9mIGEgRUNfUE9JTlQgb3ZlciBHRjJtCiAgKiAgXHBhcmFtICBncm91cCAgdW5kZXJseWluZyBFQ19HUk9VUCBvYmplY3QKICAqICBccGFyYW0gIHAgICAgICBFQ19QT0lOVCBvYmplY3QKQEAgLTUxNCw3ICs1MzQsNyBAQAogICovCiBpbnQgRUNfUE9JTlRfc2V0X2NvbXByZXNzZWRfY29vcmRpbmF0ZXNfR0YybShjb25zdCBFQ19HUk9VUCAqZ3JvdXAsIEVDX1BPSU5UICpwLAogCWNvbnN0IEJJR05VTSAqeCwgaW50IHlfYml0LCBCTl9DVFggKmN0eCk7Ci0KKyNlbmRpZgogLyoqIEVuY29kZXMgYSBFQ19QT0lOVCBvYmplY3QgdG8gYSBvY3RldCBzdHJpbmcKICAqICBccGFyYW0gIGdyb3VwICB1bmRlcmx5aW5nIEVDX0dST1VQIG9iamVjdAogICogIFxwYXJhbSAgcCAgICAgIEVDX1BPSU5UIG9iamVjdApAQCAtNjUzLDkgKzY3MywxMSBAQAogLyogRUNfR1JPVVBfZ2V0X2Jhc2lzX3R5cGUoKSByZXR1cm5zIHRoZSBOSUQgb2YgdGhlIGJhc2lzIHR5cGUKICAqIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmaWVsZCBlbGVtZW50cyAqLwogaW50IEVDX0dST1VQX2dldF9iYXNpc190eXBlKGNvbnN0IEVDX0dST1VQICopOworI2lmbmRlZiBPUEVOU1NMX05PX0VDMk0KIGludCBFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzKGNvbnN0IEVDX0dST1VQICosIHVuc2lnbmVkIGludCAqayk7CiBpbnQgRUNfR1JPVVBfZ2V0X3BlbnRhbm9taWFsX2Jhc2lzKGNvbnN0IEVDX0dST1VQICosIHVuc2lnbmVkIGludCAqazEsIAogCXVuc2lnbmVkIGludCAqazIsIHVuc2lnbmVkIGludCAqazMpOworI2VuZGlmCiAKICNkZWZpbmUgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRQkweDAwMQogCkBAIC02ODksMTEgKzcxMSwyMSBAQAogI2RlZmluZSBFQ19QS0VZX05PX1BBUkFNRVRFUlMJMHgwMDEKICNkZWZpbmUgRUNfUEtFWV9OT19QVUJLRVkJMHgwMDIKIAorLyogc29tZSB2YWx1ZXMgZm9yIHRoZSBmbGFncyBmaWVsZCAqLworI2RlZmluZSBFQ19GTEFHX05PTl9GSVBTX0FMTE9XCTB4MQorI2RlZmluZSBFQ19GTEFHX0ZJUFNfQ0hFQ0tFRAkweDIKKwogLyoqIENyZWF0ZXMgYSBuZXcgRUNfS0VZIG9iamVjdC4KICAqICBccmV0dXJuIEVDX0tFWSBvYmplY3Qgb3IgTlVMTCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogRUNfS0VZICpFQ19LRVlfbmV3KHZvaWQpOwogCitpbnQgRUNfS0VZX2dldF9mbGFncyhjb25zdCBFQ19LRVkgKmtleSk7CisKK3ZvaWQgRUNfS0VZX3NldF9mbGFncyhFQ19LRVkgKmtleSwgaW50IGZsYWdzKTsKKwordm9pZCBFQ19LRVlfY2xlYXJfZmxhZ3MoRUNfS0VZICprZXksIGludCBmbGFncyk7CisKIC8qKiBDcmVhdGVzIGEgbmV3IEVDX0tFWSBvYmplY3QgdXNpbmcgYSBuYW1lZCBjdXJ2ZSBhcyB1bmRlcmx5aW5nCiAgKiAgRUNfR1JPVVAgb2JqZWN0LgogICogIFxwYXJhbSAgbmlkICBOSUQgb2YgdGhlIG5hbWVkIGN1cnZlLgpAQCAtNzk5LDYgKzgzMSwxNSBAQAogICovCiBpbnQgRUNfS0VZX2NoZWNrX2tleShjb25zdCBFQ19LRVkgKmtleSk7CiAKKy8qKiBTZXRzIGEgcHVibGljIGtleSBmcm9tIGFmZmluZSBjb29yZGluZGF0ZXMgcGVyZm9ybWluZworICogIG5lY2Nlc3NhcnkgTklTVCBQS1YgdGVzdHMuCisgKiAgXHBhcmFtICBrZXkgIHRoZSBFQ19LRVkgb2JqZWN0CisgKiAgXHBhcmFtICB4ICAgIHB1YmxpYyBrZXkgeCBjb29yZGluYXRlCisgKiAgXHBhcmFtICB5ICAgIHB1YmxpYyBrZXkgeSBjb29yZGluYXRlCisgKiAgXHJldHVybiAxIG9uIHN1Y2Nlc3MgYW5kIDAgb3RoZXJ3aXNlLgorICovCitpbnQgRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlcyhFQ19LRVkgKmtleSwgQklHTlVNICp4LCBCSUdOVU0gKnkpOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICBkZS0gYW5kIGVuY29kaW5nIGZ1bmN0aW9ucyBmb3IgU0VDMSBFQ1ByaXZhdGVLZXkgICAgICAgICAgKi8KQEAgLTkyNiw2ICs5NjcsNyBAQAogLyogRXJyb3IgY29kZXMgZm9yIHRoZSBFQyBmdW5jdGlvbnMuICovCiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworI2RlZmluZSBFQ19GX0JOX1RPX0ZFTEVNCQkJCSAyMjQKICNkZWZpbmUgRUNfRl9DT01QVVRFX1dOQUYJCQkJIDE0MwogI2RlZmluZSBFQ19GX0QySV9FQ1BBUkFNRVRFUlMJCQkJIDE0NAogI2RlZmluZSBFQ19GX0QySV9FQ1BLUEFSQU1FVEVSUwkJCQkgMTQ1CkBAIC05NjgsNiArMTAxMCwxNSBAQAogI2RlZmluZSBFQ19GX0VDX0dGUF9NT05UX0ZJRUxEX1NRUgkJCSAxMzIKICNkZWZpbmUgRUNfRl9FQ19HRlBfTU9OVF9HUk9VUF9TRVRfQ1VSVkUJCSAxODkKICNkZWZpbmUgRUNfRl9FQ19HRlBfTU9OVF9HUk9VUF9TRVRfQ1VSVkVfR0ZQCQkgMTM1CisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQMjI0X0dST1VQX1NFVF9DVVJWRQkJIDIyNQorI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDIyNF9QT0lOVFNfTVVMCQkJIDIyOAorI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDIyNF9QT0lOVF9HRVRfQUZGSU5FX0NPT1JESU5BVEVTIDIyNgorI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUUDI1Nl9HUk9VUF9TRVRfQ1VSVkUJCSAyMzAKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFAyNTZfUE9JTlRTX01VTAkJCSAyMzEKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFAyNTZfUE9JTlRfR0VUX0FGRklORV9DT09SRElOQVRFUyAyMzIKKyNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVFA1MjFfR1JPVVBfU0VUX0NVUlZFCQkgMjMzCisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQNTIxX1BPSU5UU19NVUwJCQkgMjM0CisjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RQNTIxX1BPSU5UX0dFVF9BRkZJTkVfQ09PUkRJTkFURVMgMjM1CiAjZGVmaW5lIEVDX0ZfRUNfR0ZQX05JU1RfRklFTERfTVVMCQkJIDIwMAogI2RlZmluZSBFQ19GX0VDX0dGUF9OSVNUX0ZJRUxEX1NRUgkJCSAyMDEKICNkZWZpbmUgRUNfRl9FQ19HRlBfTklTVF9HUk9VUF9TRVRfQ1VSVkUJCSAyMDIKQEAgLTEwMTAsNiArMTA2MSw3IEBACiAjZGVmaW5lIEVDX0ZfRUNfS0VZX05FVwkJCQkJIDE4MgogI2RlZmluZSBFQ19GX0VDX0tFWV9QUklOVAkJCQkgMTgwCiAjZGVmaW5lIEVDX0ZfRUNfS0VZX1BSSU5UX0ZQCQkJCSAxODEKKyNkZWZpbmUgRUNfRl9FQ19LRVlfU0VUX1BVQkxJQ19LRVlfQUZGSU5FX0NPT1JESU5BVEVTCSAyMjkKICNkZWZpbmUgRUNfRl9FQ19QT0lOVFNfTUFLRV9BRkZJTkUJCQkgMTM2CiAjZGVmaW5lIEVDX0ZfRUNfUE9JTlRfQURECQkJCSAxMTIKICNkZWZpbmUgRUNfRl9FQ19QT0lOVF9DTVAJCQkJIDExMwpAQCAtMTA0MCw2ICsxMDkyLDkgQEAKICNkZWZpbmUgRUNfRl9JMkRfRUNQS1BBUkFNRVRFUlMJCQkJIDE5MQogI2RlZmluZSBFQ19GX0kyRF9FQ1BSSVZBVEVLRVkJCQkJIDE5MgogI2RlZmluZSBFQ19GX0kyT19FQ1BVQkxJQ0tFWQkJCQkgMTUxCisjZGVmaW5lIEVDX0ZfTklTVFAyMjRfUFJFX0NPTVBfTkVXCQkJIDIyNworI2RlZmluZSBFQ19GX05JU1RQMjU2X1BSRV9DT01QX05FVwkJCSAyMzYKKyNkZWZpbmUgRUNfRl9OSVNUUDUyMV9QUkVfQ09NUF9ORVcJCQkgMjM3CiAjZGVmaW5lIEVDX0ZfTzJJX0VDUFVCTElDS0VZCQkJCSAxNTIKICNkZWZpbmUgRUNfRl9PTERfRUNfUFJJVl9ERUNPREUJCQkJIDIyMgogI2RlZmluZSBFQ19GX1BLRVlfRUNfQ1RSTAkJCQkgMTk3CkBAIC0xMDUyLDEyICsxMTA3LDE1IEBACiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIEVDX1JfQVNOMV9FUlJPUgkJCQkJIDExNQogI2RlZmluZSBFQ19SX0FTTjFfVU5LTk9XTl9GSUVMRAkJCQkgMTE2CisjZGVmaW5lIEVDX1JfQklHTlVNX09VVF9PRl9SQU5HRQkJCSAxNDQKICNkZWZpbmUgRUNfUl9CVUZGRVJfVE9PX1NNQUxMCQkJCSAxMDAKKyNkZWZpbmUgRUNfUl9DT09SRElOQVRFU19PVVRfT0ZfUkFOR0UJCQkgMTQ2CiAjZGVmaW5lIEVDX1JfRDJJX0VDUEtQQVJBTUVURVJTX0ZBSUxVUkUJCQkgMTE3CiAjZGVmaW5lIEVDX1JfREVDT0RFX0VSUk9SCQkJCSAxNDIKICNkZWZpbmUgRUNfUl9ESVNDUklNSU5BTlRfSVNfWkVSTwkJCSAxMTgKICNkZWZpbmUgRUNfUl9FQ19HUk9VUF9ORVdfQllfTkFNRV9GQUlMVVJFCQkgMTE5CiAjZGVmaW5lIEVDX1JfRklFTERfVE9PX0xBUkdFCQkJCSAxNDMKKyNkZWZpbmUgRUNfUl9HRjJNX05PVF9TVVBQT1JURUQJCQkJIDE0NwogI2RlZmluZSBFQ19SX0dST1VQMlBLUEFSQU1FVEVSU19GQUlMVVJFCQkJIDEyMAogI2RlZmluZSBFQ19SX0kyRF9FQ1BLUEFSQU1FVEVSU19GQUlMVVJFCQkJIDEyMQogI2RlZmluZSBFQ19SX0lOQ09NUEFUSUJMRV9PQkpFQ1RTCQkJIDEwMQpAQCAtMTA5Miw2ICsxMTUwLDcgQEAKICNkZWZpbmUgRUNfUl9VTktOT1dOX0dST1VQCQkJCSAxMjkKICNkZWZpbmUgRUNfUl9VTktOT1dOX09SREVSCQkJCSAxMTQKICNkZWZpbmUgRUNfUl9VTlNVUFBPUlRFRF9GSUVMRAkJCQkgMTMxCisjZGVmaW5lIEVDX1JfV1JPTkdfQ1VSVkVfUEFSQU1FVEVSUwkJCSAxNDUKICNkZWZpbmUgRUNfUl9XUk9OR19PUkRFUgkJCQkgMTMwCiAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggYi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCmluZGV4IGI0YjU4ZWUuLjg4ODcxMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2VjZGguaApAQCAtMTA5LDExICsxMDksMTMgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgRUNESCBmdW5jdGlvbnMuICovCiAKIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworI2RlZmluZSBFQ0RIX0ZfRUNESF9DSEVDSwkJCQkgMTAyCiAjZGVmaW5lIEVDREhfRl9FQ0RIX0NPTVBVVEVfS0VZCQkJCSAxMDAKICNkZWZpbmUgRUNESF9GX0VDREhfREFUQV9ORVdfTUVUSE9ECQkJIDEwMQogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIEVDREhfUl9LREZfRkFJTEVECQkJCSAxMDIKKyNkZWZpbmUgRUNESF9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAzCiAjZGVmaW5lIEVDREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKICNkZWZpbmUgRUNESF9SX1BPSU5UX0FSSVRITUVUSUNfRkFJTFVSRQkJCSAxMDEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggYi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAppbmRleCBlNjFjNTM5Li43ZmI1MjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaApAQCAtMjM4LDYgKzIzOCw3IEBACiAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEVDRFNBIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCisjZGVmaW5lIEVDRFNBX0ZfRUNEU0FfQ0hFQ0sJCQkJIDEwNAogI2RlZmluZSBFQ0RTQV9GX0VDRFNBX0RBVEFfTkVXX01FVEhPRAkJCSAxMDAKICNkZWZpbmUgRUNEU0FfRl9FQ0RTQV9ET19TSUdOCQkJCSAxMDEKICNkZWZpbmUgRUNEU0FfRl9FQ0RTQV9ET19WRVJJRlkJCQkJIDEwMgpAQCAtMjQ5LDYgKzI1MCw3IEBACiAjZGVmaW5lIEVDRFNBX1JfRVJSX0VDX0xJQgkJCQkgMTAyCiAjZGVmaW5lIEVDRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMwogI2RlZmluZSBFQ0RTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMDYKKyNkZWZpbmUgRUNEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNwogI2RlZmluZSBFQ0RTQV9SX1JBTkRPTV9OVU1CRVJfR0VORVJBVElPTl9GQUlMRUQJCSAxMDQKICNkZWZpbmUgRUNEU0FfUl9TSUdOQVRVUkVfTUFMTE9DX0ZBSUxFRAkJCSAxMDUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIGIvaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCmluZGV4IDk0M2FlYWUuLmY4YmU0OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgKQEAgLTE0MSw2ICsxNDEsMTMgQEAKICAqIHRoZSBleGlzdGluZyBFTkdJTkUncyBzdHJ1Y3R1cmFsIHJlZmVyZW5jZSBjb3VudC4gKi8KICNkZWZpbmUgRU5HSU5FX0ZMQUdTX0JZX0lEX0NPUFkJCShpbnQpMHgwMDA0CiAKKy8qIFRoaXMgZmxhZyBpZiBmb3IgYW4gRU5HSU5FIHRoYXQgZG9lcyBub3Qgd2FudCBpdHMgbWV0aG9kcyByZWdpc3RlcmVkIGFzIAorICogcGFydCBvZiBFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlKCkgZm9yIGV4YW1wbGUgaWYgdGhlIG1ldGhvZHMgYXJlCisgKiBub3QgdXNhYmxlIGFzIGRlZmF1bHQgbWV0aG9kcy4KKyAqLworCisjZGVmaW5lIEVOR0lORV9GTEFHU19OT19SRUdJU1RFUl9BTEwJKGludCkweDAwMDgKKwogLyogRU5HSU5FcyBjYW4gc3VwcG9ydCB0aGVpciBvd24gY29tbWFuZCB0eXBlcywgYW5kIHRoZXNlIGZsYWdzIGFyZSB1c2VkIGluCiAgKiBFTkdJTkVfQ1RSTF9HRVRfQ01EX0ZMQUdTIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgd2hhdCBraW5kIG9mIGlucHV0IGVhY2gKICAqIGNvbW1hbmQgZXhwZWN0cy4gQ3VycmVudGx5IG9ubHkgbnVtZXJpYyBhbmQgc3RyaW5nIGlucHV0IGlzIHN1cHBvcnRlZC4gSWYgYQpAQCAtMzQ0LDYgKzM1MSw4IEBACiAjZW5kaWYKICNlbmRpZgogdm9pZCBFTkdJTkVfbG9hZF9jcnlwdG9kZXYodm9pZCk7Cit2b2lkIEVOR0lORV9sb2FkX3JzYXgodm9pZCk7Cit2b2lkIEVOR0lORV9sb2FkX3JkcmFuZCh2b2lkKTsKIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpOwogCiAvKiBHZXQgYW5kIHNldCBnbG9iYWwgZmxhZ3MgKEVOR0lORV9UQUJMRV9GTEFHXyoqKikgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2Vyci5oIGIvaW5jbHVkZS9vcGVuc3NsL2Vyci5oCmluZGV4IGI5ZjhjMTYuLjk3NGNjOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKQEAgLTM0NCw4ICszNDQsOSBAQAogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQklPCiB2b2lkIEVSUl9wcmludF9lcnJvcnMoQklPICpicCk7Ci12b2lkIEVSUl9hZGRfZXJyb3JfZGF0YShpbnQgbnVtLCAuLi4pOwogI2VuZGlmCit2b2lkIEVSUl9hZGRfZXJyb3JfZGF0YShpbnQgbnVtLCAuLi4pOwordm9pZCBFUlJfYWRkX2Vycm9yX3ZkYXRhKGludCBudW0sIHZhX2xpc3QgYXJncyk7CiB2b2lkIEVSUl9sb2FkX3N0cmluZ3MoaW50IGxpYixFUlJfU1RSSU5HX0RBVEEgc3RyW10pOwogdm9pZCBFUlJfdW5sb2FkX3N0cmluZ3MoaW50IGxpYixFUlJfU1RSSU5HX0RBVEEgc3RyW10pOwogdm9pZCBFUlJfbG9hZF9FUlJfc3RyaW5ncyh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCBiL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAppbmRleCA5Zjk3OTVlLi4wZDFiMjBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL2V2cC5oCkBAIC04Myw3ICs4Myw3IEBACiAjZGVmaW5lIEVWUF9SQzVfMzJfMTJfMTZfS0VZX1NJWkUJMTYKICovCiAjZGVmaW5lIEVWUF9NQVhfTURfU0laRQkJCTY0CS8qIGxvbmdlc3Qga25vd24gaXMgU0hBNTEyICovCi0jZGVmaW5lIEVWUF9NQVhfS0VZX0xFTkdUSAkJMzIKKyNkZWZpbmUgRVZQX01BWF9LRVlfTEVOR1RICQk2NAogI2RlZmluZSBFVlBfTUFYX0lWX0xFTkdUSAkJMTYKICNkZWZpbmUgRVZQX01BWF9CTE9DS19MRU5HVEgJCTMyCiAKQEAgLTExNiw2ICsxMTYsNyBAQAogI2RlZmluZSBFVlBfUEtFWV9ESAlOSURfZGhLZXlBZ3JlZW1lbnQKICNkZWZpbmUgRVZQX1BLRVlfRUMJTklEX1g5XzYyX2lkX2VjUHVibGljS2V5CiAjZGVmaW5lIEVWUF9QS0VZX0hNQUMJTklEX2htYWMKKyNkZWZpbmUgRVZQX1BLRVlfQ01BQwlOSURfY21hYwogCiAjaWZkZWYJX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMjE2LDYgKzIxNyw4IEBACiAKICNkZWZpbmUgRVZQX01EX0ZMQUdfRElHQUxHSURfQ1VTVE9NCQkweDAwMTgKIAorI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisKIC8qIERpZ2VzdCBjdHJscyAqLwogCiAjZGVmaW5lCUVWUF9NRF9DVFJMX0RJR0FMR0lECQkJMHgxCkBAIC0zMjUsNiArMzI4LDEwIEBACiAjZGVmaW5lCQlFVlBfQ0lQSF9DQkNfTU9ERQkJMHgyCiAjZGVmaW5lCQlFVlBfQ0lQSF9DRkJfTU9ERQkJMHgzCiAjZGVmaW5lCQlFVlBfQ0lQSF9PRkJfTU9ERQkJMHg0CisjZGVmaW5lCQlFVlBfQ0lQSF9DVFJfTU9ERQkJMHg1CisjZGVmaW5lCQlFVlBfQ0lQSF9HQ01fTU9ERQkJMHg2CisjZGVmaW5lCQlFVlBfQ0lQSF9DQ01fTU9ERQkJMHg3CisjZGVmaW5lCQlFVlBfQ0lQSF9YVFNfTU9ERQkJMHgxMDAwMQogI2RlZmluZSAJRVZQX0NJUEhfTU9ERQkJCTB4RjAwMDcKIC8qIFNldCBpZiB2YXJpYWJsZSBsZW5ndGggY2lwaGVyICovCiAjZGVmaW5lIAlFVlBfQ0lQSF9WQVJJQUJMRV9MRU5HVEgJMHg4CkBAIC0zNDYsNiArMzUzLDE1IEBACiAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCiAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAorLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMDAKKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAwCisvKiBDaXBoZXIgaGFuZGxlcyBhbnkgYW5kIGFsbCBwYWRkaW5nIGxvZ2ljIGFzIHdlbGwKKyAqIGFzIGZpbmFsaXNhdGlvbi4KKyAqLworI2RlZmluZSAJRVZQX0NJUEhfRkxBR19DVVNUT01fQ0lQSEVSCTB4MTAwMDAwCisjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSCTB4MjAwMDAwCiAKIC8qIGN0cmwoKSB2YWx1ZXMgKi8KIApAQCAtMzU4LDYgKzM3NCwzNCBAQAogI2RlZmluZSAJRVZQX0NUUkxfUkFORF9LRVkJCTB4NgogI2RlZmluZSAJRVZQX0NUUkxfUEJFX1BSRl9OSUQJCTB4NwogI2RlZmluZSAJRVZQX0NUUkxfQ09QWQkJCTB4OAorI2RlZmluZSAJRVZQX0NUUkxfR0NNX1NFVF9JVkxFTgkJMHg5CisjZGVmaW5lIAlFVlBfQ1RSTF9HQ01fR0VUX1RBRwkJMHgxMAorI2RlZmluZSAJRVZQX0NUUkxfR0NNX1NFVF9UQUcJCTB4MTEKKyNkZWZpbmUJCUVWUF9DVFJMX0dDTV9TRVRfSVZfRklYRUQJMHgxMgorI2RlZmluZQkJRVZQX0NUUkxfR0NNX0lWX0dFTgkJMHgxMworI2RlZmluZQkJRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTgkJRVZQX0NUUkxfR0NNX1NFVF9JVkxFTgorI2RlZmluZQkJRVZQX0NUUkxfQ0NNX0dFVF9UQUcJCUVWUF9DVFJMX0dDTV9HRVRfVEFHCisjZGVmaW5lCQlFVlBfQ1RSTF9DQ01fU0VUX1RBRwkJRVZQX0NUUkxfR0NNX1NFVF9UQUcKKyNkZWZpbmUJCUVWUF9DVFJMX0NDTV9TRVRfTAkJMHgxNAorI2RlZmluZQkJRVZQX0NUUkxfQ0NNX1NFVF9NU0dMRU4JCTB4MTUKKy8qIEFFQUQgY2lwaGVyIGRlZHVjZXMgcGF5bG9hZCBsZW5ndGggYW5kIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzCisgKiByZXF1aXJlZCB0byBzdG9yZSBNQUMgYW5kIGV2ZW50dWFsIHBhZGRpbmcuIFN1YnNlcXVlbnQgY2FsbCB0bworICogRVZQX0NpcGhlciBldmVuIGFwcGVuZHMvdmVyaWZpZXMgTUFDLgorICovCisjZGVmaW5lCQlFVlBfQ1RSTF9BRUFEX1RMUzFfQUFECQkweDE2CisvKiBVc2VkIGJ5IGNvbXBvc2l0ZSBBRUFEIGNpcGhlcnMsIG5vLW9wIGluIEdDTSwgQ0NNLi4uICovCisjZGVmaW5lCQlFVlBfQ1RSTF9BRUFEX1NFVF9NQUNfS0VZCTB4MTcKKy8qIFNldCB0aGUgR0NNIGludm9jYXRpb24gZmllbGQsIGRlY3J5cHQgb25seSAqLworI2RlZmluZQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9JTlYJCTB4MTgKKworLyogR0NNIFRMUyBjb25zdGFudHMgKi8KKy8qIExlbmd0aCBvZiBmaXhlZCBwYXJ0IG9mIElWIGRlcml2ZWQgZnJvbSBQUkYgKi8KKyNkZWZpbmUgRVZQX0dDTV9UTFNfRklYRURfSVZfTEVOCQkJNAorLyogTGVuZ3RoIG9mIGV4cGxpY2l0IHBhcnQgb2YgSVYgcGFydCBvZiBUTFMgcmVjb3JkcyAqLworI2RlZmluZSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU4JCQk4CisvKiBMZW5ndGggb2YgdGFnIGZvciBUTFMgKi8KKyNkZWZpbmUgRVZQX0dDTV9UTFNfVEFHX0xFTgkJCQkxNgorCiAKIHR5cGVkZWYgc3RydWN0IGV2cF9jaXBoZXJfaW5mb19zdAogCXsKQEAgLTM3NSw3ICs0MTksNyBAQAogCXVuc2lnbmVkIGNoYXIgIG9pdltFVlBfTUFYX0lWX0xFTkdUSF07CS8qIG9yaWdpbmFsIGl2ICovCiAJdW5zaWduZWQgY2hhciAgaXZbRVZQX01BWF9JVl9MRU5HVEhdOwkvKiB3b3JraW5nIGl2ICovCiAJdW5zaWduZWQgY2hhciBidWZbRVZQX01BWF9CTE9DS19MRU5HVEhdOy8qIHNhdmVkIHBhcnRpYWwgYmxvY2sgKi8KLQlpbnQgbnVtOwkJCQkvKiB1c2VkIGJ5IGNmYi9vZmIgbW9kZSAqLworCWludCBudW07CQkJCS8qIHVzZWQgYnkgY2ZiL29mYi9jdHIgbW9kZSAqLwogCiAJdm9pZCAqYXBwX2RhdGE7CQkvKiBhcHBsaWNhdGlvbiBzdHVmZiAqLwogCWludCBrZXlfbGVuOwkJLyogTWF5IGNoYW5nZSBmb3IgdmFyaWFibGUgbGVuZ3RoIGNpcGhlciAqLwpAQCAtNjk1LDYgKzczOSw5IEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0CiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfcmM0KHZvaWQpOwogY29uc3QgRVZQX0NJUEhFUiAqRVZQX3JjNF80MCh2b2lkKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9yYzRfaG1hY19tZDUodm9pZCk7CisjZW5kaWYKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9pZGVhX2VjYih2b2lkKTsKQEAgLTc0MSw5ICs3ODgsMTAgQEAKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NmYjEyOCh2b2lkKTsKICMgZGVmaW5lIEVWUF9hZXNfMTI4X2NmYiBFVlBfYWVzXzEyOF9jZmIxMjgKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X29mYih2b2lkKTsKLSNpZiAwCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jdHIodm9pZCk7Ci0jZW5kaWYKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2djbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NjbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X3h0cyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2VjYih2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEodm9pZCk7CkBAIC03NTEsOSArNzk5LDkgQEAKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEyOCh2b2lkKTsKICMgZGVmaW5lIEVWUF9hZXNfMTkyX2NmYiBFVlBfYWVzXzE5Ml9jZmIxMjgKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX29mYih2b2lkKTsKLSNpZiAwCiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jdHIodm9pZCk7Ci0jZW5kaWYKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2djbSh2b2lkKTsKK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NjbSh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2VjYih2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NiYyh2b2lkKTsKIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEodm9pZCk7CkBAIC03NjEsOCArODA5LDEzIEBACiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCk7CiAjIGRlZmluZSBFVlBfYWVzXzI1Nl9jZmIgRVZQX2Flc18yNTZfY2ZiMTI4CiBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9vZmIodm9pZCk7Ci0jaWYgMAogY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY3RyKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZ2NtKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2NtKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfeHRzKHZvaWQpOworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCitjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExKHZvaWQpOworY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSh2b2lkKTsKICNlbmRpZgogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKQEAgLTEwNDcsMTMgKzExMDAsMjIgQEAKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9DTVNfREVDUllQVAkxMAogI2RlZmluZSBFVlBfUEtFWV9DVFJMX0NNU19TSUdOCQkxMQogCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfQ0lQSEVSCQkxMgorCiAjZGVmaW5lIEVWUF9QS0VZX0FMR19DVFJMCQkweDEwMDAKIAogCiAjZGVmaW5lIEVWUF9QS0VZX0ZMQUdfQVVUT0FSR0xFTgkyCisvKiBNZXRob2QgaGFuZGxlcyBhbGwgb3BlcmF0aW9uczogZG9uJ3QgYXNzdW1lIGFueSBkaWdlc3QgcmVsYXRlZAorICogZGVmYXVsdHMuCisgKi8KKyNkZWZpbmUgRVZQX1BLRVlfRkxBR19TSUdDVFhfQ1VTVE9NCTQKIAogY29uc3QgRVZQX1BLRVlfTUVUSE9EICpFVlBfUEtFWV9tZXRoX2ZpbmQoaW50IHR5cGUpOwogRVZQX1BLRVlfTUVUSE9EKiBFVlBfUEtFWV9tZXRoX25ldyhpbnQgaWQsIGludCBmbGFncyk7Cit2b2lkIEVWUF9QS0VZX21ldGhfZ2V0MF9pbmZvKGludCAqcHBrZXlfaWQsIGludCAqcGZsYWdzLAorCQkJCWNvbnN0IEVWUF9QS0VZX01FVEhPRCAqbWV0aCk7Cit2b2lkIEVWUF9QS0VZX21ldGhfY29weShFVlBfUEtFWV9NRVRIT0QgKmRzdCwgY29uc3QgRVZQX1BLRVlfTUVUSE9EICpzcmMpOwogdm9pZCBFVlBfUEtFWV9tZXRoX2ZyZWUoRVZQX1BLRVlfTUVUSE9EICpwbWV0aCk7CiBpbnQgRVZQX1BLRVlfbWV0aF9hZGQwKGNvbnN0IEVWUF9QS0VZX01FVEhPRCAqcG1ldGgpOwogCkBAIC0xMDcxLDcgKzExMzMsNyBAQAogdm9pZCBFVlBfUEtFWV9DVFhfc2V0MF9rZXlnZW5faW5mbyhFVlBfUEtFWV9DVFggKmN0eCwgaW50ICpkYXQsIGludCBkYXRsZW4pOwogCiBFVlBfUEtFWSAqRVZQX1BLRVlfbmV3X21hY19rZXkoaW50IHR5cGUsIEVOR0lORSAqZSwKLQkJCQl1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CiAKIHZvaWQgRVZQX1BLRVlfQ1RYX3NldF9kYXRhKEVWUF9QS0VZX0NUWCAqY3R4LCB2b2lkICpkYXRhKTsKIHZvaWQgKkVWUF9QS0VZX0NUWF9nZXRfZGF0YShFVlBfUEtFWV9DVFggKmN0eCk7CkBAIC0xMTkwLDggKzEyNTIsMTMgQEAKIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgRVZQIGZ1bmN0aW9ucy4gKi8KIAogLyogRnVuY3Rpb24gY29kZXMuICovCisjZGVmaW5lIEVWUF9GX0FFU05JX0lOSVRfS0VZCQkJCSAxNjUKKyNkZWZpbmUgRVZQX0ZfQUVTTklfWFRTX0NJUEhFUgkJCQkgMTc2CiAjZGVmaW5lIEVWUF9GX0FFU19JTklUX0tFWQkJCQkgMTMzCisjZGVmaW5lIEVWUF9GX0FFU19YVFMJCQkJCSAxNzIKKyNkZWZpbmUgRVZQX0ZfQUVTX1hUU19DSVBIRVIJCQkJIDE3NQogI2RlZmluZSBFVlBfRl9DQU1FTExJQV9JTklUX0tFWQkJCQkgMTU5CisjZGVmaW5lIEVWUF9GX0NNQUNfSU5JVAkJCQkJIDE3MwogI2RlZmluZSBFVlBfRl9EMklfUEtFWQkJCQkJIDEwMAogI2RlZmluZSBFVlBfRl9ET19TSUdWRVJfSU5JVAkJCQkgMTYxCiAjZGVmaW5lIEVWUF9GX0RTQVBLRVkyUEtDUzgJCQkJIDEzNApAQCAtMTI0NiwxNSArMTMxMywyNCBAQAogI2RlZmluZSBFVlBfRl9FVlBfUklKTkRBRUwJCQkJIDEyNgogI2RlZmluZSBFVlBfRl9FVlBfU0lHTkZJTkFMCQkJCSAxMDcKICNkZWZpbmUgRVZQX0ZfRVZQX1ZFUklGWUZJTkFMCQkJCSAxMDgKKyNkZWZpbmUgRVZQX0ZfRklQU19DSVBIRVJJTklUCQkJCSAxNjYKKyNkZWZpbmUgRVZQX0ZfRklQU19DSVBIRVJfQ1RYX0NPUFkJCQkgMTcwCisjZGVmaW5lIEVWUF9GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2NworI2RlZmluZSBFVlBfRl9GSVBTX0NJUEhFUl9DVFhfU0VUX0tFWV9MRU5HVEgJCSAxNzEKKyNkZWZpbmUgRVZQX0ZfRklQU19ESUdFU1RJTklUCQkJCSAxNjgKKyNkZWZpbmUgRVZQX0ZfRklQU19NRF9DVFhfQ09QWQkJCQkgMTY5CisjZGVmaW5lIEVWUF9GX0hNQUNfSU5JVF9FWAkJCQkgMTc0CiAjZGVmaW5lIEVWUF9GX0lOVF9DVFhfTkVXCQkJCSAxNTcKICNkZWZpbmUgRVZQX0ZfUEtDUzVfUEJFX0tFWUlWR0VOCQkJIDExNwogI2RlZmluZSBFVlBfRl9QS0NTNV9WMl9QQkVfS0VZSVZHRU4JCQkgMTE4CisjZGVmaW5lIEVWUF9GX1BLQ1M1X1YyX1BCS0RGMl9LRVlJVkdFTgkJCSAxNjQKICNkZWZpbmUgRVZQX0ZfUEtDUzhfU0VUX0JST0tFTgkJCQkgMTEyCiAjZGVmaW5lIEVWUF9GX1BLRVlfU0VUX1RZUEUJCQkJIDE1OAogI2RlZmluZSBFVlBfRl9SQzJfTUFHSUNfVE9fTUVUSAkJCQkgMTA5CiAjZGVmaW5lIEVWUF9GX1JDNV9DVFJMCQkJCQkgMTI1CiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgRVZQX1JfQUVTX0lWX1NFVFVQX0ZBSUxFRAkJCSAxNjIKICNkZWZpbmUgRVZQX1JfQUVTX0tFWV9TRVRVUF9GQUlMRUQJCQkgMTQzCiAjZGVmaW5lIEVWUF9SX0FTTjFfTElCCQkJCQkgMTQwCiAjZGVmaW5lIEVWUF9SX0JBRF9CTE9DS19MRU5HVEgJCQkJIDEzNgpAQCAtMTI3Miw2ICsxMzQ4LDcgQEAKICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCisjZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjMKICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUKICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQogI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKQEAgLTEzMDMsNiArMTM4MCw3IEBACiAjZGVmaW5lIEVWUF9SX1BSSVZBVEVfS0VZX0RFQ09ERV9FUlJPUgkJCSAxNDUKICNkZWZpbmUgRVZQX1JfUFJJVkFURV9LRVlfRU5DT0RFX0VSUk9SCQkJIDE0NgogI2RlZmluZSBFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EJCQkgMTA2CisjZGVmaW5lIEVWUF9SX1RPT19MQVJHRQkJCQkJIDE2NAogI2RlZmluZSBFVlBfUl9VTktOT1dOX0NJUEhFUgkJCQkgMTYwCiAjZGVmaW5lIEVWUF9SX1VOS05PV05fRElHRVNUCQkJCSAxNjEKICNkZWZpbmUgRVZQX1JfVU5LTk9XTl9QQkVfQUxHT1JJVEhNCQkJIDEyMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL2tzc2wuaCBiL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmgKaW5kZXggYTNkMjBlMS4uODI0MmZkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAorKysgYi9pbmNsdWRlL29wZW5zc2wva3NzbC5oCkBAIC0xNzIsNiArMTcyLDEwIEBACiAJCQkgICAgICAgICAgICBrcmI1X3RpbWVzdGFtcCAqYXRpbWVwLCBLU1NMX0VSUiAqa3NzbF9lcnIpOwogdW5zaWduZWQgY2hhcgkqa3NzbF9za2lwX2NvbmZvdW5kKGtyYjVfZW5jdHlwZSBlbmN0eXBlLCB1bnNpZ25lZCBjaGFyICphdXRobik7CiAKK3ZvaWQgU1NMX3NldDBfa3NzbF9jdHgoU1NMICpzLCBLU1NMX0NUWCAqa2N0eCk7CitLU1NMX0NUWCAqIFNTTF9nZXQwX2tzc2xfY3R4KFNTTCAqcyk7CitjaGFyICprc3NsX2N0eF9nZXQwX2NsaWVudF9wcmluYyhLU1NMX0NUWCAqa2N0eCk7CisKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL21kNC5oIGIvaW5jbHVkZS9vcGVuc3NsL21kNC5oCmluZGV4IGMzZWQ5YjMuLmE1NTM2OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9tZDQuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvbWQ0LmgKQEAgLTEwNSw2ICsxMDUsOSBAQAogCXVuc2lnbmVkIGludCBudW07CiAJfSBNRDRfQ1RYOwogCisjaWZkZWYgT1BFTlNTTF9GSVBTCitpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRfQ1RYICpjKTsKKyNlbmRpZgogaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwogaW50IE1ENF9VcGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9tZDUuaCBiL2luY2x1ZGUvb3BlbnNzbC9tZDUuaAppbmRleCA0Y2JmODQzLi41NDFjYzkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvbWQ1LmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL21kNS5oCkBAIC0xMDUsNiArMTA1LDkgQEAKIAl1bnNpZ25lZCBpbnQgbnVtOwogCX0gTUQ1X0NUWDsKIAorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CisjZW5kaWYKIGludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaCBiL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oCmluZGV4IGFmOGQ5N2QuLmYxODIxNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oCkBAIC0xNSw2ICsxNSwxNCBAQAogCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAogCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50IGVuYyk7CiAKK3R5cGVkZWYgdm9pZCAoKmN0cjEyOF9mKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGJsb2NrcywgY29uc3Qgdm9pZCAqa2V5LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciBpdmVjWzE2XSk7CisKK3R5cGVkZWYgdm9pZCAoKmNjbTEyOF9mKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGJsb2NrcywgY29uc3Qgdm9pZCAqa2V5LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciBpdmVjWzE2XSx1bnNpZ25lZCBjaGFyIGNtYWNbMTZdKTsKKwogdm9pZCBDUllQVE9fY2JjMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKIAkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKIAkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOwpAQCAtMjcsNiArMzUsMTEgQEAKIAkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIHVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZlsxNl0sCiAJCQl1bnNpZ25lZCBpbnQgKm51bSwgYmxvY2sxMjhfZiBibG9jayk7CiAKK3ZvaWQgQ1JZUFRPX2N0cjEyOF9lbmNyeXB0X2N0cjMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCB1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbMTZdLAorCQkJdW5zaWduZWQgaW50ICpudW0sIGN0cjEyOF9mIGN0cik7CisKIHZvaWQgQ1JZUFRPX29mYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCiAJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCiAJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKQEAgLTU3LDMgKzcwLDY2IEBACiBzaXplX3QgQ1JZUFRPX2N0czEyOF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCiAJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCiAJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBjYmMxMjhfZiBjYmMpOworCitzaXplX3QgQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jayhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgYmxvY2sxMjhfZiBibG9jayk7CitzaXplX3QgQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgY2JjMTI4X2YgY2JjKTsKK3NpemVfdCBDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBibG9jazEyOF9mIGJsb2NrKTsKK3NpemVfdCBDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBjYmMxMjhfZiBjYmMpOworCit0eXBlZGVmIHN0cnVjdCBnY20xMjhfY29udGV4dCBHQ00xMjhfQ09OVEVYVDsKKworR0NNMTI4X0NPTlRFWFQgKkNSWVBUT19nY20xMjhfbmV3KHZvaWQgKmtleSwgYmxvY2sxMjhfZiBibG9jayk7Cit2b2lkIENSWVBUT19nY20xMjhfaW5pdChHQ00xMjhfQ09OVEVYVCAqY3R4LHZvaWQgKmtleSxibG9jazEyOF9mIGJsb2NrKTsKK3ZvaWQgQ1JZUFRPX2djbTEyOF9zZXRpdihHQ00xMjhfQ09OVEVYVCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKwkJCXNpemVfdCBsZW4pOworaW50IENSWVBUT19nY20xMjhfYWFkKEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFhZCwKKwkJCXNpemVfdCBsZW4pOworaW50IENSWVBUT19nY20xMjhfZW5jcnlwdChHQ00xMjhfQ09OVEVYVCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4pOworaW50IENSWVBUT19nY20xMjhfZGVjcnlwdChHQ00xMjhfQ09OVEVYVCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4pOworaW50IENSWVBUT19nY20xMjhfZW5jcnlwdF9jdHIzMihHQ00xMjhfQ09OVEVYVCAqY3R4LAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGN0cjEyOF9mIHN0cmVhbSk7CitpbnQgQ1JZUFRPX2djbTEyOF9kZWNyeXB0X2N0cjMyKEdDTTEyOF9DT05URVhUICpjdHgsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY3RyMTI4X2Ygc3RyZWFtKTsKK2ludCBDUllQVE9fZ2NtMTI4X2ZpbmlzaChHQ00xMjhfQ09OVEVYVCAqY3R4LGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywKKwkJCXNpemVfdCBsZW4pOwordm9pZCBDUllQVE9fZ2NtMTI4X3RhZyhHQ00xMjhfQ09OVEVYVCAqY3R4LCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCBsZW4pOwordm9pZCBDUllQVE9fZ2NtMTI4X3JlbGVhc2UoR0NNMTI4X0NPTlRFWFQgKmN0eCk7CisKK3R5cGVkZWYgc3RydWN0IGNjbTEyOF9jb250ZXh0IENDTTEyOF9DT05URVhUOworCit2b2lkIENSWVBUT19jY20xMjhfaW5pdChDQ00xMjhfQ09OVEVYVCAqY3R4LAorCXVuc2lnbmVkIGludCBNLCB1bnNpZ25lZCBpbnQgTCwgdm9pZCAqa2V5LGJsb2NrMTI4X2YgYmxvY2spOworaW50IENSWVBUT19jY20xMjhfc2V0aXYoQ0NNMTI4X0NPTlRFWFQgKmN0eCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5sZW4sIHNpemVfdCBtbGVuKTsKK3ZvaWQgQ1JZUFRPX2NjbTEyOF9hYWQoQ0NNMTI4X0NPTlRFWFQgKmN0eCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICphYWQsIHNpemVfdCBhbGVuKTsKK2ludCBDUllQVE9fY2NtMTI4X2VuY3J5cHQoQ0NNMTI4X0NPTlRFWFQgKmN0eCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbnAsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IGxlbik7CitpbnQgQ1JZUFRPX2NjbTEyOF9kZWNyeXB0KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBsZW4pOworaW50IENSWVBUT19jY20xMjhfZW5jcnlwdF9jY202NChDQ00xMjhfQ09OVEVYVCAqY3R4LAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgbGVuLAorCWNjbTEyOF9mIHN0cmVhbSk7CitpbnQgQ1JZUFRPX2NjbTEyOF9kZWNyeXB0X2NjbTY0KENDTTEyOF9DT05URVhUICpjdHgsCisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5wLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBsZW4sCisJY2NtMTI4X2Ygc3RyZWFtKTsKK3NpemVfdCBDUllQVE9fY2NtMTI4X3RhZyhDQ00xMjhfQ09OVEVYVCAqY3R4LCB1bnNpZ25lZCBjaGFyICp0YWcsIHNpemVfdCBsZW4pOworCit0eXBlZGVmIHN0cnVjdCB4dHMxMjhfY29udGV4dCBYVFMxMjhfQ09OVEVYVDsKKworaW50IENSWVBUT194dHMxMjhfZW5jcnlwdChjb25zdCBYVFMxMjhfQ09OVEVYVCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyIGl2WzE2XSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbnAsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IGxlbiwgaW50IGVuYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIGIvaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAppbmRleCAyODJmMTFhLi5iNWVhN2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKQEAgLTU4MCw2ICs1ODAsMjEgQEAKICNkZWZpbmUgTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbgkJNjUKICNkZWZpbmUgT0JKX3NoYTFXaXRoUlNBRW5jcnlwdGlvbgkJT0JKX3BrY3MxLDVMCiAKKyNkZWZpbmUgU05fcnNhZXNPYWVwCQkiUlNBRVMtT0FFUCIKKyNkZWZpbmUgTE5fcnNhZXNPYWVwCQkicnNhZXNPYWVwIgorI2RlZmluZSBOSURfcnNhZXNPYWVwCQk5MTkKKyNkZWZpbmUgT0JKX3JzYWVzT2FlcAkJT0JKX3BrY3MxLDdMCisKKyNkZWZpbmUgU05fbWdmMQkJIk1HRjEiCisjZGVmaW5lIExOX21nZjEJCSJtZ2YxIgorI2RlZmluZSBOSURfbWdmMQkJOTExCisjZGVmaW5lIE9CSl9tZ2YxCQlPQkpfcGtjczEsOEwKKworI2RlZmluZSBTTl9yc2Fzc2FQc3MJCSJSU0FTU0EtUFNTIgorI2RlZmluZSBMTl9yc2Fzc2FQc3MJCSJyc2Fzc2FQc3MiCisjZGVmaW5lIE5JRF9yc2Fzc2FQc3MJCTkxMgorI2RlZmluZSBPQkpfcnNhc3NhUHNzCQlPQkpfcGtjczEsMTBMCisKICNkZWZpbmUgU05fc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24JCSJSU0EtU0hBMjU2IgogI2RlZmluZSBMTl9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgkJInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIgogI2RlZmluZSBOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24JCTY2OApAQCAtOTgxLDYgKzk5NiwxMCBAQAogI2RlZmluZSBOSURfaWRfc21pbWVfYWxnX0NNU1JDMndyYXAJCTI0NwogI2RlZmluZSBPQkpfaWRfc21pbWVfYWxnX0NNU1JDMndyYXAJCU9CSl9pZF9zbWltZV9hbGcsN0wKIAorI2RlZmluZSBTTl9pZF9hbGdfUFdSSV9LRUsJCSJpZC1hbGctUFdSSS1LRUsiCisjZGVmaW5lIE5JRF9pZF9hbGdfUFdSSV9LRUsJCTg5MworI2RlZmluZSBPQkpfaWRfYWxnX1BXUklfS0VLCQlPQkpfaWRfc21pbWVfYWxnLDlMCisKICNkZWZpbmUgU05faWRfc21pbWVfY2RfbGRhcAkJImlkLXNtaW1lLWNkLWxkYXAiCiAjZGVmaW5lIE5JRF9pZF9zbWltZV9jZF9sZGFwCQkyNDgKICNkZWZpbmUgT0JKX2lkX3NtaW1lX2NkX2xkYXAJCU9CSl9pZF9zbWltZV9jZCwxTApAQCAtMjM5OSw2ICsyNDE4LDExIEBACiAjZGVmaW5lIE5JRF9ub19yZXZfYXZhaWwJCTQwMwogI2RlZmluZSBPQkpfbm9fcmV2X2F2YWlsCQlPQkpfaWRfY2UsNTZMCiAKKyNkZWZpbmUgU05fYW55RXh0ZW5kZWRLZXlVc2FnZQkJImFueUV4dGVuZGVkS2V5VXNhZ2UiCisjZGVmaW5lIExOX2FueUV4dGVuZGVkS2V5VXNhZ2UJCSJBbnkgRXh0ZW5kZWQgS2V5IFVzYWdlIgorI2RlZmluZSBOSURfYW55RXh0ZW5kZWRLZXlVc2FnZQkJOTEwCisjZGVmaW5lIE9CSl9hbnlFeHRlbmRlZEtleVVzYWdlCQlPQkpfZXh0X2tleV91c2FnZSwwTAorCiAjZGVmaW5lIFNOX25ldHNjYXBlCQkiTmV0c2NhcGUiCiAjZGVmaW5lIExOX25ldHNjYXBlCQkiTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycC4iCiAjZGVmaW5lIE5JRF9uZXRzY2FwZQkJNTcKQEAgLTI1ODYsNiArMjYxMCwyNCBAQAogI2RlZmluZSBOSURfYWVzXzEyOF9jZmIxMjgJCTQyMQogI2RlZmluZSBPQkpfYWVzXzEyOF9jZmIxMjgJCU9CSl9hZXMsNEwKIAorI2RlZmluZSBTTl9pZF9hZXMxMjhfd3JhcAkJImlkLWFlczEyOC13cmFwIgorI2RlZmluZSBOSURfaWRfYWVzMTI4X3dyYXAJCTc4OAorI2RlZmluZSBPQkpfaWRfYWVzMTI4X3dyYXAJCU9CSl9hZXMsNUwKKworI2RlZmluZSBTTl9hZXNfMTI4X2djbQkJImlkLWFlczEyOC1HQ00iCisjZGVmaW5lIExOX2Flc18xMjhfZ2NtCQkiYWVzLTEyOC1nY20iCisjZGVmaW5lIE5JRF9hZXNfMTI4X2djbQkJODk1CisjZGVmaW5lIE9CSl9hZXNfMTI4X2djbQkJT0JKX2Flcyw2TAorCisjZGVmaW5lIFNOX2Flc18xMjhfY2NtCQkiaWQtYWVzMTI4LUNDTSIKKyNkZWZpbmUgTE5fYWVzXzEyOF9jY20JCSJhZXMtMTI4LWNjbSIKKyNkZWZpbmUgTklEX2Flc18xMjhfY2NtCQk4OTYKKyNkZWZpbmUgT0JKX2Flc18xMjhfY2NtCQlPQkpfYWVzLDdMCisKKyNkZWZpbmUgU05faWRfYWVzMTI4X3dyYXBfcGFkCQkiaWQtYWVzMTI4LXdyYXAtcGFkIgorI2RlZmluZSBOSURfaWRfYWVzMTI4X3dyYXBfcGFkCQk4OTcKKyNkZWZpbmUgT0JKX2lkX2FlczEyOF93cmFwX3BhZAkJT0JKX2Flcyw4TAorCiAjZGVmaW5lIFNOX2Flc18xOTJfZWNiCQkiQUVTLTE5Mi1FQ0IiCiAjZGVmaW5lIExOX2Flc18xOTJfZWNiCQkiYWVzLTE5Mi1lY2IiCiAjZGVmaW5lIE5JRF9hZXNfMTkyX2VjYgkJNDIyCkBAIC0yNjA2LDYgKzI2NDgsMjQgQEAKICNkZWZpbmUgTklEX2Flc18xOTJfY2ZiMTI4CQk0MjUKICNkZWZpbmUgT0JKX2Flc18xOTJfY2ZiMTI4CQlPQkpfYWVzLDI0TAogCisjZGVmaW5lIFNOX2lkX2FlczE5Ml93cmFwCQkiaWQtYWVzMTkyLXdyYXAiCisjZGVmaW5lIE5JRF9pZF9hZXMxOTJfd3JhcAkJNzg5CisjZGVmaW5lIE9CSl9pZF9hZXMxOTJfd3JhcAkJT0JKX2FlcywyNUwKKworI2RlZmluZSBTTl9hZXNfMTkyX2djbQkJImlkLWFlczE5Mi1HQ00iCisjZGVmaW5lIExOX2Flc18xOTJfZ2NtCQkiYWVzLTE5Mi1nY20iCisjZGVmaW5lIE5JRF9hZXNfMTkyX2djbQkJODk4CisjZGVmaW5lIE9CSl9hZXNfMTkyX2djbQkJT0JKX2FlcywyNkwKKworI2RlZmluZSBTTl9hZXNfMTkyX2NjbQkJImlkLWFlczE5Mi1DQ00iCisjZGVmaW5lIExOX2Flc18xOTJfY2NtCQkiYWVzLTE5Mi1jY20iCisjZGVmaW5lIE5JRF9hZXNfMTkyX2NjbQkJODk5CisjZGVmaW5lIE9CSl9hZXNfMTkyX2NjbQkJT0JKX2FlcywyN0wKKworI2RlZmluZSBTTl9pZF9hZXMxOTJfd3JhcF9wYWQJCSJpZC1hZXMxOTItd3JhcC1wYWQiCisjZGVmaW5lIE5JRF9pZF9hZXMxOTJfd3JhcF9wYWQJCTkwMAorI2RlZmluZSBPQkpfaWRfYWVzMTkyX3dyYXBfcGFkCQlPQkpfYWVzLDI4TAorCiAjZGVmaW5lIFNOX2Flc18yNTZfZWNiCQkiQUVTLTI1Ni1FQ0IiCiAjZGVmaW5lIExOX2Flc18yNTZfZWNiCQkiYWVzLTI1Ni1lY2IiCiAjZGVmaW5lIE5JRF9hZXNfMjU2X2VjYgkJNDI2CkBAIC0yNjI2LDYgKzI2ODYsMjQgQEAKICNkZWZpbmUgTklEX2Flc18yNTZfY2ZiMTI4CQk0MjkKICNkZWZpbmUgT0JKX2Flc18yNTZfY2ZiMTI4CQlPQkpfYWVzLDQ0TAogCisjZGVmaW5lIFNOX2lkX2FlczI1Nl93cmFwCQkiaWQtYWVzMjU2LXdyYXAiCisjZGVmaW5lIE5JRF9pZF9hZXMyNTZfd3JhcAkJNzkwCisjZGVmaW5lIE9CSl9pZF9hZXMyNTZfd3JhcAkJT0JKX2Flcyw0NUwKKworI2RlZmluZSBTTl9hZXNfMjU2X2djbQkJImlkLWFlczI1Ni1HQ00iCisjZGVmaW5lIExOX2Flc18yNTZfZ2NtCQkiYWVzLTI1Ni1nY20iCisjZGVmaW5lIE5JRF9hZXNfMjU2X2djbQkJOTAxCisjZGVmaW5lIE9CSl9hZXNfMjU2X2djbQkJT0JKX2Flcyw0NkwKKworI2RlZmluZSBTTl9hZXNfMjU2X2NjbQkJImlkLWFlczI1Ni1DQ00iCisjZGVmaW5lIExOX2Flc18yNTZfY2NtCQkiYWVzLTI1Ni1jY20iCisjZGVmaW5lIE5JRF9hZXNfMjU2X2NjbQkJOTAyCisjZGVmaW5lIE9CSl9hZXNfMjU2X2NjbQkJT0JKX2Flcyw0N0wKKworI2RlZmluZSBTTl9pZF9hZXMyNTZfd3JhcF9wYWQJCSJpZC1hZXMyNTYtd3JhcC1wYWQiCisjZGVmaW5lIE5JRF9pZF9hZXMyNTZfd3JhcF9wYWQJCTkwMworI2RlZmluZSBPQkpfaWRfYWVzMjU2X3dyYXBfcGFkCQlPQkpfYWVzLDQ4TAorCiAjZGVmaW5lIFNOX2Flc18xMjhfY2ZiMQkJIkFFUy0xMjgtQ0ZCMSIKICNkZWZpbmUgTE5fYWVzXzEyOF9jZmIxCQkiYWVzLTEyOC1jZmIxIgogI2RlZmluZSBOSURfYWVzXzEyOF9jZmIxCQk2NTAKQEAgLTI2NTAsNiArMjcyOCwyNiBAQAogI2RlZmluZSBMTl9hZXNfMjU2X2NmYjgJCSJhZXMtMjU2LWNmYjgiCiAjZGVmaW5lIE5JRF9hZXNfMjU2X2NmYjgJCTY1NQogCisjZGVmaW5lIFNOX2Flc18xMjhfY3RyCQkiQUVTLTEyOC1DVFIiCisjZGVmaW5lIExOX2Flc18xMjhfY3RyCQkiYWVzLTEyOC1jdHIiCisjZGVmaW5lIE5JRF9hZXNfMTI4X2N0cgkJOTA0CisKKyNkZWZpbmUgU05fYWVzXzE5Ml9jdHIJCSJBRVMtMTkyLUNUUiIKKyNkZWZpbmUgTE5fYWVzXzE5Ml9jdHIJCSJhZXMtMTkyLWN0ciIKKyNkZWZpbmUgTklEX2Flc18xOTJfY3RyCQk5MDUKKworI2RlZmluZSBTTl9hZXNfMjU2X2N0cgkJIkFFUy0yNTYtQ1RSIgorI2RlZmluZSBMTl9hZXNfMjU2X2N0cgkJImFlcy0yNTYtY3RyIgorI2RlZmluZSBOSURfYWVzXzI1Nl9jdHIJCTkwNgorCisjZGVmaW5lIFNOX2Flc18xMjhfeHRzCQkiQUVTLTEyOC1YVFMiCisjZGVmaW5lIExOX2Flc18xMjhfeHRzCQkiYWVzLTEyOC14dHMiCisjZGVmaW5lIE5JRF9hZXNfMTI4X3h0cwkJOTEzCisKKyNkZWZpbmUgU05fYWVzXzI1Nl94dHMJCSJBRVMtMjU2LVhUUyIKKyNkZWZpbmUgTE5fYWVzXzI1Nl94dHMJCSJhZXMtMjU2LXh0cyIKKyNkZWZpbmUgTklEX2Flc18yNTZfeHRzCQk5MTQKKwogI2RlZmluZSBTTl9kZXNfY2ZiMQkJIkRFUy1DRkIxIgogI2RlZmluZSBMTl9kZXNfY2ZiMQkJImRlcy1jZmIxIgogI2RlZmluZSBOSURfZGVzX2NmYjEJCTY1NgpAQCAtMjY2NiwxOCArMjc2NCw2IEBACiAjZGVmaW5lIExOX2Rlc19lZGUzX2NmYjgJCSJkZXMtZWRlMy1jZmI4IgogI2RlZmluZSBOSURfZGVzX2VkZTNfY2ZiOAkJNjU5CiAKLSNkZWZpbmUgU05faWRfYWVzMTI4X3dyYXAJCSJpZC1hZXMxMjgtd3JhcCIKLSNkZWZpbmUgTklEX2lkX2FlczEyOF93cmFwCQk3ODgKLSNkZWZpbmUgT0JKX2lkX2FlczEyOF93cmFwCQlPQkpfYWVzLDVMCi0KLSNkZWZpbmUgU05faWRfYWVzMTkyX3dyYXAJCSJpZC1hZXMxOTItd3JhcCIKLSNkZWZpbmUgTklEX2lkX2FlczE5Ml93cmFwCQk3ODkKLSNkZWZpbmUgT0JKX2lkX2FlczE5Ml93cmFwCQlPQkpfYWVzLDI1TAotCi0jZGVmaW5lIFNOX2lkX2FlczI1Nl93cmFwCQkiaWQtYWVzMjU2LXdyYXAiCi0jZGVmaW5lIE5JRF9pZF9hZXMyNTZfd3JhcAkJNzkwCi0jZGVmaW5lIE9CSl9pZF9hZXMyNTZfd3JhcAkJT0JKX2Flcyw0NUwKLQogI2RlZmluZSBPQkpfbmlzdF9oYXNoYWxncwkJT0JKX25pc3RBbGdvcml0aG1zLDJMCiAKICNkZWZpbmUgU05fc2hhMjU2CQkiU0hBMjU2IgpAQCAtMzgxMCw2ICszODk2LDE4IEBACiAjZGVmaW5lIE5JRF9jYW1lbGxpYV8yNTZfY2JjCQk3NTMKICNkZWZpbmUgT0JKX2NhbWVsbGlhXzI1Nl9jYmMJCTFMLDJMLDM5MkwsMjAwMDExTCw2MUwsMUwsMUwsMUwsNEwKIAorI2RlZmluZSBTTl9pZF9jYW1lbGxpYTEyOF93cmFwCQkiaWQtY2FtZWxsaWExMjgtd3JhcCIKKyNkZWZpbmUgTklEX2lkX2NhbWVsbGlhMTI4X3dyYXAJCTkwNworI2RlZmluZSBPQkpfaWRfY2FtZWxsaWExMjhfd3JhcAkJMUwsMkwsMzkyTCwyMDAwMTFMLDYxTCwxTCwxTCwzTCwyTAorCisjZGVmaW5lIFNOX2lkX2NhbWVsbGlhMTkyX3dyYXAJCSJpZC1jYW1lbGxpYTE5Mi13cmFwIgorI2RlZmluZSBOSURfaWRfY2FtZWxsaWExOTJfd3JhcAkJOTA4CisjZGVmaW5lIE9CSl9pZF9jYW1lbGxpYTE5Ml93cmFwCQkxTCwyTCwzOTJMLDIwMDAxMUwsNjFMLDFMLDFMLDNMLDNMCisKKyNkZWZpbmUgU05faWRfY2FtZWxsaWEyNTZfd3JhcAkJImlkLWNhbWVsbGlhMjU2LXdyYXAiCisjZGVmaW5lIE5JRF9pZF9jYW1lbGxpYTI1Nl93cmFwCQk5MDkKKyNkZWZpbmUgT0JKX2lkX2NhbWVsbGlhMjU2X3dyYXAJCTFMLDJMLDM5MkwsMjAwMDExTCw2MUwsMUwsMUwsM0wsNEwKKwogI2RlZmluZSBPQkpfbnR0X2RzCQkwTCwzTCw0NDAxTCw1TAogCiAjZGVmaW5lIE9CSl9jYW1lbGxpYQkJT0JKX250dF9kcywzTCwxTCw5TApAQCAtMzkxMiwzICs0MDEwLDIzIEBACiAjZGVmaW5lIExOX2htYWMJCSJobWFjIgogI2RlZmluZSBOSURfaG1hYwkJODU1CiAKKyNkZWZpbmUgU05fY21hYwkJIkNNQUMiCisjZGVmaW5lIExOX2NtYWMJCSJjbWFjIgorI2RlZmluZSBOSURfY21hYwkJODk0CisKKyNkZWZpbmUgU05fcmM0X2htYWNfbWQ1CQkiUkM0LUhNQUMtTUQ1IgorI2RlZmluZSBMTl9yYzRfaG1hY19tZDUJCSJyYzQtaG1hYy1tZDUiCisjZGVmaW5lIE5JRF9yYzRfaG1hY19tZDUJCTkxNQorCisjZGVmaW5lIFNOX2Flc18xMjhfY2JjX2htYWNfc2hhMQkJIkFFUy0xMjgtQ0JDLUhNQUMtU0hBMSIKKyNkZWZpbmUgTE5fYWVzXzEyOF9jYmNfaG1hY19zaGExCQkiYWVzLTEyOC1jYmMtaG1hYy1zaGExIgorI2RlZmluZSBOSURfYWVzXzEyOF9jYmNfaG1hY19zaGExCQk5MTYKKworI2RlZmluZSBTTl9hZXNfMTkyX2NiY19obWFjX3NoYTEJCSJBRVMtMTkyLUNCQy1ITUFDLVNIQTEiCisjZGVmaW5lIExOX2Flc18xOTJfY2JjX2htYWNfc2hhMQkJImFlcy0xOTItY2JjLWhtYWMtc2hhMSIKKyNkZWZpbmUgTklEX2Flc18xOTJfY2JjX2htYWNfc2hhMQkJOTE3CisKKyNkZWZpbmUgU05fYWVzXzI1Nl9jYmNfaG1hY19zaGExCQkiQUVTLTI1Ni1DQkMtSE1BQy1TSEExIgorI2RlZmluZSBMTl9hZXNfMjU2X2NiY19obWFjX3NoYTEJCSJhZXMtMjU2LWNiYy1obWFjLXNoYTEiCisjZGVmaW5lIE5JRF9hZXNfMjU2X2NiY19obWFjX3NoYTEJCTkxOAorCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCBiL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCmluZGV4IDI2YWM2YmEuLmYxN2VhYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCkBAIC04LDYgKzgsOSBAQAogI2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKICMgZGVmaW5lIE9QRU5TU0xfTk9fQ0FTVAogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOAorIyBkZWZpbmUgT1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19HTVAKICMgZGVmaW5lIE9QRU5TU0xfTk9fR01QCiAjZW5kaWYKQEAgLTI5LDYgKzMyLDkgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CiAjIGRlZmluZSBPUEVOU1NMX05PX1JGQzM3NzkKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKyMgZGVmaW5lIE9QRU5TU0xfTk9fU0NUUAorI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAogIyBkZWZpbmUgT1BFTlNTTF9OT19TRUVECiAjZW5kaWYKQEAgLTU5LDYgKzY1LDkgQEAKICMgaWYgZGVmaW5lZChPUEVOU1NMX05PX0NBU1QpICYmICFkZWZpbmVkKE5PX0NBU1QpCiAjICBkZWZpbmUgTk9fQ0FTVAogIyBlbmRpZgorIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOCkgJiYgIWRlZmluZWQoTk9fRUNfTklTVFBfNjRfR0NDXzEyOCkKKyMgIGRlZmluZSBOT19FQ19OSVNUUF82NF9HQ0NfMTI4CisjIGVuZGlmCiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19HTVApICYmICFkZWZpbmVkKE5PX0dNUCkKICMgIGRlZmluZSBOT19HTVAKICMgZW5kaWYKQEAgLTgwLDYgKzg5LDkgQEAKICMgaWYgZGVmaW5lZChPUEVOU1NMX05PX1JGQzM3NzkpICYmICFkZWZpbmVkKE5PX1JGQzM3NzkpCiAjICBkZWZpbmUgTk9fUkZDMzc3OQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKE9QRU5TU0xfTk9fU0NUUCkgJiYgIWRlZmluZWQoTk9fU0NUUCkKKyMgIGRlZmluZSBOT19TQ1RQCisjIGVuZGlmCiAjIGlmIGRlZmluZWQoT1BFTlNTTF9OT19TRUVEKSAmJiAhZGVmaW5lZChOT19TRUVEKQogIyAgZGVmaW5lIE5PX1NFRUQKICMgZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIGIvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKaW5kZXggNjZhNmQwZC4uYmY0MjU1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKQEAgLTI1LDExICsyNSwxMSBAQAogICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCiAgKiAgbWFqb3IgbWlub3IgZml4IGZpbmFsIHBhdGNoL2JldGEpCiAgKi8KLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDhmTAorI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAwMDEwMGZMCiAjaWZkZWYgT1BFTlNTTF9GSVBTCi0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4waC1maXBzIDEyIE1hciAyMDEyIgorI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMS1maXBzIDE0IE1hciAyMDEyIgogI2Vsc2UKLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJIk9wZW5TU0wgMS4wLjBoIDEyIE1hciAyMDEyIgorI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMSAxNCBNYXIgMjAxMiIKICNlbmRpZgogI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fUFRFWFQJIiBwYXJ0IG9mICIgT1BFTlNTTF9WRVJTSU9OX1RFWFQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggYi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAppbmRleCAxMmJkNzAxLi5lYTkyMjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaApAQCAtOTEsMTAgKzkxLDEyIEBACiB0eXBlZGVmIHN0cnVjdCBhc24xX3N0cmluZ19zdCBBU04xX0dFTkVSQUxJWkVEVElNRTsKIHR5cGVkZWYgc3RydWN0IGFzbjFfc3RyaW5nX3N0IEFTTjFfVklTSUJMRVNUUklORzsKIHR5cGVkZWYgc3RydWN0IGFzbjFfc3RyaW5nX3N0IEFTTjFfVVRGOFNUUklORzsKK3R5cGVkZWYgc3RydWN0IGFzbjFfc3RyaW5nX3N0IEFTTjFfU1RSSU5HOwogdHlwZWRlZiBpbnQgQVNOMV9CT09MRUFOOwogdHlwZWRlZiBpbnQgQVNOMV9OVUxMOwogI2VuZGlmCiAKK3R5cGVkZWYgc3RydWN0IEFTTjFfSVRFTV9zdCBBU04xX0lURU07CiB0eXBlZGVmIHN0cnVjdCBhc24xX3BjdHhfc3QgQVNOMV9QQ1RYOwogCiAjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggYi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCmluZGV4IGFjNmMwMjEuLmRjOGZjZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3JhbmQuaApAQCAtMTE5LDYgKzExOSwxMSBAQAogCiAjZW5kaWYKIAorI2lmZGVmIE9QRU5TU0xfRklQUwordm9pZCBSQU5EX3NldF9maXBzX2RyYmdfdHlwZShpbnQgdHlwZSwgaW50IGZsYWdzKTsKK2ludCBSQU5EX2luaXRfZmlwcyh2b2lkKTsKKyNlbmRpZgorCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMTI5LDkgKzEzNCwxMyBAQAogCiAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQorI2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgogI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCiAKIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEwMgorI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEwMworI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDEwMQogI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKIAogI2lmZGVmICBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3JjMi5oIGIvaW5jbHVkZS9vcGVuc3NsL3JjMi5oCmluZGV4IDM0YzgzNjIuLmU1NDJlYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9yYzIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcmMyLmgKQEAgLTc5LDcgKzc5LDkgQEAKIAlSQzJfSU5UIGRhdGFbNjRdOwogCX0gUkMyX0tFWTsKIAotIAorI2lmZGVmIE9QRU5TU0xfRklQUyAKK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOworI2VuZGlmCiB2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CiB2b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAogCQkgICAgIGludCBlbmMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3JjNC5oIGIvaW5jbHVkZS9vcGVuc3NsL3JjNC5oCmluZGV4IDI5ZDFhY2MuLjg4Y2ViNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9yYzQuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvcmM0LmgKQEAgLTc5LDYgKzc5LDcgQEAKICAKIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOwogdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwordm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CiB2b2lkIFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0YSwKIAkJdW5zaWduZWQgY2hhciAqb3V0ZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9yaXBlbWQuaCBiL2luY2x1ZGUvb3BlbnNzbC9yaXBlbWQuaAppbmRleCA1OTQyZWI2Li4xODliZDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvcmlwZW1kLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3JpcGVtZC5oCkBAIC05MSw2ICs5MSw5IEBACiAJdW5zaWduZWQgaW50ICAgbnVtOwogCX0gUklQRU1EMTYwX0NUWDsKIAorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7CisjZW5kaWYKIGludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKIGludCBSSVBFTUQxNjBfVXBkYXRlKFJJUEVNRDE2MF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgUklQRU1EMTYwX0NUWCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvcnNhLmggYi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKaW5kZXggY2Y3NDM0My4uNDgxNGEyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9yc2EuaApAQCAtMjIyLDEyICsyMjIsMjIgQEAKIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgLTEsIEVWUF9QS0VZX0NUUkxfUlNBX1BBRERJTkcsIFwKIAkJCQlwYWQsIE5VTEwpCiAKKyNkZWZpbmUgRVZQX1BLRVlfQ1RYX2dldF9yc2FfcGFkZGluZyhjdHgsIHBwYWQpIFwKKwlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgLTEsIFwKKwkJCQlFVlBfUEtFWV9DVFJMX0dFVF9SU0FfUEFERElORywgMCwgcHBhZCkKKwogI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihjdHgsIGxlbikgXAogCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBcCiAJCQkJKEVWUF9QS0VZX09QX1NJR058RVZQX1BLRVlfT1BfVkVSSUZZKSwgXAogCQkJCUVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOLCBcCiAJCQkJbGVuLCBOVUxMKQogCisjZGVmaW5lIEVWUF9QS0VZX0NUWF9nZXRfcnNhX3Bzc19zYWx0bGVuKGN0eCwgcGxlbikgXAorCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfUlNBLCBcCisJCQkJKEVWUF9QS0VZX09QX1NJR058RVZQX1BLRVlfT1BfVkVSSUZZKSwgXAorCQkJCUVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QU1NfU0FMVExFTiwgXAorCQkJCTAsIHBsZW4pCisKICNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9yc2Ffa2V5Z2VuX2JpdHMoY3R4LCBiaXRzKSBcCiAJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX0tFWUdFTiwgXAogCQkJCUVWUF9QS0VZX0NUUkxfUlNBX0tFWUdFTl9CSVRTLCBiaXRzLCBOVUxMKQpAQCAtMjM2LDExICsyNDYsMjQgQEAKIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX1JTQSwgRVZQX1BLRVlfT1BfS0VZR0VOLCBcCiAJCQkJRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUCwgMCwgcHViZXhwKQogCisjZGVmaW5lCSBFVlBfUEtFWV9DVFhfc2V0X3JzYV9tZ2YxX21kKGN0eCwgbWQpCVwKKwkJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX1RZUEVfU0lHLCAgXAorCQkJCUVWUF9QS0VZX0NUUkxfUlNBX01HRjFfTUQsIDAsICh2b2lkICopbWQpCisKKyNkZWZpbmUJIEVWUF9QS0VZX0NUWF9nZXRfcnNhX21nZjFfbWQoY3R4LCBwbWQpCVwKKwkJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9SU0EsIEVWUF9QS0VZX09QX1RZUEVfU0lHLCAgXAorCQkJCUVWUF9QS0VZX0NUUkxfR0VUX1JTQV9NR0YxX01ELCAwLCAodm9pZCAqKXBtZCkKKwogI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9QQURESU5HCShFVlBfUEtFWV9BTEdfQ1RSTCArIDEpCiAjZGVmaW5lIEVWUF9QS0VZX0NUUkxfUlNBX1BTU19TQUxUTEVOCShFVlBfUEtFWV9BTEdfQ1RSTCArIDIpCiAKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX0JJVFMJKEVWUF9QS0VZX0FMR19DVFJMICsgMykKICNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9SU0FfS0VZR0VOX1BVQkVYUAkoRVZQX1BLRVlfQUxHX0NUUkwgKyA0KQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX1JTQV9NR0YxX01ECShFVlBfUEtFWV9BTEdfQ1RSTCArIDUpCisKKyNkZWZpbmUgRVZQX1BLRVlfQ1RSTF9HRVRfUlNBX1BBRERJTkcJCShFVlBfUEtFWV9BTEdfQ1RSTCArIDYpCisjZGVmaW5lIEVWUF9QS0VZX0NUUkxfR0VUX1JTQV9QU1NfU0FMVExFTgkoRVZQX1BLRVlfQUxHX0NUUkwgKyA3KQorI2RlZmluZSBFVlBfUEtFWV9DVFJMX0dFVF9SU0FfTUdGMV9NRAkJKEVWUF9QS0VZX0FMR19DVFJMICsgOCkKIAogI2RlZmluZSBSU0FfUEtDUzFfUEFERElORwkxCiAjZGVmaW5lIFJTQV9TU0xWMjNfUEFERElORwkyCkBAIC0zMDAsNiArMzIzLDE2IEBACiBERUNMQVJFX0FTTjFfRU5DT0RFX0ZVTkNUSU9OU19jb25zdChSU0EsIFJTQVB1YmxpY0tleSkKIERFQ0xBUkVfQVNOMV9FTkNPREVfRlVOQ1RJT05TX2NvbnN0KFJTQSwgUlNBUHJpdmF0ZUtleSkKIAordHlwZWRlZiBzdHJ1Y3QgcnNhX3Bzc19wYXJhbXNfc3QKKwl7CisJWDUwOV9BTEdPUiAqaGFzaEFsZ29yaXRobTsKKwlYNTA5X0FMR09SICptYXNrR2VuQWxnb3JpdGhtOworCUFTTjFfSU5URUdFUiAqc2FsdExlbmd0aDsKKwlBU04xX0lOVEVHRVIgKnRyYWlsZXJGaWVsZDsKKwl9IFJTQV9QU1NfUEFSQU1TOworCitERUNMQVJFX0FTTjFfRlVOQ1RJT05TKFJTQV9QU1NfUEFSQU1TKQorCiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQJUlNBX3ByaW50X2ZwKEZJTEUgKmZwLCBjb25zdCBSU0EgKnIsaW50IG9mZnNldCk7CiAjZW5kaWYKQEAgLTM4MCw2ICs0MTMsMTQgQEAKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAogCQkJY29uc3QgRVZQX01EICpIYXNoLCBpbnQgc0xlbik7CiAKK2ludCBSU0FfdmVyaWZ5X1BLQ1MxX1BTU19tZ2YxKFJTQSAqcnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICptSGFzaCwKKwkJCWNvbnN0IEVWUF9NRCAqSGFzaCwgY29uc3QgRVZQX01EICptZ2YxSGFzaCwgCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpFTSwgaW50IHNMZW4pOworCitpbnQgUlNBX3BhZGRpbmdfYWRkX1BLQ1MxX1BTU19tZ2YxKFJTQSAqcnNhLCB1bnNpZ25lZCBjaGFyICpFTSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1IYXNoLAorCQkJY29uc3QgRVZQX01EICpIYXNoLCBjb25zdCBFVlBfTUQgKm1nZjFIYXNoLCBpbnQgc0xlbik7CisKIGludCBSU0FfZ2V0X2V4X25ld19pbmRleChsb25nIGFyZ2wsIHZvaWQgKmFyZ3AsIENSWVBUT19FWF9uZXcgKm5ld19mdW5jLAogCUNSWVBUT19FWF9kdXAgKmR1cF9mdW5jLCBDUllQVE9fRVhfZnJlZSAqZnJlZV9mdW5jKTsKIGludCBSU0Ffc2V0X2V4X2RhdGEoUlNBICpyLGludCBpZHgsdm9pZCAqYXJnKTsKQEAgLTM4OCw2ICs0MjksMjUgQEAKIFJTQSAqUlNBUHVibGljS2V5X2R1cChSU0EgKnJzYSk7CiBSU0EgKlJTQVByaXZhdGVLZXlfZHVwKFJTQSAqcnNhKTsKIAorLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgorICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXNwb25zaWJpbGl0eQorICogdG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgorICovCisKKyNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKKworLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQorICogdXNhZ2UgaXMgY29tcGxpYW50LgorICovCisKKyNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKy8qIEFwcGxpY2F0aW9uIGhhcyBkZWNpZGVkIFBSTkcgaXMgZ29vZCBlbm91Z2ggdG8gZ2VuZXJhdGUgYSBrZXk6IGRvbid0CisgKiBjaGVjay4KKyAqLworI2RlZmluZSBSU0FfRkxBR19DSEVDS0VECQkJMHgwODAwCisKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCkBAIC00MDUsNiArNDY1LDcgQEAKICNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfQ1RSTAkJCQkgMTQzCiAjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX0NUUkxfU1RSCQkJCSAxNDQKICNkZWZpbmUgUlNBX0ZfUEtFWV9SU0FfU0lHTgkJCQkgMTQyCisjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX1ZFUklGWQkJCQkgMTU0CiAjZGVmaW5lIFJTQV9GX1BLRVlfUlNBX1ZFUklGWVJFQ09WRVIJCQkgMTQxCiAjZGVmaW5lIFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjkKICNkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWQkJCQkgMTIzCkBAIC00MTMsNiArNDc0LDggQEAKICNkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMDMKICNkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMDQKICNkZWZpbmUgUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWQkJCQkgMTA1CisjZGVmaW5lIFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgJCQkgMTU1CisjZGVmaW5lIFJTQV9GX1JTQV9JVEVNX1ZFUklGWQkJCQkgMTU2CiAjZGVmaW5lIFJTQV9GX1JTQV9NRU1PUllfTE9DSwkJCQkgMTMwCiAjZGVmaW5lIFJTQV9GX1JTQV9ORVdfTUVUSE9ECQkJCSAxMDYKICNkZWZpbmUgUlNBX0ZfUlNBX05VTEwJCQkJCSAxMjQKQEAgLTQyNCw2ICs0ODcsNyBAQAogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVAJCSAxMjEKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4CiAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMApAQCAtNDM2LDggKzUwMCwxMiBAQAogI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAogI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE1MgorI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCiAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgogI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwpAQCAtNDQ1LDYgKzUxMyw3IEBACiAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQogI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCiAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgorI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQogCiAvKiBSZWFzb24gY29kZXMuICovCiAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJCSAxMDAKQEAgLTQ3MCwxOSArNTM5LDI0IEBACiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfSEVBREVSCQkJCSAxMzcKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9LRVlCSVRTCQkJCSAxNDUKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSAkJCSAxMzEKKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkgMTQxCisjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTQ5CiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2CisjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTUwCiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5CiAjZGVmaW5lIFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCiAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAogI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CiAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJCSAxNTcKICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAogI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwogI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4CiAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAogI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOApAQCAtNDkzLDcgKzU2NywxMiBAQAogI2RlZmluZSBSU0FfUl9TU0xWM19ST0xMQkFDS19BVFRBQ0sJCQkgMTE1CiAjZGVmaW5lIFJTQV9SX1RIRV9BU04xX09CSkVDVF9JREVOVElGSUVSX0lTX05PVF9LTk9XTl9GT1JfVEhJU19NRCAxMTYKICNkZWZpbmUgUlNBX1JfVU5LTk9XTl9BTEdPUklUSE1fVFlQRQkJCSAxMTcKKyNkZWZpbmUgUlNBX1JfVU5LTk9XTl9NQVNLX0RJR0VTVAkJCSAxNTEKICNkZWZpbmUgUlNBX1JfVU5LTk9XTl9QQURESU5HX1RZUEUJCQkgMTE4CisjZGVmaW5lIFJTQV9SX1VOS05PV05fUFNTX0RJR0VTVAkJCSAxNTIKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfTUFTS19BTEdPUklUSE0JCSAxNTMKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfTUFTS19QQVJBTUVURVIJCSAxNTQKKyNkZWZpbmUgUlNBX1JfVU5TVVBQT1JURURfU0lHTkFUVVJFX1RZUEUJCSAxNTUKICNkZWZpbmUgUlNBX1JfVkFMVUVfTUlTU0lORwkJCQkgMTQ3CiAjZGVmaW5lIFJTQV9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgJCQkgMTE5CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCBiL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAppbmRleCAzZTc2YWE1Li5lYTNhYTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCkBAIC0xNDU5LDYgKzE0NTksOTQgQEAKICNkZWZpbmUgc2tfUE9MSUNZX01BUFBJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoUE9MSUNZX01BUFBJTkcsIChzdCkpCiAjZGVmaW5lIHNrX1BPTElDWV9NQVBQSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChQT0xJQ1lfTUFQUElORywgKHN0KSkKIAorI2RlZmluZSBza19TUlBfZ05fbmV3KGNtcCkgU0tNX3NrX25ldyhTUlBfZ04sIChjbXApKQorI2RlZmluZSBza19TUlBfZ05fbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1JQX2dOKQorI2RlZmluZSBza19TUlBfZ05fZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1JQX2dOLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fbnVtKHN0KSBTS01fc2tfbnVtKFNSUF9nTiwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoU1JQX2dOLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9zZXQoc3QsIGksIHZhbCkgU0tNX3NrX3NldChTUlBfZ04sIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl96ZXJvKHN0KSBTS01fc2tfemVybyhTUlBfZ04sIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKFNSUF9nTiwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl91bnNoaWZ0KHN0LCB2YWwpIFNLTV9za191bnNoaWZ0KFNSUF9nTiwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9maW5kKHN0LCB2YWwpIFNLTV9za19maW5kKFNSUF9nTiwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KFNSUF9nTiwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSUF9nTl9kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoU1JQX2dOLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9kZWxldGVfcHRyKHN0LCBwdHIpIFNLTV9za19kZWxldGVfcHRyKFNSUF9nTiwgKHN0KSwgKHB0cikpCisjZGVmaW5lIHNrX1NSUF9nTl9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChTUlBfZ04sIChzdCksICh2YWwpLCAoaSkpCisjZGVmaW5lIHNrX1NSUF9nTl9zZXRfY21wX2Z1bmMoc3QsIGNtcCkgU0tNX3NrX3NldF9jbXBfZnVuYyhTUlBfZ04sIChzdCksIChjbXApKQorI2RlZmluZSBza19TUlBfZ05fZHVwKHN0KSBTS01fc2tfZHVwKFNSUF9nTiwgc3QpCisjZGVmaW5lIHNrX1NSUF9nTl9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoU1JQX2dOLCAoc3QpLCAoZnJlZV9mdW5jKSkKKyNkZWZpbmUgc2tfU1JQX2dOX3NoaWZ0KHN0KSBTS01fc2tfc2hpZnQoU1JQX2dOLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fcG9wKHN0KSBTS01fc2tfcG9wKFNSUF9nTiwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX3NvcnQoc3QpIFNLTV9za19zb3J0KFNSUF9nTiwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTUlBfZ04sIChzdCkpCisKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX25ldyhjbXApIFNLTV9za19uZXcoU1JQX2dOX2NhY2hlLCAoY21wKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNSUF9nTl9jYWNoZSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNSUF9nTl9jYWNoZSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX251bShzdCkgU0tNX3NrX251bShTUlBfZ05fY2FjaGUsIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV92YWx1ZShzdCwgaSkgU0tNX3NrX3ZhbHVlKFNSUF9nTl9jYWNoZSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoU1JQX2dOX2NhY2hlLCAoc3QpLCAoaSksICh2YWwpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfemVybyhzdCkgU0tNX3NrX3plcm8oU1JQX2dOX2NhY2hlLCAoc3QpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfcHVzaChzdCwgdmFsKSBTS01fc2tfcHVzaChTUlBfZ05fY2FjaGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChTUlBfZ05fY2FjaGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZmluZChzdCwgdmFsKSBTS01fc2tfZmluZChTUlBfZ05fY2FjaGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZmluZF9leChzdCwgdmFsKSBTS01fc2tfZmluZF9leChTUlBfZ05fY2FjaGUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFNSUF9nTl9jYWNoZSwgKHN0KSwgKGkpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfZGVsZXRlX3B0cihzdCwgcHRyKSBTS01fc2tfZGVsZXRlX3B0cihTUlBfZ05fY2FjaGUsIChzdCksIChwdHIpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfaW5zZXJ0KHN0LCB2YWwsIGkpIFNLTV9za19pbnNlcnQoU1JQX2dOX2NhY2hlLCAoc3QpLCAodmFsKSwgKGkpKQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoU1JQX2dOX2NhY2hlLCAoc3QpLCAoY21wKSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX2R1cChzdCkgU0tNX3NrX2R1cChTUlBfZ05fY2FjaGUsIHN0KQorI2RlZmluZSBza19TUlBfZ05fY2FjaGVfcG9wX2ZyZWUoc3QsIGZyZWVfZnVuYykgU0tNX3NrX3BvcF9mcmVlKFNSUF9nTl9jYWNoZSwgKHN0KSwgKGZyZWVfZnVuYykpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFNSUF9nTl9jYWNoZSwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX2dOX2NhY2hlX3BvcChzdCkgU0tNX3NrX3BvcChTUlBfZ05fY2FjaGUsIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9zb3J0KHN0KSBTS01fc2tfc29ydChTUlBfZ05fY2FjaGUsIChzdCkpCisjZGVmaW5lIHNrX1NSUF9nTl9jYWNoZV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1JQX2dOX2NhY2hlLCAoc3QpKQorCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9uZXcoY21wKSBTS01fc2tfbmV3KFNSUF91c2VyX3B3ZCwgKGNtcCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9uZXdfbnVsbCgpIFNLTV9za19uZXdfbnVsbChTUlBfdXNlcl9wd2QpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9mcmVlKHN0KSBTS01fc2tfZnJlZShTUlBfdXNlcl9wd2QsIChzdCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9udW0oc3QpIFNLTV9za19udW0oU1JQX3VzZXJfcHdkLCAoc3QpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfdmFsdWUoc3QsIGkpIFNLTV9za192YWx1ZShTUlBfdXNlcl9wd2QsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3NldChzdCwgaSwgdmFsKSBTS01fc2tfc2V0KFNSUF91c2VyX3B3ZCwgKHN0KSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3plcm8oc3QpIFNLTV9za196ZXJvKFNSUF91c2VyX3B3ZCwgKHN0KSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3B1c2goc3QsIHZhbCkgU0tNX3NrX3B1c2goU1JQX3VzZXJfcHdkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3Vuc2hpZnQoc3QsIHZhbCkgU0tNX3NrX3Vuc2hpZnQoU1JQX3VzZXJfcHdkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoU1JQX3VzZXJfcHdkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2ZpbmRfZXgoc3QsIHZhbCkgU0tNX3NrX2ZpbmRfZXgoU1JQX3VzZXJfcHdkLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShTUlBfdXNlcl9wd2QsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoU1JQX3VzZXJfcHdkLCAoc3QpLCAocHRyKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX2luc2VydChzdCwgdmFsLCBpKSBTS01fc2tfaW5zZXJ0KFNSUF91c2VyX3B3ZCwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3NldF9jbXBfZnVuYyhzdCwgY21wKSBTS01fc2tfc2V0X2NtcF9mdW5jKFNSUF91c2VyX3B3ZCwgKHN0KSwgKGNtcCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9kdXAoc3QpIFNLTV9za19kdXAoU1JQX3VzZXJfcHdkLCBzdCkKKyNkZWZpbmUgc2tfU1JQX3VzZXJfcHdkX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIFNLTV9za19wb3BfZnJlZShTUlBfdXNlcl9wd2QsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2Rfc2hpZnQoc3QpIFNLTV9za19zaGlmdChTUlBfdXNlcl9wd2QsIChzdCkpCisjZGVmaW5lIHNrX1NSUF91c2VyX3B3ZF9wb3Aoc3QpIFNLTV9za19wb3AoU1JQX3VzZXJfcHdkLCAoc3QpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2Rfc29ydChzdCkgU0tNX3NrX3NvcnQoU1JQX3VzZXJfcHdkLCAoc3QpKQorI2RlZmluZSBza19TUlBfdXNlcl9wd2RfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFNSUF91c2VyX3B3ZCwgKHN0KSkKKworI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9uZXcoY21wKSBTS01fc2tfbmV3KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoY21wKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfbmV3X251bGwoKSBTS01fc2tfbmV3X251bGwoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2ZyZWUoc3QpIFNLTV9za19mcmVlKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9udW0oc3QpIFNLTV9za19udW0oU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3ZhbHVlKHN0LCBpKSBTS01fc2tfdmFsdWUoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChpKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfc2V0KHN0LCBpLCB2YWwpIFNLTV9za19zZXQoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChpKSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3plcm8oc3QpIFNLTV9za196ZXJvKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9wdXNoKHN0LCB2YWwpIFNLTV9za19wdXNoKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfdW5zaGlmdChzdCwgdmFsKSBTS01fc2tfdW5zaGlmdChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKHZhbCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2ZpbmQoc3QsIHZhbCkgU0tNX3NrX2ZpbmQoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksICh2YWwpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9maW5kX2V4KHN0LCB2YWwpIFNLTV9za19maW5kX2V4KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpLCAodmFsKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpLCAoaSkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2RlbGV0ZV9wdHIoc3QsIHB0cikgU0tNX3NrX2RlbGV0ZV9wdHIoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChwdHIpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9pbnNlcnQoc3QsIHZhbCwgaSkgU0tNX3NrX2luc2VydChTUlRQX1BST1RFQ1RJT05fUFJPRklMRSwgKHN0KSwgKHZhbCksIChpKSkKKyNkZWZpbmUgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfc2V0X2NtcF9mdW5jKHN0LCBjbXApIFNLTV9za19zZXRfY21wX2Z1bmMoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChjbXApKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9kdXAoc3QpIFNLTV9za19kdXAoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIHN0KQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBTS01fc2tfcG9wX2ZyZWUoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCksIChmcmVlX2Z1bmMpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9wb3Aoc3QpIFNLTV9za19wb3AoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisjZGVmaW5lIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3NvcnQoc3QpIFNLTV9za19zb3J0KFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFLCAoc3QpKQorI2RlZmluZSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUsIChzdCkpCisKICNkZWZpbmUgc2tfU1NMX0NJUEhFUl9uZXcoY21wKSBTS01fc2tfbmV3KFNTTF9DSVBIRVIsIChjbXApKQogI2RlZmluZSBza19TU0xfQ0lQSEVSX25ld19udWxsKCkgU0tNX3NrX25ld19udWxsKFNTTF9DSVBIRVIpCiAjZGVmaW5lIHNrX1NTTF9DSVBIRVJfZnJlZShzdCkgU0tNX3NrX2ZyZWUoU1NMX0NJUEhFUiwgKHN0KSkKQEAgLTIwNTYsMzEgKzIxNDQsNiBAQAogI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCiAKIAotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORykgKilza19uZXdfbnVsbCgpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoc3QsIGkpICgoT1BFTlNTTF9QU1RSSU5HKXNrX3ZhbHVlKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIGkpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbnVtKHN0KSBTS01fc2tfbnVtKE9QRU5TU0xfUFNUUklORywgc3QpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIoT1BFTlNTTF9QU1RSSU5HLCBmcmVlX2Z1bmMpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSwgaSkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9QRU5TU0xfUFNUUklORywgc3QpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIGksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfemVybyhzdCkgU0tNX3NrX3plcm8oT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdW5zaGlmdChzdCwgdmFsKSBza191bnNoaWZ0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZmluZF9leChzdCwgdmFsKSBza19maW5kX2V4KChfU1RBQ0sgKilDSEVDS0VEX0NPTlNUX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfQ09OU1RfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE9QRU5TU0xfUFNUUklORywgKHN0KSwgKGkpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlX3B0cihzdCwgcHRyKSAoT1BFTlNTTF9QU1RSSU5HICopc2tfZGVsZXRlX3B0cihDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgcHRyKSkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAotCSgoaW50ICgqKShjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICosY29uc3QgT1BFTlNTTF9TVFJJTkcgKiBjb25zdCAqKSkgXAotCXNrX3NldF9jbXBfZnVuYyhDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkKLSNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2R1cChzdCkgU0tNX3NrX2R1cChPUEVOU1NMX1BTVFJJTkcsIHN0KQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCi0jZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3Aoc3QpIChPUEVOU1NMX1NUUklORyAqKXNrX3BvcChDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQotI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9QRU5TU0xfUFNUUklORywgKHN0KSkKLQotCiAjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbmV3KGNtcCkgKChTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKHZvaWQsIGNtcCkpKQogI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX25ld19udWxsKCkgKChTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqKXNrX25ld19udWxsKCkpCiAjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSywgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQpAQCAtMjEwNiw2ICsyMTY5LDMxIEBACiAjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9QRU5TU0xfQkxPQ0ssIChzdCkpCiAKIAorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9TVFJJTkcsIGNtcCkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3X251bGwoKSAoKFNUQUNLX09GKE9QRU5TU0xfUFNUUklORykgKilza19uZXdfbnVsbCgpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdmFsdWUoc3QsIGkpICgoT1BFTlNTTF9QU1RSSU5HKXNrX3ZhbHVlKENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIGkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbnVtKHN0KSBTS01fc2tfbnVtKE9QRU5TU0xfUFNUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1NLX0ZSRUVfRlVOQzIoT1BFTlNTTF9QU1RSSU5HLCBmcmVlX2Z1bmMpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSwgaSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9QRU5TU0xfUFNUUklORywgc3QpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIGksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfemVybyhzdCkgU0tNX3NrX3plcm8oT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdW5zaGlmdChzdCwgdmFsKSBza191bnNoaWZ0KENIRUNLRURfU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZmluZF9leChzdCwgdmFsKSBza19maW5kX2V4KChfU1RBQ0sgKilDSEVDS0VEX0NPTlNUX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfQ09OU1RfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE9QRU5TU0xfUFNUUklORywgKHN0KSwgKGkpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlX3B0cihzdCwgcHRyKSAoT1BFTlNTTF9QU1RSSU5HICopc2tfZGVsZXRlX3B0cihDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgcHRyKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAorCSgoaW50ICgqKShjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICosY29uc3QgT1BFTlNTTF9TVFJJTkcgKiBjb25zdCAqKSkgXAorCXNrX3NldF9jbXBfZnVuYyhDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkKKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2R1cChzdCkgU0tNX3NrX2R1cChPUEVOU1NMX1BTVFJJTkcsIHN0KQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChPUEVOU1NMX1BTVFJJTkcsIChzdCkpCisjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3Aoc3QpIChPUEVOU1NMX1NUUklORyAqKXNrX3BvcChDSEVDS0VEX1NUQUNLX09GKE9QRU5TU0xfUFNUUklORywgc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoT1BFTlNTTF9QU1RSSU5HLCAoc3QpKQorI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKE9QRU5TU0xfUFNUUklORywgKHN0KSkKKworCiAjZGVmaW5lIGQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT04oc3QsIHBwLCBsZW5ndGgsIGQyaV9mdW5jLCBmcmVlX2Z1bmMsIGV4X3RhZywgZXhfY2xhc3MpIFwKIAlTS01fQVNOMV9TRVRfT0ZfZDJpKEFDQ0VTU19ERVNDUklQVElPTiwgKHN0KSwgKHBwKSwgKGxlbmd0aCksIChkMmlfZnVuYyksIChmcmVlX2Z1bmMpLCAoZXhfdGFnKSwgKGV4X2NsYXNzKSkgCiAjZGVmaW5lIGkyZF9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT04oc3QsIHBwLCBpMmRfZnVuYywgZXhfdGFnLCBleF9jbGFzcywgaXNfc2V0KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvc2hhLmggYi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKaW5kZXggMTZjYWNmOS4uOGE2YmY0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3NoYS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9zaGEuaApAQCAtMTA2LDYgKzEwNiw5IEBACiAJfSBTSEFfQ1RYOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CisjZW5kaWYKIGludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7CkBAIC0xMTMsNiArMTE2LDkgQEAKIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKICNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX1NIQTFfSW5pdChTSEFfQ1RYICpjKTsKKyNlbmRpZgogaW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKIGludCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKQEAgLTEzNSw2ICsxNDEsMTAgQEAKIAl9IFNIQTI1Nl9DVFg7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKK2ludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CisjZW5kaWYKIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7CkBAIC0xODIsNiArMTkyLDEwIEBACiAjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorI2lmZGVmIE9QRU5TU0xfRklQUworaW50IHByaXZhdGVfU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyNlbmRpZgogaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOwogaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zcnAuaCBiL2luY2x1ZGUvb3BlbnNzbC9zcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM3ODI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NycC5oCkBAIC0wLDAgKzEsMTcyIEBACisvKiBjcnlwdG8vc3JwL3NycC5oICovCisvKiBXcml0dGVuIGJ5IENocmlzdG9waGUgUmVub3UgKGNocmlzdG9waGUucmVub3VAZWRlbHdlYi5mcikgd2l0aCAKKyAqIHRoZSBwcmVjaW91cyBoZWxwIG9mIFBldGVyIFN5bHZlc3RlciAocGV0ZXIuc3lsdmVzdGVyQGVkZWx3ZWIuZnIpIAorICogZm9yIHRoZSBFZGVsS2V5IHByb2plY3QgYW5kIGNvbnRyaWJ1dGVkIHRvIHRoZSBPcGVuU1NMIHByb2plY3QgMjAwNC4KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2lmbmRlZiBfX1NSUF9IX18KKyNkZWZpbmUgX19TUlBfSF9fCisKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxvcGVuc3NsL3NhZmVzdGFjay5oPgorI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorCit0eXBlZGVmIHN0cnVjdCBTUlBfZ05fY2FjaGVfc3QKKwl7CisJY2hhciAqYjY0X2JuOworCUJJR05VTSAqYm47CisJfSBTUlBfZ05fY2FjaGU7CisKKworREVDTEFSRV9TVEFDS19PRihTUlBfZ05fY2FjaGUpCisKK3R5cGVkZWYgc3RydWN0IFNSUF91c2VyX3B3ZF9zdAorCXsKKwljaGFyICppZDsKKwlCSUdOVU0gKnM7CisJQklHTlVNICp2OworCWNvbnN0IEJJR05VTSAqZzsKKwljb25zdCBCSUdOVU0gKk47CisJY2hhciAqaW5mbzsKKwl9IFNSUF91c2VyX3B3ZDsKKworREVDTEFSRV9TVEFDS19PRihTUlBfdXNlcl9wd2QpCisKK3R5cGVkZWYgc3RydWN0IFNSUF9WQkFTRV9zdAorCXsKKwlTVEFDS19PRihTUlBfdXNlcl9wd2QpICp1c2Vyc19wd2Q7CisJU1RBQ0tfT0YoU1JQX2dOX2NhY2hlKSAqZ05fY2FjaGU7CisvKiB0byBzaW11bGF0ZSBhIHVzZXIgKi8KKwljaGFyICpzZWVkX2tleTsKKwlCSUdOVU0gKmRlZmF1bHRfZzsKKwlCSUdOVU0gKmRlZmF1bHRfTjsKKwl9IFNSUF9WQkFTRTsKKworCisvKlN0cnVjdHVyZSBpbnRlcm5lIHBvdXIgcmV0ZW5pciBsZXMgY291cGxlcyBOIGV0IGcqLwordHlwZWRlZiBzdHJ1Y3QgU1JQX2dOX3N0CisJeworCWNoYXIgKmlkOworCUJJR05VTSAqZzsKKwlCSUdOVU0gKk47CisJfSBTUlBfZ047CisKK0RFQ0xBUkVfU1RBQ0tfT0YoU1JQX2dOKQorCitTUlBfVkJBU0UgKlNSUF9WQkFTRV9uZXcoY2hhciAqc2VlZF9rZXkpOworaW50IFNSUF9WQkFTRV9mcmVlKFNSUF9WQkFTRSAqdmIpOworaW50IFNSUF9WQkFTRV9pbml0KFNSUF9WQkFTRSAqdmIsIGNoYXIgKiB2ZXJpZmllcl9maWxlKTsKK1NSUF91c2VyX3B3ZCAqU1JQX1ZCQVNFX2dldF9ieV91c2VyKFNSUF9WQkFTRSAqdmIsIGNoYXIgKnVzZXJuYW1lKTsKK2NoYXIgKlNSUF9jcmVhdGVfdmVyaWZpZXIoY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcywgY2hhciAqKnNhbHQsCisJCQkgIGNoYXIgKip2ZXJpZmllciwgY29uc3QgY2hhciAqTiwgY29uc3QgY2hhciAqZyk7CitpbnQgU1JQX2NyZWF0ZV92ZXJpZmllcl9CTihjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpwYXNzLCBCSUdOVU0gKipzYWx0LCBCSUdOVU0gKip2ZXJpZmllciwgQklHTlVNICpOLCBCSUdOVU0gKmcpOworCisKKyNkZWZpbmUgU1JQX05PX0VSUk9SIDAKKyNkZWZpbmUgU1JQX0VSUl9WQkFTRV9JTkNPTVBMRVRFX0ZJTEUgMQorI2RlZmluZSBTUlBfRVJSX1ZCQVNFX0JOX0xJQiAyCisjZGVmaW5lIFNSUF9FUlJfT1BFTl9GSUxFIDMKKyNkZWZpbmUgU1JQX0VSUl9NRU1PUlkgNAorCisjZGVmaW5lIERCX3NycHR5cGUJMAorI2RlZmluZSBEQl9zcnB2ZXJpZmllcgkxCisjZGVmaW5lIERCX3NycHNhbHQgCTIKKyNkZWZpbmUgREJfc3JwaWQJMyAgICAgICAgICAgICAgCisjZGVmaW5lIERCX3NycGdOCTQgICAgICAgCisjZGVmaW5lIERCX3NycGluZm8JNSAKKyN1bmRlZiAgREJfTlVNQkVSICAgICAgCisjZGVmaW5lIERCX05VTUJFUiAgICAgICA2CisKKyNkZWZpbmUgREJfU1JQX0lOREVYCSdJJworI2RlZmluZSBEQl9TUlBfVkFMSUQJJ1YnCisjZGVmaW5lIERCX1NSUF9SRVZPS0VECSdSJworI2RlZmluZSBEQl9TUlBfTU9ESUYJJ3YnCisKKworLyogc2VlIHNycC5jICovCitjaGFyICogU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtKEJJR05VTSogZywgQklHTlVNKiBOKTsgCitTUlBfZ04gKlNSUF9nZXRfZGVmYXVsdF9nTihjb25zdCBjaGFyICogaWQpIDsKKworLyogc2VydmVyIHNpZGUgLi4uLiAqLworQklHTlVNICpTUlBfQ2FsY19zZXJ2ZXJfa2V5KEJJR05VTSAqQSwgQklHTlVNICp2LCBCSUdOVU0gKnUsIEJJR05VTSAqYiwgQklHTlVNICpOKTsKK0JJR05VTSAqU1JQX0NhbGNfQihCSUdOVU0gKmIsIEJJR05VTSAqTiwgQklHTlVNICpnLCBCSUdOVU0gKnYpOworaW50IFNSUF9WZXJpZnlfQV9tb2RfTihCSUdOVU0gKkEsIEJJR05VTSAqTik7CitCSUdOVU0gKlNSUF9DYWxjX3UoQklHTlVNICpBLCBCSUdOVU0gKkIsIEJJR05VTSAqTikgOworCisKKworLyogY2xpZW50IHNpZGUgLi4uLiAqLworQklHTlVNICpTUlBfQ2FsY194KEJJR05VTSAqcywgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcyk7CitCSUdOVU0gKlNSUF9DYWxjX0EoQklHTlVNICphLCBCSUdOVU0gKk4sIEJJR05VTSAqZyk7CitCSUdOVU0gKlNSUF9DYWxjX2NsaWVudF9rZXkoQklHTlVNICpOLCBCSUdOVU0gKkIsIEJJR05VTSAqZywgQklHTlVNICp4LCBCSUdOVU0gKmEsIEJJR05VTSAqdSk7CitpbnQgU1JQX1ZlcmlmeV9CX21vZF9OKEJJR05VTSAqQiwgQklHTlVNICpOKTsKKworI2RlZmluZSBTUlBfTUlOSU1BTF9OIDEwMjQKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIGIvaW5jbHVkZS9vcGVuc3NsL3NydHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGNmMzNlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3NydHAuaApAQCAtMCwwICsxLDE0NSBAQAorLyogc3NsL3RsczEuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisvKgorICBEVExTIGNvZGUgYnkgRXJpYyBSZXNjb3JsYSA8ZWtyQHJ0Zm0uY29tPgorCisgIENvcHlyaWdodCAoQykgMjAwNiwgTmV0d29yayBSZXNvbmFuY2UsIEluYy4KKyAgQ29weXJpZ2h0IChDKSAyMDExLCBSVEZNLCBJbmMuCisqLworCisjaWZuZGVmIEhFQURFUl9EMV9TUlRQX0gKKyNkZWZpbmUgSEVBREVSX0QxX1NSVFBfSAorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgICAgIAorI2RlZmluZSBTUlRQX0FFUzEyOF9DTV9TSEExXzgwIDB4MDAwMQorI2RlZmluZSBTUlRQX0FFUzEyOF9DTV9TSEExXzMyIDB4MDAwMgorI2RlZmluZSBTUlRQX0FFUzEyOF9GOF9TSEExXzgwIDB4MDAwMworI2RlZmluZSBTUlRQX0FFUzEyOF9GOF9TSEExXzMyIDB4MDAwNAorI2RlZmluZSBTUlRQX05VTExfU0hBMV84MCAgICAgIDB4MDAwNQorI2RlZmluZSBTUlRQX05VTExfU0hBMV8zMiAgICAgIDB4MDAwNgorCitpbnQgU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwKFNTTF9DVFggKmN0eCwgY29uc3QgY2hhciAqcHJvZmlsZXMpOworaW50IFNTTF9zZXRfdGxzZXh0X3VzZV9zcnRwKFNTTCAqY3R4LCBjb25zdCBjaGFyICpwcm9maWxlcyk7CitTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGUoU1NMICpzKTsKKworU1RBQ0tfT0YoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpICpTU0xfZ2V0X3NydHBfcHJvZmlsZXMoU1NMICpzc2wpOworU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUgKlNTTF9nZXRfc2VsZWN0ZWRfc3J0cF9wcm9maWxlKFNTTCAqcyk7CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3NzbC5oIGIvaW5jbHVkZS9vcGVuc3NsL3NzbC5oCmluZGV4IGQ4OGQyMmQuLjkwZDU1MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKQEAgLTI1Miw2ICsyNTIsNyBAQAogI2RlZmluZSBTU0xfVFhUX2tFRUNESAkJImtFRUNESCIKICNkZWZpbmUgU1NMX1RYVF9rUFNLICAgICAgICAgICAgImtQU0siCiAjZGVmaW5lIFNTTF9UWFRfa0dPU1QJCSJrR09TVCIKKyNkZWZpbmUgU1NMX1RYVF9rU1JQCQkia1NSUCIKIAogI2RlZmluZQlTU0xfVFhUX2FSU0EJCSJhUlNBIgogI2RlZmluZQlTU0xfVFhUX2FEU1MJCSJhRFNTIgpAQCAtMjc1LDYgKzI3Niw3IEBACiAjZGVmaW5lIFNTTF9UWFRfRUNEU0EJCSJFQ0RTQSIKICNkZWZpbmUgU1NMX1RYVF9LUkI1ICAgICAgCSJLUkI1IgogI2RlZmluZSBTU0xfVFhUX1BTSyAgICAgICAgICAgICAiUFNLIgorI2RlZmluZSBTU0xfVFhUX1NSUAkJIlNSUCIKIAogI2RlZmluZSBTU0xfVFhUX0RFUwkJIkRFUyIKICNkZWZpbmUgU1NMX1RYVF8zREVTCQkiM0RFUyIKQEAgLTI4NSw2ICsyODcsNyBAQAogI2RlZmluZSBTU0xfVFhUX0FFUzEyOAkJIkFFUzEyOCIKICNkZWZpbmUgU1NMX1RYVF9BRVMyNTYJCSJBRVMyNTYiCiAjZGVmaW5lIFNTTF9UWFRfQUVTCQkiQUVTIgorI2RlZmluZSBTU0xfVFhUX0FFU19HQ00JCSJBRVNHQ00iCiAjZGVmaW5lIFNTTF9UWFRfQ0FNRUxMSUExMjgJIkNBTUVMTElBMTI4IgogI2RlZmluZSBTU0xfVFhUX0NBTUVMTElBMjU2CSJDQU1FTExJQTI1NiIKICNkZWZpbmUgU1NMX1RYVF9DQU1FTExJQQkiQ0FNRUxMSUEiCkBAIC0yOTQsMTAgKzI5NywxNCBAQAogI2RlZmluZSBTU0xfVFhUX1NIQQkJIlNIQSIgLyogc2FtZSBhcyAiU0hBMSIgKi8KICNkZWZpbmUgU1NMX1RYVF9HT1NUOTQJCSJHT1NUOTQiIAogI2RlZmluZSBTU0xfVFhUX0dPU1Q4OU1BQwkJIkdPU1Q4OU1BQyIgCisjZGVmaW5lIFNTTF9UWFRfU0hBMjU2CQkiU0hBMjU2IgorI2RlZmluZSBTU0xfVFhUX1NIQTM4NAkJIlNIQTM4NCIKIAogI2RlZmluZSBTU0xfVFhUX1NTTFYyCQkiU1NMdjIiCiAjZGVmaW5lIFNTTF9UWFRfU1NMVjMJCSJTU0x2MyIKICNkZWZpbmUgU1NMX1RYVF9UTFNWMQkJIlRMU3YxIgorI2RlZmluZSBTU0xfVFhUX1RMU1YxXzEJCSJUTFN2MS4xIgorI2RlZmluZSBTU0xfVFhUX1RMU1YxXzIJCSJUTFN2MS4yIgogCiAjZGVmaW5lIFNTTF9UWFRfRVhQCQkiRVhQIgogI2RlZmluZSBTU0xfVFhUX0VYUE9SVAkJIkVYUE9SVCIKQEAgLTM1Niw5ICszNjMsMjkgQEAKICAqIGluIFNTTF9DVFguICovCiB0eXBlZGVmIHN0cnVjdCBzc2xfc3QgKnNzbF9jcm9ja19zdDsKIHR5cGVkZWYgc3RydWN0IHRsc19zZXNzaW9uX3RpY2tldF9leHRfc3QgVExTX1NFU1NJT05fVElDS0VUX0VYVDsKK3R5cGVkZWYgc3RydWN0IHNzbF9tZXRob2Rfc3QgU1NMX01FVEhPRDsKK3R5cGVkZWYgc3RydWN0IHNzbF9jaXBoZXJfc3QgU1NMX0NJUEhFUjsKK3R5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0IFNTTF9TRVNTSU9OOworCitERUNMQVJFX1NUQUNLX09GKFNTTF9DSVBIRVIpCisKKy8qIFNSVFAgcHJvdGVjdGlvbiBwcm9maWxlcyBmb3IgdXNlIHdpdGggdGhlIHVzZV9zcnRwIGV4dGVuc2lvbiAoUkZDIDU3NjQpKi8KK3R5cGVkZWYgc3RydWN0IHNydHBfcHJvdGVjdGlvbl9wcm9maWxlX3N0CisgICAgICAgeworICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgdW5zaWduZWQgbG9uZyBpZDsKKyAgICAgICB9IFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFOworCitERUNMQVJFX1NUQUNLX09GKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFKQorCit0eXBlZGVmIGludCAoKnRsc19zZXNzaW9uX3RpY2tldF9leHRfY2JfZm4pKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgdm9pZCAqYXJnKTsKK3R5cGVkZWYgaW50ICgqdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2ZuKShTU0wgKnMsIHZvaWQgKnNlY3JldCwgaW50ICpzZWNyZXRfbGVuLCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqcGVlcl9jaXBoZXJzLCBTU0xfQ0lQSEVSICoqY2lwaGVyLCB2b2lkICphcmcpOworCisKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCiAKIC8qIHVzZWQgdG8gaG9sZCBpbmZvIG9uIHRoZSBwYXJ0aWN1bGFyIGNpcGhlcnMgdXNlZCAqLwotdHlwZWRlZiBzdHJ1Y3Qgc3NsX2NpcGhlcl9zdAorc3RydWN0IHNzbF9jaXBoZXJfc3QKIAl7CiAJaW50IHZhbGlkOwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiB0ZXh0IG5hbWUgKi8KQEAgLTM3NSwxNSArNDAyLDExIEBACiAJdW5zaWduZWQgbG9uZyBhbGdvcml0aG0yOwkvKiBFeHRyYSBmbGFncyAqLwogCWludCBzdHJlbmd0aF9iaXRzOwkJLyogTnVtYmVyIG9mIGJpdHMgcmVhbGx5IHVzZWQgKi8KIAlpbnQgYWxnX2JpdHM7CQkJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGFsZ29yaXRobSAqLwotCX0gU1NMX0NJUEhFUjsKKwl9OwogCi1ERUNMQVJFX1NUQUNLX09GKFNTTF9DSVBIRVIpCi0KLXR5cGVkZWYgaW50ICgqdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9mbikoU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCB2b2lkICphcmcpOwotdHlwZWRlZiBpbnQgKCp0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfZm4pKFNTTCAqcywgdm9pZCAqc2VjcmV0LCBpbnQgKnNlY3JldF9sZW4sIFNUQUNLX09GKFNTTF9DSVBIRVIpICpwZWVyX2NpcGhlcnMsIFNTTF9DSVBIRVIgKipjaXBoZXIsIHZvaWQgKmFyZyk7CiAKIC8qIFVzZWQgdG8gaG9sZCBmdW5jdGlvbnMgZm9yIFNTTHYyIG9yIFNTTHYzL1RMU3YxIGZ1bmN0aW9ucyAqLwotdHlwZWRlZiBzdHJ1Y3Qgc3NsX21ldGhvZF9zdAorc3RydWN0IHNzbF9tZXRob2Rfc3QKIAl7CiAJaW50IHZlcnNpb247CiAJaW50ICgqc3NsX25ldykoU1NMICpzKTsKQEAgLTQxNiw3ICs0MzksNyBAQAogCWludCAoKnNzbF92ZXJzaW9uKSh2b2lkKTsKIAlsb25nICgqc3NsX2NhbGxiYWNrX2N0cmwpKFNTTCAqcywgaW50IGNiX2lkLCB2b2lkICgqZnApKHZvaWQpKTsKIAlsb25nICgqc3NsX2N0eF9jYWxsYmFja19jdHJsKShTU0xfQ1RYICpzLCBpbnQgY2JfaWQsIHZvaWQgKCpmcCkodm9pZCkpOwotCX0gU1NMX01FVEhPRDsKKwl9OwogCiAvKiBMZXRzIG1ha2UgdGhpcyBpbnRvIGFuIEFTTi4xIHR5cGUgc3RydWN0dXJlIGFzIGZvbGxvd3MKICAqIFNTTF9TRVNTSU9OX0lEIDo6PSBTRVFVRU5DRSB7CkBAIC00MzMsMTQgKzQ1NiwxNyBAQAogICoJU2Vzc2lvbl9JRF9jb250ZXh0IFsgNCBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgICAtLSB0aGUgU2Vzc2lvbiBJRCBjb250ZXh0CiAgKglWZXJpZnlfcmVzdWx0IFsgNSBdIEVYUExJQ0lUIElOVEVHRVIsICAgLS0gWDUwOV9WXy4uLiBjb2RlIGZvciBgUGVlcicKICAqCUhvc3ROYW1lIFsgNiBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgICAtLSBvcHRpb25hbCBIb3N0TmFtZSBmcm9tIHNlcnZlcm5hbWUgVExTIGV4dGVuc2lvbiAKLSAqCUVDUG9pbnRGb3JtYXRMaXN0IFsgNyBdIE9DVEVUIFNUUklORywgICAgIC0tIG9wdGlvbmFsIEVDIHBvaW50IGZvcm1hdCBsaXN0IGZyb20gVExTIGV4dGVuc2lvbgotICoJUFNLX2lkZW50aXR5X2hpbnQgWyA4IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HLCAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkgaGludAotICoJUFNLX2lkZW50aXR5IFsgOSBdIEVYUExJQ0lUIE9DVEVUIFNUUklORyAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkKKyAqCVBTS19pZGVudGl0eV9oaW50IFsgNyBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgLS0gb3B0aW9uYWwgUFNLIGlkZW50aXR5IGhpbnQKKyAqCVBTS19pZGVudGl0eSBbIDggXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsICAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkKKyAqCVRpY2tldF9saWZldGltZV9oaW50IFs5XSBFWFBMSUNJVCBJTlRFR0VSLCAtLSBzZXJ2ZXIncyBsaWZldGltZSBoaW50IGZvciBzZXNzaW9uIHRpY2tldAorICoJVGlja2V0IFsxMF0gICAgICAgICAgICAgRVhQTElDSVQgT0NURVQgU1RSSU5HLCAtLSBzZXNzaW9uIHRpY2tldCAoY2xpZW50cyBvbmx5KQorICoJQ29tcHJlc3Npb25fbWV0aCBbMTFdICAgRVhQTElDSVQgT0NURVQgU1RSSU5HLCAtLSBvcHRpb25hbCBjb21wcmVzc2lvbiBtZXRob2QKKyAqCVNSUF91c2VybmFtZSBbIDEyIF0gRVhQTElDSVQgT0NURVQgU1RSSU5HIC0tIG9wdGlvbmFsIFNSUCB1c2VybmFtZQogICoJfQogICogTG9vayBpbiBzc2wvc3NsX2FzbjEuYyBmb3IgbW9yZSBkZXRhaWxzCiAgKiBJJ20gdXNpbmcgRVhQTElDSVQgdGFncyBzbyBJIGNhbiByZWFkIHRoZSBkYW1uIHRoaW5ncyB1c2luZyBhc24xcGFyc2UgOi0pLgogICovCi10eXBlZGVmIHN0cnVjdCBzc2xfc2Vzc2lvbl9zdAorc3RydWN0IHNzbF9zZXNzaW9uX3N0CiAJewogCWludCBzc2xfdmVyc2lvbjsJLyogd2hhdCBzc2wgdmVyc2lvbiBzZXNzaW9uIGluZm8gaXMKIAkJCQkgKiBiZWluZyBrZXB0IGluIGhlcmU/ICovCkBAIC01MTIsOCArNTM4LDEyIEBACiAJc2l6ZV90CXRsc2V4dF90aWNrbGVuOwkJLyogU2Vzc2lvbiB0aWNrZXQgbGVuZ3RoICovCQogCWxvbmcgdGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludDsJLyogU2Vzc2lvbiBsaWZldGltZSBoaW50IGluIHNlY29uZHMgKi8KICNlbmRpZgotCX0gU1NMX1NFU1NJT047CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJY2hhciAqc3JwX3VzZXJuYW1lOworI2VuZGlmCisJfTsKIAorI2VuZGlmCiAKICNkZWZpbmUgU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRwkJCTB4MDAwMDAwMDFMCiAjZGVmaW5lIFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHCQkJMHgwMDAwMDAwMkwKQEAgLTUyNiw2ICs1NTYsNyBAQAogI2RlZmluZSBTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHCQkJMHgwMDAwMDA4MEwKICNkZWZpbmUgU1NMX09QX1RMU19ENV9CVUcJCQkJMHgwMDAwMDEwMEwKICNkZWZpbmUgU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRwkJCTB4MDAwMDAyMDBMCisjZGVmaW5lIFNTTF9PUF9OT19UTFN2MV8xCQkJCTB4MDAwMDA0MDBMCiAKIC8qIERpc2FibGUgU1NMIDMuMC9UTFMgMS4wIENCQyB2dWxuZXJhYmlsaXR5IHdvcmthcm91bmQgdGhhdCB3YXMgYWRkZWQKICAqIGluIE9wZW5TU0wgMC45LjZkLiAgVXN1YWxseSAoZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCkKQEAgLTUzNiw3ICs1NjcsNyBAQAogCiAvKiBTU0xfT1BfQUxMOiB2YXJpb3VzIGJ1ZyB3b3JrYXJvdW5kcyB0aGF0IHNob3VsZCBiZSByYXRoZXIgaGFybWxlc3MuCiAgKiAgICAgICAgICAgICBUaGlzIHVzZWQgdG8gYmUgMHgwMDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLwotI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwRkZGTAorI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwQkZGTAogCiAvKiBEVExTIG9wdGlvbnMgKi8KICNkZWZpbmUgU1NMX09QX05PX1FVRVJZX01UVSAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMEwKQEAgLTU3MiwxMSArNjAzLDE2IEBACiAjZGVmaW5lIFNTTF9PUF9OT19TU0x2MgkJCQkJMHgwMTAwMDAwMEwKICNkZWZpbmUgU1NMX09QX05PX1NTTHYzCQkJCQkweDAyMDAwMDAwTAogI2RlZmluZSBTU0xfT1BfTk9fVExTdjEJCQkJCTB4MDQwMDAwMDBMCisjZGVmaW5lIFNTTF9PUF9OT19UTFN2MV8yCQkJCTB4MDgwMDAwMDBMCiAKKy8qIFRoZXNlIG5leHQgdHdvIHdlcmUgbmV2ZXIgYWN0dWFsbHkgdXNlZCBmb3IgYW55dGhpbmcgc2luY2UgU1NMZWF5CisgKiB6YXAgc28gd2UgaGF2ZSBzb21lIG1vcmUgZmxhZ3MuCisgKi8KIC8qIFRoZSBuZXh0IGZsYWcgZGVsaWJlcmF0ZWx5IGNoYW5nZXMgdGhlIGNpcGhlcnRlc3QsIHRoaXMgaXMgYSBjaGVjawogICogZm9yIHRoZSBQS0NTIzEgYXR0YWNrICovCi0jZGVmaW5lIFNTTF9PUF9QS0NTMV9DSEVDS18xCQkJCTB4MDgwMDAwMDBMCi0jZGVmaW5lIFNTTF9PUF9QS0NTMV9DSEVDS18yCQkJCTB4MTAwMDAwMDBMCisjZGVmaW5lIFNTTF9PUF9QS0NTMV9DSEVDS18xCQkJCTB4MAorI2RlZmluZSBTU0xfT1BfUEtDUzFfQ0hFQ0tfMgkJCQkweDAKKwogI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHCQkJMHgyMDAwMDAwMEwKICNkZWZpbmUgU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUcJCTB4NDAwMDAwMDBMCiAvKiBNYWtlIHNlcnZlciBhZGQgc2VydmVyLWhlbGxvIGV4dGVuc2lvbiBmcm9tIGVhcmx5IHZlcnNpb24gb2YKQEAgLTY0NCwxMiArNjgwLDUzIEBACiAjZGVmaW5lIFNTTF9nZXRfc2VjdXJlX3JlbmVnb3RpYXRpb25fc3VwcG9ydChzc2wpIFwKIAlTU0xfY3RybCgoc3NsKSwgU1NMX0NUUkxfR0VUX1JJX1NVUFBPUlQsIDAsIE5VTEwpCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisjZGVmaW5lIFNTTF9oZWFydGJlYXQoc3NsKSBcCisgICAgICAgIFNTTF9jdHJsKChzc2wpLFNTTF9DVFJMX1RMU19FWFRfU0VORF9IRUFSVEJFQVQsMCxOVUxMKQorI2VuZGlmCisKIHZvaWQgU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrKFNTTF9DVFggKmN0eCwgdm9pZCAoKmNiKShpbnQgd3JpdGVfcCwgaW50IHZlcnNpb24sIGludCBjb250ZW50X3R5cGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgU1NMICpzc2wsIHZvaWQgKmFyZykpOwogdm9pZCBTU0xfc2V0X21zZ19jYWxsYmFjayhTU0wgKnNzbCwgdm9pZCAoKmNiKShpbnQgd3JpdGVfcCwgaW50IHZlcnNpb24sIGludCBjb250ZW50X3R5cGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgU1NMICpzc2wsIHZvaWQgKmFyZykpOwogI2RlZmluZSBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2tfYXJnKGN0eCwgYXJnKSBTU0xfQ1RYX2N0cmwoKGN0eCksIFNTTF9DVFJMX1NFVF9NU0dfQ0FMTEJBQ0tfQVJHLCAwLCAoYXJnKSkKICNkZWZpbmUgU1NMX3NldF9tc2dfY2FsbGJhY2tfYXJnKHNzbCwgYXJnKSBTU0xfY3RybCgoc3NsKSwgU1NMX0NUUkxfU0VUX01TR19DQUxMQkFDS19BUkcsIDAsIChhcmcpKQogCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCisKK3R5cGVkZWYgc3RydWN0IHNycF9jdHhfc3QKKwl7CisJLyogcGFyYW0gZm9yIGFsbCB0aGUgY2FsbGJhY2tzICovCisJdm9pZCAqU1JQX2NiX2FyZzsKKwkvKiBzZXQgY2xpZW50IEhlbGxvIGxvZ2luIGNhbGxiYWNrICovCisJaW50ICgqVExTX2V4dF9zcnBfdXNlcm5hbWVfY2FsbGJhY2spKFNTTCAqLCBpbnQgKiwgdm9pZCAqKTsKKwkvKiBzZXQgU1JQIE4vZyBwYXJhbSBjYWxsYmFjayBmb3IgdmVyaWZpY2F0aW9uICovCisJaW50ICgqU1JQX3ZlcmlmeV9wYXJhbV9jYWxsYmFjaykoU1NMICosIHZvaWQgKik7CisJLyogc2V0IFNSUCBjbGllbnQgcGFzc3dkIGNhbGxiYWNrICovCisJY2hhciAqKCpTUlBfZ2l2ZV9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjaykoU1NMICosIHZvaWQgKik7CisKKwljaGFyICpsb2dpbjsKKwlCSUdOVU0gKk4sKmcsKnMsKkIsKkE7CisJQklHTlVNICphLCpiLCp2OworCWNoYXIgKmluZm87CisJaW50IHN0cmVuZ3RoOworCisJdW5zaWduZWQgbG9uZyBzcnBfTWFzazsKKwl9IFNSUF9DVFg7CisKKyNlbmRpZgorCisvKiBzZWUgdGxzX3NycC5jICovCitpbnQgU1NMX1NSUF9DVFhfaW5pdChTU0wgKnMpOworaW50IFNTTF9DVFhfU1JQX0NUWF9pbml0KFNTTF9DVFggKmN0eCk7CitpbnQgU1NMX1NSUF9DVFhfZnJlZShTU0wgKmN0eCk7CitpbnQgU1NMX0NUWF9TUlBfQ1RYX2ZyZWUoU1NMX0NUWCAqY3R4KTsKK2ludCBTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lKFNTTCAqcywgaW50ICphZCk7CitpbnQgU1JQX2dlbmVyYXRlX3NlcnZlcl9tYXN0ZXJfc2VjcmV0KFNTTCAqcyx1bnNpZ25lZCBjaGFyICptYXN0ZXJfa2V5KTsKK2ludCBTUlBfQ2FsY19BX3BhcmFtKFNTTCAqcyk7CitpbnQgU1JQX2dlbmVyYXRlX2NsaWVudF9tYXN0ZXJfc2VjcmV0KFNTTCAqcyx1bnNpZ25lZCBjaGFyICptYXN0ZXJfa2V5KTsKKworI2VuZGlmCiAKICNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX01TRE9TKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikKICNkZWZpbmUgU1NMX01BWF9DRVJUX0xJU1RfREVGQVVMVCAxMDI0KjMwIC8qIDMwayBtYXggY2VydCBsaXN0IDotKSAqLwpAQCAtNjc1LDcgKzc1MiwxMSBAQAogdHlwZWRlZiBpbnQgKCpHRU5fU0VTU0lPTl9DQikoY29uc3QgU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmlkLAogCQkJCXVuc2lnbmVkIGludCAqaWRfbGVuKTsKIAotdHlwZWRlZiBzdHJ1Y3Qgc3NsX2NvbXBfc3QKK3R5cGVkZWYgc3RydWN0IHNzbF9jb21wX3N0IFNTTF9DT01QOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU1NMX0lOVEVSTgorCitzdHJ1Y3Qgc3NsX2NvbXBfc3QKIAl7CiAJaW50IGlkOwogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC02ODQsNyArNzY1LDcgQEAKICNlbHNlCiAJY2hhciAqbWV0aG9kOwogI2VuZGlmCi0JfSBTU0xfQ09NUDsKKwl9OwogCiBERUNMQVJFX1NUQUNLX09GKFNTTF9DT01QKQogREVDTEFSRV9MSEFTSF9PRihTU0xfU0VTU0lPTik7CkBAIC04NTMsMTEgKzkzNCwzMSBAQAogCS8qIENhbGxiYWNrIGZvciBzdGF0dXMgcmVxdWVzdCAqLwogCWludCAoKnRsc2V4dF9zdGF0dXNfY2IpKFNTTCAqc3NsLCB2b2lkICphcmcpOwogCXZvaWQgKnRsc2V4dF9zdGF0dXNfYXJnOwotCiAJLyogZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0IGluZm9ybWF0aW9uICovCiAJaW50ICgqdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2spKFNTTCAqLCB2b2lkICpwZWVyaW5wdXQsIHNpemVfdCBsZW4sIHZvaWQgKmFyZyk7CiAJdm9pZCAqdGxzZXh0X29wYXF1ZV9wcmZfaW5wdXRfY2FsbGJhY2tfYXJnOworI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19QU0sKKwljaGFyICpwc2tfaWRlbnRpdHlfaGludDsKKwl1bnNpZ25lZCBpbnQgKCpwc2tfY2xpZW50X2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaGludCwgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGludCBtYXhfaWRlbnRpdHlfbGVuLCB1bnNpZ25lZCBjaGFyICpwc2ssCisJCXVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisJdW5zaWduZWQgaW50ICgqcHNrX3NlcnZlcl9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmlkZW50aXR5LAorCQl1bnNpZ25lZCBjaGFyICpwc2ssIHVuc2lnbmVkIGludCBtYXhfcHNrX2xlbik7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0JVRl9GUkVFTElTVFMKKyNkZWZpbmUgU1NMX01BWF9CVUZfRlJFRUxJU1RfTEVOX0RFRkFVTFQgMzIKKwl1bnNpZ25lZCBpbnQgZnJlZWxpc3RfbWF4X2xlbjsKKwlzdHJ1Y3Qgc3NsM19idWZfZnJlZWxpc3Rfc3QgKndidWZfZnJlZWxpc3Q7CisJc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X3N0ICpyYnVmX2ZyZWVsaXN0OworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJU1JQX0NUWCBzcnBfY3R4OyAvKiBjdHggZm9yIFNSUCBhdXRoZW50aWNhdGlvbiAqLworI2VuZGlmCisKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKICMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJLyogTmV4dCBwcm90b2NvbCBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbiAqLwogCS8qIChmb3IgZXhwZXJpbWVudGFsIE5QTiBleHRlbnNpb24pLiAqLwpAQCAtODc2LDI1ICs5NzcsMTMgQEAKIAkJCQkgICAgdm9pZCAqYXJnKTsKIAl2b2lkICpuZXh0X3Byb3RvX3NlbGVjdF9jYl9hcmc7CiAjIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBPUEVOU1NMX05PX1BTSwotCWNoYXIgKnBza19pZGVudGl0eV9oaW50OwotCXVuc2lnbmVkIGludCAoKnBza19jbGllbnRfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICpoaW50LCBjaGFyICppZGVudGl0eSwKLQkJdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKLQkJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKTsKLQl1bnNpZ25lZCBpbnQgKCpwc2tfc2VydmVyX2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaWRlbnRpdHksCi0JCXVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKTsKLSNlbmRpZgotCi0jaWZuZGVmIE9QRU5TU0xfTk9fQlVGX0ZSRUVMSVNUUwotI2RlZmluZSBTU0xfTUFYX0JVRl9GUkVFTElTVF9MRU5fREVGQVVMVCAzMgotCXVuc2lnbmVkIGludCBmcmVlbGlzdF9tYXhfbGVuOwotCXN0cnVjdCBzc2wzX2J1Zl9mcmVlbGlzdF9zdCAqd2J1Zl9mcmVlbGlzdDsKLQlzdHJ1Y3Qgc3NsM19idWZfZnJlZWxpc3Rfc3QgKnJidWZfZnJlZWxpc3Q7CisgICAgICAgIC8qIFNSVFAgcHJvZmlsZXMgd2UgYXJlIHdpbGxpbmcgdG8gZG8gZnJvbSBSRkMgNTc2NCAqLworICAgICAgICBTVEFDS19PRihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkgKnNydHBfcHJvZmlsZXM7ICAKICNlbmRpZgogCX07CiAKKyNlbmRpZgorCiAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX09GRgkJCTB4MDAwMAogI2RlZmluZSBTU0xfU0VTU19DQUNIRV9DTElFTlQJCQkweDAwMDEKICNkZWZpbmUgU1NMX1NFU1NfQ0FDSEVfU0VSVkVSCQkJMHgwMDAyCkBAIC05NTIsMjQgKzEwNDEsMjYgQEAKIAkJCQkJICAgaW50ICgqY2IpIChTU0wgKnNzbCwKIAkJCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipvdXQsCiAJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKm91dGxlbiwKLQkJCQkJCSAgICAgIHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7CisJCQkJCQkgICAgICB2b2lkICphcmcpLAorCQkJCQkgICB2b2lkICphcmcpOwogdm9pZCBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihTU0xfQ1RYICpzLAotCQkJCSAgICAgIGludCAoKmNiKSAoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKipvdXQsCisJCQkJICAgICAgaW50ICgqY2IpIChTU0wgKnNzbCwKKwkJCQkJCSB1bnNpZ25lZCBjaGFyICoqb3V0LAogCQkJCQkJIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgaW5sZW4sIHZvaWQgKmFyZyksCisJCQkJCQkgdW5zaWduZWQgaW50IGlubGVuLAorCQkJCQkJIHZvaWQgKmFyZyksCiAJCQkJICAgICAgdm9pZCAqYXJnKTsKIAogaW50IFNTTF9zZWxlY3RfbmV4dF9wcm90byh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCiAJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4sCiAJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaWVudCwgdW5zaWduZWQgaW50IGNsaWVudF9sZW4pOwotdm9pZCBTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQoY29uc3QgU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YSwKLQkJCQkgICAgdW5zaWduZWQgKmxlbik7Cit2b2lkIFNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZChjb25zdCBTU0wgKnMsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkYXRhLCB1bnNpZ25lZCAqbGVuKTsKIAogI2RlZmluZSBPUEVOU1NMX05QTl9VTlNVUFBPUlRFRAkwCiAjZGVmaW5lIE9QRU5TU0xfTlBOX05FR09USUFURUQJMQogI2RlZmluZSBPUEVOU1NMX05QTl9OT19PVkVSTEFQCTIKLQogI2VuZGlmCiAKICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKQEAgLTEwMTEsNiArMTEwMiw4IEBACiAjZGVmaW5lIFNTTF9NQUNfRkxBR19SRUFEX01BQ19TVFJFQU0gMQogI2RlZmluZSBTU0xfTUFDX0ZMQUdfV1JJVEVfTUFDX1NUUkVBTSAyCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCisKIHN0cnVjdCBzc2xfc3QKIAl7CiAJLyogcHJvdG9jb2wgdmVyc2lvbgpAQCAtMTA1NSw5ICsxMTQ4LDcgQEAKIAogCWludCBzZXJ2ZXI7CS8qIGFyZSB3ZSB0aGUgc2VydmVyIHNpZGU/IC0gbW9zdGx5IHVzZWQgYnkgU1NMX2NsZWFyKi8KIAotCWludCBuZXdfc2Vzc2lvbjsvKiAxIGlmIHdlIGFyZSB0byB1c2UgYSBuZXcgc2Vzc2lvbi4KLQkgICAgICAgICAgICAgICAgICogMiBpZiB3ZSBhcmUgYSBzZXJ2ZXIgYW5kIGFyZSBpbnNpZGUgYSBoYW5kc2hha2UKLQkgICAgICAgICAgICAgICAgICogICAoaS5lLiBub3QganVzdCBzZW5kaW5nIGEgSGVsbG9SZXF1ZXN0KQorCWludCBuZXdfc2Vzc2lvbjsvKiBHZW5lcmF0ZSBhIG5ldyBzZXNzaW9uIG9yIHJldXNlIGFuIG9sZCBvbmUuCiAJICAgICAgICAgICAgICAgICAqIE5COiBGb3Igc2VydmVycywgdGhlICduZXcnIHNlc3Npb24gbWF5IGFjdHVhbGx5IGJlIGEgcHJldmlvdXNseQogCSAgICAgICAgICAgICAgICAgKiBjYWNoZWQgc2Vzc2lvbiBvciBldmVuIHRoZSBwcmV2aW91cyBzZXNzaW9uIHVubGVzcwogCSAgICAgICAgICAgICAgICAgKiBTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04gaXMgc2V0ICovCkBAIC0xMjQ0LDExICsxMzM1LDMyIEBACiAjZW5kaWYKIAogI2RlZmluZSBzZXNzaW9uX2N0eCBpbml0aWFsX2N0eAorCisJU1RBQ0tfT0YoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpICpzcnRwX3Byb2ZpbGVzOyAgLyogV2hhdCB3ZSdsbCBkbyAqLworCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpzcnRwX3Byb2ZpbGU7ICAgICAgICAgICAgLyogV2hhdCdzIGJlZW4gY2hvc2VuICovCisKKwl1bnNpZ25lZCBpbnQgdGxzZXh0X2hlYXJ0YmVhdDsgIC8qIElzIHVzZSBvZiB0aGUgSGVhcnRiZWF0IGV4dGVuc2lvbiBuZWdvdGlhdGVkPworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogZGlzYWJsZWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IGVuYWJsZWQKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6IGVuYWJsZWQsIGJ1dCBub3QgYWxsb3dlZCB0byBzZW5kIFJlcXVlc3RzCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1bnNpZ25lZCBpbnQgdGxzZXh0X2hiX3BlbmRpbmc7IC8qIEluZGljYXRlcyBpZiBhIEhlYXJ0YmVhdFJlcXVlc3QgaXMgaW4gZmxpZ2h0ICovCisJdW5zaWduZWQgaW50IHRsc2V4dF9oYl9zZXE7ICAgICAvKiBIZWFydGJlYXRSZXF1ZXN0IHNlcXVlbmNlIG51bWJlciAqLwogI2Vsc2UKICNkZWZpbmUgc2Vzc2lvbl9jdHggY3R4CiAjZW5kaWYgLyogT1BFTlNTTF9OT19UTFNFWFQgKi8KKworCWludCByZW5lZ290aWF0ZTsvKiAxIGlmIHdlIGFyZSByZW5lZ290aWF0aW5nLgorCSAgICAgICAgICAgICAgICAgKiAyIGlmIHdlIGFyZSBhIHNlcnZlciBhbmQgYXJlIGluc2lkZSBhIGhhbmRzaGFrZQorCSAgICAgICAgICAgICAgICAgKiAoaS5lLiBub3QganVzdCBzZW5kaW5nIGEgSGVsbG9SZXF1ZXN0KSAqLworCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJU1JQX0NUWCBzcnBfY3R4OyAvKiBjdHggZm9yIFNSUCBhdXRoZW50aWNhdGlvbiAqLworI2VuZGlmCiAJfTsKIAorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkBAIC0xMjU4LDYgKzEzNzAsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvdGxzMS5oPiAvKiBUaGlzIGlzIG1vc3RseSBzc2x2MyB3aXRoIGEgZmV3IHR3ZWFrcyAqLwogI2luY2x1ZGUgPG9wZW5zc2wvZHRsczEuaD4gLyogRGF0YWdyYW0gVExTICovCiAjaW5jbHVkZSA8b3BlbnNzbC9zc2wyMy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3J0cC5oPiAgLyogU3VwcG9ydCBmb3IgdGhlIHVzZV9zcnRwIGV4dGVuc2lvbiAqLwogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTE0NzYsNiArMTU4OSwyMCBAQAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1NUQVRVU19SRVFfT0NTUF9SRVNQCTcxCiAKICNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU0VYVF9USUNLRVRfS0VZX0NCCTcyCisKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1VTRVJOQU1FX0NCCTc1CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9TUlBfVkVSSUZZX1BBUkFNX0NCCQk3NgorI2RlZmluZSBTU0xfQ1RSTF9TRVRfU1JQX0dJVkVfQ0xJRU5UX1BXRF9DQgkJNzcKKworI2RlZmluZSBTU0xfQ1RSTF9TRVRfU1JQX0FSRwkJNzgKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1VTRVJOQU1FCQk3OQorI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTX0VYVF9TUlBfU1RSRU5HVEgJCTgwCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNfRVhUX1NSUF9QQVNTV09SRAkJODEKKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisjZGVmaW5lIFNTTF9DVFJMX1RMU19FWFRfU0VORF9IRUFSVEJFQVQJCQkJODUKKyNkZWZpbmUgU1NMX0NUUkxfR0VUX1RMU19FWFRfSEVBUlRCRUFUX1BFTkRJTkcJCTg2CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNfRVhUX0hFQVJUQkVBVF9OT19SRVFVRVNUUwk4NworI2VuZGlmCiAjZW5kaWYKIAogI2RlZmluZSBEVExTX0NUUkxfR0VUX1RJTUVPVVQJCTczCkBAIC0xNDg2LDYgKzE2MTMsOSBAQAogI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9PUFRJT05TCQkJNzcKICNkZWZpbmUgU1NMX0NUUkxfQ0xFQVJfTU9ERQkJCTc4CiAKKyNkZWZpbmUgU1NMX0NUUkxfR0VUX0VYVFJBX0NIQUlOX0NFUlRTCQk4MgorI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9DRVJUUwk4MworCiAjZGVmaW5lIERUTFN2MV9nZXRfdGltZW91dChzc2wsIGFyZykgXAogCVNTTF9jdHJsKHNzbCxEVExTX0NUUkxfR0VUX1RJTUVPVVQsMCwgKHZvaWQgKilhcmcpCiAjZGVmaW5lIERUTFN2MV9oYW5kbGVfdGltZW91dChzc2wpIFwKQEAgLTE1MjIsNiArMTY1MiwxMCBAQAogCiAjZGVmaW5lIFNTTF9DVFhfYWRkX2V4dHJhX2NoYWluX2NlcnQoY3R4LHg1MDkpIFwKIAlTU0xfQ1RYX2N0cmwoY3R4LFNTTF9DVFJMX0VYVFJBX0NIQUlOX0NFUlQsMCwoY2hhciAqKXg1MDkpCisjZGVmaW5lIFNTTF9DVFhfZ2V0X2V4dHJhX2NoYWluX2NlcnRzKGN0eCxweDUwOSkgXAorCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfR0VUX0VYVFJBX0NIQUlOX0NFUlRTLDAscHg1MDkpCisjZGVmaW5lIFNTTF9DVFhfY2xlYXJfZXh0cmFfY2hhaW5fY2VydHMoY3R4KSBcCisJU1NMX0NUWF9jdHJsKGN0eCxTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9DRVJUUywwLE5VTEwpCiAKICNpZm5kZWYgT1BFTlNTTF9OT19CSU8KIEJJT19NRVRIT0QgKkJJT19mX3NzbCh2b2lkKTsKQEAgLTE1NDksNyArMTY4Myw3IEBACiBpbnQJU1NMX0NJUEhFUl9nZXRfYml0cyhjb25zdCBTU0xfQ0lQSEVSICpjLGludCAqYWxnX2JpdHMpOwogY2hhciAqCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24oY29uc3QgU1NMX0NJUEhFUiAqYyk7CiBjb25zdCBjaGFyICoJU1NMX0NJUEhFUl9nZXRfbmFtZShjb25zdCBTU0xfQ0lQSEVSICpjKTsKLWNvbnN0IGNoYXIgKglTU0xfQ0lQSEVSX2F1dGhlbnRpY2F0aW9uX21ldGhvZChjb25zdCBTU0xfQ0lQSEVSICpjKTsKK3Vuc2lnbmVkIGxvbmcgCVNTTF9DSVBIRVJfZ2V0X2lkKGNvbnN0IFNTTF9DSVBIRVIgKmMpOwogCiBpbnQJU1NMX2dldF9mZChjb25zdCBTU0wgKnMpOwogaW50CVNTTF9nZXRfcmZkKGNvbnN0IFNTTCAqcyk7CkBAIC0xNjE5LDExICsxNzUzLDE1IEBACiBsb25nCVNTTF9TRVNTSU9OX2dldF90aW1lb3V0KGNvbnN0IFNTTF9TRVNTSU9OICpzKTsKIGxvbmcJU1NMX1NFU1NJT05fc2V0X3RpbWVvdXQoU1NMX1NFU1NJT04gKnMsIGxvbmcgdCk7CiB2b2lkCVNTTF9jb3B5X3Nlc3Npb25faWQoU1NMICp0byxjb25zdCBTU0wgKmZyb20pOworWDUwOSAqU1NMX1NFU1NJT05fZ2V0MF9wZWVyKFNTTF9TRVNTSU9OICpzKTsKK2ludCBTU0xfU0VTU0lPTl9zZXQxX2lkX2NvbnRleHQoU1NMX1NFU1NJT04gKnMsY29uc3QgdW5zaWduZWQgY2hhciAqc2lkX2N0eCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2lkX2N0eF9sZW4pOwogCiBTU0xfU0VTU0lPTiAqU1NMX1NFU1NJT05fbmV3KHZvaWQpOwogY29uc3QgdW5zaWduZWQgY2hhciAqU1NMX1NFU1NJT05fZ2V0X2lkKGNvbnN0IFNTTF9TRVNTSU9OICpzLAogCQkJCQl1bnNpZ25lZCBpbnQgKmxlbik7CiBjb25zdCBjaGFyICoJU1NMX1NFU1NJT05fZ2V0X3ZlcnNpb24oY29uc3QgU1NMX1NFU1NJT04gKnMpOwordW5zaWduZWQgaW50IFNTTF9TRVNTSU9OX2dldF9jb21wcmVzc19pZChjb25zdCBTU0xfU0VTU0lPTiAqcyk7CiAjaWZuZGVmIE9QRU5TU0xfTk9fRlBfQVBJCiBpbnQJU1NMX1NFU1NJT05fcHJpbnRfZnAoRklMRSAqZnAsY29uc3QgU1NMX1NFU1NJT04gKnNlcyk7CiAjZW5kaWYKQEAgLTE2ODcsNiArMTgyNSwzMCBAQAogaW50IFNTTF9DVFhfc2V0MV9wYXJhbShTU0xfQ1RYICpjdHgsIFg1MDlfVkVSSUZZX1BBUkFNICp2cG0pOwogaW50IFNTTF9zZXQxX3BhcmFtKFNTTCAqc3NsLCBYNTA5X1ZFUklGWV9QQVJBTSAqdnBtKTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAoraW50IFNTTF9DVFhfc2V0X3NycF91c2VybmFtZShTU0xfQ1RYICpjdHgsY2hhciAqbmFtZSk7CitpbnQgU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkKFNTTF9DVFggKmN0eCxjaGFyICpwYXNzd29yZCk7CitpbnQgU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoKFNTTF9DVFggKmN0eCwgaW50IHN0cmVuZ3RoKTsKK2ludCBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCisJCQkJCWNoYXIgKigqY2IpKFNTTCAqLHZvaWQgKikpOworaW50IFNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2soU1NMX0NUWCAqY3R4LAorCQkJCQkgIGludCAoKmNiKShTU0wgKix2b2lkICopKTsKK2ludCBTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWVfY2FsbGJhY2soU1NMX0NUWCAqY3R4LAorCQkJCSAgICAgIGludCAoKmNiKShTU0wgKixpbnQgKix2b2lkICopKTsKK2ludCBTU0xfQ1RYX3NldF9zcnBfY2JfYXJnKFNTTF9DVFggKmN0eCwgdm9pZCAqYXJnKTsKKworaW50IFNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbShTU0wgKnMsIGNvbnN0IEJJR05VTSAqTiwgY29uc3QgQklHTlVNICpnLAorCQkJICAgICBCSUdOVU0gKnNhLCBCSUdOVU0gKnYsIGNoYXIgKmluZm8pOworaW50IFNTTF9zZXRfc3JwX3NlcnZlcl9wYXJhbV9wdyhTU0wgKnMsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MsCisJCQkJY29uc3QgY2hhciAqZ3JwKTsKKworQklHTlVNICpTU0xfZ2V0X3NycF9nKFNTTCAqcyk7CitCSUdOVU0gKlNTTF9nZXRfc3JwX04oU1NMICpzKTsKKworY2hhciAqU1NMX2dldF9zcnBfdXNlcm5hbWUoU1NMICpzKTsKK2NoYXIgKlNTTF9nZXRfc3JwX3VzZXJpbmZvKFNTTCAqcyk7CisjZW5kaWYKKwogdm9pZAlTU0xfZnJlZShTU0wgKnNzbCk7CiBpbnQgCVNTTF9hY2NlcHQoU1NMICpzc2wpOwogaW50IAlTU0xfY29ubmVjdChTU0wgKnNzbCk7CkBAIC0xNzIyLDYgKzE4ODQsMTUgQEAKIGNvbnN0IFNTTF9NRVRIT0QgKlRMU3YxX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KIGNvbnN0IFNTTF9NRVRIT0QgKlRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjAgKi8KIAorY29uc3QgU1NMX01FVEhPRCAqVExTdjFfMV9tZXRob2Qodm9pZCk7CQkvKiBUTFN2MS4xICovCitjb25zdCBTU0xfTUVUSE9EICpUTFN2MV8xX3NlcnZlcl9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjEgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxXzFfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogVExTdjEuMSAqLworCitjb25zdCBTU0xfTUVUSE9EICpUTFN2MV8yX21ldGhvZCh2b2lkKTsJCS8qIFRMU3YxLjIgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxXzJfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogVExTdjEuMiAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfMl9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBUTFN2MS4yICovCisKKwogY29uc3QgU1NMX01FVEhPRCAqRFRMU3YxX21ldGhvZCh2b2lkKTsJCS8qIERUTFN2MS4wICovCiBjb25zdCBTU0xfTUVUSE9EICpEVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogRFRMU3YxLjAgKi8KIGNvbnN0IFNTTF9NRVRIT0QgKkRUTFN2MV9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLwpAQCAtMTczMCw2ICsxOTAxLDcgQEAKIAogaW50IFNTTF9kb19oYW5kc2hha2UoU1NMICpzKTsKIGludCBTU0xfcmVuZWdvdGlhdGUoU1NMICpzKTsKK2ludCBTU0xfcmVuZWdvdGlhdGVfYWJicmV2aWF0ZWQoU1NMICpzKTsKIGludCBTU0xfcmVuZWdvdGlhdGVfcGVuZGluZyhTU0wgKnMpOwogaW50IFNTTF9zaHV0ZG93bihTU0wgKnMpOwogCkBAIC0xNzgxLDYgKzE5NTMsNyBAQAogCQkJICAgdm9pZCAoKmNiKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKSk7CiB2b2lkICgqU1NMX2dldF9pbmZvX2NhbGxiYWNrKGNvbnN0IFNTTCAqc3NsKSkoY29uc3QgU1NMICpzc2wsaW50IHR5cGUsaW50IHZhbCk7CiBpbnQgU1NMX3N0YXRlKGNvbnN0IFNTTCAqc3NsKTsKK3ZvaWQgU1NMX3NldF9zdGF0ZShTU0wgKnNzbCwgaW50IHN0YXRlKTsKIAogdm9pZCBTU0xfc2V0X3ZlcmlmeV9yZXN1bHQoU1NMICpzc2wsbG9uZyB2KTsKIGxvbmcgU1NMX2dldF92ZXJpZnlfcmVzdWx0KGNvbnN0IFNTTCAqc3NsKTsKQEAgLTE4ODEsNiArMjA1NCw5IEBACiAvKiBQcmUtc2hhcmVkIHNlY3JldCBzZXNzaW9uIHJlc3VtcHRpb24gZnVuY3Rpb25zICovCiBpbnQgU1NMX3NldF9zZXNzaW9uX3NlY3JldF9jYihTU0wgKnMsIHRsc19zZXNzaW9uX3NlY3JldF9jYl9mbiB0bHNfc2Vzc2lvbl9zZWNyZXRfY2IsIHZvaWQgKmFyZyk7CiAKK3ZvaWQgU1NMX3NldF9kZWJ1ZyhTU0wgKnMsIGludCBkZWJ1Zyk7CitpbnQgU1NMX2NhY2hlX2hpdChTU0wgKnMpOworCiAvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwogLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgpAQCAtMTkwMCw3ICsyMDc2LDYgQEAKICNkZWZpbmUgU1NMX0ZfRFRMUzFfQUNDRVBUCQkJCSAyNDYKICNkZWZpbmUgU1NMX0ZfRFRMUzFfQUREX0NFUlRfVE9fQlVGCQkJIDI5NQogI2RlZmluZSBTU0xfRl9EVExTMV9CVUZGRVJfUkVDT1JECQkJIDI0NwotI2RlZmluZSBTU0xfRl9EVExTMV9DSEVDS19USU1FT1VUX05VTQkJCSAzMDUKICNkZWZpbmUgU1NMX0ZfRFRMUzFfQ0xJRU5UX0hFTExPCQkJIDI0OAogI2RlZmluZSBTU0xfRl9EVExTMV9DT05ORUNUCQkJCSAyNDkKICNkZWZpbmUgU1NMX0ZfRFRMUzFfRU5DCQkJCQkgMjUwCkBAIC0xOTA5LDYgKzIwODQsNyBAQAogI2RlZmluZSBTU0xfRl9EVExTMV9HRVRfTUVTU0FHRV9GUkFHTUVOVAkJIDI1MwogI2RlZmluZSBTU0xfRl9EVExTMV9HRVRfUkVDT1JECQkJCSAyNTQKICNkZWZpbmUgU1NMX0ZfRFRMUzFfSEFORExFX1RJTUVPVVQJCQkgMjk3CisjZGVmaW5lIFNTTF9GX0RUTFMxX0hFQVJUQkVBVAkJCQkgMzA1CiAjZGVmaW5lIFNTTF9GX0RUTFMxX09VVFBVVF9DRVJUX0NIQUlOCQkJIDI1NQogI2RlZmluZSBTU0xfRl9EVExTMV9QUkVQUk9DRVNTX0ZSQUdNRU5UCQkJIDI4OAogI2RlZmluZSBTU0xfRl9EVExTMV9QUk9DRVNTX09VVF9PRl9TRVFfTUVTU0FHRQkJIDI1NgpAQCAtMTk3Nyw3ICsyMTUzLDcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFCQkJIDE0MQogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9NRVNTQUdFCQkJCSAxNDIKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfTkVXX1NFU1NJT05fVElDS0VUCQkgMjgzCi0jZGVmaW5lIFNTTF9GX1NTTDNfR0VUX05FWFRfUFJPVE8JCQkgMzA0CisjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX05FWFRfUFJPVE8JCQkgMzA2CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1JFQ09SRAkJCQkgMTQzCiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9DRVJUSUZJQ0FURQkJIDE0NAogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9TRVJWRVJfRE9ORQkJCSAxNDUKQEAgLTIwMDIsMTAgKzIxNzgsMTIgQEAKICNkZWZpbmUgU1NMX0ZfU1NMM19XUklURV9QRU5ESU5HCQkJIDE1OQogI2RlZmluZSBTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMjk4CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjc3CisjZGVmaW5lIFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhUCQkgMzA3CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfRElSX0NFUlRfU1VCSkVDVFNfVE9fU1RBQ0sJIDIxNQogI2RlZmluZSBTU0xfRl9TU0xfQUREX0ZJTEVfQ0VSVF9TVUJKRUNUU19UT19TVEFDSwkgMjE2CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fUkVORUdPVElBVEVfRVhUCSAyOTkKICNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzgKKyNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQJCSAzMDgKICNkZWZpbmUgU1NMX0ZfU1NMX0JBRF9NRVRIT0QJCQkJIDE2MAogI2RlZmluZSBTU0xfRl9TU0xfQllURVNfVE9fQ0lQSEVSX0xJU1QJCQkgMTYxCiAjZGVmaW5lIFNTTF9GX1NTTF9DRVJUX0RVUAkJCQkgMjIxCkBAIC0yMDIyLDYgKzIyMDAsNyBAQAogI2RlZmluZSBTU0xfRl9TU0xfQ1JFQVRFX0NJUEhFUl9MSVNUCQkJIDE2NgogI2RlZmluZSBTU0xfRl9TU0xfQ1RSTAkJCQkJIDIzMgogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX0NIRUNLX1BSSVZBVEVfS0VZCQkJIDE2OAorI2RlZmluZSBTU0xfRl9TU0xfQ1RYX01BS0VfUFJPRklMRVMJCQkgMzA5CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfTkVXCQkJCSAxNjkKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9TRVRfQ0lQSEVSX0xJU1QJCQkgMjY5CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfU0VUX0NMSUVOVF9DRVJUX0VOR0lORQkJIDI5MApAQCAtMjA1MCw4ICsyMjI5LDEwIEBACiAjZGVmaW5lIFNTTF9GX1NTTF9ORVcJCQkJCSAxODYKICNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMzAwCiAjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQJCSAzMDIKKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1VTRV9TUlRQX0VYVAkgMzEwCiAjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQJIDMwMQogI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVExTRVhUCQkgMzAzCisjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQJIDMxMQogI2RlZmluZSBTU0xfRl9TU0xfUEVFSwkJCQkJIDI3MAogI2RlZmluZSBTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQJCSAyODEKICNkZWZpbmUgU1NMX0ZfU1NMX1BSRVBBUkVfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjgyCkBAIC0yMDYwLDYgKzIyNDEsNyBAQAogI2RlZmluZSBTU0xfRl9TU0xfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE4OAogI2RlZmluZSBTU0xfRl9TU0xfU0VTU0lPTl9ORVcJCQkJIDE4OQogI2RlZmluZSBTU0xfRl9TU0xfU0VTU0lPTl9QUklOVF9GUAkJCSAxOTAKKyNkZWZpbmUgU1NMX0ZfU1NMX1NFU1NJT05fU0VUMV9JRF9DT05URVhUCQkgMzEyCiAjZGVmaW5lIFNTTF9GX1NTTF9TRVNTX0NFUlRfTkVXCQkJCSAyMjUKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9DRVJUCQkJCSAxOTEKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9DSVBIRVJfTElTVAkJCSAyNzEKQEAgLTIwNzMsNiArMjI1NSw3IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9TRVRfVFJVU1QJCQkJIDIyOAogI2RlZmluZSBTU0xfRl9TU0xfU0VUX1dGRAkJCQkgMTk2CiAjZGVmaW5lIFNTTF9GX1NTTF9TSFVURE9XTgkJCQkgMjI0CisjZGVmaW5lIFNTTF9GX1NTTF9TUlBfQ1RYX0lOSVQJCQkJIDMxMwogI2RlZmluZSBTU0xfRl9TU0xfVU5ERUZJTkVEX0NPTlNUX0ZVTkNUSU9OCQkgMjQzCiAjZGVmaW5lIFNTTF9GX1NTTF9VTkRFRklORURfRlVOQ1RJT04JCQkgMTk3CiAjZGVmaW5lIFNTTF9GX1NTTF9VTkRFRklORURfVk9JRF9GVU5DVElPTgkJIDI0NApAQCAtMjA5Myw2ICsyMjc2LDggQEAKICNkZWZpbmUgU1NMX0ZfVExTMV9DSEFOR0VfQ0lQSEVSX1NUQVRFCQkJIDIwOQogI2RlZmluZSBTU0xfRl9UTFMxX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3NAogI2RlZmluZSBTU0xfRl9UTFMxX0VOQwkJCQkJIDIxMAorI2RlZmluZSBTU0xfRl9UTFMxX0VYUE9SVF9LRVlJTkdfTUFURVJJQUwJCSAzMTQKKyNkZWZpbmUgU1NMX0ZfVExTMV9IRUFSVEJFQVQJCQkJIDMxNQogI2RlZmluZSBTU0xfRl9UTFMxX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjc1CiAjZGVmaW5lIFNTTF9GX1RMUzFfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyNzYKICNkZWZpbmUgU1NMX0ZfVExTMV9QUkYJCQkJCSAyODQKQEAgLTIxMzIsNiArMjMxNywxMyBAQAogI2RlZmluZSBTU0xfUl9CQURfUlNBX01PRFVMVVNfTEVOR1RICQkJIDEyMQogI2RlZmluZSBTU0xfUl9CQURfUlNBX1NJR05BVFVSRQkJCQkgMTIyCiAjZGVmaW5lIFNTTF9SX0JBRF9TSUdOQVRVUkUJCQkJIDEyMworI2RlZmluZSBTU0xfUl9CQURfU1JQX0FfTEVOR1RICQkJCSAzNDcKKyNkZWZpbmUgU1NMX1JfQkFEX1NSUF9CX0xFTkdUSAkJCQkgMzQ4CisjZGVmaW5lIFNTTF9SX0JBRF9TUlBfR19MRU5HVEgJCQkJIDM0OQorI2RlZmluZSBTU0xfUl9CQURfU1JQX05fTEVOR1RICQkJCSAzNTAKKyNkZWZpbmUgU1NMX1JfQkFEX1NSUF9TX0xFTkdUSAkJCQkgMzUxCisjZGVmaW5lIFNTTF9SX0JBRF9TUlRQX01LSV9WQUxVRQkJCSAzNTIKKyNkZWZpbmUgU1NMX1JfQkFEX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QJCSAzNTMKICNkZWZpbmUgU1NMX1JfQkFEX1NTTF9GSUxFVFlQRQkJCQkgMTI0CiAjZGVmaW5lIFNTTF9SX0JBRF9TU0xfU0VTU0lPTl9JRF9MRU5HVEgJCQkgMTI1CiAjZGVmaW5lIFNTTF9SX0JBRF9TVEFURQkJCQkJIDEyNgpAQCAtMjE3MCwxNCArMjM2MiwxNSBAQAogI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9SU0FfU0lHTkFUVVJFCSAzMjIKICNkZWZpbmUgU1NMX1JfRUNDX0NFUlRfU0hPVUxEX0hBVkVfU0hBMV9TSUdOQVRVUkUJIDMyMwogI2RlZmluZSBTU0xfUl9FQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSCQkgMzEwCisjZGVmaW5lIFNTTF9SX0VNUFRZX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QJIDM1NAogI2RlZmluZSBTU0xfUl9FTkNSWVBURURfTEVOR1RIX1RPT19MT05HCQkJIDE1MAogI2RlZmluZSBTU0xfUl9FUlJPUl9HRU5FUkFUSU5HX1RNUF9SU0FfS0VZCQkgMjgyCiAjZGVmaW5lIFNTTF9SX0VSUk9SX0lOX1JFQ0VJVkVEX0NJUEhFUl9MSVNUCQkgMTUxCiAjZGVmaW5lIFNTTF9SX0VYQ0VTU0lWRV9NRVNTQUdFX1NJWkUJCQkgMTUyCiAjZGVmaW5lIFNTTF9SX0VYVFJBX0RBVEFfSU5fTUVTU0FHRQkJCSAxNTMKICNkZWZpbmUgU1NMX1JfR09UX0FfRklOX0JFRk9SRV9BX0NDUwkJCSAxNTQKLSNkZWZpbmUgU1NMX1JfR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTCQkgMzQ2Ci0jZGVmaW5lIFNTTF9SX0dPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OCQkgMzQ3CisjZGVmaW5lIFNTTF9SX0dPVF9ORVhUX1BST1RPX0JFRk9SRV9BX0NDUwkJIDM1NQorI2RlZmluZSBTU0xfUl9HT1RfTkVYVF9QUk9UT19XSVRIT1VUX0VYVEVOU0lPTgkJIDM1NgogI2RlZmluZSBTU0xfUl9IVFRQU19QUk9YWV9SRVFVRVNUCQkJIDE1NQogI2RlZmluZSBTU0xfUl9IVFRQX1JFUVVFU1QJCQkJIDE1NgogI2RlZmluZSBTU0xfUl9JTExFR0FMX1BBRERJTkcJCQkJIDI4MwpAQCAtMjE4Niw2ICsyMzc5LDcgQEAKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DT01NQU5ECQkJCSAyODAKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9BTEdPUklUSE0JCSAzNDEKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9QVVJQT1NFCQkJCSAyNzgKKyNkZWZpbmUgU1NMX1JfSU5WQUxJRF9TUlBfVVNFUk5BTUUJCQkgMzU3CiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfU1RBVFVTX1JFU1BPTlNFCQkJIDMyOAogI2RlZmluZSBTU0xfUl9JTlZBTElEX1RJQ0tFVF9LRVlTX0xFTkdUSAkJIDMyNQogI2RlZmluZSBTU0xfUl9JTlZBTElEX1RSVVNUCQkJCSAyNzkKQEAgLTIyMTUsNiArMjQwOSw3IEBACiAjZGVmaW5lIFNTTF9SX01JU1NJTkdfUlNBX0NFUlRJRklDQVRFCQkJIDE2OAogI2RlZmluZSBTU0xfUl9NSVNTSU5HX1JTQV9FTkNSWVBUSU5HX0NFUlQJCSAxNjkKICNkZWZpbmUgU1NMX1JfTUlTU0lOR19SU0FfU0lHTklOR19DRVJUCQkJIDE3MAorI2RlZmluZSBTU0xfUl9NSVNTSU5HX1NSUF9QQVJBTQkJCQkgMzU4CiAjZGVmaW5lIFNTTF9SX01JU1NJTkdfVE1QX0RIX0tFWQkJCSAxNzEKICNkZWZpbmUgU1NMX1JfTUlTU0lOR19UTVBfRUNESF9LRVkJCQkgMzExCiAjZGVmaW5lIFNTTF9SX01JU1NJTkdfVE1QX1JTQV9LRVkJCQkgMTcyCkBAIC0yMjQ0LDYgKzI0MzksNyBAQAogI2RlZmluZSBTU0xfUl9OT19SRU5FR09USUFUSU9OCQkJCSAzMzkKICNkZWZpbmUgU1NMX1JfTk9fUkVRVUlSRURfRElHRVNUCQkJIDMyNAogI2RlZmluZSBTU0xfUl9OT19TSEFSRURfQ0lQSEVSCQkJCSAxOTMKKyNkZWZpbmUgU1NMX1JfTk9fU1JUUF9QUk9GSUxFUwkJCQkgMzU5CiAjZGVmaW5lIFNTTF9SX05PX1ZFUklGWV9DQUxMQkFDSwkJCSAxOTQKICNkZWZpbmUgU1NMX1JfTlVMTF9TU0xfQ1RYCQkJCSAxOTUKICNkZWZpbmUgU1NMX1JfTlVMTF9TU0xfTUVUSE9EX1BBU1NFRAkJCSAxOTYKQEAgLTIyODgsNyArMjQ4NCwxMiBAQAogI2RlZmluZSBTU0xfUl9TRVNTSU9OX0lEX0NPTlRFWFRfVU5JTklUSUFMSVpFRAkJIDI3NwogI2RlZmluZSBTU0xfUl9TRVNTSU9OX01BWV9OT1RfQkVfQ1JFQVRFRAkJIDIwMDAKICNkZWZpbmUgU1NMX1JfU0hPUlRfUkVBRAkJCQkgMjE5CisjZGVmaW5lIFNTTF9SX1NJR05BVFVSRV9BTEdPUklUSE1TX0VSUk9SCQkgMzYwCiAjZGVmaW5lIFNTTF9SX1NJR05BVFVSRV9GT1JfTk9OX1NJR05JTkdfQ0VSVElGSUNBVEUJIDIyMAorI2RlZmluZSBTU0xfUl9TUlBfQV9DQUxDCQkJCSAzNjEKKyNkZWZpbmUgU1NMX1JfU1JUUF9DT1VMRF9OT1RfQUxMT0NBVEVfUFJPRklMRVMJCSAzNjIKKyNkZWZpbmUgU1NMX1JfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVF9UT09fTE9ORwkgMzYzCisjZGVmaW5lIFNTTF9SX1NSVFBfVU5LTk9XTl9QUk9URUNUSU9OX1BST0ZJTEUJCSAzNjQKICNkZWZpbmUgU1NMX1JfU1NMMjNfRE9JTkdfU0VTU0lPTl9JRF9SRVVTRQkJIDIyMQogI2RlZmluZSBTU0xfUl9TU0wyX0NPTk5FQ1RJT05fSURfVE9PX0xPTkcJCSAyOTkKICNkZWZpbmUgU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9FQ1BPSU5URk9STUFUCQkgMzIxCkBAIC0yMzMzLDYgKzI1MzQsOSBAQAogI2RlZmluZSBTU0xfUl9UTFNWMV9VTlJFQ09HTklaRURfTkFNRQkJCSAxMTEyCiAjZGVmaW5lIFNTTF9SX1RMU1YxX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgkJIDExMTAKICNkZWZpbmUgU1NMX1JfVExTX0NMSUVOVF9DRVJUX1JFUV9XSVRIX0FOT05fQ0lQSEVSCSAyMzIKKyNkZWZpbmUgU1NMX1JfVExTX0hFQVJUQkVBVF9QRUVSX0RPRVNOVF9BQ0NFUFQJCSAzNjUKKyNkZWZpbmUgU1NMX1JfVExTX0hFQVJUQkVBVF9QRU5ESU5HCQkJIDM2NgorI2RlZmluZSBTU0xfUl9UTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTAkJIDM2NwogI2RlZmluZSBTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QJCSAxNTcKICNkZWZpbmUgU1NMX1JfVExTX1BFRVJfRElEX05PVF9SRVNQT05EX1dJVEhfQ0VSVElGSUNBVEVfTElTVCAyMzMKICNkZWZpbmUgU1NMX1JfVExTX1JTQV9FTkNSWVBURURfVkFMVUVfTEVOR1RIX0lTX1dST05HCSAyMzQKQEAgLTIzNTQsNiArMjU1OCw3IEBACiAjZGVmaW5lIFNTTF9SX1VOS05PV05fQ0VSVElGSUNBVEVfVFlQRQkJCSAyNDcKICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9DSVBIRVJfUkVUVVJORUQJCQkgMjQ4CiAjZGVmaW5lIFNTTF9SX1VOS05PV05fQ0lQSEVSX1RZUEUJCQkgMjQ5CisjZGVmaW5lIFNTTF9SX1VOS05PV05fRElHRVNUCQkJCSAzNjgKICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9LRVlfRVhDSEFOR0VfVFlQRQkJCSAyNTAKICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9QS0VZX1RZUEUJCQkJIDI1MQogI2RlZmluZSBTU0xfUl9VTktOT1dOX1BST1RPQ09MCQkJCSAyNTIKQEAgLTIzNjgsMTIgKzI1NzMsMTQgQEAKICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfUFJPVE9DT0wJCQkgMjU4CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX1NTTF9WRVJTSU9OCQkJIDI1OQogI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9TVEFUVVNfVFlQRQkJCSAzMjkKKyNkZWZpbmUgU1NMX1JfVVNFX1NSVFBfTk9UX05FR09USUFURUQJCQkgMzY5CiAjZGVmaW5lIFNTTF9SX1dSSVRFX0JJT19OT1RfU0VUCQkJCSAyNjAKICNkZWZpbmUgU1NMX1JfV1JPTkdfQ0lQSEVSX1JFVFVSTkVECQkJIDI2MQogI2RlZmluZSBTU0xfUl9XUk9OR19NRVNTQUdFX1RZUEUJCQkgMjYyCiAjZGVmaW5lIFNTTF9SX1dST05HX05VTUJFUl9PRl9LRVlfQklUUwkJCSAyNjMKICNkZWZpbmUgU1NMX1JfV1JPTkdfU0lHTkFUVVJFX0xFTkdUSAkJCSAyNjQKICNkZWZpbmUgU1NMX1JfV1JPTkdfU0lHTkFUVVJFX1NJWkUJCQkgMjY1CisjZGVmaW5lIFNTTF9SX1dST05HX1NJR05BVFVSRV9UWVBFCQkJIDM3MAogI2RlZmluZSBTU0xfUl9XUk9OR19TU0xfVkVSU0lPTgkJCQkgMjY2CiAjZGVmaW5lIFNTTF9SX1dST05HX1ZFUlNJT05fTlVNQkVSCQkJIDI2NwogI2RlZmluZSBTU0xfUl9YNTA5X0xJQgkJCQkJIDI2OApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCBiL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKaW5kZXggOTlhNTJlYS4uZWIyNWRjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCkBAIC0xNTUsNiArMTU1LDggQEAKICNkZWZpbmUgIENFUlQJCWNoYXIKICNlbmRpZgogCisjaWZuZGVmIE9QRU5TU0xfTk9fU1NMX0lOVEVSTgorCiB0eXBlZGVmIHN0cnVjdCBzc2wyX3N0YXRlX3N0CiAJewogCWludCB0aHJlZV9ieXRlX2hlYWRlcjsKQEAgLTIxOSw2ICsyMjEsOCBAQAogCQl9IHRtcDsKIAl9IFNTTDJfU1RBVEU7CiAKKyNlbmRpZgorCiAvKiBTU0x2MiAqLwogLyogY2xpZW50ICovCiAjZGVmaW5lIFNTTDJfU1RfU0VORF9DTElFTlRfSEVMTE9fQQkJKDB4MTB8U1NMX1NUX0NPTk5FQ1QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIGIvaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAppbmRleCBkNjQyNWU1Li5mYjA4ZTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKQEAgLTMzMiw2ICszMzIsNyBAQAogI2RlZmluZSBTU0wzX1JUX0FMRVJUCQkJMjEKICNkZWZpbmUgU1NMM19SVF9IQU5EU0hBS0UJCTIyCiAjZGVmaW5lIFNTTDNfUlRfQVBQTElDQVRJT05fREFUQQkyMworI2RlZmluZSBUTFMxX1JUX0hFQVJUQkVBVAkJMjQKIAogI2RlZmluZSBTU0wzX0FMX1dBUk5JTkcJCQkxCiAjZGVmaW5lIFNTTDNfQUxfRkFUQUwJCQkyCkBAIC0zNDksNiArMzUwLDExIEBACiAjZGVmaW5lIFNTTDNfQURfQ0VSVElGSUNBVEVfVU5LTk9XTgk0NgogI2RlZmluZSBTU0wzX0FEX0lMTEVHQUxfUEFSQU1FVEVSCTQ3CS8qIGZhdGFsICovCiAKKyNkZWZpbmUgVExTMV9IQl9SRVFVRVNUCQkxCisjZGVmaW5lIFRMUzFfSEJfUkVTUE9OU0UJMgorCQorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKwogdHlwZWRlZiBzdHJ1Y3Qgc3NsM19yZWNvcmRfc3QKIAl7CiAvKnIgKi8JaW50IHR5cGU7ICAgICAgICAgICAgICAgLyogdHlwZSBvZiByZWNvcmQgKi8KQEAgLTM3MCw2ICszNzYsOCBAQAogCWludCBsZWZ0OyAgICAgICAgICAgICAgIC8qIGhvdyBtYW55IGJ5dGVzIGxlZnQgKi8KIAl9IFNTTDNfQlVGRkVSOwogCisjZW5kaWYKKwogI2RlZmluZSBTU0wzX0NUX1JTQV9TSUdOCQkJMQogI2RlZmluZSBTU0wzX0NUX0RTU19TSUdOCQkJMgogI2RlZmluZSBTU0wzX0NUX1JTQV9GSVhFRF9ESAkJCTMKQEAgLTM4OSw2ICszOTcsNyBAQAogI2RlZmluZSBTU0wzX0ZMQUdTX1BPUF9CVUZGRVIJCQkweDAwMDQKICNkZWZpbmUgVExTMV9GTEFHU19UTFNfUEFERElOR19CVUcJCTB4MDAwOAogI2RlZmluZSBUTFMxX0ZMQUdTX1NLSVBfQ0VSVF9WRVJJRlkJCTB4MDAxMAorI2RlZmluZSBUTFMxX0ZMQUdTX0tFRVBfSEFORFNIQUtFCQkweDAwMjAKICAKIC8qIFNTTDNfRkxBR1NfU0dDX1JFU1RBUlRfRE9ORSBpcyBzZXQgd2hlbiB3ZQogICogcmVzdGFydCBhIGhhbmRzaGFrZSBiZWNhdXNlIG9mIE1TIFNHQyBhbmQgc28gcHJldmVudHMgdXMKQEAgLTQwMSw2ICs0MTAsOCBAQAogICovCiAjZGVmaW5lIFNTTDNfRkxBR1NfU0dDX1JFU1RBUlRfRE9ORQkJMHgwMDQwCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCisKIHR5cGVkZWYgc3RydWN0IHNzbDNfc3RhdGVfc3QKIAl7CiAJbG9uZyBmbGFnczsKQEAgLTQ3NiwxMiArNDg3LDYgQEAKIAl2b2lkICpzZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dDsKIAlzaXplX3Qgc2VydmVyX29wYXF1ZV9wcmZfaW5wdXRfbGVuOwogCi0jaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0JLyogU2V0IGlmIHdlIHNhdyB0aGUgTmV4dCBQcm90b2NvbCBOZWdvdGlhdGlvbiBleHRlbnNpb24gZnJvbQotCSAgIG91ciBwZWVyLiAqLwotCWludCBuZXh0X3Byb3RvX25lZ19zZWVuOwotI2VuZGlmCi0KIAlzdHJ1Y3QJewogCQkvKiBhY3R1YWxseSBvbmx5IG5lZWRzIHRvIGJlIDE2KzIwICovCiAJCXVuc2lnbmVkIGNoYXIgY2VydF92ZXJpZnlfbWRbRVZQX01BWF9NRF9TSVpFKjJdOwpAQCAtNDkxLDcgKzQ5Niw3IEBACiAJCWludCBmaW5pc2hfbWRfbGVuOwogCQl1bnNpZ25lZCBjaGFyIHBlZXJfZmluaXNoX21kW0VWUF9NQVhfTURfU0laRSoyXTsKIAkJaW50IHBlZXJfZmluaXNoX21kX2xlbjsKLQkJCisKIAkJdW5zaWduZWQgbG9uZyBtZXNzYWdlX3NpemU7CiAJCWludCBtZXNzYWdlX3R5cGU7CiAKQEAgLTUzOSwxNCArNTQ0LDI0IEBACiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJldmlvdXNfc2VydmVyX2ZpbmlzaGVkW0VWUF9NQVhfTURfU0laRV07CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJldmlvdXNfc2VydmVyX2ZpbmlzaGVkX2xlbjsKICAgICAgICAgaW50IHNlbmRfY29ubmVjdGlvbl9iaW5kaW5nOyAvKiBUT0RPRUtSICovCisKKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKKwkvKiBTZXQgaWYgd2Ugc2F3IHRoZSBOZXh0IFByb3RvY29sIE5lZ290aWF0aW9uIGV4dGVuc2lvbiBmcm9tIG91ciBwZWVyLiAqLworCWludCBuZXh0X3Byb3RvX25lZ19zZWVuOworI2VuZGlmCiAJfSBTU0wzX1NUQVRFOwogCisjZW5kaWYKIAogLyogU1NMdjMgKi8KIC8qY2xpZW50ICovCiAvKiBleHRyYSBzdGF0ZSAqLwogI2RlZmluZSBTU0wzX1NUX0NXX0ZMVVNICQkoMHgxMDB8U1NMX1NUX0NPTk5FQ1QpCiAjZGVmaW5lIFNTTDNfU1RfQ1VUVEhST1VHSF9DT01QTEVURQkoMHgxMDF8U1NMX1NUX0NPTk5FQ1QpCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorI2RlZmluZSBEVExTMV9TQ1RQX1NUX0NXX1dSSVRFX1NPQ0sJCQkoMHgzMTB8U1NMX1NUX0NPTk5FQ1QpCisjZGVmaW5lIERUTFMxX1NDVFBfU1RfQ1JfUkVBRF9TT0NLCQkJKDB4MzIwfFNTTF9TVF9DT05ORUNUKQorI2VuZGlmCQogLyogd3JpdGUgdG8gc2VydmVyICovCiAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0xOVF9IRUxMT19BCQkoMHgxMTB8U1NMX1NUX0NPTk5FQ1QpCiAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0xOVF9IRUxMT19CCQkoMHgxMTF8U1NMX1NUX0NPTk5FQ1QpCkBAIC01NzQsMTAgKzU4OSw4IEBACiAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0VSVF9WUkZZX0IJCSgweDE5MXxTU0xfU1RfQ09OTkVDVCkKICNkZWZpbmUgU1NMM19TVF9DV19DSEFOR0VfQQkJKDB4MUEwfFNTTF9TVF9DT05ORUNUKQogI2RlZmluZSBTU0wzX1NUX0NXX0NIQU5HRV9CCQkoMHgxQTF8U1NMX1NUX0NPTk5FQ1QpCi0jaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAjZGVmaW5lIFNTTDNfU1RfQ1dfTkVYVF9QUk9UT19BCQkoMHgyMDB8U1NMX1NUX0NPTk5FQ1QpCiAjZGVmaW5lIFNTTDNfU1RfQ1dfTkVYVF9QUk9UT19CCQkoMHgyMDF8U1NMX1NUX0NPTk5FQ1QpCi0jZW5kaWYKICNkZWZpbmUgU1NMM19TVF9DV19GSU5JU0hFRF9BCQkoMHgxQjB8U1NMX1NUX0NPTk5FQ1QpCiAjZGVmaW5lIFNTTDNfU1RfQ1dfRklOSVNIRURfQgkJKDB4MUIxfFNTTF9TVF9DT05ORUNUKQogLyogcmVhZCBmcm9tIHNlcnZlciAqLwpAQCAtNTkzLDYgKzYwNiwxMCBAQAogLyogc2VydmVyICovCiAvKiBleHRyYSBzdGF0ZSAqLwogI2RlZmluZSBTU0wzX1NUX1NXX0ZMVVNICQkoMHgxMDB8U1NMX1NUX0FDQ0VQVCkKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisjZGVmaW5lIERUTFMxX1NDVFBfU1RfU1dfV1JJVEVfU09DSwkJCSgweDMxMHxTU0xfU1RfQUNDRVBUKQorI2RlZmluZSBEVExTMV9TQ1RQX1NUX1NSX1JFQURfU09DSwkJCSgweDMyMHxTU0xfU1RfQUNDRVBUKQorI2VuZGlmCQogLyogcmVhZCBmcm9tIGNsaWVudCAqLwogLyogRG8gbm90IGNoYW5nZSB0aGUgbnVtYmVyIHZhbHVlcywgdGhleSBkbyBtYXR0ZXIgKi8KICNkZWZpbmUgU1NMM19TVF9TUl9DTE5UX0hFTExPX0EJCSgweDExMHxTU0xfU1RfQUNDRVBUKQpAQCAtNjIzLDEwICs2NDAsOCBAQAogI2RlZmluZSBTU0wzX1NUX1NSX0NFUlRfVlJGWV9CCQkoMHgxQTF8U1NMX1NUX0FDQ0VQVCkKICNkZWZpbmUgU1NMM19TVF9TUl9DSEFOR0VfQQkJKDB4MUIwfFNTTF9TVF9BQ0NFUFQpCiAjZGVmaW5lIFNTTDNfU1RfU1JfQ0hBTkdFX0IJCSgweDFCMXxTU0xfU1RfQUNDRVBUKQotI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwogI2RlZmluZSBTU0wzX1NUX1NSX05FWFRfUFJPVE9fQQkJKDB4MjEwfFNTTF9TVF9BQ0NFUFQpCiAjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19CCQkoMHgyMTF8U1NMX1NUX0FDQ0VQVCkKLSNlbmRpZgogI2RlZmluZSBTU0wzX1NUX1NSX0ZJTklTSEVEX0EJCSgweDFDMHxTU0xfU1RfQUNDRVBUKQogI2RlZmluZSBTU0wzX1NUX1NSX0ZJTklTSEVEX0IJCSgweDFDMXxTU0xfU1RfQUNDRVBUKQogLyogd3JpdGUgdG8gY2xpZW50ICovCkBAIC02NTEsOSArNjY2LDcgQEAKICNkZWZpbmUgU1NMM19NVF9DTElFTlRfS0VZX0VYQ0hBTkdFCQkxNgogI2RlZmluZSBTU0wzX01UX0ZJTklTSEVECQkJMjAKICNkZWZpbmUgU1NMM19NVF9DRVJUSUZJQ0FURV9TVEFUVVMJCTIyCi0jaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAjZGVmaW5lIFNTTDNfTVRfTkVYVF9QUk9UTwkJCTY3Ci0jZW5kaWYKICNkZWZpbmUgRFRMUzFfTVRfSEVMTE9fVkVSSUZZX1JFUVVFU1QgICAgMwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGIvaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKaW5kZXggM2ZkNGE4MS4uNDAzZjU5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKQEAgLTE3Niw3ICsxNzYsNiBAQAogI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YSAgU1NMX0NUWF9zZXRfZGVmX3Bhc3N3ZF9jYl91ZAogI3VuZGVmIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCiAjZGVmaW5lIFNTTF9DT01QX2dldF9jb21wcmVzc2lvbl9tZXRob2RzCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzCi0KICN1bmRlZiBzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4dAogI2RlZmluZSBzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4dAlzc2xfYWRkX2NsaWVudGhlbGxvX3JlbmVnX2V4dAogI3VuZGVmIHNzbF9hZGRfc2VydmVyaGVsbG9fcmVuZWdvdGlhdGVfZXh0CkBAIC0xODUsNiArMTg0LDI2IEBACiAjZGVmaW5lIHNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQJc3NsX3BhcnNlX2NsaWVudGhlbGxvX3JlbmVnX2V4dAogI3VuZGVmIHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb19yZW5lZ290aWF0ZV9leHQKICNkZWZpbmUgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dAlzc2xfcGFyc2Vfc2VydmVyaGVsbG9fcmVuZWdfZXh0CisjdW5kZWYgU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZQorI2RlZmluZSBTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lCVNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdW4KKyN1bmRlZiBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjaworI2RlZmluZSBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYgorI3VuZGVmIFNTTF9DVFhfc2V0X3NycF92ZXJpZnlfcGFyYW1fY2FsbGJhY2sKKyNkZWZpbmUgU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfdmZ5X3BhcmFtX2NiCisjdW5kZWYgU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrCisjZGVmaW5lIFNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjawlTU0xfQ1RYX3NldF9zcnBfdW5fY2IKKyN1bmRlZiBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dAorI2RlZmluZSBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dCBzc2xfYWRkX2NsaWhlbGxvX3VzZV9zcnRwX2V4dAorI3VuZGVmIHNzbF9hZGRfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0CisjZGVmaW5lIHNzbF9hZGRfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0IHNzbF9hZGRfc2VyaGVsbG9fdXNlX3NydHBfZXh0CisjdW5kZWYgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dAorI2RlZmluZSBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0IHNzbF9wYXJzZV9jbGloZWxsb191c2Vfc3J0cF9leHQKKyN1bmRlZiBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0CisjZGVmaW5lIHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb191c2Vfc3J0cF9leHQgc3NsX3BhcnNlX3NlcmhlbGxvX3VzZV9zcnRwX2V4dAorI3VuZGVmIFNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYiBTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2IKKyN1bmRlZiBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYgorI2RlZmluZSBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYiBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbF9jYgogCiAvKiBIYWNrIHNvbWUgbG9uZyBFTkdJTkUgbmFtZXMgKi8KICN1bmRlZiBFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQKQEAgLTIzOCw2ICsyNTcsOSBAQAogI2RlZmluZSBFQ19HUk9VUF9nZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtCUVDX0dST1VQX2dldF9wb2ludF9jb252X2Zvcm0KICN1bmRlZiBFQ19HUk9VUF9jbGVhcl9mcmVlX2FsbF9leHRyYV9kYXRhCiAjZGVmaW5lIEVDX0dST1VQX2NsZWFyX2ZyZWVfYWxsX2V4dHJhX2RhdGEJRUNfR1JPVVBfY2xyX2ZyZWVfYWxsX3h0cmFfZGF0YQorI3VuZGVmIEVDX0tFWV9zZXRfcHVibGljX2tleV9hZmZpbmVfY29vcmRpbmF0ZXMKKyNkZWZpbmUgRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlcyBcCisJCQkJCQlFQ19LRVlfc2V0X3B1Yl9rZXlfYWZmX2Nvb3JkcwogI3VuZGVmIEVDX1BPSU5UX3NldF9KcHJvamVjdGl2ZV9jb29yZGluYXRlc19HRnAKICNkZWZpbmUgRUNfUE9JTlRfc2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQ19QT0lOVF9zZXRfSnByb2pfY29vcmRzX0dGcApAQCAtMzk5LDYgKzQyMSwxMiBAQAogI3VuZGVmIGR0bHMxX3JldHJhbnNtaXRfYnVmZmVyZWRfbWVzc2FnZXMKICNkZWZpbmUgZHRsczFfcmV0cmFuc21pdF9idWZmZXJlZF9tZXNzYWdlcwlkdGxzMV9yZXRyYW5zbWl0X2J1ZmZlcmVkX21zZ3MKIAorLyogSGFjayBzb21lIGxvbmcgU1JQIG5hbWVzICovCisjdW5kZWYgU1JQX2dlbmVyYXRlX3NlcnZlcl9tYXN0ZXJfc2VjcmV0CisjZGVmaW5lIFNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldAlTUlBfZ2VuX3NlcnZlcl9tYXN0ZXJfc2VjcmV0CisjdW5kZWYgU1JQX2dlbmVyYXRlX2NsaWVudF9tYXN0ZXJfc2VjcmV0CisjZGVmaW5lIFNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldAlTUlBfZ2VuX2NsaWVudF9tYXN0ZXJfc2VjcmV0CisKIC8qIEhhY2sgc29tZSBsb25nIFVJIG5hbWVzICovCiAjdW5kZWYgVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3IKICNkZWZpbmUgVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0b3IJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vcGVuc3NsL3RsczEuaCBiL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKaW5kZXggNzZmMzY4YS4uYzM5YzI2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorKysgYi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCkBAIC0xNTksMTAgKzE1OSwyNCBAQAogCiAjZGVmaW5lIFRMUzFfQUxMT1dfRVhQRVJJTUVOVEFMX0NJUEhFUlNVSVRFUwkwCiAKKyNkZWZpbmUgVExTMV8yX1ZFUlNJT04JCQkweDAzMDMKKyNkZWZpbmUgVExTMV8yX1ZFUlNJT05fTUFKT1IJCTB4MDMKKyNkZWZpbmUgVExTMV8yX1ZFUlNJT05fTUlOT1IJCTB4MDMKKworI2RlZmluZSBUTFMxXzFfVkVSU0lPTgkJCTB4MDMwMgorI2RlZmluZSBUTFMxXzFfVkVSU0lPTl9NQUpPUgkJMHgwMworI2RlZmluZSBUTFMxXzFfVkVSU0lPTl9NSU5PUgkJMHgwMgorCiAjZGVmaW5lIFRMUzFfVkVSU0lPTgkJCTB4MDMwMQogI2RlZmluZSBUTFMxX1ZFUlNJT05fTUFKT1IJCTB4MDMKICNkZWZpbmUgVExTMV9WRVJTSU9OX01JTk9SCQkweDAxCiAKKyNkZWZpbmUgVExTMV9nZXRfdmVyc2lvbihzKSBcCisJCSgocy0+dmVyc2lvbiA+PiA4KSA9PSBUTFMxX1ZFUlNJT05fTUFKT1IgPyBzLT52ZXJzaW9uIDogMCkKKworI2RlZmluZSBUTFMxX2dldF9jbGllbnRfdmVyc2lvbihzKSBcCisJCSgocy0+Y2xpZW50X3ZlcnNpb24gPj4gOCkgPT0gVExTMV9WRVJTSU9OX01BSk9SID8gcy0+Y2xpZW50X3ZlcnNpb24gOiAwKQorCiAjZGVmaW5lIFRMUzFfQURfREVDUllQVElPTl9GQUlMRUQJMjEKICNkZWZpbmUgVExTMV9BRF9SRUNPUkRfT1ZFUkZMT1cJCTIyCiAjZGVmaW5lIFRMUzFfQURfVU5LTk9XTl9DQQkJNDgJLyogZmF0YWwgKi8KQEAgLTE4MywxNyArMTk3LDQyIEBACiAjZGVmaW5lIFRMUzFfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUgMTE0CiAjZGVmaW5lIFRMUzFfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkJMTE1CS8qIGZhdGFsICovCiAKLS8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDMzU0NiAvIFJGQzQzNjYgKi8KKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDMzU0NiAvIFJGQzQzNjYgLyBSRkM2MDY2ICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3NlcnZlcl9uYW1lCQkJMAogI2RlZmluZSBUTFNFWFRfVFlQRV9tYXhfZnJhZ21lbnRfbGVuZ3RoCQkxCiAjZGVmaW5lIFRMU0VYVF9UWVBFX2NsaWVudF9jZXJ0aWZpY2F0ZV91cmwJMgogI2RlZmluZSBUTFNFWFRfVFlQRV90cnVzdGVkX2NhX2tleXMJCTMKICNkZWZpbmUgVExTRVhUX1RZUEVfdHJ1bmNhdGVkX2htYWMJCTQKICNkZWZpbmUgVExTRVhUX1RZUEVfc3RhdHVzX3JlcXVlc3QJCTUKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDNDY4MSAqLworI2RlZmluZSBUTFNFWFRfVFlQRV91c2VyX21hcHBpbmcJCTYKKworLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM1ODc4ICovCisjZGVmaW5lIFRMU0VYVF9UWVBFX2NsaWVudF9hdXRoegkJNworI2RlZmluZSBUTFNFWFRfVFlQRV9zZXJ2ZXJfYXV0aHoJCTgKKworLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM2MDkxICovCisjZGVmaW5lIFRMU0VYVF9UWVBFX2NlcnRfdHlwZQkJOQorCiAvKiBFeHRlbnNpb25UeXBlIHZhbHVlcyBmcm9tIFJGQzQ0OTIgKi8KICNkZWZpbmUgVExTRVhUX1RZUEVfZWxsaXB0aWNfY3VydmVzCQkxMAogI2RlZmluZSBUTFNFWFRfVFlQRV9lY19wb2ludF9mb3JtYXRzCQkxMQorCisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gUkZDNTA1NCAqLworI2RlZmluZSBUTFNFWFRfVFlQRV9zcnAJCQkJMTIKKworLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM1MjQ2ICovCisjZGVmaW5lIFRMU0VYVF9UWVBFX3NpZ25hdHVyZV9hbGdvcml0aG1zCTEzCisKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWUgZnJvbSBSRkM1NzY0ICovCisjZGVmaW5lIFRMU0VYVF9UWVBFX3VzZV9zcnRwCTE0CisKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWUgZnJvbSBSRkM1NjIwICovCisjZGVmaW5lIFRMU0VYVF9UWVBFX2hlYXJ0YmVhdAkxNQorCisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gUkZDNDUwNyAqLwogI2RlZmluZSBUTFNFWFRfVFlQRV9zZXNzaW9uX3RpY2tldAkJMzUKKwogLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZSBmcm9tIGRyYWZ0LXJlc2NvcmxhLXRscy1vcGFxdWUtcHJmLWlucHV0LTAwLnR4dCAqLwogI2lmIDAgLyogd2lsbCBoYXZlIHRvIGJlIHByb3ZpZGVkIGV4dGVybmFsbHkgZm9yIG5vdyAsCiAgICAgICAgKiBpLmUuIGJ1aWxkIHdpdGggLURUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0PTM4MTgzCkBAIC0yMjEsMTIgKzI2MCwzNyBAQAogI2RlZmluZSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9hbnNpWDk2Ml9jb21wcmVzc2VkX2NoYXIyCTIKICNkZWZpbmUgVExTRVhUX0VDUE9JTlRGT1JNQVRfbGFzdAkJCTIKIAorLyogU2lnbmF0dXJlIGFuZCBoYXNoIGFsZ29yaXRobXMgZnJvbSBSRkMgNTI0NiAqLworCisjZGVmaW5lIFRMU0VYVF9zaWduYXR1cmVfYW5vbnltb3VzCQkJMAorI2RlZmluZSBUTFNFWFRfc2lnbmF0dXJlX3JzYQkJCQkxCisjZGVmaW5lIFRMU0VYVF9zaWduYXR1cmVfZHNhCQkJCTIKKyNkZWZpbmUgVExTRVhUX3NpZ25hdHVyZV9lY2RzYQkJCQkzCisKKyNkZWZpbmUgVExTRVhUX2hhc2hfbm9uZQkJCQkwCisjZGVmaW5lIFRMU0VYVF9oYXNoX21kNQkJCQkJMQorI2RlZmluZSBUTFNFWFRfaGFzaF9zaGExCQkJCTIKKyNkZWZpbmUgVExTRVhUX2hhc2hfc2hhMjI0CQkJCTMKKyNkZWZpbmUgVExTRVhUX2hhc2hfc2hhMjU2CQkJCTQKKyNkZWZpbmUgVExTRVhUX2hhc2hfc2hhMzg0CQkJCTUKKyNkZWZpbmUgVExTRVhUX2hhc2hfc2hhNTEyCQkJCTYKKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCiAjZGVmaW5lIFRMU0VYVF9NQVhMRU5faG9zdF9uYW1lIDI1NQogCi1jb25zdCBjaGFyICpTU0xfZ2V0X3NlcnZlcm5hbWUoY29uc3QgU1NMICpzLCBjb25zdCBpbnQgdHlwZSkgOwotaW50IFNTTF9nZXRfc2VydmVybmFtZV90eXBlKGNvbnN0IFNTTCAqcykgOworY29uc3QgY2hhciAqU1NMX2dldF9zZXJ2ZXJuYW1lKGNvbnN0IFNTTCAqcywgY29uc3QgaW50IHR5cGUpOworaW50IFNTTF9nZXRfc2VydmVybmFtZV90eXBlKGNvbnN0IFNTTCAqcyk7CisvKiBTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbCBleHBvcnRzIGEgdmFsdWUgZGVyaXZlZCBmcm9tIHRoZSBtYXN0ZXIgc2VjcmV0LAorICogYXMgc3BlY2lmaWVkIGluIFJGQyA1NzA1LiBJdCB3cml0ZXMgfG9sZW58IGJ5dGVzIHRvIHxvdXR8IGdpdmVuIGEgbGFiZWwgYW5kCisgKiBvcHRpb25hbCBjb250ZXh0LiAoU2luY2UgYSB6ZXJvIGxlbmd0aCBjb250ZXh0IGlzIGFsbG93ZWQsIHRoZSB8dXNlX2NvbnRleHR8CisgKiBmbGFnIGNvbnRyb2xzIHdoZXRoZXIgYSBjb250ZXh0IGlzIGluY2x1ZGVkLikKKyAqCisgKiBJdCByZXR1cm5zIDEgb24gc3VjY2VzcyBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK2ludCBTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4sCisJY29uc3QgY2hhciAqbGFiZWwsIHNpemVfdCBsbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCBzaXplX3QgcGxlbiwKKwlpbnQgdXNlX2NvbnRleHQpOwogCiAjZGVmaW5lIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzLG5hbWUpIFwKIFNTTF9jdHJsKHMsU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRSxUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lLChjaGFyICopbmFtZSkKQEAgLTI5MCw2ICszNTQsMTYgQEAKICNkZWZpbmUgU1NMX0NUWF9zZXRfdGxzZXh0X3RpY2tldF9rZXlfY2Ioc3NsLCBjYikgXAogU1NMX0NUWF9jYWxsYmFja19jdHJsKHNzbCxTU0xfQ1RSTF9TRVRfVExTRVhUX1RJQ0tFVF9LRVlfQ0IsKHZvaWQgKCopKHZvaWQpKWNiKQogCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworI2RlZmluZSBTU0xfVExTRVhUX0hCX0VOQUJMRUQJCQkJMHgwMQorI2RlZmluZSBTU0xfVExTRVhUX0hCX0RPTlRfU0VORF9SRVFVRVNUUwkweDAyCisjZGVmaW5lIFNTTF9UTFNFWFRfSEJfRE9OVF9SRUNWX1JFUVVFU1RTCTB4MDQKKworI2RlZmluZSBTU0xfZ2V0X3Rsc2V4dF9oZWFydGJlYXRfcGVuZGluZyhzc2wpIFwKKyAgICAgICAgU1NMX2N0cmwoKHNzbCksU1NMX0NUUkxfR0VUX1RMU19FWFRfSEVBUlRCRUFUX1BFTkRJTkcsMCxOVUxMKQorI2RlZmluZSBTU0xfc2V0X3Rsc2V4dF9oZWFydGJlYXRfbm9fcmVxdWVzdHMoc3NsLCBhcmcpIFwKKyAgICAgICAgU1NMX2N0cmwoKHNzbCksU1NMX0NUUkxfU0VUX1RMU19FWFRfSEVBUlRCRUFUX05PX1JFUVVFU1RTLGFyZyxOVUxMKQorI2VuZGlmCiAjZW5kaWYKIAogLyogUFNLIGNpcGhlcnN1aXRlcyBmcm9tIDQyNzkgKi8KQEAgLTMyNyw2ICs0MDEsMTQgQEAKICNkZWZpbmUgVExTMV9DS19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9TSEEJCTB4MDMwMDAwMzkKICNkZWZpbmUgVExTMV9DS19BREhfV0lUSF9BRVNfMjU2X1NIQQkJCTB4MDMwMDAwM0EKIAorLyogVExTIHYxLjIgY2lwaGVyc3VpdGVzICovCisjZGVmaW5lIFRMUzFfQ0tfUlNBX1dJVEhfTlVMTF9TSEEyNTYJCQkweDAzMDAwMDNCCisjZGVmaW5lIFRMUzFfQ0tfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCQkweDAzMDAwMDNDCisjZGVmaW5lIFRMUzFfQ0tfUlNBX1dJVEhfQUVTXzI1Nl9TSEEyNTYJCQkweDAzMDAwMDNECisjZGVmaW5lIFRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYJCTB4MDMwMDAwM0UKKyNkZWZpbmUgVExTMV9DS19ESF9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NgkJMHgwMzAwMDAzRgorI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQTI1NgkJMHgwMzAwMDA0MAorCiAvKiBDYW1lbGxpYSBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM0MTMyICovCiAjZGVmaW5lIFRMUzFfQ0tfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJCTB4MDMwMDAwNDEKICNkZWZpbmUgVExTMV9DS19ESF9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQkweDAzMDAwMDQyCkBAIC0zMzUsNiArNDE3LDE2IEBACiAjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCTB4MDMwMDAwNDUKICNkZWZpbmUgVExTMV9DS19BREhfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQkJMHgwMzAwMDA0NgogCisvKiBUTFMgdjEuMiBjaXBoZXJzdWl0ZXMgKi8KKyNkZWZpbmUgVExTMV9DS19ESEVfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCTB4MDMwMDAwNjcKKyNkZWZpbmUgVExTMV9DS19ESF9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NgkJMHgwMzAwMDA2OAorI2RlZmluZSBUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkweDAzMDAwMDY5CisjZGVmaW5lIFRMUzFfQ0tfREhFX0RTU19XSVRIX0FFU18yNTZfU0hBMjU2CQkweDAzMDAwMDZBCisjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkweDAzMDAwMDZCCisjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQUVTXzEyOF9TSEEyNTYJCQkweDAzMDAwMDZDCisjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQUVTXzI1Nl9TSEEyNTYJCQkweDAzMDAwMDZECisKKy8qIENhbWVsbGlhIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzQxMzIgKi8KICNkZWZpbmUgVExTMV9DS19SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQkJMHgwMzAwMDA4NAogI2RlZmluZSBUTFMxX0NLX0RIX0RTU19XSVRIX0NBTUVMTElBXzI1Nl9DQkNfU0hBCTB4MDMwMDAwODUKICNkZWZpbmUgVExTMV9DS19ESF9SU0FfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQkweDAzMDAwMDg2CkBAIC0zNTAsNiArNDQyLDIwIEBACiAjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX1NFRURfU0hBICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwOUEKICNkZWZpbmUgVExTMV9DS19BREhfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAJMHgwMzAwMDA5QgogCisvKiBUTFMgdjEuMiBHQ00gY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OCAqLworI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkJMHgwMzAwMDA5QworI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJMHgwMzAwMDA5RAorI2RlZmluZSBUTFMxX0NLX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCTB4MDMwMDAwOUUKKyNkZWZpbmUgVExTMV9DS19ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkweDAzMDAwMDlGCisjZGVmaW5lIFRMUzFfQ0tfREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkweDAzMDAwMEEwCisjZGVmaW5lIFRMUzFfQ0tfREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkweDAzMDAwMEExCisjZGVmaW5lIFRMUzFfQ0tfREhFX0RTU19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkJMHgwMzAwMDBBMgorI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCTB4MDMwMDAwQTMKKyNkZWZpbmUgVExTMV9DS19ESF9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCTB4MDMwMDAwQTQKKyNkZWZpbmUgVExTMV9DS19ESF9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCTB4MDMwMDAwQTUKKyNkZWZpbmUgVExTMV9DS19BREhfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCTB4MDMwMDAwQTYKKyNkZWZpbmUgVExTMV9DS19BREhfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCTB4MDMwMDAwQTcKKwogLyogRUNDIGNpcGhlcnN1aXRlcyBmcm9tIGRyYWZ0LWlldGYtdGxzLWVjYy0xMi50eHQgd2l0aCBjaGFuZ2VzIHNvb24gdG8gYmUgaW4gZHJhZnQgMTMgKi8KICNkZWZpbmUgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfTlVMTF9TSEEgICAgICAgICAgICAgICAgMHgwMzAwQzAwMQogI2RlZmluZSBUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAweDAzMDBDMDAyCkBAIC0zODEsNiArNDg3LDM4IEBACiAjZGVmaW5lIFRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgIDB4MDMwMEMwMTgKICNkZWZpbmUgVExTMV9DS19FQ0RIX2Fub25fV0lUSF9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgMHgwMzAwQzAxOQogCisvKiBTUlAgY2lwaGVyc3VpdGVzIGZyb20gUkZDIDUwNTQgKi8KKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkJMHgwMzAwQzAxQQorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkweDAzMDBDMDFCCisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9EU1NfV0lUSF8zREVTX0VERV9DQkNfU0hBCTB4MDMwMEMwMUMKKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCQkweDAzMDBDMDFECisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJMHgwMzAwQzAxRQorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfRFNTX1dJVEhfQUVTXzEyOF9DQkNfU0hBCTB4MDMwMEMwMUYKKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCQkweDAzMDBDMDIwCisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJMHgwMzAwQzAyMQorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfRFNTX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCTB4MDMwMEMwMjIKKworLyogRUNESCBITUFDIGJhc2VkIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODkgKi8KKworI2RlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgICAgICAweDAzMDBDMDIzCisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICAgIDB4MDMwMEMwMjQKKyNkZWZpbmUgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgICAgICAgMHgwMzAwQzAyNQorI2RlZmluZSBUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICAgICAweDAzMDBDMDI2CisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgICAgICAgIDB4MDMwMEMwMjcKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICAgICAgMHgwMzAwQzAyOAorI2RlZmluZSBUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgICAgICAgICAweDAzMDBDMDI5CisjZGVmaW5lIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICAgICAgIDB4MDMwMEMwMkEKKworLyogRUNESCBHQ00gYmFzZWQgY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OSAqLworI2RlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CTB4MDMwMEMwMkIKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkweDAzMDBDMDJDCisjZGVmaW5lIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgIDB4MDMwMEMwMkQKKyNkZWZpbmUgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgMHgwMzAwQzAyRQorI2RlZmluZSBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgICAweDAzMDBDMDJGCisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgIDB4MDMwMEMwMzAKKyNkZWZpbmUgVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgICAgMHgwMzAwQzAzMQorI2RlZmluZSBUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgICAweDAzMDBDMDMyCisKIC8qIFhYWAogICogSW5jb25zaXN0ZW5jeSBhbGVydDoKICAqIFRoZSBPcGVuU1NMIG5hbWVzIG9mIGNpcGhlcnMgd2l0aCBlcGhlbWVyYWwgREggaGVyZSBpbmNsdWRlIHRoZSBzdHJpbmcKQEAgLTQ0OCw2ICs1ODYsMTcgQEAKICNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfQUVTXzEyOF9DQkNfU0hBCQkiUFNLLUFFUzEyOC1DQkMtU0hBIgogI2RlZmluZSBUTFMxX1RYVF9QU0tfV0lUSF9BRVNfMjU2X0NCQ19TSEEJCSJQU0stQUVTMjU2LUNCQy1TSEEiCiAKKy8qIFNSUCBjaXBoZXJzdWl0ZSBmcm9tIFJGQyA1MDU0ICovCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfV0lUSF8zREVTX0VERV9DQkNfU0hBCQkiU1JQLTNERVMtRURFLUNCQy1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkiU1JQLVJTQS0zREVTLUVERS1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX0RTU19XSVRIXzNERVNfRURFX0NCQ19TSEEJIlNSUC1EU1MtM0RFUy1FREUtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQkJIlNSUC1BRVMtMTI4LUNCQy1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCSJTUlAtUlNBLUFFUy0xMjgtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9EU1NfV0lUSF9BRVNfMTI4X0NCQ19TSEEJIlNSUC1EU1MtQUVTLTEyOC1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCQkiU1JQLUFFUy0yNTYtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJIlNSUC1SU0EtQUVTLTI1Ni1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX0RTU19XSVRIX0FFU18yNTZfQ0JDX1NIQQkiU1JQLURTUy1BRVMtMjU2LUNCQy1TSEEiCisKIC8qIENhbWVsbGlhIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzQxMzIgKi8KICNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJCSJDQU1FTExJQTEyOC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCSJESC1EU1MtQ0FNRUxMSUExMjgtU0hBIgpAQCAtNDcxLDYgKzYyMCw1NSBAQAogI2RlZmluZSBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfU0VFRF9TSEEgICAgICAgICAgICAgICAgICAiREhFLVJTQS1TRUVELVNIQSIKICNkZWZpbmUgVExTMV9UWFRfQURIX1dJVEhfU0VFRF9TSEEgICAgICAgICAgICAgICAgICAgICAgIkFESC1TRUVELVNIQSIKIAorLyogVExTIHYxLjIgY2lwaGVyc3VpdGVzICovCisjZGVmaW5lIFRMUzFfVFhUX1JTQV9XSVRIX05VTExfU0hBMjU2CQkJIk5VTEwtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NgkJIkFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkiQUVTMjU2LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYJCSJESC1EU1MtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCSJESC1SU0EtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhFX0RTU19XSVRIX0FFU18xMjhfU0hBMjU2CQkiREhFLURTUy1BRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCSJESEUtUlNBLUFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18yNTZfU0hBMjU2CQkiREgtRFNTLUFFUzI1Ni1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkiREgtUlNBLUFFUzI1Ni1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIRV9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkRIRS1EU1MtQUVTMjU2LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkiREhFLVJTQS1BRVMyNTYtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9BREhfV0lUSF9BRVNfMTI4X1NIQTI1NgkJIkFESC1BRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9BREhfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkFESC1BRVMyNTYtU0hBMjU2IgorCisvKiBUTFMgdjEuMiBHQ00gY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OCAqLworI2RlZmluZSBUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCSJBRVMxMjgtR0NNLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkiQUVTMjU2LUdDTS1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJIkRIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJIkRIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkJIkRILVJTQS1BRVMxMjgtR0NNLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkiREgtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CSJESEUtRFNTLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CSJESEUtRFNTLUFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCSJESC1EU1MtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJIkRILURTUy1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfQURIX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkiQURILUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9BREhfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCSJBREgtQUVTMjU2LUdDTS1TSEEzODQiCisKKy8qIEVDREggSE1BQyBiYXNlZCBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM1Mjg5ICovCisKKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiAgICAiRUNESEUtRUNEU0EtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAiRUNESEUtRUNEU0EtQUVTMjU2LVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAiRUNESC1FQ0RTQS1BRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICJFQ0RILUVDRFNBLUFFUzI1Ni1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAgIkVDREhFLVJTQS1BRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICJFQ0RIRS1SU0EtQUVTMjU2LVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiAgICAgICAiRUNESC1SU0EtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCAgICAgICAiRUNESC1SU0EtQUVTMjU2LVNIQTM4NCIKKworLyogRUNESCBHQ00gYmFzZWQgY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OSAqLworI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAiRUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICJFQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgIkVDREgtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICJFQ0RILUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAiRUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQgICAgICAiRUNESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiAgICAgICAiRUNESC1SU0EtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgICJFQ0RILVJTQS1BRVMyNTYtR0NNLVNIQTM4NCIKIAogI2RlZmluZSBUTFNfQ1RfUlNBX1NJR04JCQkxCiAjZGVmaW5lIFRMU19DVF9EU1NfU0lHTgkJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC90cy5oIGIvaW5jbHVkZS9vcGVuc3NsL3RzLmgKaW5kZXggMTkwZThhMS4uYzI0NDhlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3RzLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3RzLmgKQEAgLTg2LDkgKzg2LDYgQEAKICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0KLQogI2lmZGVmICBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3BlbnNzbC91aS5oIGIvaW5jbHVkZS9vcGVuc3NsL3VpLmgKaW5kZXggMmIxY2ZhMi4uYmQ3OGFhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcGVuc3NsL3VpLmgKKysrIGIvaW5jbHVkZS9vcGVuc3NsL3VpLmgKQEAgLTMxNiw3ICszMTYsNyBAQAogaW50ICgqVUlfbWV0aG9kX2dldF9mbHVzaGVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqKTsKIGludCAoKlVJX21ldGhvZF9nZXRfcmVhZGVyKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLFVJX1NUUklORyopOwogaW50ICgqVUlfbWV0aG9kX2dldF9jbG9zZXIoVUlfTUVUSE9EICptZXRob2QpKShVSSopOwotY2hhciogKCpVSV9tZXRob2RfZ2V0X3Byb21wdF9jb25zdHJ1Y3RvcihVSV9NRVRIT0QgKm1ldGhvZCkpKFVJKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKK2NoYXIgKiAoKlVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yKFVJX01FVEhPRCAqbWV0aG9kKSkoVUkqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgaGVscGVycyBmb3IgbWV0aG9kIHdyaXRlcnMgdG8gYWNjZXNzIHJlbGV2YW50CiAgICBkYXRhIGZyb20gYSBVSV9TVFJJTkcuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL29wZW5zc2wveDUwOS5oIGIvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAppbmRleCBlNmY4YTQwLi4wOTJkZDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL29wZW5zc2wveDUwOS5oCisrKyBiL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKQEAgLTY1NywxMSArNjU3LDE1IEBACiAKIGludCBORVRTQ0FQRV9TUEtJX3ByaW50KEJJTyAqb3V0LCBORVRTQ0FQRV9TUEtJICpzcGtpKTsKIAoraW50IFg1MDlfc2lnbmF0dXJlX2R1bXAoQklPICpicCxjb25zdCBBU04xX1NUUklORyAqc2lnLCBpbnQgaW5kZW50KTsKIGludCBYNTA5X3NpZ25hdHVyZV9wcmludChCSU8gKmJwLFg1MDlfQUxHT1IgKmFsZywgQVNOMV9TVFJJTkcgKnNpZyk7CiAKIGludCBYNTA5X3NpZ24oWDUwOSAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQpOworaW50IFg1MDlfc2lnbl9jdHgoWDUwOSAqeCwgRVZQX01EX0NUWCAqY3R4KTsKIGludCBYNTA5X1JFUV9zaWduKFg1MDlfUkVRICp4LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCk7CitpbnQgWDUwOV9SRVFfc2lnbl9jdHgoWDUwOV9SRVEgKngsIEVWUF9NRF9DVFggKmN0eCk7CiBpbnQgWDUwOV9DUkxfc2lnbihYNTA5X0NSTCAqeCwgRVZQX1BLRVkgKnBrZXksIGNvbnN0IEVWUF9NRCAqbWQpOworaW50IFg1MDlfQ1JMX3NpZ25fY3R4KFg1MDlfQ1JMICp4LCBFVlBfTURfQ1RYICpjdHgpOwogaW50IE5FVFNDQVBFX1NQS0lfc2lnbihORVRTQ0FQRV9TUEtJICp4LCBFVlBfUEtFWSAqcGtleSwgY29uc3QgRVZQX01EICptZCk7CiAKIGludCBYNTA5X3B1YmtleV9kaWdlc3QoY29uc3QgWDUwOSAqZGF0YSxjb25zdCBFVlBfTUQgKnR5cGUsCkBAIC03NjMsNiArNzY3LDcgQEAKIGludCBYNTA5X0FMR09SX3NldDAoWDUwOV9BTEdPUiAqYWxnLCBBU04xX09CSkVDVCAqYW9iaiwgaW50IHB0eXBlLCB2b2lkICpwdmFsKTsKIHZvaWQgWDUwOV9BTEdPUl9nZXQwKEFTTjFfT0JKRUNUICoqcGFvYmosIGludCAqcHB0eXBlLCB2b2lkICoqcHB2YWwsCiAJCQkJCQlYNTA5X0FMR09SICphbGdvcik7Cit2b2lkIFg1MDlfQUxHT1Jfc2V0X21kKFg1MDlfQUxHT1IgKmFsZywgY29uc3QgRVZQX01EICptZCk7CiAKIFg1MDlfTkFNRSAqWDUwOV9OQU1FX2R1cChYNTA5X05BTUUgKnhuKTsKIFg1MDlfTkFNRV9FTlRSWSAqWDUwOV9OQU1FX0VOVFJZX2R1cChYNTA5X05BTUVfRU5UUlkgKm5lKTsKQEAgLTg5Niw2ICs5MDEsOSBAQAogaW50IEFTTjFfaXRlbV9zaWduKGNvbnN0IEFTTjFfSVRFTSAqaXQsIFg1MDlfQUxHT1IgKmFsZ29yMSwgWDUwOV9BTEdPUiAqYWxnb3IyLAogCUFTTjFfQklUX1NUUklORyAqc2lnbmF0dXJlLAogCXZvaWQgKmRhdGEsIEVWUF9QS0VZICpwa2V5LCBjb25zdCBFVlBfTUQgKnR5cGUpOworaW50IEFTTjFfaXRlbV9zaWduX2N0eChjb25zdCBBU04xX0lURU0gKml0LAorCQlYNTA5X0FMR09SICphbGdvcjEsIFg1MDlfQUxHT1IgKmFsZ29yMiwKKwkgICAgIAlBU04xX0JJVF9TVFJJTkcgKnNpZ25hdHVyZSwgdm9pZCAqYXNuLCBFVlBfTURfQ1RYICpjdHgpOwogI2VuZGlmCiAKIGludCAJCVg1MDlfc2V0X3ZlcnNpb24oWDUwOSAqeCxsb25nIHZlcnNpb24pOwpAQCAtMTE2MSw2ICsxMTY5LDkgQEAKIAkJCQkgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCiAJCQkJIHVuc2lnbmVkIGNoYXIgKmFpdiwgaW50IHByZl9uaWQpOwogCitYNTA5X0FMR09SICpQS0NTNV9wYmtkZjJfc2V0KGludCBpdGVyLCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwKKwkJCQlpbnQgcHJmX25pZCwgaW50IGtleWxlbik7CisKIC8qIFBLQ1MjOCB1dGlsaXRpZXMgKi8KIAogREVDTEFSRV9BU04xX0ZVTkNUSU9OUyhQS0NTOF9QUklWX0tFWV9JTkZPKQpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5jb25maWcgYi9vcGVuc3NsLmNvbmZpZwppbmRleCA5YjUzM2NhLi43MTA5ZjAzIDEwMDY0NAotLS0gYS9vcGVuc3NsLmNvbmZpZworKysgYi9vcGVuc3NsLmNvbmZpZwpAQCAtMTAsNiArMTAsNyBAQAogTmV0d2FyZSBcCiBWTVMgXAogYXBwcy9kZW1vQ0EgXAorYXBwcy9kZW1vU1JQIFwKIGFwcHMvc2V0IFwKIGJ1Z3MgXAogY2VydHMgXApAQCAtNzEsNiArNzIsNyBAQAogY3J5cHRvL0xQZGlyX3dpbjMyLmMgXAogY3J5cHRvL01ha2VmaWxlIFwKIGNyeXB0by9hZXMvTWFrZWZpbGUgXAorY3J5cHRvL2FybWNhcC5jIFwKIGNyeXB0by9hc24xL01ha2VmaWxlIFwKIGNyeXB0by9iZi9JTlNUQUxMIFwKIGNyeXB0by9iZi9NYWtlZmlsZSBcCkBAIC04Niw4ICs4OCwxMCBAQAogY3J5cHRvL2Jpby9ic3NfcnRjcC5jIFwKIGNyeXB0by9ibi9NYWtlZmlsZSBcCiBjcnlwdG8vYm4vYXNtL3Ztcy5tYXIgXAorY3J5cHRvL2JuL2JuX3g5MzFwLmMgXAogY3J5cHRvL2JuL3Ztcy1oZWxwZXIuYyBcCiBjcnlwdG8vYnVmZmVyL01ha2VmaWxlIFwKK2NyeXB0by9jbWFjL01ha2VmaWxlIFwKIGNyeXB0by9jb21wL01ha2VmaWxlIFwKIGNyeXB0by9jb25mL01ha2VmaWxlIFwKIGNyeXB0by9jcnlwdG8tbGliLmNvbSBcCkBAIC0xMDEsMTMgKzEwNSwyMiBAQAogY3J5cHRvL2Rzby9kc29fdm1zLmMgXAogY3J5cHRvL2Rzby9kc29fd2luMzIuYyBcCiBjcnlwdG8vZWMvTWFrZWZpbGUgXAorY3J5cHRvL2VjL2VjcF9uaXN0cDIyNC5jIFwKK2NyeXB0by9lYy9lY3BfbmlzdHAyNTYuYyBcCitjcnlwdG8vZWMvZWNwX25pc3RwNTIxLmMgXAorY3J5cHRvL2VjL2VjcF9uaXN0cHV0aWwuYyBcCiBjcnlwdG8vZWNkaC9NYWtlZmlsZSBcCiBjcnlwdG8vZWNkc2EvTWFrZWZpbGUgXAogY3J5cHRvL2VuZ2luZS9NYWtlZmlsZSBcCitjcnlwdG8vZW5naW5lL2VuZ19yZHJhbmQuYyBcCitjcnlwdG8vZW5naW5lL2VuZ19yc2F4LmMgXAogY3J5cHRvL2Vyci9NYWtlZmlsZSBcCiBjcnlwdG8vZXZwL01ha2VmaWxlIFwKK2NyeXB0by9ldnAvZXZwX2ZpcHMuYyBcCiBjcnlwdG8vZXZwL21fbWQyLmMgXAogY3J5cHRvL2V2cC9tX3NoYS5jIFwKK2NyeXB0by9maXBzX2Vyci5oIFwKK2NyeXB0by9maXBzX2Vycy5jIFwKIGNyeXB0by9obWFjL01ha2VmaWxlIFwKIGNyeXB0by9pbnN0YWxsLWNyeXB0by5jb20gXAogY3J5cHRvL2pwYWtlL01ha2VmaWxlIFwKQEAgLTExOSwxMiArMTMyLDE0IEBACiBjcnlwdG8vbW9kZXMvTWFrZWZpbGUgXAogY3J5cHRvL21vZGVzL2N0czEyOC5jIFwKIGNyeXB0by9tb2Rlcy9tb2Rlcy5oIFwKK2NyeXB0by9vX2ZpcHMuYyBcCiBjcnlwdG8vb2JqZWN0cy9NYWtlZmlsZSBcCiBjcnlwdG8vb2NzcC9NYWtlZmlsZSBcCiBjcnlwdG8vcGVtL01ha2VmaWxlIFwKIGNyeXB0by9wa2NzMTIvTWFrZWZpbGUgXAogY3J5cHRvL3BrY3M3L01ha2VmaWxlIFwKIGNyeXB0by9wa2NzNy9iaW9fcGs3LmMgXAorY3J5cHRvL3BwY2NhcC5jIFwKIGNyeXB0by9wcXVldWUvTWFrZWZpbGUgXAogY3J5cHRvL3JhbmQvTWFrZWZpbGUgXAogY3J5cHRvL3JhbmQvcmFuZF92bXMuYyBcCkBAIC0xMzQsNiArMTQ5LDggQEAKIGNyeXB0by9yc2EvTWFrZWZpbGUgXAogY3J5cHRvL3NoYS9NYWtlZmlsZSBcCiBjcnlwdG8vc2hhL3NoYV9vbmUuYyBcCitjcnlwdG8vc3JwL01ha2VmaWxlIFwKK2NyeXB0by9zcnAvc3JwdGVzdC5jIFwKIGNyeXB0by9zdGFjay9NYWtlZmlsZSBcCiBjcnlwdG8vc3RvcmUvTWFrZWZpbGUgXAogY3J5cHRvL3RocmVhZHMvcHRocmVhZHMtdm1zLmNvbSBcCkBAIC0xODUsOSArMjAyLDcgQEAKIHNtYWxsX3JlY29yZHMucGF0Y2ggXAogaGFuZHNoYWtlX2N1dHRocm91Z2gucGF0Y2ggXAoganNzZS5wYXRjaCBcCi1ucG4ucGF0Y2ggXAogc2hhMV9hcm12NF9sYXJnZS5wYXRjaCBcCi1taXBzX2FzbS5wYXRjaCBcCiAiCiAKIE9QRU5TU0xfUEFUQ0hFU19wcm9nc19TT1VSQ0VTPSJcCkBAIC0yMzMsMjUgKzI0OCwzIEBACiBzc2wvc3NsX3JzYS5jIFwKIHNzbC9zc2xfc2Vzcy5jIFwKICIKLQotT1BFTlNTTF9QQVRDSEVTX25wbl9TT1VSQ0VTPSJcCi1hcHBzL2FwcHMuYyBcCi1hcHBzL2FwcHMuaCBcCi1hcHBzL3NfY2xpZW50LmMgXAotYXBwcy9zX3NlcnZlci5jIFwKLWluY2x1ZGUvb3BlbnNzbC9zc2wuaCBcCi1pbmNsdWRlL29wZW5zc2wvc3NsMy5oIFwKLWluY2x1ZGUvb3BlbnNzbC90bHMxLmggXAotc3NsL3MzX2JvdGguYyBcCi1zc2wvczNfY2xudC5jIFwKLXNzbC9zM19saWIuYyBcCi1zc2wvczNfcGt0LmMgXAotc3NsL3MzX3NydnIuYyBcCi1zc2wvc3NsLmggXAotc3NsL3NzbDMuaCBcCi1zc2wvc3NsX2Vyci5jIFwKLXNzbC9zc2xfbGliLmMgXAotc3NsL3NzbF9sb2NsLmggXAotc3NsL3QxX2xpYi5jIFwKLXNzbC90bHMxLmggXAotIgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC52ZXJzaW9uIGIvb3BlbnNzbC52ZXJzaW9uCmluZGV4IGE1MzVkYTkuLmM3YjczOGUgMTAwNjQ0Ci0tLSBhL29wZW5zc2wudmVyc2lvbgorKysgYi9vcGVuc3NsLnZlcnNpb24KQEAgLTEsMiArMSwyIEBACiAjIGFsc28gdXBkYXRlIFRoaXJkUGFydHlQcm9qZWN0LnByb3AKLU9QRU5TU0xfVkVSU0lPTj0xLjAuMGgKK09QRU5TU0xfVkVSU0lPTj0xLjAuMQpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9SRUFETUUgYi9wYXRjaGVzL1JFQURNRQppbmRleCBmNzAxMzVjLi5mN2Q4ODZkIDEwMDY0NAotLS0gYS9wYXRjaGVzL1JFQURNRQorKysgYi9wYXRjaGVzL1JFQURNRQpAQCAtMzMsNyArMzMsMyBAQAogc2hhMV9hcm12NF9sYXJnZS5wYXRjaAogCiBUaGlzIHBhdGNoIGVsaW1pbmF0ZXMgbWVtb3J5IHN0b3JlcyB0byBhZGRyZXNzZXMgYmVsb3cgU1AuCi0KLW1pcHNfYXNtLnBhdGNoCi0KLU1JUFMgYXNzZW1ibHkgcm91dGluZXMgKEFFUywgQk4sIFNIQTEsIFNIQTI1NikKZGlmZiAtLWdpdCBhL3BhdGNoZXMvYXBwc19BbmRyb2lkLm1rIGIvcGF0Y2hlcy9hcHBzX0FuZHJvaWQubWsKaW5kZXggYzJkYzJkNy4uOTExMDQ5MCAxMDA2NDQKLS0tIGEvcGF0Y2hlcy9hcHBzX0FuZHJvaWQubWsKKysrIGIvcGF0Y2hlcy9hcHBzX0FuZHJvaWQubWsKQEAgLTQ4LDYgKzQ4LDcgQEAKIAlzbWltZS5jIFwKIAlzcGVlZC5jIFwKIAlzcGthYy5jIFwKKwlzcnAuYyBcCiAJdmVyaWZ5LmMgXAogCXZlcnNpb24uYyBcCiAJeDUwOS5jCmRpZmYgLS1naXQgYS9wYXRjaGVzL2NyeXB0b19BbmRyb2lkLm1rIGIvcGF0Y2hlcy9jcnlwdG9fQW5kcm9pZC5tawppbmRleCA4MDkwYzEyLi5mYjU5OWNlIDEwMDY0NAotLS0gYS9wYXRjaGVzL2NyeXB0b19BbmRyb2lkLm1rCisrKyBiL3BhdGNoZXMvY3J5cHRvX0FuZHJvaWQubWsKQEAgLTE2OSw3ICsxNjksMTEgQEAKIAlibi9ibl9zcXJ0LmMgXAogCWJuL2JuX3dvcmQuYyBcCiAJYnVmZmVyL2J1Zl9lcnIuYyBcCisJYnVmZmVyL2J1Zl9zdHIuYyBcCiAJYnVmZmVyL2J1ZmZlci5jIFwKKwljbWFjL2NtX2FtZXRoLmMgXAorCWNtYWMvY21fcG1ldGguYyBcCisJY21hYy9jbWFjLmMgXAogCWNvbXAvY19ybGUuYyBcCiAJY29tcC9jX3psaWIuYyBcCiAJY29tcC9jb21wX2Vyci5jIFwKQEAgLTIzNSw2ICsyMzksNyBAQAogCWRzby9kc29fbnVsbC5jIFwKIAlkc28vZHNvX29wZW5zc2wuYyBcCiAJZWMvZWMyX211bHQuYyBcCisJZWMvZWMyX29jdC5jIFwKIAllYy9lYzJfc21wbC5jIFwKIAllYy9lY19hbWV0aC5jIFwKIAllYy9lY19hc24xLmMgXApAQCAtMjQ1LDExICsyNTAsMTMgQEAKIAllYy9lY19rZXkuYyBcCiAJZWMvZWNfbGliLmMgXAogCWVjL2VjX211bHQuYyBcCisJZWMvZWNfb2N0LmMgXAogCWVjL2VjX3BtZXRoLmMgXAogCWVjL2VjX3ByaW50LmMgXAogCWVjL2Vja19wcm4uYyBcCiAJZWMvZWNwX21vbnQuYyBcCiAJZWMvZWNwX25pc3QuYyBcCisJZWMvZWNwX29jdC5jIFwKIAllYy9lY3Bfc21wbC5jIFwKIAllY2RoL2VjaF9lcnIuYyBcCiAJZWNkaC9lY2hfa2V5LmMgXApAQCAtMjk1LDYgKzMwMiw3IEBACiAJZXZwL2NfYWxsZC5jIFwKIAlldnAvZGlnZXN0LmMgXAogCWV2cC9lX2Flcy5jIFwKKwlldnAvZV9hZXNfY2JjX2htYWNfc2hhMS5jIFwKIAlldnAvZV9iZi5jIFwKIAlldnAvZV9kZXMuYyBcCiAJZXZwL2VfZGVzMy5jIFwKQEAgLTMwMiw2ICszMTAsNyBAQAogCWV2cC9lX29sZC5jIFwKIAlldnAvZV9yYzIuYyBcCiAJZXZwL2VfcmM0LmMgXAorCWV2cC9lX3JjNF9obWFjX21kNS5jIFwKIAlldnAvZV9yYzUuYyBcCiAJZXZwL2VfeGNiY19kLmMgXAogCWV2cC9lbmNvZGUuYyBcCkBAIC0zNDcsOSArMzU2LDEzIEBACiAJbWQ1L21kNV9kZ3N0LmMgXAogCW1kNS9tZDVfb25lLmMgXAogCW1vZGVzL2NiYzEyOC5jIFwKKwltb2Rlcy9jY20xMjguYyBcCiAJbW9kZXMvY2ZiMTI4LmMgXAogCW1vZGVzL2N0cjEyOC5jIFwKKwltb2Rlcy9nY20xMjguYyBcCiAJbW9kZXMvb2ZiMTI4LmMgXAorCW1vZGVzL3h0czEyOC5jIFwKKwlvX2luaXQuYyBcCiAJb2JqZWN0cy9vX25hbWVzLmMgXAogCW9iamVjdHMvb2JqX2RhdC5jIFwKIAlvYmplY3RzL29ial9lcnIuYyBcCkBAIC0zOTgsNiArNDExLDcgQEAKIAlwa2NzNy9wazdfbWltZS5jIFwKIAlwa2NzNy9wazdfc21pbWUuYyBcCiAJcGtjczcvcGtjczdlcnIuYyBcCisJcHF1ZXVlL3BxdWV1ZS5jIFwKIAlyYW5kL21kX3JhbmQuYyBcCiAJcmFuZC9yYW5kX2VnZC5jIFwKIAlyYW5kL3JhbmRfZXJyLmMgXApAQCAtNDExLDExICs0MjUsMTMgQEAKIAlyYzIvcmMyb2ZiNjQuYyBcCiAJcmM0L3JjNF9lbmMuYyBcCiAJcmM0L3JjNF9za2V5LmMgXAorCXJjNC9yYzRfdXRsLmMgXAogCXJpcGVtZC9ybWRfZGdzdC5jIFwKIAlyaXBlbWQvcm1kX29uZS5jIFwKIAlyc2EvcnNhX2FtZXRoLmMgXAogCXJzYS9yc2FfYXNuMS5jIFwKIAlyc2EvcnNhX2Noay5jIFwKKwlyc2EvcnNhX2NycHQuYyBcCiAJcnNhL3JzYV9lYXkuYyBcCiAJcnNhL3JzYV9lcnIuYyBcCiAJcnNhL3JzYV9nZW4uYyBcCkBAIC00MzYsNiArNDUyLDggQEAKIAlzaGEvc2hhMjU2LmMgXAogCXNoYS9zaGE1MTIuYyBcCiAJc2hhL3NoYV9kZ3N0LmMgXAorCXNycC9zcnBfbGliLmMgXAorCXNycC9zcnBfdmZ5LmMgXAogCXN0YWNrL3N0YWNrLmMgXAogCXRzL3RzX2Vyci5jIFwKIAl0eHRfZGIvdHh0X2RiLmMgXApAQCAtNTA3LDEyICs1MjUsMTUgQEAKIAlleHRlcm5hbC9vcGVuc3NsIFwKIAlleHRlcm5hbC9vcGVuc3NsL2NyeXB0by9hc24xIFwKIAlleHRlcm5hbC9vcGVuc3NsL2NyeXB0by9ldnAgXAorCWV4dGVybmFsL29wZW5zc2wvY3J5cHRvL21vZGVzIFwKIAlleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUgXAogCWV4dGVybmFsL29wZW5zc2wvaW5jbHVkZS9vcGVuc3NsIFwKIAlleHRlcm5hbC96bGliCiAKIGxvY2FsX2NfZmxhZ3MgOj0gLUROT19XSU5ET1dTX0JSQUlOREVBVEgKIAorbG9jYWxfYXNfZmxhZ3MgOj0gLXggYXNzZW1ibGVyLXdpdGgtY3BwCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB0YXJnZXQgc3RhdGljIGxpYnJhcnkKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQpAQCAtNTI1LDYgKzU0Niw3IEBACiAKIExPQ0FMX1NSQ19GSUxFUyArPSAkKGxvY2FsX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyArPSAkKGxvY2FsX2NfZmxhZ3MpCitMT0NBTF9BU0ZMQUdTICs9ICQobG9jYWxfYXNfZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTICs9ICQobG9jYWxfY19pbmNsdWRlcykKIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKIAlMT0NBTF9TUkNfRklMRVMgKz0gJChhcm1fc3JjX2ZpbGVzKQpAQCAtNTYxLDYgKzU4Myw3IEBACiAKIExPQ0FMX1NSQ19GSUxFUyArPSAkKGxvY2FsX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyArPSAkKGxvY2FsX2NfZmxhZ3MpCitMT0NBTF9BU0ZMQUdTICs9ICQobG9jYWxfYXNfZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTICs9ICQobG9jYWxfY19pbmNsdWRlcykKIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKIAlMT0NBTF9TUkNfRklMRVMgKz0gJChhcm1fc3JjX2ZpbGVzKQpAQCAtNTg3LDYgKzYxMCw3IEBACiBpbmNsdWRlICQoTE9DQUxfUEFUSCkvLi4vYW5kcm9pZC1jb25maWcubWsKIExPQ0FMX1NSQ19GSUxFUyArPSAkKGxvY2FsX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyArPSAkKGxvY2FsX2NfZmxhZ3MpIC1EUFVSSUZZCitMT0NBTF9BU0ZMQUdTICs9ICQobG9jYWxfYXNfZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTICs9ICQobG9jYWxfY19pbmNsdWRlcykKIExPQ0FMX1NSQ19GSUxFUyArPSAkKG90aGVyX2FyY2hfc3JjX2ZpbGVzKQogTE9DQUxfU1RBVElDX0xJQlJBUklFUyArPSBsaWJ6CkBAIC02MDIsNiArNjI2LDcgQEAKIGluY2x1ZGUgJChMT0NBTF9QQVRIKS8uLi9hbmRyb2lkLWNvbmZpZy5tawogTE9DQUxfU1JDX0ZJTEVTICs9ICQobG9jYWxfc3JjX2ZpbGVzKQogTE9DQUxfQ0ZMQUdTICs9ICQobG9jYWxfY19mbGFncykgLURQVVJJRlkKK0xPQ0FMX0FTRkxBR1MgKz0gJChsb2NhbF9hc19mbGFncykKIExPQ0FMX0NfSU5DTFVERVMgKz0gJChsb2NhbF9jX2luY2x1ZGVzKQogTE9DQUxfU1JDX0ZJTEVTICs9ICQob3RoZXJfYXJjaF9zcmNfZmlsZXMpCiBMT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGxpYnoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvaGFuZHNoYWtlX2N1dHRocm91Z2gucGF0Y2ggYi9wYXRjaGVzL2hhbmRzaGFrZV9jdXR0aHJvdWdoLnBhdGNoCmluZGV4IDRmMjk4MzkuLjU3YzRjNzggMTAwNjQ0Ci0tLSBhL3BhdGNoZXMvaGFuZHNoYWtlX2N1dHRocm91Z2gucGF0Y2gKKysrIGIvcGF0Y2hlcy9oYW5kc2hha2VfY3V0dGhyb3VnaC5wYXRjaApAQCAtNiw5ICs2LDkgQEAKICAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXN0YXR1cyAgICAgICAgICAgLSByZXF1ZXN0IGNlcnRpZmljYXRlIHN0YXR1cyBmcm9tIHNlcnZlclxuIik7CiAgCUJJT19wcmludGYoYmlvX2VyciwiIC1ub190aWNrZXQgICAgICAgIC0gZGlzYWJsZSB1c2Ugb2YgUkZDNDUwN2JpcyBzZXNzaW9uIHRpY2tldHNcbiIpOwogKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtY3V0dGhyb3VnaCAgICAgICAtIGVuYWJsZSAxLVJUVCBmdWxsLWhhbmRzaGFrZSBmb3Igc3Ryb25nIGNpcGhlcnNcbiIpOwotICNlbmRpZgotIAl9Ci0gCisgIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKKyAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5leHRwcm90b25lZyBhcmcgLSBlbmFibGUgTlBOIGV4dGVuc2lvbiwgY29uc2lkZXJpbmcgbmFtZWQgcHJvdG9jb2xzIHN1cHBvcnRlZCAoY29tbWEtc2VwYXJhdGVkIGxpc3QpXG4iKTsKKyAjIGVuZGlmCiBAQCAtMzA0LDYgKzMwNSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKICAJRVZQX1BLRVkgKmtleSA9IE5VTEw7CiAgCWNoYXIgKkNBcGF0aD1OVUxMLCpDQWZpbGU9TlVMTCwqY2lwaGVyPU5VTEw7CkBAIC0xOTEsOSArMTkxLDkgQEAKICAvKiBleHRyYSBzdGF0ZSAqLwogICNkZWZpbmUgU1NMM19TVF9DV19GTFVTSAkJKDB4MTAwfFNTTF9TVF9DT05ORUNUKQogKyNkZWZpbmUgU1NMM19TVF9DVVRUSFJPVUdIX0NPTVBMRVRFCSgweDEwMXxTU0xfU1RfQ09OTkVDVCkKLSAvKiB3cml0ZSB0byBzZXJ2ZXIgKi8KLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0xOVF9IRUxMT19BCQkoMHgxMTB8U1NMX1NUX0NPTk5FQ1QpCi0gI2RlZmluZSBTU0wzX1NUX0NXX0NMTlRfSEVMTE9fQgkJKDB4MTExfFNTTF9TVF9DT05ORUNUKQorICNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisgI2RlZmluZSBEVExTMV9TQ1RQX1NUX0NXX1dSSVRFX1NPQ0sJCQkoMHgzMTB8U1NMX1NUX0NPTk5FQ1QpCisgI2RlZmluZSBEVExTMV9TQ1RQX1NUX0NSX1JFQURfU09DSwkJCSgweDMyMHxTU0xfU1RfQ09OTkVDVCkKIGRpZmYgLXVhcnAgb3BlbnNzbC0xLjAuMC5vcmlnL3NzbC9zc2xfbGliLmMgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2xpYi5jCiAtLS0gb3BlbnNzbC0xLjAuMC5vcmlnL3NzbC9zc2xfbGliLmMJMjAxMC0wMi0xNyAxNDo0Mzo0Ni4wMDAwMDAwMDAgLTA1MDAKICsrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfbGliLmMJMjAxMC0wNC0yMSAxNzowMjo0NS4wMDAwMDAwMDAgLTA0MDAKZGlmZiAtLWdpdCBhL3BhdGNoZXMvanNzZS5wYXRjaCBiL3BhdGNoZXMvanNzZS5wYXRjaAppbmRleCAyNDlmYjViLi44MGU1MzU3IDEwMDY0NAotLS0gYS9wYXRjaGVzL2pzc2UucGF0Y2gKKysrIGIvcGF0Y2hlcy9qc3NlLnBhdGNoCkBAIC0xMCwxNCArMTAsNiBAQAogIAkvKiBEZWZhdWx0IGdlbmVyYXRlIHNlc3Npb24gSUQgY2FsbGJhY2suICovCiAgCUdFTl9TRVNTSU9OX0NCIGdlbmVyYXRlX3Nlc3Npb25faWQ7CiAgCi1AQCAtMTU0Niw2ICsxNTQ5LDcgQEAgY29uc3QgU1NMX0NJUEhFUiAqU1NMX2dldF9jdXJyZW50X2NpcGhlcgotIGludAlTU0xfQ0lQSEVSX2dldF9iaXRzKGNvbnN0IFNTTF9DSVBIRVIgKmMsaW50ICphbGdfYml0cyk7Ci0gY2hhciAqCVNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24oY29uc3QgU1NMX0NJUEhFUiAqYyk7Ci0gY29uc3QgY2hhciAqCVNTTF9DSVBIRVJfZ2V0X25hbWUoY29uc3QgU1NMX0NJUEhFUiAqYyk7Ci0rY29uc3QgY2hhciAqCVNTTF9DSVBIRVJfYXV0aGVudGljYXRpb25fbWV0aG9kKGNvbnN0IFNTTF9DSVBIRVIgKmMpOwotIAotIGludAlTU0xfZ2V0X2ZkKGNvbnN0IFNTTCAqcyk7Ci0gaW50CVNTTF9nZXRfcmZkKGNvbnN0IFNTTCAqcyk7CiBAQCAtMTU1NCw2ICsxNTU4LDcgQEAgY29uc3QgY2hhciAgKiBTU0xfZ2V0X2NpcGhlcl9saXN0KGNvbnN0IAogIGNoYXIgKglTU0xfZ2V0X3NoYXJlZF9jaXBoZXJzKGNvbnN0IFNTTCAqcywgY2hhciAqYnVmLCBpbnQgbGVuKTsKICBpbnQJU1NMX2dldF9yZWFkX2FoZWFkKGNvbnN0IFNTTCAqIHMpOwpAQCAtNDgsOSArNDAsOSBAQAogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlNTTF9TRVNTSU9OX2dldF9pZChjb25zdCBTU0xfU0VTU0lPTiAqcywKICAJCQkJCXVuc2lnbmVkIGludCAqbGVuKTsKICtjb25zdCBjaGFyICoJU1NMX1NFU1NJT05fZ2V0X3ZlcnNpb24oY29uc3QgU1NMX1NFU1NJT04gKnMpOworIHVuc2lnbmVkIGludCBTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQoY29uc3QgU1NMX1NFU1NJT04gKnMpOwogICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKICBpbnQJU1NMX1NFU1NJT05fcHJpbnRfZnAoRklMRSAqZnAsY29uc3QgU1NMX1NFU1NJT04gKnNlcyk7Ci0gI2VuZGlmCiBAQCAtMTYyNCw2ICsxNjMzLDcgQEAgaW50CVNTTF9TRVNTSU9OX3ByaW50KEJJTyAqZnAsY29uc3QgU1NMXwogIHZvaWQJU1NMX1NFU1NJT05fZnJlZShTU0xfU0VTU0lPTiAqc2VzKTsKICBpbnQJaTJkX1NTTF9TRVNTSU9OKFNTTF9TRVNTSU9OICppbix1bnNpZ25lZCBjaGFyICoqcHApOwpAQCAtMjk2LDEzICsyODgsMTkgQEAKICAvKiB3b3JrcyB3ZWxsIGZvciBTU0x2Miwgbm90IHNvIGdvb2QgZm9yIFNTTHYzICovCiAgY2hhciAqU1NMX2dldF9zaGFyZWRfY2lwaGVycyhjb25zdCBTU0wgKnMsY2hhciAqYnVmLGludCBsZW4pCiAgCXsKLUBAIC0yNTUxLDE4ICsyNTc4LDQ1IEBAIFNTTF9NRVRIT0QgKnNzbF9iYWRfbWV0aG9kKGludCB2ZXIpCitAQCAtMjU1MSwyMiArMjU3OCw0NSBAQCBTU0xfTUVUSE9EICpzc2xfYmFkX21ldGhvZChpbnQgdmVyKQogIAlyZXR1cm4oTlVMTCk7CiAgCX0KICAKIC1jb25zdCBjaGFyICpTU0xfZ2V0X3ZlcnNpb24oY29uc3QgU1NMICpzKQogK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfZ2V0X3ZlcnNpb24oaW50IHZlcnNpb24pCiAgCXsKKy0JaWYgKHMtPnZlcnNpb24gPT0gVExTMV8yX1ZFUlNJT04pCisrCWlmICh2ZXJzaW9uID09IFRMUzFfMl9WRVJTSU9OKQorIAkJcmV0dXJuKCJUTFN2MS4yIik7CistCWVsc2UgaWYgKHMtPnZlcnNpb24gPT0gVExTMV8xX1ZFUlNJT04pCisrCWVsc2UgaWYgKHZlcnNpb24gPT0gVExTMV8xX1ZFUlNJT04pCisgCQlyZXR1cm4oIlRMU3YxLjEiKTsKIC0JaWYgKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQogKwlpZiAodmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCiAgCQlyZXR1cm4oIlRMU3YxIik7CkBAIC0zMzQsMTIgKzMzMiw4IEBACiArCQl7CiArCWNhc2UgU1NMMl9WRVJTSU9OOgogKwkJcmV0dXJuIFNTTF9UWFRfUlNBOwotKwljYXNlIFNTTDNfVkVSU0lPTjoKLSsJY2FzZSBUTFMxX1ZFUlNJT046Ci0rCWNhc2UgRFRMUzFfVkVSU0lPTjoKLSsJCXJldHVybiBTU0xfQ0lQSEVSX2F1dGhlbnRpY2F0aW9uX21ldGhvZChzc2wtPnMzLT50bXAubmV3X2NpcGhlcik7CiArCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gIlVOS05PV04iOworKwkJcmV0dXJuIFNTTF9DSVBIRVJfYXV0aGVudGljYXRpb25fbWV0aG9kKHNzbC0+czMtPnRtcC5uZXdfY2lwaGVyKTsKICsJCX0KICsJfQogKwpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy9taXBzX2FzbS5wYXRjaCBiL3BhdGNoZXMvbWlwc19hc20ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YTgwZjEuLjAwMDAwMDAKLS0tIGEvcGF0Y2hlcy9taXBzX2FzbS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU0NjEgKzAsMCBAQAotZGlmZiAtLWdpdCBhL2NyeXB0by9hZXMvYXNtL2Flcy1taXBzLnBsIGIvY3J5cHRvL2Flcy9hc20vYWVzLW1pcHMucGwKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi4yY2U2ZGVmCi0tLS0gL2Rldi9udWxsCi0rKysgYi9jcnlwdG8vYWVzL2FzbS9hZXMtbWlwcy5wbAotQEAgLTAsMCArMSwxNjExIEBACi0rIyEvdXNyL2Jpbi9lbnYgcGVybAotKwotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAotKyMgcHJvamVjdC4gVGhlIG1vZHVsZSBpcywgaG93ZXZlciwgZHVhbCBsaWNlbnNlZCB1bmRlciBPcGVuU1NMIGFuZAotKyMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKLSsjIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgotKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsKLSsjIEFFUyBmb3IgTUlQUwotKwotKyMgT2N0b2JlciAyMDEwCi0rIwotKyMgQ29kZSB1c2VzIDFLWysyNTZCXSBTLWJveCBhbmQgb24gc2luZ2xlLWlzc3VlIGNvcmUgW3N1Y2ggYXMgUjUwMDBdCi0rIyBzcGVuZHMgfjY4IGN5Y2xlcyBwZXIgYnl0ZSBwcm9jZXNzZWQgd2l0aCAxMjgtYml0IGtleS4gVGhpcyBpcyB+MTYlCi0rIyBmYXN0ZXIgdGhhbiBnY2MtZ2VuZXJhdGVkIGNvZGUsIHdoaWNoIGlzIG5vdCB2ZXJ5IGltcHJlc3NpdmUuIEJ1dAotKyMgcmVjYWxsIHRoYXQgY29tcHJlc3NlZCBTLWJveCByZXF1aXJlcyBleHRyYSBwcm9jZXNzaW5nLCBuYW1lbHkKLSsjIGFkZGl0aW9uYWwgcm90YXRpb25zLiBSb3RhdGlvbnMgYXJlIGltcGxlbWVudGVkIHdpdGggbHdsL2x3ciBwYWlycywKLSsjIHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIGxvYWRpbmcgdW5hbGlnbmVkIGRhdGEuIEFub3RoZXIgY29vbAotKyMgdGhpbmcgYWJvdXQgdGhpcyBtb2R1bGUgaXMgaXRzIGVuZGlhbiBuZXV0cmFsaXR5LCB3aGljaCBtZWFucyB0aGF0Ci0rIyBpdCBwcm9jZXNzZXMgZGF0YSB3aXRob3V0IGV2ZXIgY2hhbmdpbmcgYnl0ZSBvcmRlci4uLgotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsjIFRoZXJlIGlzIGEgbnVtYmVyIG9mIE1JUFMgQUJJIGluIHVzZSwgTzMyIGFuZCBOMzIvNjQgYXJlIG1vc3QKLSsjIHdpZGVseSB1c2VkLiBUaGVuIHRoZXJlIGlzIGEgbmV3IGNvbnRlbmRlcjogTlVCSS4gSXQgYXBwZWFycyB0aGF0IGlmCi0rIyBvbmUgcGlja3MgdGhlIGxhdHRlciwgaXQncyBwb3NzaWJsZSB0byBhcnJhbmdlIGNvZGUgaW4gQUJJIG5ldXRyYWwKLSsjIG1hbm5lci4gVGhlcmVmb3JlIGxldCdzIHN0aWNrIHRvIE5VQkkgcmVnaXN0ZXIgbGF5b3V0OgotKyMKLSsoJHplcm8sJGF0LCR0MCwkdDEsJHQyKT1tYXAoIlwkJF8iLCgwLi4yLDI0LDI1KSk7Ci0rKCRhMCwkYTEsJGEyLCRhMywkYTQsJGE1LCRhNiwkYTcpPW1hcCgiXCQkXyIsKDQuLjExKSk7Ci0rKCRzMCwkczEsJHMyLCRzMywkczQsJHM1LCRzNiwkczcsJHM4LCRzOSwkczEwLCRzMTEpPW1hcCgiXCQkXyIsKDEyLi4yMykpOwotKygkZ3AsJHRwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgzLDI4Li4zMSkpOwotKyMKLSsjIFRoZSByZXR1cm4gdmFsdWUgaXMgcGxhY2VkIGluICRhMC4gRm9sbG93aW5nIGNvZGluZyBydWxlcyBmYWNpbGl0YXRlCi0rIyBpbnRlcm9wZXJhYmlsaXR5OgotKyMKLSsjIC0gbmV2ZXIgZXZlciB0b3VjaCAkdHAsICJ0aHJlYWQgcG9pbnRlciIsIGZvcm1lciAkZ3A7Ci0rIyAtIGNvcHkgcmV0dXJuIHZhbHVlIHRvICR0MCwgZm9ybWVyICR2MCBbb3IgdG8gJGEwIGlmIHlvdSdyZSBhZGFwdGluZwotKyMgICBvbGQgY29kZV07Ci0rIyAtIG9uIE8zMiBwb3B1bGF0ZSAkYTQtJGE3IHdpdGggJ2x3ICRhTiw0Kk4oJHNwKScgaWYgbmVjZXNzYXJ5OwotKyMKLSsjIEZvciByZWZlcmVuY2UgaGVyZSBpcyByZWdpc3RlciBsYXlvdXQgZm9yIE4zMi82NCBNSVBTIEFCSXM6Ci0rIwotKyMgKCR6ZXJvLCRhdCwkdjAsJHYxKT1tYXAoIlwkJF8iLCgwLi4zKSk7Ci0rIyAoJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk9bWFwKCJcJCRfIiwoNC4uMTEpKTsKLSsjICgkdDAsJHQxLCR0MiwkdDMsJHQ4LCR0OSk9bWFwKCJcJCRfIiwoMTIuLjE1LDI0LDI1KSk7Ci0rIyAoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNyk9bWFwKCJcJCRfIiwoMTYuLjIzKSk7Ci0rIyAoJGdwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgyOC4uMzEpKTsKLSsjCi0rJGZsYXZvdXIgPSBzaGlmdDsgIyBzdXBwb3J0ZWQgZmxhdm91cnMgYXJlIG8zMixuMzIsNjQsbnViaTMyLG51Ymk2NAotKwotK2lmICgkZmxhdm91ciA9fiAvNjR8bjMyL2kpIHsKLSsJJFBUUl9BREQ9ImRhZGQiOwkjIGluY2lkZW50YWxseSB3b3JrcyBldmVuIG9uIG4zMgotKwkkUFRSX1NVQj0iZHN1YiI7CSMgaW5jaWRlbnRhbGx5IHdvcmtzIGV2ZW4gb24gbjMyCi0rCSRSRUdfUz0ic2QiOwotKwkkUkVHX0w9ImxkIjsKLSsJJFBUUl9TTEw9ImRzbGwiOwkjIGluY2lkZW50YWxseSB3b3JrcyBldmVuIG9uIG4zMgotKwkkU1pSRUc9ODsKLSt9IGVsc2UgewotKwkkUFRSX0FERD0iYWRkIjsKLSsJJFBUUl9TVUI9InN1YiI7Ci0rCSRSRUdfUz0ic3ciOwotKwkkUkVHX0w9Imx3IjsKLSsJJFBUUl9TTEw9InNsbCI7Ci0rCSRTWlJFRz00OwotK30KLSskcGYgPSAoJGZsYXZvdXIgPX4gL251YmkvaSkgPyAkdDAgOiAkdDI7Ci0rIwotKyMgPGFwcHJvQG9wZW5zc2wub3JnPgotKyMKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rCi0rJGJpZ19lbmRpYW49KGBlY2hvIE1JUFNFTCB8ICRFTlZ7Q0N9IC1FIC1QIC1gPX4vTUlQU0VMLyk/MTowOwotKwotK2ZvciAoQEFSR1YpIHsJJG91dHB1dD0kXyBpZiAoL15cd1tcd1wtXSpcLlx3KyQvKTsJfQotK29wZW4gU1RET1VULCI+JG91dHB1dCI7Ci0rCi0raWYgKCFkZWZpbmVkKCRiaWdfZW5kaWFuKSkKLSt7ICAgICRiaWdfZW5kaWFuPSh1bnBhY2soJ0wnLHBhY2soJ04nLDEpKT09MSk7ICAgfQotKwotK3doaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9eXHdbXHdcLV0qXC5cdyskLykpIHt9Ci0rb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKLSsKLStteSAoJE1TQiwkTFNCKT0oMCwzKTsJIyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsaXR0bGUtZW5kaWFuCi0rCi0rJGNvZGUuPTw8X19fOwotKy50ZXh0Ci0rI2lmZGVmIE9QRU5TU0xfRklQU0NBTklTVEVSCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHNzeW1zLmg+Ci0rI2VuZGlmCi0rCi0rI2lmICFkZWZpbmVkKF9fdnh3b3JrcykgfHwgZGVmaW5lZChfX3BpY19fKQotKy5vcHRpb24JcGljMgotKyNlbmRpZgotKy5zZXQJbm9hdAotK19fXwotKwwKLSt7e3sKLStteSAkRlJBTUVTSVpFPTE2KiRTWlJFRzsKLStteSAkU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gMHhjMGZmZjAwOCA6IDB4YzBmZjAwMDA7Ci0rCi0rbXkgKCRpbnAsJG91dCwka2V5LCRUYmwsJHMwLCRzMSwkczIsJHMzKT0oJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk7Ci0rbXkgKCRpMCwkaTEsJGkyLCRpMyk9KCRhdCwkdDAsJHQxLCR0Mik7Ci0rbXkgKCR0MCwkdDEsJHQyLCR0MywkdDQsJHQ1LCR0NiwkdDcsJHQ4LCR0OSwkdDEwLCR0MTEpID0gbWFwKCJcJCRfIiwoMTIuLjIzKSk7Ci0rbXkgKCRrZXkwLCRjbnQpPSgkZ3AsJGZwKTsKLSsKLSsjIGluc3R1Y3Rpb24gb3JkZXJpbmcgaXMgInN0b2xlbiIgZnJvbSBvdXRwdXQgZnJvbSBNSVBTcHJvIGFzc2VtYmxlcgotKyMgaW52b2tlZCB3aXRoIC1taXBzMyAtTzMgYXJndW1lbnRzLi4uCi0rJGNvZGUuPTw8X19fOwotKy5hbGlnbgk1Ci0rLmVudAlfbWlwc19BRVNfZW5jcnlwdAotK19taXBzX0FFU19lbmNyeXB0OgotKwkuZnJhbWUJJHNwLDAsJHJhCi0rCS5zZXQJcmVvcmRlcgotKwlsdwkkdDAsMCgka2V5KQotKwlsdwkkdDEsNCgka2V5KQotKwlsdwkkdDIsOCgka2V5KQotKwlsdwkkdDMsMTIoJGtleSkKLSsJbHcJJGNudCwyNDAoJGtleSkKLSsJJFBUUl9BREQgJGtleTAsJGtleSwxNgotKwotKwl4b3IJJHMwLCR0MAotKwl4b3IJJHMxLCR0MQotKwl4b3IJJHMyLCR0MgotKwl4b3IJJHMzLCR0MwotKwotKwlzdWIJJGNudCwxCi0rCV94dHIJJGkwLCRzMSwxNi0yCi0rLkxvb3BfZW5jOgotKwlfeHRyCSRpMSwkczIsMTYtMgotKwlfeHRyCSRpMiwkczMsMTYtMgotKwlfeHRyCSRpMywkczAsMTYtMgotKwlhbmQJJGkwLDB4M2ZjCi0rCWFuZAkkaTEsMHgzZmMKLSsJYW5kCSRpMiwweDNmYwotKwlhbmQJJGkzLDB4M2ZjCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWx3bAkkdDAsMygkaTApCQkjIFRlMVtzMT4+MTZdCi0rCWx3bAkkdDEsMygkaTEpCQkjIFRlMVtzMj4+MTZdCi0rCWx3bAkkdDIsMygkaTIpCQkjIFRlMVtzMz4+MTZdCi0rCWx3bAkkdDMsMygkaTMpCQkjIFRlMVtzMD4+MTZdCi0rCWx3cgkkdDAsMigkaTApCQkjIFRlMVtzMT4+MTZdCi0rCWx3cgkkdDEsMigkaTEpCQkjIFRlMVtzMj4+MTZdCi0rCWx3cgkkdDIsMigkaTIpCQkjIFRlMVtzMz4+MTZdCi0rCWx3cgkkdDMsMigkaTMpCQkjIFRlMVtzMD4+MTZdCi0rCi0rCV94dHIJJGkwLCRzMiw4LTIKLSsJX3h0cgkkaTEsJHMzLDgtMgotKwlfeHRyCSRpMiwkczAsOC0yCi0rCV94dHIJJGkzLCRzMSw4LTIKLSsJYW5kCSRpMCwweDNmYwotKwlhbmQJJGkxLDB4M2ZjCi0rCWFuZAkkaTIsMHgzZmMKLSsJYW5kCSRpMywweDNmYwotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsd2wJJHQ0LDIoJGkwKQkJIyBUZTJbczI+PjhdCi0rCWx3bAkkdDUsMigkaTEpCQkjIFRlMltzMz4+OF0KLSsJbHdsCSR0NiwyKCRpMikJCSMgVGUyW3MwPj44XQotKwlsd2wJJHQ3LDIoJGkzKQkJIyBUZTJbczE+PjhdCi0rCWx3cgkkdDQsMSgkaTApCQkjIFRlMltzMj4+OF0KLSsJbHdyCSR0NSwxKCRpMSkJCSMgVGUyW3MzPj44XQotKwlsd3IJJHQ2LDEoJGkyKQkJIyBUZTJbczA+PjhdCi0rCWx3cgkkdDcsMSgkaTMpCQkjIFRlMltzMT4+OF0KLSsKLSsJX3h0cgkkaTAsJHMzLDAtMgotKwlfeHRyCSRpMSwkczAsMC0yCi0rCV94dHIJJGkyLCRzMSwwLTIKLSsJX3h0cgkkaTMsJHMyLDAtMgotKwlhbmQJJGkwLDB4M2ZjCi0rCWFuZAkkaTEsMHgzZmMKLSsJYW5kCSRpMiwweDNmYwotKwlhbmQJJGkzLDB4M2ZjCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWx3bAkkdDgsMSgkaTApCQkjIFRlM1tzM10KLSsJbHdsCSR0OSwxKCRpMSkJCSMgVGUzW3MwXQotKwlsd2wJJHQxMCwxKCRpMikJCSMgVGUzW3MxXQotKwlsd2wJJHQxMSwxKCRpMykJCSMgVGUzW3MyXQotKwlsd3IJJHQ4LDAoJGkwKQkJIyBUZTNbczNdCi0rCWx3cgkkdDksMCgkaTEpCQkjIFRlM1tzMF0KLSsJbHdyCSR0MTAsMCgkaTIpCQkjIFRlM1tzMV0KLSsJbHdyCSR0MTEsMCgkaTMpCQkjIFRlM1tzMl0KLSsKLSsJX3h0cgkkaTAsJHMwLDI0LTIKLSsJX3h0cgkkaTEsJHMxLDI0LTIKLSsJX3h0cgkkaTIsJHMyLDI0LTIKLSsJX3h0cgkkaTMsJHMzLDI0LTIKLSsJYW5kCSRpMCwweDNmYwotKwlhbmQJJGkxLDB4M2ZjCi0rCWFuZAkkaTIsMHgzZmMKLSsJYW5kCSRpMywweDNmYwotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwl4b3IJJHQwLCR0NAotKwl4b3IJJHQxLCR0NQotKwl4b3IJJHQyLCR0NgotKwl4b3IJJHQzLCR0NwotKwlsdwkkdDQsMCgkaTApCQkjIFRlMFtzMD4+MjRdCi0rCWx3CSR0NSwwKCRpMSkJCSMgVGUwW3MxPj4yNF0KLSsJbHcJJHQ2LDAoJGkyKQkJIyBUZTBbczI+PjI0XQotKwlsdwkkdDcsMCgkaTMpCQkjIFRlMFtzMz4+MjRdCi0rCi0rCWx3CSRzMCwwKCRrZXkwKQotKwlsdwkkczEsNCgka2V5MCkKLSsJbHcJJHMyLDgoJGtleTApCi0rCWx3CSRzMywxMigka2V5MCkKLSsKLSsJeG9yCSR0MCwkdDgKLSsJeG9yCSR0MSwkdDkKLSsJeG9yCSR0MiwkdDEwCi0rCXhvcgkkdDMsJHQxMQotKwotKwl4b3IJJHQwLCR0NAotKwl4b3IJJHQxLCR0NQotKwl4b3IJJHQyLCR0NgotKwl4b3IJJHQzLCR0NwotKwotKwlzdWIJJGNudCwxCi0rCSRQVFJfQUREICRrZXkwLDE2Ci0rCXhvcgkkczAsJHQwCi0rCXhvcgkkczEsJHQxCi0rCXhvcgkkczIsJHQyCi0rCXhvcgkkczMsJHQzCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJuZXoJJGNudCwuTG9vcF9lbmMKLSsJX3h0cgkkaTAsJHMxLDE2LTIKLSsKLSsJLnNldAlyZW9yZGVyCi0rCV94dHIJJGkxLCRzMiwxNi0yCi0rCV94dHIJJGkyLCRzMywxNi0yCi0rCV94dHIJJGkzLCRzMCwxNi0yCi0rCWFuZAkkaTAsMHgzZmMKLSsJYW5kCSRpMSwweDNmYwotKwlhbmQJJGkyLDB4M2ZjCi0rCWFuZAkkaTMsMHgzZmMKLSsJJFBUUl9BREQgJGkwLCRUYmwKLSsJJFBUUl9BREQgJGkxLCRUYmwKLSsJJFBUUl9BREQgJGkyLCRUYmwKLSsJJFBUUl9BREQgJGkzLCRUYmwKLSsJbGJ1CSR0MCwyKCRpMCkJCSMgVGU0W3MxPj4xNl0KLSsJbGJ1CSR0MSwyKCRpMSkJCSMgVGU0W3MyPj4xNl0KLSsJbGJ1CSR0MiwyKCRpMikJCSMgVGU0W3MzPj4xNl0KLSsJbGJ1CSR0MywyKCRpMykJCSMgVGU0W3MwPj4xNl0KLSsKLSsJX3h0cgkkaTAsJHMyLDgtMgotKwlfeHRyCSRpMSwkczMsOC0yCi0rCV94dHIJJGkyLCRzMCw4LTIKLSsJX3h0cgkkaTMsJHMxLDgtMgotKwlhbmQJJGkwLDB4M2ZjCi0rCWFuZAkkaTEsMHgzZmMKLSsJYW5kCSRpMiwweDNmYwotKwlhbmQJJGkzLDB4M2ZjCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWxidQkkdDQsMigkaTApCQkjIFRlNFtzMj4+OF0KLSsJbGJ1CSR0NSwyKCRpMSkJCSMgVGU0W3MzPj44XQotKwlsYnUJJHQ2LDIoJGkyKQkJIyBUZTRbczA+PjhdCi0rCWxidQkkdDcsMigkaTMpCQkjIFRlNFtzMT4+OF0KLSsKLSsJX3h0cgkkaTAsJHMwLDI0LTIKLSsJX3h0cgkkaTEsJHMxLDI0LTIKLSsJX3h0cgkkaTIsJHMyLDI0LTIKLSsJX3h0cgkkaTMsJHMzLDI0LTIKLSsJYW5kCSRpMCwweDNmYwotKwlhbmQJJGkxLDB4M2ZjCi0rCWFuZAkkaTIsMHgzZmMKLSsJYW5kCSRpMywweDNmYwotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsYnUJJHQ4LDIoJGkwKQkJIyBUZTRbczA+PjI0XQotKwlsYnUJJHQ5LDIoJGkxKQkJIyBUZTRbczE+PjI0XQotKwlsYnUJJHQxMCwyKCRpMikJCSMgVGU0W3MyPj4yNF0KLSsJbGJ1CSR0MTEsMigkaTMpCQkjIFRlNFtzMz4+MjRdCi0rCi0rCV94dHIJJGkwLCRzMywwLTIKLSsJX3h0cgkkaTEsJHMwLDAtMgotKwlfeHRyCSRpMiwkczEsMC0yCi0rCV94dHIJJGkzLCRzMiwwLTIKLSsJYW5kCSRpMCwweDNmYwotKwlhbmQJJGkxLDB4M2ZjCi0rCWFuZAkkaTIsMHgzZmMKLSsJYW5kCSRpMywweDNmYwotKwotKwlfaW5zCSR0MCwxNgotKwlfaW5zCSR0MSwxNgotKwlfaW5zCSR0MiwxNgotKwlfaW5zCSR0MywxNgotKwotKwlfaW5zCSR0NCw4Ci0rCV9pbnMJJHQ1LDgKLSsJX2lucwkkdDYsOAotKwlfaW5zCSR0Nyw4Ci0rCi0rCXhvcgkkdDAsJHQ0Ci0rCXhvcgkkdDEsJHQ1Ci0rCXhvcgkkdDIsJHQ2Ci0rCXhvcgkkdDMsJHQ3Ci0rCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWxidQkkdDQsMigkaTApCQkjIFRlNFtzM10KLSsJbGJ1CSR0NSwyKCRpMSkJCSMgVGU0W3MwXQotKwlsYnUJJHQ2LDIoJGkyKQkJIyBUZTRbczFdCi0rCWxidQkkdDcsMigkaTMpCQkjIFRlNFtzMl0KLSsKLSsJX2lucwkkdDgsMjQKLSsJX2lucwkkdDksMjQKLSsJX2lucwkkdDEwLDI0Ci0rCV9pbnMJJHQxMSwyNAotKwotKwlsdwkkczAsMCgka2V5MCkKLSsJbHcJJHMxLDQoJGtleTApCi0rCWx3CSRzMiw4KCRrZXkwKQotKwlsdwkkczMsMTIoJGtleTApCi0rCi0rCXhvcgkkdDAsJHQ4Ci0rCXhvcgkkdDEsJHQ5Ci0rCXhvcgkkdDIsJHQxMAotKwl4b3IJJHQzLCR0MTEKLSsKLSsJX2lucwkkdDQsMAotKwlfaW5zCSR0NSwwCi0rCV9pbnMJJHQ2LDAKLSsJX2lucwkkdDcsMAotKwotKwl4b3IJJHQwLCR0NAotKwl4b3IJJHQxLCR0NQotKwl4b3IJJHQyLCR0NgotKwl4b3IJJHQzLCR0NwotKwotKwl4b3IJJHMwLCR0MAotKwl4b3IJJHMxLCR0MQotKwl4b3IJJHMyLCR0MgotKwl4b3IJJHMzLCR0MwotKwotKwlqcgkkcmEKLSsuZW5kCV9taXBzX0FFU19lbmNyeXB0Ci0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJQUVTX2VuY3J5cHQKLSsuZW50CUFFU19lbmNyeXB0Ci0rQUVTX2VuY3J5cHQ6Ci0rCS5mcmFtZQkkc3AsJEZSQU1FU0laRSwkcmEKLSsJLm1hc2sJJFNBVkVEX1JFR1NfTUFTSywtJFNaUkVHCi0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbzMyL2kpOwkjIG8zMiBQSUMtaWZpY2F0aW9uCi0rCS5jcGxvYWQJJHBmCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkkUFRSX1NVQiAkc3AsJEZSQU1FU0laRQotKwkkUkVHX1MJJHJhLCRGUkFNRVNJWkUtMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGZwLCRGUkFNRVNJWkUtMiokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMxMSwkRlJBTUVTSVpFLTMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMTAsJEZSQU1FU0laRS00KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczksJEZSQU1FU0laRS01KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczgsJEZSQU1FU0laRS02KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczcsJEZSQU1FU0laRS03KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczYsJEZSQU1FU0laRS04KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczUsJEZSQU1FU0laRS05KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczQsJEZSQU1FU0laRS0xMCokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7CSMgb3B0aW1pemUgbm9uLW51YmkgcHJvbG9ndWUKLSsJJFJFR19TCVwkMTUsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJXCQxNCwkRlJBTUVTSVpFLTEyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwlcJDEzLCRGUkFNRVNJWkUtMTMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCVwkMTIsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyICF+IC9vMzIvaSk7CSMgbm9uLW8zMiBQSUMtaWZpY2F0aW9uCi0rCS5jcGxvY2FsCSRUYmwKLSsJLmNwc2V0dXAJJHBmLCR6ZXJvLEFFU19lbmNyeXB0Ci0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkuc2V0CXJlb3JkZXIKLSsJbGEJJFRibCxBRVNfVGUJCSMgUElDLWlmaWVkICdsb2FkIGFkZHJlc3MnCi0rCi0rCWx3bAkkczAsMCskTVNCKCRpbnApCi0rCWx3bAkkczEsNCskTVNCKCRpbnApCi0rCWx3bAkkczIsOCskTVNCKCRpbnApCi0rCWx3bAkkczMsMTIrJE1TQigkaW5wKQotKwlsd3IJJHMwLDArJExTQigkaW5wKQotKwlsd3IJJHMxLDQrJExTQigkaW5wKQotKwlsd3IJJHMyLDgrJExTQigkaW5wKQotKwlsd3IJJHMzLDEyKyRMU0IoJGlucCkKLSsKLSsJYmFsCV9taXBzX0FFU19lbmNyeXB0Ci0rCi0rCXN3cgkkczAsMCskTFNCKCRvdXQpCi0rCXN3cgkkczEsNCskTFNCKCRvdXQpCi0rCXN3cgkkczIsOCskTFNCKCRvdXQpCi0rCXN3cgkkczMsMTIrJExTQigkb3V0KQotKwlzd2wJJHMwLDArJE1TQigkb3V0KQotKwlzd2wJJHMxLDQrJE1TQigkb3V0KQotKwlzd2wJJHMyLDgrJE1TQigkb3V0KQotKwlzd2wJJHMzLDEyKyRNU0IoJG91dCkKLSsKLSsJLnNldAlub3Jlb3JkZXIKLSsJJFJFR19MCSRyYSwkRlJBTUVTSVpFLTEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRmcCwkRlJBTUVTSVpFLTIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMTEsJEZSQU1FU0laRS0zKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczEwLCRGUkFNRVNJWkUtNCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM5LCRGUkFNRVNJWkUtNSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM4LCRGUkFNRVNJWkUtNiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM3LCRGUkFNRVNJWkUtNyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM2LCRGUkFNRVNJWkUtOCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM1LCRGUkFNRVNJWkUtOSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM0LCRGUkFNRVNJWkUtMTAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJXCQxNSwkRlJBTUVTSVpFLTExKiRTWlJFRygkc3ApCi0rCSRSRUdfTAlcJDE0LCRGUkFNRVNJWkUtMTIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCVwkMTMsJEZSQU1FU0laRS0xMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJXCQxMiwkRlJBTUVTSVpFLTE0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsJEZSQU1FU0laRS0xNSokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCSRQVFJfQUREICRzcCwkRlJBTUVTSVpFCi0rLmVuZAlBRVNfZW5jcnlwdAotK19fXwotKwwKLSskY29kZS49PDxfX187Ci0rLmFsaWduCTUKLSsuZW50CV9taXBzX0FFU19kZWNyeXB0Ci0rX21pcHNfQUVTX2RlY3J5cHQ6Ci0rCS5mcmFtZQkkc3AsMCwkcmEKLSsJLnNldAlyZW9yZGVyCi0rCWx3CSR0MCwwKCRrZXkpCi0rCWx3CSR0MSw0KCRrZXkpCi0rCWx3CSR0Miw4KCRrZXkpCi0rCWx3CSR0MywxMigka2V5KQotKwlsdwkkY250LDI0MCgka2V5KQotKwkkUFRSX0FERCAka2V5MCwka2V5LDE2Ci0rCi0rCXhvcgkkczAsJHQwCi0rCXhvcgkkczEsJHQxCi0rCXhvcgkkczIsJHQyCi0rCXhvcgkkczMsJHQzCi0rCi0rCXN1YgkkY250LDEKLSsJX3h0cgkkaTAsJHMzLDE2LTIKLSsuTG9vcF9kZWM6Ci0rCV94dHIJJGkxLCRzMCwxNi0yCi0rCV94dHIJJGkyLCRzMSwxNi0yCi0rCV94dHIJJGkzLCRzMiwxNi0yCi0rCWFuZAkkaTAsMHgzZmMKLSsJYW5kCSRpMSwweDNmYwotKwlhbmQJJGkyLDB4M2ZjCi0rCWFuZAkkaTMsMHgzZmMKLSsJJFBUUl9BREQgJGkwLCRUYmwKLSsJJFBUUl9BREQgJGkxLCRUYmwKLSsJJFBUUl9BREQgJGkyLCRUYmwKLSsJJFBUUl9BREQgJGkzLCRUYmwKLSsJbHdsCSR0MCwzKCRpMCkJCSMgVGQxW3MzPj4xNl0KLSsJbHdsCSR0MSwzKCRpMSkJCSMgVGQxW3MwPj4xNl0KLSsJbHdsCSR0MiwzKCRpMikJCSMgVGQxW3MxPj4xNl0KLSsJbHdsCSR0MywzKCRpMykJCSMgVGQxW3MyPj4xNl0KLSsJbHdyCSR0MCwyKCRpMCkJCSMgVGQxW3MzPj4xNl0KLSsJbHdyCSR0MSwyKCRpMSkJCSMgVGQxW3MwPj4xNl0KLSsJbHdyCSR0MiwyKCRpMikJCSMgVGQxW3MxPj4xNl0KLSsJbHdyCSR0MywyKCRpMykJCSMgVGQxW3MyPj4xNl0KLSsKLSsJX3h0cgkkaTAsJHMyLDgtMgotKwlfeHRyCSRpMSwkczMsOC0yCi0rCV94dHIJJGkyLCRzMCw4LTIKLSsJX3h0cgkkaTMsJHMxLDgtMgotKwlhbmQJJGkwLDB4M2ZjCi0rCWFuZAkkaTEsMHgzZmMKLSsJYW5kCSRpMiwweDNmYwotKwlhbmQJJGkzLDB4M2ZjCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWx3bAkkdDQsMigkaTApCQkjIFRkMltzMj4+OF0KLSsJbHdsCSR0NSwyKCRpMSkJCSMgVGQyW3MzPj44XQotKwlsd2wJJHQ2LDIoJGkyKQkJIyBUZDJbczA+PjhdCi0rCWx3bAkkdDcsMigkaTMpCQkjIFRkMltzMT4+OF0KLSsJbHdyCSR0NCwxKCRpMCkJCSMgVGQyW3MyPj44XQotKwlsd3IJJHQ1LDEoJGkxKQkJIyBUZDJbczM+PjhdCi0rCWx3cgkkdDYsMSgkaTIpCQkjIFRkMltzMD4+OF0KLSsJbHdyCSR0NywxKCRpMykJCSMgVGQyW3MxPj44XQotKwotKwlfeHRyCSRpMCwkczEsMC0yCi0rCV94dHIJJGkxLCRzMiwwLTIKLSsJX3h0cgkkaTIsJHMzLDAtMgotKwlfeHRyCSRpMywkczAsMC0yCi0rCWFuZAkkaTAsMHgzZmMKLSsJYW5kCSRpMSwweDNmYwotKwlhbmQJJGkyLDB4M2ZjCi0rCWFuZAkkaTMsMHgzZmMKLSsJJFBUUl9BREQgJGkwLCRUYmwKLSsJJFBUUl9BREQgJGkxLCRUYmwKLSsJJFBUUl9BREQgJGkyLCRUYmwKLSsJJFBUUl9BREQgJGkzLCRUYmwKLSsJbHdsCSR0OCwxKCRpMCkJCSMgVGQzW3MxXQotKwlsd2wJJHQ5LDEoJGkxKQkJIyBUZDNbczJdCi0rCWx3bAkkdDEwLDEoJGkyKQkJIyBUZDNbczNdCi0rCWx3bAkkdDExLDEoJGkzKQkJIyBUZDNbczBdCi0rCWx3cgkkdDgsMCgkaTApCQkjIFRkM1tzMV0KLSsJbHdyCSR0OSwwKCRpMSkJCSMgVGQzW3MyXQotKwlsd3IJJHQxMCwwKCRpMikJCSMgVGQzW3MzXQotKwlsd3IJJHQxMSwwKCRpMykJCSMgVGQzW3MwXQotKwotKwlfeHRyCSRpMCwkczAsMjQtMgotKwlfeHRyCSRpMSwkczEsMjQtMgotKwlfeHRyCSRpMiwkczIsMjQtMgotKwlfeHRyCSRpMywkczMsMjQtMgotKwlhbmQJJGkwLDB4M2ZjCi0rCWFuZAkkaTEsMHgzZmMKLSsJYW5kCSRpMiwweDNmYwotKwlhbmQJJGkzLDB4M2ZjCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCi0rCXhvcgkkdDAsJHQ0Ci0rCXhvcgkkdDEsJHQ1Ci0rCXhvcgkkdDIsJHQ2Ci0rCXhvcgkkdDMsJHQ3Ci0rCi0rCi0rCWx3CSR0NCwwKCRpMCkJCSMgVGQwW3MwPj4yNF0KLSsJbHcJJHQ1LDAoJGkxKQkJIyBUZDBbczE+PjI0XQotKwlsdwkkdDYsMCgkaTIpCQkjIFRkMFtzMj4+MjRdCi0rCWx3CSR0NywwKCRpMykJCSMgVGQwW3MzPj4yNF0KLSsKLSsJbHcJJHMwLDAoJGtleTApCi0rCWx3CSRzMSw0KCRrZXkwKQotKwlsdwkkczIsOCgka2V5MCkKLSsJbHcJJHMzLDEyKCRrZXkwKQotKwotKwl4b3IJJHQwLCR0OAotKwl4b3IJJHQxLCR0OQotKwl4b3IJJHQyLCR0MTAKLSsJeG9yCSR0MywkdDExCi0rCi0rCXhvcgkkdDAsJHQ0Ci0rCXhvcgkkdDEsJHQ1Ci0rCXhvcgkkdDIsJHQ2Ci0rCXhvcgkkdDMsJHQ3Ci0rCi0rCXN1YgkkY250LDEKLSsJJFBUUl9BREQgJGtleTAsMTYKLSsJeG9yCSRzMCwkdDAKLSsJeG9yCSRzMSwkdDEKLSsJeG9yCSRzMiwkdDIKLSsJeG9yCSRzMywkdDMKLSsJLnNldAlub3Jlb3JkZXIKLSsJYm5legkkY250LC5Mb29wX2RlYwotKwlfeHRyCSRpMCwkczMsMTYtMgotKwotKwkuc2V0CXJlb3JkZXIKLSsJbHcJJHQ0LDEwMjQoJFRibCkJCSMgcHJlZmV0Y2ggVGQ0Ci0rCWx3CSR0NSwxMDI0KzMyKCRUYmwpCi0rCWx3CSR0NiwxMDI0KzY0KCRUYmwpCi0rCWx3CSR0NywxMDI0Kzk2KCRUYmwpCi0rCWx3CSR0OCwxMDI0KzEyOCgkVGJsKQotKwlsdwkkdDksMTAyNCsxNjAoJFRibCkKLSsJbHcJJHQxMCwxMDI0KzE5MigkVGJsKQotKwlsdwkkdDExLDEwMjQrMjI0KCRUYmwpCi0rCi0rCV94dHIJJGkwLCRzMywxNgotKwlfeHRyCSRpMSwkczAsMTYKLSsJX3h0cgkkaTIsJHMxLDE2Ci0rCV94dHIJJGkzLCRzMiwxNgotKwlhbmQJJGkwLDB4ZmYKLSsJYW5kCSRpMSwweGZmCi0rCWFuZAkkaTIsMHhmZgotKwlhbmQJJGkzLDB4ZmYKLSsJJFBUUl9BREQgJGkwLCRUYmwKLSsJJFBUUl9BREQgJGkxLCRUYmwKLSsJJFBUUl9BREQgJGkyLCRUYmwKLSsJJFBUUl9BREQgJGkzLCRUYmwKLSsJbGJ1CSR0MCwxMDI0KCRpMCkJCSMgVGQ0W3MzPj4xNl0KLSsJbGJ1CSR0MSwxMDI0KCRpMSkJCSMgVGQ0W3MwPj4xNl0KLSsJbGJ1CSR0MiwxMDI0KCRpMikJCSMgVGQ0W3MxPj4xNl0KLSsJbGJ1CSR0MywxMDI0KCRpMykJCSMgVGQ0W3MyPj4xNl0KLSsKLSsJX3h0cgkkaTAsJHMyLDgKLSsJX3h0cgkkaTEsJHMzLDgKLSsJX3h0cgkkaTIsJHMwLDgKLSsJX3h0cgkkaTMsJHMxLDgKLSsJYW5kCSRpMCwweGZmCi0rCWFuZAkkaTEsMHhmZgotKwlhbmQJJGkyLDB4ZmYKLSsJYW5kCSRpMywweGZmCi0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWxidQkkdDQsMTAyNCgkaTApCQkjIFRkNFtzMj4+OF0KLSsJbGJ1CSR0NSwxMDI0KCRpMSkJCSMgVGQ0W3MzPj44XQotKwlsYnUJJHQ2LDEwMjQoJGkyKQkJIyBUZDRbczA+PjhdCi0rCWxidQkkdDcsMTAyNCgkaTMpCQkjIFRkNFtzMT4+OF0KLSsKLSsJX3h0cgkkaTAsJHMwLDI0Ci0rCV94dHIJJGkxLCRzMSwyNAotKwlfeHRyCSRpMiwkczIsMjQKLSsJX3h0cgkkaTMsJHMzLDI0Ci0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWxidQkkdDgsMTAyNCgkaTApCQkjIFRkNFtzMD4+MjRdCi0rCWxidQkkdDksMTAyNCgkaTEpCQkjIFRkNFtzMT4+MjRdCi0rCWxidQkkdDEwLDEwMjQoJGkyKQkJIyBUZDRbczI+PjI0XQotKwlsYnUJJHQxMSwxMDI0KCRpMykJCSMgVGQ0W3MzPj4yNF0KLSsKLSsJX3h0cgkkaTAsJHMxLDAKLSsJX3h0cgkkaTEsJHMyLDAKLSsJX3h0cgkkaTIsJHMzLDAKLSsJX3h0cgkkaTMsJHMwLDAKLSsKLSsJX2lucwkkdDAsMTYKLSsJX2lucwkkdDEsMTYKLSsJX2lucwkkdDIsMTYKLSsJX2lucwkkdDMsMTYKLSsKLSsJX2lucwkkdDQsOAotKwlfaW5zCSR0NSw4Ci0rCV9pbnMJJHQ2LDgKLSsJX2lucwkkdDcsOAotKwotKwl4b3IJJHQwLCR0NAotKwl4b3IJJHQxLCR0NQotKwl4b3IJJHQyLCR0NgotKwl4b3IJJHQzLCR0NwotKwotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsYnUJJHQ0LDEwMjQoJGkwKQkJIyBUZDRbczFdCi0rCWxidQkkdDUsMTAyNCgkaTEpCQkjIFRkNFtzMl0KLSsJbGJ1CSR0NiwxMDI0KCRpMikJCSMgVGQ0W3MzXQotKwlsYnUJJHQ3LDEwMjQoJGkzKQkJIyBUZDRbczBdCi0rCi0rCV9pbnMJJHQ4LDI0Ci0rCV9pbnMJJHQ5LDI0Ci0rCV9pbnMJJHQxMCwyNAotKwlfaW5zCSR0MTEsMjQKLSsKLSsJbHcJJHMwLDAoJGtleTApCi0rCWx3CSRzMSw0KCRrZXkwKQotKwlsdwkkczIsOCgka2V5MCkKLSsJbHcJJHMzLDEyKCRrZXkwKQotKwotKwlfaW5zCSR0NCwwCi0rCV9pbnMJJHQ1LDAKLSsJX2lucwkkdDYsMAotKwlfaW5zCSR0NywwCi0rCi0rCi0rCXhvcgkkdDAsJHQ4Ci0rCXhvcgkkdDEsJHQ5Ci0rCXhvcgkkdDIsJHQxMAotKwl4b3IJJHQzLCR0MTEKLSsKLSsJeG9yCSR0MCwkdDQKLSsJeG9yCSR0MSwkdDUKLSsJeG9yCSR0MiwkdDYKLSsJeG9yCSR0MywkdDcKLSsKLSsJeG9yCSRzMCwkdDAKLSsJeG9yCSRzMSwkdDEKLSsJeG9yCSRzMiwkdDIKLSsJeG9yCSRzMywkdDMKLSsKLSsJanIJJHJhCi0rLmVuZAlfbWlwc19BRVNfZGVjcnlwdAotKwotKy5hbGlnbgk1Ci0rLmdsb2JsCUFFU19kZWNyeXB0Ci0rLmVudAlBRVNfZGVjcnlwdAotK0FFU19kZWNyeXB0OgotKwkuZnJhbWUJJHNwLCRGUkFNRVNJWkUsJHJhCi0rCS5tYXNrCSRTQVZFRF9SRUdTX01BU0ssLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL28zMi9pKTsJIyBvMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2FkCSRwZgotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJJFBUUl9TVUIgJHNwLCRGUkFNRVNJWkUKLSsJJFJFR19TCSRyYSwkRlJBTUVTSVpFLTEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRmcCwkRlJBTUVTSVpFLTIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMTEsJEZSQU1FU0laRS0zKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczEwLCRGUkFNRVNJWkUtNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM5LCRGUkFNRVNJWkUtNSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM4LCRGUkFNRVNJWkUtNiokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM3LCRGUkFNRVNJWkUtNyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM2LCRGUkFNRVNJWkUtOCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM1LCRGUkFNRVNJWkUtOSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM0LCRGUkFNRVNJWkUtMTAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIHByb2xvZ3VlCi0rCSRSRUdfUwlcJDE1LCRGUkFNRVNJWkUtMTEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCVwkMTQsJEZSQU1FU0laRS0xMiokU1pSRUcoJHNwKQotKwkkUkVHX1MJXCQxMywkRlJBTUVTSVpFLTEzKiRTWlJFRygkc3ApCi0rCSRSRUdfUwlcJDEyLCRGUkFNRVNJWkUtMTQqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRncCwkRlJBTUVTSVpFLTE1KiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciAhfiAvbzMyL2kpOwkjIG5vbi1vMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2NhbAkkVGJsCi0rCS5jcHNldHVwCSRwZiwkemVybyxBRVNfZGVjcnlwdAotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJLnNldAlyZW9yZGVyCi0rCWxhCSRUYmwsQUVTX1RkCQkjIFBJQy1pZmllZCAnbG9hZCBhZGRyZXNzJwotKwotKwlsd2wJJHMwLDArJE1TQigkaW5wKQotKwlsd2wJJHMxLDQrJE1TQigkaW5wKQotKwlsd2wJJHMyLDgrJE1TQigkaW5wKQotKwlsd2wJJHMzLDEyKyRNU0IoJGlucCkKLSsJbHdyCSRzMCwwKyRMU0IoJGlucCkKLSsJbHdyCSRzMSw0KyRMU0IoJGlucCkKLSsJbHdyCSRzMiw4KyRMU0IoJGlucCkKLSsJbHdyCSRzMywxMiskTFNCKCRpbnApCi0rCi0rCWJhbAlfbWlwc19BRVNfZGVjcnlwdAotKwotKwlzd3IJJHMwLDArJExTQigkb3V0KQotKwlzd3IJJHMxLDQrJExTQigkb3V0KQotKwlzd3IJJHMyLDgrJExTQigkb3V0KQotKwlzd3IJJHMzLDEyKyRMU0IoJG91dCkKLSsJc3dsCSRzMCwwKyRNU0IoJG91dCkKLSsJc3dsCSRzMSw0KyRNU0IoJG91dCkKLSsJc3dsCSRzMiw4KyRNU0IoJG91dCkKLSsJc3dsCSRzMywxMiskTVNCKCRvdXQpCi0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRSRUdfTAkkcmEsJEZSQU1FU0laRS0xKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZnAsJEZSQU1FU0laRS0yKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczExLCRGUkFNRVNJWkUtMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxMCwkRlJBTUVTSVpFLTQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzOSwkRlJBTUVTSVpFLTUqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzOCwkRlJBTUVTSVpFLTYqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNywkRlJBTUVTSVpFLTcqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNiwkRlJBTUVTSVpFLTgqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNSwkRlJBTUVTSVpFLTkqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNCwkRlJBTUVTSVpFLTEwKiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19MCVwkMTUsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJXCQxNCwkRlJBTUVTSVpFLTEyKiRTWlJFRygkc3ApCi0rCSRSRUdfTAlcJDEzLCRGUkFNRVNJWkUtMTMqJFNaUkVHKCRzcCkKLSsJJFJFR19MCVwkMTIsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwkkUFRSX0FERCAkc3AsJEZSQU1FU0laRQotKy5lbmQJQUVTX2RlY3J5cHQKLStfX18KLSt9fX0KLSsMCi0re3t7Ci0rbXkgJEZSQU1FU0laRT04KiRTWlJFRzsKLStteSAkU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gMHhjMDAwZjAwOCA6IDB4YzAwMDAwMDA7Ci0rCi0rbXkgKCRpbnAsJGJpdHMsJGtleSwkVGJsKT0oJGEwLCRhMSwkYTIsJGEzKTsKLStteSAoJHJrMCwkcmsxLCRyazIsJHJrMywkcms0LCRyazUsJHJrNiwkcms3KT0oJGE0LCRhNSwkYTYsJGE3LCRzMCwkczEsJHMyLCRzMyk7Ci0rbXkgKCRpMCwkaTEsJGkyLCRpMyk9KCRhdCwkdDAsJHQxLCR0Mik7Ci0rbXkgKCRyY29uLCRjbnQpPSgkZ3AsJGZwKTsKLSsKLSskY29kZS49PDxfX187Ci0rLmFsaWduCTUKLSsuZW50CV9taXBzX0FFU19zZXRfZW5jcnlwdF9rZXkKLStfbWlwc19BRVNfc2V0X2VuY3J5cHRfa2V5OgotKwkuZnJhbWUJJHNwLDAsJHJhCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJlcXoJJGlucCwuTGVrZXlfZG9uZQotKwlsaQkkdDAsLTEKLSsJYmVxegkka2V5LC5MZWtleV9kb25lCi0rCSRQVFJfQUREICRyY29uLCRUYmwsMTAyNCsyNTYKLSsKLSsJLnNldAlyZW9yZGVyCi0rCWx3bAkkcmswLDArJE1TQigkaW5wKQkjIGxvYWQgMTI4IGJpdHMKLSsJbHdsCSRyazEsNCskTVNCKCRpbnApCi0rCWx3bAkkcmsyLDgrJE1TQigkaW5wKQotKwlsd2wJJHJrMywxMiskTVNCKCRpbnApCi0rCWxpCSRhdCwxMjgKLSsJbHdyCSRyazAsMCskTFNCKCRpbnApCi0rCWx3cgkkcmsxLDQrJExTQigkaW5wKQotKwlsd3IJJHJrMiw4KyRMU0IoJGlucCkKLSsJbHdyCSRyazMsMTIrJExTQigkaW5wKQotKwkuc2V0CW5vcmVvcmRlcgotKwliZXEJJGJpdHMsJGF0LC5MMTI4Yml0cwotKwlsaQkkY250LDEwCi0rCi0rCS5zZXQJcmVvcmRlcgotKwlsd2wJJHJrNCwxNiskTVNCKCRpbnApCSMgbG9hZCAxOTIgYml0cwotKwlsd2wJJHJrNSwyMCskTVNCKCRpbnApCi0rCWxpCSRhdCwxOTIKLSsJbHdyCSRyazQsMTYrJExTQigkaW5wKQotKwlsd3IJJHJrNSwyMCskTFNCKCRpbnApCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJlcQkkYml0cywkYXQsLkwxOTJiaXRzCi0rCWxpCSRjbnQsOAotKwotKwkuc2V0CXJlb3JkZXIKLSsJbHdsCSRyazYsMjQrJE1TQigkaW5wKQkjIGxvYWQgMjU2IGJpdHMKLSsJbHdsCSRyazcsMjgrJE1TQigkaW5wKQotKwlsaQkkYXQsMjU2Ci0rCWx3cgkkcms2LDI0KyRMU0IoJGlucCkKLSsJbHdyCSRyazcsMjgrJExTQigkaW5wKQotKwkuc2V0CW5vcmVvcmRlcgotKwliZXEJJGJpdHMsJGF0LC5MMjU2Yml0cwotKwlsaQkkY250LDcKLSsKLSsJYgkuTGVrZXlfZG9uZQotKwlsaQkkdDAsLTIKLSsKLSsuYWxpZ24JNAotKy5MMTI4Yml0czoKLSsJLnNldAlyZW9yZGVyCi0rCXNybAkkaTAsJHJrMywxNgotKwlzcmwJJGkxLCRyazMsOAotKwlhbmQJJGkwLDB4ZmYKLSsJYW5kCSRpMSwweGZmCi0rCWFuZAkkaTIsJHJrMywweGZmCi0rCXNybAkkaTMsJHJrMywyNAotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsYnUJJGkwLDEwMjQoJGkwKQotKwlsYnUJJGkxLDEwMjQoJGkxKQotKwlsYnUJJGkyLDEwMjQoJGkyKQotKwlsYnUJJGkzLDEwMjQoJGkzKQotKwotKwlzdwkkcmswLDAoJGtleSkKLSsJc3cJJHJrMSw0KCRrZXkpCi0rCXN3CSRyazIsOCgka2V5KQotKwlzdwkkcmszLDEyKCRrZXkpCi0rCXN1YgkkY250LDEKLSsJJFBUUl9BREQgJGtleSwxNgotKwotKwlfYmlhcwkkaTAsMjQKLSsJX2JpYXMJJGkxLDE2Ci0rCV9iaWFzCSRpMiw4Ci0rCV9iaWFzCSRpMywwCi0rCi0rCXhvcgkkcmswLCRpMAotKwlsdwkkaTAsMCgkcmNvbikKLSsJeG9yCSRyazAsJGkxCi0rCXhvcgkkcmswLCRpMgotKwl4b3IJJHJrMCwkaTMKLSsJeG9yCSRyazAsJGkwCi0rCi0rCXhvcgkkcmsxLCRyazAKLSsJeG9yCSRyazIsJHJrMQotKwl4b3IJJHJrMywkcmsyCi0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJuZXoJJGNudCwuTDEyOGJpdHMKLSsJJFBUUl9BREQgJHJjb24sNAotKwotKwlzdwkkcmswLDAoJGtleSkKLSsJc3cJJHJrMSw0KCRrZXkpCi0rCXN3CSRyazIsOCgka2V5KQotKwlsaQkkY250LDEwCi0rCXN3CSRyazMsMTIoJGtleSkKLSsJbGkJJHQwLDAKLSsJc3cJJGNudCw4MCgka2V5KQotKwliCS5MZWtleV9kb25lCi0rCSRQVFJfU1VCICRrZXksMTAqMTYKLSsKLSsuYWxpZ24JNAotKy5MMTkyYml0czoKLSsJLnNldAlyZW9yZGVyCi0rCXNybAkkaTAsJHJrNSwxNgotKwlzcmwJJGkxLCRyazUsOAotKwlhbmQJJGkwLDB4ZmYKLSsJYW5kCSRpMSwweGZmCi0rCWFuZAkkaTIsJHJrNSwweGZmCi0rCXNybAkkaTMsJHJrNSwyNAotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsYnUJJGkwLDEwMjQoJGkwKQotKwlsYnUJJGkxLDEwMjQoJGkxKQotKwlsYnUJJGkyLDEwMjQoJGkyKQotKwlsYnUJJGkzLDEwMjQoJGkzKQotKwotKwlzdwkkcmswLDAoJGtleSkKLSsJc3cJJHJrMSw0KCRrZXkpCi0rCXN3CSRyazIsOCgka2V5KQotKwlzdwkkcmszLDEyKCRrZXkpCi0rCXN3CSRyazQsMTYoJGtleSkKLSsJc3cJJHJrNSwyMCgka2V5KQotKwlzdWIJJGNudCwxCi0rCSRQVFJfQUREICRrZXksMjQKLSsKLSsJX2JpYXMJJGkwLDI0Ci0rCV9iaWFzCSRpMSwxNgotKwlfYmlhcwkkaTIsOAotKwlfYmlhcwkkaTMsMAotKwotKwl4b3IJJHJrMCwkaTAKLSsJbHcJJGkwLDAoJHJjb24pCi0rCXhvcgkkcmswLCRpMQotKwl4b3IJJHJrMCwkaTIKLSsJeG9yCSRyazAsJGkzCi0rCXhvcgkkcmswLCRpMAotKwotKwl4b3IJJHJrMSwkcmswCi0rCXhvcgkkcmsyLCRyazEKLSsJeG9yCSRyazMsJHJrMgotKwl4b3IJJHJrNCwkcmszCi0rCXhvcgkkcms1LCRyazQKLSsKLSsJLnNldAlub3Jlb3JkZXIKLSsJYm5legkkY250LC5MMTkyYml0cwotKwkkUFRSX0FERCAkcmNvbiw0Ci0rCi0rCXN3CSRyazAsMCgka2V5KQotKwlzdwkkcmsxLDQoJGtleSkKLSsJc3cJJHJrMiw4KCRrZXkpCi0rCWxpCSRjbnQsMTIKLSsJc3cJJHJrMywxMigka2V5KQotKwlsaQkkdDAsMAotKwlzdwkkY250LDQ4KCRrZXkpCi0rCWIJLkxla2V5X2RvbmUKLSsJJFBUUl9TVUIgJGtleSwxMioxNgotKwotKy5hbGlnbgk0Ci0rLkwyNTZiaXRzOgotKwkuc2V0CXJlb3JkZXIKLSsJc3JsCSRpMCwkcms3LDE2Ci0rCXNybAkkaTEsJHJrNyw4Ci0rCWFuZAkkaTAsMHhmZgotKwlhbmQJJGkxLDB4ZmYKLSsJYW5kCSRpMiwkcms3LDB4ZmYKLSsJc3JsCSRpMywkcms3LDI0Ci0rCSRQVFJfQUREICRpMCwkVGJsCi0rCSRQVFJfQUREICRpMSwkVGJsCi0rCSRQVFJfQUREICRpMiwkVGJsCi0rCSRQVFJfQUREICRpMywkVGJsCi0rCWxidQkkaTAsMTAyNCgkaTApCi0rCWxidQkkaTEsMTAyNCgkaTEpCi0rCWxidQkkaTIsMTAyNCgkaTIpCi0rCWxidQkkaTMsMTAyNCgkaTMpCi0rCi0rCXN3CSRyazAsMCgka2V5KQotKwlzdwkkcmsxLDQoJGtleSkKLSsJc3cJJHJrMiw4KCRrZXkpCi0rCXN3CSRyazMsMTIoJGtleSkKLSsJc3cJJHJrNCwxNigka2V5KQotKwlzdwkkcms1LDIwKCRrZXkpCi0rCXN3CSRyazYsMjQoJGtleSkKLSsJc3cJJHJrNywyOCgka2V5KQotKwlzdWIJJGNudCwxCi0rCi0rCV9iaWFzCSRpMCwyNAotKwlfYmlhcwkkaTEsMTYKLSsJX2JpYXMJJGkyLDgKLSsJX2JpYXMJJGkzLDAKLSsKLSsJeG9yCSRyazAsJGkwCi0rCWx3CSRpMCwwKCRyY29uKQotKwl4b3IJJHJrMCwkaTEKLSsJeG9yCSRyazAsJGkyCi0rCXhvcgkkcmswLCRpMwotKwl4b3IJJHJrMCwkaTAKLSsKLSsJeG9yCSRyazEsJHJrMAotKwl4b3IJJHJrMiwkcmsxCi0rCXhvcgkkcmszLCRyazIKLSsJYmVxegkkY250LC5MMjU2Yml0c19kb25lCi0rCi0rCXNybAkkaTAsJHJrMywyNAotKwlzcmwJJGkxLCRyazMsMTYKLSsJc3JsCSRpMiwkcmszLDgKLSsJYW5kCSRpMywkcmszLDB4ZmYKLSsJYW5kCSRpMSwweGZmCi0rCWFuZAkkaTIsMHhmZgotKwkkUFRSX0FERCAkaTAsJFRibAotKwkkUFRSX0FERCAkaTEsJFRibAotKwkkUFRSX0FERCAkaTIsJFRibAotKwkkUFRSX0FERCAkaTMsJFRibAotKwlsYnUJJGkwLDEwMjQoJGkwKQotKwlsYnUJJGkxLDEwMjQoJGkxKQotKwlsYnUJJGkyLDEwMjQoJGkyKQotKwlsYnUJJGkzLDEwMjQoJGkzKQotKwlzbGwJJGkwLDI0Ci0rCXNsbAkkaTEsMTYKLSsJc2xsCSRpMiw4Ci0rCi0rCXhvcgkkcms0LCRpMAotKwl4b3IJJHJrNCwkaTEKLSsJeG9yCSRyazQsJGkyCi0rCXhvcgkkcms0LCRpMwotKwotKwl4b3IJJHJrNSwkcms0Ci0rCXhvcgkkcms2LCRyazUKLSsJeG9yCSRyazcsJHJrNgotKwotKwkkUFRSX0FERCAka2V5LDMyCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWIJLkwyNTZiaXRzCi0rCSRQVFJfQUREICRyY29uLDQKLSsKLSsuTDI1NmJpdHNfZG9uZToKLSsJc3cJJHJrMCwzMigka2V5KQotKwlzdwkkcmsxLDM2KCRrZXkpCi0rCXN3CSRyazIsNDAoJGtleSkKLSsJbGkJJGNudCwxNAotKwlzdwkkcmszLDQ0KCRrZXkpCi0rCWxpCSR0MCwwCi0rCXN3CSRjbnQsNDgoJGtleSkKLSsJJFBUUl9TVUIgJGtleSwxMioxNgotKwotKy5MZWtleV9kb25lOgotKwlqcgkkcmEKLSsJbm9wCi0rLmVuZAlfbWlwc19BRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCi0rLmdsb2JsCUFFU19zZXRfZW5jcnlwdF9rZXkKLSsuZW50CUFFU19zZXRfZW5jcnlwdF9rZXkKLStBRVNfc2V0X2VuY3J5cHRfa2V5OgotKwkuZnJhbWUJJHNwLCRGUkFNRVNJWkUsJHJhCi0rCS5tYXNrCSRTQVZFRF9SRUdTX01BU0ssLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL28zMi9pKTsJIyBvMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2FkCSRwZgotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJJFBUUl9TVUIgJHNwLCRGUkFNRVNJWkUKLSsJJFJFR19TCSRyYSwkRlJBTUVTSVpFLTEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRmcCwkRlJBTUVTSVpFLTIqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIHByb2xvZ3VlCi0rCSRSRUdfUwkkczMsJEZSQU1FU0laRS0zKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczIsJEZSQU1FU0laRS00KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczEsJEZSQU1FU0laRS01KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczAsJEZSQU1FU0laRS02KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkZ3AsJEZSQU1FU0laRS03KiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciAhfiAvbzMyL2kpOwkjIG5vbi1vMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2NhbAkkVGJsCi0rCS5jcHNldHVwCSRwZiwkemVybyxBRVNfc2V0X2VuY3J5cHRfa2V5Ci0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkuc2V0CXJlb3JkZXIKLSsJbGEJJFRibCxBRVNfVGUJCSMgUElDLWlmaWVkICdsb2FkIGFkZHJlc3MnCi0rCi0rCWJhbAlfbWlwc19BRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rCW1vdmUJJGEwLCR0MAotKwkkUkVHX0wJJHJhLCRGUkFNRVNJWkUtMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGZwLCRGUkFNRVNJWkUtMiokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCSRSRUdfTAkkczMsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMyLCRGUkFNRVNJWkUtMTIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMSwkRlJBTUVTSVpFLTEzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczAsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwkkUFRSX0FERCAkc3AsJEZSQU1FU0laRQotKy5lbmQJQUVTX3NldF9lbmNyeXB0X2tleQotK19fXwotKwwKLStteSAoJGhlYWQsJHRhaWwpPSgkaW5wLCRiaXRzKTsKLStteSAoJHRwMSwkdHAyLCR0cDQsJHRwOCwkdHA5LCR0cGIsJHRwZCwkdHBlKT0oJGE0LCRhNSwkYTYsJGE3LCRzMCwkczEsJHMyLCRzMyk7Ci0rbXkgKCRtLCR4ODA4MDgwODAsJHg3ZjdmN2Y3ZiwkeDFiMWIxYjFiKT0oJGF0LCR0MCwkdDEsJHQyKTsKLSskY29kZS49PDxfX187Ci0rLmFsaWduCTUKLSsuZ2xvYmwJQUVTX3NldF9kZWNyeXB0X2tleQotKy5lbnQJQUVTX3NldF9kZWNyeXB0X2tleQotK0FFU19zZXRfZGVjcnlwdF9rZXk6Ci0rCS5mcmFtZQkkc3AsJEZSQU1FU0laRSwkcmEKLSsJLm1hc2sJJFNBVkVEX1JFR1NfTUFTSywtJFNaUkVHCi0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbzMyL2kpOwkjIG8zMiBQSUMtaWZpY2F0aW9uCi0rCS5jcGxvYWQJJHBmCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkkUFRSX1NVQiAkc3AsJEZSQU1FU0laRQotKwkkUkVHX1MJJHJhLCRGUkFNRVNJWkUtMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGZwLCRGUkFNRVNJWkUtMiokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7CSMgb3B0aW1pemUgbm9uLW51YmkgcHJvbG9ndWUKLSsJJFJFR19TCSRzMywkRlJBTUVTSVpFLTMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMiwkRlJBTUVTSVpFLTQqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMSwkRlJBTUVTSVpFLTUqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMCwkRlJBTUVTSVpFLTYqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRncCwkRlJBTUVTSVpFLTcqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyICF+IC9vMzIvaSk7CSMgbm9uLW8zMiBQSUMtaWZpY2F0aW9uCi0rCS5jcGxvY2FsCSRUYmwKLSsJLmNwc2V0dXAJJHBmLCR6ZXJvLEFFU19zZXRfZGVjcnlwdF9rZXkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwlsYQkkVGJsLEFFU19UZQkJIyBQSUMtaWZpZWQgJ2xvYWQgYWRkcmVzcycKLSsKLSsJYmFsCV9taXBzX0FFU19zZXRfZW5jcnlwdF9rZXkKLSsKLSsJYmx0egkkdDAsLkxka2V5X2RvbmUKLSsKLSsJc2xsCSRhdCwkY250LDQKLSsJJFBUUl9BREQgJGhlYWQsJGtleSwwCi0rCSRQVFJfQUREICR0YWlsLCRrZXksJGF0Ci0rLmFsaWduCTQKLSsuTHN3YXA6Ci0rCWx3CSRyazAsMCgkaGVhZCkKLSsJbHcJJHJrMSw0KCRoZWFkKQotKwlsdwkkcmsyLDgoJGhlYWQpCi0rCWx3CSRyazMsMTIoJGhlYWQpCi0rCWx3CSRyazQsMCgkdGFpbCkKLSsJbHcJJHJrNSw0KCR0YWlsKQotKwlsdwkkcms2LDgoJHRhaWwpCi0rCWx3CSRyazcsMTIoJHRhaWwpCi0rCXN3CSRyazAsMCgkdGFpbCkKLSsJc3cJJHJrMSw0KCR0YWlsKQotKwlzdwkkcmsyLDgoJHRhaWwpCi0rCXN3CSRyazMsMTIoJHRhaWwpCi0rCSRQVFJfQUREICRoZWFkLDE2Ci0rCSRQVFJfU1VCICR0YWlsLDE2Ci0rCXN3CSRyazQsLTE2KCRoZWFkKQotKwlzdwkkcms1LC0xMigkaGVhZCkKLSsJc3cJJHJrNiwtOCgkaGVhZCkKLSsJc3cJJHJrNywtNCgkaGVhZCkKLSsJYm5lCSRoZWFkLCR0YWlsLC5Mc3dhcAotKwotKwlsdwkkdHAxLDE2KCRrZXkpCQkjIG1vZHVsby1zY2hlZHVsZWQKLSsJbHVpCSR4ODA4MDgwODAsMHg4MDgwCi0rCXN1YgkkY250LDEKLSsJb3IJJHg4MDgwODA4MCwweDgwODAKLSsJc2xsCSRjbnQsMgotKwkkUFRSX0FERCAka2V5LDE2Ci0rCWx1aQkkeDFiMWIxYjFiLDB4MWIxYgotKwlub3IJJHg3ZjdmN2Y3ZiwkemVybywkeDgwODA4MDgwCi0rCW9yCSR4MWIxYjFiMWIsMHgxYjFiCi0rLmFsaWduCTQKLSsuTG1peDoKLSsJYW5kCSRtLCR0cDEsJHg4MDgwODA4MAotKwlhbmQJJHRwMiwkdHAxLCR4N2Y3ZjdmN2YKLSsJc3JsCSR0cDQsJG0sNwotKwlhZGR1CSR0cDIsJHRwMgkJIyB0cDI8PDEKLSsJc3VidQkkbSwkdHA0Ci0rCWFuZAkkbSwkeDFiMWIxYjFiCi0rCXhvcgkkdHAyLCRtCi0rCi0rCWFuZAkkbSwkdHAyLCR4ODA4MDgwODAKLSsJYW5kCSR0cDQsJHRwMiwkeDdmN2Y3ZjdmCi0rCXNybAkkdHA4LCRtLDcKLSsJYWRkdQkkdHA0LCR0cDQJCSMgdHA0PDwxCi0rCXN1YnUJJG0sJHRwOAotKwlhbmQJJG0sJHgxYjFiMWIxYgotKwl4b3IJJHRwNCwkbQotKwotKwlhbmQJJG0sJHRwNCwkeDgwODA4MDgwCi0rCWFuZAkkdHA4LCR0cDQsJHg3ZjdmN2Y3ZgotKwlzcmwJJHRwOSwkbSw3Ci0rCWFkZHUJJHRwOCwkdHA4CQkjIHRwODw8MQotKwlzdWJ1CSRtLCR0cDkKLSsJYW5kCSRtLCR4MWIxYjFiMWIKLSsJeG9yCSR0cDgsJG0KLSsKLSsJeG9yCSR0cDksJHRwOCwkdHAxCi0rCXhvcgkkdHBlLCR0cDgsJHRwNAotKwl4b3IJJHRwYiwkdHA5LCR0cDIKLSsJeG9yCSR0cGQsJHRwOSwkdHA0Ci0rCi0rCV9yb3IJJHRwMSwkdHBkLDE2Ci0rCSB4b3IJJHRwZSwkdHAyCi0rCV9yb3IJJHRwMiwkdHBkLC0xNgotKwl4b3IJJHRwZSwkdHAxCi0rCV9yb3IJJHRwMSwkdHA5LDgKLSsJeG9yCSR0cGUsJHRwMgotKwlfcm9yCSR0cDIsJHRwOSwtMjQKLSsJeG9yCSR0cGUsJHRwMQotKwlfcm9yCSR0cDEsJHRwYiwyNAotKwl4b3IJJHRwZSwkdHAyCi0rCV9yb3IJJHRwMiwkdHBiLC04Ci0rCXhvcgkkdHBlLCR0cDEKLSsJbHcJJHRwMSw0KCRrZXkpCQkjIG1vZHVsby1zY2hlZHVsZWQKLSsJeG9yCSR0cGUsJHRwMgotKwlzdWIJJGNudCwxCi0rCXN3CSR0cGUsMCgka2V5KQotKwkkUFRSX0FERCAka2V5LDQKLSsJYm5legkkY250LC5MbWl4Ci0rCi0rCWxpCSR0MCwwCi0rLkxka2V5X2RvbmU6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rCW1vdmUJJGEwLCR0MAotKwkkUkVHX0wJJHJhLCRGUkFNRVNJWkUtMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGZwLCRGUkFNRVNJWkUtMiokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCSRSRUdfTAkkczMsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMyLCRGUkFNRVNJWkUtMTIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMSwkRlJBTUVTSVpFLTEzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczAsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwkkUFRSX0FERCAkc3AsJEZSQU1FU0laRQotKy5lbmQJQUVTX3NldF9kZWNyeXB0X2tleQotK19fXwotK319fQotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsjIFRhYmxlcyBhcmUga2VwdCBpbiBlbmRpYW4tbmV1dHJhbCBtYW5uZXIKLSskY29kZS49PDxfX187Ci0rLnJkYXRhCi0rLmFsaWduCTYKLStBRVNfVGU6Ci0rLmJ5dGUJMHhjNiwweDYzLDB4NjMsMHhhNSwJMHhmOCwweDdjLDB4N2MsMHg4NAkjIFRlMAotKy5ieXRlCTB4ZWUsMHg3NywweDc3LDB4OTksCTB4ZjYsMHg3YiwweDdiLDB4OGQKLSsuYnl0ZQkweGZmLDB4ZjIsMHhmMiwweDBkLAkweGQ2LDB4NmIsMHg2YiwweGJkCi0rLmJ5dGUJMHhkZSwweDZmLDB4NmYsMHhiMSwJMHg5MSwweGM1LDB4YzUsMHg1NAotKy5ieXRlCTB4NjAsMHgzMCwweDMwLDB4NTAsCTB4MDIsMHgwMSwweDAxLDB4MDMKLSsuYnl0ZQkweGNlLDB4NjcsMHg2NywweGE5LAkweDU2LDB4MmIsMHgyYiwweDdkCi0rLmJ5dGUJMHhlNywweGZlLDB4ZmUsMHgxOSwJMHhiNSwweGQ3LDB4ZDcsMHg2MgotKy5ieXRlCTB4NGQsMHhhYiwweGFiLDB4ZTYsCTB4ZWMsMHg3NiwweDc2LDB4OWEKLSsuYnl0ZQkweDhmLDB4Y2EsMHhjYSwweDQ1LAkweDFmLDB4ODIsMHg4MiwweDlkCi0rLmJ5dGUJMHg4OSwweGM5LDB4YzksMHg0MCwJMHhmYSwweDdkLDB4N2QsMHg4NwotKy5ieXRlCTB4ZWYsMHhmYSwweGZhLDB4MTUsCTB4YjIsMHg1OSwweDU5LDB4ZWIKLSsuYnl0ZQkweDhlLDB4NDcsMHg0NywweGM5LAkweGZiLDB4ZjAsMHhmMCwweDBiCi0rLmJ5dGUJMHg0MSwweGFkLDB4YWQsMHhlYywJMHhiMywweGQ0LDB4ZDQsMHg2NwotKy5ieXRlCTB4NWYsMHhhMiwweGEyLDB4ZmQsCTB4NDUsMHhhZiwweGFmLDB4ZWEKLSsuYnl0ZQkweDIzLDB4OWMsMHg5YywweGJmLAkweDUzLDB4YTQsMHhhNCwweGY3Ci0rLmJ5dGUJMHhlNCwweDcyLDB4NzIsMHg5NiwJMHg5YiwweGMwLDB4YzAsMHg1YgotKy5ieXRlCTB4NzUsMHhiNywweGI3LDB4YzIsCTB4ZTEsMHhmZCwweGZkLDB4MWMKLSsuYnl0ZQkweDNkLDB4OTMsMHg5MywweGFlLAkweDRjLDB4MjYsMHgyNiwweDZhCi0rLmJ5dGUJMHg2YywweDM2LDB4MzYsMHg1YSwJMHg3ZSwweDNmLDB4M2YsMHg0MQotKy5ieXRlCTB4ZjUsMHhmNywweGY3LDB4MDIsCTB4ODMsMHhjYywweGNjLDB4NGYKLSsuYnl0ZQkweDY4LDB4MzQsMHgzNCwweDVjLAkweDUxLDB4YTUsMHhhNSwweGY0Ci0rLmJ5dGUJMHhkMSwweGU1LDB4ZTUsMHgzNCwJMHhmOSwweGYxLDB4ZjEsMHgwOAotKy5ieXRlCTB4ZTIsMHg3MSwweDcxLDB4OTMsCTB4YWIsMHhkOCwweGQ4LDB4NzMKLSsuYnl0ZQkweDYyLDB4MzEsMHgzMSwweDUzLAkweDJhLDB4MTUsMHgxNSwweDNmCi0rLmJ5dGUJMHgwOCwweDA0LDB4MDQsMHgwYywJMHg5NSwweGM3LDB4YzcsMHg1MgotKy5ieXRlCTB4NDYsMHgyMywweDIzLDB4NjUsCTB4OWQsMHhjMywweGMzLDB4NWUKLSsuYnl0ZQkweDMwLDB4MTgsMHgxOCwweDI4LAkweDM3LDB4OTYsMHg5NiwweGExCi0rLmJ5dGUJMHgwYSwweDA1LDB4MDUsMHgwZiwJMHgyZiwweDlhLDB4OWEsMHhiNQotKy5ieXRlCTB4MGUsMHgwNywweDA3LDB4MDksCTB4MjQsMHgxMiwweDEyLDB4MzYKLSsuYnl0ZQkweDFiLDB4ODAsMHg4MCwweDliLAkweGRmLDB4ZTIsMHhlMiwweDNkCi0rLmJ5dGUJMHhjZCwweGViLDB4ZWIsMHgyNiwJMHg0ZSwweDI3LDB4MjcsMHg2OQotKy5ieXRlCTB4N2YsMHhiMiwweGIyLDB4Y2QsCTB4ZWEsMHg3NSwweDc1LDB4OWYKLSsuYnl0ZQkweDEyLDB4MDksMHgwOSwweDFiLAkweDFkLDB4ODMsMHg4MywweDllCi0rLmJ5dGUJMHg1OCwweDJjLDB4MmMsMHg3NCwJMHgzNCwweDFhLDB4MWEsMHgyZQotKy5ieXRlCTB4MzYsMHgxYiwweDFiLDB4MmQsCTB4ZGMsMHg2ZSwweDZlLDB4YjIKLSsuYnl0ZQkweGI0LDB4NWEsMHg1YSwweGVlLAkweDViLDB4YTAsMHhhMCwweGZiCi0rLmJ5dGUJMHhhNCwweDUyLDB4NTIsMHhmNiwJMHg3NiwweDNiLDB4M2IsMHg0ZAotKy5ieXRlCTB4YjcsMHhkNiwweGQ2LDB4NjEsCTB4N2QsMHhiMywweGIzLDB4Y2UKLSsuYnl0ZQkweDUyLDB4MjksMHgyOSwweDdiLAkweGRkLDB4ZTMsMHhlMywweDNlCi0rLmJ5dGUJMHg1ZSwweDJmLDB4MmYsMHg3MSwJMHgxMywweDg0LDB4ODQsMHg5NwotKy5ieXRlCTB4YTYsMHg1MywweDUzLDB4ZjUsCTB4YjksMHhkMSwweGQxLDB4NjgKLSsuYnl0ZQkweDAwLDB4MDAsMHgwMCwweDAwLAkweGMxLDB4ZWQsMHhlZCwweDJjCi0rLmJ5dGUJMHg0MCwweDIwLDB4MjAsMHg2MCwJMHhlMywweGZjLDB4ZmMsMHgxZgotKy5ieXRlCTB4NzksMHhiMSwweGIxLDB4YzgsCTB4YjYsMHg1YiwweDViLDB4ZWQKLSsuYnl0ZQkweGQ0LDB4NmEsMHg2YSwweGJlLAkweDhkLDB4Y2IsMHhjYiwweDQ2Ci0rLmJ5dGUJMHg2NywweGJlLDB4YmUsMHhkOSwJMHg3MiwweDM5LDB4MzksMHg0YgotKy5ieXRlCTB4OTQsMHg0YSwweDRhLDB4ZGUsCTB4OTgsMHg0YywweDRjLDB4ZDQKLSsuYnl0ZQkweGIwLDB4NTgsMHg1OCwweGU4LAkweDg1LDB4Y2YsMHhjZiwweDRhCi0rLmJ5dGUJMHhiYiwweGQwLDB4ZDAsMHg2YiwJMHhjNSwweGVmLDB4ZWYsMHgyYQotKy5ieXRlCTB4NGYsMHhhYSwweGFhLDB4ZTUsCTB4ZWQsMHhmYiwweGZiLDB4MTYKLSsuYnl0ZQkweDg2LDB4NDMsMHg0MywweGM1LAkweDlhLDB4NGQsMHg0ZCwweGQ3Ci0rLmJ5dGUJMHg2NiwweDMzLDB4MzMsMHg1NSwJMHgxMSwweDg1LDB4ODUsMHg5NAotKy5ieXRlCTB4OGEsMHg0NSwweDQ1LDB4Y2YsCTB4ZTksMHhmOSwweGY5LDB4MTAKLSsuYnl0ZQkweDA0LDB4MDIsMHgwMiwweDA2LAkweGZlLDB4N2YsMHg3ZiwweDgxCi0rLmJ5dGUJMHhhMCwweDUwLDB4NTAsMHhmMCwJMHg3OCwweDNjLDB4M2MsMHg0NAotKy5ieXRlCTB4MjUsMHg5ZiwweDlmLDB4YmEsCTB4NGIsMHhhOCwweGE4LDB4ZTMKLSsuYnl0ZQkweGEyLDB4NTEsMHg1MSwweGYzLAkweDVkLDB4YTMsMHhhMywweGZlCi0rLmJ5dGUJMHg4MCwweDQwLDB4NDAsMHhjMCwJMHgwNSwweDhmLDB4OGYsMHg4YQotKy5ieXRlCTB4M2YsMHg5MiwweDkyLDB4YWQsCTB4MjEsMHg5ZCwweDlkLDB4YmMKLSsuYnl0ZQkweDcwLDB4MzgsMHgzOCwweDQ4LAkweGYxLDB4ZjUsMHhmNSwweDA0Ci0rLmJ5dGUJMHg2MywweGJjLDB4YmMsMHhkZiwJMHg3NywweGI2LDB4YjYsMHhjMQotKy5ieXRlCTB4YWYsMHhkYSwweGRhLDB4NzUsCTB4NDIsMHgyMSwweDIxLDB4NjMKLSsuYnl0ZQkweDIwLDB4MTAsMHgxMCwweDMwLAkweGU1LDB4ZmYsMHhmZiwweDFhCi0rLmJ5dGUJMHhmZCwweGYzLDB4ZjMsMHgwZSwJMHhiZiwweGQyLDB4ZDIsMHg2ZAotKy5ieXRlCTB4ODEsMHhjZCwweGNkLDB4NGMsCTB4MTgsMHgwYywweDBjLDB4MTQKLSsuYnl0ZQkweDI2LDB4MTMsMHgxMywweDM1LAkweGMzLDB4ZWMsMHhlYywweDJmCi0rLmJ5dGUJMHhiZSwweDVmLDB4NWYsMHhlMSwJMHgzNSwweDk3LDB4OTcsMHhhMgotKy5ieXRlCTB4ODgsMHg0NCwweDQ0LDB4Y2MsCTB4MmUsMHgxNywweDE3LDB4MzkKLSsuYnl0ZQkweDkzLDB4YzQsMHhjNCwweDU3LAkweDU1LDB4YTcsMHhhNywweGYyCi0rLmJ5dGUJMHhmYywweDdlLDB4N2UsMHg4MiwJMHg3YSwweDNkLDB4M2QsMHg0NwotKy5ieXRlCTB4YzgsMHg2NCwweDY0LDB4YWMsCTB4YmEsMHg1ZCwweDVkLDB4ZTcKLSsuYnl0ZQkweDMyLDB4MTksMHgxOSwweDJiLAkweGU2LDB4NzMsMHg3MywweDk1Ci0rLmJ5dGUJMHhjMCwweDYwLDB4NjAsMHhhMCwJMHgxOSwweDgxLDB4ODEsMHg5OAotKy5ieXRlCTB4OWUsMHg0ZiwweDRmLDB4ZDEsCTB4YTMsMHhkYywweGRjLDB4N2YKLSsuYnl0ZQkweDQ0LDB4MjIsMHgyMiwweDY2LAkweDU0LDB4MmEsMHgyYSwweDdlCi0rLmJ5dGUJMHgzYiwweDkwLDB4OTAsMHhhYiwJMHgwYiwweDg4LDB4ODgsMHg4MwotKy5ieXRlCTB4OGMsMHg0NiwweDQ2LDB4Y2EsCTB4YzcsMHhlZSwweGVlLDB4MjkKLSsuYnl0ZQkweDZiLDB4YjgsMHhiOCwweGQzLAkweDI4LDB4MTQsMHgxNCwweDNjCi0rLmJ5dGUJMHhhNywweGRlLDB4ZGUsMHg3OSwJMHhiYywweDVlLDB4NWUsMHhlMgotKy5ieXRlCTB4MTYsMHgwYiwweDBiLDB4MWQsCTB4YWQsMHhkYiwweGRiLDB4NzYKLSsuYnl0ZQkweGRiLDB4ZTAsMHhlMCwweDNiLAkweDY0LDB4MzIsMHgzMiwweDU2Ci0rLmJ5dGUJMHg3NCwweDNhLDB4M2EsMHg0ZSwJMHgxNCwweDBhLDB4MGEsMHgxZQotKy5ieXRlCTB4OTIsMHg0OSwweDQ5LDB4ZGIsCTB4MGMsMHgwNiwweDA2LDB4MGEKLSsuYnl0ZQkweDQ4LDB4MjQsMHgyNCwweDZjLAkweGI4LDB4NWMsMHg1YywweGU0Ci0rLmJ5dGUJMHg5ZiwweGMyLDB4YzIsMHg1ZCwJMHhiZCwweGQzLDB4ZDMsMHg2ZQotKy5ieXRlCTB4NDMsMHhhYywweGFjLDB4ZWYsCTB4YzQsMHg2MiwweDYyLDB4YTYKLSsuYnl0ZQkweDM5LDB4OTEsMHg5MSwweGE4LAkweDMxLDB4OTUsMHg5NSwweGE0Ci0rLmJ5dGUJMHhkMywweGU0LDB4ZTQsMHgzNywJMHhmMiwweDc5LDB4NzksMHg4YgotKy5ieXRlCTB4ZDUsMHhlNywweGU3LDB4MzIsCTB4OGIsMHhjOCwweGM4LDB4NDMKLSsuYnl0ZQkweDZlLDB4MzcsMHgzNywweDU5LAkweGRhLDB4NmQsMHg2ZCwweGI3Ci0rLmJ5dGUJMHgwMSwweDhkLDB4OGQsMHg4YywJMHhiMSwweGQ1LDB4ZDUsMHg2NAotKy5ieXRlCTB4OWMsMHg0ZSwweDRlLDB4ZDIsCTB4NDksMHhhOSwweGE5LDB4ZTAKLSsuYnl0ZQkweGQ4LDB4NmMsMHg2YywweGI0LAkweGFjLDB4NTYsMHg1NiwweGZhCi0rLmJ5dGUJMHhmMywweGY0LDB4ZjQsMHgwNywJMHhjZiwweGVhLDB4ZWEsMHgyNQotKy5ieXRlCTB4Y2EsMHg2NSwweDY1LDB4YWYsCTB4ZjQsMHg3YSwweDdhLDB4OGUKLSsuYnl0ZQkweDQ3LDB4YWUsMHhhZSwweGU5LAkweDEwLDB4MDgsMHgwOCwweDE4Ci0rLmJ5dGUJMHg2ZiwweGJhLDB4YmEsMHhkNSwJMHhmMCwweDc4LDB4NzgsMHg4OAotKy5ieXRlCTB4NGEsMHgyNSwweDI1LDB4NmYsCTB4NWMsMHgyZSwweDJlLDB4NzIKLSsuYnl0ZQkweDM4LDB4MWMsMHgxYywweDI0LAkweDU3LDB4YTYsMHhhNiwweGYxCi0rLmJ5dGUJMHg3MywweGI0LDB4YjQsMHhjNywJMHg5NywweGM2LDB4YzYsMHg1MQotKy5ieXRlCTB4Y2IsMHhlOCwweGU4LDB4MjMsCTB4YTEsMHhkZCwweGRkLDB4N2MKLSsuYnl0ZQkweGU4LDB4NzQsMHg3NCwweDljLAkweDNlLDB4MWYsMHgxZiwweDIxCi0rLmJ5dGUJMHg5NiwweDRiLDB4NGIsMHhkZCwJMHg2MSwweGJkLDB4YmQsMHhkYwotKy5ieXRlCTB4MGQsMHg4YiwweDhiLDB4ODYsCTB4MGYsMHg4YSwweDhhLDB4ODUKLSsuYnl0ZQkweGUwLDB4NzAsMHg3MCwweDkwLAkweDdjLDB4M2UsMHgzZSwweDQyCi0rLmJ5dGUJMHg3MSwweGI1LDB4YjUsMHhjNCwJMHhjYywweDY2LDB4NjYsMHhhYQotKy5ieXRlCTB4OTAsMHg0OCwweDQ4LDB4ZDgsCTB4MDYsMHgwMywweDAzLDB4MDUKLSsuYnl0ZQkweGY3LDB4ZjYsMHhmNiwweDAxLAkweDFjLDB4MGUsMHgwZSwweDEyCi0rLmJ5dGUJMHhjMiwweDYxLDB4NjEsMHhhMywJMHg2YSwweDM1LDB4MzUsMHg1ZgotKy5ieXRlCTB4YWUsMHg1NywweDU3LDB4ZjksCTB4NjksMHhiOSwweGI5LDB4ZDAKLSsuYnl0ZQkweDE3LDB4ODYsMHg4NiwweDkxLAkweDk5LDB4YzEsMHhjMSwweDU4Ci0rLmJ5dGUJMHgzYSwweDFkLDB4MWQsMHgyNywJMHgyNywweDllLDB4OWUsMHhiOQotKy5ieXRlCTB4ZDksMHhlMSwweGUxLDB4MzgsCTB4ZWIsMHhmOCwweGY4LDB4MTMKLSsuYnl0ZQkweDJiLDB4OTgsMHg5OCwweGIzLAkweDIyLDB4MTEsMHgxMSwweDMzCi0rLmJ5dGUJMHhkMiwweDY5LDB4NjksMHhiYiwJMHhhOSwweGQ5LDB4ZDksMHg3MAotKy5ieXRlCTB4MDcsMHg4ZSwweDhlLDB4ODksCTB4MzMsMHg5NCwweDk0LDB4YTcKLSsuYnl0ZQkweDJkLDB4OWIsMHg5YiwweGI2LAkweDNjLDB4MWUsMHgxZSwweDIyCi0rLmJ5dGUJMHgxNSwweDg3LDB4ODcsMHg5MiwJMHhjOSwweGU5LDB4ZTksMHgyMAotKy5ieXRlCTB4ODcsMHhjZSwweGNlLDB4NDksCTB4YWEsMHg1NSwweDU1LDB4ZmYKLSsuYnl0ZQkweDUwLDB4MjgsMHgyOCwweDc4LAkweGE1LDB4ZGYsMHhkZiwweDdhCi0rLmJ5dGUJMHgwMywweDhjLDB4OGMsMHg4ZiwJMHg1OSwweGExLDB4YTEsMHhmOAotKy5ieXRlCTB4MDksMHg4OSwweDg5LDB4ODAsCTB4MWEsMHgwZCwweDBkLDB4MTcKLSsuYnl0ZQkweDY1LDB4YmYsMHhiZiwweGRhLAkweGQ3LDB4ZTYsMHhlNiwweDMxCi0rLmJ5dGUJMHg4NCwweDQyLDB4NDIsMHhjNiwJMHhkMCwweDY4LDB4NjgsMHhiOAotKy5ieXRlCTB4ODIsMHg0MSwweDQxLDB4YzMsCTB4MjksMHg5OSwweDk5LDB4YjAKLSsuYnl0ZQkweDVhLDB4MmQsMHgyZCwweDc3LAkweDFlLDB4MGYsMHgwZiwweDExCi0rLmJ5dGUJMHg3YiwweGIwLDB4YjAsMHhjYiwJMHhhOCwweDU0LDB4NTQsMHhmYwotKy5ieXRlCTB4NmQsMHhiYiwweGJiLDB4ZDYsCTB4MmMsMHgxNiwweDE2LDB4M2EKLSsKLSsuYnl0ZQkweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1CSMgVGU0Ci0rLmJ5dGUJMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NgotKy5ieXRlCTB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAKLSsuYnl0ZQkweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwCi0rLmJ5dGUJMHhiNywgMHhmZCwgMHg5MywgMHgyNiwgMHgzNiwgMHgzZiwgMHhmNywgMHhjYwotKy5ieXRlCTB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUKLSsuYnl0ZQkweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhCi0rLmJ5dGUJMHgwNywgMHgxMiwgMHg4MCwgMHhlMiwgMHhlYiwgMHgyNywgMHhiMiwgMHg3NQotKy5ieXRlCTB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAKLSsuYnl0ZQkweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0Ci0rLmJ5dGUJMHg1MywgMHhkMSwgMHgwMCwgMHhlZCwgMHgyMCwgMHhmYywgMHhiMSwgMHg1YgotKy5ieXRlCTB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YKLSsuYnl0ZQkweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1Ci0rLmJ5dGUJMHg0NSwgMHhmOSwgMHgwMiwgMHg3ZiwgMHg1MCwgMHgzYywgMHg5ZiwgMHhhOAotKy5ieXRlCTB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUKLSsuYnl0ZQkweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyCi0rLmJ5dGUJMHhjZCwgMHgwYywgMHgxMywgMHhlYywgMHg1ZiwgMHg5NywgMHg0NCwgMHgxNwotKy5ieXRlCTB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMKLSsuYnl0ZQkweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4Ci0rLmJ5dGUJMHg0NiwgMHhlZSwgMHhiOCwgMHgxNCwgMHhkZSwgMHg1ZSwgMHgwYiwgMHhkYgotKy5ieXRlCTB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMKLSsuYnl0ZQkweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5Ci0rLmJ5dGUJMHhlNywgMHhjOCwgMHgzNywgMHg2ZCwgMHg4ZCwgMHhkNSwgMHg0ZSwgMHhhOQotKy5ieXRlCTB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgKLSsuYnl0ZQkweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2Ci0rLmJ5dGUJMHhlOCwgMHhkZCwgMHg3NCwgMHgxZiwgMHg0YiwgMHhiZCwgMHg4YiwgMHg4YQotKy5ieXRlCTB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUKLSsuYnl0ZQkweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllCi0rLmJ5dGUJMHhlMSwgMHhmOCwgMHg5OCwgMHgxMSwgMHg2OSwgMHhkOSwgMHg4ZSwgMHg5NAotKy5ieXRlCTB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYKLSsuYnl0ZQkweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4Ci0rLmJ5dGUJMHg0MSwgMHg5OSwgMHgyZCwgMHgwZiwgMHhiMCwgMHg1NCwgMHhiYiwgMHgxNgotKwotKy5ieXRlCTB4MDEsMHgwMCwweDAwLDB4MDAsCTB4MDIsMHgwMCwweDAwLDB4MDAJIyByY29uCi0rLmJ5dGUJMHgwNCwweDAwLDB4MDAsMHgwMCwJMHgwOCwweDAwLDB4MDAsMHgwMAotKy5ieXRlCTB4MTAsMHgwMCwweDAwLDB4MDAsCTB4MjAsMHgwMCwweDAwLDB4MDAKLSsuYnl0ZQkweDQwLDB4MDAsMHgwMCwweDAwLAkweDgwLDB4MDAsMHgwMCwweDAwCi0rLmJ5dGUJMHgxQiwweDAwLDB4MDAsMHgwMCwJMHgzNiwweDAwLDB4MDAsMHgwMAotKwotKy5hbGlnbgk2Ci0rQUVTX1RkOgotKy5ieXRlCTB4NTEsMHhmNCwweGE3LDB4NTAsCTB4N2UsMHg0MSwweDY1LDB4NTMJIyBUZDAKLSsuYnl0ZQkweDFhLDB4MTcsMHhhNCwweGMzLAkweDNhLDB4MjcsMHg1ZSwweDk2Ci0rLmJ5dGUJMHgzYiwweGFiLDB4NmIsMHhjYiwJMHgxZiwweDlkLDB4NDUsMHhmMQotKy5ieXRlCTB4YWMsMHhmYSwweDU4LDB4YWIsCTB4NGIsMHhlMywweDAzLDB4OTMKLSsuYnl0ZQkweDIwLDB4MzAsMHhmYSwweDU1LAkweGFkLDB4NzYsMHg2ZCwweGY2Ci0rLmJ5dGUJMHg4OCwweGNjLDB4NzYsMHg5MSwJMHhmNSwweDAyLDB4NGMsMHgyNQotKy5ieXRlCTB4NGYsMHhlNSwweGQ3LDB4ZmMsCTB4YzUsMHgyYSwweGNiLDB4ZDcKLSsuYnl0ZQkweDI2LDB4MzUsMHg0NCwweDgwLAkweGI1LDB4NjIsMHhhMywweDhmCi0rLmJ5dGUJMHhkZSwweGIxLDB4NWEsMHg0OSwJMHgyNSwweGJhLDB4MWIsMHg2NwotKy5ieXRlCTB4NDUsMHhlYSwweDBlLDB4OTgsCTB4NWQsMHhmZSwweGMwLDB4ZTEKLSsuYnl0ZQkweGMzLDB4MmYsMHg3NSwweDAyLAkweDgxLDB4NGMsMHhmMCwweDEyCi0rLmJ5dGUJMHg4ZCwweDQ2LDB4OTcsMHhhMywJMHg2YiwweGQzLDB4ZjksMHhjNgotKy5ieXRlCTB4MDMsMHg4ZiwweDVmLDB4ZTcsCTB4MTUsMHg5MiwweDljLDB4OTUKLSsuYnl0ZQkweGJmLDB4NmQsMHg3YSwweGViLAkweDk1LDB4NTIsMHg1OSwweGRhCi0rLmJ5dGUJMHhkNCwweGJlLDB4ODMsMHgyZCwJMHg1OCwweDc0LDB4MjEsMHhkMwotKy5ieXRlCTB4NDksMHhlMCwweDY5LDB4MjksCTB4OGUsMHhjOSwweGM4LDB4NDQKLSsuYnl0ZQkweDc1LDB4YzIsMHg4OSwweDZhLAkweGY0LDB4OGUsMHg3OSwweDc4Ci0rLmJ5dGUJMHg5OSwweDU4LDB4M2UsMHg2YiwJMHgyNywweGI5LDB4NzEsMHhkZAotKy5ieXRlCTB4YmUsMHhlMSwweDRmLDB4YjYsCTB4ZjAsMHg4OCwweGFkLDB4MTcKLSsuYnl0ZQkweGM5LDB4MjAsMHhhYywweDY2LAkweDdkLDB4Y2UsMHgzYSwweGI0Ci0rLmJ5dGUJMHg2MywweGRmLDB4NGEsMHgxOCwJMHhlNSwweDFhLDB4MzEsMHg4MgotKy5ieXRlCTB4OTcsMHg1MSwweDMzLDB4NjAsCTB4NjIsMHg1MywweDdmLDB4NDUKLSsuYnl0ZQkweGIxLDB4NjQsMHg3NywweGUwLAkweGJiLDB4NmIsMHhhZSwweDg0Ci0rLmJ5dGUJMHhmZSwweDgxLDB4YTAsMHgxYywJMHhmOSwweDA4LDB4MmIsMHg5NAotKy5ieXRlCTB4NzAsMHg0OCwweDY4LDB4NTgsCTB4OGYsMHg0NSwweGZkLDB4MTkKLSsuYnl0ZQkweDk0LDB4ZGUsMHg2YywweDg3LAkweDUyLDB4N2IsMHhmOCwweGI3Ci0rLmJ5dGUJMHhhYiwweDczLDB4ZDMsMHgyMywJMHg3MiwweDRiLDB4MDIsMHhlMgotKy5ieXRlCTB4ZTMsMHgxZiwweDhmLDB4NTcsCTB4NjYsMHg1NSwweGFiLDB4MmEKLSsuYnl0ZQkweGIyLDB4ZWIsMHgyOCwweDA3LAkweDJmLDB4YjUsMHhjMiwweDAzCi0rLmJ5dGUJMHg4NiwweGM1LDB4N2IsMHg5YSwJMHhkMywweDM3LDB4MDgsMHhhNQotKy5ieXRlCTB4MzAsMHgyOCwweDg3LDB4ZjIsCTB4MjMsMHhiZiwweGE1LDB4YjIKLSsuYnl0ZQkweDAyLDB4MDMsMHg2YSwweGJhLAkweGVkLDB4MTYsMHg4MiwweDVjCi0rLmJ5dGUJMHg4YSwweGNmLDB4MWMsMHgyYiwJMHhhNywweDc5LDB4YjQsMHg5MgotKy5ieXRlCTB4ZjMsMHgwNywweGYyLDB4ZjAsCTB4NGUsMHg2OSwweGUyLDB4YTEKLSsuYnl0ZQkweDY1LDB4ZGEsMHhmNCwweGNkLAkweDA2LDB4MDUsMHhiZSwweGQ1Ci0rLmJ5dGUJMHhkMSwweDM0LDB4NjIsMHgxZiwJMHhjNCwweGE2LDB4ZmUsMHg4YQotKy5ieXRlCTB4MzQsMHgyZSwweDUzLDB4OWQsCTB4YTIsMHhmMywweDU1LDB4YTAKLSsuYnl0ZQkweDA1LDB4OGEsMHhlMSwweDMyLAkweGE0LDB4ZjYsMHhlYiwweDc1Ci0rLmJ5dGUJMHgwYiwweDgzLDB4ZWMsMHgzOSwJMHg0MCwweDYwLDB4ZWYsMHhhYQotKy5ieXRlCTB4NWUsMHg3MSwweDlmLDB4MDYsCTB4YmQsMHg2ZSwweDEwLDB4NTEKLSsuYnl0ZQkweDNlLDB4MjEsMHg4YSwweGY5LAkweDk2LDB4ZGQsMHgwNiwweDNkCi0rLmJ5dGUJMHhkZCwweDNlLDB4MDUsMHhhZSwJMHg0ZCwweGU2LDB4YmQsMHg0NgotKy5ieXRlCTB4OTEsMHg1NCwweDhkLDB4YjUsCTB4NzEsMHhjNCwweDVkLDB4MDUKLSsuYnl0ZQkweDA0LDB4MDYsMHhkNCwweDZmLAkweDYwLDB4NTAsMHgxNSwweGZmCi0rLmJ5dGUJMHgxOSwweDk4LDB4ZmIsMHgyNCwJMHhkNiwweGJkLDB4ZTksMHg5NwotKy5ieXRlCTB4ODksMHg0MCwweDQzLDB4Y2MsCTB4NjcsMHhkOSwweDllLDB4NzcKLSsuYnl0ZQkweGIwLDB4ZTgsMHg0MiwweGJkLAkweDA3LDB4ODksMHg4YiwweDg4Ci0rLmJ5dGUJMHhlNywweDE5LDB4NWIsMHgzOCwJMHg3OSwweGM4LDB4ZWUsMHhkYgotKy5ieXRlCTB4YTEsMHg3YywweDBhLDB4NDcsCTB4N2MsMHg0MiwweDBmLDB4ZTkKLSsuYnl0ZQkweGY4LDB4ODQsMHgxZSwweGM5LAkweDAwLDB4MDAsMHgwMCwweDAwCi0rLmJ5dGUJMHgwOSwweDgwLDB4ODYsMHg4MywJMHgzMiwweDJiLDB4ZWQsMHg0OAotKy5ieXRlCTB4MWUsMHgxMSwweDcwLDB4YWMsCTB4NmMsMHg1YSwweDcyLDB4NGUKLSsuYnl0ZQkweGZkLDB4MGUsMHhmZiwweGZiLAkweDBmLDB4ODUsMHgzOCwweDU2Ci0rLmJ5dGUJMHgzZCwweGFlLDB4ZDUsMHgxZSwJMHgzNiwweDJkLDB4MzksMHgyNwotKy5ieXRlCTB4MGEsMHgwZiwweGQ5LDB4NjQsCTB4NjgsMHg1YywweGE2LDB4MjEKLSsuYnl0ZQkweDliLDB4NWIsMHg1NCwweGQxLAkweDI0LDB4MzYsMHgyZSwweDNhCi0rLmJ5dGUJMHgwYywweDBhLDB4NjcsMHhiMSwJMHg5MywweDU3LDB4ZTcsMHgwZgotKy5ieXRlCTB4YjQsMHhlZSwweDk2LDB4ZDIsCTB4MWIsMHg5YiwweDkxLDB4OWUKLSsuYnl0ZQkweDgwLDB4YzAsMHhjNSwweDRmLAkweDYxLDB4ZGMsMHgyMCwweGEyCi0rLmJ5dGUJMHg1YSwweDc3LDB4NGIsMHg2OSwJMHgxYywweDEyLDB4MWEsMHgxNgotKy5ieXRlCTB4ZTIsMHg5MywweGJhLDB4MGEsCTB4YzAsMHhhMCwweDJhLDB4ZTUKLSsuYnl0ZQkweDNjLDB4MjIsMHhlMCwweDQzLAkweDEyLDB4MWIsMHgxNywweDFkCi0rLmJ5dGUJMHgwZSwweDA5LDB4MGQsMHgwYiwJMHhmMiwweDhiLDB4YzcsMHhhZAotKy5ieXRlCTB4MmQsMHhiNiwweGE4LDB4YjksCTB4MTQsMHgxZSwweGE5LDB4YzgKLSsuYnl0ZQkweDU3LDB4ZjEsMHgxOSwweDg1LAkweGFmLDB4NzUsMHgwNywweDRjCi0rLmJ5dGUJMHhlZSwweDk5LDB4ZGQsMHhiYiwJMHhhMywweDdmLDB4NjAsMHhmZAotKy5ieXRlCTB4ZjcsMHgwMSwweDI2LDB4OWYsCTB4NWMsMHg3MiwweGY1LDB4YmMKLSsuYnl0ZQkweDQ0LDB4NjYsMHgzYiwweGM1LAkweDViLDB4ZmIsMHg3ZSwweDM0Ci0rLmJ5dGUJMHg4YiwweDQzLDB4MjksMHg3NiwJMHhjYiwweDIzLDB4YzYsMHhkYwotKy5ieXRlCTB4YjYsMHhlZCwweGZjLDB4NjgsCTB4YjgsMHhlNCwweGYxLDB4NjMKLSsuYnl0ZQkweGQ3LDB4MzEsMHhkYywweGNhLAkweDQyLDB4NjMsMHg4NSwweDEwCi0rLmJ5dGUJMHgxMywweDk3LDB4MjIsMHg0MCwJMHg4NCwweGM2LDB4MTEsMHgyMAotKy5ieXRlCTB4ODUsMHg0YSwweDI0LDB4N2QsCTB4ZDIsMHhiYiwweDNkLDB4ZjgKLSsuYnl0ZQkweGFlLDB4ZjksMHgzMiwweDExLAkweGM3LDB4MjksMHhhMSwweDZkCi0rLmJ5dGUJMHgxZCwweDllLDB4MmYsMHg0YiwJMHhkYywweGIyLDB4MzAsMHhmMwotKy5ieXRlCTB4MGQsMHg4NiwweDUyLDB4ZWMsCTB4NzcsMHhjMSwweGUzLDB4ZDAKLSsuYnl0ZQkweDJiLDB4YjMsMHgxNiwweDZjLAkweGE5LDB4NzAsMHhiOSwweDk5Ci0rLmJ5dGUJMHgxMSwweDk0LDB4NDgsMHhmYSwJMHg0NywweGU5LDB4NjQsMHgyMgotKy5ieXRlCTB4YTgsMHhmYywweDhjLDB4YzQsCTB4YTAsMHhmMCwweDNmLDB4MWEKLSsuYnl0ZQkweDU2LDB4N2QsMHgyYywweGQ4LAkweDIyLDB4MzMsMHg5MCwweGVmCi0rLmJ5dGUJMHg4NywweDQ5LDB4NGUsMHhjNywJMHhkOSwweDM4LDB4ZDEsMHhjMQotKy5ieXRlCTB4OGMsMHhjYSwweGEyLDB4ZmUsCTB4OTgsMHhkNCwweDBiLDB4MzYKLSsuYnl0ZQkweGE2LDB4ZjUsMHg4MSwweGNmLAkweGE1LDB4N2EsMHhkZSwweDI4Ci0rLmJ5dGUJMHhkYSwweGI3LDB4OGUsMHgyNiwJMHgzZiwweGFkLDB4YmYsMHhhNAotKy5ieXRlCTB4MmMsMHgzYSwweDlkLDB4ZTQsCTB4NTAsMHg3OCwweDkyLDB4MGQKLSsuYnl0ZQkweDZhLDB4NWYsMHhjYywweDliLAkweDU0LDB4N2UsMHg0NiwweDYyCi0rLmJ5dGUJMHhmNiwweDhkLDB4MTMsMHhjMiwJMHg5MCwweGQ4LDB4YjgsMHhlOAotKy5ieXRlCTB4MmUsMHgzOSwweGY3LDB4NWUsCTB4ODIsMHhjMywweGFmLDB4ZjUKLSsuYnl0ZQkweDlmLDB4NWQsMHg4MCwweGJlLAkweDY5LDB4ZDAsMHg5MywweDdjCi0rLmJ5dGUJMHg2ZiwweGQ1LDB4MmQsMHhhOSwJMHhjZiwweDI1LDB4MTIsMHhiMwotKy5ieXRlCTB4YzgsMHhhYywweDk5LDB4M2IsCTB4MTAsMHgxOCwweDdkLDB4YTcKLSsuYnl0ZQkweGU4LDB4OWMsMHg2MywweDZlLAkweGRiLDB4M2IsMHhiYiwweDdiCi0rLmJ5dGUJMHhjZCwweDI2LDB4NzgsMHgwOSwJMHg2ZSwweDU5LDB4MTgsMHhmNAotKy5ieXRlCTB4ZWMsMHg5YSwweGI3LDB4MDEsCTB4ODMsMHg0ZiwweDlhLDB4YTgKLSsuYnl0ZQkweGU2LDB4OTUsMHg2ZSwweDY1LAkweGFhLDB4ZmYsMHhlNiwweDdlCi0rLmJ5dGUJMHgyMSwweGJjLDB4Y2YsMHgwOCwJMHhlZiwweDE1LDB4ZTgsMHhlNgotKy5ieXRlCTB4YmEsMHhlNywweDliLDB4ZDksCTB4NGEsMHg2ZiwweDM2LDB4Y2UKLSsuYnl0ZQkweGVhLDB4OWYsMHgwOSwweGQ0LAkweDI5LDB4YjAsMHg3YywweGQ2Ci0rLmJ5dGUJMHgzMSwweGE0LDB4YjIsMHhhZiwJMHgyYSwweDNmLDB4MjMsMHgzMQotKy5ieXRlCTB4YzYsMHhhNSwweDk0LDB4MzAsCTB4MzUsMHhhMiwweDY2LDB4YzAKLSsuYnl0ZQkweDc0LDB4NGUsMHhiYywweDM3LAkweGZjLDB4ODIsMHhjYSwweGE2Ci0rLmJ5dGUJMHhlMCwweDkwLDB4ZDAsMHhiMCwJMHgzMywweGE3LDB4ZDgsMHgxNQotKy5ieXRlCTB4ZjEsMHgwNCwweDk4LDB4NGEsCTB4NDEsMHhlYywweGRhLDB4ZjcKLSsuYnl0ZQkweDdmLDB4Y2QsMHg1MCwweDBlLAkweDE3LDB4OTEsMHhmNiwweDJmCi0rLmJ5dGUJMHg3NiwweDRkLDB4ZDYsMHg4ZCwJMHg0MywweGVmLDB4YjAsMHg0ZAotKy5ieXRlCTB4Y2MsMHhhYSwweDRkLDB4NTQsCTB4ZTQsMHg5NiwweDA0LDB4ZGYKLSsuYnl0ZQkweDllLDB4ZDEsMHhiNSwweGUzLAkweDRjLDB4NmEsMHg4OCwweDFiCi0rLmJ5dGUJMHhjMSwweDJjLDB4MWYsMHhiOCwJMHg0NiwweDY1LDB4NTEsMHg3ZgotKy5ieXRlCTB4OWQsMHg1ZSwweGVhLDB4MDQsCTB4MDEsMHg4YywweDM1LDB4NWQKLSsuYnl0ZQkweGZhLDB4ODcsMHg3NCwweDczLAkweGZiLDB4MGIsMHg0MSwweDJlCi0rLmJ5dGUJMHhiMywweDY3LDB4MWQsMHg1YSwJMHg5MiwweGRiLDB4ZDIsMHg1MgotKy5ieXRlCTB4ZTksMHgxMCwweDU2LDB4MzMsCTB4NmQsMHhkNiwweDQ3LDB4MTMKLSsuYnl0ZQkweDlhLDB4ZDcsMHg2MSwweDhjLAkweDM3LDB4YTEsMHgwYywweDdhCi0rLmJ5dGUJMHg1OSwweGY4LDB4MTQsMHg4ZSwJMHhlYiwweDEzLDB4M2MsMHg4OQotKy5ieXRlCTB4Y2UsMHhhOSwweDI3LDB4ZWUsCTB4YjcsMHg2MSwweGM5LDB4MzUKLSsuYnl0ZQkweGUxLDB4MWMsMHhlNSwweGVkLAkweDdhLDB4NDcsMHhiMSwweDNjCi0rLmJ5dGUJMHg5YywweGQyLDB4ZGYsMHg1OSwJMHg1NSwweGYyLDB4NzMsMHgzZgotKy5ieXRlCTB4MTgsMHgxNCwweGNlLDB4NzksCTB4NzMsMHhjNywweDM3LDB4YmYKLSsuYnl0ZQkweDUzLDB4ZjcsMHhjZCwweGVhLAkweDVmLDB4ZmQsMHhhYSwweDViCi0rLmJ5dGUJMHhkZiwweDNkLDB4NmYsMHgxNCwJMHg3OCwweDQ0LDB4ZGIsMHg4NgotKy5ieXRlCTB4Y2EsMHhhZiwweGYzLDB4ODEsCTB4YjksMHg2OCwweGM0LDB4M2UKLSsuYnl0ZQkweDM4LDB4MjQsMHgzNCwweDJjLAkweGMyLDB4YTMsMHg0MCwweDVmCi0rLmJ5dGUJMHgxNiwweDFkLDB4YzMsMHg3MiwJMHhiYywweGUyLDB4MjUsMHgwYwotKy5ieXRlCTB4MjgsMHgzYywweDQ5LDB4OGIsCTB4ZmYsMHgwZCwweDk1LDB4NDEKLSsuYnl0ZQkweDM5LDB4YTgsMHgwMSwweDcxLAkweDA4LDB4MGMsMHhiMywweGRlCi0rLmJ5dGUJMHhkOCwweGI0LDB4ZTQsMHg5YywJMHg2NCwweDU2LDB4YzEsMHg5MAotKy5ieXRlCTB4N2IsMHhjYiwweDg0LDB4NjEsCTB4ZDUsMHgzMiwweGI2LDB4NzAKLSsuYnl0ZQkweDQ4LDB4NmMsMHg1YywweDc0LAkweGQwLDB4YjgsMHg1NywweDQyCi0rCi0rLmJ5dGUJMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOAkjIFRkNAotKy5ieXRlCTB4YmYsIDB4NDAsIDB4YTMsIDB4OWUsIDB4ODEsIDB4ZjMsIDB4ZDcsIDB4ZmIKLSsuYnl0ZQkweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3Ci0rLmJ5dGUJMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYgotKy5ieXRlCTB4NTQsIDB4N2IsIDB4OTQsIDB4MzIsIDB4YTYsIDB4YzIsIDB4MjMsIDB4M2QKLSsuYnl0ZQkweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlCi0rLmJ5dGUJMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMgotKy5ieXRlCTB4NzYsIDB4NWIsIDB4YTIsIDB4NDksIDB4NmQsIDB4OGIsIDB4ZDEsIDB4MjUKLSsuYnl0ZQkweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2Ci0rLmJ5dGUJMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MgotKy5ieXRlCTB4NmMsIDB4NzAsIDB4NDgsIDB4NTAsIDB4ZmQsIDB4ZWQsIDB4YjksIDB4ZGEKLSsuYnl0ZQkweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0Ci0rLmJ5dGUJMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYQotKy5ieXRlCTB4ZjcsIDB4ZTQsIDB4NTgsIDB4MDUsIDB4YjgsIDB4YjMsIDB4NDUsIDB4MDYKLSsuYnl0ZQkweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyCi0rLmJ5dGUJMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YgotKy5ieXRlCTB4M2EsIDB4OTEsIDB4MTEsIDB4NDEsIDB4NGYsIDB4NjcsIDB4ZGMsIDB4ZWEKLSsuYnl0ZQkweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczCi0rLmJ5dGUJMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NQotKy5ieXRlCTB4ZTIsIDB4ZjksIDB4MzcsIDB4ZTgsIDB4MWMsIDB4NzUsIDB4ZGYsIDB4NmUKLSsuYnl0ZQkweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5Ci0rLmJ5dGUJMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYgotKy5ieXRlCTB4ZmMsIDB4NTYsIDB4M2UsIDB4NGIsIDB4YzYsIDB4ZDIsIDB4NzksIDB4MjAKLSsuYnl0ZQkweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0Ci0rLmJ5dGUJMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMQotKy5ieXRlCTB4YjEsIDB4MTIsIDB4MTAsIDB4NTksIDB4MjcsIDB4ODAsIDB4ZWMsIDB4NWYKLSsuYnl0ZQkweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkCi0rLmJ5dGUJMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZgotKy5ieXRlCTB4YTAsIDB4ZTAsIDB4M2IsIDB4NGQsIDB4YWUsIDB4MmEsIDB4ZjUsIDB4YjAKLSsuYnl0ZQkweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxCi0rLmJ5dGUJMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNgotKy5ieXRlCTB4ZTEsIDB4NjksIDB4MTQsIDB4NjMsIDB4NTUsIDB4MjEsIDB4MGMsIDB4N2QKLStfX18KLSsMCi0rZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKLSsJcy9cYChbXlxgXSopXGAvZXZhbCAkMS9nZTsKLSsKLSsJIyBtYWRlLXVwIF9pbnN0cnVjdGlvbnMsIF94dHIsIF9pbnMsIF9yb3IgYW5kIF9iaWFzLCBjb3BlCi0rCSMgd2l0aCBieXRlIG9yZGVyIGRlcGVuZGVuY2llcy4uLgotKwlpZiAoL15ccytfLykgewotKwkgICAgcy8oX1thLXpdK1xzKykoXCRbMC05XSspLChbXixdKykoIy4qKSokLyQxJDIsJDIsJDMvOwotKwotKwkgICAgcy9feHRyXHMrKFwkWzAtOV0rKSwoXCRbMC05XSspLChbMC05XSsoXC0yKSopLwotKwkJc3ByaW50Zigic3JsXHQkMSwkMiwlZCIsJGJpZ19lbmRpYW4gPwlldmFsKCQzKQotKwkJCQkJOgkJZXZhbCgiMjQtJDMiKSkvZSBvcgotKwkgICAgcy9faW5zXHMrKFwkWzAtOV0rKSwoXCRbMC05XSspLChbMC05XSspLwotKwkJc3ByaW50Zigic2xsXHQkMSwkMiwlZCIsJGJpZ19lbmRpYW4gPwlldmFsKCQzKQotKwkJCQkJOgkJZXZhbCgiMjQtJDMiKSkvZSBvcgotKwkgICAgcy9fcm9yXHMrKFwkWzAtOV0rKSwoXCRbMC05XSspLChcLT9bMC05XSspLwotKwkJc3ByaW50Zigic3JsXHQkMSwkMiwlZCIsJGJpZ19lbmRpYW4gPwlldmFsKCQzKQotKwkJCQkJOgkJZXZhbCgiJDMqLTEiKSkvZSBvcgotKwkgICAgcy9fYmlhc1xzKyhcJFswLTldKyksKFwkWzAtOV0rKSwoWzAtOV0rKS8KLSsJCXNwcmludGYoInNsbFx0JDEsJDIsJWQiLCRiaWdfZW5kaWFuID8JZXZhbCgkMykKLSsJCQkJCToJCWV2YWwoIigkMy0xNikmMzEiKSkvZTsKLSsKLSsJICAgIHMvc3JsXHMrKFwkWzAtOV0rKSwoXCRbMC05XSspLFwtKFswLTldKykvCi0rCQlzcHJpbnRmKCJzbGxcdCQxLCQyLCQzIikvZQkJCQlvcgotKwkgICAgcy9zcmxccysoXCRbMC05XSspLChcJFswLTldKyksMC8KLSsJCXNwcmludGYoImFuZFx0JDEsJDIsMHhmZiIpL2UJCQkJb3IKLSsJICAgIHMvKHNsbFxzK1wkWzAtOV0rLFwkWzAtOV0rLDApLyMkMS87Ci0rCX0KLSsKLSsJIyBjb252ZXJ0IGx3bC9sd3IgYW5kIHN3ci9zd2wgdG8gbGl0dGxlLWVuZGlhbiBvcmRlcgotKwlpZiAoISRiaWdfZW5kaWFuICYmIC9eXHMrW3NsXXdbbHJdXHMrLykgewotKwkgICAgcy8oW3NsXXdsLiopKFswLTldKylcKChcJFswLTldKylcKS8KLSsJCXNwcmludGYoIiQxJWQoJDMpIixldmFsKCIkMi0kMiU0KygkMiU0LTEpJjMiKSkvZQlvcgotKwkgICAgcy8oW3NsXXdyLiopKFswLTldKylcKChcJFswLTldKylcKS8KLSsJCXNwcmludGYoIiQxJWQoJDMpIixldmFsKCIkMi0kMiU0KygkMiU0KzEpJjMiKSkvZTsKLSsJfQotKwotKwlwcmludCAkXywiXG4iOwotK30KLSsKLStjbG9zZSBTVERPVVQ7Ci1kaWZmIC0tZ2l0IGEvY3J5cHRvL2JuL2FzbS9taXBzLW1vbnQucGwgYi9jcnlwdG8vYm4vYXNtL21pcHMtbW9udC5wbAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmI5NDRhMTIKLS0tLSAvZGV2L251bGwKLSsrKyBiL2NyeXB0by9ibi9hc20vbWlwcy1tb250LnBsCi1AQCAtMCwwICsxLDQyNiBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsjCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BvcGVuc3NsLm9yZz4gZm9yIHRoZSBPcGVuU1NMCi0rIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCi0rIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgotKyMgZGV0YWlscyBzZWUgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+YXBwcm8vY3J5cHRvZ2Ftcy8uCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKyMgVGhpcyBtb2R1bGUgZG9lc24ndCBwcmVzZW50IGRpcmVjdCBpbnRlcmVzdCBmb3IgT3BlblNTTCwgYmVjYXVzZSBpdAotKyMgZG9lc24ndCBwcm92aWRlIGJldHRlciBwZXJmb3JtYW5jZSBmb3IgbG9uZ2VyIGtleXMsIGF0IGxlYXN0IG5vdCBvbgotKyMgaW4tb3JkZXItZXhlY3V0aW9uIGNvcmVzLiBXaGlsZSA1MTItYml0IFJTQSBzaWduIG9wZXJhdGlvbnMgY2FuIGJlCi0rIyA2NSUgZmFzdGVyIGluIDY0LWJpdCBtb2RlLCAxMDI0LWJpdCBvbmVzIGFyZSBvbmx5IDE1JSBmYXN0ZXIsIGFuZAotKyMgNDA5Ni1iaXQgb25lcyBhcmUgdXAgdG8gMTUlIHNsb3dlci4gSW4gMzItYml0IG1vZGUgaXQgdmFyaWVzIGZyb20KLSsjIDE2JSBpbXByb3ZlbWVudCBmb3IgNTEyLWJpdCBSU0Egc2lnbiB0byAtMzMlIGZvciA0MDk2LWJpdCBSU0EKLSsjIHZlcmlmeTotKCBBbGwgY29tcGFyaXNvbnMgYXJlIGFnYWluc3QgYm5fbXVsX21vbnQtZnJlZSBhc3NlbWJsZXIuCi0rIyBUaGUgbW9kdWxlIG1pZ2h0IGJlIG9mIGludGVyZXN0IHRvIGVtYmVkZGVkIHN5c3RlbSBkZXZlbG9wZXJzLCBhcwotKyMgdGhlIGNvZGUgaXMgc21hbGxlciB0aGFuIDFLQiwgeWV0IG9mZmVycyA+M3ggaW1wcm92ZW1lbnQgb24gTUlQUzY0Ci0rIyBhbmQgNzUtMzAlIFtsZXNzIGZvciBsb25nZXIga2V5c10gb24gTUlQUzMyIG92ZXIgY29tcGlsZXItZ2VuZXJhdGVkCi0rIyBjb2RlLgotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsjIFRoZXJlIGlzIGEgbnVtYmVyIG9mIE1JUFMgQUJJIGluIHVzZSwgTzMyIGFuZCBOMzIvNjQgYXJlIG1vc3QKLSsjIHdpZGVseSB1c2VkLiBUaGVuIHRoZXJlIGlzIGEgbmV3IGNvbnRlbmRlcjogTlVCSS4gSXQgYXBwZWFycyB0aGF0IGlmCi0rIyBvbmUgcGlja3MgdGhlIGxhdHRlciwgaXQncyBwb3NzaWJsZSB0byBhcnJhbmdlIGNvZGUgaW4gQUJJIG5ldXRyYWwKLSsjIG1hbm5lci4gVGhlcmVmb3JlIGxldCdzIHN0aWNrIHRvIE5VQkkgcmVnaXN0ZXIgbGF5b3V0OgotKyMKLSsoJHplcm8sJGF0LCR0MCwkdDEsJHQyKT1tYXAoIlwkJF8iLCgwLi4yLDI0LDI1KSk7Ci0rKCRhMCwkYTEsJGEyLCRhMywkYTQsJGE1LCRhNiwkYTcpPW1hcCgiXCQkXyIsKDQuLjExKSk7Ci0rKCRzMCwkczEsJHMyLCRzMywkczQsJHM1LCRzNiwkczcsJHM4LCRzOSwkczEwLCRzMTEpPW1hcCgiXCQkXyIsKDEyLi4yMykpOwotKygkZ3AsJHRwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgzLDI4Li4zMSkpOwotKyMKLSsjIFRoZSByZXR1cm4gdmFsdWUgaXMgcGxhY2VkIGluICRhMC4gRm9sbG93aW5nIGNvZGluZyBydWxlcyBmYWNpbGl0YXRlCi0rIyBpbnRlcm9wZXJhYmlsaXR5OgotKyMKLSsjIC0gbmV2ZXIgZXZlciB0b3VjaCAkdHAsICJ0aHJlYWQgcG9pbnRlciIsIGZvcm1lciAkZ3A7Ci0rIyAtIGNvcHkgcmV0dXJuIHZhbHVlIHRvICR0MCwgZm9ybWVyICR2MCBbb3IgdG8gJGEwIGlmIHlvdSdyZSBhZGFwdGluZwotKyMgICBvbGQgY29kZV07Ci0rIyAtIG9uIE8zMiBwb3B1bGF0ZSAkYTQtJGE3IHdpdGggJ2x3ICRhTiw0Kk4oJHNwKScgaWYgbmVjZXNzYXJ5OwotKyMKLSsjIEZvciByZWZlcmVuY2UgaGVyZSBpcyByZWdpc3RlciBsYXlvdXQgZm9yIE4zMi82NCBNSVBTIEFCSXM6Ci0rIwotKyMgKCR6ZXJvLCRhdCwkdjAsJHYxKT1tYXAoIlwkJF8iLCgwLi4zKSk7Ci0rIyAoJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk9bWFwKCJcJCRfIiwoNC4uMTEpKTsKLSsjICgkdDAsJHQxLCR0MiwkdDMsJHQ4LCR0OSk9bWFwKCJcJCRfIiwoMTIuLjE1LDI0LDI1KSk7Ci0rIyAoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNyk9bWFwKCJcJCRfIiwoMTYuLjIzKSk7Ci0rIyAoJGdwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgyOC4uMzEpKTsKLSsjCi0rJGZsYXZvdXIgPSBzaGlmdDsgIyBzdXBwb3J0ZWQgZmxhdm91cnMgYXJlIG8zMixuMzIsNjQsbnViaTMyLG51Ymk2NAotKwotK2lmICgkZmxhdm91ciA9fiAvNjR8bjMyL2kpIHsKLSsJJFBUUl9BREQ9ImRhZGQiOwkjIGluY2lkZW50YWxseSB3b3JrcyBldmVuIG9uIG4zMgotKwkkUFRSX1NVQj0iZHN1YiI7CSMgaW5jaWRlbnRhbGx5IHdvcmtzIGV2ZW4gb24gbjMyCi0rCSRSRUdfUz0ic2QiOwotKwkkUkVHX0w9ImxkIjsKLSsJJFNaUkVHPTg7Ci0rfSBlbHNlIHsKLSsJJFBUUl9BREQ9ImFkZCI7Ci0rCSRQVFJfU1VCPSJzdWIiOwotKwkkUkVHX1M9InN3IjsKLSsJJFJFR19MPSJsdyI7Ci0rCSRTWlJFRz00OwotK30KLSskU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gMHgwMGZmZjAwMCA6IDB4MDBmZjAwMDA7Ci0rIwotKyMgPGFwcHJvQG9wZW5zc2wub3JnPgotKyMKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rCi0rd2hpbGUgKCgkb3V0cHV0PXNoaWZ0KSAmJiAoJG91dHB1dCF+L15cd1tcd1wtXSpcLlx3KyQvKSkge30KLStvcGVuIFNURE9VVCwiPiRvdXRwdXQiOwotKwotK2lmICgkZmxhdm91ciA9fiAvNjR8bjMyL2kpIHsKLSsJJExEPSJsZCI7Ci0rCSRTVD0ic2QiOwotKwkkTVVMVFU9ImRtdWx0dSI7Ci0rCSRBRERVPSJkYWRkdSI7Ci0rCSRTVUJVPSJkc3VidSI7Ci0rCSRCTlNaPTg7Ci0rfSBlbHNlIHsKLSsJJExEPSJsdyI7Ci0rCSRTVD0ic3ciOwotKwkkTVVMVFU9Im11bHR1IjsKLSsJJEFERFU9ImFkZHUiOwotKwkkU1VCVT0ic3VidSI7Ci0rCSRCTlNaPTQ7Ci0rfQotKwotKyMgaW50IGJuX211bF9tb250KAotKyRycD0kYTA7CSMgQk5fVUxPTkcgKnJwLAotKyRhcD0kYTE7CSMgY29uc3QgQk5fVUxPTkcgKmFwLAotKyRicD0kYTI7CSMgY29uc3QgQk5fVUxPTkcgKmJwLAotKyRucD0kYTM7CSMgY29uc3QgQk5fVUxPTkcgKm5wLAotKyRuMD0kYTQ7CSMgY29uc3QgQk5fVUxPTkcgKm4wLAotKyRudW09JGE1OwkjIGludCBudW0pOwotKwotKyRsbzA9JGE2OwotKyRoaTA9JGE3OwotKyRsbzE9JHQxOwotKyRoaTE9JHQyOwotKyRhaj0kczA7Ci0rJGJpPSRzMTsKLSskbmo9JHMyOwotKyR0cD0kczM7Ci0rJGFsbz0kczQ7Ci0rJGFoaT0kczU7Ci0rJG5sbz0kczY7Ci0rJG5oaT0kczc7Ci0rJHRqPSRzODsKLSskaT0kczk7Ci0rJGo9JHMxMDsKLSskbTE9JHMxMTsKLSsKLSskRlJBTUVTSVpFPTE0OwotKwotKyRjb2RlPTw8X19fOwotKy50ZXh0Ci0rCi0rLnNldAlub2F0Ci0rLnNldAlub3Jlb3JkZXIKLSsKLSsuYWxpZ24JNQotKy5nbG9ibAlibl9tdWxfbW9udAotKy5lbnQJYm5fbXVsX21vbnQKLStibl9tdWxfbW9udDoKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9vMzIvaSk7Ci0rCWx3CSRuMCwxNigkc3ApCi0rCWx3CSRudW0sMjAoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJc2x0CSRhdCwkbnVtLDQKLSsJYm5legkkYXQsMWYKLSsJbGkJJHQwLDAKLSsJc2x0CSRhdCwkbnVtLDE3CSMgb24gaW4tb3JkZXIgQ1BVCi0rCWJuZXpsCSRhdCxibl9tdWxfbW9udF9pbnRlcm5hbAotKwlub3AKLSsxOglqcgkkcmEKLSsJbGkJJGEwLDAKLSsuZW5kCWJuX211bF9tb250Ci0rCi0rLmFsaWduCTUKLSsuZW50CWJuX211bF9tb250X2ludGVybmFsCi0rYm5fbXVsX21vbnRfaW50ZXJuYWw6Ci0rCS5mcmFtZQkkZnAsJEZSQU1FU0laRSokU1pSRUcsJHJhCi0rCS5tYXNrCTB4NDAwMDAwMDB8JFNBVkVEX1JFR1NfTUFTSywtJFNaUkVHCi0rCSRQVFJfU1VCICRzcCwkRlJBTUVTSVpFKiRTWlJFRwotKwkkUkVHX1MJJGZwLCgkRlJBTUVTSVpFLTEpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczExLCgkRlJBTUVTSVpFLTIpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczEwLCgkRlJBTUVTSVpFLTMpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczksKCRGUkFNRVNJWkUtNCkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzOCwoJEZSQU1FU0laRS01KSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM3LCgkRlJBTUVTSVpFLTYpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczYsKCRGUkFNRVNJWkUtNykqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzNSwoJEZSQU1FU0laRS04KSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM0LCgkRlJBTUVTSVpFLTkpKiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19TCSRzMywoJEZSQU1FU0laRS0xMCkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMiwoJEZSQU1FU0laRS0xMSkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMSwoJEZSQU1FU0laRS0xMikqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMCwoJEZSQU1FU0laRS0xMykqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCW1vdmUJJGZwLCRzcAotKwotKwkuc2V0CXJlb3JkZXIKLSsJJExECSRuMCwwKCRuMCkKLSsJJExECSRiaSwwKCRicCkJIyBicFswXQotKwkkTEQJJGFqLDAoJGFwKQkjIGFwWzBdCi0rCSRMRAkkbmosMCgkbnApCSMgbnBbMF0KLSsKLSsJJFBUUl9TVUIgJHNwLDIqJEJOU1oJIyBwbGFjZSBmb3IgdHdvIGV4dHJhIHdvcmRzCi0rCXNsbAkkbnVtLGBsb2coJEJOU1opL2xvZygyKWAKLSsJbGkJJGF0LC00MDk2Ci0rCSRQVFJfU1VCICRzcCwkbnVtCi0rCWFuZAkkc3AsJGF0Ci0rCi0rCSRNVUxUVQkkYWosJGJpCi0rCSRMRAkkYWxvLCRCTlNaKCRhcCkKLSsJJExECSRubG8sJEJOU1ooJG5wKQotKwltZmxvCSRsbzAKLSsJbWZoaQkkaGkwCi0rCSRNVUxUVQkkbG8wLCRuMAotKwltZmxvCSRtMQotKwotKwkkTVVMVFUJJGFsbywkYmkKLSsJbWZsbwkkYWxvCi0rCW1maGkJJGFoaQotKwotKwkkTVVMVFUJJG5qLCRtMQotKwltZmxvCSRsbzEKLSsJbWZoaQkkaGkxCi0rCSRNVUxUVQkkbmxvLCRtMQotKwkkQUREVQkkbG8xLCRsbzAKLSsJc2x0dQkkYXQsJGxvMSwkbG8wCi0rCSRBRERVCSRoaTEsJGF0Ci0rCW1mbG8JJG5sbwotKwltZmhpCSRuaGkKLSsKLSsJbW92ZQkkdHAsJHNwCi0rCWxpCSRqLDIqJEJOU1oKLSsuYWxpZ24JNAotKy5MMXN0OgotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX0FERCAkYWosJGFwLCRqCi0rCSRQVFJfQUREICRuaiwkbnAsJGoKLSsJJExECSRhaiwoJGFqKQotKwkkTEQJJG5qLCgkbmopCi0rCi0rCSRNVUxUVQkkYWosJGJpCi0rCSRBRERVCSRsbzAsJGFsbywkaGkwCi0rCSRBRERVCSRsbzEsJG5sbywkaGkxCi0rCXNsdHUJJGF0LCRsbzAsJGhpMAotKwlzbHR1CSR0MCwkbG8xLCRoaTEKLSsJJEFERFUJJGhpMCwkYWhpLCRhdAotKwkkQUREVQkkaGkxLCRuaGksJHQwCi0rCW1mbG8JJGFsbwotKwltZmhpCSRhaGkKLSsKLSsJJEFERFUJJGxvMSwkbG8wCi0rCXNsdHUJJGF0LCRsbzEsJGxvMAotKwkkTVVMVFUJJG5qLCRtMQotKwkkQUREVQkkaGkxLCRhdAotKwlhZGR1CSRqLCRCTlNaCi0rCSRTVAkkbG8xLCgkdHApCi0rCXNsdHUJJHQwLCRqLCRudW0KLSsJbWZsbwkkbmxvCi0rCW1maGkJJG5oaQotKwotKwlibmV6CSR0MCwuTDFzdAotKwkkUFRSX0FERCAkdHAsJEJOU1oKLSsJLnNldAlyZW9yZGVyCi0rCi0rCSRBRERVCSRsbzAsJGFsbywkaGkwCi0rCXNsdHUJJGF0LCRsbzAsJGhpMAotKwkkQUREVQkkaGkwLCRhaGksJGF0Ci0rCi0rCSRBRERVCSRsbzEsJG5sbywkaGkxCi0rCXNsdHUJJHQwLCRsbzEsJGhpMQotKwkkQUREVQkkaGkxLCRuaGksJHQwCi0rCSRBRERVCSRsbzEsJGxvMAotKwlzbHR1CSRhdCwkbG8xLCRsbzAKLSsJJEFERFUJJGhpMSwkYXQKLSsKLSsJJFNUCSRsbzEsKCR0cCkKLSsKLSsJJEFERFUJJGhpMSwkaGkwCi0rCXNsdHUJJGF0LCRoaTEsJGhpMAotKwkkU1QJJGhpMSwkQk5TWigkdHApCi0rCSRTVAkkYXQsMiokQk5TWigkdHApCi0rCi0rCWxpCSRpLCRCTlNaCi0rLmFsaWduCTQKLSsuTG91dGVyOgotKwkkUFRSX0FERCAkYmksJGJwLCRpCi0rCSRMRAkkYmksKCRiaSkKLSsJJExECSRhaiwoJGFwKQotKwkkTEQJJGFsbywkQk5TWigkYXApCi0rCSRMRAkkdGosKCRzcCkKLSsKLSsJJE1VTFRVCSRhaiwkYmkKLSsJJExECSRuaiwoJG5wKQotKwkkTEQJJG5sbywkQk5TWigkbnApCi0rCW1mbG8JJGxvMAotKwltZmhpCSRoaTAKLSsJJEFERFUJJGxvMCwkdGoKLSsJJE1VTFRVCSRsbzAsJG4wCi0rCXNsdHUJJGF0LCRsbzAsJHRqCi0rCSRBRERVCSRoaTAsJGF0Ci0rCW1mbG8JJG0xCi0rCi0rCSRNVUxUVQkkYWxvLCRiaQotKwltZmxvCSRhbG8KLSsJbWZoaQkkYWhpCi0rCi0rCSRNVUxUVQkkbmosJG0xCi0rCW1mbG8JJGxvMQotKwltZmhpCSRoaTEKLSsKLSsJJE1VTFRVCSRubG8sJG0xCi0rCSRBRERVCSRsbzEsJGxvMAotKwlzbHR1CSRhdCwkbG8xLCRsbzAKLSsJJEFERFUJJGhpMSwkYXQKLSsJbWZsbwkkbmxvCi0rCW1maGkJJG5oaQotKwotKwltb3ZlCSR0cCwkc3AKLSsJbGkJJGosMiokQk5TWgotKwkkTEQJJHRqLCRCTlNaKCR0cCkKLSsuYWxpZ24JNAotKy5MaW5uZXI6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rCSRQVFJfQUREICRhaiwkYXAsJGoKLSsJJFBUUl9BREQgJG5qLCRucCwkagotKwkkTEQJJGFqLCgkYWopCi0rCSRMRAkkbmosKCRuaikKLSsKLSsJJE1VTFRVCSRhaiwkYmkKLSsJJEFERFUJJGxvMCwkYWxvLCRoaTAKLSsJJEFERFUJJGxvMSwkbmxvLCRoaTEKLSsJc2x0dQkkYXQsJGxvMCwkaGkwCi0rCXNsdHUJJHQwLCRsbzEsJGhpMQotKwkkQUREVQkkaGkwLCRhaGksJGF0Ci0rCSRBRERVCSRoaTEsJG5oaSwkdDAKLSsJbWZsbwkkYWxvCi0rCW1maGkJJGFoaQotKwotKwkkQUREVQkkbG8wLCR0agotKwlhZGR1CSRqLCRCTlNaCi0rCSRNVUxUVQkkbmosJG0xCi0rCXNsdHUJJGF0LCRsbzAsJHRqCi0rCSRBRERVCSRsbzEsJGxvMAotKwkkQUREVQkkaGkwLCRhdAotKwlzbHR1CSR0MCwkbG8xLCRsbzAKLSsJJExECSR0aiwyKiRCTlNaKCR0cCkKLSsJJEFERFUJJGhpMSwkdDAKLSsJc2x0dQkkYXQsJGosJG51bQotKwltZmxvCSRubG8KLSsJbWZoaQkkbmhpCi0rCSRTVAkkbG8xLCgkdHApCi0rCWJuZXoJJGF0LC5MaW5uZXIKLSsJJFBUUl9BREQgJHRwLCRCTlNaCi0rCS5zZXQJcmVvcmRlcgotKwotKwkkQUREVQkkbG8wLCRhbG8sJGhpMAotKwlzbHR1CSRhdCwkbG8wLCRoaTAKLSsJJEFERFUJJGhpMCwkYWhpLCRhdAotKwkkQUREVQkkbG8wLCR0agotKwlzbHR1CSR0MCwkbG8wLCR0agotKwkkQUREVQkkaGkwLCR0MAotKwotKwkkTEQJJHRqLDIqJEJOU1ooJHRwKQotKwkkQUREVQkkbG8xLCRubG8sJGhpMQotKwlzbHR1CSRhdCwkbG8xLCRoaTEKLSsJJEFERFUJJGhpMSwkbmhpLCRhdAotKwkkQUREVQkkbG8xLCRsbzAKLSsJc2x0dQkkdDAsJGxvMSwkbG8wCi0rCSRBRERVCSRoaTEsJHQwCi0rCSRTVAkkbG8xLCgkdHApCi0rCi0rCSRBRERVCSRsbzEsJGhpMSwkaGkwCi0rCXNsdHUJJGhpMSwkbG8xLCRoaTAKLSsJJEFERFUJJGxvMSwkdGoKLSsJc2x0dQkkYXQsJGxvMSwkdGoKLSsJJEFERFUJJGhpMSwkYXQKLSsJJFNUCSRsbzEsJEJOU1ooJHRwKQotKwkkU1QJJGhpMSwyKiRCTlNaKCR0cCkKLSsKLSsJYWRkdQkkaSwkQk5TWgotKwlzbHR1CSR0MCwkaSwkbnVtCi0rCWJuZXoJJHQwLC5Mb3V0ZXIKLSsMCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRQVFJfQUREICR0aiwkc3AsJG51bQkjICZ0cFtudW1dCi0rCW1vdmUJJHRwLCRzcAotKwltb3ZlCSRhcCwkc3AKLSsJbGkJJGhpMCwwCQkjIGNsZWFyIGJvcnJvdyBiaXQKLSsKLSsuYWxpZ24JNAotKy5Mc3ViOgkkTEQJJGxvMCwoJHRwKQotKwkkTEQJJGxvMSwoJG5wKQotKwkkUFRSX0FERCAkdHAsJEJOU1oKLSsJJFBUUl9BREQgJG5wLCRCTlNaCi0rCSRTVUJVCSRsbzEsJGxvMCwkbG8xCSMgdHBbaV0tbnBbaV0KLSsJc2d0dQkkYXQsJGxvMSwkbG8wCi0rCSRTVUJVCSRsbzAsJGxvMSwkaGkwCi0rCXNndHUJJGhpMCwkbG8wLCRsbzEKLSsJJFNUCSRsbzAsKCRycCkKLSsJb3IJJGhpMCwkYXQKLSsJc2x0dQkkYXQsJHRwLCR0agotKwlibmV6CSRhdCwuTHN1YgotKwkkUFRSX0FERCAkcnAsJEJOU1oKLSsKLSsJJFNVQlUJJGhpMCwkaGkxLCRoaTAJIyBoYW5kbGUgdXBtb3N0IG92ZXJmbG93IGJpdAotKwltb3ZlCSR0cCwkc3AKLSsJJFBUUl9TVUIgJHJwLCRudW0JIyByZXN0b3JlIHJwCi0rCW5vdAkkaGkxLCRoaTAKLSsKLSsJYW5kCSRhcCwkaGkwLCRzcAotKwlhbmQJJGJwLCRoaTEsJHJwCi0rCW9yCSRhcCwkYXAsJGJwCSMgYXA9Ym9ycm93P3RwOnJwCi0rCi0rLmFsaWduCTQKLSsuTGNvcHk6CSRMRAkkYWosKCRhcCkKLSsJJFBUUl9BREQgJGFwLCRCTlNaCi0rCSRTVAkkemVybywoJHRwKQotKwkkUFRSX0FERCAkdHAsJEJOU1oKLSsJc2x0dQkkYXQsJHRwLCR0agotKwkkU1QJJGFqLCgkcnApCi0rCWJuZXoJJGF0LC5MY29weQotKwkkUFRSX0FERCAkcnAsJEJOU1oKLSsKLSsJbGkJJGEwLDEKLSsJbGkJJHQwLDEKLSsKLSsJLnNldAlub3Jlb3JkZXIKLSsJbW92ZQkkc3AsJGZwCi0rCSRSRUdfTAkkZnAsKCRGUkFNRVNJWkUtMSkqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMTEsKCRGUkFNRVNJWkUtMikqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMTAsKCRGUkFNRVNJWkUtMykqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzOSwoJEZSQU1FU0laRS00KSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM4LCgkRlJBTUVTSVpFLTUpKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczcsKCRGUkFNRVNJWkUtNikqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNiwoJEZSQU1FU0laRS03KSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM1LCgkRlJBTUVTSVpFLTgpKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczQsKCRGUkFNRVNJWkUtOSkqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHMzLCgkRlJBTUVTSVpFLTEwKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMyLCgkRlJBTUVTSVpFLTExKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxLCgkRlJBTUVTSVpFLTEyKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMwLCgkRlJBTUVTSVpFLTEzKSokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCSRQVFJfQUREICRzcCwkRlJBTUVTSVpFKiRTWlJFRwotKy5lbmQJYm5fbXVsX21vbnRfaW50ZXJuYWwKLSsucmRhdGEKLSsuYXNjaWl6CSJNb250Z29tZXJ5IE11bHRpcGxpY2F0aW9uIGZvciBNSVBTLCBDUllQVE9HQU1TIGJ5IDxhcHByb1xAb3BlbnNzbC5vcmc+IgotK19fXwotKwotKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwotKwotK3ByaW50ICRjb2RlOwotK2Nsb3NlIFNURE9VVDsKLWRpZmYgLS1naXQgYS9jcnlwdG8vYm4vYXNtL21pcHMucGwgYi9jcnlwdG8vYm4vYXNtL21pcHMucGwKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5mMDRiM2I5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9jcnlwdG8vYm4vYXNtL21pcHMucGwKLUBAIC0wLDAgKzEsMjU4NSBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsjCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4gZm9yIHRoZSBPcGVuU1NMCi0rIyBwcm9qZWN0LgotKyMKLSsjIFJpZ2h0cyBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHVzYWdlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZQotKyMgZ3JhbnRlZCBhY2NvcmRpbmcgdG8gdGhlIE9wZW5TU0wgbGljZW5zZS4gV2FycmFudHkgb2YgYW55IGtpbmQgaXMKLSsjIGRpc2NsYWltZWQuCi0rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKwotKwotKyMgSnVseSAxOTk5Ci0rIwotKyMgVGhpcyBpcyBkcm9wLWluIE1JUFMgSUlJL0lWIElTQSByZXBsYWNlbWVudCBmb3IgY3J5cHRvL2JuL2JuX2FzbS5jLgotKyMKLSsjIFRoZSBtb2R1bGUgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIGVpdGhlciBvZiB0aGUgIm5ldyIgTUlQUyBBQkkoNSksCi0rIyBuYW1lbHkgTjMyIG9yIE42NCwgb2ZmZXJlZCBieSBJUklYIDYueC4gSXQncyBub3QgbWVudCB0byB3b3JrIHVuZGVyCi0rIyBJUklYIDUueCBub3Qgb25seSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBuZXcgQUJJcyBidXQgYWxzbwotKyMgYmVjYXVzZSA1Lngga2VybmVscyBwdXQgUjR4MDAgQ1BVIGludG8gMzItYml0IG1vZGUgYW5kIGFsbCB0aG9zZQotKyMgNjQtYml0IGluc3RydWN0aW9ucyAoZGFkZHUsIGRtdWx0dSwgZXRjLikgZm91bmQgYmVsb3cgZ29ubmEgb25seQotKyMgY2F1c2UgaWxsZWdhbCBpbnN0cnVjdGlvbiBleGNlcHRpb246LSgKLSsjCi0rIyBJbiBhZGRpdGlvbiB0aGUgY29kZSBkZXBlbmRzIG9uIHByZXByb2Nlc3NvciBmbGFncyBzZXQgdXAgYnkgTUlQU3BybwotKyMgY29tcGlsZXIgZHJpdmVyIChlaXRoZXIgYXMgb3IgY2MpIGFuZCB0aGVyZWZvcmUgKHByb2JhYmx5PykgY2FuJ3QgYmUKLSsjIGNvbXBpbGVkIGJ5IHRoZSBHTlUgYXNzZW1ibGVyLiBHTlUgQyBkcml2ZXIgbWFuYWdlcyBmaW5lIHRob3VnaC4uLgotKyMgSSBtZWFuIGFzIGxvbmcgYXMgLW1taXBzLWFzIGlzIHNwZWNpZmllZCBvciBpcyB0aGUgZGVmYXVsdCBvcHRpb24sCi0rIyBiZWNhdXNlIHRoZW4gaXQgc2ltcGx5IGludm9rZXMgL3Vzci9iaW4vYXMgd2hpY2ggaW4gdHVybiB0YWtlcwotKyMgcGVyZmVjdCBjYXJlIG9mIHRoZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEFub3RoZXIgbmVhdCBmZWF0dXJlCi0rIyBvZmZlcmVkIGJ5IHRoZSBNSVBTcHJvIGFzc2VtYmxlciBpcyBhbiBvcHRpbWl6YXRpb24gcGFzcy4gVGhpcyBnYXZlCi0rIyBtZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaGF2ZSB0aGUgY29kZSBsb29raW5nIG1vcmUgcmVndWxhciBhcyBhbGwgdGhvc2UKLSsjIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgaW5zdHJ1Y3Rpb24gcmVzY2hlZHVsaW5nIGRldGFpbHMgd2VyZSBsZWZ0IHRvCi0rIyB0aGUgYXNzZW1ibGVyLiBDb29sLCBodWg/Ci0rIwotKyMgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaXMgYXN0b25pc2hpbmchICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScKLSsjIGdvZXMgd2F5IG92ZXIgMyB0aW1lcyBmYXN0ZXIhCi0rIwotKyMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KLSsKLSsjIE9jdG9iZXIgMjAxMAotKyMKLSsjIEFkYXB0IHRoZSBtb2R1bGUgZXZlbiBmb3IgMzItYml0IEFCSXMgYW5kIG90aGVyIE9TZXMuIFRoZSBmb3JtZXIgd2FzCi0rIyBhY2hpZXZlZCBieSBtZWNoYW5pY2FsIHJlcGxhY2VtZW50IG9mIDY0LWJpdCBhcml0aG1ldGljIGluc3RydWN0aW9ucwotKyMgc3VjaCBhcyBkbXVsdHUsIGRhZGR1LCBldGMuIHdpdGggdGhlaXIgMzItYml0IGNvdW50ZXJwYXJ0cyBhbmQKLSsjIGFkanVzdGluZyBvZmZzZXRzIGRlbm90aW5nIG11bHRpcGxlcyBvZiBCTl9VTE9ORy4gQWJvdmUgbWVudGlvbmVkCi0rIyA+M3ggcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgbmF0dXJhbGx5IGRvZXMgbm90IGFwcGx5IHRvIDMyLWJpdCBjb2RlCi0rIyBbYmVjYXVzZSB0aGVyZSBpcyBubyBpbnN0cnVjdGlvbiAzMi1iaXQgY29tcGlsZXIgY2FuJ3QgdXNlXSwgb25lCi0rIyBoYXMgdG8gY29udGVudCB3aXRoIDQwLTg1JSBpbXByb3ZlbWVudCBkZXBlbmRpbmcgb24gYmVuY2htYXJrIGFuZAotKyMga2V5IGxlbmd0aCwgbW9yZSBmb3IgbG9uZ2VyIGtleXMuCi0rCi0rJGZsYXZvdXIgPSBzaGlmdDsKLSt3aGlsZSAoKCRvdXRwdXQ9c2hpZnQpICYmICgkb3V0cHV0IX4vXlx3W1x3XC1dKlwuXHcrJC8pKSB7fQotK29wZW4gU1RET1VULCI+JG91dHB1dCI7Ci0rCi0raWYgKCRmbGF2b3VyID1+IC82NHxuMzIvaSkgewotKwkkTEQ9ImxkIjsKLSsJJFNUPSJzZCI7Ci0rCSRNVUxUVT0iZG11bHR1IjsKLSsJJERJVlU9ImRkaXZ1IjsKLSsJJEFERFU9ImRhZGR1IjsKLSsJJFNVQlU9ImRzdWJ1IjsKLSsJJFNSTD0iZHNybCI7Ci0rCSRTTEw9ImRzbGwiOwotKwkkQk5TWj04OwotKwkkUFRSX0FERD0iZGFkZHUiOwotKwkkUFRSX1NVQj0iZHN1YnUiOwotKwkkU1pSRUc9ODsKLSsJJFJFR19TPSJzZCI7Ci0rCSRSRUdfTD0ibGQiOwotK30gZWxzZSB7Ci0rCSRMRD0ibHciOwotKwkkU1Q9InN3IjsKLSsJJE1VTFRVPSJtdWx0dSI7Ci0rCSRESVZVPSJkaXZ1IjsKLSsJJEFERFU9ImFkZHUiOwotKwkkU1VCVT0ic3VidSI7Ci0rCSRTUkw9InNybCI7Ci0rCSRTTEw9InNsbCI7Ci0rCSRCTlNaPTQ7Ci0rCSRQVFJfQUREPSJhZGR1IjsKLSsJJFBUUl9TVUI9InN1YnUiOwotKwkkU1pSRUc9NDsKLSsJJFJFR19TPSJzdyI7Ci0rCSRSRUdfTD0ibHciOwotKwkkY29kZT0iLnNldAltaXBzMlxuIjsKLSt9Ci0rCi0rIyBCZWxvdyBpcyBOMzIvNjQgcmVnaXN0ZXIgbGF5b3V0IHVzZWQgaW4gdGhlIG9yaWdpbmFsIG1vZHVsZS4KLSsjCi0rKCR6ZXJvLCRhdCwkdjAsJHYxKT1tYXAoIlwkJF8iLCgwLi4zKSk7Ci0rKCRhMCwkYTEsJGEyLCRhMywkYTQsJGE1LCRhNiwkYTcpPW1hcCgiXCQkXyIsKDQuLjExKSk7Ci0rKCR0MCwkdDEsJHQyLCR0MywkdDgsJHQ5KT1tYXAoIlwkJF8iLCgxMi4uMTUsMjQsMjUpKTsKLSsoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNyk9bWFwKCJcJCRfIiwoMTYuLjIzKSk7Ci0rKCRncCwkc3AsJGZwLCRyYSk9bWFwKCJcJCRfIiwoMjguLjMxKSk7Ci0rKCR0YTAsJHRhMSwkdGEyLCR0YTMpPSgkYTQsJGE1LCRhNiwkYTcpOwotKyMKLSsjIE5vIHNwZWNpYWwgYWRhcHRhdGlvbiBpcyByZXF1aXJlZCBmb3IgTzMyLiBOVUJJIG9uIHRoZSBvdGhlciBoYW5kCi0rIyBpcyB0cmVhdGVkIGJ5IHNhdmluZy9yZXN0b3JpbmcgKCR2MSwkdDAuLiR0MykuCi0rCi0rJGdwPSR2MSBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCi0rJG1pbnVzND0kdjE7Ci0rCi0rJGNvZGUuPTw8X19fOwotKy5yZGF0YQotKy5hc2NpaXoJIm1pcHMzLnMsIFZlcnNpb24gMS4yIgotKy5hc2NpaXoJIk1JUFMgSUkvSUlJL0lWIElTQSBhcnR3b3JrIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvXEBmeS5jaGFsbWVycy5zZT4iCi0rCi0rLnRleHQKLSsuc2V0CW5vYXQKLSsKLSsuYWxpZ24JNQotKy5nbG9ibAlibl9tdWxfYWRkX3dvcmRzCi0rLmVudAlibl9tdWxfYWRkX3dvcmRzCi0rYm5fbXVsX2FkZF93b3JkczoKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0egkkYTIsYm5fbXVsX2FkZF93b3Jkc19pbnRlcm5hbAotKwltb3ZlCSR2MCwkemVybwotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHYwCi0rLmVuZAlibl9tdWxfYWRkX3dvcmRzCi0rCi0rLmFsaWduCTUKLSsuZW50CWJuX211bF9hZGRfd29yZHNfaW50ZXJuYWwKLStibl9tdWxfYWRkX3dvcmRzX2ludGVybmFsOgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwlsaQkkbWludXM0LC00Ci0rCWFuZAkkdGEwLCRhMiwkbWludXM0Ci0rCSRMRAkkdDAsMCgkYTEpCi0rCWJlcXoJJHRhMCwuTF9ibl9tdWxfYWRkX3dvcmRzX3RhaWwKLSsKLSsuTF9ibl9tdWxfYWRkX3dvcmRzX2xvb3A6Ci0rCSRNVUxUVQkkdDAsJGEzCi0rCSRMRAkkdDEsMCgkYTApCi0rCSRMRAkkdDIsJEJOU1ooJGExKQotKwkkTEQJJHQzLCRCTlNaKCRhMCkKLSsJJExECSR0YTAsMiokQk5TWigkYTEpCi0rCSRMRAkkdGExLDIqJEJOU1ooJGEwKQotKwkkQUREVQkkdDEsJHYwCi0rCXNsdHUJJHYwLCR0MSwkdjAJIyBBbGwgbWFudWFscyBzYXkgaXQgImNvbXBhcmVzIDMyLWJpdAotKwkJCQkjIHZhbHVlcyIsIGJ1dCBpdCBzZWVtcyB0byB3b3JrIGZpbmUKLSsJCQkJIyBldmVuIG9uIDY0LWJpdCByZWdpc3RlcnMuCi0rCW1mbG8JJGF0Ci0rCW1maGkJJHQwCi0rCSRBRERVCSR0MSwkYXQKLSsJJEFERFUJJHYwLCR0MAotKwkgJE1VTFRVCSR0MiwkYTMKLSsJc2x0dQkkYXQsJHQxLCRhdAotKwkkU1QJJHQxLDAoJGEwKQotKwkkQUREVQkkdjAsJGF0Ci0rCi0rCSRMRAkkdGEyLDMqJEJOU1ooJGExKQotKwkkTEQJJHRhMywzKiRCTlNaKCRhMCkKLSsJJEFERFUJJHQzLCR2MAotKwlzbHR1CSR2MCwkdDMsJHYwCi0rCW1mbG8JJGF0Ci0rCW1maGkJJHQyCi0rCSRBRERVCSR0MywkYXQKLSsJJEFERFUJJHYwLCR0MgotKwkgJE1VTFRVCSR0YTAsJGEzCi0rCXNsdHUJJGF0LCR0MywkYXQKLSsJJFNUCSR0MywkQk5TWigkYTApCi0rCSRBRERVCSR2MCwkYXQKLSsKLSsJc3VidQkkYTIsNAotKwkkUFRSX0FERCAkYTAsNCokQk5TWgotKwkkUFRSX0FERCAkYTEsNCokQk5TWgotKwkkQUREVQkkdGExLCR2MAotKwlzbHR1CSR2MCwkdGExLCR2MAotKwltZmxvCSRhdAotKwltZmhpCSR0YTAKLSsJJEFERFUJJHRhMSwkYXQKLSsJJEFERFUJJHYwLCR0YTAKLSsJICRNVUxUVQkkdGEyLCRhMwotKwlzbHR1CSRhdCwkdGExLCRhdAotKwkkU1QJJHRhMSwtMiokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkYXQKLSsKLSsKLSsJYW5kCSR0YTAsJGEyLCRtaW51czQKLSsJJEFERFUJJHRhMywkdjAKLSsJc2x0dQkkdjAsJHRhMywkdjAKLSsJbWZsbwkkYXQKLSsJbWZoaQkkdGEyCi0rCSRBRERVCSR0YTMsJGF0Ci0rCSRBRERVCSR2MCwkdGEyCi0rCXNsdHUJJGF0LCR0YTMsJGF0Ci0rCSRTVAkkdGEzLC0kQk5TWigkYTApCi0rCSRBRERVCSR2MCwkYXQKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0emwJJHRhMCwuTF9ibl9tdWxfYWRkX3dvcmRzX2xvb3AKLSsJJExECSR0MCwwKCRhMSkKLSsKLSsJYmVxegkkYTIsLkxfYm5fbXVsX2FkZF93b3Jkc19yZXR1cm4KLSsJbm9wCi0rCi0rLkxfYm5fbXVsX2FkZF93b3Jkc190YWlsOgotKwkuc2V0CXJlb3JkZXIKLSsJJExECSR0MCwwKCRhMSkKLSsJJE1VTFRVCSR0MCwkYTMKLSsJJExECSR0MSwwKCRhMCkKLSsJc3VidQkkYTIsMQotKwkkQUREVQkkdDEsJHYwCi0rCXNsdHUJJHYwLCR0MSwkdjAKLSsJbWZsbwkkYXQKLSsJbWZoaQkkdDAKLSsJJEFERFUJJHQxLCRhdAotKwkkQUREVQkkdjAsJHQwCi0rCXNsdHUJJGF0LCR0MSwkYXQKLSsJJFNUCSR0MSwwKCRhMCkKLSsJJEFERFUJJHYwLCRhdAotKwliZXF6CSRhMiwuTF9ibl9tdWxfYWRkX3dvcmRzX3JldHVybgotKwotKwkkTEQJJHQwLCRCTlNaKCRhMSkKLSsJJE1VTFRVCSR0MCwkYTMKLSsJJExECSR0MSwkQk5TWigkYTApCi0rCXN1YnUJJGEyLDEKLSsJJEFERFUJJHQxLCR2MAotKwlzbHR1CSR2MCwkdDEsJHYwCi0rCW1mbG8JJGF0Ci0rCW1maGkJJHQwCi0rCSRBRERVCSR0MSwkYXQKLSsJJEFERFUJJHYwLCR0MAotKwlzbHR1CSRhdCwkdDEsJGF0Ci0rCSRTVAkkdDEsJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJGF0Ci0rCWJlcXoJJGEyLC5MX2JuX211bF9hZGRfd29yZHNfcmV0dXJuCi0rCi0rCSRMRAkkdDAsMiokQk5TWigkYTEpCi0rCSRNVUxUVQkkdDAsJGEzCi0rCSRMRAkkdDEsMiokQk5TWigkYTApCi0rCSRBRERVCSR0MSwkdjAKLSsJc2x0dQkkdjAsJHQxLCR2MAotKwltZmxvCSRhdAotKwltZmhpCSR0MAotKwkkQUREVQkkdDEsJGF0Ci0rCSRBRERVCSR2MCwkdDAKLSsJc2x0dQkkYXQsJHQxLCRhdAotKwkkU1QJJHQxLDIqJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJGF0Ci0rCi0rLkxfYm5fbXVsX2FkZF93b3Jkc19yZXR1cm46Ci0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19MCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsMCokU1pSRUcoJHNwKQotKwkkUFRSX0FERCAkc3AsNiokU1pSRUcKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwltb3ZlCSRhMCwkdjAKLSsuZW5kCWJuX211bF9hZGRfd29yZHNfaW50ZXJuYWwKLSsKLSsuYWxpZ24JNQotKy5nbG9ibAlibl9tdWxfd29yZHMKLSsuZW50CWJuX211bF93b3JkcwotK2JuX211bF93b3JkczoKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0egkkYTIsYm5fbXVsX3dvcmRzX2ludGVybmFsCi0rCW1vdmUJJHYwLCR6ZXJvCi0rCWpyCSRyYQotKwltb3ZlCSRhMCwkdjAKLSsuZW5kCWJuX211bF93b3JkcwotKwotKy5hbGlnbgk1Ci0rLmVudAlibl9tdWxfd29yZHNfaW50ZXJuYWwKLStibl9tdWxfd29yZHNfaW50ZXJuYWw6Ci0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJLmZyYW1lCSRzcCw2KiRTWlJFRywkcmEKLSsJLm1hc2sJMHg4MDAwZjAwOCwtJFNaUkVHCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRQVFJfU1VCICRzcCw2KiRTWlJFRwotKwkkUkVHX1MJJHJhLDUqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkZ3AsMCokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJLnNldAlyZW9yZGVyCi0rCWxpCSRtaW51czQsLTQKLSsJYW5kCSR0YTAsJGEyLCRtaW51czQKLSsJJExECSR0MCwwKCRhMSkKLSsJYmVxegkkdGEwLC5MX2JuX211bF93b3Jkc190YWlsCi0rCi0rLkxfYm5fbXVsX3dvcmRzX2xvb3A6Ci0rCSRNVUxUVQkkdDAsJGEzCi0rCSRMRAkkdDIsJEJOU1ooJGExKQotKwkkTEQJJHRhMCwyKiRCTlNaKCRhMSkKLSsJJExECSR0YTIsMyokQk5TWigkYTEpCi0rCW1mbG8JJGF0Ci0rCW1maGkJJHQwCi0rCSRBRERVCSR2MCwkYXQKLSsJc2x0dQkkdDEsJHYwLCRhdAotKwkgJE1VTFRVCSR0MiwkYTMKLSsJJFNUCSR2MCwwKCRhMCkKLSsJJEFERFUJJHYwLCR0MSwkdDAKLSsKLSsJc3VidQkkYTIsNAotKwkkUFRSX0FERCAkYTAsNCokQk5TWgotKwkkUFRSX0FERCAkYTEsNCokQk5TWgotKwltZmxvCSRhdAotKwltZmhpCSR0MgotKwkkQUREVQkkdjAsJGF0Ci0rCXNsdHUJJHQzLCR2MCwkYXQKLSsJICRNVUxUVQkkdGEwLCRhMwotKwkkU1QJJHYwLC0zKiRCTlNaKCRhMCkKLSsJJEFERFUJJHYwLCR0MywkdDIKLSsKLSsJbWZsbwkkYXQKLSsJbWZoaQkkdGEwCi0rCSRBRERVCSR2MCwkYXQKLSsJc2x0dQkkdGExLCR2MCwkYXQKLSsJICRNVUxUVQkkdGEyLCRhMwotKwkkU1QJJHYwLC0yKiRCTlNaKCRhMCkKLSsJJEFERFUJJHYwLCR0YTEsJHRhMAotKwotKwlhbmQJJHRhMCwkYTIsJG1pbnVzNAotKwltZmxvCSRhdAotKwltZmhpCSR0YTIKLSsJJEFERFUJJHYwLCRhdAotKwlzbHR1CSR0YTMsJHYwLCRhdAotKwkkU1QJJHYwLC0kQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdGEzLCR0YTIKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0emwJJHRhMCwuTF9ibl9tdWxfd29yZHNfbG9vcAotKwkkTEQJJHQwLDAoJGExKQotKwotKwliZXF6CSRhMiwuTF9ibl9tdWxfd29yZHNfcmV0dXJuCi0rCW5vcAotKwotKy5MX2JuX211bF93b3Jkc190YWlsOgotKwkuc2V0CXJlb3JkZXIKLSsJJExECSR0MCwwKCRhMSkKLSsJJE1VTFRVCSR0MCwkYTMKLSsJc3VidQkkYTIsMQotKwltZmxvCSRhdAotKwltZmhpCSR0MAotKwkkQUREVQkkdjAsJGF0Ci0rCXNsdHUJJHQxLCR2MCwkYXQKLSsJJFNUCSR2MCwwKCRhMCkKLSsJJEFERFUJJHYwLCR0MSwkdDAKLSsJYmVxegkkYTIsLkxfYm5fbXVsX3dvcmRzX3JldHVybgotKwotKwkkTEQJJHQwLCRCTlNaKCRhMSkKLSsJJE1VTFRVCSR0MCwkYTMKLSsJc3VidQkkYTIsMQotKwltZmxvCSRhdAotKwltZmhpCSR0MAotKwkkQUREVQkkdjAsJGF0Ci0rCXNsdHUJJHQxLCR2MCwkYXQKLSsJJFNUCSR2MCwkQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDEsJHQwCi0rCWJlcXoJJGEyLC5MX2JuX211bF93b3Jkc19yZXR1cm4KLSsKLSsJJExECSR0MCwyKiRCTlNaKCRhMSkKLSsJJE1VTFRVCSR0MCwkYTMKLSsJbWZsbwkkYXQKLSsJbWZoaQkkdDAKLSsJJEFERFUJJHYwLCRhdAotKwlzbHR1CSR0MSwkdjAsJGF0Ci0rCSRTVAkkdjAsMiokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDEsJHQwCi0rCi0rLkxfYm5fbXVsX3dvcmRzX3JldHVybjoKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW1vdmUJJGEwLCR2MAotKy5lbmQJYm5fbXVsX3dvcmRzX2ludGVybmFsCi0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJYm5fc3FyX3dvcmRzCi0rLmVudAlibl9zcXJfd29yZHMKLStibl9zcXJfd29yZHM6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rCWJndHoJJGEyLGJuX3Nxcl93b3Jkc19pbnRlcm5hbAotKwltb3ZlCSR2MCwkemVybwotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHYwCi0rLmVuZAlibl9zcXJfd29yZHMKLSsKLSsuYWxpZ24JNQotKy5lbnQJYm5fc3FyX3dvcmRzX2ludGVybmFsCi0rYm5fc3FyX3dvcmRzX2ludGVybmFsOgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwlsaQkkbWludXM0LC00Ci0rCWFuZAkkdGEwLCRhMiwkbWludXM0Ci0rCSRMRAkkdDAsMCgkYTEpCi0rCWJlcXoJJHRhMCwuTF9ibl9zcXJfd29yZHNfdGFpbAotKwotKy5MX2JuX3Nxcl93b3Jkc19sb29wOgotKwkkTVVMVFUJJHQwLCR0MAotKwkkTEQJJHQyLCRCTlNaKCRhMSkKLSsJJExECSR0YTAsMiokQk5TWigkYTEpCi0rCSRMRAkkdGEyLDMqJEJOU1ooJGExKQotKwltZmxvCSR0MQotKwltZmhpCSR0MAotKwkkU1QJJHQxLDAoJGEwKQotKwkkU1QJJHQwLCRCTlNaKCRhMCkKLSsKLSsJJE1VTFRVCSR0MiwkdDIKLSsJc3VidQkkYTIsNAotKwkkUFRSX0FERCAkYTAsOCokQk5TWgotKwkkUFRSX0FERCAkYTEsNCokQk5TWgotKwltZmxvCSR0MwotKwltZmhpCSR0MgotKwkkU1QJJHQzLC02KiRCTlNaKCRhMCkKLSsJJFNUCSR0MiwtNSokQk5TWigkYTApCi0rCi0rCSRNVUxUVQkkdGEwLCR0YTAKLSsJbWZsbwkkdGExCi0rCW1maGkJJHRhMAotKwkkU1QJJHRhMSwtNCokQk5TWigkYTApCi0rCSRTVAkkdGEwLC0zKiRCTlNaKCRhMCkKLSsKLSsKLSsJJE1VTFRVCSR0YTIsJHRhMgotKwlhbmQJJHRhMCwkYTIsJG1pbnVzNAotKwltZmxvCSR0YTMKLSsJbWZoaQkkdGEyCi0rCSRTVAkkdGEzLC0yKiRCTlNaKCRhMCkKLSsJJFNUCSR0YTIsLSRCTlNaKCRhMCkKLSsKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0emwJJHRhMCwuTF9ibl9zcXJfd29yZHNfbG9vcAotKwkkTEQJJHQwLDAoJGExKQotKwotKwliZXF6CSRhMiwuTF9ibl9zcXJfd29yZHNfcmV0dXJuCi0rCW5vcAotKwotKy5MX2JuX3Nxcl93b3Jkc190YWlsOgotKwkuc2V0CXJlb3JkZXIKLSsJJExECSR0MCwwKCRhMSkKLSsJJE1VTFRVCSR0MCwkdDAKLSsJc3VidQkkYTIsMQotKwltZmxvCSR0MQotKwltZmhpCSR0MAotKwkkU1QJJHQxLDAoJGEwKQotKwkkU1QJJHQwLCRCTlNaKCRhMCkKLSsJYmVxegkkYTIsLkxfYm5fc3FyX3dvcmRzX3JldHVybgotKwotKwkkTEQJJHQwLCRCTlNaKCRhMSkKLSsJJE1VTFRVCSR0MCwkdDAKLSsJc3VidQkkYTIsMQotKwltZmxvCSR0MQotKwltZmhpCSR0MAotKwkkU1QJJHQxLDIqJEJOU1ooJGEwKQotKwkkU1QJJHQwLDMqJEJOU1ooJGEwKQotKwliZXF6CSRhMiwuTF9ibl9zcXJfd29yZHNfcmV0dXJuCi0rCi0rCSRMRAkkdDAsMiokQk5TWigkYTEpCi0rCSRNVUxUVQkkdDAsJHQwCi0rCW1mbG8JJHQxCi0rCW1maGkJJHQwCi0rCSRTVAkkdDEsNCokQk5TWigkYTApCi0rCSRTVAkkdDAsNSokQk5TWigkYTApCi0rCi0rLkxfYm5fc3FyX3dvcmRzX3JldHVybjoKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW1vdmUJJGEwLCR2MAotKwotKy5lbmQJYm5fc3FyX3dvcmRzX2ludGVybmFsCi0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJYm5fYWRkX3dvcmRzCi0rLmVudAlibl9hZGRfd29yZHMKLStibl9hZGRfd29yZHM6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rCWJndHoJJGEzLGJuX2FkZF93b3Jkc19pbnRlcm5hbAotKwltb3ZlCSR2MCwkemVybwotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHYwCi0rLmVuZAlibl9hZGRfd29yZHMKLSsKLSsuYWxpZ24JNQotKy5lbnQJYm5fYWRkX3dvcmRzX2ludGVybmFsCi0rYm5fYWRkX3dvcmRzX2ludGVybmFsOgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwlsaQkkbWludXM0LC00Ci0rCWFuZAkkYXQsJGEzLCRtaW51czQKLSsJJExECSR0MCwwKCRhMSkKLSsJYmVxegkkYXQsLkxfYm5fYWRkX3dvcmRzX3RhaWwKLSsKLSsuTF9ibl9hZGRfd29yZHNfbG9vcDoKLSsJJExECSR0YTAsMCgkYTIpCi0rCXN1YnUJJGEzLDQKLSsJJExECSR0MSwkQk5TWigkYTEpCi0rCWFuZAkkYXQsJGEzLCRtaW51czQKLSsJJExECSR0MiwyKiRCTlNaKCRhMSkKLSsJJFBUUl9BREQgJGEyLDQqJEJOU1oKLSsJJExECSR0MywzKiRCTlNaKCRhMSkKLSsJJFBUUl9BREQgJGEwLDQqJEJOU1oKLSsJJExECSR0YTEsLTMqJEJOU1ooJGEyKQotKwkkUFRSX0FERCAkYTEsNCokQk5TWgotKwkkTEQJJHRhMiwtMiokQk5TWigkYTIpCi0rCSRMRAkkdGEzLC0kQk5TWigkYTIpCi0rCSRBRERVCSR0YTAsJHQwCi0rCXNsdHUJJHQ4LCR0YTAsJHQwCi0rCSRBRERVCSR0MCwkdGEwLCR2MAotKwlzbHR1CSR2MCwkdDAsJHRhMAotKwkkU1QJJHQwLC00KiRCTlNaKCRhMCkKLSsJJEFERFUJJHYwLCR0OAotKwotKwkkQUREVQkkdGExLCR0MQotKwlzbHR1CSR0OSwkdGExLCR0MQotKwkkQUREVQkkdDEsJHRhMSwkdjAKLSsJc2x0dQkkdjAsJHQxLCR0YTEKLSsJJFNUCSR0MSwtMyokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDkKLSsKLSsJJEFERFUJJHRhMiwkdDIKLSsJc2x0dQkkdDgsJHRhMiwkdDIKLSsJJEFERFUJJHQyLCR0YTIsJHYwCi0rCXNsdHUJJHYwLCR0MiwkdGEyCi0rCSRTVAkkdDIsLTIqJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJHQ4Ci0rCi0rCSRBRERVCSR0YTMsJHQzCi0rCXNsdHUJJHQ5LCR0YTMsJHQzCi0rCSRBRERVCSR0MywkdGEzLCR2MAotKwlzbHR1CSR2MCwkdDMsJHRhMwotKwkkU1QJJHQzLC0kQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDkKLSsKLSsJLnNldAlub3Jlb3JkZXIKLSsJYmd0emwJJGF0LC5MX2JuX2FkZF93b3Jkc19sb29wCi0rCSRMRAkkdDAsMCgkYTEpCi0rCi0rCWJlcXoJJGEzLC5MX2JuX2FkZF93b3Jkc19yZXR1cm4KLSsJbm9wCi0rCi0rLkxfYm5fYWRkX3dvcmRzX3RhaWw6Ci0rCS5zZXQJcmVvcmRlcgotKwkkTEQJJHQwLDAoJGExKQotKwkkTEQJJHRhMCwwKCRhMikKLSsJJEFERFUJJHRhMCwkdDAKLSsJc3VidQkkYTMsMQotKwlzbHR1CSR0OCwkdGEwLCR0MAotKwkkQUREVQkkdDAsJHRhMCwkdjAKLSsJc2x0dQkkdjAsJHQwLCR0YTAKLSsJJFNUCSR0MCwwKCRhMCkKLSsJJEFERFUJJHYwLCR0OAotKwliZXF6CSRhMywuTF9ibl9hZGRfd29yZHNfcmV0dXJuCi0rCi0rCSRMRAkkdDEsJEJOU1ooJGExKQotKwkkTEQJJHRhMSwkQk5TWigkYTIpCi0rCSRBRERVCSR0YTEsJHQxCi0rCXN1YnUJJGEzLDEKLSsJc2x0dQkkdDksJHRhMSwkdDEKLSsJJEFERFUJJHQxLCR0YTEsJHYwCi0rCXNsdHUJJHYwLCR0MSwkdGExCi0rCSRTVAkkdDEsJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJHQ5Ci0rCWJlcXoJJGEzLC5MX2JuX2FkZF93b3Jkc19yZXR1cm4KLSsKLSsJJExECSR0MiwyKiRCTlNaKCRhMSkKLSsJJExECSR0YTIsMiokQk5TWigkYTIpCi0rCSRBRERVCSR0YTIsJHQyCi0rCXNsdHUJJHQ4LCR0YTIsJHQyCi0rCSRBRERVCSR0MiwkdGEyLCR2MAotKwlzbHR1CSR2MCwkdDIsJHRhMgotKwkkU1QJJHQyLDIqJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJHQ4Ci0rCi0rLkxfYm5fYWRkX3dvcmRzX3JldHVybjoKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW1vdmUJJGEwLCR2MAotKwotKy5lbmQJYm5fYWRkX3dvcmRzX2ludGVybmFsCi0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJYm5fc3ViX3dvcmRzCi0rLmVudAlibl9zdWJfd29yZHMKLStibl9zdWJfd29yZHM6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rCWJndHoJJGEzLGJuX3N1Yl93b3Jkc19pbnRlcm5hbAotKwltb3ZlCSR2MCwkemVybwotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHplcm8KLSsuZW5kCWJuX3N1Yl93b3JkcwotKwotKy5hbGlnbgk1Ci0rLmVudAlibl9zdWJfd29yZHNfaW50ZXJuYWwKLStibl9zdWJfd29yZHNfaW50ZXJuYWw6Ci0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJLmZyYW1lCSRzcCw2KiRTWlJFRywkcmEKLSsJLm1hc2sJMHg4MDAwZjAwOCwtJFNaUkVHCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRQVFJfU1VCICRzcCw2KiRTWlJFRwotKwkkUkVHX1MJJHJhLDUqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkZ3AsMCokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJLnNldAlyZW9yZGVyCi0rCWxpCSRtaW51czQsLTQKLSsJYW5kCSRhdCwkYTMsJG1pbnVzNAotKwkkTEQJJHQwLDAoJGExKQotKwliZXF6CSRhdCwuTF9ibl9zdWJfd29yZHNfdGFpbAotKwotKy5MX2JuX3N1Yl93b3Jkc19sb29wOgotKwkkTEQJJHRhMCwwKCRhMikKLSsJc3VidQkkYTMsNAotKwkkTEQJJHQxLCRCTlNaKCRhMSkKLSsJYW5kCSRhdCwkYTMsJG1pbnVzNAotKwkkTEQJJHQyLDIqJEJOU1ooJGExKQotKwkkUFRSX0FERCAkYTIsNCokQk5TWgotKwkkTEQJJHQzLDMqJEJOU1ooJGExKQotKwkkUFRSX0FERCAkYTAsNCokQk5TWgotKwkkTEQJJHRhMSwtMyokQk5TWigkYTIpCi0rCSRQVFJfQUREICRhMSw0KiRCTlNaCi0rCSRMRAkkdGEyLC0yKiRCTlNaKCRhMikKLSsJJExECSR0YTMsLSRCTlNaKCRhMikKLSsJc2x0dQkkdDgsJHQwLCR0YTAKLSsJJFNVQlUJJHRhMCwkdDAsJHRhMAotKwkkU1VCVQkkdDAsJHRhMCwkdjAKLSsJc2d0dQkkdjAsJHQwLCR0YTAKLSsJJFNUCSR0MCwtNCokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDgKLSsKLSsJc2x0dQkkdDksJHQxLCR0YTEKLSsJJFNVQlUJJHRhMSwkdDEsJHRhMQotKwkkU1VCVQkkdDEsJHRhMSwkdjAKLSsJc2d0dQkkdjAsJHQxLCR0YTEKLSsJJFNUCSR0MSwtMyokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDkKLSsKLSsKLSsJc2x0dQkkdDgsJHQyLCR0YTIKLSsJJFNVQlUJJHRhMiwkdDIsJHRhMgotKwkkU1VCVQkkdDIsJHRhMiwkdjAKLSsJc2d0dQkkdjAsJHQyLCR0YTIKLSsJJFNUCSR0MiwtMiokQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDgKLSsKLSsJc2x0dQkkdDksJHQzLCR0YTMKLSsJJFNVQlUJJHRhMywkdDMsJHRhMwotKwkkU1VCVQkkdDMsJHRhMywkdjAKLSsJc2d0dQkkdjAsJHQzLCR0YTMKLSsJJFNUCSR0MywtJEJOU1ooJGEwKQotKwkkQUREVQkkdjAsJHQ5Ci0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJndHpsCSRhdCwuTF9ibl9zdWJfd29yZHNfbG9vcAotKwkkTEQJJHQwLDAoJGExKQotKwotKwliZXF6CSRhMywuTF9ibl9zdWJfd29yZHNfcmV0dXJuCi0rCW5vcAotKwotKy5MX2JuX3N1Yl93b3Jkc190YWlsOgotKwkuc2V0CXJlb3JkZXIKLSsJJExECSR0MCwwKCRhMSkKLSsJJExECSR0YTAsMCgkYTIpCi0rCXN1YnUJJGEzLDEKLSsJc2x0dQkkdDgsJHQwLCR0YTAKLSsJJFNVQlUJJHRhMCwkdDAsJHRhMAotKwkkU1VCVQkkdDAsJHRhMCwkdjAKLSsJc2d0dQkkdjAsJHQwLCR0YTAKLSsJJFNUCSR0MCwwKCRhMCkKLSsJJEFERFUJJHYwLCR0OAotKwliZXF6CSRhMywuTF9ibl9zdWJfd29yZHNfcmV0dXJuCi0rCi0rCSRMRAkkdDEsJEJOU1ooJGExKQotKwlzdWJ1CSRhMywxCi0rCSRMRAkkdGExLCRCTlNaKCRhMikKLSsJc2x0dQkkdDksJHQxLCR0YTEKLSsJJFNVQlUJJHRhMSwkdDEsJHRhMQotKwkkU1VCVQkkdDEsJHRhMSwkdjAKLSsJc2d0dQkkdjAsJHQxLCR0YTEKLSsJJFNUCSR0MSwkQk5TWigkYTApCi0rCSRBRERVCSR2MCwkdDkKLSsJYmVxegkkYTMsLkxfYm5fc3ViX3dvcmRzX3JldHVybgotKwotKwkkTEQJJHQyLDIqJEJOU1ooJGExKQotKwkkTEQJJHRhMiwyKiRCTlNaKCRhMikKLSsJc2x0dQkkdDgsJHQyLCR0YTIKLSsJJFNVQlUJJHRhMiwkdDIsJHRhMgotKwkkU1VCVQkkdDIsJHRhMiwkdjAKLSsJc2d0dQkkdjAsJHQyLCR0YTIKLSsJJFNUCSR0MiwyKiRCTlNaKCRhMCkKLSsJJEFERFUJJHYwLCR0OAotKwotKy5MX2JuX3N1Yl93b3Jkc19yZXR1cm46Ci0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19MCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsMCokU1pSRUcoJHNwKQotKwkkUFRSX0FERCAkc3AsNiokU1pSRUcKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwltb3ZlCSRhMCwkdjAKLSsuZW5kCWJuX3N1Yl93b3Jkc19pbnRlcm5hbAotKwotKy5hbGlnbiA1Ci0rLmdsb2JsCWJuX2Rpdl8zX3dvcmRzCi0rLmVudAlibl9kaXZfM193b3JkcwotK2JuX2Rpdl8zX3dvcmRzOgotKwkuc2V0CW5vcmVvcmRlcgotKwltb3ZlCSRhMywkYTAJCSMgd2Uga25vdyB0aGF0IGJuX2Rpdl93b3JkcyBkb2VzIG5vdAotKwkJCQkjIHRvdWNoICRhMywgJHRhMiwgJHRhMyBhbmQgcHJlc2VydmVzICRhMgotKwkJCQkjIHNvIHRoYXQgd2UgY2FuIHNhdmUgdHdvIGFyZ3VtZW50cwotKwkJCQkjIGFuZCByZXR1cm4gYWRkcmVzcyBpbiByZWdpc3RlcnMKLSsJCQkJIyBpbnN0ZWFkIG9mIHN0YWNrOi0pCi0rCi0rCSRMRAkkYTAsKCRhMykKLSsJbW92ZQkkdGEyLCRhMQotKwlibmUJJGEwLCRhMixibl9kaXZfM193b3Jkc19pbnRlcm5hbAotKwkkTEQJJGExLC0kQk5TWigkYTMpCi0rCWxpCSR2MCwtMQotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHYwCi0rLmVuZAlibl9kaXZfM193b3JkcwotKwotKy5hbGlnbgk1Ci0rLmVudAlibl9kaXZfM193b3Jkc19pbnRlcm5hbAotK2JuX2Rpdl8zX3dvcmRzX2ludGVybmFsOgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwltb3ZlCSR0YTMsJHJhCi0rCWJhbAlibl9kaXZfd29yZHMKLSsJbW92ZQkkcmEsJHRhMwotKwkkTVVMVFUJJHRhMiwkdjAKLSsJJExECSR0MiwtMiokQk5TWigkYTMpCi0rCW1vdmUJJHRhMCwkemVybwotKwltZmhpCSR0MQotKwltZmxvCSR0MAotKwlzbHR1CSR0OCwkdDEsJGExCi0rLkxfYm5fZGl2XzNfd29yZHNfaW5uZXJfbG9vcDoKLSsJYm5legkkdDgsLkxfYm5fZGl2XzNfd29yZHNfaW5uZXJfbG9vcF9kb25lCi0rCXNnZXUJJGF0LCR0MiwkdDAKLSsJc2VxCSR0OSwkdDEsJGExCi0rCWFuZAkkYXQsJHQ5Ci0rCXNsdHUJJHQzLCR0MCwkdGEyCi0rCSRBRERVCSRhMSwkYTIKLSsJJFNVQlUJJHQxLCR0MwotKwkkU1VCVQkkdDAsJHRhMgotKwlzbHR1CSR0OCwkdDEsJGExCi0rCXNsdHUJJHRhMCwkYTEsJGEyCi0rCW9yCSR0OCwkdGEwCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJlcXpsCSRhdCwuTF9ibl9kaXZfM193b3Jkc19pbm5lcl9sb29wCi0rCSRTVUJVCSR2MCwxCi0rCS5zZXQJcmVvcmRlcgotKy5MX2JuX2Rpdl8zX3dvcmRzX2lubmVyX2xvb3BfZG9uZToKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW1vdmUJJGEwLCR2MAotKy5lbmQJYm5fZGl2XzNfd29yZHNfaW50ZXJuYWwKLSsKLSsuYWxpZ24JNQotKy5nbG9ibAlibl9kaXZfd29yZHMKLSsuZW50CWJuX2Rpdl93b3JkcwotK2JuX2Rpdl93b3JkczoKLSsJLnNldAlub3Jlb3JkZXIKLSsJYm5legkkYTIsYm5fZGl2X3dvcmRzX2ludGVybmFsCi0rCWxpCSR2MCwtMQkJIyBJIHdvdWxkIHJhdGhlciBzaWduYWwgZGl2LWJ5LXplcm8KLSsJCQkJIyB3aGljaCBjYW4gYmUgZG9uZSB3aXRoICdicmVhayA3JwotKwlqcgkkcmEKLSsJbW92ZQkkYTAsJHYwCi0rLmVuZAlibl9kaXZfd29yZHMKLSsKLSsuYWxpZ24JNQotKy5lbnQJYm5fZGl2X3dvcmRzX2ludGVybmFsCi0rYm5fZGl2X3dvcmRzX2ludGVybmFsOgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCW1vdmUJJHYxLCR6ZXJvCi0rCWJsdHoJJGEyLC5MX2JuX2Rpdl93b3Jkc19ib2R5Ci0rCW1vdmUJJHQ5LCR2MQotKwkkU0xMCSRhMiwxCi0rCWJndHoJJGEyLC4tNAotKwlhZGR1CSR0OSwxCi0rCi0rCS5zZXQJcmVvcmRlcgotKwluZWd1CSR0MSwkdDkKLSsJbGkJJHQyLC0xCi0rCSRTTEwJJHQyLCR0MQotKwlhbmQJJHQyLCRhMAotKwkkU1JMCSRhdCwkYTEsJHQxCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJuZXpsCSR0MiwuKzgKLSsJYnJlYWsJNgkJIyBzaWduYWwgb3ZlcmZsb3cKLSsJLnNldAlyZW9yZGVyCi0rCSRTTEwJJGEwLCR0OQotKwkkU0xMCSRhMSwkdDkKLSsJb3IJJGEwLCRhdAotK19fXwotKyRRVD0kdGEwOwotKyRISD0kdGExOwotKyRESD0kdjE7Ci0rJGNvZGUuPTw8X19fOwotKy5MX2JuX2Rpdl93b3Jkc19ib2R5OgotKwkkU1JMCSRESCwkYTIsNCokQk5TWgkjIGJpdHMKLSsJc2dldQkkYXQsJGEwLCRhMgotKwkuc2V0CW5vcmVvcmRlcgotKwlibmV6bAkkYXQsLis4Ci0rCSRTVUJVCSRhMCwkYTIKLSsJLnNldAlyZW9yZGVyCi0rCi0rCWxpCSRRVCwtMQotKwkkU1JMCSRISCwkYTAsNCokQk5TWgkjIGJpdHMKLSsJJFNSTAkkUVQsNCokQk5TWgkjIHE9MHhmZmZmZmZmZgotKwliZXEJJERILCRISCwuTF9ibl9kaXZfd29yZHNfc2tpcF9kaXYxCi0rCSRESVZVCSR6ZXJvLCRhMCwkREgKLSsJbWZsbwkkUVQKLSsuTF9ibl9kaXZfd29yZHNfc2tpcF9kaXYxOgotKwkkTVVMVFUJJGEyLCRRVAotKwkkU0xMCSR0MywkYTAsNCokQk5TWgkjIGJpdHMKLSsJJFNSTAkkYXQsJGExLDQqJEJOU1oJIyBiaXRzCi0rCW9yCSR0MywkYXQKLSsJbWZsbwkkdDAKLSsJbWZoaQkkdDEKLSsuTF9ibl9kaXZfd29yZHNfaW5uZXJfbG9vcDE6Ci0rCXNsdHUJJHQyLCR0MywkdDAKLSsJc2VxCSR0OCwkSEgsJHQxCi0rCXNsdHUJJGF0LCRISCwkdDEKLSsJYW5kCSR0MiwkdDgKLSsJc2x0dQkkdjAsJHQwLCRhMgotKwlvcgkkYXQsJHQyCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJlcXoJJGF0LC5MX2JuX2Rpdl93b3Jkc19pbm5lcl9sb29wMV9kb25lCi0rCSRTVUJVCSR0MSwkdjAKLSsJJFNVQlUJJHQwLCRhMgotKwliCS5MX2JuX2Rpdl93b3Jkc19pbm5lcl9sb29wMQotKwkkU1VCVQkkUVQsMQotKwkuc2V0CXJlb3JkZXIKLSsuTF9ibl9kaXZfd29yZHNfaW5uZXJfbG9vcDFfZG9uZToKLSsKLSsJJFNMTAkkYTEsNCokQk5TWgkjIGJpdHMKLSsJJFNVQlUJJGEwLCR0MywkdDAKLSsJJFNMTAkkdjAsJFFULDQqJEJOU1oJIyBiaXRzCi0rCi0rCWxpCSRRVCwtMQotKwkkU1JMCSRISCwkYTAsNCokQk5TWgkjIGJpdHMKLSsJJFNSTAkkUVQsNCokQk5TWgkjIHE9MHhmZmZmZmZmZgotKwliZXEJJERILCRISCwuTF9ibl9kaXZfd29yZHNfc2tpcF9kaXYyCi0rCSRESVZVCSR6ZXJvLCRhMCwkREgKLSsJbWZsbwkkUVQKLSsuTF9ibl9kaXZfd29yZHNfc2tpcF9kaXYyOgotKwkkTVVMVFUJJGEyLCRRVAotKwkkU0xMCSR0MywkYTAsNCokQk5TWgkjIGJpdHMKLSsJJFNSTAkkYXQsJGExLDQqJEJOU1oJIyBiaXRzCi0rCW9yCSR0MywkYXQKLSsJbWZsbwkkdDAKLSsJbWZoaQkkdDEKLSsuTF9ibl9kaXZfd29yZHNfaW5uZXJfbG9vcDI6Ci0rCXNsdHUJJHQyLCR0MywkdDAKLSsJc2VxCSR0OCwkSEgsJHQxCi0rCXNsdHUJJGF0LCRISCwkdDEKLSsJYW5kCSR0MiwkdDgKLSsJc2x0dQkkdjEsJHQwLCRhMgotKwlvcgkkYXQsJHQyCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJlcXoJJGF0LC5MX2JuX2Rpdl93b3Jkc19pbm5lcl9sb29wMl9kb25lCi0rCSRTVUJVCSR0MSwkdjEKLSsJJFNVQlUJJHQwLCRhMgotKwliCS5MX2JuX2Rpdl93b3Jkc19pbm5lcl9sb29wMgotKwkkU1VCVQkkUVQsMQotKwkuc2V0CXJlb3JkZXIKLSsuTF9ibl9kaXZfd29yZHNfaW5uZXJfbG9vcDJfZG9uZToKLSsKLSsJJFNVQlUJJGEwLCR0MywkdDAKLSsJb3IJJHYwLCRRVAotKwkkU1JMCSR2MSwkYTAsJHQ5CSMgJHYxIGNvbnRhaW5zIHJlbWFpbmRlciBpZiBhbnlib2R5IHdhbnRzIGl0Ci0rCSRTUkwJJGEyLCR0OQkJIyByZXN0b3JlICRhMgotKwotKwkuc2V0CW5vcmVvcmRlcgotKwltb3ZlCSRhMSwkdjEKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW1vdmUJJGEwLCR2MAotKy5lbmQJYm5fZGl2X3dvcmRzX2ludGVybmFsCi0rX19fCi0rdW5kZWYgJEhIOyB1bmRlZiAkUVQ7IHVuZGVmICRESDsKLSsKLSsoJGFfMCwkYV8xLCRhXzIsJGFfMyk9KCR0MCwkdDEsJHQyLCR0Myk7Ci0rKCRiXzAsJGJfMSwkYl8yLCRiXzMpPSgkdGEwLCR0YTEsJHRhMiwkdGEzKTsKLSsKLSsoJGFfNCwkYV81LCRhXzYsJGFfNyk9KCRzMCwkczIsJHM0LCRhMSk7ICMgb25jZSB3ZSBsb2FkIGFbN10sIG5vIHVzZSBmb3IgJGExCi0rKCRiXzQsJGJfNSwkYl82LCRiXzcpPSgkczEsJHMzLCRzNSwkYTIpOyAjIG9uY2Ugd2UgbG9hZCBiWzddLCBubyB1c2UgZm9yICRhMgotKwotKygkdF8xLCR0XzIsJGNfMSwkY18yLCRjXzMpPSgkdDgsJHQ5LCR2MCwkdjEsJGEzKTsKLSsKLSskY29kZS49PDxfX187Ci0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJYm5fbXVsX2NvbWJhOAotKy5lbnQJYm5fbXVsX2NvbWJhOAotK2JuX211bF9jb21iYTg6Ci0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJLmZyYW1lCSRzcCwxMiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAzZmYwMDgsLSRTWlJFRwotKwkkUFRSX1NVQiAkc3AsMTIqJFNaUkVHCi0rCSRSRUdfUwkkcmEsMTEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzNSwxMCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM0LDkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMyw4KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczIsNyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMxLDYqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMCw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyICF+IC9udWJpL2kpOwotKwkuZnJhbWUJJHNwLDYqJFNaUkVHLCRyYQotKwkubWFzawkweDAwM2YwMDAwLC0kU1pSRUcKLSsJJFBUUl9TVUIgJHNwLDYqJFNaUkVHCi0rCSRSRUdfUwkkczUsNSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM0LDQqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMywzKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczIsMiokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMxLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMCwwKiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwotKwkuc2V0CXJlb3JkZXIKLSsJJExECSRhXzAsMCgkYTEpCSMgSWYgY29tcGlsZWQgd2l0aCAtbWlwczMgb3B0aW9uIG9uCi0rCQkJCSMgUjUwMDAgYm94IGFzc2VtYmxlciBiYXJrcyBvbiB0aGlzCi0rCQkJCSMgMWluZSB3aXRoICJzaG91bGQgbm90IGhhdmUgbXVsdC9kaXYKLSsJCQkJIyBhcyBsYXN0IGluc3RydWN0aW9uIGluIGJiIChSMTBLCi0rCQkJCSMgYnVnKSIgd2FybmluZy4gSWYgYW55Ym9keSBvdXQgdGhlcmUKLSsJCQkJIyBoYXMgYSBjbHVlIGFib3V0IGhvdyB0byBjaXJjdW12ZW50Ci0rCQkJCSMgdGhpcyBkbyBzZW5kIG1lIGEgbm90ZS4KLSsJCQkJIwkJPGFwcHJvXEBmeS5jaGFsbWVycy5zZT4KLSsKLSsJJExECSRiXzAsMCgkYTIpCi0rCSRMRAkkYV8xLCRCTlNaKCRhMSkKLSsJJExECSRhXzIsMiokQk5TWigkYTEpCi0rCSRNVUxUVQkkYV8wLCRiXzAJCSMgbXVsX2FkZF9jKGFbMF0sYlswXSxjMSxjMixjMyk7Ci0rCSRMRAkkYV8zLDMqJEJOU1ooJGExKQotKwkkTEQJJGJfMSwkQk5TWigkYTIpCi0rCSRMRAkkYl8yLDIqJEJOU1ooJGEyKQotKwkkTEQJJGJfMywzKiRCTlNaKCRhMikKLSsJbWZsbwkkY18xCi0rCW1maGkJJGNfMgotKwotKwkkTEQJJGFfNCw0KiRCTlNaKCRhMSkKLSsJJExECSRhXzUsNSokQk5TWigkYTEpCi0rCSRNVUxUVQkkYV8wLCRiXzEJCSMgbXVsX2FkZF9jKGFbMF0sYlsxXSxjMixjMyxjMSk7Ci0rCSRMRAkkYV82LDYqJEJOU1ooJGExKQotKwkkTEQJJGFfNyw3KiRCTlNaKCRhMSkKLSsJJExECSRiXzQsNCokQk5TWigkYTIpCi0rCSRMRAkkYl81LDUqJEJOU1ooJGEyKQotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzEsJGJfMAkJIyBtdWxfYWRkX2MoYVsxXSxiWzBdLGMyLGMzLGMxKTsKLSsJJEFERFUJJGNfMywkdF8yLCRhdAotKwkkTEQJJGJfNiw2KiRCTlNaKCRhMikKLSsJJExECSRiXzcsNyokQk5TWigkYTIpCi0rCSRTVAkkY18xLDAoJGEwKQkjIHJbMF09YzE7Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkgJE1VTFRVCSRhXzIsJGJfMAkJIyBtdWxfYWRkX2MoYVsyXSxiWzBdLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGNfMSwkY18zLCR0XzIKLSsJJFNUCSRjXzIsJEJOU1ooJGEwKQkjIHJbMV09YzI7Ci0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMSwkYl8xCQkjIG11bF9hZGRfYyhhWzFdLGJbMV0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRNVUxUVQkkYV8wLCRiXzIJCSMgbXVsX2FkZF9jKGFbMF0sYlsyXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRjXzIsJGNfMSwkdF8yCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzAsJGJfMwkJIyBtdWxfYWRkX2MoYVswXSxiWzNdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwkkU1QJJGNfMywyKiRCTlNaKCRhMCkJIyByWzJdPWMzOwotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJE1VTFRVCSRhXzEsJGJfMgkJIyBtdWxfYWRkX2MoYVsxXSxiWzJdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGNfMywkY18yLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8yLCRiXzEJCSMgbXVsX2FkZF9jKGFbMl0sYlsxXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8zLCRiXzAJCSMgbXVsX2FkZF9jKGFbM10sYlswXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfNCwkYl8wCQkjIG11bF9hZGRfYyhhWzRdLGJbMF0sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCSRTVAkkY18xLDMqJEJOU1ooJGEwKQkjIHJbM109YzE7Ci0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkTVVMVFUJJGFfMywkYl8xCQkjIG11bF9hZGRfYyhhWzNdLGJbMV0sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkY18xLCRjXzMsJHRfMgotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzIsJGJfMgkJIyBtdWxfYWRkX2MoYVsyXSxiWzJdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzEsJGJfMwkJIyBtdWxfYWRkX2MoYVsxXSxiWzNdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzAsJGJfNAkJIyBtdWxfYWRkX2MoYVswXSxiWzRdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJICRNVUxUVQkkYV8wLCRiXzUJCSMgbXVsX2FkZF9jKGFbMF0sYls1XSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsNCokQk5TWigkYTApCSMgcls0XT1jMjsKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRNVUxUVQkkYV8xLCRiXzQJCSMgbXVsX2FkZF9jKGFbMV0sYls0XSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRjXzIsJGNfMSwkdF8yCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMiwkYl8zCQkjIG11bF9hZGRfYyhhWzJdLGJbM10sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMywkYl8yCQkjIG11bF9hZGRfYyhhWzNdLGJbMl0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfNCwkYl8xCQkjIG11bF9hZGRfYyhhWzRdLGJbMV0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfNSwkYl8wCQkjIG11bF9hZGRfYyhhWzVdLGJbMF0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzYsJGJfMAkJIyBtdWxfYWRkX2MoYVs2XSxiWzBdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwkkU1QJJGNfMyw1KiRCTlNaKCRhMCkJIyByWzVdPWMzOwotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJE1VTFRVCSRhXzUsJGJfMQkJIyBtdWxfYWRkX2MoYVs1XSxiWzFdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGNfMywkY18yLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV80LCRiXzIJCSMgbXVsX2FkZF9jKGFbNF0sYlsyXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8zLCRiXzMJCSMgbXVsX2FkZF9jKGFbM10sYlszXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8yLCRiXzQJCSMgbXVsX2FkZF9jKGFbMl0sYls0XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8xLCRiXzUJCSMgbXVsX2FkZF9jKGFbMV0sYls1XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8wLCRiXzYJCSMgbXVsX2FkZF9jKGFbMF0sYls2XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfMCwkYl83CQkjIG11bF9hZGRfYyhhWzBdLGJbN10sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCSRTVAkkY18xLDYqJEJOU1ooJGEwKQkjIHJbNl09YzE7Ci0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkTVVMVFUJJGFfMSwkYl82CQkjIG11bF9hZGRfYyhhWzFdLGJbNl0sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkY18xLCRjXzMsJHRfMgotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzIsJGJfNQkJIyBtdWxfYWRkX2MoYVsyXSxiWzVdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzMsJGJfNAkJIyBtdWxfYWRkX2MoYVszXSxiWzRdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzQsJGJfMwkJIyBtdWxfYWRkX2MoYVs0XSxiWzNdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzUsJGJfMgkJIyBtdWxfYWRkX2MoYVs1XSxiWzJdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzYsJGJfMQkJIyBtdWxfYWRkX2MoYVs2XSxiWzFdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzcsJGJfMAkJIyBtdWxfYWRkX2MoYVs3XSxiWzBdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJICRNVUxUVQkkYV83LCRiXzEJCSMgbXVsX2FkZF9jKGFbN10sYlsxXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsNyokQk5TWigkYTApCSMgcls3XT1jMjsKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRNVUxUVQkkYV82LCRiXzIJCSMgbXVsX2FkZF9jKGFbNl0sYlsyXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRjXzIsJGNfMSwkdF8yCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfNSwkYl8zCQkjIG11bF9hZGRfYyhhWzVdLGJbM10sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfNCwkYl80CQkjIG11bF9hZGRfYyhhWzRdLGJbNF0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMywkYl81CQkjIG11bF9hZGRfYyhhWzNdLGJbNV0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMiwkYl82CQkjIG11bF9hZGRfYyhhWzJdLGJbNl0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfMSwkYl83CQkjIG11bF9hZGRfYyhhWzFdLGJbN10sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzIsJGJfNwkJIyBtdWxfYWRkX2MoYVsyXSxiWzddLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwkkU1QJJGNfMyw4KiRCTlNaKCRhMCkJIyByWzhdPWMzOwotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJE1VTFRVCSRhXzMsJGJfNgkJIyBtdWxfYWRkX2MoYVszXSxiWzZdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGNfMywkY18yLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV80LCRiXzUJCSMgbXVsX2FkZF9jKGFbNF0sYls1XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV81LCRiXzQJCSMgbXVsX2FkZF9jKGFbNV0sYls0XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV82LCRiXzMJCSMgbXVsX2FkZF9jKGFbNl0sYlszXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV83LCRiXzIJCSMgbXVsX2FkZF9jKGFbN10sYlsyXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfNywkYl8zCQkjIG11bF9hZGRfYyhhWzddLGJbM10sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCSRTVAkkY18xLDkqJEJOU1ooJGEwKQkjIHJbOV09YzE7Ci0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkTVVMVFUJJGFfNiwkYl80CQkjIG11bF9hZGRfYyhhWzZdLGJbNF0sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkY18xLCRjXzMsJHRfMgotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzUsJGJfNQkJIyBtdWxfYWRkX2MoYVs1XSxiWzVdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzQsJGJfNgkJIyBtdWxfYWRkX2MoYVs0XSxiWzZdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzMsJGJfNwkJIyBtdWxfYWRkX2MoYVszXSxiWzddLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzQsJGJfNwkJIyBtdWxfYWRkX2MoYVs0XSxiWzddLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwkkU1QJJGNfMiwxMCokQk5TWigkYTApCSMgclsxMF09YzI7Ci0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkTVVMVFUJJGFfNSwkYl82CQkjIG11bF9hZGRfYyhhWzVdLGJbNl0sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkY18yLCRjXzEsJHRfMgotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJE1VTFRVCSRhXzYsJGJfNQkJIyBtdWxfYWRkX2MoYVs2XSxiWzVdLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJE1VTFRVCSRhXzcsJGJfNAkJIyBtdWxfYWRkX2MoYVs3XSxiWzRdLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJICRNVUxUVQkkYV83LCRiXzUJCSMgbXVsX2FkZF9jKGFbN10sYls1XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJJFNUCSRjXzMsMTEqJEJOU1ooJGEwKQkjIHJbMTFdPWMzOwotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJE1VTFRVCSRhXzYsJGJfNgkJIyBtdWxfYWRkX2MoYVs2XSxiWzZdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGNfMywkY18yLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV81LCRiXzcJCSMgbXVsX2FkZF9jKGFbNV0sYls3XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfNiwkYl83CQkjIG11bF9hZGRfYyhhWzZdLGJbN10sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCSRTVAkkY18xLDEyKiRCTlNaKCRhMCkJIyByWzEyXT1jMTsKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18yLCR0XzEKLSsJc2x0dQkkYXQsJGNfMiwkdF8xCi0rCSRNVUxUVQkkYV83LCRiXzYJCSMgbXVsX2FkZF9jKGFbN10sYls2XSxjMixjMyxjMSk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRjXzEsJGNfMywkdF8yCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkTVVMVFUJJGFfNywkYl83CQkjIG11bF9hZGRfYyhhWzddLGJbN10sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkYXQsJGNfMywkdF8yCi0rCSRBRERVCSRjXzEsJGF0Ci0rCSRTVAkkY18yLDEzKiRCTlNaKCRhMCkJIyByWzEzXT1jMjsKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwkkU1QJJGNfMywxNCokQk5TWigkYTApCSMgclsxNF09YzM7Ci0rCSRTVAkkY18xLDE1KiRCTlNaKCRhMCkJIyByWzE1XT1jMTsKLSsKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHM1LDEwKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczQsOSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMzLDgqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMiw3KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczEsNiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMwLDUqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsMCokU1pSRUcoJHNwKQotKwlqcgkkcmEKLSsJJFBUUl9BREQgJHNwLDEyKiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgIX4gL251YmkvaSk7Ci0rCSRSRUdfTAkkczUsNSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM0LDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMywzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczIsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMCwwKiRTWlJFRygkc3ApCi0rCWpyCSRyYQotKwkkUFRSX0FERCAkc3AsNiokU1pSRUcKLStfX18KLSskY29kZS49PDxfX187Ci0rLmVuZAlibl9tdWxfY29tYmE4Ci0rCi0rLmFsaWduCTUKLSsuZ2xvYmwJYm5fbXVsX2NvbWJhNAotKy5lbnQJYm5fbXVsX2NvbWJhNAotK2JuX211bF9jb21iYTQ6Ci0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJLmZyYW1lCSRzcCw2KiRTWlJFRywkcmEKLSsJLm1hc2sJMHg4MDAwZjAwOCwtJFNaUkVHCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRQVFJfU1VCICRzcCw2KiRTWlJFRwotKwkkUkVHX1MJJHJhLDUqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkZ3AsMCokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJLnNldAlyZW9yZGVyCi0rCSRMRAkkYV8wLDAoJGExKQotKwkkTEQJJGJfMCwwKCRhMikKLSsJJExECSRhXzEsJEJOU1ooJGExKQotKwkkTEQJJGFfMiwyKiRCTlNaKCRhMSkKLSsJJE1VTFRVCSRhXzAsJGJfMAkJIyBtdWxfYWRkX2MoYVswXSxiWzBdLGMxLGMyLGMzKTsKLSsJJExECSRhXzMsMyokQk5TWigkYTEpCi0rCSRMRAkkYl8xLCRCTlNaKCRhMikKLSsJJExECSRiXzIsMiokQk5TWigkYTIpCi0rCSRMRAkkYl8zLDMqJEJOU1ooJGEyKQotKwltZmxvCSRjXzEKLSsJbWZoaQkkY18yCi0rCSRTVAkkY18xLDAoJGEwKQotKwotKwkkTVVMVFUJJGFfMCwkYl8xCQkjIG11bF9hZGRfYyhhWzBdLGJbMV0sYzIsYzMsYzEpOwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzEsJGJfMAkJIyBtdWxfYWRkX2MoYVsxXSxiWzBdLGMyLGMzLGMxKTsKLSsJJEFERFUJJGNfMywkdF8yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJICRNVUxUVQkkYV8yLCRiXzAJCSMgbXVsX2FkZF9jKGFbMl0sYlswXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRjXzEsJGNfMywkdF8yCi0rCSRTVAkkY18yLCRCTlNaKCRhMCkKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRNVUxUVQkkYV8xLCRiXzEJCSMgbXVsX2FkZF9jKGFbMV0sYlsxXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJE1VTFRVCSRhXzAsJGJfMgkJIyBtdWxfYWRkX2MoYVswXSxiWzJdLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGNfMiwkY18xLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSAkTVVMVFUJJGFfMCwkYl8zCQkjIG11bF9hZGRfYyhhWzBdLGJbM10sYzEsYzIsYzMpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCSRTVAkkY18zLDIqJEJOU1ooJGEwKQotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJE1VTFRVCSRhXzEsJGJfMgkJIyBtdWxfYWRkX2MoYVsxXSxiWzJdLGMxLGMyLGMzKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGNfMywkY18yLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8yLCRiXzEJCSMgbXVsX2FkZF9jKGFbMl0sYlsxXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRNVUxUVQkkYV8zLCRiXzAJCSMgbXVsX2FkZF9jKGFbM10sYlswXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfMywkYl8xCQkjIG11bF9hZGRfYyhhWzNdLGJbMV0sYzIsYzMsYzEpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCSRTVAkkY18xLDMqJEJOU1ooJGEwKQotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJE1VTFRVCSRhXzIsJGJfMgkJIyBtdWxfYWRkX2MoYVsyXSxiWzJdLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGNfMSwkY18zLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18yLCR0XzEKLSsJc2x0dQkkYXQsJGNfMiwkdF8xCi0rCSRNVUxUVQkkYV8xLCRiXzMJCSMgbXVsX2FkZF9jKGFbMV0sYlszXSxjMixjMyxjMSk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18yLCR0XzEKLSsJc2x0dQkkYXQsJGNfMiwkdF8xCi0rCSAkTVVMVFUJJGFfMiwkYl8zCQkjIG11bF9hZGRfYyhhWzJdLGJbM10sYzMsYzEsYzIpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkYXQsJGNfMywkdF8yCi0rCSRBRERVCSRjXzEsJGF0Ci0rCSRTVAkkY18yLDQqJEJOU1ooJGEwKQotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJE1VTFRVCSRhXzMsJGJfMgkJIyBtdWxfYWRkX2MoYVszXSxiWzJdLGMzLGMxLGMyKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGNfMiwkY18xLCR0XzIKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSAkTVVMVFUJJGFfMywkYl8zCQkjIG11bF9hZGRfYyhhWzNdLGJbM10sYzEsYzIsYzMpOwotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCSRTVAkkY18zLDUqJEJOU1ooJGEwKQotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCSRTVAkkY18xLDYqJEJOU1ooJGEwKQotKwkkU1QJJGNfMiw3KiRCTlNaKCRhMCkKLSsKLSsJLnNldAlub3Jlb3JkZXIKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRncCwwKiRTWlJFRygkc3ApCi0rCSRQVFJfQUREICRzcCw2KiRTWlJFRwotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCW5vcAotKy5lbmQJYm5fbXVsX2NvbWJhNAotK19fXwotKwotKygkYV80LCRhXzUsJGFfNiwkYV83KT0oJGJfMCwkYl8xLCRiXzIsJGJfMyk7Ci0rCi0rJGNvZGUuPTw8X19fOwotKwotKy5hbGlnbgk1Ci0rLmdsb2JsCWJuX3Nxcl9jb21iYTgKLSsuZW50CWJuX3Nxcl9jb21iYTgKLStibl9zcXJfY29tYmE4OgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCS5mcmFtZQkkc3AsNiokU1pSRUcsJHJhCi0rCS5tYXNrCTB4ODAwMGYwMDgsLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotKwkkUFRSX1NVQiAkc3AsNiokU1pSRUcKLSsJJFJFR19TCSRyYSw1KiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDMsNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQyLDMqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MSwyKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDAsMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLDAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCS5zZXQJcmVvcmRlcgotKwkkTEQJJGFfMCwwKCRhMSkKLSsJJExECSRhXzEsJEJOU1ooJGExKQotKwkkTEQJJGFfMiwyKiRCTlNaKCRhMSkKLSsJJExECSRhXzMsMyokQk5TWigkYTEpCi0rCi0rCSRNVUxUVQkkYV8wLCRhXzAJCSMgbXVsX2FkZF9jKGFbMF0sYlswXSxjMSxjMixjMyk7Ci0rCSRMRAkkYV80LDQqJEJOU1ooJGExKQotKwkkTEQJJGFfNSw1KiRCTlNaKCRhMSkKLSsJJExECSRhXzYsNiokQk5TWigkYTEpCi0rCSRMRAkkYV83LDcqJEJOU1ooJGExKQotKwltZmxvCSRjXzEKLSsJbWZoaQkkY18yCi0rCSRTVAkkY18xLDAoJGEwKQotKwotKwkkTVVMVFUJJGFfMCwkYV8xCQkjIG11bF9hZGRfYzIoYVswXSxiWzFdLGMyLGMzLGMxKTsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwlzbHQJJGNfMSwkdF8yLCR6ZXJvCi0rCSRTTEwJJHRfMiwxCi0rCSAkTVVMVFUJJGFfMiwkYV8wCQkjIG11bF9hZGRfYzIoYVsyXSxiWzBdLGMzLGMxLGMyKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJGNfMywkdF8yLCRhdAotKwkkU1QJJGNfMiwkQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzIsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV8xCQkjIG11bF9hZGRfYyhhWzFdLGJbMV0sYzMsYzEsYzIpOwotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzAsJGFfMwkJIyBtdWxfYWRkX2MyKGFbMF0sYlszXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJJFNUCSRjXzMsMiokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzMsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV8yCQkjIG11bF9hZGRfYzIoYVsxXSxiWzJdLGMxLGMyLGMzKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkgJE1VTFRVCSRhXzQsJGFfMAkJIyBtdWxfYWRkX2MyKGFbNF0sYlswXSxjMixjMyxjMSk7Ci0rCSRTTEwJJHRfMiwxCi0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJJFNUCSRjXzEsMyokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzEsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMywkYV8xCQkjIG11bF9hZGRfYzIoYVszXSxiWzFdLGMyLGMzLGMxKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18xLCRhdAotKwkkTVVMVFUJJGFfMiwkYV8yCQkjIG11bF9hZGRfYyhhWzJdLGJbMl0sYzIsYzMsYzEpOwotKwkkU0xMCSR0XzIsMQotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkYXQsJGNfMywkdF8yCi0rCSRBRERVCSRjXzEsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkgJE1VTFRVCSRhXzAsJGFfNQkJIyBtdWxfYWRkX2MyKGFbMF0sYls1XSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsNCokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzIsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV80CQkjIG11bF9hZGRfYzIoYVsxXSxiWzRdLGMzLGMxLGMyKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18yLCRhdAotKwkkTVVMVFUJJGFfMiwkYV8zCQkjIG11bF9hZGRfYzIoYVsyXSxiWzNdLGMzLGMxLGMyKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkgJE1VTFRVCSRhXzYsJGFfMAkJIyBtdWxfYWRkX2MyKGFbNl0sYlswXSxjMSxjMixjMyk7Ci0rCSRBRERVCSRjXzIsJGF0Ci0rCSRTTEwJJHRfMiwxCi0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJJFNUCSRjXzMsNSokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzMsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfNSwkYV8xCQkjIG11bF9hZGRfYzIoYVs1XSxiWzFdLGMxLGMyLGMzKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkkTVVMVFUJJGFfNCwkYV8yCQkjIG11bF9hZGRfYzIoYVs0XSxiWzJdLGMxLGMyLGMzKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkkTVVMVFUJJGFfMywkYV8zCQkjIG11bF9hZGRfYyhhWzNdLGJbM10sYzEsYzIsYzMpOwotKwkkU0xMCSR0XzIsMQotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMSwkdF8xCi0rCXNsdHUJJGF0LCRjXzEsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18yLCR0XzIKLSsJc2x0dQkkYXQsJGNfMiwkdF8yCi0rCSRBRERVCSRjXzMsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMSwkdF8xCi0rCXNsdHUJJGF0LCRjXzEsJHRfMQotKwkgJE1VTFRVCSRhXzAsJGFfNwkJIyBtdWxfYWRkX2MyKGFbMF0sYls3XSxjMixjMyxjMSk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJJFNUCSRjXzEsNiokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzEsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV82CQkjIG11bF9hZGRfYzIoYVsxXSxiWzZdLGMyLGMzLGMxKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18xLCRhdAotKwkkTVVMVFUJJGFfMiwkYV81CQkjIG11bF9hZGRfYzIoYVsyXSxiWzVdLGMyLGMzLGMxKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18xLCRhdAotKwkkTVVMVFUJJGFfMywkYV80CQkjIG11bF9hZGRfYzIoYVszXSxiWzRdLGMyLGMzLGMxKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18xLCRhdAotKwkgJE1VTFRVCSRhXzcsJGFfMQkJIyBtdWxfYWRkX2MyKGFbN10sYlsxXSxjMyxjMSxjMik7Ci0rCSRTTEwJJHRfMiwxCi0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18yLCR0XzEKLSsJc2x0dQkkYXQsJGNfMiwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsNyokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzIsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfNiwkYV8yCQkjIG11bF9hZGRfYzIoYVs2XSxiWzJdLGMzLGMxLGMyKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18yLCRhdAotKwkkTVVMVFUJJGFfNSwkYV8zCQkjIG11bF9hZGRfYzIoYVs1XSxiWzNdLGMzLGMxLGMyKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18yLCRhdAotKwkkTVVMVFUJJGFfNCwkYV80CQkjIG11bF9hZGRfYyhhWzRdLGJbNF0sYzMsYzEsYzIpOwotKwkkU0xMCSR0XzIsMQotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzIsJGFfNwkJIyBtdWxfYWRkX2MyKGFbMl0sYls3XSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJJFNUCSRjXzMsOCokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzMsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMywkYV82CQkjIG11bF9hZGRfYzIoYVszXSxiWzZdLGMxLGMyLGMzKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkkTVVMVFUJJGFfNCwkYV81CQkjIG11bF9hZGRfYzIoYVs0XSxiWzVdLGMxLGMyLGMzKTsKLSsJJFNMTAkkdF8yLDEKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkgJE1VTFRVCSRhXzcsJGFfMwkJIyBtdWxfYWRkX2MyKGFbN10sYlszXSxjMixjMyxjMSk7Ci0rCSRTTEwJJHRfMiwxCi0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJJFNUCSRjXzEsOSokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzEsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfNiwkYV80CQkjIG11bF9hZGRfYzIoYVs2XSxiWzRdLGMyLGMzLGMxKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18xLCRhdAotKwkkTVVMVFUJJGFfNSwkYV81CQkjIG11bF9hZGRfYyhhWzVdLGJbNV0sYzIsYzMsYzEpOwotKwkkU0xMCSR0XzIsMQotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkYXQsJGNfMywkdF8yCi0rCSRBRERVCSRjXzEsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkgJE1VTFRVCSRhXzQsJGFfNwkJIyBtdWxfYWRkX2MyKGFbNF0sYls3XSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsMTAqJEJOU1ooJGEwKQotKwotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkY18yLCR0XzIsJHplcm8KLSsJJFNMTAkkdF8yLDEKLSsJJE1VTFRVCSRhXzUsJGFfNgkJIyBtdWxfYWRkX2MyKGFbNV0sYls2XSxjMyxjMSxjMik7Ci0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18zLCR0XzEKLSsJc2x0dQkkYXQsJGNfMywkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwlzbHQJJGF0LCR0XzIsJHplcm8KLSsJJEFERFUJJGNfMiwkYXQKLSsJICRNVUxUVQkkYV83LCRhXzUJCSMgbXVsX2FkZF9jMihhWzddLGJbNV0sYzEsYzIsYzMpOwotKwkkU0xMCSR0XzIsMQotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCSRTVAkkY18zLDExKiRCTlNaKCRhMCkKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwlzbHQJJGNfMywkdF8yLCR6ZXJvCi0rCSRTTEwJJHRfMiwxCi0rCSRNVUxUVQkkYV82LCRhXzYJCSMgbXVsX2FkZF9jKGFbNl0sYls2XSxjMSxjMixjMyk7Ci0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSAkTVVMVFUJJGFfNiwkYV83CQkjIG11bF9hZGRfYzIoYVs2XSxiWzddLGMyLGMzLGMxKTsKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwkkU1QJJGNfMSwxMiokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzEsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkgJE1VTFRVCSRhXzcsJGFfNwkJIyBtdWxfYWRkX2MoYVs3XSxiWzddLGMzLGMxLGMyKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMywkdF8yCi0rCXNsdHUJJGF0LCRjXzMsJHRfMgotKwkkQUREVQkkY18xLCRhdAotKwkkU1QJJGNfMiwxMyokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJJFNUCSRjXzMsMTQqJEJOU1ooJGEwKQotKwkkU1QJJGNfMSwxNSokQk5TWigkYTApCi0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19MCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsMCokU1pSRUcoJHNwKQotKwkkUFRSX0FERCAkc3AsNiokU1pSRUcKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwlub3AKLSsuZW5kCWJuX3Nxcl9jb21iYTgKLSsKLSsuYWxpZ24JNQotKy5nbG9ibAlibl9zcXJfY29tYmE0Ci0rLmVudAlibl9zcXJfY29tYmE0Ci0rYm5fc3FyX2NvbWJhNDoKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkuZnJhbWUJJHNwLDYqJFNaUkVHLCRyYQotKwkubWFzawkweDgwMDBmMDA4LC0kU1pSRUcKLSsJLnNldAlub3Jlb3JkZXIKLSsJJFBUUl9TVUIgJHNwLDYqJFNaUkVHCi0rCSRSRUdfUwkkcmEsNSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQzLDQqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSR0MiwzKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkdDEsMiokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHQwLDEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRncCwwKiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkuc2V0CXJlb3JkZXIKLSsJJExECSRhXzAsMCgkYTEpCi0rCSRMRAkkYV8xLCRCTlNaKCRhMSkKLSsJJE1VTFRVCSRhXzAsJGFfMAkJIyBtdWxfYWRkX2MoYVswXSxiWzBdLGMxLGMyLGMzKTsKLSsJJExECSRhXzIsMiokQk5TWigkYTEpCi0rCSRMRAkkYV8zLDMqJEJOU1ooJGExKQotKwltZmxvCSRjXzEKLSsJbWZoaQkkY18yCi0rCSRTVAkkY18xLDAoJGEwKQotKwotKwkkTVVMVFUJJGFfMCwkYV8xCQkjIG11bF9hZGRfYzIoYVswXSxiWzFdLGMyLGMzLGMxKTsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwlzbHQJJGNfMSwkdF8yLCR6ZXJvCi0rCSRTTEwJJHRfMiwxCi0rCSAkTVVMVFUJJGFfMiwkYV8wCQkjIG11bF9hZGRfYzIoYVsyXSxiWzBdLGMzLGMxLGMyKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzIsJHRfMQotKwlzbHR1CSRhdCwkY18yLCR0XzEKLSsJJEFERFUJJGNfMywkdF8yLCRhdAotKwkkU1QJJGNfMiwkQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzIsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV8xCQkjIG11bF9hZGRfYyhhWzFdLGJbMV0sYzMsYzEsYzIpOwotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18xLCR0XzIKLSsJc2x0dQkkYXQsJGNfMSwkdF8yCi0rCSRBRERVCSRjXzIsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMywkdF8xCi0rCXNsdHUJJGF0LCRjXzMsJHRfMQotKwkgJE1VTFRVCSRhXzAsJGFfMwkJIyBtdWxfYWRkX2MyKGFbMF0sYlszXSxjMSxjMixjMyk7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzEsJHRfMgotKwlzbHR1CSRhdCwkY18xLCR0XzIKLSsJJEFERFUJJGNfMiwkYXQKLSsJJFNUCSRjXzMsMiokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzMsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMSwkYV8yCQkjIG11bF9hZGRfYyhhMlsxXSxiWzJdLGMxLGMyLGMzKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzEsJHRfMQotKwlzbHR1CSRhdCwkY18xLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMiwkdF8yCi0rCXNsdHUJJGF0LCRjXzIsJHRfMgotKwkkQUREVQkkY18zLCRhdAotKwltZmxvCSR0XzEKLSsJbWZoaQkkdF8yCi0rCXNsdAkkYXQsJHRfMiwkemVybwotKwkkQUREVQkkY18zLCRhdAotKwkgJE1VTFRVCSRhXzMsJGFfMQkJIyBtdWxfYWRkX2MyKGFbM10sYlsxXSxjMixjMyxjMSk7Ci0rCSRTTEwJJHRfMiwxCi0rCXNsdAkkYTIsJHRfMSwkemVybwotKwkkQUREVQkkdF8yLCRhMgotKwkkU0xMCSR0XzEsMQotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwlzbHR1CSRhdCwkY18yLCR0XzIKLSsJJEFERFUJJGNfMywkYXQKLSsJJFNUCSRjXzEsMyokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzEsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkkTVVMVFUJJGFfMiwkYV8yCQkjIG11bF9hZGRfYyhhWzJdLGJbMl0sYzIsYzMsYzEpOwotKwlzbHQJJGEyLCR0XzEsJHplcm8KLSsJJEFERFUJJHRfMiwkYTIKLSsJJFNMTAkkdF8xLDEKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkkQUREVQkkdF8yLCRhdAotKwkkQUREVQkkY18zLCR0XzIKLSsJc2x0dQkkYXQsJGNfMywkdF8yCi0rCSRBRERVCSRjXzEsJGF0Ci0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJJEFERFUJJGNfMiwkdF8xCi0rCXNsdHUJJGF0LCRjXzIsJHRfMQotKwkgJE1VTFRVCSRhXzIsJGFfMwkJIyBtdWxfYWRkX2MyKGFbMl0sYlszXSxjMyxjMSxjMik7Ci0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzMsJHRfMgotKwlzbHR1CSRhdCwkY18zLCR0XzIKLSsJJEFERFUJJGNfMSwkYXQKLSsJJFNUCSRjXzIsNCokQk5TWigkYTApCi0rCi0rCW1mbG8JJHRfMQotKwltZmhpCSR0XzIKLSsJc2x0CSRjXzIsJHRfMiwkemVybwotKwkkU0xMCSR0XzIsMQotKwkgJE1VTFRVCSRhXzMsJGFfMwkJIyBtdWxfYWRkX2MoYVszXSxiWzNdLGMxLGMyLGMzKTsKLSsJc2x0CSRhMiwkdF8xLCR6ZXJvCi0rCSRBRERVCSR0XzIsJGEyCi0rCSRTTEwJJHRfMSwxCi0rCSRBRERVCSRjXzMsJHRfMQotKwlzbHR1CSRhdCwkY18zLCR0XzEKLSsJJEFERFUJJHRfMiwkYXQKLSsJJEFERFUJJGNfMSwkdF8yCi0rCXNsdHUJJGF0LCRjXzEsJHRfMgotKwkkQUREVQkkY18yLCRhdAotKwkkU1QJJGNfMyw1KiRCTlNaKCRhMCkKLSsKLSsJbWZsbwkkdF8xCi0rCW1maGkJJHRfMgotKwkkQUREVQkkY18xLCR0XzEKLSsJc2x0dQkkYXQsJGNfMSwkdF8xCi0rCSRBRERVCSR0XzIsJGF0Ci0rCSRBRERVCSRjXzIsJHRfMgotKwkkU1QJJGNfMSw2KiRCTlNaKCRhMCkKLSsJJFNUCSRjXzIsNyokQk5TWigkYTApCi0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsKLSsJJFJFR19MCSR0Myw0KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkdDIsMyokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHQxLDIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSR0MCwxKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkZ3AsMCokU1pSRUcoJHNwKQotKwkkUFRSX0FERCAkc3AsNiokU1pSRUcKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwlub3AKLSsuZW5kCWJuX3Nxcl9jb21iYTQKLStfX18KLStwcmludCAkY29kZTsKLStjbG9zZSBTVERPVVQ7Ci1kaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhMS1taXBzLnBsIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1taXBzLnBsCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uZjFhNzAyZgotLS0tIC9kZXYvbnVsbAotKysrIGIvY3J5cHRvL3NoYS9hc20vc2hhMS1taXBzLnBsCi1AQCAtMCwwICsxLDM1NCBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSsjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKLSsjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCi0rIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rIyBTSEExIGJsb2NrIHByb2NlZHVyZSBmb3IgTUlQUy4KLSsKLSsjIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGlzIDMwJSBvbiB1bmFsaWduZWQgaW5wdXQuIFRoZSAic2VjcmV0IiBpcwotKyMgdG8gZGVwbG95IGx3bC9sd3IgcGFpciB0byBsb2FkIHVuYWxpZ25lZCBpbnB1dC4gT25lIGNvdWxkIGhhdmUKLSsjIHZlY3Rvcml6ZWQgWHVwZGF0ZSBvbiBNSVBTSUlJL0lWLCBidXQgdGhlIGdvYWwgd2FzIHRvIGNvZGUgTUlQUzMyLQotKyMgY29tcGF0aWJsZSBzdWJyb3V0aW5lLiBUaGVyZSBpcyByb29tIGZvciBtaW5vciBvcHRpbWl6YXRpb24gb24KLSsjIGxpdHRsZS1lbmRpYW4gcGxhdGZvcm1zLi4uCi0rCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKyMgVGhlcmUgaXMgYSBudW1iZXIgb2YgTUlQUyBBQkkgaW4gdXNlLCBPMzIgYW5kIE4zMi82NCBhcmUgbW9zdAotKyMgd2lkZWx5IHVzZWQuIFRoZW4gdGhlcmUgaXMgYSBuZXcgY29udGVuZGVyOiBOVUJJLiBJdCBhcHBlYXJzIHRoYXQgaWYKLSsjIG9uZSBwaWNrcyB0aGUgbGF0dGVyLCBpdCdzIHBvc3NpYmxlIHRvIGFycmFuZ2UgY29kZSBpbiBBQkkgbmV1dHJhbAotKyMgbWFubmVyLiBUaGVyZWZvcmUgbGV0J3Mgc3RpY2sgdG8gTlVCSSByZWdpc3RlciBsYXlvdXQ6Ci0rIwotKygkemVybywkYXQsJHQwLCR0MSwkdDIpPW1hcCgiXCQkXyIsKDAuLjIsMjQsMjUpKTsKLSsoJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk9bWFwKCJcJCRfIiwoNC4uMTEpKTsKLSsoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNywkczgsJHM5LCRzMTAsJHMxMSk9bWFwKCJcJCRfIiwoMTIuLjIzKSk7Ci0rKCRncCwkdHAsJHNwLCRmcCwkcmEpPW1hcCgiXCQkXyIsKDMsMjguLjMxKSk7Ci0rIwotKyMgVGhlIHJldHVybiB2YWx1ZSBpcyBwbGFjZWQgaW4gJGEwLiBGb2xsb3dpbmcgY29kaW5nIHJ1bGVzIGZhY2lsaXRhdGUKLSsjIGludGVyb3BlcmFiaWxpdHk6Ci0rIwotKyMgLSBuZXZlciBldmVyIHRvdWNoICR0cCwgInRocmVhZCBwb2ludGVyIiwgZm9ybWVyICRncDsKLSsjIC0gY29weSByZXR1cm4gdmFsdWUgdG8gJHQwLCBmb3JtZXIgJHYwIFtvciB0byAkYTAgaWYgeW91J3JlIGFkYXB0aW5nCi0rIyAgIG9sZCBjb2RlXTsKLSsjIC0gb24gTzMyIHBvcHVsYXRlICRhNC0kYTcgd2l0aCAnbHcgJGFOLDQqTigkc3ApJyBpZiBuZWNlc3Nhcnk7Ci0rIwotKyMgRm9yIHJlZmVyZW5jZSBoZXJlIGlzIHJlZ2lzdGVyIGxheW91dCBmb3IgTjMyLzY0IE1JUFMgQUJJczoKLSsjCi0rIyAoJHplcm8sJGF0LCR2MCwkdjEpPW1hcCgiXCQkXyIsKDAuLjMpKTsKLSsjICgkYTAsJGExLCRhMiwkYTMsJGE0LCRhNSwkYTYsJGE3KT1tYXAoIlwkJF8iLCg0Li4xMSkpOwotKyMgKCR0MCwkdDEsJHQyLCR0MywkdDgsJHQ5KT1tYXAoIlwkJF8iLCgxMi4uMTUsMjQsMjUpKTsKLSsjICgkczAsJHMxLCRzMiwkczMsJHM0LCRzNSwkczYsJHM3KT1tYXAoIlwkJF8iLCgxNi4uMjMpKTsKLSsjICgkZ3AsJHNwLCRmcCwkcmEpPW1hcCgiXCQkXyIsKDI4Li4zMSkpOwotKyMKLSskZmxhdm91ciA9IHNoaWZ0OyAjIHN1cHBvcnRlZCBmbGF2b3VycyBhcmUgbzMyLG4zMiw2NCxudWJpMzIsbnViaTY0Ci0rCi0raWYgKCRmbGF2b3VyID1+IC82NHxuMzIvaSkgewotKwkkUFRSX0FERD0iZGFkZCI7CSMgaW5jaWRlbnRhbGx5IHdvcmtzIGV2ZW4gb24gbjMyCi0rCSRQVFJfU1VCPSJkc3ViIjsJIyBpbmNpZGVudGFsbHkgd29ya3MgZXZlbiBvbiBuMzIKLSsJJFJFR19TPSJzZCI7Ci0rCSRSRUdfTD0ibGQiOwotKwkkUFRSX1NMTD0iZHNsbCI7CSMgaW5jaWRlbnRhbGx5IHdvcmtzIGV2ZW4gb24gbjMyCi0rCSRTWlJFRz04OwotK30gZWxzZSB7Ci0rCSRQVFJfQUREPSJhZGQiOwotKwkkUFRSX1NVQj0ic3ViIjsKLSsJJFJFR19TPSJzdyI7Ci0rCSRSRUdfTD0ibHciOwotKwkkUFRSX1NMTD0ic2xsIjsKLSsJJFNaUkVHPTQ7Ci0rfQotKyMKLSsjIDxhcHByb0BvcGVuc3NsLm9yZz4KLSsjCi0rIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotKwotKyRiaWdfZW5kaWFuPShgZWNobyBNSVBTRUwgfCAkRU5We0NDfSAtRSAtUCAtYD1+L01JUFNFTC8pPzE6MDsKLSsKLStmb3IgKEBBUkdWKSB7CSRvdXRwdXQ9JF8gaWYgKC9eXHdbXHdcLV0qXC5cdyskLyk7ICAgfQotK29wZW4gU1RET1VULCI+JG91dHB1dCI7Ci0rCi0raWYgKCFkZWZpbmVkKCRiaWdfZW5kaWFuKSkKLSsgICAgICAgICAgICB7ICAgJGJpZ19lbmRpYW49KHVucGFjaygnTCcscGFjaygnTicsMSkpPT0xKTsgICB9Ci0rCi0rIyBvZmZzZXRzIG9mIHRoZSBNb3N0IGFuZCBMZWFzdCBTaWduaWZpY2FudCBCeXRlcwotKyRNU0I9JGJpZ19lbmRpYW4/MDozOwotKyRMU0I9MyZ+JE1TQjsKLSsKLStAWD1tYXAoIlwkJF8iLCg4Li4yMykpOwkjIGE0LWE3LHMwLXMxMQotKwotKyRjdHg9JGEwOwotKyRpbnA9JGExOwotKyRudW09JGEyOwotKyRBPSJcJDEiOwotKyRCPSJcJDIiOwotKyRDPSJcJDMiOwotKyREPSJcJDciOwotKyRFPSJcJDI0IjsJQFY9KCRBLCRCLCRDLCRELCRFKTsKLSskdDA9IlwkMjUiOwotKyR0MT0kbnVtOwkjICRudW0gaXMgb2ZmbG9hZGVkIHRvIHN0YWNrCi0rJHQyPSJcJDMwIjsJIyBmcAotKyRLPSJcJDMxIjsJIyByYQotKwotK3N1YiBCT0RZXzAwXzE0IHsKLStteSAoJGksJGEsJGIsJGMsJGQsJGUpPUBfOwotK215ICRqPSRpKzE7Ci0rJGNvZGUuPTw8X19fCWlmICghJGJpZ19lbmRpYW4pOwotKwlzcmwJJHQwLEBYWyRpXSwyNAkjIGJ5dGUgc3dhcCgkaSkKLSsJc3JsCSR0MSxAWFskaV0sOAotKwlhbmRpCSR0MixAWFskaV0sMHhGRjAwCi0rCXNsbAlAWFskaV0sQFhbJGldLDI0Ci0rCWFuZGkJJHQxLDB4RkYwMAotKwlzbGwJJHQyLCR0Miw4Ci0rCW9yCUBYWyRpXSwkdDAKLSsJb3IJJHQxLCR0MgotKwlvcglAWFskaV0sJHQxCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkgbHdsCUBYWyRqXSwkaio0KyRNU0IoJGlucCkKLSsJc2xsCSR0MCwkYSw1CSMgJGkKLSsJYWRkdQkkZSwkSwotKwkgbHdyCUBYWyRqXSwkaio0KyRMU0IoJGlucCkKLSsJc3JsCSR0MSwkYSwyNwotKwlhZGR1CSRlLCR0MAotKwl4b3IJJHQwLCRjLCRkCi0rCWFkZHUJJGUsJHQxCi0rCXNsbAkkdDIsJGIsMzAKLSsJYW5kCSR0MCwkYgotKwlzcmwJJGIsJGIsMgotKwl4b3IJJHQwLCRkCi0rCWFkZHUJJGUsQFhbJGldCi0rCW9yCSRiLCR0MgotKwlhZGR1CSRlLCR0MAotK19fXwotK30KLSsKLStzdWIgQk9EWV8xNV8xOSB7Ci0rbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKLStteSAkaj0kaSsxOwotKwotKyRjb2RlLj08PF9fXwlpZiAoISRiaWdfZW5kaWFuICYmICRpPT0xNSk7Ci0rCXNybAkkdDAsQFhbJGldLDI0CSMgYnl0ZSBzd2FwKCRpKQotKwlzcmwJJHQxLEBYWyRpXSw4Ci0rCWFuZGkJJHQyLEBYWyRpXSwweEZGMDAKLSsJc2xsCUBYWyRpXSxAWFskaV0sMjQKLSsJYW5kaQkkdDEsMHhGRjAwCi0rCXNsbAkkdDIsJHQyLDgKLSsJb3IJQFhbJGldLCR0MAotKwlvcglAWFskaV0sJHQxCi0rCW9yCUBYWyRpXSwkdDIKLStfX18KLSskY29kZS49PDxfX187Ci0rCSB4b3IJQFhbJGolMTZdLEBYWygkaisyKSUxNl0KLSsJc2xsCSR0MCwkYSw1CSMgJGkKLSsJYWRkdQkkZSwkSwotKwlzcmwJJHQxLCRhLDI3Ci0rCWFkZHUJJGUsJHQwCi0rCSB4b3IJQFhbJGolMTZdLEBYWygkais4KSUxNl0KLSsJeG9yCSR0MCwkYywkZAotKwlhZGR1CSRlLCR0MQotKwkgeG9yCUBYWyRqJTE2XSxAWFsoJGorMTMpJTE2XQotKwlzbGwJJHQyLCRiLDMwCi0rCWFuZAkkdDAsJGIKLSsJIHNybAkkdDEsQFhbJGolMTZdLDMxCi0rCSBhZGR1CUBYWyRqJTE2XSxAWFskaiUxNl0KLSsJc3JsCSRiLCRiLDIKLSsJeG9yCSR0MCwkZAotKwkgb3IJQFhbJGolMTZdLCR0MQotKwlhZGR1CSRlLEBYWyRpJTE2XQotKwlvcgkkYiwkdDIKLSsJYWRkdQkkZSwkdDAKLStfX18KLSt9Ci0rCi0rc3ViIEJPRFlfMjBfMzkgewotK215ICgkaSwkYSwkYiwkYywkZCwkZSk9QF87Ci0rbXkgJGo9JGkrMTsKLSskY29kZS49PDxfX18gaWYgKCRpPDc5KTsKLSsJIHhvcglAWFskaiUxNl0sQFhbKCRqKzIpJTE2XQotKwlzbGwJJHQwLCRhLDUJIyAkaQotKwlhZGR1CSRlLCRLCi0rCXNybAkkdDEsJGEsMjcKLSsJYWRkdQkkZSwkdDAKLSsJIHhvcglAWFskaiUxNl0sQFhbKCRqKzgpJTE2XQotKwl4b3IJJHQwLCRjLCRkCi0rCWFkZHUJJGUsJHQxCi0rCSB4b3IJQFhbJGolMTZdLEBYWygkaisxMyklMTZdCi0rCXNsbAkkdDIsJGIsMzAKLSsJeG9yCSR0MCwkYgotKwkgc3JsCSR0MSxAWFskaiUxNl0sMzEKLSsJIGFkZHUJQFhbJGolMTZdLEBYWyRqJTE2XQotKwlzcmwJJGIsJGIsMgotKwlhZGR1CSRlLEBYWyRpJTE2XQotKwkgb3IJQFhbJGolMTZdLCR0MQotKwlvcgkkYiwkdDIKLSsJYWRkdQkkZSwkdDAKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRpPT03OSk7Ci0rCSBsdwlAWFswXSwwKCRjdHgpCi0rCXNsbAkkdDAsJGEsNQkjICRpCi0rCWFkZHUJJGUsJEsKLSsJIGx3CUBYWzFdLDQoJGN0eCkKLSsJc3JsCSR0MSwkYSwyNwotKwlhZGR1CSRlLCR0MAotKwkgbHcJQFhbMl0sOCgkY3R4KQotKwl4b3IJJHQwLCRjLCRkCi0rCWFkZHUJJGUsJHQxCi0rCSBsdwlAWFszXSwxMigkY3R4KQotKwlzbGwJJHQyLCRiLDMwCi0rCXhvcgkkdDAsJGIKLSsJIGx3CUBYWzRdLDE2KCRjdHgpCi0rCXNybAkkYiwkYiwyCi0rCWFkZHUJJGUsQFhbJGklMTZdCi0rCW9yCSRiLCR0MgotKwlhZGR1CSRlLCR0MAotK19fXwotK30KLSsKLStzdWIgQk9EWV80MF81OSB7Ci0rbXkgKCRpLCRhLCRiLCRjLCRkLCRlKT1AXzsKLStteSAkaj0kaSsxOwotKyRjb2RlLj08PF9fXyBpZiAoJGk8NzkpOwotKwkgeG9yCUBYWyRqJTE2XSxAWFsoJGorMiklMTZdCi0rCXNsbAkkdDAsJGEsNQkjICRpCi0rCWFkZHUJJGUsJEsKLSsJc3JsCSR0MSwkYSwyNwotKwlhZGR1CSRlLCR0MAotKwkgeG9yCUBYWyRqJTE2XSxAWFsoJGorOCklMTZdCi0rCWFuZAkkdDAsJGMsJGQKLSsJYWRkdQkkZSwkdDEKLSsJIHhvcglAWFskaiUxNl0sQFhbKCRqKzEzKSUxNl0KLSsJc2xsCSR0MiwkYiwzMAotKwlhZGR1CSRlLCR0MAotKwkgc3JsCSR0MSxAWFskaiUxNl0sMzEKLSsJeG9yCSR0MCwkYywkZAotKwkgYWRkdQlAWFskaiUxNl0sQFhbJGolMTZdCi0rCWFuZAkkdDAsJGIKLSsJc3JsCSRiLCRiLDIKLSsJIG9yCUBYWyRqJTE2XSwkdDEKLSsJYWRkdQkkZSxAWFskaSUxNl0KLSsJb3IJJGIsJHQyCi0rCWFkZHUJJGUsJHQwCi0rX19fCi0rfQotKwotKyRGUkFNRVNJWkU9MTY7CSMgbGFyZ2UgZW5vdWdoIHRvIGFjY29tb2RhdGUgTlVCSSBzYXZlZCByZWdpc3RlcnMKLSskU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gMHhjMGZmZjAwOCA6IDB4YzBmZjAwMDA7Ci0rCi0rJGNvZGU9PDxfX187Ci0rI2lmZGVmIE9QRU5TU0xfRklQU0NBTklTVEVSCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHNzeW1zLmg+Ci0rI2VuZGlmCi0rCi0rLnRleHQKLSsKLSsuc2V0CW5vYXQKLSsuc2V0CW5vcmVvcmRlcgotKy5hbGlnbgk1Ci0rLmdsb2JsCXNoYTFfYmxvY2tfZGF0YV9vcmRlcgotKy5lbnQJc2hhMV9ibG9ja19kYXRhX29yZGVyCi0rc2hhMV9ibG9ja19kYXRhX29yZGVyOgotKwkuZnJhbWUJJHNwLCRGUkFNRVNJWkUqJFNaUkVHLCRyYQotKwkubWFzawkkU0FWRURfUkVHU19NQVNLLC0kU1pSRUcKLSsJLnNldAlub3Jlb3JkZXIKLSsJJFBUUl9TVUIgJHNwLCRGUkFNRVNJWkUqJFNaUkVHCi0rCSRSRUdfUwkkcmEsKCRGUkFNRVNJWkUtMSkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRmcCwoJEZSQU1FU0laRS0yKSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMxMSwoJEZSQU1FU0laRS0zKSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMxMCwoJEZSQU1FU0laRS00KSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM5LCgkRlJBTUVTSVpFLTUpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczgsKCRGUkFNRVNJWkUtNikqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzNywoJEZSQU1FU0laRS03KSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM2LCgkRlJBTUVTSVpFLTgpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczUsKCRGUkFNRVNJWkUtOSkqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzNCwoJEZSQU1FU0laRS0xMCkqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIHByb2xvZ3VlCi0rCSRSRUdfUwkkczMsKCRGUkFNRVNJWkUtMTEpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczIsKCRGUkFNRVNJWkUtMTIpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczEsKCRGUkFNRVNJWkUtMTMpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczAsKCRGUkFNRVNJWkUtMTQpKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkZ3AsKCRGUkFNRVNJWkUtMTUpKiRTWlJFRygkc3ApCi0rX19fCi0rJGNvZGUuPTw8X19fOwotKwkkUFRSX1NMTCAkbnVtLDYKLSsJJFBUUl9BREQgJG51bSwkaW5wCi0rCSRSRUdfUwkkbnVtLDAoJHNwKQotKwlsdwkkQSwwKCRjdHgpCi0rCWx3CSRCLDQoJGN0eCkKLSsJbHcJJEMsOCgkY3R4KQotKwlsdwkkRCwxMigkY3R4KQotKwliCS5Mb29wCi0rCWx3CSRFLDE2KCRjdHgpCi0rLmFsaWduCTQKLSsuTG9vcDoKLSsJLnNldAlyZW9yZGVyCi0rCWx3bAlAWFswXSwkTVNCKCRpbnApCi0rCWx1aQkkSywweDVhODIKLSsJbHdyCUBYWzBdLCRMU0IoJGlucCkKLSsJb3JpCSRLLDB4Nzk5OQkjIEtfMDBfMTkKLStfX18KLStmb3IgKCRpPTA7JGk8MTU7JGkrKykJeyAmQk9EWV8wMF8xNCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KLStmb3IgKDskaTwyMDskaSsrKQl7ICZCT0RZXzE1XzE5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQotKyRjb2RlLj08PF9fXzsKLSsJbHVpCSRLLDB4NmVkOQotKwlvcmkJJEssMHhlYmExCSMgS18yMF8zOQotK19fXwotK2ZvciAoOyRpPDQwOyRpKyspCXsgJkJPRFlfMjBfMzkoJGksQFYpOyB1bnNoaWZ0KEBWLHBvcChAVikpOyB9Ci0rJGNvZGUuPTw8X19fOwotKwlsdWkJJEssMHg4ZjFiCi0rCW9yaQkkSywweGJjZGMJIyBLXzQwXzU5Ci0rX19fCi0rZm9yICg7JGk8NjA7JGkrKykJeyAmQk9EWV80MF81OSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IH0KLSskY29kZS49PDxfX187Ci0rCWx1aQkkSywweGNhNjIKLSsJb3JpCSRLLDB4YzFkNgkjIEtfNjBfNzkKLStfX18KLStmb3IgKDskaTw4MDskaSsrKQl7ICZCT0RZXzIwXzM5KCRpLEBWKTsgdW5zaGlmdChAVixwb3AoQFYpKTsgfQotKyRjb2RlLj08PF9fXzsKLSsJJFBUUl9BREQgJGlucCw2NAotKwkkUkVHX0wJJG51bSwwKCRzcCkKLSsKLSsJYWRkdQkkQSwkWFswXQotKwlhZGR1CSRCLCRYWzFdCi0rCXN3CSRBLDAoJGN0eCkKLSsJYWRkdQkkQywkWFsyXQotKwlhZGR1CSRELCRYWzNdCi0rCXN3CSRCLDQoJGN0eCkKLSsJYWRkdQkkRSwkWFs0XQotKwlzdwkkQyw4KCRjdHgpCi0rCXN3CSRELDEyKCRjdHgpCi0rCXN3CSRFLDE2KCRjdHgpCi0rCS5zZXQJbm9yZW9yZGVyCi0rCWJuZQkkaW5wLCRudW0sLkxvb3AKLSsJbm9wCi0rCi0rCS5zZXQJbm9yZW9yZGVyCi0rCSRSRUdfTAkkcmEsKCRGUkFNRVNJWkUtMSkqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRmcCwoJEZSQU1FU0laRS0yKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxMSwoJEZSQU1FU0laRS0zKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxMCwoJEZSQU1FU0laRS00KSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM5LCgkRlJBTUVTSVpFLTUpKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczgsKCRGUkFNRVNJWkUtNikqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNywoJEZSQU1FU0laRS03KSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHM2LCgkRlJBTUVTSVpFLTgpKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczUsKCRGUkFNRVNJWkUtOSkqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzNCwoJEZSQU1FU0laRS0xMCkqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwotKwkkUkVHX0wJJHMzLCgkRlJBTUVTSVpFLTExKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMyLCgkRlJBTUVTSVpFLTEyKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxLCgkRlJBTUVTSVpFLTEzKSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMwLCgkRlJBTUVTSVpFLTE0KSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGdwLCgkRlJBTUVTSVpFLTE1KSokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJanIJJHJhCi0rCSRQVFJfQUREICRzcCwkRlJBTUVTSVpFKiRTWlJFRwotKy5lbmQJc2hhMV9ibG9ja19kYXRhX29yZGVyCi0rLnJkYXRhCi0rLmFzY2lpegkiU0hBMSBmb3IgTUlQUywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLStfX18KLStwcmludCAkY29kZTsKLStjbG9zZSBTVERPVVQ7Ci1kaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYS9hc20vc2hhNTEyLW1pcHMucGwgYi9jcnlwdG8vc2hhL2FzbS9zaGE1MTItbWlwcy5wbAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLmJhNWIyNTAKLS0tLSAvZGV2L251bGwKLSsrKyBiL2NyeXB0by9zaGEvYXNtL3NoYTUxMi1taXBzLnBsCi1AQCAtMCwwICsxLDQ1NSBAQAotKyMhL3Vzci9iaW4vZW52IHBlcmwKLSsKLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLSsjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKLSsjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCi0rIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KLSsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rCi0rIyBTSEEyIGJsb2NrIHByb2NlZHVyZXMgZm9yIE1JUFMuCi0rCi0rIyBPY3RvYmVyIDIwMTAuCi0rIwotKyMgU0hBMjU2IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIE1JUFMgUjUwMDAgQ1BVIGlzIH4yNyUgb3ZlciBnY2MtCi0rIyBnZW5lcmF0ZWQgY29kZSBpbiBvMzIgYnVpbGQgYW5kIH41NSUgaW4gbjMyLzY0IGJ1aWxkLiBTSEE1MTIgW3doaWNoCi0rIyBmb3Igbm93IGNhbiBvbmx5IGJlIGNvbXBpbGVkIGZvciBNSVBTNjQgSVNBXSBpbXByb3ZlbWVudCBpcyBtb2Rlc3QKLSsjIH4xNyUsIGJ1dCBpdCBjb21lcyBmb3IgZnJlZSwgYmVjYXVzZSBpdCdzIHNhbWUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UuCi0rIyBJbXByb3ZlbWVudCBjb2VmZmljaWVudHMgYXJlIGZvciBhbGlnbmVkIGlucHV0LgotKwotKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSsjIFRoZXJlIGlzIGEgbnVtYmVyIG9mIE1JUFMgQUJJIGluIHVzZSwgTzMyIGFuZCBOMzIvNjQgYXJlIG1vc3QKLSsjIHdpZGVseSB1c2VkLiBUaGVuIHRoZXJlIGlzIGEgbmV3IGNvbnRlbmRlcjogTlVCSS4gSXQgYXBwZWFycyB0aGF0IGlmCi0rIyBvbmUgcGlja3MgdGhlIGxhdHRlciwgaXQncyBwb3NzaWJsZSB0byBhcnJhbmdlIGNvZGUgaW4gQUJJIG5ldXRyYWwKLSsjIG1hbm5lci4gVGhlcmVmb3JlIGxldCdzIHN0aWNrIHRvIE5VQkkgcmVnaXN0ZXIgbGF5b3V0OgotKyMKLSsoJHplcm8sJGF0LCR0MCwkdDEsJHQyKT1tYXAoIlwkJF8iLCgwLi4yLDI0LDI1KSk7Ci0rKCRhMCwkYTEsJGEyLCRhMywkYTQsJGE1LCRhNiwkYTcpPW1hcCgiXCQkXyIsKDQuLjExKSk7Ci0rKCRzMCwkczEsJHMyLCRzMywkczQsJHM1LCRzNiwkczcsJHM4LCRzOSwkczEwLCRzMTEpPW1hcCgiXCQkXyIsKDEyLi4yMykpOwotKygkZ3AsJHRwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgzLDI4Li4zMSkpOwotKyMKLSsjIFRoZSByZXR1cm4gdmFsdWUgaXMgcGxhY2VkIGluICRhMC4gRm9sbG93aW5nIGNvZGluZyBydWxlcyBmYWNpbGl0YXRlCi0rIyBpbnRlcm9wZXJhYmlsaXR5OgotKyMKLSsjIC0gbmV2ZXIgZXZlciB0b3VjaCAkdHAsICJ0aHJlYWQgcG9pbnRlciIsIGZvcm1lciAkZ3AgW28zMiBjYW4gYmUKLSsjICAgZXhjbHVkZWQgZnJvbSB0aGUgcnVsZSwgYmVjYXVzZSBpdCdzIHNwZWNpZmllZCB2b2xhdGlsZV07Ci0rIyAtIGNvcHkgcmV0dXJuIHZhbHVlIHRvICR0MCwgZm9ybWVyICR2MCBbb3IgdG8gJGEwIGlmIHlvdSdyZSBhZGFwdGluZwotKyMgICBvbGQgY29kZV07Ci0rIyAtIG9uIE8zMiBwb3B1bGF0ZSAkYTQtJGE3IHdpdGggJ2x3ICRhTiw0Kk4oJHNwKScgaWYgbmVjZXNzYXJ5OwotKyMKLSsjIEZvciByZWZlcmVuY2UgaGVyZSBpcyByZWdpc3RlciBsYXlvdXQgZm9yIE4zMi82NCBNSVBTIEFCSXM6Ci0rIwotKyMgKCR6ZXJvLCRhdCwkdjAsJHYxKT1tYXAoIlwkJF8iLCgwLi4zKSk7Ci0rIyAoJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk9bWFwKCJcJCRfIiwoNC4uMTEpKTsKLSsjICgkdDAsJHQxLCR0MiwkdDMsJHQ4LCR0OSk9bWFwKCJcJCRfIiwoMTIuLjE1LDI0LDI1KSk7Ci0rIyAoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNyk9bWFwKCJcJCRfIiwoMTYuLjIzKSk7Ci0rIyAoJGdwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgyOC4uMzEpKTsKLSsjCi0rJGZsYXZvdXIgPSBzaGlmdDsgIyBzdXBwb3J0ZWQgZmxhdm91cnMgYXJlIG8zMixuMzIsNjQsbnViaTMyLG51Ymk2NAotKwotK2lmICgkZmxhdm91ciA9fiAvNjR8bjMyL2kpIHsKLSsJJFBUUl9BREQ9ImRhZGQiOwkjIGluY2lkZW50YWxseSB3b3JrcyBldmVuIG9uIG4zMgotKwkkUFRSX1NVQj0iZHN1YiI7CSMgaW5jaWRlbnRhbGx5IHdvcmtzIGV2ZW4gb24gbjMyCi0rCSRSRUdfUz0ic2QiOwotKwkkUkVHX0w9ImxkIjsKLSsJJFBUUl9TTEw9ImRzbGwiOwkjIGluY2lkZW50YWxseSB3b3JrcyBldmVuIG9uIG4zMgotKwkkU1pSRUc9ODsKLSt9IGVsc2UgewotKwkkUFRSX0FERD0iYWRkIjsKLSsJJFBUUl9TVUI9InN1YiI7Ci0rCSRSRUdfUz0ic3ciOwotKwkkUkVHX0w9Imx3IjsKLSsJJFBUUl9TTEw9InNsbCI7Ci0rCSRTWlJFRz00OwotK30KLSskcGYgPSAoJGZsYXZvdXIgPX4gL251YmkvaSkgPyAkdDAgOiAkdDI7Ci0rIwotKyMgPGFwcHJvQG9wZW5zc2wub3JnPgotKyMKLSsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0rCi0rJGJpZ19lbmRpYW49KGBlY2hvIE1JUFNFTCB8ICRFTlZ7Q0N9IC1FIC1QIC1gPX4vTUlQU0VMLyk/MTowOwotKwotK2ZvciAoQEFSR1YpIHsJJG91dHB1dD0kXyBpZiAoL15cd1tcd1wtXSpcLlx3KyQvKTsJfQotK29wZW4gU1RET1VULCI+JG91dHB1dCI7Ci0rCi0raWYgKCFkZWZpbmVkKCRiaWdfZW5kaWFuKSkgeyAkYmlnX2VuZGlhbj0odW5wYWNrKCdMJyxwYWNrKCdOJywxKSk9PTEpOyB9Ci0rCi0raWYgKCRvdXRwdXQgPX4gLzUxMi8pIHsKLSsJJGxhYmVsPSI1MTIiOwotKwkkU1o9ODsKLSsJJExEPSJsZCI7CQkjIGxvYWQgZnJvbSBtZW1vcnkKLSsJJFNUPSJzZCI7CQkjIHN0b3JlIHRvIG1lbW9yeQotKwkkU0xMPSJkc2xsIjsJCSMgc2hpZnQgbGVmdCBsb2dpY2FsCi0rCSRTUkw9ImRzcmwiOwkJIyBzaGlmdCByaWdodCBsb2dpY2FsCi0rCSRBRERVPSJkYWRkdSI7Ci0rCUBTaWdtYTA9KDI4LDM0LDM5KTsKLSsJQFNpZ21hMT0oMTQsMTgsNDEpOwotKwlAc2lnbWEwPSggNywgMSwgOCk7CSMgcmlnaHQgc2hpZnQgZmlyc3QKLSsJQHNpZ21hMT0oIDYsMTksNjEpOwkjIHJpZ2h0IHNoaWZ0IGZpcnN0Ci0rCSRsYXN0Sz0weDgxNzsKLSsJJHJvdW5kcz04MDsKLSt9IGVsc2UgewotKwkkbGFiZWw9IjI1NiI7Ci0rCSRTWj00OwotKwkkTEQ9Imx3IjsJCSMgbG9hZCBmcm9tIG1lbW9yeQotKwkkU1Q9InN3IjsJCSMgc3RvcmUgdG8gbWVtb3J5Ci0rCSRTTEw9InNsbCI7CQkjIHNoaWZ0IGxlZnQgbG9naWNhbAotKwkkU1JMPSJzcmwiOwkJIyBzaGlmdCByaWdodCBsb2dpY2FsCi0rCSRBRERVPSJhZGR1IjsKLSsJQFNpZ21hMD0oIDIsMTMsMjIpOwotKwlAU2lnbWExPSggNiwxMSwyNSk7Ci0rCUBzaWdtYTA9KCAzLCA3LDE4KTsJIyByaWdodCBzaGlmdCBmaXJzdAotKwlAc2lnbWExPSgxMCwxNywxOSk7CSMgcmlnaHQgc2hpZnQgZmlyc3QKLSsJJGxhc3RLPTB4OGYyOwotKwkkcm91bmRzPTY0OwotK30KLSsKLSskTVNCID0gJGJpZ19lbmRpYW4gPyAwIDogKCRTWi0xKTsKLSskTFNCID0gKCRTWi0xKSZ+JE1TQjsKLSsKLStAVj0oJEEsJEIsJEMsJEQsJEUsJEYsJEcsJEgpPW1hcCgiXCQkXyIsKDEsMiwzLDcsMjQsMjUsMzAsMzEpKTsKLStAWD1tYXAoIlwkJF8iLCg4Li4yMykpOwotKwotKyRjdHg9JGEwOwotKyRpbnA9JGExOwotKyRsZW49JGEyOwkkS3RibD0kbGVuOwotKwotK3N1YiBCT0RZXzAwXzE1IHsKLStteSAoJGksJGEsJGIsJGMsJGQsJGUsJGYsJGcsJGgpPUBfOwotK215ICgkVDEsJHRtcDAsJHRtcDEsJHRtcDIpPShAWFs0XSxAWFs1XSxAWFs2XSxAWFs3XSk7Ci0rCi0rJGNvZGUuPTw8X19fIGlmICgkaTwxNSk7Ci0rCSR7TER9bAlAWFsxXSxgKCRpKzEpKiRTWiskTVNCYCgkaW5wKQotKwkke0xEfXIJQFhbMV0sYCgkaSsxKSokU1orJExTQmAoJGlucCkKLStfX18KLSskY29kZS49PDxfX18JaWYgKCEkYmlnX2VuZGlhbiAmJiAkaTwxNiAmJiAkU1o9PTQpOwotKwlzcmwJJHRtcDAsQFhbMF0sMjQJCSMgYnl0ZSBzd2FwKCRpKQotKwlzcmwJJHRtcDEsQFhbMF0sOAotKwlhbmRpCSR0bXAyLEBYWzBdLDB4RkYwMAotKwlzbGwJQFhbMF0sQFhbMF0sMjQKLSsJYW5kaQkkdG1wMSwweEZGMDAKLSsJc2xsCSR0bXAyLCR0bXAyLDgKLSsJb3IJQFhbMF0sJHRtcDAKLSsJb3IJJHRtcDEsJHRtcDIKLSsJb3IJQFhbMF0sJHRtcDEKLStfX18KLSskY29kZS49PDxfX18JaWYgKCEkYmlnX2VuZGlhbiAmJiAkaTwxNiAmJiAkU1o9PTgpOwotKwlvcmkJJHRtcDAsJHplcm8sMHhGRgotKwlkc2xsCSR0bXAyLCR0bXAwLDMyCi0rCW9yCSR0bXAwLCR0bXAyCQkjIDB4MDAwMDAwRkYwMDAwMDBGRgotKwlhbmQJJHRtcDEsQFhbMF0sJHRtcDAJIyBieXRlIHN3YXAoJGkpCi0rCWRzcmwJJHRtcDIsQFhbMF0sMjQKLSsJZHNsbAkkdG1wMSwyNAotKwlhbmQJJHRtcDIsJHRtcDAKLSsJZHNsbAkkdG1wMCw4CQkJIyAweDAwMDBGRjAwMDAwMEZGMDAKLSsJb3IJJHRtcDEsJHRtcDIKLSsJYW5kCSR0bXAyLEBYWzBdLCR0bXAwCi0rCWRzcmwJQFhbMF0sOAotKwlkc2xsCSR0bXAyLDgKLSsJYW5kCUBYWzBdLCR0bXAwCi0rCW9yCSR0bXAxLCR0bXAyCi0rCW9yCUBYWzBdLCR0bXAxCi0rCWRzcmwJJHRtcDEsQFhbMF0sMzIKLSsJZHNsbAlAWFswXSwzMgotKwlvcglAWFswXSwkdG1wMQotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJJEFERFUJJFQxLCRYWzBdLCRoCQkJIyAkaQotKwkkU1JMCSRoLCRlLEBTaWdtYTFbMF0KLSsJeG9yCSR0bXAyLCRmLCRnCi0rCSRTTEwJJHRtcDEsJGUsYCRTWio4LUBTaWdtYTFbMl1gCi0rCWFuZAkkdG1wMiwkZQotKwkkU1JMCSR0bXAwLCRlLEBTaWdtYTFbMV0KLSsJeG9yCSRoLCR0bXAxCi0rCSRTTEwJJHRtcDEsJGUsYCRTWio4LUBTaWdtYTFbMV1gCi0rCXhvcgkkaCwkdG1wMAotKwkkU1JMCSR0bXAwLCRlLEBTaWdtYTFbMl0KLSsJeG9yCSRoLCR0bXAxCi0rCSRTTEwJJHRtcDEsJGUsYCRTWio4LUBTaWdtYTFbMF1gCi0rCXhvcgkkaCwkdG1wMAotKwl4b3IJJHRtcDIsJGcJCQkjIENoKGUsZixnKQotKwl4b3IJJHRtcDAsJHRtcDEsJGgJCQkjIFNpZ21hMShlKQotKwotKwkkU1JMCSRoLCRhLEBTaWdtYTBbMF0KLSsJJEFERFUJJFQxLCR0bXAyCi0rCSRMRAkkdG1wMixgJGkqJFNaYCgkS3RibCkJCSMgS1skaV0KLSsJJFNMTAkkdG1wMSwkYSxgJFNaKjgtQFNpZ21hMFsyXWAKLSsJJEFERFUJJFQxLCR0bXAwCi0rCSRTUkwJJHRtcDAsJGEsQFNpZ21hMFsxXQotKwl4b3IJJGgsJHRtcDEKLSsJJFNMTAkkdG1wMSwkYSxgJFNaKjgtQFNpZ21hMFsxXWAKLSsJeG9yCSRoLCR0bXAwCi0rCSRTUkwJJHRtcDAsJGEsQFNpZ21hMFsyXQotKwl4b3IJJGgsJHRtcDEKLSsJJFNMTAkkdG1wMSwkYSxgJFNaKjgtQFNpZ21hMFswXWAKLSsJeG9yCSRoLCR0bXAwCi0rCSRTVAlAWFswXSxgKCRpJTE2KSokU1pgKCRzcCkJIyBvZmZsb2FkIHRvIHJpbmcgYnVmZmVyCi0rCXhvcgkkaCwkdG1wMQkJCSMgU2lnbWEwKGEpCi0rCi0rCW9yCSR0bXAwLCRhLCRiCi0rCWFuZAkkdG1wMSwkYSwkYgotKwlhbmQJJHRtcDAsJGMKLSsJb3IJJHRtcDEsJHRtcDAJCQkjIE1haihhLGIsYykKLSsJJEFERFUJJFQxLCR0bXAyCQkJIyArPUtbJGldCi0rCSRBRERVCSRoLCR0bXAxCi0rCi0rCSRBRERVCSRkLCRUMQotKwkkQUREVQkkaCwkVDEKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRpPj0xMyk7Ci0rCSRMRAlAWFszXSxgKCgkaSszKSUxNikqJFNaYCgkc3ApCSMgcHJlZmV0Y2ggZnJvbSByaW5nIGJ1ZmZlcgotK19fXwotK30KLSsKLStzdWIgQk9EWV8xNl9YWCB7Ci0rbXkgJGk9QF9bMF07Ci0rbXkgKCR0bXAwLCR0bXAxLCR0bXAyLCR0bXAzKT0oQFhbNF0sQFhbNV0sQFhbNl0sQFhbN10pOwotKwotKyRjb2RlLj08PF9fXzsKLSsJJFNSTAkkdG1wMixAWFsxXSxAc2lnbWEwWzBdCQkjIFh1cGRhdGUoJGkpCi0rCSRBRERVCUBYWzBdLEBYWzldCQkJIyArPVhbaSs5XQotKwkkU0xMCSR0bXAxLEBYWzFdLGAkU1oqOC1Ac2lnbWEwWzJdYAotKwkkU1JMCSR0bXAwLEBYWzFdLEBzaWdtYTBbMV0KLSsJeG9yCSR0bXAyLCR0bXAxCi0rCSRTTEwJJHRtcDEsYEBzaWdtYTBbMl0tQHNpZ21hMFsxXWAKLSsJeG9yCSR0bXAyLCR0bXAwCi0rCSRTUkwJJHRtcDAsQFhbMV0sQHNpZ21hMFsyXQotKwl4b3IJJHRtcDIsJHRtcDEKLSsKLSsJJFNSTAkkdG1wMyxAWFsxNF0sQHNpZ21hMVswXQotKwl4b3IJJHRtcDIsJHRtcDAJCQkjIHNpZ21hMChYW2krMV0pCi0rCSRTTEwJJHRtcDEsQFhbMTRdLGAkU1oqOC1Ac2lnbWExWzJdYAotKwkkQUREVQlAWFswXSwkdG1wMgotKwkkU1JMCSR0bXAwLEBYWzE0XSxAc2lnbWExWzFdCi0rCXhvcgkkdG1wMywkdG1wMQotKwkkU0xMCSR0bXAxLGBAc2lnbWExWzJdLUBzaWdtYTFbMV1gCi0rCXhvcgkkdG1wMywkdG1wMAotKwkkU1JMCSR0bXAwLEBYWzE0XSxAc2lnbWExWzJdCi0rCXhvcgkkdG1wMywkdG1wMQotKwotKwl4b3IJJHRtcDMsJHRtcDAJCQkjIHNpZ21hMShYW2krMTRdKQotKwkkQUREVQlAWFswXSwkdG1wMwotK19fXwotKwkmQk9EWV8wMF8xNShAXyk7Ci0rfQotKwotKyRGUkFNRVNJWkU9MTYqJFNaKzE2KiRTWlJFRzsKLSskU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gMHhjMGZmZjAwOCA6IDB4YzBmZjAwMDA7Ci0rCi0rJGNvZGUuPTw8X19fOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFNDQU5JU1RFUgotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzc3ltcy5oPgotKyNlbmRpZgotKwotKy50ZXh0Ci0rLnNldAlub2F0Ci0rI2lmICFkZWZpbmVkKF9fdnh3b3JrcykgfHwgZGVmaW5lZChfX3BpY19fKQotKy5vcHRpb24JcGljMgotKyNlbmRpZgotKwotKy5hbGlnbgk1Ci0rLmdsb2JsCXNoYSR7bGFiZWx9X2Jsb2NrX2RhdGFfb3JkZXIKLSsuZW50CXNoYSR7bGFiZWx9X2Jsb2NrX2RhdGFfb3JkZXIKLStzaGEke2xhYmVsfV9ibG9ja19kYXRhX29yZGVyOgotKwkuZnJhbWUJJHNwLCRGUkFNRVNJWkUsJHJhCi0rCS5tYXNrCSRTQVZFRF9SRUdTX01BU0ssLSRTWlJFRwotKwkuc2V0CW5vcmVvcmRlcgotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL28zMi9pKTsJIyBvMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2FkCSRwZgotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJJFBUUl9TVUIgJHNwLCRGUkFNRVNJWkUKLSsJJFJFR19TCSRyYSwkRlJBTUVTSVpFLTEqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRmcCwkRlJBTUVTSVpFLTIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMTEsJEZSQU1FU0laRS0zKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczEwLCRGUkFNRVNJWkUtNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM5LCRGUkFNRVNJWkUtNSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM4LCRGUkFNRVNJWkUtNiokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM3LCRGUkFNRVNJWkUtNyokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM2LCRGUkFNRVNJWkUtOCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM1LCRGUkFNRVNJWkUtOSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHM0LCRGUkFNRVNJWkUtMTAqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIHByb2xvZ3VlCi0rCSRSRUdfUwkkczMsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX1MJJHMyLCRGUkFNRVNJWkUtMTIqJFNaUkVHKCRzcCkKLSsJJFJFR19TCSRzMSwkRlJBTUVTSVpFLTEzKiRTWlJFRygkc3ApCi0rCSRSRUdfUwkkczAsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX1MJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCSRQVFJfU0xMIEBYWzE1XSwkbGVuLGBsb2coMTYqJFNaKS9sb2coMilgCi0rX19fCi0rJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciAhfiAvbzMyL2kpOwkjIG5vbi1vMzIgUElDLWlmaWNhdGlvbgotKwkuY3Bsb2NhbAkkS3RibAotKwkuY3BzZXR1cAkkcGYsJHplcm8sc2hhJHtsYWJlbH1fYmxvY2tfZGF0YV9vcmRlcgotK19fXwotKyRjb2RlLj08PF9fXzsKLSsJLnNldAlyZW9yZGVyCi0rCWxhCSRLdGJsLEske2xhYmVsfQkJIyBQSUMtaWZpZWQgJ2xvYWQgYWRkcmVzcycKLSsKLSsJJExECSRBLDAqJFNaKCRjdHgpCQkjIGxvYWQgY29udGV4dAotKwkkTEQJJEIsMSokU1ooJGN0eCkKLSsJJExECSRDLDIqJFNaKCRjdHgpCi0rCSRMRAkkRCwzKiRTWigkY3R4KQotKwkkTEQJJEUsNCokU1ooJGN0eCkKLSsJJExECSRGLDUqJFNaKCRjdHgpCi0rCSRMRAkkRyw2KiRTWigkY3R4KQotKwkkTEQJJEgsNyokU1ooJGN0eCkKLSsKLSsJJFBUUl9BREQgQFhbMTVdLCRpbnAJCSMgcG9pbnRlciB0byB0aGUgZW5kIG9mIGlucHV0Ci0rCSRSRUdfUwlAWFsxNV0sMTYqJFNaKCRzcCkKLSsJYgkuTG9vcAotKwotKy5hbGlnbgk1Ci0rLkxvb3A6Ci0rCSR7TER9bAlAWFswXSwkTVNCKCRpbnApCi0rCSR7TER9cglAWFswXSwkTFNCKCRpbnApCi0rX19fCi0rZm9yICgkaT0wOyRpPDE2OyRpKyspCi0reyAmQk9EWV8wMF8xNSgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHB1c2goQFgsc2hpZnQoQFgpKTsgfQotKyRjb2RlLj08PF9fXzsKLSsJYgkuTDE2X3h4Ci0rLmFsaWduCTQKLSsuTDE2X3h4OgotK19fXwotK2ZvciAoOyRpPDMyOyRpKyspCi0reyAmQk9EWV8xNl9YWCgkaSxAVik7IHVuc2hpZnQoQFYscG9wKEBWKSk7IHB1c2goQFgsc2hpZnQoQFgpKTsgfQotKyRjb2RlLj08PF9fXzsKLSsJYW5kCUBYWzZdLDB4ZmZmCi0rCWxpCUBYWzddLCRsYXN0SwotKwkuc2V0CW5vcmVvcmRlcgotKwlibmUJQFhbNl0sQFhbN10sLkwxNl94eAotKwkkUFRSX0FERCAkS3RibCwxNiokU1oJCSMgS3RibCs9MTYKLSsKLSsJJFJFR19MCUBYWzE1XSwxNiokU1ooJHNwKQkjIHJlc3RvcmUgcG9pbnRlciB0byB0aGUgZW5kIG9mIGlucHV0Ci0rCSRMRAlAWFswXSwwKiRTWigkY3R4KQotKwkkTEQJQFhbMV0sMSokU1ooJGN0eCkKLSsJJExECUBYWzJdLDIqJFNaKCRjdHgpCi0rCSRQVFJfQUREICRpbnAsMTYqJFNaCi0rCSRMRAlAWFszXSwzKiRTWigkY3R4KQotKwkkQUREVQkkQSxAWFswXQotKwkkTEQJQFhbNF0sNCokU1ooJGN0eCkKLSsJJEFERFUJJEIsQFhbMV0KLSsJJExECUBYWzVdLDUqJFNaKCRjdHgpCi0rCSRBRERVCSRDLEBYWzJdCi0rCSRMRAlAWFs2XSw2KiRTWigkY3R4KQotKwkkQUREVQkkRCxAWFszXQotKwkkTEQJQFhbN10sNyokU1ooJGN0eCkKLSsJJEFERFUJJEUsQFhbNF0KLSsJJFNUCSRBLDAqJFNaKCRjdHgpCi0rCSRBRERVCSRGLEBYWzVdCi0rCSRTVAkkQiwxKiRTWigkY3R4KQotKwkkQUREVQkkRyxAWFs2XQotKwkkU1QJJEMsMiokU1ooJGN0eCkKLSsJJEFERFUJJEgsQFhbN10KLSsJJFNUCSRELDMqJFNaKCRjdHgpCi0rCSRTVAkkRSw0KiRTWigkY3R4KQotKwkkU1QJJEYsNSokU1ooJGN0eCkKLSsJJFNUCSRHLDYqJFNaKCRjdHgpCi0rCSRTVAkkSCw3KiRTWigkY3R4KQotKwotKwlibmVsCSRpbnAsQFhbMTVdLC5Mb29wCi0rCSRQVFJfU1VCICRLdGJsLGAoJHJvdW5kcy0xNikqJFNaYAkjIHJld2luZCAkS3RibAotKwotKwkkUkVHX0wJJHJhLCRGUkFNRVNJWkUtMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGZwLCRGUkFNRVNJWkUtMiokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMxMSwkRlJBTUVTSVpFLTMqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMTAsJEZSQU1FU0laRS00KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczksJEZSQU1FU0laRS01KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczgsJEZSQU1FU0laRS02KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczcsJEZSQU1FU0laRS03KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczYsJEZSQU1FU0laRS04KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczUsJEZSQU1FU0laRS05KiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczQsJEZSQU1FU0laRS0xMCokU1pSRUcoJHNwKQotK19fXwotKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7Ci0rCSRSRUdfTAkkczMsJEZSQU1FU0laRS0xMSokU1pSRUcoJHNwKQotKwkkUkVHX0wJJHMyLCRGUkFNRVNJWkUtMTIqJFNaUkVHKCRzcCkKLSsJJFJFR19MCSRzMSwkRlJBTUVTSVpFLTEzKiRTWlJFRygkc3ApCi0rCSRSRUdfTAkkczAsJEZSQU1FU0laRS0xNCokU1pSRUcoJHNwKQotKwkkUkVHX0wJJGdwLCRGUkFNRVNJWkUtMTUqJFNaUkVHKCRzcCkKLStfX18KLSskY29kZS49PDxfX187Ci0rCWpyCSRyYQotKwkkUFRSX0FERCAkc3AsJEZSQU1FU0laRQotKy5lbmQJc2hhJHtsYWJlbH1fYmxvY2tfZGF0YV9vcmRlcgotKwotKy5yZGF0YQotKy5hbGlnbgk1Ci0rSyR7bGFiZWx9OgotK19fXwotK2lmICgkU1o9PTQpIHsKLSskY29kZS49PDxfX187Ci0rCS53b3JkCTB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUKLSsJLndvcmQJMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNQotKwkud29yZAkweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzCi0rCS53b3JkCTB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQKLSsJLndvcmQJMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYwotKwkud29yZAkweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhCi0rCS53b3JkCTB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcKLSsJLndvcmQJMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NwotKwkud29yZAkweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzCi0rCS53b3JkCTB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUKLSsJLndvcmQJMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMwotKwkud29yZAkweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwCi0rCS53b3JkCTB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUKLSsJLndvcmQJMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMwotKwkud29yZAkweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4Ci0rCS53b3JkCTB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjIKLStfX18KLSt9IGVsc2UgewotKyRjb2RlLj08PF9fXzsKLSsJLmR3b3JkCTB4NDI4YTJmOThkNzI4YWUyMiwgMHg3MTM3NDQ5MTIzZWY2NWNkCi0rCS5kd29yZAkweGI1YzBmYmNmZWM0ZDNiMmYsIDB4ZTliNWRiYTU4MTg5ZGJiYwotKwkuZHdvcmQJMHgzOTU2YzI1YmYzNDhiNTM4LCAweDU5ZjExMWYxYjYwNWQwMTkKLSsJLmR3b3JkCTB4OTIzZjgyYTRhZjE5NGY5YiwgMHhhYjFjNWVkNWRhNmQ4MTE4Ci0rCS5kd29yZAkweGQ4MDdhYTk4YTMwMzAyNDIsIDB4MTI4MzViMDE0NTcwNmZiZQotKwkuZHdvcmQJMHgyNDMxODViZTRlZTRiMjhjLCAweDU1MGM3ZGMzZDVmZmI0ZTIKLSsJLmR3b3JkCTB4NzJiZTVkNzRmMjdiODk2ZiwgMHg4MGRlYjFmZTNiMTY5NmIxCi0rCS5kd29yZAkweDliZGMwNmE3MjVjNzEyMzUsIDB4YzE5YmYxNzRjZjY5MjY5NAotKwkuZHdvcmQJMHhlNDliNjljMTllZjE0YWQyLCAweGVmYmU0Nzg2Mzg0ZjI1ZTMKLSsJLmR3b3JkCTB4MGZjMTlkYzY4YjhjZDViNSwgMHgyNDBjYTFjYzc3YWM5YzY1Ci0rCS5kd29yZAkweDJkZTkyYzZmNTkyYjAyNzUsIDB4NGE3NDg0YWE2ZWE2ZTQ4MwotKwkuZHdvcmQJMHg1Y2IwYTlkY2JkNDFmYmQ0LCAweDc2Zjk4OGRhODMxMTUzYjUKLSsJLmR3b3JkCTB4OTgzZTUxNTJlZTY2ZGZhYiwgMHhhODMxYzY2ZDJkYjQzMjEwCi0rCS5kd29yZAkweGIwMDMyN2M4OThmYjIxM2YsIDB4YmY1OTdmYzdiZWVmMGVlNAotKwkuZHdvcmQJMHhjNmUwMGJmMzNkYTg4ZmMyLCAweGQ1YTc5MTQ3OTMwYWE3MjUKLSsJLmR3b3JkCTB4MDZjYTYzNTFlMDAzODI2ZiwgMHgxNDI5Mjk2NzBhMGU2ZTcwCi0rCS5kd29yZAkweDI3YjcwYTg1NDZkMjJmZmMsIDB4MmUxYjIxMzg1YzI2YzkyNgotKwkuZHdvcmQJMHg0ZDJjNmRmYzVhYzQyYWVkLCAweDUzMzgwZDEzOWQ5NWIzZGYKLSsJLmR3b3JkCTB4NjUwYTczNTQ4YmFmNjNkZSwgMHg3NjZhMGFiYjNjNzdiMmE4Ci0rCS5kd29yZAkweDgxYzJjOTJlNDdlZGFlZTYsIDB4OTI3MjJjODUxNDgyMzUzYgotKwkuZHdvcmQJMHhhMmJmZThhMTRjZjEwMzY0LCAweGE4MWE2NjRiYmM0MjMwMDEKLSsJLmR3b3JkCTB4YzI0YjhiNzBkMGY4OTc5MSwgMHhjNzZjNTFhMzA2NTRiZTMwCi0rCS5kd29yZAkweGQxOTJlODE5ZDZlZjUyMTgsIDB4ZDY5OTA2MjQ1NTY1YTkxMAotKwkuZHdvcmQJMHhmNDBlMzU4NTU3NzEyMDJhLCAweDEwNmFhMDcwMzJiYmQxYjgKLSsJLmR3b3JkCTB4MTlhNGMxMTZiOGQyZDBjOCwgMHgxZTM3NmMwODUxNDFhYjUzCi0rCS5kd29yZAkweDI3NDg3NzRjZGY4ZWViOTksIDB4MzRiMGJjYjVlMTliNDhhOAotKwkuZHdvcmQJMHgzOTFjMGNiM2M1Yzk1YTYzLCAweDRlZDhhYTRhZTM0MThhY2IKLSsJLmR3b3JkCTB4NWI5Y2NhNGY3NzYzZTM3MywgMHg2ODJlNmZmM2Q2YjJiOGEzCi0rCS5kd29yZAkweDc0OGY4MmVlNWRlZmIyZmMsIDB4NzhhNTYzNmY0MzE3MmY2MAotKwkuZHdvcmQJMHg4NGM4NzgxNGExZjBhYjcyLCAweDhjYzcwMjA4MWE2NDM5ZWMKLSsJLmR3b3JkCTB4OTBiZWZmZmEyMzYzMWUyOCwgMHhhNDUwNmNlYmRlODJiZGU5Ci0rCS5kd29yZAkweGJlZjlhM2Y3YjJjNjc5MTUsIDB4YzY3MTc4ZjJlMzcyNTMyYgotKwkuZHdvcmQJMHhjYTI3M2VjZWVhMjY2MTljLCAweGQxODZiOGM3MjFjMGMyMDcKLSsJLmR3b3JkCTB4ZWFkYTdkZDZjZGUwZWIxZSwgMHhmNTdkNGY3ZmVlNmVkMTc4Ci0rCS5kd29yZAkweDA2ZjA2N2FhNzIxNzZmYmEsIDB4MGE2MzdkYzVhMmM4OThhNgotKwkuZHdvcmQJMHgxMTNmOTgwNGJlZjkwZGFlLCAweDFiNzEwYjM1MTMxYzQ3MWIKLSsJLmR3b3JkCTB4MjhkYjc3ZjUyMzA0N2Q4NCwgMHgzMmNhYWI3YjQwYzcyNDkzCi0rCS5kd29yZAkweDNjOWViZTBhMTVjOWJlYmMsIDB4NDMxZDY3YzQ5YzEwMGQ0YwotKwkuZHdvcmQJMHg0Y2M1ZDRiZWNiM2U0MmI2LCAweDU5N2YyOTljZmM2NTdlMmEKLSsJLmR3b3JkCTB4NWZjYjZmYWIzYWQ2ZmFlYywgMHg2YzQ0MTk4YzRhNDc1ODE3Ci0rX19fCi0rfQotKyRjb2RlLj08PF9fXzsKLSsuYXNjaWl6CSJTSEEke2xhYmVsfSBmb3IgTUlQUywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLSsuYWxpZ24JNQotKwotK19fXwotKwotKyRjb2RlID1+IHMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VtOwotK3ByaW50ICRjb2RlOwotK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL3BhdGNoZXMvbnBuLnBhdGNoIGIvcGF0Y2hlcy9ucG4ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YjdhN2QuLjAwMDAwMDAKLS0tIGEvcGF0Y2hlcy9ucG4ucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkzICswLDAgQEAKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL2FwcHMvYXBwcy5jCTIwMTAtMTEtMTEgMTQ6NDI6MTkuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvYXBwcy9hcHBzLmMJMjAxMC0xMS0yOSAxOTo1NjowNC45MDI0NjUzNDYgKzAwMDAKLUBAIC0zMDEyLDMgKzMwMTIsNDYgQEAgaW50IHJhd193cml0ZV9zdGRvdXQoY29uc3Qgdm9pZCAqYnVmLGludAotIGludCByYXdfd3JpdGVfc3Rkb3V0KGNvbnN0IHZvaWQgKmJ1ZixpbnQgc2l6KQotIAl7CXJldHVybiB3cml0ZShmaWxlbm8oc3Rkb3V0KSxidWYsc2l6KTsJfQotICNlbmRpZgotKwotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcpCi0rLyogbmV4dF9wcm90b3NfcGFyc2UgcGFyc2VzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyBpbnRvIGEgc3RyaW5nCi0rICogaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZC4KLSsgKiAgIG91dGxlbjogKG91dHB1dCkgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBidWZmZXIgb24gc3VjY2Vzcy4KLSsgKiAgIGluOiBhIE5VTCB0ZXJtaWFudGVkIHN0cmluZyBsaWtlICJhYmMsZGVmLGdoaSIKLSsgKgotKyAqICAgcmV0dXJuczogYSBtYWxsb2NlZCBidWZmZXIgb3IgTlVMTCBvbiBmYWlsdXJlLgotKyAqLwotK3Vuc2lnbmVkIGNoYXIgKm5leHRfcHJvdG9zX3BhcnNlKHVuc2lnbmVkIHNob3J0ICpvdXRsZW4sIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXNpemVfdCBsZW47Ci0rCXVuc2lnbmVkIGNoYXIgKm91dDsKLSsJc2l6ZV90IGksIHN0YXJ0ID0gMDsKLSsKLSsJbGVuID0gc3RybGVuKGluKTsKLSsJaWYgKGxlbiA+PSA2NTUzNSkKLSsJCXJldHVybiBOVUxMOwotKwotKwlvdXQgPSBPUEVOU1NMX21hbGxvYyhzdHJsZW4oaW4pICsgMSk7Ci0rCWlmICghb3V0KQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPD0gbGVuOyArK2kpCi0rCQl7Ci0rCQlpZiAoaSA9PSBsZW4gfHwgaW5baV0gPT0gJywnKQotKwkJCXsKLSsJCQlpZiAoaSAtIHN0YXJ0ID4gMjU1KQotKwkJCQl7Ci0rCQkJCU9QRU5TU0xfZnJlZShvdXQpOwotKwkJCQlyZXR1cm4gTlVMTDsKLSsJCQkJfQotKwkJCW91dFtzdGFydF0gPSBpIC0gc3RhcnQ7Ci0rCQkJc3RhcnQgPSBpICsgMTsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJb3V0W2krMV0gPSBpbltpXTsKLSsJCX0KLSsKLSsJKm91dGxlbiA9IGxlbiArIDE7Ci0rCXJldHVybiBvdXQ7Ci0rCX0KLSsjZW5kaWYgIC8qICFPUEVOU1NMX05PX1RMU0VYVCAmJiAhT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcgKi8KLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL2FwcHMvYXBwcy5oCTIwMDktMTAtMzEgMTM6MzQ6MTkuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvYXBwcy9hcHBzLmgJMjAxMC0xMS0yOSAxOTo1NjowNC45MDI0NjUzNDYgKzAwMDAKLUBAIC0zNTgsMyArMzU4LDcgQEAgaW50IHJhd193cml0ZV9zdGRvdXQoY29uc3Qgdm9pZCAqLGludCk7Ci0gI2RlZmluZSBUTV9TVE9QCQkxCi0gZG91YmxlIGFwcF90bWludGVydmFsIChpbnQgc3RvcCxpbnQgdXNlcnRpbWUpOwotICNlbmRpZgotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSt1bnNpZ25lZCBjaGFyICpuZXh0X3Byb3Rvc19wYXJzZSh1bnNpZ25lZCBzaG9ydCAqb3V0bGVuLCBjb25zdCBjaGFyICppbik7Ci0rI2VuZGlmCi0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9hcHBzL3NfY2xpZW50LmMJMjAxMC0xMS0yOSAxOTo1NjowNC44MzI0NjUzNTEgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9hcHBzL3NfY2xpZW50LmMJMjAxMC0xMS0yOSAxOTo1NjowNC45MDI0NjUzNDYgKzAwMDAKLUBAIC0zNDIsNiArMzQyLDkgQEAgc3RhdGljIHZvaWQgc2NfdXNhZ2Uodm9pZCkKLSAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXRsc2V4dGRlYnVnICAgICAgLSBoZXggZHVtcCBvZiBhbGwgVExTIGV4dGVuc2lvbnMgcmVjZWl2ZWRcbiIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3RhdHVzICAgICAgICAgICAtIHJlcXVlc3QgY2VydGlmaWNhdGUgc3RhdHVzIGZyb20gc2VydmVyXG4iKTsKLSAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5vX3RpY2tldCAgICAgICAgLSBkaXNhYmxlIHVzZSBvZiBSRkM0NTA3YmlzIHNlc3Npb24gdGlja2V0c1xuIik7Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5leHRwcm90b25lZyBhcmcgLSBlbmFibGUgTlBOIGV4dGVuc2lvbiwgY29uc2lkZXJpbmcgbmFtZWQgcHJvdG9jb2xzIHN1cHBvcnRlZCAoY29tbWEtc2VwYXJhdGVkIGxpc3QpXG4iKTsKLSsjIGVuZGlmCi0gCUJJT19wcmludGYoYmlvX2VyciwiIC1jdXR0aHJvdWdoICAgICAgIC0gZW5hYmxlIDEtUlRUIGZ1bGwtaGFuZHNoYWtlIGZvciBzdHJvbmcgY2lwaGVyc1xuIik7Ci0gI2VuZGlmCi0gCUJJT19wcmludGYoYmlvX2VyciwiIC1sZWdhY3lfcmVuZWdvdGlhdGlvbiAtIGVuYWJsZSB1c2Ugb2YgbGVnYWN5IHJlbmVnb3RpYXRpb24gKGRhbmdlcm91cylcbiIpOwotQEAgLTM2Nyw2ICszNzAsNDAgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBzc2xfc2VydmVybmFtZV9jYgotIAkKLSAJcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09LOwotIAl9Ci0rCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsvKiBUaGlzIHRoZSBjb250ZXh0IHRoYXQgd2UgcGFzcyB0byBuZXh0X3Byb3RvX2NiICovCi0rdHlwZWRlZiBzdHJ1Y3QgdGxzZXh0bmV4dHByb3RvY3R4X3N0IHsKLSsJdW5zaWduZWQgY2hhciAqZGF0YTsKLSsJdW5zaWduZWQgc2hvcnQgbGVuOwotKwlpbnQgc3RhdHVzOwotK30gdGxzZXh0bmV4dHByb3RvY3R4OwotKwotK3N0YXRpYyB0bHNleHRuZXh0cHJvdG9jdHggbmV4dF9wcm90bzsKLSsKLStzdGF0aWMgaW50IG5leHRfcHJvdG9fY2IoU1NMICpzLCB1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4sIHZvaWQgKmFyZykKLSsJewotKwl0bHNleHRuZXh0cHJvdG9jdHggKmN0eCA9IGFyZzsKLSsKLSsJaWYgKCFjX3F1aWV0KQotKwkJewotKwkJLyogV2UgY2FuIGFzc3VtZSB0aGF0IHxpbnwgaXMgc3ludGFjdGljYWxseSB2YWxpZC4gKi8KLSsJCXVuc2lnbmVkIGk7Ci0rCQlCSU9fcHJpbnRmKGJpb19jX291dCwgIlByb3RvY29scyBhZHZlcnRpc2VkIGJ5IHNlcnZlcjogIik7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47ICkKLSsJCQl7Ci0rCQkJaWYgKGkpCi0rCQkJCUJJT193cml0ZShiaW9fY19vdXQsICIsICIsIDIpOwotKwkJCUJJT193cml0ZShiaW9fY19vdXQsICZpbltpICsgMV0sIGluW2ldKTsKLSsJCQlpICs9IGluW2ldICsgMTsKLSsJCQl9Ci0rCQlCSU9fd3JpdGUoYmlvX2Nfb3V0LCAiXG4iLCAxKTsKLSsJCX0KLSsKLSsJY3R4LT5zdGF0dXMgPSBTU0xfc2VsZWN0X25leHRfcHJvdG8ob3V0LCBvdXRsZW4sIGluLCBpbmxlbiwgY3R4LT5kYXRhLCBjdHgtPmxlbik7Ci0rCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKLSsJfQotKyMgZW5kaWYgIC8qIG5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcgKi8KLSAjZW5kaWYKLSAKLSBlbnVtCi1AQCAtNDMxLDYgKzQ2OCw5IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJY2hhciAqc2VydmVybmFtZSA9IE5VTEw7IAotICAgICAgICAgdGxzZXh0Y3R4IHRsc2V4dGNicCA9IAotICAgICAgICAge05VTEwsMH07Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJY29uc3QgY2hhciAqbmV4dF9wcm90b19uZWdfaW4gPSBOVUxMOwotKyMgZW5kaWYKLSAjZW5kaWYKLSAJY2hhciAqc2Vzc19pbiA9IE5VTEw7Ci0gCWNoYXIgKnNlc3Nfb3V0ID0gTlVMTDsKLUBAIC02NTgsNiArNjk4LDEzIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1ub190aWNrZXQiKSA9PSAwKQotIAkJCXsgb2ZmfD1TU0xfT1BfTk9fVElDS0VUOyB9Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLW5leHRwcm90b25lZyIpID09IDApCi0rCQkJewotKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKLSsJCQluZXh0X3Byb3RvX25lZ19pbiA9ICooKythcmd2KTsKLSsJCQl9Ci0rIyBlbmRpZgotICNlbmRpZgotIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItY3V0dGhyb3VnaCIpID09IDApCi0gCQkJY3V0dGhyb3VnaD0xOwotQEAgLTc2Niw2ICs4MTMsMjEgQEAgYmFkOgotIAlPcGVuU1NMX2FkZF9zc2xfYWxnb3JpdGhtcygpOwotIAlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7Ci0gCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLSsJbmV4dF9wcm90by5zdGF0dXMgPSAtMTsKLSsJaWYgKG5leHRfcHJvdG9fbmVnX2luKQotKwkJewotKwkJbmV4dF9wcm90by5kYXRhID0gbmV4dF9wcm90b3NfcGFyc2UoJm5leHRfcHJvdG8ubGVuLCBuZXh0X3Byb3RvX25lZ19pbik7Ci0rCQlpZiAobmV4dF9wcm90by5kYXRhID09IE5VTEwpCi0rCQkJewotKwkJCUJJT19wcmludGYoYmlvX2VyciwgIkVycm9yIHBhcnNpbmcgLW5leHRwcm90b25lZyBhcmd1bWVudFxuIik7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJfQotKwllbHNlCi0rCQluZXh0X3Byb3RvLmRhdGEgPSBOVUxMOwotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAgICAgICAgIGUgPSBzZXR1cF9lbmdpbmUoYmlvX2VyciwgZW5naW5lX2lkLCAxKTsKLSAJaWYgKHNzbF9jbGllbnRfZW5naW5lX2lkKQotQEAgLTg5Niw2ICs5NTgsMTEgQEAgYmFkOgotIAkJU1NMX0NUWF9zZXRfbW9kZShjdHgsIHNzbF9tb2RlKTsKLSAJCX0KLSAKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotKwlpZiAobmV4dF9wcm90by5kYXRhKQotKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxlY3RfY2IoY3R4LCBuZXh0X3Byb3RvX2NiLCAmbmV4dF9wcm90byk7Ci0rI2VuZGlmCi0rCi0gCWlmIChzdGF0ZSkgU1NMX0NUWF9zZXRfaW5mb19jYWxsYmFjayhjdHgsYXBwc19zc2xfaW5mb19jYWxsYmFjayk7Ci0gCWlmIChjaXBoZXIgIT0gTlVMTCkKLSAJCWlmKCFTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChjdHgsY2lwaGVyKSkgewotQEAgLTE3NTUsNiArMTgyMiwxOCBAQCBzdGF0aWMgdm9pZCBwcmludF9zdHVmZihCSU8gKmJpbywgU1NMICpzCi0gCUJJT19wcmludGYoYmlvLCJFeHBhbnNpb246ICVzXG4iLAotIAkJZXhwYW5zaW9uID8gU1NMX0NPTVBfZ2V0X25hbWUoZXhwYW5zaW9uKSA6ICJOT05FIik7Ci0gI2VuZGlmCi0rCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLSsJaWYgKG5leHRfcHJvdG8uc3RhdHVzICE9IC0xKSB7Ci0rCQljb25zdCB1bnNpZ25lZCBjaGFyICpwcm90bzsKLSsJCXVuc2lnbmVkIGludCBwcm90b19sZW47Ci0rCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQocywgJnByb3RvLCAmcHJvdG9fbGVuKTsKLSsJCUJJT19wcmludGYoYmlvLCAiTmV4dCBwcm90b2NvbDogKCVkKSAiLCBuZXh0X3Byb3RvLnN0YXR1cyk7Ci0rCQlCSU9fd3JpdGUoYmlvLCBwcm90bywgcHJvdG9fbGVuKTsKLSsJCUJJT193cml0ZShiaW8sICJcbiIsIDEpOwotKwl9Ci0rI2VuZGlmCi0rCi0gCVNTTF9TRVNTSU9OX3ByaW50KGJpbyxTU0xfZ2V0X3Nlc3Npb24ocykpOwotIAlCSU9fcHJpbnRmKGJpbywiLS0tXG4iKTsKLSAJaWYgKHBlZXIgIT0gTlVMTCkKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL2FwcHMvc19zZXJ2ZXIuYwkyMDEwLTA2LTE1IDE3OjI1OjAyLjAwMDAwMDAwMCArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL2FwcHMvc19zZXJ2ZXIuYwkyMDEwLTExLTI5IDE5OjU2OjA0LjkwMjQ2NTM0NiArMDAwMAotQEAgLTQ5Miw2ICs0OTIsOSBAQCBzdGF0aWMgdm9pZCBzdl91c2FnZSh2b2lkKQotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzZXh0ZGVidWcgIC0gaGV4IGR1bXAgb2YgYWxsIFRMUyBleHRlbnNpb25zIHJlY2VpdmVkXG4iKTsKLSAJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5vX3RpY2tldCAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNrZXRzXG4iKTsKLSAJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0aW9uIC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7Ci0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLW5leHRwcm90b25lZyBhcmcgLSBzZXQgdGhlIGFkdmVydGlzZWQgcHJvdG9jb2xzIGZvciB0aGUgTlBOIGV4dGVuc2lvbiAoY29tbWEtc2VwYXJhdGVkIGxpc3QpXG4iKTsKLSsjIGVuZGlmCi0gI2VuZGlmCi0gCX0KLSAKLUBAIC04MjYsNiArODI5LDI0IEBAIEJJT19wcmludGYoZXJyLCAiY2VydF9zdGF0dXM6IHJlY2VpdmVkICUKLSAJcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7Ci0gCWdvdG8gZG9uZTsKLSAJfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rLyogVGhpcyBpcyB0aGUgY29udGV4dCB0aGF0IHdlIHBhc3MgdG8gbmV4dF9wcm90b19jYiAqLwotK3R5cGVkZWYgc3RydWN0IHRsc2V4dG5leHRwcm90b2N0eF9zdCB7Ci0rCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0rCXVuc2lnbmVkIGludCBsZW47Ci0rfSB0bHNleHRuZXh0cHJvdG9jdHg7Ci0rCi0rc3RhdGljIGludCBuZXh0X3Byb3RvX2NiKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqKmRhdGEsIHVuc2lnbmVkIGludCAqbGVuLCB2b2lkICphcmcpCi0rCXsKLSsJdGxzZXh0bmV4dHByb3RvY3R4ICpuZXh0X3Byb3RvID0gYXJnOwotKwotKwkqZGF0YSA9IG5leHRfcHJvdG8tPmRhdGE7Ci0rCSpsZW4gPSBuZXh0X3Byb3RvLT5sZW47Ci0rCi0rCXJldHVybiBTU0xfVExTRVhUX0VSUl9PSzsKLSsJfQotKyMgZW5kaWYgIC8qIG5kZWYgT1BFTlNTTF9OT19OUE4gKi8KLSAjZW5kaWYKLSAKLSBpbnQgTUFJTihpbnQsIGNoYXIgKiopOwotQEAgLTg2Nyw2ICs4ODgsMTAgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gICAgICAgICB0bHNleHRjdHggdGxzZXh0Y2JwID0ge05VTEwsIE5VTEwsIFNTTF9UTFNFWFRfRVJSX0FMRVJUX1dBUk5JTkd9OwotKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rCWNvbnN0IGNoYXIgKm5leHRfcHJvdG9fbmVnX2luID0gTlVMTDsKLSsJdGxzZXh0bmV4dHByb3RvY3R4IG5leHRfcHJvdG87Ci0rIyBlbmRpZgotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKLSAJLyogYnkgZGVmYXVsdCBkbyBub3Qgc2VuZCBhIFBTSyBpZGVudGl0eSBoaW50ICovCi1AQCAtMTE5MSw3ICsxMjE2LDEzIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOwotIAkJCXNfa2V5X2ZpbGUyPSAqKCsrYXJndik7Ci0gCQkJfQotLQkJCQotKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1uZXh0cHJvdG9uZWciKSA9PSAwKQotKwkJCXsKLSsJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci0rCQkJbmV4dF9wcm90b19uZWdfaW4gPSAqKCsrYXJndik7Ci0rCQkJfQotKyMgZW5kaWYKLSAjZW5kaWYKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19KUEFLRSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19QU0spCi0gCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1qcGFrZSIpID09IDApCi1AQCAtMTQ3Niw2ICsxNTA3LDExIEBAIGJhZDoKLSAJCWlmICh2cG0pCi0gCQkJU1NMX0NUWF9zZXQxX3BhcmFtKGN0eDIsIHZwbSk7Ci0gCQl9Ci0rCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJaWYgKG5leHRfcHJvdG8uZGF0YSkKLSsJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IoY3R4LCBuZXh0X3Byb3RvX2NiLCAmbmV4dF9wcm90byk7Ci0rIyBlbmRpZgotICNlbmRpZiAKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREgKLUBAIC0xNjE3LDYgKzE2NTMsMjEgQEAgYmFkOgotIAkJCQkJZ290byBlbmQ7Ci0gCQkJCQl9Ci0gCQkJCX0KLSsjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKwkJaWYgKG5leHRfcHJvdG9fbmVnX2luKQotKwkJCXsKLSsJCQl1bnNpZ25lZCBzaG9ydCBsZW47Ci0rCQkJbmV4dF9wcm90by5kYXRhID0gbmV4dF9wcm90b3NfcGFyc2UoJmxlbiwKLSsJCQkJbmV4dF9wcm90b19uZWdfaW4pOwotKwkJCWlmIChuZXh0X3Byb3RvLmRhdGEgPT0gTlVMTCkKLSsJCQkJZ290byBlbmQ7Ci0rCQkJbmV4dF9wcm90by5sZW4gPSBsZW47Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQluZXh0X3Byb3RvLmRhdGEgPSBOVUxMOwotKwkJCX0KLSsjIGVuZGlmCi0gI2VuZGlmCi0gCQlSU0FfZnJlZShyc2EpOwotIAkJQklPX3ByaW50ZihiaW9fc19vdXQsIlxuIik7Ci1AQCAtMjE1OSw2ICsyMjEwLDEwIEBAIHN0YXRpYyBpbnQgaW5pdF9zc2xfY29ubmVjdGlvbihTU0wgKmNvbikKLSAJWDUwOSAqcGVlcjsKLSAJbG9uZyB2ZXJpZnlfZXJyb3I7Ci0gCU1TX1NUQVRJQyBjaGFyIGJ1ZltCVUZTSVpdOwotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcpCi0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHRfcHJvdG9fbmVnOwotKwl1bnNpZ25lZCBuZXh0X3Byb3RvX25lZ19sZW47Ci0rI2VuZGlmCi0gCi0gCWlmICgoaT1TU0xfYWNjZXB0KGNvbikpIDw9IDApCi0gCQl7Ci1AQCAtMjE5OCw2ICsyMjUzLDE1IEBAIHN0YXRpYyBpbnQgaW5pdF9zc2xfY29ubmVjdGlvbihTU0wgKmNvbikKLSAJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJTaGFyZWQgY2lwaGVyczolc1xuIixidWYpOwotIAlzdHI9U1NMX0NJUEhFUl9nZXRfbmFtZShTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKGNvbikpOwotIAlCSU9fcHJpbnRmKGJpb19zX291dCwiQ0lQSEVSIGlzICVzXG4iLChzdHIgIT0gTlVMTCk/c3RyOiIoTk9ORSkiKTsKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotKwlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQoY29uLCAmbmV4dF9wcm90b19uZWcsICZuZXh0X3Byb3RvX25lZ19sZW4pOwotKwlpZiAobmV4dF9wcm90b19uZWcpCi0rCQl7Ci0rCQlCSU9fcHJpbnRmKGJpb19zX291dCwiTkVYVFBST1RPIGlzICIpOwotKwkJQklPX3dyaXRlKGJpb19zX291dCwgbmV4dF9wcm90b19uZWcsIG5leHRfcHJvdG9fbmVnX2xlbik7Ci0rCQlCSU9fcHJpbnRmKGJpb19zX291dCwgIlxuIik7Ci0rCQl9Ci0rI2VuZGlmCi0gCWlmIChjb24tPmhpdCkgQklPX3ByaW50ZihiaW9fc19vdXQsIlJldXNlZCBzZXNzaW9uLWlkXG4iKTsKLSAJaWYgKFNTTF9jdHJsKGNvbixTU0xfQ1RSTF9HRVRfRkxBR1MsMCxOVUxMKSAmCi0gCQlUTFMxX0ZMQUdTX1RMU19QQURESU5HX0JVRykKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljg0NjUxNzA0NSArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTg1Nyw2ICs4NTcsMjUgQEAgc3RydWN0IHNzbF9jdHhfc3QKLSAJLyogZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0IGluZm9ybWF0aW9uICovCi0gCWludCAoKnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrKShTU0wgKiwgdm9pZCAqcGVlcmlucHV0LCBzaXplX3QgbGVuLCB2b2lkICphcmcpOwotIAl2b2lkICp0bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmc7Ci0rCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogTmV4dCBwcm90b2NvbCBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbiAqLwotKwkvKiAoZm9yIGV4cGVyaW1lbnRhbCBOUE4gZXh0ZW5zaW9uKS4gKi8KLSsKLSsJLyogRm9yIGEgc2VydmVyLCB0aGlzIGNvbnRhaW5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gYnkgd2hpY2ggdGhlIHNldCBvZgotKwkgKiBhZHZlcnRpc2VkIHByb3RvY29scyBjYW4gYmUgcHJvdmlkZWQuICovCi0rCWludCAoKm5leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IpKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZiwKLSsJCQkgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVuLCB2b2lkICphcmcpOwotKwl2b2lkICpuZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiX2FyZzsKLSsJLyogRm9yIGEgY2xpZW50LCB0aGlzIGNvbnRhaW5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBzZWxlY3RzIHRoZQotKwkgKiBuZXh0IHByb3RvY29sIGZyb20gdGhlIGxpc3QgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci4gKi8KLSsJaW50ICgqbmV4dF9wcm90b19zZWxlY3RfY2IpKFNTTCAqcywgdW5zaWduZWQgY2hhciAqKm91dCwKLSsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKLSsJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKwkJCQkgICAgdW5zaWduZWQgaW50IGlubGVuLAotKwkJCQkgICAgdm9pZCAqYXJnKTsKLSsJdm9pZCAqbmV4dF9wcm90b19zZWxlY3RfY2JfYXJnOwotKyMgZW5kaWYKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCi1AQCAtOTI4LDYgKzk0NywzMCBAQCBpbnQgU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lKFNTTF9DCi0gI2VuZGlmCi0gdm9pZCBTU0xfQ1RYX3NldF9jb29raWVfZ2VuZXJhdGVfY2IoU1NMX0NUWCAqY3R4LCBpbnQgKCphcHBfZ2VuX2Nvb2tpZV9jYikoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwgdW5zaWduZWQgaW50ICpjb29raWVfbGVuKSk7Ci0gdm9pZCBTU0xfQ1RYX3NldF9jb29raWVfdmVyaWZ5X2NiKFNTTF9DVFggKmN0eCwgaW50ICgqYXBwX3ZlcmlmeV9jb29raWVfY2IpKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsIHVuc2lnbmVkIGludCBjb29raWVfbGVuKSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotK3ZvaWQgU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYihTU0xfQ1RYICpzLAotKwkJCQkJICAgaW50ICgqY2IpIChTU0wgKnNzbCwKLSsJCQkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqb3V0LAotKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqb3V0bGVuLAotKwkJCQkJCSAgICAgIHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7Ci0rdm9pZCBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihTU0xfQ1RYICpzLAotKwkJCQkgICAgICBpbnQgKCpjYikgKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICoqb3V0LAotKwkJCQkJCSB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCi0rCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKwkJCQkJCSB1bnNpZ25lZCBpbnQgaW5sZW4sIHZvaWQgKmFyZyksCi0rCQkJCSAgICAgIHZvaWQgKmFyZyk7Ci0rCi0raW50IFNTTF9zZWxlY3RfbmV4dF9wcm90byh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCi0rCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubGVuLAotKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY2xpZW50X2xlbik7Ci0rdm9pZCBTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQoY29uc3QgU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YSwKLSsJCQkJICAgIHVuc2lnbmVkICpsZW4pOwotKwotKyNkZWZpbmUgT1BFTlNTTF9OUE5fVU5TVVBQT1JURUQJMAotKyNkZWZpbmUgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAkxCi0rI2RlZmluZSBPUEVOU1NMX05QTl9OT19PVkVSTEFQCTIKLSsKLSsjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCi0gLyogdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgZ2l2ZW4gdG8gY2FsbGJhY2tzIGNvbnRhaW5pbmcgdGhlCi1AQCAtMTE4Nyw2ICsxMjMwLDE5IEBAIHN0cnVjdCBzc2xfc3QKLSAJdm9pZCAqdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2FyZzsKLSAKLSAJU1NMX0NUWCAqIGluaXRpYWxfY3R4OyAvKiBpbml0aWFsIGN0eCwgdXNlZCB0byBzdG9yZSBzZXNzaW9ucyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogTmV4dCBwcm90b2NvbCBuZWdvdGlhdGlvbi4gRm9yIHRoZSBjbGllbnQsIHRoaXMgaXMgdGhlIHByb3RvY29sIHRoYXQKLSsJICogd2Ugc2VudCBpbiBOZXh0UHJvdG9jb2wgYW5kIGlzIHNldCB3aGVuIGhhbmRsaW5nIFNlcnZlckhlbGxvCi0rCSAqIGV4dGVuc2lvbnMuCi0rCSAqCi0rCSAqIEZvciBhIHNlcnZlciwgdGhpcyBpcyB0aGUgY2xpZW50J3Mgc2VsZWN0ZWRfcHJvdG9jb2wgZnJvbQotKwkgKiBOZXh0UHJvdG9jb2wgYW5kIGlzIHNldCB3aGVuIGhhbmRsaW5nIHRoZSBOZXh0UHJvdG9jb2wgbWVzc2FnZSwKLSsJICogYmVmb3JlIHRoZSBGaW5pc2hlZCBtZXNzYWdlLiAqLwotKwl1bnNpZ25lZCBjaGFyICpuZXh0X3Byb3RvX25lZ290aWF0ZWQ7Ci0rCXVuc2lnbmVkIGNoYXIgbmV4dF9wcm90b19uZWdvdGlhdGVkX2xlbjsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIHNlc3Npb25fY3R4IGluaXRpYWxfY3R4Ci0gI2Vsc2UKLSAjZGVmaW5lIHNlc3Npb25fY3R4IGN0eAotQEAgLTE5MTksNiArMTk3NSw3IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UJCQkgMTQxCi0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9NRVNTQUdFCQkJCSAxNDIKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX05FV19TRVNTSU9OX1RJQ0tFVAkJIDI4MwotKyNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfTkVYVF9QUk9UTwkJCSAzMDQKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1JFQ09SRAkJCQkgMTQzCi0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9TRVJWRVJfQ0VSVElGSUNBVEUJCSAxNDQKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9ET05FCQkJIDE0NQotQEAgLTIxMTcsNiArMjE3NCw4IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfUl9FWENFU1NJVkVfTUVTU0FHRV9TSVpFCQkJIDE1MgotICNkZWZpbmUgU1NMX1JfRVhUUkFfREFUQV9JTl9NRVNTQUdFCQkJIDE1MwotICNkZWZpbmUgU1NMX1JfR09UX0FfRklOX0JFRk9SRV9BX0NDUwkJCSAxNTQKLSsjZGVmaW5lIFNTTF9SX0dPVF9ORVhUX1BST1RPX0JFRk9SRV9BX0NDUwkJIDM0NgotKyNkZWZpbmUgU1NMX1JfR09UX05FWFRfUFJPVE9fV0lUSE9VVF9FWFRFTlNJT04JCSAzNDcKLSAjZGVmaW5lIFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QJCQkgMTU1Ci0gI2RlZmluZSBTU0xfUl9IVFRQX1JFUVVFU1QJCQkJIDE1NgotICNkZWZpbmUgU1NMX1JfSUxMRUdBTF9QQURESU5HCQkJCSAyODMKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgJMjAxMC0xMS0yOSAxOTo1NjowNC44MzI0NjUzNTEgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCTIwMTAtMTEtMjkgMTk6NTY6MDQuOTY1OTI4ODU1ICswMDAwCi1AQCAtNDY1LDYgKzQ2NSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBzc2wzX3N0YXRlX3N0Ci0gCXZvaWQgKnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0OwotIAlzaXplX3Qgc2VydmVyX29wYXF1ZV9wcmZfaW5wdXRfbGVuOwotIAotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogU2V0IGlmIHdlIHNhdyB0aGUgTmV4dCBQcm90b2NvbCBOZWdvdGlhdGlvbiBleHRlbnNpb24gZnJvbQotKwkgICBvdXIgcGVlci4gKi8KLSsJaW50IG5leHRfcHJvdG9fbmVnX3NlZW47Ci0rI2VuZGlmCi0rCi0gCXN0cnVjdAl7Ci0gCQkvKiBhY3R1YWxseSBvbmx5IG5lZWRzIHRvIGJlIDE2KzIwICovCi0gCQl1bnNpZ25lZCBjaGFyIGNlcnRfdmVyaWZ5X21kW0VWUF9NQVhfTURfU0laRSoyXTsKLUBAIC01NTcsNiArNTYzLDEwIEBAIHR5cGVkZWYgc3RydWN0IHNzbDNfc3RhdGVfc3QKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0VSVF9WUkZZX0IJCSgweDE5MXxTU0xfU1RfQ09OTkVDVCkKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0hBTkdFX0EJCSgweDFBMHxTU0xfU1RfQ09OTkVDVCkKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0hBTkdFX0IJCSgweDFBMXxTU0xfU1RfQ09OTkVDVCkKLSsjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rI2RlZmluZSBTU0wzX1NUX0NXX05FWFRfUFJPVE9fQQkJKDB4MjAwfFNTTF9TVF9DT05ORUNUKQotKyNkZWZpbmUgU1NMM19TVF9DV19ORVhUX1BST1RPX0IJCSgweDIwMXxTU0xfU1RfQ09OTkVDVCkKLSsjZW5kaWYKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfRklOSVNIRURfQQkJKDB4MUIwfFNTTF9TVF9DT05ORUNUKQotICNkZWZpbmUgU1NMM19TVF9DV19GSU5JU0hFRF9CCQkoMHgxQjF8U1NMX1NUX0NPTk5FQ1QpCi0gLyogcmVhZCBmcm9tIHNlcnZlciAqLwotQEAgLTYwMiw2ICs2MTIsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsM19zdGF0ZV9zdAotICNkZWZpbmUgU1NMM19TVF9TUl9DRVJUX1ZSRllfQgkJKDB4MUExfFNTTF9TVF9BQ0NFUFQpCi0gI2RlZmluZSBTU0wzX1NUX1NSX0NIQU5HRV9BCQkoMHgxQjB8U1NMX1NUX0FDQ0VQVCkKLSAjZGVmaW5lIFNTTDNfU1RfU1JfQ0hBTkdFX0IJCSgweDFCMXxTU0xfU1RfQUNDRVBUKQotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19BCQkoMHgyMTB8U1NMX1NUX0FDQ0VQVCkKLSsjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19CCQkoMHgyMTF8U1NMX1NUX0FDQ0VQVCkKLSsjZW5kaWYKLSAjZGVmaW5lIFNTTDNfU1RfU1JfRklOSVNIRURfQQkJKDB4MUMwfFNTTF9TVF9BQ0NFUFQpCi0gI2RlZmluZSBTU0wzX1NUX1NSX0ZJTklTSEVEX0IJCSgweDFDMXxTU0xfU1RfQUNDRVBUKQotIC8qIHdyaXRlIHRvIGNsaWVudCAqLwotQEAgLTYyNiw2ICs2NDAsOSBAQCB0eXBlZGVmIHN0cnVjdCBzc2wzX3N0YXRlX3N0Ci0gI2RlZmluZSBTU0wzX01UX0NMSUVOVF9LRVlfRVhDSEFOR0UJCTE2Ci0gI2RlZmluZSBTU0wzX01UX0ZJTklTSEVECQkJMjAKLSAjZGVmaW5lIFNTTDNfTVRfQ0VSVElGSUNBVEVfU1RBVFVTCQkyMgotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsjZGVmaW5lIFNTTDNfTVRfTkVYVF9QUk9UTwkJCTY3Ci0rI2VuZGlmCi0gI2RlZmluZSBEVExTMV9NVF9IRUxMT19WRVJJRllfUkVRVUVTVCAgICAzCi0gCi0gCi0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCTIwMDktMTEtMTEgMTQ6NTE6MjkuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvaW5jbHVkZS9vcGVuc3NsL3RsczEuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTIwNCw2ICsyMDQsMTEgQEAgZXh0ZXJuICJDIiB7Ci0gLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICovCi0gI2RlZmluZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAgICAgMHhmZjAxCi0gCi0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKy8qIFRoaXMgaXMgbm90IGFuIElBTkEgZGVmaW5lZCBleHRlbnNpb24gbnVtYmVyICovCi0rI2RlZmluZSBUTFNFWFRfVFlQRV9uZXh0X3Byb3RvX25lZwkJMTMxNzIKLSsjZW5kaWYKLSsKLSAvKiBOYW1lVHlwZSB2YWx1ZSBmcm9tIFJGQyAzNTQ2ICovCi0gI2RlZmluZSBUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lIDAKLSAvKiBzdGF0dXMgcmVxdWVzdCB2YWx1ZSBmcm9tIFJGQyAzNTQ2ICovCi0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvczNfYm90aC5jCTIwMTAtMTEtMjkgMTk6NTY6MDQuODQ2NTE3MDQ1ICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvc3NsL3MzX2JvdGguYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTIwMiwxNSArMjAyLDQwIEBAIGludCBzc2wzX3NlbmRfZmluaXNoZWQoU1NMICpzLCBpbnQgYSwgaW4KLSAJcmV0dXJuKHNzbDNfZG9fd3JpdGUocyxTU0wzX1JUX0hBTkRTSEFLRSkpOwotIAl9Ci0gCi0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKy8qIHNzbDNfdGFrZV9tYWMgY2FsY3VsYXRlcyB0aGUgRmluaXNoZWQgTUFDIGZvciB0aGUgaGFuZHNoYWtlcyBtZXNzYWdlcyBzZWVuIHRvIGZhci4gKi8KLStzdGF0aWMgdm9pZCBzc2wzX3Rha2VfbWFjKFNTTCAqcykKLSsJewotKwljb25zdCBjaGFyICpzZW5kZXI7Ci0rCWludCBzbGVuOwotKwotKwlpZiAocy0+c3RhdGUgJiBTU0xfU1RfQ09OTkVDVCkKLSsJCXsKLSsJCXNlbmRlcj1zLT5tZXRob2QtPnNzbDNfZW5jLT5zZXJ2ZXJfZmluaXNoZWRfbGFiZWw7Ci0rCQlzbGVuPXMtPm1ldGhvZC0+c3NsM19lbmMtPnNlcnZlcl9maW5pc2hlZF9sYWJlbF9sZW47Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCXNlbmRlcj1zLT5tZXRob2QtPnNzbDNfZW5jLT5jbGllbnRfZmluaXNoZWRfbGFiZWw7Ci0rCQlzbGVuPXMtPm1ldGhvZC0+c3NsM19lbmMtPmNsaWVudF9maW5pc2hlZF9sYWJlbF9sZW47Ci0rCQl9Ci0rCi0rCXMtPnMzLT50bXAucGVlcl9maW5pc2hfbWRfbGVuID0gcy0+bWV0aG9kLT5zc2wzX2VuYy0+ZmluYWxfZmluaXNoX21hYyhzLAotKwkJc2VuZGVyLHNsZW4scy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZCk7Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgc3NsM19nZXRfZmluaXNoZWQoU1NMICpzLCBpbnQgYSwgaW50IGIpCi0gCXsKLSAJaW50IGFsLGksb2s7Ci0gCWxvbmcgbjsKLSAJdW5zaWduZWQgY2hhciAqcDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSAJLyogdGhlIG1hYyBoYXMgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCB3aGVuIHdlIHJlY2VpdmVkIHRoZQotIAkgKiBjaGFuZ2UgY2lwaGVyIHNwZWMgbWVzc2FnZSBhbmQgaXMgaW4gcy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZAotIAkgKi8gCi0rI2VuZGlmCi0gCi0gCW49cy0+bWV0aG9kLT5zc2xfZ2V0X21lc3NhZ2UocywKLSAJCWEsCi1AQCAtNTIxLDYgKzU0NiwxNSBAQCBsb25nIHNzbDNfZ2V0X21lc3NhZ2UoU1NMICpzLCBpbnQgc3QxLCBpCi0gCQlzLT5pbml0X251bSArPSBpOwotIAkJbiAtPSBpOwotIAkJfQotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogSWYgcmVjZWl2aW5nIEZpbmlzaGVkLCByZWNvcmQgTUFDIG9mIHByaW9yIGhhbmRzaGFrZSBtZXNzYWdlcyBmb3IKLSsJICogRmluaXNoZWQgdmVyaWZpY2F0aW9uLiAqLwotKwlpZiAoKnMtPmluaXRfYnVmLT5kYXRhID09IFNTTDNfTVRfRklOSVNIRUQpCi0rCQlzc2wzX3Rha2VfbWFjKHMpOwotKyNlbmRpZgotKwotKwkvKiBGZWVkIHRoaXMgbWVzc2FnZSBpbnRvIE1BQyBjb21wdXRhdGlvbi4gKi8KLSAJc3NsM19maW5pc2hfbWFjKHMsICh1bnNpZ25lZCBjaGFyICopcy0+aW5pdF9idWYtPmRhdGEsIHMtPmluaXRfbnVtICsgNCk7Ci0gCWlmIChzLT5tc2dfY2FsbGJhY2spCi0gCQlzLT5tc2dfY2FsbGJhY2soMCwgcy0+dmVyc2lvbiwgU1NMM19SVF9IQU5EU0hBS0UsIHMtPmluaXRfYnVmLT5kYXRhLCAoc2l6ZV90KXMtPmluaXRfbnVtICsgNCwgcywgcy0+bXNnX2NhbGxiYWNrX2FyZyk7Ci0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvczNfY2xudC5jCTIwMTAtMTEtMjkgMTk6NTY6MDQuODQ2NTE3MDQ1ICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvc3NsL3MzX2NsbnQuYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTQzNSw3ICs0MzUsMTYgQEAgaW50IHNzbDNfY29ubmVjdChTU0wgKnMpCi0gCQkJcmV0PXNzbDNfc2VuZF9jaGFuZ2VfY2lwaGVyX3NwZWMocywKLSAJCQkJU1NMM19TVF9DV19DSEFOR0VfQSxTU0wzX1NUX0NXX0NIQU5HRV9CKTsKLSAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotKwotKyNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSB8fCBkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotIAkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfRklOSVNIRURfQTsKLSsjZWxzZQotKwkJCWlmIChzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQpCi0rCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfTkVYVF9QUk9UT19BOwotKwkJCWVsc2UKLSsJCQkJcy0+c3RhdGU9U1NMM19TVF9DV19GSU5JU0hFRF9BOwotKyNlbmRpZgotKwotIAkJCXMtPmluaXRfbnVtPTA7Ci0gCi0gCQkJcy0+c2Vzc2lvbi0+Y2lwaGVyPXMtPnMzLT50bXAubmV3X2NpcGhlcjsKLUBAIC00NjMsNiArNDcyLDE1IEBAIGludCBzc2wzX2Nvbm5lY3QoU1NMICpzKQotIAotIAkJCWJyZWFrOwotIAotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcpCi0rCQljYXNlIFNTTDNfU1RfQ1dfTkVYVF9QUk9UT19BOgotKwkJY2FzZSBTU0wzX1NUX0NXX05FWFRfUFJPVE9fQjoKLSsJCQlyZXQ9c3NsM19zZW5kX25leHRfcHJvdG8ocyk7Ci0rCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLSsJCQlzLT5zdGF0ZT1TU0wzX1NUX0NXX0ZJTklTSEVEX0E7Ci0rCQkJYnJlYWs7Ci0rI2VuZGlmCi0rCi0gCQljYXNlIFNTTDNfU1RfQ1dfRklOSVNIRURfQToKLSAJCWNhc2UgU1NMM19TVF9DV19GSU5JU0hFRF9COgotIAkJCXJldD1zc2wzX3NlbmRfZmluaXNoZWQocywKLUBAIC0zMDYwLDYgKzMwNzgsMzIgQEAgZXJyOgotICAqLwotIAotICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSsjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotK2ludCBzc2wzX3NlbmRfbmV4dF9wcm90byhTU0wgKnMpCi0rCXsKLSsJdW5zaWduZWQgaW50IGxlbiwgcGFkZGluZ19sZW47Ci0rCXVuc2lnbmVkIGNoYXIgKmQ7Ci0rCi0rCWlmIChzLT5zdGF0ZSA9PSBTU0wzX1NUX0NXX05FWFRfUFJPVE9fQSkKLSsJCXsKLSsJCWxlbiA9IHMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZF9sZW47Ci0rCQlwYWRkaW5nX2xlbiA9IDMyIC0gKChsZW4gKyAyKSAlIDMyKTsKLSsJCWQgPSAodW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhOwotKwkJZFs0XSA9IGxlbjsKLSsJCW1lbWNweShkICsgNSwgcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkLCBsZW4pOwotKwkJZFs1ICsgbGVuXSA9IHBhZGRpbmdfbGVuOwotKwkJbWVtc2V0KGQgKyA2ICsgbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0rCQkqKGQrKyk9U1NMM19NVF9ORVhUX1BST1RPOwotKwkJbDJuMygyICsgbGVuICsgcGFkZGluZ19sZW4sIGQpOwotKwkJcy0+c3RhdGUgPSBTU0wzX1NUX0NXX05FWFRfUFJPVE9fQjsKLSsJCXMtPmluaXRfbnVtID0gNCArIDIgKyBsZW4gKyBwYWRkaW5nX2xlbjsKLSsJCXMtPmluaXRfb2ZmID0gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIHNzbDNfZG9fd3JpdGUocywgU1NMM19SVF9IQU5EU0hBS0UpOwotKwl9Ci0rIyBlbmRpZgotKwotIGludCBzc2wzX2NoZWNrX2ZpbmlzaGVkKFNTTCAqcykKLSAJewotIAlpbnQgb2s7Ci0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvczNfbGliLmMJMjAxMC0xMS0yOSAxOTo1NjowNC44MzI0NjUzNTEgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9zc2wvczNfbGliLmMJMjAxMC0xMS0yOSAxOTo1NjowNC45NjU5Mjg4NTUgKzAwMDAKLUBAIC0yMjMwLDYgKzIyMzAsMTUgQEAgdm9pZCBzc2wzX2NsZWFyKFNTTCAqcykKLSAJcy0+czMtPm51bV9yZW5lZ290aWF0aW9ucz0wOwotIAlzLT5zMy0+aW5fcmVhZF9hcHBfZGF0YT0wOwotIAlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKLSsKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotKwlpZiAocy0+bmV4dF9wcm90b19uZWdvdGlhdGVkKQotKwkJewotKwkJT1BFTlNTTF9mcmVlKHMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZCk7Ci0rCQlzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQgPSBOVUxMOwotKwkJcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkX2xlbiA9IDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCX0KLSAKLSBsb25nIHNzbDNfY3RybChTU0wgKnMsIGludCBjbWQsIGxvbmcgbGFyZywgdm9pZCAqcGFyZykKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL3NzbC9zM19wa3QuYwkyMDEwLTExLTI5IDE5OjU2OjA0LjgzMjQ2NTM1MSArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL3NzbC9zM19wa3QuYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTEzOTQsOCArMTM5NCwxMCBAQCBlcnI6Ci0gaW50IHNzbDNfZG9fY2hhbmdlX2NpcGhlcl9zcGVjKFNTTCAqcykKLSAJewotIAlpbnQgaTsKLSsjaWZkZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSAJY29uc3QgY2hhciAqc2VuZGVyOwotIAlpbnQgc2xlbjsKLSsjZW5kaWYKLSAKLSAJaWYgKHMtPnN0YXRlICYgU1NMX1NUX0FDQ0VQVCkKLSAJCWk9U1NMM19DSEFOR0VfQ0lQSEVSX1NFUlZFUl9SRUFEOwotQEAgLTE0MTgsNiArMTQyMCw3IEBAIGludCBzc2wzX2RvX2NoYW5nZV9jaXBoZXJfc3BlYyhTU0wgKnMpCi0gCWlmICghcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2hhbmdlX2NpcGhlcl9zdGF0ZShzLGkpKQotIAkJcmV0dXJuKDApOwotIAotKyNpZmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotIAkvKiB3ZSBoYXZlIHRvIHJlY29yZCB0aGUgbWVzc2FnZSBkaWdlc3QgYXQKLSAJICogdGhpcyBwb2ludCBzbyB3ZSBjYW4gZ2V0IGl0IGJlZm9yZSB3ZSByZWFkCi0gCSAqIHRoZSBmaW5pc2hlZCBtZXNzYWdlICovCi1AQCAtMTQzNCw2ICsxNDM3LDcgQEAgaW50IHNzbDNfZG9fY2hhbmdlX2NpcGhlcl9zcGVjKFNTTCAqcykKLSAKLSAJcy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZF9sZW4gPSBzLT5tZXRob2QtPnNzbDNfZW5jLT5maW5hbF9maW5pc2hfbWFjKHMsCi0gCQlzZW5kZXIsc2xlbixzLT5zMy0+dG1wLnBlZXJfZmluaXNoX21kKTsKLSsjZW5kaWYKLSAKLSAJcmV0dXJuKDEpOwotIAl9Ci0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvczNfc3J2ci5jCTIwMTAtMTEtMjkgMTk6NTY6MDQuODQ2NTE3MDQ1ICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvc3NsL3MzX3NydnIuYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTUzOCw3ICs1MzgsMTQgQEAgaW50IHNzbDNfYWNjZXB0KFNTTCAqcykKLSAJCQkJICogdGhlIGNsaWVudCB1c2VzIGl0cyBrZXkgZnJvbSB0aGUgY2VydGlmaWNhdGUKLSAJCQkJICogZm9yIGtleSBleGNoYW5nZS4KLSAJCQkJICovCi0rI2lmIGRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpIHx8IGRlZmluZWQoT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcpCi0gCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfRklOSVNIRURfQTsKLSsjZWxzZQotKwkJCQlpZiAocy0+czMtPm5leHRfcHJvdG9fbmVnX3NlZW4pCi0rCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX05FWFRfUFJPVE9fQTsKLSsJCQkJZWxzZQotKwkJCQkJcy0+c3RhdGU9U1NMM19TVF9TUl9GSU5JU0hFRF9BOwotKyNlbmRpZgotIAkJCQlzLT5pbml0X251bSA9IDA7Ci0gCQkJCX0KLSAJCQllbHNlCi1AQCAtNTgxLDEwICs1ODgsMjcgQEAgaW50IHNzbDNfYWNjZXB0KFNTTCAqcykKLSAJCQlyZXQ9c3NsM19nZXRfY2VydF92ZXJpZnkocyk7Ci0gCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLSAKLSsjaWYgZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgfHwgZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLSAJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0ZJTklTSEVEX0E7Ci0rI2Vsc2UKLSsJCQlpZiAocy0+czMtPm5leHRfcHJvdG9fbmVnX3NlZW4pCi0rCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfTkVYVF9QUk9UT19BOwotKwkJCWVsc2UKLSsJCQkJcy0+c3RhdGU9U1NMM19TVF9TUl9GSU5JU0hFRF9BOwotKyNlbmRpZgotIAkJCXMtPmluaXRfbnVtPTA7Ci0gCQkJYnJlYWs7Ci0gCi0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX05FWFRQUk9UT05FRykKLSsJCWNhc2UgU1NMM19TVF9TUl9ORVhUX1BST1RPX0E6Ci0rCQljYXNlIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19COgotKwkJCXJldD1zc2wzX2dldF9uZXh0X3Byb3RvKHMpOwotKwkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7Ci0rCQkJcy0+aW5pdF9udW0gPSAwOwotKwkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfRklOSVNIRURfQTsKLSsJCQlicmVhazsKLSsjZW5kaWYKLSsKLSAJCWNhc2UgU1NMM19TVF9TUl9GSU5JU0hFRF9BOgotIAkJY2FzZSBTU0wzX1NUX1NSX0ZJTklTSEVEX0I6Ci0gCQkJcmV0PXNzbDNfZ2V0X2ZpbmlzaGVkKHMsU1NMM19TVF9TUl9GSU5JU0hFRF9BLAotQEAgLTY1NSw3ICs2NzksMTYgQEAgaW50IHNzbDNfYWNjZXB0KFNTTCAqcykKLSAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotIAkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfRkxVU0g7Ci0gCQkJaWYgKHMtPmhpdCkKLSsJCQkJewotKyNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSB8fCBkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotIAkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9U1NMM19TVF9TUl9GSU5JU0hFRF9BOwotKyNlbHNlCi0rCQkJCWlmIChzLT5zMy0+bmV4dF9wcm90b19uZWdfc2VlbikKLSsJCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0wzX1NUX1NSX05FWFRfUFJPVE9fQTsKLSsJCQkJZWxzZQotKwkJCQkJcy0+czMtPnRtcC5uZXh0X3N0YXRlPVNTTDNfU1RfU1JfRklOSVNIRURfQTsKLSsjZW5kaWYKLSsJCQkJfQotIAkJCWVsc2UKLSAJCQkJcy0+czMtPnRtcC5uZXh0X3N0YXRlPVNTTF9TVF9PSzsKLSAJCQlzLT5pbml0X251bT0wOwotQEAgLTMxOTYsNCArMzIyOSw3MiBAQCBpbnQgc3NsM19zZW5kX2NlcnRfc3RhdHVzKFNTTCAqcykKLSAJLyogU1NMM19TVF9TV19DRVJUX1NUQVRVU19CICovCi0gCXJldHVybihzc2wzX2RvX3dyaXRlKHMsU1NMM19SVF9IQU5EU0hBS0UpKTsKLSAJfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfTk9fTlBOCi0rLyogc3NsM19nZXRfbmV4dF9wcm90byByZWFkcyBhIE5leHQgUHJvdG9jb2wgTmVnb3RpYXRpb24gaGFuZHNoYWtlIG1lc3NhZ2UuIEl0Ci0rICogc2V0cyB0aGUgbmV4dF9wcm90byBtZW1iZXIgaW4gcyBpZiBmb3VuZCAqLwotK2ludCBzc2wzX2dldF9uZXh0X3Byb3RvKFNTTCAqcykKLSsJewotKwlpbnQgb2s7Ci0rCXVuc2lnbmVkIHByb3RvX2xlbiwgcGFkZGluZ19sZW47Ci0rCWxvbmcgbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKLSsKLSsJLyogQ2xpZW50cyBjYW5ub3Qgc2VuZCBhIE5leHRQcm90b2NvbCBtZXNzYWdlIGlmIHdlIGRpZG4ndCBzZWUgdGhlCi0rCSAqIGV4dGVuc2lvbiBpbiB0aGVpciBDbGllbnRIZWxsbyAqLwotKwlpZiAoIXMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuKQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX05FWFRfUFJPVE8sU1NMX1JfR09UX05FWFRfUFJPVE9fV0lUSE9VVF9FWFRFTlNJT04pOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKwotKwluPXMtPm1ldGhvZC0+c3NsX2dldF9tZXNzYWdlKHMsCi0rCQlTU0wzX1NUX1NSX05FWFRfUFJPVE9fQSwKLSsJCVNTTDNfU1RfU1JfTkVYVF9QUk9UT19CLAotKwkJU1NMM19NVF9ORVhUX1BST1RPLAotKwkJNTE0LCAgLyogU2VlIHRoZSBwYXlsb2FkIGZvcm1hdCBiZWxvdyAqLwotKwkJJm9rKTsKLSsKLSsJaWYgKCFvaykKLSsJCXJldHVybigoaW50KW4pOwotKwotKwkvKiBzLT5zdGF0ZSBkb2Vzbid0IHJlZmxlY3Qgd2hldGhlciBDaGFuZ2VDaXBoZXJTcGVjIGhhcyBiZWVuIHJlY2VpdmVkCi0rCSAqIGluIHRoaXMgaGFuZHNoYWtlLCBidXQgcy0+czMtPmNoYW5nZV9jaXBoZXJfc3BlYyBkb2VzICh3aWxsIGJlIHJlc2V0Ci0rCSAqIGJ5IHNzbDNfZ2V0X2ZpbmlzaGVkKS4gKi8KLSsJaWYgKCFzLT5zMy0+Y2hhbmdlX2NpcGhlcl9zcGVjKQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX05FWFRfUFJPVE8sU1NMX1JfR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTKTsKLSsJCXJldHVybiAtMTsKLSsJCX0KLSsKLSsJaWYgKG4gPCAyKQotKwkJcmV0dXJuIDA7ICAvKiBUaGUgYm9keSBtdXN0IGJlID4gMSBieXRlcyBsb25nICovCi0rCi0rCXA9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X21zZzsKLSsKLSsJLyogVGhlIHBheWxvYWQgbG9va3MgbGlrZToKLSsJICogICB1aW50OCBwcm90b19sZW47Ci0rCSAqICAgdWludDggcHJvdG9bcHJvdG9fbGVuXTsKLSsJICogICB1aW50OCBwYWRkaW5nX2xlbjsKLSsJICogICB1aW50OCBwYWRkaW5nW3BhZGRpbmdfbGVuXTsKLSsJICovCi0rCXByb3RvX2xlbiA9IHBbMF07Ci0rCWlmIChwcm90b19sZW4gKyAyID4gcy0+aW5pdF9udW0pCi0rCQlyZXR1cm4gMDsKLSsJcGFkZGluZ19sZW4gPSBwW3Byb3RvX2xlbiArIDFdOwotKwlpZiAocHJvdG9fbGVuICsgcGFkZGluZ19sZW4gKyAyICE9IHMtPmluaXRfbnVtKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZCA9IE9QRU5TU0xfbWFsbG9jKHByb3RvX2xlbik7Ci0rCWlmICghcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkKQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX05FWFRfUFJPVE8sRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCW1lbWNweShzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQsIHAgKyAxLCBwcm90b19sZW4pOwotKwlzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWRfbGVuID0gcHJvdG9fbGVuOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKyMgZW5kaWYKLSAjZW5kaWYKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL3NzbC9zc2wuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljg0NjUxNzA0NSArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL3NzbC9zc2wuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTg1Nyw2ICs4NTcsMjUgQEAgc3RydWN0IHNzbF9jdHhfc3QKLSAJLyogZHJhZnQtcmVzY29ybGEtdGxzLW9wYXF1ZS1wcmYtaW5wdXQtMDAudHh0IGluZm9ybWF0aW9uICovCi0gCWludCAoKnRsc2V4dF9vcGFxdWVfcHJmX2lucHV0X2NhbGxiYWNrKShTU0wgKiwgdm9pZCAqcGVlcmlucHV0LCBzaXplX3QgbGVuLCB2b2lkICphcmcpOwotIAl2b2lkICp0bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmc7Ci0rCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogTmV4dCBwcm90b2NvbCBuZWdvdGlhdGlvbiBpbmZvcm1hdGlvbiAqLwotKwkvKiAoZm9yIGV4cGVyaW1lbnRhbCBOUE4gZXh0ZW5zaW9uKS4gKi8KLSsKLSsJLyogRm9yIGEgc2VydmVyLCB0aGlzIGNvbnRhaW5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gYnkgd2hpY2ggdGhlIHNldCBvZgotKwkgKiBhZHZlcnRpc2VkIHByb3RvY29scyBjYW4gYmUgcHJvdmlkZWQuICovCi0rCWludCAoKm5leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IpKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZiwKLSsJCQkgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVuLCB2b2lkICphcmcpOwotKwl2b2lkICpuZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiX2FyZzsKLSsJLyogRm9yIGEgY2xpZW50LCB0aGlzIGNvbnRhaW5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBzZWxlY3RzIHRoZQotKwkgKiBuZXh0IHByb3RvY29sIGZyb20gdGhlIGxpc3QgcHJvdmlkZWQgYnkgdGhlIHNlcnZlci4gKi8KLSsJaW50ICgqbmV4dF9wcm90b19zZWxlY3RfY2IpKFNTTCAqcywgdW5zaWduZWQgY2hhciAqKm91dCwKLSsJCQkJICAgIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKLSsJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKwkJCQkgICAgdW5zaWduZWQgaW50IGlubGVuLAotKwkJCQkgICAgdm9pZCAqYXJnKTsKLSsJdm9pZCAqbmV4dF9wcm90b19zZWxlY3RfY2JfYXJnOwotKyMgZW5kaWYKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCi1AQCAtOTI4LDYgKzk0NywzMCBAQCBpbnQgU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lKFNTTF9DCi0gI2VuZGlmCi0gdm9pZCBTU0xfQ1RYX3NldF9jb29raWVfZ2VuZXJhdGVfY2IoU1NMX0NUWCAqY3R4LCBpbnQgKCphcHBfZ2VuX2Nvb2tpZV9jYikoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwgdW5zaWduZWQgaW50ICpjb29raWVfbGVuKSk7Ci0gdm9pZCBTU0xfQ1RYX3NldF9jb29raWVfdmVyaWZ5X2NiKFNTTF9DVFggKmN0eCwgaW50ICgqYXBwX3ZlcmlmeV9jb29raWVfY2IpKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsIHVuc2lnbmVkIGludCBjb29raWVfbGVuKSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotK3ZvaWQgU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYihTU0xfQ1RYICpzLAotKwkJCQkJICAgaW50ICgqY2IpIChTU0wgKnNzbCwKLSsJCQkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqb3V0LAotKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqb3V0bGVuLAotKwkJCQkJCSAgICAgIHZvaWQgKmFyZyksIHZvaWQgKmFyZyk7Ci0rdm9pZCBTU0xfQ1RYX3NldF9uZXh0X3Byb3RvX3NlbGVjdF9jYihTU0xfQ1RYICpzLAotKwkJCQkgICAgICBpbnQgKCpjYikgKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICoqb3V0LAotKwkJCQkJCSB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCi0rCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKwkJCQkJCSB1bnNpZ25lZCBpbnQgaW5sZW4sIHZvaWQgKmFyZyksCi0rCQkJCSAgICAgIHZvaWQgKmFyZyk7Ci0rCi0raW50IFNTTF9zZWxlY3RfbmV4dF9wcm90byh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sCi0rCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubGVuLAotKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY2xpZW50X2xlbik7Ci0rdm9pZCBTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQoY29uc3QgU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YSwKLSsJCQkJICAgIHVuc2lnbmVkICpsZW4pOwotKwotKyNkZWZpbmUgT1BFTlNTTF9OUE5fVU5TVVBQT1JURUQJMAotKyNkZWZpbmUgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAkxCi0rI2RlZmluZSBPUEVOU1NMX05QTl9OT19PVkVSTEFQCTIKLSsKLSsjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCi0gLyogdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgZ2l2ZW4gdG8gY2FsbGJhY2tzIGNvbnRhaW5pbmcgdGhlCi1AQCAtMTE4Nyw2ICsxMjMwLDE5IEBAIHN0cnVjdCBzc2xfc3QKLSAJdm9pZCAqdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2FyZzsKLSAKLSAJU1NMX0NUWCAqIGluaXRpYWxfY3R4OyAvKiBpbml0aWFsIGN0eCwgdXNlZCB0byBzdG9yZSBzZXNzaW9ucyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogTmV4dCBwcm90b2NvbCBuZWdvdGlhdGlvbi4gRm9yIHRoZSBjbGllbnQsIHRoaXMgaXMgdGhlIHByb3RvY29sIHRoYXQKLSsJICogd2Ugc2VudCBpbiBOZXh0UHJvdG9jb2wgYW5kIGlzIHNldCB3aGVuIGhhbmRsaW5nIFNlcnZlckhlbGxvCi0rCSAqIGV4dGVuc2lvbnMuCi0rCSAqCi0rCSAqIEZvciBhIHNlcnZlciwgdGhpcyBpcyB0aGUgY2xpZW50J3Mgc2VsZWN0ZWRfcHJvdG9jb2wgZnJvbQotKwkgKiBOZXh0UHJvdG9jb2wgYW5kIGlzIHNldCB3aGVuIGhhbmRsaW5nIHRoZSBOZXh0UHJvdG9jb2wgbWVzc2FnZSwKLSsJICogYmVmb3JlIHRoZSBGaW5pc2hlZCBtZXNzYWdlLiAqLwotKwl1bnNpZ25lZCBjaGFyICpuZXh0X3Byb3RvX25lZ290aWF0ZWQ7Ci0rCXVuc2lnbmVkIGNoYXIgbmV4dF9wcm90b19uZWdvdGlhdGVkX2xlbjsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIHNlc3Npb25fY3R4IGluaXRpYWxfY3R4Ci0gI2Vsc2UKLSAjZGVmaW5lIHNlc3Npb25fY3R4IGN0eAotQEAgLTE5MTksNiArMTk3NSw3IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UJCQkgMTQxCi0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9NRVNTQUdFCQkJCSAxNDIKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX05FV19TRVNTSU9OX1RJQ0tFVAkJIDI4MwotKyNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfTkVYVF9QUk9UTwkJCSAzMDQKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1JFQ09SRAkJCQkgMTQzCi0gI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9TRVJWRVJfQ0VSVElGSUNBVEUJCSAxNDQKLSAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9ET05FCQkJIDE0NQotQEAgLTIxMTcsNiArMjE3NCw4IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfUl9FWENFU1NJVkVfTUVTU0FHRV9TSVpFCQkJIDE1MgotICNkZWZpbmUgU1NMX1JfRVhUUkFfREFUQV9JTl9NRVNTQUdFCQkJIDE1MwotICNkZWZpbmUgU1NMX1JfR09UX0FfRklOX0JFRk9SRV9BX0NDUwkJCSAxNTQKLSsjZGVmaW5lIFNTTF9SX0dPVF9ORVhUX1BST1RPX0JFRk9SRV9BX0NDUwkJIDM0NgotKyNkZWZpbmUgU1NMX1JfR09UX05FWFRfUFJPVE9fV0lUSE9VVF9FWFRFTlNJT04JCSAzNDcKLSAjZGVmaW5lIFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QJCQkgMTU1Ci0gI2RlZmluZSBTU0xfUl9IVFRQX1JFUVVFU1QJCQkJIDE1NgotICNkZWZpbmUgU1NMX1JfSUxMRUdBTF9QQURESU5HCQkJCSAyODMKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL3NzbC9zc2wzLmgJMjAxMC0xMS0yOSAxOTo1NjowNC44MzI0NjUzNTEgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9zc2wvc3NsMy5oCTIwMTAtMTEtMjkgMTk6NTY6MDQuOTY1OTI4ODU1ICswMDAwCi1AQCAtNDY1LDYgKzQ2NSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBzc2wzX3N0YXRlX3N0Ci0gCXZvaWQgKnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0OwotIAlzaXplX3Qgc2VydmVyX29wYXF1ZV9wcmZfaW5wdXRfbGVuOwotIAotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJLyogU2V0IGlmIHdlIHNhdyB0aGUgTmV4dCBQcm90b2NvbCBOZWdvdGlhdGlvbiBleHRlbnNpb24gZnJvbQotKwkgICBvdXIgcGVlci4gKi8KLSsJaW50IG5leHRfcHJvdG9fbmVnX3NlZW47Ci0rI2VuZGlmCi0rCi0gCXN0cnVjdAl7Ci0gCQkvKiBhY3R1YWxseSBvbmx5IG5lZWRzIHRvIGJlIDE2KzIwICovCi0gCQl1bnNpZ25lZCBjaGFyIGNlcnRfdmVyaWZ5X21kW0VWUF9NQVhfTURfU0laRSoyXTsKLUBAIC01NTcsNiArNTYzLDEwIEBAIHR5cGVkZWYgc3RydWN0IHNzbDNfc3RhdGVfc3QKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0VSVF9WUkZZX0IJCSgweDE5MXxTU0xfU1RfQ09OTkVDVCkKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0hBTkdFX0EJCSgweDFBMHxTU0xfU1RfQ09OTkVDVCkKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0hBTkdFX0IJCSgweDFBMXxTU0xfU1RfQ09OTkVDVCkKLSsjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rI2RlZmluZSBTU0wzX1NUX0NXX05FWFRfUFJPVE9fQQkJKDB4MjAwfFNTTF9TVF9DT05ORUNUKQotKyNkZWZpbmUgU1NMM19TVF9DV19ORVhUX1BST1RPX0IJCSgweDIwMXxTU0xfU1RfQ09OTkVDVCkKLSsjZW5kaWYKLSAjZGVmaW5lIFNTTDNfU1RfQ1dfRklOSVNIRURfQQkJKDB4MUIwfFNTTF9TVF9DT05ORUNUKQotICNkZWZpbmUgU1NMM19TVF9DV19GSU5JU0hFRF9CCQkoMHgxQjF8U1NMX1NUX0NPTk5FQ1QpCi0gLyogcmVhZCBmcm9tIHNlcnZlciAqLwotQEAgLTYwMiw2ICs2MTIsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsM19zdGF0ZV9zdAotICNkZWZpbmUgU1NMM19TVF9TUl9DRVJUX1ZSRllfQgkJKDB4MUExfFNTTF9TVF9BQ0NFUFQpCi0gI2RlZmluZSBTU0wzX1NUX1NSX0NIQU5HRV9BCQkoMHgxQjB8U1NMX1NUX0FDQ0VQVCkKLSAjZGVmaW5lIFNTTDNfU1RfU1JfQ0hBTkdFX0IJCSgweDFCMXxTU0xfU1RfQUNDRVBUKQotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19BCQkoMHgyMTB8U1NMX1NUX0FDQ0VQVCkKLSsjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19CCQkoMHgyMTF8U1NMX1NUX0FDQ0VQVCkKLSsjZW5kaWYKLSAjZGVmaW5lIFNTTDNfU1RfU1JfRklOSVNIRURfQQkJKDB4MUMwfFNTTF9TVF9BQ0NFUFQpCi0gI2RlZmluZSBTU0wzX1NUX1NSX0ZJTklTSEVEX0IJCSgweDFDMXxTU0xfU1RfQUNDRVBUKQotIC8qIHdyaXRlIHRvIGNsaWVudCAqLwotQEAgLTYyNiw2ICs2NDAsOSBAQCB0eXBlZGVmIHN0cnVjdCBzc2wzX3N0YXRlX3N0Ci0gI2RlZmluZSBTU0wzX01UX0NMSUVOVF9LRVlfRVhDSEFOR0UJCTE2Ci0gI2RlZmluZSBTU0wzX01UX0ZJTklTSEVECQkJMjAKLSAjZGVmaW5lIFNTTDNfTVRfQ0VSVElGSUNBVEVfU1RBVFVTCQkyMgotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsjZGVmaW5lIFNTTDNfTVRfTkVYVF9QUk9UTwkJCTY3Ci0rI2VuZGlmCi0gI2RlZmluZSBEVExTMV9NVF9IRUxMT19WRVJJRllfUkVRVUVTVCAgICAzCi0gCi0gCi0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvc3NsX2Vyci5jCTIwMTAtMTEtMjkgMTk6NTY6MDQuODQ2NTE3MDQ1ICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvc3NsL3NzbF9lcnIuYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTE1NSw2ICsxNTUsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFNTTF9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSksCSJTU0wzX0dFVF9LRVlfRVhDSEFOR0UifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19HRVRfTUVTU0FHRSksCSJTU0wzX0dFVF9NRVNTQUdFIn0sCi0ge0VSUl9GVU5DKFNTTF9GX1NTTDNfR0VUX05FV19TRVNTSU9OX1RJQ0tFVCksCSJTU0wzX0dFVF9ORVdfU0VTU0lPTl9USUNLRVQifSwKLSt7RVJSX0ZVTkMoU1NMX0ZfU1NMM19HRVRfTkVYVF9QUk9UTyksCSJTU0wzX0dFVF9ORVhUX1BST1RPIn0sCi0ge0VSUl9GVU5DKFNTTF9GX1NTTDNfR0VUX1JFQ09SRCksCSJTU0wzX0dFVF9SRUNPUkQifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0NFUlRJRklDQVRFKSwJIlNTTDNfR0VUX1NFUlZFUl9DRVJUSUZJQ0FURSJ9LAotIHtFUlJfRlVOQyhTU0xfRl9TU0wzX0dFVF9TRVJWRVJfRE9ORSksCSJTU0wzX0dFVF9TRVJWRVJfRE9ORSJ9LAotQEAgLTM1NSw2ICszNTYsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFNTTF9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oU1NMX1JfRVhDRVNTSVZFX01FU1NBR0VfU0laRSksImV4Y2Vzc2l2ZSBtZXNzYWdlIHNpemUifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9FWFRSQV9EQVRBX0lOX01FU1NBR0UpICwiZXh0cmEgZGF0YSBpbiBtZXNzYWdlIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfR09UX0FfRklOX0JFRk9SRV9BX0NDUyksImdvdCBhIGZpbiBiZWZvcmUgYSBjY3MifSwKLSt7RVJSX1JFQVNPTihTU0xfUl9HT1RfTkVYVF9QUk9UT19CRUZPUkVfQV9DQ1MpLCJnb3QgbmV4dCBwcm90byBiZWZvcmUgYSBjY3MifSwKLSt7RVJSX1JFQVNPTihTU0xfUl9HT1RfTkVYVF9QUk9UT19XSVRIT1VUX0VYVEVOU0lPTiksImdvdCBuZXh0IHByb3RvIHdpdGhvdXQgc2VlaW5nIGV4dGVuc2lvbiJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QpICAgLCJodHRwcyBwcm94eSByZXF1ZXN0In0sCi0ge0VSUl9SRUFTT04oU1NMX1JfSFRUUF9SRVFVRVNUKSAgICAgICAgICAsImh0dHAgcmVxdWVzdCJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX0lMTEVHQUxfUEFERElORykgICAgICAgLCJpbGxlZ2FsIHBhZGRpbmcifSwKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL3NzbC9zc2xfbGliLmMJMjAxMC0xMS0yOSAxOTo1NjowNC44NDY1MTcwNDUgKzAwMDAKLSsrKyBvcGVuc3NsLTEuMC4wYi9zc2wvc3NsX2xpYi5jCTIwMTAtMTEtMjkgMTk6NTY6MDQuOTY1OTI4ODU1ICswMDAwCi1AQCAtMzU0LDYgKzM1NCw5IEBAIFNTTCAqU1NMX25ldyhTU0xfQ1RYICpjdHgpCi0gCXMtPnRsc2V4dF9vY3NwX3Jlc3BsZW4gPSAtMTsKLSAJQ1JZUFRPX2FkZCgmY3R4LT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7Ci0gCXMtPmluaXRpYWxfY3R4PWN0eDsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKwlzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQgPSBOVUxMOwotKyMgZW5kaWYKLSAjZW5kaWYKLSAKLSAJcy0+dmVyaWZ5X3Jlc3VsdD1YNTA5X1ZfT0s7Ci1AQCAtNTg3LDYgKzU5MCwxMSBAQCB2b2lkIFNTTF9mcmVlKFNTTCAqcykKLSAJCWtzc2xfY3R4X2ZyZWUocy0+a3NzbF9jdHgpOwotICNlbmRpZgkvKiBPUEVOU1NMX05PX0tSQjUgKi8KLSAKLSsjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQotKwlpZiAocy0+bmV4dF9wcm90b19uZWdvdGlhdGVkKQotKwkJT1BFTlNTTF9mcmVlKHMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZCk7Ci0rI2VuZGlmCi0rCi0gCU9QRU5TU0xfZnJlZShzKTsKLSAJfQotIAotQEAgLTE1MDMsNiArMTUxMSwxMjQgQEAgaW50IFNTTF9nZXRfc2VydmVybmFtZV90eXBlKGNvbnN0IFNTTCAqcwotIAkJcmV0dXJuIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWU7Ci0gCXJldHVybiAtMTsKLSAJfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rLyogU1NMX3NlbGVjdF9uZXh0X3Byb3RvIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIHByb3RvY29sIHNlbGVjdGlvbi4gSXQgaXMKLSsgKiBleHBlY3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrIHNldCBieQotKyAqIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiLgotKyAqCi0rICogVGhlIHByb3RvY29sIGRhdGEgaXMgYXNzdW1lZCB0byBiZSBhIHZlY3RvciBvZiA4LWJpdCwgbGVuZ3RoIHByZWZpeGVkIGJ5dGUKLSsgKiBzdHJpbmdzLiBUaGUgbGVuZ3RoIGJ5dGUgaXRzZWxmIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGVuZ3RoLiBBIGJ5dGUKLSsgKiBzdHJpbmcgb2YgbGVuZ3RoIDAgaXMgaW52YWxpZC4gTm8gYnl0ZSBzdHJpbmcgbWF5IGJlIHRydW5jYXRlZC4KLSsgKgotKyAqIFRoZSBjdXJyZW50LCBidXQgZXhwZXJpbWVudGFsIGFsZ29yaXRobSBmb3Igc2VsZWN0aW5nIHRoZSBwcm90b2NvbCBpczoKLSsgKgotKyAqIDEpIElmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IE5QTiB0aGVuIHRoaXMgaXMgaW5kaWNhdGVkIHRvIHRoZQotKyAqIGNhbGxiYWNrLiBJbiB0aGlzIGNhc2UsIHRoZSBjbGllbnQgYXBwbGljYXRpb24gaGFzIHRvIGFib3J0IHRoZSBjb25uZWN0aW9uCi0rICogb3IgaGF2ZSBhIGRlZmF1bHQgYXBwbGljYXRpb24gbGV2ZWwgcHJvdG9jb2wuCi0rICoKLSsgKiAyKSBJZiB0aGUgc2VydmVyIHN1cHBvcnRzIE5QTiwgYnV0IGFkdmVydGlzZXMgYW4gZW1wdHkgbGlzdCB0aGVuIHRoZQotKyAqIGNsaWVudCBzZWxlY3RzIHRoZSBmaXJzdCBwcm90Y29sIGluIGl0cyBsaXN0LCBidXQgaW5kaWNhdGVzIHZpYSB0aGUKLSsgKiBBUEkgdGhhdCB0aGlzIGZhbGxiYWNrIGNhc2Ugd2FzIGVuYWN0ZWQuCi0rICoKLSsgKiAzKSBPdGhlcndpc2UsIHRoZSBjbGllbnQgZmluZHMgdGhlIGZpcnN0IHByb3RvY29sIGluIHRoZSBzZXJ2ZXIncyBsaXN0Ci0rICogdGhhdCBpdCBzdXBwb3J0cyBhbmQgc2VsZWN0cyB0aGlzIHByb3RvY29sLiBUaGlzIGlzIGJlY2F1c2UgaXQncwotKyAqIGFzc3VtZWQgdGhhdCB0aGUgc2VydmVyIGhhcyBiZXR0ZXIgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcHJvdG9jb2wKLSsgKiBhIGNsaWVudCBzaG91bGQgdXNlLgotKyAqCi0rICogNCkgSWYgdGhlIGNsaWVudCBkb2Vzbid0IHN1cHBvcnQgYW55IG9mIHRoZSBzZXJ2ZXIncyBhZHZlcnRpc2VkCi0rICogcHJvdG9jb2xzLCB0aGVuIHRoaXMgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBjYXNlIDIuCi0rICoKLSsgKiBJdCByZXR1cm5zIGVpdGhlcgotKyAqIE9QRU5TU0xfTlBOX05FR09USUFURUQgaWYgYSBjb21tb24gcHJvdG9jb2wgd2FzIGZvdW5kLCBvcgotKyAqIE9QRU5TU0xfTlBOX05PX09WRVJMQVAgaWYgdGhlIGZhbGxiYWNrIGNhc2Ugd2FzIHJlYWNoZWQuCi0rICovCi0raW50IFNTTF9zZWxlY3RfbmV4dF9wcm90byh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBjaGFyICpvdXRsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlcnZlciwgdW5zaWduZWQgaW50IHNlcnZlcl9sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNsaWVudCwgdW5zaWduZWQgaW50IGNsaWVudF9sZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGksIGo7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdDsKLSsJaW50IHN0YXR1cyA9IE9QRU5TU0xfTlBOX1VOU1VQUE9SVEVEOwotKwotKwkvKiBGb3IgZWFjaCBwcm90b2NvbCBpbiBzZXJ2ZXIgcHJlZmVyZW5jZSBvcmRlciwgc2VlIGlmIHdlIHN1cHBvcnQgaXQuICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZXJ2ZXJfbGVuOyApCi0rCQl7Ci0rCQlmb3IgKGogPSAwOyBqIDwgY2xpZW50X2xlbjsgKQotKwkJCXsKLSsJCQlpZiAoc2VydmVyW2ldID09IGNsaWVudFtqXSAmJgotKwkJCSAgICBtZW1jbXAoJnNlcnZlcltpKzFdLCAmY2xpZW50W2orMV0sIHNlcnZlcltpXSkgPT0gMCkKLSsJCQkJewotKwkJCQkvKiBXZSBmb3VuZCBhIG1hdGNoICovCi0rCQkJCXJlc3VsdCA9ICZzZXJ2ZXJbaV07Ci0rCQkJCXN0YXR1cyA9IE9QRU5TU0xfTlBOX05FR09USUFURUQ7Ci0rCQkJCWdvdG8gZm91bmQ7Ci0rCQkJCX0KLSsJCQlqICs9IGNsaWVudFtqXTsKLSsJCQlqKys7Ci0rCQkJfQotKwkJaSArPSBzZXJ2ZXJbaV07Ci0rCQlpKys7Ci0rCQl9Ci0rCi0rCS8qIFRoZXJlJ3Mgbm8gb3ZlcmxhcCBiZXR3ZWVuIG91ciBwcm90b2NvbHMgYW5kIHRoZSBzZXJ2ZXIncyBsaXN0LiAqLwotKwlyZXN1bHQgPSBjbGllbnQ7Ci0rCXN0YXR1cyA9IE9QRU5TU0xfTlBOX05PX09WRVJMQVA7Ci0rCi0rCWZvdW5kOgotKwkqb3V0ID0gKHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0ICsgMTsKLSsJKm91dGxlbiA9IHJlc3VsdFswXTsKLSsJcmV0dXJuIHN0YXR1czsKLSsJfQotKwotKy8qIFNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZCBzZXRzICpkYXRhIGFuZCAqbGVuIHRvIHBvaW50IHRvIHRoZSBjbGllbnQncwotKyAqIHJlcXVlc3RlZCBwcm90b2NvbCBmb3IgdGhpcyBjb25uZWN0aW9uIGFuZCByZXR1cm5zIDAuIElmIHRoZSBjbGllbnQgZGlkbid0Ci0rICogcmVxdWVzdCBhbnkgcHJvdG9jb2wsIHRoZW4gKmRhdGEgaXMgc2V0IHRvIE5VTEwuCi0rICoKLSsgKiBOb3RlIHRoYXQgdGhlIGNsaWVudCBjYW4gcmVxdWVzdCBhbnkgcHJvdG9jb2wgaXQgY2hvb3Nlcy4gVGhlIHZhbHVlIHJldHVybmVkCi0rICogZnJvbSB0aGlzIGZ1bmN0aW9uIG5lZWQgbm90IGJlIGEgbWVtYmVyIG9mIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBwcm90b2NvbHMKLSsgKiBwcm92aWRlZCBieSB0aGUgY2FsbGJhY2suCi0rICovCi0rdm9pZCBTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQoY29uc3QgU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YSwgdW5zaWduZWQgKmxlbikKLSsJewotKwkqZGF0YSA9IHMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZDsKLSsJaWYgKCEqZGF0YSkgewotKwkJKmxlbiA9IDA7Ci0rCX0gZWxzZSB7Ci0rCQkqbGVuID0gcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkX2xlbjsKLSsJfQotK30KLSsKLSsvKiBTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiIHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEKLSsgKiBUTFMgc2VydmVyIG5lZWRzIGEgbGlzdCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2xzIGZvciBOZXh0IFByb3RvY29sCi0rICogTmVnb3RpYXRpb24uIFRoZSByZXR1cm5lZCBsaXN0IG11c3QgYmUgaW4gd2lyZSBmb3JtYXQuICBUaGUgbGlzdCBpcyByZXR1cm5lZAotKyAqIGJ5IHNldHRpbmcgfG91dHwgdG8gcG9pbnQgdG8gaXQgYW5kIHxvdXRsZW58IHRvIGl0cyBsZW5ndGguIFRoaXMgbWVtb3J5IHdpbGwKLSsgKiBub3QgYmUgbW9kaWZpZWQsIGJ1dCBvbmUgc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBTU0wqIGtlZXBzIGEgcmVmZXJlbmNlIHRvCi0rICogaXQuCi0rICoKLSsgKiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBTU0xfVExTRVhUX0VSUl9PSyBpZiBpdCB3aXNoZXMgdG8gYWR2ZXJ0aXNlLiBPdGhlcndpc2UsIG5vCi0rICogc3VjaCBleHRlbnNpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgU2VydmVySGVsbG8uICovCi0rdm9pZCBTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiKFNTTF9DVFggKmN0eCwgaW50ICgqY2IpIChTU0wgKnNzbCwgY29uc3QgdW5zaWduZWQgY2hhciAqKm91dCwgdW5zaWduZWQgaW50ICpvdXRsZW4sIHZvaWQgKmFyZyksIHZvaWQgKmFyZykKLSsJewotKwljdHgtPm5leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IgPSBjYjsKLSsJY3R4LT5uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiX2FyZyA9IGFyZzsKLSsJfQotKwotKy8qIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiIHNldHMgYSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEKLSsgKiBjbGllbnQgbmVlZHMgdG8gc2VsZWN0IGEgcHJvdG9jb2wgZnJvbSB0aGUgc2VydmVyJ3MgcHJvdmlkZWQgbGlzdC4gfG91dHwKLSsgKiBtdXN0IGJlIHNldCB0byBwb2ludCB0byB0aGUgc2VsZWN0ZWQgcHJvdG9jb2wgKHdoaWNoIG1heSBiZSB3aXRoaW4gfGlufCkuCi0rICogVGhlIGxlbmd0aCBvZiB0aGUgcHJvdG9jb2wgbmFtZSBtdXN0IGJlIHdyaXR0ZW4gaW50byB8b3V0bGVufC4gVGhlIHNlcnZlcidzCi0rICogYWR2ZXJ0aXNlZCBwcm90b2NvbHMgYXJlIHByb3ZpZGVkIGluIHxpbnwgYW5kIHxpbmxlbnwuIFRoZSBjYWxsYmFjayBjYW4KLSsgKiBhc3N1bWUgdGhhdCB8aW58IGlzIHN5bnRhY3RpY2FsbHkgdmFsaWQuCi0rICoKLSsgKiBUaGUgY2xpZW50IG11c3Qgc2VsZWN0IGEgcHJvdG9jb2wuIEl0IGlzIGZhdGFsIHRvIHRoZSBjb25uZWN0aW9uIGlmIHRoaXMKLSsgKiBjYWxsYmFjayByZXR1cm5zIGEgdmFsdWUgb3RoZXIgdGhhbiBTU0xfVExTRVhUX0VSUl9PSy4KLSsgKi8KLSt2b2lkIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiKFNTTF9DVFggKmN0eCwgaW50ICgqY2IpIChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbiwgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKQotKwl7Ci0rCWN0eC0+bmV4dF9wcm90b19zZWxlY3RfY2IgPSBjYjsKLSsJY3R4LT5uZXh0X3Byb3RvX3NlbGVjdF9jYl9hcmcgPSBhcmc7Ci0rCX0KLSsKLSsjIGVuZGlmCi0gI2VuZGlmCi0gCi0gc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NsX3Nlc3Npb25faGFzaChjb25zdCBTU0xfU0VTU0lPTiAqYSkKLUBAIC0xNjY3LDYgKzE3OTMsMTAgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQotIAlyZXQtPnRsc2V4dF9zdGF0dXNfY2IgPSAwOwotIAlyZXQtPnRsc2V4dF9zdGF0dXNfYXJnID0gTlVMTDsKLSAKLSsjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKwlyZXQtPm5leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IgPSAwOwotKwlyZXQtPm5leHRfcHJvdG9fc2VsZWN0X2NiID0gMDsKLSsjIGVuZGlmCi0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1BTSwotIAlyZXQtPnBza19pZGVudGl0eV9oaW50PU5VTEw7Ci0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvc3NsX2xvY2wuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljg0NjUxNzA0NSArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL3NzbC9zc2xfbG9jbC5oCTIwMTAtMTEtMjkgMTk6NTY6MDQuOTY1OTI4ODU1ICswMDAwCi1AQCAtOTY4LDYgKzk2OCw5IEBAIGludCBzc2wzX2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoU1NMICpzKTsKLSBpbnQgc3NsM19jaGVja19jZXJ0X2FuZF9hbGdvcml0aG0oU1NMICpzKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gaW50IHNzbDNfY2hlY2tfZmluaXNoZWQoU1NMICpzKTsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotK2ludCBzc2wzX3NlbmRfbmV4dF9wcm90byhTU0wgKnMpOwotKyMgZW5kaWYKLSAjZW5kaWYKLSAKLSBpbnQgZHRsczFfY2xpZW50X2hlbGxvKFNTTCAqcyk7Ci1AQCAtOTg2LDYgKzk4OSw5IEBAIGludCBzc2wzX2NoZWNrX2NsaWVudF9oZWxsbyhTU0wgKnMpOwotIGludCBzc2wzX2dldF9jbGllbnRfY2VydGlmaWNhdGUoU1NMICpzKTsKLSBpbnQgc3NsM19nZXRfY2xpZW50X2tleV9leGNoYW5nZShTU0wgKnMpOwotIGludCBzc2wzX2dldF9jZXJ0X3ZlcmlmeShTU0wgKnMpOwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLStpbnQgc3NsM19nZXRfbmV4dF9wcm90byhTU0wgKnMpOwotKyNlbmRpZgotIAotIGludCBkdGxzMV9zZW5kX2hlbGxvX3JlcXVlc3QoU1NMICpzKTsKLSBpbnQgZHRsczFfc2VuZF9zZXJ2ZXJfaGVsbG8oU1NMICpzKTsKLS0tLSBvcGVuc3NsLTEuMC4wYi5vcmlnL3NzbC90MV9saWIuYwkyMDEwLTExLTE2IDEzOjI2OjI0LjAwMDAwMDAwMCArMDAwMAotKysrIG9wZW5zc2wtMS4wLjBiL3NzbC90MV9saWIuYwkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTQ5NCw2ICs0OTQsMTggQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9jbGllbnRoZWxsb190bHNleAotIAkJCWkyZF9YNTA5X0VYVEVOU0lPTlMocy0+dGxzZXh0X29jc3BfZXh0cywgJnJldCk7Ci0gCQl9Ci0gCi0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKwlpZiAocy0+Y3R4LT5uZXh0X3Byb3RvX3NlbGVjdF9jYiAmJiAhcy0+czMtPnRtcC5maW5pc2hfbWRfbGVuKQotKwkJewotKwkJLyogVGhlIGNsaWVudCBhZHZlcnRpc2VzIGFuIGVtdHB5IGV4dGVuc2lvbiB0byBpbmRpY2F0ZSBpdHMKLSsJCSAqIHN1cHBvcnQgZm9yIE5leHQgUHJvdG9jb2wgTmVnb3RpYXRpb24gKi8KLSsJCWlmIChsaW1pdCAtIHJldCAtIDQgPCAwKQotKwkJCXJldHVybiBOVUxMOwotKwkJczJuKFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnLHJldCk7Ci0rCQlzMm4oMCxyZXQpOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGV4dGRhdGFsZW4gPSByZXQtcC0yKT09IDApIAotIAkJcmV0dXJuIHA7Ci0gCi1AQCAtNTA1LDYgKzUxNyw5IEBAIHVuc2lnbmVkIGNoYXIgKnNzbF9hZGRfc2VydmVyaGVsbG9fdGxzZXgKLSAJewotIAlpbnQgZXh0ZGF0YWxlbj0wOwotIAl1bnNpZ25lZCBjaGFyICpyZXQgPSBwOwotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJaW50IG5leHRfcHJvdG9fbmVnX3NlZW47Ci0rI2VuZGlmCi0gCi0gCS8qIGRvbid0IGFkZCBleHRlbnNpb25zIGZvciBTU0x2MywgdW5sZXNzIGRvaW5nIHNlY3VyZSByZW5lZ290aWF0aW9uICovCi0gCWlmIChzLT52ZXJzaW9uID09IFNTTDNfVkVSU0lPTiAmJiAhcy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nKQotQEAgLTYxOCw2ICs2MzMsMjggQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAotIAotIAkJfQotIAotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsJbmV4dF9wcm90b19uZWdfc2VlbiA9IHMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuOwotKwlzLT5zMy0+bmV4dF9wcm90b19uZWdfc2VlbiA9IDA7Ci0rCWlmIChuZXh0X3Byb3RvX25lZ19zZWVuICYmIHMtPmN0eC0+bmV4dF9wcm90b3NfYWR2ZXJ0aXNlZF9jYikKLSsJCXsKLSsJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5wYTsKLSsJCXVuc2lnbmVkIGludCBucGFsZW47Ci0rCQlpbnQgcjsKLSsKLSsJCXIgPSBzLT5jdHgtPm5leHRfcHJvdG9zX2FkdmVydGlzZWRfY2IocywgJm5wYSwgJm5wYWxlbiwgcy0+Y3R4LT5uZXh0X3Byb3Rvc19hZHZlcnRpc2VkX2NiX2FyZyk7Ci0rCQlpZiAociA9PSBTU0xfVExTRVhUX0VSUl9PSykKLSsJCQl7Ci0rCQkJaWYgKChsb25nKShsaW1pdCAtIHJldCAtIDQgLSBucGFsZW4pIDwgMCkgcmV0dXJuIE5VTEw7Ci0rCQkJczJuKFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnLHJldCk7Ci0rCQkJczJuKG5wYWxlbixyZXQpOwotKwkJCW1lbWNweShyZXQsIG5wYSwgbnBhbGVuKTsKLSsJCQlyZXQgKz0gbnBhbGVuOwotKwkJCXMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuID0gMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoZXh0ZGF0YWxlbiA9IHJldC1wLTIpPT0gMCkgCi0gCQlyZXR1cm4gcDsKLSAKLUBAIC05ODIsNiArMTAxOSwyOCBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJCWVsc2UKLSAJCQkJCXMtPnRsc2V4dF9zdGF0dXNfdHlwZSA9IC0xOwotIAkJCX0KLSsjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCi0rCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnICYmCi0rICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnMzLT50bXAuZmluaXNoX21kX2xlbiA9PSAwKQotKwkJCXsKLSsJCQkvKiBXZSBzaG91bGRuJ3QgYWNjZXB0IHRoaXMgZXh0ZW5zaW9uIG9uIGEKLSsJCQkgKiByZW5lZ290aWF0aW9uLgotKwkJCSAqCi0rCQkJICogcy0+bmV3X3Nlc3Npb24gd2lsbCBiZSBzZXQgb24gcmVuZWdvdGlhdGlvbiwgYnV0IHdlCi0rCQkJICogcHJvYmFibHkgc2hvdWxkbid0IHJlbHkgdGhhdCBpdCBjb3VsZG4ndCBiZSBzZXQgb24KLSsJCQkgKiB0aGUgaW5pdGlhbCByZW5lZ290YXRpb24gdG9vIGluIGNlcnRhaW4gY2FzZXMgKHdoZW4KLSsJCQkgKiB0aGVyZSdzIHNvbWUgb3RoZXIgcmVhc29uIHRvIGRpc2FsbG93IHJlc3VtaW5nIGFuCi0rCQkJICogZWFybGllciBzZXNzaW9uIC0tIHRoZSBjdXJyZW50IGNvZGUgd29uJ3QgYmUgZG9pbmcKLSsJCQkgKiBhbnl0aGluZyBsaWtlIHRoYXQsIGJ1dCB0aGlzIG1pZ2h0IGNoYW5nZSkuCi0rCi0rCQkJICogQSB2YWxpZCBzaWduIHRoYXQgdGhlcmUncyBiZWVuIGEgcHJldmlvdXMgaGFuZHNoYWtlCi0rCQkJICogaW4gdGhpcyBjb25uZWN0aW9uIGlzIGlmIHMtPnMzLT50bXAuZmluaXNoX21kX2xlbiA+Ci0rCQkJICogMC4gIChXZSBhcmUgdGFsa2luZyBhYm91dCBhIGNoZWNrIHRoYXQgd2lsbCBoYXBwZW4KLSsJCQkgKiBpbiB0aGUgSGVsbG8gcHJvdG9jb2wgcm91bmQsIHdlbGwgYmVmb3JlIGEgbmV3Ci0rCQkJICogRmluaXNoZWQgbWVzc2FnZSBjb3VsZCBoYXZlIGJlZW4gY29tcHV0ZWQuKSAqLwotKwkJCXMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuID0gMTsKLSsJCQl9Ci0rI2VuZGlmCi0gCi0gCQkvKiBzZXNzaW9uIHRpY2tldCBwcm9jZXNzZWQgZWFybGllciAqLwotIAkJZGF0YSs9c2l6ZTsKLUBAIC0xMDA1LDYgKzEwNjQsMjYgQEAgaW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAlyZXR1cm4gMTsKLSAJfQotIAotKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLSsvKiBzc2xfbmV4dF9wcm90b192YWxpZGF0ZSB2YWxpZGF0ZXMgYSBOZXh0IFByb3RvY29sIE5lZ290aWF0aW9uIGJsb2NrLiBObwotKyAqIGVsZW1lbnRzIG9mIHplcm8gbGVuZ3RoIGFyZSBhbGxvd2VkIGFuZCB0aGUgc2V0IG9mIGVsZW1lbnRzIG11c3QgZXhhY3RseSBmaWxsCi0rICogdGhlIGxlbmd0aCBvZiB0aGUgYmxvY2suICovCi0rc3RhdGljIGludCBzc2xfbmV4dF9wcm90b192YWxpZGF0ZSh1bnNpZ25lZCBjaGFyICpkLCB1bnNpZ25lZCBsZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IG9mZiA9IDA7Ci0rCi0rCXdoaWxlIChvZmYgPCBsZW4pCi0rCQl7Ci0rCQlpZiAoZFtvZmZdID09IDApCi0rCQkJcmV0dXJuIDA7Ci0rCQlvZmYgKz0gZFtvZmZdOwotKwkJb2ZmKys7Ci0rCQl9Ci0rCi0rCXJldHVybiBvZmYgPT0gbGVuOwotKwl9Ci0rI2VuZGlmCi0rCi0gaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICoqcCwgdW5zaWduZWQgY2hhciAqZCwgaW50IG4sIGludCAqYWwpCi0gCXsKLSAJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwotQEAgLTExMzksNiArMTIxOCwzOSBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJLyogU2V0IGZsYWcgdG8gZXhwZWN0IENlcnRpZmljYXRlU3RhdHVzIG1lc3NhZ2UgKi8KLSAJCQlzLT50bHNleHRfc3RhdHVzX2V4cGVjdGVkID0gMTsKLSAJCQl9Ci0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9uZXh0X3Byb3RvX25lZykKLSsJCQl7Ci0rCQkJdW5zaWduZWQgY2hhciAqc2VsZWN0ZWQ7Ci0rCQkJdW5zaWduZWQgY2hhciBzZWxlY3RlZF9sZW47Ci0rCi0rCQkJLyogV2UgbXVzdCBoYXZlIHJlcXVlc3RlZCBpdC4gKi8KLSsJCQlpZiAoKHMtPmN0eC0+bmV4dF9wcm90b19zZWxlY3RfY2IgPT0gTlVMTCkpCi0rCQkJCXsKLSsJCQkJKmFsID0gVExTMV9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT047Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJLyogVGhlIGRhdGEgbXVzdCBiZSB2YWxpZCAqLwotKwkJCWlmICghc3NsX25leHRfcHJvdG9fdmFsaWRhdGUoZGF0YSwgc2l6ZSkpCi0rCQkJCXsKLSsJCQkJKmFsID0gVExTMV9BRF9ERUNPREVfRVJST1I7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJaWYgKHMtPmN0eC0+bmV4dF9wcm90b19zZWxlY3RfY2IocywgJnNlbGVjdGVkLCAmc2VsZWN0ZWRfbGVuLCBkYXRhLCBzaXplLCBzLT5jdHgtPm5leHRfcHJvdG9fc2VsZWN0X2NiX2FyZykgIT0gU1NMX1RMU0VYVF9FUlJfT0spCi0rCQkJCXsKLSsJCQkJKmFsID0gVExTMV9BRF9JTlRFUk5BTF9FUlJPUjsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQlzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQgPSBPUEVOU1NMX21hbGxvYyhzZWxlY3RlZF9sZW4pOwotKwkJCWlmICghcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkKQotKwkJCQl7Ci0rCQkJCSphbCA9IFRMUzFfQURfSU5URVJOQUxfRVJST1I7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJbWVtY3B5KHMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZCwgc2VsZWN0ZWQsIHNlbGVjdGVkX2xlbik7Ci0rCQkJcy0+bmV4dF9wcm90b19uZWdvdGlhdGVkX2xlbiA9IHNlbGVjdGVkX2xlbjsKLSsJCQl9Ci0rI2VuZGlmCi0gCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlKQotIAkJCXsKLSAJCQlpZighc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCBkYXRhLCBzaXplLCBhbCkpCi0tLS0gb3BlbnNzbC0xLjAuMGIub3JpZy9zc2wvdGxzMS5oCTIwMDktMTEtMTEgMTQ6NTE6MjkuMDAwMDAwMDAwICswMDAwCi0rKysgb3BlbnNzbC0xLjAuMGIvc3NsL3RsczEuaAkyMDEwLTExLTI5IDE5OjU2OjA0Ljk2NTkyODg1NSArMDAwMAotQEAgLTIwNCw2ICsyMDQsMTEgQEAgZXh0ZXJuICJDIiB7Ci0gLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICovCi0gI2RlZmluZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAgICAgMHhmZjAxCi0gCi0rI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotKy8qIFRoaXMgaXMgbm90IGFuIElBTkEgZGVmaW5lZCBleHRlbnNpb24gbnVtYmVyICovCi0rI2RlZmluZSBUTFNFWFRfVFlQRV9uZXh0X3Byb3RvX25lZwkJMTMxNzIKLSsjZW5kaWYKLSsKLSAvKiBOYW1lVHlwZSB2YWx1ZSBmcm9tIFJGQyAzNTQ2ICovCi0gI2RlZmluZSBUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lIDAKLSAvKiBzdGF0dXMgcmVxdWVzdCB2YWx1ZSBmcm9tIFJGQyAzNTQ2ICovCmRpZmYgLS1naXQgYS9wYXRjaGVzL3Byb2dzLnBhdGNoIGIvcGF0Y2hlcy9wcm9ncy5wYXRjaAppbmRleCAxNmZkOWIwLi5mMDg3OWFlIDEwMDY0NAotLS0gYS9wYXRjaGVzL3Byb2dzLnBhdGNoCisrKyBiL3BhdGNoZXMvcHJvZ3MucGF0Y2gKQEAgLTIwLDggKzIwLDggQEAKICsjaWYgMCAvKiBBTkRST0lEICovCiAgCXtGVU5DX1RZUEVfR0VORVJBTCwidHMiLHRzX21haW59LAogKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19NRDIKLSAJe0ZVTkNfVFlQRV9NRCwibWQyIixkZ3N0X21haW59LAorICNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKyAJe0ZVTkNfVFlQRV9HRU5FUkFMLCJzcnAiLHNycF9tYWlufSwKICAjZW5kaWYKIC0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvYXBwcy9zcGVlZC5jCTIwMTAtMDMtMDMgMTE6NTY6MTcuMDAwMDAwMDAwIC0wODAwCiArKysgb3BlbnNzbC0xLjAuMC9hcHBzL3NwZWVkLmMJMjAxMC0wNS0xOCAxNDowNTo1Ny4wMDAwMDAwMDAgLTA3MDAKZGlmZiAtLWdpdCBhL3BhdGNoZXMvc3NsX0FuZHJvaWQubWsgYi9wYXRjaGVzL3NzbF9BbmRyb2lkLm1rCmluZGV4IDQwNjQxYTMuLjYxOWFlZGUgMTAwNjQ0Ci0tLSBhL3BhdGNoZXMvc3NsX0FuZHJvaWQubWsKKysrIGIvcGF0Y2hlcy9zc2xfQW5kcm9pZC5tawpAQCAtNiw0MyArNiw0OSBAQAogCWV4dGVybmFsL29wZW5zc2wvY3J5cHRvCiAKIGxvY2FsX3NyY19maWxlczo9IFwKLQlzMl9tZXRoLmMgXAotCXMyX3NydnIuYyBcCi0JczJfY2xudC5jIFwKLQlzMl9saWIuYyBcCi0JczJfZW5jLmMgXAotCXMyX3BrdC5jIFwKLQlzM19tZXRoLmMgXAotCXMzX3NydnIuYyBcCi0JczNfY2xudC5jIFwKLQlzM19saWIuYyBcCi0JczNfZW5jLmMgXAotCXMzX3BrdC5jIFwKLQlzM19ib3RoLmMgXAotCXMyM19tZXRoLmMgXAotCXMyM19zcnZyLmMgXAorCWJpb19zc2wuYyBcCisJZDFfYm90aC5jIFwKKwlkMV9lbmMuYyBcCisJZDFfbGliLmMgXAorCWQxX3BrdC5jIFwKKwlkMV9zcnRwLmMgXAorCWtzc2wuYyBcCiAJczIzX2NsbnQuYyBcCiAJczIzX2xpYi5jIFwKKwlzMjNfbWV0aC5jIFwKIAlzMjNfcGt0LmMgXAotCXQxX21ldGguYyBcCi0JdDFfc3J2ci5jIFwKLQl0MV9jbG50LmMgXAotCXQxX2xpYi5jIFwKLQl0MV9lbmMuYyBcCi0JdDFfcmVuZWcuYyBcCi0Jc3NsX2xpYi5jIFwKLQlzc2xfZXJyMi5jIFwKLQlzc2xfY2VydC5jIFwKLQlzc2xfc2Vzcy5jIFwKLQlzc2xfY2lwaC5jIFwKLQlzc2xfc3RhdC5jIFwKLQlzc2xfcnNhLmMgXAotCXNzbF9hc24xLmMgXAotCXNzbF90eHQuYyBcCisJczIzX3NydnIuYyBcCisJczJfY2xudC5jIFwKKwlzMl9lbmMuYyBcCisJczJfbGliLmMgXAorCXMyX21ldGguYyBcCisJczJfcGt0LmMgXAorCXMyX3NydnIuYyBcCisJczNfYm90aC5jIFwKKwlzM19jbG50LmMgXAorCXMzX2VuYy5jIFwKKwlzM19saWIuYyBcCisJczNfbWV0aC5jIFwKKwlzM19wa3QuYyBcCisJczNfc3J2ci5jIFwKIAlzc2xfYWxncy5jIFwKLQliaW9fc3NsLmMgXAorCXNzbF9hc24xLmMgXAorCXNzbF9jZXJ0LmMgXAorCXNzbF9jaXBoLmMgXAogCXNzbF9lcnIuYyBcCi0Ja3NzbC5jCisJc3NsX2VycjIuYyBcCisJc3NsX2xpYi5jIFwKKwlzc2xfcnNhLmMgXAorCXNzbF9zZXNzLmMgXAorCXNzbF9zdGF0LmMgXAorCXNzbF90eHQuYyBcCisJdDFfY2xudC5jIFwKKwl0MV9lbmMuYyBcCisJdDFfbGliLmMgXAorCXQxX21ldGguYyBcCisJdDFfcmVuZWcuYyBcCisJdDFfc3J2ci5jIFwKKwl0bHNfc3JwLmMKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHRhcmdldCBzdGF0aWMgbGlicmFyeQpkaWZmIC0tZ2l0IGEvc3NsL0FuZHJvaWQubWsgYi9zc2wvQW5kcm9pZC5tawppbmRleCA0MDY0MWEzLi42MTlhZWRlIDEwMDY0NAotLS0gYS9zc2wvQW5kcm9pZC5taworKysgYi9zc2wvQW5kcm9pZC5tawpAQCAtNiw0MyArNiw0OSBAQAogCWV4dGVybmFsL29wZW5zc2wvY3J5cHRvCiAKIGxvY2FsX3NyY19maWxlczo9IFwKLQlzMl9tZXRoLmMgXAotCXMyX3NydnIuYyBcCi0JczJfY2xudC5jIFwKLQlzMl9saWIuYyBcCi0JczJfZW5jLmMgXAotCXMyX3BrdC5jIFwKLQlzM19tZXRoLmMgXAotCXMzX3NydnIuYyBcCi0JczNfY2xudC5jIFwKLQlzM19saWIuYyBcCi0JczNfZW5jLmMgXAotCXMzX3BrdC5jIFwKLQlzM19ib3RoLmMgXAotCXMyM19tZXRoLmMgXAotCXMyM19zcnZyLmMgXAorCWJpb19zc2wuYyBcCisJZDFfYm90aC5jIFwKKwlkMV9lbmMuYyBcCisJZDFfbGliLmMgXAorCWQxX3BrdC5jIFwKKwlkMV9zcnRwLmMgXAorCWtzc2wuYyBcCiAJczIzX2NsbnQuYyBcCiAJczIzX2xpYi5jIFwKKwlzMjNfbWV0aC5jIFwKIAlzMjNfcGt0LmMgXAotCXQxX21ldGguYyBcCi0JdDFfc3J2ci5jIFwKLQl0MV9jbG50LmMgXAotCXQxX2xpYi5jIFwKLQl0MV9lbmMuYyBcCi0JdDFfcmVuZWcuYyBcCi0Jc3NsX2xpYi5jIFwKLQlzc2xfZXJyMi5jIFwKLQlzc2xfY2VydC5jIFwKLQlzc2xfc2Vzcy5jIFwKLQlzc2xfY2lwaC5jIFwKLQlzc2xfc3RhdC5jIFwKLQlzc2xfcnNhLmMgXAotCXNzbF9hc24xLmMgXAotCXNzbF90eHQuYyBcCisJczIzX3NydnIuYyBcCisJczJfY2xudC5jIFwKKwlzMl9lbmMuYyBcCisJczJfbGliLmMgXAorCXMyX21ldGguYyBcCisJczJfcGt0LmMgXAorCXMyX3NydnIuYyBcCisJczNfYm90aC5jIFwKKwlzM19jbG50LmMgXAorCXMzX2VuYy5jIFwKKwlzM19saWIuYyBcCisJczNfbWV0aC5jIFwKKwlzM19wa3QuYyBcCisJczNfc3J2ci5jIFwKIAlzc2xfYWxncy5jIFwKLQliaW9fc3NsLmMgXAorCXNzbF9hc24xLmMgXAorCXNzbF9jZXJ0LmMgXAorCXNzbF9jaXBoLmMgXAogCXNzbF9lcnIuYyBcCi0Ja3NzbC5jCisJc3NsX2VycjIuYyBcCisJc3NsX2xpYi5jIFwKKwlzc2xfcnNhLmMgXAorCXNzbF9zZXNzLmMgXAorCXNzbF9zdGF0LmMgXAorCXNzbF90eHQuYyBcCisJdDFfY2xudC5jIFwKKwl0MV9lbmMuYyBcCisJdDFfbGliLmMgXAorCXQxX21ldGguYyBcCisJdDFfcmVuZWcuYyBcCisJdDFfc3J2ci5jIFwKKwl0bHNfc3JwLmMKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHRhcmdldCBzdGF0aWMgbGlicmFyeQpkaWZmIC0tZ2l0IGEvc3NsL01ha2VmaWxlIGIvc3NsL01ha2VmaWxlCmluZGV4IDJiMjc1ZmEuLmZlYWYzZTMgMTAwNjQ0Ci0tLSBhL3NzbC9NYWtlZmlsZQorKysgYi9zc2wvTWFrZWZpbGUKQEAgLTI2LDI2ICsyNiwyNiBAQAogCXMyM19tZXRoLmMgczIzX3NydnIuYyBzMjNfY2xudC5jIHMyM19saWIuYyAgICAgICAgICBzMjNfcGt0LmMgXAogCXQxX21ldGguYyAgIHQxX3NydnIuYyB0MV9jbG50LmMgIHQxX2xpYi5jICB0MV9lbmMuYyBcCiAJZDFfbWV0aC5jICAgZDFfc3J2ci5jIGQxX2NsbnQuYyAgZDFfbGliLmMgIGQxX3BrdC5jIFwKLQlkMV9ib3RoLmMgZDFfZW5jLmMgXAorCWQxX2JvdGguYyBkMV9lbmMuYyBkMV9zcnRwLmMgXAogCXNzbF9saWIuYyBzc2xfZXJyMi5jIHNzbF9jZXJ0LmMgc3NsX3Nlc3MuYyBcCiAJc3NsX2NpcGguYyBzc2xfc3RhdC5jIHNzbF9yc2EuYyBcCiAJc3NsX2FzbjEuYyBzc2xfdHh0LmMgc3NsX2FsZ3MuYyBcCi0JYmlvX3NzbC5jIHNzbF9lcnIuYyBrc3NsLmMgdDFfcmVuZWcuYworCWJpb19zc2wuYyBzc2xfZXJyLmMga3NzbC5jIHRsc19zcnAuYyB0MV9yZW5lZy5jCiBMSUJPQko9IFwKIAlzMl9tZXRoLm8gIHMyX3NydnIubyAgczJfY2xudC5vICBzMl9saWIubyAgczJfZW5jLm8gczJfcGt0Lm8gXAogCXMzX21ldGgubyAgczNfc3J2ci5vICBzM19jbG50Lm8gIHMzX2xpYi5vICBzM19lbmMubyBzM19wa3QubyBzM19ib3RoLm8gXAogCXMyM19tZXRoLm8gczIzX3NydnIubyBzMjNfY2xudC5vIHMyM19saWIubyAgICAgICAgICBzMjNfcGt0Lm8gXAogCXQxX21ldGgubyAgIHQxX3NydnIubyB0MV9jbG50Lm8gIHQxX2xpYi5vICB0MV9lbmMubyBcCiAJZDFfbWV0aC5vICAgZDFfc3J2ci5vIGQxX2NsbnQubyAgZDFfbGliLm8gIGQxX3BrdC5vIFwKLQlkMV9ib3RoLm8gZDFfZW5jLm8gXAorCWQxX2JvdGgubyBkMV9lbmMubyBkMV9zcnRwLm9cCiAJc3NsX2xpYi5vIHNzbF9lcnIyLm8gc3NsX2NlcnQubyBzc2xfc2Vzcy5vIFwKIAlzc2xfY2lwaC5vIHNzbF9zdGF0Lm8gc3NsX3JzYS5vIFwKIAlzc2xfYXNuMS5vIHNzbF90eHQubyBzc2xfYWxncy5vIFwKLQliaW9fc3NsLm8gc3NsX2Vyci5vIGtzc2wubyB0MV9yZW5lZy5vCisJYmlvX3NzbC5vIHNzbF9lcnIubyBrc3NsLm8gdGxzX3NycC5vIHQxX3JlbmVnLm8KIAogU1JDPSAkKExJQlNSQykKIAotRVhIRUFERVI9IHNzbC5oIHNzbDIuaCBzc2wzLmggc3NsMjMuaCB0bHMxLmggZHRsczEuaCBrc3NsLmgKK0VYSEVBREVSPSBzc2wuaCBzc2wyLmggc3NsMy5oIHNzbDIzLmggdGxzMS5oIGR0bHMxLmgga3NzbC5oIHNydHAuaAogSEVBREVSPQkkKEVYSEVBREVSKSBzc2xfbG9jbC5oIGtzc2xfbGNsLmgKIAogQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKQEAgLTExOCwxMSArMTE4LDExIEBACiBiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCiBiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLWJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWJpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1iaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGJpb19zc2wuYworYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitiaW9fc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK2Jpb19zc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorYmlvX3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGJpb19zc2wuYwogZDFfYm90aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIGQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIGQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtMTM3LDEyICsxMzcsMTIgQEAKIGQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAogZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1kMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLWQxX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9ib3RoLmMKLWQxX2JvdGgubzogc3NsX2xvY2wuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitkMV9ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorZDFfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9ib3RoLmMgc3NsX2xvY2wuaAogZDFfY2xudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCiBkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC0xNTksMTEgKzE1OSwxMiBAQAogZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIGQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1kMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9jbG50LmMga3NzbF9sY2wuaCBzc2xfbG9jbC5oCitkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK2QxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorZDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitkMV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfY2xudC5jCitkMV9jbG50Lm86IGtzc2xfbGNsLmggc3NsX2xvY2wuaAogZDFfZW5jLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtMTc5LDExICsxODAsMTIgQEAKIGQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIGQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLWQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX2VuYy5jIHNzbF9sb2NsLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK2QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitkMV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorZDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfZW5jLmMKK2QxX2VuYy5vOiBzc2xfbG9jbC5oCiBkMV9saWIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIGQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC0xOTgsMTEgKzIwMCwxMiBAQAogZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIGQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1kMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfbGliLmMgc3NsX2xvY2wuaAorZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorZDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK2QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitkMV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9saWIuYworZDFfbGliLm86IHNzbF9sb2NsLmgKIGQxX21ldGgubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTIxNywxMSArMjIwLDEyIEBACiBkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIGQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLWQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1kMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX21ldGguYyBzc2xfbG9jbC5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK2QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorZDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitkMV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggZDFfbWV0aC5jCitkMV9tZXRoLm86IHNzbF9sb2NsLmgKIGQxX3BrdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIGQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTIzNiwxMiArMjQwLDMyIEBACiBkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCiBkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1kMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLWQxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX3BrdC5jCi1kMV9wa3Qubzogc3NsX2xvY2wuaAorZDFfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oCitkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitkMV9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK2QxX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9wa3QuYyBzc2xfbG9jbC5oCitkMV9zcnRwLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9kdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKK2QxX3NydHAubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9rc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKK2QxX3NydHAubzogLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK2QxX3NydHAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitkMV9zcnRwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK2QxX3NydHAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorZDFfc3J0cC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX3NydHAuYworZDFfc3J0cC5vOiBzcnRwLmggc3NsX2xvY2wuaAogZDFfc3J2ci5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIGQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCiBkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC0yNTgsMTEgKzI4MiwxMiBAQAogZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIGQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIGQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1kMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBkMV9zcnZyLmMgc3NsX2xvY2wuaAorZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitkMV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK2QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorZDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGQxX3NydnIuYworZDFfc3J2ci5vOiBzc2xfbG9jbC5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHRsczEuaApAQCAtMjc2LDExICszMDEsMTIgQEAKIGtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKIGtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCiBrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAota3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLWtzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbC5jIGtzc2xfbGNsLmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAora3NzbC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitrc3NsLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK2tzc2wubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBrc3NsLmMKK2tzc2wubzoga3NzbF9sY2wuaAogczIzX2NsbnQubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtMjk1LDEyICszMjEsMTIgQEAKIHMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCiBzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19jbG50LmMKLXMyM19jbG50Lm86IHNzbF9sb2NsLmgKK3MyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oCitzMjNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3MyM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczIzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX2NsbnQuYyBzc2xfbG9jbC5oCiBzMjNfbGliLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC0zMTUsMTEgKzM0MSwxMiBAQAogczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIHMyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMjNfbGliLmMgc3NsX2xvY2wuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzMjNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3MyM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorczIzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19saWIuYworczIzX2xpYi5vOiBzc2xfbG9jbC5oCiBzMjNfbWV0aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC0zMzQsMTEgKzM2MSwxMiBAQAogczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zMjNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXMyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19tZXRoLmMgc3NsX2xvY2wuaAorczIzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MyM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX21ldGguYworczIzX21ldGgubzogc3NsX2xvY2wuaAogczIzX3BrdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtMzUzLDExICszODEsMTIgQEAKIHMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXMyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX3BrdC5jIHNzbF9sb2NsLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorczIzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzMjNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MyM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMjNfcGt0LmMKK3MyM19wa3Qubzogc3NsX2xvY2wuaAogczIzX3NydnIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtMzcyLDEyICs0MDEsMTIgQEAKIHMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCiBzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyM19zcnZyLmMKLXMyM19zcnZyLm86IHNzbF9sb2NsLmgKK3MyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oCitzMjNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3MyM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczIzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczIzX3NydnIuYyBzc2xfbG9jbC5oCiBzMl9jbG50Lm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC0zOTIsMTIgKzQyMSwxMiBAQAogczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCiBzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczJfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX2NsbnQuYwotczJfY2xudC5vOiBzc2xfbG9jbC5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKK3MyX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzMl9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX2NsbnQuYyBzc2xfbG9jbC5oCiBzMl9lbmMubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHMyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC00MTIsMTEgKzQ0MSwxMiBAQAogczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfZW5jLmMgc3NsX2xvY2wuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorczJfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3MyX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzMl9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9lbmMuYworczJfZW5jLm86IHNzbF9sb2NsLmgKIHMyX2xpYi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTQzMSwxMiArNDYxLDEyIEBACiBzMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKIHMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIHMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfbGliLmMKLXMyX2xpYi5vOiBzc2xfbG9jbC5oCitzMl9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3MyX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczJfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX2xpYi5jIHNzbF9sb2NsLmgKIHMyX21ldGgubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTQ1MSwxMSArNDgxLDEyIEBACiBzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXMyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX21ldGguYyBzc2xfbG9jbC5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3MyX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorczJfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzMl9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczJfbWV0aC5jCitzMl9tZXRoLm86IHNzbF9sb2NsLmgKIHMyX3BrdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTQ3MCwxMSArNTAxLDEyIEBACiBzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIHMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXMyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9wa3QuYyBzc2xfbG9jbC5oCitzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzMl9wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorczJfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MyX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMyX3BrdC5jCitzMl9wa3Qubzogc3NsX2xvY2wuaAogczJfc3J2ci5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtNDg5LDEyICs1MjEsMTIgQEAKIHMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAogczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXMyX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9zcnZyLmMKLXMyX3NydnIubzogc3NsX2xvY2wuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzMl9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczJfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzMl9zcnZyLmMgc3NsX2xvY2wuaAogczNfYm90aC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtNTA5LDEyICs1NDEsMTIgQEAKIHMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAogczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1zM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXMzX2JvdGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzM19ib3RoLmMKLXMzX2JvdGgubzogc3NsX2xvY2wuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzM19ib3RoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczNfYm90aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzM19ib3RoLmMgc3NsX2xvY2wuaAogczNfY2xudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCiBzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC01MzEsMTIgKzU2MywxMiBAQAogczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCiBzM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCi1zM19jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGtzc2xfbGNsLmgKLXMzX2NsbnQubzogczNfY2xudC5jIHNzbF9sb2NsLmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorczNfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3MzX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaCBzM19jbG50LmMgc3NsX2xvY2wuaAogczNfZW5jLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtNTUxLDEyICs1ODMsMTIgQEAKIHMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLXMzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzM19lbmMuYwotczNfZW5jLm86IHNzbF9sb2NsLmgKK3MzX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorczNfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCitzM19lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggczNfZW5jLmMgc3NsX2xvY2wuaAogczNfbGliLm86IC4uL2NyeXB0by9lYy9lY19sY2wuaCAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCkBAIC01NzMsMTEgKzYwNSwxMiBAQAogczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaCBzM19saWIuYyBzc2xfbG9jbC5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3MzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzM19saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorczNfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3MzX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIGtzc2xfbGNsLmgKK3MzX2xpYi5vOiBzM19saWIuYyBzc2xfbG9jbC5oCiBzM19tZXRoLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC01OTIsMTEgKzYyNSwxMiBAQAogczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIHMzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzM19tZXRoLmMgc3NsX2xvY2wuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzM19tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3MzX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorczNfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHMzX21ldGguYworczNfbWV0aC5vOiBzc2xfbG9jbC5oCiBzM19wa3QubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC02MDksOCArNjQzLDkgQEAKIHMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAogczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaAogczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLXMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi1zM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCitzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorczNfcGt0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKIHMzX3BrdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCiBzM19wa3QubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKQEAgLTYzMiwxMiArNjY3LDEyIEBACiBzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKIHMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXMzX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmgga3NzbF9sY2wuaAotczNfc3J2ci5vOiBzM19zcnZyLmMgc3NsX2xvY2wuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCitzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzM19zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorczNfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBrc3NsX2xjbC5oIHMzX3NydnIuYyBzc2xfbG9jbC5oCiBzc2xfYWxncy5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC02NTIsMTEgKzY4NywxMiBAQAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zc2xfYWxncy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXNzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9hbGdzLmMgc3NsX2xvY2wuaAorc3NsX2FsZ3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3NzbF9hbGdzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2FsZ3MuYworc3NsX2FsZ3Mubzogc3NsX2xvY2wuaAogc3NsX2FzbjEubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmgKIHNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKIHNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCkBAIC02NzEsMTIgKzcwNywxMiBAQAogc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKIHNzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfYXNuMS5jCi1zc2xfYXNuMS5vOiBzc2xfbG9jbC5oCitzc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorc3NsX2FzbjEubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzc2xfYXNuMS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3NzbF9hc24xLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9hc24xLmMgc3NsX2xvY2wuaAogc3NsX2NlcnQubzogLi4vY3J5cHRvL29fZGlyLmggLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKIHNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi9pbmNsdWRlL29wZW5zc2wvYm4uaAogc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKQEAgLTY5MywxMiArNzI5LDEyIEBACiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotc3NsX2NlcnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oCi1zc2xfY2VydC5vOiBzc2xfY2VydC5jIHNzbF9sb2NsLmgKK3NzbF9jZXJ0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCitzc2xfY2VydC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOXYzLmggc3NsX2NlcnQuYyBzc2xfbG9jbC5oCiBzc2xfY2lwaC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC03MTMsMTIgKzc0OSwxMiBAQAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKIHNzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAotc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfY2lwaC5jCi1zc2xfY2lwaC5vOiBzc2xfbG9jbC5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAorc3NsX2NpcGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3NzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKK3NzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCitzc2xfY2lwaC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3NzbF9jaXBoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9jaXBoLmMgc3NsX2xvY2wuaAogc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKQEAgLTczMiwxMSArNzY4LDExIEBACiBzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCAuLi9pbmNsdWRlL29wZW5zc2wvcGVtMi5oCiBzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAogc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9lcnIuYworc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCitzc2xfZXJyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3NzbF9lcnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorc3NsX2Vyci5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9lcnIuYwogc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKQEAgLTc1MCwxMSArNzg2LDExIEBACiBzc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAogc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCiBzc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfZXJyMi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2VycjIuYworc3NsX2VycjIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3NzbF9lcnIyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2VycjIuYwogc3NsX2xpYi5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKQEAgLTc3MSwxMiArODA3LDEzIEBACiBzc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKIHNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi1zc2xfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKLXNzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGtzc2xfbGNsLmggc3NsX2xpYi5jIHNzbF9sb2NsLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorc3NsX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3NzbF9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDl2My5oIGtzc2xfbGNsLmgKK3NzbF9saWIubzogc3NsX2xpYi5jIHNzbF9sb2NsLmgKIHNzbF9yc2EubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiBzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTc5MSwxMSArODI4LDEyIEBACiBzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi1zc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmggc3NsX3JzYS5jCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3NzbF9yc2EubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorc3NsX3JzYS5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCitzc2xfcnNhLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaAorc3NsX3JzYS5vOiBzc2xfcnNhLmMKIHNzbF9zZXNzLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTgxMSwxMSArODQ5LDEyIEBACiBzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmgKIHNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi1zc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAotc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLXNzbF9zZXNzLm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCBzc2xfc2Vzcy5jCitzc2xfc2Vzcy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3J0cC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaAorc3NsX3Nlc3MubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCitzc2xfc2Vzcy5vOiBzc2xfc2Vzcy5jCiBzc2xfc3RhdC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiBzc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oCkBAIC04MzAsMTEgKzg2OSwxMiBAQAogc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAogc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKLXNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi1zc2xfc3RhdC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXNzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmggc3NsX3N0YXQuYworc3NsX3N0YXQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3NzbF9zdGF0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaAorc3NsX3N0YXQubzogc3NsX3N0YXQuYwogc3NsX3R4dC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtODQ5LDExICs4ODksMTIgQEAKIHNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiBzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXNzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCBzc2xfdHh0LmMKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAorc3NsX3R4dC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitzc2xfdHh0Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3NzbF90eHQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCitzc2xfdHh0Lm86IHNzbF90eHQuYwogdDFfY2xudC5vOiAuLi9lX29zLmggLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jb21wLmgKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtODY4LDEyICs5MDksMTIgQEAKIHQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAogdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAotdDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi10MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKLXQxX2NsbnQubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCi10MV9jbG50Lm86IHQxX2NsbnQuYwordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCit0MV9jbG50Lm86IC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAordDFfY2xudC5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX2NsbnQuYwogdDFfZW5jLm86IC4uL2Vfb3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAogdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiB0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtODg3LDggKzkyOCw5IEBACiB0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKIHQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcGVtLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaAogdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaAotdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLXQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKK3QxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCit0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKIHQxX2VuYy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCiB0MV9lbmMubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAogdDFfZW5jLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKQEAgLTkwNyw4ICs5NDksOSBAQAogdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oCiB0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLXQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCit0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKK3QxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCit0MV9saWIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKIHQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaAogdDFfbGliLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wzLmgKIHQxX2xpYi5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaApAQCAtOTI5LDExICs5NzIsMTIgQEAKIHQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbTIuaCAuLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAogdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvcHF1ZXVlLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCiB0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotdDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLXQxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCB0MV9tZXRoLmMKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NydHAuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsLmgKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaAordDFfbWV0aC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCit0MV9tZXRoLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC90bHMxLmgKK3QxX21ldGgubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oCit0MV9tZXRoLm86IHQxX21ldGguYwogdDFfcmVuZWcubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiB0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2NvbXAuaAogdDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaApAQCAtOTQ4LDExICs5OTIsMTIgQEAKIHQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wcXVldWUuaCAuLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKIHQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLXQxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMjMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotdDFfcmVuZWcubzogLi4vaW5jbHVkZS9vcGVuc3NsL3RsczEuaCAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi10MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCBzc2xfbG9jbC5oIHQxX3JlbmVnLmMKK3QxX3JlbmVnLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyMy5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3NsMy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCit0MV9yZW5lZy5vOiAuLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIHNzbF9sb2NsLmgKK3QxX3JlbmVnLm86IHQxX3JlbmVnLmMKIHQxX3NydnIubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oCiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgKQEAgLTk2Nyw5ICsxMDEyLDMwIEBACiB0MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmggLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKIHQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKIHQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmgKLXQxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaCAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotdDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oCi10MV9zcnZyLm86IC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaAotdDFfc3J2ci5vOiB0MV9zcnZyLmMKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAordDFfc3J2ci5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3QxX3NydnIubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCB0MV9zcnZyLmMKK3Rsc19zcnAubzogLi4vZV9vcy5oIC4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCit0bHNfc3JwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvY29tcC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vaW5jbHVkZS9vcGVuc3NsL2R0bHMxLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCit0bHNfc3JwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vaW5jbHVkZS9vcGVuc3NsL2tzc2wuaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCit0bHNfc3JwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BlbS5oIC4uL2luY2x1ZGUvb3BlbnNzbC9wZW0yLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vaW5jbHVkZS9vcGVuc3NsL3BxdWV1ZS5oCit0bHNfc3JwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCit0bHNfc3JwLm86IC4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NycC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zcnRwLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbC5oIC4uL2luY2x1ZGUvb3BlbnNzbC9zc2wyLmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDIzLmggLi4vaW5jbHVkZS9vcGVuc3NsL3NzbDMuaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAordGxzX3NycC5vOiAuLi9pbmNsdWRlL29wZW5zc2wvdGxzMS5oIC4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKK3Rsc19zcnAubzogLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5Lmggc3NsX2xvY2wuaCB0bHNfc3JwLmMKZGlmZiAtLWdpdCBhL3NzbC9kMV9ib3RoLmMgYi9zc2wvZDFfYm90aC5jCmluZGV4IDJmOTU4ODAuLmRlOGJhYjggMTAwNjQ0Ci0tLSBhL3NzbC9kMV9ib3RoLmMKKysrIGIvc3NsL2QxX2JvdGguYwpAQCAtMTA4NCw3ICsxMDg0LDExIEBACiAJCXJldHVybiBjb2RlOwogCQl9CiAKLQlpZiAoICEgU1NMX2luX2luaXQocykpICAvKiBkb25lLCBubyBuZWVkIHRvIHNlbmQgYSByZXRyYW5zbWl0ICovCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCWlmICghU1NMX2luX2luaXQocykgJiYgIXMtPnRsc2V4dF9oYl9wZW5kaW5nKSAgLyogZG9uZSwgbm8gbmVlZCB0byBzZW5kIGEgcmV0cmFuc21pdCAqLworI2Vsc2UKKwlpZiAoIVNTTF9pbl9pbml0KHMpKSAgLyogZG9uZSwgbm8gbmVlZCB0byBzZW5kIGEgcmV0cmFuc21pdCAqLworI2VuZGlmCiAJCXsKIAkJQklPX3NldF9mbGFncyhTU0xfZ2V0X3JiaW8ocyksIEJJT19GTEFHU19SRUFEKTsKIAkJcmV0dXJuIGNvZGU7CkBAIC0xNDE3LDMgKzE0MjEsMTcxIEBACiAKIAljY3NfaGRyLT50eXBlID0gKihkYXRhKyspOwogCX0KKworaW50IGR0bHMxX3NodXRkb3duKFNTTCAqcykKKwl7CisJaW50IHJldDsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfd2JpbyhzKSkgJiYKKwkgICAgIShzLT5zaHV0ZG93biAmIFNTTF9TRU5UX1NIVVRET1dOKSkKKwkJeworCQlyZXQgPSBCSU9fZGdyYW1fc2N0cF93YWl0X2Zvcl9kcnkoU1NMX2dldF93YmlvKHMpKTsKKwkJaWYgKHJldCA8IDApIHJldHVybiAtMTsKKworCQlpZiAocmV0ID09IDApCisJCQlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfU0FWRV9TSFVURE9XTiwgMSwgTlVMTCk7CisJCX0KKyNlbmRpZgorCXJldCA9IHNzbDNfc2h1dGRvd24ocyk7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCUJJT19jdHJsKFNTTF9nZXRfd2JpbyhzKSwgQklPX0NUUkxfREdSQU1fU0NUUF9TQVZFX1NIVVRET1dOLCAwLCBOVUxMKTsKKyNlbmRpZgorCXJldHVybiByZXQ7CisJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworaW50CitkdGxzMV9wcm9jZXNzX2hlYXJ0YmVhdChTU0wgKnMpCisJeworCXVuc2lnbmVkIGNoYXIgKnAgPSAmcy0+czMtPnJyZWMuZGF0YVswXSwgKnBsOworCXVuc2lnbmVkIHNob3J0IGhidHlwZTsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZDsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDE2OyAvKiBVc2UgbWluaW11bSBwYWRkaW5nICovCisKKwkvKiBSZWFkIHR5cGUgYW5kIHBheWxvYWQgbGVuZ3RoIGZpcnN0ICovCisJaGJ0eXBlID0gKnArKzsKKwluMnMocCwgcGF5bG9hZCk7CisJcGwgPSBwOworCisJaWYgKHMtPm1zZ19jYWxsYmFjaykKKwkJcy0+bXNnX2NhbGxiYWNrKDAsIHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAorCQkJJnMtPnMzLT5ycmVjLmRhdGFbMF0sIHMtPnMzLT5ycmVjLmxlbmd0aCwKKwkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOworCisJaWYgKGhidHlwZSA9PSBUTFMxX0hCX1JFUVVFU1QpCisJCXsKKwkJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqYnA7CisJCWludCByOworCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3BvbnNlLCBzaXplIGlzIDEgYnl0ZQorCQkgKiBtZXNzYWdlIHR5cGUsIHBsdXMgMiBieXRlcyBwYXlsb2FkIGxlbmd0aCwgcGx1cworCQkgKiBwYXlsb2FkLCBwbHVzIHBhZGRpbmcKKwkJICovCisJCWJ1ZmZlciA9IE9QRU5TU0xfbWFsbG9jKDEgKyAyICsgcGF5bG9hZCArIHBhZGRpbmcpOworCQlicCA9IGJ1ZmZlcjsKKworCQkvKiBFbnRlciByZXNwb25zZSB0eXBlLCBsZW5ndGggYW5kIGNvcHkgcGF5bG9hZCAqLworCQkqYnArKyA9IFRMUzFfSEJfUkVTUE9OU0U7CisJCXMybihwYXlsb2FkLCBicCk7CisJCW1lbWNweShicCwgcGwsIHBheWxvYWQpOworCQlicCArPSBwYXlsb2FkOworCQkvKiBSYW5kb20gcGFkZGluZyAqLworCQlSQU5EX3BzZXVkb19ieXRlcyhicCwgcGFkZGluZyk7CisKKwkJciA9IGR0bHMxX3dyaXRlX2J5dGVzKHMsIFRMUzFfUlRfSEVBUlRCRUFULCBidWZmZXIsIDMgKyBwYXlsb2FkICsgcGFkZGluZyk7CisKKwkJaWYgKHIgPj0gMCAmJiBzLT5tc2dfY2FsbGJhY2spCisJCQlzLT5tc2dfY2FsbGJhY2soMSwgcy0+dmVyc2lvbiwgVExTMV9SVF9IRUFSVEJFQVQsCisJCQkJYnVmZmVyLCAzICsgcGF5bG9hZCArIHBhZGRpbmcsCisJCQkJcywgcy0+bXNnX2NhbGxiYWNrX2FyZyk7CisKKwkJT1BFTlNTTF9mcmVlKGJ1ZmZlcik7CisKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCX0KKwllbHNlIGlmIChoYnR5cGUgPT0gVExTMV9IQl9SRVNQT05TRSkKKwkJeworCQl1bnNpZ25lZCBpbnQgc2VxOworCisJCS8qIFdlIG9ubHkgc2VuZCBzZXF1ZW5jZSBudW1iZXJzICgyIGJ5dGVzIHVuc2lnbmVkIGludCksCisJCSAqIGFuZCAxNiByYW5kb20gYnl0ZXMsIHNvIHdlIGp1c3QgdHJ5IHRvIHJlYWQgdGhlCisJCSAqIHNlcXVlbmNlIG51bWJlciAqLworCQluMnMocGwsIHNlcSk7CisKKwkJaWYgKHBheWxvYWQgPT0gMTggJiYgc2VxID09IHMtPnRsc2V4dF9oYl9zZXEpCisJCQl7CisJCQlkdGxzMV9zdG9wX3RpbWVyKHMpOworCQkJcy0+dGxzZXh0X2hiX3NlcSsrOworCQkJcy0+dGxzZXh0X2hiX3BlbmRpbmcgPSAwOworCQkJfQorCQl9CisKKwlyZXR1cm4gMDsKKwl9CisKK2ludAorZHRsczFfaGVhcnRiZWF0KFNTTCAqcykKKwl7CisJdW5zaWduZWQgY2hhciAqYnVmLCAqcDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwYXlsb2FkID0gMTg7IC8qIFNlcXVlbmNlIG51bWJlciArIHJhbmRvbSBieXRlcyAqLworCXVuc2lnbmVkIGludCBwYWRkaW5nID0gMTY7IC8qIFVzZSBtaW5pbXVtIHBhZGRpbmcgKi8KKworCS8qIE9ubHkgc2VuZCBpZiBwZWVyIHN1cHBvcnRzIGFuZCBhY2NlcHRzIEhCIHJlcXVlc3RzLi4uICovCisJaWYgKCEocy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRU5BQkxFRCkgfHwKKwkgICAgcy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRE9OVF9TRU5EX1JFUVVFU1RTKQorCQl7CisJCVNTTGVycihTU0xfRl9EVExTMV9IRUFSVEJFQVQsU1NMX1JfVExTX0hFQVJUQkVBVF9QRUVSX0RPRVNOVF9BQ0NFUFQpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8qIC4uLmFuZCB0aGVyZSBpcyBub25lIGluIGZsaWdodCB5ZXQuLi4gKi8KKwlpZiAocy0+dGxzZXh0X2hiX3BlbmRpbmcpCisJCXsKKwkJU1NMZXJyKFNTTF9GX0RUTFMxX0hFQVJUQkVBVCxTU0xfUl9UTFNfSEVBUlRCRUFUX1BFTkRJTkcpOworCQlyZXR1cm4gLTE7CisJCX0KKworCS8qIC4uLmFuZCBubyBoYW5kc2hha2UgaW4gcHJvZ3Jlc3MuICovCisJaWYgKFNTTF9pbl9pbml0KHMpIHx8IHMtPmluX2hhbmRzaGFrZSkKKwkJeworCQlTU0xlcnIoU1NMX0ZfRFRMUzFfSEVBUlRCRUFULFNTTF9SX1VORVhQRUNURURfTUVTU0FHRSk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLyogQ2hlY2sgaWYgcGFkZGluZyBpcyB0b28gbG9uZywgcGF5bG9hZCBhbmQgcGFkZGluZworCSAqIG11c3Qgbm90IGV4Y2VlZCAyXjE0IC0gMyA9IDE2MzgxIGJ5dGVzIGluIHRvdGFsLgorCSAqLworCU9QRU5TU0xfYXNzZXJ0KHBheWxvYWQgKyBwYWRkaW5nIDw9IDE2MzgxKTsKKworCS8qIENyZWF0ZSBIZWFydEJlYXQgbWVzc2FnZSwgd2UganVzdCB1c2UgYSBzZXF1ZW5jZSBudW1iZXIKKwkgKiBhcyBwYXlsb2FkIHRvIGRpc3R1aW5naXNoIGRpZmZlcmVudCBtZXNzYWdlcyBhbmQgYWRkCisJICogc29tZSByYW5kb20gc3R1ZmYuCisJICogIC0gTWVzc2FnZSBUeXBlLCAxIGJ5dGUKKwkgKiAgLSBQYXlsb2FkIExlbmd0aCwgMiBieXRlcyAodW5zaWduZWQgaW50KQorCSAqICAtIFBheWxvYWQsIHRoZSBzZXF1ZW5jZSBudW1iZXIgKDIgYnl0ZXMgdWludCkKKwkgKiAgLSBQYXlsb2FkLCByYW5kb20gYnl0ZXMgKDE2IGJ5dGVzIHVpbnQpCisJICogIC0gUGFkZGluZworCSAqLworCWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKDEgKyAyICsgcGF5bG9hZCArIHBhZGRpbmcpOworCXAgPSBidWY7CisJLyogTWVzc2FnZSBUeXBlICovCisJKnArKyA9IFRMUzFfSEJfUkVRVUVTVDsKKwkvKiBQYXlsb2FkIGxlbmd0aCAoMTggYnl0ZXMgaGVyZSkgKi8KKwlzMm4ocGF5bG9hZCwgcCk7CisJLyogU2VxdWVuY2UgbnVtYmVyICovCisJczJuKHMtPnRsc2V4dF9oYl9zZXEsIHApOworCS8qIDE2IHJhbmRvbSBieXRlcyAqLworCVJBTkRfcHNldWRvX2J5dGVzKHAsIDE2KTsKKwlwICs9IDE2OworCS8qIFJhbmRvbSBwYWRkaW5nICovCisJUkFORF9wc2V1ZG9fYnl0ZXMocCwgcGFkZGluZyk7CisKKwlyZXQgPSBkdGxzMV93cml0ZV9ieXRlcyhzLCBUTFMxX1JUX0hFQVJUQkVBVCwgYnVmLCAzICsgcGF5bG9hZCArIHBhZGRpbmcpOworCWlmIChyZXQgPj0gMCkKKwkJeworCQlpZiAocy0+bXNnX2NhbGxiYWNrKQorCQkJcy0+bXNnX2NhbGxiYWNrKDEsIHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAorCQkJCWJ1ZiwgMyArIHBheWxvYWQgKyBwYWRkaW5nLAorCQkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOworCisJCWR0bHMxX3N0YXJ0X3RpbWVyKHMpOworCQlzLT50bHNleHRfaGJfcGVuZGluZyA9IDE7CisJCX0KKworCU9QRU5TU0xfZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NzbC9kMV9jbG50LmMgYi9zc2wvZDFfY2xudC5jCmluZGV4IDAyZmM3MDQuLjdlODA3N2UgMTAwNjQ0Ci0tLSBhL3NzbC9kMV9jbG50LmMKKysrIGIvc3NsL2QxX2NsbnQuYwpAQCAtMTUwLDcgKzE1MCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgVGltZT0odW5zaWduZWQgbG9uZyl0aW1lKE5VTEwpOwogCXZvaWQgKCpjYikoY29uc3QgU1NMICpzc2wsaW50IHR5cGUsaW50IHZhbCk9TlVMTDsKIAlpbnQgcmV0PSAtMTsKLQlpbnQgbmV3X3N0YXRlLHN0YXRlLHNraXA9MDs7CisJaW50IG5ld19zdGF0ZSxzdGF0ZSxza2lwPTA7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCXVuc2lnbmVkIGNoYXIgc2N0cGF1dGhrZXlbNjRdOworCWNoYXIgbGFiZWxidWZmZXJbc2l6ZW9mKERUTFMxX1NDVFBfQVVUSF9MQUJFTCldOworI2VuZGlmCiAKIAlSQU5EX2FkZCgmVGltZSxzaXplb2YoVGltZSksMCk7CiAJRVJSX2NsZWFyX2Vycm9yKCk7CkBAIC0xNjQsNiArMTY4LDI3IEBACiAJcy0+aW5faGFuZHNoYWtlKys7CiAJaWYgKCFTU0xfaW5faW5pdChzKSB8fCBTU0xfaW5fYmVmb3JlKHMpKSBTU0xfY2xlYXIocyk7IAogCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCS8qIE5vdGlmeSBTQ1RQIEJJTyBzb2NrZXQgdG8gZW50ZXIgaGFuZHNoYWtlCisJICogbW9kZSBhbmQgcHJldmVudCBzdHJlYW0gaWRlbnRpZmllciBvdGhlcgorCSAqIHRoYW4gMC4gV2lsbCBiZSBpZ25vcmVkIGlmIG5vIFNDVFAgaXMgdXNlZC4KKwkgKi8KKwlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfU0VUX0lOX0hBTkRTSEFLRSwgcy0+aW5faGFuZHNoYWtlLCBOVUxMKTsKKyNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCS8qIElmIHdlJ3JlIGF3YWl0aW5nIGEgSGVhcnRiZWF0UmVzcG9uc2UsIHByZXRlbmQgd2UKKwkgKiBhbHJlYWR5IGdvdCBhbmQgZG9uJ3QgYXdhaXQgaXQgYW55bW9yZSwgYmVjYXVzZQorCSAqIEhlYXJ0YmVhdHMgZG9uJ3QgbWFrZSBzZW5zZSBkdXJpbmcgaGFuZHNoYWtlcyBhbnl3YXkuCisJICovCisJaWYgKHMtPnRsc2V4dF9oYl9wZW5kaW5nKQorCQl7CisJCWR0bHMxX3N0b3BfdGltZXIocyk7CisJCXMtPnRsc2V4dF9oYl9wZW5kaW5nID0gMDsKKwkJcy0+dGxzZXh0X2hiX3NlcSsrOworCQl9CisjZW5kaWYKKwogCWZvciAoOzspCiAJCXsKIAkJc3RhdGU9cy0+c3RhdGU7CkBAIC0xNzEsNyArMTk2LDcgQEAKIAkJc3dpdGNoKHMtPnN0YXRlKQogCQkJewogCQljYXNlIFNTTF9TVF9SRU5FR09USUFURToKLQkJCXMtPm5ld19zZXNzaW9uPTE7CisJCQlzLT5yZW5lZ290aWF0ZT0xOwogCQkJcy0+c3RhdGU9U1NMX1NUX0NPTk5FQ1Q7CiAJCQlzLT5jdHgtPnN0YXRzLnNlc3NfY29ubmVjdF9yZW5lZ290aWF0ZSsrOwogCQkJLyogYnJlYWsgKi8KQEAgLTIyNiw2ICsyNTEsNDIgQEAKIAkJCXMtPmhpdCA9IDA7CiAJCQlicmVhazsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJY2FzZSBEVExTMV9TQ1RQX1NUX0NSX1JFQURfU09DSzoKKworCQkJaWYgKEJJT19kZ3JhbV9zY3RwX21zZ193YWl0aW5nKFNTTF9nZXRfcmJpbyhzKSkpCisJCQl7CisJCQkJcy0+czMtPmluX3JlYWRfYXBwX2RhdGE9MjsKKwkJCQlzLT5yd3N0YXRlPVNTTF9SRUFESU5HOworCQkJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhTU0xfZ2V0X3JiaW8ocykpOworCQkJCUJJT19zZXRfcmV0cnlfcmVhZChTU0xfZ2V0X3JiaW8ocykpOworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZW5kOworCQkJfQorCisJCQlzLT5zdGF0ZT1zLT5zMy0+dG1wLm5leHRfc3RhdGU7CisJCQlicmVhazsKKworCQljYXNlIERUTFMxX1NDVFBfU1RfQ1dfV1JJVEVfU09DSzoKKwkJCS8qIHJlYWQgYXBwIGRhdGEgdW50aWwgZHJ5IGV2ZW50ICovCisKKwkJCXJldCA9IEJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeShTU0xfZ2V0X3diaW8ocykpOworCQkJaWYgKHJldCA8IDApIGdvdG8gZW5kOworCisJCQlpZiAocmV0ID09IDApCisJCQl7CisJCQkJcy0+czMtPmluX3JlYWRfYXBwX2RhdGE9MjsKKwkJCQlzLT5yd3N0YXRlPVNTTF9SRUFESU5HOworCQkJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhTU0xfZ2V0X3JiaW8ocykpOworCQkJCUJJT19zZXRfcmV0cnlfcmVhZChTU0xfZ2V0X3JiaW8ocykpOworCQkJCXJldCA9IC0xOworCQkJCWdvdG8gZW5kOworCQkJfQorCisJCQlzLT5zdGF0ZT1zLT5kMS0+bmV4dF9zdGF0ZTsKKwkJCWJyZWFrOworI2VuZGlmCisKIAkJY2FzZSBTU0wzX1NUX0NXX0NMTlRfSEVMTE9fQToKIAkJY2FzZSBTU0wzX1NUX0NXX0NMTlRfSEVMTE9fQjoKIApAQCAtMjQ4LDkgKzMwOSwxNyBAQAogCiAJCQlzLT5pbml0X251bT0wOwogCi0JCQkvKiB0dXJuIG9uIGJ1ZmZlcmluZyBmb3IgdGhlIG5leHQgbG90IG9mIG91dHB1dCAqLwotCQkJaWYgKHMtPmJiaW8gIT0gcy0+d2JpbykKLQkJCQlzLT53YmlvPUJJT19wdXNoKHMtPmJiaW8scy0+d2Jpbyk7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJLyogRGlzYWJsZSBidWZmZXJpbmcgZm9yIFNDVFAgKi8KKwkJCWlmICghQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSkKKwkJCQl7CisjZW5kaWYKKwkJCQkvKiB0dXJuIG9uIGJ1ZmZlcmluZyBmb3IgdGhlIG5leHQgbG90IG9mIG91dHB1dCAqLworCQkJCWlmIChzLT5iYmlvICE9IHMtPndiaW8pCisJCQkJCXMtPndiaW89QklPX3B1c2gocy0+YmJpbyxzLT53YmlvKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCQkJfQorI2VuZGlmCiAKIAkJCWJyZWFrOwogCkBAIC0yNjEsNyArMzMwLDI0IEBACiAJCQllbHNlCiAJCQkJewogCQkJCWlmIChzLT5oaXQpCisJCQkJCXsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCQkJCS8qIEFkZCBuZXcgc2hhcmVkIGtleSBmb3IgU0NUUC1BdXRoLAorCQkJCQkgKiB3aWxsIGJlIGlnbm9yZWQgaWYgbm8gU0NUUCB1c2VkLgorCQkJCQkgKi8KKwkJCQkJc25wcmludGYoKGNoYXIqKSBsYWJlbGJ1ZmZlciwgc2l6ZW9mKERUTFMxX1NDVFBfQVVUSF9MQUJFTCksCisJCQkJCSAgICAgICAgIERUTFMxX1NDVFBfQVVUSF9MQUJFTCk7CisKKwkJCQkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwocywgc2N0cGF1dGhrZXksCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzY3RwYXV0aGtleSksIGxhYmVsYnVmZmVyLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGFiZWxidWZmZXIpLCBOVUxMLCAwLCAwKTsKKworCQkJCQlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfQUREX0FVVEhfS0VZLAorCQkJCQkJCSBzaXplb2Yoc2N0cGF1dGhrZXkpLCBzY3RwYXV0aGtleSk7CisjZW5kaWYKKwogCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX0ZJTklTSEVEX0E7CisJCQkJCX0KIAkJCQllbHNlCiAJCQkJCXMtPnN0YXRlPURUTFMxX1NUX0NSX0hFTExPX1ZFUklGWV9SRVFVRVNUX0E7CiAJCQkJfQpAQCAtMzU1LDExICs0NDEsMTggQEAKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CiAJCQlkdGxzMV9zdG9wX3RpbWVyKHMpOwogCQkJaWYgKHMtPnMzLT50bXAuY2VydF9yZXEpCi0JCQkJcy0+c3RhdGU9U1NMM19TVF9DV19DRVJUX0E7CisJCQkJcy0+czMtPnRtcC5uZXh0X3N0YXRlPVNTTDNfU1RfQ1dfQ0VSVF9BOwogCQkJZWxzZQotCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfS0VZX0VYQ0hfQTsKKwkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9U1NMM19TVF9DV19LRVlfRVhDSF9BOwogCQkJcy0+aW5pdF9udW09MDsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAJCQkKKwkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3diaW8ocykpICYmCisJCQkgICAgc3RhdGUgPT0gU1NMX1NUX1JFTkVHT1RJQVRFKQorCQkJCXMtPnN0YXRlPURUTFMxX1NDVFBfU1RfQ1JfUkVBRF9TT0NLOworCQkJZWxzZQorI2VuZGlmCQkJCisJCQlzLT5zdGF0ZT1zLT5zMy0+dG1wLm5leHRfc3RhdGU7CiAJCQlicmVhazsKIAogCQljYXNlIFNTTDNfU1RfQ1dfQ0VSVF9BOgpAQCAtMzc4LDYgKzQ3MSwyMiBAQAogCQkJZHRsczFfc3RhcnRfdGltZXIocyk7CiAJCQlyZXQ9ZHRsczFfc2VuZF9jbGllbnRfa2V5X2V4Y2hhbmdlKHMpOwogCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKKworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJCS8qIEFkZCBuZXcgc2hhcmVkIGtleSBmb3IgU0NUUC1BdXRoLAorCQkJICogd2lsbCBiZSBpZ25vcmVkIGlmIG5vIFNDVFAgdXNlZC4KKwkJCSAqLworCQkJc25wcmludGYoKGNoYXIqKSBsYWJlbGJ1ZmZlciwgc2l6ZW9mKERUTFMxX1NDVFBfQVVUSF9MQUJFTCksCisJCQkgICAgICAgICBEVExTMV9TQ1RQX0FVVEhfTEFCRUwpOworCisJCQlTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbChzLCBzY3RwYXV0aGtleSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzY3RwYXV0aGtleSksIGxhYmVsYnVmZmVyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxhYmVsYnVmZmVyKSwgTlVMTCwgMCwgMCk7CisKKwkJCUJJT19jdHJsKFNTTF9nZXRfd2JpbyhzKSwgQklPX0NUUkxfREdSQU1fU0NUUF9BRERfQVVUSF9LRVksCisJCQkJCSBzaXplb2Yoc2N0cGF1dGhrZXkpLCBzY3RwYXV0aGtleSk7CisjZW5kaWYKKwogCQkJLyogRUFZIEVBWSBFQVkgbmVlZCB0byBjaGVjayBmb3IgREggZml4IGNlcnQKIAkJCSAqIHNlbnQgYmFjayAqLwogCQkJLyogRm9yIFRMUywgY2VydF9yZXEgaXMgc2V0IHRvIDIsIHNvIGEgY2VydCBjaGFpbgpAQCAtMzg4LDcgKzQ5NywxNSBAQAogCQkJCX0KIAkJCWVsc2UKIAkJCQl7Ci0JCQkJcy0+c3RhdGU9U1NMM19TVF9DV19DSEFOR0VfQTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCQkJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfd2JpbyhzKSkpCisJCQkJCXsKKwkJCQkJcy0+ZDEtPm5leHRfc3RhdGU9U1NMM19TVF9DV19DSEFOR0VfQTsKKwkJCQkJcy0+c3RhdGU9RFRMUzFfU0NUUF9TVF9DV19XUklURV9TT0NLOworCQkJCQl9CisJCQkJZWxzZQorI2VuZGlmCisJCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfQ0hBTkdFX0E7CiAJCQkJcy0+czMtPmNoYW5nZV9jaXBoZXJfc3BlYz0wOwogCQkJCX0KIApAQCAtNDAwLDcgKzUxNywxNSBAQAogCQkJZHRsczFfc3RhcnRfdGltZXIocyk7CiAJCQlyZXQ9ZHRsczFfc2VuZF9jbGllbnRfdmVyaWZ5KHMpOwogCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfQ0hBTkdFX0E7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfd2JpbyhzKSkpCisJCQl7CisJCQkJcy0+ZDEtPm5leHRfc3RhdGU9U1NMM19TVF9DV19DSEFOR0VfQTsKKwkJCQlzLT5zdGF0ZT1EVExTMV9TQ1RQX1NUX0NXX1dSSVRFX1NPQ0s7CisJCQl9CisJCQllbHNlCisjZW5kaWYKKwkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NXX0NIQU5HRV9BOwogCQkJcy0+aW5pdF9udW09MDsKIAkJCXMtPnMzLT5jaGFuZ2VfY2lwaGVyX3NwZWM9MDsKIAkJCWJyZWFrOwpAQCAtNDEyLDYgKzUzNywxNCBAQAogCQkJcmV0PWR0bHMxX3NlbmRfY2hhbmdlX2NpcGhlcl9zcGVjKHMsCiAJCQkJU1NMM19TVF9DV19DSEFOR0VfQSxTU0wzX1NUX0NXX0NIQU5HRV9CKTsKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCQkvKiBDaGFuZ2UgdG8gbmV3IHNoYXJlZCBrZXkgb2YgU0NUUC1BdXRoLAorCQkJICogd2lsbCBiZSBpZ25vcmVkIGlmIG5vIFNDVFAgdXNlZC4KKwkJCSAqLworCQkJQklPX2N0cmwoU1NMX2dldF93YmlvKHMpLCBCSU9fQ1RSTF9ER1JBTV9TQ1RQX05FWFRfQVVUSF9LRVksIDAsIE5VTEwpOworI2VuZGlmCisKIAkJCXMtPnN0YXRlPVNTTDNfU1RfQ1dfRklOSVNIRURfQTsKIAkJCXMtPmluaXRfbnVtPTA7CiAKQEAgLTQ1Nyw5ICs1OTAsMjMgQEAKIAkJCWlmIChzLT5oaXQpCiAJCQkJewogCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0xfU1RfT0s7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3diaW8ocykpKQorCQkJCQl7CisJCQkJCQlzLT5kMS0+bmV4dF9zdGF0ZSA9IHMtPnMzLT50bXAubmV4dF9zdGF0ZTsKKwkJCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1EVExTMV9TQ1RQX1NUX0NXX1dSSVRFX1NPQ0s7CisJCQkJCX0KKyNlbmRpZgogCQkJCWlmIChzLT5zMy0+ZmxhZ3MgJiBTU0wzX0ZMQUdTX0RFTEFZX0NMSUVOVF9GSU5JU0hFRCkKIAkJCQkJewogCQkJCQlzLT5zdGF0ZT1TU0xfU1RfT0s7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCQlpZiAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSkKKwkJCQkJCXsKKwkJCQkJCQlzLT5kMS0+bmV4dF9zdGF0ZSA9IFNTTF9TVF9PSzsKKwkJCQkJCQlzLT5zdGF0ZT1EVExTMV9TQ1RQX1NUX0NXX1dSSVRFX1NPQ0s7CisJCQkJCQl9CisjZW5kaWYKIAkJCQkJcy0+czMtPmZsYWdzfD1TU0wzX0ZMQUdTX1BPUF9CVUZGRVI7CiAJCQkJCXMtPnMzLT5kZWxheV9idWZfcG9wX3JldD0wOwogCQkJCQl9CkBAIC01MDgsNiArNjU1LDE2IEBACiAJCQkJcy0+c3RhdGU9U1NMM19TVF9DV19DSEFOR0VfQTsKIAkJCWVsc2UKIAkJCQlzLT5zdGF0ZT1TU0xfU1RfT0s7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCQlpZiAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSAmJgorCQkJCXN0YXRlID09IFNTTF9TVF9SRU5FR09USUFURSkKKwkJCQl7CisJCQkJcy0+ZDEtPm5leHRfc3RhdGU9cy0+c3RhdGU7CisJCQkJcy0+c3RhdGU9RFRMUzFfU0NUUF9TVF9DV19XUklURV9TT0NLOworCQkJCX0KKyNlbmRpZgorCiAJCQlzLT5pbml0X251bT0wOwogCQkJYnJlYWs7CiAKQEAgLTUxNSw2ICs2NzIsMTMgQEAKIAkJCXMtPnJ3c3RhdGU9U1NMX1dSSVRJTkc7CiAJCQlpZiAoQklPX2ZsdXNoKHMtPndiaW8pIDw9IDApCiAJCQkJeworCQkJCS8qIElmIHRoZSB3cml0ZSBlcnJvciB3YXMgZmF0YWwsIHN0b3AgdHJ5aW5nICovCisJCQkJaWYgKCFCSU9fc2hvdWxkX3JldHJ5KHMtPndiaW8pKQorCQkJCQl7CisJCQkJCXMtPnJ3c3RhdGU9U1NMX05PVEhJTkc7CisJCQkJCXMtPnN0YXRlPXMtPnMzLT50bXAubmV4dF9zdGF0ZTsKKwkJCQkJfQorCQkJCQogCQkJCXJldD0gLTE7CiAJCQkJZ290byBlbmQ7CiAJCQkJfQpAQCAtNTQxLDYgKzcwNSw3IEBACiAJCQkvKiBlbHNlIGRvIGl0IGxhdGVyIGluIHNzbDNfd3JpdGUgKi8KIAogCQkJcy0+aW5pdF9udW09MDsKKwkJCXMtPnJlbmVnb3RpYXRlPTA7CiAJCQlzLT5uZXdfc2Vzc2lvbj0wOwogCiAJCQlzc2xfdXBkYXRlX2NhY2hlKHMsU1NMX1NFU1NfQ0FDSEVfQ0xJRU5UKTsKQEAgLTU4Nyw2ICs3NTIsMTUgQEAKIAkJfQogZW5kOgogCXMtPmluX2hhbmRzaGFrZS0tOworCQorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkvKiBOb3RpZnkgU0NUUCBCSU8gc29ja2V0IHRvIGxlYXZlIGhhbmRzaGFrZQorCSAqIG1vZGUgYW5kIGFsbG93IHN0cmVhbSBpZGVudGlmaWVyIG90aGVyCisJICogdGhhbiAwLiBXaWxsIGJlIGlnbm9yZWQgaWYgbm8gU0NUUCBpcyB1c2VkLgorCSAqLworCUJJT19jdHJsKFNTTF9nZXRfd2JpbyhzKSwgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfSU5fSEFORFNIQUtFLCBzLT5pbl9oYW5kc2hha2UsIE5VTEwpOworI2VuZGlmCisKIAlpZiAoYnVmICE9IE5VTEwpCiAJCUJVRl9NRU1fZnJlZShidWYpOwogCWlmIChjYiAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvc3NsL2QxX2xpYi5jIGIvc3NsL2QxX2xpYi5jCmluZGV4IDg0Nzk5MzIuLjU2ZjYyNTMgMTAwNjQ0Ci0tLSBhL3NzbC9kMV9saWIuYworKysgYi9zc2wvZDFfbGliLmMKQEAgLTgyLDYgKzgyLDcgQEAKIAlUTFNfTURfQ0xJRU5UX0ZJTklTSF9DT05TVCxUTFNfTURfQ0xJRU5UX0ZJTklTSF9DT05TVF9TSVpFLAogCVRMU19NRF9TRVJWRVJfRklOSVNIX0NPTlNULFRMU19NRF9TRVJWRVJfRklOSVNIX0NPTlNUX1NJWkUsCiAJdGxzMV9hbGVydF9jb2RlLAorCXRsczFfZXhwb3J0X2tleWluZ19tYXRlcmlhbCwKIAl9OwogCiBsb25nIGR0bHMxX2RlZmF1bHRfdGltZW91dCh2b2lkKQpAQCAtMjkxLDYgKzI5MiwxNSBAQAogCiB2b2lkIGR0bHMxX3N0YXJ0X3RpbWVyKFNTTCAqcykKIAl7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCS8qIERpc2FibGUgdGltZXIgZm9yIFNDVFAgKi8KKwlpZiAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSkKKwkJeworCQltZW1zZXQoJihzLT5kMS0+bmV4dF90aW1lb3V0KSwgMCwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CisJCXJldHVybjsKKwkJfQorI2VuZGlmCisKIAkvKiBJZiB0aW1lciBpcyBub3Qgc2V0LCBpbml0aWFsaXplIGR1cmF0aW9uIHdpdGggMSBzZWNvbmQgKi8KIAlpZiAocy0+ZDEtPm5leHRfdGltZW91dC50dl9zZWMgPT0gMCAmJiBzLT5kMS0+bmV4dF90aW1lb3V0LnR2X3VzZWMgPT0gMCkKIAkJewpAQCAtNDAyLDcgKzQxMiw3IEBACiAJaWYgKHMtPmQxLT50aW1lb3V0Lm51bV9hbGVydHMgPiBEVExTMV9UTU9fQUxFUlRfQ09VTlQpCiAJCXsKIAkJLyogZmFpbCB0aGUgY29ubmVjdGlvbiwgZW5vdWdoIGFsZXJ0cyBoYXZlIGJlZW4gc2VudCAqLwotCQlTU0xlcnIoU1NMX0ZfRFRMUzFfQ0hFQ0tfVElNRU9VVF9OVU0sU1NMX1JfUkVBRF9USU1FT1VUX0VYUElSRUQpOworCQlTU0xlcnIoU1NMX0ZfRFRMUzFfSEFORExFX1RJTUVPVVQsU1NMX1JfUkVBRF9USU1FT1VUX0VYUElSRUQpOwogCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtNDI4LDYgKzQzOCwxNCBAQAogCQlzLT5kMS0+dGltZW91dC5yZWFkX3RpbWVvdXRzID0gMTsKIAkJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCWlmIChzLT50bHNleHRfaGJfcGVuZGluZykKKwkJeworCQlzLT50bHNleHRfaGJfcGVuZGluZyA9IDA7CisJCXJldHVybiBkdGxzMV9oZWFydGJlYXQocyk7CisJCX0KKyNlbmRpZgorCiAJZHRsczFfc3RhcnRfdGltZXIocyk7CiAJcmV0dXJuIGR0bHMxX3JldHJhbnNtaXRfYnVmZmVyZWRfbWVzc2FnZXMocyk7CiAJfQpkaWZmIC0tZ2l0IGEvc3NsL2QxX3BrdC5jIGIvc3NsL2QxX3BrdC5jCmluZGV4IDdjYzY5NzMuLmUzZTk4NjQgMTAwNjQ0Ci0tLSBhL3NzbC9kMV9wa3QuYworKysgYi9zc2wvZDFfcGt0LmMKQEAgLTIzMSw2ICsyMzEsMTQgQEAKIAogCWl0ZW0tPmRhdGEgPSByZGF0YTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkvKiBTdG9yZSBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvIHN0cnVjdCAqLworCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3JiaW8ocykpICYmCisJICAgIChzLT5zdGF0ZSA9PSBTU0wzX1NUX1NSX0ZJTklTSEVEX0EgfHwgcy0+c3RhdGUgPT0gU1NMM19TVF9DUl9GSU5JU0hFRF9BKSkgeworCQlCSU9fY3RybChTU0xfZ2V0X3JiaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfR0VUX1JDVklORk8sIHNpemVvZihyZGF0YS0+cmVjb3JkaW5mbyksICZyZGF0YS0+cmVjb3JkaW5mbyk7CisJfQorI2VuZGlmCisKIAkvKiBpbnNlcnQgc2hvdWxkIG5vdCBmYWlsLCBzaW5jZSBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkICovCiAJaWYgKHBxdWV1ZV9pbnNlcnQocXVldWUtPnEsIGl0ZW0pID09IE5VTEwpCiAJCXsKQEAgLTY1OCwyMCArNjY2LDI4IEBACiAJCWdvdG8gYWdhaW47ICAgLyogZ2V0IGFub3RoZXIgcmVjb3JkICovCiAJCX0KIAotCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIHJlcGVhdCwgb3IgYWdlZCByZWNvcmQuCi0JICogRG9uJ3QgY2hlY2sgaWYgd2UncmUgbGlzdGVuaW5nIGFuZCB0aGlzIG1lc3NhZ2UgaXMKLQkgKiBhIENsaWVudEhlbGxvLiBUaGV5IGNhbiBsb29rIGFzIGlmIHRoZXkncmUgcmVwbGF5ZWQsCi0JICogc2luY2UgdGhleSBhcnJpdmUgZnJvbSBkaWZmZXJlbnQgY29ubmVjdGlvbnMgYW5kCi0JICogd291bGQgYmUgZHJvcHBlZCB1bm5lY2Vzc2FyaWx5LgotCSAqLwotCWlmICghKHMtPmQxLT5saXN0ZW4gJiYgcnItPnR5cGUgPT0gU1NMM19SVF9IQU5EU0hBS0UgJiYKLQkJKnAgPT0gU1NMM19NVF9DTElFTlRfSEVMTE8pICYmCi0JCSFkdGxzMV9yZWNvcmRfcmVwbGF5X2NoZWNrKHMsIGJpdG1hcCkpCi0JCXsKLQkJcnItPmxlbmd0aCA9IDA7Ci0JCXMtPnBhY2tldF9sZW5ndGg9MDsgLyogZHVtcCB0aGlzIHJlY29yZCAqLwotCQlnb3RvIGFnYWluOyAgICAgLyogZ2V0IGFub3RoZXIgcmVjb3JkICovCi0JCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJLyogT25seSBkbyByZXBsYXkgY2hlY2sgaWYgbm8gU0NUUCBiaW8gKi8KKwlpZiAoIUJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfcmJpbyhzKSkpCisgIAkJeworI2VuZGlmCisJCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIHJlcGVhdCwgb3IgYWdlZCByZWNvcmQuCisJCSAqIERvbid0IGNoZWNrIGlmIHdlJ3JlIGxpc3RlbmluZyBhbmQgdGhpcyBtZXNzYWdlIGlzCisJCSAqIGEgQ2xpZW50SGVsbG8uIFRoZXkgY2FuIGxvb2sgYXMgaWYgdGhleSdyZSByZXBsYXllZCwKKwkJICogc2luY2UgdGhleSBhcnJpdmUgZnJvbSBkaWZmZXJlbnQgY29ubmVjdGlvbnMgYW5kCisJCSAqIHdvdWxkIGJlIGRyb3BwZWQgdW5uZWNlc3NhcmlseS4KKwkJICovCisJCWlmICghKHMtPmQxLT5saXN0ZW4gJiYgcnItPnR5cGUgPT0gU1NMM19SVF9IQU5EU0hBS0UgJiYKKwkJICAgICpwID09IFNTTDNfTVRfQ0xJRU5UX0hFTExPKSAmJgorCQkgICAgIWR0bHMxX3JlY29yZF9yZXBsYXlfY2hlY2socywgYml0bWFwKSkKKwkJCXsKKwkJCXJyLT5sZW5ndGggPSAwOworCQkJcy0+cGFja2V0X2xlbmd0aD0wOyAvKiBkdW1wIHRoaXMgcmVjb3JkICovCisJCQlnb3RvIGFnYWluOyAgICAgLyogZ2V0IGFub3RoZXIgcmVjb3JkICovCisJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorICAJCX0KKyNlbmRpZgogCiAJLyoganVzdCByZWFkIGEgMCBsZW5ndGggcGFja2V0ICovCiAJaWYgKHJyLT5sZW5ndGggPT0gMCkgZ290byBhZ2FpbjsKQEAgLTc1Niw3ICs3NzIsMTcgQEAKIAogCS8qIE5vdyBzLT5kMS0+aGFuZHNoYWtlX2ZyYWdtZW50X2xlbiA9PSAwIGlmIHR5cGUgPT0gU1NMM19SVF9IQU5EU0hBS0UuICovCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJLyogQ29udGludWUgaGFuZHNoYWtlIGlmIGl0IGhhZCB0byBiZSBpbnRlcnJ1cHRlZCB0byByZWFkCisJICogYXBwIGRhdGEgd2l0aCBTQ1RQLgorCSAqLworCWlmICgoIXMtPmluX2hhbmRzaGFrZSAmJiBTU0xfaW5faW5pdChzKSkgfHwKKwkgICAgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfcmJpbyhzKSkgJiYKKwkgICAgIChzLT5zdGF0ZSA9PSBEVExTMV9TQ1RQX1NUX1NSX1JFQURfU09DSyB8fCBzLT5zdGF0ZSA9PSBEVExTMV9TQ1RQX1NUX0NSX1JFQURfU09DSykgJiYKKwkgICAgIHMtPnMzLT5pbl9yZWFkX2FwcF9kYXRhICE9IDIpKQorI2Vsc2UKIAlpZiAoIXMtPmluX2hhbmRzaGFrZSAmJiBTU0xfaW5faW5pdChzKSkKKyNlbmRpZgogCQl7CiAJCS8qIHR5cGUgPT0gU1NMM19SVF9BUFBMSUNBVElPTl9EQVRBICovCiAJCWk9cy0+aGFuZHNoYWtlX2Z1bmMocyk7CkBAIC03ODcsNiArODEzLDE1IEBACiAJCWl0ZW0gPSBwcXVldWVfcG9wKHMtPmQxLT5idWZmZXJlZF9hcHBfZGF0YS5xKTsKIAkJaWYgKGl0ZW0pCiAJCQl7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJLyogUmVzdG9yZSBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvIHN0cnVjdCAqLworCQkJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfcmJpbyhzKSkpCisJCQkJeworCQkJCURUTFMxX1JFQ09SRF9EQVRBICpyZGF0YSA9IChEVExTMV9SRUNPUkRfREFUQSAqKSBpdGVtLT5kYXRhOworCQkJCUJJT19jdHJsKFNTTF9nZXRfcmJpbyhzKSwgQklPX0NUUkxfREdSQU1fU0NUUF9TRVRfUkNWSU5GTywgc2l6ZW9mKHJkYXRhLT5yZWNvcmRpbmZvKSwgJnJkYXRhLT5yZWNvcmRpbmZvKTsKKwkJCQl9CisjZW5kaWYKKwogCQkJZHRsczFfY29weV9yZWNvcmQocywgaXRlbSk7CiAKIAkJCU9QRU5TU0xfZnJlZShpdGVtLT5kYXRhKTsKQEAgLTg2OSw2ICs5MDQsMzEgQEAKIAkJCQlyci0+b2ZmPTA7CiAJCQkJfQogCQkJfQorCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJLyogV2Ugd2VyZSBhYm91dCB0byByZW5lZ290aWF0ZSBidXQgaGFkIHRvIHJlYWQKKwkJCSAqIGJlbGF0ZWQgYXBwbGljYXRpb24gZGF0YSBmaXJzdCwgc28gcmV0cnkuCisJCQkgKi8KKwkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3JiaW8ocykpICYmCisJCQkgICAgcnItPnR5cGUgPT0gU1NMM19SVF9BUFBMSUNBVElPTl9EQVRBICYmCisJCQkgICAgKHMtPnN0YXRlID09IERUTFMxX1NDVFBfU1RfU1JfUkVBRF9TT0NLIHx8IHMtPnN0YXRlID09IERUTFMxX1NDVFBfU1RfQ1JfUkVBRF9TT0NLKSkKKwkJCQl7CisJCQkJcy0+cndzdGF0ZT1TU0xfUkVBRElORzsKKwkJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQlCSU9fc2V0X3JldHJ5X3JlYWQoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQl9CisKKwkJCS8qIFdlIG1pZ2h0IGhhZCB0byBkZWxheSBhIGNsb3NlX25vdGlmeSBhbGVydCBiZWNhdXNlCisJCQkgKiBvZiByZW9yZGVyZWQgYXBwIGRhdGEuIElmIHRoZXJlIHdhcyBhbiBhbGVydCBhbmQgdGhlcmUKKwkJCSAqIGlzIG5vIG1lc3NhZ2UgdG8gcmVhZCBhbnltb3JlLCBmaW5hbGx5IHNldCBzaHV0ZG93bi4KKwkJCSAqLworCQkJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfcmJpbyhzKSkgJiYKKwkJCSAgICBzLT5kMS0+c2h1dGRvd25fcmVjZWl2ZWQgJiYgIUJJT19kZ3JhbV9zY3RwX21zZ193YWl0aW5nKFNTTF9nZXRfcmJpbyhzKSkpCisJCQkJeworCQkJCXMtPnNodXRkb3duIHw9IFNTTF9SRUNFSVZFRF9TSFVURE9XTjsKKwkJCQlyZXR1cm4oMCk7CisJCQkJfQorI2VuZGlmCQkJCiAJCXJldHVybihuKTsKIAkJfQogCkBAIC04OTYsNiArOTU2LDE5IEBACiAJCQlkZXN0ID0gcy0+ZDEtPmFsZXJ0X2ZyYWdtZW50OwogCQkJZGVzdF9sZW4gPSAmcy0+ZDEtPmFsZXJ0X2ZyYWdtZW50X2xlbjsKIAkJCX0KKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisJCWVsc2UgaWYgKHJyLT50eXBlID09IFRMUzFfUlRfSEVBUlRCRUFUKQorCQkJeworCQkJZHRsczFfcHJvY2Vzc19oZWFydGJlYXQocyk7CisKKwkJCS8qIEV4aXQgYW5kIG5vdGlmeSBhcHBsaWNhdGlvbiB0byByZWFkIGFnYWluICovCisJCQlyci0+bGVuZ3RoID0gMDsKKwkJCXMtPnJ3c3RhdGU9U1NMX1JFQURJTkc7CisJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoU1NMX2dldF9yYmlvKHMpKTsKKwkJCUJJT19zZXRfcmV0cnlfcmVhZChTU0xfZ2V0X3JiaW8ocykpOworCQkJcmV0dXJuKC0xKTsKKwkJCX0KKyNlbmRpZgogCQkvKiBlbHNlIGl0J3MgYSBDQ1MgbWVzc2FnZSwgb3IgYXBwbGljYXRpb24gZGF0YSBvciB3cm9uZyAqLwogCQllbHNlIGlmIChyci0+dHlwZSAhPSBTU0wzX1JUX0NIQU5HRV9DSVBIRVJfU1BFQykKIAkJCXsKQEAgLTk3OSw2ICsxMDUyLDcgQEAKIAkJCSEocy0+czMtPmZsYWdzICYgU1NMM19GTEFHU19OT19SRU5FR09USUFURV9DSVBIRVJTKSAmJgogCQkJIXMtPnMzLT5yZW5lZ290aWF0ZSkKIAkJCXsKKwkJCXMtPm5ld19zZXNzaW9uID0gMTsKIAkJCXNzbDNfcmVuZWdvdGlhdGUocyk7CiAJCQlpZiAoc3NsM19yZW5lZ290aWF0ZV9jaGVjayhzKSkKIAkJCQl7CkBAIC0xMDQwLDYgKzExMTQsMjEgQEAKIAkJCXMtPnMzLT53YXJuX2FsZXJ0ID0gYWxlcnRfZGVzY3I7CiAJCQlpZiAoYWxlcnRfZGVzY3IgPT0gU1NMX0FEX0NMT1NFX05PVElGWSkKIAkJCQl7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCS8qIFdpdGggU0NUUCBhbmQgc3RyZWFtcyB0aGUgc29ja2V0IG1heSBkZWxpdmVyIGFwcCBkYXRhCisJCQkJICogYWZ0ZXIgYSBjbG9zZV9ub3RpZnkgYWxlcnQuIFdlIGhhdmUgdG8gY2hlY2sgdGhpcworCQkJCSAqIGZpcnN0IHNvIHRoYXQgbm90aGluZyBnZXRzIGRpc2NhcmRlZC4KKwkJCQkgKi8KKwkJCQlpZiAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF9yYmlvKHMpKSAmJgorCQkJCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZyhTU0xfZ2V0X3JiaW8ocykpKQorCQkJCQl7CisJCQkJCXMtPmQxLT5zaHV0ZG93bl9yZWNlaXZlZCA9IDE7CisJCQkJCXMtPnJ3c3RhdGU9U1NMX1JFQURJTkc7CisJCQkJCUJJT19jbGVhcl9yZXRyeV9mbGFncyhTU0xfZ2V0X3JiaW8ocykpOworCQkJCQlCSU9fc2V0X3JldHJ5X3JlYWQoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCQl9CisjZW5kaWYKIAkJCQlzLT5zaHV0ZG93biB8PSBTU0xfUkVDRUlWRURfU0hVVERPV047CiAJCQkJcmV0dXJuKDApOwogCQkJCX0KQEAgLTExNDYsNiArMTIzNSwxNSBAQAogCQlpZiAocy0+dmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQogCQkJcy0+ZDEtPmhhbmRzaGFrZV9yZWFkX3NlcSsrOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkvKiBSZW1lbWJlciB0aGF0IGEgQ0NTIGhhcyBiZWVuIHJlY2VpdmVkLAorCQkgKiBzbyB0aGF0IGFuIG9sZCBrZXkgb2YgU0NUUC1BdXRoIGNhbiBiZQorCQkgKiBkZWxldGVkIHdoZW4gYSBDQ1MgaXMgc2VudC4gV2lsbCBiZSBpZ25vcmVkCisJCSAqIGlmIG5vIFNDVFAgaXMgdXNlZAorCQkgKi8KKwkJQklPX2N0cmwoU1NMX2dldF93YmlvKHMpLCBCSU9fQ1RSTF9ER1JBTV9TQ1RQX0FVVEhfQ0NTX1JDVkQsIDEsIE5VTEwpOworI2VuZGlmCisKIAkJZ290byBzdGFydDsKIAkJfQogCkBAIC0xMTg4LDYgKzEyODYsNyBAQAogI2Vsc2UKIAkJCXMtPnN0YXRlID0gcy0+c2VydmVyID8gU1NMX1NUX0FDQ0VQVCA6IFNTTF9TVF9DT05ORUNUOwogI2VuZGlmCisJCQlzLT5yZW5lZ290aWF0ZT0xOwogCQkJcy0+bmV3X3Nlc3Npb249MTsKIAkJCX0KIAkJaT1zLT5oYW5kc2hha2VfZnVuYyhzKTsKQEAgLTEyODQsNyArMTM4MywxNiBAQAogCXsKIAlpbnQgaTsKIAotCWlmIChTU0xfaW5faW5pdChzKSAmJiAhcy0+aW5faGFuZHNoYWtlKQorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJLyogQ2hlY2sgaWYgd2UgaGF2ZSB0byBjb250aW51ZSBhbiBpbnRlcnJ1cHRlZCBoYW5kc2hha2UKKwkJICogZm9yIHJlYWRpbmcgYmVsYXRlZCBhcHAgZGF0YSB3aXRoIFNDVFAuCisJCSAqLworCQlpZiAoKFNTTF9pbl9pbml0KHMpICYmICFzLT5pbl9oYW5kc2hha2UpIHx8CisJCSAgICAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSAmJgorCQkgICAgIChzLT5zdGF0ZSA9PSBEVExTMV9TQ1RQX1NUX1NSX1JFQURfU09DSyB8fCBzLT5zdGF0ZSA9PSBEVExTMV9TQ1RQX1NUX0NSX1JFQURfU09DSykpKQorI2Vsc2UKKwkJaWYgKFNTTF9pbl9pbml0KHMpICYmICFzLT5pbl9oYW5kc2hha2UpCisjZW5kaWYKIAkJewogCQlpPXMtPmhhbmRzaGFrZV9mdW5jKHMpOwogCQlpZiAoaSA8IDApIHJldHVybihpKTsKZGlmZiAtLWdpdCBhL3NzbC9kMV9zcnRwLmMgYi9zc2wvZDFfc3J0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODkzNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zc2wvZDFfc3J0cC5jCkBAIC0wLDAgKzEsNDkzIEBACisvKiBzc2wvdDFfbGliLmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworLyoKKyAgRFRMUyBjb2RlIGJ5IEVyaWMgUmVzY29ybGEgPGVrckBydGZtLmNvbT4KKworICBDb3B5cmlnaHQgKEMpIDIwMDYsIE5ldHdvcmsgUmVzb25hbmNlLCBJbmMuCisgIENvcHlyaWdodCAoQykgMjAxMSwgUlRGTSwgSW5jLgorKi8KKworI2lmbmRlZiBPUEVOU1NMX05PX1NSVFAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSAic3NsX2xvY2wuaCIKKyNpbmNsdWRlICJzcnRwLmgiCisKKworc3RhdGljIFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFIHNydHBfa25vd25fcHJvZmlsZXNbXT0KKyAgICB7CisgICAgeworICAgICJTUlRQX0FFUzEyOF9DTV9TSEExXzgwIiwKKyAgICBTUlRQX0FFUzEyOF9DTV9TSEExXzgwLAorICAgIH0sCisgICAgeworICAgICJTUlRQX0FFUzEyOF9DTV9TSEExXzMyIiwKKyAgICBTUlRQX0FFUzEyOF9DTV9TSEExXzMyLAorICAgIH0sCisjaWYgMAorICAgIHsKKyAgICAiU1JUUF9OVUxMX1NIQTFfODAiLAorICAgIFNSVFBfTlVMTF9TSEExXzgwLAorICAgIH0sCisgICAgeworICAgICJTUlRQX05VTExfU0hBMV8zMiIsCisgICAgU1JUUF9OVUxMX1NIQTFfMzIsCisgICAgfSwKKyNlbmRpZgorICAgIHswfQorICAgIH07CisKK3N0YXRpYyBpbnQgZmluZF9wcm9maWxlX2J5X25hbWUoY2hhciAqcHJvZmlsZV9uYW1lLAorCQkJCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICoqcHB0cix1bnNpZ25lZCBsZW4pCisJeworCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpwOworCisJcD1zcnRwX2tub3duX3Byb2ZpbGVzOworCXdoaWxlKHAtPm5hbWUpCisJCXsKKwkJaWYoKGxlbiA9PSBzdHJsZW4ocC0+bmFtZSkpICYmICFzdHJuY21wKHAtPm5hbWUscHJvZmlsZV9uYW1lLAorCQkJCQkJCWxlbikpCisJCQl7CisJCQkqcHB0cj1wOworCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJcCsrOworCQl9CisKKwlyZXR1cm4gMTsKKwl9CisKK3N0YXRpYyBpbnQgZmluZF9wcm9maWxlX2J5X251bSh1bnNpZ25lZCBwcm9maWxlX251bSwKKwkJCSAgICAgICBTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqKnBwdHIpCisJeworCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpwOworCisJcD1zcnRwX2tub3duX3Byb2ZpbGVzOworCXdoaWxlKHAtPm5hbWUpCisJCXsKKwkJaWYocC0+aWQgPT0gcHJvZmlsZV9udW0pCisJCQl7CisJCQkqcHB0cj1wOworCQkJcmV0dXJuIDA7CisJCQl9CisJCXArKzsKKwkJfQorCisJcmV0dXJuIDE7CisJfQorCitzdGF0aWMgaW50IHNzbF9jdHhfbWFrZV9wcm9maWxlcyhjb25zdCBjaGFyICpwcm9maWxlc19zdHJpbmcsU1RBQ0tfT0YoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpICoqb3V0KQorCXsKKwlTVEFDS19PRihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkgKnByb2ZpbGVzOworCisJY2hhciAqY29sOworCWNoYXIgKnB0cj0oY2hhciAqKXByb2ZpbGVzX3N0cmluZzsKKyAgICAKKwlTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqcDsKKworCWlmKCEocHJvZmlsZXM9c2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfbmV3X251bGwoKSkpCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTUFLRV9QUk9GSUxFUywgU1NMX1JfU1JUUF9DT1VMRF9OT1RfQUxMT0NBVEVfUFJPRklMRVMpOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorCWRvCisJCXsKKwkJY29sPXN0cmNocihwdHIsJzonKTsKKworCQlpZighZmluZF9wcm9maWxlX2J5X25hbWUocHRyLCZwLAorCQkJCQkgY29sID8gY29sLXB0ciA6IChpbnQpc3RybGVuKHB0cikpKQorCQkJeworCQkJc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfcHVzaChwcm9maWxlcyxwKTsKKwkJCX0KKwkJZWxzZQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTUFLRV9QUk9GSUxFUyxTU0xfUl9TUlRQX1VOS05PV05fUFJPVEVDVElPTl9QUk9GSUxFKTsKKwkJCXJldHVybiAxOworCQkJfQorCisJCWlmKGNvbCkgcHRyPWNvbCsxOworCQl9IHdoaWxlIChjb2wpOworCisJKm91dD1wcm9maWxlczsKKyAgICAKKwlyZXR1cm4gMDsKKwl9CisgICAgCitpbnQgU1NMX0NUWF9zZXRfdGxzZXh0X3VzZV9zcnRwKFNTTF9DVFggKmN0eCxjb25zdCBjaGFyICpwcm9maWxlcykKKwl7CisJcmV0dXJuIHNzbF9jdHhfbWFrZV9wcm9maWxlcyhwcm9maWxlcywmY3R4LT5zcnRwX3Byb2ZpbGVzKTsKKwl9CisKK2ludCBTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cChTU0wgKnMsY29uc3QgY2hhciAqcHJvZmlsZXMpCisJeworCXJldHVybiBzc2xfY3R4X21ha2VfcHJvZmlsZXMocHJvZmlsZXMsJnMtPnNydHBfcHJvZmlsZXMpOworCX0KKworCitTVEFDS19PRihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkgKlNTTF9nZXRfc3J0cF9wcm9maWxlcyhTU0wgKnMpCisJeworCWlmKHMgIT0gTlVMTCkKKwkJeworCQlpZihzLT5zcnRwX3Byb2ZpbGVzICE9IE5VTEwpCisJCQl7CisJCQlyZXR1cm4gcy0+c3J0cF9wcm9maWxlczsKKwkJCX0KKwkJZWxzZSBpZigocy0+Y3R4ICE9IE5VTEwpICYmCisJCQkocy0+Y3R4LT5zcnRwX3Byb2ZpbGVzICE9IE5VTEwpKQorCQkJeworCQkJcmV0dXJuIHMtPmN0eC0+c3J0cF9wcm9maWxlczsKKwkJCX0KKwkJfQorCisJcmV0dXJuIE5VTEw7CisJfQorCitTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGUoU1NMICpzKQorCXsKKwlyZXR1cm4gcy0+c3J0cF9wcm9maWxlOworCX0KKworLyogTm90ZTogdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgbGVuZ3RoIGlmIHRoZXJlIGFyZSBubyAKKyAgIHByb2ZpbGVzIHNwZWNpZmllZCAqLworaW50IHNzbF9hZGRfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqcCwgaW50ICpsZW4sIGludCBtYXhsZW4pCisJeworCWludCBjdD0wOworCWludCBpOworCVNUQUNLX09GKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFKSAqY2xudD0wOworCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpwcm9mOworICAgIAorCWNsbnQ9U1NMX2dldF9zcnRwX3Byb2ZpbGVzKHMpOyAgICAKKwljdD1za19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9udW0oY2xudCk7IC8qIC0xIGlmIGNsbnQgPT0gMCAqLworCisJaWYocCkKKwkJeworCQlpZihjdD09MCkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1VTRV9TUlRQX0VYVCxTU0xfUl9FTVBUWV9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUKTsKKwkJCXJldHVybiAxOworCQkJfQorCisJCWlmKCgyICsgY3QqMiArIDEpID4gbWF4bGVuKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhULFNTTF9SX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1RfVE9PX0xPTkcpOworCQkJcmV0dXJuIDE7CisJCQl9CisKKyAgICAgICAgICAgICAgICAvKiBBZGQgdGhlIGxlbmd0aCAqLworICAgICAgICAgICAgICAgIHMybihjdCAqIDIsIHApOworCQlmb3IoaT0wO2k8Y3Q7aSsrKQorCQkJeworCQkJcHJvZj1za19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV92YWx1ZShjbG50LGkpOworCQkJczJuKHByb2YtPmlkLHApOworCQkJfQorCisgICAgICAgICAgICAgICAgLyogQWRkIGFuIGVtcHR5IHVzZV9ta2kgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAqcCsrID0gMDsKKwkJfQorCisJKmxlbj0yICsgY3QqMiArIDE7CisgICAgCisJcmV0dXJuIDA7CisJfQorCisKK2ludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbixpbnQgKmFsKQorCXsKKwlTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqY3Byb2YsKnNwcm9mOworCVNUQUNLX09GKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFKSAqY2xudD0wLCpzcnZyOworICAgICAgICBpbnQgY3Q7CisgICAgICAgIGludCBta2lfbGVuOworCWludCBpLGo7CisJaW50IGlkOworCWludCByZXQ7CisKKyAgICAgICAgIC8qIExlbmd0aCB2YWx1ZSArIHRoZSBNS0kgbGVuZ3RoICovCisgICAgICAgIGlmKGxlbiA8IDMpCisJCXsgICAgICAgICAgICAKKwkJU1NMZXJyKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfQkFEX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QpOworCQkqYWw9U1NMX0FEX0RFQ09ERV9FUlJPUjsKKwkJcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgIC8qIFB1bGwgb2ZmIHRoZSBsZW5ndGggb2YgdGhlIGNpcGhlciBzdWl0ZSBsaXN0ICovCisgICAgICAgIG4ycyhkLCBjdCk7CisgICAgICAgIGxlbiAtPSAyOworICAgICAgICAKKyAgICAgICAgLyogQ2hlY2sgdGhhdCBpdCBpcyBldmVuICovCisJaWYoY3QlMikKKwkJeworCQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1VTRV9TUlRQX0VYVCxTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCk7CisJCSphbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQlyZXR1cm4gMTsKKwkJfQorICAgICAgICAKKyAgICAgICAgLyogQ2hlY2sgdGhhdCBsZW5ndGhzIGFyZSBjb25zaXN0ZW50ICovCisJaWYobGVuIDwgKGN0ICsgMSkpIAorCQl7CisJCVNTTGVycihTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhULFNTTF9SX0JBRF9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUKTsKKwkJKmFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCXJldHVybiAxOworCQl9CisKKyAgICAgICAgCisJY2xudD1za19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9uZXdfbnVsbCgpOworCisJd2hpbGUoY3QpCisJCXsKKwkJbjJzKGQsaWQpOworCQljdC09MjsKKyAgICAgICAgICAgICAgICBsZW4tPTI7CisKKwkJaWYoIWZpbmRfcHJvZmlsZV9ieV9udW0oaWQsJmNwcm9mKSkKKwkJCXsKKwkJCXNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3B1c2goY2xudCxjcHJvZik7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCTsgLyogSWdub3JlICovCisJCQl9CisJCX0KKworICAgICAgICAvKiBOb3cgZXh0cmFjdCB0aGUgTUtJIHZhbHVlIGFzIGEgc2FuaXR5IGNoZWNrLCBidXQgZGlzY2FyZCBpdCBmb3Igbm93ICovCisgICAgICAgIG1raV9sZW4gPSAqZDsKKyAgICAgICAgZCsrOyBsZW4tLTsKKworICAgICAgICBpZiAobWtpX2xlbiAhPSBsZW4pCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfQkFEX1NSVFBfTUtJX1ZBTFVFKTsKKwkJKmFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCXJldHVybiAxOworCQl9CisKKwlzcnZyPVNTTF9nZXRfc3J0cF9wcm9maWxlcyhzKTsKKworCS8qIFBpY2sgb3VyIG1vc3QgcHJlZmVycmVkIHByb2ZpbGUuIElmIG5vIHByb2ZpbGVzIGhhdmUgYmVlbgorCSBjb25maWd1cmVkIHRoZW4gdGhlIG91dGVyIGxvb3AgZG9lc24ndCBydW4gCisJIChza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9udW0oKSA9IC0xKQorCSBhbmQgc28gd2UganVzdCByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZyAqLworCWZvcihpPTA7aTxza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9udW0oc3J2cik7aSsrKQorCQl7CisJCXNwcm9mPXNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX3ZhbHVlKHNydnIsaSk7CisKKwkJZm9yKGo9MDtqPHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX251bShjbG50KTtqKyspCisJCQl7CisJCQljcHJvZj1za19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV92YWx1ZShjbG50LGopOworICAgICAgICAgICAgCisJCQlpZihjcHJvZi0+aWQ9PXNwcm9mLT5pZCkKKwkJCQl7CisJCQkJcy0+c3J0cF9wcm9maWxlPXNwcm9mOworCQkJCSphbD0wOworCQkJCXJldD0wOworCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisJCQl9CisJCX0KKworCXJldD0wOworICAgIAorZG9uZToKKwlpZihjbG50KSBza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9mcmVlKGNsbnQpOworCisJcmV0dXJuIHJldDsKKwl9CisKK2ludCBzc2xfYWRkX3NlcnZlcmhlbGxvX3VzZV9zcnRwX2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnAsIGludCAqbGVuLCBpbnQgbWF4bGVuKQorCXsKKwlpZihwKQorCQl7CisJCWlmKG1heGxlbiA8IDUpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVF9UT09fTE9ORyk7CisJCQlyZXR1cm4gMTsKKwkJCX0KKworCQlpZihzLT5zcnRwX3Byb2ZpbGU9PTApCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfVVNFX1NSVFBfTk9UX05FR09USUFURUQpOworCQkJcmV0dXJuIDE7CisJCQl9CisgICAgICAgICAgICAgICAgczJuKDIsIHApOworCQlzMm4ocy0+c3J0cF9wcm9maWxlLT5pZCxwKTsKKyAgICAgICAgICAgICAgICAqcCsrID0gMDsKKwkJfQorCSpsZW49NTsKKyAgICAKKwlyZXR1cm4gMDsKKwl9CisgICAgCisKK2ludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbixpbnQgKmFsKQorCXsKKwl1bnNpZ25lZCBpZDsKKwlpbnQgaTsKKyAgICAgICAgaW50IGN0OworCisJU1RBQ0tfT0YoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpICpjbG50OworCVNSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpwcm9mOworCisJaWYobGVuIT01KQorCQl7CisJCVNTTGVycihTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVVNFX1NSVFBfRVhULFNTTF9SX0JBRF9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUKTsKKwkJKmFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCXJldHVybiAxOworCQl9CisKKyAgICAgICAgbjJzKGQsIGN0KTsKKwlpZihjdCE9MikKKwkJeworCQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1VTRV9TUlRQX0VYVCxTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCk7CisJCSphbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQlyZXR1cm4gMTsKKwkJfQorCisJbjJzKGQsaWQpOworICAgICAgICBpZiAoKmQpICAvKiBNdXN0IGJlIG5vIE1LSSwgc2luY2Ugd2UgbmV2ZXIgb2ZmZXIgb25lICovCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfQkFEX1NSVFBfTUtJX1ZBTFVFKTsKKwkJKmFsPVNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsKKwkJcmV0dXJuIDE7CisJCX0KKworCWNsbnQ9U1NMX2dldF9zcnRwX3Byb2ZpbGVzKHMpOworCisJLyogVGhyb3cgYW4gZXJyb3IgaWYgdGhlIHNlcnZlciBnYXZlIHVzIGFuIHVuc29saWNpdGVkIGV4dGVuc2lvbiAqLworCWlmIChjbG50ID09IE5VTEwpCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQsU1NMX1JfTk9fU1JUUF9QUk9GSUxFUyk7CisJCSphbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQlyZXR1cm4gMTsKKwkJfQorICAgIAorCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc2VydmVyIGdhdmUgdXMgc29tZXRoaW5nIHdlIHN1cHBvcnQKKwkgICAoYW5kIHByZXN1bWFibHkgb2ZmZXJlZCkKKwkqLworCWZvcihpPTA7aTxza19TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9udW0oY2xudCk7aSsrKQorCQl7CisJCXByb2Y9c2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfdmFsdWUoY2xudCxpKTsKKwkgICAgCisJCWlmKHByb2YtPmlkID09IGlkKQorCQkJeworCQkJcy0+c3J0cF9wcm9maWxlPXByb2Y7CisJCQkqYWw9MDsKKwkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1VTRV9TUlRQX0VYVCxTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCk7CisJKmFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJcmV0dXJuIDE7CisJfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3NsL2QxX3NydnIuYyBiL3NzbC9kMV9zcnZyLmMKaW5kZXggMTdjYzAyMi4uNTgyMjM3OSAxMDA2NDQKLS0tIGEvc3NsL2QxX3NydnIuYworKysgYi9zc2wvZDFfc3J2ci5jCkBAIC0xNTEsNiArMTUxLDEwIEBACiAJaW50IHJldD0gLTE7CiAJaW50IG5ld19zdGF0ZSxzdGF0ZSxza2lwPTA7CiAJaW50IGxpc3RlbjsKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJdW5zaWduZWQgY2hhciBzY3RwYXV0aGtleVs2NF07CisJY2hhciBsYWJlbGJ1ZmZlcltzaXplb2YoRFRMUzFfU0NUUF9BVVRIX0xBQkVMKV07CisjZW5kaWYKIAogCVJBTkRfYWRkKCZUaW1lLHNpemVvZihUaW1lKSwwKTsKIAlFUlJfY2xlYXJfZXJyb3IoKTsKQEAgLTE2OCw2ICsxNzIsMTMgQEAKIAlpZiAoIVNTTF9pbl9pbml0KHMpIHx8IFNTTF9pbl9iZWZvcmUocykpIFNTTF9jbGVhcihzKTsKIAogCXMtPmQxLT5saXN0ZW4gPSBsaXN0ZW47CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCS8qIE5vdGlmeSBTQ1RQIEJJTyBzb2NrZXQgdG8gZW50ZXIgaGFuZHNoYWtlCisJICogbW9kZSBhbmQgcHJldmVudCBzdHJlYW0gaWRlbnRpZmllciBvdGhlcgorCSAqIHRoYW4gMC4gV2lsbCBiZSBpZ25vcmVkIGlmIG5vIFNDVFAgaXMgdXNlZC4KKwkgKi8KKwlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfU0VUX0lOX0hBTkRTSEFLRSwgcy0+aW5faGFuZHNoYWtlLCBOVUxMKTsKKyNlbmRpZgogCiAJaWYgKHMtPmNlcnQgPT0gTlVMTCkKIAkJewpAQCAtMTc1LDYgKzE4NiwxOSBAQAogCQlyZXR1cm4oLTEpOwogCQl9CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19IRUFSVEJFQVRTCisJLyogSWYgd2UncmUgYXdhaXRpbmcgYSBIZWFydGJlYXRSZXNwb25zZSwgcHJldGVuZCB3ZQorCSAqIGFscmVhZHkgZ290IGFuZCBkb24ndCBhd2FpdCBpdCBhbnltb3JlLCBiZWNhdXNlCisJICogSGVhcnRiZWF0cyBkb24ndCBtYWtlIHNlbnNlIGR1cmluZyBoYW5kc2hha2VzIGFueXdheS4KKwkgKi8KKwlpZiAocy0+dGxzZXh0X2hiX3BlbmRpbmcpCisJCXsKKwkJZHRsczFfc3RvcF90aW1lcihzKTsKKwkJcy0+dGxzZXh0X2hiX3BlbmRpbmcgPSAwOworCQlzLT50bHNleHRfaGJfc2VxKys7CisJCX0KKyNlbmRpZgorCiAJZm9yICg7OykKIAkJewogCQlzdGF0ZT1zLT5zdGF0ZTsKQEAgLTE4Miw3ICsyMDYsNyBAQAogCQlzd2l0Y2ggKHMtPnN0YXRlKQogCQkJewogCQljYXNlIFNTTF9TVF9SRU5FR09USUFURToKLQkJCXMtPm5ld19zZXNzaW9uPTE7CisJCQlzLT5yZW5lZ290aWF0ZT0xOwogCQkJLyogcy0+c3RhdGU9U1NMX1NUX0FDQ0VQVDsgKi8KIAogCQljYXNlIFNTTF9TVF9CRUZPUkU6CkBAIC0yMjcsOCArMjUxLDEyIEBACiAJCQkJewogCQkJCS8qIE9rLCB3ZSBub3cgbmVlZCB0byBwdXNoIG9uIGEgYnVmZmVyaW5nIEJJTyBzbyB0aGF0CiAJCQkJICogdGhlIG91dHB1dCBpcyBzZW50IGluIGEgd2F5IHRoYXQgVENQIGxpa2VzIDotKQorCQkJCSAqIC4uLmJ1dCBub3Qgd2l0aCBTQ1RQIDotKQogCQkJCSAqLwotCQkJCWlmICghc3NsX2luaXRfd2Jpb19idWZmZXIocywxKSkgeyByZXQ9IC0xOyBnb3RvIGVuZDsgfQorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJCQlpZiAoIUJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfd2JpbyhzKSkpCisjZW5kaWYKKwkJCQkJaWYgKCFzc2xfaW5pdF93YmlvX2J1ZmZlcihzLDEpKSB7IHJldD0gLTE7IGdvdG8gZW5kOyB9CiAKIAkJCQlzc2wzX2luaXRfZmluaXNoZWRfbWFjKHMpOwogCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfQ0xOVF9IRUxMT19BOwpAQCAtMzEzLDI1ICszNDEsNzUgQEAKIAkJCQlzc2wzX2luaXRfZmluaXNoZWRfbWFjKHMpOwogCQkJYnJlYWs7CiAJCQkKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJCWNhc2UgRFRMUzFfU0NUUF9TVF9TUl9SRUFEX1NPQ0s6CisJCQkKKwkJCWlmIChCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZyhTU0xfZ2V0X3JiaW8ocykpKQkJCisJCQkJeworCQkJCXMtPnMzLT5pbl9yZWFkX2FwcF9kYXRhPTI7CisJCQkJcy0+cndzdGF0ZT1TU0xfUkVBRElORzsKKwkJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQlCSU9fc2V0X3JldHJ5X3JlYWQoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGVuZDsKKwkJCQl9CisJCQkKKwkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfRklOSVNIRURfQTsKKwkJCWJyZWFrOworCQkJCisJCWNhc2UgRFRMUzFfU0NUUF9TVF9TV19XUklURV9TT0NLOgorCQkJcmV0ID0gQklPX2RncmFtX3NjdHBfd2FpdF9mb3JfZHJ5KFNTTF9nZXRfd2JpbyhzKSk7CisJCQlpZiAocmV0IDwgMCkgZ290byBlbmQ7CisJCQkKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQl7CisJCQkJaWYgKHMtPmQxLT5uZXh0X3N0YXRlICE9IFNTTF9TVF9PSykKKwkJCQkJeworCQkJCQlzLT5zMy0+aW5fcmVhZF9hcHBfZGF0YT0yOworCQkJCQlzLT5yd3N0YXRlPVNTTF9SRUFESU5HOworCQkJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoU1NMX2dldF9yYmlvKHMpKTsKKwkJCQkJQklPX3NldF9yZXRyeV9yZWFkKFNTTF9nZXRfcmJpbyhzKSk7CisJCQkJCXJldCA9IC0xOworCQkJCQlnb3RvIGVuZDsKKwkJCQkJfQorCQkJCX0KKworCQkJcy0+c3RhdGU9cy0+ZDEtPm5leHRfc3RhdGU7CisJCQlicmVhazsKKyNlbmRpZgorCiAJCWNhc2UgU1NMM19TVF9TV19TUlZSX0hFTExPX0E6CiAJCWNhc2UgU1NMM19TVF9TV19TUlZSX0hFTExPX0I6Ci0JCQlzLT5uZXdfc2Vzc2lvbiA9IDI7CisJCQlzLT5yZW5lZ290aWF0ZSA9IDI7CiAJCQlkdGxzMV9zdGFydF90aW1lcihzKTsKIAkJCXJldD1kdGxzMV9zZW5kX3NlcnZlcl9oZWxsbyhzKTsKIAkJCWlmIChyZXQgPD0gMCkgZ290byBlbmQ7CiAKLSNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKIAkJCWlmIChzLT5oaXQpCiAJCQkJeworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJCQkvKiBBZGQgbmV3IHNoYXJlZCBrZXkgZm9yIFNDVFAtQXV0aCwKKwkJCQkgKiB3aWxsIGJlIGlnbm9yZWQgaWYgbm8gU0NUUCB1c2VkLgorCQkJCSAqLworCQkJCXNucHJpbnRmKChjaGFyKikgbGFiZWxidWZmZXIsIHNpemVvZihEVExTMV9TQ1RQX0FVVEhfTEFCRUwpLAorCQkJCSAgICAgICAgIERUTFMxX1NDVFBfQVVUSF9MQUJFTCk7CisKKwkJCQlTU0xfZXhwb3J0X2tleWluZ19tYXRlcmlhbChzLCBzY3RwYXV0aGtleSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2N0cGF1dGhrZXkpLCBsYWJlbGJ1ZmZlciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGFiZWxidWZmZXIpLCBOVUxMLCAwLCAwKTsKKwkJCQkKKwkJCQlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfQUREX0FVVEhfS0VZLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzY3RwYXV0aGtleSksIHNjdHBhdXRoa2V5KTsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCQkJCWlmIChzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkKQogCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX1NFU1NJT05fVElDS0VUX0E7CiAJCQkJZWxzZQogCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX0NIQU5HRV9BOwotCQkJCX0KICNlbHNlCi0JCQlpZiAocy0+aGl0KQotCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX0NIQU5HRV9BOworCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfQ0hBTkdFX0E7CiAjZW5kaWYKKwkJCQl9CiAJCQllbHNlCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19DRVJUX0E7CiAJCQlzLT5pbml0X251bT0wOwpAQCAtNDQxLDYgKzUxOSwxMyBAQAogCQkJCXNraXA9MTsKIAkJCQlzLT5zMy0+dG1wLmNlcnRfcmVxdWVzdD0wOwogCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU1JWUl9ET05FX0E7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3diaW8ocykpKQorCQkJCQl7CisJCQkJCXMtPmQxLT5uZXh0X3N0YXRlID0gU1NMM19TVF9TV19TUlZSX0RPTkVfQTsKKwkJCQkJcy0+c3RhdGUgPSBEVExTMV9TQ1RQX1NUX1NXX1dSSVRFX1NPQ0s7CisJCQkJCX0KKyNlbmRpZgogCQkJCX0KIAkJCWVsc2UKIAkJCQl7CkBAIC00NTAsOSArNTM1LDIzIEBACiAJCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKICNpZm5kZWYgTkVUU0NBUEVfSEFOR19CVUcKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX1NSVlJfRE9ORV9BOworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJCQlpZiAoQklPX2RncmFtX2lzX3NjdHAoU1NMX2dldF93YmlvKHMpKSkKKwkJCQkJeworCQkJCQlzLT5kMS0+bmV4dF9zdGF0ZSA9IFNTTDNfU1RfU1dfU1JWUl9ET05FX0E7CisJCQkJCXMtPnN0YXRlID0gRFRMUzFfU0NUUF9TVF9TV19XUklURV9TT0NLOworCQkJCQl9CisjZW5kaWYKICNlbHNlCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19GTFVTSDsKIAkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9U1NMM19TVF9TUl9DRVJUX0E7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3diaW8ocykpKQorCQkJCQl7CisJCQkJCXMtPmQxLT5uZXh0X3N0YXRlID0gcy0+czMtPnRtcC5uZXh0X3N0YXRlOworCQkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9RFRMUzFfU0NUUF9TVF9TV19XUklURV9TT0NLOworCQkJCQl9CisjZW5kaWYKICNlbmRpZgogCQkJCXMtPmluaXRfbnVtPTA7CiAJCQkJfQpAQCAtNDcyLDYgKzU3MSwxMyBAQAogCQkJcy0+cndzdGF0ZT1TU0xfV1JJVElORzsKIAkJCWlmIChCSU9fZmx1c2gocy0+d2JpbykgPD0gMCkKIAkJCQl7CisJCQkJLyogSWYgdGhlIHdyaXRlIGVycm9yIHdhcyBmYXRhbCwgc3RvcCB0cnlpbmcgKi8KKwkJCQlpZiAoIUJJT19zaG91bGRfcmV0cnkocy0+d2JpbykpCisJCQkJCXsKKwkJCQkJcy0+cndzdGF0ZT1TU0xfTk9USElORzsKKwkJCQkJcy0+c3RhdGU9cy0+czMtPnRtcC5uZXh0X3N0YXRlOworCQkJCQl9CisJCQkJCiAJCQkJcmV0PSAtMTsKIAkJCQlnb3RvIGVuZDsKIAkJCQl9CkBAIC01MDQsNiArNjEwLDIxIEBACiAJCWNhc2UgU1NMM19TVF9TUl9LRVlfRVhDSF9COgogCQkJcmV0PXNzbDNfZ2V0X2NsaWVudF9rZXlfZXhjaGFuZ2Uocyk7CiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJCS8qIEFkZCBuZXcgc2hhcmVkIGtleSBmb3IgU0NUUC1BdXRoLAorCQkJICogd2lsbCBiZSBpZ25vcmVkIGlmIG5vIFNDVFAgdXNlZC4KKwkJCSAqLworCQkJc25wcmludGYoKGNoYXIgKikgbGFiZWxidWZmZXIsIHNpemVvZihEVExTMV9TQ1RQX0FVVEhfTEFCRUwpLAorCQkJICAgICAgICAgRFRMUzFfU0NUUF9BVVRIX0xBQkVMKTsKKworCQkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwocywgc2N0cGF1dGhrZXksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2N0cGF1dGhrZXkpLCBsYWJlbGJ1ZmZlciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsYWJlbGJ1ZmZlciksIE5VTEwsIDAsIDApOworCisJCQlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfQUREX0FVVEhfS0VZLAorCQkJICAgICAgICAgc2l6ZW9mKHNjdHBhdXRoa2V5KSwgc2N0cGF1dGhrZXkpOworI2VuZGlmCisKIAkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfQ0VSVF9WUkZZX0E7CiAJCQlzLT5pbml0X251bT0wOwogCkBAIC01NDAsOCArNjYxLDEzIEBACiAJCQkvKiB3ZSBzaG91bGQgZGVjaWRlIGlmIHdlIGV4cGVjdGVkIHRoaXMgb25lICovCiAJCQlyZXQ9c3NsM19nZXRfY2VydF92ZXJpZnkocyk7CiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotCi0JCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0ZJTklTSEVEX0E7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJaWYgKEJJT19kZ3JhbV9pc19zY3RwKFNTTF9nZXRfd2JpbyhzKSkgJiYKKwkJCSAgICBzdGF0ZSA9PSBTU0xfU1RfUkVORUdPVElBVEUpCisJCQkJcy0+c3RhdGU9RFRMUzFfU0NUUF9TVF9TUl9SRUFEX1NPQ0s7CisJCQllbHNlCisjZW5kaWYJCQkKKwkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NSX0ZJTklTSEVEX0E7CiAJCQlzLT5pbml0X251bT0wOwogCQkJYnJlYWs7CiAKQEAgLTU5Myw2ICs3MTksMTQgQEAKIAkJCQlTU0wzX1NUX1NXX0NIQU5HRV9BLFNTTDNfU1RfU1dfQ0hBTkdFX0IpOwogCiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOworCisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJLyogQ2hhbmdlIHRvIG5ldyBzaGFyZWQga2V5IG9mIFNDVFAtQXV0aCwKKwkJCSAqIHdpbGwgYmUgaWdub3JlZCBpZiBubyBTQ1RQIHVzZWQuCisJCQkgKi8KKwkJCUJJT19jdHJsKFNTTF9nZXRfd2JpbyhzKSwgQklPX0NUUkxfREdSQU1fU0NUUF9ORVhUX0FVVEhfS0VZLCAwLCBOVUxMKTsKKyNlbmRpZgorCiAJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX0ZJTklTSEVEX0E7CiAJCQlzLT5pbml0X251bT0wOwogCkBAIC02MTcsNyArNzUxLDE2IEBACiAJCQlpZiAocy0+aGl0KQogCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0wzX1NUX1NSX0ZJTklTSEVEX0E7CiAJCQllbHNlCisJCQkJewogCQkJCXMtPnMzLT50bXAubmV4dF9zdGF0ZT1TU0xfU1RfT0s7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCQkJCWlmIChCSU9fZGdyYW1faXNfc2N0cChTU0xfZ2V0X3diaW8ocykpKQorCQkJCQl7CisJCQkJCXMtPmQxLT5uZXh0X3N0YXRlID0gcy0+czMtPnRtcC5uZXh0X3N0YXRlOworCQkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9RFRMUzFfU0NUUF9TVF9TV19XUklURV9TT0NLOworCQkJCQl9CisjZW5kaWYKKwkJCQl9CiAJCQlzLT5pbml0X251bT0wOwogCQkJYnJlYWs7CiAKQEAgLTYzNSwxMSArNzc4LDkgQEAKIAogCQkJcy0+aW5pdF9udW09MDsKIAotCQkJaWYgKHMtPm5ld19zZXNzaW9uID09IDIpIC8qIHNraXBwZWQgaWYgd2UganVzdCBzZW50IGEgSGVsbG9SZXF1ZXN0ICovCisJCQlpZiAocy0+cmVuZWdvdGlhdGUgPT0gMikgLyogc2tpcHBlZCBpZiB3ZSBqdXN0IHNlbnQgYSBIZWxsb1JlcXVlc3QgKi8KIAkJCQl7Ci0JCQkJLyogYWN0dWFsbHkgbm90IG5lY2Vzc2FyaWx5IGEgJ25ldycgc2Vzc2lvbiB1bmxlc3MKLQkJCQkgKiBTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04gaXMgc2V0ICovCi0JCQkJCisJCQkJcy0+cmVuZWdvdGlhdGU9MDsKIAkJCQlzLT5uZXdfc2Vzc2lvbj0wOwogCQkJCQogCQkJCXNzbF91cGRhdGVfY2FjaGUocyxTU0xfU0VTU19DQUNIRV9TRVJWRVIpOwpAQCAtNjkxLDYgKzgzMiwxNCBAQAogCS8qIEJJT19mbHVzaChzLT53YmlvKTsgKi8KIAogCXMtPmluX2hhbmRzaGFrZS0tOworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKwkJLyogTm90aWZ5IFNDVFAgQklPIHNvY2tldCB0byBsZWF2ZSBoYW5kc2hha2UKKwkJICogbW9kZSBhbmQgcHJldmVudCBzdHJlYW0gaWRlbnRpZmllciBvdGhlcgorCQkgKiB0aGFuIDAuIFdpbGwgYmUgaWdub3JlZCBpZiBubyBTQ1RQIGlzIHVzZWQuCisJCSAqLworCQlCSU9fY3RybChTU0xfZ2V0X3diaW8ocyksIEJJT19DVFJMX0RHUkFNX1NDVFBfU0VUX0lOX0hBTkRTSEFLRSwgcy0+aW5faGFuZHNoYWtlLCBOVUxMKTsKKyNlbmRpZgorCiAJaWYgKGNiICE9IE5VTEwpCiAJCWNiKHMsU1NMX0NCX0FDQ0VQVF9FWElULHJldCk7CiAJcmV0dXJuKHJldCk7CkBAIC0xMTQ2LDcgKzEyOTUsNyBAQAogCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FOVUxMKQogCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spKQogCQkJewotCQkJaWYgKChwa2V5PXNzbF9nZXRfc2lnbl9wa2V5KHMscy0+czMtPnRtcC5uZXdfY2lwaGVyKSkKKwkJCWlmICgocGtleT1zc2xfZ2V0X3NpZ25fcGtleShzLHMtPnMzLT50bXAubmV3X2NpcGhlciwgTlVMTCkpCiAJCQkJPT0gTlVMTCkKIAkJCQl7CiAJCQkJYWw9U1NMX0FEX0RFQ09ERV9FUlJPUjsKZGlmZiAtLWdpdCBhL3NzbC9kdGxzMS5oIGIvc3NsL2R0bHMxLmgKaW5kZXggMjkwMGQxZC4uNTAwOGJmNiAxMDA2NDQKLS0tIGEvc3NsL2R0bHMxLmgKKysrIGIvc3NsL2R0bHMxLmgKQEAgLTEwNSw2ICsxMDUsMTEgQEAKICNkZWZpbmUgRFRMUzFfQUxfSEVBREVSX0xFTkdUSCAgICAgICAgICAgICAgICAgICAyCiAjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKworI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKyNkZWZpbmUgRFRMUzFfU0NUUF9BVVRIX0xBQkVMCSJFWFBPUlRFUl9EVExTX09WRVJfU0NUUCIKKyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBkdGxzMV9iaXRtYXBfc3QKIAl7CkBAIC0yMjcsNyArMjMyLDcgQEAKIAogCXN0cnVjdCBkdGxzMV90aW1lb3V0X3N0IHRpbWVvdXQ7CiAKLQkvKiBJbmRpY2F0ZXMgd2hlbiB0aGUgbGFzdCBoYW5kc2hha2UgbXNnIHNlbnQgd2lsbCB0aW1lb3V0ICovCisJLyogSW5kaWNhdGVzIHdoZW4gdGhlIGxhc3QgaGFuZHNoYWtlIG1zZyBvciBoZWFydGJlYXQgc2VudCB3aWxsIHRpbWVvdXQgKi8KIAlzdHJ1Y3QgdGltZXZhbCBuZXh0X3RpbWVvdXQ7CiAKIAkvKiBUaW1lb3V0IGR1cmF0aW9uICovCkBAIC0yNDMsNiArMjQ4LDEzIEBACiAJdW5zaWduZWQgaW50IHJldHJhbnNtaXR0aW5nOwogCXVuc2lnbmVkIGludCBjaGFuZ2VfY2lwaGVyX3NwZWNfb2s7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisJLyogdXNlZCB3aGVuIFNTTF9TVF9YWF9GTFVTSCBpcyBlbnRlcmVkICovCisJaW50IG5leHRfc3RhdGU7CisKKwlpbnQgc2h1dGRvd25fcmVjZWl2ZWQ7CisjZW5kaWYKKwogCX0gRFRMUzFfU1RBVEU7CiAKIHR5cGVkZWYgc3RydWN0IGR0bHMxX3JlY29yZF9kYXRhX3N0CkBAIC0yNTEsOCArMjYzLDEyIEBACiAJdW5zaWduZWQgaW50ICAgcGFja2V0X2xlbmd0aDsKIAlTU0wzX0JVRkZFUiAgICByYnVmOwogCVNTTDNfUkVDT1JEICAgIHJyZWM7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0NUUAorCXN0cnVjdCBiaW9fZGdyYW1fc2N0cF9yY3ZpbmZvIHJlY29yZGluZm87CisjZW5kaWYKIAl9IERUTFMxX1JFQ09SRF9EQVRBOwogCisjZW5kaWYKIAogLyogVGltZW91dCBtdWx0aXBsaWVycyAodGltZW91dCBzbGljZSBpcyBkZWZpbmVkIGluIGFwcHMvdGltZW91dHMuaCAqLwogI2RlZmluZSBEVExTMV9UTU9fUkVBRF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAyCmRpZmYgLS1naXQgYS9zc2wva3NzbC5jIGIvc3NsL2tzc2wuYwppbmRleCBiODIwZTM3Li5mZDdjNjdiIDEwMDY0NAotLS0gYS9zc2wva3NzbC5jCisrKyBiL3NzbC9rc3NsLmMKQEAgLTIxOTQsNiArMjE5NCwyMiBAQAogCXJldHVybiBFTk9NRU07CiAJfQogCit2b2lkIFNTTF9zZXQwX2tzc2xfY3R4KFNTTCAqcywgS1NTTF9DVFggKmtjdHgpCisJeworCXMtPmtzc2xfY3R4ID0ga2N0eDsKKwl9IAorCitLU1NMX0NUWCAqIFNTTF9nZXQwX2tzc2xfY3R4KFNTTCAqcykKKwl7CisJcmV0dXJuIHMtPmtzc2xfY3R4OworCX0KKworY2hhciAqa3NzbF9jdHhfZ2V0MF9jbGllbnRfcHJpbmMoS1NTTF9DVFggKmtjdHgpCisJeworCWlmIChrY3R4KQorCQlyZXR1cm4ga2N0eC0+Y2xpZW50X3ByaW5jOworCXJldHVybiBOVUxMOworCX0KIAogI2Vsc2UgLyogIU9QRU5TU0xfTk9fS1JCNSAqLwogCmRpZmYgLS1naXQgYS9zc2wva3NzbC5oIGIvc3NsL2tzc2wuaAppbmRleCBhM2QyMGUxLi44MjQyZmQ1IDEwMDY0NAotLS0gYS9zc2wva3NzbC5oCisrKyBiL3NzbC9rc3NsLmgKQEAgLTE3Miw2ICsxNzIsMTAgQEAKIAkJCSAgICAgICAgICAgIGtyYjVfdGltZXN0YW1wICphdGltZXAsIEtTU0xfRVJSICprc3NsX2Vycik7CiB1bnNpZ25lZCBjaGFyCSprc3NsX3NraXBfY29uZm91bmQoa3JiNV9lbmN0eXBlIGVuY3R5cGUsIHVuc2lnbmVkIGNoYXIgKmF1dGhuKTsKIAordm9pZCBTU0xfc2V0MF9rc3NsX2N0eChTU0wgKnMsIEtTU0xfQ1RYICprY3R4KTsKK0tTU0xfQ1RYICogU1NMX2dldDBfa3NzbF9jdHgoU1NMICpzKTsKK2NoYXIgKmtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jKEtTU0xfQ1RYICprY3R4KTsKKwogI2lmZGVmICBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zc2wvczIzX2NsbnQuYyBiL3NzbC9zMjNfY2xudC5jCmluZGV4IGY0MWZlM2EuLjZhNzU4NDMgMTAwNjQ0Ci0tLSBhL3NzbC9zMjNfY2xudC5jCisrKyBiL3NzbC9zMjNfY2xudC5jCkBAIC0xMjksNiArMTI5LDEwIEBACiAJCXJldHVybihTU0x2M19jbGllbnRfbWV0aG9kKCkpOwogCWVsc2UgaWYgKHZlciA9PSBUTFMxX1ZFUlNJT04pCiAJCXJldHVybihUTFN2MV9jbGllbnRfbWV0aG9kKCkpOworCWVsc2UgaWYgKHZlciA9PSBUTFMxXzFfVkVSU0lPTikKKwkJcmV0dXJuKFRMU3YxXzFfY2xpZW50X21ldGhvZCgpKTsKKwllbHNlIGlmICh2ZXIgPT0gVExTMV8yX1ZFUlNJT04pCisJCXJldHVybihUTFN2MV8yX2NsaWVudF9tZXRob2QoKSk7CiAJZWxzZQogCQlyZXR1cm4oTlVMTCk7CiAJfQpAQCAtMjg0LDcgKzI4OCwxNSBAQAogCWlmIChzc2wyX2NvbXBhdCAmJiBzc2wyM19ub19zc2wyX2NpcGhlcnMocykpCiAJCXNzbDJfY29tcGF0ID0gMDsKIAotCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjEpKQorCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjFfMikpCisJCXsKKwkJdmVyc2lvbiA9IFRMUzFfMl9WRVJTSU9OOworCQl9CisJZWxzZSBpZiAoIShzLT5vcHRpb25zICYgU1NMX09QX05PX1RMU3YxXzEpKQorCQl7CisJCXZlcnNpb24gPSBUTFMxXzFfVkVSU0lPTjsKKwkJfQorCWVsc2UgaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MSkpCiAJCXsKIAkJdmVyc2lvbiA9IFRMUzFfVkVSU0lPTjsKIAkJfQpAQCAtMzI5LDExICszNDEsMjkgQEAKIAkJaWYgKFJBTkRfcHNldWRvX2J5dGVzKHAsU1NMM19SQU5ET01fU0laRS00KSA8PSAwKQogCQkJcmV0dXJuIC0xOwogCi0JCWlmICh2ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKKwkJaWYgKHZlcnNpb24gPT0gVExTMV8yX1ZFUlNJT04pCisJCQl7CisJCQl2ZXJzaW9uX21ham9yID0gVExTMV8yX1ZFUlNJT05fTUFKT1I7CisJCQl2ZXJzaW9uX21pbm9yID0gVExTMV8yX1ZFUlNJT05fTUlOT1I7CisJCQl9CisJCWVsc2UgaWYgKHZlcnNpb24gPT0gVExTMV8xX1ZFUlNJT04pCisJCQl7CisJCQl2ZXJzaW9uX21ham9yID0gVExTMV8xX1ZFUlNJT05fTUFKT1I7CisJCQl2ZXJzaW9uX21pbm9yID0gVExTMV8xX1ZFUlNJT05fTUlOT1I7CisJCQl9CisJCWVsc2UgaWYgKHZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQogCQkJewogCQkJdmVyc2lvbl9tYWpvciA9IFRMUzFfVkVSU0lPTl9NQUpPUjsKIAkJCXZlcnNpb25fbWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7CiAJCQl9CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCWVsc2UgaWYoRklQU19tb2RlKCkpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLAorCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisJCQlyZXR1cm4gLTE7CisJCQl9CisjZW5kaWYKIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCiAJCQl7CiAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9OX01BSk9SOwpAQCAtNjA4LDcgKzYzOCw3IEBACiAjZW5kaWYKIAkJfQogCWVsc2UgaWYgKHBbMV0gPT0gU1NMM19WRVJTSU9OX01BSk9SICYmCi0JICAgICAgICAgKHBbMl0gPT0gU1NMM19WRVJTSU9OX01JTk9SIHx8IHBbMl0gPT0gVExTMV9WRVJTSU9OX01JTk9SKSAmJgorCSAgICAgICAgIHBbMl0gPD0gVExTMV8yX1ZFUlNJT05fTUlOT1IgJiYKIAkgICAgICAgICAoKHBbMF0gPT0gU1NMM19SVF9IQU5EU0hBS0UgJiYgcFs1XSA9PSBTU0wzX01UX1NFUlZFUl9IRUxMTykgfHwKIAkgICAgICAgICAgKHBbMF0gPT0gU1NMM19SVF9BTEVSVCAmJiBwWzNdID09IDAgJiYgcFs0XSA9PSAyKSkpCiAJCXsKQEAgLTYxNyw2ICs2NDcsMTQgQEAKIAkJaWYgKChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19TU0x2MykpCiAJCQl7CisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCQlpZihGSVBTX21vZGUoKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sCisJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisjZW5kaWYKIAkJCXMtPnZlcnNpb249U1NMM19WRVJTSU9OOwogCQkJcy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2QoKTsKIAkJCX0KQEAgLTYyNiw2ICs2NjQsMTggQEAKIAkJCXMtPnZlcnNpb249VExTMV9WRVJTSU9OOwogCQkJcy0+bWV0aG9kPVRMU3YxX2NsaWVudF9tZXRob2QoKTsKIAkJCX0KKwkJZWxzZSBpZiAoKHBbMl0gPT0gVExTMV8xX1ZFUlNJT05fTUlOT1IpICYmCisJCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjFfMSkpCisJCQl7CisJCQlzLT52ZXJzaW9uPVRMUzFfMV9WRVJTSU9OOworCQkJcy0+bWV0aG9kPVRMU3YxXzFfY2xpZW50X21ldGhvZCgpOworCQkJfQorCQllbHNlIGlmICgocFsyXSA9PSBUTFMxXzJfVkVSU0lPTl9NSU5PUikgJiYKKwkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MV8yKSkKKwkJCXsKKwkJCXMtPnZlcnNpb249VExTMV8yX1ZFUlNJT047CisJCQlzLT5tZXRob2Q9VExTdjFfMl9jbGllbnRfbWV0aG9kKCk7CisJCQl9CiAJCWVsc2UKIAkJCXsKIAkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLFNTTF9SX1VOU1VQUE9SVEVEX1BST1RPQ09MKTsKZGlmZiAtLWdpdCBhL3NzbC9zMjNfbWV0aC5jIGIvc3NsL3MyM19tZXRoLmMKaW5kZXggYzYwOTllZi4uNDBlYWUwZiAxMDA2NDQKLS0tIGEvc3NsL3MyM19tZXRoLmMKKysrIGIvc3NsL3MyM19tZXRoLmMKQEAgLTc2LDYgKzc2LDEwIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTMQogCWlmICh2ZXIgPT0gVExTMV9WRVJTSU9OKQogCQlyZXR1cm4oVExTdjFfbWV0aG9kKCkpOworCWVsc2UgaWYgKHZlciA9PSBUTFMxXzFfVkVSU0lPTikKKwkJcmV0dXJuKFRMU3YxXzFfbWV0aG9kKCkpOworCWVsc2UgaWYgKHZlciA9PSBUTFMxXzJfVkVSU0lPTikKKwkJcmV0dXJuKFRMU3YxXzJfbWV0aG9kKCkpOwogCWVsc2UKICNlbmRpZgogCQlyZXR1cm4oTlVMTCk7CmRpZmYgLS1naXQgYS9zc2wvczIzX3NydnIuYyBiL3NzbC9zMjNfc3J2ci5jCmluZGV4IGUyMjg3OWMuLjRjNDcyMWYgMTAwNjQ0Ci0tLSBhL3NzbC9zMjNfc3J2ci5jCisrKyBiL3NzbC9zMjNfc3J2ci5jCkBAIC0xMTUsNiArMTE1LDkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2lmZGVmIE9QRU5TU0xfRklQUworI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBTU0xfTUVUSE9EICpzc2wyM19nZXRfc2VydmVyX21ldGhvZChpbnQgdmVyKTsKIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcyk7CkBAIC0xMjgsNiArMTMxLDEwIEBACiAJCXJldHVybihTU0x2M19zZXJ2ZXJfbWV0aG9kKCkpOwogCWVsc2UgaWYgKHZlciA9PSBUTFMxX1ZFUlNJT04pCiAJCXJldHVybihUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOworCWVsc2UgaWYgKHZlciA9PSBUTFMxXzFfVkVSU0lPTikKKwkJcmV0dXJuKFRMU3YxXzFfc2VydmVyX21ldGhvZCgpKTsKKwllbHNlIGlmICh2ZXIgPT0gVExTMV8yX1ZFUlNJT04pCisJCXJldHVybihUTFN2MV8yX3NlcnZlcl9tZXRob2QoKSk7CiAJZWxzZQogCQlyZXR1cm4oTlVMTCk7CiAJfQpAQCAtMjgzLDcgKzI5MCwyMCBAQAogCQkJCS8qIFNTTHYzL1RMU3YxICovCiAJCQkJaWYgKHBbNF0gPj0gVExTMV9WRVJTSU9OX01JTk9SKQogCQkJCQl7Ci0JCQkJCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjEpKQorCQkJCQlpZiAocFs0XSA+PSBUTFMxXzJfVkVSU0lPTl9NSU5PUiAmJgorCQkJCQkgICAhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjFfMikpCisJCQkJCQl7CisJCQkJCQlzLT52ZXJzaW9uPVRMUzFfMl9WRVJTSU9OOworCQkJCQkJcy0+c3RhdGU9U1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19COworCQkJCQkJfQorCQkJCQllbHNlIGlmIChwWzRdID49IFRMUzFfMV9WRVJTSU9OX01JTk9SICYmCisJCQkJCSAgICEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MV8xKSkKKwkJCQkJCXsKKwkJCQkJCXMtPnZlcnNpb249VExTMV8xX1ZFUlNJT047CisJCQkJCQkvKiB0eXBlPTI7ICovIC8qIGRvbmUgbGF0ZXIgdG8gc3Vydml2ZSByZXN0YXJ0cyAqLworCQkJCQkJcy0+c3RhdGU9U1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19COworCQkJCQkJfQorCQkJCQllbHNlIGlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjEpKQogCQkJCQkJewogCQkJCQkJcy0+dmVyc2lvbj1UTFMxX1ZFUlNJT047CiAJCQkJCQkvKiB0eXBlPTI7ICovIC8qIGRvbmUgbGF0ZXIgdG8gc3Vydml2ZSByZXN0YXJ0cyAqLwpAQCAtMzUwLDcgKzM3MCwxOSBAQAogCQkJCXZbMV09cFsxMF07IC8qIG1pbm9yIHZlcnNpb24gYWNjb3JkaW5nIHRvIGNsaWVudF92ZXJzaW9uICovCiAJCQlpZiAodlsxXSA+PSBUTFMxX1ZFUlNJT05fTUlOT1IpCiAJCQkJewotCQkJCWlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjEpKQorCQkJCWlmICh2WzFdID49IFRMUzFfMl9WRVJTSU9OX01JTk9SICYmCisJCQkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MV8yKSkKKwkJCQkJeworCQkJCQlzLT52ZXJzaW9uPVRMUzFfMl9WRVJTSU9OOworCQkJCQl0eXBlPTM7CisJCQkJCX0KKwkJCQllbHNlIGlmICh2WzFdID49IFRMUzFfMV9WRVJTSU9OX01JTk9SICYmCisJCQkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19UTFN2MV8xKSkKKwkJCQkJeworCQkJCQlzLT52ZXJzaW9uPVRMUzFfMV9WRVJTSU9OOworCQkJCQl0eXBlPTM7CisJCQkJCX0KKwkJCQllbHNlIGlmICghKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fVExTdjEpKQogCQkJCQl7CiAJCQkJCXMtPnZlcnNpb249VExTMV9WRVJTSU9OOwogCQkJCQl0eXBlPTM7CkBAIC0zOTMsNiArNDI1LDE1IEBACiAJCQl9CiAJCX0KIAorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sCisJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKwkJZ290byBlcnI7CisJCX0KKyNlbmRpZgorCiAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKIAkJewogCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgpAQCAtNTcyLDggKzYxMywxMSBAQAogCQkJcy0+czMtPnJidWYubGVmdD0wOwogCQkJcy0+czMtPnJidWYub2Zmc2V0PTA7CiAJCQl9Ci0KLQkJaWYgKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorCQlpZiAocy0+dmVyc2lvbiA9PSBUTFMxXzJfVkVSU0lPTikKKwkJCXMtPm1ldGhvZCA9IFRMU3YxXzJfc2VydmVyX21ldGhvZCgpOworCQllbHNlIGlmIChzLT52ZXJzaW9uID09IFRMUzFfMV9WRVJTSU9OKQorCQkJcy0+bWV0aG9kID0gVExTdjFfMV9zZXJ2ZXJfbWV0aG9kKCk7CisJCWVsc2UgaWYgKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQogCQkJcy0+bWV0aG9kID0gVExTdjFfc2VydmVyX21ldGhvZCgpOwogCQllbHNlCiAJCQlzLT5tZXRob2QgPSBTU0x2M19zZXJ2ZXJfbWV0aG9kKCk7CmRpZmYgLS1naXQgYS9zc2wvczNfYm90aC5jIGIvc3NsL3MzX2JvdGguYwppbmRleCA1MDhlMzkwLi5hZjI3MWQ2IDEwMDY0NAotLS0gYS9zc2wvczNfYm90aC5jCisrKyBiL3NzbC9zM19ib3RoLmMKQEAgLTIwNCw4ICsyMDQsNyBAQAogCiAjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAvKiBzc2wzX3Rha2VfbWFjIGNhbGN1bGF0ZXMgdGhlIEZpbmlzaGVkIE1BQyBmb3IgdGhlIGhhbmRzaGFrZXMgbWVzc2FnZXMgc2VlbiB0byBmYXIuICovCi1zdGF0aWMgdm9pZCBzc2wzX3Rha2VfbWFjKFNTTCAqcykKLQl7CitzdGF0aWMgdm9pZCBzc2wzX3Rha2VfbWFjKFNTTCAqcykgewogCWNvbnN0IGNoYXIgKnNlbmRlcjsKIAlpbnQgc2xlbjsKIApAQCAtMjIyLDcgKzIyMSw3IEBACiAKIAlzLT5zMy0+dG1wLnBlZXJfZmluaXNoX21kX2xlbiA9IHMtPm1ldGhvZC0+c3NsM19lbmMtPmZpbmFsX2ZpbmlzaF9tYWMocywKIAkJc2VuZGVyLHNsZW4scy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZCk7Ci0JfQorfQogI2VuZGlmCiAKIGludCBzc2wzX2dldF9maW5pc2hlZChTU0wgKnMsIGludCBhLCBpbnQgYikKQEAgLTIzMiw5ICsyMzEsOCBAQAogCXVuc2lnbmVkIGNoYXIgKnA7CiAKICNpZmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotCS8qIHRoZSBtYWMgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgd2hlbiB3ZSByZWNlaXZlZCB0aGUKLQkgKiBjaGFuZ2UgY2lwaGVyIHNwZWMgbWVzc2FnZSBhbmQgaXMgaW4gcy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZAotCSAqLyAKKwkvKiB0aGUgbWFjIGhhcyBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkIHdoZW4gd2UgcmVjZWl2ZWQgdGhlIGNoYW5nZQorCSAqIGNpcGhlciBzcGVjIG1lc3NhZ2UgYW5kIGlzIGluIHMtPnMzLT50bXAucGVlcl9maW5pc2hfbWQuICovCiAjZW5kaWYKIAogCW49cy0+bWV0aG9kLT5zc2xfZ2V0X21lc3NhZ2UocywKQEAgLTU0NiwxNCArNTQ0LDEyIEBACiAJCXMtPmluaXRfbnVtICs9IGk7CiAJCW4gLT0gaTsKIAkJfQotCiAjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJLyogSWYgcmVjZWl2aW5nIEZpbmlzaGVkLCByZWNvcmQgTUFDIG9mIHByaW9yIGhhbmRzaGFrZSBtZXNzYWdlcyBmb3IKIAkgKiBGaW5pc2hlZCB2ZXJpZmljYXRpb24uICovCiAJaWYgKCpzLT5pbml0X2J1Zi0+ZGF0YSA9PSBTU0wzX01UX0ZJTklTSEVEKQogCQlzc2wzX3Rha2VfbWFjKHMpOwogI2VuZGlmCi0KIAkvKiBGZWVkIHRoaXMgbWVzc2FnZSBpbnRvIE1BQyBjb21wdXRhdGlvbi4gKi8KIAlzc2wzX2ZpbmlzaF9tYWMocywgKHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YSwgcy0+aW5pdF9udW0gKyA0KTsKIAlpZiAocy0+bXNnX2NhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvc3NsL3MzX2NsbnQuYyBiL3NzbC9zM19jbG50LmMKaW5kZXggMDRkNmU1Yi4uYjViN2YxMSAxMDA2NDQKLS0tIGEvc3NsL3MzX2NsbnQuYworKysgYi9zc2wvczNfY2xudC5jCkBAIC0xNTYsNiArMTU2LDkgQEAKICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+CisjaWZkZWYgT1BFTlNTTF9GSVBTCisjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19ESAogI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KICNlbmRpZgpAQCAtMjEyLDYgKzIxNSwxOCBAQAogCQl9CiAjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwkvKiBJZiB3ZSdyZSBhd2FpdGluZyBhIEhlYXJ0YmVhdFJlc3BvbnNlLCBwcmV0ZW5kIHdlCisJICogYWxyZWFkeSBnb3QgYW5kIGRvbid0IGF3YWl0IGl0IGFueW1vcmUsIGJlY2F1c2UKKwkgKiBIZWFydGJlYXRzIGRvbid0IG1ha2Ugc2Vuc2UgZHVyaW5nIGhhbmRzaGFrZXMgYW55d2F5LgorCSAqLworCWlmIChzLT50bHNleHRfaGJfcGVuZGluZykKKwkJeworCQlzLT50bHNleHRfaGJfcGVuZGluZyA9IDA7CisJCXMtPnRsc2V4dF9oYl9zZXErKzsKKwkJfQorI2VuZGlmCisKIAlmb3IgKDs7KQogCQl7CiAJCXN0YXRlPXMtPnN0YXRlOwpAQCAtMjE5LDcgKzIzNCw3IEBACiAJCXN3aXRjaChzLT5zdGF0ZSkKIAkJCXsKIAkJY2FzZSBTU0xfU1RfUkVORUdPVElBVEU6Ci0JCQlzLT5uZXdfc2Vzc2lvbj0xOworCQkJcy0+cmVuZWdvdGlhdGU9MTsKIAkJCXMtPnN0YXRlPVNTTF9TVF9DT05ORUNUOwogCQkJcy0+Y3R4LT5zdGF0cy5zZXNzX2Nvbm5lY3RfcmVuZWdvdGlhdGUrKzsKIAkJCS8qIGJyZWFrICovCkBAIC0yOTIsNyArMzA3LDE2IEBACiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwogCiAJCQlpZiAocy0+aGl0KQorCQkJCXsKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX0ZJTklTSEVEX0E7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisJCQkJaWYgKHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQpCisJCQkJCXsKKwkJCQkJLyogcmVjZWl2ZSByZW5ld2VkIHNlc3Npb24gdGlja2V0ICovCisJCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfU0VTU0lPTl9USUNLRVRfQTsKKwkJCQkJfQorI2VuZGlmCisJCQkJfQogCQkJZWxzZQogCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfQ0VSVF9BOwogCQkJcy0+aW5pdF9udW09MDsKQEAgLTM3MCw2ICszOTQsMTcgQEAKIAkJY2FzZSBTU0wzX1NUX0NSX1NSVlJfRE9ORV9COgogCQkJcmV0PXNzbDNfZ2V0X3NlcnZlcl9kb25lKHMpOwogCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJCWlmIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tTUlApCisJCQkJeworCQkJCWlmICgocmV0ID0gU1JQX0NhbGNfQV9wYXJhbShzKSk8PTApCisJCQkJCXsKKwkJCQkJU1NMZXJyKFNTTF9GX1NTTDNfQ09OTkVDVCxTU0xfUl9TUlBfQV9DQUxDKTsKKwkJCQkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxTU0xfQURfSU5URVJOQUxfRVJST1IpOworCQkJCQlnb3RvIGVuZDsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZgogCQkJaWYgKHMtPnMzLT50bXAuY2VydF9yZXEpCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9DV19DRVJUX0E7CiAJCQllbHNlCkBAIC00MzYsMTUgKzQ3MSwxNSBAQAogCQkJCVNTTDNfU1RfQ1dfQ0hBTkdFX0EsU1NMM19TVF9DV19DSEFOR0VfQik7CiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwogCisKICNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKSB8fCBkZWZpbmVkKE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHKQogCQkJcy0+c3RhdGU9U1NMM19TVF9DV19GSU5JU0hFRF9BOwogI2Vsc2UKLQkJCWlmIChzLT5uZXh0X3Byb3RvX25lZ290aWF0ZWQpCisJCQlpZiAocy0+czMtPm5leHRfcHJvdG9fbmVnX3NlZW4pCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9DV19ORVhUX1BST1RPX0E7CiAJCQllbHNlCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9DV19GSU5JU0hFRF9BOwogI2VuZGlmCi0KIAkJCXMtPmluaXRfbnVtPTA7CiAKIAkJCXMtPnNlc3Npb24tPmNpcGhlcj1zLT5zMy0+dG1wLm5ld19jaXBoZXI7CkBAIC02MTEsNiArNjQ2LDcgQEAKIAkJCS8qIGVsc2UgZG8gaXQgbGF0ZXIgaW4gc3NsM193cml0ZSAqLwogCiAJCQlzLT5pbml0X251bT0wOworCQkJcy0+cmVuZWdvdGlhdGU9MDsKIAkJCXMtPm5ld19zZXNzaW9uPTA7CiAKIAkJCXNzbF91cGRhdGVfY2FjaGUocyxTU0xfU0VTU19DQUNIRV9DTElFTlQpOwpAQCAtNzA2LDkgKzc0Miw0MyBAQAogCQkvKiBEbyB0aGUgbWVzc2FnZSB0eXBlIGFuZCBsZW5ndGggbGFzdCAqLwogCQlkPXA9ICYoYnVmWzRdKTsKIAorCQkvKiB2ZXJzaW9uIGluZGljYXRlcyB0aGUgbmVnb3RpYXRlZCB2ZXJzaW9uOiBmb3IgZXhhbXBsZSBmcm9tCisJCSAqIGFuIFNTTHYyL3YzIGNvbXBhdGlibGUgY2xpZW50IGhlbGxvKS4gVGhlIGNsaWVudF92ZXJzaW9uCisJCSAqIGZpZWxkIGlzIHRoZSBtYXhpbXVtIHZlcnNpb24gd2UgcGVybWl0IGFuZCBpdCBpcyBhbHNvCisJCSAqIHVzZWQgaW4gUlNBIGVuY3J5cHRlZCBwcmVtYXN0ZXIgc2VjcmV0cy4gU29tZSBzZXJ2ZXJzIGNhbgorCQkgKiBjaG9rZSBpZiB3ZSBpbml0aWFsbHkgcmVwb3J0IGEgaGlnaGVyIHZlcnNpb24gdGhlbgorCQkgKiByZW5lZ290aWF0ZSB0byBhIGxvd2VyIG9uZSBpbiB0aGUgcHJlbWFzdGVyIHNlY3JldC4gVGhpcworCQkgKiBkaWRuJ3QgaGFwcGVuIHdpdGggVExTIDEuMCBhcyBtb3N0IHNlcnZlcnMgc3VwcG9ydGVkIGl0CisJCSAqIGJ1dCBpdCBjYW4gd2l0aCBUTFMgMS4xIG9yIGxhdGVyIGlmIHRoZSBzZXJ2ZXIgb25seSBzdXBwb3J0cworCQkgKiAxLjAuCisJCSAqCisJCSAqIFBvc3NpYmxlIHNjZW5hcmlvIHdpdGggcHJldmlvdXMgbG9naWM6CisJCSAqIAkxLiBDbGllbnQgaGVsbG8gaW5kaWNhdGVzIFRMUyAxLjIKKwkJICogCTIuIFNlcnZlciBoZWxsbyBzYXlzIFRMUyAxLjAKKwkJICoJMy4gUlNBIGVuY3J5cHRlZCBwcmVtYXN0ZXIgc2VjcmV0IHVzZXMgMS4yLgorCQkgKiAJNC4gSGFuZGhha2VkIHByb2NlZWRzIHVzaW5nIFRMUyAxLjAuCisJCSAqCTUuIFNlcnZlciBzZW5kcyBoZWxsbyByZXF1ZXN0IHRvIHJlbmVnb3RpYXRlLgorCQkgKgk2LiBDbGllbnQgaGVsbG8gaW5kaWNhdGVzIFRMUyB2MS4wIGFzIHdlIG5vdworCQkgKgkgICBrbm93IHRoYXQgaXMgbWF4aW11bSBzZXJ2ZXIgc3VwcG9ydHMuCisJCSAqCTcuIFNlcnZlciBjaG9rZXMgb24gUlNBIGVuY3J5cHRlZCBwcmVtYXN0ZXIgc2VjcmV0CisJCSAqCSAgIGNvbnRhaW5pbmcgdmVyc2lvbiAxLjAuCisJCSAqCisJCSAqIEZvciBpbnRlcm9wZXJhYmlsaXR5IGl0IHNob3VsZCBiZSBPSyB0byBhbHdheXMgdXNlIHRoZQorCQkgKiBtYXhpbXVtIHZlcnNpb24gd2Ugc3VwcG9ydCBpbiBjbGllbnQgaGVsbG8gYW5kIHRoZW4gcmVseQorCQkgKiBvbiB0aGUgY2hlY2tpbmcgb2YgdmVyc2lvbiB0byBlbnN1cmUgdGhlIHNlcnZlcnMgaXNuJ3QKKwkJICogYmVpbmcgaW5jb25zaXN0ZW50OiBmb3IgZXhhbXBsZSBpbml0aWFsbHkgbmVnb3RpYXRpbmcgd2l0aAorCQkgKiBUTFMgMS4wIGFuZCByZW5lZ290aWF0aW5nIHdpdGggVExTIDEuMi4gV2UgZG8gdGhpcyBieSB1c2luZworCQkgKiBjbGllbnRfdmVyc2lvbiBpbiBjbGllbnQgaGVsbG8gYW5kIG5vdCByZXNldHRpbmcgaXQgdG8KKwkJICogdGhlIG5lZ290aWF0ZWQgdmVyc2lvbi4KKwkJICovCisjaWYgMAogCQkqKHArKyk9cy0+dmVyc2lvbj4+ODsKIAkJKihwKyspPXMtPnZlcnNpb24mMHhmZjsKIAkJcy0+Y2xpZW50X3ZlcnNpb249cy0+dmVyc2lvbjsKKyNlbHNlCisJCSoocCsrKT1zLT5jbGllbnRfdmVyc2lvbj4+ODsKKwkJKihwKyspPXMtPmNsaWVudF92ZXJzaW9uJjB4ZmY7CisjZW5kaWYKIAogCQkvKiBSYW5kb20gc3R1ZmYgKi8KIAkJbWVtY3B5KHAscy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7CkBAIC05MjQsNiArOTk0LDE0IEBACiAJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9TRVJWRVJfSEVMTE8sU1NMX1JfVU5LTk9XTl9DSVBIRVJfUkVUVVJORUQpOwogCQlnb3RvIGZfZXJyOwogCQl9CisJLyogVExTIHYxLjIgb25seSBjaXBoZXJzdWl0ZXMgcmVxdWlyZSB2MS4yIG9yIGxhdGVyICovCisJaWYgKChjLT5hbGdvcml0aG1fc3NsICYgU1NMX1RMU1YxXzIpICYmIAorCQkoVExTMV9nZXRfdmVyc2lvbihzKSA8IFRMUzFfMl9WRVJTSU9OKSkKKwkJeworCQlhbD1TU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7CisJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9TRVJWRVJfSEVMTE8sU1NMX1JfV1JPTkdfQ0lQSEVSX1JFVFVSTkVEKTsKKwkJZ290byBmX2VycjsKKwkJfQogCXArPXNzbF9wdXRfY2lwaGVyX2J5X2NoYXIocyxOVUxMLE5VTEwpOwogCiAJc2s9c3NsX2dldF9jaXBoZXJzX2J5X2lkKHMpOwpAQCAtOTU1LDkgKzEwMzMsMTEgQEAKIAkJCX0KIAkJfQogCXMtPnMzLT50bXAubmV3X2NpcGhlcj1jOwotCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCisJLyogRG9uJ3QgZGlnZXN0IGNhY2hlZCByZWNvcmRzIGlmIFRMUyB2MS4yOiB3ZSBtYXkgbmVlZCB0aGVtIGZvcgorCSAqIGNsaWVudCBhdXRoZW50aWNhdGlvbi4KKwkgKi8KKwlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA8IFRMUzFfMl9WRVJTSU9OICYmICFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKIAkJZ290byBmX2VycjsKLQogCS8qIGxldHMgZ2V0IHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gKi8KIAkvKiBDT01QUkVTU0lPTiAqLwogI2lmZGVmIE9QRU5TU0xfTk9fQ09NUApAQCAtMTIzNiw2ICsxMzE2LDcgQEAKIAlpbnQgYWwsaSxqLHBhcmFtX2xlbixvazsKIAlsb25nIG4sYWxnX2ssYWxnX2E7CiAJRVZQX1BLRVkgKnBrZXk9TlVMTDsKKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAlSU0EgKnJzYT1OVUxMOwogI2VuZGlmCkBAIC0xMzU5LDYgKzE0NDAsODYgQEAKIAkJfQogCWVsc2UKICNlbmRpZiAvKiAhT1BFTlNTTF9OT19QU0sgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlpZiAoYWxnX2sgJiBTU0xfa1NSUCkKKwkJeworCQluMnMocCxpKTsKKwkJcGFyYW1fbGVuPWkrMjsKKwkJaWYgKHBhcmFtX2xlbiA+IG4pCisJCQl7CisJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSxTU0xfUl9CQURfU1JQX05fTEVOR1RIKTsKKwkJCWdvdG8gZl9lcnI7CisJCQl9CisJCWlmICghKHMtPnNycF9jdHguTj1CTl9iaW4yYm4ocCxpLE5VTEwpKSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfQk5fTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlwKz1pOworCisJCW4ycyhwLGkpOworCQlwYXJhbV9sZW4rPWkrMjsKKwkJaWYgKHBhcmFtX2xlbiA+IG4pCisJCQl7CisJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSxTU0xfUl9CQURfU1JQX0dfTEVOR1RIKTsKKwkJCWdvdG8gZl9lcnI7CisJCQl9CisJCWlmICghKHMtPnNycF9jdHguZz1CTl9iaW4yYm4ocCxpLE5VTEwpKSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfQk5fTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlwKz1pOworCisJCWkgPSAodW5zaWduZWQgaW50KShwWzBdKTsKKwkJcCsrOworCQlwYXJhbV9sZW4rPWkrMTsKKwkJaWYgKHBhcmFtX2xlbiA+IG4pCisJCQl7CisJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSxTU0xfUl9CQURfU1JQX1NfTEVOR1RIKTsKKwkJCWdvdG8gZl9lcnI7CisJCQl9CisJCWlmICghKHMtPnNycF9jdHgucz1CTl9iaW4yYm4ocCxpLE5VTEwpKSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfQk5fTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlwKz1pOworCisJCW4ycyhwLGkpOworCQlwYXJhbV9sZW4rPWkrMjsKKwkJaWYgKHBhcmFtX2xlbiA+IG4pCisJCQl7CisJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0tFWV9FWENIQU5HRSxTU0xfUl9CQURfU1JQX0JfTEVOR1RIKTsKKwkJCWdvdG8gZl9lcnI7CisJCQl9CisJCWlmICghKHMtPnNycF9jdHguQj1CTl9iaW4yYm4ocCxpLE5VTEwpKSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfQk5fTElCKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlwKz1pOworCQluLT1wYXJhbV9sZW47CisKKy8qIFdlIG11c3QgY2hlY2sgaWYgdGhlcmUgaXMgYSBjZXJ0aWZpY2F0ZSAqLworI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorCQlpZiAoYWxnX2EgJiBTU0xfYVJTQSkKKwkJCXBrZXk9WDUwOV9nZXRfcHVia2V5KHMtPnNlc3Npb24tPnNlc3NfY2VydC0+cGVlcl9wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS54NTA5KTsKKyNlbHNlCisJCWlmICgwKQorCQkJOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCisJCWVsc2UgaWYgKGFsZ19hICYgU1NMX2FEU1MpCisJCQlwa2V5PVg1MDlfZ2V0X3B1YmtleShzLT5zZXNzaW9uLT5zZXNzX2NlcnQtPnBlZXJfcGtleXNbU1NMX1BLRVlfRFNBX1NJR05dLng1MDkpOworI2VuZGlmCisJCX0KKwllbHNlCisjZW5kaWYgLyogIU9QRU5TU0xfTk9fU1JQICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCiAJaWYgKGFsZ19rICYgU1NMX2tSU0EpCiAJCXsKQEAgLTE2MDYsNiArMTc2NywzOCBAQAogCS8qIGlmIGl0IHdhcyBzaWduZWQsIGNoZWNrIHRoZSBzaWduYXR1cmUgKi8KIAlpZiAocGtleSAhPSBOVUxMKQogCQl7CisJCWlmIChUTFMxX2dldF92ZXJzaW9uKHMpID49IFRMUzFfMl9WRVJTSU9OKQorCQkJeworCQkJaW50IHNpZ2FsZyA9IHRsczEyX2dldF9zaWdpZChwa2V5KTsKKwkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCWlmIChzaWdhbGcgPT0gLTEpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCS8qIENoZWNrIGtleSB0eXBlIGlzIGNvbnNpc3RlbnQgd2l0aCBzaWduYXR1cmUgKi8KKwkJCWlmIChzaWdhbGcgIT0gKGludClwWzFdKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLFNTTF9SX1dST05HX1NJR05BVFVSRV9UWVBFKTsKKwkJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJCWdvdG8gZl9lcnI7CisJCQkJfQorCQkJbWQgPSB0bHMxMl9nZXRfaGFzaChwWzBdKTsKKwkJCWlmIChtZCA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLFNTTF9SX1VOS05PV05fRElHRVNUKTsKKwkJCQlhbD1TU0xfQURfREVDT0RFX0VSUk9SOworCQkJCWdvdG8gZl9lcnI7CisJCQkJfQorI2lmZGVmIFNTTF9ERUJVRworZnByaW50ZihzdGRlcnIsICJVU0lORyBUTFN2MS4yIEhBU0ggJXNcbiIsIEVWUF9NRF9uYW1lKG1kKSk7CisjZW5kaWYKKwkJCXAgKz0gMjsKKwkJCW4gLT0gMjsKKwkJCX0KKwkJZWxzZQorCQkJbWQgPSBFVlBfc2hhMSgpOworCQkJCiAJCW4ycyhwLGkpOwogCQluLT0yOwogCQlqPUVWUF9QS0VZX3NpemUocGtleSk7CkBAIC0xNjE5LDcgKzE4MTIsNyBAQAogCQkJfQogCiAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0JCWlmIChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKKwkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBICYmIFRMUzFfZ2V0X3ZlcnNpb24ocykgPCBUTFMxXzJfVkVSU0lPTikKIAkJCXsKIAkJCWludCBudW07CiAKQEAgLTE2MjcsNiArMTgyMCw4IEBACiAJCQlxPW1kX2J1ZjsKIAkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQogCQkJCXsKKwkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAorCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwogCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQogCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKIAkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CkBAIC0xNjU0LDExICsxODQ5LDggQEAKIAkJCX0KIAkJZWxzZQogI2VuZGlmCi0jaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0JCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9EU0EpCiAJCQl7Ci0JCQkvKiBsZXRzIGRvIERTUyAqLwotCQkJRVZQX1ZlcmlmeUluaXRfZXgoJm1kX2N0eCxFVlBfZHNzMSgpLCBOVUxMKTsKKwkJCUVWUF9WZXJpZnlJbml0X2V4KCZtZF9jdHgsIG1kLCBOVUxMKTsKIAkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKIAkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5zZXJ2ZXJfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKIAkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCxwYXJhbSxwYXJhbV9sZW4pOwpAQCAtMTY3MCwzMCArMTg2Miw2IEBACiAJCQkJZ290byBmX2VycjsKIAkJCQl9CiAJCQl9Ci0JCWVsc2UKLSNlbmRpZgotI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0JCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJCXsKLQkJCS8qIGxldCdzIGRvIEVDRFNBICovCi0JCQlFVlBfVmVyaWZ5SW5pdF9leCgmbWRfY3R4LEVWUF9lY2RzYSgpLCBOVUxMKTsKLQkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLQkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5zZXJ2ZXJfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLQkJCUVWUF9WZXJpZnlVcGRhdGUoJm1kX2N0eCxwYXJhbSxwYXJhbV9sZW4pOwotCQkJaWYgKEVWUF9WZXJpZnlGaW5hbCgmbWRfY3R4LHAsKGludCluLHBrZXkpIDw9IDApCi0JCQkJewotCQkJCS8qIGJhZCBzaWduYXR1cmUgKi8KLQkJCQlhbD1TU0xfQURfREVDUllQVF9FUlJPUjsKLQkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfS0VZX0VYQ0hBTkdFLFNTTF9SX0JBRF9TSUdOQVRVUkUpOwotCQkJCWdvdG8gZl9lcnI7Ci0JCQkJfQotCQkJfQotCQllbHNlCi0jZW5kaWYKLQkJCXsKLQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOwotCQkJZ290byBlcnI7Ci0JCQl9CiAJCX0KIAllbHNlCiAJCXsKQEAgLTE3NDAsNyArMTkwOCw3IEBACiAJewogCWludCBvayxyZXQ9MDsKIAl1bnNpZ25lZCBsb25nIG4sbmMsbDsKLQl1bnNpZ25lZCBpbnQgbGxlbixjdHlwZV9udW0saTsKKwl1bnNpZ25lZCBpbnQgbGxlbiwgY3R5cGVfbnVtLGk7CiAJWDUwOV9OQU1FICp4bj1OVUxMOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAsKnE7CiAJdW5zaWduZWQgY2hhciAqZDsKQEAgLTE3NjAsNiArMTkyOCwxNCBAQAogCWlmIChzLT5zMy0+dG1wLm1lc3NhZ2VfdHlwZSA9PSBTU0wzX01UX1NFUlZFUl9ET05FKQogCQl7CiAJCXMtPnMzLT50bXAucmV1c2VfbWVzc2FnZT0xOworCQkvKiBJZiB3ZSBnZXQgaGVyZSB3ZSBkb24ndCBuZWVkIGFueSBjYWNoZWQgaGFuZHNoYWtlIHJlY29yZHMKKwkJICogYXMgd2Ugd29udCBiZSBkb2luZyBjbGllbnQgYXV0aC4KKwkJICovCisJCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikKKwkJCXsKKwkJCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCisJCQkJZ290byBlcnI7CisJCQl9CiAJCXJldHVybigxKTsKIAkJfQogCkBAIC0xNzk2LDYgKzE5NzIsMjYgQEAKIAlmb3IgKGk9MDsgaTxjdHlwZV9udW07IGkrKykKIAkJcy0+czMtPnRtcC5jdHlwZVtpXT0gcFtpXTsKIAlwKz1jdHlwZV9udW07CisJaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPj0gVExTMV8yX1ZFUlNJT04pCisJCXsKKwkJbjJzKHAsIGxsZW4pOworCQkvKiBDaGVjayB3ZSBoYXZlIGVub3VnaCByb29tIGZvciBzaWduYXR1cmUgYWxnb3JpdGhtcyBhbmQKKwkJICogZm9sbG93aW5nIGxlbmd0aCB2YWx1ZS4KKwkJICovCisJCWlmICgodW5zaWduZWQgbG9uZykocCAtIGQgKyBsbGVuICsgMikgPiBuKQorCQkJeworCQkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxTU0xfQURfREVDT0RFX0VSUk9SKTsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DRVJUSUZJQ0FURV9SRVFVRVNULFNTTF9SX0RBVEFfTEVOR1RIX1RPT19MT05HKTsKKwkJCWdvdG8gZXJyOworCQkJfQorCQlpZiAoKGxsZW4gJiAxKSB8fCAhdGxzMV9wcm9jZXNzX3NpZ2FsZ3MocywgcCwgbGxlbikpCisJCQl7CisJCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLFNTTF9BRF9ERUNPREVfRVJST1IpOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NFUlRJRklDQVRFX1JFUVVFU1QsU1NMX1JfU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1IpOworCQkJZ290byBlcnI7CisJCQl9CisJCXAgKz0gbGxlbjsKKwkJfQogCiAJLyogZ2V0IHRoZSBDQSBSRE5zICovCiAJbjJzKHAsbGxlbik7CkBAIC0xODA4LDcgKzIwMDQsNyBAQAogfQogI2VuZGlmCiAKLQlpZiAoKGxsZW4rY3R5cGVfbnVtKzIrMSkgIT0gbikKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHAgLSBkICsgbGxlbikgIT0gbikKIAkJewogCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLFNTTF9BRF9ERUNPREVfRVJST1IpOwogCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVElGSUNBVEVfUkVRVUVTVCxTU0xfUl9MRU5HVEhfTUlTTUFUQ0gpOwpAQCAtMjYzMCw2ICsyODI2LDM5IEBACiAJCQlFVlBfUEtFWV9mcmVlKHB1Yl9rZXkpOwogCiAJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJCWVsc2UgaWYgKGFsZ19rICYgU1NMX2tTUlApCisJCQl7CisJCQlpZiAocy0+c3JwX2N0eC5BICE9IE5VTEwpCisJCQkJeworCQkJCS8qIHNlbmQgb2ZmIHRoZSBkYXRhICovCisJCQkJbj1CTl9udW1fYnl0ZXMocy0+c3JwX2N0eC5BKTsKKwkJCQlzMm4obixwKTsKKwkJCQlCTl9ibjJiaW4ocy0+c3JwX2N0eC5BLHApOworCQkJCW4rPTI7CisJCQkJfQorCQkJZWxzZQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCWlmIChzLT5zZXNzaW9uLT5zcnBfdXNlcm5hbWUgIT0gTlVMTCkKKwkJCQlPUEVOU1NMX2ZyZWUocy0+c2Vzc2lvbi0+c3JwX3VzZXJuYW1lKTsKKwkJCXMtPnNlc3Npb24tPnNycF91c2VybmFtZSA9IEJVRl9zdHJkdXAocy0+c3JwX2N0eC5sb2dpbik7CisJCQlpZiAocy0+c2Vzc2lvbi0+c3JwX3VzZXJuYW1lID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCQkJaWYgKChzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCA9IFNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldChzLHMtPnNlc3Npb24tPm1hc3Rlcl9rZXkpKTwwKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCX0KKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1BTSwogCQllbHNlIGlmIChhbGdfayAmIFNTTF9rUFNLKQogCQkJewpAQCAtMjc0OSwxMiArMjk3OCwxMyBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVtNRDVfRElHRVNUX0xFTkdUSCtTSEFfRElHRVNUX0xFTkdUSF07CiAJRVZQX1BLRVkgKnBrZXk7CiAJRVZQX1BLRVlfQ1RYICpwY3R4PU5VTEw7Ci0jaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJRVZQX01EX0NUWCBtY3R4OwogCXVuc2lnbmVkIHU9MDsKLSNlbmRpZgogCXVuc2lnbmVkIGxvbmcgbjsKIAlpbnQgajsKIAorCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisKIAlpZiAocy0+c3RhdGUgPT0gU1NMM19TVF9DV19DRVJUX1ZSRllfQSkKIAkJewogCQlkPSh1bnNpZ25lZCBjaGFyICopcy0+aW5pdF9idWYtPmRhdGE7CkBAIC0yNzY1LDcgKzI5OTUsOCBAQAogCQlFVlBfUEtFWV9zaWduX2luaXQocGN0eCk7CiAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwY3R4LCBFVlBfc2hhMSgpKT4wKQogCQkJewotCQkJcy0+bWV0aG9kLT5zc2wzX2VuYy0+Y2VydF92ZXJpZnlfbWFjKHMsCisJCQlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA8IFRMUzFfMl9WRVJTSU9OKQorCQkJCXMtPm1ldGhvZC0+c3NsM19lbmMtPmNlcnRfdmVyaWZ5X21hYyhzLAogCQkJCQkJTklEX3NoYTEsCiAJCQkJCQkmKGRhdGFbTUQ1X0RJR0VTVF9MRU5HVEhdKSk7CiAJCQl9CkBAIC0yNzczLDYgKzMwMDQsNDEgQEAKIAkJCXsKIAkJCUVSUl9jbGVhcl9lcnJvcigpOwogCQkJfQorCQkvKiBGb3IgVExTIHYxLjIgc2VuZCBzaWduYXR1cmUgYWxnb3JpdGhtIGFuZCBzaWduYXR1cmUKKwkJICogdXNpbmcgYWdyZWVkIGRpZ2VzdCBhbmQgY2FjaGVkIGhhbmRzaGFrZSByZWNvcmRzLgorCQkgKi8KKwkJaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPj0gVExTMV8yX1ZFUlNJT04pCisJCQl7CisJCQlsb25nIGhkYXRhbGVuID0gMDsKKwkJCXZvaWQgKmhkYXRhOworCQkJY29uc3QgRVZQX01EICptZCA9IHMtPmNlcnQtPmtleS0+ZGlnZXN0OworCQkJaGRhdGFsZW4gPSBCSU9fZ2V0X21lbV9kYXRhKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyLAorCQkJCQkJCQkmaGRhdGEpOworCQkJaWYgKGhkYXRhbGVuIDw9IDAgfHwgIXRsczEyX2dldF9zaWdhbmRoYXNoKHAsIHBrZXksIG1kKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9DTElFTlRfVkVSSUZZLAorCQkJCQkJRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCXAgKz0gMjsKKyNpZmRlZiBTU0xfREVCVUcKKwkJCWZwcmludGYoc3RkZXJyLCAiVXNpbmcgVExTIDEuMiB3aXRoIGNsaWVudCBhbGcgJXNcbiIsCisJCQkJCQkJRVZQX01EX25hbWUobWQpKTsKKyNlbmRpZgorCQkJaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIG1kLCBOVUxMKQorCQkJCXx8ICFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaGRhdGEsIGhkYXRhbGVuKQorCQkJCXx8ICFFVlBfU2lnbkZpbmFsKCZtY3R4LCBwICsgMiwgJnUsIHBrZXkpKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX0NMSUVOVF9WRVJJRlksCisJCQkJCQlFUlJfUl9FVlBfTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQlzMm4odSxwKTsKKwkJCW4gPSB1ICsgNDsKKwkJCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCisJCQkJZ290byBlcnI7CisJCQl9CisJCWVsc2UKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKIAkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQogCQkJewpAQCAtMjg1NSw5ICszMTIxLDExIEBACiAJCXMtPmluaXRfbnVtPShpbnQpbis0OwogCQlzLT5pbml0X29mZj0wOwogCQl9CisJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKIAlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKIAlyZXR1cm4oc3NsM19kb193cml0ZShzLFNTTDNfUlRfSEFORFNIQUtFKSk7CiBlcnI6CisJRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKIAlFVlBfUEtFWV9DVFhfZnJlZShwY3R4KTsKIAlyZXR1cm4oLTEpOwogCX0KQEAgLTI5ODEsNyArMzI0OSw3IEBACiAJaWYgKGlkeCA9PSBTU0xfUEtFWV9FQ0MpCiAJCXsKIAkJaWYgKHNzbF9jaGVja19zcnZyX2VjY19jZXJ0X2FuZF9hbGcoc2MtPnBlZXJfcGtleXNbaWR4XS54NTA5LAotCQkgICAgcy0+czMtPnRtcC5uZXdfY2lwaGVyKSA9PSAwKSAKKwkJICAgIAkJCQkJCXMpID09IDApIAogCQkJeyAvKiBjaGVjayBmYWlsZWQgKi8KIAkJCVNTTGVycihTU0xfRl9TU0wzX0NIRUNLX0NFUlRfQU5EX0FMR09SSVRITSxTU0xfUl9CQURfRUNDX0NFUlQpOwogCQkJZ290byBmX2VycjsKQEAgLTMwNzcsMTMgKzMzNDUsNyBAQAogCXJldHVybigwKTsKIAl9CiAKLS8qIENoZWNrIHRvIHNlZSBpZiBoYW5kc2hha2UgaXMgZnVsbCBvciByZXN1bWVkLiBVc3VhbGx5IHRoaXMgaXMganVzdCBhCi0gKiBjYXNlIG9mIGNoZWNraW5nIHRvIHNlZSBpZiBhIGNhY2hlIGhpdCBoYXMgb2NjdXJyZWQuIEluIHRoZSBjYXNlIG9mCi0gKiBzZXNzaW9uIHRpY2tldHMgd2UgaGF2ZSB0byBjaGVjayB0aGUgbmV4dCBtZXNzYWdlIHRvIGJlIHN1cmUuCi0gKi8KLQotI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcpCiBpbnQgc3NsM19zZW5kX25leHRfcHJvdG8oU1NMICpzKQogCXsKIAl1bnNpZ25lZCBpbnQgbGVuLCBwYWRkaW5nX2xlbjsKQEAgLTMxMDYsOSArMzM2OCwxNSBAQAogCQl9CiAKIAlyZXR1cm4gc3NsM19kb193cml0ZShzLCBTU0wzX1JUX0hBTkRTSEFLRSk7Ci0JfQotIyBlbmRpZgorfQorI2VuZGlmICAvKiAhT1BFTlNTTF9OT19UTFNFWFQgJiYgIU9QRU5TU0xfTk9fTkVYVFBST1RPTkVHICovCiAKKy8qIENoZWNrIHRvIHNlZSBpZiBoYW5kc2hha2UgaXMgZnVsbCBvciByZXN1bWVkLiBVc3VhbGx5IHRoaXMgaXMganVzdCBhCisgKiBjYXNlIG9mIGNoZWNraW5nIHRvIHNlZSBpZiBhIGNhY2hlIGhpdCBoYXMgb2NjdXJyZWQuIEluIHRoZSBjYXNlIG9mCisgKiBzZXNzaW9uIHRpY2tldHMgd2UgaGF2ZSB0byBjaGVjayB0aGUgbmV4dCBtZXNzYWdlIHRvIGJlIHN1cmUuCisgKi8KKworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogaW50IHNzbDNfY2hlY2tfZmluaXNoZWQoU1NMICpzKQogCXsKIAlpbnQgb2s7CmRpZmYgLS1naXQgYS9zc2wvczNfZW5jLmMgYi9zc2wvczNfZW5jLmMKaW5kZXggYjE0NTk3MC4uYzVkZjJjYiAxMDA2NDQKLS0tIGEvc3NsL3MzX2VuYy5jCisrKyBiL3NzbC9zM19lbmMuYwpAQCAtMTcwLDYgKzE3MCw3IEBACiAjZW5kaWYKIAlrPTA7CiAJRVZQX01EX0NUWF9pbml0KCZtNSk7CisJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwogCUVWUF9NRF9DVFhfaW5pdCgmczEpOwogCWZvciAoaT0wOyAoaW50KWk8bnVtOyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKIAkJewpAQCAtNTcxLDEyICs1NzIsMTIgQEAKIAlPUEVOU1NMX2ZyZWUocy0+czMtPmhhbmRzaGFrZV9kZ3N0KTsKIAlzLT5zMy0+aGFuZHNoYWtlX2Rnc3Q9TlVMTDsKIAl9CQotCQkKKwogCiAKIHZvaWQgc3NsM19maW5pc2hfbWFjKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogCXsKLQlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpIAorCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlciAmJiAhKHMtPnMzLT5mbGFncyAmIFRMUzFfRkxBR1NfS0VFUF9IQU5EU0hBS0UpKSAKIAkJewogCQlCSU9fd3JpdGUgKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyLCh2b2lkICopYnVmLGxlbik7CiAJCX0gCkBAIC02MTMsOSArNjE0LDE2IEBACiAJLyogTG9vcCB0aHJvdWdoIGJpdHNvIG9mIGFsZ29yaXRobTIgZmllbGQgYW5kIGNyZWF0ZSBNRF9DVFgtZXMgKi8KIAlmb3IgKGk9MDtzc2xfZ2V0X2hhbmRzaGFrZV9kaWdlc3QoaSwmbWFzaywmbWQpOyBpKyspIAogCQl7Ci0JCWlmICgobWFzayAmIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikgJiYgbWQpIAorCQlpZiAoKG1hc2sgJiBzc2xfZ2V0X2FsZ29yaXRobTIocykpICYmIG1kKSAKIAkJCXsKIAkJCXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOworI2lmZGVmIE9QRU5TU0xfRklQUworCQkJaWYgKEVWUF9NRF9uaWQobWQpID09IE5JRF9tZDUpCisJCQkJeworCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKKwkJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisJCQkJfQorI2VuZGlmCiAJCQlFVlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQsTlVMTCk7CiAJCQlFVlBfRGlnZXN0VXBkYXRlKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7CiAJCQl9IApAQCAtNjI0LDkgKzYzMiwxMiBAQAogCQkJcy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldPU5VTEw7CiAJCQl9CiAJCX0KLQkvKiBGcmVlIGhhbmRzaGFrZV9idWZmZXIgQklPICovCi0JQklPX2ZyZWUocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpOwotCXMtPnMzLT5oYW5kc2hha2VfYnVmZmVyID0gTlVMTDsKKwlpZiAoIShzLT5zMy0+ZmxhZ3MgJiBUTFMxX0ZMQUdTX0tFRVBfSEFORFNIQUtFKSkKKwkJeworCQkvKiBGcmVlIGhhbmRzaGFrZV9idWZmZXIgQklPICovCisJCUJJT19mcmVlKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyKTsKKwkJcy0+czMtPmhhbmRzaGFrZV9idWZmZXIgPSBOVUxMOworCQl9CiAKIAlyZXR1cm4gMTsKIAl9CkBAIC02NzIsNiArNjgzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQkKIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKIAlFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eCxkKTsKIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKIAlpZiAobiA8IDApCmRpZmYgLS1naXQgYS9zc2wvczNfbGliLmMgYi9zc2wvczNfbGliLmMKaW5kZXggMmQ2NTFlYy4uYTJlYTI1YSAxMDA2NDQKLS0tIGEvc3NsL3MzX2xpYi5jCisrKyBiL3NzbC9zM19saWIuYwpAQCAtMTA3MSw2ICsxMDcxLDEwMyBAQAogCTI1NiwKIAl9LAogCisJLyogVExTIHYxLjIgY2lwaGVyc3VpdGVzICovCisJLyogQ2lwaGVyIDNCICovCisJeworCTEsCisJVExTMV9UWFRfUlNBX1dJVEhfTlVMTF9TSEEyNTYsCisJVExTMV9DS19SU0FfV0lUSF9OVUxMX1NIQTI1NiwKKwlTU0xfa1JTQSwKKwlTU0xfYVJTQSwKKwlTU0xfZU5VTEwsCisJU1NMX1NIQTI1NiwKKwlTU0xfU1NMVjMsCisJU1NMX05PVF9FWFB8U1NMX1NUUk9OR19OT05FfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMCwKKwkwLAorCX0sCisKKwkvKiBDaXBoZXIgM0MgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlUTFMxX0NLX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTI1NiwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgM0QgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NiwKKwlUTFMxX0NLX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2LAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTI1NiwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgM0UgKi8KKwl7CisJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLworCVRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18xMjhfU0hBMjU2LAorCVRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIDNGICovCisJeworCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KKwlUTFMxX1RYVF9ESF9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rREhyLAorCVNTTF9hREgsCisJU1NMX0FFUzEyOCwKKwlTU0xfU0hBMjU2LAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciA0MCAqLworCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKIAkvKiBDYW1lbGxpYSBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM0MTMyICgxMjgtYml0IHBvcnRpb24pICovCiAKQEAgLTEyODcsNiArMTM4NCwxMjIgQEAKIAkxMjgsCiAJfSwKICNlbmRpZgorCisJLyogVExTIHYxLjIgY2lwaGVyc3VpdGVzICovCisJLyogQ2lwaGVyIDY3ICovCisJeworCTEsCisJVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rRURILAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTI1NiwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgNjggKi8KKwl7CisJMCwgLyogbm90IGltcGxlbWVudGVkIChub24tZXBoZW1lcmFsIERIKSAqLworCVRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18yNTZfU0hBMjU2LAorCVRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9TSEEyNTYsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMjU2LAorCTI1NiwKKwl9LAorCisJLyogQ2lwaGVyIDY5ICovCisJeworCTAsIC8qIG5vdCBpbXBsZW1lbnRlZCAobm9uLWVwaGVtZXJhbCBESCkgKi8KKwlUTFMxX1RYVF9ESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NiwKKwlUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2LAorCVNTTF9rREhyLAorCVNTTF9hREgsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMjU2LAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciA2QSAqLworCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NiwKKwlUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NiwKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMjU2LAorCTI1NiwKKwl9LAorCisJLyogQ2lwaGVyIDZCICovCisJeworCTEsCisJVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2LAorCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2LAorCVNTTF9rRURILAorCVNTTF9hUlNBLAorCVNTTF9BRVMyNTYsCisJU1NMX1NIQTI1NiwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgNkMgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9BREhfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlUTFMxX0NLX0FESF9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIDZEICovCisJeworCTEsCisJVExTMV9UWFRfQURIX1dJVEhfQUVTXzI1Nl9TSEEyNTYsCisJVExTMV9DS19BREhfV0lUSF9BRVNfMjU2X1NIQTI1NiwKKwlTU0xfa0VESCwKKwlTU0xfYU5VTEwsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMjU2LAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIEdPU1QgQ2lwaGVyc3VpdGVzICovCisKIAl7CiAJMSwKIAkiR09TVDk0LUdPU1Q4OS1HT1NUODkiLApAQCAtMTYxMCw2ICsxODIzLDIwMCBAQAogCiAjZW5kaWYgLyogT1BFTlNTTF9OT19TRUVEICovCiAKKwkvKiBHQ00gY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OCAqLworCisJLyogQ2lwaGVyIDlDICovCisJeworCTEsCisJVExTMV9UWFRfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVRMUzFfQ0tfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVNTTF9rUlNBLAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjhHQ00sCisJU1NMX0FFQUQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgOUQgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJVExTMV9DS19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJU1NMX2tSU0EsCisJU1NMX2FSU0EsCisJU1NMX0FFUzI1NkdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODR8VExTMV9QUkZfU0hBMzg0LAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciA5RSAqLworCXsKKwkxLAorCVRMUzFfVFhUX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisJVExTMV9DS19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVNTTF9rRURILAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjhHQ00sCisJU1NMX0FFQUQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgOUYgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlTU0xfa0VESCwKKwlTU0xfYVJTQSwKKwlTU0xfQUVTMjU2R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTM4NHxUTFMxX1BSRl9TSEEzODQsCisJMjU2LAorCTI1NiwKKwl9LAorCisJLyogQ2lwaGVyIEEwICovCisJeworCTAsCisJVExTMV9UWFRfREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVRMUzFfQ0tfREhfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVNTTF9rREhyLAorCVNTTF9hREgsCisJU1NMX0FFUzEyOEdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEyNTZ8VExTMV9QUkZfU0hBMjU2LAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciBBMSAqLworCXsKKwkwLAorCVRMUzFfVFhUX0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9BRVMyNTZHQ00sCisJU1NMX0FFQUQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0fFRMUzFfUFJGX1NIQTM4NCwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQTIgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVRMUzFfQ0tfREhFX0RTU19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlTU0xfa0VESCwKKwlTU0xfYURTUywKKwlTU0xfQUVTMTI4R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NnxUTFMxX1BSRl9TSEEyNTYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEEzICovCisJeworCTEsCisJVExTMV9UWFRfREhFX0RTU19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJU1NMX2tFREgsCisJU1NMX2FEU1MsCisJU1NMX0FFUzI1NkdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODR8VExTMV9QUkZfU0hBMzg0LAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciBBNCAqLworCXsKKwkwLAorCVRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlUTFMxX0NLX0RIX0RTU19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlTU0xfa0RIciwKKwlTU0xfYURILAorCVNTTF9BRVMxMjhHQ00sCisJU1NMX0FFQUQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgQTUgKi8KKwl7CisJMCwKKwlUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJVExTMV9DS19ESF9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJU1NMX2tESHIsCisJU1NMX2FESCwKKwlTU0xfQUVTMjU2R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTM4NHxUTFMxX1BSRl9TSEEzODQsCisJMjU2LAorCTI1NiwKKwl9LAorCisJLyogQ2lwaGVyIEE2ICovCisJeworCTEsCisJVExTMV9UWFRfQURIX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVRMUzFfQ0tfQURIX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMTI4R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NnxUTFMxX1BSRl9TSEEyNTYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEE3ICovCisJeworCTEsCisJVExTMV9UWFRfQURIX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVRMUzFfQ0tfQURIX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVNTTF9rRURILAorCVNTTF9hTlVMTCwKKwlTU0xfQUVTMjU2R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTM4NHxUTFMxX1BSRl9TSEEzODQsCisJMjU2LAorCTI1NiwKKwl9LAorCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogCS8qIENpcGhlciBDMDAxICovCiAJewpAQCAtMTYyMSw3ICsyMDI4LDcgQEAKIAlTU0xfZU5VTEwsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCkBAIC0xNjUzLDcgKzIwNjAsNyBAQAogCVNTTF8zREVTLAogCVNTTF9TSEExLAogCVNTTF9UTFNWMSwKLQlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCkBAIC0xNjY5LDcgKzIwNzYsNyBAQAogCVNTTF9BRVMxMjgsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAogCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKQEAgLTE2ODUsNyArMjA5Miw3IEBACiAJU1NMX0FFUzI1NiwKIAlTU0xfU0hBMSwKIAlTU0xfVExTVjEsCi0JU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LApAQCAtMTcwMSw3ICsyMTA4LDcgQEAKIAlTU0xfZU5VTEwsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCkBAIC0xNzMzLDcgKzIxNDAsNyBAQAogCVNTTF8zREVTLAogCVNTTF9TSEExLAogCVNTTF9UTFNWMSwKLQlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCkBAIC0xNzQ5LDcgKzIxNTYsNyBAQAogCVNTTF9BRVMxMjgsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAogCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKQEAgLTE3NjUsNyArMjE3Miw3IEBACiAJU1NMX0FFUzI1NiwKIAlTU0xfU0hBMSwKIAlTU0xfVExTVjEsCi0JU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LApAQCAtMTc4MSw3ICsyMTg4LDcgQEAKIAlTU0xfZU5VTEwsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCkBAIC0xODEzLDcgKzIyMjAsNyBAQAogCVNTTF8zREVTLAogCVNTTF9TSEExLAogCVNTTF9UTFNWMSwKLQlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCkBAIC0xODI5LDcgKzIyMzYsNyBAQAogCVNTTF9BRVMxMjgsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAogCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKQEAgLTE4NDUsNyArMjI1Miw3IEBACiAJU1NMX0FFUzI1NiwKIAlTU0xfU0hBMSwKIAlTU0xfVExTVjEsCi0JU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LApAQCAtMTg2MSw3ICsyMjY4LDcgQEAKIAlTU0xfZU5VTEwsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCkBAIC0xODkzLDcgKzIzMDAsNyBAQAogCVNTTF8zREVTLAogCVNTTF9TSEExLAogCVNTTF9UTFNWMSwKLQlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCkBAIC0xOTA5LDcgKzIzMTYsNyBAQAogCVNTTF9BRVMxMjgsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAogCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKQEAgLTE5MjUsNyArMjMzMiw3IEBACiAJU1NMX0FFUzI1NiwKIAlTU0xfU0hBMSwKIAlTU0xfVExTVjEsCi0JU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LApAQCAtMTk0MSw3ICsyMzQ4LDcgQEAKIAlTU0xfZU5VTEwsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9TVFJPTkdfTk9ORSwKKwlTU0xfTk9UX0VYUHxTU0xfU1RST05HX05PTkV8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkwLAogCTAsCkBAIC0xOTczLDcgKzIzODAsNyBAQAogCVNTTF8zREVTLAogCVNTTF9TSEExLAogCVNTTF9UTFNWMSwKLQlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKIAlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAogCTE2OCwKIAkxNjgsCkBAIC0xOTg5LDcgKzIzOTYsNyBAQAogCVNTTF9BRVMxMjgsCiAJU1NMX1NIQTEsCiAJU1NMX1RMU1YxLAotCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAogCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCiAJMTI4LAogCTEyOCwKQEAgLTIwMDUsMTMgKzI0MTIsNDIzIEBACiAJU1NMX0FFUzI1NiwKIAlTU0xfU0hBMSwKIAlTU0xfVExTVjEsCi0JU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCiAJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKIAkyNTYsCiAJMjU2LAogCX0sCiAjZW5kaWYJLyogT1BFTlNTTF9OT19FQ0RIICovCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkvKiBDaXBoZXIgQzAxQSAqLworCXsKKwkxLAorCVRMUzFfVFhUX1NSUF9TSEFfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9XSVRIXzNERVNfRURFX0NCQ19TSEEsCisJU1NMX2tTUlAsCisJU1NMX2FOVUxMLAorCVNTTF8zREVTLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTE2OCwKKwkxNjgsCisJfSwKKworCS8qIENpcGhlciBDMDFCICovCisJeworCTEsCisJVExTMV9UWFRfU1JQX1NIQV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9SU0FfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCVNTTF9rU1JQLAorCVNTTF9hUlNBLAorCVNTTF8zREVTLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTE2OCwKKwkxNjgsCisJfSwKKworCS8qIENpcGhlciBDMDFDICovCisJeworCTEsCisJVExTMV9UWFRfU1JQX1NIQV9EU1NfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9EU1NfV0lUSF8zREVTX0VERV9DQkNfU0hBLAorCVNTTF9rU1JQLAorCVNTTF9hRFNTLAorCVNTTF8zREVTLAorCVNTTF9TSEExLAorCVNTTF9UTFNWMSwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSCwKKwlTU0xfSEFORFNIQUtFX01BQ19ERUZBVUxUfFRMUzFfUFJGLAorCTE2OCwKKwkxNjgsCisJfSwKKworCS8qIENpcGhlciBDMDFEICovCisJeworCTEsCisJVExTMV9UWFRfU1JQX1NIQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlUTFMxX0NLX1NSUF9TSEFfV0lUSF9BRVNfMTI4X0NCQ19TSEEsCisJU1NMX2tTUlAsCisJU1NMX2FOVUxMLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEMwMUUgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9TUlBfU0hBX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlUTFMxX0NLX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorCVNTTF9rU1JQLAorCVNTTF9hUlNBLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEMwMUYgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9TUlBfU0hBX0RTU19XSVRIX0FFU18xMjhfQ0JDX1NIQSwKKwlUTFMxX0NLX1NSUF9TSEFfRFNTX1dJVEhfQUVTXzEyOF9DQkNfU0hBLAorCVNTTF9rU1JQLAorCVNTTF9hRFNTLAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTEsCisJU1NMX1RMU1YxLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdILAorCVNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEMwMjAgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9TUlBfU0hBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9XSVRIX0FFU18yNTZfQ0JDX1NIQSwKKwlTU0xfa1NSUCwKKwlTU0xfYU5VTEwsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyMSAqLworCXsKKwkxLAorCVRMUzFfVFhUX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisJU1NMX2tTUlAsCisJU1NMX2FSU0EsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyMiAqLworCXsKKwkxLAorCVRMUzFfVFhUX1NSUF9TSEFfRFNTX1dJVEhfQUVTXzI1Nl9DQkNfU0hBLAorCVRMUzFfQ0tfU1JQX1NIQV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEsCisJU1NMX2tTUlAsCisJU1NMX2FEU1MsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMSwKKwlTU0xfVExTVjEsCisJU1NMX05PVF9FWFB8U1NMX0hJR0gsCisJU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVHxUTFMxX1BSRiwKKwkyNTYsCisJMjU2LAorCX0sCisjZW5kaWYgIC8qIE9QRU5TU0xfTk9fU1JQICovCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAorCisJLyogSE1BQyBiYXNlZCBUTFMgdjEuMiBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM1Mjg5ICovCisKKwkvKiBDaXBoZXIgQzAyMyAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9TSEEyNTYsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rRUVDREgsCisJU1NMX2FFQ0RTQSwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyNCAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9TSEEzODQsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfU0hBMzg0LAorCVNTTF9rRUVDREgsCisJU1NMX2FFQ0RTQSwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEEzODQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0fFRMUzFfUFJGX1NIQTM4NCwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyNSAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiwKKwlTU0xfa0VDREhlLAorCVNTTF9hRUNESCwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyNiAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCwKKwlTU0xfa0VDREhlLAorCVNTTF9hRUNESCwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEEzODQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0fFRMUzFfUFJGX1NIQTM4NCwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyNyAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYsCisJU1NMX2tFRUNESCwKKwlTU0xfYVJTQSwKKwlTU0xfQUVTMTI4LAorCVNTTF9TSEEyNTYsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2fFRMUzFfUFJGX1NIQTI1NiwKKwkxMjgsCisJMTI4LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyOCAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBMzg0LAorCVRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQsCisJU1NMX2tFRUNESCwKKwlTU0xfYVJTQSwKKwlTU0xfQUVTMjU2LAorCVNTTF9TSEEzODQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0fFRMUzFfUFJGX1NIQTM4NCwKKwkyNTYsCisJMjU2LAorCX0sCisKKwkvKiBDaXBoZXIgQzAyOSAqLworCXsKKwkxLAorCVRMUzFfVFhUX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYsCisJVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2LAorCVNTTF9rRUNESGUsCisJU1NMX2FFQ0RILAorCVNTTF9BRVMxMjgsCisJU1NMX1NIQTI1NiwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEyNTZ8VExTMV9QUkZfU0hBMjU2LAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciBDMDJBICovCisJeworCTEsCisJVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTM4NCwKKwlUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX0FFUzI1NiwKKwlTU0xfU0hBMzg0LAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTM4NHxUTFMxX1BSRl9TSEEzODQsCisJMjU2LAorCTI1NiwKKwl9LAorCisJLyogR0NNIGJhc2VkIFRMUyB2MS4yIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODkgKi8KKworCS8qIENpcGhlciBDMDJCICovCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlTU0xfa0VFQ0RILAorCVNTTF9hRUNEU0EsCisJU1NMX0FFUzEyOEdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEyNTZ8VExTMV9QUkZfU0hBMjU2LAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciBDMDJDICovCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlTU0xfa0VFQ0RILAorCVNTTF9hRUNEU0EsCisJU1NMX0FFUzI1NkdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODR8VExTMV9QUkZfU0hBMzg0LAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciBDMDJEICovCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX0FFUzEyOEdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEyNTZ8VExTMV9QUkZfU0hBMjU2LAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciBDMDJFICovCisJeworCTEsCisJVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQsCisJU1NMX2tFQ0RIZSwKKwlTU0xfYUVDREgsCisJU1NMX0FFUzI1NkdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODR8VExTMV9QUkZfU0hBMzg0LAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciBDMDJGICovCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2LAorCVNTTF9rRUVDREgsCisJU1NMX2FSU0EsCisJU1NMX0FFUzEyOEdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEyNTZ8VExTMV9QUkZfU0hBMjU2LAorCTEyOCwKKwkxMjgsCisJfSwKKworCS8qIENpcGhlciBDMDMwICovCisJeworCTEsCisJVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVNTTF9rRUVDREgsCisJU1NMX2FSU0EsCisJU1NMX0FFUzI1NkdDTSwKKwlTU0xfQUVBRCwKKwlTU0xfVExTVjFfMiwKKwlTU0xfTk9UX0VYUHxTU0xfSElHSHxTU0xfRklQUywKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODR8VExTMV9QUkZfU0hBMzg0LAorCTI1NiwKKwkyNTYsCisJfSwKKworCS8qIENpcGhlciBDMDMxICovCisJeworCTEsCisJVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYsCisJVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NiwKKwlTU0xfa0VDREhlLAorCVNTTF9hRUNESCwKKwlTU0xfQUVTMTI4R0NNLAorCVNTTF9BRUFELAorCVNTTF9UTFNWMV8yLAorCVNTTF9OT1RfRVhQfFNTTF9ISUdIfFNTTF9GSVBTLAorCVNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NnxUTFMxX1BSRl9TSEEyNTYsCisJMTI4LAorCTEyOCwKKwl9LAorCisJLyogQ2lwaGVyIEMwMzIgKi8KKwl7CisJMSwKKwlUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCwKKwlUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0LAorCVNTTF9rRUNESGUsCisJU1NMX2FFQ0RILAorCVNTTF9BRVMyNTZHQ00sCisJU1NMX0FFQUQsCisJU1NMX1RMU1YxXzIsCisJU1NMX05PVF9FWFB8U1NMX0hJR0h8U1NMX0ZJUFMsCisJU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0fFRMUzFfUFJGX1NIQTM4NCwKKwkyNTYsCisJMjU2LAorCX0sCisKKyNlbmRpZiAvKiBPUEVOU1NMX05PX0VDREggKi8KKworCiAjaWZkZWYgVEVNUF9HT1NUX1RMUwogLyogQ2lwaGVyIEZGMDAgKi8KIAl7CkBAIC0yMDg3LDYgKzI5MDQsOSBAQAogCVNTTDNfTURfQ0xJRU5UX0ZJTklTSEVEX0NPTlNULDQsCiAJU1NMM19NRF9TRVJWRVJfRklOSVNIRURfQ09OU1QsNCwKIAlzc2wzX2FsZXJ0X2NvZGUsCisJKGludCAoKikoU1NMICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisJCSBzaXplX3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorCQkgaW50IHVzZV9jb250ZXh0KSlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAogCX07CiAKIGxvbmcgc3NsM19kZWZhdWx0X3RpbWVvdXQodm9pZCkKQEAgLTIxMjgsNiArMjk0OCw5IEBACiAKIAlzLT5zMz1zMzsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCVNTTF9TUlBfQ1RYX2luaXQocyk7CisjZW5kaWYKIAlzLT5tZXRob2QtPnNzbF9jbGVhcihzKTsKIAlyZXR1cm4oMSk7CiBlcnI6CkBAIC0yMTY4LDYgKzI5OTEsOSBAQAogCQlCSU9fZnJlZShzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcik7CiAJfQogCWlmIChzLT5zMy0+aGFuZHNoYWtlX2Rnc3QpIHNzbDNfZnJlZV9kaWdlc3RfbGlzdChzKTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlTU0xfU1JQX0NUWF9mcmVlKHMpOworI2VuZGlmCiAJT1BFTlNTTF9jbGVhbnNlKHMtPnMzLHNpemVvZiAqcy0+czMpOwogCU9QRU5TU0xfZnJlZShzLT5zMyk7CiAJcy0+czM9TlVMTDsKQEAgLTIyNTAsNiArMzA3NiwxMyBAQAogI2VuZGlmCiAJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCitzdGF0aWMgY2hhciAqIE1TX0NBTExCQUNLIHNycF9wYXNzd29yZF9mcm9tX2luZm9fY2IoU1NMICpzLCB2b2lkICphcmcpCisJeworCXJldHVybiBCVUZfc3RyZHVwKHMtPnNycF9jdHguaW5mbykgOworCX0KKyNlbmRpZgorCiBsb25nIHNzbDNfY3RybChTU0wgKnMsIGludCBjbWQsIGxvbmcgbGFyZywgdm9pZCAqcGFyZykKIAl7CiAJaW50IHJldD0wOwpAQCAtMjQ5NSw2ICszMzI4LDI3IEBACiAJCXJldCA9IDE7CiAJCWJyZWFrOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCWNhc2UgU1NMX0NUUkxfVExTX0VYVF9TRU5EX0hFQVJUQkVBVDoKKwkJaWYgKFNTTF92ZXJzaW9uKHMpID09IERUTFMxX1ZFUlNJT04gfHwgU1NMX3ZlcnNpb24ocykgPT0gRFRMUzFfQkFEX1ZFUikKKwkJCXJldCA9IGR0bHMxX2hlYXJ0YmVhdChzKTsKKwkJZWxzZQorCQkJcmV0ID0gdGxzMV9oZWFydGJlYXQocyk7CisJCWJyZWFrOworCisJY2FzZSBTU0xfQ1RSTF9HRVRfVExTX0VYVF9IRUFSVEJFQVRfUEVORElORzoKKwkJcmV0ID0gcy0+dGxzZXh0X2hiX3BlbmRpbmc7CisJCWJyZWFrOworCisJY2FzZSBTU0xfQ1RSTF9TRVRfVExTX0VYVF9IRUFSVEJFQVRfTk9fUkVRVUVTVFM6CisJCWlmIChsYXJnKQorCQkJcy0+dGxzZXh0X2hlYXJ0YmVhdCB8PSBTU0xfVExTRVhUX0hCX0RPTlRfUkVDVl9SRVFVRVNUUzsKKwkJZWxzZQorCQkJcy0+dGxzZXh0X2hlYXJ0YmVhdCAmPSB+U1NMX1RMU0VYVF9IQl9ET05UX1JFQ1ZfUkVRVUVTVFM7CisJCXJldCA9IDE7CisJCWJyZWFrOworI2VuZGlmCisKICNlbmRpZiAvKiAhT1BFTlNTTF9OT19UTFNFWFQgKi8KIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTI3MjcsNiArMzU4MSwzOCBAQAogCQlyZXR1cm4gMTsKIAkJYnJlYWs7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwljYXNlIFNTTF9DVFJMX1NFVF9UTFNfRVhUX1NSUF9VU0VSTkFNRToKKwkJY3R4LT5zcnBfY3R4LnNycF9NYXNrfD1TU0xfa1NSUDsKKwkJaWYgKGN0eC0+c3JwX2N0eC5sb2dpbiAhPSBOVUxMKQorCQkJT1BFTlNTTF9mcmVlKGN0eC0+c3JwX2N0eC5sb2dpbik7CisJCWN0eC0+c3JwX2N0eC5sb2dpbiA9IE5VTEw7CisJCWlmIChwYXJnID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKHN0cmxlbigoY29uc3QgY2hhciAqKXBhcmcpID4gMjU1IHx8IHN0cmxlbigoY29uc3QgY2hhciAqKXBhcmcpIDwgMSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0wzX0NUWF9DVFJMLCBTU0xfUl9JTlZBTElEX1NSUF9VU0VSTkFNRSk7CisJCQlyZXR1cm4gMDsKKwkJCX0gCisJCWlmICgoY3R4LT5zcnBfY3R4LmxvZ2luID0gQlVGX3N0cmR1cCgoY2hhciAqKXBhcmcpKSA9PSBOVUxMKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfQ1RYX0NUUkwsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCXJldHVybiAwOworCQkJfQorCQlicmVhazsKKwljYXNlIFNTTF9DVFJMX1NFVF9UTFNfRVhUX1NSUF9QQVNTV09SRDoKKwkJY3R4LT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrPXNycF9wYXNzd29yZF9mcm9tX2luZm9fY2I7CisJCWN0eC0+c3JwX2N0eC5pbmZvPXBhcmc7CisJCWJyZWFrOworCWNhc2UgU1NMX0NUUkxfU0VUX1NSUF9BUkc6CisJCWN0eC0+c3JwX2N0eC5zcnBfTWFza3w9U1NMX2tTUlA7CisJCWN0eC0+c3JwX2N0eC5TUlBfY2JfYXJnPXBhcmc7CisJCWJyZWFrOworCisJY2FzZSBTU0xfQ1RSTF9TRVRfVExTX0VYVF9TUlBfU1RSRU5HVEg6CisJCWN0eC0+c3JwX2N0eC5zdHJlbmd0aD1sYXJnOworCQlicmVhazsKKyNlbmRpZgogI2VuZGlmIC8qICFPUEVOU1NMX05PX1RMU0VYVCAqLwogCiAJLyogQSBUaGF3dGUgc3BlY2lhbCA6LSkgKi8KQEAgLTI3MzksNiArMzYyNSwxOCBAQAogCQlza19YNTA5X3B1c2goY3R4LT5leHRyYV9jZXJ0cywoWDUwOSAqKXBhcmcpOwogCQlicmVhazsKIAorCWNhc2UgU1NMX0NUUkxfR0VUX0VYVFJBX0NIQUlOX0NFUlRTOgorCQkqKFNUQUNLX09GKFg1MDkpICoqKXBhcmcgPSAgY3R4LT5leHRyYV9jZXJ0czsKKwkJYnJlYWs7CisKKwljYXNlIFNTTF9DVFJMX0NMRUFSX0VYVFJBX0NIQUlOX0NFUlRTOgorCQlpZiAoY3R4LT5leHRyYV9jZXJ0cykKKwkJCXsKKwkJCXNrX1g1MDlfcG9wX2ZyZWUoY3R4LT5leHRyYV9jZXJ0cywgWDUwOV9mcmVlKTsKKwkJCWN0eC0+ZXh0cmFfY2VydHMgPSBOVUxMOworCQkJfQorCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybigwKTsKIAkJfQpAQCAtMjc5Niw2ICszNjk0LDIwIEBACiAJCQkJCQlITUFDX0NUWCAqLCBpbnQpKWZwOwogCQlicmVhazsKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCWNhc2UgU1NMX0NUUkxfU0VUX1NSUF9WRVJJRllfUEFSQU1fQ0I6CisJCWN0eC0+c3JwX2N0eC5zcnBfTWFza3w9U1NMX2tTUlA7CisJCWN0eC0+c3JwX2N0eC5TUlBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrPShpbnQgKCopKFNTTCAqLHZvaWQgKikpZnA7CisJCWJyZWFrOworCWNhc2UgU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1VTRVJOQU1FX0NCOgorCQljdHgtPnNycF9jdHguc3JwX01hc2t8PVNTTF9rU1JQOworCQljdHgtPnNycF9jdHguVExTX2V4dF9zcnBfdXNlcm5hbWVfY2FsbGJhY2s9KGludCAoKikoU1NMICosaW50ICosdm9pZCAqKSlmcDsKKwkJYnJlYWs7CisJY2FzZSBTU0xfQ1RSTF9TRVRfU1JQX0dJVkVfQ0xJRU5UX1BXRF9DQjoKKwkJY3R4LT5zcnBfY3R4LnNycF9NYXNrfD1TU0xfa1NSUDsKKwkJY3R4LT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrPShjaGFyICooKikoU1NMICosdm9pZCAqKSlmcDsKKwkJYnJlYWs7CisjZW5kaWYKICNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybigwKTsKQEAgLTI4MTQsNiArMzcyNiw5IEBACiAJaWQ9MHgwMzAwMDAwMEx8KCh1bnNpZ25lZCBsb25nKXBbMF08PDhMKXwodW5zaWduZWQgbG9uZylwWzFdOwogCWMuaWQ9aWQ7CiAJY3AgPSBPQkpfYnNlYXJjaF9zc2xfY2lwaGVyX2lkKCZjLCBzc2wzX2NpcGhlcnMsIFNTTDNfTlVNX0NJUEhFUlMpOworI2lmZGVmIERFQlVHX1BSSU5UX1VOS05PV05fQ0lQSEVSU1VJVEVTCitpZiAoY3AgPT0gTlVMTCkgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGNpcGhlciBJRCAleFxuIiwgKHBbMF0gPDwgOCkgfCBwWzFdKTsKKyNlbmRpZgogCWlmIChjcCA9PSBOVUxMIHx8IGNwLT52YWxpZCA9PSAwKQogCQlyZXR1cm4gTlVMTDsKIAllbHNlCkBAIC0yODkxLDExICszODA2LDIwIEBACiAJCXsKIAkJYz1za19TU0xfQ0lQSEVSX3ZhbHVlKHByaW8saSk7CiAKKwkJLyogU2tpcCBUTFMgdjEuMiBvbmx5IGNpcGhlcnN1aXRlcyBpZiBsb3dlciB0aGFuIHYxLjIgKi8KKwkJaWYgKChjLT5hbGdvcml0aG1fc3NsICYgU1NMX1RMU1YxXzIpICYmIAorCQkJKFRMUzFfZ2V0X3ZlcnNpb24ocykgPCBUTFMxXzJfVkVSU0lPTikpCisJCQljb250aW51ZTsKKwogCQlzc2xfc2V0X2NlcnRfbWFza3MoY2VydCxjKTsKIAkJbWFza19rID0gY2VydC0+bWFza19rOwogCQltYXNrX2EgPSBjZXJ0LT5tYXNrX2E7CiAJCWVtYXNrX2sgPSBjZXJ0LT5leHBvcnRfbWFza19rOwogCQllbWFza19hID0gY2VydC0+ZXhwb3J0X21hc2tfYTsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJbWFza19rPWNlcnQtPm1hc2tfayB8IHMtPnNycF9jdHguc3JwX01hc2s7CisJCWVtYXNrX2s9Y2VydC0+ZXhwb3J0X21hc2tfayB8IHMtPnNycF9jdHguc3JwX01hc2s7CisjZW5kaWYKIAkJCQogI2lmZGVmIEtTU0xfREVCVUcKIC8qCQlwcmludGYoInNzbDNfY2hvb3NlX2NpcGhlciAlZCBhbGc9ICVseFxuIiwgaSxjLT5hbGdvcml0aG1zKTsqLwpAQCAtMzM1Nyw0ICs0MjgxLDE1IEBACiAJCX0KIAlyZXR1cm4ocmV0KTsKIAl9Ci0KKy8qIElmIHdlIGFyZSB1c2luZyBUTFMgdjEuMiBvciBsYXRlciBhbmQgZGVmYXVsdCBTSEExK01ENSBhbGdvcml0aG1zIHN3aXRjaAorICogdG8gbmV3IFNIQTI1NiBQUkYgYW5kIGhhbmRzaGFrZSBtYWNzCisgKi8KK2xvbmcgc3NsX2dldF9hbGdvcml0aG0yKFNTTCAqcykKKwl7CisJbG9uZyBhbGcyID0gcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yOworCWlmIChUTFMxX2dldF92ZXJzaW9uKHMpID49IFRMUzFfMl9WRVJTSU9OICYmCisJICAgIGFsZzIgPT0gKFNTTF9IQU5EU0hBS0VfTUFDX0RFRkFVTFR8VExTMV9QUkYpKQorCQlyZXR1cm4gU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2IHwgVExTMV9QUkZfU0hBMjU2OworCXJldHVybiBhbGcyOworCX0KKwkJCmRpZmYgLS1naXQgYS9zc2wvczNfcGt0LmMgYi9zc2wvczNfcGt0LmMKaW5kZXggMGQzODc0YS4uYmQwNTcxZiAxMDA2NDQKLS0tIGEvc3NsL3MzX3BrdC5jCisrKyBiL3NzbC9zM19wa3QuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAjaW5jbHVkZSAic3NsX2xvY2wuaCIKICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgogI2luY2x1ZGUgPG9wZW5zc2wvYnVmZmVyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAKIHN0YXRpYyBpbnQgZG9fc3NsM193cml0ZShTU0wgKnMsIGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkgdW5zaWduZWQgaW50IGxlbiwgaW50IGNyZWF0ZV9lbXB0eV9mcmFnbWVudCk7CkBAIC02NTcsNiArNjU4LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpwLCpwbGVuOwogCWludCBpLG1hY19zaXplLGNsZWFyPTA7CiAJaW50IHByZWZpeF9sZW49MDsKKwlpbnQgZWl2bGVuOwogCWxvbmcgYWxpZ249MDsKIAlTU0wzX1JFQ09SRCAqd3I7CiAJU1NMM19CVUZGRVIgKndiPSYocy0+czMtPndidWYpOwpAQCAtNzc4LDkgKzc4MCwyNyBAQAogCS8qIGZpZWxkIHdoZXJlIHdlIGFyZSB0byB3cml0ZSBvdXQgcGFja2V0IGxlbmd0aCAqLwogCXBsZW49cDsgCiAJcCs9MjsKKwkvKiBFeHBsaWNpdCBJViBsZW5ndGgsIGJsb2NrIGNpcGhlcnMgYW5kIFRMUyB2ZXJzaW9uIDEuMSBvciBsYXRlciAqLworCWlmIChzLT5lbmNfd3JpdGVfY3R4ICYmIHMtPnZlcnNpb24gPj0gVExTMV8xX1ZFUlNJT04pCisJCXsKKwkJaW50IG1vZGUgPSBFVlBfQ0lQSEVSX0NUWF9tb2RlKHMtPmVuY193cml0ZV9jdHgpOworCQlpZiAobW9kZSA9PSBFVlBfQ0lQSF9DQkNfTU9ERSkKKwkJCXsKKwkJCWVpdmxlbiA9IEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChzLT5lbmNfd3JpdGVfY3R4KTsKKwkJCWlmIChlaXZsZW4gPD0gMSkKKwkJCQllaXZsZW4gPSAwOworCQkJfQorCQkvKiBOZWVkIGV4cGxpY2l0IHBhcnQgb2YgSVYgZm9yIEdDTSBtb2RlICovCisJCWVsc2UgaWYgKG1vZGUgPT0gRVZQX0NJUEhfR0NNX01PREUpCisJCQllaXZsZW4gPSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU47CisJCWVsc2UKKwkJCWVpdmxlbiA9IDA7CisJCX0KKwllbHNlIAorCQllaXZsZW4gPSAwOwogCiAJLyogbGV0cyBzZXR1cCB0aGUgcmVjb3JkIHN0dWZmLiAqLwotCXdyLT5kYXRhPXA7CisJd3ItPmRhdGE9cCArIGVpdmxlbjsKIAl3ci0+bGVuZ3RoPShpbnQpbGVuOwogCXdyLT5pbnB1dD0odW5zaWduZWQgY2hhciAqKWJ1ZjsKIApAQCAtODA4LDExICs4MjgsMTkgQEAKIAogCWlmIChtYWNfc2l6ZSAhPSAwKQogCQl7Ci0JCWlmIChzLT5tZXRob2QtPnNzbDNfZW5jLT5tYWMocywmKHBbd3ItPmxlbmd0aF0pLDEpIDwgMCkKKwkJaWYgKHMtPm1ldGhvZC0+c3NsM19lbmMtPm1hYyhzLCYocFt3ci0+bGVuZ3RoICsgZWl2bGVuXSksMSkgPCAwKQogCQkJZ290byBlcnI7CiAJCXdyLT5sZW5ndGgrPW1hY19zaXplOwotCQl3ci0+aW5wdXQ9cDsKLQkJd3ItPmRhdGE9cDsKKwkJfQorCisJd3ItPmlucHV0PXA7CisJd3ItPmRhdGE9cDsKKworCWlmIChlaXZsZW4pCisJCXsKKwkvKglpZiAoUkFORF9wc2V1ZG9fYnl0ZXMocCwgZWl2bGVuKSA8PSAwKQorCQkJZ290byBlcnI7ICovCisJCXdyLT5sZW5ndGggKz0gZWl2bGVuOwogCQl9CiAKIAkvKiBzc2wzX2VuYyBjYW4gb25seSBoYXZlIGFuIGVycm9yIG9uIHJlYWQgKi8KQEAgLTEwODEsNiArMTEwOSwxOSBAQAogCQkJZGVzdCA9IHMtPnMzLT5hbGVydF9mcmFnbWVudDsKIAkJCWRlc3RfbGVuID0gJnMtPnMzLT5hbGVydF9mcmFnbWVudF9sZW47CiAJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCQllbHNlIGlmIChyci0+dHlwZSA9PSBUTFMxX1JUX0hFQVJUQkVBVCkKKwkJCXsKKwkJCXRsczFfcHJvY2Vzc19oZWFydGJlYXQocyk7CisKKwkJCS8qIEV4aXQgYW5kIG5vdGlmeSBhcHBsaWNhdGlvbiB0byByZWFkIGFnYWluICovCisJCQlyci0+bGVuZ3RoID0gMDsKKwkJCXMtPnJ3c3RhdGU9U1NMX1JFQURJTkc7CisJCQlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoU1NMX2dldF9yYmlvKHMpKTsKKwkJCUJJT19zZXRfcmV0cnlfcmVhZChTU0xfZ2V0X3JiaW8ocykpOworCQkJcmV0dXJuKC0xKTsKKwkJCX0KKyNlbmRpZgogCiAJCWlmIChkZXN0X21heGxlbiA+IDApCiAJCQl7CkBAIC0xMjI0LDYgKzEyNjUsMTAgQEAKIAkJCQlTU0xlcnIoU1NMX0ZfU1NMM19SRUFEX0JZVEVTLFNTTF9SX05PX1JFTkVHT1RJQVRJT04pOwogCQkJCWdvdG8gZl9lcnI7CiAJCQkJfQorI2lmZGVmIFNTTF9BRF9NSVNTSU5HX1NSUF9VU0VSTkFNRQorCQkJaWYgKGFsZXJ0X2Rlc2NyID09IFNTTF9BRF9NSVNTSU5HX1NSUF9VU0VSTkFNRSkKKwkJCQlyZXR1cm4oMCk7CisjZW5kaWYKIAkJCX0KIAkJZWxzZSBpZiAoYWxlcnRfbGV2ZWwgPT0gMikgLyogZmF0YWwgKi8KIAkJCXsKQEAgLTEzMDIsNiArMTM0Nyw3IEBACiAjZWxzZQogCQkJcy0+c3RhdGUgPSBzLT5zZXJ2ZXIgPyBTU0xfU1RfQUNDRVBUIDogU1NMX1NUX0NPTk5FQ1Q7CiAjZW5kaWYKKwkJCXMtPnJlbmVnb3RpYXRlPTE7CiAJCQlzLT5uZXdfc2Vzc2lvbj0xOwogCQkJfQogCQlpPXMtPmhhbmRzaGFrZV9mdW5jKHMpOwpAQCAtMTMzNSw4ICsxMzgxLDEwIEBACiAJCXsKIAlkZWZhdWx0OgogI2lmbmRlZiBPUEVOU1NMX05PX1RMUwotCQkvKiBUTFMganVzdCBpZ25vcmVzIHVua25vd24gbWVzc2FnZSB0eXBlcyAqLwotCQlpZiAocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCisJCS8qIFRMUyB1cCB0byB2MS4xIGp1c3QgaWdub3JlcyB1bmtub3duIG1lc3NhZ2UgdHlwZXM6CisJCSAqIFRMUyB2MS4yIGdpdmUgYW4gdW5leHBlY3RlZCBtZXNzYWdlIGFsZXJ0LgorCQkgKi8KKwkJaWYgKHMtPnZlcnNpb24gPj0gVExTMV9WRVJTSU9OICYmIHMtPnZlcnNpb24gPD0gVExTMV8xX1ZFUlNJT04pCiAJCQl7CiAJCQlyci0+bGVuZ3RoID0gMDsKIAkJCWdvdG8gc3RhcnQ7CkBAIC0xMzk2LDEwICsxNDQ0LDggQEAKIGludCBzc2wzX2RvX2NoYW5nZV9jaXBoZXJfc3BlYyhTU0wgKnMpCiAJewogCWludCBpOwotI2lmZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJY29uc3QgY2hhciAqc2VuZGVyOwogCWludCBzbGVuOwotI2VuZGlmCiAKIAlpZiAocy0+c3RhdGUgJiBTU0xfU1RfQUNDRVBUKQogCQlpPVNTTDNfQ0hBTkdFX0NJUEhFUl9TRVJWRVJfUkVBRDsKQEAgLTE0MjIsNyArMTQ2OCw2IEBACiAJaWYgKCFzLT5tZXRob2QtPnNzbDNfZW5jLT5jaGFuZ2VfY2lwaGVyX3N0YXRlKHMsaSkpCiAJCXJldHVybigwKTsKIAotI2lmZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJLyogd2UgaGF2ZSB0byByZWNvcmQgdGhlIG1lc3NhZ2UgZGlnZXN0IGF0CiAJICogdGhpcyBwb2ludCBzbyB3ZSBjYW4gZ2V0IGl0IGJlZm9yZSB3ZSByZWFkCiAJICogdGhlIGZpbmlzaGVkIG1lc3NhZ2UgKi8KQEAgLTE0MzksNyArMTQ4NCw2IEBACiAKIAlzLT5zMy0+dG1wLnBlZXJfZmluaXNoX21kX2xlbiA9IHMtPm1ldGhvZC0+c3NsM19lbmMtPmZpbmFsX2ZpbmlzaF9tYWMocywKIAkJc2VuZGVyLHNsZW4scy0+czMtPnRtcC5wZWVyX2ZpbmlzaF9tZCk7Ci0jZW5kaWYKIAogCXJldHVybigxKTsKIAl9CmRpZmYgLS1naXQgYS9zc2wvczNfc3J2ci5jIGIvc3NsL3MzX3NydnIuYwppbmRleCBlYzI4NTg4Li4wZGJkZGRlIDEwMDY0NAotLS0gYS9zc2wvczNfc3J2ci5jCisrKyBiL3NzbC9zM19zcnZyLmMKQEAgLTE3OSw2ICsxNzksMzEgQEAKIAkJcmV0dXJuKE5VTEwpOwogCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorc3RhdGljIGludCBzc2xfY2hlY2tfc3JwX2V4dF9DbGllbnRIZWxsbyhTU0wgKnMsIGludCAqYWwpCisJeworCWludCByZXQgPSBTU0xfRVJST1JfTk9ORTsKKworCSphbCA9IFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRTsKKworCWlmICgocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rU1JQKSAmJgorCSAgICAocy0+c3JwX2N0eC5UTFNfZXh0X3NycF91c2VybmFtZV9jYWxsYmFjayAhPSBOVUxMKSkKKwkJeworCQlpZihzLT5zcnBfY3R4LmxvZ2luID09IE5VTEwpCisJCQl7CisJCQkvKiBUaGVyZSBpc24ndCBhbnkgc3JwIGxvZ2luIGV4dGVuc2lvbiAhISEgKi8KKwkJCXJldCA9IFNTTDNfQUxfRkFUQUw7CisJCQkqYWwgPSBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk7CisJCQl9CisJCWVsc2UKKwkJCXsKKwkJCXJldCA9IFNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdXNlcm5hbWUocyxhbCk7CisJCQl9CisJCX0KKwlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCiBJTVBMRU1FTlRfc3NsM19tZXRoX2Z1bmMoU1NMdjNfc2VydmVyX21ldGhvZCwKIAkJCXNzbDNfYWNjZXB0LAogCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKQEAgLTIxMSw2ICsyMzYsMTggQEAKIAkJcmV0dXJuKC0xKTsKIAkJfQogCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCS8qIElmIHdlJ3JlIGF3YWl0aW5nIGEgSGVhcnRiZWF0UmVzcG9uc2UsIHByZXRlbmQgd2UKKwkgKiBhbHJlYWR5IGdvdCBhbmQgZG9uJ3QgYXdhaXQgaXQgYW55bW9yZSwgYmVjYXVzZQorCSAqIEhlYXJ0YmVhdHMgZG9uJ3QgbWFrZSBzZW5zZSBkdXJpbmcgaGFuZHNoYWtlcyBhbnl3YXkuCisJICovCisJaWYgKHMtPnRsc2V4dF9oYl9wZW5kaW5nKQorCQl7CisJCXMtPnRsc2V4dF9oYl9wZW5kaW5nID0gMDsKKwkJcy0+dGxzZXh0X2hiX3NlcSsrOworCQl9CisjZW5kaWYKKwogCWZvciAoOzspCiAJCXsKIAkJc3RhdGU9cy0+c3RhdGU7CkBAIC0yMTgsNyArMjU1LDcgQEAKIAkJc3dpdGNoIChzLT5zdGF0ZSkKIAkJCXsKIAkJY2FzZSBTU0xfU1RfUkVORUdPVElBVEU6Ci0JCQlzLT5uZXdfc2Vzc2lvbj0xOworCQkJcy0+cmVuZWdvdGlhdGU9MTsKIAkJCS8qIHMtPnN0YXRlPVNTTF9TVF9BQ0NFUFQ7ICovCiAKIAkJY2FzZSBTU0xfU1RfQkVGT1JFOgpAQCAtMzE0LDEwICszNTEsMzQgQEAKIAkJY2FzZSBTU0wzX1NUX1NSX0NMTlRfSEVMTE9fQzoKIAogCQkJcy0+c2h1dGRvd249MDsKLQkJCXJldD1zc2wzX2dldF9jbGllbnRfaGVsbG8ocyk7Ci0JCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotCQkJCi0JCQlzLT5uZXdfc2Vzc2lvbiA9IDI7CisJCQlpZiAocy0+cndzdGF0ZSAhPSBTU0xfWDUwOV9MT09LVVApCisJCQl7CisJCQkJcmV0PXNzbDNfZ2V0X2NsaWVudF9oZWxsbyhzKTsKKwkJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOworCQkJfQorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCQkJeworCQkJaW50IGFsOworCQkJaWYgKChyZXQgPSBzc2xfY2hlY2tfc3JwX2V4dF9DbGllbnRIZWxsbyhzLCZhbCkpICA8IDApCisJCQkJCXsKKwkJCQkJLyogY2FsbGJhY2sgaW5kaWNhdGVzIGZpcnRoZXIgd29yayB0byBiZSBkb25lICovCisJCQkJCXMtPnJ3c3RhdGU9U1NMX1g1MDlfTE9PS1VQOworCQkJCQlnb3RvIGVuZDsKKwkJCQkJfQorCQkJaWYgKHJldCAhPSBTU0xfRVJST1JfTk9ORSkKKwkJCQl7CisJCQkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxhbCk7CQorCQkJCS8qIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBidXQgdGhlIG9ubHkgbWVhbnMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGEgY2xpZW50IHRvIGRldGVjdCB3aGV0aGVyIHNycCBpcyBzdXBwb3J0ZWQuICovCisgCQkJCSAgIGlmIChhbCAhPSBUTFMxX0FEX1VOS05PV05fUFNLX0lERU5USVRZKSAJCisJCQkJCVNTTGVycihTU0xfRl9TU0wzX0FDQ0VQVCxTU0xfUl9DTElFTlRIRUxMT19UTFNFWFQpOwkJCQorCQkJCXJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOwkJCQorCQkJCXJldD0gLTE7CisJCQkJZ290byBlbmQ7CQorCQkJCX0KKwkJCX0KKyNlbmRpZgkJCisJCQlzLT5yZW5lZ290aWF0ZSA9IDI7CiAJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX1NSVlJfSEVMTE9fQTsKIAkJCXMtPmluaXRfbnVtPTA7CiAJCQlicmVhazsKQEAgLTM0Niw3ICs0MDcsNyBAQAogCQljYXNlIFNTTDNfU1RfU1dfQ0VSVF9BOgogCQljYXNlIFNTTDNfU1RfU1dfQ0VSVF9COgogCQkJLyogQ2hlY2sgaWYgaXQgaXMgYW5vbiBESCBvciBhbm9uIEVDREgsICovCi0JCQkvKiBub3JtYWwgUFNLIG9yIEtSQjUgKi8KKwkJCS8qIG5vcm1hbCBQU0sgb3IgS1JCNSBvciBTUlAgKi8KIAkJCWlmICghKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpCiAJCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spCiAJCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FLUkI1KSkKQEAgLTQxMSw2ICs0NzIsMTAgQEAKICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKIAkJCSAgICB8fCAoKGFsZ19rICYgU1NMX2tQU0spICYmIHMtPmN0eC0+cHNrX2lkZW50aXR5X2hpbnQpCiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJCSAgICAvKiBTUlA6IHNlbmQgU2VydmVyS2V5RXhjaGFuZ2UgKi8KKwkJCSAgICB8fCAoYWxnX2sgJiBTU0xfa1NSUCkKKyNlbmRpZgogCQkJICAgIHx8IChhbGdfayAmIChTU0xfa0RIcnxTU0xfa0RIZHxTU0xfa0VESCkpCiAJCQkgICAgfHwgKGFsZ19rICYgU1NMX2tFRUNESCkKIAkJCSAgICB8fCAoKGFsZ19rICYgU1NMX2tSU0EpCkBAIC00NTcsNiArNTIyLDkgQEAKIAkJCQlza2lwPTE7CiAJCQkJcy0+czMtPnRtcC5jZXJ0X3JlcXVlc3Q9MDsKIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX1NSVlJfRE9ORV9BOworCQkJCWlmIChzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikKKwkJCQkJaWYgKCFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJCQkJCXJldHVybiAtMTsKIAkJCQl9CiAJCQllbHNlCiAJCQkJewpAQCAtNTQ5LDYgKzYxNywyNCBAQAogI2VuZGlmCiAJCQkJcy0+aW5pdF9udW0gPSAwOwogCQkJCX0KKwkJCWVsc2UgaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPj0gVExTMV8yX1ZFUlNJT04pCisJCQkJeworCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1JfQ0VSVF9WUkZZX0E7CisJCQkJcy0+aW5pdF9udW09MDsKKwkJCQlpZiAoIXMtPnNlc3Npb24tPnBlZXIpCisJCQkJCWJyZWFrOworCQkJCS8qIEZvciBUTFMgdjEuMiBmcmVlemUgdGhlIGhhbmRzaGFrZSBidWZmZXIKKwkJCQkgKiBhdCB0aGlzIHBvaW50IGFuZCBkaWdlc3QgY2FjaGVkIHJlY29yZHMuCisJCQkJICovCisJCQkJaWYgKCFzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlcikKKwkJCQkJeworCQkJCQlTU0xlcnIoU1NMX0ZfU1NMM19BQ0NFUFQsRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJCX0KKwkJCQlzLT5zMy0+ZmxhZ3MgfD0gVExTMV9GTEFHU19LRUVQX0hBTkRTSEFLRTsKKwkJCQlpZiAoIXNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKHMpKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJfQogCQkJZWxzZQogCQkJCXsKIAkJCQlpbnQgb2Zmc2V0PTA7CkBAIC02MTUsMTQgKzcwMSwxMSBAQAogCQkJcmV0PXNzbDNfZ2V0X2ZpbmlzaGVkKHMsU1NMM19TVF9TUl9GSU5JU0hFRF9BLAogCQkJCVNTTDNfU1RfU1JfRklOSVNIRURfQik7CiAJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotCQkJaWYgKHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQpCi0JCQkJcy0+c3RhdGU9U1NMM19TVF9TV19TRVNTSU9OX1RJQ0tFVF9BOwotCQkJZWxzZSBpZiAocy0+aGl0KQotCQkJCXMtPnN0YXRlPVNTTF9TVF9PSzsKLSNlbHNlCiAJCQlpZiAocy0+aGl0KQogCQkJCXMtPnN0YXRlPVNTTF9TVF9PSzsKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKwkJCWVsc2UgaWYgKHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQpCisJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19TRVNTSU9OX1RJQ0tFVF9BOwogI2VuZGlmCiAJCQllbHNlCiAJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19DSEFOR0VfQTsKQEAgLTcwNywxMSArNzkwLDkgQEAKIAogCQkJcy0+aW5pdF9udW09MDsKIAotCQkJaWYgKHMtPm5ld19zZXNzaW9uID09IDIpIC8qIHNraXBwZWQgaWYgd2UganVzdCBzZW50IGEgSGVsbG9SZXF1ZXN0ICovCisJCQlpZiAocy0+cmVuZWdvdGlhdGUgPT0gMikgLyogc2tpcHBlZCBpZiB3ZSBqdXN0IHNlbnQgYSBIZWxsb1JlcXVlc3QgKi8KIAkJCQl7Ci0JCQkJLyogYWN0dWFsbHkgbm90IG5lY2Vzc2FyaWx5IGEgJ25ldycgc2Vzc2lvbiB1bmxlc3MKLQkJCQkgKiBTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04gaXMgc2V0ICovCi0JCQkJCisJCQkJcy0+cmVuZWdvdGlhdGU9MDsKIAkJCQlzLT5uZXdfc2Vzc2lvbj0wOwogCQkJCQogCQkJCXNzbF91cGRhdGVfY2FjaGUocyxTU0xfU0VTU19DQUNIRV9TRVJWRVIpOwpAQCAtODQ5LDcgKzkzMCw4IEBACiAJICogSWYgd2UgYXJlIFNTTHYzLCB3ZSB3aWxsIHJlc3BvbmQgd2l0aCBTU0x2MywgZXZlbiBpZiBwcm9tcHRlZCB3aXRoCiAJICogVExTdjEuCiAJICovCi0JaWYgKHMtPnN0YXRlID09IFNTTDNfU1RfU1JfQ0xOVF9IRUxMT19BKQorCWlmIChzLT5zdGF0ZSA9PSBTU0wzX1NUX1NSX0NMTlRfSEVMTE9fQQorCQkpCiAJCXsKIAkJcy0+c3RhdGU9U1NMM19TVF9TUl9DTE5UX0hFTExPX0I7CiAJCX0KQEAgLTkwNiwxMyArOTg4LDE2IEBACiAJaj0gKihwKyspOwogCiAJcy0+aGl0PTA7Ci0JLyogVmVyc2lvbnMgYmVmb3JlIDAuOS43IGFsd2F5cyBhbGxvdyBzZXNzaW9uIHJldXNlIGR1cmluZyByZW5lZ290aWF0aW9uCi0JICogKGkuZS4gd2hlbiBzLT5uZXdfc2Vzc2lvbiBpcyB0cnVlKSwgb3B0aW9uCi0JICogU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIGlzIG5ldyB3aXRoIDAuOS43LgotCSAqIE1heWJlIHRoaXMgb3B0aW9uYWwgYmVoYXZpb3VyIHNob3VsZCBhbHdheXMgaGF2ZSBiZWVuIHRoZSBkZWZhdWx0LAotCSAqIGJ1dCB3ZSBjYW5ub3Qgc2FmZWx5IGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgKG9yIG5ldyBhcHBsaWNhdGlvbnMKLQkgKiBtaWdodCBiZSB3cml0dGVuIHRoYXQgYmVjb21lIHRvdGFsbHkgdW5zZWN1cmUgd2hlbiBjb21waWxlZCB3aXRoCi0JICogYW4gZWFybGllciBsaWJyYXJ5IHZlcnNpb24pCisJLyogVmVyc2lvbnMgYmVmb3JlIDAuOS43IGFsd2F5cyBhbGxvdyBjbGllbnRzIHRvIHJlc3VtZSBzZXNzaW9ucyBpbiByZW5lZ290aWF0aW9uLgorCSAqIDAuOS43IGFuZCBsYXRlciBhbGxvdyB0aGlzIGJ5IGRlZmF1bHQsIGJ1dCBvcHRpb25hbGx5IGlnbm9yZSByZXN1bXB0aW9uIHJlcXVlc3RzCisJICogd2l0aCBmbGFnIFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiAoaXQncyBhIG5ldyBmbGFnIHJhdGhlcgorCSAqIHRoYW4gYSBjaGFuZ2UgdG8gZGVmYXVsdCBiZWhhdmlvciBzbyB0aGF0IGFwcGxpY2F0aW9ucyByZWx5aW5nIG9uIHRoaXMgZm9yIHNlY3VyaXR5CisJICogd29uJ3QgZXZlbiBjb21waWxlIGFnYWluc3Qgb2xkZXIgbGlicmFyeSB2ZXJzaW9ucykuCisJICoKKwkgKiAxLjAuMSBhbmQgbGF0ZXIgYWxzbyBoYXZlIGEgZnVuY3Rpb24gU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkKCkgdG8gcmVxdWVzdAorCSAqIHJlbmVnb3RpYXRpb24gYnV0IG5vdCBhIG5ldyBzZXNzaW9uIChzLT5uZXdfc2Vzc2lvbiByZW1haW5zIHVuc2V0KTogZm9yIHNlcnZlcnMsCisJICogdGhpcyBlc3NlbnRpYWxseSBqdXN0IG1lYW5zIHRoYXQgdGhlIFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTgorCSAqIHNldHRpbmcgd2lsbCBiZSBpZ25vcmVkLgogCSAqLwogCWlmICgocy0+bmV3X3Nlc3Npb24gJiYgKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04pKSkKIAkJewpAQCAtMTMxMyw4ICsxMzk4LDExIEBACiAJCXMtPnMzLT50bXAubmV3X2NpcGhlcj1zLT5zZXNzaW9uLT5jaXBoZXI7CiAJCX0KIAotCWlmICghc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMocykpCi0JCWdvdG8gZl9lcnI7CisJaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPCBUTFMxXzJfVkVSU0lPTiB8fCAhKHMtPnZlcmlmeV9tb2RlICYgU1NMX1ZFUklGWV9QRUVSKSkKKwkJeworCQlpZiAoIXNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKHMpKQorCQkJZ290byBmX2VycjsKKwkJfQogCQogCS8qIHdlIG5vdyBoYXZlIHRoZSBmb2xsb3dpbmcgc2V0dXAuIAogCSAqIGNsaWVudF9yYW5kb20KQEAgLTEzNjksMjAgKzE0NTcsMjAgQEAKIAkJbWVtY3B5KHAscy0+czMtPnNlcnZlcl9yYW5kb20sU1NMM19SQU5ET01fU0laRSk7CiAJCXArPVNTTDNfUkFORE9NX1NJWkU7CiAKLQkJLyogbm93IGluIHRoZW9yeSB3ZSBoYXZlIDMgb3B0aW9ucyB0byBzZW5kaW5nIGJhY2sgdGhlCi0JCSAqIHNlc3Npb24gaWQuICBJZiBpdCBpcyBhIHJlLXVzZSwgd2Ugc2VuZCBiYWNrIHRoZQotCQkgKiBvbGQgc2Vzc2lvbi1pZCwgaWYgaXQgaXMgYSBuZXcgc2Vzc2lvbiwgd2Ugc2VuZAotCQkgKiBiYWNrIHRoZSBuZXcgc2Vzc2lvbi1pZCBvciB3ZSBzZW5kIGJhY2sgYSAwIGxlbmd0aAotCQkgKiBzZXNzaW9uLWlkIGlmIHdlIHdhbnQgaXQgdG8gYmUgc2luZ2xlIHVzZS4KLQkJICogQ3VycmVudGx5IEkgd2lsbCBub3QgaW1wbGVtZW50IHRoZSAnMCcgbGVuZ3RoIHNlc3Npb24taWQKLQkJICogMTItSmFuLTk4IC0gSSdsbCBub3cgc3VwcG9ydCB0aGUgJzAnIGxlbmd0aCBzdHVmZi4KLQkJICoKLQkJICogV2UgYWxzbyBoYXZlIGFuIGFkZGl0aW9uYWwgY2FzZSB3aGVyZSBzdGF0ZWxlc3Mgc2Vzc2lvbgotCQkgKiByZXN1bXB0aW9uIGlzIHN1Y2Nlc3NmdWw6IHdlIGFsd2F5cyBzZW5kIGJhY2sgdGhlIG9sZAotCQkgKiBzZXNzaW9uIGlkLiBJbiB0aGlzIGNhc2Ugcy0+aGl0IGlzIG5vbiB6ZXJvOiB0aGlzIGNhbgotCQkgKiBvbmx5IGhhcHBlbiBpZiBzdGF0ZWxlc3Mgc2Vzc2lvbiByZXN1bXB0aW9uIGlzIHN1Y2Nlc2Z1bAotCQkgKiBpZiBzZXNzaW9uIGNhY2hpbmcgaXMgZGlzYWJsZWQgc28gZXhpc3RpbmcgZnVuY3Rpb25hbGl0eQotCQkgKiBpcyB1bmFmZmVjdGVkLgorCQkvKiBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyBmb3IgdGhlIHNlc3Npb24gSUQgdG8gc2VuZAorCQkgKiBiYWNrIGluIHRoZSBzZXJ2ZXIgaGVsbG86CisJCSAqIC0gRm9yIHNlc3Npb24gcmV1c2UgZnJvbSB0aGUgc2Vzc2lvbiBjYWNoZSwKKwkJICogICB3ZSBzZW5kIGJhY2sgdGhlIG9sZCBzZXNzaW9uIElELgorCQkgKiAtIElmIHN0YXRlbGVzcyBzZXNzaW9uIHJldXNlICh1c2luZyBhIHNlc3Npb24gdGlja2V0KQorCQkgKiAgIGlzIHN1Y2Nlc3NmdWwsIHdlIHNlbmQgYmFjayB0aGUgY2xpZW50J3MgInNlc3Npb24gSUQiCisJCSAqICAgKHdoaWNoIGRvZXNuJ3QgYWN0dWFsbHkgaWRlbnRpZnkgdGhlIHNlc3Npb24pLgorCQkgKiAtIElmIGl0IGlzIGEgbmV3IHNlc3Npb24sIHdlIHNlbmQgYmFjayB0aGUgbmV3CisJCSAqICAgc2Vzc2lvbiBJRC4KKwkJICogLSBIb3dldmVyLCBpZiB3ZSB3YW50IHRoZSBuZXcgc2Vzc2lvbiB0byBiZSBzaW5nbGUtdXNlLAorCQkgKiAgIHdlIHNlbmQgYmFjayBhIDAtbGVuZ3RoIHNlc3Npb24gSUQuCisJCSAqIHMtPmhpdCBpcyBub24temVybyBpbiBlaXRoZXIgY2FzZSBvZiBzZXNzaW9uIHJldXNlLAorCQkgKiBzbyB0aGUgZm9sbG93aW5nIHdvbid0IG92ZXJ3cml0ZSBhbiBJRCB0aGF0IHdlJ3JlIHN1cHBvc2VkCisJCSAqIHRvIHNlbmQgYmFjay4KIAkJICovCiAJCWlmICghKHMtPmN0eC0+c2Vzc2lvbl9jYWNoZV9tb2RlICYgU1NMX1NFU1NfQ0FDSEVfU0VSVkVSKQogCQkJJiYgIXMtPmhpdCkKQEAgLTE0ODMsNiArMTU3MSw3IEBACiAJQk5fQ1RYICpibl9jdHggPSBOVUxMOyAKICNlbmRpZgogCUVWUF9QS0VZICpwa2V5OworCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgKnAsKmQ7CiAJaW50IGFsLGk7CiAJdW5zaWduZWQgbG9uZyB0eXBlOwpAQCAtMTcyMywyMSArMTgxMiw0NCBAQAogCQkJCX0KIAkJCWVsc2UKICNlbmRpZiAvKiAhT1BFTlNTTF9OT19QU0sgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJaWYgKHR5cGUgJiBTU0xfa1NSUCkKKwkJCXsKKwkJCWlmICgocy0+c3JwX2N0eC5OID09IE5VTEwpIHx8CisJCQkJKHMtPnNycF9jdHguZyA9PSBOVUxMKSB8fAorCQkJCShzLT5zcnBfY3R4LnMgPT0gTlVMTCkgfHwKKwkJCQkocy0+c3JwX2N0eC5CID09IE5VTEwpKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsU1NMX1JfTUlTU0lOR19TUlBfUEFSQU0pOworCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCXJbMF09cy0+c3JwX2N0eC5OOworCQkJclsxXT1zLT5zcnBfY3R4Lmc7CisJCQlyWzJdPXMtPnNycF9jdHguczsKKwkJCXJbM109cy0+c3JwX2N0eC5COworCQkJfQorCQllbHNlIAorI2VuZGlmCiAJCQl7CiAJCQlhbD1TU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CiAJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsU1NMX1JfVU5LTk9XTl9LRVlfRVhDSEFOR0VfVFlQRSk7CiAJCQlnb3RvIGZfZXJyOwogCQkJfQotCQlmb3IgKGk9MDsgcltpXSAhPSBOVUxMOyBpKyspCisJCWZvciAoaT0wOyByW2ldICE9IE5VTEwgJiYgaTw0OyBpKyspCiAJCQl7CiAJCQlucltpXT1CTl9udW1fYnl0ZXMocltpXSk7CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJCQlpZiAoKGkgPT0gMikgJiYgKHR5cGUgJiBTU0xfa1NSUCkpCisJCQkJbis9MStucltpXTsKKwkJCWVsc2UKKyNlbmRpZgogCQkJbis9MitucltpXTsKIAkJCX0KIAogCQlpZiAoIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9hdXRoICYgU1NMX2FOVUxMKQogCQkJJiYgIShzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tQU0spKQogCQkJewotCQkJaWYgKChwa2V5PXNzbF9nZXRfc2lnbl9wa2V5KHMscy0+czMtPnRtcC5uZXdfY2lwaGVyKSkKKwkJCWlmICgocGtleT1zc2xfZ2V0X3NpZ25fcGtleShzLHMtPnMzLT50bXAubmV3X2NpcGhlciwmbWQpKQogCQkJCT09IE5VTEwpCiAJCQkJewogCQkJCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7CkBAIC0xNzU5LDggKzE4NzEsMTYgQEAKIAkJZD0odW5zaWduZWQgY2hhciAqKXMtPmluaXRfYnVmLT5kYXRhOwogCQlwPSAmKGRbNF0pOwogCi0JCWZvciAoaT0wOyByW2ldICE9IE5VTEw7IGkrKykKKwkJZm9yIChpPTA7IHJbaV0gIT0gTlVMTCAmJiBpPDQ7IGkrKykKIAkJCXsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJCWlmICgoaSA9PSAyKSAmJiAodHlwZSAmIFNTTF9rU1JQKSkKKwkJCQl7CisJCQkJKnAgPSBucltpXTsKKwkJCQlwKys7CisJCQkJfQorCQkJZWxzZQorI2VuZGlmCiAJCQlzMm4obnJbaV0scCk7CiAJCQlCTl9ibjJiaW4ocltpXSxwKTsKIAkJCXArPW5yW2ldOwpAQCAtMTgwOCwxMiArMTkyOCwxNSBAQAogCQkJLyogbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXJhbXMsIHRoZXkgc3RhcnQgYXQgJihkWzRdKQogCQkJICogYW5kIHAgcG9pbnRzIHRvIHRoZSBzcGFjZSBhdCB0aGUgZW5kLiAqLwogI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotCQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorCQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBCisJCQkJCSYmIFRMUzFfZ2V0X3ZlcnNpb24ocykgPCBUTFMxXzJfVkVSU0lPTikKIAkJCQl7CiAJCQkJcT1tZF9idWY7CiAJCQkJaj0wOwogCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQogCQkJCQl7CisJCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCisJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwogCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwogCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CkBAIC0xODM1LDQ0ICsxOTU4LDQxIEBACiAJCQkJfQogCQkJZWxzZQogI2VuZGlmCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCi0JCQkJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfRFNBKQorCQkJaWYgKG1kKQogCQkJCXsKLQkJCQkvKiBsZXRzIGRvIERTUyAqLwotCQkJCUVWUF9TaWduSW5pdF9leCgmbWRfY3R4LEVWUF9kc3MxKCksIE5VTEwpOworCQkJCS8qIEZvciBUTFMxLjIgYW5kIGxhdGVyIHNlbmQgc2lnbmF0dXJlCisJCQkJICogYWxnb3JpdGhtICovCisJCQkJaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPj0gVExTMV8yX1ZFUlNJT04pCisJCQkJCXsKKwkJCQkJaWYgKCF0bHMxMl9nZXRfc2lnYW5kaGFzaChwLCBwa2V5LCBtZCkpCisJCQkJCQl7CisJCQkJCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQkJCQlhbD1TU0xfQURfSU5URVJOQUxfRVJST1I7CisJCQkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCQkJZ290byBmX2VycjsKKwkJCQkJCX0KKwkJCQkJcCs9MjsKKwkJCQkJfQorI2lmZGVmIFNTTF9ERUJVRworCQkJCWZwcmludGYoc3RkZXJyLCAiVXNpbmcgaGFzaCAlc1xuIiwKKwkJCQkJCQlFVlBfTURfbmFtZShtZCkpOworI2VuZGlmCisJCQkJRVZQX1NpZ25Jbml0X2V4KCZtZF9jdHgsIG1kLCBOVUxMKTsKIAkJCQlFVlBfU2lnblVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOwogCQkJCUVWUF9TaWduVXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+c2VydmVyX3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CiAJCQkJRVZQX1NpZ25VcGRhdGUoJm1kX2N0eCwmKGRbNF0pLG4pOwogCQkJCWlmICghRVZQX1NpZ25GaW5hbCgmbWRfY3R4LCYocFsyXSksCiAJCQkJCSh1bnNpZ25lZCBpbnQgKikmaSxwa2V5KSkKIAkJCQkJewotCQkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsRVJSX0xJQl9EU0EpOworCQkJCQlTU0xlcnIoU1NMX0ZfU1NMM19TRU5EX1NFUlZFUl9LRVlfRVhDSEFOR0UsRVJSX0xJQl9FVlApOwogCQkJCQlnb3RvIGVycjsKIAkJCQkJfQogCQkJCXMybihpLHApOwogCQkJCW4rPWkrMjsKKwkJCQlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA+PSBUTFMxXzJfVkVSU0lPTikKKwkJCQkJbis9IDI7CiAJCQkJfQogCQkJZWxzZQotI2VuZGlmCi0jaWYgIWRlZmluZWQoT1BFTlNTTF9OT19FQ0RTQSkKLQkJCQlpZiAocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9FQykKLQkJCQl7Ci0JCQkJLyogbGV0J3MgZG8gRUNEU0EgKi8KLQkJCQlFVlBfU2lnbkluaXRfZXgoJm1kX2N0eCxFVlBfZWNkc2EoKSwgTlVMTCk7Ci0JCQkJRVZQX1NpZ25VcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKLQkJCQlFVlBfU2lnblVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPnNlcnZlcl9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOwotCQkJCUVWUF9TaWduVXBkYXRlKCZtZF9jdHgsJihkWzRdKSxuKTsKLQkJCQlpZiAoIUVWUF9TaWduRmluYWwoJm1kX2N0eCwmKHBbMl0pLAotCQkJCQkodW5zaWduZWQgaW50ICopJmkscGtleSkpCi0JCQkJCXsKLQkJCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfS0VZX0VYQ0hBTkdFLEVSUl9MSUJfRUNEU0EpOwotCQkJCQlnb3RvIGVycjsKLQkJCQkJfQotCQkJCXMybihpLHApOwotCQkJCW4rPWkrMjsKLQkJCQl9Ci0JCQllbHNlCi0jZW5kaWYKIAkJCQl7CiAJCQkJLyogSXMgdGhpcyBlcnJvciBjaGVjayBhY3R1YWxseSBuZWVkZWQ/ICovCiAJCQkJYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwpAQCAtMTkyNSw2ICsyMDQ1LDE0IEBACiAJCXArPW47CiAJCW4rKzsKIAorCQlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA+PSBUTFMxXzJfVkVSU0lPTikKKwkJCXsKKwkJCW5sID0gdGxzMTJfZ2V0X3JlcV9zaWdfYWxncyhzLCBwICsgMik7CisJCQlzMm4obmwsIHApOworCQkJcCArPSBubCArIDI7CisJCQluICs9IG5sICsgMjsKKwkJCX0KKwogCQlvZmY9bjsKIAkJcCs9MjsKIAkJbis9MjsKQEAgLTI2NDQsNiArMjc3Miw0NCBAQAogCQkJfQogCQllbHNlCiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkJaWYgKGFsZ19rICYgU1NMX2tTUlApCisJCQl7CisJCQlpbnQgcGFyYW1fbGVuOworCisJCQluMnMocCxpKTsKKwkJCXBhcmFtX2xlbj1pKzI7CisJCQlpZiAocGFyYW1fbGVuID4gbikKKwkJCQl7CisJCQkJYWw9U1NMX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSxTU0xfUl9CQURfU1JQX0FfTEVOR1RIKTsKKwkJCQlnb3RvIGZfZXJyOworCQkJCX0KKwkJCWlmICghKHMtPnNycF9jdHguQT1CTl9iaW4yYm4ocCxpLE5VTEwpKSkKKwkJCQl7CisJCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9LRVlfRVhDSEFOR0UsRVJSX1JfQk5fTElCKTsKKwkJCQlnb3RvIGVycjsKKwkJCQl9CisJCQlpZiAocy0+c2Vzc2lvbi0+c3JwX3VzZXJuYW1lICE9IE5VTEwpCisJCQkJT1BFTlNTTF9mcmVlKHMtPnNlc3Npb24tPnNycF91c2VybmFtZSk7CisJCQlzLT5zZXNzaW9uLT5zcnBfdXNlcm5hbWUgPSBCVUZfc3RyZHVwKHMtPnNycF9jdHgubG9naW4pOworCQkJaWYgKHMtPnNlc3Npb24tPnNycF91c2VybmFtZSA9PSBOVUxMKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSwKKwkJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworCQkJCWdvdG8gZXJyOworCQkJCX0KKworCQkJaWYgKChzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCA9IFNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldChzLHMtPnNlc3Npb24tPm1hc3Rlcl9rZXkpKTwwKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0tFWV9FWENIQU5HRSxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCQkJZ290byBlcnI7CisJCQkJfQorCisJCQlwKz1pOworCQkJfQorCQllbHNlCisjZW5kaWYJLyogT1BFTlNTTF9OT19TUlAgKi8KIAkJaWYgKGFsZ19rICYgU1NMX2tHT1NUKSAKIAkJCXsKIAkJCWludCByZXQgPSAwOwpAQCAtMjcyNyw3ICsyODkzLDcgQEAKIAlyZXR1cm4oMSk7CiBmX2VycjoKIAlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLGFsKTsKLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX0RIKSB8fCAhZGVmaW5lZChPUEVOU1NMX05PX1JTQSkgfHwgIWRlZmluZWQoT1BFTlNTTF9OT19FQ0RIKQorI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fREgpIHx8ICFkZWZpbmVkKE9QRU5TU0xfTk9fUlNBKSB8fCAhZGVmaW5lZChPUEVOU1NMX05PX0VDREgpIHx8IGRlZmluZWQoT1BFTlNTTF9OT19TUlApCiBlcnI6CiAjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICkBAIC0yNzQ4LDEyICsyOTE0LDE1IEBACiAJbG9uZyBuOwogCWludCB0eXBlPTAsaSxqOwogCVg1MDkgKnBlZXI7CisJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisJRVZQX01EX0NUWCBtY3R4OworCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CiAKIAluPXMtPm1ldGhvZC0+c3NsX2dldF9tZXNzYWdlKHMsCiAJCVNTTDNfU1RfU1JfQ0VSVF9WUkZZX0EsCiAJCVNTTDNfU1RfU1JfQ0VSVF9WUkZZX0IsCiAJCS0xLAotCQk1MTQsIC8qIDUxND8gKi8KKwkJNTE2LCAvKiBFbm91Z2ggZm9yIDQwOTYgYml0IFJTQSBrZXkgd2l0aCBUTFMgdjEuMiAqLwogCQkmb2spOwogCiAJaWYgKCFvaykgcmV0dXJuKChpbnQpbik7CkBAIC0yODE2LDYgKzI5ODUsMzYgQEAKIAkJfSAKIAllbHNlIAogCQl7CQorCQlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA+PSBUTFMxXzJfVkVSU0lPTikKKwkJCXsKKwkJCWludCBzaWdhbGcgPSB0bHMxMl9nZXRfc2lnaWQocGtleSk7CisJCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQlpZiAoc2lnYWxnID09IC0xKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVF9WRVJJRlksRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJCWFsPVNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJCQlnb3RvIGZfZXJyOworCQkJCX0KKwkJCS8qIENoZWNrIGtleSB0eXBlIGlzIGNvbnNpc3RlbnQgd2l0aCBzaWduYXR1cmUgKi8KKwkJCWlmIChzaWdhbGcgIT0gKGludClwWzFdKQorCQkJCXsKKwkJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVF9WRVJJRlksU1NMX1JfV1JPTkdfU0lHTkFUVVJFX1RZUEUpOworCQkJCWFsPVNTTF9BRF9ERUNPREVfRVJST1I7CisJCQkJZ290byBmX2VycjsKKwkJCQl9CisJCQltZCA9IHRsczEyX2dldF9oYXNoKHBbMF0pOworCQkJaWYgKG1kID09IE5VTEwpCisJCQkJeworCQkJCVNTTGVycihTU0xfRl9TU0wzX0dFVF9DRVJUX1ZFUklGWSxTU0xfUl9VTktOT1dOX0RJR0VTVCk7CisJCQkJYWw9U1NMX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlnb3RvIGZfZXJyOworCQkJCX0KKyNpZmRlZiBTU0xfREVCVUcKK2ZwcmludGYoc3RkZXJyLCAiVVNJTkcgVExTdjEuMiBIQVNIICVzXG4iLCBFVlBfTURfbmFtZShtZCkpOworI2VuZGlmCisJCQlwICs9IDI7CisJCQluIC09IDI7CisJCQl9CiAJCW4ycyhwLGkpOwogCQluLT0yOwogCQlpZiAoaSA+IG4pCkBAIC0yODMzLDYgKzMwMzIsMzcgQEAKIAkJZ290byBmX2VycjsKIAkJfQogCisJaWYgKFRMUzFfZ2V0X3ZlcnNpb24ocykgPj0gVExTMV8yX1ZFUlNJT04pCisJCXsKKwkJbG9uZyBoZGF0YWxlbiA9IDA7CisJCXZvaWQgKmhkYXRhOworCQloZGF0YWxlbiA9IEJJT19nZXRfbWVtX2RhdGEocy0+czMtPmhhbmRzaGFrZV9idWZmZXIsICZoZGF0YSk7CisJCWlmIChoZGF0YWxlbiA8PSAwKQorCQkJeworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NFUlRfVkVSSUZZLCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCQlhbD1TU0xfQURfSU5URVJOQUxfRVJST1I7CisJCQlnb3RvIGZfZXJyOworCQkJfQorI2lmZGVmIFNTTF9ERUJVRworCQlmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIFRMUyAxLjIgd2l0aCBjbGllbnQgdmVyaWZ5IGFsZyAlc1xuIiwKKwkJCQkJCQlFVlBfTURfbmFtZShtZCkpOworI2VuZGlmCisJCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIG1kLCBOVUxMKQorCQkJfHwgIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGhkYXRhLCBoZGF0YWxlbikpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0VSVF9WRVJJRlksIEVSUl9SX0VWUF9MSUIpOworCQkJYWw9U1NMX0FEX0lOVEVSTkFMX0VSUk9SOworCQkJZ290byBmX2VycjsKKwkJCX0KKworCQlpZiAoRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBwICwgaSwgcGtleSkgPD0gMCkKKwkJCXsKKwkJCWFsPVNTTF9BRF9ERUNSWVBUX0VSUk9SOworCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NFUlRfVkVSSUZZLFNTTF9SX0JBRF9TSUdOQVRVUkUpOworCQkJZ290byBmX2VycjsKKwkJCX0KKwkJfQorCWVsc2UKICNpZm5kZWYgT1BFTlNTTF9OT19SU0EgCiAJaWYgKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQogCQl7CkBAIC0yOTIzLDYgKzMxNTMsMTMgQEAKIAkJc3NsM19zZW5kX2FsZXJ0KHMsU1NMM19BTF9GQVRBTCxhbCk7CiAJCX0KIGVuZDoKKwlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpCisJCXsKKwkJQklPX2ZyZWUocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpOworCQlzLT5zMy0+aGFuZHNoYWtlX2J1ZmZlciA9IE5VTEw7CisJCXMtPnMzLT5mbGFncyAmPSB+VExTMV9GTEFHU19LRUVQX0hBTkRTSEFLRTsKKwkJfQorCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CiAJRVZQX1BLRVlfZnJlZShwa2V5KTsKIAlyZXR1cm4ocmV0KTsKIAl9CkBAIC0zMDM1LDYgKzMyNzIsMTIgQEAKIAkJCWFsPVNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKIAkJCWdvdG8gZl9lcnI7CiAJCQl9CisJCS8qIE5vIGNsaWVudCBjZXJ0aWZpY2F0ZSBzbyBkaWdlc3QgY2FjaGVkIHJlY29yZHMgKi8KKwkJaWYgKHMtPnMzLT5oYW5kc2hha2VfYnVmZmVyICYmICFzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhzKSkKKwkJCXsKKwkJCWFsPVNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJCWdvdG8gZl9lcnI7CisJCQl9CiAJCX0KIAllbHNlCiAJCXsKQEAgLTMxMTEsMTMgKzMzNTQsMTcgQEAKIAkvKiBTU0wzX1NUX1NXX0NFUlRfQiAqLwogCXJldHVybihzc2wzX2RvX3dyaXRlKHMsU1NMM19SVF9IQU5EU0hBS0UpKTsKIAl9CisKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKy8qIHNlbmQgYSBuZXcgc2Vzc2lvbiB0aWNrZXQgKG5vdCBuZWNlc3NhcmlseSBmb3IgYSBuZXcgc2Vzc2lvbikgKi8KIGludCBzc2wzX3NlbmRfbmV3c2Vzc2lvbl90aWNrZXQoU1NMICpzKQogCXsKIAlpZiAocy0+c3RhdGUgPT0gU1NMM19TVF9TV19TRVNTSU9OX1RJQ0tFVF9BKQogCQl7CiAJCXVuc2lnbmVkIGNoYXIgKnAsICpzZW5jLCAqbWFjc3RhcnQ7Ci0JCWludCBsZW4sIHNsZW47CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0X3A7CisJCWludCBsZW4sIHNsZW5fZnVsbCwgc2xlbjsKKwkJU1NMX1NFU1NJT04gKnNlc3M7CiAJCXVuc2lnbmVkIGludCBobGVuOwogCQlFVlBfQ0lQSEVSX0NUWCBjdHg7CiAJCUhNQUNfQ1RYIGhjdHg7CkBAIC0zMTI2LDEyICszMzczLDM4IEBACiAJCXVuc2lnbmVkIGNoYXIga2V5X25hbWVbMTZdOwogCiAJCS8qIGdldCBzZXNzaW9uIGVuY29kaW5nIGxlbmd0aCAqLwotCQlzbGVuID0gaTJkX1NTTF9TRVNTSU9OKHMtPnNlc3Npb24sIE5VTEwpOworCQlzbGVuX2Z1bGwgPSBpMmRfU1NMX1NFU1NJT04ocy0+c2Vzc2lvbiwgTlVMTCk7CiAJCS8qIFNvbWUgbGVuZ3RoIHZhbHVlcyBhcmUgMTYgYml0cywgc28gZm9yZ2V0IGl0IGlmIHNlc3Npb24gaXMKICAJCSAqIHRvbyBsb25nCiAgCQkgKi8KLQkJaWYgKHNsZW4gPiAweEZGMDApCisJCWlmIChzbGVuX2Z1bGwgPiAweEZGMDApCiAJCQlyZXR1cm4gLTE7CisJCXNlbmMgPSBPUEVOU1NMX21hbGxvYyhzbGVuX2Z1bGwpOworCQlpZiAoIXNlbmMpCisJCQlyZXR1cm4gLTE7CisJCXAgPSBzZW5jOworCQlpMmRfU1NMX1NFU1NJT04ocy0+c2Vzc2lvbiwgJnApOworCisJCS8qIGNyZWF0ZSBhIGZyZXNoIGNvcHkgKG5vdCBzaGFyZWQgd2l0aCBvdGhlciB0aHJlYWRzKSB0byBjbGVhbiB1cCAqLworCQljb25zdF9wID0gc2VuYzsKKwkJc2VzcyA9IGQyaV9TU0xfU0VTU0lPTihOVUxMLCAmY29uc3RfcCwgc2xlbl9mdWxsKTsKKwkJaWYgKHNlc3MgPT0gTlVMTCkKKwkJCXsKKwkJCU9QRU5TU0xfZnJlZShzZW5jKTsKKwkJCXJldHVybiAtMTsKKwkJCX0KKwkJc2Vzcy0+c2Vzc2lvbl9pZF9sZW5ndGggPSAwOyAvKiBJRCBpcyBpcnJlbGV2YW50IGZvciB0aGUgdGlja2V0ICovCisKKwkJc2xlbiA9IGkyZF9TU0xfU0VTU0lPTihzZXNzLCBOVUxMKTsKKwkJaWYgKHNsZW4gPiBzbGVuX2Z1bGwpIC8qIHNob3VsZG4ndCBldmVyIGhhcHBlbiAqLworCQkJeworCQkJT1BFTlNTTF9mcmVlKHNlbmMpOworCQkJcmV0dXJuIC0xOworCQkJfQorCQlwID0gc2VuYzsKKwkJaTJkX1NTTF9TRVNTSU9OKHNlc3MsICZwKTsKKwkJU1NMX1NFU1NJT05fZnJlZShzZXNzKTsKKwogCQkvKiBHcm93IGJ1ZmZlciBpZiBuZWVkIGJlOiB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGFzCiAgCQkgKiBmb2xsb3dzIDEgKHNpemUgb2YgbWVzc2FnZSBuYW1lKSArIDMgKG1lc3NhZ2UgbGVuZ3RoCiAgCQkgKiBieXRlcykgKyA0ICh0aWNrZXQgbGlmZXRpbWUgaGludCkgKyAyICh0aWNrZXQgbGVuZ3RoKSArCkBAIC0zMTQzLDExICszNDE2LDYgQEAKIAkJCTI2ICsgRVZQX01BWF9JVl9MRU5HVEggKyBFVlBfTUFYX0JMT0NLX0xFTkdUSCArCiAJCQlFVlBfTUFYX01EX1NJWkUgKyBzbGVuKSkKIAkJCXJldHVybiAtMTsKLQkJc2VuYyA9IE9QRU5TU0xfbWFsbG9jKHNsZW4pOwotCQlpZiAoIXNlbmMpCi0JCQlyZXR1cm4gLTE7Ci0JCXAgPSBzZW5jOwotCQlpMmRfU1NMX1NFU1NJT04ocy0+c2Vzc2lvbiwgJnApOwogCiAJCXA9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKIAkJLyogZG8gdGhlIGhlYWRlciAqLwpAQCAtMzE3OCw3ICszNDQ2LDEzIEBACiAJCQkJCXRsc2V4dF90aWNrX21kKCksIE5VTEwpOwogCQkJbWVtY3B5KGtleV9uYW1lLCB0Y3R4LT50bHNleHRfdGlja19rZXlfbmFtZSwgMTYpOwogCQkJfQotCQlsMm4ocy0+c2Vzc2lvbi0+dGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludCwgcCk7CisKKwkJLyogVGlja2V0IGxpZmV0aW1lIGhpbnQgKGFkdmlzb3J5IG9ubHkpOgorCQkgKiBXZSBsZWF2ZSB0aGlzIHVuc3BlY2lmaWVkIGZvciByZXN1bWVkIHNlc3Npb24gKGZvciBzaW1wbGljaXR5KSwKKwkJICogYW5kIGd1ZXNzIHRoYXQgdGlja2V0cyBmb3IgbmV3IHNlc3Npb25zIHdpbGwgbGl2ZSBhcyBsb25nCisJCSAqIGFzIHRoZWlyIHNlc3Npb25zLiAqLworCQlsMm4ocy0+aGl0ID8gMCA6IHMtPnNlc3Npb24tPnRpbWVvdXQsIHApOworCiAJCS8qIFNraXAgdGlja2V0IGxlbmd0aCBmb3Igbm93ICovCiAJCXAgKz0gMjsKIAkJLyogT3V0cHV0IGtleSBuYW1lICovCkBAIC0zMjU0LDEzICszNTI4LDEzIEBACiAJcmV0dXJuKHNzbDNfZG9fd3JpdGUocyxTU0wzX1JUX0hBTkRTSEFLRSkpOwogCX0KIAotIyBpZm5kZWYgT1BFTlNTTF9OT19OUE4KKyMgaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAvKiBzc2wzX2dldF9uZXh0X3Byb3RvIHJlYWRzIGEgTmV4dCBQcm90b2NvbCBOZWdvdGlhdGlvbiBoYW5kc2hha2UgbWVzc2FnZS4gSXQKICAqIHNldHMgdGhlIG5leHRfcHJvdG8gbWVtYmVyIGluIHMgaWYgZm91bmQgKi8KIGludCBzc2wzX2dldF9uZXh0X3Byb3RvKFNTTCAqcykKIAl7CiAJaW50IG9rOwotCXVuc2lnbmVkIHByb3RvX2xlbiwgcGFkZGluZ19sZW47CisJaW50IHByb3RvX2xlbiwgcGFkZGluZ19sZW47CiAJbG9uZyBuOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CiAKZGlmZiAtLWdpdCBhL3NzbC9zcnRwLmggYi9zc2wvc3J0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2YzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zc2wvc3J0cC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBzc2wvdGxzMS5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKy8qCisgIERUTFMgY29kZSBieSBFcmljIFJlc2NvcmxhIDxla3JAcnRmbS5jb20+CisKKyAgQ29weXJpZ2h0IChDKSAyMDA2LCBOZXR3b3JrIFJlc29uYW5jZSwgSW5jLgorICBDb3B5cmlnaHQgKEMpIDIwMTEsIFJURk0sIEluYy4KKyovCisKKyNpZm5kZWYgSEVBREVSX0QxX1NSVFBfSAorI2RlZmluZSBIRUFERVJfRDFfU1JUUF9ICisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgICAgCisjZGVmaW5lIFNSVFBfQUVTMTI4X0NNX1NIQTFfODAgMHgwMDAxCisjZGVmaW5lIFNSVFBfQUVTMTI4X0NNX1NIQTFfMzIgMHgwMDAyCisjZGVmaW5lIFNSVFBfQUVTMTI4X0Y4X1NIQTFfODAgMHgwMDAzCisjZGVmaW5lIFNSVFBfQUVTMTI4X0Y4X1NIQTFfMzIgMHgwMDA0CisjZGVmaW5lIFNSVFBfTlVMTF9TSEExXzgwICAgICAgMHgwMDA1CisjZGVmaW5lIFNSVFBfTlVMTF9TSEExXzMyICAgICAgMHgwMDA2CisKK2ludCBTU0xfQ1RYX3NldF90bHNleHRfdXNlX3NydHAoU1NMX0NUWCAqY3R4LCBjb25zdCBjaGFyICpwcm9maWxlcyk7CitpbnQgU1NMX3NldF90bHNleHRfdXNlX3NydHAoU1NMICpjdHgsIGNvbnN0IGNoYXIgKnByb2ZpbGVzKTsKK1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFICpTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZShTU0wgKnMpOworCitTVEFDS19PRihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkgKlNTTF9nZXRfc3J0cF9wcm9maWxlcyhTU0wgKnNzbCk7CitTUlRQX1BST1RFQ1RJT05fUFJPRklMRSAqU1NMX2dldF9zZWxlY3RlZF9zcnRwX3Byb2ZpbGUoU1NMICpzKTsKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9zc2wvc3NsLmggYi9zc2wvc3NsLmgKaW5kZXggZDg4ZDIyZC4uOTBkNTUzNyAxMDA2NDQKLS0tIGEvc3NsL3NzbC5oCisrKyBiL3NzbC9zc2wuaApAQCAtMjUyLDYgKzI1Miw3IEBACiAjZGVmaW5lIFNTTF9UWFRfa0VFQ0RICQkia0VFQ0RIIgogI2RlZmluZSBTU0xfVFhUX2tQU0sgICAgICAgICAgICAia1BTSyIKICNkZWZpbmUgU1NMX1RYVF9rR09TVAkJImtHT1NUIgorI2RlZmluZSBTU0xfVFhUX2tTUlAJCSJrU1JQIgogCiAjZGVmaW5lCVNTTF9UWFRfYVJTQQkJImFSU0EiCiAjZGVmaW5lCVNTTF9UWFRfYURTUwkJImFEU1MiCkBAIC0yNzUsNiArMjc2LDcgQEAKICNkZWZpbmUgU1NMX1RYVF9FQ0RTQQkJIkVDRFNBIgogI2RlZmluZSBTU0xfVFhUX0tSQjUgICAgICAJIktSQjUiCiAjZGVmaW5lIFNTTF9UWFRfUFNLICAgICAgICAgICAgICJQU0siCisjZGVmaW5lIFNTTF9UWFRfU1JQCQkiU1JQIgogCiAjZGVmaW5lIFNTTF9UWFRfREVTCQkiREVTIgogI2RlZmluZSBTU0xfVFhUXzNERVMJCSIzREVTIgpAQCAtMjg1LDYgKzI4Nyw3IEBACiAjZGVmaW5lIFNTTF9UWFRfQUVTMTI4CQkiQUVTMTI4IgogI2RlZmluZSBTU0xfVFhUX0FFUzI1NgkJIkFFUzI1NiIKICNkZWZpbmUgU1NMX1RYVF9BRVMJCSJBRVMiCisjZGVmaW5lIFNTTF9UWFRfQUVTX0dDTQkJIkFFU0dDTSIKICNkZWZpbmUgU1NMX1RYVF9DQU1FTExJQTEyOAkiQ0FNRUxMSUExMjgiCiAjZGVmaW5lIFNTTF9UWFRfQ0FNRUxMSUEyNTYJIkNBTUVMTElBMjU2IgogI2RlZmluZSBTU0xfVFhUX0NBTUVMTElBCSJDQU1FTExJQSIKQEAgLTI5NCwxMCArMjk3LDE0IEBACiAjZGVmaW5lIFNTTF9UWFRfU0hBCQkiU0hBIiAvKiBzYW1lIGFzICJTSEExIiAqLwogI2RlZmluZSBTU0xfVFhUX0dPU1Q5NAkJIkdPU1Q5NCIgCiAjZGVmaW5lIFNTTF9UWFRfR09TVDg5TUFDCQkiR09TVDg5TUFDIiAKKyNkZWZpbmUgU1NMX1RYVF9TSEEyNTYJCSJTSEEyNTYiCisjZGVmaW5lIFNTTF9UWFRfU0hBMzg0CQkiU0hBMzg0IgogCiAjZGVmaW5lIFNTTF9UWFRfU1NMVjIJCSJTU0x2MiIKICNkZWZpbmUgU1NMX1RYVF9TU0xWMwkJIlNTTHYzIgogI2RlZmluZSBTU0xfVFhUX1RMU1YxCQkiVExTdjEiCisjZGVmaW5lIFNTTF9UWFRfVExTVjFfMQkJIlRMU3YxLjEiCisjZGVmaW5lIFNTTF9UWFRfVExTVjFfMgkJIlRMU3YxLjIiCiAKICNkZWZpbmUgU1NMX1RYVF9FWFAJCSJFWFAiCiAjZGVmaW5lIFNTTF9UWFRfRVhQT1JUCQkiRVhQT1JUIgpAQCAtMzU2LDkgKzM2MywyOSBAQAogICogaW4gU1NMX0NUWC4gKi8KIHR5cGVkZWYgc3RydWN0IHNzbF9zdCAqc3NsX2Nyb2NrX3N0OwogdHlwZWRlZiBzdHJ1Y3QgdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9zdCBUTFNfU0VTU0lPTl9USUNLRVRfRVhUOwordHlwZWRlZiBzdHJ1Y3Qgc3NsX21ldGhvZF9zdCBTU0xfTUVUSE9EOwordHlwZWRlZiBzdHJ1Y3Qgc3NsX2NpcGhlcl9zdCBTU0xfQ0lQSEVSOwordHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QgU1NMX1NFU1NJT047CisKK0RFQ0xBUkVfU1RBQ0tfT0YoU1NMX0NJUEhFUikKKworLyogU1JUUCBwcm90ZWN0aW9uIHByb2ZpbGVzIGZvciB1c2Ugd2l0aCB0aGUgdXNlX3NydHAgZXh0ZW5zaW9uIChSRkMgNTc2NCkqLwordHlwZWRlZiBzdHJ1Y3Qgc3J0cF9wcm90ZWN0aW9uX3Byb2ZpbGVfc3QKKyAgICAgICB7CisgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICB1bnNpZ25lZCBsb25nIGlkOworICAgICAgIH0gU1JUUF9QUk9URUNUSU9OX1BST0ZJTEU7CisKK0RFQ0xBUkVfU1RBQ0tfT0YoU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUpCisKK3R5cGVkZWYgaW50ICgqdGxzX3Nlc3Npb25fdGlja2V0X2V4dF9jYl9mbikoU1NMICpzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuLCB2b2lkICphcmcpOwordHlwZWRlZiBpbnQgKCp0bHNfc2Vzc2lvbl9zZWNyZXRfY2JfZm4pKFNTTCAqcywgdm9pZCAqc2VjcmV0LCBpbnQgKnNlY3JldF9sZW4sIFNUQUNLX09GKFNTTF9DSVBIRVIpICpwZWVyX2NpcGhlcnMsIFNTTF9DSVBIRVIgKipjaXBoZXIsIHZvaWQgKmFyZyk7CisKKworI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KIAogLyogdXNlZCB0byBob2xkIGluZm8gb24gdGhlIHBhcnRpY3VsYXIgY2lwaGVycyB1c2VkICovCi10eXBlZGVmIHN0cnVjdCBzc2xfY2lwaGVyX3N0CitzdHJ1Y3Qgc3NsX2NpcGhlcl9zdAogCXsKIAlpbnQgdmFsaWQ7CiAJY29uc3QgY2hhciAqbmFtZTsJCS8qIHRleHQgbmFtZSAqLwpAQCAtMzc1LDE1ICs0MDIsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFsZ29yaXRobTI7CS8qIEV4dHJhIGZsYWdzICovCiAJaW50IHN0cmVuZ3RoX2JpdHM7CQkvKiBOdW1iZXIgb2YgYml0cyByZWFsbHkgdXNlZCAqLwogCWludCBhbGdfYml0czsJCQkvKiBOdW1iZXIgb2YgYml0cyBmb3IgYWxnb3JpdGhtICovCi0JfSBTU0xfQ0lQSEVSOworCX07CiAKLURFQ0xBUkVfU1RBQ0tfT0YoU1NMX0NJUEhFUikKLQotdHlwZWRlZiBpbnQgKCp0bHNfc2Vzc2lvbl90aWNrZXRfZXh0X2NiX2ZuKShTU0wgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHZvaWQgKmFyZyk7Ci10eXBlZGVmIGludCAoKnRsc19zZXNzaW9uX3NlY3JldF9jYl9mbikoU1NMICpzLCB2b2lkICpzZWNyZXQsIGludCAqc2VjcmV0X2xlbiwgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnBlZXJfY2lwaGVycywgU1NMX0NJUEhFUiAqKmNpcGhlciwgdm9pZCAqYXJnKTsKIAogLyogVXNlZCB0byBob2xkIGZ1bmN0aW9ucyBmb3IgU1NMdjIgb3IgU1NMdjMvVExTdjEgZnVuY3Rpb25zICovCi10eXBlZGVmIHN0cnVjdCBzc2xfbWV0aG9kX3N0CitzdHJ1Y3Qgc3NsX21ldGhvZF9zdAogCXsKIAlpbnQgdmVyc2lvbjsKIAlpbnQgKCpzc2xfbmV3KShTU0wgKnMpOwpAQCAtNDE2LDcgKzQzOSw3IEBACiAJaW50ICgqc3NsX3ZlcnNpb24pKHZvaWQpOwogCWxvbmcgKCpzc2xfY2FsbGJhY2tfY3RybCkoU1NMICpzLCBpbnQgY2JfaWQsIHZvaWQgKCpmcCkodm9pZCkpOwogCWxvbmcgKCpzc2xfY3R4X2NhbGxiYWNrX2N0cmwpKFNTTF9DVFggKnMsIGludCBjYl9pZCwgdm9pZCAoKmZwKSh2b2lkKSk7Ci0JfSBTU0xfTUVUSE9EOworCX07CiAKIC8qIExldHMgbWFrZSB0aGlzIGludG8gYW4gQVNOLjEgdHlwZSBzdHJ1Y3R1cmUgYXMgZm9sbG93cwogICogU1NMX1NFU1NJT05fSUQgOjo9IFNFUVVFTkNFIHsKQEAgLTQzMywxNCArNDU2LDE3IEBACiAgKglTZXNzaW9uX0lEX2NvbnRleHQgWyA0IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HLCAgIC0tIHRoZSBTZXNzaW9uIElEIGNvbnRleHQKICAqCVZlcmlmeV9yZXN1bHQgWyA1IF0gRVhQTElDSVQgSU5URUdFUiwgICAtLSBYNTA5X1ZfLi4uIGNvZGUgZm9yIGBQZWVyJwogICoJSG9zdE5hbWUgWyA2IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HLCAgIC0tIG9wdGlvbmFsIEhvc3ROYW1lIGZyb20gc2VydmVybmFtZSBUTFMgZXh0ZW5zaW9uIAotICoJRUNQb2ludEZvcm1hdExpc3QgWyA3IF0gT0NURVQgU1RSSU5HLCAgICAgLS0gb3B0aW9uYWwgRUMgcG9pbnQgZm9ybWF0IGxpc3QgZnJvbSBUTFMgZXh0ZW5zaW9uCi0gKglQU0tfaWRlbnRpdHlfaGludCBbIDggXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsIC0tIG9wdGlvbmFsIFBTSyBpZGVudGl0eSBoaW50Ci0gKglQU0tfaWRlbnRpdHkgWyA5IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HIC0tIG9wdGlvbmFsIFBTSyBpZGVudGl0eQorICoJUFNLX2lkZW50aXR5X2hpbnQgWyA3IF0gRVhQTElDSVQgT0NURVQgU1RSSU5HLCAtLSBvcHRpb25hbCBQU0sgaWRlbnRpdHkgaGludAorICoJUFNLX2lkZW50aXR5IFsgOCBdIEVYUExJQ0lUIE9DVEVUIFNUUklORywgIC0tIG9wdGlvbmFsIFBTSyBpZGVudGl0eQorICoJVGlja2V0X2xpZmV0aW1lX2hpbnQgWzldIEVYUExJQ0lUIElOVEVHRVIsIC0tIHNlcnZlcidzIGxpZmV0aW1lIGhpbnQgZm9yIHNlc3Npb24gdGlja2V0CisgKglUaWNrZXQgWzEwXSAgICAgICAgICAgICBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsIC0tIHNlc3Npb24gdGlja2V0IChjbGllbnRzIG9ubHkpCisgKglDb21wcmVzc2lvbl9tZXRoIFsxMV0gICBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcsIC0tIG9wdGlvbmFsIGNvbXByZXNzaW9uIG1ldGhvZAorICoJU1JQX3VzZXJuYW1lIFsgMTIgXSBFWFBMSUNJVCBPQ1RFVCBTVFJJTkcgLS0gb3B0aW9uYWwgU1JQIHVzZXJuYW1lCiAgKgl9CiAgKiBMb29rIGluIHNzbC9zc2xfYXNuMS5jIGZvciBtb3JlIGRldGFpbHMKICAqIEknbSB1c2luZyBFWFBMSUNJVCB0YWdzIHNvIEkgY2FuIHJlYWQgdGhlIGRhbW4gdGhpbmdzIHVzaW5nIGFzbjFwYXJzZSA6LSkuCiAgKi8KLXR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0CitzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKIAl7CiAJaW50IHNzbF92ZXJzaW9uOwkvKiB3aGF0IHNzbCB2ZXJzaW9uIHNlc3Npb24gaW5mbyBpcwogCQkJCSAqIGJlaW5nIGtlcHQgaW4gaGVyZT8gKi8KQEAgLTUxMiw4ICs1MzgsMTIgQEAKIAlzaXplX3QJdGxzZXh0X3RpY2tsZW47CQkvKiBTZXNzaW9uIHRpY2tldCBsZW5ndGggKi8JCiAJbG9uZyB0bHNleHRfdGlja19saWZldGltZV9oaW50OwkvKiBTZXNzaW9uIGxpZmV0aW1lIGhpbnQgaW4gc2Vjb25kcyAqLwogI2VuZGlmCi0JfSBTU0xfU0VTU0lPTjsKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwljaGFyICpzcnBfdXNlcm5hbWU7CisjZW5kaWYKKwl9OwogCisjZW5kaWYKIAogI2RlZmluZSBTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHCQkJMHgwMDAwMDAwMUwKICNkZWZpbmUgU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUcJCQkweDAwMDAwMDAyTApAQCAtNTI2LDYgKzU1Niw3IEBACiAjZGVmaW5lIFNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUcJCQkweDAwMDAwMDgwTAogI2RlZmluZSBTU0xfT1BfVExTX0Q1X0JVRwkJCQkweDAwMDAwMTAwTAogI2RlZmluZSBTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHCQkJMHgwMDAwMDIwMEwKKyNkZWZpbmUgU1NMX09QX05PX1RMU3YxXzEJCQkJMHgwMDAwMDQwMEwKIAogLyogRGlzYWJsZSBTU0wgMy4wL1RMUyAxLjAgQ0JDIHZ1bG5lcmFiaWxpdHkgd29ya2Fyb3VuZCB0aGF0IHdhcyBhZGRlZAogICogaW4gT3BlblNTTCAwLjkuNmQuICBVc3VhbGx5IChkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uIHByb3RvY29sKQpAQCAtNTM2LDcgKzU2Nyw3IEBACiAKIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmthcm91bmRzIHRoYXQgc2hvdWxkIGJlIHJhdGhlciBoYXJtbGVzcy4KICAqICAgICAgICAgICAgIFRoaXMgdXNlZCB0byBiZSAweDAwMEZGRkZGTCBiZWZvcmUgMC45LjcuICovCi0jZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBGRkZMCisjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBCRkZMCiAKIC8qIERUTFMgb3B0aW9ucyAqLwogI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRVICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTApAQCAtNTcyLDExICs2MDMsMTYgQEAKICNkZWZpbmUgU1NMX09QX05PX1NTTHYyCQkJCQkweDAxMDAwMDAwTAogI2RlZmluZSBTU0xfT1BfTk9fU1NMdjMJCQkJCTB4MDIwMDAwMDBMCiAjZGVmaW5lIFNTTF9PUF9OT19UTFN2MQkJCQkJMHgwNDAwMDAwMEwKKyNkZWZpbmUgU1NMX09QX05PX1RMU3YxXzIJCQkJMHgwODAwMDAwMEwKIAorLyogVGhlc2UgbmV4dCB0d28gd2VyZSBuZXZlciBhY3R1YWxseSB1c2VkIGZvciBhbnl0aGluZyBzaW5jZSBTU0xlYXkKKyAqIHphcCBzbyB3ZSBoYXZlIHNvbWUgbW9yZSBmbGFncy4KKyAqLwogLyogVGhlIG5leHQgZmxhZyBkZWxpYmVyYXRlbHkgY2hhbmdlcyB0aGUgY2lwaGVydGVzdCwgdGhpcyBpcyBhIGNoZWNrCiAgKiBmb3IgdGhlIFBLQ1MjMSBhdHRhY2sgKi8KLSNkZWZpbmUgU1NMX09QX1BLQ1MxX0NIRUNLXzEJCQkJMHgwODAwMDAwMEwKLSNkZWZpbmUgU1NMX09QX1BLQ1MxX0NIRUNLXzIJCQkJMHgxMDAwMDAwMEwKKyNkZWZpbmUgU1NMX09QX1BLQ1MxX0NIRUNLXzEJCQkJMHgwCisjZGVmaW5lIFNTTF9PUF9QS0NTMV9DSEVDS18yCQkJCTB4MAorCiAjZGVmaW5lIFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUcJCQkweDIwMDAwMDAwTAogI2RlZmluZSBTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRwkJMHg0MDAwMDAwMEwKIC8qIE1ha2Ugc2VydmVyIGFkZCBzZXJ2ZXItaGVsbG8gZXh0ZW5zaW9uIGZyb20gZWFybHkgdmVyc2lvbiBvZgpAQCAtNjQ0LDEyICs2ODAsNTMgQEAKICNkZWZpbmUgU1NMX2dldF9zZWN1cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0KHNzbCkgXAogCVNTTF9jdHJsKChzc2wpLCBTU0xfQ1RSTF9HRVRfUklfU1VQUE9SVCwgMCwgTlVMTCkKIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKyNkZWZpbmUgU1NMX2hlYXJ0YmVhdChzc2wpIFwKKyAgICAgICAgU1NMX2N0cmwoKHNzbCksU1NMX0NUUkxfVExTX0VYVF9TRU5EX0hFQVJUQkVBVCwwLE5VTEwpCisjZW5kaWYKKwogdm9pZCBTU0xfQ1RYX3NldF9tc2dfY2FsbGJhY2soU1NMX0NUWCAqY3R4LCB2b2lkICgqY2IpKGludCB3cml0ZV9wLCBpbnQgdmVyc2lvbiwgaW50IGNvbnRlbnRfdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBTU0wgKnNzbCwgdm9pZCAqYXJnKSk7CiB2b2lkIFNTTF9zZXRfbXNnX2NhbGxiYWNrKFNTTCAqc3NsLCB2b2lkICgqY2IpKGludCB3cml0ZV9wLCBpbnQgdmVyc2lvbiwgaW50IGNvbnRlbnRfdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBTU0wgKnNzbCwgdm9pZCAqYXJnKSk7CiAjZGVmaW5lIFNTTF9DVFhfc2V0X21zZ19jYWxsYmFja19hcmcoY3R4LCBhcmcpIFNTTF9DVFhfY3RybCgoY3R4KSwgU1NMX0NUUkxfU0VUX01TR19DQUxMQkFDS19BUkcsIDAsIChhcmcpKQogI2RlZmluZSBTU0xfc2V0X21zZ19jYWxsYmFja19hcmcoc3NsLCBhcmcpIFNTTF9jdHJsKChzc2wpLCBTU0xfQ1RSTF9TRVRfTVNHX0NBTExCQUNLX0FSRywgMCwgKGFyZykpCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKwordHlwZWRlZiBzdHJ1Y3Qgc3JwX2N0eF9zdAorCXsKKwkvKiBwYXJhbSBmb3IgYWxsIHRoZSBjYWxsYmFja3MgKi8KKwl2b2lkICpTUlBfY2JfYXJnOworCS8qIHNldCBjbGllbnQgSGVsbG8gbG9naW4gY2FsbGJhY2sgKi8KKwlpbnQgKCpUTFNfZXh0X3NycF91c2VybmFtZV9jYWxsYmFjaykoU1NMICosIGludCAqLCB2b2lkICopOworCS8qIHNldCBTUlAgTi9nIHBhcmFtIGNhbGxiYWNrIGZvciB2ZXJpZmljYXRpb24gKi8KKwlpbnQgKCpTUlBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrKShTU0wgKiwgdm9pZCAqKTsKKwkvKiBzZXQgU1JQIGNsaWVudCBwYXNzd2QgY2FsbGJhY2sgKi8KKwljaGFyICooKlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrKShTU0wgKiwgdm9pZCAqKTsKKworCWNoYXIgKmxvZ2luOworCUJJR05VTSAqTiwqZywqcywqQiwqQTsKKwlCSUdOVU0gKmEsKmIsKnY7CisJY2hhciAqaW5mbzsKKwlpbnQgc3RyZW5ndGg7CisKKwl1bnNpZ25lZCBsb25nIHNycF9NYXNrOworCX0gU1JQX0NUWDsKKworI2VuZGlmCisKKy8qIHNlZSB0bHNfc3JwLmMgKi8KK2ludCBTU0xfU1JQX0NUWF9pbml0KFNTTCAqcyk7CitpbnQgU1NMX0NUWF9TUlBfQ1RYX2luaXQoU1NMX0NUWCAqY3R4KTsKK2ludCBTU0xfU1JQX0NUWF9mcmVlKFNTTCAqY3R4KTsKK2ludCBTU0xfQ1RYX1NSUF9DVFhfZnJlZShTU0xfQ1RYICpjdHgpOworaW50IFNTTF9zcnBfc2VydmVyX3BhcmFtX3dpdGhfdXNlcm5hbWUoU1NMICpzLCBpbnQgKmFkKTsKK2ludCBTUlBfZ2VuZXJhdGVfc2VydmVyX21hc3Rlcl9zZWNyZXQoU1NMICpzLHVuc2lnbmVkIGNoYXIgKm1hc3Rlcl9rZXkpOworaW50IFNSUF9DYWxjX0FfcGFyYW0oU1NMICpzKTsKK2ludCBTUlBfZ2VuZXJhdGVfY2xpZW50X21hc3Rlcl9zZWNyZXQoU1NMICpzLHVuc2lnbmVkIGNoYXIgKm1hc3Rlcl9rZXkpOworCisjZW5kaWYKIAogI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfTVNET1MpICYmICFkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKQogI2RlZmluZSBTU0xfTUFYX0NFUlRfTElTVF9ERUZBVUxUIDEwMjQqMzAgLyogMzBrIG1heCBjZXJ0IGxpc3QgOi0pICovCkBAIC02NzUsNyArNzUyLDExIEBACiB0eXBlZGVmIGludCAoKkdFTl9TRVNTSU9OX0NCKShjb25zdCBTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqaWQsCiAJCQkJdW5zaWduZWQgaW50ICppZF9sZW4pOwogCi10eXBlZGVmIHN0cnVjdCBzc2xfY29tcF9zdAordHlwZWRlZiBzdHJ1Y3Qgc3NsX2NvbXBfc3QgU1NMX0NPTVA7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCisKK3N0cnVjdCBzc2xfY29tcF9zdAogCXsKIAlpbnQgaWQ7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTY4NCw3ICs3NjUsNyBAQAogI2Vsc2UKIAljaGFyICptZXRob2Q7CiAjZW5kaWYKLQl9IFNTTF9DT01QOworCX07CiAKIERFQ0xBUkVfU1RBQ0tfT0YoU1NMX0NPTVApCiBERUNMQVJFX0xIQVNIX09GKFNTTF9TRVNTSU9OKTsKQEAgLTg1MywxMSArOTM0LDMxIEBACiAJLyogQ2FsbGJhY2sgZm9yIHN0YXR1cyByZXF1ZXN0ICovCiAJaW50ICgqdGxzZXh0X3N0YXR1c19jYikoU1NMICpzc2wsIHZvaWQgKmFyZyk7CiAJdm9pZCAqdGxzZXh0X3N0YXR1c19hcmc7Ci0KIAkvKiBkcmFmdC1yZXNjb3JsYS10bHMtb3BhcXVlLXByZi1pbnB1dC0wMC50eHQgaW5mb3JtYXRpb24gKi8KIAlpbnQgKCp0bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFjaykoU1NMICosIHZvaWQgKnBlZXJpbnB1dCwgc2l6ZV90IGxlbiwgdm9pZCAqYXJnKTsKIAl2b2lkICp0bHNleHRfb3BhcXVlX3ByZl9pbnB1dF9jYWxsYmFja19hcmc7CisjZW5kaWYKIAorI2lmbmRlZiBPUEVOU1NMX05PX1BTSworCWNoYXIgKnBza19pZGVudGl0eV9oaW50OworCXVuc2lnbmVkIGludCAoKnBza19jbGllbnRfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICpoaW50LCBjaGFyICppZGVudGl0eSwKKwkJdW5zaWduZWQgaW50IG1heF9pZGVudGl0eV9sZW4sIHVuc2lnbmVkIGNoYXIgKnBzaywKKwkJdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKTsKKwl1bnNpZ25lZCBpbnQgKCpwc2tfc2VydmVyX2NhbGxiYWNrKShTU0wgKnNzbCwgY29uc3QgY2hhciAqaWRlbnRpdHksCisJCXVuc2lnbmVkIGNoYXIgKnBzaywgdW5zaWduZWQgaW50IG1heF9wc2tfbGVuKTsKKyNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fQlVGX0ZSRUVMSVNUUworI2RlZmluZSBTU0xfTUFYX0JVRl9GUkVFTElTVF9MRU5fREVGQVVMVCAzMgorCXVuc2lnbmVkIGludCBmcmVlbGlzdF9tYXhfbGVuOworCXN0cnVjdCBzc2wzX2J1Zl9mcmVlbGlzdF9zdCAqd2J1Zl9mcmVlbGlzdDsKKwlzdHJ1Y3Qgc3NsM19idWZfZnJlZWxpc3Rfc3QgKnJidWZfZnJlZWxpc3Q7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlTUlBfQ1RYIHNycF9jdHg7IC8qIGN0eCBmb3IgU1JQIGF1dGhlbnRpY2F0aW9uICovCisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogIyBpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKIAkvKiBOZXh0IHByb3RvY29sIG5lZ290aWF0aW9uIGluZm9ybWF0aW9uICovCiAJLyogKGZvciBleHBlcmltZW50YWwgTlBOIGV4dGVuc2lvbikuICovCkBAIC04NzYsMjUgKzk3NywxMyBAQAogCQkJCSAgICB2b2lkICphcmcpOwogCXZvaWQgKm5leHRfcHJvdG9fc2VsZWN0X2NiX2FyZzsKICMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIE9QRU5TU0xfTk9fUFNLCi0JY2hhciAqcHNrX2lkZW50aXR5X2hpbnQ7Ci0JdW5zaWduZWQgaW50ICgqcHNrX2NsaWVudF9jYWxsYmFjaykoU1NMICpzc2wsIGNvbnN0IGNoYXIgKmhpbnQsIGNoYXIgKmlkZW50aXR5LAotCQl1bnNpZ25lZCBpbnQgbWF4X2lkZW50aXR5X2xlbiwgdW5zaWduZWQgY2hhciAqcHNrLAotCQl1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOwotCXVuc2lnbmVkIGludCAoKnBza19zZXJ2ZXJfY2FsbGJhY2spKFNTTCAqc3NsLCBjb25zdCBjaGFyICppZGVudGl0eSwKLQkJdW5zaWduZWQgY2hhciAqcHNrLCB1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOwotI2VuZGlmCi0KLSNpZm5kZWYgT1BFTlNTTF9OT19CVUZfRlJFRUxJU1RTCi0jZGVmaW5lIFNTTF9NQVhfQlVGX0ZSRUVMSVNUX0xFTl9ERUZBVUxUIDMyCi0JdW5zaWduZWQgaW50IGZyZWVsaXN0X21heF9sZW47Ci0Jc3RydWN0IHNzbDNfYnVmX2ZyZWVsaXN0X3N0ICp3YnVmX2ZyZWVsaXN0OwotCXN0cnVjdCBzc2wzX2J1Zl9mcmVlbGlzdF9zdCAqcmJ1Zl9mcmVlbGlzdDsKKyAgICAgICAgLyogU1JUUCBwcm9maWxlcyB3ZSBhcmUgd2lsbGluZyB0byBkbyBmcm9tIFJGQyA1NzY0ICovCisgICAgICAgIFNUQUNLX09GKFNSVFBfUFJPVEVDVElPTl9QUk9GSUxFKSAqc3J0cF9wcm9maWxlczsgIAogI2VuZGlmCiAJfTsKIAorI2VuZGlmCisKICNkZWZpbmUgU1NMX1NFU1NfQ0FDSEVfT0ZGCQkJMHgwMDAwCiAjZGVmaW5lIFNTTF9TRVNTX0NBQ0hFX0NMSUVOVAkJCTB4MDAwMQogI2RlZmluZSBTU0xfU0VTU19DQUNIRV9TRVJWRVIJCQkweDAwMDIKQEAgLTk1MiwyNCArMTA0MSwyNiBAQAogCQkJCQkgICBpbnQgKCpjYikgKFNTTCAqc3NsLAogCQkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKm91dCwKIAkJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqb3V0bGVuLAotCQkJCQkJICAgICAgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKTsKKwkJCQkJCSAgICAgIHZvaWQgKmFyZyksCisJCQkJCSAgIHZvaWQgKmFyZyk7CiB2b2lkIFNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiKFNTTF9DVFggKnMsCi0JCQkJICAgICAgaW50ICgqY2IpIChTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqKm91dCwKKwkJCQkgICAgICBpbnQgKCpjYikgKFNTTCAqc3NsLAorCQkJCQkJIHVuc2lnbmVkIGNoYXIgKipvdXQsCiAJCQkJCQkgdW5zaWduZWQgY2hhciAqb3V0bGVuLAogCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotCQkJCQkJIHVuc2lnbmVkIGludCBpbmxlbiwgdm9pZCAqYXJnKSwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgaW5sZW4sCisJCQkJCQkgdm9pZCAqYXJnKSwKIAkJCQkgICAgICB2b2lkICphcmcpOwogCiBpbnQgU1NMX3NlbGVjdF9uZXh0X3Byb3RvKHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKIAkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbiwKIAkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY2xpZW50X2xlbik7Ci12b2lkIFNTTF9nZXQwX25leHRfcHJvdG9fbmVnb3RpYXRlZChjb25zdCBTU0wgKnMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipkYXRhLAotCQkJCSAgICB1bnNpZ25lZCAqbGVuKTsKK3ZvaWQgU1NMX2dldDBfbmV4dF9wcm90b19uZWdvdGlhdGVkKGNvbnN0IFNTTCAqcywKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmRhdGEsIHVuc2lnbmVkICpsZW4pOwogCiAjZGVmaW5lIE9QRU5TU0xfTlBOX1VOU1VQUE9SVEVECTAKICNkZWZpbmUgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAkxCiAjZGVmaW5lIE9QRU5TU0xfTlBOX05PX09WRVJMQVAJMgotCiAjZW5kaWYKIAogI2lmbmRlZiBPUEVOU1NMX05PX1BTSwpAQCAtMTAxMSw2ICsxMTAyLDggQEAKICNkZWZpbmUgU1NMX01BQ19GTEFHX1JFQURfTUFDX1NUUkVBTSAxCiAjZGVmaW5lIFNTTF9NQUNfRkxBR19XUklURV9NQUNfU1RSRUFNIDIKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKwogc3RydWN0IHNzbF9zdAogCXsKIAkvKiBwcm90b2NvbCB2ZXJzaW9uCkBAIC0xMDU1LDkgKzExNDgsNyBAQAogCiAJaW50IHNlcnZlcjsJLyogYXJlIHdlIHRoZSBzZXJ2ZXIgc2lkZT8gLSBtb3N0bHkgdXNlZCBieSBTU0xfY2xlYXIqLwogCi0JaW50IG5ld19zZXNzaW9uOy8qIDEgaWYgd2UgYXJlIHRvIHVzZSBhIG5ldyBzZXNzaW9uLgotCSAgICAgICAgICAgICAgICAgKiAyIGlmIHdlIGFyZSBhIHNlcnZlciBhbmQgYXJlIGluc2lkZSBhIGhhbmRzaGFrZQotCSAgICAgICAgICAgICAgICAgKiAgIChpLmUuIG5vdCBqdXN0IHNlbmRpbmcgYSBIZWxsb1JlcXVlc3QpCisJaW50IG5ld19zZXNzaW9uOy8qIEdlbmVyYXRlIGEgbmV3IHNlc3Npb24gb3IgcmV1c2UgYW4gb2xkIG9uZS4KIAkgICAgICAgICAgICAgICAgICogTkI6IEZvciBzZXJ2ZXJzLCB0aGUgJ25ldycgc2Vzc2lvbiBtYXkgYWN0dWFsbHkgYmUgYSBwcmV2aW91c2x5CiAJICAgICAgICAgICAgICAgICAqIGNhY2hlZCBzZXNzaW9uIG9yIGV2ZW4gdGhlIHByZXZpb3VzIHNlc3Npb24gdW5sZXNzCiAJICAgICAgICAgICAgICAgICAqIFNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiBpcyBzZXQgKi8KQEAgLTEyNDQsMTEgKzEzMzUsMzIgQEAKICNlbmRpZgogCiAjZGVmaW5lIHNlc3Npb25fY3R4IGluaXRpYWxfY3R4CisKKwlTVEFDS19PRihTUlRQX1BST1RFQ1RJT05fUFJPRklMRSkgKnNydHBfcHJvZmlsZXM7ICAvKiBXaGF0IHdlJ2xsIGRvICovCisJU1JUUF9QUk9URUNUSU9OX1BST0ZJTEUgKnNydHBfcHJvZmlsZTsgICAgICAgICAgICAvKiBXaGF0J3MgYmVlbiBjaG9zZW4gKi8KKworCXVuc2lnbmVkIGludCB0bHNleHRfaGVhcnRiZWF0OyAgLyogSXMgdXNlIG9mIHRoZSBIZWFydGJlYXQgZXh0ZW5zaW9uIG5lZ290aWF0ZWQ/CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiBkaXNhYmxlZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogZW5hYmxlZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogZW5hYmxlZCwgYnV0IG5vdCBhbGxvd2VkIHRvIHNlbmQgUmVxdWVzdHMKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVuc2lnbmVkIGludCB0bHNleHRfaGJfcGVuZGluZzsgLyogSW5kaWNhdGVzIGlmIGEgSGVhcnRiZWF0UmVxdWVzdCBpcyBpbiBmbGlnaHQgKi8KKwl1bnNpZ25lZCBpbnQgdGxzZXh0X2hiX3NlcTsgICAgIC8qIEhlYXJ0YmVhdFJlcXVlc3Qgc2VxdWVuY2UgbnVtYmVyICovCiAjZWxzZQogI2RlZmluZSBzZXNzaW9uX2N0eCBjdHgKICNlbmRpZiAvKiBPUEVOU1NMX05PX1RMU0VYVCAqLworCisJaW50IHJlbmVnb3RpYXRlOy8qIDEgaWYgd2UgYXJlIHJlbmVnb3RpYXRpbmcuCisJICAgICAgICAgICAgICAgICAqIDIgaWYgd2UgYXJlIGEgc2VydmVyIGFuZCBhcmUgaW5zaWRlIGEgaGFuZHNoYWtlCisJICAgICAgICAgICAgICAgICAqIChpLmUuIG5vdCBqdXN0IHNlbmRpbmcgYSBIZWxsb1JlcXVlc3QpICovCisKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlTUlBfQ1RYIHNycF9jdHg7IC8qIGN0eCBmb3IgU1JQIGF1dGhlbnRpY2F0aW9uICovCisjZW5kaWYKIAl9OwogCisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKQEAgLTEyNTgsNiArMTM3MCw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC90bHMxLmg+IC8qIFRoaXMgaXMgbW9zdGx5IHNzbHYzIHdpdGggYSBmZXcgdHdlYWtzICovCiAjaW5jbHVkZSA8b3BlbnNzbC9kdGxzMS5oPiAvKiBEYXRhZ3JhbSBUTFMgKi8KICNpbmNsdWRlIDxvcGVuc3NsL3NzbDIzLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zcnRwLmg+ICAvKiBTdXBwb3J0IGZvciB0aGUgdXNlX3NydHAgZXh0ZW5zaW9uICovCiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMTQ3Niw2ICsxNTg5LDIwIEBACiAjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNFWFRfU1RBVFVTX1JFUV9PQ1NQX1JFU1AJNzEKIAogI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTRVhUX1RJQ0tFVF9LRVlfQ0IJNzIKKworI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTX0VYVF9TUlBfVVNFUk5BTUVfQ0IJNzUKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1NSUF9WRVJJRllfUEFSQU1fQ0IJCTc2CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9TUlBfR0lWRV9DTElFTlRfUFdEX0NCCQk3NworCisjZGVmaW5lIFNTTF9DVFJMX1NFVF9TUlBfQVJHCQk3OAorI2RlZmluZSBTU0xfQ1RSTF9TRVRfVExTX0VYVF9TUlBfVVNFUk5BTUUJCTc5CisjZGVmaW5lIFNTTF9DVFJMX1NFVF9UTFNfRVhUX1NSUF9TVFJFTkdUSAkJODAKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1BBU1NXT1JECQk4MQorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKyNkZWZpbmUgU1NMX0NUUkxfVExTX0VYVF9TRU5EX0hFQVJUQkVBVAkJCQk4NQorI2RlZmluZSBTU0xfQ1RSTF9HRVRfVExTX0VYVF9IRUFSVEJFQVRfUEVORElORwkJODYKKyNkZWZpbmUgU1NMX0NUUkxfU0VUX1RMU19FWFRfSEVBUlRCRUFUX05PX1JFUVVFU1RTCTg3CisjZW5kaWYKICNlbmRpZgogCiAjZGVmaW5lIERUTFNfQ1RSTF9HRVRfVElNRU9VVAkJNzMKQEAgLTE0ODYsNiArMTYxMyw5IEBACiAjZGVmaW5lIFNTTF9DVFJMX0NMRUFSX09QVElPTlMJCQk3NwogI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9NT0RFCQkJNzgKIAorI2RlZmluZSBTU0xfQ1RSTF9HRVRfRVhUUkFfQ0hBSU5fQ0VSVFMJCTgyCisjZGVmaW5lIFNTTF9DVFJMX0NMRUFSX0VYVFJBX0NIQUlOX0NFUlRTCTgzCisKICNkZWZpbmUgRFRMU3YxX2dldF90aW1lb3V0KHNzbCwgYXJnKSBcCiAJU1NMX2N0cmwoc3NsLERUTFNfQ1RSTF9HRVRfVElNRU9VVCwwLCAodm9pZCAqKWFyZykKICNkZWZpbmUgRFRMU3YxX2hhbmRsZV90aW1lb3V0KHNzbCkgXApAQCAtMTUyMiw2ICsxNjUyLDEwIEBACiAKICNkZWZpbmUgU1NMX0NUWF9hZGRfZXh0cmFfY2hhaW5fY2VydChjdHgseDUwOSkgXAogCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfRVhUUkFfQ0hBSU5fQ0VSVCwwLChjaGFyICopeDUwOSkKKyNkZWZpbmUgU1NMX0NUWF9nZXRfZXh0cmFfY2hhaW5fY2VydHMoY3R4LHB4NTA5KSBcCisJU1NMX0NUWF9jdHJsKGN0eCxTU0xfQ1RSTF9HRVRfRVhUUkFfQ0hBSU5fQ0VSVFMsMCxweDUwOSkKKyNkZWZpbmUgU1NMX0NUWF9jbGVhcl9leHRyYV9jaGFpbl9jZXJ0cyhjdHgpIFwKKwlTU0xfQ1RYX2N0cmwoY3R4LFNTTF9DVFJMX0NMRUFSX0VYVFJBX0NIQUlOX0NFUlRTLDAsTlVMTCkKIAogI2lmbmRlZiBPUEVOU1NMX05PX0JJTwogQklPX01FVEhPRCAqQklPX2Zfc3NsKHZvaWQpOwpAQCAtMTU0OSw3ICsxNjgzLDcgQEAKIGludAlTU0xfQ0lQSEVSX2dldF9iaXRzKGNvbnN0IFNTTF9DSVBIRVIgKmMsaW50ICphbGdfYml0cyk7CiBjaGFyICoJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbihjb25zdCBTU0xfQ0lQSEVSICpjKTsKIGNvbnN0IGNoYXIgKglTU0xfQ0lQSEVSX2dldF9uYW1lKGNvbnN0IFNTTF9DSVBIRVIgKmMpOwotY29uc3QgY2hhciAqCVNTTF9DSVBIRVJfYXV0aGVudGljYXRpb25fbWV0aG9kKGNvbnN0IFNTTF9DSVBIRVIgKmMpOwordW5zaWduZWQgbG9uZyAJU1NMX0NJUEhFUl9nZXRfaWQoY29uc3QgU1NMX0NJUEhFUiAqYyk7CiAKIGludAlTU0xfZ2V0X2ZkKGNvbnN0IFNTTCAqcyk7CiBpbnQJU1NMX2dldF9yZmQoY29uc3QgU1NMICpzKTsKQEAgLTE2MTksMTEgKzE3NTMsMTUgQEAKIGxvbmcJU1NMX1NFU1NJT05fZ2V0X3RpbWVvdXQoY29uc3QgU1NMX1NFU1NJT04gKnMpOwogbG9uZwlTU0xfU0VTU0lPTl9zZXRfdGltZW91dChTU0xfU0VTU0lPTiAqcywgbG9uZyB0KTsKIHZvaWQJU1NMX2NvcHlfc2Vzc2lvbl9pZChTU0wgKnRvLGNvbnN0IFNTTCAqZnJvbSk7CitYNTA5ICpTU0xfU0VTU0lPTl9nZXQwX3BlZXIoU1NMX1NFU1NJT04gKnMpOworaW50IFNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dChTU0xfU0VTU0lPTiAqcyxjb25zdCB1bnNpZ25lZCBjaGFyICpzaWRfY3R4LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzaWRfY3R4X2xlbik7CiAKIFNTTF9TRVNTSU9OICpTU0xfU0VTU0lPTl9uZXcodm9pZCk7CiBjb25zdCB1bnNpZ25lZCBjaGFyICpTU0xfU0VTU0lPTl9nZXRfaWQoY29uc3QgU1NMX1NFU1NJT04gKnMsCiAJCQkJCXVuc2lnbmVkIGludCAqbGVuKTsKIGNvbnN0IGNoYXIgKglTU0xfU0VTU0lPTl9nZXRfdmVyc2lvbihjb25zdCBTU0xfU0VTU0lPTiAqcyk7Cit1bnNpZ25lZCBpbnQgU1NMX1NFU1NJT05fZ2V0X2NvbXByZXNzX2lkKGNvbnN0IFNTTF9TRVNTSU9OICpzKTsKICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKIGludAlTU0xfU0VTU0lPTl9wcmludF9mcChGSUxFICpmcCxjb25zdCBTU0xfU0VTU0lPTiAqc2VzKTsKICNlbmRpZgpAQCAtMTY4Nyw2ICsxODI1LDMwIEBACiBpbnQgU1NMX0NUWF9zZXQxX3BhcmFtKFNTTF9DVFggKmN0eCwgWDUwOV9WRVJJRllfUEFSQU0gKnZwbSk7CiBpbnQgU1NMX3NldDFfcGFyYW0oU1NMICpzc2wsIFg1MDlfVkVSSUZZX1BBUkFNICp2cG0pOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCitpbnQgU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lKFNTTF9DVFggKmN0eCxjaGFyICpuYW1lKTsKK2ludCBTU0xfQ1RYX3NldF9zcnBfcGFzc3dvcmQoU1NMX0NUWCAqY3R4LGNoYXIgKnBhc3N3b3JkKTsKK2ludCBTU0xfQ1RYX3NldF9zcnBfc3RyZW5ndGgoU1NMX0NUWCAqY3R4LCBpbnQgc3RyZW5ndGgpOworaW50IFNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NhbGxiYWNrKFNTTF9DVFggKmN0eCwKKwkJCQkJY2hhciAqKCpjYikoU1NMICosdm9pZCAqKSk7CitpbnQgU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCisJCQkJCSAgaW50ICgqY2IpKFNTTCAqLHZvaWQgKikpOworaW50IFNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCisJCQkJICAgICAgaW50ICgqY2IpKFNTTCAqLGludCAqLHZvaWQgKikpOworaW50IFNTTF9DVFhfc2V0X3NycF9jYl9hcmcoU1NMX0NUWCAqY3R4LCB2b2lkICphcmcpOworCitpbnQgU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtKFNTTCAqcywgY29uc3QgQklHTlVNICpOLCBjb25zdCBCSUdOVU0gKmcsCisJCQkgICAgIEJJR05VTSAqc2EsIEJJR05VTSAqdiwgY2hhciAqaW5mbyk7CitpbnQgU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3KFNTTCAqcywgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcywKKwkJCQljb25zdCBjaGFyICpncnApOworCitCSUdOVU0gKlNTTF9nZXRfc3JwX2coU1NMICpzKTsKK0JJR05VTSAqU1NMX2dldF9zcnBfTihTU0wgKnMpOworCitjaGFyICpTU0xfZ2V0X3NycF91c2VybmFtZShTU0wgKnMpOworY2hhciAqU1NMX2dldF9zcnBfdXNlcmluZm8oU1NMICpzKTsKKyNlbmRpZgorCiB2b2lkCVNTTF9mcmVlKFNTTCAqc3NsKTsKIGludCAJU1NMX2FjY2VwdChTU0wgKnNzbCk7CiBpbnQgCVNTTF9jb25uZWN0KFNTTCAqc3NsKTsKQEAgLTE3MjIsNiArMTg4NCwxNSBAQAogY29uc3QgU1NMX01FVEhPRCAqVExTdjFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLwogY29uc3QgU1NMX01FVEhPRCAqVExTdjFfY2xpZW50X21ldGhvZCh2b2lkKTsJLyogVExTdjEuMCAqLwogCitjb25zdCBTU0xfTUVUSE9EICpUTFN2MV8xX21ldGhvZCh2b2lkKTsJCS8qIFRMU3YxLjEgKi8KK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxXzFfc2VydmVyX21ldGhvZCh2b2lkKTsJLyogVExTdjEuMSAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfMV9jbGllbnRfbWV0aG9kKHZvaWQpOwkvKiBUTFN2MS4xICovCisKK2NvbnN0IFNTTF9NRVRIT0QgKlRMU3YxXzJfbWV0aG9kKHZvaWQpOwkJLyogVExTdjEuMiAqLworY29uc3QgU1NMX01FVEhPRCAqVExTdjFfMl9zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBUTFN2MS4yICovCitjb25zdCBTU0xfTUVUSE9EICpUTFN2MV8yX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIFRMU3YxLjIgKi8KKworCiBjb25zdCBTU0xfTUVUSE9EICpEVExTdjFfbWV0aG9kKHZvaWQpOwkJLyogRFRMU3YxLjAgKi8KIGNvbnN0IFNTTF9NRVRIT0QgKkRUTFN2MV9zZXJ2ZXJfbWV0aG9kKHZvaWQpOwkvKiBEVExTdjEuMCAqLwogY29uc3QgU1NMX01FVEhPRCAqRFRMU3YxX2NsaWVudF9tZXRob2Qodm9pZCk7CS8qIERUTFN2MS4wICovCkBAIC0xNzMwLDYgKzE5MDEsNyBAQAogCiBpbnQgU1NMX2RvX2hhbmRzaGFrZShTU0wgKnMpOwogaW50IFNTTF9yZW5lZ290aWF0ZShTU0wgKnMpOworaW50IFNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZChTU0wgKnMpOwogaW50IFNTTF9yZW5lZ290aWF0ZV9wZW5kaW5nKFNTTCAqcyk7CiBpbnQgU1NMX3NodXRkb3duKFNTTCAqcyk7CiAKQEAgLTE3ODEsNiArMTk1Myw3IEBACiAJCQkgICB2b2lkICgqY2IpKGNvbnN0IFNTTCAqc3NsLGludCB0eXBlLGludCB2YWwpKTsKIHZvaWQgKCpTU0xfZ2V0X2luZm9fY2FsbGJhY2soY29uc3QgU1NMICpzc2wpKShjb25zdCBTU0wgKnNzbCxpbnQgdHlwZSxpbnQgdmFsKTsKIGludCBTU0xfc3RhdGUoY29uc3QgU1NMICpzc2wpOwordm9pZCBTU0xfc2V0X3N0YXRlKFNTTCAqc3NsLCBpbnQgc3RhdGUpOwogCiB2b2lkIFNTTF9zZXRfdmVyaWZ5X3Jlc3VsdChTU0wgKnNzbCxsb25nIHYpOwogbG9uZyBTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQoY29uc3QgU1NMICpzc2wpOwpAQCAtMTg4MSw2ICsyMDU0LDkgQEAKIC8qIFByZS1zaGFyZWQgc2VjcmV0IHNlc3Npb24gcmVzdW1wdGlvbiBmdW5jdGlvbnMgKi8KIGludCBTU0xfc2V0X3Nlc3Npb25fc2VjcmV0X2NiKFNTTCAqcywgdGxzX3Nlc3Npb25fc2VjcmV0X2NiX2ZuIHRsc19zZXNzaW9uX3NlY3JldF9jYiwgdm9pZCAqYXJnKTsKIAordm9pZCBTU0xfc2V0X2RlYnVnKFNTTCAqcywgaW50IGRlYnVnKTsKK2ludCBTU0xfY2FjaGVfaGl0KFNTTCAqcyk7CisKIC8qIEJFR0lOIEVSUk9SIENPREVTICovCiAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwogICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCkBAIC0xOTAwLDcgKzIwNzYsNiBAQAogI2RlZmluZSBTU0xfRl9EVExTMV9BQ0NFUFQJCQkJIDI0NgogI2RlZmluZSBTU0xfRl9EVExTMV9BRERfQ0VSVF9UT19CVUYJCQkgMjk1CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0JVRkZFUl9SRUNPUkQJCQkgMjQ3Ci0jZGVmaW5lIFNTTF9GX0RUTFMxX0NIRUNLX1RJTUVPVVRfTlVNCQkJIDMwNQogI2RlZmluZSBTU0xfRl9EVExTMV9DTElFTlRfSEVMTE8JCQkgMjQ4CiAjZGVmaW5lIFNTTF9GX0RUTFMxX0NPTk5FQ1QJCQkJIDI0OQogI2RlZmluZSBTU0xfRl9EVExTMV9FTkMJCQkJCSAyNTAKQEAgLTE5MDksNiArMjA4NCw3IEBACiAjZGVmaW5lIFNTTF9GX0RUTFMxX0dFVF9NRVNTQUdFX0ZSQUdNRU5UCQkgMjUzCiAjZGVmaW5lIFNTTF9GX0RUTFMxX0dFVF9SRUNPUkQJCQkJIDI1NAogI2RlZmluZSBTU0xfRl9EVExTMV9IQU5ETEVfVElNRU9VVAkJCSAyOTcKKyNkZWZpbmUgU1NMX0ZfRFRMUzFfSEVBUlRCRUFUCQkJCSAzMDUKICNkZWZpbmUgU1NMX0ZfRFRMUzFfT1VUUFVUX0NFUlRfQ0hBSU4JCQkgMjU1CiAjZGVmaW5lIFNTTF9GX0RUTFMxX1BSRVBST0NFU1NfRlJBR01FTlQJCQkgMjg4CiAjZGVmaW5lIFNTTF9GX0RUTFMxX1BST0NFU1NfT1VUX09GX1NFUV9NRVNTQUdFCQkgMjU2CkBAIC0xOTc3LDcgKzIxNTMsNyBAQAogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9LRVlfRVhDSEFOR0UJCQkgMTQxCiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX01FU1NBR0UJCQkJIDE0MgogI2RlZmluZSBTU0xfRl9TU0wzX0dFVF9ORVdfU0VTU0lPTl9USUNLRVQJCSAyODMKLSNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfTkVYVF9QUk9UTwkJCSAzMDQKKyNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfTkVYVF9QUk9UTwkJCSAzMDYKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfUkVDT1JECQkJCSAxNDMKICNkZWZpbmUgU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0NFUlRJRklDQVRFCQkgMTQ0CiAjZGVmaW5lIFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9ET05FCQkJIDE0NQpAQCAtMjAwMiwxMCArMjE3OCwxMiBAQAogI2RlZmluZSBTU0xfRl9TU0wzX1dSSVRFX1BFTkRJTkcJCQkgMTU5CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fUkVORUdPVElBVEVfRVhUCSAyOTgKICNkZWZpbmUgU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQJCSAyNzcKKyNkZWZpbmUgU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19VU0VfU1JUUF9FWFQJCSAzMDcKICNkZWZpbmUgU1NMX0ZfU1NMX0FERF9ESVJfQ0VSVF9TVUJKRUNUU19UT19TVEFDSwkgMjE1CiAjZGVmaW5lIFNTTF9GX1NTTF9BRERfRklMRV9DRVJUX1NVQkpFQ1RTX1RPX1NUQUNLCSAyMTYKICNkZWZpbmUgU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQJIDI5OQogI2RlZmluZSBTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3OAorI2RlZmluZSBTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1VTRV9TUlRQX0VYVAkJIDMwOAogI2RlZmluZSBTU0xfRl9TU0xfQkFEX01FVEhPRAkJCQkgMTYwCiAjZGVmaW5lIFNTTF9GX1NTTF9CWVRFU19UT19DSVBIRVJfTElTVAkJCSAxNjEKICNkZWZpbmUgU1NMX0ZfU1NMX0NFUlRfRFVQCQkJCSAyMjEKQEAgLTIwMjIsNiArMjIwMCw3IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9DUkVBVEVfQ0lQSEVSX0xJU1QJCQkgMTY2CiAjZGVmaW5lIFNTTF9GX1NTTF9DVFJMCQkJCQkgMjMyCiAjZGVmaW5lIFNTTF9GX1NTTF9DVFhfQ0hFQ0tfUFJJVkFURV9LRVkJCQkgMTY4CisjZGVmaW5lIFNTTF9GX1NTTF9DVFhfTUFLRV9QUk9GSUxFUwkJCSAzMDkKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9ORVcJCQkJIDE2OQogI2RlZmluZSBTU0xfRl9TU0xfQ1RYX1NFVF9DSVBIRVJfTElTVAkJCSAyNjkKICNkZWZpbmUgU1NMX0ZfU1NMX0NUWF9TRVRfQ0xJRU5UX0NFUlRfRU5HSU5FCQkgMjkwCkBAIC0yMDUwLDggKzIyMjksMTAgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX05FVwkJCQkJIDE4NgogI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fUkVORUdPVElBVEVfRVhUCSAzMDAKICNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVAkJIDMwMgorI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhUCSAzMTAKICNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVAkgMzAxCiAjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAzMDMKKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1VTRV9TUlRQX0VYVAkgMzExCiAjZGVmaW5lIFNTTF9GX1NTTF9QRUVLCQkJCQkgMjcwCiAjZGVmaW5lIFNTTF9GX1NTTF9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI4MQogI2RlZmluZSBTU0xfRl9TU0xfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyODIKQEAgLTIwNjAsNiArMjI0MSw3IEBACiAjZGVmaW5lIFNTTF9GX1NTTF9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTg4CiAjZGVmaW5lIFNTTF9GX1NTTF9TRVNTSU9OX05FVwkJCQkgMTg5CiAjZGVmaW5lIFNTTF9GX1NTTF9TRVNTSU9OX1BSSU5UX0ZQCQkJIDE5MAorI2RlZmluZSBTU0xfRl9TU0xfU0VTU0lPTl9TRVQxX0lEX0NPTlRFWFQJCSAzMTIKICNkZWZpbmUgU1NMX0ZfU1NMX1NFU1NfQ0VSVF9ORVcJCQkJIDIyNQogI2RlZmluZSBTU0xfRl9TU0xfU0VUX0NFUlQJCQkJIDE5MQogI2RlZmluZSBTU0xfRl9TU0xfU0VUX0NJUEhFUl9MSVNUCQkJIDI3MQpAQCAtMjA3Myw2ICsyMjU1LDcgQEAKICNkZWZpbmUgU1NMX0ZfU1NMX1NFVF9UUlVTVAkJCQkgMjI4CiAjZGVmaW5lIFNTTF9GX1NTTF9TRVRfV0ZECQkJCSAxOTYKICNkZWZpbmUgU1NMX0ZfU1NMX1NIVVRET1dOCQkJCSAyMjQKKyNkZWZpbmUgU1NMX0ZfU1NMX1NSUF9DVFhfSU5JVAkJCQkgMzEzCiAjZGVmaW5lIFNTTF9GX1NTTF9VTkRFRklORURfQ09OU1RfRlVOQ1RJT04JCSAyNDMKICNkZWZpbmUgU1NMX0ZfU1NMX1VOREVGSU5FRF9GVU5DVElPTgkJCSAxOTcKICNkZWZpbmUgU1NMX0ZfU1NMX1VOREVGSU5FRF9WT0lEX0ZVTkNUSU9OCQkgMjQ0CkBAIC0yMDkzLDYgKzIyNzYsOCBAQAogI2RlZmluZSBTU0xfRl9UTFMxX0NIQU5HRV9DSVBIRVJfU1RBVEUJCQkgMjA5CiAjZGVmaW5lIFNTTF9GX1RMUzFfQ0hFQ0tfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjc0CiAjZGVmaW5lIFNTTF9GX1RMUzFfRU5DCQkJCQkgMjEwCisjZGVmaW5lIFNTTF9GX1RMUzFfRVhQT1JUX0tFWUlOR19NQVRFUklBTAkJIDMxNAorI2RlZmluZSBTU0xfRl9UTFMxX0hFQVJUQkVBVAkJCQkgMzE1CiAjZGVmaW5lIFNTTF9GX1RMUzFfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQJCSAyNzUKICNkZWZpbmUgU1NMX0ZfVExTMV9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVAkJIDI3NgogI2RlZmluZSBTU0xfRl9UTFMxX1BSRgkJCQkJIDI4NApAQCAtMjEzMiw2ICsyMzE3LDEzIEBACiAjZGVmaW5lIFNTTF9SX0JBRF9SU0FfTU9EVUxVU19MRU5HVEgJCQkgMTIxCiAjZGVmaW5lIFNTTF9SX0JBRF9SU0FfU0lHTkFUVVJFCQkJCSAxMjIKICNkZWZpbmUgU1NMX1JfQkFEX1NJR05BVFVSRQkJCQkgMTIzCisjZGVmaW5lIFNTTF9SX0JBRF9TUlBfQV9MRU5HVEgJCQkJIDM0NworI2RlZmluZSBTU0xfUl9CQURfU1JQX0JfTEVOR1RICQkJCSAzNDgKKyNkZWZpbmUgU1NMX1JfQkFEX1NSUF9HX0xFTkdUSAkJCQkgMzQ5CisjZGVmaW5lIFNTTF9SX0JBRF9TUlBfTl9MRU5HVEgJCQkJIDM1MAorI2RlZmluZSBTU0xfUl9CQURfU1JQX1NfTEVOR1RICQkJCSAzNTEKKyNkZWZpbmUgU1NMX1JfQkFEX1NSVFBfTUtJX1ZBTFVFCQkJIDM1MgorI2RlZmluZSBTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVAkJIDM1MwogI2RlZmluZSBTU0xfUl9CQURfU1NMX0ZJTEVUWVBFCQkJCSAxMjQKICNkZWZpbmUgU1NMX1JfQkFEX1NTTF9TRVNTSU9OX0lEX0xFTkdUSAkJCSAxMjUKICNkZWZpbmUgU1NMX1JfQkFEX1NUQVRFCQkJCQkgMTI2CkBAIC0yMTcwLDE0ICsyMzYyLDE1IEBACiAjZGVmaW5lIFNTTF9SX0VDQ19DRVJUX1NIT1VMRF9IQVZFX1JTQV9TSUdOQVRVUkUJIDMyMgogI2RlZmluZSBTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9TSEExX1NJR05BVFVSRQkgMzIzCiAjZGVmaW5lIFNTTF9SX0VDR1JPVVBfVE9PX0xBUkdFX0ZPUl9DSVBIRVIJCSAzMTAKKyNkZWZpbmUgU1NMX1JfRU1QVFlfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVAkgMzU0CiAjZGVmaW5lIFNTTF9SX0VOQ1JZUFRFRF9MRU5HVEhfVE9PX0xPTkcJCQkgMTUwCiAjZGVmaW5lIFNTTF9SX0VSUk9SX0dFTkVSQVRJTkdfVE1QX1JTQV9LRVkJCSAyODIKICNkZWZpbmUgU1NMX1JfRVJST1JfSU5fUkVDRUlWRURfQ0lQSEVSX0xJU1QJCSAxNTEKICNkZWZpbmUgU1NMX1JfRVhDRVNTSVZFX01FU1NBR0VfU0laRQkJCSAxNTIKICNkZWZpbmUgU1NMX1JfRVhUUkFfREFUQV9JTl9NRVNTQUdFCQkJIDE1MwogI2RlZmluZSBTU0xfUl9HT1RfQV9GSU5fQkVGT1JFX0FfQ0NTCQkJIDE1NAotI2RlZmluZSBTU0xfUl9HT1RfTkVYVF9QUk9UT19CRUZPUkVfQV9DQ1MJCSAzNDYKLSNkZWZpbmUgU1NMX1JfR09UX05FWFRfUFJPVE9fV0lUSE9VVF9FWFRFTlNJT04JCSAzNDcKKyNkZWZpbmUgU1NMX1JfR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTCQkgMzU1CisjZGVmaW5lIFNTTF9SX0dPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OCQkgMzU2CiAjZGVmaW5lIFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QJCQkgMTU1CiAjZGVmaW5lIFNTTF9SX0hUVFBfUkVRVUVTVAkJCQkgMTU2CiAjZGVmaW5lIFNTTF9SX0lMTEVHQUxfUEFERElORwkJCQkgMjgzCkBAIC0yMTg2LDYgKzIzNzksNyBAQAogI2RlZmluZSBTU0xfUl9JTlZBTElEX0NPTU1BTkQJCQkJIDI4MAogI2RlZmluZSBTU0xfUl9JTlZBTElEX0NPTVBSRVNTSU9OX0FMR09SSVRITQkJIDM0MQogI2RlZmluZSBTU0xfUl9JTlZBTElEX1BVUlBPU0UJCQkJIDI3OAorI2RlZmluZSBTU0xfUl9JTlZBTElEX1NSUF9VU0VSTkFNRQkJCSAzNTcKICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9TVEFUVVNfUkVTUE9OU0UJCQkgMzI4CiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfVElDS0VUX0tFWVNfTEVOR1RICQkgMzI1CiAjZGVmaW5lIFNTTF9SX0lOVkFMSURfVFJVU1QJCQkJIDI3OQpAQCAtMjIxNSw2ICsyNDA5LDcgQEAKICNkZWZpbmUgU1NMX1JfTUlTU0lOR19SU0FfQ0VSVElGSUNBVEUJCQkgMTY4CiAjZGVmaW5lIFNTTF9SX01JU1NJTkdfUlNBX0VOQ1JZUFRJTkdfQ0VSVAkJIDE2OQogI2RlZmluZSBTU0xfUl9NSVNTSU5HX1JTQV9TSUdOSU5HX0NFUlQJCQkgMTcwCisjZGVmaW5lIFNTTF9SX01JU1NJTkdfU1JQX1BBUkFNCQkJCSAzNTgKICNkZWZpbmUgU1NMX1JfTUlTU0lOR19UTVBfREhfS0VZCQkJIDE3MQogI2RlZmluZSBTU0xfUl9NSVNTSU5HX1RNUF9FQ0RIX0tFWQkJCSAzMTEKICNkZWZpbmUgU1NMX1JfTUlTU0lOR19UTVBfUlNBX0tFWQkJCSAxNzIKQEAgLTIyNDQsNiArMjQzOSw3IEBACiAjZGVmaW5lIFNTTF9SX05PX1JFTkVHT1RJQVRJT04JCQkJIDMzOQogI2RlZmluZSBTU0xfUl9OT19SRVFVSVJFRF9ESUdFU1QJCQkgMzI0CiAjZGVmaW5lIFNTTF9SX05PX1NIQVJFRF9DSVBIRVIJCQkJIDE5MworI2RlZmluZSBTU0xfUl9OT19TUlRQX1BST0ZJTEVTCQkJCSAzNTkKICNkZWZpbmUgU1NMX1JfTk9fVkVSSUZZX0NBTExCQUNLCQkJIDE5NAogI2RlZmluZSBTU0xfUl9OVUxMX1NTTF9DVFgJCQkJIDE5NQogI2RlZmluZSBTU0xfUl9OVUxMX1NTTF9NRVRIT0RfUEFTU0VECQkJIDE5NgpAQCAtMjI4OCw3ICsyNDg0LDEyIEBACiAjZGVmaW5lIFNTTF9SX1NFU1NJT05fSURfQ09OVEVYVF9VTklOSVRJQUxJWkVECQkgMjc3CiAjZGVmaW5lIFNTTF9SX1NFU1NJT05fTUFZX05PVF9CRV9DUkVBVEVECQkgMjAwMAogI2RlZmluZSBTU0xfUl9TSE9SVF9SRUFECQkJCSAyMTkKKyNkZWZpbmUgU1NMX1JfU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1IJCSAzNjAKICNkZWZpbmUgU1NMX1JfU0lHTkFUVVJFX0ZPUl9OT05fU0lHTklOR19DRVJUSUZJQ0FURQkgMjIwCisjZGVmaW5lIFNTTF9SX1NSUF9BX0NBTEMJCQkJIDM2MQorI2RlZmluZSBTU0xfUl9TUlRQX0NPVUxEX05PVF9BTExPQ0FURV9QUk9GSUxFUwkJIDM2MgorI2RlZmluZSBTU0xfUl9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUX1RPT19MT05HCSAzNjMKKyNkZWZpbmUgU1NMX1JfU1JUUF9VTktOT1dOX1BST1RFQ1RJT05fUFJPRklMRQkJIDM2NAogI2RlZmluZSBTU0xfUl9TU0wyM19ET0lOR19TRVNTSU9OX0lEX1JFVVNFCQkgMjIxCiAjZGVmaW5lIFNTTF9SX1NTTDJfQ09OTkVDVElPTl9JRF9UT09fTE9ORwkJIDI5OQogI2RlZmluZSBTU0xfUl9TU0wzX0VYVF9JTlZBTElEX0VDUE9JTlRGT1JNQVQJCSAzMjEKQEAgLTIzMzMsNiArMjUzNCw5IEBACiAjZGVmaW5lIFNTTF9SX1RMU1YxX1VOUkVDT0dOSVpFRF9OQU1FCQkJIDExMTIKICNkZWZpbmUgU1NMX1JfVExTVjFfVU5TVVBQT1JURURfRVhURU5TSU9OCQkgMTExMAogI2RlZmluZSBTU0xfUl9UTFNfQ0xJRU5UX0NFUlRfUkVRX1dJVEhfQU5PTl9DSVBIRVIJIDIzMgorI2RlZmluZSBTU0xfUl9UTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVAkJIDM2NQorI2RlZmluZSBTU0xfUl9UTFNfSEVBUlRCRUFUX1BFTkRJTkcJCQkgMzY2CisjZGVmaW5lIFNTTF9SX1RMU19JTExFR0FMX0VYUE9SVEVSX0xBQkVMCQkgMzY3CiAjZGVmaW5lIFNTTF9SX1RMU19JTlZBTElEX0VDUE9JTlRGT1JNQVRfTElTVAkJIDE1NwogI2RlZmluZSBTU0xfUl9UTFNfUEVFUl9ESURfTk9UX1JFU1BPTkRfV0lUSF9DRVJUSUZJQ0FURV9MSVNUIDIzMwogI2RlZmluZSBTU0xfUl9UTFNfUlNBX0VOQ1JZUFRFRF9WQUxVRV9MRU5HVEhfSVNfV1JPTkcJIDIzNApAQCAtMjM1NCw2ICsyNTU4LDcgQEAKICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9DRVJUSUZJQ0FURV9UWVBFCQkJIDI0NwogI2RlZmluZSBTU0xfUl9VTktOT1dOX0NJUEhFUl9SRVRVUk5FRAkJCSAyNDgKICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9DSVBIRVJfVFlQRQkJCSAyNDkKKyNkZWZpbmUgU1NMX1JfVU5LTk9XTl9ESUdFU1QJCQkJIDM2OAogI2RlZmluZSBTU0xfUl9VTktOT1dOX0tFWV9FWENIQU5HRV9UWVBFCQkJIDI1MAogI2RlZmluZSBTU0xfUl9VTktOT1dOX1BLRVlfVFlQRQkJCQkgMjUxCiAjZGVmaW5lIFNTTF9SX1VOS05PV05fUFJPVE9DT0wJCQkJIDI1MgpAQCAtMjM2OCwxMiArMjU3MywxNCBAQAogI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9QUk9UT0NPTAkJCSAyNTgKICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURfU1NMX1ZFUlNJT04JCQkgMjU5CiAjZGVmaW5lIFNTTF9SX1VOU1VQUE9SVEVEX1NUQVRVU19UWVBFCQkJIDMyOQorI2RlZmluZSBTU0xfUl9VU0VfU1JUUF9OT1RfTkVHT1RJQVRFRAkJCSAzNjkKICNkZWZpbmUgU1NMX1JfV1JJVEVfQklPX05PVF9TRVQJCQkJIDI2MAogI2RlZmluZSBTU0xfUl9XUk9OR19DSVBIRVJfUkVUVVJORUQJCQkgMjYxCiAjZGVmaW5lIFNTTF9SX1dST05HX01FU1NBR0VfVFlQRQkJCSAyNjIKICNkZWZpbmUgU1NMX1JfV1JPTkdfTlVNQkVSX09GX0tFWV9CSVRTCQkJIDI2MwogI2RlZmluZSBTU0xfUl9XUk9OR19TSUdOQVRVUkVfTEVOR1RICQkJIDI2NAogI2RlZmluZSBTU0xfUl9XUk9OR19TSUdOQVRVUkVfU0laRQkJCSAyNjUKKyNkZWZpbmUgU1NMX1JfV1JPTkdfU0lHTkFUVVJFX1RZUEUJCQkgMzcwCiAjZGVmaW5lIFNTTF9SX1dST05HX1NTTF9WRVJTSU9OCQkJCSAyNjYKICNkZWZpbmUgU1NMX1JfV1JPTkdfVkVSU0lPTl9OVU1CRVIJCQkgMjY3CiAjZGVmaW5lIFNTTF9SX1g1MDlfTElCCQkJCQkgMjY4CmRpZmYgLS1naXQgYS9zc2wvc3NsMi5oIGIvc3NsL3NzbDIuaAppbmRleCA5OWE1MmVhLi5lYjI1ZGNiIDEwMDY0NAotLS0gYS9zc2wvc3NsMi5oCisrKyBiL3NzbC9zc2wyLmgKQEAgLTE1NSw2ICsxNTUsOCBAQAogI2RlZmluZSAgQ0VSVAkJY2hhcgogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0xfSU5URVJOCisKIHR5cGVkZWYgc3RydWN0IHNzbDJfc3RhdGVfc3QKIAl7CiAJaW50IHRocmVlX2J5dGVfaGVhZGVyOwpAQCAtMjE5LDYgKzIyMSw4IEBACiAJCX0gdG1wOwogCX0gU1NMMl9TVEFURTsKIAorI2VuZGlmCisKIC8qIFNTTHYyICovCiAvKiBjbGllbnQgKi8KICNkZWZpbmUgU1NMMl9TVF9TRU5EX0NMSUVOVF9IRUxMT19BCQkoMHgxMHxTU0xfU1RfQ09OTkVDVCkKZGlmZiAtLWdpdCBhL3NzbC9zc2wzLmggYi9zc2wvc3NsMy5oCmluZGV4IGQ2NDI1ZTUuLmZiMDhlNzIgMTAwNjQ0Ci0tLSBhL3NzbC9zc2wzLmgKKysrIGIvc3NsL3NzbDMuaApAQCAtMzMyLDYgKzMzMiw3IEBACiAjZGVmaW5lIFNTTDNfUlRfQUxFUlQJCQkyMQogI2RlZmluZSBTU0wzX1JUX0hBTkRTSEFLRQkJMjIKICNkZWZpbmUgU1NMM19SVF9BUFBMSUNBVElPTl9EQVRBCTIzCisjZGVmaW5lIFRMUzFfUlRfSEVBUlRCRUFUCQkyNAogCiAjZGVmaW5lIFNTTDNfQUxfV0FSTklORwkJCTEKICNkZWZpbmUgU1NMM19BTF9GQVRBTAkJCTIKQEAgLTM0OSw2ICszNTAsMTEgQEAKICNkZWZpbmUgU1NMM19BRF9DRVJUSUZJQ0FURV9VTktOT1dOCTQ2CiAjZGVmaW5lIFNTTDNfQURfSUxMRUdBTF9QQVJBTUVURVIJNDcJLyogZmF0YWwgKi8KIAorI2RlZmluZSBUTFMxX0hCX1JFUVVFU1QJCTEKKyNkZWZpbmUgVExTMV9IQl9SRVNQT05TRQkyCisJCisjaWZuZGVmIE9QRU5TU0xfTk9fU1NMX0lOVEVSTgorCiB0eXBlZGVmIHN0cnVjdCBzc2wzX3JlY29yZF9zdAogCXsKIC8qciAqLwlpbnQgdHlwZTsgICAgICAgICAgICAgICAvKiB0eXBlIG9mIHJlY29yZCAqLwpAQCAtMzcwLDYgKzM3Niw4IEBACiAJaW50IGxlZnQ7ICAgICAgICAgICAgICAgLyogaG93IG1hbnkgYnl0ZXMgbGVmdCAqLwogCX0gU1NMM19CVUZGRVI7CiAKKyNlbmRpZgorCiAjZGVmaW5lIFNTTDNfQ1RfUlNBX1NJR04JCQkxCiAjZGVmaW5lIFNTTDNfQ1RfRFNTX1NJR04JCQkyCiAjZGVmaW5lIFNTTDNfQ1RfUlNBX0ZJWEVEX0RICQkJMwpAQCAtMzg5LDYgKzM5Nyw3IEBACiAjZGVmaW5lIFNTTDNfRkxBR1NfUE9QX0JVRkZFUgkJCTB4MDAwNAogI2RlZmluZSBUTFMxX0ZMQUdTX1RMU19QQURESU5HX0JVRwkJMHgwMDA4CiAjZGVmaW5lIFRMUzFfRkxBR1NfU0tJUF9DRVJUX1ZFUklGWQkJMHgwMDEwCisjZGVmaW5lIFRMUzFfRkxBR1NfS0VFUF9IQU5EU0hBS0UJCTB4MDAyMAogIAogLyogU1NMM19GTEFHU19TR0NfUkVTVEFSVF9ET05FIGlzIHNldCB3aGVuIHdlCiAgKiByZXN0YXJ0IGEgaGFuZHNoYWtlIGJlY2F1c2Ugb2YgTVMgU0dDIGFuZCBzbyBwcmV2ZW50cyB1cwpAQCAtNDAxLDYgKzQxMCw4IEBACiAgKi8KICNkZWZpbmUgU1NMM19GTEFHU19TR0NfUkVTVEFSVF9ET05FCQkweDAwNDAKIAorI2lmbmRlZiBPUEVOU1NMX05PX1NTTF9JTlRFUk4KKwogdHlwZWRlZiBzdHJ1Y3Qgc3NsM19zdGF0ZV9zdAogCXsKIAlsb25nIGZsYWdzOwpAQCAtNDc2LDEyICs0ODcsNiBAQAogCXZvaWQgKnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0OwogCXNpemVfdCBzZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dF9sZW47CiAKLSNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKLQkvKiBTZXQgaWYgd2Ugc2F3IHRoZSBOZXh0IFByb3RvY29sIE5lZ290aWF0aW9uIGV4dGVuc2lvbiBmcm9tCi0JICAgb3VyIHBlZXIuICovCi0JaW50IG5leHRfcHJvdG9fbmVnX3NlZW47Ci0jZW5kaWYKLQogCXN0cnVjdAl7CiAJCS8qIGFjdHVhbGx5IG9ubHkgbmVlZHMgdG8gYmUgMTYrMjAgKi8KIAkJdW5zaWduZWQgY2hhciBjZXJ0X3ZlcmlmeV9tZFtFVlBfTUFYX01EX1NJWkUqMl07CkBAIC00OTEsNyArNDk2LDcgQEAKIAkJaW50IGZpbmlzaF9tZF9sZW47CiAJCXVuc2lnbmVkIGNoYXIgcGVlcl9maW5pc2hfbWRbRVZQX01BWF9NRF9TSVpFKjJdOwogCQlpbnQgcGVlcl9maW5pc2hfbWRfbGVuOwotCQkKKwogCQl1bnNpZ25lZCBsb25nIG1lc3NhZ2Vfc2l6ZTsKIAkJaW50IG1lc3NhZ2VfdHlwZTsKIApAQCAtNTM5LDE0ICs1NDQsMjQgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciBwcmV2aW91c19zZXJ2ZXJfZmluaXNoZWRbRVZQX01BWF9NRF9TSVpFXTsKICAgICAgICAgdW5zaWduZWQgY2hhciBwcmV2aW91c19zZXJ2ZXJfZmluaXNoZWRfbGVuOwogICAgICAgICBpbnQgc2VuZF9jb25uZWN0aW9uX2JpbmRpbmc7IC8qIFRPRE9FS1IgKi8KKworI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRworCS8qIFNldCBpZiB3ZSBzYXcgdGhlIE5leHQgUHJvdG9jb2wgTmVnb3RpYXRpb24gZXh0ZW5zaW9uIGZyb20gb3VyIHBlZXIuICovCisJaW50IG5leHRfcHJvdG9fbmVnX3NlZW47CisjZW5kaWYKIAl9IFNTTDNfU1RBVEU7CiAKKyNlbmRpZgogCiAvKiBTU0x2MyAqLwogLypjbGllbnQgKi8KIC8qIGV4dHJhIHN0YXRlICovCiAjZGVmaW5lIFNTTDNfU1RfQ1dfRkxVU0gJCSgweDEwMHxTU0xfU1RfQ09OTkVDVCkKICNkZWZpbmUgU1NMM19TVF9DVVRUSFJPVUdIX0NPTVBMRVRFCSgweDEwMXxTU0xfU1RfQ09OTkVDVCkKKyNpZm5kZWYgT1BFTlNTTF9OT19TQ1RQCisjZGVmaW5lIERUTFMxX1NDVFBfU1RfQ1dfV1JJVEVfU09DSwkJCSgweDMxMHxTU0xfU1RfQ09OTkVDVCkKKyNkZWZpbmUgRFRMUzFfU0NUUF9TVF9DUl9SRUFEX1NPQ0sJCQkoMHgzMjB8U1NMX1NUX0NPTk5FQ1QpCisjZW5kaWYJCiAvKiB3cml0ZSB0byBzZXJ2ZXIgKi8KICNkZWZpbmUgU1NMM19TVF9DV19DTE5UX0hFTExPX0EJCSgweDExMHxTU0xfU1RfQ09OTkVDVCkKICNkZWZpbmUgU1NMM19TVF9DV19DTE5UX0hFTExPX0IJCSgweDExMXxTU0xfU1RfQ09OTkVDVCkKQEAgLTU3NCwxMCArNTg5LDggQEAKICNkZWZpbmUgU1NMM19TVF9DV19DRVJUX1ZSRllfQgkJKDB4MTkxfFNTTF9TVF9DT05ORUNUKQogI2RlZmluZSBTU0wzX1NUX0NXX0NIQU5HRV9BCQkoMHgxQTB8U1NMX1NUX0NPTk5FQ1QpCiAjZGVmaW5lIFNTTDNfU1RfQ1dfQ0hBTkdFX0IJCSgweDFBMXxTU0xfU1RfQ09OTkVDVCkKLSNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKICNkZWZpbmUgU1NMM19TVF9DV19ORVhUX1BST1RPX0EJCSgweDIwMHxTU0xfU1RfQ09OTkVDVCkKICNkZWZpbmUgU1NMM19TVF9DV19ORVhUX1BST1RPX0IJCSgweDIwMXxTU0xfU1RfQ09OTkVDVCkKLSNlbmRpZgogI2RlZmluZSBTU0wzX1NUX0NXX0ZJTklTSEVEX0EJCSgweDFCMHxTU0xfU1RfQ09OTkVDVCkKICNkZWZpbmUgU1NMM19TVF9DV19GSU5JU0hFRF9CCQkoMHgxQjF8U1NMX1NUX0NPTk5FQ1QpCiAvKiByZWFkIGZyb20gc2VydmVyICovCkBAIC01OTMsNiArNjA2LDEwIEBACiAvKiBzZXJ2ZXIgKi8KIC8qIGV4dHJhIHN0YXRlICovCiAjZGVmaW5lIFNTTDNfU1RfU1dfRkxVU0gJCSgweDEwMHxTU0xfU1RfQUNDRVBUKQorI2lmbmRlZiBPUEVOU1NMX05PX1NDVFAKKyNkZWZpbmUgRFRMUzFfU0NUUF9TVF9TV19XUklURV9TT0NLCQkJKDB4MzEwfFNTTF9TVF9BQ0NFUFQpCisjZGVmaW5lIERUTFMxX1NDVFBfU1RfU1JfUkVBRF9TT0NLCQkJKDB4MzIwfFNTTF9TVF9BQ0NFUFQpCisjZW5kaWYJCiAvKiByZWFkIGZyb20gY2xpZW50ICovCiAvKiBEbyBub3QgY2hhbmdlIHRoZSBudW1iZXIgdmFsdWVzLCB0aGV5IGRvIG1hdHRlciAqLwogI2RlZmluZSBTU0wzX1NUX1NSX0NMTlRfSEVMTE9fQQkJKDB4MTEwfFNTTF9TVF9BQ0NFUFQpCkBAIC02MjMsMTAgKzY0MCw4IEBACiAjZGVmaW5lIFNTTDNfU1RfU1JfQ0VSVF9WUkZZX0IJCSgweDFBMXxTU0xfU1RfQUNDRVBUKQogI2RlZmluZSBTU0wzX1NUX1NSX0NIQU5HRV9BCQkoMHgxQjB8U1NMX1NUX0FDQ0VQVCkKICNkZWZpbmUgU1NMM19TVF9TUl9DSEFOR0VfQgkJKDB4MUIxfFNTTF9TVF9BQ0NFUFQpCi0jaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAjZGVmaW5lIFNTTDNfU1RfU1JfTkVYVF9QUk9UT19BCQkoMHgyMTB8U1NMX1NUX0FDQ0VQVCkKICNkZWZpbmUgU1NMM19TVF9TUl9ORVhUX1BST1RPX0IJCSgweDIxMXxTU0xfU1RfQUNDRVBUKQotI2VuZGlmCiAjZGVmaW5lIFNTTDNfU1RfU1JfRklOSVNIRURfQQkJKDB4MUMwfFNTTF9TVF9BQ0NFUFQpCiAjZGVmaW5lIFNTTDNfU1RfU1JfRklOSVNIRURfQgkJKDB4MUMxfFNTTF9TVF9BQ0NFUFQpCiAvKiB3cml0ZSB0byBjbGllbnQgKi8KQEAgLTY1MSw5ICs2NjYsNyBAQAogI2RlZmluZSBTU0wzX01UX0NMSUVOVF9LRVlfRVhDSEFOR0UJCTE2CiAjZGVmaW5lIFNTTDNfTVRfRklOSVNIRUQJCQkyMAogI2RlZmluZSBTU0wzX01UX0NFUlRJRklDQVRFX1NUQVRVUwkJMjIKLSNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKICNkZWZpbmUgU1NMM19NVF9ORVhUX1BST1RPCQkJNjcKLSNlbmRpZgogI2RlZmluZSBEVExTMV9NVF9IRUxMT19WRVJJRllfUkVRVUVTVCAgICAzCiAKIApkaWZmIC0tZ2l0IGEvc3NsL3NzbF9hbGdzLmMgYi9zc2wvc3NsX2FsZ3MuYwppbmRleCAwOTY3YjJkLi5kNDQzMTQzIDEwMDY0NAotLS0gYS9zc2wvc3NsX2FsZ3MuYworKysgYi9zc2wvc3NsX2FsZ3MuYwpAQCAtNzMsNiArNzMsOSBAQAogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0CiAJRVZQX2FkZF9jaXBoZXIoRVZQX3JjNCgpKTsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX01ENSkgJiYgKGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisJRVZQX2FkZF9jaXBoZXIoRVZQX3JjNF9obWFjX21kNSgpKTsKKyNlbmRpZgogI2VuZGlmICAKICNpZm5kZWYgT1BFTlNTTF9OT19SQzIKIAlFVlBfYWRkX2NpcGhlcihFVlBfcmMyX2NiYygpKTsKQEAgLTg1LDYgKzg4LDEyIEBACiAJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwogCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKIAlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQorCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiY19obWFjX3NoYTEoKSk7CisJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMSgpKTsKKyNlbmRpZgogI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKIAlFVlBfYWRkX2NpcGhlcihFVlBfY2FtZWxsaWFfMTI4X2NiYygpKTsKZGlmZiAtLWdpdCBhL3NzbC9zc2xfYXNuMS5jIGIvc3NsL3NzbF9hc24xLmMKaW5kZXggZDdmNGM2MC4uMzg1NDBiZSAxMDA2NDQKLS0tIGEvc3NsL3NzbF9hc24xLmMKKysrIGIvc3NsL3NzbF9hc24xLmMKQEAgLTExNCw2ICsxMTQsOSBAQAogCUFTTjFfT0NURVRfU1RSSU5HIHBza19pZGVudGl0eV9oaW50OwogCUFTTjFfT0NURVRfU1RSSU5HIHBza19pZGVudGl0eTsKICNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCUFTTjFfT0NURVRfU1RSSU5HIHNycF91c2VybmFtZTsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1NSUCAqLwogCX0gU1NMX1NFU1NJT05fQVNOMTsKIAogaW50IGkyZF9TU0xfU0VTU0lPTihTU0xfU0VTU0lPTiAqaW4sIHVuc2lnbmVkIGNoYXIgKipwcCkKQEAgLTEzMCw2ICsxMzMsOSBAQAogCXVuc2lnbmVkIGNoYXIgY2J1ZjsKIAlpbnQgdjExPTA7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlpbnQgdjEyPTA7CisjZW5kaWYKIAlsb25nIGw7CiAJU1NMX1NFU1NJT05fQVNOMSBhOwogCU1fQVNOMV9JMkRfdmFycyhpbik7CkBAIC0yNjcsNiArMjczLDE0IEBACiAJCWEucHNrX2lkZW50aXR5LmRhdGE9KHVuc2lnbmVkIGNoYXIgKikoaW4tPnBza19pZGVudGl0eSk7CiAJCX0KICNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCWlmIChpbi0+c3JwX3VzZXJuYW1lKQorCQl7CisJCWEuc3JwX3VzZXJuYW1lLmxlbmd0aD1zdHJsZW4oaW4tPnNycF91c2VybmFtZSk7CisJCWEuc3JwX3VzZXJuYW1lLnR5cGU9Vl9BU04xX09DVEVUX1NUUklORzsKKwkJYS5zcnBfdXNlcm5hbWUuZGF0YT0odW5zaWduZWQgY2hhciAqKShpbi0+c3JwX3VzZXJuYW1lKTsKKwkJfQorI2VuZGlmIC8qIE9QRU5TU0xfTk9fU1JQICovCiAKIAlNX0FTTjFfSTJEX2xlbigmKGEudmVyc2lvbiksCQlpMmRfQVNOMV9JTlRFR0VSKTsKIAlNX0FTTjFfSTJEX2xlbigmKGEuc3NsX3ZlcnNpb24pLAlpMmRfQVNOMV9JTlRFR0VSKTsKQEAgLTMwNyw2ICszMjEsMTAgQEAKIAlpZiAoaW4tPnBza19pZGVudGl0eSkKICAgICAgICAgCU1fQVNOMV9JMkRfbGVuX0VYUF9vcHQoJihhLnBza19pZGVudGl0eSksIGkyZF9BU04xX09DVEVUX1NUUklORyw4LHY4KTsKICNlbmRpZiAvKiBPUEVOU1NMX05PX1BTSyAqLworI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCWlmIChpbi0+c3JwX3VzZXJuYW1lKQorICAgICAgICAJTV9BU04xX0kyRF9sZW5fRVhQX29wdCgmKGEuc3JwX3VzZXJuYW1lKSwgaTJkX0FTTjFfT0NURVRfU1RSSU5HLDEyLHYxMik7CisjZW5kaWYgLyogT1BFTlNTTF9OT19TUlAgKi8KIAogCU1fQVNOMV9JMkRfc2VxX3RvdGFsKCk7CiAKQEAgLTM1MSw2ICszNjksMTAgQEAKIAlpZiAoaW4tPmNvbXByZXNzX21ldGgpCiAgICAgICAgIAlNX0FTTjFfSTJEX3B1dF9FWFBfb3B0KCYoYS5jb21wX2lkKSwgaTJkX0FTTjFfT0NURVRfU1RSSU5HLDExLHYxMSk7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlpZiAoaW4tPnNycF91c2VybmFtZSkKKwkJTV9BU04xX0kyRF9wdXRfRVhQX29wdCgmKGEuc3JwX3VzZXJuYW1lKSwgaTJkX0FTTjFfT0NURVRfU1RSSU5HLDEyLHYxMik7CisjZW5kaWYgLyogT1BFTlNTTF9OT19TUlAgKi8KIAlNX0FTTjFfSTJEX2ZpbmlzaCgpOwogCX0KIApAQCAtNTQ5LDYgKzU3MSwxOSBAQAogCQl9CiAJZWxzZQogCQlyZXQtPnBza19pZGVudGl0eV9oaW50PU5VTEw7CisKKwlvcy5sZW5ndGg9MDsKKwlvcy5kYXRhPU5VTEw7CisJTV9BU04xX0QySV9nZXRfRVhQX29wdChvc3AsZDJpX0FTTjFfT0NURVRfU1RSSU5HLDgpOworCWlmIChvcy5kYXRhKQorCQl7CisJCXJldC0+cHNrX2lkZW50aXR5ID0gQlVGX3N0cm5kdXAoKGNoYXIgKilvcy5kYXRhLCBvcy5sZW5ndGgpOworCQlPUEVOU1NMX2ZyZWUob3MuZGF0YSk7CisJCW9zLmRhdGEgPSBOVUxMOworCQlvcy5sZW5ndGggPSAwOworCQl9CisJZWxzZQorCQlyZXQtPnBza19pZGVudGl0eT1OVUxMOwogI2VuZGlmIC8qIE9QRU5TU0xfTk9fUFNLICovCiAKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKQEAgLTU4OCw1ICs2MjMsMjAgQEAKIAkJfQogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlvcy5sZW5ndGg9MDsKKwlvcy5kYXRhPU5VTEw7CisJTV9BU04xX0QySV9nZXRfRVhQX29wdChvc3AsZDJpX0FTTjFfT0NURVRfU1RSSU5HLDEyKTsKKwlpZiAob3MuZGF0YSkKKwkJeworCQlyZXQtPnNycF91c2VybmFtZSA9IEJVRl9zdHJuZHVwKChjaGFyICopb3MuZGF0YSwgb3MubGVuZ3RoKTsKKwkJT1BFTlNTTF9mcmVlKG9zLmRhdGEpOworCQlvcy5kYXRhID0gTlVMTDsKKwkJb3MubGVuZ3RoID0gMDsKKwkJfQorCWVsc2UKKwkJcmV0LT5zcnBfdXNlcm5hbWU9TlVMTDsKKyNlbmRpZiAvKiBPUEVOU1NMX05PX1NSUCAqLworCiAJTV9BU04xX0QySV9GaW5pc2goYSxTU0xfU0VTU0lPTl9mcmVlLFNTTF9GX0QySV9TU0xfU0VTU0lPTik7CiAJfQpkaWZmIC0tZ2l0IGEvc3NsL3NzbF9jZXJ0LmMgYi9zc2wvc3NsX2NlcnQuYwppbmRleCAyNzI1NmVlLi45MTdiZTMxIDEwMDY0NAotLS0gYS9zc2wvc3NsX2NlcnQuYworKysgYi9zc2wvc3NsX2NlcnQuYwpAQCAtMTYwLDYgKzE2MCwyMSBAQAogCXJldHVybiBzc2xfeDUwOV9zdG9yZV9jdHhfaWR4OwogCX0KIAorc3RhdGljIHZvaWQgc3NsX2NlcnRfc2V0X2RlZmF1bHRfbWQoQ0VSVCAqY2VydCkKKwl7CisJLyogU2V0IGRpZ2VzdCB2YWx1ZXMgdG8gZGVmYXVsdHMgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKwljZXJ0LT5wa2V5c1tTU0xfUEtFWV9EU0FfU0lHTl0uZGlnZXN0ID0gRVZQX2RzczEoKTsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorCWNlcnQtPnBrZXlzW1NTTF9QS0VZX1JTQV9TSUdOXS5kaWdlc3QgPSBFVlBfc2hhMSgpOworCWNlcnQtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLmRpZ2VzdCA9IEVWUF9zaGExKCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorCWNlcnQtPnBrZXlzW1NTTF9QS0VZX0VDQ10uZGlnZXN0ID0gRVZQX2VjZHNhKCk7CisjZW5kaWYKKwl9CisKIENFUlQgKnNzbF9jZXJ0X25ldyh2b2lkKQogCXsKIAlDRVJUICpyZXQ7CkBAIC0xNzQsNyArMTg5LDcgQEAKIAogCXJldC0+a2V5PSAmKHJldC0+cGtleXNbU1NMX1BLRVlfUlNBX0VOQ10pOwogCXJldC0+cmVmZXJlbmNlcz0xOwotCisJc3NsX2NlcnRfc2V0X2RlZmF1bHRfbWQocmV0KTsKIAlyZXR1cm4ocmV0KTsKIAl9CiAKQEAgLTMwNyw2ICszMjIsMTAgQEAKIAkgKiBjaGFpbiBpcyBoZWxkIGluc2lkZSBTU0xfQ1RYICovCiAKIAlyZXQtPnJlZmVyZW5jZXM9MTsKKwkvKiBTZXQgZGlnZXN0cyB0byBkZWZhdWx0cy4gTkI6IHdlIGRvbid0IGNvcHkgZXhpc3RpbmcgdmFsdWVzIGFzIHRoZXkKKwkgKiB3aWxsIGJlIHNldCBkdXJpbmcgaGFuZHNoYWtlLgorCSAqLworCXNzbF9jZXJ0X3NldF9kZWZhdWx0X21kKHJldCk7CiAKIAlyZXR1cm4ocmV0KTsKIAkKZGlmZiAtLWdpdCBhL3NzbC9zc2xfY2lwaC5jIGIvc3NsL3NzbF9jaXBoLmMKaW5kZXggNDYyYzQ1YS4uMWExNDNhNyAxMDA2NDQKLS0tIGEvc3NsL3NzbF9jaXBoLmMKKysrIGIvc3NsL3NzbF9jaXBoLmMKQEAgLTE2MiwxMSArMTYyLDEzIEBACiAjZGVmaW5lIFNTTF9FTkNfQ0FNRUxMSUEyNTZfSURYCTkKICNkZWZpbmUgU1NMX0VOQ19HT1NUODlfSURYCTEwCiAjZGVmaW5lIFNTTF9FTkNfU0VFRF9JRFggICAgCTExCi0jZGVmaW5lIFNTTF9FTkNfTlVNX0lEWAkJMTIKKyNkZWZpbmUgU1NMX0VOQ19BRVMxMjhHQ01fSURYCTEyCisjZGVmaW5lIFNTTF9FTkNfQUVTMjU2R0NNX0lEWAkxMworI2RlZmluZSBTU0xfRU5DX05VTV9JRFgJCTE0CiAKIAogc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgKnNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX05VTV9JRFhdPXsKLQlOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsCisJTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCiAJfTsKIAogI2RlZmluZSBTU0xfQ09NUF9OVUxMX0lEWAkwCkBAIC0xNzksMjggKzE4MSwzMiBAQAogI2RlZmluZSBTU0xfTURfU0hBMV9JRFgJMQogI2RlZmluZSBTU0xfTURfR09TVDk0X0lEWCAyCiAjZGVmaW5lIFNTTF9NRF9HT1NUODlNQUNfSURYIDMKKyNkZWZpbmUgU1NMX01EX1NIQTI1Nl9JRFggNAorI2RlZmluZSBTU0xfTURfU0hBMzg0X0lEWCA1CiAvKkNvbnN0YW50IFNTTF9NQVhfRElHRVNUIGVxdWFsIHRvIHNpemUgb2YgZGlnZXN0cyBhcnJheSBzaG91bGQgYmUgCiAgKiBkZWZpbmVkIGluIHRoZQogICogc3NsX2xvY2wuaCAqLwogI2RlZmluZSBTU0xfTURfTlVNX0lEWAlTU0xfTUFYX0RJR0VTVCAKIHN0YXRpYyBjb25zdCBFVlBfTUQgKnNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfTlVNX0lEWF09ewotCU5VTEwsTlVMTCxOVUxMLE5VTEwKKwlOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAogCX07CiAvKiBQS0VZX1RZUEUgZm9yIEdPU1Q4OU1BQyBpcyBrbm93biBpbiBhZHZhbmNlLCBidXQsIGJlY2F1c2UKICAqIGltcGxlbWVudGF0aW9uIGlzIGVuZ2luZS1wcm92aWRlZCwgd2UnbGwgZmlsbCBpdCBvbmx5IGlmCiAgKiBjb3JyZXNwb25kaW5nIEVWUF9QS0VZX01FVEhPRCBpcyBmb3VuZCAKICAqLwogc3RhdGljIGludCAgc3NsX21hY19wa2V5X2lkW1NTTF9NRF9OVU1fSURYXT17Ci0JRVZQX1BLRVlfSE1BQyxFVlBfUEtFWV9ITUFDLEVWUF9QS0VZX0hNQUMsTklEX3VuZGVmCisJRVZQX1BLRVlfSE1BQyxFVlBfUEtFWV9ITUFDLEVWUF9QS0VZX0hNQUMsTklEX3VuZGVmLAorCUVWUF9QS0VZX0hNQUMsRVZQX1BLRVlfSE1BQwogCX07CiAKIHN0YXRpYyBpbnQgc3NsX21hY19zZWNyZXRfc2l6ZVtTU0xfTURfTlVNX0lEWF09ewotCTAsMCwwLDAKKwkwLDAsMCwwLDAsMAogCX07CiAKIHN0YXRpYyBpbnQgc3NsX2hhbmRzaGFrZV9kaWdlc3RfZmxhZ1tTU0xfTURfTlVNX0lEWF09ewogCVNTTF9IQU5EU0hBS0VfTUFDX01ENSxTU0xfSEFORFNIQUtFX01BQ19TSEEsCi0JU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0LDAKKwlTU0xfSEFORFNIQUtFX01BQ19HT1NUOTQsIDAsIFNTTF9IQU5EU0hBS0VfTUFDX1NIQTI1NiwKKwlTU0xfSEFORFNIQUtFX01BQ19TSEEzODQKIAl9OwogCiAjZGVmaW5lIENJUEhFUl9BREQJMQpAQCAtMjQ3LDYgKzI1Myw3IEBACiAJezAsU1NMX1RYVF9FQ0RILDAsICAgIFNTTF9rRUNESHJ8U1NMX2tFQ0RIZXxTU0xfa0VFQ0RILDAsMCwwLDAsMCwwLDAsMH0sCiAKICAgICAgICAgezAsU1NMX1RYVF9rUFNLLDAsICAgIFNTTF9rUFNLLCAgMCwwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX2tTUlAsMCwgICAgU1NMX2tTUlAsICAwLDAsMCwwLDAsMCwwLDB9LAogCXswLFNTTF9UWFRfa0dPU1QsMCwgU1NMX2tHT1NULDAsMCwwLDAsMCwwLDAsMH0sCiAKIAkvKiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gYWxpYXNlcyAqLwpAQCAtMjczLDYgKzI4MCw3IEBACiAJezAsU1NMX1RYVF9BREgsMCwgICAgIFNTTF9rRURILFNTTF9hTlVMTCwwLDAsMCwwLDAsMCwwfSwKIAl7MCxTU0xfVFhUX0FFQ0RILDAsICAgU1NMX2tFRUNESCxTU0xfYU5VTEwsMCwwLDAsMCwwLDAsMH0sCiAgICAgICAgIHswLFNTTF9UWFRfUFNLLDAsICAgICBTU0xfa1BTSyxTU0xfYVBTSywwLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX1NSUCwwLCAgICAgU1NMX2tTUlAsMCwwLDAsMCwwLDAsMCwwfSwKIAogCiAJLyogc3ltbWV0cmljIGVuY3J5cHRpb24gYWxpYXNlcyAqLwpAQCAtMjgzLDkgKzI5MSwxMCBAQAogCXswLFNTTF9UWFRfSURFQSwwLCAgICAwLDAsU1NMX0lERUEsICAwLDAsMCwwLDAsMH0sCiAJezAsU1NMX1RYVF9TRUVELDAsICAgIDAsMCxTU0xfU0VFRCwgIDAsMCwwLDAsMCwwfSwKIAl7MCxTU0xfVFhUX2VOVUxMLDAsICAgMCwwLFNTTF9lTlVMTCwgMCwwLDAsMCwwLDB9LAotCXswLFNTTF9UWFRfQUVTMTI4LDAsICAwLDAsU1NMX0FFUzEyOCwwLDAsMCwwLDAsMH0sCi0JezAsU1NMX1RYVF9BRVMyNTYsMCwgIDAsMCxTU0xfQUVTMjU2LDAsMCwwLDAsMCwwfSwKLQl7MCxTU0xfVFhUX0FFUywwLCAgICAgMCwwLFNTTF9BRVMxMjh8U1NMX0FFUzI1NiwwLDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9BRVMxMjgsMCwgIDAsMCxTU0xfQUVTMTI4fFNTTF9BRVMxMjhHQ00sMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfQUVTMjU2LDAsICAwLDAsU1NMX0FFUzI1NnxTU0xfQUVTMjU2R0NNLDAsMCwwLDAsMCwwfSwKKwl7MCxTU0xfVFhUX0FFUywwLCAgICAgMCwwLFNTTF9BRVMsMCwwLDAsMCwwLDB9LAorCXswLFNTTF9UWFRfQUVTX0dDTSwwLCAwLDAsU1NMX0FFUzEyOEdDTXxTU0xfQUVTMjU2R0NNLDAsMCwwLDAsMCwwfSwKIAl7MCxTU0xfVFhUX0NBTUVMTElBMTI4LDAsMCwwLFNTTF9DQU1FTExJQTEyOCwwLDAsMCwwLDAsMH0sCiAJezAsU1NMX1RYVF9DQU1FTExJQTI1NiwwLDAsMCxTU0xfQ0FNRUxMSUEyNTYsMCwwLDAsMCwwLDB9LAogCXswLFNTTF9UWFRfQ0FNRUxMSUEgICAsMCwwLDAsU1NMX0NBTUVMTElBMTI4fFNTTF9DQU1FTExJQTI1NiwwLDAsMCwwLDAsMH0sCkBAIC0yOTYsNiArMzA1LDggQEAKIAl7MCxTU0xfVFhUX1NIQSwwLCAgICAgMCwwLDAsU1NMX1NIQTEsICAwLDAsMCwwLDB9LAogCXswLFNTTF9UWFRfR09TVDk0LDAsICAgICAwLDAsMCxTU0xfR09TVDk0LCAgMCwwLDAsMCwwfSwKIAl7MCxTU0xfVFhUX0dPU1Q4OU1BQywwLCAgICAgMCwwLDAsU1NMX0dPU1Q4OU1BQywgIDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9TSEEyNTYsMCwgICAgMCwwLDAsU1NMX1NIQTI1NiwgIDAsMCwwLDAsMH0sCisJezAsU1NMX1RYVF9TSEEzODQsMCwgICAgMCwwLDAsU1NMX1NIQTM4NCwgIDAsMCwwLDAsMH0sCiAKIAkvKiBwcm90b2NvbCB2ZXJzaW9uIGFsaWFzZXMgKi8KIAl7MCxTU0xfVFhUX1NTTFYyLDAsICAgMCwwLDAsMCxTU0xfU1NMVjIsIDAsMCwwLDB9LApAQCAtMzc5LDYgKzM5MCwxMSBAQAogCXNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX1NFRURfSURYXT0KIAkgIEVWUF9nZXRfY2lwaGVyYnluYW1lKFNOX3NlZWRfY2JjKTsKIAorCXNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzEyOEdDTV9JRFhdPQorCSAgRVZQX2dldF9jaXBoZXJieW5hbWUoU05fYWVzXzEyOF9nY20pOworCXNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzI1NkdDTV9JRFhdPQorCSAgRVZQX2dldF9jaXBoZXJieW5hbWUoU05fYWVzXzI1Nl9nY20pOworCiAJc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9NRDVfSURYXT0KIAkJRVZQX2dldF9kaWdlc3RieW5hbWUoU05fbWQ1KTsKIAlzc2xfbWFjX3NlY3JldF9zaXplW1NTTF9NRF9NRDVfSURYXT0KQEAgLTQwNCw2ICs0MjAsMTQgQEAKIAkJCXNzbF9tYWNfc2VjcmV0X3NpemVbU1NMX01EX0dPU1Q4OU1BQ19JRFhdPTMyOwogCQl9CQkKIAorCXNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfU0hBMjU2X0lEWF09CisJCUVWUF9nZXRfZGlnZXN0YnluYW1lKFNOX3NoYTI1Nik7CisJc3NsX21hY19zZWNyZXRfc2l6ZVtTU0xfTURfU0hBMjU2X0lEWF09CisJCUVWUF9NRF9zaXplKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfU0hBMjU2X0lEWF0pOworCXNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfU0hBMzg0X0lEWF09CisJCUVWUF9nZXRfZGlnZXN0YnluYW1lKFNOX3NoYTM4NCk7CisJc3NsX21hY19zZWNyZXRfc2l6ZVtTU0xfTURfU0hBMzg0X0lEWF09CisJCUVWUF9NRF9zaXplKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfU0hBMzg0X0lEWF0pOwogCX0KICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCiAKQEAgLTUyNiw2ICs1NTAsMTIgQEAKIAljYXNlIFNTTF9TRUVEOgogCQlpPVNTTF9FTkNfU0VFRF9JRFg7CiAJCWJyZWFrOworCWNhc2UgU1NMX0FFUzEyOEdDTToKKwkJaT1TU0xfRU5DX0FFUzEyOEdDTV9JRFg7CisJCWJyZWFrOworCWNhc2UgU1NMX0FFUzI1NkdDTToKKwkJaT1TU0xfRU5DX0FFUzI1NkdDTV9JRFg7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWk9IC0xOwogCQlicmVhazsKQEAgLTU0OSw2ICs1NzksMTIgQEAKIAljYXNlIFNTTF9TSEExOgogCQlpPVNTTF9NRF9TSEExX0lEWDsKIAkJYnJlYWs7CisJY2FzZSBTU0xfU0hBMjU2OgorCQlpPVNTTF9NRF9TSEEyNTZfSURYOworCQlicmVhazsKKwljYXNlIFNTTF9TSEEzODQ6CisJCWk9U1NMX01EX1NIQTM4NF9JRFg7CisJCWJyZWFrOwogCWNhc2UgU1NMX0dPU1Q5NDoKIAkJaSA9IFNTTF9NRF9HT1NUOTRfSURYOwogCQlicmVhazsKQEAgLTU2NCwxNyArNjAwLDM5IEBACiAJCSptZD1OVUxMOyAKIAkJaWYgKG1hY19wa2V5X3R5cGUhPU5VTEwpICptYWNfcGtleV90eXBlID0gTklEX3VuZGVmOwogCQlpZiAobWFjX3NlY3JldF9zaXplIT1OVUxMKSAqbWFjX3NlY3JldF9zaXplID0gMDsKLQorCQlpZiAoYy0+YWxnb3JpdGhtX21hYyA9PSBTU0xfQUVBRCkKKwkJCW1hY19wa2V5X3R5cGUgPSBOVUxMOwogCX0KIAllbHNlCiAJewogCQkqbWQ9c3NsX2RpZ2VzdF9tZXRob2RzW2ldOwogCQlpZiAobWFjX3BrZXlfdHlwZSE9TlVMTCkgKm1hY19wa2V5X3R5cGUgPSBzc2xfbWFjX3BrZXlfaWRbaV07CiAJCWlmIChtYWNfc2VjcmV0X3NpemUhPU5VTEwpICptYWNfc2VjcmV0X3NpemUgPSBzc2xfbWFjX3NlY3JldF9zaXplW2ldOwotCX0JCisJfQogCi0JaWYgKCgqZW5jICE9IE5VTEwpICYmICgqbWQgIT0gTlVMTCkgJiYgKCFtYWNfcGtleV90eXBlfHwqbWFjX3BrZXlfdHlwZSAhPSBOSURfdW5kZWYpKQorCWlmICgoKmVuYyAhPSBOVUxMKSAmJgorCSAgICAoKm1kICE9IE5VTEwgfHwgKEVWUF9DSVBIRVJfZmxhZ3MoKmVuYykmRVZQX0NJUEhfRkxBR19BRUFEX0NJUEhFUikpICYmCisJICAgICghbWFjX3BrZXlfdHlwZXx8Km1hY19wa2V5X3R5cGUgIT0gTklEX3VuZGVmKSkKKwkJeworCQljb25zdCBFVlBfQ0lQSEVSICpldnA7CisKKwkJaWYJKHMtPnNzbF92ZXJzaW9uID49IFRMUzFfVkVSU0lPTiAmJgorCQkJIGMtPmFsZ29yaXRobV9lbmMgPT0gU1NMX1JDNCAmJgorCQkJIGMtPmFsZ29yaXRobV9tYWMgPT0gU1NMX01ENSAmJgorCQkJIChldnA9RVZQX2dldF9jaXBoZXJieW5hbWUoIlJDNC1ITUFDLU1ENSIpKSkKKwkJCSplbmMgPSBldnAsICptZCA9IE5VTEw7CisJCWVsc2UgaWYgKHMtPnNzbF92ZXJzaW9uID49IFRMUzFfVkVSU0lPTiAmJgorCQkJIGMtPmFsZ29yaXRobV9lbmMgPT0gU1NMX0FFUzEyOCAmJgorCQkJIGMtPmFsZ29yaXRobV9tYWMgPT0gU1NMX1NIQTEgJiYKKwkJCSAoZXZwPUVWUF9nZXRfY2lwaGVyYnluYW1lKCJBRVMtMTI4LUNCQy1ITUFDLVNIQTEiKSkpCisJCQkqZW5jID0gZXZwLCAqbWQgPSBOVUxMOworCQllbHNlIGlmIChzLT5zc2xfdmVyc2lvbiA+PSBUTFMxX1ZFUlNJT04gJiYKKwkJCSBjLT5hbGdvcml0aG1fZW5jID09IFNTTF9BRVMyNTYgJiYKKwkJCSBjLT5hbGdvcml0aG1fbWFjID09IFNTTF9TSEExICYmCisJCQkgKGV2cD1FVlBfZ2V0X2NpcGhlcmJ5bmFtZSgiQUVTLTI1Ni1DQkMtSE1BQy1TSEExIikpKQorCQkJKmVuYyA9IGV2cCwgKm1kID0gTlVMTDsKIAkJcmV0dXJuKDEpOworCQl9CiAJZWxzZQogCQlyZXR1cm4oMCk7CiAJfQpAQCAtNTg1LDkgKzY0MywxMSBAQAogCQl7CiAJCXJldHVybiAwOwogCQl9Ci0JaWYgKHNzbF9oYW5kc2hha2VfZGlnZXN0X2ZsYWdbaWR4XT09MCkgcmV0dXJuIDA7CiAJKm1hc2sgPSBzc2xfaGFuZHNoYWtlX2RpZ2VzdF9mbGFnW2lkeF07Ci0JKm1kID0gc3NsX2RpZ2VzdF9tZXRob2RzW2lkeF07CisJaWYgKCptYXNrKQorCQkqbWQgPSBzc2xfZGlnZXN0X21ldGhvZHNbaWR4XTsKKwllbHNlCisJCSptZCA9IE5VTEw7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTY2Miw2ICs3MjIsOSBAQAogCSpta2V5IHw9IFNTTF9rUFNLOwogCSphdXRoIHw9IFNTTF9hUFNLOwogI2VuZGlmCisjaWZkZWYgT1BFTlNTTF9OT19TUlAKKwkqbWtleSB8PSBTU0xfa1NSUDsKKyNlbmRpZgogCS8qIENoZWNrIGZvciBwcmVzZW5jZSBvZiBHT1NUIDM0LjEwIGFsZ29yaXRobXMsIGFuZCBpZiB0aGV5CiAJICogZG8gbm90IHByZXNlbnQsIGRpc2FibGUgIGFwcHJvcHJpYXRlIGF1dGggYW5kIGtleSBleGNoYW5nZSAqLwogCWlmICghZ2V0X29wdGlvbmFsX3BrZXlfaWQoImdvc3Q5NCIpKSB7CkBAIC02ODcsNiArNzUwLDggQEAKIAkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19JREVBX0lEWF0gPT0gTlVMTCkgPyBTU0xfSURFQTowOwogCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzEyOF9JRFhdID09IE5VTEwpID8gU1NMX0FFUzEyODowOwogCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzI1Nl9JRFhdID09IE5VTEwpID8gU1NMX0FFUzI1NjowOworCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzEyOEdDTV9JRFhdID09IE5VTEwpID8gU1NMX0FFUzEyOEdDTTowOworCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0FFUzI1NkdDTV9JRFhdID09IE5VTEwpID8gU1NMX0FFUzI1NkdDTTowOwogCSplbmMgfD0gKHNzbF9jaXBoZXJfbWV0aG9kc1tTU0xfRU5DX0NBTUVMTElBMTI4X0lEWF0gPT0gTlVMTCkgPyBTU0xfQ0FNRUxMSUExMjg6MDsKIAkqZW5jIHw9IChzc2xfY2lwaGVyX21ldGhvZHNbU1NMX0VOQ19DQU1FTExJQTI1Nl9JRFhdID09IE5VTEwpID8gU1NMX0NBTUVMTElBMjU2OjA7CiAJKmVuYyB8PSAoc3NsX2NpcGhlcl9tZXRob2RzW1NTTF9FTkNfR09TVDg5X0lEWF0gPT0gTlVMTCkgPyBTU0xfZUdPU1QyODE0Nzg5Q05UOjA7CkBAIC02OTQsNiArNzU5LDggQEAKIAogCSptYWMgfD0gKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfTUQ1X0lEWCBdID09IE5VTEwpID8gU1NMX01ENSA6MDsKIAkqbWFjIHw9IChzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX1NIQTFfSURYXSA9PSBOVUxMKSA/IFNTTF9TSEExOjA7CisJKm1hYyB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9TSEEyNTZfSURYXSA9PSBOVUxMKSA/IFNTTF9TSEEyNTY6MDsKKwkqbWFjIHw9IChzc2xfZGlnZXN0X21ldGhvZHNbU1NMX01EX1NIQTM4NF9JRFhdID09IE5VTEwpID8gU1NMX1NIQTM4NDowOwogCSptYWMgfD0gKHNzbF9kaWdlc3RfbWV0aG9kc1tTU0xfTURfR09TVDk0X0lEWF0gPT0gTlVMTCkgPyBTU0xfR09TVDk0OjA7CiAJKm1hYyB8PSAoc3NsX2RpZ2VzdF9tZXRob2RzW1NTTF9NRF9HT1NUODlNQUNfSURYXSA9PSBOVUxMIHx8IHNzbF9tYWNfcGtleV9pZFtTU0xfTURfR09TVDg5TUFDX0lEWF09PU5JRF91bmRlZik/IFNTTF9HT1NUODlNQUM6MDsKIApAQCAtNzI0LDYgKzc5MSw5IEBACiAJCWMgPSBzc2xfbWV0aG9kLT5nZXRfY2lwaGVyKGkpOwogCQkvKiBkcm9wIHRob3NlIHRoYXQgdXNlIGFueSBvZiB0aGF0IGlzIG5vdCBhdmFpbGFibGUgKi8KIAkJaWYgKChjICE9IE5VTEwpICYmIGMtPnZhbGlkICYmCisjaWZkZWYgT1BFTlNTTF9GSVBTCisJCSAgICAoIUZJUFNfbW9kZSgpIHx8IChjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgorI2VuZGlmCiAJCSAgICAhKGMtPmFsZ29yaXRobV9ta2V5ICYgZGlzYWJsZWRfbWtleSkgJiYKIAkJICAgICEoYy0+YWxnb3JpdGhtX2F1dGggJiBkaXNhYmxlZF9hdXRoKSAmJgogCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgpAQCAtMTQyMyw3ICsxNDkzLDExIEBACiAJICovCiAJZm9yIChjdXJyID0gaGVhZDsgY3VyciAhPSBOVUxMOyBjdXJyID0gY3Vyci0+bmV4dCkKIAkJeworI2lmZGVmIE9QRU5TU0xfRklQUworCQlpZiAoY3Vyci0+YWN0aXZlICYmICghRklQU19tb2RlKCkgfHwgY3Vyci0+Y2lwaGVyLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKQorI2Vsc2UKIAkJaWYgKGN1cnItPmFjdGl2ZSkKKyNlbmRpZgogCQkJewogCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBjdXJyLT5jaXBoZXIpOwogI2lmZGVmIENJUEhFUl9ERUJVRwpAQCAtMTQ4MCw2ICsxNTU0LDggQEAKIAkJdmVyPSJTU0x2MiI7CiAJZWxzZSBpZiAoYWxnX3NzbCAmIFNTTF9TU0xWMykKIAkJdmVyPSJTU0x2MyI7CisJZWxzZSBpZiAoYWxnX3NzbCAmIFNTTF9UTFNWMV8yKQorCQl2ZXI9IlRMU3YxLjIiOwogCWVsc2UKIAkJdmVyPSJ1bmtub3duIjsKIApAQCAtMTUxMiw2ICsxNTg4LDkgQEAKIAljYXNlIFNTTF9rUFNLOgogCQlreD0iUFNLIjsKIAkJYnJlYWs7CisJY2FzZSBTU0xfa1NSUDoKKwkJa3g9IlNSUCI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWt4PSJ1bmtub3duIjsKIAkJfQpAQCAtMTU3NCw2ICsxNjUzLDEyIEBACiAJY2FzZSBTU0xfQUVTMjU2OgogCQllbmM9IkFFUygyNTYpIjsKIAkJYnJlYWs7CisJY2FzZSBTU0xfQUVTMTI4R0NNOgorCQllbmM9IkFFU0dDTSgxMjgpIjsKKwkJYnJlYWs7CisJY2FzZSBTU0xfQUVTMjU2R0NNOgorCQllbmM9IkFFU0dDTSgyNTYpIjsKKwkJYnJlYWs7CiAJY2FzZSBTU0xfQ0FNRUxMSUExMjg6CiAJCWVuYz0iQ2FtZWxsaWEoMTI4KSI7CiAJCWJyZWFrOwpAQCAtMTU5Niw2ICsxNjgxLDE1IEBACiAJY2FzZSBTU0xfU0hBMToKIAkJbWFjPSJTSEExIjsKIAkJYnJlYWs7CisJY2FzZSBTU0xfU0hBMjU2OgorCQltYWM9IlNIQTI1NiI7CisJCWJyZWFrOworCWNhc2UgU1NMX1NIQTM4NDoKKwkJbWFjPSJTSEEzODQiOworCQlicmVhazsKKwljYXNlIFNTTF9BRUFEOgorCQltYWM9IkFFQUQiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQltYWM9InVua25vd24iOwogCQlicmVhazsKQEAgLTE2NTMsNiArMTc0NywxMSBAQAogCXJldHVybihyZXQpOwogCX0KIAordW5zaWduZWQgbG9uZyBTU0xfQ0lQSEVSX2dldF9pZChjb25zdCBTU0xfQ0lQSEVSICpjKQorCXsKKwlyZXR1cm4gYy0+aWQ7CisJfQorCiAvKiByZXR1cm4gc3RyaW5nIHZlcnNpb24gb2Yga2V5IGV4Y2hhbmdlIGFsZ29yaXRobSAqLwogY29uc3QgY2hhciogU1NMX0NJUEhFUl9hdXRoZW50aWNhdGlvbl9tZXRob2QoY29uc3QgU1NMX0NJUEhFUiogY2lwaGVyKQogCXsKZGlmZiAtLWdpdCBhL3NzbC9zc2xfZXJyLmMgYi9zc2wvc3NsX2Vyci5jCmluZGV4IDBiOGMxMjcuLjIwMzlhMGMgMTAwNjQ0Ci0tLSBhL3NzbC9zc2xfZXJyLmMKKysrIGIvc3NsL3NzbF9lcnIuYwpAQCAtODAsNyArODAsNiBAQAoge0VSUl9GVU5DKFNTTF9GX0RUTFMxX0FDQ0VQVCksCSJEVExTMV9BQ0NFUFQifSwKIHtFUlJfRlVOQyhTU0xfRl9EVExTMV9BRERfQ0VSVF9UT19CVUYpLAkiRFRMUzFfQUREX0NFUlRfVE9fQlVGIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfQlVGRkVSX1JFQ09SRCksCSJEVExTMV9CVUZGRVJfUkVDT1JEIn0sCi17RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfQ0hFQ0tfVElNRU9VVF9OVU0pLAkiRFRMUzFfQ0hFQ0tfVElNRU9VVF9OVU0ifSwKIHtFUlJfRlVOQyhTU0xfRl9EVExTMV9DTElFTlRfSEVMTE8pLAkiRFRMUzFfQ0xJRU5UX0hFTExPIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfQ09OTkVDVCksCSJEVExTMV9DT05ORUNUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfRU5DKSwJIkRUTFMxX0VOQyJ9LApAQCAtODksNiArODgsNyBAQAoge0VSUl9GVU5DKFNTTF9GX0RUTFMxX0dFVF9NRVNTQUdFX0ZSQUdNRU5UKSwJIkRUTFMxX0dFVF9NRVNTQUdFX0ZSQUdNRU5UIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfR0VUX1JFQ09SRCksCSJEVExTMV9HRVRfUkVDT1JEIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfSEFORExFX1RJTUVPVVQpLAkiRFRMUzFfSEFORExFX1RJTUVPVVQifSwKK3tFUlJfRlVOQyhTU0xfRl9EVExTMV9IRUFSVEJFQVQpLAkiRFRMUzFfSEVBUlRCRUFUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfRFRMUzFfT1VUUFVUX0NFUlRfQ0hBSU4pLAkiRFRMUzFfT1VUUFVUX0NFUlRfQ0hBSU4ifSwKIHtFUlJfRlVOQyhTU0xfRl9EVExTMV9QUkVQUk9DRVNTX0ZSQUdNRU5UKSwJIkRUTFMxX1BSRVBST0NFU1NfRlJBR01FTlQifSwKIHtFUlJfRlVOQyhTU0xfRl9EVExTMV9QUk9DRVNTX09VVF9PRl9TRVFfTUVTU0FHRSksCSJEVExTMV9QUk9DRVNTX09VVF9PRl9TRVFfTUVTU0FHRSJ9LApAQCAtMTgyLDEwICsxODIsMTIgQEAKIHtFUlJfRlVOQyhTU0xfRl9TU0wzX1dSSVRFX1BFTkRJTkcpLAkiU1NMM19XUklURV9QRU5ESU5HIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQpLAkiU1NMX0FERF9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCksCSJTU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9BRERfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhUKSwJIlNTTF9BRERfQ0xJRU5USEVMTE9fVVNFX1NSVFBfRVhUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0FERF9ESVJfQ0VSVF9TVUJKRUNUU19UT19TVEFDSyksCSJTU0xfYWRkX2Rpcl9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0FERF9GSUxFX0NFUlRfU1VCSkVDVFNfVE9fU1RBQ0spLAkiU1NMX2FkZF9maWxlX2NlcnRfc3ViamVjdHNfdG9fc3RhY2sifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVCksCSJTU0xfQUREX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9BRERfU0VSVkVSSEVMTE9fVExTRVhUKSwJIlNTTF9BRERfU0VSVkVSSEVMTE9fVExTRVhUIn0sCit7RVJSX0ZVTkMoU1NMX0ZfU1NMX0FERF9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQpLAkiU1NMX0FERF9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQkFEX01FVEhPRCksCSJTU0xfQkFEX01FVEhPRCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9CWVRFU19UT19DSVBIRVJfTElTVCksCSJTU0xfQllURVNfVE9fQ0lQSEVSX0xJU1QifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ0VSVF9EVVApLAkiU1NMX0NFUlRfRFVQIn0sCkBAIC0yMDIsNiArMjA0LDcgQEAKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ1JFQVRFX0NJUEhFUl9MSVNUKSwJIlNTTF9DUkVBVEVfQ0lQSEVSX0xJU1QifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ1RSTCksCSJTU0xfY3RybCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfQ0hFQ0tfUFJJVkFURV9LRVkpLAkiU1NMX0NUWF9jaGVja19wcml2YXRlX2tleSJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfTUFLRV9QUk9GSUxFUyksCSJTU0xfQ1RYX01BS0VfUFJPRklMRVMifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfQ1RYX05FVyksCSJTU0xfQ1RYX25ldyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9DVFhfU0VUX0NJUEhFUl9MSVNUKSwJIlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0In0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0NUWF9TRVRfQ0xJRU5UX0NFUlRfRU5HSU5FKSwJIlNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2VuZ2luZSJ9LApAQCAtMjMwLDggKzIzMywxMCBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTF9ORVcpLAkiU1NMX25ldyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQpLAkiU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQpLAkiU1NMX1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVCJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19VU0VfU1JUUF9FWFQpLAkiU1NMX1BBUlNFX0NMSUVOVEhFTExPX1VTRV9TUlRQX0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQpLAkiU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19UTFNFWFQpLAkiU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19VU0VfU1JUUF9FWFQpLAkiU1NMX1BBUlNFX1NFUlZFUkhFTExPX1VTRV9TUlRQX0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QRUVLKSwJIlNTTF9wZWVrIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUKSwJIlNTTF9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVCksCSJTU0xfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQifSwKQEAgLTI0MCw2ICsyNDUsNyBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTF9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiU1NMX1JTQV9QVUJMSUNfRU5DUllQVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9TRVNTSU9OX05FVyksCSJTU0xfU0VTU0lPTl9uZXcifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0VTU0lPTl9QUklOVF9GUCksCSJTU0xfU0VTU0lPTl9wcmludF9mcCJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9TRVNTSU9OX1NFVDFfSURfQ09OVEVYVCksCSJTU0xfU0VTU0lPTl9zZXQxX2lkX2NvbnRleHQifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0VTU19DRVJUX05FVyksCSJTU0xfU0VTU19DRVJUX05FVyJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9TRVRfQ0VSVCksCSJTU0xfU0VUX0NFUlQifSwKIHtFUlJfRlVOQyhTU0xfRl9TU0xfU0VUX0NJUEhFUl9MSVNUKSwJIlNTTF9zZXRfY2lwaGVyX2xpc3QifSwKQEAgLTI1Myw2ICsyNTksNyBAQAoge0VSUl9GVU5DKFNTTF9GX1NTTF9TRVRfVFJVU1QpLAkiU1NMX3NldF90cnVzdCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9TRVRfV0ZEKSwJIlNTTF9zZXRfd2ZkIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1NIVVRET1dOKSwJIlNTTF9zaHV0ZG93biJ9LAore0VSUl9GVU5DKFNTTF9GX1NTTF9TUlBfQ1RYX0lOSVQpLAkiU1NMX1NSUF9DVFhfaW5pdCJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VTkRFRklORURfQ09OU1RfRlVOQ1RJT04pLAkiU1NMX1VOREVGSU5FRF9DT05TVF9GVU5DVElPTiJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VTkRFRklORURfRlVOQ1RJT04pLAkiU1NMX1VOREVGSU5FRF9GVU5DVElPTiJ9LAoge0VSUl9GVU5DKFNTTF9GX1NTTF9VTkRFRklORURfVk9JRF9GVU5DVElPTiksCSJTU0xfVU5ERUZJTkVEX1ZPSURfRlVOQ1RJT04ifSwKQEAgLTI3Miw2ICsyNzksOCBAQAoge0VSUl9GVU5DKFNTTF9GX1RMUzFfQ0hBTkdFX0NJUEhFUl9TVEFURSksCSJUTFMxX0NIQU5HRV9DSVBIRVJfU1RBVEUifSwKIHtFUlJfRlVOQyhTU0xfRl9UTFMxX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVCksCSJUTFMxX0NIRUNLX1NFUlZFUkhFTExPX1RMU0VYVCJ9LAoge0VSUl9GVU5DKFNTTF9GX1RMUzFfRU5DKSwJIlRMUzFfRU5DIn0sCit7RVJSX0ZVTkMoU1NMX0ZfVExTMV9FWFBPUlRfS0VZSU5HX01BVEVSSUFMKSwJIlRMUzFfRVhQT1JUX0tFWUlOR19NQVRFUklBTCJ9LAore0VSUl9GVU5DKFNTTF9GX1RMUzFfSEVBUlRCRUFUKSwJIlNTTF9GX1RMUzFfSEVBUlRCRUFUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfVExTMV9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVCksCSJUTFMxX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfVExTMV9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVCksCSJUTFMxX1BSRVBBUkVfU0VSVkVSSEVMTE9fVExTRVhUIn0sCiB7RVJSX0ZVTkMoU1NMX0ZfVExTMV9QUkYpLAkidGxzMV9wcmYifSwKQEAgLTMxNCw2ICszMjMsMTMgQEAKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9SU0FfTU9EVUxVU19MRU5HVEgpLCJiYWQgcnNhIG1vZHVsdXMgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9CQURfUlNBX1NJR05BVFVSRSkgICAgICwiYmFkIHJzYSBzaWduYXR1cmUifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9TSUdOQVRVUkUpICAgICAgICAgLCJiYWQgc2lnbmF0dXJlIn0sCit7RVJSX1JFQVNPTihTU0xfUl9CQURfU1JQX0FfTEVOR1RIKSAgICAgICwiYmFkIHNycCBhIGxlbmd0aCJ9LAore0VSUl9SRUFTT04oU1NMX1JfQkFEX1NSUF9CX0xFTkdUSCkgICAgICAsImJhZCBzcnAgYiBsZW5ndGgifSwKK3tFUlJfUkVBU09OKFNTTF9SX0JBRF9TUlBfR19MRU5HVEgpICAgICAgLCJiYWQgc3JwIGcgbGVuZ3RoIn0sCit7RVJSX1JFQVNPTihTU0xfUl9CQURfU1JQX05fTEVOR1RIKSAgICAgICwiYmFkIHNycCBuIGxlbmd0aCJ9LAore0VSUl9SRUFTT04oU1NMX1JfQkFEX1NSUF9TX0xFTkdUSCkgICAgICAsImJhZCBzcnAgcyBsZW5ndGgifSwKK3tFUlJfUkVBU09OKFNTTF9SX0JBRF9TUlRQX01LSV9WQUxVRSkgICAgLCJiYWQgc3J0cCBta2kgdmFsdWUifSwKK3tFUlJfUkVBU09OKFNTTF9SX0JBRF9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUKSwiYmFkIHNydHAgcHJvdGVjdGlvbiBwcm9maWxlIGxpc3QifSwKIHtFUlJfUkVBU09OKFNTTF9SX0JBRF9TU0xfRklMRVRZUEUpICAgICAgLCJiYWQgc3NsIGZpbGV0eXBlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9CQURfU1NMX1NFU1NJT05fSURfTEVOR1RIKSwiYmFkIHNzbCBzZXNzaW9uIGlkIGxlbmd0aCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfQkFEX1NUQVRFKSAgICAgICAgICAgICAsImJhZCBzdGF0ZSJ9LApAQCAtMzUyLDYgKzM2OCw3IEBACiB7RVJSX1JFQVNPTihTU0xfUl9FQ0NfQ0VSVF9TSE9VTERfSEFWRV9SU0FfU0lHTkFUVVJFKSwiZWNjIGNlcnQgc2hvdWxkIGhhdmUgcnNhIHNpZ25hdHVyZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfRUNDX0NFUlRfU0hPVUxEX0hBVkVfU0hBMV9TSUdOQVRVUkUpLCJlY2MgY2VydCBzaG91bGQgaGF2ZSBzaGExIHNpZ25hdHVyZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfRUNHUk9VUF9UT09fTEFSR0VfRk9SX0NJUEhFUiksImVjZ3JvdXAgdG9vIGxhcmdlIGZvciBjaXBoZXIifSwKK3tFUlJfUkVBU09OKFNTTF9SX0VNUFRZX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QpLCJlbXB0eSBzcnRwIHByb3RlY3Rpb24gcHJvZmlsZSBsaXN0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9FTkNSWVBURURfTEVOR1RIX1RPT19MT05HKSwiZW5jcnlwdGVkIGxlbmd0aCB0b28gbG9uZyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfRVJST1JfR0VORVJBVElOR19UTVBfUlNBX0tFWSksImVycm9yIGdlbmVyYXRpbmcgdG1wIHJzYSBrZXkifSwKIHtFUlJfUkVBU09OKFNTTF9SX0VSUk9SX0lOX1JFQ0VJVkVEX0NJUEhFUl9MSVNUKSwiZXJyb3IgaW4gcmVjZWl2ZWQgY2lwaGVyIGxpc3QifSwKQEAgLTM2OCw2ICszODUsNyBAQAoge0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJRF9DT01NQU5EKSAgICAgICAsImludmFsaWQgY29tbWFuZCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJRF9DT01QUkVTU0lPTl9BTEdPUklUSE0pLCJpbnZhbGlkIGNvbXByZXNzaW9uIGFsZ29yaXRobSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJRF9QVVJQT1NFKSAgICAgICAsImludmFsaWQgcHVycG9zZSJ9LAore0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJRF9TUlBfVVNFUk5BTUUpICAsImludmFsaWQgc3JwIHVzZXJuYW1lIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9JTlZBTElEX1NUQVRVU19SRVNQT05TRSksImludmFsaWQgc3RhdHVzIHJlc3BvbnNlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9JTlZBTElEX1RJQ0tFVF9LRVlTX0xFTkdUSCksImludmFsaWQgdGlja2V0IGtleXMgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9JTlZBTElEX1RSVVNUKSAgICAgICAgICwiaW52YWxpZCB0cnVzdCJ9LApAQCAtMzk3LDYgKzQxNSw3IEBACiB7RVJSX1JFQVNPTihTU0xfUl9NSVNTSU5HX1JTQV9DRVJUSUZJQ0FURSksIm1pc3NpbmcgcnNhIGNlcnRpZmljYXRlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9NSVNTSU5HX1JTQV9FTkNSWVBUSU5HX0NFUlQpLCJtaXNzaW5nIHJzYSBlbmNyeXB0aW5nIGNlcnQifSwKIHtFUlJfUkVBU09OKFNTTF9SX01JU1NJTkdfUlNBX1NJR05JTkdfQ0VSVCksIm1pc3NpbmcgcnNhIHNpZ25pbmcgY2VydCJ9LAore0VSUl9SRUFTT04oU1NMX1JfTUlTU0lOR19TUlBfUEFSQU0pICAgICAsImNhbid0IGZpbmQgU1JQIHNlcnZlciBwYXJhbSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTUlTU0lOR19UTVBfREhfS0VZKSAgICAsIm1pc3NpbmcgdG1wIGRoIGtleSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTUlTU0lOR19UTVBfRUNESF9LRVkpICAsIm1pc3NpbmcgdG1wIGVjZGgga2V5In0sCiB7RVJSX1JFQVNPTihTU0xfUl9NSVNTSU5HX1RNUF9SU0FfS0VZKSAgICwibWlzc2luZyB0bXAgcnNhIGtleSJ9LApAQCAtNDI2LDYgKzQ0NSw3IEBACiB7RVJSX1JFQVNPTihTU0xfUl9OT19SRU5FR09USUFUSU9OKSAgICAgICwibm8gcmVuZWdvdGlhdGlvbiJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTk9fUkVRVUlSRURfRElHRVNUKSAgICAsImRpZ2VzdCByZXF1cmVkIGZvciBoYW5kc2hha2UgaXNuJ3QgY29tcHV0ZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX05PX1NIQVJFRF9DSVBIRVIpICAgICAgLCJubyBzaGFyZWQgY2lwaGVyIn0sCit7RVJSX1JFQVNPTihTU0xfUl9OT19TUlRQX1BST0ZJTEVTKSAgICAgICwibm8gc3J0cCBwcm9maWxlcyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTk9fVkVSSUZZX0NBTExCQUNLKSAgICAsIm5vIHZlcmlmeSBjYWxsYmFjayJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTlVMTF9TU0xfQ1RYKSAgICAgICAgICAsIm51bGwgc3NsIGN0eCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfTlVMTF9TU0xfTUVUSE9EX1BBU1NFRCksIm51bGwgc3NsIG1ldGhvZCBwYXNzZWQifSwKQEAgLTQ3MCw3ICs0OTAsMTIgQEAKIHtFUlJfUkVBU09OKFNTTF9SX1NFU1NJT05fSURfQ09OVEVYVF9VTklOSVRJQUxJWkVEKSwic2Vzc2lvbiBpZCBjb250ZXh0IHVuaW5pdGlhbGl6ZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX1NFU1NJT05fTUFZX05PVF9CRV9DUkVBVEVEKSwic2Vzc2lvbiBtYXkgbm90IGJlIGNyZWF0ZWQifSwKIHtFUlJfUkVBU09OKFNTTF9SX1NIT1JUX1JFQUQpICAgICAgICAgICAgLCJzaG9ydCByZWFkIn0sCit7RVJSX1JFQVNPTihTU0xfUl9TSUdOQVRVUkVfQUxHT1JJVEhNU19FUlJPUiksInNpZ25hdHVyZSBhbGdvcml0aG1zIGVycm9yIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9TSUdOQVRVUkVfRk9SX05PTl9TSUdOSU5HX0NFUlRJRklDQVRFKSwic2lnbmF0dXJlIGZvciBub24gc2lnbmluZyBjZXJ0aWZpY2F0ZSJ9LAore0VSUl9SRUFTT04oU1NMX1JfU1JQX0FfQ0FMQykgICAgICAgICAgICAsImVycm9yIHdpdGggdGhlIHNycCBwYXJhbXMifSwKK3tFUlJfUkVBU09OKFNTTF9SX1NSVFBfQ09VTERfTk9UX0FMTE9DQVRFX1BST0ZJTEVTKSwic3J0cCBjb3VsZCBub3QgYWxsb2NhdGUgcHJvZmlsZXMifSwKK3tFUlJfUkVBU09OKFNTTF9SX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1RfVE9PX0xPTkcpLCJzcnRwIHByb3RlY3Rpb24gcHJvZmlsZSBsaXN0IHRvbyBsb25nIn0sCit7RVJSX1JFQVNPTihTU0xfUl9TUlRQX1VOS05PV05fUFJPVEVDVElPTl9QUk9GSUxFKSwic3J0cCB1bmtub3duIHByb3RlY3Rpb24gcHJvZmlsZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfU1NMMjNfRE9JTkdfU0VTU0lPTl9JRF9SRVVTRSksInNzbDIzIGRvaW5nIHNlc3Npb24gaWQgcmV1c2UifSwKIHtFUlJfUkVBU09OKFNTTF9SX1NTTDJfQ09OTkVDVElPTl9JRF9UT09fTE9ORyksInNzbDIgY29ubmVjdGlvbiBpZCB0b28gbG9uZyJ9LAoge0VSUl9SRUFTT04oU1NMX1JfU1NMM19FWFRfSU5WQUxJRF9FQ1BPSU5URk9STUFUKSwic3NsMyBleHQgaW52YWxpZCBlY3BvaW50Zm9ybWF0In0sCkBAIC01MTUsNiArNTQwLDkgQEAKIHtFUlJfUkVBU09OKFNTTF9SX1RMU1YxX1VOUkVDT0dOSVpFRF9OQU1FKSwidGxzdjEgdW5yZWNvZ25pemVkIG5hbWUifSwKIHtFUlJfUkVBU09OKFNTTF9SX1RMU1YxX1VOU1VQUE9SVEVEX0VYVEVOU0lPTiksInRsc3YxIHVuc3VwcG9ydGVkIGV4dGVuc2lvbiJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVExTX0NMSUVOVF9DRVJUX1JFUV9XSVRIX0FOT05fQ0lQSEVSKSwidGxzIGNsaWVudCBjZXJ0IHJlcSB3aXRoIGFub24gY2lwaGVyIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVCksInBlZXIgZG9lcyBub3QgYWNjZXB0IGhlYXJ0YmVhcnRzIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNfSEVBUlRCRUFUX1BFTkRJTkcpICwiaGVhcnRiZWF0IHJlcXVlc3QgYWxyZWFkeSBwZW5kaW5nIn0sCit7RVJSX1JFQVNPTihTU0xfUl9UTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTCksInRscyBpbGxlZ2FsIGV4cG9ydGVyIGxhYmVsIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QpLCJ0bHMgaW52YWxpZCBlY3BvaW50Zm9ybWF0IGxpc3QifSwKIHtFUlJfUkVBU09OKFNTTF9SX1RMU19QRUVSX0RJRF9OT1RfUkVTUE9ORF9XSVRIX0NFUlRJRklDQVRFX0xJU1QpLCJ0bHMgcGVlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBjZXJ0aWZpY2F0ZSBsaXN0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9UTFNfUlNBX0VOQ1JZUFRFRF9WQUxVRV9MRU5HVEhfSVNfV1JPTkcpLCJ0bHMgcnNhIGVuY3J5cHRlZCB2YWx1ZSBsZW5ndGggaXMgd3JvbmcifSwKQEAgLTUzNiw2ICs1NjQsNyBAQAoge0VSUl9SRUFTT04oU1NMX1JfVU5LTk9XTl9DRVJUSUZJQ0FURV9UWVBFKSwidW5rbm93biBjZXJ0aWZpY2F0ZSB0eXBlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX0NJUEhFUl9SRVRVUk5FRCksInVua25vd24gY2lwaGVyIHJldHVybmVkIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX0NJUEhFUl9UWVBFKSAgICwidW5rbm93biBjaXBoZXIgdHlwZSJ9LAore0VSUl9SRUFTT04oU1NMX1JfVU5LTk9XTl9ESUdFU1QpICAgICAgICAsInVua25vd24gZGlnZXN0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX0tFWV9FWENIQU5HRV9UWVBFKSwidW5rbm93biBrZXkgZXhjaGFuZ2UgdHlwZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVU5LTk9XTl9QS0VZX1RZUEUpICAgICAsInVua25vd24gcGtleSB0eXBlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX1BST1RPQ09MKSAgICAgICwidW5rbm93biBwcm90b2NvbCJ9LApAQCAtNTUwLDEyICs1NzksMTQgQEAKIHtFUlJfUkVBU09OKFNTTF9SX1VOU1VQUE9SVEVEX1BST1RPQ09MKSAgLCJ1bnN1cHBvcnRlZCBwcm90b2NvbCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURfU1NMX1ZFUlNJT04pLCJ1bnN1cHBvcnRlZCBzc2wgdmVyc2lvbiJ9LAoge0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURfU1RBVFVTX1RZUEUpLCJ1bnN1cHBvcnRlZCBzdGF0dXMgdHlwZSJ9LAore0VSUl9SRUFTT04oU1NMX1JfVVNFX1NSVFBfTk9UX05FR09USUFURUQpLCJ1c2Ugc3J0cCBub3QgbmVnb3RpYXRlZCJ9LAoge0VSUl9SRUFTT04oU1NMX1JfV1JJVEVfQklPX05PVF9TRVQpICAgICAsIndyaXRlIGJpbyBub3Qgc2V0In0sCiB7RVJSX1JFQVNPTihTU0xfUl9XUk9OR19DSVBIRVJfUkVUVVJORUQpICwid3JvbmcgY2lwaGVyIHJldHVybmVkIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9XUk9OR19NRVNTQUdFX1RZUEUpICAgICwid3JvbmcgbWVzc2FnZSB0eXBlIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9XUk9OR19OVU1CRVJfT0ZfS0VZX0JJVFMpLCJ3cm9uZyBudW1iZXIgb2Yga2V5IGJpdHMifSwKIHtFUlJfUkVBU09OKFNTTF9SX1dST05HX1NJR05BVFVSRV9MRU5HVEgpLCJ3cm9uZyBzaWduYXR1cmUgbGVuZ3RoIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9XUk9OR19TSUdOQVRVUkVfU0laRSkgICwid3Jvbmcgc2lnbmF0dXJlIHNpemUifSwKK3tFUlJfUkVBU09OKFNTTF9SX1dST05HX1NJR05BVFVSRV9UWVBFKSAgLCJ3cm9uZyBzaWduYXR1cmUgdHlwZSJ9LAoge0VSUl9SRUFTT04oU1NMX1JfV1JPTkdfU1NMX1ZFUlNJT04pICAgICAsIndyb25nIHNzbCB2ZXJzaW9uIn0sCiB7RVJSX1JFQVNPTihTU0xfUl9XUk9OR19WRVJTSU9OX05VTUJFUikgICwid3JvbmcgdmVyc2lvbiBudW1iZXIifSwKIHtFUlJfUkVBU09OKFNTTF9SX1g1MDlfTElCKSAgICAgICAgICAgICAgLCJ4NTA5IGxpYiJ9LApkaWZmIC0tZ2l0IGEvc3NsL3NzbF9saWIuYyBiL3NzbC9zc2xfbGliLmMKaW5kZXggYmU4M2EwYi4uODM0MDg1NCAxMDA2NDQKLS0tIGEvc3NsL3NzbF9saWIuYworKysgYi9zc2wvc3NsX2xpYi5jCkBAIC0xNzYsNyArMTc2LDEwIEBACiAJMCwJLyogY2xpZW50X2ZpbmlzaGVkX2xhYmVsX2xlbiAqLwogCU5VTEwsCS8qIHNlcnZlcl9maW5pc2hlZF9sYWJlbCAqLwogCTAsCS8qIHNlcnZlcl9maW5pc2hlZF9sYWJlbF9sZW4gKi8KLQkoaW50ICgqKShpbnQpKXNzbF91bmRlZmluZWRfZnVuY3Rpb24KKwkoaW50ICgqKShpbnQpKXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCisJKGludCAoKikoU1NMICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisJCSBzaXplX3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorCQkgaW50IHVzZV9jb250ZXh0KSkgc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKIAl9OwogCiBpbnQgU1NMX2NsZWFyKFNTTCAqcykKQEAgLTIwMiw5ICsyMDUsOSBAQAogICAgICAgICogbmVlZGVkIGJlY2F1c2UgU1NMX2NsZWFyIGlzIG5vdCBjYWxsZWQgd2hlbiBkb2luZyByZW5lZ290aWF0aW9uKSAqLwogCS8qIFRoaXMgaXMgc2V0IGlmIHdlIGFyZSBkb2luZyBkeW5hbWljIHJlbmVnb3RpYXRpb24gc28ga2VlcAogCSAqIHRoZSBvbGQgY2lwaGVyLiAgSXQgaXMgc29ydCBvZiBhIFNTTF9jbGVhcl9saXRlIDotKSAqLwotCWlmIChzLT5uZXdfc2Vzc2lvbikgcmV0dXJuKDEpOworCWlmIChzLT5yZW5lZ290aWF0ZSkgcmV0dXJuKDEpOwogI2Vsc2UKLQlpZiAocy0+bmV3X3Nlc3Npb24pCisJaWYgKHMtPnJlbmVnb3RpYXRlKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0xfQ0xFQVIsRVJSX1JfSU5URVJOQUxfRVJST1IpOwogCQlyZXR1cm4gMDsKQEAgLTU5NSw2ICs1OTgsOSBAQAogCQlPUEVOU1NMX2ZyZWUocy0+bmV4dF9wcm90b19uZWdvdGlhdGVkKTsKICNlbmRpZgogCisgICAgICAgIGlmIChzLT5zcnRwX3Byb2ZpbGVzKQorICAgICAgICAgICAgc2tfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfZnJlZShzLT5zcnRwX3Byb2ZpbGVzKTsKKwogCU9QRU5TU0xfZnJlZShzKTsKIAl9CiAKQEAgLTEwMTcsMTAgKzEwMjMsMjEgQEAKIAogaW50IFNTTF9yZW5lZ290aWF0ZShTU0wgKnMpCiAJewotCWlmIChzLT5uZXdfc2Vzc2lvbiA9PSAwKQotCQl7Ci0JCXMtPm5ld19zZXNzaW9uPTE7Ci0JCX0KKwlpZiAocy0+cmVuZWdvdGlhdGUgPT0gMCkKKwkJcy0+cmVuZWdvdGlhdGU9MTsKKworCXMtPm5ld19zZXNzaW9uPTE7CisKKwlyZXR1cm4ocy0+bWV0aG9kLT5zc2xfcmVuZWdvdGlhdGUocykpOworCX0KKworaW50IFNTTF9yZW5lZ290aWF0ZV9hYmJyZXZpYXRlZChTU0wgKnMpCisJeworCWlmIChzLT5yZW5lZ290aWF0ZSA9PSAwKQorCQlzLT5yZW5lZ290aWF0ZT0xOworCisJcy0+bmV3X3Nlc3Npb249MDsKKwogCXJldHVybihzLT5tZXRob2QtPnNzbF9yZW5lZ290aWF0ZShzKSk7CiAJfQogCkBAIC0xMDI4LDcgKzEwNDUsNyBAQAogCXsKIAkvKiBiZWNvbWVzIHRydWUgd2hlbiBuZWdvdGlhdGlvbiBpcyByZXF1ZXN0ZWQ7CiAJICogZmFsc2UgYWdhaW4gb25jZSBhIGhhbmRzaGFrZSBoYXMgZmluaXNoZWQgKi8KLQlyZXR1cm4gKHMtPm5ld19zZXNzaW9uICE9IDApOworCXJldHVybiAocy0+cmVuZWdvdGlhdGUgIT0gMCk7CiAJfQogCiBsb25nIFNTTF9jdHJsKFNTTCAqcyxpbnQgY21kLGxvbmcgbGFyZyx2b2lkICpwYXJnKQpAQCAtMTM5NSw2ICsxNDEyLDEwIEBACiAJZm9yIChpPTA7IGk8c2tfU1NMX0NJUEhFUl9udW0oc2spOyBpKyspCiAJCXsKIAkJYz1za19TU0xfQ0lQSEVSX3ZhbHVlKHNrLGkpOworCQkvKiBTa2lwIFRMUyB2MS4yIG9ubHkgY2lwaGVyc3VpdGVzIGlmIGxvd2VyIHRoYW4gdjEuMiAqLworCQlpZiAoKGMtPmFsZ29yaXRobV9zc2wgJiBTU0xfVExTVjFfMikgJiYgCisJCQkoVExTMV9nZXRfY2xpZW50X3ZlcnNpb24ocykgPCBUTFMxXzJfVkVSU0lPTikpCisJCQljb250aW51ZTsKICNpZm5kZWYgT1BFTlNTTF9OT19LUkI1CiAJCWlmICgoKGMtPmFsZ29yaXRobV9ta2V5ICYgU1NMX2tLUkI1KSB8fCAoYy0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYUtSQjUpKSAmJgogCQkgICAgbm9rcmI1KQpAQCAtMTQxMiw3ICsxNDMzLDcgQEAKIAkvKiBJZiBwID09IHEsIG5vIGNpcGhlcnMgYW5kIGNhbGxlciBpbmRpY2F0ZXMgYW4gZXJyb3IuIE90aGVyd2lzZQogCSAqIGFkZCBTQ1NWIGlmIG5vdCByZW5lZ290aWF0aW5nLgogCSAqLwotCWlmIChwICE9IHEgJiYgIXMtPm5ld19zZXNzaW9uKQorCWlmIChwICE9IHEgJiYgIXMtPnJlbmVnb3RpYXRlKQogCQl7CiAJCXN0YXRpYyBTU0xfQ0lQSEVSIHNjc3YgPQogCQkJewpAQCAtMTQ1OSw3ICsxNDgwLDcgQEAKIAkJCShwW24tMV0gPT0gKFNTTDNfQ0tfU0NTViAmIDB4ZmYpKSkKIAkJCXsKIAkJCS8qIFNDU1YgZmF0YWwgaWYgcmVuZWdvdGlhdGluZyAqLwotCQkJaWYgKHMtPm5ld19zZXNzaW9uKQorCQkJaWYgKHMtPnJlbmVnb3RpYXRlKQogCQkJCXsKIAkJCQlTU0xlcnIoU1NMX0ZfU1NMX0JZVEVTX1RPX0NJUEhFUl9MSVNULFNTTF9SX1NDU1ZfUkVDRUlWRURfV0hFTl9SRU5FR09USUFUSU5HKTsKIAkJCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRSk7IApAQCAtMTYzMiwxMCArMTY1MywyMSBAQAogCWN0eC0+bmV4dF9wcm90b19zZWxlY3RfY2IgPSBjYjsKIAljdHgtPm5leHRfcHJvdG9fc2VsZWN0X2NiX2FyZyA9IGFyZzsKIAl9Ci0KICMgZW5kaWYKICNlbmRpZgogCitpbnQgU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuLAorCWNvbnN0IGNoYXIgKmxhYmVsLCBzaXplX3QgbGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqcCwgc2l6ZV90IHBsZW4sCisJaW50IHVzZV9jb250ZXh0KQorCXsKKwlpZiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHMtPm1ldGhvZC0+c3NsM19lbmMtPmV4cG9ydF9rZXlpbmdfbWF0ZXJpYWwocywgb3V0LCBvbGVuLCBsYWJlbCwKKwkJCQkJCQkgICBsbGVuLCBwLCBwbGVuLAorCQkJCQkJCSAgIHVzZV9jb250ZXh0KTsKKwl9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNzbF9zZXNzaW9uX2hhc2goY29uc3QgU1NMX1NFU1NJT04gKmEpCiAJewogCXVuc2lnbmVkIGxvbmcgbDsKQEAgLTE2NzksNiArMTcxMSwxNCBAQAogCQlyZXR1cm4oTlVMTCk7CiAJCX0KIAorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCQorCQl7CisJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorI2VuZGlmCisKIAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwgMCkKIAkJewogCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJRklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOwpAQCAtMTgwOCw2ICsxODQ4LDkgQEAKIAlyZXQtPnBza19jbGllbnRfY2FsbGJhY2s9TlVMTDsKIAlyZXQtPnBza19zZXJ2ZXJfY2FsbGJhY2s9TlVMTDsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCVNTTF9DVFhfU1JQX0NUWF9pbml0KHJldCk7CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19CVUZfRlJFRUxJU1RTCiAJcmV0LT5mcmVlbGlzdF9tYXhfbGVuID0gU1NMX01BWF9CVUZfRlJFRUxJU1RfTEVOX0RFRkFVTFQ7CiAJcmV0LT5yYnVmX2ZyZWVsaXN0ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKFNTTDNfQlVGX0ZSRUVMSVNUKSk7CkBAIC0xOTM2LDEwICsxOTc5LDE2IEBACiAJYS0+Y29tcF9tZXRob2RzID0gTlVMTDsKICNlbmRpZgogCisgICAgICAgIGlmIChhLT5zcnRwX3Byb2ZpbGVzKQorICAgICAgICAgICAgICAgIHNrX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX2ZyZWUoYS0+c3J0cF9wcm9maWxlcyk7CisKICNpZm5kZWYgT1BFTlNTTF9OT19QU0sKIAlpZiAoYS0+cHNrX2lkZW50aXR5X2hpbnQpCiAJCU9QRU5TU0xfZnJlZShhLT5wc2tfaWRlbnRpdHlfaGludCk7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlTU0xfQ1RYX1NSUF9DVFhfZnJlZShhKTsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQogCWlmIChhLT5jbGllbnRfY2VydF9lbmdpbmUpCiAJCUVOR0lORV9maW5pc2goYS0+Y2xpZW50X2NlcnRfZW5naW5lKTsKQEAgLTIxOTMsMTIgKzIyNDIsMTMgQEAKIAogI2lmbmRlZiBPUEVOU1NMX05PX0VDCiAKLWludCBzc2xfY2hlY2tfc3J2cl9lY2NfY2VydF9hbmRfYWxnKFg1MDkgKngsIGNvbnN0IFNTTF9DSVBIRVIgKmNzKQoraW50IHNzbF9jaGVja19zcnZyX2VjY19jZXJ0X2FuZF9hbGcoWDUwOSAqeCwgU1NMICpzKQogCXsKIAl1bnNpZ25lZCBsb25nIGFsZ19rLCBhbGdfYTsKIAlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CiAJaW50IGtleXNpemUgPSAwOwogCWludCBzaWduYXR1cmVfbmlkID0gMCwgbWRfbmlkID0gMCwgcGtfbmlkID0gMDsKKwljb25zdCBTU0xfQ0lQSEVSICpjcyA9IHMtPnMzLT50bXAubmV3X2NpcGhlcjsKIAogCWFsZ19rID0gY3MtPmFsZ29yaXRobV9ta2V5OwogCWFsZ19hID0gY3MtPmFsZ29yaXRobV9hdXRoOwpAQCAtMjIyOCw3ICsyMjc4LDcgQEAKIAkJCVNTTGVycihTU0xfRl9TU0xfQ0hFQ0tfU1JWUl9FQ0NfQ0VSVF9BTkRfQUxHLCBTU0xfUl9FQ0NfQ0VSVF9OT1RfRk9SX0tFWV9BR1JFRU1FTlQpOwogCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCWlmIChhbGdfayAmIFNTTF9rRUNESGUpCisJCWlmICgoYWxnX2sgJiBTU0xfa0VDREhlKSAmJiBUTFMxX2dldF92ZXJzaW9uKHMpIDwgVExTMV8yX1ZFUlNJT04pCiAJCQl7CiAJCQkvKiBzaWduYXR1cmUgYWxnIG11c3QgYmUgRUNEU0EgKi8KIAkJCWlmIChwa19uaWQgIT0gTklEX1g5XzYyX2lkX2VjUHVibGljS2V5KQpAQCAtMjIzNyw3ICsyMjg3LDcgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9Ci0JCWlmIChhbGdfayAmIFNTTF9rRUNESHIpCisJCWlmICgoYWxnX2sgJiBTU0xfa0VDREhyKSAmJiBUTFMxX2dldF92ZXJzaW9uKHMpIDwgVExTMV8yX1ZFUlNJT04pCiAJCQl7CiAJCQkvKiBzaWduYXR1cmUgYWxnIG11c3QgYmUgUlNBICovCiAKQEAgLTIzMjcsMzQgKzIzNzcsMzYgQEAKIAlyZXR1cm4oYy0+cGtleXNbaV0ueDUwOSk7CiAJfQogCi1FVlBfUEtFWSAqc3NsX2dldF9zaWduX3BrZXkoU1NMICpzLGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcikKK0VWUF9QS0VZICpzc2xfZ2V0X3NpZ25fcGtleShTU0wgKnMsY29uc3QgU1NMX0NJUEhFUiAqY2lwaGVyLCBjb25zdCBFVlBfTUQgKipwbWQpCiAJewogCXVuc2lnbmVkIGxvbmcgYWxnX2E7CiAJQ0VSVCAqYzsKKwlpbnQgaWR4ID0gLTE7CiAKIAlhbGdfYSA9IGNpcGhlci0+YWxnb3JpdGhtX2F1dGg7CiAJYz1zLT5jZXJ0OwogCiAJaWYgKChhbGdfYSAmIFNTTF9hRFNTKSAmJgogCQkoYy0+cGtleXNbU1NMX1BLRVlfRFNBX1NJR05dLnByaXZhdGVrZXkgIT0gTlVMTCkpCi0JCXJldHVybihjLT5wa2V5c1tTU0xfUEtFWV9EU0FfU0lHTl0ucHJpdmF0ZWtleSk7CisJCWlkeCA9IFNTTF9QS0VZX0RTQV9TSUdOOwogCWVsc2UgaWYgKGFsZ19hICYgU1NMX2FSU0EpCiAJCXsKIAkJaWYgKGMtPnBrZXlzW1NTTF9QS0VZX1JTQV9TSUdOXS5wcml2YXRla2V5ICE9IE5VTEwpCi0JCQlyZXR1cm4oYy0+cGtleXNbU1NMX1BLRVlfUlNBX1NJR05dLnByaXZhdGVrZXkpOworCQkJaWR4ID0gU1NMX1BLRVlfUlNBX1NJR047CiAJCWVsc2UgaWYgKGMtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLnByaXZhdGVrZXkgIT0gTlVMTCkKLQkJCXJldHVybihjLT5wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS5wcml2YXRla2V5KTsKLQkJZWxzZQotCQkJcmV0dXJuKE5VTEwpOworCQkJaWR4ID0gU1NMX1BLRVlfUlNBX0VOQzsKIAkJfQogCWVsc2UgaWYgKChhbGdfYSAmIFNTTF9hRUNEU0EpICYmCiAJICAgICAgICAgKGMtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleSAhPSBOVUxMKSkKLQkJcmV0dXJuKGMtPnBrZXlzW1NTTF9QS0VZX0VDQ10ucHJpdmF0ZWtleSk7Ci0JZWxzZSAvKiBpZiAoYWxnX2EgJiBTU0xfYU5VTEwpICovCisJCWlkeCA9IFNTTF9QS0VZX0VDQzsKKwlpZiAoaWR4ID09IC0xKQogCQl7CiAJCVNTTGVycihTU0xfRl9TU0xfR0VUX1NJR05fUEtFWSxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CiAJCXJldHVybihOVUxMKTsKIAkJfQorCWlmIChwbWQpCisJCSpwbWQgPSBjLT5wa2V5c1tpZHhdLmRpZ2VzdDsKKwlyZXR1cm4gYy0+cGtleXNbaWR4XS5wcml2YXRla2V5OwogCX0KIAogdm9pZCBzc2xfdXBkYXRlX2NhY2hlKFNTTCAqcyxpbnQgbW9kZSkKQEAgLTI1NzksNiArMjYzMSwxMCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqc3NsX2dldF92ZXJzaW9uKGludCB2ZXJzaW9uKQogCXsKKwlpZiAodmVyc2lvbiA9PSBUTFMxXzJfVkVSU0lPTikKKwkJcmV0dXJuKCJUTFN2MS4yIik7CisJZWxzZSBpZiAodmVyc2lvbiA9PSBUTFMxXzFfVkVSU0lPTikKKwkJcmV0dXJuKCJUTFN2MS4xIik7CiAJaWYgKHZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQogCQlyZXR1cm4oIlRMU3YxIik7CiAJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCkBAIC0yNjA3LDEyICsyNjYzLDggQEAKIAkJewogCWNhc2UgU1NMMl9WRVJTSU9OOgogCQlyZXR1cm4gU1NMX1RYVF9SU0E7Ci0JY2FzZSBTU0wzX1ZFUlNJT046Ci0JY2FzZSBUTFMxX1ZFUlNJT046Ci0JY2FzZSBEVExTMV9WRVJTSU9OOgotCQlyZXR1cm4gU1NMX0NJUEhFUl9hdXRoZW50aWNhdGlvbl9tZXRob2Qoc3NsLT5zMy0+dG1wLm5ld19jaXBoZXIpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAiVU5LTk9XTiI7CisJCXJldHVybiBTU0xfQ0lQSEVSX2F1dGhlbnRpY2F0aW9uX21ldGhvZChzc2wtPnMzLT50bXAubmV3X2NpcGhlcik7CiAJCX0KIAl9CiAKQEAgLTI3MDAsNiArMjc1Miw3IEBACiAJcmV0LT5pbl9oYW5kc2hha2UgPSBzLT5pbl9oYW5kc2hha2U7CiAJcmV0LT5oYW5kc2hha2VfZnVuYyA9IHMtPmhhbmRzaGFrZV9mdW5jOwogCXJldC0+c2VydmVyID0gcy0+c2VydmVyOworCXJldC0+cmVuZWdvdGlhdGUgPSBzLT5yZW5lZ290aWF0ZTsKIAlyZXQtPm5ld19zZXNzaW9uID0gcy0+bmV3X3Nlc3Npb247CiAJcmV0LT5xdWlldF9zaHV0ZG93biA9IHMtPnF1aWV0X3NodXRkb3duOwogCXJldC0+c2h1dGRvd249cy0+c2h1dGRvd247CkBAIC0yOTY1LDYgKzMwMTgsMTEgQEAKIAlyZXR1cm4oc3NsLT5zdGF0ZSk7CiAJfQogCit2b2lkIFNTTF9zZXRfc3RhdGUoU1NMICpzc2wsIGludCBzdGF0ZSkKKwl7CisJc3NsLT5zdGF0ZSA9IHN0YXRlOworCX0KKwogdm9pZCBTU0xfc2V0X3ZlcmlmeV9yZXN1bHQoU1NMICpzc2wsbG9uZyBhcmcpCiAJewogCXNzbC0+dmVyaWZ5X3Jlc3VsdD1hcmc7CkBAIC0zMjM2LDYgKzMyOTQsMTYgQEAKIAkqaGFzaD1OVUxMOwogfQogCit2b2lkIFNTTF9zZXRfZGVidWcoU1NMICpzLCBpbnQgZGVidWcpCisJeworCXMtPmRlYnVnID0gZGVidWc7CisJfQorCitpbnQgU1NMX2NhY2hlX2hpdChTU0wgKnMpCisJeworCXJldHVybiBzLT5oaXQ7CisJfQorCiAjaWYgZGVmaW5lZChfV0lORExMKSAmJiBkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjE2KQogI2luY2x1ZGUgIi4uL2NyeXB0by9iaW8vYnNzX2ZpbGUuYyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3NsL3NzbF9sb2NsLmggYi9zc2wvc3NsX2xvY2wuaAppbmRleCBjNzhjZTY0Li45ZTgxNzJhIDEwMDY0NAotLS0gYS9zc2wvc3NsX2xvY2wuaAorKysgYi9zc2wvc3NsX2xvY2wuaApAQCAtMTcwLDcgKzE3MCw3IEBACiAjIGRlZmluZSBPUEVOU1NMX0VYVEVSTiBPUEVOU1NMX0VYUE9SVAogI2VuZGlmCiAKLSNkZWZpbmUgUEtDUzFfQ0hFQ0sKKyN1bmRlZiBQS0NTMV9DSEVDSwogCiAjZGVmaW5lIGMybChjLGwpCShsID0gKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpICAgICAsIFwKIAkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwgOCksIFwKQEAgLTI4OSw2ICsyODksNyBAQAogI2RlZmluZSBTU0xfa0VFQ0RICQkweDAwMDAwMDgwTCAvKiBlcGhlbWVyYWwgRUNESCAqLwogI2RlZmluZSBTU0xfa1BTSwkJMHgwMDAwMDEwMEwgLyogUFNLICovCiAjZGVmaW5lIFNTTF9rR09TVCAgICAgICAweDAwMDAwMjAwTCAvKiBHT1NUIGtleSBleGNoYW5nZSAqLworI2RlZmluZSBTU0xfa1NSUCAgICAgICAgMHgwMDAwMDQwMEwgLyogU1JQICovCiAKIC8qIEJpdHMgZm9yIGFsZ29yaXRobV9hdXRoIChzZXJ2ZXIgYXV0aGVudGljYXRpb24pICovCiAjZGVmaW5lIFNTTF9hUlNBCQkweDAwMDAwMDAxTCAvKiBSU0EgYXV0aCAqLwpAQCAtMzE2LDIxICszMTcsMjkgQEAKICNkZWZpbmUgU1NMX0NBTUVMTElBMjU2CQkweDAwMDAwMjAwTAogI2RlZmluZSBTU0xfZUdPU1QyODE0Nzg5Q05UCTB4MDAwMDA0MDBMCiAjZGVmaW5lIFNTTF9TRUVECQkweDAwMDAwODAwTAorI2RlZmluZSBTU0xfQUVTMTI4R0NNCQkweDAwMDAxMDAwTAorI2RlZmluZSBTU0xfQUVTMjU2R0NNCQkweDAwMDAyMDAwTAogCi0jZGVmaW5lIFNTTF9BRVMgICAgICAgIAkJKFNTTF9BRVMxMjh8U1NMX0FFUzI1NikKKyNkZWZpbmUgU1NMX0FFUyAgICAgICAgCQkoU1NMX0FFUzEyOHxTU0xfQUVTMjU2fFNTTF9BRVMxMjhHQ018U1NMX0FFUzI1NkdDTSkKICNkZWZpbmUgU1NMX0NBTUVMTElBCQkoU1NMX0NBTUVMTElBMTI4fFNTTF9DQU1FTExJQTI1NikKIAogCiAvKiBCaXRzIGZvciBhbGdvcml0aG1fbWFjIChzeW1tZXRyaWMgYXV0aGVudGljYXRpb24pICovCisKICNkZWZpbmUgU1NMX01ENQkJCTB4MDAwMDAwMDFMCiAjZGVmaW5lIFNTTF9TSEExCQkweDAwMDAwMDAyTAogI2RlZmluZSBTU0xfR09TVDk0ICAgICAgMHgwMDAwMDAwNEwKICNkZWZpbmUgU1NMX0dPU1Q4OU1BQyAgIDB4MDAwMDAwMDhMCisjZGVmaW5lIFNTTF9TSEEyNTYJCTB4MDAwMDAwMTBMCisjZGVmaW5lIFNTTF9TSEEzODQJCTB4MDAwMDAwMjBMCisvKiBOb3QgYSByZWFsIE1BQywganVzdCBhbiBpbmRpY2F0aW9uIGl0IGlzIHBhcnQgb2YgY2lwaGVyICovCisjZGVmaW5lIFNTTF9BRUFECQkweDAwMDAwMDQwTAogCiAvKiBCaXRzIGZvciBhbGdvcml0aG1fc3NsIChwcm90b2NvbCB2ZXJzaW9uKSAqLwogI2RlZmluZSBTU0xfU1NMVjIJCTB4MDAwMDAwMDFMCiAjZGVmaW5lIFNTTF9TU0xWMwkJMHgwMDAwMDAwMkwKICNkZWZpbmUgU1NMX1RMU1YxCQlTU0xfU1NMVjMJLyogZm9yIG5vdyAqLworI2RlZmluZSBTU0xfVExTVjFfMgkJMHgwMDAwMDAwNEwKIAogCiAvKiBCaXRzIGZvciBhbGdvcml0aG0yIChoYW5kc2hha2UgZGlnZXN0cyBhbmQgb3RoZXIgZXh0cmEgZmxhZ3MpICovCkBAIC0zMzgsMTUgKzM0NywyMSBAQAogI2RlZmluZSBTU0xfSEFORFNIQUtFX01BQ19NRDUgMHgxMAogI2RlZmluZSBTU0xfSEFORFNIQUtFX01BQ19TSEEgMHgyMAogI2RlZmluZSBTU0xfSEFORFNIQUtFX01BQ19HT1NUOTQgMHg0MAorI2RlZmluZSBTU0xfSEFORFNIQUtFX01BQ19TSEEyNTYgMHg4MAorI2RlZmluZSBTU0xfSEFORFNIQUtFX01BQ19TSEEzODQgMHgxMDAKICNkZWZpbmUgU1NMX0hBTkRTSEFLRV9NQUNfREVGQVVMVCAoU1NMX0hBTkRTSEFLRV9NQUNfTUQ1IHwgU1NMX0hBTkRTSEFLRV9NQUNfU0hBKQogCiAvKiBXaGVuIGFkZGluZyBuZXcgZGlnZXN0IGluIHRoZSBzc2xfY2lwaC5jIGFuZCBpbmNyZW1lbnQgU1NNX01EX05VTV9JRFgKICAqIG1ha2Ugc3VyZSB0byB1cGRhdGUgdGhpcyBjb25zdGFudCB0b28gKi8KLSNkZWZpbmUgU1NMX01BWF9ESUdFU1QgNAorI2RlZmluZSBTU0xfTUFYX0RJR0VTVCA2CiAKLSNkZWZpbmUgVExTMV9QUkZfREdTVF9TSElGVCA4CisjZGVmaW5lIFRMUzFfUFJGX0RHU1RfTUFTSwkoMHhmZiA8PCBUTFMxX1BSRl9ER1NUX1NISUZUKQorCisjZGVmaW5lIFRMUzFfUFJGX0RHU1RfU0hJRlQgMTAKICNkZWZpbmUgVExTMV9QUkZfTUQ1IChTU0xfSEFORFNIQUtFX01BQ19NRDUgPDwgVExTMV9QUkZfREdTVF9TSElGVCkKICNkZWZpbmUgVExTMV9QUkZfU0hBMSAoU1NMX0hBTkRTSEFLRV9NQUNfU0hBIDw8IFRMUzFfUFJGX0RHU1RfU0hJRlQpCisjZGVmaW5lIFRMUzFfUFJGX1NIQTI1NiAoU1NMX0hBTkRTSEFLRV9NQUNfU0hBMjU2IDw8IFRMUzFfUFJGX0RHU1RfU0hJRlQpCisjZGVmaW5lIFRMUzFfUFJGX1NIQTM4NCAoU1NMX0hBTkRTSEFLRV9NQUNfU0hBMzg0IDw8IFRMUzFfUFJGX0RHU1RfU0hJRlQpCiAjZGVmaW5lIFRMUzFfUFJGX0dPU1Q5NCAoU1NMX0hBTkRTSEFLRV9NQUNfR09TVDk0IDw8IFRMUzFfUFJGX0RHU1RfU0hJRlQpCiAjZGVmaW5lIFRMUzFfUFJGIChUTFMxX1BSRl9NRDUgfCBUTFMxX1BSRl9TSEExKQogCkBAIC00NTgsNiArNDczLDggQEAKIAlYNTA5ICp4NTA5OwogCVNUQUNLX09GKFg1MDkpICpjZXJ0X2NoYWluOwogCUVWUF9QS0VZICpwcml2YXRla2V5OworCS8qIERpZ2VzdCB0byB1c2Ugd2hlbiBzaWduaW5nICovCisJY29uc3QgRVZQX01EICpkaWdlc3Q7CiAJfSBDRVJUX1BLRVk7CiAKIHR5cGVkZWYgc3RydWN0IGNlcnRfc3QKQEAgLTU1NSw2ICs1NzIsMTAgQEAKIAljb25zdCBjaGFyICpzZXJ2ZXJfZmluaXNoZWRfbGFiZWw7CiAJaW50IHNlcnZlcl9maW5pc2hlZF9sYWJlbF9sZW47CiAJaW50ICgqYWxlcnRfdmFsdWUpKGludCk7CisJaW50ICgqZXhwb3J0X2tleWluZ19tYXRlcmlhbCkoU1NMICosIHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIGludCB1c2VfY29udGV4dCk7CiAJfSBTU0wzX0VOQ19NRVRIT0Q7CiAKICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCkBAIC01OTIsMTEgKzYxMywxMiBAQAogZXh0ZXJuIFNTTDNfRU5DX01FVEhPRCBTU0x2M19lbmNfZGF0YTsKIGV4dGVybiBTU0wzX0VOQ19NRVRIT0QgRFRMU3YxX2VuY19kYXRhOwogCi0jZGVmaW5lIElNUExFTUVOVF90bHMxX21ldGhfZnVuYyhmdW5jX25hbWUsIHNfYWNjZXB0LCBzX2Nvbm5lY3QsIHNfZ2V0X21ldGgpIFwKKyNkZWZpbmUgSU1QTEVNRU5UX3Rsc19tZXRoX2Z1bmModmVyc2lvbiwgZnVuY19uYW1lLCBzX2FjY2VwdCwgc19jb25uZWN0LCBcCisJCQkJc19nZXRfbWV0aCkgXAogY29uc3QgU1NMX01FVEhPRCAqZnVuY19uYW1lKHZvaWQpICBcCiAJeyBcCiAJc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgZnVuY19uYW1lIyNfZGF0YT0geyBcCi0JCVRMUzFfVkVSU0lPTiwgXAorCQl2ZXJzaW9uLCBcCiAJCXRsczFfbmV3LCBcCiAJCXRsczFfY2xlYXIsIFwKIAkJdGxzMV9mcmVlLCBcCkBAIC02NzAsNyArNjkyLDcgQEAKIGNvbnN0IFNTTF9NRVRIT0QgKmZ1bmNfbmFtZSh2b2lkKSAgXAogCXsgXAogCXN0YXRpYyBjb25zdCBTU0xfTUVUSE9EIGZ1bmNfbmFtZSMjX2RhdGE9IHsgXAotCVRMUzFfVkVSU0lPTiwgXAorCVRMUzFfMl9WRVJTSU9OLCBcCiAJdGxzMV9uZXcsIFwKIAl0bHMxX2NsZWFyLCBcCiAJdGxzMV9mcmVlLCBcCkBAIC03NTMsNyArNzc1LDcgQEAKIAkJc3NsM19yZWFkLCBcCiAJCXNzbDNfcGVlaywgXAogCQlzc2wzX3dyaXRlLCBcCi0JCXNzbDNfc2h1dGRvd24sIFwKKwkJZHRsczFfc2h1dGRvd24sIFwKIAkJc3NsM19yZW5lZ290aWF0ZSwgXAogCQlzc2wzX3JlbmVnb3RpYXRlX2NoZWNrLCBcCiAJCWR0bHMxX2dldF9tZXNzYWdlLCBcCkBAIC04MTAsNyArODMyLDcgQEAKIGludCBzc2xfdW5kZWZpbmVkX3ZvaWRfZnVuY3Rpb24odm9pZCk7CiBpbnQgc3NsX3VuZGVmaW5lZF9jb25zdF9mdW5jdGlvbihjb25zdCBTU0wgKnMpOwogWDUwOSAqc3NsX2dldF9zZXJ2ZXJfc2VuZF9jZXJ0KFNTTCAqKTsKLUVWUF9QS0VZICpzc2xfZ2V0X3NpZ25fcGtleShTU0wgKixjb25zdCBTU0xfQ0lQSEVSICopOworRVZQX1BLRVkgKnNzbF9nZXRfc2lnbl9wa2V5KFNTTCAqcyxjb25zdCBTU0xfQ0lQSEVSICpjLCBjb25zdCBFVlBfTUQgKipwbWQpOwogaW50IHNzbF9jZXJ0X3R5cGUoWDUwOSAqeCxFVlBfUEtFWSAqcGtleSk7CiB2b2lkIHNzbF9zZXRfY2VydF9tYXNrcyhDRVJUICpjLCBjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIpOwogU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9nZXRfY2lwaGVyc19ieV9pZChTU0wgKnMpOwpAQCAtMTAyMSw2ICsxMDQzLDcgQEAKIHZvaWQgZHRsczFfZnJlZShTU0wgKnMpOwogdm9pZCBkdGxzMV9jbGVhcihTU0wgKnMpOwogbG9uZyBkdGxzMV9jdHJsKFNTTCAqcyxpbnQgY21kLCBsb25nIGxhcmcsIHZvaWQgKnBhcmcpOworaW50IGR0bHMxX3NodXRkb3duKFNTTCAqcyk7CiAKIGxvbmcgZHRsczFfZ2V0X21lc3NhZ2UoU1NMICpzLCBpbnQgc3QxLCBpbnQgc3RuLCBpbnQgbXQsIGxvbmcgbWF4LCBpbnQgKm9rKTsKIGludCBkdGxzMV9nZXRfcmVjb3JkKFNTTCAqcyk7CkBAIC0xMDQxLDEyICsxMDY0LDE1IEBACiBpbnQgdGxzMV9tYWMoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKm1kLCBpbnQgc25kKTsKIGludCB0bHMxX2dlbmVyYXRlX21hc3Rlcl9zZWNyZXQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpvdXQsCiAJdW5zaWduZWQgY2hhciAqcCwgaW50IGxlbik7CitpbnQgdGxzMV9leHBvcnRfa2V5aW5nX21hdGVyaWFsKFNTTCAqcywgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiwKKwljb25zdCBjaGFyICpsYWJlbCwgc2l6ZV90IGxsZW4sCisJY29uc3QgdW5zaWduZWQgY2hhciAqcCwgc2l6ZV90IHBsZW4sIGludCB1c2VfY29udGV4dCk7CiBpbnQgdGxzMV9hbGVydF9jb2RlKGludCBjb2RlKTsKIGludCBzc2wzX2FsZXJ0X2NvZGUoaW50IGNvZGUpOwogaW50IHNzbF9vayhTU0wgKnMpOwogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAotaW50IHNzbF9jaGVja19zcnZyX2VjY19jZXJ0X2FuZF9hbGcoWDUwOSAqeCwgY29uc3QgU1NMX0NJUEhFUiAqY3MpOworaW50IHNzbF9jaGVja19zcnZyX2VjY19jZXJ0X2FuZF9hbGcoWDUwOSAqeCwgU1NMICpzKTsKICNlbmRpZgogCiBTU0xfQ09NUCAqc3NsM19jb21wX2ZpbmQoU1RBQ0tfT0YoU1NMX0NPTVApICpzaywgaW50IG4pOwpAQCAtMTA2Niw2ICsxMDkyLDEzIEBACiBpbnQgc3NsX2NoZWNrX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMpOwogaW50IHNzbF9jaGVja19zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzKTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKK2ludCB0bHMxX2hlYXJ0YmVhdChTU0wgKnMpOworaW50IGR0bHMxX2hlYXJ0YmVhdChTU0wgKnMpOworaW50IHRsczFfcHJvY2Vzc19oZWFydGJlYXQoU1NMICpzKTsKK2ludCBkdGxzMV9wcm9jZXNzX2hlYXJ0YmVhdChTU0wgKnMpOworI2VuZGlmCisKICNpZmRlZiBPUEVOU1NMX05PX1NIQTI1NgogI2RlZmluZSB0bHNleHRfdGlja19tZAlFVlBfc2hhMQogI2Vsc2UKQEAgLTEwNzMsNiArMTEwNiwxMiBAQAogI2VuZGlmCiBpbnQgdGxzMV9wcm9jZXNzX3RpY2tldChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnNlc3Npb25faWQsIGludCBsZW4sCiAJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQsIFNTTF9TRVNTSU9OICoqcmV0KTsKKworaW50IHRsczEyX2dldF9zaWdhbmRoYXNoKHVuc2lnbmVkIGNoYXIgKnAsIGNvbnN0IEVWUF9QS0VZICpwaywKKwkJCQljb25zdCBFVlBfTUQgKm1kKTsKK2ludCB0bHMxMl9nZXRfc2lnaWQoY29uc3QgRVZQX1BLRVkgKnBrKTsKK2NvbnN0IEVWUF9NRCAqdGxzMTJfZ2V0X2hhc2godW5zaWduZWQgY2hhciBoYXNoX2FsZyk7CisKICNlbmRpZgogRVZQX01EX0NUWCogc3NsX3JlcGxhY2VfaGFzaChFVlBfTURfQ1RYICoqaGFzaCxjb25zdCBFVlBfTUQgKm1kKSA7CiB2b2lkIHNzbF9jbGVhcl9oYXNoX2N0eChFVlBfTURfQ1RYICoqaGFzaCk7CkBAIC0xMDg0LDQgKzExMjMsMTMgQEAKIAkJCQkJaW50IG1heGxlbik7CiBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKmQsIGludCBsZW4sCiAJCQkJCSAgaW50ICphbCk7Citsb25nIHNzbF9nZXRfYWxnb3JpdGhtMihTU0wgKnMpOworaW50IHRsczFfcHJvY2Vzc19zaWdhbGdzKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRzaXplKTsKK2ludCB0bHMxMl9nZXRfcmVxX3NpZ19hbGdzKFNTTCAqcywgdW5zaWduZWQgY2hhciAqcCk7CisKK2ludCBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnAsIGludCAqbGVuLCBpbnQgbWF4bGVuKTsKK2ludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbixpbnQgKmFsKTsKK2ludCBzc2xfYWRkX3NlcnZlcmhlbGxvX3VzZV9zcnRwX2V4dChTU0wgKnMsIHVuc2lnbmVkIGNoYXIgKnAsIGludCAqbGVuLCBpbnQgbWF4bGVuKTsKK2ludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqZCwgaW50IGxlbixpbnQgKmFsKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zc2wvc3NsX3Nlc3MuYyBiL3NzbC9zc2xfc2Vzcy5jCmluZGV4IDkzOTU0ZTQuLjkyMGI3NjMgMTAwNjQ0Ci0tLSBhL3NzbC9zc2xfc2Vzcy5jCisrKyBiL3NzbC9zc2xfc2Vzcy5jCkBAIC0yMTgsNiArMjE4LDkgQEAKIAlzcy0+cHNrX2lkZW50aXR5X2hpbnQ9TlVMTDsKIAlzcy0+cHNrX2lkZW50aXR5PU5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwlzcy0+c3JwX3VzZXJuYW1lPU5VTEw7CisjZW5kaWYKIAlyZXR1cm4oc3MpOwogCX0KIApAQCAtMjI4LDYgKzIzMSwxMSBAQAogCXJldHVybiBzLT5zZXNzaW9uX2lkOwogCX0KIAordW5zaWduZWQgaW50IFNTTF9TRVNTSU9OX2dldF9jb21wcmVzc19pZChjb25zdCBTU0xfU0VTU0lPTiAqcykKKwl7CisJcmV0dXJuIHMtPmNvbXByZXNzX21ldGg7CisJfQorCiAvKiBFdmVuIHdpdGggU1NMdjIsIHdlIGhhdmUgMTYgYnl0ZXMgKDEyOCBiaXRzKSBvZiBzZXNzaW9uIElEIHNwYWNlLiBTU0x2My9UTFN2MQogICogaGFzIDMyIGJ5dGVzICgyNTYgYml0cykuIEFzIHN1Y2gsIGZpbGxpbmcgdGhlIElEIHdpdGggcmFuZG9tIGd1bmsgcmVwZWF0ZWRseQogICogdW50aWwgd2UgaGF2ZSBubyBjb25mbGljdCBpcyBnb2luZyB0byBjb21wbGV0ZSBpbiBvbmUgaXRlcmF0aW9uIHByZXR0eSBtdWNoCkBAIC0zMDcsNiArMzE1LDE2IEBACiAJCQlzcy0+c3NsX3ZlcnNpb249VExTMV9WRVJTSU9OOwogCQkJc3MtPnNlc3Npb25faWRfbGVuZ3RoPVNTTDNfU1NMX1NFU1NJT05fSURfTEVOR1RIOwogCQkJfQorCQllbHNlIGlmIChzLT52ZXJzaW9uID09IFRMUzFfMV9WRVJTSU9OKQorCQkJeworCQkJc3MtPnNzbF92ZXJzaW9uPVRMUzFfMV9WRVJTSU9OOworCQkJc3MtPnNlc3Npb25faWRfbGVuZ3RoPVNTTDNfU1NMX1NFU1NJT05fSURfTEVOR1RIOworCQkJfQorCQllbHNlIGlmIChzLT52ZXJzaW9uID09IFRMUzFfMl9WRVJTSU9OKQorCQkJeworCQkJc3MtPnNzbF92ZXJzaW9uPVRMUzFfMl9WRVJTSU9OOworCQkJc3MtPnNlc3Npb25faWRfbGVuZ3RoPVNTTDNfU1NMX1NFU1NJT05fSURfTEVOR1RIOworCQkJfQogCQllbHNlIGlmIChzLT52ZXJzaW9uID09IERUTFMxX0JBRF9WRVIpCiAJCQl7CiAJCQlzcy0+c3NsX3ZlcnNpb249RFRMUzFfQkFEX1ZFUjsKQEAgLTQzMCw2ICs0NDgsMjUgQEAKIAlyZXR1cm4oMSk7CiAJfQogCisvKiBzc2xfZ2V0X3ByZXYgYXR0ZW1wdHMgdG8gZmluZCBhbiBTU0xfU0VTU0lPTiB0byBiZSB1c2VkIHRvIHJlc3VtZSB0aGlzCisgKiBjb25uZWN0aW9uLiBJdCBpcyBvbmx5IGNhbGxlZCBieSBzZXJ2ZXJzLgorICoKKyAqICAgc2Vzc2lvbl9pZDogcG9pbnRzIGF0IHRoZSBzZXNzaW9uIElEIGluIHRoZSBDbGllbnRIZWxsby4gVGhpcyBjb2RlIHdpbGwKKyAqICAgICAgIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoaXMgaW4gb3JkZXIgdG8gcGFyc2Ugb3V0IHRoZSBzZXNzaW9uIHRpY2tldAorICogICAgICAgZXh0ZW5zaW9uLCBpZiBhbnkuCisgKiAgIGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgc2Vzc2lvbiBJRC4KKyAqICAgbGltaXQ6IGEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgQ2xpZW50SGVsbG8uCisgKgorICogUmV0dXJuczoKKyAqICAgLTE6IGVycm9yCisgKiAgICAwOiBhIHNlc3Npb24gbWF5IGhhdmUgYmVlbiBmb3VuZC4KKyAqCisgKiBTaWRlIGVmZmVjdHM6CisgKiAgIC0gSWYgYSBzZXNzaW9uIGlzIGZvdW5kIHRoZW4gcy0+c2Vzc2lvbiBpcyBwb2ludGVkIGF0IGl0IChhZnRlciBmcmVlaW5nIGFuCisgKiAgICAgZXhpc3Rpbmcgc2Vzc2lvbiBpZiBuZWVkIGJlKSBhbmQgcy0+dmVyaWZ5X3Jlc3VsdCBpcyBzZXQgZnJvbSB0aGUgc2Vzc2lvbi4KKyAqICAgLSBCb3RoIGZvciBuZXcgYW5kIHJlc3VtZWQgc2Vzc2lvbnMsIHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQgaXMgc2V0IHRvIDEKKyAqICAgICBpZiB0aGUgc2VydmVyIHNob3VsZCBpc3N1ZSBhIG5ldyBzZXNzaW9uIHRpY2tldCAodG8gMCBvdGhlcndpc2UpLgorICovCiBpbnQgc3NsX2dldF9wcmV2X3Nlc3Npb24oU1NMICpzLCB1bnNpZ25lZCBjaGFyICpzZXNzaW9uX2lkLCBpbnQgbGVuLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQpCiAJewpAQCAtNDM3LDI3ICs0NzQsMzkgQEAKIAogCVNTTF9TRVNTSU9OICpyZXQ9TlVMTDsKIAlpbnQgZmF0YWwgPSAwOworCWludCB0cnlfc2Vzc2lvbl9jYWNoZSA9IDE7CiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAJaW50IHI7CiAjZW5kaWYKIAogCWlmIChsZW4gPiBTU0xfTUFYX1NTTF9TRVNTSU9OX0lEX0xFTkdUSCkKIAkJZ290byBlcnI7CisKKwlpZiAobGVuID09IDApCisJCXRyeV9zZXNzaW9uX2NhY2hlID0gMDsKKwogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotCXIgPSB0bHMxX3Byb2Nlc3NfdGlja2V0KHMsIHNlc3Npb25faWQsIGxlbiwgbGltaXQsICZyZXQpOwotCWlmIChyID09IC0xKQorCXIgPSB0bHMxX3Byb2Nlc3NfdGlja2V0KHMsIHNlc3Npb25faWQsIGxlbiwgbGltaXQsICZyZXQpOyAvKiBzZXRzIHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQgKi8KKwlzd2l0Y2ggKHIpCiAJCXsKKwljYXNlIC0xOiAvKiBFcnJvciBkdXJpbmcgcHJvY2Vzc2luZyAqLwogCQlmYXRhbCA9IDE7CiAJCWdvdG8gZXJyOworCWNhc2UgMDogLyogTm8gdGlja2V0IGZvdW5kICovCisJY2FzZSAxOiAvKiBaZXJvIGxlbmd0aCB0aWNrZXQgZm91bmQgKi8KKwkJYnJlYWs7IC8qIE9rIHRvIGNhcnJ5IG9uIHByb2Nlc3Npbmcgc2Vzc2lvbiBpZC4gKi8KKwljYXNlIDI6IC8qIFRpY2tldCBmb3VuZCBidXQgbm90IGRlY3J5cHRlZC4gKi8KKwljYXNlIDM6IC8qIFRpY2tldCBkZWNyeXB0ZWQsICpyZXQgaGFzIGJlZW4gc2V0LiAqLworCQl0cnlfc2Vzc2lvbl9jYWNoZSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFib3J0KCk7CiAJCX0KLQllbHNlIGlmIChyID09IDAgfHwgKCFyZXQgJiYgIWxlbikpCi0JCWdvdG8gZXJyOwotCWVsc2UgaWYgKCFyZXQgJiYgIShzLT5zZXNzaW9uX2N0eC0+c2Vzc2lvbl9jYWNoZV9tb2RlICYgU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfTE9PS1VQKSkKLSNlbHNlCi0JaWYgKGxlbiA9PSAwKQotCQlnb3RvIGVycjsKLQlpZiAoIShzLT5zZXNzaW9uX2N0eC0+c2Vzc2lvbl9jYWNoZV9tb2RlICYgU1NMX1NFU1NfQ0FDSEVfTk9fSU5URVJOQUxfTE9PS1VQKSkKICNlbmRpZgorCisJaWYgKHRyeV9zZXNzaW9uX2NhY2hlICYmCisJICAgIHJldCA9PSBOVUxMICYmCisJICAgICEocy0+c2Vzc2lvbl9jdHgtPnNlc3Npb25fY2FjaGVfbW9kZSAmIFNTTF9TRVNTX0NBQ0hFX05PX0lOVEVSTkFMX0xPT0tVUCkpCiAJCXsKIAkJU1NMX1NFU1NJT04gZGF0YTsKIAkJZGF0YS5zc2xfdmVyc2lvbj1zLT52ZXJzaW9uOwpAQCAtNDY4LDIwICs1MTcsMjIgQEAKIAkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19TU0xfQ1RYKTsKIAkJcmV0PWxoX1NTTF9TRVNTSU9OX3JldHJpZXZlKHMtPnNlc3Npb25fY3R4LT5zZXNzaW9ucywmZGF0YSk7CiAJCWlmIChyZXQgIT0gTlVMTCkKLQkJICAgIC8qIGRvbid0IGFsbG93IG90aGVyIHRocmVhZHMgdG8gc3RlYWwgaXQ6ICovCi0JCSAgICBDUllQVE9fYWRkKCZyZXQtPnJlZmVyZW5jZXMsMSxDUllQVE9fTE9DS19TU0xfU0VTU0lPTik7CisJCQl7CisJCQkvKiBkb24ndCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIHN0ZWFsIGl0OiAqLworCQkJQ1JZUFRPX2FkZCgmcmV0LT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfU1NMX1NFU1NJT04pOworCQkJfQogCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfU1NMX0NUWCk7CisJCWlmIChyZXQgPT0gTlVMTCkKKwkJCXMtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX21pc3MrKzsKIAkJfQogCi0JaWYgKHJldCA9PSBOVUxMKQorCWlmICh0cnlfc2Vzc2lvbl9jYWNoZSAmJgorCSAgICByZXQgPT0gTlVMTCAmJgorCSAgICBzLT5zZXNzaW9uX2N0eC0+Z2V0X3Nlc3Npb25fY2IgIT0gTlVMTCkKIAkJewogCQlpbnQgY29weT0xOwogCQotCQlzLT5zZXNzaW9uX2N0eC0+c3RhdHMuc2Vzc19taXNzKys7Ci0JCXJldD1OVUxMOwotCQlpZiAocy0+c2Vzc2lvbl9jdHgtPmdldF9zZXNzaW9uX2NiICE9IE5VTEwKLQkJICAgICYmIChyZXQ9cy0+c2Vzc2lvbl9jdHgtPmdldF9zZXNzaW9uX2NiKHMsc2Vzc2lvbl9pZCxsZW4sJmNvcHkpKQotCQkgICAgICAgIT0gTlVMTCkKKwkJaWYgKChyZXQ9cy0+c2Vzc2lvbl9jdHgtPmdldF9zZXNzaW9uX2NiKHMsc2Vzc2lvbl9pZCxsZW4sJmNvcHkpKSkKIAkJCXsKIAkJCXMtPnNlc3Npb25fY3R4LT5zdGF0cy5zZXNzX2NiX2hpdCsrOwogCkBAIC01MDAsMjMgKzU1MSwxOCBAQAogCQkJCSAqIHRoaW5ncyBhcmUgdmVyeSBzdHJhbmdlICovCiAJCQkJU1NMX0NUWF9hZGRfc2Vzc2lvbihzLT5zZXNzaW9uX2N0eCxyZXQpOwogCQkJfQotCQlpZiAocmV0ID09IE5VTEwpCi0JCQlnb3RvIGVycjsKIAkJfQogCi0JLyogTm93IHJldCBpcyBub24tTlVMTCwgYW5kIHdlIG93biBvbmUgb2YgaXRzIHJlZmVyZW5jZSBjb3VudHMuICovCisJaWYgKHJldCA9PSBOVUxMKQorCQlnb3RvIGVycjsKKworCS8qIE5vdyByZXQgaXMgbm9uLU5VTEwgYW5kIHdlIG93biBvbmUgb2YgaXRzIHJlZmVyZW5jZSBjb3VudHMuICovCiAKIAlpZiAocmV0LT5zaWRfY3R4X2xlbmd0aCAhPSBzLT5zaWRfY3R4X2xlbmd0aAogCSAgICB8fCBtZW1jbXAocmV0LT5zaWRfY3R4LHMtPnNpZF9jdHgscmV0LT5zaWRfY3R4X2xlbmd0aCkpCiAJCXsKLQkJLyogV2UndmUgZm91bmQgdGhlIHNlc3Npb24gbmFtZWQgYnkgdGhlIGNsaWVudCwgYnV0IHdlIGRvbid0CisJCS8qIFdlIGhhdmUgdGhlIHNlc3Npb24gcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQsIGJ1dCB3ZSBkb24ndAogCQkgKiB3YW50IHRvIHVzZSBpdCBpbiB0aGlzIGNvbnRleHQuICovCi0KLSNpZiAwIC8qIFRoZSBjbGllbnQgY2Fubm90IGFsd2F5cyBrbm93IHdoZW4gYSBzZXNzaW9uIGlzIG5vdCBhcHByb3ByaWF0ZSwKLSAgICAgICAqIHNvIHdlIHNob3VsZG4ndCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLiAqLwotCi0JCVNTTGVycihTU0xfRl9TU0xfR0VUX1BSRVZfU0VTU0lPTixTU0xfUl9BVFRFTVBUX1RPX1JFVVNFX1NFU1NJT05fSU5fRElGRkVSRU5UX0NPTlRFWFQpOwotI2VuZGlmCiAJCWdvdG8gZXJyOyAvKiB0cmVhdCBsaWtlIGNhY2hlIG1pc3MgKi8KIAkJfQogCQpAQCAtNTUzLDM5ICs1OTksMzggQEAKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQotI2lmIDAgLyogVGhpcyBpcyB3YXkgdG9vIGxhdGUuICovCi0KLQkvKiBJZiBhIHRocmVhZCBnb3QgdGhlIHNlc3Npb24sIHRoZW4gJ3N3YXBlZCcsIGFuZCBhbm90aGVyIGdvdAotCSAqIGl0IGFuZCB0aGVuIGR1ZSB0byBhIHRpbWUtb3V0IGRlY2lkZWQgdG8gJ09QRU5TU0xfZnJlZScgaXQgd2UgY291bGQKLQkgKiBiZSBpbiB0cm91YmxlLiAgU28gSSdsbCBpbmNyZW1lbnQgaXQgbm93LCB0aGVuIGRvdWJsZSBkZWNyZW1lbnQKLQkgKiBsYXRlciAtIGFtIEkgc3BlYWtpbmcgcnViYmlzaD8uICovCi0JQ1JZUFRPX2FkZCgmcmV0LT5yZWZlcmVuY2VzLDEsQ1JZUFRPX0xPQ0tfU1NMX1NFU1NJT04pOwotI2VuZGlmCi0KIAlpZiAocmV0LT50aW1lb3V0IDwgKGxvbmcpKHRpbWUoTlVMTCkgLSByZXQtPnRpbWUpKSAvKiB0aW1lb3V0ICovCiAJCXsKIAkJcy0+c2Vzc2lvbl9jdHgtPnN0YXRzLnNlc3NfdGltZW91dCsrOwotCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgY2FjaGUgKi8KLQkJU1NMX0NUWF9yZW1vdmVfc2Vzc2lvbihzLT5zZXNzaW9uX2N0eCxyZXQpOworCQlpZiAodHJ5X3Nlc3Npb25fY2FjaGUpCisJCQl7CisJCQkvKiBzZXNzaW9uIHdhcyBmcm9tIHRoZSBjYWNoZSwgc28gcmVtb3ZlIGl0ICovCisJCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uKHMtPnNlc3Npb25fY3R4LHJldCk7CisJCQl9CiAJCWdvdG8gZXJyOwogCQl9CiAKIAlzLT5zZXNzaW9uX2N0eC0+c3RhdHMuc2Vzc19oaXQrKzsKIAotCS8qIHJldC0+dGltZT10aW1lKE5VTEwpOyAqLyAvKiByZXplcm8gdGltZW91dD8gKi8KLQkvKiBhZ2FpbiwganVzdCBsZWF2ZSB0aGUgc2Vzc2lvbiAKLQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBzZXNzaW9uLCB3ZSBoYXZlIGp1c3QgaW5jcmVtZW50ZWQgYW5kCi0JICogdGhlbiBkZWNyZW1lbnRlZCB0aGUgcmVmZXJlbmNlIGNvdW50IDotKSAqLwogCWlmIChzLT5zZXNzaW9uICE9IE5VTEwpCiAJCVNTTF9TRVNTSU9OX2ZyZWUocy0+c2Vzc2lvbik7CiAJcy0+c2Vzc2lvbj1yZXQ7CiAJcy0+dmVyaWZ5X3Jlc3VsdCA9IHMtPnNlc3Npb24tPnZlcmlmeV9yZXN1bHQ7Ci0JcmV0dXJuKDEpOworCXJldHVybiAxOwogCiAgZXJyOgogCWlmIChyZXQgIT0gTlVMTCkKKwkJewogCQlTU0xfU0VTU0lPTl9mcmVlKHJldCk7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisJCWlmICghdHJ5X3Nlc3Npb25fY2FjaGUpCisJCQl7CisJCQkvKiBUaGUgc2Vzc2lvbiB3YXMgZnJvbSBhIHRpY2tldCwgc28gd2Ugc2hvdWxkCisJCQkgKiBpc3N1ZSBhIHRpY2tldCBmb3IgdGhlIG5ldyBzZXNzaW9uICovCisJCQlzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkID0gMTsKKwkJCX0KKyNlbmRpZgorCQl9CiAJaWYgKGZhdGFsKQogCQlyZXR1cm4gLTE7CiAJZWxzZQpAQCAtNzM2LDYgKzc4MSwxMCBAQAogCWlmIChzcy0+cHNrX2lkZW50aXR5ICE9IE5VTEwpCiAJCU9QRU5TU0xfZnJlZShzcy0+cHNrX2lkZW50aXR5KTsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCWlmIChzcy0+c3JwX3VzZXJuYW1lICE9IE5VTEwpCisJCU9QRU5TU0xfZnJlZShzcy0+c3JwX3VzZXJuYW1lKTsKKyNlbmRpZgogCU9QRU5TU0xfY2xlYW5zZShzcyxzaXplb2YoKnNzKSk7CiAJT1BFTlNTTF9mcmVlKHNzKTsKIAl9CkBAIC03NjAsMTAgKzgwOSw2IEBACiAJCQl7CiAJCQlpZiAoIVNTTF9zZXRfc3NsX21ldGhvZChzLG1ldGgpKQogCQkJCXJldHVybigwKTsKLQkJCWlmIChzLT5jdHgtPnNlc3Npb25fdGltZW91dCA9PSAwKQotCQkJCXNlc3Npb24tPnRpbWVvdXQ9U1NMX2dldF9kZWZhdWx0X3RpbWVvdXQocyk7Ci0JCQllbHNlCi0JCQkJc2Vzc2lvbi0+dGltZW91dD1zLT5jdHgtPnNlc3Npb25fdGltZW91dDsKIAkJCX0KIAogI2lmbmRlZiBPUEVOU1NMX05PX0tSQjUKQEAgLTgzMSw2ICs4NzYsMjUgQEAKIAlyZXR1cm4odCk7CiAJfQogCitYNTA5ICpTU0xfU0VTU0lPTl9nZXQwX3BlZXIoU1NMX1NFU1NJT04gKnMpCisJeworCXJldHVybiBzLT5wZWVyOworCX0KKworaW50IFNTTF9TRVNTSU9OX3NldDFfaWRfY29udGV4dChTU0xfU0VTU0lPTiAqcyxjb25zdCB1bnNpZ25lZCBjaGFyICpzaWRfY3R4LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzaWRfY3R4X2xlbikKKwl7CisJaWYoc2lkX2N0eF9sZW4gPiBTU0xfTUFYX1NJRF9DVFhfTEVOR1RIKQorCQl7CisJCVNTTGVycihTU0xfRl9TU0xfU0VTU0lPTl9TRVQxX0lEX0NPTlRFWFQsU1NMX1JfU1NMX1NFU1NJT05fSURfQ09OVEVYVF9UT09fTE9ORyk7CisJCXJldHVybiAwOworCQl9CisJcy0+c2lkX2N0eF9sZW5ndGg9c2lkX2N0eF9sZW47CisJbWVtY3B5KHMtPnNpZF9jdHgsc2lkX2N0eCxzaWRfY3R4X2xlbik7CisKKwlyZXR1cm4gMTsKKwl9CisKIGxvbmcgU1NMX0NUWF9zZXRfdGltZW91dChTU0xfQ1RYICpzLCBsb25nIHQpCiAJewogCWxvbmcgbDsKZGlmZiAtLWdpdCBhL3NzbC9zc2xfdHh0LmMgYi9zc2wvc3NsX3R4dC5jCmluZGV4IDMxMjI0NDAuLjY0NzlkNTIgMTAwNjQ0Ci0tLSBhL3NzbC9zc2xfdHh0LmMKKysrIGIvc3NsL3NzbF90eHQuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCQlzPSJTU0x2MiI7CiAJZWxzZSBpZiAoeC0+c3NsX3ZlcnNpb24gPT0gU1NMM19WRVJTSU9OKQogCQlzPSJTU0x2MyI7CisJZWxzZSBpZiAoeC0+c3NsX3ZlcnNpb24gPT0gVExTMV8yX1ZFUlNJT04pCisJCXM9IlRMU3YxLjIiOworCWVsc2UgaWYgKHgtPnNzbF92ZXJzaW9uID09IFRMUzFfMV9WRVJTSU9OKQorCQlzPSJUTFN2MS4xIjsKIAllbHNlIGlmICh4LT5zc2xfdmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCiAJCXM9IlRMU3YxIjsKIAllbHNlIGlmICh4LT5zc2xfdmVyc2lvbiA9PSBEVExTMV9WRVJTSU9OKQpAQCAtMTg3LDYgKzE5MSwxMCBAQAogCWlmIChCSU9fcHV0cyhicCwiXG4gICAgUFNLIGlkZW50aXR5IGhpbnQ6ICIpIDw9IDApIGdvdG8gZXJyOwogCWlmIChCSU9fcHJpbnRmKGJwLCAiJXMiLCB4LT5wc2tfaWRlbnRpdHlfaGludCA/IHgtPnBza19pZGVudGl0eV9oaW50IDogIk5vbmUiKSA8PSAwKSBnb3RvIGVycjsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCWlmIChCSU9fcHV0cyhicCwiXG4gICAgU1JQIHVzZXJuYW1lOiAiKSA8PSAwKSBnb3RvIGVycjsKKwlpZiAoQklPX3ByaW50ZihicCwgIiVzIiwgeC0+c3JwX3VzZXJuYW1lID8geC0+c3JwX3VzZXJuYW1lIDogIk5vbmUiKSA8PSAwKSBnb3RvIGVycjsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAogCWlmICh4LT50bHNleHRfdGlja19saWZldGltZV9oaW50KQogCQl7CmRpZmYgLS1naXQgYS9zc2wvc3NsdGVzdC5jIGIvc3NsL3NzbHRlc3QuYwppbmRleCBmNmEyYzc5Li5hOTUwYjZlIDEwMDY0NAotLS0gYS9zc2wvc3NsdGVzdC5jCisrKyBiL3NzbC9zc2x0ZXN0LmMKQEAgLTE4MSw2ICsxODEsOSBAQAogI2lmbmRlZiBPUEVOU1NMX05PX0RICiAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisjaW5jbHVkZSA8b3BlbnNzbC9zcnAuaD4KKyNlbmRpZgogI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KIAogI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVECTEgLyogT3IgZ2V0aG9zdG5hbWUgd29uJ3QgYmUgZGVjbGFyZWQgcHJvcGVybHkKQEAgLTI0Niw2ICsyNDksNDkgQEAKIAl1bnNpZ25lZCBpbnQgbWF4X3Bza19sZW4pOwogI2VuZGlmCiAKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKy8qIFNSUCBjbGllbnQgKi8KKy8qIFRoaXMgaXMgYSBjb250ZXh0IHRoYXQgd2UgcGFzcyB0byBhbGwgY2FsbGJhY2tzICovCit0eXBlZGVmIHN0cnVjdCBzcnBfY2xpZW50X2FyZ19zdAorCXsKKwljaGFyICpzcnBwYXNzaW47CisJY2hhciAqc3JwbG9naW47CisJfSBTUlBfQ0xJRU5UX0FSRzsKKworI2RlZmluZSBQV0RfU1RSTEVOIDEwMjQKKworc3RhdGljIGNoYXIgKiBNU19DQUxMQkFDSyBzc2xfZ2l2ZV9zcnBfY2xpZW50X3B3ZF9jYihTU0wgKnMsIHZvaWQgKmFyZykKKwl7CisJU1JQX0NMSUVOVF9BUkcgKnNycF9jbGllbnRfYXJnID0gKFNSUF9DTElFTlRfQVJHICopYXJnOworCXJldHVybiBCVUZfc3RyZHVwKChjaGFyICopc3JwX2NsaWVudF9hcmctPnNycHBhc3Npbik7CisJfQorCisvKiBTUlAgc2VydmVyICovCisvKiBUaGlzIGlzIGEgY29udGV4dCB0aGF0IHdlIHBhc3MgdG8gU1JQIHNlcnZlciBjYWxsYmFja3MgKi8KK3R5cGVkZWYgc3RydWN0IHNycF9zZXJ2ZXJfYXJnX3N0CisJeworCWNoYXIgKmV4cGVjdGVkX3VzZXI7CisJY2hhciAqcGFzczsKKwl9IFNSUF9TRVJWRVJfQVJHOworCitzdGF0aWMgaW50IE1TX0NBTExCQUNLIHNzbF9zcnBfc2VydmVyX3BhcmFtX2NiKFNTTCAqcywgaW50ICphZCwgdm9pZCAqYXJnKQorCXsKKwlTUlBfU0VSVkVSX0FSRyAqIHAgPSAoU1JQX1NFUlZFUl9BUkcgKikgYXJnOworCisJaWYgKHN0cmNtcChwLT5leHBlY3RlZF91c2VyLCBTU0xfZ2V0X3NycF91c2VybmFtZShzKSkgIT0gMCkKKwkJeworCQlmcHJpbnRmKHN0ZGVyciwgIlVzZXIgJXMgZG9lc24ndCBleGlzdFxuIiwgU1NMX2dldF9zcnBfdXNlcm5hbWUocykpOworCQlyZXR1cm4gU1NMM19BTF9GQVRBTDsKKwkJfQorCWlmIChTU0xfc2V0X3NycF9zZXJ2ZXJfcGFyYW1fcHcocyxwLT5leHBlY3RlZF91c2VyLHAtPnBhc3MsIjEwMjQiKTwwKQorCQl7CisJCSphZCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKwkJcmV0dXJuIFNTTDNfQUxfRkFUQUw7CisJCX0KKwlyZXR1cm4gU1NMX0VSUk9SX05PTkU7CisJfQorI2VuZGlmCisKIHN0YXRpYyBCSU8gKmJpb19lcnI9TlVMTDsKIHN0YXRpYyBCSU8gKmJpb19zdGRvdXQ9TlVMTDsKIApAQCAtMjY4LDYgKzMxNCw5IEBACiAJewogCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogc3NsdGVzdCBbYXJncyAuLi5dXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwiXG4iKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwlmcHJpbnRmKHN0ZGVyciwiLUYgICAgICAgICAgICAgLSBydW4gdGVzdCBpbiBGSVBTIG1vZGVcbiIpOworI2VuZGlmCiAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNlcnRpZmljYXRlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwiIC1jbGllbnRfYXV0aCAgLSBkbyBjbGllbnQgYXV0aGVudGljYXRpb25cbiIpOwogCWZwcmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAgICAtIGFsbG93IHByb3h5IGNlcnRpZmljYXRlc1xuIik7CkBAIC0yODksNiArMzM4LDEwIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fUFNLCiAJZnByaW50ZihzdGRlcnIsIiAtcHNrIGFyZyAgICAgIC0gUFNLIGluIGhleCAod2l0aG91dCAweClcbiIpOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJZnByaW50ZihzdGRlcnIsIiAtc3JwdXNlciB1c2VyICAtIFNSUCB1c2VybmFtZSB0byB1c2VcbiIpOworCWZwcmludGYoc3RkZXJyLCIgLXNycHBhc3MgYXJnICAgLSBwYXNzd29yZCBmb3IgJ3VzZXInXG4iKTsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKIAlmcHJpbnRmKHN0ZGVyciwiIC1zc2wyICAgICAgICAgLSB1c2UgU1NMdjJcbiIpOwogI2VuZGlmCkBAIC00ODMsNiArNTM2LDEyIEBACiAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAogCUVDX0tFWSAqZWNkaCA9IE5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKKwkvKiBjbGllbnQgKi8KKwlTUlBfQ0xJRU5UX0FSRyBzcnBfY2xpZW50X2FyZyA9IHtOVUxMLE5VTEx9OworCS8qIHNlcnZlciAqLworCVNSUF9TRVJWRVJfQVJHIHNycF9zZXJ2ZXJfYXJnID0ge05VTEwsTlVMTH07CisjZW5kaWYKIAlpbnQgbm9fZGhlID0gMDsKIAlpbnQgbm9fZWNkaGUgPSAwOwogCWludCBub19wc2sgPSAwOwpAQCAtNDk0LDYgKzU1Myw5IEBACiAjZW5kaWYKIAlTVEFDS19PRihTU0xfQ09NUCkgKnNzbF9jb21wX21ldGhvZHMgPSBOVUxMOwogCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAwOworI2lmZGVmIE9QRU5TU0xfRklQUworCWludCBmaXBzX21vZGU9MDsKKyNlbmRpZgogCiAJdmVyYm9zZSA9IDA7CiAJZGVidWcgPSAwOwpAQCAtNTI1LDcgKzU4NywxNiBAQAogCiAJd2hpbGUgKGFyZ2MgPj0gMSkKIAkJewotCQlpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorCQlpZighc3RyY21wKCphcmd2LCItRiIpKQorCQkJeworI2lmZGVmIE9QRU5TU0xfRklQUworCQkJZmlwc19tb2RlPTE7CisjZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIm5vdCBjb21waWxlZCB3aXRoIEZJUFMgc3VwcG9ydCwgc28gZXhpdHRpbmcgd2l0aG91dCBydW5uaW5nLlxuIik7CisJCQlFWElUKDApOworI2VuZGlmCisJCQl9CisJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKIAkJCXNlcnZlcl9hdXRoPTE7CiAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLWNsaWVudF9hdXRoIikgPT0gMCkKIAkJCWNsaWVudF9hdXRoPTE7CkBAIC01NzksNiArNjUwLDIwIEBACiAJCQlub19wc2s9MTsKICNlbmRpZgogCQkJfQorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1zcnB1c2VyIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXNycF9zZXJ2ZXJfYXJnLmV4cGVjdGVkX3VzZXIgPSBzcnBfY2xpZW50X2FyZy5zcnBsb2dpbj0gKigrK2FyZ3YpOworCQkJdGxzMT0xOworCQkJfQorCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1zcnBwYXNzIikgPT0gMCkKKwkJCXsKKwkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKwkJCXNycF9zZXJ2ZXJfYXJnLnBhc3MgPSBzcnBfY2xpZW50X2FyZy5zcnBwYXNzaW49ICooKythcmd2KTsKKwkJCXRsczE9MTsKKwkJCX0KKyNlbmRpZgogCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1zc2wyIikgPT0gMCkKIAkJCXNzbDI9MTsKIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItdGxzMSIpID09IDApCkBAIC03MzMsNiArODE4LDIwIEBACiAJCUVYSVQoMSk7CiAJCX0KIAorI2lmZGVmIE9QRU5TU0xfRklQUworCWlmKGZpcHNfbW9kZSkKKwkJeworCQlpZighRklQU19tb2RlX3NldCgxKSkKKwkJCXsKKwkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CisJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7CisJCQlFWElUKDEpOworCQkJfQorCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwiKioqIElOIEZJUFMgTU9ERSAqKipcbiIpOworCQl9CisjZW5kaWYKKwogCWlmIChwcmludF90aW1lKQogCQl7CiAJCWlmICghYmlvX3BhaXIpCkBAIC04NzgsNyArOTc3LDExIEBACiAJCQkJfQogCQkJfQogCQllbHNlCisjaWZkZWYgT1BFTlNTTF9OT19FQzJNCisJCQluaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2MTsKKyNlbHNlCiAJCQluaWQgPSBOSURfc2VjdDE2M3IyOworI2VuZGlmCiAKIAkJZWNkaCA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShuaWQpOwogCQlpZiAoZWNkaCA9PSBOVUxMKQpAQCAtOTgxLDYgKzEwODQsMjYgQEAKIAkJCX0KICNlbmRpZgogCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisgICAgICAgIGlmIChzcnBfY2xpZW50X2FyZy5zcnBsb2dpbikKKwkJeworCQlpZiAoIVNTTF9DVFhfc2V0X3NycF91c2VybmFtZShjX2N0eCwgc3JwX2NsaWVudF9hcmcuc3JwbG9naW4pKQorCQkJeworCQkJQklPX3ByaW50ZihiaW9fZXJyLCJVbmFibGUgdG8gc2V0IFNSUCB1c2VybmFtZVxuIik7CisJCQlnb3RvIGVuZDsKKwkJCX0KKwkJU1NMX0NUWF9zZXRfc3JwX2NiX2FyZyhjX2N0eCwmc3JwX2NsaWVudF9hcmcpOworCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayhjX2N0eCwgc3NsX2dpdmVfc3JwX2NsaWVudF9wd2RfY2IpOworCQkvKlNTTF9DVFhfc2V0X3NycF9zdHJlbmd0aChjX2N0eCwgc3JwX2NsaWVudF9hcmcuc3RyZW5ndGgpOyovCisJCX0KKworCWlmIChzcnBfc2VydmVyX2FyZy5leHBlY3RlZF91c2VyICE9IE5VTEwpCisJCXsKKwkJU1NMX0NUWF9zZXRfdmVyaWZ5KHNfY3R4LFNTTF9WRVJJRllfTk9ORSx2ZXJpZnlfY2FsbGJhY2spOworCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnKHNfY3R4LCAmc3JwX3NlcnZlcl9hcmcpOworCQlTU0xfQ1RYX3NldF9zcnBfdXNlcm5hbWVfY2FsbGJhY2soc19jdHgsIHNzbF9zcnBfc2VydmVyX3BhcmFtX2NiKTsKKwkJfQorI2VuZGlmCiAKIAljX3NzbD1TU0xfbmV3KGNfY3R4KTsKIAlzX3NzbD1TU0xfbmV3KHNfY3R4KTsKQEAgLTIyMDUsMTUgKzIzMjgsNyBAQAogCQl9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQotIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLQlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLQkJRklQU19hbGxvd19tZDUoMSk7Ci0jIGVuZGlmCiAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7Ci0jIGlmZGVmIE9QRU5TU0xfRklQUwotCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQotCQlGSVBTX2FsbG93X21kNSgwKTsKLSMgZW5kaWYKICNlbmRpZgogCiAJaWYgKGNiX2FyZy0+cHJveHlfYXV0aCkKZGlmZiAtLWdpdCBhL3NzbC90MV9jbG50LmMgYi9zc2wvdDFfY2xudC5jCmluZGV4IGM4N2FmMTcuLjU3ODYxN2UgMTAwNjQ0Ci0tLSBhL3NzbC90MV9jbG50LmMKKysrIGIvc3NsL3QxX2NsbnQuYwpAQCAtNjYsMTMgKzY2LDI2IEBACiBzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqdGxzMV9nZXRfY2xpZW50X21ldGhvZChpbnQgdmVyKTsKIHN0YXRpYyBjb25zdCBTU0xfTUVUSE9EICp0bHMxX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpCiAJeworCWlmICh2ZXIgPT0gVExTMV8yX1ZFUlNJT04pCisJCXJldHVybiBUTFN2MV8yX2NsaWVudF9tZXRob2QoKTsKKwlpZiAodmVyID09IFRMUzFfMV9WRVJTSU9OKQorCQlyZXR1cm4gVExTdjFfMV9jbGllbnRfbWV0aG9kKCk7CiAJaWYgKHZlciA9PSBUTFMxX1ZFUlNJT04pCi0JCXJldHVybihUTFN2MV9jbGllbnRfbWV0aG9kKCkpOwotCWVsc2UKLQkJcmV0dXJuKE5VTEwpOworCQlyZXR1cm4gVExTdjFfY2xpZW50X21ldGhvZCgpOworCXJldHVybiBOVUxMOwogCX0KIAotSU1QTEVNRU5UX3RsczFfbWV0aF9mdW5jKFRMU3YxX2NsaWVudF9tZXRob2QsCitJTVBMRU1FTlRfdGxzX21ldGhfZnVuYyhUTFMxXzJfVkVSU0lPTiwgVExTdjFfMl9jbGllbnRfbWV0aG9kLAorCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKKwkJCXNzbDNfY29ubmVjdCwKKwkJCXRsczFfZ2V0X2NsaWVudF9tZXRob2QpCisKK0lNUExFTUVOVF90bHNfbWV0aF9mdW5jKFRMUzFfMV9WRVJTSU9OLCBUTFN2MV8xX2NsaWVudF9tZXRob2QsCisJCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAorCQkJc3NsM19jb25uZWN0LAorCQkJdGxzMV9nZXRfY2xpZW50X21ldGhvZCkKKworSU1QTEVNRU5UX3Rsc19tZXRoX2Z1bmMoVExTMV9WRVJTSU9OLCBUTFN2MV9jbGllbnRfbWV0aG9kLAogCQkJc3NsX3VuZGVmaW5lZF9mdW5jdGlvbiwKIAkJCXNzbDNfY29ubmVjdCwKIAkJCXRsczFfZ2V0X2NsaWVudF9tZXRob2QpCmRpZmYgLS1naXQgYS9zc2wvdDFfZW5jLmMgYi9zc2wvdDFfZW5jLmMKaW5kZXggNzkzZWE0My4uMjAxY2E5YSAxMDA2NDQKLS0tIGEvc3NsL3QxX2VuYy5jCisrKyBiL3NzbC90MV9lbmMuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgogI2lmZGVmIEtTU0xfREVCVUcKICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgogI2VuZGlmCkBAIC0xNTgsNjggKzE1OSw3NSBAQAogCQkJdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb2xlbikKIAl7CiAJaW50IGNodW5rOwotCXVuc2lnbmVkIGludCBqOwotCUhNQUNfQ1RYIGN0eDsKLQlITUFDX0NUWCBjdHhfdG1wOworCXNpemVfdCBqOworCUVWUF9NRF9DVFggY3R4LCBjdHhfdG1wOworCUVWUF9QS0VZICptYWNfa2V5OwogCXVuc2lnbmVkIGNoYXIgQTFbRVZQX01BWF9NRF9TSVpFXTsKLQl1bnNpZ25lZCBpbnQgQTFfbGVuOworCXNpemVfdCBBMV9sZW47CiAJaW50IHJldCA9IDA7CiAJCiAJY2h1bms9RVZQX01EX3NpemUobWQpOwogCU9QRU5TU0xfYXNzZXJ0KGNodW5rID49IDApOwogCi0JSE1BQ19DVFhfaW5pdCgmY3R4KTsKLQlITUFDX0NUWF9pbml0KCZjdHhfdG1wKTsKLQlpZiAoIUhNQUNfSW5pdF9leCgmY3R4LHNlYyxzZWNfbGVuLG1kLCBOVUxMKSkKKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisJRVZQX01EX0NUWF9pbml0KCZjdHhfdG1wKTsKKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworCW1hY19rZXkgPSBFVlBfUEtFWV9uZXdfbWFjX2tleShFVlBfUEtFWV9ITUFDLCBOVUxMLCBzZWMsIHNlY19sZW4pOworCWlmICghbWFjX2tleSkKIAkJZ290byBlcnI7Ci0JaWYgKCFITUFDX0luaXRfZXgoJmN0eF90bXAsc2VjLHNlY19sZW4sbWQsIE5VTEwpKQorCWlmICghRVZQX0RpZ2VzdFNpZ25Jbml0KCZjdHgsTlVMTCxtZCwgTlVMTCwgbWFjX2tleSkpCiAJCWdvdG8gZXJyOwotCWlmIChzZWVkMSAhPSBOVUxMICYmICFITUFDX1VwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbikpCisJaWYgKCFFVlBfRGlnZXN0U2lnbkluaXQoJmN0eF90bXAsTlVMTCxtZCwgTlVMTCwgbWFjX2tleSkpCiAJCWdvdG8gZXJyOwotCWlmIChzZWVkMiAhPSBOVUxMICYmICFITUFDX1VwZGF0ZSgmY3R4LHNlZWQyLHNlZWQyX2xlbikpCisJaWYgKHNlZWQxICYmICFFVlBfRGlnZXN0U2lnblVwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbikpCiAJCWdvdG8gZXJyOwotCWlmIChzZWVkMyAhPSBOVUxMICYmICFITUFDX1VwZGF0ZSgmY3R4LHNlZWQzLHNlZWQzX2xlbikpCisJaWYgKHNlZWQyICYmICFFVlBfRGlnZXN0U2lnblVwZGF0ZSgmY3R4LHNlZWQyLHNlZWQyX2xlbikpCiAJCWdvdG8gZXJyOwotCWlmIChzZWVkNCAhPSBOVUxMICYmICFITUFDX1VwZGF0ZSgmY3R4LHNlZWQ0LHNlZWQ0X2xlbikpCisJaWYgKHNlZWQzICYmICFFVlBfRGlnZXN0U2lnblVwZGF0ZSgmY3R4LHNlZWQzLHNlZWQzX2xlbikpCiAJCWdvdG8gZXJyOwotCWlmIChzZWVkNSAhPSBOVUxMICYmICFITUFDX1VwZGF0ZSgmY3R4LHNlZWQ1LHNlZWQ1X2xlbikpCisJaWYgKHNlZWQ0ICYmICFFVlBfRGlnZXN0U2lnblVwZGF0ZSgmY3R4LHNlZWQ0LHNlZWQ0X2xlbikpCiAJCWdvdG8gZXJyOwotCWlmICghSE1BQ19GaW5hbCgmY3R4LEExLCZBMV9sZW4pKQorCWlmIChzZWVkNSAmJiAhRVZQX0RpZ2VzdFNpZ25VcGRhdGUoJmN0eCxzZWVkNSxzZWVkNV9sZW4pKQorCQlnb3RvIGVycjsKKwlpZiAoIUVWUF9EaWdlc3RTaWduRmluYWwoJmN0eCxBMSwmQTFfbGVuKSkKIAkJZ290byBlcnI7CiAKIAlmb3IgKDs7KQogCQl7Ci0JCWlmICghSE1BQ19Jbml0X2V4KCZjdHgsTlVMTCwwLE5VTEwsTlVMTCkpIC8qIHJlLWluaXQgKi8KKwkJLyogUmVpbml0IG1hYyBjb250ZXh0cyAqLworCQlpZiAoIUVWUF9EaWdlc3RTaWduSW5pdCgmY3R4LE5VTEwsbWQsIE5VTEwsIG1hY19rZXkpKQogCQkJZ290byBlcnI7Ci0JCWlmICghSE1BQ19Jbml0X2V4KCZjdHhfdG1wLE5VTEwsMCxOVUxMLE5VTEwpKSAvKiByZS1pbml0ICovCisJCWlmICghRVZQX0RpZ2VzdFNpZ25Jbml0KCZjdHhfdG1wLE5VTEwsbWQsIE5VTEwsIG1hY19rZXkpKQogCQkJZ290byBlcnI7Ci0JCWlmICghSE1BQ19VcGRhdGUoJmN0eCxBMSxBMV9sZW4pKQorCQlpZiAoIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsQTEsQTFfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoIUhNQUNfVXBkYXRlKCZjdHhfdG1wLEExLEExX2xlbikpCisJCWlmICghRVZQX0RpZ2VzdFNpZ25VcGRhdGUoJmN0eF90bXAsQTEsQTFfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc2VlZDEgIT0gTlVMTCAmJiAhSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVkMV9sZW4pKQorCQlpZiAoc2VlZDEgJiYgIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsc2VlZDEsc2VlZDFfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc2VlZDIgIT0gTlVMTCAmJiAhSE1BQ19VcGRhdGUoJmN0eCxzZWVkMixzZWVkMl9sZW4pKQorCQlpZiAoc2VlZDIgJiYgIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsc2VlZDIsc2VlZDJfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc2VlZDMgIT0gTlVMTCAmJiAhSE1BQ19VcGRhdGUoJmN0eCxzZWVkMyxzZWVkM19sZW4pKQorCQlpZiAoc2VlZDMgJiYgIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsc2VlZDMsc2VlZDNfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc2VlZDQgIT0gTlVMTCAmJiAhSE1BQ19VcGRhdGUoJmN0eCxzZWVkNCxzZWVkNF9sZW4pKQorCQlpZiAoc2VlZDQgJiYgIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsc2VlZDQsc2VlZDRfbGVuKSkKIAkJCWdvdG8gZXJyOwotCQlpZiAoc2VlZDUgIT0gTlVMTCAmJiAhSE1BQ19VcGRhdGUoJmN0eCxzZWVkNSxzZWVkNV9sZW4pKQorCQlpZiAoc2VlZDUgJiYgIUVWUF9EaWdlc3RTaWduVXBkYXRlKCZjdHgsc2VlZDUsc2VlZDVfbGVuKSkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChvbGVuID4gY2h1bmspCiAJCQl7Ci0JCQlpZiAoIUhNQUNfRmluYWwoJmN0eCxvdXQsJmopKQorCQkJaWYgKCFFVlBfRGlnZXN0U2lnbkZpbmFsKCZjdHgsb3V0LCZqKSkKIAkJCQlnb3RvIGVycjsKIAkJCW91dCs9ajsKIAkJCW9sZW4tPWo7Ci0JCQlpZiAoIUhNQUNfRmluYWwoJmN0eF90bXAsQTEsJkExX2xlbikpIC8qIGNhbGMgdGhlIG5leHQgQTEgdmFsdWUgKi8KKwkJCS8qIGNhbGMgdGhlIG5leHQgQTEgdmFsdWUgKi8KKwkJCWlmICghRVZQX0RpZ2VzdFNpZ25GaW5hbCgmY3R4X3RtcCxBMSwmQTFfbGVuKSkKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJZWxzZQkvKiBsYXN0IG9uZSAqLwogCQkJewotCQkJaWYgKCFITUFDX0ZpbmFsKCZjdHgsQTEsJkExX2xlbikpCisJCQlpZiAoIUVWUF9EaWdlc3RTaWduRmluYWwoJmN0eCxBMSwmQTFfbGVuKSkKIAkJCQlnb3RvIGVycjsKIAkJCW1lbWNweShvdXQsQTEsb2xlbik7CiAJCQlicmVhazsKQEAgLTIyNyw4ICsyMzUsOSBAQAogCQl9CiAJcmV0ID0gMTsKIGVycjoKLQlITUFDX0NUWF9jbGVhbnVwKCZjdHgpOwotCUhNQUNfQ1RYX2NsZWFudXAoJmN0eF90bXApOworCUVWUF9QS0VZX2ZyZWUobWFjX2tleSk7CisJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4X3RtcCk7CiAJT1BFTlNTTF9jbGVhbnNlKEExLHNpemVvZihBMSkpOwogCXJldHVybiByZXQ7CiAJfQpAQCAtMjU2LDYgKzI2NSw4IEBACiAJCWlmICgobTw8VExTMV9QUkZfREdTVF9TSElGVCkgJiBkaWdlc3RfbWFzaykgY291bnQrKzsKIAl9CQogCWxlbj1zbGVuL2NvdW50OworCWlmIChjb3VudCA9PSAxKQorCQlzbGVuID0gMDsKIAlTMT1zZWM7CiAJbWVtc2V0KG91dDEsMCxvbGVuKTsKIAlmb3IgKGlkeD0wO3NzbF9nZXRfaGFuZHNoYWtlX2RpZ2VzdChpZHgsJm0sJm1kKTtpZHgrKykgewpAQCAtMjg0LDcgKzI5NSw3IEBACiAJICAgICB1bnNpZ25lZCBjaGFyICp0bXAsIGludCBudW0pCiAJewogCWludCByZXQ7Ci0JcmV0ID0gdGxzMV9QUkYocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yLAorCXJldCA9IHRsczFfUFJGKHNzbF9nZXRfYWxnb3JpdGhtMihzKSwKIAkJIFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNULFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNUX1NJWkUsCiAJCSBzLT5zMy0+c2VydmVyX3JhbmRvbSxTU0wzX1JBTkRPTV9TSVpFLAogCQkgcy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKQEAgLTM1OCw3ICszNjksNyBAQAogCQl7CiAJCWlmIChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIgJiBUTFMxX1NUUkVBTV9NQUMpCiAJCQlzLT5tYWNfZmxhZ3MgfD0gU1NMX01BQ19GTEFHX1JFQURfTUFDX1NUUkVBTTsKLQkJCWVsc2UKKwkJZWxzZQogCQkJcy0+bWFjX2ZsYWdzICY9IH5TU0xfTUFDX0ZMQUdfUkVBRF9NQUNfU1RSRUFNOwogCiAJCWlmIChzLT5lbmNfcmVhZF9jdHggIT0gTlVMTCkKQEAgLTQ0NSw3ICs0NTYsMTEgQEAKIAlqPWlzX2V4cG9ydCA/IChjbCA8IFNTTF9DX0VYUE9SVF9LRVlMRU5HVEgocy0+czMtPnRtcC5uZXdfY2lwaGVyKSA/CiAJICAgICAgICAgICAgICAgY2wgOiBTU0xfQ19FWFBPUlRfS0VZTEVOR1RIKHMtPnMzLT50bXAubmV3X2NpcGhlcikpIDogY2w7CiAJLyogV2FzIGo9KGV4cCk/NTpFVlBfQ0lQSEVSX2tleV9sZW5ndGgoYyk7ICovCi0Jaz1FVlBfQ0lQSEVSX2l2X2xlbmd0aChjKTsKKwkvKiBJZiBHQ00gbW9kZSBvbmx5IHBhcnQgb2YgSVYgY29tZXMgZnJvbSBQUkYgKi8KKwlpZiAoRVZQX0NJUEhFUl9tb2RlKGMpID09IEVWUF9DSVBIX0dDTV9NT0RFKQorCQlrID0gRVZQX0dDTV9UTFNfRklYRURfSVZfTEVOOworCWVsc2UKKwkJaz1FVlBfQ0lQSEVSX2l2X2xlbmd0aChjKTsKIAlpZiAoCSh3aGljaCA9PSBTU0wzX0NIQU5HRV9DSVBIRVJfQ0xJRU5UX1dSSVRFKSB8fAogCQkod2hpY2ggPT0gU1NMM19DSEFOR0VfQ0lQSEVSX1NFUlZFUl9SRUFEKSkKIAkJewpAQCAtNDc0LDEwICs0ODksMTQgQEAKIAkJfQogCiAJbWVtY3B5KG1hY19zZWNyZXQsbXMsaSk7Ci0JbWFjX2tleSA9IEVWUF9QS0VZX25ld19tYWNfa2V5KG1hY190eXBlLCBOVUxMLAotCQkJbWFjX3NlY3JldCwqbWFjX3NlY3JldF9zaXplKTsKLQlFVlBfRGlnZXN0U2lnbkluaXQobWFjX2N0eCxOVUxMLG0sTlVMTCxtYWNfa2V5KTsKLQlFVlBfUEtFWV9mcmVlKG1hY19rZXkpOworCisJaWYgKCEoRVZQX0NJUEhFUl9mbGFncyhjKSZFVlBfQ0lQSF9GTEFHX0FFQURfQ0lQSEVSKSkKKwkJeworCQltYWNfa2V5ID0gRVZQX1BLRVlfbmV3X21hY19rZXkobWFjX3R5cGUsIE5VTEwsCisJCQkJbWFjX3NlY3JldCwqbWFjX3NlY3JldF9zaXplKTsKKwkJRVZQX0RpZ2VzdFNpZ25Jbml0KG1hY19jdHgsTlVMTCxtLE5VTEwsbWFjX2tleSk7CisJCUVWUF9QS0VZX2ZyZWUobWFjX2tleSk7CisJCX0KICNpZmRlZiBUTFNfREVCVUcKIHByaW50Zigid2hpY2ggPSAlMDRYXG5tYWMga2V5PSIsd2hpY2gpOwogeyBpbnQgejsgZm9yICh6PTA7IHo8aTsgeisrKSBwcmludGYoIiUwMlglYyIsbXNbel0sKCh6KzEpJTE2KT8nICc6J1xuJyk7IH0KQEAgLTQ4Nyw3ICs1MDYsNyBAQAogCQkvKiBJbiBoZXJlIEkgc2V0IGJvdGggdGhlIHJlYWQgYW5kIHdyaXRlIGtleS9pdiB0byB0aGUKIAkJICogc2FtZSB2YWx1ZSBzaW5jZSBvbmx5IHRoZSBjb3JyZWN0IG9uZSB3aWxsIGJlIHVzZWQgOi0pLgogCQkgKi8KLQkJaWYgKCF0bHMxX1BSRihzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIsCisJCWlmICghdGxzMV9QUkYoc3NsX2dldF9hbGdvcml0aG0yKHMpLAogCQkJCWV4cF9sYWJlbCxleHBfbGFiZWxfbGVuLAogCQkJCXMtPnMzLT5jbGllbnRfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUsCiAJCQkJcy0+czMtPnNlcnZlcl9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKQEAgLTQ5OCw3ICs1MTcsNyBAQAogCiAJCWlmIChrID4gMCkKIAkJCXsKLQkJCWlmICghdGxzMV9QUkYocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yLAorCQkJaWYgKCF0bHMxX1BSRihzc2xfZ2V0X2FsZ29yaXRobTIocyksCiAJCQkJCVRMU19NRF9JVl9CTE9DS19DT05TVCxUTFNfTURfSVZfQkxPQ0tfQ09OU1RfU0laRSwKIAkJCQkJcy0+czMtPmNsaWVudF9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKIAkJCQkJcy0+czMtPnNlcnZlcl9yYW5kb20sU1NMM19SQU5ET01fU0laRSwKQEAgLTUyNCw3ICs1NDMsMTkgQEAKIAl9CiAjZW5kaWYJLyogS1NTTF9ERUJVRyAqLwogCi0JRVZQX0NpcGhlckluaXRfZXgoZGQsYyxOVUxMLGtleSxpdiwod2hpY2ggJiBTU0wzX0NDX1dSSVRFKSk7CisJaWYgKEVWUF9DSVBIRVJfbW9kZShjKSA9PSBFVlBfQ0lQSF9HQ01fTU9ERSkKKwkJeworCQlFVlBfQ2lwaGVySW5pdF9leChkZCxjLE5VTEwsa2V5LE5VTEwsKHdoaWNoICYgU1NMM19DQ19XUklURSkpOworCQlFVlBfQ0lQSEVSX0NUWF9jdHJsKGRkLCBFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELCBrLCBpdik7CisJCX0KKwllbHNlCQorCQlFVlBfQ2lwaGVySW5pdF9leChkZCxjLE5VTEwsa2V5LGl2LCh3aGljaCAmIFNTTDNfQ0NfV1JJVEUpKTsKKworCS8qIE5lZWRlZCBmb3IgImNvbXBvc2l0ZSIgQUVBRHMsIHN1Y2ggYXMgUkM0LUhNQUMtTUQ1ICovCisJaWYgKChFVlBfQ0lQSEVSX2ZsYWdzKGMpJkVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIpICYmICptYWNfc2VjcmV0X3NpemUpCisJCUVWUF9DSVBIRVJfQ1RYX2N0cmwoZGQsRVZQX0NUUkxfQUVBRF9TRVRfTUFDX0tFWSwKKwkJCQkqbWFjX3NlY3JldF9zaXplLG1hY19zZWNyZXQpOworCiAjaWZkZWYgVExTX0RFQlVHCiBwcmludGYoIndoaWNoID0gJTA0WFxua2V5PSIsd2hpY2gpOwogeyBpbnQgejsgZm9yICh6PTA7IHo8RVZQX0NJUEhFUl9rZXlfbGVuZ3RoKGMpOyB6KyspIHByaW50ZigiJTAyWCVjIixrZXlbel0sKCh6KzEpJTE2KT8nICc6J1xuJyk7IH0KQEAgLTYwNiw3ICs2MzcsOCBAQAogeyBpbnQgejsgZm9yICh6PTA7IHo8bnVtOyB6KyspIHByaW50ZigiJTAyWCVjIixwMVt6XSwoKHorMSklMTYpPycgJzonXG4nKTsgfQogI2VuZGlmCiAKLQlpZiAoIShzLT5vcHRpb25zICYgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUykpCisJaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMpCisJCSYmIHMtPm1ldGhvZC0+dmVyc2lvbiA8PSBUTFMxX1ZFUlNJT04pCiAJCXsKIAkJLyogZW5hYmxlIHZ1bG5lcmFiaWxpdHkgY291bnRlcm1lYXN1cmUgZm9yIENCQyBjaXBoZXJzIHdpdGgKIAkJICoga25vd24tSVYgcHJvYmxlbSAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9+Ym9kby90bHMtY2JjLnR4dCkKQEAgLTY0MCwxNCArNjcyLDE0IEBACiAJU1NMM19SRUNPUkQgKnJlYzsKIAlFVlBfQ0lQSEVSX0NUWCAqZHM7CiAJdW5zaWduZWQgbG9uZyBsOwotCWludCBicyxpLGlpLGosayxuPTA7CisJaW50IGJzLGksaWksaixrLHBhZD0wOwogCWNvbnN0IEVWUF9DSVBIRVIgKmVuYzsKIAogCWlmIChzZW5kKQogCQl7CiAJCWlmIChFVlBfTURfQ1RYX21kKHMtPndyaXRlX2hhc2gpKQogCQkJewotCQkJbj1FVlBfTURfQ1RYX3NpemUocy0+d3JpdGVfaGFzaCk7CisJCQlpbnQgbj1FVlBfTURfQ1RYX3NpemUocy0+d3JpdGVfaGFzaCk7CiAJCQlPUEVOU1NMX2Fzc2VydChuID49IDApOwogCQkJfQogCQlkcz1zLT5lbmNfd3JpdGVfY3R4OwpAQCAtNjU1LDEzICs2ODcsMzQgQEAKIAkJaWYgKHMtPmVuY193cml0ZV9jdHggPT0gTlVMTCkKIAkJCWVuYz1OVUxMOwogCQllbHNlCisJCQl7CisJCQlpbnQgaXZsZW47CiAJCQllbmM9RVZQX0NJUEhFUl9DVFhfY2lwaGVyKHMtPmVuY193cml0ZV9jdHgpOworCQkJLyogRm9yIFRMU3YxLjEgYW5kIGxhdGVyIGV4cGxpY2l0IElWICovCisJCQlpZiAocy0+dmVyc2lvbiA+PSBUTFMxXzFfVkVSU0lPTgorCQkJCSYmIEVWUF9DSVBIRVJfbW9kZShlbmMpID09IEVWUF9DSVBIX0NCQ19NT0RFKQorCQkJCWl2bGVuID0gRVZQX0NJUEhFUl9pdl9sZW5ndGgoZW5jKTsKKwkJCWVsc2UKKwkJCQlpdmxlbiA9IDA7CisJCQlpZiAoaXZsZW4gPiAxKQorCQkJCXsKKwkJCQlpZiAoIHJlYy0+ZGF0YSAhPSByZWMtPmlucHV0KQorCQkJCQkvKiB3ZSBjYW4ndCB3cml0ZSBpbnRvIHRoZSBpbnB1dCBzdHJlYW06CisJCQkJCSAqIENhbiB0aGlzIGV2ZXIgaGFwcGVuPz8gKHN0ZXZlKQorCQkJCQkgKi8KKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiJXM6JWQ6IHJlYy0+ZGF0YSAhPSByZWMtPmlucHV0XG4iLAorCQkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQllbHNlIGlmIChSQU5EX2J5dGVzKHJlYy0+aW5wdXQsIGl2bGVuKSA8PSAwKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQogCQl9CiAJZWxzZQogCQl7CiAJCWlmIChFVlBfTURfQ1RYX21kKHMtPnJlYWRfaGFzaCkpCiAJCQl7Ci0JCQluPUVWUF9NRF9DVFhfc2l6ZShzLT5yZWFkX2hhc2gpOworCQkJaW50IG49RVZQX01EX0NUWF9zaXplKHMtPnJlYWRfaGFzaCk7CiAJCQlPUEVOU1NMX2Fzc2VydChuID49IDApOwogCQkJfQogCQlkcz1zLT5lbmNfcmVhZF9jdHg7CkBAIC02ODcsNyArNzQwLDQzIEBACiAJCWw9cmVjLT5sZW5ndGg7CiAJCWJzPUVWUF9DSVBIRVJfYmxvY2tfc2l6ZShkcy0+Y2lwaGVyKTsKIAotCQlpZiAoKGJzICE9IDEpICYmIHNlbmQpCisJCWlmIChFVlBfQ0lQSEVSX2ZsYWdzKGRzLT5jaXBoZXIpJkVWUF9DSVBIX0ZMQUdfQUVBRF9DSVBIRVIpCisJCQl7CisJCQl1bnNpZ25lZCBjaGFyIGJ1ZlsxM10sKnNlcTsKKworCQkJc2VxID0gc2VuZD9zLT5zMy0+d3JpdGVfc2VxdWVuY2U6cy0+czMtPnJlYWRfc2VxdWVuY2U7CisKKwkJCWlmIChzLT52ZXJzaW9uID09IERUTFMxX1ZFUlNJT04gfHwgcy0+dmVyc2lvbiA9PSBEVExTMV9CQURfVkVSKQorCQkJCXsKKwkJCQl1bnNpZ25lZCBjaGFyIGR0bHNzZXFbOV0sKnA9ZHRsc3NlcTsKKworCQkJCXMybihzZW5kP3MtPmQxLT53X2Vwb2NoOnMtPmQxLT5yX2Vwb2NoLHApOworCQkJCW1lbWNweShwLCZzZXFbMl0sNik7CisJCQkJbWVtY3B5KGJ1ZixkdGxzc2VxLDgpOworCQkJCX0KKwkJCWVsc2UKKwkJCQl7CisJCQkJbWVtY3B5KGJ1ZixzZXEsOCk7CisJCQkJZm9yIChpPTc7IGk+PTA7IGktLSkJLyogaW5jcmVtZW50ICovCisJCQkJCXsKKwkJCQkJKytzZXFbaV07CisJCQkJCWlmIChzZXFbaV0gIT0gMCkgYnJlYWs7IAorCQkJCQl9CisJCQkJfQorCisJCQlidWZbOF09cmVjLT50eXBlOworCQkJYnVmWzldPSh1bnNpZ25lZCBjaGFyKShzLT52ZXJzaW9uPj44KTsKKwkJCWJ1ZlsxMF09KHVuc2lnbmVkIGNoYXIpKHMtPnZlcnNpb24pOworCQkJYnVmWzExXT1yZWMtPmxlbmd0aD4+ODsKKwkJCWJ1ZlsxMl09cmVjLT5sZW5ndGgmMHhmZjsKKwkJCXBhZD1FVlBfQ0lQSEVSX0NUWF9jdHJsKGRzLEVWUF9DVFJMX0FFQURfVExTMV9BQUQsMTMsYnVmKTsKKwkJCWlmIChzZW5kKQorCQkJCXsKKwkJCQlsKz1wYWQ7CisJCQkJcmVjLT5sZW5ndGgrPXBhZDsKKwkJCQl9CisJCQl9CisJCWVsc2UgaWYgKChicyAhPSAxKSAmJiBzZW5kKQogCQkJewogCQkJaT1icy0oKGludClsJWJzKTsKIApAQCAtNzI4LDEzICs4MTcsMjUgQEAKIAkJCXsKIAkJCWlmIChsID09IDAgfHwgbCVicyAhPSAwKQogCQkJCXsKKwkJCQlpZiAocy0+dmVyc2lvbiA+PSBUTFMxXzFfVkVSU0lPTikKKwkJCQkJcmV0dXJuIC0xOwogCQkJCVNTTGVycihTU0xfRl9UTFMxX0VOQyxTU0xfUl9CTE9DS19DSVBIRVJfUEFEX0lTX1dST05HKTsKIAkJCQlzc2wzX3NlbmRfYWxlcnQocyxTU0wzX0FMX0ZBVEFMLFNTTF9BRF9ERUNSWVBUSU9OX0ZBSUxFRCk7CiAJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQogCQkKLQkJRVZQX0NpcGhlcihkcyxyZWMtPmRhdGEscmVjLT5pbnB1dCxsKTsKKwkJaSA9IEVWUF9DaXBoZXIoZHMscmVjLT5kYXRhLHJlYy0+aW5wdXQsbCk7CisJCWlmICgoRVZQX0NJUEhFUl9mbGFncyhkcy0+Y2lwaGVyKSZFVlBfQ0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIpCisJCQkJCQk/KGk8MCkKKwkJCQkJCTooaT09MCkpCisJCQlyZXR1cm4gLTE7CS8qIEFFQUQgY2FuIGZhaWwgdG8gdmVyaWZ5IE1BQyAqLworCQlpZiAoRVZQX0NJUEhFUl9tb2RlKGVuYykgPT0gRVZQX0NJUEhfR0NNX01PREUgJiYgIXNlbmQpCisJCQl7CisJCQlyZWMtPmRhdGEgKz0gRVZQX0dDTV9UTFNfRVhQTElDSVRfSVZfTEVOOworCQkJcmVjLT5pbnB1dCArPSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU47CisJCQlyZWMtPmxlbmd0aCAtPSBFVlBfR0NNX1RMU19FWFBMSUNJVF9JVl9MRU47CisJCQl9CiAKICNpZmRlZiBLU1NMX0RFQlVHCiAJCXsKQEAgLTc4NCw4ICs4ODUsMTcgQEAKIAkJCQkJcmV0dXJuIC0xOwogCQkJCQl9CiAJCQkJfQotCQkJcmVjLT5sZW5ndGgtPWk7CisJCQlyZWMtPmxlbmd0aCAtPWk7CisJCQlpZiAocy0+dmVyc2lvbiA+PSBUTFMxXzFfVkVSU0lPTgorCQkJCSYmIEVWUF9DSVBIRVJfQ1RYX21vZGUoZHMpID09IEVWUF9DSVBIX0NCQ19NT0RFKQorCQkJCXsKKwkJCQlyZWMtPmRhdGEgKz0gYnM7ICAgIC8qIHNraXAgdGhlIGV4cGxpY2l0IElWICovCisJCQkJcmVjLT5pbnB1dCArPSBiczsKKwkJCQlyZWMtPmxlbmd0aCAtPSBiczsKKwkJCQl9CiAJCQl9CisJCWlmIChwYWQgJiYgIXNlbmQpCisJCQlyZWMtPmxlbmd0aCAtPSBwYWQ7CiAJCX0KIAlyZXR1cm4oMSk7CiAJfQpAQCAtODQxLDcgKzk1MSw3IEBACiAKIAlmb3IgKGlkeD0wO3NzbF9nZXRfaGFuZHNoYWtlX2RpZ2VzdChpZHgsJm1hc2ssJm1kKTtpZHgrKykKIAkJewotCQlpZiAobWFzayAmIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikKKwkJaWYgKG1hc2sgJiBzc2xfZ2V0X2FsZ29yaXRobTIocykpCiAJCQl7CiAJCQlpbnQgaGFzaHNpemUgPSBFVlBfTURfc2l6ZShtZCk7CiAJCQlpZiAoaGFzaHNpemUgPCAwIHx8IGhhc2hzaXplID4gKGludCkoc2l6ZW9mIGJ1ZiAtIChzaXplX3QpKHEtYnVmKSkpCkBAIC04NjAsNyArOTcwLDcgQEAKIAkJCX0KIAkJfQogCQkKLQlpZiAoIXRsczFfUFJGKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiwKKwlpZiAoIXRsczFfUFJGKHNzbF9nZXRfYWxnb3JpdGhtMihzKSwKIAkJCXN0cixzbGVuLCBidWYsKGludCkocS1idWYpLCBOVUxMLDAsIE5VTEwsMCwgTlVMTCwwLAogCQkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSxzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5X2xlbmd0aCwKIAkJCW91dCxidWYyLHNpemVvZiBidWYyKSkKQEAgLTk3MCw2ICsxMDgwLDcgQEAKIAljb25zdCB2b2lkICpjbyA9IE5VTEwsICpzbyA9IE5VTEw7CiAJaW50IGNvbCA9IDAsIHNvbCA9IDA7CiAKKwogI2lmZGVmIEtTU0xfREVCVUcKIAlwcmludGYgKCJ0bHMxX2dlbmVyYXRlX21hc3Rlcl9zZWNyZXQoJXAsJXAsICVwLCAlZClcbiIsIHMsb3V0LCBwLGxlbik7CiAjZW5kaWYJLyogS1NTTF9ERUJVRyAqLwpAQCAtOTg2LDcgKzEwOTcsNyBAQAogCQl9CiAjZW5kaWYKIAotCXRsczFfUFJGKHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMiwKKwl0bHMxX1BSRihzc2xfZ2V0X2FsZ29yaXRobTIocyksCiAJCVRMU19NRF9NQVNURVJfU0VDUkVUX0NPTlNULFRMU19NRF9NQVNURVJfU0VDUkVUX0NPTlNUX1NJWkUsCiAJCXMtPnMzLT5jbGllbnRfcmFuZG9tLFNTTDNfUkFORE9NX1NJWkUsCiAJCWNvLCBjb2wsCkBAIC05OTQsNiArMTEwNSwxNiBAQAogCQlzbywgc29sLAogCQlwLGxlbiwKIAkJcy0+c2Vzc2lvbi0+bWFzdGVyX2tleSxidWZmLHNpemVvZiBidWZmKTsKKyNpZmRlZiBTU0xfREVCVUcKKwlmcHJpbnRmKHN0ZGVyciwgIlByZW1hc3RlciBTZWNyZXQ6XG4iKTsKKwlCSU9fZHVtcF9mcChzdGRlcnIsIChjaGFyICopcCwgbGVuKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNsaWVudCBSYW5kb206XG4iKTsKKwlCSU9fZHVtcF9mcChzdGRlcnIsIChjaGFyICopcy0+czMtPmNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpOworCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIFJhbmRvbTpcbiIpOworCUJJT19kdW1wX2ZwKHN0ZGVyciwgKGNoYXIgKilzLT5zMy0+c2VydmVyX3JhbmRvbSwgU1NMM19SQU5ET01fU0laRSk7CisJZnByaW50ZihzdGRlcnIsICJNYXN0ZXIgU2VjcmV0OlxuIik7CisJQklPX2R1bXBfZnAoc3RkZXJyLCAoY2hhciAqKXMtPnNlc3Npb24tPm1hc3Rlcl9rZXksIFNTTDNfTUFTVEVSX1NFQ1JFVF9TSVpFKTsKKyNlbmRpZgogCiAjaWZkZWYgS1NTTF9ERUJVRwogCXByaW50ZiAoInRsczFfZ2VuZXJhdGVfbWFzdGVyX3NlY3JldCgpIGNvbXBsZXRlXG4iKTsKQEAgLTEwMDEsNiArMTEyMiw5NSBAQAogCXJldHVybihTU0wzX01BU1RFUl9TRUNSRVRfU0laRSk7CiAJfQogCitpbnQgdGxzMV9leHBvcnRfa2V5aW5nX21hdGVyaWFsKFNTTCAqcywgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiwKKwkgY29uc3QgY2hhciAqbGFiZWwsIHNpemVfdCBsbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjb250ZXh0LAorCSBzaXplX3QgY29udGV4dGxlbiwgaW50IHVzZV9jb250ZXh0KQorCXsKKwl1bnNpZ25lZCBjaGFyICpidWZmOworCXVuc2lnbmVkIGNoYXIgKnZhbCA9IE5VTEw7CisJc2l6ZV90IHZhbGxlbiwgY3VycmVudHZhbHBvczsKKwlpbnQgcnY7CisKKyNpZmRlZiBLU1NMX0RFQlVHCisJcHJpbnRmICgidGxzMV9leHBvcnRfa2V5aW5nX21hdGVyaWFsKCVwLCVwLCVkLCVzLCVkLCVwLCVkKVxuIiwgcywgb3V0LCBvbGVuLCBsYWJlbCwgbGxlbiwgcCwgcGxlbik7CisjZW5kaWYJLyogS1NTTF9ERUJVRyAqLworCisJYnVmZiA9IE9QRU5TU0xfbWFsbG9jKG9sZW4pOworCWlmIChidWZmID09IE5VTEwpIGdvdG8gZXJyMjsKKworCS8qIGNvbnN0cnVjdCBQUkYgYXJndW1lbnRzCisJICogd2UgY29uc3RydWN0IHRoZSBQUkYgYXJndW1lbnQgb3Vyc2VsZiByYXRoZXIgdGhhbiBwYXNzaW5nIHNlcGFyYXRlCisJICogdmFsdWVzIGludG8gdGhlIFRMUyBQUkYgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmNhdGVuYXRpb24gb2YgdmFsdWVzCisJICogZG9lcyBub3QgY3JlYXRlIGEgcHJvaGliaXRlZCBsYWJlbC4KKwkgKi8KKwl2YWxsZW4gPSBsbGVuICsgU1NMM19SQU5ET01fU0laRSAqIDI7CisJaWYgKHVzZV9jb250ZXh0KQorCQl7CisJCXZhbGxlbiArPSAyICsgY29udGV4dGxlbjsKKwkJfQorCisJdmFsID0gT1BFTlNTTF9tYWxsb2ModmFsbGVuKTsKKwlpZiAodmFsID09IE5VTEwpIGdvdG8gZXJyMjsKKwljdXJyZW50dmFscG9zID0gMDsKKwltZW1jcHkodmFsICsgY3VycmVudHZhbHBvcywgKHVuc2lnbmVkIGNoYXIgKikgbGFiZWwsIGxsZW4pOworCWN1cnJlbnR2YWxwb3MgKz0gbGxlbjsKKwltZW1jcHkodmFsICsgY3VycmVudHZhbHBvcywgcy0+czMtPmNsaWVudF9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpOworCWN1cnJlbnR2YWxwb3MgKz0gU1NMM19SQU5ET01fU0laRTsKKwltZW1jcHkodmFsICsgY3VycmVudHZhbHBvcywgcy0+czMtPnNlcnZlcl9yYW5kb20sIFNTTDNfUkFORE9NX1NJWkUpOworCWN1cnJlbnR2YWxwb3MgKz0gU1NMM19SQU5ET01fU0laRTsKKworCWlmICh1c2VfY29udGV4dCkKKwkJeworCQl2YWxbY3VycmVudHZhbHBvc10gPSAoY29udGV4dGxlbiA+PiA4KSAmIDB4ZmY7CisJCWN1cnJlbnR2YWxwb3MrKzsKKwkJdmFsW2N1cnJlbnR2YWxwb3NdID0gY29udGV4dGxlbiAmIDB4ZmY7CisJCWN1cnJlbnR2YWxwb3MrKzsKKwkJaWYgKChjb250ZXh0bGVuID4gMCkgfHwgKGNvbnRleHQgIT0gTlVMTCkpCisJCQl7CisJCQltZW1jcHkodmFsICsgY3VycmVudHZhbHBvcywgY29udGV4dCwgY29udGV4dGxlbik7CisJCQl9CisJCX0KKworCS8qIGRpc2FsbG93IHByb2hpYml0ZWQgbGFiZWxzCisJICogbm90ZSB0aGF0IFNTTDNfUkFORE9NX1NJWkUgPiBtYXgocHJvaGliaXRlZCBsYWJlbCBsZW4pID0KKwkgKiAxNSwgc28gc2l6ZSBvZiB2YWwgPiBtYXgocHJvaGliaXRlZCBsYWJlbCBsZW4pID0gMTUgYW5kIHRoZQorCSAqIGNvbXBhcmlzb25zIHdvbid0IGhhdmUgYnVmZmVyIG92ZXJmbG93CisJICovCisJaWYgKG1lbWNtcCh2YWwsIFRMU19NRF9DTElFTlRfRklOSVNIX0NPTlNULAorCQkgVExTX01EX0NMSUVOVF9GSU5JU0hfQ09OU1RfU0laRSkgPT0gMCkgZ290byBlcnIxOworCWlmIChtZW1jbXAodmFsLCBUTFNfTURfU0VSVkVSX0ZJTklTSF9DT05TVCwKKwkJIFRMU19NRF9TRVJWRVJfRklOSVNIX0NPTlNUX1NJWkUpID09IDApIGdvdG8gZXJyMTsKKwlpZiAobWVtY21wKHZhbCwgVExTX01EX01BU1RFUl9TRUNSRVRfQ09OU1QsCisJCSBUTFNfTURfTUFTVEVSX1NFQ1JFVF9DT05TVF9TSVpFKSA9PSAwKSBnb3RvIGVycjE7CisJaWYgKG1lbWNtcCh2YWwsIFRMU19NRF9LRVlfRVhQQU5TSU9OX0NPTlNULAorCQkgVExTX01EX0tFWV9FWFBBTlNJT05fQ09OU1RfU0laRSkgPT0gMCkgZ290byBlcnIxOworCisJcnYgPSB0bHMxX1BSRihzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIsCisJCSAgICAgIHZhbCwgdmFsbGVuLAorCQkgICAgICBOVUxMLCAwLAorCQkgICAgICBOVUxMLCAwLAorCQkgICAgICBOVUxMLCAwLAorCQkgICAgICBOVUxMLCAwLAorCQkgICAgICBzLT5zZXNzaW9uLT5tYXN0ZXJfa2V5LHMtPnNlc3Npb24tPm1hc3Rlcl9rZXlfbGVuZ3RoLAorCQkgICAgICBvdXQsYnVmZixvbGVuKTsKKworI2lmZGVmIEtTU0xfREVCVUcKKwlwcmludGYgKCJ0bHMxX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwoKSBjb21wbGV0ZVxuIik7CisjZW5kaWYJLyogS1NTTF9ERUJVRyAqLworCWdvdG8gcmV0OworZXJyMToKKwlTU0xlcnIoU1NMX0ZfVExTMV9FWFBPUlRfS0VZSU5HX01BVEVSSUFMLCBTU0xfUl9UTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTCk7CisJcnYgPSAwOworCWdvdG8gcmV0OworZXJyMjoKKwlTU0xlcnIoU1NMX0ZfVExTMV9FWFBPUlRfS0VZSU5HX01BVEVSSUFMLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7CisJcnYgPSAwOworcmV0OgorCWlmIChidWZmICE9IE5VTEwpIE9QRU5TU0xfZnJlZShidWZmKTsKKwlpZiAodmFsICE9IE5VTEwpIE9QRU5TU0xfZnJlZSh2YWwpOworCXJldHVybihydik7CisJfQorCiBpbnQgdGxzMV9hbGVydF9jb2RlKGludCBjb2RlKQogCXsKIAlzd2l0Y2ggKGNvZGUpCkBAIC0xMDQyLDQgKzEyNTIsMyBAQAogCWRlZmF1bHQ6CQkJcmV0dXJuKC0xKTsKIAkJfQogCX0KLQpkaWZmIC0tZ2l0IGEvc3NsL3QxX2xpYi5jIGIvc3NsL3QxX2xpYi5jCmluZGV4IDBlNGM0MDguLjU3ZDExMDcgMTAwNjQ0Ci0tLSBhL3NzbC90MV9saWIuYworKysgYi9zc2wvdDFfbGliLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CiAjaW5jbHVkZSAic3NsX2xvY2wuaCIKIAogY29uc3QgY2hhciB0bHMxX3ZlcnNpb25fc3RyW109IlRMU3YxIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CkBAIC0xMzYsNiArMTM3LDcgQEAKIAlUTFNfTURfQ0xJRU5UX0ZJTklTSF9DT05TVCxUTFNfTURfQ0xJRU5UX0ZJTklTSF9DT05TVF9TSVpFLAogCVRMU19NRF9TRVJWRVJfRklOSVNIX0NPTlNULFRMU19NRF9TRVJWRVJfRklOSVNIX0NPTlNUX1NJWkUsCiAJdGxzMV9hbGVydF9jb2RlLAorCXRsczFfZXhwb3J0X2tleWluZ19tYXRlcmlhbCwKIAl9OwogCiBsb25nIHRsczFfZGVmYXVsdF90aW1lb3V0KHZvaWQpCkBAIC0xNjYsMTAgKzE2OCwxMSBAQAogdm9pZCB0bHMxX2NsZWFyKFNTTCAqcykKIAl7CiAJc3NsM19jbGVhcihzKTsKLQlzLT52ZXJzaW9uPVRMUzFfVkVSU0lPTjsKKwlzLT52ZXJzaW9uID0gcy0+bWV0aG9kLT52ZXJzaW9uOwogCX0KIAogI2lmbmRlZiBPUEVOU1NMX05PX0VDCisKIHN0YXRpYyBpbnQgbmlkX2xpc3RbXSA9CiAJewogCQlOSURfc2VjdDE2M2sxLCAvKiBzZWN0MTYzazEgKDEpICovCkBAIC0xOTgsNyArMjAxLDM2IEBACiAJCU5JRF9zZWNwMzg0cjEsIC8qIHNlY3AzODRyMSAoMjQpICovCiAJCU5JRF9zZWNwNTIxcjEgIC8qIHNlY3A1MjFyMSAoMjUpICovCQogCX07Ci0JCisKK3N0YXRpYyBpbnQgcHJlZl9saXN0W10gPQorCXsKKwkJTklEX3NlY3Q1NzFyMSwgLyogc2VjdDU3MXIxICgxNCkgKi8gCisJCU5JRF9zZWN0NTcxazEsIC8qIHNlY3Q1NzFrMSAoMTMpICovIAorCQlOSURfc2VjcDUyMXIxLCAvKiBzZWNwNTIxcjEgKDI1KSAqLwkKKwkJTklEX3NlY3Q0MDlrMSwgLyogc2VjdDQwOWsxICgxMSkgKi8gCisJCU5JRF9zZWN0NDA5cjEsIC8qIHNlY3Q0MDlyMSAoMTIpICovCisJCU5JRF9zZWNwMzg0cjEsIC8qIHNlY3AzODRyMSAoMjQpICovCisJCU5JRF9zZWN0MjgzazEsIC8qIHNlY3QyODNrMSAoOSkgKi8KKwkJTklEX3NlY3QyODNyMSwgLyogc2VjdDI4M3IxICgxMCkgKi8gCisJCU5JRF9zZWNwMjU2azEsIC8qIHNlY3AyNTZrMSAoMjIpICovIAorCQlOSURfWDlfNjJfcHJpbWUyNTZ2MSwgLyogc2VjcDI1NnIxICgyMykgKi8gCisJCU5JRF9zZWN0MjM5azEsIC8qIHNlY3QyMzlrMSAoOCkgKi8gCisJCU5JRF9zZWN0MjMzazEsIC8qIHNlY3QyMzNrMSAoNikgKi8KKwkJTklEX3NlY3QyMzNyMSwgLyogc2VjdDIzM3IxICg3KSAqLyAKKwkJTklEX3NlY3AyMjRrMSwgLyogc2VjcDIyNGsxICgyMCkgKi8gCisJCU5JRF9zZWNwMjI0cjEsIC8qIHNlY3AyMjRyMSAoMjEpICovCisJCU5JRF9zZWN0MTkzcjEsIC8qIHNlY3QxOTNyMSAoNCkgKi8gCisJCU5JRF9zZWN0MTkzcjIsIC8qIHNlY3QxOTNyMiAoNSkgKi8gCisJCU5JRF9zZWNwMTkyazEsIC8qIHNlY3AxOTJrMSAoMTgpICovCisJCU5JRF9YOV82Ml9wcmltZTE5MnYxLCAvKiBzZWNwMTkycjEgKDE5KSAqLyAKKwkJTklEX3NlY3QxNjNrMSwgLyogc2VjdDE2M2sxICgxKSAqLworCQlOSURfc2VjdDE2M3IxLCAvKiBzZWN0MTYzcjEgKDIpICovCisJCU5JRF9zZWN0MTYzcjIsIC8qIHNlY3QxNjNyMiAoMykgKi8KKwkJTklEX3NlY3AxNjBrMSwgLyogc2VjcDE2MGsxICgxNSkgKi8KKwkJTklEX3NlY3AxNjByMSwgLyogc2VjcDE2MHIxICgxNikgKi8gCisJCU5JRF9zZWNwMTYwcjIsIC8qIHNlY3AxNjByMiAoMTcpICovIAorCX07CisKIGludCB0bHMxX2VjX2N1cnZlX2lkMm5pZChpbnQgY3VydmVfaWQpCiAJewogCS8qIEVDQyBjdXJ2ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy1lY2MtMTIudHh0IChPY3QuIDE3LCAyMDA1KSAqLwpAQCAtMjcwLDYgKzMwMiw2NCBAQAogI2VuZGlmIC8qIE9QRU5TU0xfTk9fRUMgKi8KIAogI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorCisvKiBMaXN0IG9mIHN1cHBvcnRlZCBzaWduYXR1cmUgYWxnb3JpdGhtcyBhbmQgaGFzaGVzLiBTaG91bGQgbWFrZSB0aGlzCisgKiBjdXN0b21pc2FibGUgYXQgc29tZSBwb2ludCwgZm9yIG5vdyBpbmNsdWRlIGV2ZXJ5dGhpbmcgd2Ugc3VwcG9ydC4KKyAqLworCisjaWZkZWYgT1BFTlNTTF9OT19SU0EKKyNkZWZpbmUgdGxzZXh0X3NpZ2FsZ19yc2EobWQpIC8qICovCisjZWxzZQorI2RlZmluZSB0bHNleHRfc2lnYWxnX3JzYShtZCkgbWQsIFRMU0VYVF9zaWduYXR1cmVfcnNhLAorI2VuZGlmCisKKyNpZmRlZiBPUEVOU1NMX05PX0RTQQorI2RlZmluZSB0bHNleHRfc2lnYWxnX2RzYShtZCkgLyogKi8KKyNlbHNlCisjZGVmaW5lIHRsc2V4dF9zaWdhbGdfZHNhKG1kKSBtZCwgVExTRVhUX3NpZ25hdHVyZV9kc2EsCisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfTk9fRUNEU0EKKyNkZWZpbmUgdGxzZXh0X3NpZ2FsZ19lY2RzYShtZCkgLyogKi8KKyNlbHNlCisjZGVmaW5lIHRsc2V4dF9zaWdhbGdfZWNkc2EobWQpIG1kLCBUTFNFWFRfc2lnbmF0dXJlX2VjZHNhLAorI2VuZGlmCisKKyNkZWZpbmUgdGxzZXh0X3NpZ2FsZyhtZCkgXAorCQl0bHNleHRfc2lnYWxnX3JzYShtZCkgXAorCQl0bHNleHRfc2lnYWxnX2RzYShtZCkgXAorCQl0bHNleHRfc2lnYWxnX2VjZHNhKG1kKQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB0bHMxMl9zaWdhbGdzW10gPSB7CisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisJdGxzZXh0X3NpZ2FsZyhUTFNFWFRfaGFzaF9zaGE1MTIpCisJdGxzZXh0X3NpZ2FsZyhUTFNFWFRfaGFzaF9zaGEzODQpCisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKwl0bHNleHRfc2lnYWxnKFRMU0VYVF9oYXNoX3NoYTI1NikKKwl0bHNleHRfc2lnYWxnKFRMU0VYVF9oYXNoX3NoYTIyNCkKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorCXRsc2V4dF9zaWdhbGcoVExTRVhUX2hhc2hfc2hhMSkKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX01ENQorCXRsc2V4dF9zaWdhbGdfcnNhKFRMU0VYVF9oYXNoX21kNSkKKyNlbmRpZgorfTsKKworaW50IHRsczEyX2dldF9yZXFfc2lnX2FsZ3MoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwKQorCXsKKwlzaXplX3Qgc2xlbiA9IHNpemVvZih0bHMxMl9zaWdhbGdzKTsKKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKwkvKiBJZiBGSVBTIG1vZGUgZG9uJ3QgaW5jbHVkZSBNRDUgd2hpY2ggaXMgbGFzdCAqLworCWlmIChGSVBTX21vZGUoKSkKKwkJc2xlbiAtPSAyOworI2VuZGlmCisJaWYgKHApCisJCW1lbWNweShwLCB0bHMxMl9zaWdhbGdzLCBzbGVuKTsKKwlyZXR1cm4gKGludClzbGVuOworCX0KKwogdW5zaWduZWQgY2hhciAqc3NsX2FkZF9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBjaGFyICpsaW1pdCkKIAl7CiAJaW50IGV4dGRhdGFsZW49MDsKQEAgLTMxNyw3ICs0MDcsNyBAQAogCQl9CiAKICAgICAgICAgLyogQWRkIFJJIGlmIHJlbmVnb3RpYXRpbmcgKi8KLSAgICAgICAgaWYgKHMtPm5ld19zZXNzaW9uKQorICAgICAgICBpZiAocy0+cmVuZWdvdGlhdGUpCiAgICAgICAgICAgewogICAgICAgICAgIGludCBlbDsKICAgICAgICAgICAKQEAgLTM0MSw2ICs0MzEsMzQgQEAKICAgICAgICAgICByZXQgKz0gZWw7CiAgICAgICAgIH0KIAorI2lmbmRlZiBPUEVOU1NMX05PX1NSUAorCS8qIEFkZCBTUlAgdXNlcm5hbWUgaWYgdGhlcmUgaXMgb25lICovCisJaWYgKHMtPnNycF9jdHgubG9naW4gIT0gTlVMTCkKKwkJeyAvKiBBZGQgVExTIGV4dGVuc2lvbiBTUlAgdXNlcm5hbWUgdG8gdGhlIENsaWVudCBIZWxsbyBtZXNzYWdlICovCisKKwkJaW50IGxvZ2luX2xlbiA9IHN0cmxlbihzLT5zcnBfY3R4LmxvZ2luKTsJCisJCWlmIChsb2dpbl9sZW4gPiAyNTUgfHwgbG9naW5fbGVuID09IDApCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCXJldHVybiBOVUxMOworCQkJfSAKKworCQkvKiBjaGVjayBmb3IgZW5vdWdoIHNwYWNlLgorCQkgICA0IGZvciB0aGUgc3JwIHR5cGUgdHlwZSBhbmQgZW50ZW5zaW9uIGxlbmd0aAorCQkgICAxIGZvciB0aGUgc3JwIHVzZXIgaWRlbnRpdHkKKwkJICAgKyBzcnAgdXNlciBpZGVudGl0eSBsZW5ndGggCisJCSovCisJCWlmICgobGltaXQgLSByZXQgLSA1IC0gbG9naW5fbGVuKSA8IDApIHJldHVybiBOVUxMOyAKKworCQkvKiBmaWxsIGluIHRoZSBleHRlbnNpb24gKi8KKwkJczJuKFRMU0VYVF9UWVBFX3NycCxyZXQpOworCQlzMm4obG9naW5fbGVuKzEscmV0KTsKKwkJKCpyZXQrKykgPSAodW5zaWduZWQgY2hhcikgbG9naW5fbGVuOworCQltZW1jcHkocmV0LCBzLT5zcnBfY3R4LmxvZ2luLCBsb2dpbl9sZW4pOworCQlyZXQrPWxvZ2luX2xlbjsKKwkJfQorI2VuZGlmCisKICNpZm5kZWYgT1BFTlNTTF9OT19FQwogCWlmIChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCAmJgogCSAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCkBAIC00MjYsNiArNTQ0LDE3IEBACiAJCX0KIAkJc2tpcF9leHQ6CiAKKwlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA+PSBUTFMxXzJfVkVSU0lPTikKKwkJeworCQlpZiAoKHNpemVfdCkobGltaXQgLSByZXQpIDwgc2l6ZW9mKHRsczEyX3NpZ2FsZ3MpICsgNikKKwkJCXJldHVybiBOVUxMOyAKKwkJczJuKFRMU0VYVF9UWVBFX3NpZ25hdHVyZV9hbGdvcml0aG1zLHJldCk7CisJCXMybihzaXplb2YodGxzMTJfc2lnYWxncykgKyAyLCByZXQpOworCQlzMm4oc2l6ZW9mKHRsczEyX3NpZ2FsZ3MpLCByZXQpOworCQltZW1jcHkocmV0LCB0bHMxMl9zaWdhbGdzLCBzaXplb2YodGxzMTJfc2lnYWxncykpOworCQlyZXQgKz0gc2l6ZW9mKHRsczEyX3NpZ2FsZ3MpOworCQl9CisKICNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CiAJaWYgKHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMICYmCiAJICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKQEAgLTQ5NCw2ICs2MjMsMjAgQEAKIAkJCWkyZF9YNTA5X0VYVEVOU0lPTlMocy0+dGxzZXh0X29jc3BfZXh0cywgJnJldCk7CiAJCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwkvKiBBZGQgSGVhcnRiZWF0IGV4dGVuc2lvbiAqLworCXMybihUTFNFWFRfVFlQRV9oZWFydGJlYXQscmV0KTsKKwlzMm4oMSxyZXQpOworCS8qIFNldCBtb2RlOgorCSAqIDE6IHBlZXIgbWF5IHNlbmQgcmVxdWVzdHMKKwkgKiAyOiBwZWVyIG5vdCBhbGxvd2VkIHRvIHNlbmQgcmVxdWVzdHMKKwkgKi8KKwlpZiAocy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRE9OVF9SRUNWX1JFUVVFU1RTKQorCQkqKHJldCsrKSA9IFNTTF9UTFNFWFRfSEJfRE9OVF9TRU5EX1JFUVVFU1RTOworCWVsc2UKKwkJKihyZXQrKykgPSBTU0xfVExTRVhUX0hCX0VOQUJMRUQ7CisjZW5kaWYKKwogI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwogCWlmIChzLT5jdHgtPm5leHRfcHJvdG9fc2VsZWN0X2NiICYmICFzLT5zMy0+dG1wLmZpbmlzaF9tZF9sZW4pCiAJCXsKQEAgLTUwNiw2ICs2NDksMjUgQEAKIAkJfQogI2VuZGlmCiAKKyAgICAgICAgaWYoU1NMX2dldF9zcnRwX3Byb2ZpbGVzKHMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZWw7CisKKyAgICAgICAgICAgICAgICBzc2xfYWRkX2NsaWVudGhlbGxvX3VzZV9zcnRwX2V4dChzLCAwLCAmZWwsIDApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKChsaW1pdCAtIHAgLSA0IC0gZWwpIDwgMCkgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICAgICBzMm4oVExTRVhUX1RZUEVfdXNlX3NydHAscmV0KTsKKyAgICAgICAgICAgICAgICBzMm4oZWwscmV0KTsKKworICAgICAgICAgICAgICAgIGlmKHNzbF9hZGRfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0KHMsIHJldCwgJmVsLCBlbCkpCisJCQl7CisJCQlTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElFTlRIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKwkJCXJldHVybiBOVUxMOworCQkJfQorICAgICAgICAgICAgICAgIHJldCArPSBlbDsKKyAgICAgICAgICAgICAgICB9CisKIAlpZiAoKGV4dGRhdGFsZW4gPSByZXQtcC0yKT09IDApIAogCQlyZXR1cm4gcDsKIApAQCAtNjE4LDYgKzc4MCwyNiBAQAogCQlyZXQgKz0gc29sOwogCQl9CiAjZW5kaWYKKworICAgICAgICBpZihzLT5zcnRwX3Byb2ZpbGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBlbDsKKworICAgICAgICAgICAgICAgIHNzbF9hZGRfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0KHMsIDAsICZlbCwgMCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYoKGxpbWl0IC0gcCAtIDQgLSBlbCkgPCAwKSByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgICAgIHMybihUTFNFWFRfVFlQRV91c2Vfc3J0cCxyZXQpOworICAgICAgICAgICAgICAgIHMybihlbCxyZXQpOworCisgICAgICAgICAgICAgICAgaWYoc3NsX2FkZF9zZXJ2ZXJoZWxsb191c2Vfc3J0cF9leHQocywgcmV0LCAmZWwsIGVsKSkKKwkJCXsKKwkJCVNTTGVycihTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworCQkJcmV0dXJuIE5VTEw7CisJCQl9CisgICAgICAgICAgICAgICAgcmV0Kz1lbDsKKyAgICAgICAgICAgICAgICB9CisKIAlpZiAoKChzLT5zMy0+dG1wLm5ld19jaXBoZXItPmlkICYgMHhGRkZGKT09MHg4MCB8fCAocy0+czMtPnRtcC5uZXdfY2lwaGVyLT5pZCAmIDB4RkZGRik9PTB4ODEpIAogCQkmJiAoU1NMX2dldF9vcHRpb25zKHMpICYgU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHKSkKIAkJeyBjb25zdCB1bnNpZ25lZCBjaGFyIGNyeXB0b3Byb19leHRbMzZdID0gewpAQCAtNjMzLDYgKzgxNSwyNCBAQAogCiAJCX0KIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwkvKiBBZGQgSGVhcnRiZWF0IGV4dGVuc2lvbiBpZiB3ZSd2ZSByZWNlaXZlZCBvbmUgKi8KKwlpZiAocy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRU5BQkxFRCkKKwkJeworCQlzMm4oVExTRVhUX1RZUEVfaGVhcnRiZWF0LHJldCk7CisJCXMybigxLHJldCk7CisJCS8qIFNldCBtb2RlOgorCQkgKiAxOiBwZWVyIG1heSBzZW5kIHJlcXVlc3RzCisJCSAqIDI6IHBlZXIgbm90IGFsbG93ZWQgdG8gc2VuZCByZXF1ZXN0cworCQkgKi8KKwkJaWYgKHMtPnRsc2V4dF9oZWFydGJlYXQgJiBTU0xfVExTRVhUX0hCX0RPTlRfUkVDVl9SRVFVRVNUUykKKwkJCSoocmV0KyspID0gU1NMX1RMU0VYVF9IQl9ET05UX1NFTkRfUkVRVUVTVFM7CisJCWVsc2UKKwkJCSoocmV0KyspID0gU1NMX1RMU0VYVF9IQl9FTkFCTEVEOworCisJCX0KKyNlbmRpZgorCiAjaWZuZGVmIE9QRU5TU0xfTk9fTkVYVFBST1RPTkVHCiAJbmV4dF9wcm90b19uZWdfc2VlbiA9IHMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuOwogCXMtPnMzLT5uZXh0X3Byb3RvX25lZ19zZWVuID0gMDsKQEAgLTY2OSw5ICs4NjksMTggQEAKIAl1bnNpZ25lZCBzaG9ydCBsZW47CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9ICpwOwogCWludCByZW5lZ290aWF0ZV9zZWVuID0gMDsKKwlpbnQgc2lnYWxnX3NlZW4gPSAwOwogCiAJcy0+c2VydmVybmFtZV9kb25lID0gMDsKIAlzLT50bHNleHRfc3RhdHVzX3R5cGUgPSAtMTsKKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKKwlzLT5zMy0+bmV4dF9wcm90b19uZWdfc2VlbiA9IDA7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwlzLT50bHNleHRfaGVhcnRiZWF0ICY9IH4oU1NMX1RMU0VYVF9IQl9FTkFCTEVEIHwKKwkgICAgICAgICAgICAgICAgICAgICAgIFNTTF9UTFNFWFRfSEJfRE9OVF9TRU5EX1JFUVVFU1RTKTsKKyNlbmRpZgogCiAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKIAkJZ290byByaV9jaGVjazsKQEAgLTc5OSw2ICsxMDA4LDMxIEBACiAJCQkJfQogCiAJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfc3JwKQorCQkJeworCQkJaWYgKHNpemUgPD0gMCB8fCAoKGxlbiA9IGRhdGFbMF0pKSAhPSAoc2l6ZSAtMSkpCisJCQkJeworCQkJCSphbCA9IFNTTF9BRF9ERUNPREVfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJaWYgKHMtPnNycF9jdHgubG9naW4gIT0gTlVMTCkKKwkJCQl7CisJCQkJKmFsID0gU1NMX0FEX0RFQ09ERV9FUlJPUjsKKwkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlpZiAoKHMtPnNycF9jdHgubG9naW4gPSBPUEVOU1NMX21hbGxvYyhsZW4rMSkpID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJbWVtY3B5KHMtPnNycF9jdHgubG9naW4sICZkYXRhWzFdLCBsZW4pOworCQkJcy0+c3JwX2N0eC5sb2dpbltsZW5dPSdcMCc7CisgIAorCQkJaWYgKHN0cmxlbihzLT5zcnBfY3R4LmxvZ2luKSAhPSBsZW4pIAorCQkJCXsKKwkJCQkqYWwgPSBTU0xfQURfREVDT0RFX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKyNlbmRpZgogCiAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKIAkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lY19wb2ludF9mb3JtYXRzICYmCkBAIC05MTksNiArMTE1MywyOCBAQAogCQkJCXJldHVybiAwOwogCQkJcmVuZWdvdGlhdGVfc2VlbiA9IDE7CiAJCQl9CisJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfc2lnbmF0dXJlX2FsZ29yaXRobXMpCisJCQl7CisJCQlpbnQgZHNpemU7CisJCQlpZiAoc2lnYWxnX3NlZW4gfHwgc2l6ZSA8IDIpIAorCQkJCXsKKwkJCQkqYWwgPSBTU0xfQURfREVDT0RFX0VSUk9SOworCQkJCXJldHVybiAwOworCQkJCX0KKwkJCXNpZ2FsZ19zZWVuID0gMTsKKwkJCW4ycyhkYXRhLGRzaXplKTsKKwkJCXNpemUgLT0gMjsKKwkJCWlmIChkc2l6ZSAhPSBzaXplIHx8IGRzaXplICYgMSkgCisJCQkJeworCQkJCSphbCA9IFNTTF9BRF9ERUNPREVfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJaWYgKCF0bHMxX3Byb2Nlc3Nfc2lnYWxncyhzLCBkYXRhLCBkc2l6ZSkpCisJCQkJeworCQkJCSphbCA9IFNTTF9BRF9ERUNPREVfRVJST1I7CisJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQogCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0ICYmCiAJCSAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTiAmJiBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfY2IpCiAJCQl7CkBAIC0xMDMxLDkgKzEyODcsMjYgQEAKIAkJCQllbHNlCiAJCQkJCXMtPnRsc2V4dF9zdGF0dXNfdHlwZSA9IC0xOwogCQkJfQorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9oZWFydGJlYXQpCisJCQl7CisJCQlzd2l0Y2goZGF0YVswXSkKKwkJCQl7CisJCQkJY2FzZSAweDAxOgkvKiBDbGllbnQgYWxsb3dzIHVzIHRvIHNlbmQgSEIgcmVxdWVzdHMgKi8KKwkJCQkJCQlzLT50bHNleHRfaGVhcnRiZWF0IHw9IFNTTF9UTFNFWFRfSEJfRU5BQkxFRDsKKwkJCQkJCQlicmVhazsKKwkJCQljYXNlIDB4MDI6CS8qIENsaWVudCBkb2Vzbid0IGFjY2VwdCBIQiByZXF1ZXN0cyAqLworCQkJCQkJCXMtPnRsc2V4dF9oZWFydGJlYXQgfD0gU1NMX1RMU0VYVF9IQl9FTkFCTEVEOworCQkJCQkJCXMtPnRsc2V4dF9oZWFydGJlYXQgfD0gU1NMX1RMU0VYVF9IQl9ET05UX1NFTkRfUkVRVUVTVFM7CisJCQkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoJKmFsID0gU1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOworCQkJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwogCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgcy0+czMtPnRtcC5maW5pc2hfbWRfbGVuID09IDApCisJCQkgcy0+czMtPnRtcC5maW5pc2hfbWRfbGVuID09IDApCiAJCQl7CiAJCQkvKiBXZSBzaG91bGRuJ3QgYWNjZXB0IHRoaXMgZXh0ZW5zaW9uIG9uIGEKIAkJCSAqIHJlbmVnb3RpYXRpb24uCkBAIC0xMDU1LDYgKzEzMjgsMTMgQEAKICNlbmRpZgogCiAJCS8qIHNlc3Npb24gdGlja2V0IHByb2Nlc3NlZCBlYXJsaWVyICovCisJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfdXNlX3NydHApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisJCQlpZihzc2xfcGFyc2VfY2xpZW50aGVsbG9fdXNlX3NydHBfZXh0KHMsIGRhdGEsIHNpemUsCisJCQkJCQkJICAgICAgYWwpKQorCQkJCXJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAJCWRhdGErPXNpemU7CiAJCX0KIAkJCQkKQEAgLTEwNjQsNyArMTM0NCw3IEBACiAKIAkvKiBOZWVkIFJJIGlmIHJlbmVnb3RpYXRpbmcgKi8KIAotCWlmICghcmVuZWdvdGlhdGVfc2VlbiAmJiBzLT5uZXdfc2Vzc2lvbiAmJgorCWlmICghcmVuZWdvdGlhdGVfc2VlbiAmJiBzLT5yZW5lZ290aWF0ZSAmJgogCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKIAkJewogCQkqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CkBAIC0xMDgwLDcgKzEzNjAsNyBAQAogLyogc3NsX25leHRfcHJvdG9fdmFsaWRhdGUgdmFsaWRhdGVzIGEgTmV4dCBQcm90b2NvbCBOZWdvdGlhdGlvbiBibG9jay4gTm8KICAqIGVsZW1lbnRzIG9mIHplcm8gbGVuZ3RoIGFyZSBhbGxvd2VkIGFuZCB0aGUgc2V0IG9mIGVsZW1lbnRzIG11c3QgZXhhY3RseSBmaWxsCiAgKiB0aGUgbGVuZ3RoIG9mIHRoZSBibG9jay4gKi8KLXN0YXRpYyBpbnQgc3NsX25leHRfcHJvdG9fdmFsaWRhdGUodW5zaWduZWQgY2hhciAqZCwgdW5zaWduZWQgbGVuKQorc3RhdGljIGNoYXIgc3NsX25leHRfcHJvdG9fdmFsaWRhdGUodW5zaWduZWQgY2hhciAqZCwgdW5zaWduZWQgbGVuKQogCXsKIAl1bnNpZ25lZCBpbnQgb2ZmID0gMDsKIApAQCAtMTEwNSw2ICsxMzg1LDE1IEBACiAJaW50IHRsc2V4dF9zZXJ2ZXJuYW1lID0gMDsKIAlpbnQgcmVuZWdvdGlhdGVfc2VlbiA9IDA7CiAKKyNpZm5kZWYgT1BFTlNTTF9OT19ORVhUUFJPVE9ORUcKKwlzLT5zMy0+bmV4dF9wcm90b19uZWdfc2VlbiA9IDA7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKwlzLT50bHNleHRfaGVhcnRiZWF0ICY9IH4oU1NMX1RMU0VYVF9IQl9FTkFCTEVEIHwKKwkgICAgICAgICAgICAgICAgICAgICAgIFNTTF9UTFNFWFRfSEJfRE9OVF9TRU5EX1JFUVVFU1RTKTsKKyNlbmRpZgorCiAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKIAkJZ290byByaV9jaGVjazsKIApAQCAtMTIzMSw3ICsxNTIwLDggQEAKIAkJCXMtPnRsc2V4dF9zdGF0dXNfZXhwZWN0ZWQgPSAxOwogCQkJfQogI2lmbmRlZiBPUEVOU1NMX05PX05FWFRQUk9UT05FRwotCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnKQorCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX25leHRfcHJvdG9fbmVnICYmCisJCQkgcy0+czMtPnRtcC5maW5pc2hfbWRfbGVuID09IDApCiAJCQl7CiAJCQl1bnNpZ25lZCBjaGFyICpzZWxlY3RlZDsKIAkJCXVuc2lnbmVkIGNoYXIgc2VsZWN0ZWRfbGVuOwpAQCAtMTI2MSw2ICsxNTUxLDcgQEAKIAkJCQl9CiAJCQltZW1jcHkocy0+bmV4dF9wcm90b19uZWdvdGlhdGVkLCBzZWxlY3RlZCwgc2VsZWN0ZWRfbGVuKTsKIAkJCXMtPm5leHRfcHJvdG9fbmVnb3RpYXRlZF9sZW4gPSBzZWxlY3RlZF9sZW47CisJCQlzLT5zMy0+bmV4dF9wcm90b19uZWdfc2VlbiA9IDE7CiAJCQl9CiAjZW5kaWYKIAkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSkKQEAgLTEyNjksNiArMTU2MCwzMCBAQAogCQkJCXJldHVybiAwOwogCQkJcmVuZWdvdGlhdGVfc2VlbiA9IDE7CiAJCQl9CisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX2hlYXJ0YmVhdCkKKwkJCXsKKwkJCXN3aXRjaChkYXRhWzBdKQorCQkJCXsKKwkJCQljYXNlIDB4MDE6CS8qIFNlcnZlciBhbGxvd3MgdXMgdG8gc2VuZCBIQiByZXF1ZXN0cyAqLworCQkJCQkJCXMtPnRsc2V4dF9oZWFydGJlYXQgfD0gU1NMX1RMU0VYVF9IQl9FTkFCTEVEOworCQkJCQkJCWJyZWFrOworCQkJCWNhc2UgMHgwMjoJLyogU2VydmVyIGRvZXNuJ3QgYWNjZXB0IEhCIHJlcXVlc3RzICovCisJCQkJCQkJcy0+dGxzZXh0X2hlYXJ0YmVhdCB8PSBTU0xfVExTRVhUX0hCX0VOQUJMRUQ7CisJCQkJCQkJcy0+dGxzZXh0X2hlYXJ0YmVhdCB8PSBTU0xfVExTRVhUX0hCX0RPTlRfU0VORF9SRVFVRVNUUzsKKwkJCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7CisJCQkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorI2VuZGlmCisJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfdXNlX3NydHApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdXNlX3NydHBfZXh0KHMsIGRhdGEsIHNpemUsCisJCQkJCQkJICAgICAgYWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogCQlkYXRhKz1zaXplOwkJCiAJCX0KIApAQCAtMTM0OCw3ICsxNjYzLDcgQEAKIAkJCWJyZWFrOwogCQkJfQogCQl9Ci0JdXNpbmdfZWNjID0gdXNpbmdfZWNjICYmIChzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTik7CisJdXNpbmdfZWNjID0gdXNpbmdfZWNjICYmIChzLT52ZXJzaW9uID49IFRMUzFfVkVSU0lPTik7CiAJaWYgKHVzaW5nX2VjYykKIAkJewogCQlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpIE9QRU5TU0xfZnJlZShzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QpOwpAQCAtMTM2NCwxNiArMTY3OSwxOSBAQAogCiAJCS8qIHdlIHN1cHBvcnQgYWxsIG5hbWVkIGVsbGlwdGljIGN1cnZlcyBpbiBkcmFmdC1pZXRmLXRscy1lY2MtMTIgKi8KIAkJaWYgKHMtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdCAhPSBOVUxMKSBPUEVOU1NMX2ZyZWUocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0KTsKLQkJcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCA9IHNpemVvZihuaWRfbGlzdCkvc2l6ZW9mKG5pZF9saXN0WzBdKSAqIDI7CisJCXMtPnRsc2V4dF9lbGxpcHRpY2N1cnZlbGlzdF9sZW5ndGggPSBzaXplb2YocHJlZl9saXN0KS9zaXplb2YocHJlZl9saXN0WzBdKSAqIDI7CiAJCWlmICgocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ID0gT1BFTlNTTF9tYWxsb2Mocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCkpID09IE5VTEwpCiAJCQl7CiAJCQlzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3RfbGVuZ3RoID0gMDsKIAkJCVNTTGVycihTU0xfRl9TU0xfUFJFUEFSRV9DTElFTlRIRUxMT19UTFNFWFQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwogCQkJcmV0dXJuIC0xOwogCQkJfQotCQlmb3IgKGkgPSAxLCBqID0gcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0OyAodW5zaWduZWQgaW50KWkgPD0KLQkJCQlzaXplb2YobmlkX2xpc3QpL3NpemVvZihuaWRfbGlzdFswXSk7IGkrKykKLQkJCXMybihpLGopOworCQlmb3IgKGkgPSAwLCBqID0gcy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0OyAodW5zaWduZWQgaW50KWkgPAorCQkJCXNpemVvZihwcmVmX2xpc3QpL3NpemVvZihwcmVmX2xpc3RbMF0pOyBpKyspCisJCQl7CisJCQlpbnQgaWQgPSB0bHMxX2VjX25pZDJjdXJ2ZV9pZChwcmVmX2xpc3RbaV0pOworCQkJczJuKGlkLGopOworCQkJfQogCQl9CiAjZW5kaWYgLyogT1BFTlNTTF9OT19FQyAqLwogCkBAIC0xNjgyLDI2ICsyMDAwLDU2IEBACiAJCX0KIAl9CiAKLS8qIFNpbmNlIHRoZSBzZXJ2ZXIgY2FjaGUgbG9va3VwIGlzIGRvbmUgZWFybHkgb24gaW4gdGhlIHByb2Nlc3Npbmcgb2YgY2xpZW50Ci0gKiBoZWxsbyBhbmQgb3RoZXIgb3BlcmF0aW9ucyBkZXBlbmQgb24gdGhlIHJlc3VsdCB3ZSBuZWVkIHRvIGhhbmRsZSBhbnkgVExTCi0gKiBzZXNzaW9uIHRpY2tldCBleHRlbnNpb24gYXQgdGhlIHNhbWUgdGltZS4KKy8qIFNpbmNlIHRoZSBzZXJ2ZXIgY2FjaGUgbG9va3VwIGlzIGRvbmUgZWFybHkgb24gaW4gdGhlIHByb2Nlc3Npbmcgb2YgdGhlCisgKiBDbGllbnRIZWxsbywgYW5kIG90aGVyIG9wZXJhdGlvbnMgZGVwZW5kIG9uIHRoZSByZXN1bHQsIHdlIG5lZWQgdG8gaGFuZGxlCisgKiBhbnkgVExTIHNlc3Npb24gdGlja2V0IGV4dGVuc2lvbiBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqICAgc2Vzc2lvbl9pZDogcG9pbnRzIGF0IHRoZSBzZXNzaW9uIElEIGluIHRoZSBDbGllbnRIZWxsby4gVGhpcyBjb2RlIHdpbGwKKyAqICAgICAgIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoaXMgaW4gb3JkZXIgdG8gcGFyc2Ugb3V0IHRoZSBzZXNzaW9uIHRpY2tldAorICogICAgICAgZXh0ZW5zaW9uLCBpZiBhbnkuCisgKiAgIGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgc2Vzc2lvbiBJRC4KKyAqICAgbGltaXQ6IGEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgQ2xpZW50SGVsbG8uCisgKiAgIHJldDogKG91dHB1dCkgb24gcmV0dXJuLCBpZiBhIHRpY2tldCB3YXMgZGVjcnlwdGVkLCB0aGVuIHRoaXMgaXMgc2V0IHRvCisgKiAgICAgICBwb2ludCB0byB0aGUgcmVzdWx0aW5nIHNlc3Npb24uCisgKgorICogSWYgcy0+dGxzX3Nlc3Npb25fc2VjcmV0X2NiIGlzIHNldCB0aGVuIHdlIGFyZSBleHBlY3RpbmcgYSBwcmUtc2hhcmVkIGtleQorICogY2lwaGVyc3VpdGUsIGluIHdoaWNoIGNhc2Ugd2UgaGF2ZSBubyB1c2UgZm9yIHNlc3Npb24gdGlja2V0cyBhbmQgb25lIHdpbGwKKyAqIG5ldmVyIGJlIGRlY3J5cHRlZCwgbm9yIHdpbGwgcy0+dGxzZXh0X3RpY2tldF9leHBlY3RlZCBiZSBzZXQgdG8gMS4KKyAqCisgKiBSZXR1cm5zOgorICogICAtMTogZmF0YWwgZXJyb3IsIGVpdGhlciBmcm9tIHBhcnNpbmcgb3IgZGVjcnlwdGluZyB0aGUgdGlja2V0LgorICogICAgMDogbm8gdGlja2V0IHdhcyBmb3VuZCAob3Igd2FzIGlnbm9yZWQsIGJhc2VkIG9uIHNldHRpbmdzKS4KKyAqICAgIDE6IGEgemVybyBsZW5ndGggZXh0ZW5zaW9uIHdhcyBmb3VuZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBjbGllbnQgc3VwcG9ydHMKKyAqICAgICAgIHNlc3Npb24gdGlja2V0cyBidXQgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBvbmUgdG8gb2ZmZXIuCisgKiAgICAyOiBlaXRoZXIgcy0+dGxzX3Nlc3Npb25fc2VjcmV0X2NiIHdhcyBzZXQsIG9yIGEgdGlja2V0IHdhcyBvZmZlcmVkIGJ1dAorICogICAgICAgY291bGRuJ3QgYmUgZGVjcnlwdGVkIGJlY2F1c2Ugb2YgYSBub24tZmF0YWwgZXJyb3IuCisgKiAgICAzOiBhIHRpY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IGRlY3J5cHRlZCBhbmQgKnJldCB3YXMgc2V0LgorICoKKyAqIFNpZGUgZWZmZWN0czoKKyAqICAgU2V0cyBzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkIHRvIDEgaWYgdGhlIHNlcnZlciB3aWxsIGhhdmUgdG8gaXNzdWUKKyAqICAgYSBuZXcgc2Vzc2lvbiB0aWNrZXQgdG8gdGhlIGNsaWVudCBiZWNhdXNlIHRoZSBjbGllbnQgaW5kaWNhdGVkIHN1cHBvcnQKKyAqICAgKGFuZCBzLT50bHNfc2Vzc2lvbl9zZWNyZXRfY2IgaXMgTlVMTCkgYnV0IHRoZSBjbGllbnQgZWl0aGVyIGRvZXNuJ3QgaGF2ZQorICogICBhIHNlc3Npb24gdGlja2V0IG9yIHdlIGNvdWxkbid0IHVzZSB0aGUgb25lIGl0IGdhdmUgdXMsIG9yIGlmCisgKiAgIHMtPmN0eC0+dGxzZXh0X3RpY2tldF9rZXlfY2IgYXNrZWQgdG8gcmVuZXcgdGhlIGNsaWVudCdzIHRpY2tldC4KKyAqICAgT3RoZXJ3aXNlLCBzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkIGlzIHNldCB0byAwLgogICovCi0KIGludCB0bHMxX3Byb2Nlc3NfdGlja2V0KFNTTCAqcywgdW5zaWduZWQgY2hhciAqc2Vzc2lvbl9pZCwgaW50IGxlbiwKLQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgU1NMX1NFU1NJT04gKipyZXQpCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgU1NMX1NFU1NJT04gKipyZXQpCiAJewogCS8qIFBvaW50IGFmdGVyIHNlc3Npb24gSUQgaW4gY2xpZW50IGhlbGxvICovCiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNlc3Npb25faWQgKyBsZW47CiAJdW5zaWduZWQgc2hvcnQgaTsKIAotCS8qIElmIHRpY2tldHMgZGlzYWJsZWQgYmVoYXZlIGFzIGlmIG5vIHRpY2tldCBwcmVzZW50Ci0gCSAqIHRvIHBlcm1pdCBzdGF0ZWZ1bCByZXN1bXB0aW9uLgotIAkgKi8KLQlpZiAoU1NMX2dldF9vcHRpb25zKHMpICYgU1NMX09QX05PX1RJQ0tFVCkKLQkJcmV0dXJuIDE7CisJKnJldCA9IE5VTEw7CisJcy0+dGxzZXh0X3RpY2tldF9leHBlY3RlZCA9IDA7CiAKKwkvKiBJZiB0aWNrZXRzIGRpc2FibGVkIGJlaGF2ZSBhcyBpZiBubyB0aWNrZXQgcHJlc2VudAorCSAqIHRvIHBlcm1pdCBzdGF0ZWZ1bCByZXN1bXB0aW9uLgorCSAqLworCWlmIChTU0xfZ2V0X29wdGlvbnMocykgJiBTU0xfT1BfTk9fVElDS0VUKQorCQlyZXR1cm4gMDsKIAlpZiAoKHMtPnZlcnNpb24gPD0gU1NMM19WRVJTSU9OKSB8fCAhbGltaXQpCi0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAlpZiAocCA+PSBsaW1pdCkKIAkJcmV0dXJuIC0xOwogCS8qIFNraXAgcGFzdCBEVExTIGNvb2tpZSAqLwpAQCAtMTcyNCw3ICsyMDcyLDcgQEAKIAkJcmV0dXJuIC0xOwogCS8qIE5vdyBhdCBzdGFydCBvZiBleHRlbnNpb25zICovCiAJaWYgKChwICsgMikgPj0gbGltaXQpCi0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAluMnMocCwgaSk7CiAJd2hpbGUgKChwICsgNCkgPD0gbGltaXQpCiAJCXsKQEAgLTE3MzIsMzkgKzIwODAsNjEgQEAKIAkJbjJzKHAsIHR5cGUpOwogCQluMnMocCwgc2l6ZSk7CiAJCWlmIChwICsgc2l6ZSA+IGxpbWl0KQotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMDsKIAkJaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfc2Vzc2lvbl90aWNrZXQpCiAJCQl7Ci0JCQkvKiBJZiB0aWNrZXRzIGRpc2FibGVkIGluZGljYXRlIGNhY2hlIG1pc3Mgd2hpY2ggd2lsbAotIAkJCSAqIHRyaWdnZXIgYSBmdWxsIGhhbmRzaGFrZQotIAkJCSAqLwotCQkJaWYgKFNTTF9nZXRfb3B0aW9ucyhzKSAmIFNTTF9PUF9OT19USUNLRVQpCi0JCQkJcmV0dXJuIDE7Ci0JCQkvKiBJZiB6ZXJvIGxlbmd0aCBub3RlIGNsaWVudCB3aWxsIGFjY2VwdCBhIHRpY2tldAotIAkJCSAqIGFuZCBpbmRpY2F0ZSBjYWNoZSBtaXNzIHRvIHRyaWdnZXIgZnVsbCBoYW5kc2hha2UKLSAJCQkgKi8KKwkJCWludCByOwogCQkJaWYgKHNpemUgPT0gMCkKIAkJCQl7CisJCQkJLyogVGhlIGNsaWVudCB3aWxsIGFjY2VwdCBhIHRpY2tldCBidXQgZG9lc24ndAorCQkJCSAqIGN1cnJlbnRseSBoYXZlIG9uZS4gKi8KIAkJCQlzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkID0gMTsKLQkJCQlyZXR1cm4gMDsJLyogQ2FjaGUgbWlzcyAqLworCQkJCXJldHVybiAxOwogCQkJCX0KIAkJCWlmIChzLT50bHNfc2Vzc2lvbl9zZWNyZXRfY2IpCiAJCQkJewotCQkJCS8qIEluZGljYXRlIGNhY2hlIG1pc3MgaGVyZSBhbmQgaW5zdGVhZCBvZgotCQkJCSAqIGdlbmVyYXRpbmcgdGhlIHNlc3Npb24gZnJvbSB0aWNrZXQgbm93LAotCQkJCSAqIHRyaWdnZXIgYWJicmV2aWF0ZWQgaGFuZHNoYWtlIGJhc2VkIG9uCi0JCQkJICogZXh0ZXJuYWwgbWVjaGFuaXNtIHRvIGNhbGN1bGF0ZSB0aGUgbWFzdGVyCi0JCQkJICogc2VjcmV0IGxhdGVyLiAqLwotCQkJCXJldHVybiAwOworCQkJCS8qIEluZGljYXRlIHRoYXQgdGhlIHRpY2tldCBjb3VsZG4ndCBiZQorCQkJCSAqIGRlY3J5cHRlZCByYXRoZXIgdGhhbiBnZW5lcmF0aW5nIHRoZSBzZXNzaW9uCisJCQkJICogZnJvbSB0aWNrZXQgbm93LCB0cmlnZ2VyIGFiYnJldmlhdGVkCisJCQkJICogaGFuZHNoYWtlIGJhc2VkIG9uIGV4dGVybmFsIG1lY2hhbmlzbSB0bworCQkJCSAqIGNhbGN1bGF0ZSB0aGUgbWFzdGVyIHNlY3JldCBsYXRlci4gKi8KKwkJCQlyZXR1cm4gMjsKIAkJCQl9Ci0JCQlyZXR1cm4gdGxzX2RlY3J5cHRfdGlja2V0KHMsIHAsIHNpemUsIHNlc3Npb25faWQsIGxlbiwKLQkJCQkJCQkJCXJldCk7CisJCQlyID0gdGxzX2RlY3J5cHRfdGlja2V0KHMsIHAsIHNpemUsIHNlc3Npb25faWQsIGxlbiwgcmV0KTsKKwkJCXN3aXRjaCAocikKKwkJCQl7CisJCQkJY2FzZSAyOiAvKiB0aWNrZXQgY291bGRuJ3QgYmUgZGVjcnlwdGVkICovCisJCQkJCXMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQgPSAxOworCQkJCQlyZXR1cm4gMjsKKwkJCQljYXNlIDM6IC8qIHRpY2tldCB3YXMgZGVjcnlwdGVkICovCisJCQkJCXJldHVybiByOworCQkJCWNhc2UgNDogLyogdGlja2V0IGRlY3J5cHRlZCBidXQgbmVlZCB0byByZW5ldyAqLworCQkJCQlzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkID0gMTsKKwkJCQkJcmV0dXJuIDM7CisJCQkJZGVmYXVsdDogLyogZmF0YWwgZXJyb3IgKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KIAkJCX0KIAkJcCArPSBzaXplOwogCQl9Ci0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiAJfQogCisvKiB0bHNfZGVjcnlwdF90aWNrZXQgYXR0ZW1wdHMgdG8gZGVjcnlwdCBhIHNlc3Npb24gdGlja2V0LgorICoKKyAqICAgZXRpY2s6IHBvaW50cyB0byB0aGUgYm9keSBvZiB0aGUgc2Vzc2lvbiB0aWNrZXQgZXh0ZW5zaW9uLgorICogICBldGlja2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgc2Vzc2lvbiB0aWNrZXRzIGV4dGVuaW9uLgorICogICBzZXNzX2lkOiBwb2ludHMgYXQgdGhlIHNlc3Npb24gSUQuCisgKiAgIHNlc3NsZW46IHRoZSBsZW5ndGggb2YgdGhlIHNlc3Npb24gSUQuCisgKiAgIHBzZXNzOiAob3V0cHV0KSBvbiByZXR1cm4sIGlmIGEgdGlja2V0IHdhcyBkZWNyeXB0ZWQsIHRoZW4gdGhpcyBpcyBzZXQgdG8KKyAqICAgICAgIHBvaW50IHRvIHRoZSByZXN1bHRpbmcgc2Vzc2lvbi4KKyAqCisgKiBSZXR1cm5zOgorICogICAtMTogZmF0YWwgZXJyb3IsIGVpdGhlciBmcm9tIHBhcnNpbmcgb3IgZGVjcnlwdGluZyB0aGUgdGlja2V0LgorICogICAgMjogdGhlIHRpY2tldCBjb3VsZG4ndCBiZSBkZWNyeXB0ZWQuCisgKiAgICAzOiBhIHRpY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IGRlY3J5cHRlZCBhbmQgKnBzZXNzIHdhcyBzZXQuCisgKiAgICA0OiBzYW1lIGFzIDMsIGJ1dCB0aGUgdGlja2V0IG5lZWRzIHRvIGJlIHJlbmV3ZWQuCisgKi8KIHN0YXRpYyBpbnQgdGxzX2RlY3J5cHRfdGlja2V0KFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqZXRpY2ssIGludCBldGlja2xlbiwKIAkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZXNzX2lkLCBpbnQgc2Vzc2xlbiwKIAkJCQlTU0xfU0VTU0lPTiAqKnBzZXNzKQpAQCAtMTc3OSw3ICsyMTQ5LDcgQEAKIAlTU0xfQ1RYICp0Y3R4ID0gcy0+aW5pdGlhbF9jdHg7CiAJLyogTmVlZCBhdCBsZWFzdCBrZXluYW1lICsgaXYgKyBzb21lIGVuY3J5cHRlZCBkYXRhICovCiAJaWYgKGV0aWNrbGVuIDwgNDgpCi0JCWdvdG8gdGlja2VycjsKKwkJcmV0dXJuIDI7CiAJLyogSW5pdGlhbGl6ZSBzZXNzaW9uIHRpY2tldCBlbmNyeXB0aW9uIGFuZCBITUFDIGNvbnRleHRzICovCiAJSE1BQ19DVFhfaW5pdCgmaGN0eCk7CiAJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKQEAgLTE3OTEsNyArMjE2MSw3IEBACiAJCWlmIChydiA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCWlmIChydiA9PSAwKQotCQkJZ290byB0aWNrZXJyOworCQkJcmV0dXJuIDI7CiAJCWlmIChydiA9PSAyKQogCQkJcmVuZXdfdGlja2V0ID0gMTsKIAkJfQpAQCAtMTc5OSwxNSArMjE2OSwxNSBAQAogCQl7CiAJCS8qIENoZWNrIGtleSBuYW1lIG1hdGNoZXMgKi8KIAkJaWYgKG1lbWNtcChldGljaywgdGN0eC0+dGxzZXh0X3RpY2tfa2V5X25hbWUsIDE2KSkKLQkJCWdvdG8gdGlja2VycjsKKwkJCXJldHVybiAyOwogCQlITUFDX0luaXRfZXgoJmhjdHgsIHRjdHgtPnRsc2V4dF90aWNrX2htYWNfa2V5LCAxNiwKIAkJCQkJdGxzZXh0X3RpY2tfbWQoKSwgTlVMTCk7CiAJCUVWUF9EZWNyeXB0SW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9jYmMoKSwgTlVMTCwKIAkJCQl0Y3R4LT50bHNleHRfdGlja19hZXNfa2V5LCBldGljayArIDE2KTsKIAkJfQogCS8qIEF0dGVtcHQgdG8gcHJvY2VzcyBzZXNzaW9uIHRpY2tldCwgZmlyc3QgY29uZHVjdCBzYW5pdHkgYW5kCi0gCSAqIGludGVncml0eSBjaGVja3Mgb24gdGlja2V0LgotIAkgKi8KKwkgKiBpbnRlZ3JpdHkgY2hlY2tzIG9uIHRpY2tldC4KKwkgKi8KIAltbGVuID0gSE1BQ19zaXplKCZoY3R4KTsKIAlpZiAobWxlbiA8IDApCiAJCXsKQEAgLTE4MjAsNyArMjE5MCw3IEBACiAJSE1BQ19GaW5hbCgmaGN0eCwgdGlja19obWFjLCBOVUxMKTsKIAlITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKIAlpZiAobWVtY21wKHRpY2tfaG1hYywgZXRpY2sgKyBldGlja2xlbiwgbWxlbikpCi0JCWdvdG8gdGlja2VycjsKKwkJcmV0dXJuIDI7CiAJLyogQXR0ZW1wdCB0byBkZWNyeXB0IHNlc3Npb24gZGF0YSAqLwogCS8qIE1vdmUgcCBhZnRlciBJViB0byBzdGFydCBvZiBlbmNyeXB0ZWQgdGlja2V0LCB1cGRhdGUgbGVuZ3RoICovCiAJcCA9IGV0aWNrICsgMTYgKyBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoJmN0eCk7CkBAIC0xODMzLDMzICsyMjAzLDM3NiBAQAogCQl9CiAJRVZQX0RlY3J5cHRVcGRhdGUoJmN0eCwgc2RlYywgJnNsZW4sIHAsIGV0aWNrbGVuKTsKIAlpZiAoRVZQX0RlY3J5cHRGaW5hbCgmY3R4LCBzZGVjICsgc2xlbiwgJm1sZW4pIDw9IDApCi0JCWdvdG8gdGlja2VycjsKKwkJcmV0dXJuIDI7CiAJc2xlbiArPSBtbGVuOwogCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CiAJcCA9IHNkZWM7Ci0JCQorCiAJc2VzcyA9IGQyaV9TU0xfU0VTU0lPTihOVUxMLCAmcCwgc2xlbik7CiAJT1BFTlNTTF9mcmVlKHNkZWMpOwogCWlmIChzZXNzKQogCQl7Ci0JCS8qIFRoZSBzZXNzaW9uIElEIGlmIG5vbi1lbXB0eSBpcyB1c2VkIGJ5IHNvbWUgY2xpZW50cyB0bwotIAkJICogZGV0ZWN0IHRoYXQgdGhlIHRpY2tldCBoYXMgYmVlbiBhY2NlcHRlZC4gU28gd2UgY29weSBpdCB0bwotIAkJICogdGhlIHNlc3Npb24gc3RydWN0dXJlLiBJZiBpdCBpcyBlbXB0eSBzZXQgbGVuZ3RoIHRvIHplcm8KLSAJCSAqIGFzIHJlcXVpcmVkIGJ5IHN0YW5kYXJkLgotIAkJICovCisJCS8qIFRoZSBzZXNzaW9uIElELCBpZiBub24tZW1wdHksIGlzIHVzZWQgYnkgc29tZSBjbGllbnRzIHRvCisJCSAqIGRldGVjdCB0aGF0IHRoZSB0aWNrZXQgaGFzIGJlZW4gYWNjZXB0ZWQuIFNvIHdlIGNvcHkgaXQgdG8KKwkJICogdGhlIHNlc3Npb24gc3RydWN0dXJlLiBJZiBpdCBpcyBlbXB0eSBzZXQgbGVuZ3RoIHRvIHplcm8KKwkJICogYXMgcmVxdWlyZWQgYnkgc3RhbmRhcmQuCisJCSAqLwogCQlpZiAoc2Vzc2xlbikKIAkJCW1lbWNweShzZXNzLT5zZXNzaW9uX2lkLCBzZXNzX2lkLCBzZXNzbGVuKTsKIAkJc2Vzcy0+c2Vzc2lvbl9pZF9sZW5ndGggPSBzZXNzbGVuOwogCQkqcHNlc3MgPSBzZXNzOwotCQlzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkID0gcmVuZXdfdGlja2V0OwotCQlyZXR1cm4gMTsKKwkJaWYgKHJlbmV3X3RpY2tldCkKKwkJCXJldHVybiA0OworCQllbHNlCisJCQlyZXR1cm4gMzsKIAkJfQotCS8qIElmIHNlc3Npb24gZGVjcnlwdCBmYWlsdXJlIGluZGljYXRlIGEgY2FjaGUgbWlzcyBhbmQgc2V0IHN0YXRlIHRvCi0gCSAqIHNlbmQgYSBuZXcgdGlja2V0Ci0gCSAqLwotCXRpY2tlcnI6CQotCXMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQgPSAxOworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKwkvKiBGb3Igc2Vzc2lvbiBwYXJzZSBmYWlsdXJlLCBpbmRpY2F0ZSB0aGF0IHdlIG5lZWQgdG8gc2VuZCBhIG5ldworCSAqIHRpY2tldC4gKi8KKwlyZXR1cm4gMjsKKwl9CisKKy8qIFRhYmxlcyB0byB0cmFuc2xhdGUgZnJvbSBOSURzIHRvIFRMUyB2MS4yIGlkcyAqLworCit0eXBlZGVmIHN0cnVjdCAKKwl7CisJaW50IG5pZDsKKwlpbnQgaWQ7CisJfSB0bHMxMl9sb29rdXA7CisKK3N0YXRpYyB0bHMxMl9sb29rdXAgdGxzMTJfbWRbXSA9IHsKKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKwl7TklEX21kNSwgVExTRVhUX2hhc2hfbWQ1fSwKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorCXtOSURfc2hhMSwgVExTRVhUX2hhc2hfc2hhMX0sCisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKwl7TklEX3NoYTIyNCwgVExTRVhUX2hhc2hfc2hhMjI0fSwKKwl7TklEX3NoYTI1NiwgVExTRVhUX2hhc2hfc2hhMjU2fSwKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorCXtOSURfc2hhMzg0LCBUTFNFWFRfaGFzaF9zaGEzODR9LAorCXtOSURfc2hhNTEyLCBUTFNFWFRfaGFzaF9zaGE1MTJ9CisjZW5kaWYKK307CisKK3N0YXRpYyB0bHMxMl9sb29rdXAgdGxzMTJfc2lnW10gPSB7CisjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJe0VWUF9QS0VZX1JTQSwgVExTRVhUX3NpZ25hdHVyZV9yc2F9LAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCisJe0VWUF9QS0VZX0RTQSwgVExTRVhUX3NpZ25hdHVyZV9kc2F9LAorI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKKwl7RVZQX1BLRVlfRUMsIFRMU0VYVF9zaWduYXR1cmVfZWNkc2F9CisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgdGxzMTJfZmluZF9pZChpbnQgbmlkLCB0bHMxMl9sb29rdXAgKnRhYmxlLCBzaXplX3QgdGxlbikKKwl7CisJc2l6ZV90IGk7CisJZm9yIChpID0gMDsgaSA8IHRsZW47IGkrKykKKwkJeworCQlpZiAodGFibGVbaV0ubmlkID09IG5pZCkKKwkJCXJldHVybiB0YWJsZVtpXS5pZDsKKwkJfQorCXJldHVybiAtMTsKKwl9CisjaWYgMAorc3RhdGljIGludCB0bHMxMl9maW5kX25pZChpbnQgaWQsIHRsczEyX2xvb2t1cCAqdGFibGUsIHNpemVfdCB0bGVuKQorCXsKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgdGxlbjsgaSsrKQorCQl7CisJCWlmICh0YWJsZVtpXS5pZCA9PSBpZCkKKwkJCXJldHVybiB0YWJsZVtpXS5uaWQ7CisJCX0KKwlyZXR1cm4gLTE7CisJfQorI2VuZGlmCisKK2ludCB0bHMxMl9nZXRfc2lnYW5kaGFzaCh1bnNpZ25lZCBjaGFyICpwLCBjb25zdCBFVlBfUEtFWSAqcGssIGNvbnN0IEVWUF9NRCAqbWQpCisJeworCWludCBzaWdfaWQsIG1kX2lkOworCWlmICghbWQpCisJCXJldHVybiAwOworCW1kX2lkID0gdGxzMTJfZmluZF9pZChFVlBfTURfdHlwZShtZCksIHRsczEyX21kLAorCQkJCXNpemVvZih0bHMxMl9tZCkvc2l6ZW9mKHRsczEyX2xvb2t1cCkpOworCWlmIChtZF9pZCA9PSAtMSkKKwkJcmV0dXJuIDA7CisJc2lnX2lkID0gdGxzMTJfZ2V0X3NpZ2lkKHBrKTsKKwlpZiAoc2lnX2lkID09IC0xKQorCQlyZXR1cm4gMDsKKwlwWzBdID0gKHVuc2lnbmVkIGNoYXIpbWRfaWQ7CisJcFsxXSA9ICh1bnNpZ25lZCBjaGFyKXNpZ19pZDsKKwlyZXR1cm4gMTsKKwl9CisKK2ludCB0bHMxMl9nZXRfc2lnaWQoY29uc3QgRVZQX1BLRVkgKnBrKQorCXsKKwlyZXR1cm4gdGxzMTJfZmluZF9pZChway0+dHlwZSwgdGxzMTJfc2lnLAorCQkJCXNpemVvZih0bHMxMl9zaWcpL3NpemVvZih0bHMxMl9sb29rdXApKTsKKwl9CisKK2NvbnN0IEVWUF9NRCAqdGxzMTJfZ2V0X2hhc2godW5zaWduZWQgY2hhciBoYXNoX2FsZykKKwl7CisJc3dpdGNoKGhhc2hfYWxnKQorCQl7CisjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisJCWNhc2UgVExTRVhUX2hhc2hfbWQ1OgorI2lmZGVmIE9QRU5TU0xfRklQUworCQlpZiAoRklQU19tb2RlKCkpCisJCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCQlyZXR1cm4gRVZQX21kNSgpOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisJCWNhc2UgVExTRVhUX2hhc2hfc2hhMToKKwkJcmV0dXJuIEVWUF9zaGExKCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKwkJY2FzZSBUTFNFWFRfaGFzaF9zaGEyMjQ6CisJCXJldHVybiBFVlBfc2hhMjI0KCk7CisKKwkJY2FzZSBUTFNFWFRfaGFzaF9zaGEyNTY6CisJCXJldHVybiBFVlBfc2hhMjU2KCk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKwkJY2FzZSBUTFNFWFRfaGFzaF9zaGEzODQ6CisJCXJldHVybiBFVlBfc2hhMzg0KCk7CisKKwkJY2FzZSBUTFNFWFRfaGFzaF9zaGE1MTI6CisJCXJldHVybiBFVlBfc2hhNTEyKCk7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisKKwkJfQorCX0KKworLyogU2V0IHByZWZlcnJlZCBkaWdlc3QgZm9yIGVhY2gga2V5IHR5cGUgKi8KKworaW50IHRsczFfcHJvY2Vzc19zaWdhbGdzKFNTTCAqcywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGRzaXplKQorCXsKKwlpbnQgaSwgaWR4OworCWNvbnN0IEVWUF9NRCAqbWQ7CisJQ0VSVCAqYyA9IHMtPmNlcnQ7CisJLyogRXh0ZW5zaW9uIGlnbm9yZWQgZm9yIFRMUyB2ZXJzaW9ucyBiZWxvdyAxLjIgKi8KKwlpZiAoVExTMV9nZXRfdmVyc2lvbihzKSA8IFRMUzFfMl9WRVJTSU9OKQorCQlyZXR1cm4gMTsKKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaWYgKCFjKQorCQlyZXR1cm4gMDsKKworCWMtPnBrZXlzW1NTTF9QS0VZX0RTQV9TSUdOXS5kaWdlc3QgPSBOVUxMOworCWMtPnBrZXlzW1NTTF9QS0VZX1JTQV9TSUdOXS5kaWdlc3QgPSBOVUxMOworCWMtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLmRpZ2VzdCA9IE5VTEw7CisJYy0+cGtleXNbU1NMX1BLRVlfRUNDXS5kaWdlc3QgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGRzaXplOyBpICs9IDIpCisJCXsKKwkJdW5zaWduZWQgY2hhciBoYXNoX2FsZyA9IGRhdGFbaV0sIHNpZ19hbGcgPSBkYXRhW2krMV07CisKKwkJc3dpdGNoKHNpZ19hbGcpCisJCQl7CisjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJCQljYXNlIFRMU0VYVF9zaWduYXR1cmVfcnNhOgorCQkJaWR4ID0gU1NMX1BLRVlfUlNBX1NJR047CisJCQlicmVhazsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorCQkJY2FzZSBUTFNFWFRfc2lnbmF0dXJlX2RzYToKKwkJCWlkeCA9IFNTTF9QS0VZX0RTQV9TSUdOOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorCQkJY2FzZSBUTFNFWFRfc2lnbmF0dXJlX2VjZHNhOgorCQkJaWR4ID0gU1NMX1BLRVlfRUNDOworCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJCX0KKworCQlpZiAoYy0+cGtleXNbaWR4XS5kaWdlc3QgPT0gTlVMTCkKKwkJCXsKKwkJCW1kID0gdGxzMTJfZ2V0X2hhc2goaGFzaF9hbGcpOworCQkJaWYgKG1kKQorCQkJCXsKKwkJCQljLT5wa2V5c1tpZHhdLmRpZ2VzdCA9IG1kOworCQkJCWlmIChpZHggPT0gU1NMX1BLRVlfUlNBX1NJR04pCisJCQkJCWMtPnBrZXlzW1NTTF9QS0VZX1JTQV9FTkNdLmRpZ2VzdCA9IG1kOworCQkJCX0KKwkJCX0KKworCQl9CisKKworCS8qIFNldCBhbnkgcmVtYWluaW5nIGtleXMgdG8gZGVmYXVsdCB2YWx1ZXMuIE5PVEU6IGlmIGFsZyBpcyBub3QKKwkgKiBzdXBwb3J0ZWQgaXQgc3RheXMgYXMgTlVMTC4KKwkgKi8KKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKwlpZiAoIWMtPnBrZXlzW1NTTF9QS0VZX0RTQV9TSUdOXS5kaWdlc3QpCisJCWMtPnBrZXlzW1NTTF9QS0VZX0RTQV9TSUdOXS5kaWdlc3QgPSBFVlBfZHNzMSgpOworI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisJaWYgKCFjLT5wa2V5c1tTU0xfUEtFWV9SU0FfU0lHTl0uZGlnZXN0KQorCQl7CisJCWMtPnBrZXlzW1NTTF9QS0VZX1JTQV9TSUdOXS5kaWdlc3QgPSBFVlBfc2hhMSgpOworCQljLT5wa2V5c1tTU0xfUEtFWV9SU0FfRU5DXS5kaWdlc3QgPSBFVlBfc2hhMSgpOworCQl9CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorCWlmICghYy0+cGtleXNbU1NMX1BLRVlfRUNDXS5kaWdlc3QpCisJCWMtPnBrZXlzW1NTTF9QS0VZX0VDQ10uZGlnZXN0ID0gRVZQX2VjZHNhKCk7CisjZW5kaWYKKwlyZXR1cm4gMTsKKwl9CisKKyNlbmRpZgorCisjaWZuZGVmIE9QRU5TU0xfTk9fSEVBUlRCRUFUUworaW50Cit0bHMxX3Byb2Nlc3NfaGVhcnRiZWF0KFNTTCAqcykKKwl7CisJdW5zaWduZWQgY2hhciAqcCA9ICZzLT5zMy0+cnJlYy5kYXRhWzBdLCAqcGw7CisJdW5zaWduZWQgc2hvcnQgaGJ0eXBlOworCXVuc2lnbmVkIGludCBwYXlsb2FkOworCXVuc2lnbmVkIGludCBwYWRkaW5nID0gMTY7IC8qIFVzZSBtaW5pbXVtIHBhZGRpbmcgKi8KKworCS8qIFJlYWQgdHlwZSBhbmQgcGF5bG9hZCBsZW5ndGggZmlyc3QgKi8KKwloYnR5cGUgPSAqcCsrOworCW4ycyhwLCBwYXlsb2FkKTsKKwlwbCA9IHA7CisKKwlpZiAocy0+bXNnX2NhbGxiYWNrKQorCQlzLT5tc2dfY2FsbGJhY2soMCwgcy0+dmVyc2lvbiwgVExTMV9SVF9IRUFSVEJFQVQsCisJCQkmcy0+czMtPnJyZWMuZGF0YVswXSwgcy0+czMtPnJyZWMubGVuZ3RoLAorCQkJcywgcy0+bXNnX2NhbGxiYWNrX2FyZyk7CisKKwlpZiAoaGJ0eXBlID09IFRMUzFfSEJfUkVRVUVTVCkKKwkJeworCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsICpicDsKKwkJaW50IHI7CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzcG9uc2UsIHNpemUgaXMgMSBieXRlcworCQkgKiBtZXNzYWdlIHR5cGUsIHBsdXMgMiBieXRlcyBwYXlsb2FkIGxlbmd0aCwgcGx1cworCQkgKiBwYXlsb2FkLCBwbHVzIHBhZGRpbmcKKwkJICovCisJCWJ1ZmZlciA9IE9QRU5TU0xfbWFsbG9jKDEgKyAyICsgcGF5bG9hZCArIHBhZGRpbmcpOworCQlicCA9IGJ1ZmZlcjsKKwkJCisJCS8qIEVudGVyIHJlc3BvbnNlIHR5cGUsIGxlbmd0aCBhbmQgY29weSBwYXlsb2FkICovCisJCSpicCsrID0gVExTMV9IQl9SRVNQT05TRTsKKwkJczJuKHBheWxvYWQsIGJwKTsKKwkJbWVtY3B5KGJwLCBwbCwgcGF5bG9hZCk7CisJCWJwICs9IHBheWxvYWQ7CisJCS8qIFJhbmRvbSBwYWRkaW5nICovCisJCVJBTkRfcHNldWRvX2J5dGVzKGJwLCBwYWRkaW5nKTsKKworCQlyID0gc3NsM193cml0ZV9ieXRlcyhzLCBUTFMxX1JUX0hFQVJUQkVBVCwgYnVmZmVyLCAzICsgcGF5bG9hZCArIHBhZGRpbmcpOworCisJCWlmIChyID49IDAgJiYgcy0+bXNnX2NhbGxiYWNrKQorCQkJcy0+bXNnX2NhbGxiYWNrKDEsIHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAorCQkJCWJ1ZmZlciwgMyArIHBheWxvYWQgKyBwYWRkaW5nLAorCQkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOworCisJCU9QRU5TU0xfZnJlZShidWZmZXIpOworCisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCQl9CisJZWxzZSBpZiAoaGJ0eXBlID09IFRMUzFfSEJfUkVTUE9OU0UpCisJCXsKKwkJdW5zaWduZWQgaW50IHNlcTsKKwkJCisJCS8qIFdlIG9ubHkgc2VuZCBzZXF1ZW5jZSBudW1iZXJzICgyIGJ5dGVzIHVuc2lnbmVkIGludCksCisJCSAqIGFuZCAxNiByYW5kb20gYnl0ZXMsIHNvIHdlIGp1c3QgdHJ5IHRvIHJlYWQgdGhlCisJCSAqIHNlcXVlbmNlIG51bWJlciAqLworCQluMnMocGwsIHNlcSk7CisJCQorCQlpZiAocGF5bG9hZCA9PSAxOCAmJiBzZXEgPT0gcy0+dGxzZXh0X2hiX3NlcSkKKwkJCXsKKwkJCXMtPnRsc2V4dF9oYl9zZXErKzsKKwkJCXMtPnRsc2V4dF9oYl9wZW5kaW5nID0gMDsKKwkJCX0KKwkJfQorCiAJcmV0dXJuIDA7CiAJfQogCitpbnQKK3RsczFfaGVhcnRiZWF0KFNTTCAqcykKKwl7CisJdW5zaWduZWQgY2hhciAqYnVmLCAqcDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwYXlsb2FkID0gMTg7IC8qIFNlcXVlbmNlIG51bWJlciArIHJhbmRvbSBieXRlcyAqLworCXVuc2lnbmVkIGludCBwYWRkaW5nID0gMTY7IC8qIFVzZSBtaW5pbXVtIHBhZGRpbmcgKi8KKworCS8qIE9ubHkgc2VuZCBpZiBwZWVyIHN1cHBvcnRzIGFuZCBhY2NlcHRzIEhCIHJlcXVlc3RzLi4uICovCisJaWYgKCEocy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRU5BQkxFRCkgfHwKKwkgICAgcy0+dGxzZXh0X2hlYXJ0YmVhdCAmIFNTTF9UTFNFWFRfSEJfRE9OVF9TRU5EX1JFUVVFU1RTKQorCQl7CisJCVNTTGVycihTU0xfRl9UTFMxX0hFQVJUQkVBVCxTU0xfUl9UTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVCk7CisJCXJldHVybiAtMTsKKwkJfQorCisJLyogLi4uYW5kIHRoZXJlIGlzIG5vbmUgaW4gZmxpZ2h0IHlldC4uLiAqLworCWlmIChzLT50bHNleHRfaGJfcGVuZGluZykKKwkJeworCQlTU0xlcnIoU1NMX0ZfVExTMV9IRUFSVEJFQVQsU1NMX1JfVExTX0hFQVJUQkVBVF9QRU5ESU5HKTsKKwkJcmV0dXJuIC0xOworCQl9CisJCQorCS8qIC4uLmFuZCBubyBoYW5kc2hha2UgaW4gcHJvZ3Jlc3MuICovCisJaWYgKFNTTF9pbl9pbml0KHMpIHx8IHMtPmluX2hhbmRzaGFrZSkKKwkJeworCQlTU0xlcnIoU1NMX0ZfVExTMV9IRUFSVEJFQVQsU1NMX1JfVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKwkJcmV0dXJuIC0xOworCQl9CisJCQorCS8qIENoZWNrIGlmIHBhZGRpbmcgaXMgdG9vIGxvbmcsIHBheWxvYWQgYW5kIHBhZGRpbmcKKwkgKiBtdXN0IG5vdCBleGNlZWQgMl4xNCAtIDMgPSAxNjM4MSBieXRlcyBpbiB0b3RhbC4KKwkgKi8KKwlPUEVOU1NMX2Fzc2VydChwYXlsb2FkICsgcGFkZGluZyA8PSAxNjM4MSk7CisKKwkvKiBDcmVhdGUgSGVhcnRCZWF0IG1lc3NhZ2UsIHdlIGp1c3QgdXNlIGEgc2VxdWVuY2UgbnVtYmVyCisJICogYXMgcGF5bG9hZCB0byBkaXN0dWluZ2lzaCBkaWZmZXJlbnQgbWVzc2FnZXMgYW5kIGFkZAorCSAqIHNvbWUgcmFuZG9tIHN0dWZmLgorCSAqICAtIE1lc3NhZ2UgVHlwZSwgMSBieXRlCisJICogIC0gUGF5bG9hZCBMZW5ndGgsIDIgYnl0ZXMgKHVuc2lnbmVkIGludCkKKwkgKiAgLSBQYXlsb2FkLCB0aGUgc2VxdWVuY2UgbnVtYmVyICgyIGJ5dGVzIHVpbnQpCisJICogIC0gUGF5bG9hZCwgcmFuZG9tIGJ5dGVzICgxNiBieXRlcyB1aW50KQorCSAqICAtIFBhZGRpbmcKKwkgKi8KKwlidWYgPSBPUEVOU1NMX21hbGxvYygxICsgMiArIHBheWxvYWQgKyBwYWRkaW5nKTsKKwlwID0gYnVmOworCS8qIE1lc3NhZ2UgVHlwZSAqLworCSpwKysgPSBUTFMxX0hCX1JFUVVFU1Q7CisJLyogUGF5bG9hZCBsZW5ndGggKDE4IGJ5dGVzIGhlcmUpICovCisJczJuKHBheWxvYWQsIHApOworCS8qIFNlcXVlbmNlIG51bWJlciAqLworCXMybihzLT50bHNleHRfaGJfc2VxLCBwKTsKKwkvKiAxNiByYW5kb20gYnl0ZXMgKi8KKwlSQU5EX3BzZXVkb19ieXRlcyhwLCAxNik7CisJcCArPSAxNjsKKwkvKiBSYW5kb20gcGFkZGluZyAqLworCVJBTkRfcHNldWRvX2J5dGVzKHAsIHBhZGRpbmcpOworCisJcmV0ID0gc3NsM193cml0ZV9ieXRlcyhzLCBUTFMxX1JUX0hFQVJUQkVBVCwgYnVmLCAzICsgcGF5bG9hZCArIHBhZGRpbmcpOworCWlmIChyZXQgPj0gMCkKKwkJeworCQlpZiAocy0+bXNnX2NhbGxiYWNrKQorCQkJcy0+bXNnX2NhbGxiYWNrKDEsIHMtPnZlcnNpb24sIFRMUzFfUlRfSEVBUlRCRUFULAorCQkJCWJ1ZiwgMyArIHBheWxvYWQgKyBwYWRkaW5nLAorCQkJCXMsIHMtPm1zZ19jYWxsYmFja19hcmcpOworCisJCXMtPnRsc2V4dF9oYl9wZW5kaW5nID0gMTsKKwkJfQorCQkKKwlPUEVOU1NMX2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7CisJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zc2wvdDFfbWV0aC5jIGIvc3NsL3QxX21ldGguYwppbmRleCA2Y2U3YzBiLi41M2M4MDdkIDEwMDY0NAotLS0gYS9zc2wvdDFfbWV0aC5jCisrKyBiL3NzbC90MV9tZXRoLmMKQEAgLTYwLDE2ICs2MCwyOCBAQAogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgogI2luY2x1ZGUgInNzbF9sb2NsLmgiCiAKLXN0YXRpYyBjb25zdCBTU0xfTUVUSE9EICp0bHMxX2dldF9tZXRob2QoaW50IHZlcik7CiBzdGF0aWMgY29uc3QgU1NMX01FVEhPRCAqdGxzMV9nZXRfbWV0aG9kKGludCB2ZXIpCiAJeworCWlmICh2ZXIgPT0gVExTMV8yX1ZFUlNJT04pCisJCXJldHVybiBUTFN2MV8yX21ldGhvZCgpOworCWlmICh2ZXIgPT0gVExTMV8xX1ZFUlNJT04pCisJCXJldHVybiBUTFN2MV8xX21ldGhvZCgpOwogCWlmICh2ZXIgPT0gVExTMV9WRVJTSU9OKQotCQlyZXR1cm4oVExTdjFfbWV0aG9kKCkpOwotCWVsc2UKLQkJcmV0dXJuKE5VTEwpOworCQlyZXR1cm4gVExTdjFfbWV0aG9kKCk7CisJcmV0dXJuIE5VTEw7CiAJfQogCi1JTVBMRU1FTlRfdGxzMV9tZXRoX2Z1bmMoVExTdjFfbWV0aG9kLAorSU1QTEVNRU5UX3Rsc19tZXRoX2Z1bmMoVExTMV8yX1ZFUlNJT04sIFRMU3YxXzJfbWV0aG9kLAorCQkJc3NsM19hY2NlcHQsCisJCQlzc2wzX2Nvbm5lY3QsCisJCQl0bHMxX2dldF9tZXRob2QpCisKK0lNUExFTUVOVF90bHNfbWV0aF9mdW5jKFRMUzFfMV9WRVJTSU9OLCBUTFN2MV8xX21ldGhvZCwKKwkJCXNzbDNfYWNjZXB0LAorCQkJc3NsM19jb25uZWN0LAorCQkJdGxzMV9nZXRfbWV0aG9kKQorCitJTVBMRU1FTlRfdGxzX21ldGhfZnVuYyhUTFMxX1ZFUlNJT04sIFRMU3YxX21ldGhvZCwKIAkJCXNzbDNfYWNjZXB0LAogCQkJc3NsM19jb25uZWN0LAogCQkJdGxzMV9nZXRfbWV0aG9kKQpkaWZmIC0tZ2l0IGEvc3NsL3QxX3NydnIuYyBiL3NzbC90MV9zcnZyLmMKaW5kZXggNDI1MjVlOS4uZjFkMTU2NSAxMDA2NDQKLS0tIGEvc3NsL3QxX3NydnIuYworKysgYi9zc2wvdDFfc3J2ci5jCkBAIC02NywxMyArNjcsMjYgQEAKIHN0YXRpYyBjb25zdCBTU0xfTUVUSE9EICp0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKGludCB2ZXIpOwogc3RhdGljIGNvbnN0IFNTTF9NRVRIT0QgKnRsczFfZ2V0X3NlcnZlcl9tZXRob2QoaW50IHZlcikKIAl7CisJaWYgKHZlciA9PSBUTFMxXzJfVkVSU0lPTikKKwkJcmV0dXJuIFRMU3YxXzJfc2VydmVyX21ldGhvZCgpOworCWlmICh2ZXIgPT0gVExTMV8xX1ZFUlNJT04pCisJCXJldHVybiBUTFN2MV8xX3NlcnZlcl9tZXRob2QoKTsKIAlpZiAodmVyID09IFRMUzFfVkVSU0lPTikKLQkJcmV0dXJuKFRMU3YxX3NlcnZlcl9tZXRob2QoKSk7Ci0JZWxzZQotCQlyZXR1cm4oTlVMTCk7CisJCXJldHVybiBUTFN2MV9zZXJ2ZXJfbWV0aG9kKCk7CisJcmV0dXJuIE5VTEw7CiAJfQogCi1JTVBMRU1FTlRfdGxzMV9tZXRoX2Z1bmMoVExTdjFfc2VydmVyX21ldGhvZCwKK0lNUExFTUVOVF90bHNfbWV0aF9mdW5jKFRMUzFfMl9WRVJTSU9OLCBUTFN2MV8yX3NlcnZlcl9tZXRob2QsCisJCQlzc2wzX2FjY2VwdCwKKwkJCXNzbF91bmRlZmluZWRfZnVuY3Rpb24sCisJCQl0bHMxX2dldF9zZXJ2ZXJfbWV0aG9kKQorCitJTVBMRU1FTlRfdGxzX21ldGhfZnVuYyhUTFMxXzFfVkVSU0lPTiwgVExTdjFfMV9zZXJ2ZXJfbWV0aG9kLAorCQkJc3NsM19hY2NlcHQsCisJCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAorCQkJdGxzMV9nZXRfc2VydmVyX21ldGhvZCkKKworSU1QTEVNRU5UX3Rsc19tZXRoX2Z1bmMoVExTMV9WRVJTSU9OLCBUTFN2MV9zZXJ2ZXJfbWV0aG9kLAogCQkJc3NsM19hY2NlcHQsCiAJCQlzc2xfdW5kZWZpbmVkX2Z1bmN0aW9uLAogCQkJdGxzMV9nZXRfc2VydmVyX21ldGhvZCkKZGlmZiAtLWdpdCBhL3NzbC90bHMxLmggYi9zc2wvdGxzMS5oCmluZGV4IDc2ZjM2OGEuLmMzOWMyNjcgMTAwNjQ0Ci0tLSBhL3NzbC90bHMxLmgKKysrIGIvc3NsL3RsczEuaApAQCAtMTU5LDEwICsxNTksMjQgQEAKIAogI2RlZmluZSBUTFMxX0FMTE9XX0VYUEVSSU1FTlRBTF9DSVBIRVJTVUlURVMJMAogCisjZGVmaW5lIFRMUzFfMl9WRVJTSU9OCQkJMHgwMzAzCisjZGVmaW5lIFRMUzFfMl9WRVJTSU9OX01BSk9SCQkweDAzCisjZGVmaW5lIFRMUzFfMl9WRVJTSU9OX01JTk9SCQkweDAzCisKKyNkZWZpbmUgVExTMV8xX1ZFUlNJT04JCQkweDAzMDIKKyNkZWZpbmUgVExTMV8xX1ZFUlNJT05fTUFKT1IJCTB4MDMKKyNkZWZpbmUgVExTMV8xX1ZFUlNJT05fTUlOT1IJCTB4MDIKKwogI2RlZmluZSBUTFMxX1ZFUlNJT04JCQkweDAzMDEKICNkZWZpbmUgVExTMV9WRVJTSU9OX01BSk9SCQkweDAzCiAjZGVmaW5lIFRMUzFfVkVSU0lPTl9NSU5PUgkJMHgwMQogCisjZGVmaW5lIFRMUzFfZ2V0X3ZlcnNpb24ocykgXAorCQkoKHMtPnZlcnNpb24gPj4gOCkgPT0gVExTMV9WRVJTSU9OX01BSk9SID8gcy0+dmVyc2lvbiA6IDApCisKKyNkZWZpbmUgVExTMV9nZXRfY2xpZW50X3ZlcnNpb24ocykgXAorCQkoKHMtPmNsaWVudF92ZXJzaW9uID4+IDgpID09IFRMUzFfVkVSU0lPTl9NQUpPUiA/IHMtPmNsaWVudF92ZXJzaW9uIDogMCkKKwogI2RlZmluZSBUTFMxX0FEX0RFQ1JZUFRJT05fRkFJTEVECTIxCiAjZGVmaW5lIFRMUzFfQURfUkVDT1JEX09WRVJGTE9XCQkyMgogI2RlZmluZSBUTFMxX0FEX1VOS05PV05fQ0EJCTQ4CS8qIGZhdGFsICovCkBAIC0xODMsMTcgKzE5Nyw0MiBAQAogI2RlZmluZSBUTFMxX0FEX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFIDExNAogI2RlZmluZSBUTFMxX0FEX1VOS05PV05fUFNLX0lERU5USVRZCTExNQkvKiBmYXRhbCAqLwogCi0vKiBFeHRlbnNpb25UeXBlIHZhbHVlcyBmcm9tIFJGQzM1NDYgLyBSRkM0MzY2ICovCisvKiBFeHRlbnNpb25UeXBlIHZhbHVlcyBmcm9tIFJGQzM1NDYgLyBSRkM0MzY2IC8gUkZDNjA2NiAqLwogI2RlZmluZSBUTFNFWFRfVFlQRV9zZXJ2ZXJfbmFtZQkJCTAKICNkZWZpbmUgVExTRVhUX1RZUEVfbWF4X2ZyYWdtZW50X2xlbmd0aAkJMQogI2RlZmluZSBUTFNFWFRfVFlQRV9jbGllbnRfY2VydGlmaWNhdGVfdXJsCTIKICNkZWZpbmUgVExTRVhUX1RZUEVfdHJ1c3RlZF9jYV9rZXlzCQkzCiAjZGVmaW5lIFRMU0VYVF9UWVBFX3RydW5jYXRlZF9obWFjCQk0CiAjZGVmaW5lIFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0CQk1CisvKiBFeHRlbnNpb25UeXBlIHZhbHVlcyBmcm9tIFJGQzQ2ODEgKi8KKyNkZWZpbmUgVExTRVhUX1RZUEVfdXNlcl9tYXBwaW5nCQk2CisKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDNTg3OCAqLworI2RlZmluZSBUTFNFWFRfVFlQRV9jbGllbnRfYXV0aHoJCTcKKyNkZWZpbmUgVExTRVhUX1RZUEVfc2VydmVyX2F1dGh6CQk4CisKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDNjA5MSAqLworI2RlZmluZSBUTFNFWFRfVFlQRV9jZXJ0X3R5cGUJCTkKKwogLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZXMgZnJvbSBSRkM0NDkyICovCiAjZGVmaW5lIFRMU0VYVF9UWVBFX2VsbGlwdGljX2N1cnZlcwkJMTAKICNkZWZpbmUgVExTRVhUX1RZUEVfZWNfcG9pbnRfZm9ybWF0cwkJMTEKKworLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZSBmcm9tIFJGQzUwNTQgKi8KKyNkZWZpbmUgVExTRVhUX1RZUEVfc3JwCQkJCTEyCisKKy8qIEV4dGVuc2lvblR5cGUgdmFsdWVzIGZyb20gUkZDNTI0NiAqLworI2RlZmluZSBUTFNFWFRfVFlQRV9zaWduYXR1cmVfYWxnb3JpdGhtcwkxMworCisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gUkZDNTc2NCAqLworI2RlZmluZSBUTFNFWFRfVFlQRV91c2Vfc3J0cAkxNAorCisvKiBFeHRlbnNpb25UeXBlIHZhbHVlIGZyb20gUkZDNTYyMCAqLworI2RlZmluZSBUTFNFWFRfVFlQRV9oZWFydGJlYXQJMTUKKworLyogRXh0ZW5zaW9uVHlwZSB2YWx1ZSBmcm9tIFJGQzQ1MDcgKi8KICNkZWZpbmUgVExTRVhUX1RZUEVfc2Vzc2lvbl90aWNrZXQJCTM1CisKIC8qIEV4dGVuc2lvblR5cGUgdmFsdWUgZnJvbSBkcmFmdC1yZXNjb3JsYS10bHMtb3BhcXVlLXByZi1pbnB1dC0wMC50eHQgKi8KICNpZiAwIC8qIHdpbGwgaGF2ZSB0byBiZSBwcm92aWRlZCBleHRlcm5hbGx5IGZvciBub3cgLAogICAgICAgICogaS5lLiBidWlsZCB3aXRoIC1EVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dD0zODE4MwpAQCAtMjIxLDEyICsyNjAsMzcgQEAKICNkZWZpbmUgVExTRVhUX0VDUE9JTlRGT1JNQVRfYW5zaVg5NjJfY29tcHJlc3NlZF9jaGFyMgkyCiAjZGVmaW5lIFRMU0VYVF9FQ1BPSU5URk9STUFUX2xhc3QJCQkyCiAKKy8qIFNpZ25hdHVyZSBhbmQgaGFzaCBhbGdvcml0aG1zIGZyb20gUkZDIDUyNDYgKi8KKworI2RlZmluZSBUTFNFWFRfc2lnbmF0dXJlX2Fub255bW91cwkJCTAKKyNkZWZpbmUgVExTRVhUX3NpZ25hdHVyZV9yc2EJCQkJMQorI2RlZmluZSBUTFNFWFRfc2lnbmF0dXJlX2RzYQkJCQkyCisjZGVmaW5lIFRMU0VYVF9zaWduYXR1cmVfZWNkc2EJCQkJMworCisjZGVmaW5lIFRMU0VYVF9oYXNoX25vbmUJCQkJMAorI2RlZmluZSBUTFNFWFRfaGFzaF9tZDUJCQkJCTEKKyNkZWZpbmUgVExTRVhUX2hhc2hfc2hhMQkJCQkyCisjZGVmaW5lIFRMU0VYVF9oYXNoX3NoYTIyNAkJCQkzCisjZGVmaW5lIFRMU0VYVF9oYXNoX3NoYTI1NgkJCQk0CisjZGVmaW5lIFRMU0VYVF9oYXNoX3NoYTM4NAkJCQk1CisjZGVmaW5lIFRMU0VYVF9oYXNoX3NoYTUxMgkJCQk2CisKICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKIAogI2RlZmluZSBUTFNFWFRfTUFYTEVOX2hvc3RfbmFtZSAyNTUKIAotY29uc3QgY2hhciAqU1NMX2dldF9zZXJ2ZXJuYW1lKGNvbnN0IFNTTCAqcywgY29uc3QgaW50IHR5cGUpIDsKLWludCBTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZShjb25zdCBTU0wgKnMpIDsKK2NvbnN0IGNoYXIgKlNTTF9nZXRfc2VydmVybmFtZShjb25zdCBTU0wgKnMsIGNvbnN0IGludCB0eXBlKTsKK2ludCBTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZShjb25zdCBTU0wgKnMpOworLyogU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwgZXhwb3J0cyBhIHZhbHVlIGRlcml2ZWQgZnJvbSB0aGUgbWFzdGVyIHNlY3JldCwKKyAqIGFzIHNwZWNpZmllZCBpbiBSRkMgNTcwNS4gSXQgd3JpdGVzIHxvbGVufCBieXRlcyB0byB8b3V0fCBnaXZlbiBhIGxhYmVsIGFuZAorICogb3B0aW9uYWwgY29udGV4dC4gKFNpbmNlIGEgemVybyBsZW5ndGggY29udGV4dCBpcyBhbGxvd2VkLCB0aGUgfHVzZV9jb250ZXh0fAorICogZmxhZyBjb250cm9scyB3aGV0aGVyIGEgY29udGV4dCBpcyBpbmNsdWRlZC4pCisgKgorICogSXQgcmV0dXJucyAxIG9uIHN1Y2Nlc3MgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWwoU1NMICpzLCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuLAorCWNvbnN0IGNoYXIgKmxhYmVsLCBzaXplX3QgbGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqcCwgc2l6ZV90IHBsZW4sCisJaW50IHVzZV9jb250ZXh0KTsKIAogI2RlZmluZSBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUocyxuYW1lKSBcCiBTU0xfY3RybChzLFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUsVExTRVhUX05BTUVUWVBFX2hvc3RfbmFtZSwoY2hhciAqKW5hbWUpCkBAIC0yOTAsNiArMzU0LDE2IEBACiAjZGVmaW5lIFNTTF9DVFhfc2V0X3Rsc2V4dF90aWNrZXRfa2V5X2NiKHNzbCwgY2IpIFwKIFNTTF9DVFhfY2FsbGJhY2tfY3RybChzc2wsU1NMX0NUUkxfU0VUX1RMU0VYVF9USUNLRVRfS0VZX0NCLCh2b2lkICgqKSh2b2lkKSljYikKIAorI2lmbmRlZiBPUEVOU1NMX05PX0hFQVJUQkVBVFMKKyNkZWZpbmUgU1NMX1RMU0VYVF9IQl9FTkFCTEVECQkJCTB4MDEKKyNkZWZpbmUgU1NMX1RMU0VYVF9IQl9ET05UX1NFTkRfUkVRVUVTVFMJMHgwMgorI2RlZmluZSBTU0xfVExTRVhUX0hCX0RPTlRfUkVDVl9SRVFVRVNUUwkweDA0CisKKyNkZWZpbmUgU1NMX2dldF90bHNleHRfaGVhcnRiZWF0X3BlbmRpbmcoc3NsKSBcCisgICAgICAgIFNTTF9jdHJsKChzc2wpLFNTTF9DVFJMX0dFVF9UTFNfRVhUX0hFQVJUQkVBVF9QRU5ESU5HLDAsTlVMTCkKKyNkZWZpbmUgU1NMX3NldF90bHNleHRfaGVhcnRiZWF0X25vX3JlcXVlc3RzKHNzbCwgYXJnKSBcCisgICAgICAgIFNTTF9jdHJsKChzc2wpLFNTTF9DVFJMX1NFVF9UTFNfRVhUX0hFQVJUQkVBVF9OT19SRVFVRVNUUyxhcmcsTlVMTCkKKyNlbmRpZgogI2VuZGlmCiAKIC8qIFBTSyBjaXBoZXJzdWl0ZXMgZnJvbSA0Mjc5ICovCkBAIC0zMjcsNiArNDAxLDE0IEBACiAjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfU0hBCQkweDAzMDAwMDM5CiAjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQUVTXzI1Nl9TSEEJCQkweDAzMDAwMDNBCiAKKy8qIFRMUyB2MS4yIGNpcGhlcnN1aXRlcyAqLworI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX05VTExfU0hBMjU2CQkJMHgwMzAwMDAzQgorI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2CQkJMHgwMzAwMDAzQworI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX0FFU18yNTZfU0hBMjU2CQkJMHgwMzAwMDAzRAorI2RlZmluZSBUTFMxX0NLX0RIX0RTU19XSVRIX0FFU18xMjhfU0hBMjU2CQkweDAzMDAwMDNFCisjZGVmaW5lIFRMUzFfQ0tfREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCTB4MDMwMDAwM0YKKyNkZWZpbmUgVExTMV9DS19ESEVfRFNTX1dJVEhfQUVTXzEyOF9TSEEyNTYJCTB4MDMwMDAwNDAKKwogLyogQ2FtZWxsaWEgY2lwaGVyc3VpdGVzIGZyb20gUkZDNDEzMiAqLwogI2RlZmluZSBUTFMxX0NLX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCQkweDAzMDAwMDQxCiAjZGVmaW5lIFRMUzFfQ0tfREhfRFNTX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJMHgwMzAwMDA0MgpAQCAtMzM1LDYgKzQxNywxNiBAQAogI2RlZmluZSBUTFMxX0NLX0RIRV9SU0FfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQkweDAzMDAwMDQ1CiAjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQ0FNRUxMSUFfMTI4X0NCQ19TSEEJCTB4MDMwMDAwNDYKIAorLyogVExTIHYxLjIgY2lwaGVyc3VpdGVzICovCisjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2CQkweDAzMDAwMDY3CisjZGVmaW5lIFRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9TSEEyNTYJCTB4MDMwMDAwNjgKKyNkZWZpbmUgVExTMV9DS19ESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NgkJMHgwMzAwMDA2OQorI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NgkJMHgwMzAwMDA2QQorI2RlZmluZSBUTFMxX0NLX0RIRV9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NgkJMHgwMzAwMDA2QgorI2RlZmluZSBUTFMxX0NLX0FESF9XSVRIX0FFU18xMjhfU0hBMjU2CQkJMHgwMzAwMDA2QworI2RlZmluZSBUTFMxX0NLX0FESF9XSVRIX0FFU18yNTZfU0hBMjU2CQkJMHgwMzAwMDA2RAorCisvKiBDYW1lbGxpYSBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM0MTMyICovCiAjZGVmaW5lIFRMUzFfQ0tfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEJCTB4MDMwMDAwODQKICNkZWZpbmUgVExTMV9DS19ESF9EU1NfV0lUSF9DQU1FTExJQV8yNTZfQ0JDX1NIQQkweDAzMDAwMDg1CiAjZGVmaW5lIFRMUzFfQ0tfREhfUlNBX1dJVEhfQ0FNRUxMSUFfMjU2X0NCQ19TSEEJMHgwMzAwMDA4NgpAQCAtMzUwLDYgKzQ0MiwyMCBAQAogI2RlZmluZSBUTFMxX0NLX0RIRV9SU0FfV0lUSF9TRUVEX1NIQSAgICAgICAgICAgICAgICAgICAweDAzMDAwMDlBCiAjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfU0VFRF9TSEEgICAgICAgICAgICAgICAgCTB4MDMwMDAwOUIKIAorLyogVExTIHYxLjIgR0NNIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODggKi8KKyNkZWZpbmUgVExTMV9DS19SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCTB4MDMwMDAwOUMKKyNkZWZpbmUgVExTMV9DS19SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCTB4MDMwMDAwOUQKKyNkZWZpbmUgVExTMV9DS19ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkweDAzMDAwMDlFCisjZGVmaW5lIFRMUzFfQ0tfREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJMHgwMzAwMDA5RgorI2RlZmluZSBUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkJMHgwMzAwMDBBMAorI2RlZmluZSBUTFMxX0NLX0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJMHgwMzAwMDBBMQorI2RlZmluZSBUTFMxX0NLX0RIRV9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCTB4MDMwMDAwQTIKKyNkZWZpbmUgVExTMV9DS19ESEVfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkweDAzMDAwMEEzCisjZGVmaW5lIFRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkweDAzMDAwMEE0CisjZGVmaW5lIFRMUzFfQ0tfREhfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkweDAzMDAwMEE1CisjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkweDAzMDAwMEE2CisjZGVmaW5lIFRMUzFfQ0tfQURIX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkweDAzMDAwMEE3CisKIC8qIEVDQyBjaXBoZXJzdWl0ZXMgZnJvbSBkcmFmdC1pZXRmLXRscy1lY2MtMTIudHh0IHdpdGggY2hhbmdlcyBzb29uIHRvIGJlIGluIGRyYWZ0IDEzICovCiAjZGVmaW5lIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX05VTExfU0hBICAgICAgICAgICAgICAgIDB4MDMwMEMwMDEKICNkZWZpbmUgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfUkM0XzEyOF9TSEEgICAgICAgICAgICAgMHgwMzAwQzAwMgpAQCAtMzgxLDYgKzQ4NywzOCBAQAogI2RlZmluZSBUTFMxX0NLX0VDREhfYW5vbl9XSVRIX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAweDAzMDBDMDE4CiAjZGVmaW5lIFRMUzFfQ0tfRUNESF9hbm9uX1dJVEhfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgIDB4MDMwMEMwMTkKIAorLyogU1JQIGNpcGhlcnN1aXRlcyBmcm9tIFJGQyA1MDU0ICovCisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9XSVRIXzNERVNfRURFX0NCQ19TSEEJCTB4MDMwMEMwMUEKKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEJMHgwMzAwQzAxQgorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfRFNTX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkweDAzMDBDMDFDCisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQkJMHgwMzAwQzAxRAorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCTB4MDMwMEMwMUUKKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX0RTU19XSVRIX0FFU18xMjhfQ0JDX1NIQQkweDAzMDBDMDFGCisjZGVmaW5lIFRMUzFfQ0tfU1JQX1NIQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQkJMHgwMzAwQzAyMAorI2RlZmluZSBUTFMxX0NLX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCTB4MDMwMEMwMjEKKyNkZWZpbmUgVExTMV9DS19TUlBfU0hBX0RTU19XSVRIX0FFU18yNTZfQ0JDX1NIQQkweDAzMDBDMDIyCisKKy8qIEVDREggSE1BQyBiYXNlZCBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM1Mjg5ICovCisKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAgICAgMHgwMzAwQzAyMworI2RlZmluZSBUTFMxX0NLX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAgICAweDAzMDBDMDI0CisjZGVmaW5lIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAgICAgIDB4MDMwMEMwMjUKKyNkZWZpbmUgVExTMV9DS19FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAgICAgMHgwMzAwQzAyNgorI2RlZmluZSBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAgICAgICAweDAzMDBDMDI3CisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAgICAgIDB4MDMwMEMwMjgKKyNkZWZpbmUgVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2ICAgICAgICAgICAgMHgwMzAwQzAyOQorI2RlZmluZSBUTFMxX0NLX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAgICAgICAweDAzMDBDMDJBCisKKy8qIEVDREggR0NNIGJhc2VkIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODkgKi8KKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkweDAzMDBDMDJCCisjZGVmaW5lIFRMUzFfQ0tfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJMHgwMzAwQzAyQworI2RlZmluZSBUTFMxX0NLX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAweDAzMDBDMDJECisjZGVmaW5lIFRMUzFfQ0tfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgIDB4MDMwMEMwMkUKKyNkZWZpbmUgVExTMV9DS19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgMHgwMzAwQzAyRgorI2RlZmluZSBUTFMxX0NLX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgICAweDAzMDBDMDMwCisjZGVmaW5lIFRMUzFfQ0tfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgIDB4MDMwMEMwMzEKKyNkZWZpbmUgVExTMV9DS19FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgICAgMHgwMzAwQzAzMgorCiAvKiBYWFgKICAqIEluY29uc2lzdGVuY3kgYWxlcnQ6CiAgKiBUaGUgT3BlblNTTCBuYW1lcyBvZiBjaXBoZXJzIHdpdGggZXBoZW1lcmFsIERIIGhlcmUgaW5jbHVkZSB0aGUgc3RyaW5nCkBAIC00NDgsNiArNTg2LDE3IEBACiAjZGVmaW5lIFRMUzFfVFhUX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQkJIlBTSy1BRVMxMjgtQ0JDLVNIQSIKICNkZWZpbmUgVExTMV9UWFRfUFNLX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCQkiUFNLLUFFUzI1Ni1DQkMtU0hBIgogCisvKiBTUlAgY2lwaGVyc3VpdGUgZnJvbSBSRkMgNTA1NCAqLworI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkJIlNSUC0zREVTLUVERS1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEJIlNSUC1SU0EtM0RFUy1FREUtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9EU1NfV0lUSF8zREVTX0VERV9DQkNfU0hBCSJTUlAtRFNTLTNERVMtRURFLUNCQy1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCSJTUlAtQUVTLTEyOC1DQkMtU0hBIgorI2RlZmluZSBUTFMxX1RYVF9TUlBfU0hBX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQkiU1JQLVJTQS1BRVMtMTI4LUNCQy1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfRFNTX1dJVEhfQUVTXzEyOF9DQkNfU0hBCSJTUlAtRFNTLUFFUy0xMjgtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9XSVRIX0FFU18yNTZfQ0JDX1NIQQkJIlNSUC1BRVMtMjU2LUNCQy1TSEEiCisjZGVmaW5lIFRMUzFfVFhUX1NSUF9TSEFfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCSJTUlAtUlNBLUFFUy0yNTYtQ0JDLVNIQSIKKyNkZWZpbmUgVExTMV9UWFRfU1JQX1NIQV9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEJIlNSUC1EU1MtQUVTLTI1Ni1DQkMtU0hBIgorCiAvKiBDYW1lbGxpYSBjaXBoZXJzdWl0ZXMgZnJvbSBSRkM0MTMyICovCiAjZGVmaW5lIFRMUzFfVFhUX1JTQV9XSVRIX0NBTUVMTElBXzEyOF9DQkNfU0hBCQkiQ0FNRUxMSUExMjgtU0hBIgogI2RlZmluZSBUTFMxX1RYVF9ESF9EU1NfV0lUSF9DQU1FTExJQV8xMjhfQ0JDX1NIQQkiREgtRFNTLUNBTUVMTElBMTI4LVNIQSIKQEAgLTQ3MSw2ICs2MjAsNTUgQEAKICNkZWZpbmUgVExTMV9UWFRfREhFX1JTQV9XSVRIX1NFRURfU0hBICAgICAgICAgICAgICAgICAgIkRIRS1SU0EtU0VFRC1TSEEiCiAjZGVmaW5lIFRMUzFfVFhUX0FESF9XSVRIX1NFRURfU0hBICAgICAgICAgICAgICAgICAgICAgICJBREgtU0VFRC1TSEEiCiAKKy8qIFRMUyB2MS4yIGNpcGhlcnN1aXRlcyAqLworI2RlZmluZSBUTFMxX1RYVF9SU0FfV0lUSF9OVUxMX1NIQTI1NgkJCSJOVUxMLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYJCSJBRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkFFUzI1Ni1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX0RTU19XSVRIX0FFU18xMjhfU0hBMjU2CQkiREgtRFNTLUFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2CQkiREgtUlNBLUFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIRV9EU1NfV0lUSF9BRVNfMTI4X1NIQTI1NgkJIkRIRS1EU1MtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhFX1JTQV9XSVRIX0FFU18xMjhfU0hBMjU2CQkiREhFLVJTQS1BRVMxMjgtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkRILURTUy1BRVMyNTYtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESF9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkRILVJTQS1BRVMyNTYtU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfRFNTX1dJVEhfQUVTXzI1Nl9TSEEyNTYJCSJESEUtRFNTLUFFUzI1Ni1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIRV9SU0FfV0lUSF9BRVNfMjU2X1NIQTI1NgkJIkRIRS1SU0EtQUVTMjU2LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfQURIX1dJVEhfQUVTXzEyOF9TSEEyNTYJCSJBREgtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfQURIX1dJVEhfQUVTXzI1Nl9TSEEyNTYJCSJBREgtQUVTMjU2LVNIQTI1NiIKKworLyogVExTIHYxLjIgR0NNIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODggKi8KKyNkZWZpbmUgVExTMV9UWFRfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkiQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJIkFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CSJESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CSJESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9ESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJCSJESC1SU0EtQUVTMTI4LUdDTS1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJIkRILVJTQS1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfREhFX0RTU19XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkiREhFLURTUy1BRVMxMjgtR0NNLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfREhFX0RTU19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkiREhFLURTUy1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfREhfRFNTX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CQkiREgtRFNTLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9ESF9EU1NfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJCSJESC1EU1MtQUVTMjU2LUdDTS1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0FESF9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgkJIkFESC1BRVMxMjgtR0NNLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfQURIX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CQkiQURILUFFUzI1Ni1HQ00tU0hBMzg0IgorCisvKiBFQ0RIIEhNQUMgYmFzZWQgY2lwaGVyc3VpdGVzIGZyb20gUkZDNTI4OSAqLworCisjZGVmaW5lIFRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgIkVDREhFLUVDRFNBLUFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgIkVDREhFLUVDRFNBLUFFUzI1Ni1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiAgICAgIkVDREgtRUNEU0EtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9FQ0RTQV9XSVRIX0FFU18yNTZfU0hBMzg0ICAgICAiRUNESC1FQ0RTQS1BRVMyNTYtU0hBMzg0IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X1NIQTI1NiAgICAgICJFQ0RIRS1SU0EtQUVTMTI4LVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAiRUNESEUtUlNBLUFFUzI1Ni1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfUlNBX1dJVEhfQUVTXzEyOF9TSEEyNTYgICAgICAgIkVDREgtUlNBLUFFUzEyOC1TSEEyNTYiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfUlNBX1dJVEhfQUVTXzI1Nl9TSEEzODQgICAgICAgIkVDREgtUlNBLUFFUzI1Ni1TSEEzODQiCisKKy8qIEVDREggR0NNIGJhc2VkIGNpcGhlcnN1aXRlcyBmcm9tIFJGQzUyODkgKi8KKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgIkVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAiRUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODQiCisjZGVmaW5lIFRMUzFfVFhUX0VDREhfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICJFQ0RILUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAiRUNESC1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2ICAgICAgIkVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NiIKKyNkZWZpbmUgVExTMV9UWFRfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0ICAgICAgIkVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NCIKKyNkZWZpbmUgVExTMV9UWFRfRUNESF9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYgICAgICAgIkVDREgtUlNBLUFFUzEyOC1HQ00tU0hBMjU2IgorI2RlZmluZSBUTFMxX1RYVF9FQ0RIX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCAgICAgICAiRUNESC1SU0EtQUVTMjU2LUdDTS1TSEEzODQiCiAKICNkZWZpbmUgVExTX0NUX1JTQV9TSUdOCQkJMQogI2RlZmluZSBUTFNfQ1RfRFNTX1NJR04JCQkyCmRpZmYgLS1naXQgYS9zc2wvdGxzX3NycC5jIGIvc3NsL3Rsc19zcnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTEyYzRkCi0tLSAvZGV2L251bGwKKysrIGIvc3NsL3Rsc19zcnAuYwpAQCAtMCwwICsxLDUwNiBAQAorLyogc3NsL3Rsc19zcnAuYyAqLworLyogV3JpdHRlbiBieSBDaHJpc3RvcGhlIFJlbm91IChjaHJpc3RvcGhlLnJlbm91QGVkZWx3ZWIuZnIpIHdpdGggCisgKiB0aGUgcHJlY2lvdXMgaGVscCBvZiBQZXRlciBTeWx2ZXN0ZXIgKHBldGVyLnN5bHZlc3RlckBlZGVsd2ViLmZyKSAKKyAqIGZvciB0aGUgRWRlbEtleSBwcm9qZWN0IGFuZCBjb250cmlidXRlZCB0byB0aGUgT3BlblNTTCBwcm9qZWN0IDIwMDQuCisgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICoKKyAqLworI2luY2x1ZGUgInNzbF9sb2NsLmgiCisjaWZuZGVmIE9QRU5TU0xfTk9fU1JQCisKKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NycC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisKK2ludCBTU0xfQ1RYX1NSUF9DVFhfZnJlZShzdHJ1Y3Qgc3NsX2N0eF9zdCAqY3R4KQorCXsKKwlpZiAoY3R4ID09IE5VTEwpCisJCXJldHVybiAwOworCU9QRU5TU0xfZnJlZShjdHgtPnNycF9jdHgubG9naW4pOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4Lk4pOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LmcpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LnMpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LkIpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LkEpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LmEpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LmIpOworCUJOX2ZyZWUoY3R4LT5zcnBfY3R4LnYpOworCWN0eC0+c3JwX2N0eC5UTFNfZXh0X3NycF91c2VybmFtZV9jYWxsYmFjayA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LlNSUF9jYl9hcmcgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5TUlBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrID0gTlVMTDsKKwljdHgtPnNycF9jdHguU1JQX2dpdmVfc3JwX2NsaWVudF9wd2RfY2FsbGJhY2sgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5OID0gTlVMTDsKKwljdHgtPnNycF9jdHguZyA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LnMgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5CID0gTlVMTDsKKwljdHgtPnNycF9jdHguQSA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LmEgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5iID0gTlVMTDsKKwljdHgtPnNycF9jdHgudiA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LmxvZ2luID0gTlVMTDsKKwljdHgtPnNycF9jdHguaW5mbyA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LnN0cmVuZ3RoID0gU1JQX01JTklNQUxfTjsKKwljdHgtPnNycF9jdHguc3JwX01hc2sgPSAwOworCXJldHVybiAoMSk7CisJfQorCitpbnQgU1NMX1NSUF9DVFhfZnJlZShzdHJ1Y3Qgc3NsX3N0ICpzKQorCXsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlPUEVOU1NMX2ZyZWUocy0+c3JwX2N0eC5sb2dpbik7CisJQk5fZnJlZShzLT5zcnBfY3R4Lk4pOworCUJOX2ZyZWUocy0+c3JwX2N0eC5nKTsKKwlCTl9mcmVlKHMtPnNycF9jdHgucyk7CisJQk5fZnJlZShzLT5zcnBfY3R4LkIpOworCUJOX2ZyZWUocy0+c3JwX2N0eC5BKTsKKwlCTl9mcmVlKHMtPnNycF9jdHguYSk7CisJQk5fZnJlZShzLT5zcnBfY3R4LmIpOworCUJOX2ZyZWUocy0+c3JwX2N0eC52KTsKKwlzLT5zcnBfY3R4LlRMU19leHRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrID0gTlVMTDsKKwlzLT5zcnBfY3R4LlNSUF9jYl9hcmcgPSBOVUxMOworCXMtPnNycF9jdHguU1JQX3ZlcmlmeV9wYXJhbV9jYWxsYmFjayA9IE5VTEw7CisJcy0+c3JwX2N0eC5TUlBfZ2l2ZV9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayA9IE5VTEw7CisJcy0+c3JwX2N0eC5OID0gTlVMTDsKKwlzLT5zcnBfY3R4LmcgPSBOVUxMOworCXMtPnNycF9jdHgucyA9IE5VTEw7CisJcy0+c3JwX2N0eC5CID0gTlVMTDsKKwlzLT5zcnBfY3R4LkEgPSBOVUxMOworCXMtPnNycF9jdHguYSA9IE5VTEw7CisJcy0+c3JwX2N0eC5iID0gTlVMTDsKKwlzLT5zcnBfY3R4LnYgPSBOVUxMOworCXMtPnNycF9jdHgubG9naW4gPSBOVUxMOworCXMtPnNycF9jdHguaW5mbyA9IE5VTEw7CisJcy0+c3JwX2N0eC5zdHJlbmd0aCA9IFNSUF9NSU5JTUFMX047CisJcy0+c3JwX2N0eC5zcnBfTWFzayA9IDA7CisJcmV0dXJuICgxKTsKKwl9CisKK2ludCBTU0xfU1JQX0NUWF9pbml0KHN0cnVjdCBzc2xfc3QgKnMpCisJeworCVNTTF9DVFggKmN0eDsKKworCWlmICgocyA9PSBOVUxMKSB8fCAoKGN0eCA9IHMtPmN0eCkgPT0gTlVMTCkpCisJCXJldHVybiAwOworCXMtPnNycF9jdHguU1JQX2NiX2FyZyA9IGN0eC0+c3JwX2N0eC5TUlBfY2JfYXJnOworCS8qIHNldCBjbGllbnQgSGVsbG8gbG9naW4gY2FsbGJhY2sgKi8KKwlzLT5zcnBfY3R4LlRMU19leHRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrID0gY3R4LT5zcnBfY3R4LlRMU19leHRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrOworCS8qIHNldCBTUlAgTi9nIHBhcmFtIGNhbGxiYWNrIGZvciB2ZXJpZmljYXRpb24gKi8KKwlzLT5zcnBfY3R4LlNSUF92ZXJpZnlfcGFyYW1fY2FsbGJhY2sgPSBjdHgtPnNycF9jdHguU1JQX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKwkvKiBzZXQgU1JQIGNsaWVudCBwYXNzd2QgY2FsbGJhY2sgKi8KKwlzLT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrID0gY3R4LT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrOworCisJcy0+c3JwX2N0eC5OID0gTlVMTDsKKwlzLT5zcnBfY3R4LmcgPSBOVUxMOworCXMtPnNycF9jdHgucyA9IE5VTEw7CisJcy0+c3JwX2N0eC5CID0gTlVMTDsKKwlzLT5zcnBfY3R4LkEgPSBOVUxMOworCXMtPnNycF9jdHguYSA9IE5VTEw7CisJcy0+c3JwX2N0eC5iID0gTlVMTDsKKwlzLT5zcnBfY3R4LnYgPSBOVUxMOworCXMtPnNycF9jdHgubG9naW4gPSBOVUxMOworCXMtPnNycF9jdHguaW5mbyA9IGN0eC0+c3JwX2N0eC5pbmZvOworCXMtPnNycF9jdHguc3RyZW5ndGggPSBjdHgtPnNycF9jdHguc3RyZW5ndGg7CisKKwlpZiAoKChjdHgtPnNycF9jdHguTiAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4Lk4gPSBCTl9kdXAoY3R4LT5zcnBfY3R4Lk4pKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHguZyAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LmcgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LmcpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHgucyAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LnMgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LnMpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHguQiAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LkIgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LkIpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHguQSAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LkEgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LkEpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHguYSAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LmEgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LmEpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHgudiAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LnYgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LnYpKSA9PSBOVUxMKSkgfHwKKwkJKChjdHgtPnNycF9jdHguYiAhPSBOVUxMKSAmJgorCQkgKChzLT5zcnBfY3R4LmIgPSBCTl9kdXAoY3R4LT5zcnBfY3R4LmIpKSA9PSBOVUxMKSkpCisJCXsKKwkJU1NMZXJyKFNTTF9GX1NTTF9TUlBfQ1RYX0lOSVQsRVJSX1JfQk5fTElCKTsKKwkJZ290byBlcnI7CisJCX0KKwlpZiAoKGN0eC0+c3JwX2N0eC5sb2dpbiAhPSBOVUxMKSAmJiAKKwkJKChzLT5zcnBfY3R4LmxvZ2luID0gQlVGX3N0cmR1cChjdHgtPnNycF9jdHgubG9naW4pKSA9PSBOVUxMKSkKKwkJeworCQlTU0xlcnIoU1NMX0ZfU1NMX1NSUF9DVFhfSU5JVCxFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisJCWdvdG8gZXJyOworCQl9CisJcy0+c3JwX2N0eC5zcnBfTWFzayA9IGN0eC0+c3JwX2N0eC5zcnBfTWFzazsKKworCXJldHVybiAoMSk7CitlcnI6CisJT1BFTlNTTF9mcmVlKHMtPnNycF9jdHgubG9naW4pOworCUJOX2ZyZWUocy0+c3JwX2N0eC5OKTsKKwlCTl9mcmVlKHMtPnNycF9jdHguZyk7CisJQk5fZnJlZShzLT5zcnBfY3R4LnMpOworCUJOX2ZyZWUocy0+c3JwX2N0eC5CKTsKKwlCTl9mcmVlKHMtPnNycF9jdHguQSk7CisJQk5fZnJlZShzLT5zcnBfY3R4LmEpOworCUJOX2ZyZWUocy0+c3JwX2N0eC5iKTsKKwlCTl9mcmVlKHMtPnNycF9jdHgudik7CisJcmV0dXJuICgwKTsKKwl9CisKK2ludCBTU0xfQ1RYX1NSUF9DVFhfaW5pdChzdHJ1Y3Qgc3NsX2N0eF9zdCAqY3R4KQorCXsKKwlpZiAoY3R4ID09IE5VTEwpCisJCXJldHVybiAwOworCisJY3R4LT5zcnBfY3R4LlNSUF9jYl9hcmcgPSBOVUxMOworCS8qIHNldCBjbGllbnQgSGVsbG8gbG9naW4gY2FsbGJhY2sgKi8KKwljdHgtPnNycF9jdHguVExTX2V4dF9zcnBfdXNlcm5hbWVfY2FsbGJhY2sgPSBOVUxMOworCS8qIHNldCBTUlAgTi9nIHBhcmFtIGNhbGxiYWNrIGZvciB2ZXJpZmljYXRpb24gKi8KKwljdHgtPnNycF9jdHguU1JQX3ZlcmlmeV9wYXJhbV9jYWxsYmFjayA9IE5VTEw7CisJLyogc2V0IFNSUCBjbGllbnQgcGFzc3dkIGNhbGxiYWNrICovCisJY3R4LT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrID0gTlVMTDsKKworCWN0eC0+c3JwX2N0eC5OID0gTlVMTDsKKwljdHgtPnNycF9jdHguZyA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LnMgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5CID0gTlVMTDsKKwljdHgtPnNycF9jdHguQSA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LmEgPSBOVUxMOworCWN0eC0+c3JwX2N0eC5iID0gTlVMTDsKKwljdHgtPnNycF9jdHgudiA9IE5VTEw7CisJY3R4LT5zcnBfY3R4LmxvZ2luID0gTlVMTDsKKwljdHgtPnNycF9jdHguc3JwX01hc2sgPSAwOworCWN0eC0+c3JwX2N0eC5pbmZvID0gTlVMTDsKKwljdHgtPnNycF9jdHguc3RyZW5ndGggPSBTUlBfTUlOSU1BTF9OOworCisJcmV0dXJuICgxKTsKKwl9CisKKy8qIHNlcnZlciBzaWRlICovCitpbnQgU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91c2VybmFtZShTU0wgKnMsIGludCAqYWQpCisJeworCXVuc2lnbmVkIGNoYXIgYltTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKKwlpbnQgYWw7CisKKwkqYWQgPSBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFk7CisJaWYgKChzLT5zcnBfY3R4LlRMU19leHRfc3JwX3VzZXJuYW1lX2NhbGxiYWNrICE9TlVMTCkgJiYKKwkJKChhbCA9IHMtPnNycF9jdHguVExTX2V4dF9zcnBfdXNlcm5hbWVfY2FsbGJhY2socywgYWQsIHMtPnNycF9jdHguU1JQX2NiX2FyZykpIT1TU0xfRVJST1JfTk9ORSkpCisJCQlyZXR1cm4gYWw7CisKKwkqYWQgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisJaWYgKChzLT5zcnBfY3R4Lk4gPT0gTlVMTCkgfHwKKwkJKHMtPnNycF9jdHguZyA9PSBOVUxMKSB8fAorCQkocy0+c3JwX2N0eC5zID09IE5VTEwpIHx8CisJCShzLT5zcnBfY3R4LnYgPT0gTlVMTCkpCisJCXJldHVybiBTU0wzX0FMX0ZBVEFMOworCisJUkFORF9ieXRlcyhiLCBzaXplb2YoYikpOworCXMtPnNycF9jdHguYiA9IEJOX2JpbjJibihiLHNpemVvZihiKSxOVUxMKTsKKwlPUEVOU1NMX2NsZWFuc2UoYixzaXplb2YoYikpOworCisJLyogQ2FsY3VsYXRlOiAgQiA9IChrdiArIGdeYikgJSBOICAqLworCisJcmV0dXJuICgocy0+c3JwX2N0eC5CID0gU1JQX0NhbGNfQihzLT5zcnBfY3R4LmIsIHMtPnNycF9jdHguTiwgcy0+c3JwX2N0eC5nLCBzLT5zcnBfY3R4LnYpKSAhPSBOVUxMKT8KKwkJCVNTTF9FUlJPUl9OT05FOlNTTDNfQUxfRkFUQUw7CisJfQorCisvKiBJZiB0aGUgc2VydmVyIGp1c3QgaGFzIHRoZSByYXcgcGFzc3dvcmQsIG1ha2UgdXAgYSB2ZXJpZmllciBlbnRyeSBvbiB0aGUgZmx5ICovCitpbnQgU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3KFNTTCAqcywgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqcGFzcywgY29uc3QgY2hhciAqZ3JwKQorCXsKKwlTUlBfZ04gKkdOID0gU1JQX2dldF9kZWZhdWx0X2dOKGdycCk7CisJaWYoR04gPT0gTlVMTCkgcmV0dXJuIC0xOworCXMtPnNycF9jdHguTiA9IEJOX2R1cChHTi0+Tik7CisJcy0+c3JwX2N0eC5nID0gQk5fZHVwKEdOLT5nKTsKKwlpZihzLT5zcnBfY3R4LnYgIT0gTlVMTCkKKwkJeworCQlCTl9jbGVhcl9mcmVlKHMtPnNycF9jdHgudik7CisJCXMtPnNycF9jdHgudiA9IE5VTEw7CisJCX0KKwlpZihzLT5zcnBfY3R4LnMgIT0gTlVMTCkKKwkJeworCQlCTl9jbGVhcl9mcmVlKHMtPnNycF9jdHgucyk7CisJCXMtPnNycF9jdHgucyA9IE5VTEw7CisJCX0KKwlpZighU1JQX2NyZWF0ZV92ZXJpZmllcl9CTih1c2VyLCBwYXNzLCAmcy0+c3JwX2N0eC5zLCAmcy0+c3JwX2N0eC52LCBHTi0+TiwgR04tPmcpKSByZXR1cm4gLTE7CisKKwlyZXR1cm4gMTsKKwl9CisKK2ludCBTU0xfc2V0X3NycF9zZXJ2ZXJfcGFyYW0oU1NMICpzLCBjb25zdCBCSUdOVU0gKk4sIGNvbnN0IEJJR05VTSAqZywKKwkJCSAgICAgQklHTlVNICpzYSwgQklHTlVNICp2LCBjaGFyICppbmZvKQorCXsKKwlpZiAoTiE9IE5VTEwpCisJCXsKKwkJaWYgKHMtPnNycF9jdHguTiAhPSBOVUxMKQorCQkJeworCQkJaWYgKCFCTl9jb3B5KHMtPnNycF9jdHguTixOKSkKKwkJCQl7CisJCQkJQk5fZnJlZShzLT5zcnBfY3R4Lk4pOworCQkJCXMtPnNycF9jdHguTiA9IE5VTEw7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQlzLT5zcnBfY3R4Lk4gPSBCTl9kdXAoTik7CisJCX0KKwlpZiAoZyE9IE5VTEwpCisJCXsKKwkJaWYgKHMtPnNycF9jdHguZyAhPSBOVUxMKQorCQkJeworCQkJaWYgKCFCTl9jb3B5KHMtPnNycF9jdHguZyxnKSkKKwkJCQl7CisJCQkJQk5fZnJlZShzLT5zcnBfY3R4LmcpOworCQkJCXMtPnNycF9jdHguZyA9IE5VTEw7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQlzLT5zcnBfY3R4LmcgPSBCTl9kdXAoZyk7CisJCX0KKwlpZiAoc2EhPSBOVUxMKQorCQl7CisJCWlmIChzLT5zcnBfY3R4LnMgIT0gTlVMTCkKKwkJCXsKKwkJCWlmICghQk5fY29weShzLT5zcnBfY3R4LnMsc2EpKQorCQkJCXsKKwkJCQlCTl9mcmVlKHMtPnNycF9jdHgucyk7CisJCQkJcy0+c3JwX2N0eC5zID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCWVsc2UKKwkJCXMtPnNycF9jdHgucyA9IEJOX2R1cChzYSk7CisJCX0KKwlpZiAodiE9IE5VTEwpCisJCXsKKwkJaWYgKHMtPnNycF9jdHgudiAhPSBOVUxMKQorCQkJeworCQkJaWYgKCFCTl9jb3B5KHMtPnNycF9jdHgudix2KSkKKwkJCQl7CisJCQkJQk5fZnJlZShzLT5zcnBfY3R4LnYpOworCQkJCXMtPnNycF9jdHgudiA9IE5VTEw7CisJCQkJfQorCQkJfQorCQllbHNlCisJCQlzLT5zcnBfY3R4LnYgPSBCTl9kdXAodik7CisJCX0KKwlzLT5zcnBfY3R4LmluZm8gPSBpbmZvOworCisJaWYgKCEocy0+c3JwX2N0eC5OKSB8fAorCQkhKHMtPnNycF9jdHguZykgfHwKKwkJIShzLT5zcnBfY3R4LnMpIHx8CisJCSEocy0+c3JwX2N0eC52KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDE7CisJfQorCitpbnQgU1JQX2dlbmVyYXRlX3NlcnZlcl9tYXN0ZXJfc2VjcmV0KFNTTCAqcyx1bnNpZ25lZCBjaGFyICptYXN0ZXJfa2V5KQorCXsKKwlCSUdOVU0gKksgPSBOVUxMLCAqdSA9IE5VTEw7CisJaW50IHJldCA9IC0xLCB0bXBfbGVuOworCXVuc2lnbmVkIGNoYXIgKnRtcCA9IE5VTEw7CisKKwlpZiAoIVNSUF9WZXJpZnlfQV9tb2RfTihzLT5zcnBfY3R4LkEscy0+c3JwX2N0eC5OKSkKKwkJZ290byBlcnI7CisJaWYgKCEodSA9IFNSUF9DYWxjX3Uocy0+c3JwX2N0eC5BLHMtPnNycF9jdHguQixzLT5zcnBfY3R4Lk4pKSkKKwkJZ290byBlcnI7CisJaWYgKCEoSyA9IFNSUF9DYWxjX3NlcnZlcl9rZXkocy0+c3JwX2N0eC5BLCBzLT5zcnBfY3R4LnYsIHUsIHMtPnNycF9jdHguYiwgcy0+c3JwX2N0eC5OKSkpCisJCWdvdG8gZXJyOworCisJdG1wX2xlbiA9IEJOX251bV9ieXRlcyhLKTsKKwlpZiAoKHRtcCA9IE9QRU5TU0xfbWFsbG9jKHRtcF9sZW4pKSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwlCTl9ibjJiaW4oSywgdG1wKTsKKwlyZXQgPSBzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsbWFzdGVyX2tleSx0bXAsdG1wX2xlbik7CitlcnI6CisJaWYgKHRtcCkKKwkJeworCQlPUEVOU1NMX2NsZWFuc2UodG1wLHRtcF9sZW4pIDsKKwkJT1BFTlNTTF9mcmVlKHRtcCk7CisJCX0KKwlCTl9jbGVhcl9mcmVlKEspOworCUJOX2NsZWFyX2ZyZWUodSk7CisJcmV0dXJuIHJldDsKKwl9CisKKy8qIGNsaWVudCBzaWRlICovCitpbnQgU1JQX2dlbmVyYXRlX2NsaWVudF9tYXN0ZXJfc2VjcmV0KFNTTCAqcyx1bnNpZ25lZCBjaGFyICptYXN0ZXJfa2V5KQorCXsKKwlCSUdOVU0gKnggPSBOVUxMLCAqdSA9IE5VTEwsICpLID0gTlVMTDsKKwlpbnQgcmV0ID0gLTEsIHRtcF9sZW47CisJY2hhciAqcGFzc3dkID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICp0bXAgPSBOVUxMOworCisJLyogQ2hlY2tzIGlmIGIgJSBuID09IDAKKwkgKi8KKwlpZiAoU1JQX1ZlcmlmeV9CX21vZF9OKHMtPnNycF9jdHguQixzLT5zcnBfY3R4Lk4pPT0wKSBnb3RvIGVycjsKKwlpZiAoISh1ID0gU1JQX0NhbGNfdShzLT5zcnBfY3R4LkEscy0+c3JwX2N0eC5CLHMtPnNycF9jdHguTikpKSBnb3RvIGVycjsKKwlpZiAocy0+c3JwX2N0eC5TUlBfZ2l2ZV9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayA9PSBOVUxMKSBnb3RvIGVycjsKKwlpZiAoIShwYXNzd2QgPSBzLT5zcnBfY3R4LlNSUF9naXZlX3NycF9jbGllbnRfcHdkX2NhbGxiYWNrKHMsIHMtPnNycF9jdHguU1JQX2NiX2FyZykpKSBnb3RvIGVycjsKKwlpZiAoISh4ID0gU1JQX0NhbGNfeChzLT5zcnBfY3R4LnMscy0+c3JwX2N0eC5sb2dpbixwYXNzd2QpKSkgZ290byBlcnI7CisJaWYgKCEoSyA9IFNSUF9DYWxjX2NsaWVudF9rZXkocy0+c3JwX2N0eC5OLCBzLT5zcnBfY3R4LkIsIHMtPnNycF9jdHguZywgeCwgcy0+c3JwX2N0eC5hLCB1KSkpIGdvdG8gZXJyOworCisJdG1wX2xlbiA9IEJOX251bV9ieXRlcyhLKTsKKwlpZiAoKHRtcCA9IE9QRU5TU0xfbWFsbG9jKHRtcF9sZW4pKSA9PSBOVUxMKSBnb3RvIGVycjsKKwlCTl9ibjJiaW4oSywgdG1wKTsKKwlyZXQgPSBzLT5tZXRob2QtPnNzbDNfZW5jLT5nZW5lcmF0ZV9tYXN0ZXJfc2VjcmV0KHMsbWFzdGVyX2tleSx0bXAsdG1wX2xlbik7CitlcnI6CisJaWYgKHRtcCkKKwkJeworCQlPUEVOU1NMX2NsZWFuc2UodG1wLHRtcF9sZW4pIDsKKwkJT1BFTlNTTF9mcmVlKHRtcCk7CisJCX0KKwlCTl9jbGVhcl9mcmVlKEspOworCUJOX2NsZWFyX2ZyZWUoeCk7CisJaWYgKHBhc3N3ZCkKKwkJeworCQlPUEVOU1NMX2NsZWFuc2UocGFzc3dkLHN0cmxlbihwYXNzd2QpKSA7CisJCU9QRU5TU0xfZnJlZShwYXNzd2QpOworCQl9CisJQk5fY2xlYXJfZnJlZSh1KTsKKwlyZXR1cm4gcmV0OworCX0KKworaW50IFNSUF9DYWxjX0FfcGFyYW0oU1NMICpzKQorCXsKKwl1bnNpZ25lZCBjaGFyIHJuZFtTU0xfTUFYX01BU1RFUl9LRVlfTEVOR1RIXTsKKworCWlmIChCTl9udW1fYml0cyhzLT5zcnBfY3R4Lk4pIDwgcy0+c3JwX2N0eC5zdHJlbmd0aCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHMtPnNycF9jdHguU1JQX3ZlcmlmeV9wYXJhbV9jYWxsYmFjayA9PU5VTEwgJiYgCisJCSFTUlBfY2hlY2tfa25vd25fZ05fcGFyYW0ocy0+c3JwX2N0eC5nLHMtPnNycF9jdHguTikpCisJCXJldHVybiAtMSA7CisKKwlSQU5EX2J5dGVzKHJuZCwgc2l6ZW9mKHJuZCkpOworCXMtPnNycF9jdHguYSA9IEJOX2JpbjJibihybmQsIHNpemVvZihybmQpLCBzLT5zcnBfY3R4LmEpOworCU9QRU5TU0xfY2xlYW5zZShybmQsIHNpemVvZihybmQpKTsKKworCWlmICghKHMtPnNycF9jdHguQSA9IFNSUF9DYWxjX0Eocy0+c3JwX2N0eC5hLHMtPnNycF9jdHguTixzLT5zcnBfY3R4LmcpKSkKKwkJcmV0dXJuIC0xOworCisJLyogV2UgY2FuIGhhdmUgYSBjYWxsYmFjayB0byB2ZXJpZnkgU1JQIHBhcmFtISEgKi8KKwlpZiAocy0+c3JwX2N0eC5TUlBfdmVyaWZ5X3BhcmFtX2NhbGxiYWNrICE9TlVMTCkgCisJCXJldHVybiBzLT5zcnBfY3R4LlNSUF92ZXJpZnlfcGFyYW1fY2FsbGJhY2socyxzLT5zcnBfY3R4LlNSUF9jYl9hcmcpOworCisJcmV0dXJuIDE7CisJfQorCitCSUdOVU0gKlNTTF9nZXRfc3JwX2coU1NMICpzKQorCXsKKwlpZiAocy0+c3JwX2N0eC5nICE9IE5VTEwpCisJCXJldHVybiBzLT5zcnBfY3R4Lmc7CisJcmV0dXJuIHMtPmN0eC0+c3JwX2N0eC5nOworCX0KKworQklHTlVNICpTU0xfZ2V0X3NycF9OKFNTTCAqcykKKwl7CisJaWYgKHMtPnNycF9jdHguTiAhPSBOVUxMKQorCQlyZXR1cm4gcy0+c3JwX2N0eC5OOworCXJldHVybiBzLT5jdHgtPnNycF9jdHguTjsKKwl9CisKK2NoYXIgKlNTTF9nZXRfc3JwX3VzZXJuYW1lKFNTTCAqcykKKwl7CisJaWYgKHMtPnNycF9jdHgubG9naW4gIT0gTlVMTCkKKwkJcmV0dXJuIHMtPnNycF9jdHgubG9naW47CisJcmV0dXJuIHMtPmN0eC0+c3JwX2N0eC5sb2dpbjsKKwl9CisKK2NoYXIgKlNTTF9nZXRfc3JwX3VzZXJpbmZvKFNTTCAqcykKKwl7CisJaWYgKHMtPnNycF9jdHguaW5mbyAhPSBOVUxMKQorCQlyZXR1cm4gcy0+c3JwX2N0eC5pbmZvOworCXJldHVybiBzLT5jdHgtPnNycF9jdHguaW5mbzsKKwl9CisKKyNkZWZpbmUgdGxzMV9jdHhfY3RybCBzc2wzX2N0eF9jdHJsCisjZGVmaW5lIHRsczFfY3R4X2NhbGxiYWNrX2N0cmwgc3NsM19jdHhfY2FsbGJhY2tfY3RybAorCitpbnQgU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lKFNTTF9DVFggKmN0eCxjaGFyICpuYW1lKQorCXsKKwlyZXR1cm4gdGxzMV9jdHhfY3RybChjdHgsU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1VTRVJOQU1FLDAsbmFtZSk7CisJfQorCitpbnQgU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkKFNTTF9DVFggKmN0eCxjaGFyICpwYXNzd29yZCkKKwl7CisJcmV0dXJuIHRsczFfY3R4X2N0cmwoY3R4LFNTTF9DVFJMX1NFVF9UTFNfRVhUX1NSUF9QQVNTV09SRCwwLHBhc3N3b3JkKTsKKwl9CisKK2ludCBTU0xfQ1RYX3NldF9zcnBfc3RyZW5ndGgoU1NMX0NUWCAqY3R4LCBpbnQgc3RyZW5ndGgpCisJeworCXJldHVybiB0bHMxX2N0eF9jdHJsKGN0eCwgU1NMX0NUUkxfU0VUX1RMU19FWFRfU1JQX1NUUkVOR1RILCBzdHJlbmd0aCwKKwkJCSAgICAgTlVMTCk7CisJfQorCitpbnQgU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjayhTU0xfQ1RYICpjdHgsIGludCAoKmNiKShTU0wgKix2b2lkICopKQorCXsKKwlyZXR1cm4gdGxzMV9jdHhfY2FsbGJhY2tfY3RybChjdHgsU1NMX0NUUkxfU0VUX1NSUF9WRVJJRllfUEFSQU1fQ0IsCisJCQkJICAgICAgKHZvaWQgKCopKHZvaWQpKWNiKTsKKwl9CisKK2ludCBTU0xfQ1RYX3NldF9zcnBfY2JfYXJnKFNTTF9DVFggKmN0eCwgdm9pZCAqYXJnKQorCXsKKwlyZXR1cm4gdGxzMV9jdHhfY3RybChjdHgsU1NMX0NUUkxfU0VUX1NSUF9BUkcsMCxhcmcpOworCX0KKworaW50IFNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjayhTU0xfQ1RYICpjdHgsCisJCQkJICAgICAgaW50ICgqY2IpKFNTTCAqLGludCAqLHZvaWQgKikpCisJeworCXJldHVybiB0bHMxX2N0eF9jYWxsYmFja19jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfVExTX0VYVF9TUlBfVVNFUk5BTUVfQ0IsCisJCQkJICAgICAgKHZvaWQgKCopKHZvaWQpKWNiKTsKKwl9CisKK2ludCBTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjayhTU0xfQ1RYICpjdHgsIGNoYXIgKigqY2IpKFNTTCAqLHZvaWQgKikpCisJeworCXJldHVybiB0bHMxX2N0eF9jYWxsYmFja19jdHJsKGN0eCxTU0xfQ1RSTF9TRVRfU1JQX0dJVkVfQ0xJRU5UX1BXRF9DQiwKKwkJCQkgICAgICAodm9pZCAoKikodm9pZCkpY2IpOworCX0KKworI2VuZGlmCg==