LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2UuICBXaGVuIHlvdSB1c2Ugb3IKICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCB5b3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlcgogKiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMdjIgTGljZW5zZSIpCiAqIG9yIEJTRCBMaWNlbnNlLgogKgogKiBHUEx2MiBMaWNlbnNlCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAqIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIEJTRCBMSUNFTlNFCiAqCiAqIENvcHlyaWdodChDKSAyMDE2IE1lZGlhVGVrIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAqICAgIGRpc3RyaWJ1dGlvbi4KICogICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwogKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCioqIElkOiAvL0RlcGFydG1lbnQvRGFWaW5jaS9CUkFOQ0hFUy9NVDY2MjBfV0lGSV9EUklWRVJfVjJfMy9pbmNsdWRlL3dsYW5fb2lkLmgjNAoqLwoKLyohIFxmaWxlICAgIndsYW5fb2lkLmgiCiogICAgXGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVjbGFpcmF0aW9uIGZpbGUgb2YgdGhlIFdMQU4gT0lEIHByb2Nlc3Npbmcgcm91dGluZXMKKgkgICBvZiBXaW5kb3dzIGRyaXZlciBmb3IgTWVkaWFUZWsgSW5jLiA4MDIuMTEgV2lyZWxlc3MgTEFOIEFkYXB0ZXJzLgoqLwoKCiNpZm5kZWYgX1dMQU5fT0lEX0gKI2RlZmluZSBfV0xBTl9PSURfSAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTSBQIEkgTCBFIFIgICBGIEwgQSBHIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgIEUgWCBUIEUgUiBOIEEgTCAgIFIgRSBGIEUgUiBFIE4gQyBFIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIE8gTiBTIFQgQSBOIFQgUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1NTSUQgICAgICAgICAgICAgICAgICAgICAgMzIKCiNkZWZpbmUgUEFSQU1fTUFDX0FERFJfTEVOICAgICAgICAgICAgICAgICAgICAgIDYKCiNkZWZpbmUgRVRIRVJORVRfSEVBREVSX1NaICAgICAgICAgICAgICAgICAgICAgIDE0CiNkZWZpbmUgRVRIRVJORVRfTUlOX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDYwCiNkZWZpbmUgRVRIRVJORVRfTUFYX1BLVF9TWiAgICAgICAgICAgICAgICAgICAgIDE1MTQKCiNkZWZpbmUgUEFSQU1fTUFYX0xFTl9SQVRFUyAgICAgICAgICAgICAgICAgICAgIDgKI2RlZmluZSBQQVJBTV9NQVhfTEVOX1JBVEVTX0VYICAgICAgICAgICAgICAgICAgMTYKCiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX1JFQVVUSCAgICAgICAgICAgICAgIDB4MDEKI2RlZmluZSBQQVJBTV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFICAgICAgICAgICAgMHgwMgojZGVmaW5lIFBBUkFNX0FVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUiAgICAgICAweDA2CiNkZWZpbmUgUEFSQU1fQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SICAgICAgICAgIDB4MEUKCiNkZWZpbmUgUEFSQU1fRUVQUk9NX1JFQURfTUVUSE9EX1JFQUQgICAgICAgICAgIDEKI2RlZmluZSBQQVJBTV9FRVBST01fUkVBRF9NRVRIT0RfR0VUU0laRSAgICAgICAgMAoKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUFYX0RCTSAgICAgICAgICAgICAgICAgKC0xMCkKI2RlZmluZSBQQVJBTV9XSFFMX1JTU0lfTUlOX0RCTSAgICAgICAgICAgICAgICAgKC0yMDApCgojZGVmaW5lIFBBUkFNX0RFVklDRV9XQUtFX1VQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9ERVZJQ0VfV0FLRV9PTl9QQVRURVJOX01BVENIX0VOQUJMRSAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fREVWSUNFX1dBS0VfT05fTUFHSUNfUEFDS0VUX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwNAoKI2RlZmluZSBQQVJBTV9XQUtFX1VQX01BR0lDX1BBQ0tFVCAgICAgICAgICAgICAgMHgwMDAwMDAwMQojZGVmaW5lIFBBUkFNX1dBS0VfVVBfUEFUVEVSTl9NQVRDSCAgICAgICAgICAgICAweDAwMDAwMDAyCiNkZWZpbmUgUEFSQU1fV0FLRV9VUF9MSU5LX0NIQU5HRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKCi8qIFBhY2tldCBmaWx0ZXIgYml0IGRlZmluaXRpb2luIChVSU5UXzMyIGJpdC13aXNlIGRlZmluaXRpb24pICovCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRCAgICAgICAgICAgIDB4MDAwMDAwMDEKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX01VTFRJQ0FTVCAgICAgICAgICAgMHgwMDAwMDAwMgojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVCAgICAgICAweDAwMDAwMDA0CiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QgICAgICAgICAgIDB4MDAwMDAwMDgKI2RlZmluZSBQQVJBTV9QQUNLRVRfRklMVEVSX1BST01JU0NVT1VTICAgICAgICAgMHgwMDAwMDAyMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfQUxMX0xPQ0FMICAgICAgICAgICAweDAwMDAwMDgwCiNpZiBDRkdfRU5BQkxFX1dJRklfRElSRUNUX0NGR184MDIxMQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUDJQX01BU0sgICAgICAgICAgICAgMHhDMDAwMDAwMAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfUFJPQkVfUkVRICAgICAgICAgICAweDgwMDAwMDAwCiNkZWZpbmUgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BQ1RJT05fRlJBTUUgICAgICAweDQwMDAwMDAwCiNlbmRpZgoKI2lmIENGR19TTFRfU1VQUE9SVAojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZWxzZQojZGVmaW5lIFBBUkFNX1BBQ0tFVF9GSUxURVJfU1VQUE9SVEVEICAgKFBBUkFNX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfCBcCgkJCQkJIFBBUkFNX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUIHwgXAoJCQkJCSBQQVJBTV9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8IFwKCQkJCQkgUEFSQU1fUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUKQojZW5kaWYKCiNkZWZpbmUgUEFSQU1fTUVNX0RVTVBfTUFYX1NJWkUgICAgICAgICAxNTM2CgojaWYgQ0ZHX1NVUFBPUlRfQ0FMX1JFU1VMVF9CQUNLVVBfVE9fSE9TVAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX1NJWkUJMTIwMAojZGVmaW5lIFBBUkFNX0NBTF9EQVRBX0RVTVBfTUFYX05VTQkJMzAwCiNlbmRpZgoKI2RlZmluZSBCVF9QUk9GSUxFX1BBUkFNX0xFTiAgICAgICAgOAoKI2RlZmluZSBFRlVTRV9BRERSX01BWCAgMHgzQkYJLyogQmFzZWQgb24gRUVQUk9NIGxheW91dCAyMDE2MDEyMCAqLwojaWYgQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUKCi8qIEZvciBNVDc2NjggKi8KI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9TVEFSVCAgICAgICAgMHgwM0EKI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9FTkQgICAgICAgICAgMHgxRDkKI2RlZmluZSBFRlVTRV9DT05URU5UX0JVRkZFUl9TSVpFCQkgIChFRlVTRV9DT05URU5UX0JVRkZFUl9FTkQgLSBFRlVTRV9DT05URU5UX0JVRkZFUl9TVEFSVCArIDEpCgovKiBGb3IgTVQ2NjMyICovCiNkZWZpbmUgRUZVU0VfQ09OVEVOVF9TSVpFCQkJMTYKCiNkZWZpbmUgRUZVU0VfQkxPQ0tfU0laRSAxNgojZGVmaW5lIEVFUFJPTV9TSVpFIDExODQKI2RlZmluZSBNQVhfRUVQUk9NX0JVRkZFUl9TSVpFCTEyMDAKI2VuZGlmIC8qIENGR19TVVBQT1JUX0JVRkZFUl9NT0RFICovCgojaWYgQ0ZHX1NVUFBPUlRfVFhfQkYKI2RlZmluZSBUWEJGX0NNRF9ORUVEX1RPX1JFU1BPTlNFKHU0VHhCZkNtZElkKSAodTRUeEJmQ21kSWQgPT0gQkZfUEZNVV9UQUdfUkVBRCB8fCBcCgkJCQkJCXU0VHhCZkNtZElkID09IEJGX1BST0ZJTEVfUkVBRCkKI2VuZGlmIC8qIENGR19TVVBQT1JUX1RYX0JGICovCiNkZWZpbmUgTVVfQ01EX05FRURfVE9fUkVTUE9OU0UodTRNdUNtZElkKSAodTRNdUNtZElkID09IE1VX0dFVF9DQUxDX0lOSVRfTUNTIHx8IFwKCQkJCQkgICAgdTRNdUNtZElkID09IE1VX0hRQV9HRVRfUUQgfHwgXAoJCQkJCSAgICB1NE11Q21kSWQgPT0gTVVfSFFBX0dFVF9DQUxDX0xRKQojaWYgQ0ZHX1NVUFBPUlRfTVVfTUlNTwovKiBATklURVNIOiBNQUNST1MgRm9yIEluaXQgTUNTIGNhbGN1bGF0aW9uIChNVSBNZXRyaWMgVGFibGUpICovCiNkZWZpbmUgTlVNX01VVF9GRUMgICAgICAgICAgICAgMgojZGVmaW5lIE5VTV9NVVRfTUNTICAgICAgICAgICAgIDEwCiNkZWZpbmUgTlVNX01VVF9OUl9OVU0gICAgICAgICAgMwojZGVmaW5lIE5VTV9NVVRfSU5ERVggICAgICAgICAgIDgKCiNkZWZpbmUgTlVNX09GX1VTRVIgICAgICAgICAgICAgMgojZGVmaW5lIE5VTV9PRl9NT0RVTCAgICAgICAgICAgIDUKI2VuZGlmIC8qIENGR19TVVBQT1JUX01VX01JTU8gKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgQSBUIEEgICBUIFkgUCBFIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogUGFyYW1ldGVycyBvZiBVc2VyIENvbmZpZ3VyYXRpb24gd2hpY2ggbWF0Y2ggdG8gTkRJUzUuMSAgICAgICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAqLwp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fQVVUSF9NT0RFX1QgewoJQVVUSF9NT0RFX09QRU4sCQkvKiE8IE9wZW4gc3lzdGVtICovCglBVVRIX01PREVfU0hBUkVELAkvKiE8IFNoYXJlZCBrZXkgKi8KCUFVVEhfTU9ERV9BVVRPX1NXSVRDSCwJLyohPCBFaXRoZXIgb3BlbiBzeXN0ZW0gb3Igc2hhcmVkIGtleSAqLwoJQVVUSF9NT0RFX1dQQSwKCUFVVEhfTU9ERV9XUEFfUFNLLAoJQVVUSF9NT0RFX1dQQV9OT05FLAkvKiE8IEZvciBBZCBob2MgKi8KCUFVVEhfTU9ERV9XUEEyLAoJQVVUSF9NT0RFX1dQQTJfUFNLLAoJQVVUSF9NT0RFX05VTQkJLyohPCBVcHBlciBib3VuZCwgbm90IHJlYWwgY2FzZSAqLwp9IEVOVU1fUEFSQU1fQVVUSF9NT0RFX1QsICpQX0VOVU1fUEFSQU1fQVVUSF9NT0RFX1Q7CgovKiBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyAqLy8qIEVuY3J5cHRpb24gdHlwZXMgKi8KdHlwZWRlZiBlbnVtIF9FTlVNX1dFUF9TVEFUVVNfVCB7CglFTlVNX1dFUF9FTkFCTEVELAoJRU5VTV9FTkNSWVBUSU9OMV9FTkFCTEVEID0gRU5VTV9XRVBfRU5BQkxFRCwKCUVOVU1fV0VQX0RJU0FCTEVELAoJRU5VTV9FTkNSWVBUSU9OX0RJU0FCTEVEID0gRU5VTV9XRVBfRElTQUJMRUQsCglFTlVNX1dFUF9LRVlfQUJTRU5ULAoJRU5VTV9FTkNSWVBUSU9OMV9LRVlfQUJTRU5UID0gRU5VTV9XRVBfS0VZX0FCU0VOVCwKCUVOVU1fV0VQX05PVF9TVVBQT1JURUQsCglFTlVNX0VOQ1JZUFRJT05fTk9UX1NVUFBPUlRFRCA9IEVOVU1fV0VQX05PVF9TVVBQT1JURUQsCglFTlVNX0VOQ1JZUFRJT04yX0VOQUJMRUQsCglFTlVNX0VOQ1JZUFRJT04yX0tFWV9BQlNFTlQsCglFTlVNX0VOQ1JZUFRJT04zX0VOQUJMRUQsCglFTlVNX0VOQ1JZUFRJT04zX0tFWV9BQlNFTlQKfSBFTlVNX1BBUkFNX0VOQ1JZUFRJT05fU1RBVFVTX1QsICpQX0VOVU1fUEFSQU1fRU5DUllQVElPTl9TVEFUVVNfVDsKCnR5cGVkZWYgVUlOVF84IFBBUkFNX01BQ19BRERSRVNTW1BBUkFNX01BQ19BRERSX0xFTl07Cgp0eXBlZGVmIFVJTlRfMzIgUEFSQU1fS0VZX0lOREVYOwp0eXBlZGVmIFVJTlRfNjQgUEFSQU1fS0VZX1JTQzsKdHlwZWRlZiBJTlRfMzIgUEFSQU1fUlNTSTsKCnR5cGVkZWYgVUlOVF8zMiBQQVJBTV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRDsKdHlwZWRlZiBVSU5UXzMyIFBBUkFNX1JUU19USFJFU0hPTEQ7Cgp0eXBlZGVmIFVJTlRfOCBQQVJBTV9SQVRFU1tQQVJBTV9NQVhfTEVOX1JBVEVTXTsKdHlwZWRlZiBVSU5UXzggUEFSQU1fUkFURVNfRVhbUEFSQU1fTUFYX0xFTl9SQVRFU19FWF07Cgp0eXBlZGVmIGVudW0gX0VOVU1fUEFSQU1fUEhZX1RZUEVfVCB7CglQSFlfVFlQRV84MDJfMTFBQkcgPSAwLAkvKiE8IENhbiBhc3NvY2lhdGVkIHdpdGggODAyLjExYWJnIEFQLAoJCQkJKiBTY2FuIGR1YWwgYmFuZC4KCQkJCSovCglQSFlfVFlQRV84MDJfMTFCRywJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMl8xMWJnIEFQLAoJCQkJKiAgU2NhbiBzaW5nbGUgYmFuZCBhbmQgbm90IHJlcG9ydCA4MDJfMTFhIEJTU3MuCgkJCQkqLwoJUEhZX1RZUEVfODAyXzExRywJLyohPCBDYW4gYXNzb2NpYXRlZCB3aXRoIDgwMl8xMWcgb25seSBBUCwKCQkJCSogU2NhbiBzaW5nbGUgYmFuZCBhbmQgbm90IHJlcG9ydCA4MDJfMTFhYiBCU1NzLgoJCQkJKi8KCVBIWV9UWVBFXzgwMl8xMUEsCS8qITwgQ2FuIGFzc29jaWF0ZWQgd2l0aCA4MDJfMTFhIG9ubHkgQVAsCgkJCQkqIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYmcgQlNTcy4KCQkJCSovCglQSFlfVFlQRV84MDJfMTFCLAkvKiE8IENhbiBhc3NvY2lhdGVkIHdpdGggODAyXzExYiBvbmx5IEFQCgkJCQkqIFNjYW4gc2luZ2xlIGJhbmQgYW5kIG5vdCByZXBvcnQgODAyXzExYWcgQlNTcy4KCQkJCSovCglQSFlfVFlQRV9OVU0JCS8qIDUgKi8KfSBFTlVNX1BBUkFNX1BIWV9UWVBFX1QsICpQX0VOVU1fUEFSQU1fUEhZX1RZUEVfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9PUF9NT0RFX1QgewoJTkVUX1RZUEVfSUJTUyA9IDAsCS8qITwgVHJ5IHRvIG1lcmdlL2VzdGFibGlzaCBhbiBBZEhvYywgZG8gcGVyaW9kaWMgU0NBTiBmb3IgbWVyZ2luZy4gKi8KCU5FVF9UWVBFX0lORlJBLAkJLyohPCBUcnkgdG8gam9pbiBhbiBJbmZyYXN0cnVjdHVyZSwgZG8gcGVyaW9kaWMgU0NBTiBmb3Igam9pbmluZy4gKi8KCU5FVF9UWVBFX0FVVE9fU1dJVENILAkvKiE8IFRyeSB0byBqb2luIGFuIEluZnJhc3RydWN0dXJlLCBpZiBmYWlsIHRoZW4gdHJ5IHRvIG1lcmdlIG9yICovCgkJCQkvKiAgZXN0YWJsaXNoIGFuIEFkSG9jLCBkbyBwZXJpb2RpYyBTQ0FOIGZvciBqb2luaW5nIG9yIG1lcmdpbmcuICovCglORVRfVFlQRV9ERURJQ0FURURfSUJTUywJLyohPCBUcnkgdG8gbWVyZ2UgYW4gQWRIb2MgZmlyc3QsICovCgkJCQkJLyogaWYgZmFpbCB0aGVuIGVzdGFibGlzaCBBZEhvYyBwZXJtYW5lbnRseSwgbm8gbW9yZSBTQ0FOLiAqLwoJTkVUX1RZUEVfTlVNCQkvKiA0ICovCn0gRU5VTV9QQVJBTV9PUF9NT0RFX1QsICpQX0VOVU1fUEFSQU1fT1BfTU9ERV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1NTSURfVCB7CglVSU5UXzMyIHU0U3NpZExlbjsJLyohPCBTU0lEIGxlbmd0aCBpbiBieXRlcy4gWmVybyBsZW5ndGggaXMgYnJvYWRjYXN0KGFueSkgU1NJRCAqLwoJVUlOVF84IGF1Y1NzaWRbUEFSQU1fTUFYX0xFTl9TU0lEXTsKfSBQQVJBTV9TU0lEX1QsICpQX1BBUkFNX1NTSURfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DT05ORUNUX1QgewoJVUlOVF8zMiB1NFNzaWRMZW47CS8qITwgU1NJRCBsZW5ndGggaW4gYnl0ZXMuIFplcm8gbGVuZ3RoIGlzIGJyb2FkY2FzdChhbnkpIFNTSUQgKi8KCVVJTlRfOCAqcHVjU3NpZDsKCVVJTlRfOCAqcHVjQnNzaWQ7CglVSU5UXzMyIHU0Q2VudGVyRnJlcTsKfSBQQVJBTV9DT05ORUNUX1QsICpQX1BBUkFNX0NPTk5FQ1RfVDsKCi8qIFRoaXMgaXMgZW51bSBkZWZpbmVkIGZvciB1c2VyIHRvIHNlbGVjdCBhbiBBZEhvYyBNb2RlICovCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9BRF9IT0NfTU9ERV9UIHsKCUFEX0hPQ19NT0RFXzExQiA9IDAsCS8qITwgQ3JlYXRlIDExYiBJQlNTIGlmIHdlIHN1cHBvcnQgODAyLjExYWJnLzgwMi4xMWJnLiAqLwoJQURfSE9DX01PREVfTUlYRURfMTFCRywJLyohPCBDcmVhdGUgMTFiZyBtaXhlZCBJQlNTIGlmIHdlIHN1cHBvcnQgODAyLjExYWJnLzgwMi4xMWJnLzgwMi4xMWcuICovCglBRF9IT0NfTU9ERV8xMUcsCS8qITwgQ3JlYXRlIDExZyBvbmx5IElCU1MgaWYgd2Ugc3VwcG9ydCA4MDIuMTFhYmcvODAyLjExYmcvODAyLjExZy4gKi8KCUFEX0hPQ19NT0RFXzExQSwJLyohPCBDcmVhdGUgMTFhIG9ubHkgSUJTUyBpZiB3ZSBzdXBwb3J0IDgwMi4xMWFiZy4gKi8KCUFEX0hPQ19NT0RFX05VTQkJLyogNCAqLwp9IEVOVU1fUEFSQU1fQURfSE9DX01PREVfVCwgKlBfRU5VTV9QQVJBTV9BRF9IT0NfTU9ERV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX01FRElBX1NUQVRFX1QgewoJUEFSQU1fTUVESUFfU1RBVEVfQ09OTkVDVEVELAoJUEFSQU1fTUVESUFfU1RBVEVfRElTQ09OTkVDVEVELAoJUEFSQU1fTUVESUFfU1RBVEVfVE9fQkVfSU5ESUNBVEVECS8qIGZvciBmb2xsb3dpbmcgTVNETiByZS1hc3NvY2lhdGlvbiBiZWhhdmlvciAqLwp9IEVOVU1fUEFSQU1fTUVESUFfU1RBVEVfVCwgKlBfRU5VTV9QQVJBTV9NRURJQV9TVEFURV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIHsKCVBBUkFNX05FVFdPUktfVFlQRV9GSCwKCVBBUkFNX05FVFdPUktfVFlQRV9EUywKCVBBUkFNX05FVFdPUktfVFlQRV9PRkRNNSwKCVBBUkFNX05FVFdPUktfVFlQRV9PRkRNMjQsCglQQVJBTV9ORVRXT1JLX1RZUEVfQVVUT01PREUsCglQQVJBTV9ORVRXT1JLX1RZUEVfTlVNCS8qITwgVXBwZXIgYm91bmQsIG5vdCByZWFsIGNhc2UgKi8KfSBFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9ULCAqUF9FTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfVFlQRV9MSVNUIHsKCVVJTlRfMzIgTnVtYmVyT2ZJdGVtczsJLyohPCBBdCBsZWFzdCAxICovCglFTlVNX1BBUkFNX05FVFdPUktfVFlQRV9UIGVOZXR3b3JrVHlwZVsxXTsKfSBQQVJBTV9ORVRXT1JLX1RZUEVfTElTVCwgKlBQQVJBTV9ORVRXT1JLX1RZUEVfTElTVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9QUklWQUNZX0ZJTFRFUl9UIHsKCVBSSVZBQ1lfRklMVEVSX0FDQ0VQVF9BTEwsCglQUklWQUNZX0ZJTFRFUl84MDIxeFdFUCwKCVBSSVZBQ1lfRklMVEVSX05VTQp9IEVOVU1fUEFSQU1fUFJJVkFDWV9GSUxURVJfVCwgKlBfRU5VTV9QQVJBTV9QUklWQUNZX0ZJTFRFUl9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1JFTE9BRF9ERUZBVUxUUyB7CglFTlVNX1JFTE9BRF9XRVBfS0VZUwp9IFBBUkFNX1JFTE9BRF9ERUZBVUxUUywgKlBfUEFSQU1fUkVMT0FEX0RFRkFVTFRTOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BNX1BBQ0tFVF9QQVRURVJOIHsKCVVJTlRfMzIgUHJpb3JpdHk7CS8qIEltcG9ydGFuY2Ugb2YgdGhlIGdpdmVuIHBhdHRlcm4uICovCglVSU5UXzMyIFJlc2VydmVkOwkvKiBDb250ZXh0IGluZm9ybWF0aW9uIGZvciB0cmFuc3BvcnRzLiAqLwoJVUlOVF8zMiBNYXNrU2l6ZTsJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgcGF0dGVybiBtYXNrLiAqLwoJVUlOVF8zMiBQYXR0ZXJuT2Zmc2V0OwkvKiBPZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgdGhpcyAqLwoJLyogc3RydWN0dXJlIHRvIHRoZSBwYXR0ZXJuIGJ5dGVzLiAqLwoJVUlOVF8zMiBQYXR0ZXJuU2l6ZTsJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgcGF0dGVybi4gKi8KCVVJTlRfMzIgUGF0dGVybkZsYWdzOwkvKiBGbGFncyAoVEJEKS4gKi8KfSBQQVJBTV9QTV9QQUNLRVRfUEFUVEVSTiwgKlBfUEFSQU1fUE1fUEFDS0VUX1BBVFRFUk47CgoKLyogQ29tYmluZSB1Y1RwVGVzdE1vZGUgYW5kIHVjU2lnbWFUZXN0TW9kZSBpbiBvbmUgZmxhZyAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMCwgZm9yIG5vcm1hbCBkcml2ZXIgKi8KLyogdWNUcFRlc3RNb2RlID09IDEsIGZvciBwdXJlIHRocm91Z2hwdXQgdGVzdCBtb2RlIChleDogUnZSKSAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMiwgZm9yIHNpZ21hIFRHbi9UR2FjL1BNRiAqLwovKiB1Y1RwVGVzdE1vZGUgPT0gMywgZm9yIHNpZ21hIFdNTSBQUyAqLwp0eXBlZGVmIGVudW0gX0VOVU1fVFBfVEVTVF9NT0RFX1QgewoJRU5VTV9UUF9URVNUX01PREVfTk9STUFMID0gMCwKCUVOVU1fVFBfVEVTVF9NT0RFX1RIUk9VR0hQVVQsCglFTlVNX1RQX1RFU1RfTU9ERV9TSUdNQV9BQ19OX1BNRiwKCUVOVU1fVFBfVEVTVF9NT0RFX1NJR01BX1dNTV9QUywKCUVOVU1fVFBfVEVTVF9NT0RFX05VTQp9IEVOVU1fVFBfVEVTVF9NT0RFX1QsICpQX0VOVU1fVFBfVEVTVF9NT0RFX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBTdHJ1Y3QgZGVmaW5pdGlvbiB0byBpbmRpY2F0ZSBzcGVjaWZpYyBldmVudC4gICAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgZW51bSBfRU5VTV9TVEFUVVNfVFlQRV9UIHsKCUVOVU1fU1RBVFVTX1RZUEVfQVVUSEVOVElDQVRJT04sCglFTlVNX1NUQVRVU19UWVBFX01FRElBX1NUUkVBTV9NT0RFLAoJRU5VTV9TVEFUVVNfVFlQRV9DQU5ESURBVEVfTElTVCwKCUVOVU1fU1RBVFVTX1RZUEVfTlVNCS8qITwgVXBwZXIgYm91bmQsIG5vdCByZWFsIGNhc2UgKi8KfSBFTlVNX1NUQVRVU19UWVBFX1QsICpQX0VOVU1fU1RBVFVTX1RZUEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV84MDJfMTFfQ09ORklHX0ZIX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyohPCBMZW5ndGggb2Ygc3RydWN0dXJlICovCglVSU5UXzMyIHU0SG9wUGF0dGVybjsJLyohPCBEZWZpbmVkIGFzIDgwMi4xMSAqLwoJVUlOVF8zMiB1NEhvcFNldDsJLyohPCB0byBvbmUgaWYgbm9uLTgwMi4xMSAqLwoJVUlOVF8zMiB1NER3ZWxsVGltZTsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCn0gUEFSQU1fODAyXzExX0NPTkZJR19GSF9ULCAqUF9QQVJBTV84MDJfMTFfQ09ORklHX0ZIX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX0NPTkZJR19UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEJlYWNvblBlcmlvZDsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCglVSU5UXzMyIHU0QVRJTVdpbmRvdzsJLyohPCBJbiB1bml0IG9mIEt1c2VjICovCglVSU5UXzMyIHU0RFNDb25maWc7CS8qITwgQ2hhbm5lbCBmcmVxdWVuY3kgaW4gdW5pdCBvZiBrSHogKi8KCVBBUkFNXzgwMl8xMV9DT05GSUdfRkhfVCByRkhDb25maWc7Cn0gUEFSQU1fODAyXzExX0NPTkZJR19ULCAqUF9QQVJBTV84MDJfMTFfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCB7CglFTlVNX1NUQVRVU19UWVBFX1QgZVN0YXR1c1R5cGU7Cn0gUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCwgKlBfUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9BVVRIX1JFUVVFU1RfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwkvKiE8IExlbmd0aCBvZiB0aGlzIHN0cnVjdCAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCc3NpZDsKCVVJTlRfMzIgdTRGbGFnczsJLyohPCBEZWZpbml0aW9ucyBhcmUgYXMgZm9sbG93cyAqLwp9IFBBUkFNX0FVVEhfUkVRVUVTVF9ULCAqUF9QQVJBTV9BVVRIX1JFUVVFU1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9BVVRIX0VWRU5UX1QgewoJUEFSQU1fU1RBVFVTX0lORElDQVRJT05fVCByU3RhdHVzOwoJUEFSQU1fQVVUSF9SRVFVRVNUX1QgYXJSZXF1ZXN0WzFdOwp9IFBBUkFNX0FVVEhfRVZFTlRfVCwgKlBfUEFSQU1fQVVUSF9FVkVOVF9UOwoKLyohIFxicmllZiBDYXBhYmlsaXRpZXMsIHByaXZhY3ksIHJzc2kgYW5kIElFcyBvZiBlYWNoIEJTU0lEICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9CU1NJRF9FWF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJNYWNBZGRyZXNzOwkvKiE8IEJTU0lEICovCglVSU5UXzggUmVzZXJ2ZWRbMl07CglQQVJBTV9TU0lEX1QgclNzaWQ7CS8qITwgU1NJRCAqLwoJVUlOVF8zMiB1NFByaXZhY3k7CS8qITwgTmVlZCBXRVAgZW5jcnlwdGlvbiAqLwoJUEFSQU1fUlNTSSByUnNzaTsJLyohPCBpbiBkQm0gKi8KCUVOVU1fUEFSQU1fTkVUV09SS19UWVBFX1QgZU5ldHdvcmtUeXBlSW5Vc2U7CglQQVJBTV84MDJfMTFfQ09ORklHX1QgckNvbmZpZ3VyYXRpb247CglFTlVNX1BBUkFNX09QX01PREVfVCBlT3BNb2RlOwoJUEFSQU1fUkFURVNfRVggclN1cHBvcnRlZFJhdGVzOwoJVUlOVF8zMiB1NElFTGVuZ3RoOwoJVUlOVF84IGF1Y0lFc1sxXTsKfSBQQVJBTV9CU1NJRF9FWF9ULCAqUF9QQVJBTV9CU1NJRF9FWF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0JTU0lEX0xJU1RfRVggewoJVUlOVF8zMiB1NE51bWJlck9mSXRlbXM7CS8qITwgYXQgbGVhc3QgMSAqLwoJUEFSQU1fQlNTSURfRVhfVCBhckJzc2lkWzFdOwp9IFBBUkFNX0JTU0lEX0xJU1RfRVhfVCwgKlBfUEFSQU1fQlNTSURfTElTVF9FWF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1dFUF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEtleUluZGV4OwkvKiE8IDA6IHBhaXJ3aXNlIGtleSwgb3RoZXJzIGdyb3VwIGtleXMgKi8KCVVJTlRfMzIgdTRLZXlMZW5ndGg7CS8qITwgS2V5IGxlbmd0aCBpbiBieXRlcyAqLwoJVUlOVF84IGF1Y0tleU1hdGVyaWFsWzMyXTsJLyohPCBLZXkgY29udGVudCBieSBhYm92ZSBzZXR0aW5nICovCn0gUEFSQU1fV0VQX1QsICpQX1BBUkFNX1dFUF9UOwoKLyohIFxicmllZiBLZXkgbWFwcGluZyBvZiBCU1NJRCAqLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fS0VZX1QgewoJVUlOVF8zMiB1NExlbmd0aDsJLyohPCBMZW5ndGggb2Ygc3RydWN0dXJlICovCglVSU5UXzMyIHU0S2V5SW5kZXg7CS8qITwgS2V5SUQgKi8KCVVJTlRfMzIgdTRLZXlMZW5ndGg7CS8qITwgS2V5IGxlbmd0aCBpbiBieXRlcyAqLwoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRDsJLyohPCBNQUMgYWRkcmVzcyAqLwoJUEFSQU1fS0VZX1JTQyByS2V5UlNDOwoJVUlOVF84IHVjQnNzSWR4OwoJVUlOVF84IHVjQ2lwaGVyOwoJVUlOVF84IGF1Y0tleU1hdGVyaWFsWzMyXTsJLyohPCBLZXkgY29udGVudCBieSBhYm92ZSBzZXR0aW5nICovCgkvKiBGb2xsb3dpbmcgYWRkIHRvIGNoYW5nZSB0aGUgb3JpZ2luYWwgd2luZG93cyBzdHJ1Y3R1cmUgKi8KfSBQQVJBTV9LRVlfVCwgKlBfUEFSQU1fS0VZX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUkVNT1ZFX0tFWV9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qITwgTGVuZ3RoIG9mIHN0cnVjdHVyZSAqLwoJVUlOVF8zMiB1NEtleUluZGV4OwkvKiE8IEtleUlEICovCglQQVJBTV9NQUNfQUREUkVTUyBhckJTU0lEOwkvKiE8IE1BQyBhZGRyZXNzICovCglVSU5UXzggdWNCc3NJZHg7Cn0gUEFSQU1fUkVNT1ZFX0tFWV9ULCAqUF9QQVJBTV9SRU1PVkVfS0VZX1Q7CgovKiEgXGJyaWVmIERlZmF1bHQga2V5ICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9ERUZBVUxUX0tFWV9UIHsKCVVJTlRfOCB1Y0tleUlEOwoJVUlOVF84IHVjVW5pY2FzdDsKCVVJTlRfOCB1Y011bHRpY2FzdDsKCVVJTlRfOCB1Y0Jzc0lkeDsKfSBQQVJBTV9ERUZBVUxUX0tFWV9ULCAqUF9QQVJBTV9ERUZBVUxUX0tFWV9UOwoKI2lmIENGR19TVVBQT1JUX1dBUEkKdHlwZWRlZiBlbnVtIF9FTlVNX0tFWV9UWVBFIHsKCUVOVU1fV1BJX1BBSVJXSVNFX0tFWSA9IDAsCglFTlVNX1dQSV9HUk9VUF9LRVkKfSBFTlVNX0tFWV9UWVBFOwoKdHlwZWRlZiBlbnVtIF9FTlVNX1dQSV9QUk9URUNUX1RZUEUgewoJRU5VTV9XUElfTk9ORSwKCUVOVU1fV1BJX1JYLAoJRU5VTV9XUElfVFgsCglFTlVNX1dQSV9SWF9UWAp9IEVOVU1fV1BJX1BST1RFQ1RfVFlQRTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9XUElfS0VZX1QgewoJRU5VTV9LRVlfVFlQRSBlS2V5VHlwZTsKCUVOVU1fV1BJX1BST1RFQ1RfVFlQRSBlRGlyZWN0aW9uOwoJVUlOVF84IHVjS2V5SUQ7CglVSU5UXzggYXVjUnN2WzNdOwoJVUlOVF84IGF1Y0FkZHJJbmRleFsxMl07CglVSU5UXzMyIHU0TGVuV1BJRUs7CglVSU5UXzggYXVjV1BJRUtbMjU2XTsKCVVJTlRfMzIgdTRMZW5XUElDSzsKCVVJTlRfOCBhdWNXUElDS1syNTZdOwoJVUlOVF84IGF1Y1BOWzE2XTsKfSBQQVJBTV9XUElfS0VZX1QsICpQX1BBUkFNX1dQSV9LRVlfVDsKI2VuZGlmCgp0eXBlZGVmIGVudW0gX1BBUkFNX1BPV0VSX01PREUgewoJUGFyYW1fUG93ZXJNb2RlQ0FNLAoJUGFyYW1fUG93ZXJNb2RlTUFYX1BTUCwKCVBhcmFtX1Bvd2VyTW9kZUZhc3RfUFNQLAoJUGFyYW1fUG93ZXJNb2RlTWF4CS8qIFVwcGVyIGJvdW5kLCBub3QgcmVhbCBjYXNlICovCn0gUEFSQU1fUE9XRVJfTU9ERSwgKlBQQVJBTV9QT1dFUl9NT0RFOwoKdHlwZWRlZiBlbnVtIF9QQVJBTV9ERVZJQ0VfUE9XRVJfU1RBVEUgewoJUGFyYW1EZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKCVBhcmFtRGV2aWNlU3RhdGVEMCwKCVBhcmFtRGV2aWNlU3RhdGVEMSwKCVBhcmFtRGV2aWNlU3RhdGVEMiwKCVBhcmFtRGV2aWNlU3RhdGVEMywKCVBhcmFtRGV2aWNlU3RhdGVNYXhpbXVtCn0gUEFSQU1fREVWSUNFX1BPV0VSX1NUQVRFLCAqUFBBUkFNX0RFVklDRV9QT1dFUl9TVEFURTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QT1dFUl9NT0RFX1QgewoJVUlOVF84IHVjQnNzSWR4OwoJUEFSQU1fUE9XRVJfTU9ERSBlUG93ZXJNb2RlOwp9IFBBUkFNX1BPV0VSX01PREVfVCwgKlBfUEFSQU1fUE9XRVJfTU9ERV9UOwoKI2lmIENGR19TVVBQT1JUXzgwMl8xMUQKCi8qISBcYnJpZWYgVGhlIGVudW1lcmF0aW9uIGRlZmluaXRpb25zIGZvciBPSURfSVBOX01VTFRJX0RPTUFJTl9DQVBBQklMSVRZICovCnR5cGVkZWYgZW51bSBfUEFSQU1fTVVMVElfRE9NQUlOX0NBUEFCSUxJVFkgewoJUGFyYW1NdWx0aURvbWFpbkNhcERpc2FibGVkLAoJUGFyYW1NdWx0aURvbWFpbkNhcEVuYWJsZWQKfSBQQVJBTV9NVUxUSV9ET01BSU5fQ0FQQUJJTElUWSwgKlBfUEFSQU1fTVVMVElfRE9NQUlOX0NBUEFCSUxJVFk7CiNlbmRpZgoKdHlwZWRlZiBzdHJ1Y3QgX0NPVU5UUllfU1RSSU5HX0VOVFJZIHsKCVVJTlRfOCBhdWNDb3VudHJ5Q29kZVsyXTsKCVVJTlRfOCBhdWNFbnZpcm9ubWVudENvZGVbMl07Cn0gQ09VTlRSWV9TVFJJTkdfRU5UUlksICpQX0NPVU5UUllfU1RSSU5HX0VOVFJZOwoKLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIGRlZmluaXRpb24gYW5kIGVudW1lcmF0aW9ucyAqLwojZGVmaW5lIFVBUFNEX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCiNkZWZpbmUgVUFQU0RfQUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMCkgfCBCSVQoNCkpCiNkZWZpbmUgVUFQU0RfQUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMSkgfCBCSVQoNSkpCiNkZWZpbmUgVUFQU0RfQUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMikgfCBCSVQoNikpCiNkZWZpbmUgVUFQU0RfQUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMykgfCBCSVQoNykpCiNkZWZpbmUgVUFQU0RfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVQVBTRF9BQzAgfCBVQVBTRF9BQzEgfCBVQVBTRF9BQzIgfCBVQVBTRF9BQzMpCgp0eXBlZGVmIGVudW0gX0VOVU1fUE9XRVJfU0FWRV9QUk9GSUxFX1QgewoJRU5VTV9QU1BfQ09OVElOVU9VU19BQ1RJVkUgPSAwLAoJRU5VTV9QU1BfQ09OVElOVU9VU19QT1dFUl9TQVZFLAoJRU5VTV9QU1BfRkFTVF9TV0lUQ0gsCglFTlVNX1BTUF9OVU0KfSBFTlVNX1BPV0VSX1NBVkVfUFJPRklMRV9ULCAqUEVOVU1fUE9XRVJfU0FWRV9QUk9GSUxFX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBTZXQvUXVlcnkgdGVzdGluZyB0eXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fODAyXzExX1RFU1RfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwoJVUlOVF8zMiB1NFR5cGU7Cgl1bmlvbiB7CgkJUEFSQU1fQVVUSF9FVkVOVF9UIEF1dGhlbnRpY2F0aW9uRXZlbnQ7CgkJUEFSQU1fUlNTSSBSc3NpVHJpZ2dlcjsKCX0gdTsKfSBQQVJBTV84MDJfMTFfVEVTVF9ULCAqUF9QQVJBTV84MDJfMTFfVEVTVF9UOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgU2V0L1F1ZXJ5IGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkuICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0FVVEhfRU5DUllQVElPTl9UIHsKCUVOVU1fUEFSQU1fQVVUSF9NT0RFX1QgZUF1dGhNb2RlU3VwcG9ydGVkOwoJRU5VTV9QQVJBTV9FTkNSWVBUSU9OX1NUQVRVU19UIGVFbmNyeXB0U3RhdHVzU3VwcG9ydGVkOwp9IFBBUkFNX0FVVEhfRU5DUllQVElPTl9ULCAqUF9QQVJBTV9BVVRIX0VOQ1JZUFRJT05fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DQVBBQklMSVRZX1QgewoJVUlOVF8zMiB1NExlbmd0aDsKCVVJTlRfMzIgdTRWZXJzaW9uOwoJVUlOVF8zMiB1NE5vT2ZQTUtJRHM7CglVSU5UXzMyIHU0Tm9PZkF1dGhFbmNyeXB0UGFpcnNTdXBwb3J0ZWQ7CglQQVJBTV9BVVRIX0VOQ1JZUFRJT05fVCBhckF1dGhlbnRpY2F0aW9uRW5jcnlwdGlvblN1cHBvcnRlZFsxXTsKfSBQQVJBTV9DQVBBQklMSVRZX1QsICpQX1BBUkFNX0NBUEFCSUxJVFlfVDsKCnR5cGVkZWYgVUlOVF84IFBBUkFNX1BNS0lEX1ZBTFVFWzE2XTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9CU1NJRF9JTkZPX1QgewoJUEFSQU1fTUFDX0FERFJFU1MgYXJCU1NJRDsKCVBBUkFNX1BNS0lEX1ZBTFVFIGFyUE1LSUQ7Cn0gUEFSQU1fQlNTSURfSU5GT19ULCAqUF9QQVJBTV9CU1NJRF9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUE1LSURfVCB7CglVSU5UXzMyIHU0TGVuZ3RoOwoJVUlOVF8zMiB1NEJTU0lESW5mb0NvdW50OwoJUEFSQU1fQlNTSURfSU5GT19UIGFyQlNTSURJbmZvWzFdOwp9IFBBUkFNX1BNS0lEX1QsICpQX1BBUkFNX1BNS0lEX1Q7CgovKiEgXGJyaWVmIFBNS0lEIGNhbmRpZGF0ZSBsaXN0cy4gKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BNS0lEX0NBTkRJREFURV9UIHsKCVBBUkFNX01BQ19BRERSRVNTIGFyQlNTSUQ7CglVSU5UXzMyIHU0RmxhZ3M7Cn0gUEFSQU1fUE1LSURfQ0FORElEQVRFX1QsICpQX1BBUkFNX1BNS0lEX0NBTkRJREFURV9UOwoKLyogI2lmZGVmIExJTlVYICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QTUtJRF9DQU5ESURBVEVfTElTVF9UIHsKCVVJTlRfMzIgdTRWZXJzaW9uOwkvKiE8IFZlcnNpb24gKi8KCVVJTlRfMzIgdTROdW1DYW5kaWRhdGVzOwkvKiE8IEhvdyBtYW55IGNhbmRpZGF0ZXMgZm9sbG93ICovCglQQVJBTV9QTUtJRF9DQU5ESURBVEVfVCBhckNhbmRpZGF0ZUxpc3RbMV07Cn0gUEFSQU1fUE1LSURfQ0FORElEQVRFX0xJU1RfVCwgKlBfUEFSQU1fUE1LSURfQ0FORElEQVRFX0xJU1RfVDsKLyogI2VuZGlmICovCgojZGVmaW5lIE5MODAyMTFfS0NLX0xFTiAgICAgICAgICAgICAgICAgMTYKI2RlZmluZSBOTDgwMjExX0tFS19MRU4gICAgICAgICAgICAgICAgIDE2CiNkZWZpbmUgTkw4MDIxMV9SRVBMQVlfQ1RSX0xFTiAgICAgICAgICA4Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fR1RLX1JFS0VZX0RBVEEgewoJVUlOVF84IGF1Y0tla1tOTDgwMjExX0tFS19MRU5dOwoJVUlOVF84IGF1Y0tja1tOTDgwMjExX0tDS19MRU5dOwoJVUlOVF84IGF1Y1JlcGxheUN0cltOTDgwMjExX1JFUExBWV9DVFJfTEVOXTsKCVVJTlRfOCB1Y0Jzc0luZGV4OwoJVUlOVF84IHVjUnN2WzNdOwoJVUlOVF8zMiB1NFByb3RvOwoJVUlOVF8zMiB1NFBhaXJ3aXNlQ2lwaGVyOwoJVUlOVF8zMiB1NEdyb3VwQ2lwaGVyOwoJVUlOVF8zMiB1NEtleU1nbXQ7CglVSU5UXzMyIHU0TWdtdEdyb3VwQ2lwaGVyOwp9IFBBUkFNX0dUS19SRUtFWV9EQVRBLCAqUF9QQVJBTV9HVEtfUkVLRVlfREFUQTsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRNY3JPZmZzZXQ7CglVSU5UXzMyIHU0TWNyRGF0YTsKfSBQQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTUNSX1JXX1NUUlVDVF9UOwoKI2lmIENGR19TVVBQT1JUX0NBTF9SRVNVTFRfQkFDS1VQX1RPX0hPU1QKLyoKICogRGVzY3JpcHRpb24gb2YgRWFjaCBQYXJhbWV0ZXJzIDoKICogdWNSZWFzb24gOgogKiAwIDogUXVlcnkgSW5mb3JtYXRpb24gb2YgVGhlcm1hbCBvciBDYWwgRGF0YSBMZW5ndGgKICogMSA6IFRyaWdnZXIgRlcgZG8gb3IgZG9uJ3QgQWxsIENhbAogKiAyIDogRHVtcCBEYXRhIHRvIEhvc3QKICogMyA6IFNlbmQgQmFja3VwcGVkIENhbCBEYXRhIHRvIEZXCiAqIDQgOiBGb3IgRGVidWcgVXNlLCBUZWxsIEZXIFByaW50IENhbCBEYXRhIChSb20gb3IgUmFtKQogKiB1Y0FjdGlvbiA6CiAqIDAgOiBSZWFkIFRoZXJtYWwgVmFsdWUKICogMSA6IEFzayB0aGUgQ2FsIERhdGEgVG90YWwgTGVuZ3RoIChSb20gYW5kIFJhbSkKICogMiA6IFRlbGwgRlcgZG8gQWxsIENhbAogKiAzIDogVGVsbCBGVyBkb24ndCBkbyBDYWwKICogNCA6IER1bXAgRGF0YSB0byBIb3N0IChSb20gb3IgUmFtKQogKiA1IDogU2VuZCBCYWNrdXBwZWQgQ2FsIERhdGEgdG8gRlcgKFJvbSBvciBSYW0pCiAqIDYgOiBGb3IgRGVidWcgVXNlLCBUZWxsIEZXIFByaW50IENhbCBEYXRhIChSb20gb3IgUmFtKQogKiB1Y05lZWRSZXNwIDoKICogMCA6IEZXIE5vIE5lZWQgdG8gUmVzcG9uc2UgYW4gRVZFTlQKICogMSA6IEZXIE5lZWQgdG8gUmVzcG9uc2UgYW4gRVZFTlQKICogdWNGcmFnTnVtIDoKICogU2VxdWVuY2UgTnVtYmVyCiAqIHVjUm9tUmFtIDoKICogMCA6IE9wZXJhdGlvbiBmb3IgUm9tIENhbCBEYXRhCiAqIDEgOiBPcGVyYXRpb24gZm9yIFJhbSBDYWwgRGF0YQogKiB1NFRoZXJtYWxWYWx1ZSA6CiAqIEZpZWxkIGZvciBmaWxsaW5nIHRoZSBUaGVybWFsIFZhbHVlIGluIEZXCiAqIHU0QWRkcmVzcyA6CiAqIER1bXBwZWQgU3RhcnRpbmcgQWRkcmVzcwogKiBVc2VkIGZvciBEdW1wIGFuZCBTZW5kIENhbCBEYXRhIEJldHdlZW4gRHJpdmVyIGFuZCBGVwogKiB1NExlbmd0aCA6CiAqIE1lbW9yeSBTaXplIG5lZWQgdG8gYWxsb2NhdGVkIGluIERyaXZlciBvciBEYXRhIFNpemUgaW4gYW4gRVZFTlQKICogVXNlZCBmb3IgRHVtcCBhbmQgU2VuZCBDYWwgRGF0YSBCZXR3ZWVuIERyaXZlciBhbmQgRlcKICogdTRSZW1haW5MZW5ndGggOgogKiBSZW1haW4gTGVuZ3RoIG5lZWQgdG8gRHVtcAogKiBVc2VkIGZvciBEdW1wIGFuZCBTZW5kIENhbCBEYXRhIEJldHdlZW4gRHJpdmVyIGFuZCBGVwogKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NBTF9CQUNLVVBfU1RSVUNUX1YyX1QgewoJVUlOVF84CXVjUmVhc29uOwoJVUlOVF84CXVjQWN0aW9uOwoJVUlOVF84CXVjTmVlZFJlc3A7CglVSU5UXzgJdWNGcmFnTnVtOwoJVUlOVF84CXVjUm9tUmFtOwoJVUlOVF8zMgl1NFRoZXJtYWxWYWx1ZTsKCVVJTlRfMzIgdTRBZGRyZXNzOwoJVUlOVF8zMgl1NExlbmd0aDsKCVVJTlRfMzIJdTRSZW1haW5MZW5ndGg7Cn0gUEFSQU1fQ0FMX0JBQ0tVUF9TVFJVQ1RfVjJfVCwgKlBfUEFSQU1fQ0FMX0JBQ0tVUF9TVFJVQ1RfVjJfVDsKI2VuZGlmCgojaWYgQ0ZHX1NVUFBPUlRfUUFfVE9PTAojaWYgQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUKdHlwZWRlZiBzdHJ1Y3QgX0JJTl9DT05URU5UX1QgewoJVUlOVF8xNiB1MkFkZHI7CglVSU5UXzggdWNWYWx1ZTsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IEJJTl9DT05URU5UX1QsICpQX0JJTl9DT05URU5UX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0VGVVNFX0JVRkZFUl9NT0RFX1QgewoJVUlOVF84IHVjU291cmNlTW9kZTsKCVVJTlRfOCB1Y0NvdW50OwoJVUlOVF84IHVjQ21kVHlwZTsKCVVJTlRfOCB1Y1Jlc2VydmVkOwoJVUlOVF84IGFCaW5Db250ZW50W01BWF9FRVBST01fQlVGRkVSX1NJWkVdOwp9IFBBUkFNX0NVU1RPTV9FRlVTRV9CVUZGRVJfTU9ERV9ULCAqUF9QQVJBTV9DVVNUT01fRUZVU0VfQlVGRkVSX01PREVfVDsKCi8qI2lmIChDRkdfRUVQUk9NX1BBR0VfQUNDRVNTID09IDEpKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9BQ0NFU1NfRUZVU0VfVCB7CglVSU5UXzMyIHU0QWRkcmVzczsKCVVJTlRfMzIgdTRWYWxpZDsKCVVJTlRfOCBhdWNEYXRhWzE2XTsKfSBQQVJBTV9DVVNUT01fQUNDRVNTX0VGVVNFX1QsICpQX1BBUkFNX0NVU1RPTV9BQ0NFU1NfRUZVU0VfVDsKCgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0VGVVNFX0ZSRUVfQkxPQ0tfVCB7CglVSU5UXzggIHVjR2V0RnJlZUJsb2NrOwoJVUlOVF84ICBhdWNSZXNlcnZlZFszXTsKfSBQQVJBTV9DVVNUT01fRUZVU0VfRlJFRV9CTE9DS19ULCAqUF9QQVJBTV9DVVNUT01fRUZVU0VfRlJFRV9CTE9DS19UOwoKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fR0VUX1RYX1BPV0VSX1QgewoJVUlOVF84IHVjVHhQd3JUeXBlOwoJVUlOVF84IHVjQ2VudGVyQ2hhbm5lbDsKCVVJTlRfOCB1Y0RiZGNJZHg7IC8qIDA6QmFuZCAwLCAxOiBCYW5kMSAqLwoJVUlOVF84IHVjQmFuZDsgLyogMDpHLWJhbmQgMTogQS1iYW5kKi8KCVVJTlRfOCB1Y1Jlc2VydmVkWzRdOwp9IFBBUkFNX0NVU1RPTV9HRVRfVFhfUE9XRVJfVCwgKlBfUEFSQU1fQ1VTVE9NX0dFVF9UWF9QT1dFUl9UOwoKCi8qI2VuZGlmKi8KCiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9CVUZGRVJfTU9ERSAqLwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9TRVRfVFhfVEFSR0VUX1BPV0VSX1QgewoJSU5UXzggY1R4UHdyMkc0Q2NrOyAgICAgICAvKiBzaWduZWQsIGluIHVuaXQgb2YgMC41ZEJtICovCglJTlRfOCBjVHhQd3IyRzREc3NzOyAgICAgIC8qIHNpZ25lZCwgaW4gdW5pdCBvZiAwLjVkQm0gKi8KCVVJTlRfOCB1Y1R4VGFyZ2V0UHdyOwkJLyogVHggdGFyZ2V0IHBvd2VyIGJhc2UgZm9yIGFsbCovCglVSU5UXzggdWNSZXNlcnZlZDsKCglJTlRfOCBjVHhQd3IyRzRPRkRNX0JQU0s7CglJTlRfOCBjVHhQd3IyRzRPRkRNX1FQU0s7CglJTlRfOCBjVHhQd3IyRzRPRkRNXzE2UUFNOwoJSU5UXzggY1R4UHdyMkc0T0ZETV9SZXNlcnZlZDsKCUlOVF84IGNUeFB3cjJHNE9GRE1fNDhNYnBzOwoJSU5UXzggY1R4UHdyMkc0T0ZETV81NE1icHM7CgoJSU5UXzggY1R4UHdyMkc0SFQyMF9CUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQyMF9RUFNLOwoJSU5UXzggY1R4UHdyMkc0SFQyMF8xNlFBTTsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNTsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNjsKCUlOVF84IGNUeFB3cjJHNEhUMjBfTUNTNzsKCglJTlRfOCBjVHhQd3IyRzRIVDQwX0JQU0s7CglJTlRfOCBjVHhQd3IyRzRIVDQwX1FQU0s7CglJTlRfOCBjVHhQd3IyRzRIVDQwXzE2UUFNOwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M1OwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M2OwoJSU5UXzggY1R4UHdyMkc0SFQ0MF9NQ1M3OwoKCUlOVF84IGNUeFB3cjVHT0ZETV9CUFNLOwoJSU5UXzggY1R4UHdyNUdPRkRNX1FQU0s7CglJTlRfOCBjVHhQd3I1R09GRE1fMTZRQU07CglJTlRfOCBjVHhQd3I1R09GRE1fUmVzZXJ2ZWQ7CglJTlRfOCBjVHhQd3I1R09GRE1fNDhNYnBzOwoJSU5UXzggY1R4UHdyNUdPRkRNXzU0TWJwczsKCglJTlRfOCBjVHhQd3I1R0hUMjBfQlBTSzsKCUlOVF84IGNUeFB3cjVHSFQyMF9RUFNLOwoJSU5UXzggY1R4UHdyNUdIVDIwXzE2UUFNOwoJSU5UXzggY1R4UHdyNUdIVDIwX01DUzU7CglJTlRfOCBjVHhQd3I1R0hUMjBfTUNTNjsKCUlOVF84IGNUeFB3cjVHSFQyMF9NQ1M3OwoKCUlOVF84IGNUeFB3cjVHSFQ0MF9CUFNLOwoJSU5UXzggY1R4UHdyNUdIVDQwX1FQU0s7CglJTlRfOCBjVHhQd3I1R0hUNDBfMTZRQU07CglJTlRfOCBjVHhQd3I1R0hUNDBfTUNTNTsKCUlOVF84IGNUeFB3cjVHSFQ0MF9NQ1M2OwoJSU5UXzggY1R4UHdyNUdIVDQwX01DUzc7Cn0gUEFSQU1fQ1VTVE9NX1NFVF9UWF9UQVJHRVRfUE9XRVJfVCwgKlBfUEFSQU1fQ1VTVE9NX1NFVF9UWF9UQVJHRVRfUE9XRVJfVDsKCgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0FDQ0VTU19SWF9TVEFUIHsKCVVJTlRfMzIgdTRTZXFOdW07CglVSU5UXzMyIHU0VG90YWxOdW07Cn0gUEFSQU1fQ1VTVE9NX0FDQ0VTU19SWF9TVEFULCAqUF9QQVJBTV9DVVNUT01fQUNDRVNTX1JYX1NUQVQ7CgovKiBFeHQgRGV2SW5mbyBUYWcgKi8KdHlwZWRlZiBlbnVtIF9FWFRfRU5VTV9ERVZJTkZPX1RBR19IQU5ETEVfVCB7CglERVZfSU5GT19BQ1RJVkUgPSAwLAoJREVWX0lORk9fQlNTSUQsCglERVZfSU5GT19NQVhfTlVNCn0gRVhUX0VOVU1fVEFHX0RFVklORk9fSEFORExFX1Q7CgovKiAgU1RBIHJlY29yZCBUTFYgdGFnICovCnR5cGVkZWYgZW51bSBfRVhUX0VOVU1fU1RBUkVDX1RBR19IQU5ETEVfVCB7CglTVEFfUkVDX0JBU0lDID0gMCwKCVNUQV9SRUNfUkEsCglTVEFfUkVDX1JBX0NPTU1PTl9JTkZPLAoJU1RBX1JFQ19SQV9VUERBVEUsCglTVEFfUkVDX0JGLAoJU1RBX1JFQ19NQVVOQUxfQVNTT0MsCglTVEFfUkVDX0JBID0gNiwKCVNUQV9SRUNfTUFYX05VTQp9IEVYVF9FTlVNX1RBR19TVEFSRUNfSEFORExFX1Q7CgojaWYgQ0ZHX1NVUFBPUlRfVFhfQkYKdHlwZWRlZiBlbnVtIF9CRl9BQ1RJT05fQ0FURUdPUlkgewoJQkZfU09VTkRJTkdfT0ZGID0gMCwKCUJGX1NPVU5ESU5HX09OLAoJQkZfSFdfQ1RSTCwKCUJGX0RBVEFfUEFDS0VUX0FQUExZLAoJQkZfUEZNVV9NRU1fQUxMT0NBVEUsCglCRl9QRk1VX01FTV9SRUxFQVNFLAoJQkZfUEZNVV9UQUdfUkVBRCwKCUJGX1BGTVVfVEFHX1dSSVRFLAoJQkZfUFJPRklMRV9SRUFELAoJQkZfUFJPRklMRV9XUklURSwKCUJGX1BOX1JFQUQsCglCRl9QTl9XUklURSwKCUJGX1BGTVVfTUVNX0FMTE9DX01BUF9SRUFECn0gQkZfQUNUSU9OX0NBVEVHT1JZOwoKZW51bSB7CglERVZJTkZPX0FDVElWRSA9IDAsCglERVZJTkZPX01BWF9OVU0gPSAxLAp9OwoKZW51bSB7CglERVZJTkZPX0FDVElWRV9GRUFUVVJFID0gKDEgPDwgREVWSU5GT19BQ1RJVkUpLAoJREVWSU5GT19NQVhfTlVNX0ZFQVRVUkUgPSAoMSA8PCBERVZJTkZPX01BWF9OVU0pCn07CgplbnVtIHsKCUJTU19JTkZPX09XTl9NQUMgPSAwLAoJQlNTX0lORk9fQkFTSUMgPSAxLAoJQlNTX0lORk9fUkZfQ0ggPSAyLAoJQlNTX0lORk9fUE0gPSAzLAoJQlNTX0lORk9fVUFQU0QgPSA0LAoJQlNTX0lORk9fUk9BTV9ERVRFQ1RJT04gPSA1LAoJQlNTX0lORk9fTFFfUk0gPSA2LAoJQlNTX0lORk9fRVhUX0JTUyA9IDcsCglCU1NfSU5GT19CUk9BRENBU1RfSU5GTyA9IDgsCglCU1NfSU5GT19TWU5DX01PREUgPSA5LAoJQlNTX0lORk9fTUFYX05VTQp9OwoKdHlwZWRlZiB1bmlvbiBfUEZNVV9QUk9GSUxFX1RBRzEgewoJc3RydWN0IHsKCQlVSU5UXzMyIHVjUHJvZmlsZUlEOjc7CS8qIFs2OjBdIDogMCB+IDYzICovCgkJVUlOVF8zMiB1Y1R4QmY6MTsJLyogWzddIDogMDogaUJGLCAxOiBlQkYgKi8KCQlVSU5UXzMyIHVjREJXOjI7CS8qIFs5OjhdIDogMC8xLzIvMzogRFcyMC80MC84MC8xNjBOQyAqLwoJCVVJTlRfMzIgdWNTVV9NVToxOwkvKiBbMTBdIDogMDpTVSwgMTogTVUgKi8KCQlVSU5UXzMyIHVjSW52YWxpZFByb2Y6MTsJLyogWzExXSA6IDA6ZGVmYXVsdCwgMTogVGhpcyBwcm9maWxlIG51bWJlciBpcyBpbnZhbGlkIGJ5IFNXICovCgkJVUlOVF8zMiB1Y1JNU0Q6MzsJLyogWzE0OjEyXSA6IFJNU0QgdmFsdWUgZnJvbSBDRSAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyMUNvbElkeDozOwkvKiBbMTcgOiAxNV0gOiBjb2x1bW4gaW5kZXggOiAwIH4gNSAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyMVJvd0lkeDo2OwkvKiBbMjMgOiAxOF0gOiByb3cgaW5kZXggOiAwIH4gNjMgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjJDb2xJZHg6MzsJLyogWzI2IDogMjRdIDogY29sdW1uIGluZGV4IDogMCB+IDUgKi8KCQlVSU5UXzMyIHVjTWVtQWRkcjJSb3dJZHg6NTsJLyogWzMxIDogMjddIDogcm93IGluZGV4IDogMCB+IDYzICovCgkJVUlOVF8zMiB1Y01lbUFkZHIyUm93SWR4TXNiOjE7CS8qIFszMl0gOiBNU0Igb2Ygcm93IGluZGV4ICovCgkJVUlOVF8zMiB1Y01lbUFkZHIzQ29sSWR4OjM7CS8qIFszNSA6IDMzXSA6IGNvbHVtbiBpbmRleCA6IDAgfiA1ICovCgkJVUlOVF8zMiB1Y01lbUFkZHIzUm93SWR4OjY7CS8qIFs0MSA6IDM2XSA6IHJvdyBpbmRleCA6IDAgfiA2MyAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyNENvbElkeDozOwkvKiBbNDQgOiA0Ml0gOiBjb2x1bW4gaW5kZXggOiAwIH4gNSAqLwoJCVVJTlRfMzIgdWNNZW1BZGRyNFJvd0lkeDo2OwkvKiBbNTAgOiA0NV0gOiByb3cgaW5kZXggOiAwIH4gNjMgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQ6MTsJLyogWzUxXSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y05yb3c6MjsJLyogWzUzIDogNTJdIDogTnJvdyAqLwoJCVVJTlRfMzIgdWNOY29sOjI7CS8qIFs1NSA6IDU0XSA6IE5jb2wgKi8KCQlVSU5UXzMyIHVjTmdyb3VwOjI7CS8qIFs1NyA6IDU2XSA6IE5ncm91cCAqLwoJCVVJTlRfMzIgdWNMTToyOwkvKiBbNTkgOiA1OF0gOiAwLzEvMiAqLwoJCVVJTlRfMzIgdWNDb2RlQm9vazoyOwkvKiBbNjE6NjBdIDogQ29kZSBib29rICovCgkJVUlOVF8zMiB1Y0h0Y0V4aXN0OjE7CS8qIFs2Ml0gOiBIdGNFeGlzdCAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDE6MTsJLyogWzYzXSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y1NOUl9TVFMwOjg7CS8qIFs3MTo2NF0gOiBTTlJfU1RTMCAqLwoJCVVJTlRfMzIgdWNTTlJfU1RTMTo4OwkvKiBbNzk6NzJdIDogU05SX1NUUzEgKi8KCQlVSU5UXzMyIHVjU05SX1NUUzI6ODsJLyogWzg3OjgwXSA6IFNOUl9TVFMyICovCgkJVUlOVF8zMiB1Y1NOUl9TVFMzOjg7CS8qIFs5NTo4OF0gOiBTTlJfU1RTMyAqLwoJCVVJTlRfMzIgdWNJQmZMbmFJZHg6ODsJLyogWzEwMzo5Nl0gOiBpQkYgTE5BIGluZGV4ICovCgl9IHJGaWVsZDsKCVVJTlRfMzIgYXU0UmF3RGF0YVs0XTsKfSBQRk1VX1BST0ZJTEVfVEFHMSwgKlBfUEZNVV9QUk9GSUxFX1RBRzE7Cgp0eXBlZGVmIHVuaW9uIF9QRk1VX1BST0ZJTEVfVEFHMiB7CglzdHJ1Y3QgewoJCVVJTlRfMzIgdTJTbWFydEFudDoxMjsJLyogWzExOjBdIDogU21hcnQgQW50IGNvbmZpZyAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDA6MzsJLyogWzE0OjEyXSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y1NFSWR4OjU7CS8qIFsxOToxNV0gOiBTRSBpbmRleCAqLwoJCVVJTlRfMzIgdWNSTVNEVGhkOjM7CS8qIFsyMjoyMF0gOiBSTVNEIFRocmVzaG9sZCAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDE6MTsJLyogWzIzXSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y01DU1RoTDFTUzo0OwkvKiBbMjc6MjRdIDogTUNTIFRIIGxvbmcgMVNTICovCgkJVUlOVF8zMiB1Y01DU1RoUzFTUzo0OwkvKiBbMzE6MjhdIDogTUNTIFRIIHNob3J0IDFTUyAqLwoJCVVJTlRfMzIgdWNNQ1NUaEwyU1M6NDsJLyogWzM1OjMyXSA6IE1DUyBUSCBsb25nIDJTUyAqLwoJCVVJTlRfMzIgdWNNQ1NUaFMyU1M6NDsJLyogWzM5OjM2XSA6IE1DUyBUSCBzaG9ydCAyU1MgKi8KCQlVSU5UXzMyIHVjTUNTVGhMM1NTOjQ7CS8qIFs0Mzo0MF0gOiBNQ1MgVEggbG9uZyAzU1MgKi8KCQlVSU5UXzMyIHVjTUNTVGhTM1NTOjQ7CS8qIFs0Nzo0NF0gOiBNQ1MgVEggc2hvcnQgM1NTICovCgkJVUlOVF8zMiB1Y2lCZlRpbWVPdXQ6ODsJLyogWzU1OjQ4XSA6IGlCRiB0aW1lb3V0IGxpbWl0ICovCgkJVUlOVF8zMiB1Y1Jlc2VydmVkMjo4OwkvKiBbNjM6NTZdIDogUmVzZXJ2ZWQgKi8KCQlVSU5UXzMyIHVjUmVzZXJ2ZWQzOjg7CS8qIFs3MTo2NF0gOiBSZXNlcnZlZCAqLwoJCVVJTlRfMzIgdWNSZXNlcnZlZDQ6ODsJLyogWzc5OjcyXSA6IFJlc2VydmVkICovCgkJVUlOVF8zMiB1Y2lCZkRCVzoyOwkvKiBbODE6ODBdIDogaUJGIGRlc2lyZWQgREJXIDAvMS8yLzMgOiBCVzIwLzQwLzgwLzE2ME5DICovCgkJVUlOVF8zMiB1Y2lCZk5jb2w6MjsJLyogWzgzOjgyXSA6IGlCRiBkZXNpcmVkIE5jb2wgPSAxIH4gMyAqLwoJCVVJTlRfMzIgdWNpQmZOcm93OjI7CS8qIFs4NTo4NF0gOiBpQkYgZGVzaXJlZCBOcm93ID0gMSB+IDQgKi8KCQlVSU5UXzMyIHUyUmVzZXJ2ZWQ1OjEwOwkvKiBbOTU6ODZdIDogUmVzZXJ2ZWQgKi8KCX0gckZpZWxkOwoJVUlOVF8zMiBhdTRSYXdEYXRhWzNdOwp9IFBGTVVfUFJPRklMRV9UQUcyLCAqUF9QRk1VX1BST0ZJTEVfVEFHMjsKCnR5cGVkZWYgdW5pb24gX1BGTVVfREFUQSB7CglzdHJ1Y3QgewoJCVVJTlRfMzIgdTJQaGkxMTo5OwoJCVVJTlRfMzIgdWNQc2kyMTo3OwoJCVVJTlRfMzIgdTJQaGkyMTo5OwoJCVVJTlRfMzIgdWNQc2kzMTo3OwoJCVVJTlRfMzIgdTJQaGkzMTo5OwoJCVVJTlRfMzIgdWNQc2k0MTo3OwoJCVVJTlRfMzIgdTJQaGkyMjo5OwoJCVVJTlRfMzIgdWNQc2kzMjo3OwoJCVVJTlRfMzIgdTJQaGkzMjo5OwoJCVVJTlRfMzIgdWNQc2k0Mjo3OwoJCVVJTlRfMzIgdTJQaGkzMzo5OwoJCVVJTlRfMzIgdWNQc2k0Mzo3OwoJCVVJTlRfMzIgdTJkU05SMDA6NDsKCQlVSU5UXzMyIHUyZFNOUjAxOjQ7CgkJVUlOVF8zMiB1MmRTTlIwMjo0OwoJCVVJTlRfMzIgdTJkU05SMDM6NDsKCQlVSU5UXzMyIHUyUmVzZXJ2ZWQ6MTY7Cgl9IHJGaWVsZDsKCVVJTlRfMzIgYXU0UmF3RGF0YVs1XTsKfSBQRk1VX0RBVEEsICpQX1BGTVVfREFUQTsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX1RBR19SRUFEX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUHJvZmlsZUlkeDsKCUJPT0xFQU4gZmdCZmVyOwoJVUlOVF84IHVjUnN2Owp9IFBST0ZJTEVfVEFHX1JFQURfVCwgKlBfUFJPRklMRV9UQUdfUkVBRF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfVEFHX1dSSVRFX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUGZtdUlkOwoJVUlOVF84IHVjQnVmZmVyWzI4XTsKfSBQUk9GSUxFX1RBR19XUklURV9ULCAqUF9QUk9GSUxFX1RBR19XUklURV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfREFUQV9SRUFEX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjUGZtdUlkeDsKCUJPT0xFQU4gZmdCRmVyOwoJVUlOVF84IHVjUmVzZXJ2ZWRbM107CglVSU5UXzggdWNTdWJDYXJySWR4THNiOwoJVUlOVF84IHVjU3ViQ2FycklkeE1zYjsKfSBQUk9GSUxFX0RBVEFfUkVBRF9ULCAqUF9QUk9GSUxFX0RBVEFfUkVBRF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfREFUQV9XUklURV9UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1BmbXVJZHg7CglVSU5UXzggdTJTdWJDYXJySWR4THNiOwoJVUlOVF84IHUyU3ViQ2FycklkeE1zYjsKCVBGTVVfREFUQSByVHhCZlBmbXVEYXRhOwp9IFBST0ZJTEVfREFUQV9XUklURV9ULCAqUF9QUk9GSUxFX0RBVEFfV1JJVEVfVDsKCnR5cGVkZWYgc3RydWN0IF9QUk9GSUxFX1BOX1JFQURfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQZm11SWR4OwoJVUlOVF84IHVjUmVzZXJ2ZWRbMl07Cn0gUFJPRklMRV9QTl9SRUFEX1QsICpQX1BST0ZJTEVfUE5fUkVBRF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BST0ZJTEVfUE5fV1JJVEVfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNQZm11SWR4OwoJVUlOVF8xNiB1MmJ3OwoJVUlOVF84IHVjQnVmWzMyXTsKfSBQUk9GSUxFX1BOX1dSSVRFX1QsICpQX1BST0ZJTEVfUE5fV1JJVEVfVDsKCnR5cGVkZWYgZW51bSBfQkZfU09VTkRJTkdfTU9ERSB7CglTVV9TT1VORElORyA9IDAsCglNVV9TT1VORElORywKCVNVX1BFUklPRElDX1NPVU5ESU5HLAoJTVVfUEVSSU9ESUNfU09VTkRJTkcKfSBCRl9TT1VORElOR19NT0RFOwoKdHlwZWRlZiBzdHJ1Y3QgX0VYVF9DTURfRVRYQmZfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UIHsKCVVJTlRfOCB1Y0NtZENhdGVnb3J5SUQ7CglVSU5UXzggdWNTdU11U25kTW9kZTsKCVVJTlRfOCB1Y1dsYW5JZHg7CglVSU5UXzMyIHU0U291bmRpbmdJbnRlcnZhbDsJLyogQnkgbXMgKi8KfSBFWFRfQ01EX0VUWEJmX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCwgKlBfRVhUX0NNRF9FVFhCZl9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfRVhUX0NNRF9FVFhCZl9NVV9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QgewoJVUlOVF84IHVjQ21kQ2F0ZWdvcnlJRDsKCVVJTlRfOCB1Y1N1TXVTbmRNb2RlOwoJVUlOVF84IHVjV2xhbklkWzRdOwoJVUlOVF84IHVjU3RhTnVtOwoJVUlOVF8zMiB1NFNvdW5kaW5nSW50ZXJ2YWw7CS8qIEJ5IG1zICovCn0gRVhUX0NNRF9FVFhCZl9NVV9TTkRfUEVSSU9ESUNfVFJJR0dFUl9DVFJMX1QsICpQX0VYVF9DTURfRVRYQmZfTVVfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UOwoKLyogRGV2aWNlIGluZm9ybWF0aW9uIChUYWcwKSAqLwp0eXBlZGVmIHN0cnVjdCBfQ01EX0RFVklORk9fQUNUSVZFX1QgewoJVUlOVF8xNiB1MlRhZzsJCS8qIFRhZyA9IDB4MDAgKi8KCVVJTlRfMTYgdTJMZW5ndGg7CglVSU5UXzggdWNBY3RpdmU7CglVSU5UXzggdWNCYW5kTnVtOwoJVUlOVF84IGF1Y093bk1hY0FkZHJbNl07CglVSU5UXzggYXVjUmVzZXJ2ZVs0XTsKfSBDTURfREVWSU5GT19BQ1RJVkVfVCwgKlBfQ01EX0RFVklORk9fQUNUSVZFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfQlNTSU5GT19CQVNJQ19UIHsKCS8qIEJhc2ljIEJTUyBpbmZvcm1hdGlvbiAoVGFnMSkgKi8KCVVJTlRfMTYgdTJUYWc7CQkvKiBUYWcgPSAweDAxICovCglVSU5UXzE2IHUyTGVuZ3RoOwoJVUlOVF8zMiB1NE5ldHdvcmtUeXBlOwoJVUlOVF84IHVjQWN0aXZlOwoJVUlOVF84IHVjUmVzZXJ2ZTA7CglVSU5UXzE2IHUyQmNuSW50ZXJ2YWw7CglVSU5UXzggYXVjQlNTSURbNl07CglVSU5UXzggdWNXbW1JZHg7CglVSU5UXzggdWNEdGltUGVyaW9kOwoJVUlOVF84IHVjQmNNY1dsYW5pZHg7CS8qIGluZGljYXRlIHdoaWNoIHdsYW4taWR4IHVzZWQgZm9yIE1DL0JDIHRyYW5zbWlzc2lvbi4gKi8KCVVJTlRfOCB1Y0NpcGhlclN1aXQ7CglVSU5UXzggYWN1UmVzZXJ2ZVs2XTsKfSBDTURfQlNTSU5GT19CQVNJQ19ULCAqUF9DTURfQlNTSU5GT19CQVNJQ19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYQkZfUEZNVV9TVEFfSU5GTyB7CglVSU5UXzE2IHUyUGZtdUlkOwkvKiAweEZGRkYgbWVhbnMgbm8gYWNjZXNzIHJpZ2h0IGZvciBQRk1VICovCglVSU5UXzggZmdTVV9NVTsJCS8qIDAgOiBTVSwgMSA6IE1VICovCglVSU5UXzggZmdFVHhCZkNhcDsJLyogMCA6IElUeEJmLCAxIDogRVR4QmYgKi8KCVVJTlRfOCB1Y1NvdW5kaW5nUGh5OwkvKiAwOiBsZWdhY3ksIDE6IE9GRE0sIDI6IEhULCA0OiBWSFQgKi8KCVVJTlRfOCB1Y05kcGFSYXRlOwoJVUlOVF84IHVjTmRwUmF0ZTsKCVVJTlRfOCB1Y1JlcHRQb2xsUmF0ZTsKCVVJTlRfOCB1Y1R4TW9kZTsJLyogMDogbGVnYWN5LCAxOiBPRkRNLCAyOiBIVCwgNDogVkhUICovCglVSU5UXzggdWNOYzsKCVVJTlRfOCB1Y05yOwoJVUlOVF84IHVjQ0JXOwkJLyogMCA6IDIwTSwgMSA6IDQwTSwgMiA6IDgwTSwgMyA6IDgwICsgODBNICovCglVSU5UXzggdWNUb3RNZW1SZXF1aXJlOwoJVUlOVF84IHVjTWVtUmVxdWlyZTIwTTsKCVVJTlRfOCB1Y01lbVJvdzA7CglVSU5UXzggdWNNZW1Db2wwOwoJVUlOVF84IHVjTWVtUm93MTsKCVVJTlRfOCB1Y01lbUNvbDE7CglVSU5UXzggdWNNZW1Sb3cyOwoJVUlOVF84IHVjTWVtQ29sMjsKCVVJTlRfOCB1Y01lbVJvdzM7CglVSU5UXzggdWNNZW1Db2wzOwoJVUlOVF8xNiB1MlNtYXJ0QW50OwoJVUlOVF84IHVjU0VJZHg7CglVSU5UXzggdWNpQmZUaW1lT3V0OwoJVUlOVF84IHVjaUJmREJXOwoJVUlOVF84IHVjaUJmTmNvbDsKCVVJTlRfOCB1Y2lCZk5yb3c7CglVSU5UXzggYXVjUmVzZXJ2ZWRbM107Cn0gVFhCRl9QRk1VX1NUQV9JTkZPLCAqUF9UWEJGX1BGTVVfU1RBX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfU1RBX1JFQ19VUERfRU5UUllfVCB7CglUWEJGX1BGTVVfU1RBX0lORk8gclR4QmZQZm11U3RhSW5mbzsKCVVJTlRfOCBhdWNBZGRyW1BBUkFNX01BQ19BRERSX0xFTl07CglVSU5UXzggdWNBaWQ7CglVSU5UXzggdWNSc3Y7Cn0gU1RBX1JFQ19VUERfRU5UUllfVCwgKlBfU1RBX1JFQ19VUERfRU5UUllfVDsKCnR5cGVkZWYgc3RydWN0IF9TVEFSRUNfQ09NTU9OX1QgewoJLyogQmFzaWMgU1RBIHJlY29yZCAoR3JvdXAwKSAqLwoJVUlOVF8xNiB1MlRhZzsJCS8qIFRhZyA9IDB4MDAgKi8KCVVJTlRfMTYgdTJMZW5ndGg7CglVSU5UXzMyIHU0Q29ubmVjdGlvblR5cGU7CglVSU5UXzggdWNDb25uZWN0aW9uU3RhdGU7CglVSU5UXzggdWNJc1FCU1M7CglVSU5UXzE2IHUyQUlEOwoJVUlOVF84IGF1Y1BlZXJNYWNBZGRyWzZdOwoJVUlOVF8xNiB1MlJlc2VydmUxOwp9IENNRF9TVEFSRUNfQ09NTU9OX1QsICpQX0NNRF9TVEFSRUNfQ09NTU9OX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfQ01EX1NUQVJFQ19CRiB7CglVSU5UXzE2IHUyVGFnOwkJLyogVGFnID0gMHgwMiAqLwoJVUlOVF8xNiB1Mkxlbmd0aDsKCVRYQkZfUEZNVV9TVEFfSU5GTyByVHhCZlBmbXVJbmZvOwoJVUlOVF84IHVjUmVzZXJ2ZWRbM107Cn0gQ01EX1NUQVJFQ19CRiwgKlBfQ01EX1NUQVJFQ19CRjsKCi8qIFFBIHRvb2w6IG1hdW5hbCBhc3NvYyAqLwp0eXBlZGVmIHN0cnVjdCBfQ01EX01BTlVBTF9BU1NPQ19TVFJVQ1RfVCB7Ci8qCioJVUlOVF84ICAgICAgICAgICAgICB1Y0Jzc0luZGV4OwoqCVVJTlRfOCAgICAgICAgICAgICAgdWNXbGFuSWR4OwoqCVVJTlRfMTYgICAgICAgICAgICAgdTJUb3RhbEVsZW1lbnROdW07CioJVUlOVF8zMiAgICAgICAgICAgICB1NFJlc2VydmU7CiovCgkvKiBleHRlbnNpb24gKi8KCVVJTlRfMTYgdTJUYWc7CQkvKiBUYWcgPSAweDA1ICovCglVSU5UXzE2IHUyTGVuZ3RoOwoJVUlOVF84IGF1Y01hY1tNQUNfQUREUl9MRU5dOwoJVUlOVF84IHVjVHlwZTsKCVVJTlRfOCB1Y1d0Ymw7CglVSU5UXzggdWNPd25tYWM7CglVSU5UXzggdWNNb2RlOwoJVUlOVF84IHVjQnc7CglVSU5UXzggdWNOc3M7CglVSU5UXzggdWNQZm11SWQ7CglVSU5UXzggdWNNYXJhdGU7CglVSU5UXzggdWNTcGVJZHg7CglVSU5UXzggdWNhaWQ7Cn0gQ01EX01BTlVBTF9BU1NPQ19TVFJVQ1RfVCwgKlBfQ01EX01BTlVBTF9BU1NPQ19TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9UWF9CRl9TT1VORElOR19TVEFSVF9UIHsKCXVuaW9uIHsKCQlFWFRfQ01EX0VUWEJmX1NORF9QRVJJT0RJQ19UUklHR0VSX0NUUkxfVCByRXh0Q21kRXh0QmZTbmRQZXJpb2RpY1RyaWdnZXJDdHJsOwoJCUVYVF9DTURfRVRYQmZfTVVfU05EX1BFUklPRElDX1RSSUdHRVJfQ1RSTF9UIHJFeHRDbWRFeHRCZk11U25kUGVyaW9kaWNUcmlnZ2VyQ3RybDsKCX0gclR4QmZTb3VuZGluZzsKfSBUWF9CRl9TT1VORElOR19TVEFSVF9ULCAqUF9UWF9CRl9TT1VORElOR19TVEFSVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYX0JGX1NPVU5ESU5HX1NUT1BfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNTbmRnU3RvcDsKCVVJTlRfOCB1Y1Jlc2VydmVkWzJdOwp9IFRYX0JGX1NPVU5ESU5HX1NUT1BfVCwgKlBfVFhfQkZfU09VTkRJTkdfU1RPUF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYX0JGX1RYX0FQUExZX1QgewoJVUlOVF84IHVjVHhCZkNhdGVnb3J5OwoJVUlOVF84IHVjV2xhbklkOwoJVUlOVF84IGZnRVR4QmY7CglVSU5UXzggZmdJVHhCZjsKCVVJTlRfOCBmZ011VHhCZjsKCVVJTlRfOCB1Y1Jlc2VydmVkWzNdOwp9IFRYX0JGX1RYX0FQUExZX1QsICpQX1RYX0JGX1RYX0FQUExZX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfVFhfQkZfUEZNVV9NRU1fQUxMT0NfVCB7CglVSU5UXzggdWNUeEJmQ2F0ZWdvcnk7CglVSU5UXzggdWNTdU11TW9kZTsKCVVJTlRfOCB1Y1dsYW5JZHg7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBUWF9CRl9QRk1VX01FTV9BTExPQ19ULCAqUF9UWF9CRl9QRk1VX01FTV9BTExPQ19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1RYX0JGX1BGTVVfTUVNX1JMU19UIHsKCVVJTlRfOCB1Y1R4QmZDYXRlZ29yeTsKCVVJTlRfOCB1Y1dsYW5JZDsKCVVJTlRfOCB1Y1Jlc2VydmVkWzJdOwp9IFRYX0JGX1BGTVVfTUVNX1JMU19ULCAqUF9UWF9CRl9QRk1VX01FTV9STFNfVDsKCnR5cGVkZWYgdW5pb24gX1BBUkFNX0NVU1RPTV9UWEJGX0FDVElPTl9TVFJVQ1RfVCB7CglQUk9GSUxFX1RBR19SRUFEX1QgclByb2ZpbGVUYWdSZWFkOwoJUFJPRklMRV9UQUdfV1JJVEVfVCByUHJvZmlsZVRhZ1dyaXRlOwoJUFJPRklMRV9EQVRBX1JFQURfVCByUHJvZmlsZURhdGFSZWFkOwoJUFJPRklMRV9EQVRBX1dSSVRFX1QgclByb2ZpbGVEYXRhV3JpdGU7CglQUk9GSUxFX1BOX1JFQURfVCByUHJvZmlsZVBuUmVhZDsKCVBST0ZJTEVfUE5fV1JJVEVfVCByUHJvZmlsZVBuV3JpdGU7CglUWF9CRl9TT1VORElOR19TVEFSVF9UIHJUeEJmU291bmRpbmdTdGFydDsKCVRYX0JGX1NPVU5ESU5HX1NUT1BfVCByVHhCZlNvdW5kaW5nU3RvcDsKCVRYX0JGX1RYX0FQUExZX1QgclR4QmZUeEFwcGx5OwoJVFhfQkZfUEZNVV9NRU1fQUxMT0NfVCByVHhCZlBmbXVNZW1BbGxvYzsKCVRYX0JGX1BGTVVfTUVNX1JMU19UIHJUeEJmUGZtdU1lbVJsczsKfSBQQVJBTV9DVVNUT01fVFhCRl9BQ1RJT05fU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9UWEJGX0FDVElPTl9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fU1RBX1JFQ19VUERfU1RSVUNUX1QgewoJVUlOVF84IHVjQnNzSW5kZXg7CglVSU5UXzggdWNXbGFuSWR4OwoJVUlOVF8xNiB1MlRvdGFsRWxlbWVudE51bTsKCVVJTlRfOCB1Y0FwcGVuZENtZFRMVjsKCVVJTlRfOCB1Y011YXJJZHg7CglVSU5UXzggYXVjUmVzZXJ2ZVsyXTsKCVVJTlRfMzIgKnByU3RhUmVjOwoJQ01EX1NUQVJFQ19CRiByQ21kU3RhUmVjQmY7Cn0gUEFSQU1fQ1VTVE9NX1NUQV9SRUNfVVBEX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fU1RBX1JFQ19VUERfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfQlNTSU5GT19BUkdVTUVOVF9UIHsKCVVDSEFSIE93bk1hY0lkeDsKCVVJTlRfOCB1Y0Jzc0luZGV4OwoJVUlOVF84IEJzc2lkW1BBUkFNX01BQ19BRERSX0xFTl07CglVSU5UXzggdWNCY01jV2xhbklkeDsKCVVJTlRfOCB1Y1BlZXJXbGFuSWR4OwoJVUlOVF8zMiBOZXR3b3JrVHlwZTsKCVVJTlRfMzIgdTRDb25uZWN0aW9uVHlwZTsKCVVJTlRfOCBDaXBoZXJTdWl0OwoJVUlOVF84IEFjdGl2ZTsKCVVJTlRfOCBXbW1JZHg7CglVSU5UXzMyIHU0QnNzSW5mb0ZlYXR1cmU7CglVSU5UXzggYXVjQnVmZmVyWzBdOwp9IEJTU0lORk9fQVJHVU1FTlRfVCwgKlBfQlNTSU5GT19BUkdVTUVOVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9QRk1VX1RBR19SRUFEX1NUUlVDVF9UIHsKCVBGTVVfUFJPRklMRV9UQUcxIHJ1NFR4QmZQRk1VVGFnMTsKCVBGTVVfUFJPRklMRV9UQUcyIHJ1NFR4QmZQRk1VVGFnMjsKfSBQQVJBTV9DVVNUT01fUEZNVV9UQUdfUkVBRF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1BGTVVfVEFHX1JFQURfU1RSVUNUX1Q7CgojaWYgQ0ZHX1NVUFBPUlRfTVVfTUlNTwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1NIT1dfR1JPVVBfVEJMX0VOVFJZX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRFdmVudElkOwoJVUlOVF84IGluZGV4OwoJVUlOVF84IG51bVVzZXI6MjsKCVVJTlRfOCBCVzoyOwoJVUlOVF84IE5TMDoyOwoJVUlOVF84IE5TMToyOwoJLyogVUlOVF84ICAgICAgIE5TMjoxOyAqLwoJLyogVUlOVF84ICAgICAgIE5TMzoxOyAqLwoJVUlOVF84IFBGSURVc2VyMDsKCVVJTlRfOCBQRklEVXNlcjE7CgkvKiBVSU5UXzggICAgICAgUEZJRFVzZXIyOyAqLwoJLyogVUlOVF84ICAgICAgIFBGSURVc2VyMzsgKi8KCUJPT0xFQU4gZmdJc1Nob3J0R0k7CglCT09MRUFOIGZnSXNVc2VkOwoJQk9PTEVBTiBmZ0lzRGlzYWJsZTsKCVVJTlRfOCBpbml0TWNzVXNlcjA6NDsKCVVJTlRfOCBpbml0TWNzVXNlcjE6NDsKCS8qIFVJTlRfOCAgICAgICBpbml0TWNzVXNlcjI6NDsgKi8KCS8qIFVJTlRfOCAgICAgICBpbml0TWNzVXNlcjM6NDsgKi8KCVVJTlRfOCBkTWNzVXNlcjA6NDsKCVVJTlRfOCBkTWNzVXNlcjE6NDsKCS8qIFVJTlRfOCAgICAgICBkTWNzVXNlcjI6NDsgKi8KCS8qIFVJTlRfOCAgICAgICBkTWNzVXNlcjM6NDsgKi8KfSBQQVJBTV9DVVNUT01fU0hPV19HUk9VUF9UQkxfRU5UUllfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9TSE9XX0dST1VQX1RCTF9FTlRSWV9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fR0VUX1FEX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRFdmVudElkOwoJVUlOVF8zMiBhdTRSYXdEYXRhWzE0XTsKfSBQQVJBTV9DVVNUT01fR0VUX1FEX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fR0VUX1FEX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NUUlVDVF9MUV9SRVBPUlQgewoJaW50IGxxX3JlcG9ydFtOVU1fT0ZfVVNFUl1bTlVNX09GX01PRFVMXTsKfSBNVV9TVFJVQ1RfTFFfUkVQT1JULCAqUF9NVV9TVFJVQ1RfTFFfUkVQT1JUOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9HRVRfTVVfQ0FMQ19MUV9TVFJVQ1RfVCB7CglVSU5UXzMyIHU0RXZlbnRJZDsKCU1VX1NUUlVDVF9MUV9SRVBPUlQgckVudHJ5Owp9IFBBUkFNX0NVU1RPTV9HRVRfTVVfQ0FMQ19MUV9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX0dFVF9NVV9DQUxDX0xRX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX0dFVF9DQUxDX0lOSVRfTUNTX1QgewoJVUlOVF84IHVjZ3JvdXBJZHg7CglVSU5UXzggdWNSc3ZbM107Cn0gTVVfR0VUX0NBTENfSU5JVF9NQ1NfVCwgKlBfTVVfR0VUX0NBTENfSU5JVF9NQ1NfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfSU5JVF9NQ1NfVCB7CglVSU5UXzggdWNOdW1PZlVzZXI7CS8qIHplcm8tYmFzZSA6IDB+MzogbWVhbnMgMX4yIHVzZXJzICovCglVSU5UXzggdWNCYW5kd2lkdGg7CS8qIHplcm8tYmFzZSA6IDA6MjAgaHogMTo0MCBoeiAyOiA4MCBoeiAzOiAxNjAgKi8KCVVJTlRfOCB1Y05zc09mVXNlcjA7CS8qIHplcm8tYmFzZSA6IDB+MSBtZWFucyB1ZXNyMCB1c2UgMX4yIHNzICwgaWYgbm8gdXNlIGtlZXAgMCAqLwoJVUlOVF84IHVjTnNzT2ZVc2VyMTsJLyogemVyby1iYXNlIDogMH4xIG1lYW5zIHVlc3IwIHVzZSAxfjIgc3MgLCBpZiBubyB1c2Uga2VlcCAwICovCglVSU5UXzggdWNQZk11SWRPZlVzZXIwOwkvKiB6ZXJvLWJhc2UgOiBmb3Igbm93LCB1ZXNyMCB1c2UgcGYgbXUgaWQgMCAqLwoJVUlOVF84IHVjUGZNdUlkT2ZVc2VyMTsJLyogemVyby1iYXNlIDogZm9yIG5vdywgdWVzcjEgdXNlIHBmIG11IGlkIDEgKi8KCVVJTlRfOCB1Y051bU9mVHhlcjsJLyogMH4zOiBtZWFuIHVzZSAxfjQgYW5udGFpbiwgZm9yIG5vdywgc2hvdWxkIGZpeCAzICovCglVSU5UXzggdWNTcGVJbmRleDsJLyphZGQgbmV3IGZpZWxkIHRvIGZpbGyhp3NwZWNpYWwgZXh0ZW5zaW9uIGluZGV4oah3aGljaCByZXBsYWNlIHJlc2VydmUgKi8KCVVJTlRfMzIgdTRHcm91cEluZGV4OwkvKiAwfiA6dGhlIGluZGV4IG9mIGdyb3VwIHRhYmxlIGVudHJ5IGZvciBjYWxjdWxhdGlvbiAqLwp9IE1VX1NFVF9JTklUX01DU19ULCAqUF9NVV9TRVRfSU5JVF9NQ1NfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfQ0FMQ19MUV9UIHsKCVVJTlRfOCB1Y051bU9mVXNlcjsJLyogemVyby1iYXNlIDogMH4zOiBtZWFucyAxfjIgdXNlcnMgKi8KCVVJTlRfOCB1Y0JhbmR3aWR0aDsJLyogemVyby1iYXNlIDogMDoyMCBoeiAxOjQwIGh6IDI6IDgwIGh6IDM6IDE2MCAqLwoJVUlOVF84IHVjTnNzT2ZVc2VyMDsJLyogemVyby1iYXNlIDogMH4xIG1lYW5zIHVlc3IwIHVzZSAxfjIgc3MgLCBpZiBubyB1c2Uga2VlcCAwICovCglVSU5UXzggdWNOc3NPZlVzZXIxOwkvKiB6ZXJvLWJhc2UgOiAwfjEgbWVhbnMgdWVzcjAgdXNlIDF+MiBzcyAsIGlmIG5vIHVzZSBrZWVwIDAgKi8KCVVJTlRfOCB1Y1BmTXVJZE9mVXNlcjA7CS8qIHplcm8tYmFzZSA6IGZvciBub3csIHVlc3IwIHVzZSBwZiBtdSBpZCAwICovCglVSU5UXzggdWNQZk11SWRPZlVzZXIxOwkvKiB6ZXJvLWJhc2UgOiBmb3Igbm93LCB1ZXNyMSB1c2UgcGYgbXUgaWQgMSAqLwoJVUlOVF84IHVjTnVtT2ZUeGVyOwkvKiAwfjM6IG1lYW4gdXNlIDF+NCBhbm50YWluLCBmb3Igbm93LCBzaG91bGQgZml4IDMgKi8KCVVJTlRfOCB1Y1NwZUluZGV4OwkvKmFkZCBuZXcgZmllbGQgdG8gZmlsbKGnc3BlY2lhbCBleHRlbnNpb24gaW5kZXihqHdoaWNoIHJlcGxhY2UgcmVzZXJ2ZSAqLwoJVUlOVF8zMiB1NEdyb3VwSW5kZXg7CS8qIDB+IDp0aGUgaW5kZXggb2YgZ3JvdXAgdGFibGUgZW50cnkgZm9yIGNhbGN1bGF0aW9uICovCn0gTVVfU0VUX0NBTENfTFFfVCwgKlBfTVVfU0VUX0NBTENfTFFfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9HRVRfTFFfVCB7CglVSU5UXzggdWNUeXBlOwoJVUlOVF84IHVjUnN2WzNdOwp9IE1VX0dFVF9MUV9ULCAqUF9NVV9HRVRfTFFfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9TRVRfU05SX09GRlNFVF9UIHsKCVVJTlRfOCB1Y1ZhbDsKCVVJTlRfOCB1Y1JzdlszXTsKfSBNVV9TRVRfU05SX09GRlNFVF9ULCAqUF9NVV9TRVRfU05SX09GRlNFVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9aRVJPX05TU19UIHsKCVVJTlRfOCB1Y1ZhbDsKCVVJTlRfOCB1Y1JzdlszXTsKfSBNVV9TRVRfWkVST19OU1NfVCwgKlBfTVVfU0VUX1pFUk9fTlNTX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU1BFRURfVVBfTFFfVCB7CglVSU5UXzMyIHU0VmFsOwp9IE1VX1NQRUVEX1VQX0xRX1QsICpQX01VX1NQRUVEX1VQX0xRX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX01VX1RBQkxFX1QgewoJLyogVUlOVF8xNiAgdTJUeXBlOyAqLwoJLyogVUlOVF8zMiAgdTRMZW5ndGg7ICovCglVSU5UXzggYXVjTWV0cmljVGFibGVbTlVNX01VVF9OUl9OVU0gKiBOVU1fTVVUX0ZFQyAqIE5VTV9NVVRfTUNTICogTlVNX01VVF9JTkRFWF07Cn0gTVVfU0VUX01VX1RBQkxFX1QsICpQX01VX1NFVF9NVV9UQUJMRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9HUk9VUF9UIHsKCVVJTlRfMzIgdTRHcm91cEluZGV4OwkvKiBHcm91cCBUYWJsZSBJZHggKi8KCVVJTlRfMzIgdTROdW1PZlVzZXI7CglVSU5UXzMyIHU0VXNlcjBMZHBjOwoJVUlOVF8zMiB1NFVzZXIxTGRwYzsKCVVJTlRfMzIgdTRTaG9ydEdJOwoJVUlOVF8zMiB1NEJ3OwoJVUlOVF8zMiB1NFVzZXIwTnNzOwoJVUlOVF8zMiB1NFVzZXIxTnNzOwoJVUlOVF8zMiB1NEdyb3VwSWQ7CglVSU5UXzMyIHU0VXNlcjBVUDsKCVVJTlRfMzIgdTRVc2VyMVVQOwoJVUlOVF8zMiB1NFVzZXIwTXVQZklkOwoJVUlOVF8zMiB1NFVzZXIxTXVQZklkOwoJVUlOVF8zMiB1NFVzZXIwSW5pdE1DUzsKCVVJTlRfMzIgdTRVc2VyMUluaXRNQ1M7CglVSU5UXzggYXVjVXNlcjBNYWNBZGRyW1BBUkFNX01BQ19BRERSX0xFTl07CglVSU5UXzggYXVjVXNlcjFNYWNBZGRyW1BBUkFNX01BQ19BRERSX0xFTl07Cn0gTVVfU0VUX0dST1VQX1QsICpQX01VX1NFVF9HUk9VUF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX0dFVF9RRF9UIHsKCVVJTlRfOCB1Y1N1YmNhcnJpZXJJbmRleDsKCS8qIFVJTlRfMzIgdTRMZW5ndGg7ICovCgkvKiBVSU5UXzggKnByUWQ7ICovCn0gTVVfR0VUX1FEX1QsICpQX01VX0dFVF9RRF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX01VX1NFVF9FTkFCTEVfVCB7CglVSU5UXzggdWNWYWw7CglVSU5UXzggdWNSc3ZbM107Cn0gTVVfU0VUX0VOQUJMRV9ULCAqUF9NVV9TRVRfRU5BQkxFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfTVVfU0VUX0dJRF9VUF9UIHsKCVVJTlRfMzIgYXU0R2lkWzJdOwoJVUlOVF8zMiBhdTRVcFs0XTsKfSBNVV9TRVRfR0lEX1VQX1QsICpQX01VX1NFVF9HSURfVVBfVDsKCnR5cGVkZWYgc3RydWN0IF9NVV9UUklHR0VSX01VX1RYX1QgewoJVUlOVF84ICBmZ0lzUmFuZG9tUGF0dGVybjsgLyogaXMgcmFuZG9tIHBhdHRlcm4gb3Igbm90ICovCglVSU5UXzMyIHU0TXNkdVBheWxvYWRMZW5ndGgwOyAvKiBwYXlsb2FkIGxlbmd0aCBvZiB0aGUgTVNEVSBmb3IgdXNlciAwICovCglVSU5UXzMyIHU0TXNkdVBheWxvYWRMZW5ndGgxOyAvKiBwYXlsb2FkIGxlbmd0aCBvZiB0aGUgTVNEVSBmb3IgdXNlciAxICovCglVSU5UXzMyIHU0TXVQYWNrZXRDb3VudDsgLyogTVUgVFggY291bnQgKi8KCVVJTlRfMzIgdTROdW1PZlNUQXM7IC8qIG51bWJlciBvZiB1c2VyIGluIHRoZSBNVSBUWCAqLwoJVUlOVF84ICAgYXVjTWFjQWRkcnNbMl1bNl07IC8qIE1BQyBhZGRyZXNzIG9mIHVzZXJzKi8KfSBNVV9UUklHR0VSX01VX1RYX1QsICpQX01VX1RSSUdHRVJfTVVfVFhfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTVVNSU1PX0FDVElPTl9TVFJVQ1RfVCB7CglVSU5UXzggdWNNdU1pbW9DYXRlZ29yeTsKCVVJTlRfOCBhdWNSc3ZbM107Cgl1bmlvbiB7CgkJTVVfR0VUX0NBTENfSU5JVF9NQ1NfVCByTXVHZXRDYWxjSW5pdE1jczsKCQlNVV9TRVRfSU5JVF9NQ1NfVCByTXVTZXRJbml0TWNzOwoJCU1VX1NFVF9DQUxDX0xRX1Qgck11U2V0Q2FsY0xxOwoJCU1VX0dFVF9MUV9UIHJNdUdldExxOwoJCU1VX1NFVF9TTlJfT0ZGU0VUX1Qgck11U2V0U25yT2Zmc2V0OwoJCU1VX1NFVF9aRVJPX05TU19UIHJNdVNldFplcm9Oc3M7CgkJTVVfU1BFRURfVVBfTFFfVCByTXVTcGVlZFVwTHE7CgkJTVVfU0VUX01VX1RBQkxFX1Qgck11U2V0TXVUYWJsZTsKCQlNVV9TRVRfR1JPVVBfVCByTXVTZXRHcm91cDsKCQlNVV9HRVRfUURfVCByTXVHZXRRZDsKCQlNVV9TRVRfRU5BQkxFX1Qgck11U2V0RW5hYmxlOwoJCU1VX1NFVF9HSURfVVBfVCByTXVTZXRHaWRVcDsKCQlNVV9UUklHR0VSX01VX1RYX1Qgck11VHJpZ2dlck11VHg7Cgl9IHVuTXVNaW1vUGFyYW07Cn0gUEFSQU1fQ1VTVE9NX01VTUlNT19BQ1RJT05fU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9NVU1JTU9fQUNUSU9OX1NUUlVDVF9UOwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfTVVfTUlNTyAqLwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfVFhfQkYgKi8KI2VuZGlmIC8qIENGR19TVVBQT1JUX1FBX1RPT0wgKi8KCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DVVNUT01fTUVNX0RVTVBfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEFkZHJlc3M7CglVSU5UXzMyIHU0TGVuZ3RoOwoJVUlOVF8zMiB1NFJlbWFpbkxlbmd0aDsKI2lmIENGR19TVVBQT1JUX1FBX1RPT0wKCVVJTlRfMzIgdTRJY2FwQ29udGVudDsKI2VuZGlmCQkJCS8qIENGR19TVVBQT1JUX1FBX1RPT0wgKi8KCVVJTlRfOCB1Y0ZyYWdOdW07Cn0gUEFSQU1fQ1VTVE9NX01FTV9EVU1QX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTUVNX0RVTVBfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1NXX0NUUkxfU1RSVUNUX1QgewoJVUlOVF8zMiB1NElkOwoJVUlOVF8zMiB1NERhdGE7Cn0gUEFSQU1fQ1VTVE9NX1NXX0NUUkxfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9TV19DVFJMX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9DSElQX0NPTkZJR19TVFJVQ1RfVCB7CglVSU5UXzE2IHUySWQ7CglVSU5UXzggdWNUeXBlOwoJVUlOVF84IHVjUmVzcFR5cGU7CglVSU5UXzE2IHUyTXNnU2l6ZTsKCVVJTlRfOCBhdWNSZXNlcnZlZDBbMl07CglVSU5UXzggYXVjQ21kW0NISVBfQ09ORklHX1JFU1BfU0laRV07Cn0gUEFSQU1fQ1VTVE9NX0NISVBfQ09ORklHX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fQ0hJUF9DT05GSUdfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0tFWV9DRkdfU1RSVUNUX1QgewoJVUlOVF84IGF1Y0tleVtXTEFOX0NGR19LRVlfTEVOX01BWF07CglVSU5UXzggYXVjVmFsdWVbV0xBTl9DRkdfVkFMVUVfTEVOX01BWF07Cn0gUEFSQU1fQ1VTVE9NX0tFWV9DRkdfU1RSVUNUX1QsICpQX1BBUkFNX0NVU1RPTV9LRVlfQ0ZHX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9FRVBST01fUldfU1RSVUNUX1QgewoJVUlOVF84IHVjRWVwcm9tTWV0aG9kOwkvKiBGb3IgcmVhZCBvbmx5IHJlYWQ6IDEsIHF1ZXJ5IHNpemU6IDAgKi8KCVVJTlRfOCB1Y0VlcHJvbUluZGV4OwoJVUlOVF84IHJlc2VydmVkOwoJVUlOVF8xNiB1MkVlcHJvbURhdGE7Cn0gUEFSQU1fQ1VTVE9NX0VFUFJPTV9SV19TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX0VFUFJPTV9SV19TVFJVQ1RfVCwKUEFSQU1fQ1VTVE9NX05WUkFNX1JXX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTlZSQU1fUldfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1dNTV9QU19URVNUX1NUUlVDVF9UIHsKCVVJTlRfOCBibWZnQXBzZEVuQWM7CS8qIGIwfjM6IHRyaWdnZXItZW4gQUMwfjMuIGI0fjc6IGRlbGl2ZXJ5LWVuIEFDMH4zICovCglVSU5UXzggdWNJc0VudGVyUHNBdE9uY2U7CS8qIGVudGVyIFBTIGltbWVkaWF0ZWx5IHdpdGhvdXQgNSBzZWNvbmQgZ3VhcmQgYWZ0ZXIgY29ubmVjdGVkICovCglVSU5UXzggdWNJc0Rpc2FibGVVY1RyaWdnZXI7CS8qIG5vdCB0byB0cmlnZ2VyIFVDIG9uIGJlYWNvbiBUSU0gaXMgbWF0Y2hlZCAodW5kZXIgVS1BUFNEKSAqLwoJVUlOVF84IHJlc2VydmVkOwp9IFBBUkFNX0NVU1RPTV9XTU1fUFNfVEVTVF9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX1dNTV9QU19URVNUX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9OT0FfUEFSQU1fU1RSVUNUX1QgewoJVUlOVF8zMiB1NE5vYUR1cmF0aW9uTXM7CglVSU5UXzMyIHU0Tm9hSW50ZXJ2YWxNczsKCVVJTlRfMzIgdTROb2FDb3VudDsKCVVJTlRfOCB1Y0Jzc0lkeDsKfSBQQVJBTV9DVVNUT01fTk9BX1BBUkFNX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTk9BX1BBUkFNX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9PUFBQU19QQVJBTV9TVFJVQ1RfVCB7CglVSU5UXzggdWNCc3NJZHg7CglVSU5UXzggdWNMZWdjeVBTOwoJVUlOVF84IHVjT3BwUHM7CglVSU5UXzggYXVjUmVzdlsxXTsKCVVJTlRfMzIgdTRDVHdpbmRvd01zOwp9IFBBUkFNX0NVU1RPTV9PUFBQU19QQVJBTV9TVFJVQ1RfVCwgKlBfUEFSQU1fQ1VTVE9NX09QUFBTX1BBUkFNX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NVU1RPTV9VQVBTRF9QQVJBTV9TVFJVQ1RfVCB7CglVSU5UXzggdWNCc3NJZHg7CglVSU5UXzggZmdFbkFQU0Q7CglVSU5UXzggZmdFbkFQU0RfQWNCZTsKCVVJTlRfOCBmZ0VuQVBTRF9BY0JrOwoJVUlOVF84IGZnRW5BUFNEX0FjVm87CglVSU5UXzggZmdFbkFQU0RfQWNWaTsKCVVJTlRfOCB1Y01heFNwTGVuOwoJVUlOVF84IGF1Y1Jlc3ZbMl07Cn0gUEFSQU1fQ1VTVE9NX1VBUFNEX1BBUkFNX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fVUFQU0RfUEFSQU1fU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX1AyUF9TRVRfU1RSVUNUX1QgewoJVUlOVF8zMiB1NEVuYWJsZTsKCVVJTlRfMzIgdTRNb2RlOwp9IFBBUkFNX0NVU1RPTV9QMlBfU0VUX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fUDJQX1NFVF9TVFJVQ1RfVDsKCiNkZWZpbmUgTUFYX05VTUJFUl9PRl9BQ0wgMjAKCnR5cGVkZWYgZW51bSBfRU5VTV9QQVJBTV9DVVNUT01fQUNMX1BPTElDWV9UIHsKCVBBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX0RJU0FCTEUsCglQQVJBTV9DVVNUT01fQUNMX1BPTElDWV9BQ0NFUFQsCglQQVJBTV9DVVNUT01fQUNMX1BPTElDWV9ERU5ZLAoJUEFSQU1fQ1VTVE9NX0FDTF9QT0xJQ1lfTlVNCn0gRU5VTV9QQVJBTV9DVVNUT01fQUNMX1BPTElDWV9ULCAqUF9FTlVNX1BBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0FDTF9FTlRSWSB7CglVSU5UXzggYXVjQWRkcltNQUNfQUREUl9MRU5dOwoJVUlOVF8xNiB1MlJzdjsKfSBQQVJBTV9DVVNUT01fQUNMX0VOVFJZLCAqUFBBUkFNX0NVU1RPTV9BQ0xfRU5UUlk7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX0FDTCB7CglFTlVNX1BBUkFNX0NVU1RPTV9BQ0xfUE9MSUNZX1QgZVBvbGljeTsKCVVJTlRfMzIgdTROdW07CglQQVJBTV9DVVNUT01fQUNMX0VOVFJZIHJFbnRyeVtNQVhfTlVNQkVSX09GX0FDTF07Cn0gUEFSQU1fQ1VTVE9NX0FDTCwgKlBQQVJBTV9DVVNUT01fQUNMOwoKdHlwZWRlZiBlbnVtIF9FTlVNX0NGR19TUkNfVFlQRV9UIHsKCUNGR19TUkNfVFlQRV9FRVBST00sCglDRkdfU1JDX1RZUEVfTlZSQU0sCglDRkdfU1JDX1RZUEVfVU5LTk9XTiwKCUNGR19TUkNfVFlQRV9OVU0KfSBFTlVNX0NGR19TUkNfVFlQRV9ULCAqUF9FTlVNX0NGR19TUkNfVFlQRV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX0VFUFJPTV9UWVBFX1QgewoJRUVQUk9NX1RZUEVfTk8sCglFRVBST01fVFlQRV9QUkVTRU5ULAoJRUVQUk9NX1RZUEVfTlVNCn0gRU5VTV9FRVBST01fVFlQRV9ULCAqUF9FTlVNX0VFUFJPTV9UWVBFX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUU9TX1RTSU5GTyB7CglVSU5UXzggdWNUcmFmZmljVHlwZTsJLyogVHJhZmZpYyBUeXBlOiAxIGZvciBpc29jaHJvbm91cyAwIGZvciBhc3luY2hyb25vdXMgKi8KCVVJTlRfOCB1Y1RpZDsJCS8qIFRTSUQ6IG11c3QgYmUgYmV0d2VlbiA4IH4gMTUgKi8KCVVJTlRfOCB1Y0RpcmVjdGlvbjsJLyogZGlyZWN0aW9uICovCglVSU5UXzggdWNBY2Nlc3NQb2xpY3k7CS8qIGFjY2VzcyBwb2xpY3kgKi8KCVVJTlRfOCB1Y0FnZ3JlZ2F0aW9uOwkvKiBhZ2dyZWdhdGlvbiAqLwoJVUlOVF84IHVjQXBzZDsJCS8qIEFQU0QgKi8KCVVJTlRfOCB1Y3VzZXJQcmlvcml0eTsJLyogdXNlciBwcmlvcml0eSAqLwoJVUlOVF84IHVjVHNJbmZvQWNrUG9saWN5OwkvKiBUU0lORk8gQUNLIHBvbGljeSAqLwoJVUlOVF84IHVjU2NoZWR1bGU7CS8qIFNjaGVkdWxlICovCn0gUEFSQU1fUU9TX1RTSU5GTywgKlBfUEFSQU1fUU9TX1RTSU5GTzsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9RT1NfVFNQRUMgewoJUEFSQU1fUU9TX1RTSU5GTyByVHNJbmZvOwkvKiBUUyBpbmZvIGZpZWxkICovCglVSU5UXzE2IHUyTm9taW5hbE1TRFVTaXplOwkvKiBub21pbmFsIE1TRFUgc2l6ZSAqLwoJVUlOVF8xNiB1Mk1heE1TRFVzaXplOwkvKiBtYXhpbXVtIE1TRFUgc2l6ZSAqLwoJVUlOVF8zMiB1NE1pblN2Y0ludHY7CS8qIG1pbmltdW0gc2VydmljZSBpbnRlcnZhbCAqLwoJVUlOVF8zMiB1NE1heFN2Y0ludHY7CS8qIG1heGltdW0gc2VydmljZSBpbnRlcnZhbCAqLwoJVUlOVF8zMiB1NEluYWN0SW50djsJLyogaW5hY3Rpdml0eSBpbnRlcnZhbCAqLwoJVUlOVF8zMiB1NFNwc0ludHY7CS8qIHN1c3BlbnNpb24gaW50ZXJ2YWwgKi8KCVVJTlRfMzIgdTRTdmNTdGFydFRpbWU7CS8qIHNlcnZpY2Ugc3RhcnQgdGltZSAqLwoJVUlOVF8zMiB1NE1pbkRhdGFSYXRlOwkvKiBtaW5pbXVtIERhdGEgcmF0ZSAqLwoJVUlOVF8zMiB1NE1lYW5EYXRhUmF0ZTsJLyogbWVhbiBkYXRhIHJhdGUgKi8KCVVJTlRfMzIgdTRQZWFrRGF0YVJhdGU7CS8qIHBlYWsgZGF0YSByYXRlICovCglVSU5UXzMyIHU0TWF4QnVyc3RTaXplOwkvKiBtYXhpbXVtIGJ1cnN0IHNpemUgKi8KCVVJTlRfMzIgdTREZWxheUJvdW5kOwkvKiBkZWxheSBib3VuZCAqLwoJVUlOVF8zMiB1NE1pblBIWVJhdGU7CS8qIG1pbmltdW0gUEhZIHJhdGUgKi8KCVVJTlRfMTYgdTJTYmE7CQkvKiBzdXJwbHVzIGJhbmR3aWR0aCBhbGxvd2FuY2UgKi8KCVVJTlRfMTYgdTJNZWRpdW1UaW1lOwkvKiBtZWRpdW0gdGltZSAqLwp9IFBBUkFNX1FPU19UU1BFQywgKlBfUEFSQU1fUU9TX1RTUEVDOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1FPU19BRERUU19SRVFfSU5GTyB7CglQQVJBTV9RT1NfVFNQRUMgclRzcGVjOwp9IFBBUkFNX1FPU19BRERUU19SRVFfSU5GTywgKlBfUEFSQU1fUU9TX0FERFRTX1JFUV9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1ZPSVBfQ09ORklHIHsKCVVJTlRfMzIgdTRWb2lwVHJhZmZpY0ludGVydmFsOwkvKiAwOiBkaXNhYmxlIFZPSVAgY29uZmlndXJhdGlvbiAqLwp9IFBBUkFNX1ZPSVBfQ09ORklHLCAqUF9QQVJBTV9WT0lQX0NPTkZJRzsKCi8qODAyLjExIFN0YXRpc3RpY3MgU3RydWN0Ki8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNXzgwMl8xMV9TVEFUSVNUSUNTX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUgKi8KCUxBUkdFX0lOVEVHRVIgclRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudDsKCUxBUkdFX0lOVEVHRVIgck11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKCUxBUkdFX0lOVEVHRVIgckZhaWxlZENvdW50OwoJTEFSR0VfSU5URUdFUiByUmV0cnlDb3VudDsKCUxBUkdFX0lOVEVHRVIgck11bHRpcGxlUmV0cnlDb3VudDsKCUxBUkdFX0lOVEVHRVIgclJUU1N1Y2Nlc3NDb3VudDsKCUxBUkdFX0lOVEVHRVIgclJUU0ZhaWx1cmVDb3VudDsKCUxBUkdFX0lOVEVHRVIgckFDS0ZhaWx1cmVDb3VudDsKCUxBUkdFX0lOVEVHRVIgckZyYW1lRHVwbGljYXRlQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJSZWNlaXZlZEZyYWdtZW50Q291bnQ7CglMQVJHRV9JTlRFR0VSIHJNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJGQ1NFcnJvckNvdW50OwoJTEFSR0VfSU5URUdFUiByVEtJUExvY2FsTUlDRmFpbHVyZXM7CglMQVJHRV9JTlRFR0VSIHJUS0lQSUNWRXJyb3JzOwoJTEFSR0VfSU5URUdFUiByVEtJUENvdW50ZXJNZWFzdXJlc0ludm9rZWQ7CglMQVJHRV9JTlRFR0VSIHJUS0lQUmVwbGF5czsKCUxBUkdFX0lOVEVHRVIgckNDTVBGb3JtYXRFcnJvcnM7CglMQVJHRV9JTlRFR0VSIHJDQ01QUmVwbGF5czsKCUxBUkdFX0lOVEVHRVIgckNDTVBEZWNyeXB0RXJyb3JzOwoJTEFSR0VfSU5URUdFUiByRm91cldheUhhbmRzaGFrZUZhaWx1cmVzOwoJTEFSR0VfSU5URUdFUiByV0VQVW5kZWNyeXB0YWJsZUNvdW50OwoJTEFSR0VfSU5URUdFUiByV0VQSUNWRXJyb3JDb3VudDsKCUxBUkdFX0lOVEVHRVIgckRlY3J5cHRTdWNjZXNzQ291bnQ7CglMQVJHRV9JTlRFR0VSIHJEZWNyeXB0RmFpbHVyZUNvdW50Owp9IFBBUkFNXzgwMl8xMV9TVEFUSVNUSUNTX1NUUlVDVF9ULCAqUF9QQVJBTV84MDJfMTFfU1RBVElTVElDU19TVFJVQ1RfVDsKCi8qIExpbnV4IE5ldHdvcmsgRGV2aWNlIFN0YXRpc3RpY3MgU3RydWN0ICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9MSU5VWF9ORVRERVZfU1RBVElTVElDU19UIHsKCVVJTlRfMzIgdTRSeFBhY2tldHM7CglVSU5UXzMyIHU0VHhQYWNrZXRzOwoJVUlOVF8zMiB1NFJ4Qnl0ZXM7CglVSU5UXzMyIHU0VHhCeXRlczsKCVVJTlRfMzIgdTRSeEVycm9yczsKCVVJTlRfMzIgdTRUeEVycm9yczsKCVVJTlRfMzIgdTRNdWx0aWNhc3Q7Cn0gUEFSQU1fTElOVVhfTkVUREVWX1NUQVRJU1RJQ1NfVCwgKlBfUEFSQU1fTElOVVhfTkVUREVWX1NUQVRJU1RJQ1NfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfV0lGSV9URVNUX1NUUlVDVF9UIHsKCVVJTlRfMzIgdTRGdW5jSW5kZXg7CglVSU5UXzMyIHU0RnVuY0RhdGE7Cn0gUEFSQU1fTVRLX1dJRklfVEVTVF9TVFJVQ1RfVCwgKlBfUEFSQU1fTVRLX1dJRklfVEVTVF9TVFJVQ1RfVDsKCi8qIDgwMi4xMSBNZWRpYSBzdHJlYW0gY29uc3RyYWludHMgKi8KdHlwZWRlZiBlbnVtIF9FTlVNX01FRElBX1NUUkVBTV9NT0RFIHsKCUVOVU1fTUVESUFfU1RSRUFNX09GRiwKCUVOVU1fTUVESUFfU1RSRUFNX09OCn0gRU5VTV9NRURJQV9TVFJFQU1fTU9ERSwgKlBfRU5VTV9NRURJQV9TVFJFQU1fTU9ERTsKCi8qIGZvciBORElTIDUuMSBNZWRpYSBTdHJlYW1pbmcgQ2hhbmdlICovCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NRURJQV9TVFJFQU1JTkdfSU5ESUNBVElPTiB7CglQQVJBTV9TVEFUVVNfSU5ESUNBVElPTl9UIHJTdGF0dXM7CglFTlVNX01FRElBX1NUUkVBTV9NT0RFIGVNZWRpYVN0cmVhbU1vZGU7Cn0gUEFSQU1fTUVESUFfU1RSRUFNSU5HX0lORElDQVRJT04sICpQX1BBUkFNX01FRElBX1NUUkVBTUlOR19JTkRJQ0FUSU9OOwoKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9ERUZBVUxUICAgICAgIDB4MDAKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9UQ1BfSVAgICAgICAgIDB4MDIKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9JUFggICAgICAgICAgIDB4MDYKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9OQkYgICAgICAgICAgIDB4MDcKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9NQVggICAgICAgICAgIDB4MEYKI2RlZmluZSBQQVJBTV9QUk9UT0NPTF9JRF9NQVNLICAgICAgICAgIDB4MEYKCi8qIGZvciBORElTIE9JRF9HRU5fTkVUV09SS19MQVlFUl9BRERSRVNTRVMgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfQUREUkVTU19JUCB7CglVSU5UXzE2IHNpbl9wb3J0OwoJVUlOVF8zMiBpbl9hZGRyOwoJVUlOVF84IHNpbl96ZXJvWzhdOwp9IFBBUkFNX05FVFdPUktfQUREUkVTU19JUCwgKlBfUEFSQU1fTkVUV09SS19BRERSRVNTX0lQOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX05FVFdPUktfQUREUkVTUyB7CglVSU5UXzE2IHUyQWRkcmVzc0xlbmd0aDsJLyogbGVuZ3RoIGluIGJ5dGVzIG9mIEFkZHJlc3NbXSBpbiB0aGlzICovCglVSU5UXzE2IHUyQWRkcmVzc1R5cGU7CS8qIHR5cGUgb2YgdGhpcyBhZGRyZXNzIChQQVJBTV9QUk9UT0NPTF9JRF9YWFggYWJvdmUpICovCglVSU5UXzggYXVjQWRkcmVzc1sxXTsJLyogYWN0dWFsbHkgQWRkcmVzc0xlbmd0aCBieXRlcyBsb25nICovCn0gUEFSQU1fTkVUV09SS19BRERSRVNTLCAqUF9QQVJBTV9ORVRXT1JLX0FERFJFU1M7CgovKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgd2l0aCBPSURfR0VOX05FVFdPUktfTEFZRVJfQUREUkVTU0VTIHRvIHNldCBuZXR3b3JrIGxheWVyIGFkZHJlc3NlcyBvbiBhbiBpbnRlcmZhY2UgKi8KCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9ORVRXT1JLX0FERFJFU1NfTElTVCB7CglVSU5UXzggdWNCc3NJZHg7CglVSU5UXzMyIHU0QWRkcmVzc0NvdW50OwkvKiBudW1iZXIgb2YgYWRkcmVzc2VzIGZvbGxvd2luZyAqLwoJVUlOVF8xNiB1MkFkZHJlc3NUeXBlOwkvKiB0eXBlIG9mIHRoaXMgYWRkcmVzcyAoTkRJU19QUk9UT0NPTF9JRF9YWFggYWJvdmUpICovCglQQVJBTV9ORVRXT1JLX0FERFJFU1MgYXJBZGRyZXNzWzFdOwkvKiBhY3R1YWxseSBBZGRyZXNzQ291bnQgZWxlbWVudHMgbG9uZyAqLwp9IFBBUkFNX05FVFdPUktfQUREUkVTU19MSVNULCAqUF9QQVJBTV9ORVRXT1JLX0FERFJFU1NfTElTVDsKCiNpZiBDRkdfU0xUX1NVUFBPUlQKCiNkZWZpbmUgRklYRURfQldfTEcyMCAgICAgICAweDAwMDAKI2RlZmluZSBGSVhFRF9CV19VTDIwICAgICAgIDB4MjAwMAojZGVmaW5lIEZJWEVEX0JXX0RMNDAgICAgICAgMHgzMDAwCgojZGVmaW5lIEZJWEVEX0VYVF9DSE5MX1UyMCAgMHg0MDAwCS8qIEZvciBBR0cgcmVnaXN0ZXIuICovCiNkZWZpbmUgRklYRURfRVhUX0NITkxfTDIwICAweEMwMDAJLyogRm9yIEFHRyByZWdzaXRlci4gKi8KCnR5cGVkZWYgZW51bSBfRU5VTV9NVEtfTFBfVEVTVF9NT0RFX1QgewoJRU5VTV9NVEtfTFBfVEVTVF9OT1JNQUwsCglFTlVNX01US19MUF9URVNUX0dPTERFTl9TQU1QTEUsCglFTlVNX01US19MUF9URVNUX0RVVCwKCUVOVU1fTVRLX0xQX1RFU1RfTU9ERV9OVU0KfSBFTlVNX01US19MUF9URVNUX01PREVfVCwgKlBfRU5VTV9NVEtfTFBfVEVTVF9NT0RFX1Q7Cgp0eXBlZGVmIGVudW0gX0VOVU1fTVRLX1NMVF9GVU5DX0lEWF9UIHsKCUVOVU1fTVRLX1NMVF9GVU5DX0RPX05PVEhJTkcsCglFTlVNX01US19TTFRfRlVOQ19JTklUSUFMLAoJRU5VTV9NVEtfU0xUX0ZVTkNfUkFURV9TRVQsCglFTlVNX01US19TTFRfRlVOQ19MUF9TRVQsCglFTlVNX01US19TTFRfRlVOQ19OVU0KfSBFTlVNX01US19TTFRfRlVOQ19JRFhfVCwgKlBfRU5VTV9NVEtfU0xUX0ZVTkNfSURYX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTVRLX1NMVF9MUF9URVNUX1NUUlVDVF9UIHsKCUVOVU1fTVRLX0xQX1RFU1RfTU9ERV9UIHJMcFRlc3RNb2RlOwoJVUlOVF8zMiB1NEJjblJjdk51bTsKfSBQQVJBTV9NVEtfU0xUX0xQX1RFU1RfU1RSVUNUX1QsICpQX1BBUkFNX01US19TTFRfTFBfVEVTVF9TVFJVQ1RfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9NVEtfU0xUX1RSX1RFU1RfU1RSVUNUX1QgewoJRU5VTV9QQVJBTV9ORVRXT1JLX1RZUEVfVCByTmV0d29ya1R5cGU7CS8qIE5ldHdvcmsgVHlwZSBPRkRNNUcgb3IgT0ZETTIuNEcgKi8KCVVJTlRfMzIgdTRGaXhlZFJhdGU7CS8qIEZpeGVkIFJhdGUgaW5jbHVkaW5nIEJXICovCn0gUEFSQU1fTVRLX1NMVF9UUl9URVNUX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfU0xUX1RSX1RFU1RfU1RSVUNUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fTVRLX1NMVF9JTklUSUFMX1NUUlVDVF9UIHsKCVVJTlRfOCBhdWNUYXJnZXRNYWNBZGRyW1BBUkFNX01BQ19BRERSX0xFTl07CglVSU5UXzE2IHUyU2l0ZUlEOwp9IFBBUkFNX01US19TTFRfSU5JVElBTF9TVFJVQ1RfVCwgKlBfUEFSQU1fTVRLX1NMVF9JTklUSUFMX1NUUlVDVF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX01US19TTFRfVEVTVF9TVFJVQ1RfVCB7CglFTlVNX01US19TTFRfRlVOQ19JRFhfVCByU2x0RnVuY0lkeDsKCVVJTlRfMzIgdTRMZW5ndGg7CS8qIExlbmd0aCBvZiBzdHJ1Y3R1cmUsICovCgkJCQkvKiBpbmNsdWRpbmcgbXlzZWxmICovCglVSU5UXzMyIHU0RnVuY0luZm9MZW47CS8qIEluY2x1ZGUgZm9sbG93aW5nIGNvbnRlbnQgKi8KCQkJCS8qIGZpZWxkIGFuZCBteXNlbGYgKi8KCXVuaW9uIHsKCQlQQVJBTV9NVEtfU0xUX0lOSVRJQUxfU1RSVUNUX1Qgck10a0luaXRUZXN0OwoJCVBBUkFNX01US19TTFRfTFBfVEVTVF9TVFJVQ1RfVCByTXRrTHBUZXN0OwoJCVBBUkFNX01US19TTFRfVFJfVEVTVF9TVFJVQ1RfVCByTXRrVFJUZXN0OwoJfSB1bkZ1bmNJbmZvQ29udGVudDsKCn0gUEFSQU1fTVRLX1NMVF9URVNUX1NUUlVDVF9ULCAqUF9QQVJBTV9NVEtfU0xUX1RFU1RfU1RSVUNUX1Q7CgojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9NU1AKLyogU2hvdWxkIGJ5IGNoaXAgKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1NFQ19DT05GSUdfVCB7CglCT09MIGZnV1BJRmxhZzsKCUJPT0wgZmdSVjsKCUJPT0wgZmdJS1Y7CglCT09MIGZnUktWOwoKCUJPT0wgZmdSQ0lEOwoJQk9PTCBmZ1JDQTE7CglCT09MIGZnUkNBMjsKCUJPT0wgZmdFdmVuUE47CgoJVUlOVF84IHVjS2V5SUQ7CglVSU5UXzggdWNNVUFSSWR4OwoJVUlOVF84IHVjQ2lwaGVyU3VpdDsKCVVJTlRfOCBhdWNSZXNlcnZlZFsxXTsKfSBQQVJBTV9TRUNfQ09ORklHX1QsICpQX1BBUkFNX1NFQ19DT05GSUdfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9UWF9DT05GSUdfVCB7CglVSU5UXzggYXVjUEFbNl07CglCT09MIGZnU1c7CglCT09MIGZnRGlzUnhIZHJUcmFuOwoKCUJPT0wgZmdBQURPTTsKCVVJTlRfOCB1Y1BGTVVJZHg7CglVSU5UXzE2IHUyUGFydGlhbEFJRDsKCglCT09MIGZnVElCRjsKCUJPT0wgZmdURUJGOwoJQk9PTCBmZ0lzSFQ7CglCT09MIGZnSXNWSFQ7CgoJQk9PTCBmZ01lc2g7CglCT09MIGZnQkFGRW47CglCT09MIGZnQ0ZBY2s7CglCT09MIGZnUmRnQkE7CgoJQk9PTCBmZ1JERzsKCUJPT0wgZmdJc1B3ck1ndDsKCUJPT0wgZmdSVFM7CglCT09MIGZnU01QUzsKCglCT09MIGZnVHhvcFBTOwoJQk9PTCBmZ0Rvbm90VXBkYXRlSVBTTTsKCUJPT0wgZmdTa2lwVHg7CglCT09MIGZnTERQQzsKCglCT09MIGZnSXNRb1M7CglCT09MIGZnSXNGcm9tRFM7CglCT09MIGZnSXNUb0RTOwoJQk9PTCBmZ0R5bkJ3OwoKCUJPT0wgZmdJc0FNU0RVQ3Jvc3NMRzsKCUJPT0wgZmdDaGVja1BFUjsKCUJPT0wgZmdJc0dJRDYzOwoJVUlOVF84IGF1Y1Jlc2VydmVkWzFdOwoKI2lmICgxIC8qIENGR19TVVBQT1JUX1ZIVCA9PSAxICovKQoJQk9PTCBmZ1ZodFRJQkY7CglCT09MIGZnVmh0VEVCRjsKCUJPT0wgZmdWaHRMRFBDOwoJVUlOVF84IGF1Y1Jlc2VydmVkMlsxXTsKI2VuZGlmCn0gUEFSQU1fVFhfQ09ORklHX1QsICpQX1BBUkFNX1RYX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0tFWV9DT05GSUdfVCB7CglVSU5UXzggICAgICAgICAgICAgICAgIGF1Y0tleVszMl07Cn0gUEFSQU1fS0VZX0NPTkZJR19ULCAqUF9QQVJBTV9LRVlfQ09ORklHX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUEVFUl9SQVRFX0lORk9fVCB7CglVSU5UXzggICAgICAgICAgICAgICAgIHVjQ291bnRlck1QRFVGYWlsOwoJVUlOVF84ICAgICAgICAgICAgICAgICB1Y0NvdW50ZXJNUERVVHg7CglVSU5UXzggICAgICAgICAgICAgICAgIHVjUmF0ZUlkeDsKCVVJTlRfOCAgICAgICAgICAgICAgICAgdWNSZXNlcnZlZFsxXTsKCglVSU5UXzE2ICAgICAgICAgICAgICAgIGF1MlJhdGVDb2RlW0FVVE9fUkFURV9OVU1dOwp9IFBBUkFNX1BFRVJfUkFURV9JTkZPX1QsICpQX1BBUkFNX1BFRVJfUkFURV9JTkZPX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUEVFUl9CQV9DT05GSUdfVCB7CglVSU5UXzgJCQl1Y0JhRW47CglVSU5UXzgJCQl1Y1JzdlszXTsKCVVJTlRfMzIJCQl1NEJhV2luU2l6ZTsKfSBQQVJBTV9QRUVSX0JBX0NPTkZJR19ULCAqUF9QQVJBTV9QRUVSX0JBX0NPTkZJR19UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0FOVF9JRF9DT05GSUdfVCB7CglVSU5UXzgJCQl1Y0FOVElEU3RzMDsKCVVJTlRfOAkJCXVjQU5USURTdHMxOwoJVUlOVF84CQkJdWNBTlRJRFN0czI7CglVSU5UXzgJCQl1Y0FOVElEU3RzMzsKfSBQQVJBTV9BTlRfSURfQ09ORklHX1QsICpQX1BBUkFNX0FOVF9JRF9DT05GSUdfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9QRUVSX0NBUF9UIHsKCVBBUkFNX0FOVF9JRF9DT05GSUdfVAlyQW50SURDb25maWc7CgoJVUlOVF84CQkJdWNUeFBvd2VyT2Zmc2V0OwoJVUlOVF84CQkJdWNDb3VudGVyQldTZWxlY3RvcjsKCVVJTlRfOAkJCXVjQ2hhbmdlQldBZnRlclJhdGVOOwoJVUlOVF84CQkJdWNGcmVxdWVuY3lDYXBhYmlsaXR5OwoJVUlOVF84CQkJdWNTcGF0aWFsRXh0ZW5zaW9uSW5kZXg7CgoJQk9PTAkJCWZnRzI7CglCT09MCQkJZmdHNDsKCUJPT0wJCQlmZ0c4OwoJQk9PTAkJCWZnRzE2OwoKCVVJTlRfOAkJCXVjTU1TUzsKCVVJTlRfOAkJCXVjQW1wZHVGYWN0b3I7CglVSU5UXzgJCQl1Y1Jlc2VydmVkWzFdOwp9IFBBUkFNX1BFRVJfQ0FQX1QsICpQX1BBUkFNX1BFRVJfQ0FQX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUEVFUl9SWF9DT1VOVEVSX0FMTF9UIHsKCVVJTlRfOAkJCXVjUnhSY3BpMDsKCVVJTlRfOAkJCXVjUnhSY3BpMTsKCVVJTlRfOAkJCXVjUnhSY3BpMjsKCVVJTlRfOAkJCXVjUnhSY3BpMzsKCglVSU5UXzgJCQl1Y1J4Q0MwOwoJVUlOVF84CQkJdWNSeENDMTsKCVVJTlRfOAkJCXVjUnhDQzI7CglVSU5UXzgJCQl1Y1J4Q0MzOwoKCUJPT0wJCQlmZ1J4Q0NTZWw7CglVSU5UXzgJCQl1Y0NlUm1zZDsKCVVJTlRfOAkJCWF1Y1Jlc2VydmVkWzJdOwp9IFBBUkFNX1BFRVJfUlhfQ09VTlRFUl9BTExfVCwgKlBfUEFSQU1fUEVFUl9SWF9DT1VOVEVSX0FMTF9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVCB7CglVSU5UXzE2IHUyUmF0ZTFUeENudDsKCVVJTlRfMTYgdTJSYXRlMUZhaWxDbnQ7CglVSU5UXzE2IHUyUmF0ZTJPa0NudDsKCVVJTlRfMTYgdTJSYXRlM09rQ250OwoJVUlOVF8xNiB1MkN1ckJ3VHhDbnQ7CglVSU5UXzE2IHUyQ3VyQndGYWlsQ250OwoJVUlOVF8xNiB1Mk90aGVyQndUeENudDsKCVVJTlRfMTYgdTJPdGhlckJ3RmFpbENudDsKfSBQQVJBTV9QRUVSX1RYX0NPVU5URVJfQUxMX1QsICpQX1BBUkFNX1BFRVJfVFhfQ09VTlRFUl9BTExfVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9IV19XTEFOX0lORk9fVCB7CglVSU5UXzMyCQkJdTRJbmRleDsKCVBBUkFNX1RYX0NPTkZJR19UCXJXdGJsVHhDb25maWc7CglQQVJBTV9TRUNfQ09ORklHX1QJcld0YmxTZWNDb25maWc7CglQQVJBTV9LRVlfQ09ORklHX1QJcld0YmxLZXlDb25maWc7CglQQVJBTV9QRUVSX1JBVEVfSU5GT19UCXJXdGJsUmF0ZUluZm87CglQQVJBTV9QRUVSX0JBX0NPTkZJR19UICByV3RibEJhQ29uZmlnOwoJUEFSQU1fUEVFUl9DQVBfVAlyV3RibFBlZXJDYXA7CglQQVJBTV9QRUVSX1JYX0NPVU5URVJfQUxMX1Qgcld0YmxSeENvdW50ZXI7CglQQVJBTV9QRUVSX1RYX0NPVU5URVJfQUxMX1Qgcld0YmxUeENvdW50ZXI7Cn0gUEFSQU1fSFdfV0xBTl9JTkZPX1QsICpQX1BBUkFNX0hXX1dMQU5fSU5GT19UOwoKdHlwZWRlZiBzdHJ1Y3QgX0hXX1RYX0FNUERVX01FVFJJQ1NfVCB7CglVSU5UXzMyIHU0VHhTZkNudDsKCVVJTlRfMzIgdTRUeEFja1NmQ250OwoJVUlOVF8zMiB1MlR4QW1wZHVDbnQ7CglVSU5UXzMyIHUyVHhSc3BCYUNudDsKCVVJTlRfMTYgdTJUeEVhcmx5U3RvcENudDsKCVVJTlRfMTYgdTJUeFJhbmdlMUFtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2UyQW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTNBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlNEFtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U1QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTZBbXBkdUNudDsKCVVJTlRfMTYgdTJUeFJhbmdlN0FtcGR1Q250OwoJVUlOVF8xNiB1MlR4UmFuZ2U4QW1wZHVDbnQ7CglVSU5UXzE2IHUyVHhSYW5nZTlBbXBkdUNudDsKfSBIV19UWF9BTVBEVV9NRVRSSUNTX1QsICpQX0hXX1RYX0FNUERVX01FVFJJQ1NfVDsKCnR5cGVkZWYgc3RydWN0IF9IV19NSUJfQ09VTlRFUl9UIHsKCVVJTlRfMzIgdTRSeEZjc0VyckNudDsKCVVJTlRfMzIgdTRSeEZpZm9GdWxsQ250OwoJVUlOVF8zMiB1NFJ4TXBkdUNudDsKCVVJTlRfMzIgdTRSeEFNUERVQ250OwoJVUlOVF8zMiB1NFJ4VG90YWxCeXRlOwoJVUlOVF8zMiB1NFJ4VmFsaWRBTVBEVVNGOwoJVUlOVF8zMiB1NFJ4VmFsaWRCeXRlOwoJVUlOVF8zMiB1NENoYW5uZWxJZGxlQ250OwoJVUlOVF8zMiB1NFJ4VmVjdG9yRHJvcENudDsKCVVJTlRfMzIgdTREZWxpbWl0ZXJGYWlsZWRDbnQ7CglVSU5UXzMyIHU0UnhWZWN0b3JNaXNtYXRjaENudDsKCVVJTlRfMzIgdTRNZHJkeUNudDsKCVVJTlRfMzIgdTRDQ0tNZHJkeUNudDsKCVVJTlRfMzIgdTRPRkRNTEdNaXhNZHJkeTsKCVVJTlRfMzIgdTRPRkRNR3JlZW5NZHJkeTsKCVVJTlRfMzIgdTRQRkRyb3BDbnQ7CglVSU5UXzMyIHU0UnhMZW5NaXNtYXRjaENudDsKCVVJTlRfMzIgdTRQQ2NhVGltZTsKCVVJTlRfMzIgdTRTQ2NhVGltZTsKCVVJTlRfMzIgdTRDY2FOYXZUeDsKCVVJTlRfMzIgdTRQRURUaW1lOwoJVUlOVF8zMiB1NEJlYWNvblR4Q250OwoJVUlOVF8zMiBhdTRCYU1pc3NlZENudFtCU1NJRF9OVU1dOwoJVUlOVF8zMiBhdTRSdHNUeENudFtCU1NJRF9OVU1dOwoJVUlOVF8zMiBhdTRGcmFtZVJldHJ5Q250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NEZyYW1lUmV0cnkyQ250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NFJ0c1JldHJ5Q250W0JTU0lEX05VTV07CglVSU5UXzMyIGF1NEFja0ZhaWxlZENudFtCU1NJRF9OVU1dOwp9IEhXX01JQl9DT1VOVEVSX1QsICpQX0hXX01JQl9DT1VOVEVSX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfSFdfTUlCMl9DT1VOVEVSX1QgewoJVUlOVF8zMiB1NFR4NDBNSHpDbnQ7CglVSU5UXzMyIHU0VHg4ME1IekNudDsKCVVJTlRfMzIgdTRUeDE2ME1IekNudDsKfSBIV19NSUIyX0NPVU5URVJfVCwgKlBfSFdfTUlCMl9DT1VOVEVSX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fSFdfTUlCX0lORk9fVCB7CglVSU5UXzMyCQkJdTRJbmRleDsKCUhXX01JQl9DT1VOVEVSX1QJckh3TWliQ250OwoJSFdfTUlCMl9DT1VOVEVSX1QJckh3TWliMkNudDsKCUhXX1RYX0FNUERVX01FVFJJQ1NfVAlySHdUeEFtcGR1TXRzOwp9IFBBUkFNX0hXX01JQl9JTkZPX1QsICpQX1BBUkFNX0hXX01JQl9JTkZPX1Q7CiNlbmRpZgoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiEgXGJyaWVmIEZvciBGaXhlZCBSYXRlIENvbmZpZ3VyYXRpb24gKFJlZ2lzdHJ5KSAgICAgICAgICAgICAgKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnR5cGVkZWYgZW51bSBfRU5VTV9SRUdJU1RSWV9GSVhFRF9SQVRFX1QgewoJRklYRURfUkFURV9OT05FLAoJRklYRURfUkFURV8xTSwKCUZJWEVEX1JBVEVfMk0sCglGSVhFRF9SQVRFXzVfNU0sCglGSVhFRF9SQVRFXzExTSwKCUZJWEVEX1JBVEVfNk0sCglGSVhFRF9SQVRFXzlNLAoJRklYRURfUkFURV8xMk0sCglGSVhFRF9SQVRFXzE4TSwKCUZJWEVEX1JBVEVfMjRNLAoJRklYRURfUkFURV8zNk0sCglGSVhFRF9SQVRFXzQ4TSwKCUZJWEVEX1JBVEVfNTRNLAoJRklYRURfUkFURV9NQ1MwXzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTMV8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzJfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MzXzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNF8yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzVfMjBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M2XzIwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTN18yME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzBfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MxXzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTMl8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzNfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M0XzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNV8yME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzZfMjBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M3XzIwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTMF80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzFfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MyXzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTM180ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzRfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1M1XzQwTV84MDBOUywKCUZJWEVEX1JBVEVfTUNTNl80ME1fODAwTlMsCglGSVhFRF9SQVRFX01DUzdfNDBNXzgwME5TLAoJRklYRURfUkFURV9NQ1MzMl84MDBOUywKCUZJWEVEX1JBVEVfTUNTMF80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzFfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MyXzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTM180ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzRfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1M1XzQwTV80MDBOUywKCUZJWEVEX1JBVEVfTUNTNl80ME1fNDAwTlMsCglGSVhFRF9SQVRFX01DUzdfNDBNXzQwME5TLAoJRklYRURfUkFURV9NQ1MzMl80MDBOUywKCUZJWEVEX1JBVEVfTlVNCn0gRU5VTV9SRUdJU1RSWV9GSVhFRF9SQVRFX1QsICpQX0VOVU1fUkVHSVNUUllfRklYRURfUkFURV9UOwoKdHlwZWRlZiBlbnVtIF9FTlVNX0JUX0NNRF9UIHsKCUJUX0NNRF9QUk9GSUxFID0gMCwKCUJUX0NNRF9VUERBVEUsCglCVF9DTURfTlVNCn0gRU5VTV9CVF9DTURfVDsKCnR5cGVkZWYgZW51bSBfRU5VTV9CVF9QUk9GSUxFX1QgewoJQlRfUFJPRklMRV9DVVNUT00gPSAwLAoJQlRfUFJPRklMRV9TQ08sCglCVF9QUk9GSUxFX0FDTCwKCUJUX1BST0ZJTEVfTUlYRUQsCglCVF9QUk9GSUxFX05PX0NPTk5FQ1RJT04sCglCVF9QUk9GSUxFX05VTQp9IEVOVU1fQlRfUFJPRklMRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BUQV9QUk9GSUxFX1QgewoJRU5VTV9CVF9QUk9GSUxFX1QgZUJ0UHJvZmlsZTsKCXVuaW9uIHsKCQlVSU5UXzggYXVjQlRQUGFyYW1zW0JUX1BST0ZJTEVfUEFSQU1fTEVOXTsKCQkvKiAgMDogc2NvIHJlc2VydmVkIHNsb3QgdGltZSwKCQkqICAxOiBzY28gaWRsZSBzbG90IHRpbWUsCgkJKiAgMjogYWNsIHRocm91Z2hwdXQsCgkJKiAgIDM6IGJ0IHR4IHBvd2VyLAoJCSogICA0OiBidCByc3NpCgkJKiAgIDU6IFZvSVAgaW50ZXJ2YWwKCQkqICAgNjogQklUKDApIFVzZSB0aGlzIGZpZWxkLCBCSVQoMSkgMCBhcHBseSBzaW5nbGUvIDEgZHVhbCBQVEEgc2V0dGluZy4KCQkqLwoJCVVJTlRfMzIgYXU0QnRjcls0XTsKCX0gdTsKfSBQVEFfUFJPRklMRV9ULCAqUF9QVEFfUFJPRklMRV9UOwoKdHlwZWRlZiBzdHJ1Y3QgX1BUQV9JUENfVCB7CglVSU5UXzggdWNDbWQ7CglVSU5UXzggdWNMZW47Cgl1bmlvbiB7CgkJUFRBX1BST0ZJTEVfVCByUHJvZmlsZTsKCQlVSU5UXzggYXVjQlRQUGFyYW1zW0JUX1BST0ZJTEVfUEFSQU1fTEVOXTsKCX0gdTsKfSBQQVJBTV9QVEFfSVBDX1QsICpQX1BBUkFNX1BUQV9JUENfVCwgUFRBX0lQQ19ULCAqUF9QVEFfSVBDX1Q7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyohIFxicmllZiBDRkc4MDIxMSBTY2FuIFJlcXVlc3QgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICovCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU0NBTl9SRVFVRVNUX0VYVF9UIHsKCVBBUkFNX1NTSURfVCByU3NpZDsKCVVJTlRfMzIgdTRJRUxlbmd0aDsKCVBVSU5UXzggcHVjSUU7Cn0gUEFSQU1fU0NBTl9SRVFVRVNUX0VYVF9ULCAqUF9QQVJBTV9TQ0FOX1JFUVVFU1RfRVhUX1Q7Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fU0NBTl9SRVFVRVNUX0FEVl9UIHsKCVVJTlRfMzIgdTRTc2lkTnVtOwoJUEFSQU1fU1NJRF9UIHJTc2lkW0NGR19TQ0FOX1NTSURfTUFYX05VTV07CglVSU5UXzMyIHU0SUVMZW5ndGg7CglQVUlOVF84IHB1Y0lFOwp9IFBBUkFNX1NDQU5fUkVRVUVTVF9BRFZfVCwgKlBfUEFSQU1fU0NBTl9SRVFVRVNUX0FEVl9UOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgQ0ZHODAyMTEgU2NoZWR1bGVkIFNjYW4gUmVxdWVzdCBDb250YWluZXIgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX1NDSEVEX1NDQU5fUkVRVUVTVF9UIHsKCVVJTlRfMzIgdTRTc2lkTnVtOwoJUEFSQU1fU1NJRF9UIGFyU3NpZFtDRkdfU0NBTl9TU0lEX01BVENIX01BWF9OVU1dOwoJVUlOVF8zMiB1NElFTGVuZ3RoOwoJUFVJTlRfOCBwdWNJRTsKCVVJTlRfMTYgdTJTY2FuSW50ZXJ2YWw7CS8qIGluIG1pbGxpc2Vjb25kcyAqLwp9IFBBUkFNX1NDSEVEX1NDQU5fUkVRVUVTVCwgKlBfUEFSQU1fU0NIRURfU0NBTl9SRVFVRVNUOwoKI2lmIENGR19TVVBQT1JUX1BBU1NQT0lOVAp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fSFMyMF9TRVRfQlNTSURfUE9PTCB7CglCT09MRUFOIGZnSXNFbmFibGU7CglVSU5UXzggdWNOdW1Cc3NpZFBvb2w7CglQQVJBTV9NQUNfQUREUkVTUyBhckJTU0lEWzhdOwp9IFBBUkFNX0hTMjBfU0VUX0JTU0lEX1BPT0wsICpQX1BBUkFNX0hTMjBfU0VUX0JTU0lEX1BPT0w7CgojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfUEFTU1BPSU5UICovCgojaWYgQ0ZHX1NVUFBPUlRfU05JRkZFUgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fQ1VTVE9NX01PTklUT1JfU0VUX1NUUlVDVF9UIHsKCVVJTlRfOCB1Y0VuYWJsZTsKCVVJTlRfOCB1Y0JhbmQ7CglVSU5UXzggdWNQcmlDaGFubmVsOwoJVUlOVF84IHVjU2NvOwoJVUlOVF84IHVjQ2hhbm5lbFdpZHRoOwoJVUlOVF84IHVjQ2hhbm5lbFMxOwoJVUlOVF84IHVjQ2hhbm5lbFMyOwoJVUlOVF84IGF1Y1Jlc3ZbOV07Cn0gUEFSQU1fQ1VTVE9NX01PTklUT1JfU0VUX1NUUlVDVF9ULCAqUF9QQVJBTV9DVVNUT01fTU9OSVRPUl9TRVRfU1RSVUNUX1Q7CiNlbmRpZgoKI2lmIENGR19BVVRPX0NIQU5ORUxfU0VMX1NVUFBPUlQKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qISBcYnJpZWYgTVRLIEF1dG8gQ2hhbm5lbCBTZWxlY3Rpb24gcmVsYXRlZCBDb250YWluZXIgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KdHlwZWRlZiBzdHJ1Y3QgX0xURV9TQUZFX0NITl9JTkZPX1QgewoJVUlOVF8zMiBhdTRTYWZlQ2hhbm5lbEJpdG1hc2tbNV07IC8qIE5MODAyMTFfVEVTVE1PREVfQVZBSUxBQkxFX0NIQU5fQVRUUl9NQVggKi8KfSBMVEVfU0FGRV9DSE5fSU5GT19ULCAqUF9DTURfTFRFX1NBRkVfQ0hOX0lORk9fVDsKCnR5cGVkZWYgc3RydWN0IF9QQVJBTV9DSE5fTE9BRF9JTkZPIHsKCS8qIFBlci1DSE4gTG9hZCAqLwoJVUlOVF84IHVjQ2hhbm5lbDsKCVVJTlRfMTYgdTJBUE51bTsKCVVJTlRfMzIgdTREaXJ0eW5lc3M7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBQQVJBTV9DSE5fTE9BRF9JTkZPLCAqUF9QQVJBTV9DSE5fTE9BRF9JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0NITl9SQU5LX0lORk8gewoJVUlOVF84IHVjQ2hhbm5lbDsKCVVJTlRfMzIgdTREaXJ0eW5lc3M7CglVSU5UXzggdWNSZXNlcnZlZDsKfSBQQVJBTV9DSE5fUkFOS19JTkZPLCAqUF9QQVJBTV9DSE5fUkFOS19JTkZPOwoKdHlwZWRlZiBzdHJ1Y3QgX1BBUkFNX0dFVF9DSE5fSU5GTyB7CglMVEVfU0FGRV9DSE5fSU5GT19UIHJMdGVTYWZlQ2huTGlzdDsKCVBBUkFNX0NITl9MT0FEX0lORk8gckVhY2hDaG5Mb2FkW01BWF9DSE5fTlVNXTsKCUJPT0xFQU4gZmdEYXRhUmVhZHlCaXQ7CglQQVJBTV9DSE5fUkFOS19JTkZPIHJDaG5SYW5rTGlzdFtNQVhfQ0hOX05VTV07CglVSU5UXzggYXVjUmVzZXJ2ZWRbM107Cn0gUEFSQU1fR0VUX0NITl9JTkZPLCAqUF9QQVJBTV9HRVRfQ0hOX0lORk87Cgp0eXBlZGVmIHN0cnVjdCBfUEFSQU1fUFJFRkVSX0NITl9JTkZPIHsKCVVJTlRfOCB1Y0NoYW5uZWw7CglVSU5UXzE2IHUyQVBOdW1TY29yZTsKCVVJTlRfOCB1Y1Jlc2VydmVkOwp9IFBBUkFNX1BSRUZFUl9DSE5fSU5GTywgKlBfUEFSQU1fUFJFRkVSX0NITl9JTkZPOwojZW5kaWYKCgp0eXBlZGVmIHN0cnVjdCBfVU1BQ19TVEFUMl9HRVRfVCB7CglVSU5UXzE2CXUyUGxlUmV2UGdIaWYwR3JvdXAwOwoJVUlOVF8xNgl1MlBsZVJldlBnQ3B1R3JvdXAyOwoKCVVJTlRfMTYJdTJQc2VSZXZQZ0hpZjBHcm91cDA7CglVSU5UXzE2CXUyUHNlUmV2UGdIaWYxR3JvdXAxOwoJVUlOVF8xNgl1MlBzZVJldlBnQ3B1R3JvdXAyOwoJVUlOVF8xNgl1MlBzZVJldlBnTG1hYzBHcm91cDM7CglVSU5UXzE2CXUyUHNlUmV2UGdMbWFjMUdyb3VwNDsKCVVJTlRfMTYJdTJQc2VSZXZQZ0xtYWMyR3JvdXA1OwoJVUlOVF8xNgl1MlBzZVJldlBnUGxlR3JvdXA2OwoKCVVJTlRfMTYJdTJQbGVTcnZQZ0hpZjBHcm91cDA7CglVSU5UXzE2CXUyUGxlU3J2UGdDcHVHcm91cDI7CgoJVUlOVF8xNgl1MlBzZVNydlBnSGlmMEdyb3VwMDsKCVVJTlRfMTYJdTJQc2VTcnZQZ0hpZjFHcm91cDE7CglVSU5UXzE2CXUyUHNlU3J2UGdDcHVHcm91cDI7CglVSU5UXzE2CXUyUHNlU3J2UGdMbWFjMEdyb3VwMzsKCVVJTlRfMTYJdTJQc2VTcnZQZ0xtYWMxR3JvdXA0OwoJVUlOVF8xNgl1MlBzZVNydlBnTG1hYzJHcm91cDU7CglVSU5UXzE2CXUyUHNlU3J2UGdQbGVHcm91cDY7CgoJVUlOVF8xNgl1MlBsZVRvdGFsUGFnZU51bTsKCVVJTlRfMTYJdTJQbGVGcmVlUGFnZU51bTsKCVVJTlRfMTYJdTJQbGVGZmFOdW07CgoJVUlOVF8xNgl1MlBzZVRvdGFsUGFnZU51bTsKCVVJTlRfMTYJdTJQc2VGcmVlUGFnZU51bTsKCVVJTlRfMTYJdTJQc2VGZmFOdW07Cn0gVU1BQ19TVEFUMl9HRVRfVCwgKlBfVU1BQ19TVEFUMl9HRVRfVDsKCnR5cGVkZWYgc3RydWN0IF9DTk1fU1RBVFVTX1QgewoJVUlOVF84ICAgICAgICAgICAgICBmZ0RiRGNNb2RlRW47CglVSU5UXzggICAgICAgICAgICAgIHVjQ2hOdW1CMDsKCVVJTlRfOCAgICAgICAgICAgICAgdWNDaE51bUIxOwoJVUlOVF84ICAgICAgICAgICAgICB1c1Jlc2VydmVkOwp9IENOTV9TVEFUVVNfVCwgKlBfQ05NX1NUQVRVU19UOwoKdHlwZWRlZiBzdHJ1Y3QgX0NOTV9DSF9MSVNUX1QgewoJVUlOVF84ICAgICAgICAgICAgICB1Y0NoTnVtWzRdOwp9IENOTV9DSF9MSVNUX1QsICpQX0NOTV9DSF9MSVNUX1Q7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgVSBCIEwgSSBDICAgRCBBIFQgQQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgUiBJIFYgQSBUIEUgICBEIEEgVCBBCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTSBBIEMgUiBPIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgRiBVIE4gQyBUIEkgTyBOICAgRCBFIEMgTCBBIFIgQSBUIEkgTyBOIFMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKi8KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qIFJvdXRpbmVzIHRvIHNldCBwYXJhbWV0ZXJzIG9yIHF1ZXJ5IGluZm9ybWF0aW9uLiAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqKioqIFJvdXRpbmVzIGluIHdsYW5fb2lkLmMgKioqKiovCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU5ldHdvcmtUeXBlc1N1cHBvcnRlZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TmV0d29ya1R5cGVJblVzZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TmV0d29ya1R5cGVJblVzZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCc3NpZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCc3NpZExpc3RTY2FuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCc3NpZExpc3RTY2FuRXh0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCc3NpZExpc3RTY2FuQWR2KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUJzc2lkTGlzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QnNzaWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENvbm5lY3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRTc2lkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNzaWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUluZnJhc3RydWN0dXJlTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRJbmZyYXN0cnVjdHVyZU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlBdXRoTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRBdXRoTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCiNpZiAwCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVByaXZhY3lGaWx0ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFByaXZhY3lGaWx0ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRFbmNyeXB0aW9uU3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUVuY3J5cHRpb25TdGF0dXMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0QWRkV2VwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSZW1vdmVXZXAoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkZEtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UmVtb3ZlS2V5KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRSZWxvYWREZWZhdWx0cyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFRlc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5Q2FwYWJpbGl0eShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RnJlcXVlbmN5KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRGcmVxdWVuY3koSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QXRpbVdpbmRvdyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEF0aW1XaW5kb3coSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDaGFubmVsKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSc3NpKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSc3NpVHJpZ2dlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCU9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJzc2lUcmlnZ2VyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnRzVGhyZXNob2xkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJ0c1RocmVzaG9sZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnk4MDJkb3QxMVBvd2VyU2F2ZVByb2ZpbGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldDgwMmRvdDExUG93ZXJTYXZlUHJvZmlsZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgICBJTiBQVk9JRCBwclNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UG1raWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UG1raWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5U3VwcG9ydGVkUmF0ZXMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeURlc2lyZWRSYXRlcyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXREZXNpcmVkUmF0ZXMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UGVybWFuZW50QWRkcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgSU4gUFZPSUQgcHZRdWVyeUJ1ZiwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUN1cnJlbnRBZGRyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZiwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVBlcm1hbmVudEFkZHIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIElOIFBWT0lEIHB2UXVlcnlCdWYsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZkxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlMaW5rU3BlZWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgojaWYgQ0ZHX1NVUFBPUlRfUUFfVE9PTAojaWYgQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUKV0xBTl9TVEFUVVMgd2xhbm9pZFNldEVmdXNCdWZmZXJNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCi8qI2lmIChDRkdfRUVQUk9NX1BBR0VfQUNDRVNTID09IDEpKi8KV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UHJvY2Vzc0FjY2Vzc0VmdXNlUmVhZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVByb2Nlc3NBY2Nlc3NFZnVzZVdyaXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RWZ1c2VGcmVlQmxvY2soSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlHZXRUeFBvd2VyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwovKiNlbmRpZiovCgojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfQlVGRkVSX01PREUgKi8KV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UnhTdGF0aXN0aWNzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkQnNzSW5mb0Jhc2ljKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWREZXZJbmZvQWN0aXZlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkTWFudWFsQXNzb2MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgQ0ZHX1NVUFBPUlRfVFhfQkYKV0xBTl9TVEFUVVMKd2xhbm9pZFR4QmZBY3Rpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQkgIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKV0xBTl9TVEFUVVMgd2xhbm9pZE11TWltb0FjdGlvbihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwpXTEFOX1NUQVRVUyB3bGFub2lkU3RhUmVjVXBkYXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sCgkJCQlPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CldMQU5fU1RBVFVTIHdsYW5vaWRTdGFSZWNCRlVwZGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJICBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZiAvKiBDRkdfU1VQUE9SVF9UWF9CRiAqLwojZW5kaWYgLyogQ0ZHX1NVUFBPUlRfUUFfVE9PTCAqLwoKI2lmIENGR19TVVBQT1JUX0NBTF9SRVNVTFRfQkFDS1VQX1RPX0hPU1QKV0xBTl9TVEFUVVMKd2xhbm9pZFNlbmRDYWxCYWNrdXBWMkNtZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q2FsQmFja3VwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5Q2FsQmFja3VwVjIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1jclJlYWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TWVtRHVtcChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TWNyV3JpdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlEcnZNY3JSZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXREcnZNY3JXcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN3Q3RybFJlYWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFN3Q3RybFdyaXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldENoaXBDb25maWcoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUNoaXBDb25maWcoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEtleUNmZyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlFZXByb21SZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRFZXByb21Xcml0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJmVGVzdFJ4U3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVJmVGVzdFR4U3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU9pZEludGVyZmFjZVZlcnNpb24oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVZlbmRvcklkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TXVsdGljYXN0TGlzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TXVsdGljYXN0TGlzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSY3ZFcnJvcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2Tm9CdWZmZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5UmN2Q3JjRXJyb3IoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5U3RhdGlzdGljcyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgojaWZkZWYgTElOVVgKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVN0YXRpc3RpY3NGb3JMaW51eChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlNZWRpYVN0cmVhbU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRNZWRpYVN0cmVhbU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlSY3ZPayhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5WG1pdE9rKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5WG1pdEVycm9yKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5WG1pdE9uZUNvbGxpc2lvbihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVhtaXRNb3JlQ29sbGlzaW9ucyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5WG1pdE1heENvbGxpc2lvbnMoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEN1cnJlbnRQYWNrZXRGaWx0ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5Q3VycmVudFBhY2tldEZpbHRlcihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQlJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFjcGlEZXZpY2VQb3dlclN0YXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlBY3BpRGV2aWNlUG93ZXJTdGF0ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCQkgSU4gUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXREaXNhc3NvY2lhdGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RnJhZ1RocmVzaG9sZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RnJhZ1RocmVzaG9sZChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlBZEhvY01vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkSG9jTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCZWFjb25JbnRlcnZhbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJlYWNvbkludGVydmFsKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q3VycmVudEFkZHIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgQ0ZHX1RDUF9JUF9DSEtTVU1fT0ZGTE9BRApXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q1NVTU9mZmxvYWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZiAvKiBDRkdfVENQX0lQX0NIS1NVTV9PRkZMT0FEICovCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0TmV0d29ya0FkZHJlc3MoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1heEZyYW1lU2l6ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeU1heFRvdGFsU2l6ZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRDdXJyZW50TG9va2FoZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCi8qIFJGIFRlc3QgcmVsYXRlZCBBUElzICovCldMQU5fU1RBVFVTCndsYW5vaWRSZnRlc3RTZXRUZXN0TW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFJmdGVzdFNldFRlc3RJY2FwTW9kZShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRSZnRlc3RTZXRBYm9ydFRlc3RNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRSZnRlc3RRdWVyeUF1dG9UZXN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUmZ0ZXN0U2V0QXV0b1Rlc3QoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgT1VUIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgQ0ZHX1NVUFBPUlRfV0FQSQpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V2FwaU1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V2FwaUFzc29jSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V2FwaUtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9XUFMyCldMQU5fU1RBVFVTCndsYW5vaWRTZXRXU0NBc3NvY0luZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfRU5BQkxFX1dBS0VVUF9PTl9MQU4KV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkZFdha2V1cFBhdHRlcm4oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJlbW92ZVdha2V1cFBhdHRlcm4oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5RW5hYmxlV2FrZXVwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RW5hYmxlV2FrZXVwKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0V2lGaVdtbVBzVGVzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJCUlOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0VHhBbXBkdShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEFkZGJhUmVqZWN0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TnZyYW1SZWFkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXROdnJhbVdyaXRlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlDZmdTcmNUeXBlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlFZXByb21UeXBlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICAgT1VUIFBWT0lEIHB2UXVlcnlCdWZmZXIsIElOIFVJTlRfMzIgdTRRdWVyeUJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFF1ZXJ5SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0Q291bnRyeUNvZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUyB3bGFuU2VuZE1lbUR1bXBDbWQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLCBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4pOwoKI2lmIENGR19TTFRfU1VQUE9SVAoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5U0xUU3RhdHVzKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRVcGRhdGVTTFRNb2RlKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVdsYW5JbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCU9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5TWliSW5mbyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRGd0xvZzJIb3N0KAoJSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCglJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIDAKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE5vYVBhcmFtKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldE9wcFBzUGFyYW0oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRVQXBzZFBhcmFtKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJUKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeUJUKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCSAgICAgICBPVVQgUFZPSUQgcHZRdWVyeUJ1ZmZlciwgSU4gVUlOVF8zMiB1NFF1ZXJ5QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0UXVlcnlJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRUeFBvd2VyKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgojaWYgMApXTEFOX1NUQVRVUwp3bGFub2lkUXVlcnlCdFNpbmdsZUFudGVubmEoCglJTiAgUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJT1VUIFBWT0lEICAgICAgIHB2UXVlcnlCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRRdWVyeUJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiAgICBwdTRRdWVyeUluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEJ0U2luZ2xlQW50ZW5uYSgKCUlOICBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglJTiAgUFZPSUQgICAgICAgcHZTZXRCdWZmZXIsCglJTiAgVUlOVF8zMiAgICAgdTRTZXRCdWZmZXJMZW4sCglPVVQgUFVJTlRfMzIgICAgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0UHRhKAoJSU4gIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCUlOICBQVk9JRCAgICAgICBwdlNldEJ1ZmZlciwKCUlOICBVSU5UXzMyICAgICB1NFNldEJ1ZmZlckxlbiwKCU9VVCBQVUlOVF8zMiAgICBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVB0YSgKCUlOICBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCglPVVQgUFZPSUQgICAgICAgcHZRdWVyeUJ1ZmZlciwKCUlOICBVSU5UXzMyICAgICB1NFF1ZXJ5QnVmZmVyTGVuLAoJT1VUIFBVSU5UXzMyICAgIHB1NFF1ZXJ5SW5mb0xlbik7CiNlbmRpZgoKI2lmIENGR19FTkFCTEVfV0lGSV9ESVJFQ1QKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFAycE1vZGUoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmCgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGVmYXVsdEtleShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEd0a1Jla2V5RGF0YShJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CgpXTEFOX1NUQVRVUwp3bGFub2lkU2V0U3RhcnRTY2hlZFNjYW4oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRTdG9wU2NoZWRTY2FuKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCiNpZiBDRkdfTTBWRV9CQV9UT19EUklWRVIKV0xBTl9TVEFUVVMgd2xhbm9pZFJlc2V0QkFTY29yZWJvYXJkKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4pOwojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9CQVRDSF9TQ0FOCldMQU5fU1RBVFVTCndsYW5vaWRTZXRCYXRjaFNjYW5SZXEoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCSAgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5QmF0Y2hTY2FuUmVzdWx0KElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJICAgIE9VVCBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwojZW5kaWYKCiNpZiBDRkdfU1VQUE9SVF9QQVNTUE9JTlQKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEhTMjBJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldEludGVyd29ya2luZ0luZm8oSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKV0xBTl9TVEFUVVMKd2xhbm9pZFNldFJvYW1pbmdDb25zb3J0aXVtSUVJbmZvKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJCSAgSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKCldMQU5fU1RBVFVTCndsYW5vaWRTZXRIUzIwQnNzaWRQb29sKElOIFBfQURBUFRFUl9UIHByQWRhcHRlciwKCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsIElOIFVJTlRfMzIgdTRTZXRCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRTZXRJbmZvTGVuKTsKI2VuZGlmIC8qIENGR19TVVBQT1JUX1BBU1NQT0lOVCAqLwoKI2lmIENGR19TVVBQT1JUX1NOSUZGRVIKV0xBTl9TVEFUVVMgd2xhbm9pZFNldE1vbml0b3IoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICAgICBJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWROb3RpZnlGd1N1c3BlbmQoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCgkJCQlJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLAoJCQkJT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwojaWYgQ0ZHX1NVUFBPUlRfREJEQwpXTEFOX1NUQVRVUwp3bGFub2lkU2V0RGJkY0VuYWJsZSgKCQlJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJSU4gUFZPSUQgcHZTZXRCdWZmZXIsCgkJSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwKCQlPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7CiNlbmRpZiAvKiNpZiBDRkdfU1VQUE9SVF9EQkRDKi8KCldMQU5fU1RBVFVTCndsYW5vaWRRdWVyeVNldFR4VGFyZ2V0UG93ZXIoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQlJTiBQVk9JRCBwdlNldEJ1ZmZlciwgSU4gVUlOVF8zMiB1NFNldEJ1ZmZlckxlbiwgT1VUIFBVSU5UXzMyIHB1NFNldEluZm9MZW4pOwoKI2lmIENGR19BVVRPX0NIQU5ORUxfU0VMX1NVUFBPUlQKV0xBTl9TVEFUVVMKd2xhbm9pZFF1ZXJ5THRlU2FmZUNoYW5uZWwoSU4gUF9BREFQVEVSX1QgcHJBZGFwdGVyLAoJCQkgICBJTiBQVk9JRCBwdlF1ZXJ5QnVmZmVyLCBJTiBVSU5UXzMyIHU0UXVlcnlCdWZmZXJMZW4sIE9VVCBQVUlOVF8zMiBwdTRRdWVyeUluZm9MZW4pOwpXTEFOX1NUQVRVUwp3bGFuQ2FsY3VsYXRlQWxsQ2hhbm5lbERpcnR5bmVzcyhJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIpOwpWT0lECndsYW5Jbml0Q2huTG9hZEluZm9DaGFubmVsTGlzdChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIpOwpVSU5UXzgKd2xhbkdldENoYW5uZWxJbmRleChJTiBVSU5UXzggY2hhbm5lbCk7ClVJTlRfOAp3bGFuR2V0Q2hhbm5lbE51bUZyb21JbmRleChJTiBVSU5UXzggdWNJZHgpOwpWT0lECndsYW5Tb3J0Q2hhbm5lbChJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIpOwojZW5kaWYKCldMQU5fU1RBVFVTCndsYW5vaWRMaW5rRG93bihJTiBQX0FEQVBURVJfVCBwckFkYXB0ZXIsCgkJICAgICAgIElOIFBWT0lEIHB2U2V0QnVmZmVyLCBJTiBVSU5UXzMyIHU0U2V0QnVmZmVyTGVuLCBPVVQgUFVJTlRfMzIgcHU0U2V0SW5mb0xlbik7Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGIFUgTiBDIFQgSSBPIE4gUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKI2VuZGlmIC8qIF9XTEFOX09JRF9IICovCg==