LyogJFhGcmVlODYkICovIC8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogMyAtKi0gKi8KLyoKICogTWVzYSAzLUQgZ3JhcGhpY3MgbGlicmFyeQogKiBWZXJzaW9uOiAgMy41CiAqCiAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxICBCcmlhbiBQYXVsICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgogKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCiAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwogKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCiAqIEJSSUFOIFBBVUwgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCiAqIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCiAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqIE9yaWdpbmFsIGF1dGhvcnM6CiAqICAgIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aHdAdmFsaW51eC5jb20+CiAqCiAqIEFkYXB0ZWQgdG8gTWFjaDY0IGJ5OgogKiAgICBKb3PpIEZvbnNlY2EgPGpfcl9mb25zZWNhQHlhaG9vLmNvLnVrPgogKi8KCgovKiBET19YWVpXOiAgRW1pdCB4eXogYW5kIG1heWJlIHcgY29vcmRpbmF0ZXMuCiAqIERPX1JHQkE6ICBFbWl0IGNvbG9yLgogKiBET19TUEVDOiAgRW1pdCBzcGVjdWxhciBjb2xvci4KICogRE9fRk9HOiAgIEVtaXQgZm9nIGNvb3JkaW5hdGUgaW4gc3BlY3VsYXIgYWxwaGEuCiAqIERPX1RFWDA6ICBFbWl0IHRleDAgdSx2IGNvb3JkaW5hdGVzLgogKiBET19URVgxOiAgRW1pdCB0ZXgxIHUsdiBjb29yZGluYXRlcy4KICogRE9fUFRFWDogIEVtaXQgdGV4MCwxIHEgY29vcmRpbmF0ZXMgd2hlcmUgcG9zc2libGUuCiAqCiAqIEFkZGl0aW9uYWxseSwgdGhpcyB0ZW1wbGF0ZSBhc3N1bWVzIGl0IGlzIGVtaXR0aW5nICp0cmFuc2Zvcm1lZCoKICogdmVydGljZXM7IHRoZSBtb2RpZmljYXRpb25zIHRvIGVtaXQgdW50cmFuc2Zvcm1lZCB2ZXJ0aWNlcyAoaWUuIHRvCiAqIHQmbCBoYXJkd2FyZSkgYXJlIHByb2JhYmx5IHRvbyBncmVhdCB0byBjb29leGlzdCB3aXRoIHRoZSBjb2RlCiAqIGFscmVhZHkgaW4gdGhpcyBmaWxlLgogKi8KCiNkZWZpbmUgVklFV1BPUlRfWCh4KSAgKChHTGludCkgKChzWzBdICAqICh4KSArIHNbMTJdKSAqIDQuMCkpCiNkZWZpbmUgVklFV1BPUlRfWSh5KSAgKChHTGludCkgKChzWzVdICAqICh5KSArIHNbMTNdKSAqIDQuMCkpCiNkZWZpbmUgVklFV1BPUlRfWih6KSAoKChHTHVpbnQpIChzWzEwXSAqICh6KSArIHNbMTRdKSkgPDwgMTUpCgojaWZuZGVmIExPQ0FMVkFSUwojZGVmaW5lIExPQ0FMVkFSUwojZW5kaWYKCnN0YXRpYyB2b2lkIFRBRyhlbWl0KSggR0xjb250ZXh0ICpjdHgsCgkJICAgICAgIEdMdWludCBzdGFydCwgR0x1aW50IGVuZCwKCQkgICAgICAgdm9pZCAqZGVzdCwKCQkgICAgICAgR0x1aW50IHN0cmlkZSApCnsKICAgTE9DQUxWQVJTCiAgIHN0cnVjdCB2ZXJ0ZXhfYnVmZmVyICpWQiA9ICZUTkxfQ09OVEVYVChjdHgpLT52YjsKI2lmIERPX1RFWDEKICAgR0xmbG9hdCAoKnRjMSlbNF07CiAgIEdMdWludCB0YzFfc3RyaWRlOwojaWYgRE9fUFRFWAogICBHTHVpbnQgdGMxX3NpemU7CiNlbmRpZgojZW5kaWYKI2lmIERPX1RFWDAKICAgR0xmbG9hdCAoKnRjMClbNF07CiAgIEdMdWludCB0YzBfc3RyaWRlOwojaWYgRE9fUFRFWAogICBHTHVpbnQgdGMwX3NpemU7CiNlbmRpZgojZW5kaWYKI2lmIERPX1NQRUMKICAgR0xmbG9hdCAoKnNwZWMpWzRdOwogICBHTHVpbnQgc3BlY19zdHJpZGU7CiNlbmRpZgojaWYgRE9fRk9HCiAgIEdMZmxvYXQgKCpmb2cpWzRdOwogICBHTHVpbnQgZm9nX3N0cmlkZTsKI2VuZGlmCiNpZiBET19SR0JBCiAgIEdMZmxvYXQgKCpjb2wpWzRdOwogICBHTHVpbnQgY29sX3N0cmlkZTsKI2VuZGlmCiAgIEdMZmxvYXQgKCpjb29yZClbNF07CiAgIEdMdWludCBjb29yZF9zdHJpZGU7CiAgIFZFUlRFWCAqdiA9IChWRVJURVggKilkZXN0OwogICBjb25zdCBHTGZsb2F0ICpzID0gR0VUX1ZJRVdQT1JUX01BVCgpOwojaWYgRE9fVEVYMSB8fCBET19URVgwIHx8IERPX1hZWlcKICAgY29uc3QgR0x1Ynl0ZSAqbWFzayA9IFZCLT5DbGlwTWFzazsKI2VuZGlmCiAgIGludCBpOwoKI2lmICFET19YWVpXCiAgICh2b2lkKSBzOyAvKiBRdWlldCBjb21waWxlciAqLwojZW5kaWYKLyogICAgIGZwcmludGYoc3RkZXJyLCAiJXMoYmlnKSBpbXBvcnRhYmxlICVkICVkLi4lZFxuIiwgICovCi8qICAJICAgX19GVU5DVElPTl9fLCBWQi0+aW1wb3J0YWJsZV9kYXRhLCBzdGFydCwgZW5kKTsgKi8KCiNpZiBET19URVgxCiAgIHsKICAgICAgY29uc3QgR0x1aW50IHQxID0gR0VUX1RFWFNPVVJDRSgxKTsKICAgICAgdGMxID0gVkItPlRleENvb3JkUHRyW3QxXS0+ZGF0YTsKICAgICAgdGMxX3N0cmlkZSA9IFZCLT5UZXhDb29yZFB0clt0MV0tPnN0cmlkZTsKI2lmIERPX1BURVgKICAgICAgdGMxX3NpemUgPSBWQi0+VGV4Q29vcmRQdHJbdDFdLT5zaXplOwojZW5kaWYKICAgfQojZW5kaWYKCiNpZiBET19URVgwCiAgIHsKICAgICAgY29uc3QgR0x1aW50IHQwID0gR0VUX1RFWFNPVVJDRSgwKTsKICAgICAgdGMwID0gVkItPlRleENvb3JkUHRyW3QwXS0+ZGF0YTsKICAgICAgdGMwX3N0cmlkZSA9IFZCLT5UZXhDb29yZFB0clt0MF0tPnN0cmlkZTsKI2lmIERPX1BURVgKICAgICAgdGMwX3NpemUgPSBWQi0+VGV4Q29vcmRQdHJbdDBdLT5zaXplOwojZW5kaWYKICAgfQojZW5kaWYKCiNpZiBET19TUEVDCiAgIGlmIChWQi0+U2Vjb25kYXJ5Q29sb3JQdHJbMF0pIHsKICAgICAgc3BlYyA9IFZCLT5TZWNvbmRhcnlDb2xvclB0clswXS0+ZGF0YTsKICAgICAgc3BlY19zdHJpZGUgPSBWQi0+U2Vjb25kYXJ5Q29sb3JQdHJbMF0tPnN0cmlkZTsKICAgfSBlbHNlIHsKICAgICAgc3BlYyA9IChHTGZsb2F0ICgqKVs0XSljdHgtPkN1cnJlbnQuQXR0cmliW1ZFUlRfQVRUUklCX0NPTE9SMV07CiAgICAgIHNwZWNfc3RyaWRlID0gMDsKICAgfQojZW5kaWYKCiNpZiBET19GT0cKICAgaWYgKFZCLT5Gb2dDb29yZFB0cikgewogICAgICBmb2cgPSBWQi0+Rm9nQ29vcmRQdHItPmRhdGE7CiAgICAgIGZvZ19zdHJpZGUgPSBWQi0+Rm9nQ29vcmRQdHItPnN0cmlkZTsKICAgfSBlbHNlIHsKICAgICAgc3RhdGljIEdMZmxvYXQgdG1wWzRdID0gezAsIDAsIDAsIDB9OwogICAgICBmb2cgPSAmdG1wOwogICAgICBmb2dfc3RyaWRlID0gMDsKICAgfQojZW5kaWYKCiNpZiBET19SR0JBCiAgIGNvbCA9IFZCLT5Db2xvclB0clswXS0+ZGF0YTsKICAgY29sX3N0cmlkZSA9IFZCLT5Db2xvclB0clswXS0+c3RyaWRlOwojZW5kaWYKCiAgIGNvb3JkID0gVkItPk5kY1B0ci0+ZGF0YTsKICAgY29vcmRfc3RyaWRlID0gVkItPk5kY1B0ci0+c3RyaWRlOwoKICAgaWYgKHN0YXJ0KSB7CiNpZiBET19URVgxCiAgICAgICAgIFNUUklERV80Rih0YzEsIHN0YXJ0ICogdGMxX3N0cmlkZSk7CiNlbmRpZgojaWYgRE9fVEVYMAogICAgICAgICBTVFJJREVfNEYodGMwLCBzdGFydCAqIHRjMF9zdHJpZGUpOwojZW5kaWYKI2lmIERPX1NQRUMKCSBTVFJJREVfNEYoc3BlYywgc3RhcnQgKiBzcGVjX3N0cmlkZSk7CiNlbmRpZgojaWYgRE9fRk9HCgkgU1RSSURFXzRGKGZvZywgc3RhcnQgKiBmb2dfc3RyaWRlKTsKI2VuZGlmCiNpZiBET19SR0JBCgkgU1RSSURFXzRGKGNvbCwgc3RhcnQgKiBjb2xfc3RyaWRlKTsKI2VuZGlmCgkgU1RSSURFXzRGKGNvb3JkLCBzdGFydCAqIGNvb3JkX3N0cmlkZSk7CiAgIH0KCiAgIGZvciAoaT1zdGFydDsgaSA8IGVuZDsgaSsrLCB2ID0gKFZFUlRFWCAqKSgoR0x1Ynl0ZSAqKXYgKyBzdHJpZGUpKSB7CgkgQ0FSRDMyICpwID0gKENBUkQzMiAqKXY7CiNpZiBET19URVgxIHx8IERPX1RFWDAKCSBHTGZsb2F0IHc7CgoJIGlmIChtYXNrW2ldID09IDApIHsKCSAgICAvKiB1bmNsaXBwZWQgKi8KCSAgICB3ID0gY29vcmRbMF1bM107CgkgfSBlbHNlIHsKCSAgICAvKiBjbGlwcGVkICovCgkgICAgdyA9IDEuMDsKCSB9CiNlbmRpZgoJIAojaWYgRE9fVEVYMQojaWYgRE9fUFRFWAoJIGlmICh0YzFfc2l6ZSA9PSA0KSB7CiNpZmRlZiBNQUNINjRfUFJFTVVMVF9URVhDT09SRFMKCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMVswXVswXSApOwkJLyogVkVSVEVYXz9fU0VDT05EQVJZX1MgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMVswXVsxXSApOwkJLyogVkVSVEVYXz9fU0VDT05EQVJZX1QgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMVswXVszXSApOwkJLyogVkVSVEVYXz9fU0VDT05EQVJZX1cgKi8KI2Vsc2UgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwoJICAgIGZsb2F0IHJodyA9IDEuMCAvIHRjMVswXVszXTsKCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCByaHcqdGMxWzBdWzBdICk7CS8qIFZFUlRFWF8/X1NFQ09OREFSWV9TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgcmh3KnRjMVswXVsxXSApOwkvKiBWRVJURVhfP19TRUNPTkRBUllfVCAqLwoJICAgIExFMzJfT1VUX0ZMT0FUKCBwKyssIHcqdGMxWzBdWzNdICk7CQkvKiBWRVJURVhfP19TRUNPTkRBUllfVyAqLwkKI2VuZGlmIC8qICFNQUNINjRfUFJFTVVMVF9URVhDT09SRFMgKi8KCSB9IGVsc2UgewojZW5kaWYgLyogRE9fUFRFWCAqLwojaWZkZWYgTUFDSDY0X1BSRU1VTFRfVEVYQ09PUkRTCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyp0YzFbMF1bMF0gKTsJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyp0YzFbMF1bMV0gKTsJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9UICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyApOwkJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9XICovCiNlbHNlIC8qICFNQUNINjRfUFJFTVVMVF9URVhDT09SRFMgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB0YzFbMF1bMF0gKTsJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdGMxWzBdWzFdICk7CQkvKiBWRVJURVhfP19TRUNPTkRBUllfVCAqLwoJICAgIExFMzJfT1VUX0ZMT0FUKCBwKyssIHcgKTsJCQkvKiBWRVJURVhfP19TRUNPTkRBUllfVyAqLwojZW5kaWYgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwojaWYgRE9fUFRFWAoJIH0KI2VuZGlmIC8qIERPX1BURVggKi8KCSBTVFJJREVfNEYodGMxLCB0YzFfc3RyaWRlKTsKI2Vsc2UgLyogIURPX1RFWDEgKi8KCSBwICs9IDM7CiNlbmRpZiAvKiAhRE9fVEVYMSAqLwoJICAgIAojaWYgRE9fVEVYMAojaWYgRE9fUFRFWAoJIGlmICh0YzBfc2l6ZSA9PSA0KSB7CiNpZmRlZiBNQUNINjRfUFJFTVVMVF9URVhDT09SRFMKCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMFswXVswXSApOwkJCS8qIFZFUlRFWF8/X1MgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMFswXVsxXSApOwkJCS8qIFZFUlRFWF8/X1QgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB3KnRjMFswXVszXSApOwkJCS8qIFZFUlRFWF8/X1cgKi8KI2Vsc2UgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwoJICAgIGZsb2F0IHJodyA9IDEuMCAvIHRjMFswXVszXTsKCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCByaHcqdGMwWzBdWzBdICk7CQkvKiBWRVJURVhfP19TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgcmh3KnRjMFswXVsxXSApOwkJLyogVkVSVEVYXz9fVCAqLwoJICAgIExFMzJfT1VUX0ZMT0FUKCBwKyssIHcqdGMwWzBdWzNdICk7CQkJLyogVkVSVEVYXz9fVyAqLwkKI2VuZGlmIC8qICFNQUNINjRfUFJFTVVMVF9URVhDT09SRFMgKi8KCSB9IGVsc2UgewojZW5kaWYgLyogRE9fUFRFWCAqLwojaWZkZWYgTUFDSDY0X1BSRU1VTFRfVEVYQ09PUkRTCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyp0YzBbMF1bMF0gKTsJCQkvKiBWRVJURVhfP19TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyp0YzBbMF1bMV0gKTsJCQkvKiBWRVJURVhfP19UICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdyApOwkJCQkvKiBWRVJURVhfP19XICovCiNlbHNlIC8qICFNQUNINjRfUFJFTVVMVF9URVhDT09SRFMgKi8KCSAgICBMRTMyX09VVF9GTE9BVCggcCsrLCB0YzBbMF1bMF0gKTsJCQkvKiBWRVJURVhfP19TICovCgkgICAgTEUzMl9PVVRfRkxPQVQoIHArKywgdGMwWzBdWzFdICk7CQkJLyogVkVSVEVYXz9fVCAqLwoJICAgIExFMzJfT1VUX0ZMT0FUKCBwKyssIHcgKTsJCQkJLyogVkVSVEVYXz9fVyAqLwojZW5kaWYgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwojaWYgRE9fUFRFWAoJIH0KI2VuZGlmIC8qIERPX1BURVggKi8KCSBTVFJJREVfNEYodGMwLCB0YzBfc3RyaWRlKTsKI2Vsc2UgLyogIURPX1RFWDAgKi8KCSBwICs9IDM7CiNlbmRpZiAvKiAhRE9fVEVYMCAqLwoKI2lmIERPX1NQRUMKCSBVTkNMQU1QRURfRkxPQVRfVE9fVUJZVEUoKChHTHVieXRlICopcClbMF0sICBzcGVjWzBdWzJdKTsgCS8qIFZFUlRFWF8/X1NQRUNfQiAqLwoJIFVOQ0xBTVBFRF9GTE9BVF9UT19VQllURSgoKEdMdWJ5dGUgKilwKVsxXSwgIHNwZWNbMF1bMV0pOwkvKiBWRVJURVhfP19TUEVDX0cgKi8KCSBVTkNMQU1QRURfRkxPQVRfVE9fVUJZVEUoKChHTHVieXRlICopcClbMl0sICBzcGVjWzBdWzBdKTsJLyogVkVSVEVYXz9fU1BFQ19SICovCgoJIFNUUklERV80RihzcGVjLCBzcGVjX3N0cmlkZSk7CiNlbmRpZgojaWYgRE9fRk9HCgkgVU5DTEFNUEVEX0ZMT0FUX1RPX1VCWVRFKCgoR0x1Ynl0ZSAqKXApWzNdLCBmb2dbMF1bMF0pOyAgLyogVkVSVEVYXz9fU1BFQ19BICovCgkgLyoJICgoR0x1Ynl0ZSAqKXApWzNdID0gZm9nWzBdWzBdICogMjU1LjA7CSAqLwoJIFNUUklERV80Rihmb2csIGZvZ19zdHJpZGUpOwojZW5kaWYKCSBwKys7CgkgICAgCiNpZiBET19YWVpXCgkgaWYgKG1hc2tbaV0gPT0gMCkgewoJICAgIC8qIHVuY2xpcHBlZCAqLwoJICAgIExFMzJfT1VUKCBwKyssIFZJRVdQT1JUX1ooIGNvb3JkWzBdWzJdICkgKTsJLyogVkVSVEVYXz9fWiAqLwoJIH0gZWxzZSB7CiNlbmRpZgoJICAgIHArKzsKI2lmIERPX1hZWlcKCSB9CiNlbmRpZgoKI2lmIERPX1JHQkEKCSBVTkNMQU1QRURfRkxPQVRfVE9fVUJZVEUoKChHTHVieXRlICopcClbMF0sIGNvbFswXVsyXSk7CgkgVU5DTEFNUEVEX0ZMT0FUX1RPX1VCWVRFKCgoR0x1Ynl0ZSAqKXApWzFdLCBjb2xbMF1bMV0pOwoJIFVOQ0xBTVBFRF9GTE9BVF9UT19VQllURSgoKEdMdWJ5dGUgKilwKVsyXSwgY29sWzBdWzBdKTsKCSBVTkNMQU1QRURfRkxPQVRfVE9fVUJZVEUoKChHTHVieXRlICopcClbM10sIGNvbFswXVszXSk7CgkgcCsrOwoJIFNUUklERV80Rihjb2wsIGNvbF9zdHJpZGUpOwojZWxzZQoJIHArKzsKI2VuZGlmCgojaWYgRE9fWFlaVwoJIGlmIChtYXNrW2ldID09IDApIHsKCSAgICAvKiB1bmNsaXBwZWQgKi8KCSAgICBMRTMyX09VVCggcCwKCQkgICAgICAoVklFV1BPUlRfWCggY29vcmRbMF1bMF0gKSA8PCAxNikgfAkvKiBWRVJURVhfP19YICovCgkJICAgICAgKFZJRVdQT1JUX1koIGNvb3JkWzBdWzFdICkgJiAweGZmZmYpICk7CS8qIFZFUlRFWF8/X1kgKi8KCSAgICAKCSAgICBpZiAoTUFDSDY0X0RFQlVHICYgREVCVUdfVkVSQk9TRV9QUklNUykgewoJICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiVzOiB2ZXJ0ICVkOiAlLjJmICUuMmYgJS4yZiAleFxuIiwKCQkJX19GVU5DVElPTl9fLAoJCQlpLAoJCQkoTEUzMl9JTiggcCApID4+IDE2KS80LjAsCgkJCShMRTMyX0lOKCBwICkgJiAweGZmZmYpLzQuMCwKCQkJTEUzMl9JTiggcCAtIDIgKS82NTUzNi4wLAoJCQkqKEdMdWludCAqKShwIC0gMSkgKTsKCSAgICB9CgkgfQojZW5kaWYKI2lmIERPX1RFWDEgfHwgRE9fVEVYMCB8fCBET19YWVpXCgkgU1RSSURFXzRGKGNvb3JkLCBjb29yZF9zdHJpZGUpOwojZW5kaWYKCSAKCSBhc3NlcnQoIHAgKyAxIC0gKENBUkQzMiAqKXYgPT0gMTAgKTsKICAgICAgfQp9CgojaWYgRE9fWFlaVyAmJiBET19SR0JBCgpzdGF0aWMgR0xib29sZWFuIFRBRyhjaGVja190ZXhfc2l6ZXMpKCBHTGNvbnRleHQgKmN0eCApCnsKICAgTE9DQUxWQVJTCiAgIHN0cnVjdCB2ZXJ0ZXhfYnVmZmVyICpWQiA9ICZUTkxfQ09OVEVYVChjdHgpLT52YjsKCiAgIC8qIEZvcmNlICdtaXNzaW5nJyB0ZXhjb29yZHMgdG8gc29tZXRoaW5nIHZhbGlkLgogICAgKi8KICAgaWYgKERPX1RFWDEgJiYgVkItPlRleENvb3JkUHRyWzBdID09IDApCiAgICAgIFZCLT5UZXhDb29yZFB0clswXSA9IFZCLT5UZXhDb29yZFB0clsxXTsKCiAgIGlmIChET19QVEVYKQogICAgICByZXR1cm4gR0xfVFJVRTsKCiAgIC8qIE5vIGhhcmR3YXJlIHN1cHBvcnQgZm9yIHByb2plY3RpdmUgdGV4dHVyZS4gIENhbiBmYWtlIGl0IGZvcgogICAgKiBURVgwIG9ubHkuCiAgICAqLwogICBpZiAoKERPX1RFWDEgJiYgVkItPlRleENvb3JkUHRyW0dFVF9URVhTT1VSQ0UoMSldLT5zaXplID09IDQpKSB7CiAgICAgIFBURVhfRkFMTEJBQ0soKTsKICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogICB9CgogICBpZiAoRE9fVEVYMCAmJiBWQi0+VGV4Q29vcmRQdHJbR0VUX1RFWFNPVVJDRSgwKV0tPnNpemUgPT0gNCkgewogICAgICBpZiAoRE9fVEVYMSkgewoJIFBURVhfRkFMTEJBQ0soKTsKICAgICAgfQogICAgICByZXR1cm4gR0xfRkFMU0U7CiAgIH0KCiAgIHJldHVybiBHTF9UUlVFOwp9CgoKc3RhdGljIHZvaWQgVEFHKGludGVycCkoIEdMY29udGV4dCAqY3R4LAoJCQkgR0xmbG9hdCB0LAoJCQkgR0x1aW50IGVkc3QsIEdMdWludCBlb3V0LCBHTHVpbnQgZWluLAoJCQkgR0xib29sZWFuIGZvcmNlX2JvdW5kYXJ5ICkKewogICBMT0NBTFZBUlMKICAgc3RydWN0IHZlcnRleF9idWZmZXIgKlZCID0gJlROTF9DT05URVhUKGN0eCktPnZiOwogICBHTHVieXRlICpkZHZlcnRzID0gR0VUX1ZFUlRFWF9TVE9SRSgpOwogICBHTHVpbnQgc2l6ZSA9IEdFVF9WRVJURVhfU0laRSgpOwogICBjb25zdCBHTGZsb2F0ICpkc3RjbGlwID0gVkItPkNsaXBQdHItPmRhdGFbZWRzdF07CiAgIEdMZmxvYXQgdzsKICAgY29uc3QgR0xmbG9hdCAqcyA9IEdFVF9WSUVXUE9SVF9NQVQoKTsKCiAgIENBUkQzMiAqZHN0ID0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVkc3QgKiBzaXplKSk7CiAgIENBUkQzMiAqaW4gID0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVpbiAgKiBzaXplKSk7CiAgIENBUkQzMiAqb3V0ID0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVvdXQgKiBzaXplKSk7CgogICAodm9pZClzOwoKICAgdyA9IChkc3RjbGlwWzNdID09IDAuMEYpID8gMS4wIDogKDEuMCAvIGRzdGNsaXBbM10pOwoKI2lmIERPX1RFWDEKICAgewogICAgICBHTGZsb2F0IHRlbXA7CiNpZiBET19QVEVYCiAgICAgIEdMZmxvYXQgd291dCA9IFZCLT5OZGNQdHItPmRhdGFbZW91dF1bM107CiAgICAgIEdMZmxvYXQgd2luID0gVkItPk5kY1B0ci0+ZGF0YVtlaW5dWzNdOwogICAgICBHTGZsb2F0IHFvdXQgPSBMRTMyX0lOX0ZMT0FUKCBvdXQgKyAyICkgLyB3b3V0OwogICAgICBHTGZsb2F0IHFpbiA9IExFMzJfSU5fRkxPQVQoIGluICsgMiApIC8gd2luOwogICAgICBHTGZsb2F0IHFkc3QsIHJxZHN0OwoKICAgICAgSU5URVJQX0YoIHQsIHFkc3QsIHFvdXQsIHFpbiApOwogICAgICBycWRzdCA9IDEuMCAvIHFkc3Q7CiAgICAgIAogICAgICBJTlRFUlBfRiggdCwgdGVtcCwgTEUzMl9JTl9GTE9BVCggb3V0ICkgKiBxb3V0LCBMRTMyX0lOX0ZMT0FUKCBpbiApICogcWluICk7CiAgICAgIExFMzJfT1VUX0ZMT0FUKCBkc3QsIHRlbXAqcnFkc3QgKTsJCQkvKiBWRVJURVhfP19TRUNPTkRBUllfUyAqLwogICAgICBkc3QrKzsgb3V0Kys7IGluKys7CiAgICAgIAogICAgICBJTlRFUlBfRiggdCwgdGVtcCwgTEUzMl9JTl9GTE9BVCggb3V0ICkgKiBxb3V0LCBMRTMyX0lOX0ZMT0FUKCBpbiApICogcWluICk7CiAgICAgIExFMzJfT1VUX0ZMT0FUKCBkc3QsIHRlbXAqcnFkc3QgKTsJCQkvKiBWRVJURVhfP19TRUNPTkRBUllfVCAqLwogICAgICBkc3QrKzsgb3V0Kys7IGluKys7CiAgICAgIAogICAgICBMRTMyX09VVF9GTE9BVCggZHN0LCB3KnJxZHN0ICk7CQkJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9XICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKI2Vsc2UgLyogIURPX1BURVggKi8KI2lmZGVmIE1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUwogICAgICBHTGZsb2F0IHFvdXQgPSB3IC8gTEUzMl9JTl9GTE9BVCggb3V0ICsgMiApOwogICAgICBHTGZsb2F0IHFpbiA9IHcgLyBMRTMyX0lOX0ZMT0FUKCBpbiArIDIgKTsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSAqIHFvdXQsIExFMzJfSU5fRkxPQVQoIGluICkgKiBxaW4gKTsKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdGVtcCApOwkJCQkvKiBWRVJURVhfP19TRUNPTkRBUllfUyAqLwogICAgICBkc3QrKzsgb3V0Kys7IGluKys7CiAgICAgIAogICAgICBJTlRFUlBfRiggdCwgdGVtcCwgTEUzMl9JTl9GTE9BVCggb3V0ICkgKiBxb3V0LCBMRTMyX0lOX0ZMT0FUKCBpbiApICogcWluICk7CiAgICAgIExFMzJfT1VUX0ZMT0FUKCBkc3QsIHRlbXAgKTsJCQkJLyogVkVSVEVYXz9fU0VDT05EQVJZX1QgKi8KICAgICAgZHN0Kys7IG91dCsrOyBpbisrOwojZWxzZSAvKiAhTUFDSDY0X1BSRU1VTFRfVEVYQ09PUkRTICovCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSwgTEUzMl9JTl9GTE9BVCggaW4gKSApOwogICAgICBMRTMyX09VVF9GTE9BVCggZHN0LCB0ZW1wICk7CQkJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9TICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSwgTEUzMl9JTl9GTE9BVCggaW4gKSApOwogICAgICBMRTMyX09VVF9GTE9BVCggZHN0LCB0ZW1wICk7CQkJCS8qIFZFUlRFWF8/X1NFQ09OREFSWV9UICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKI2VuZGlmIC8qICFNQUNINjRfUFJFTVVMVF9URVhDT09SRFMgKi8KICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdyApOwkJCQkJLyogVkVSVEVYXz9fU0VDT05EQVJZX1cgKi8KICAgICAgZHN0Kys7IG91dCsrOyBpbisrOwojZW5kaWYgLyogIURPX1BURVggKi8KICAgfQojZWxzZSAvKiAhRE9fVEVYMSAqLwogICBkc3QgKz0gMzsgb3V0ICs9IDM7IGluICs9IDM7CiNlbmRpZiAvKiAhRE9fVEVYMSAqLwoKI2lmIERPX1RFWDAKICAgewogICAgICBHTGZsb2F0IHRlbXA7CiNpZiBET19QVEVYCiAgICAgIEdMZmxvYXQgd291dCA9IFZCLT5OZGNQdHItPmRhdGFbZW91dF1bM107CiAgICAgIEdMZmxvYXQgd2luID0gVkItPk5kY1B0ci0+ZGF0YVtlaW5dWzNdOwogICAgICBHTGZsb2F0IHFvdXQgPSBMRTMyX0lOX0ZMT0FUKCBvdXQgKyAyICkgLyB3b3V0OwogICAgICBHTGZsb2F0IHFpbiA9IExFMzJfSU5fRkxPQVQoIGluICsgMiApIC8gd2luOwogICAgICBHTGZsb2F0IHFkc3QsIHJxZHN0OwoKICAgICAgSU5URVJQX0YoIHQsIHFkc3QsIHFvdXQsIHFpbiApOwogICAgICBycWRzdCA9IDEuMCAvIHFkc3Q7CiAgICAgIAogICAgICBJTlRFUlBfRiggdCwgdGVtcCwgTEUzMl9JTl9GTE9BVCggb3V0ICkgKiBxb3V0LCBMRTMyX0lOX0ZMT0FUKCBpbiApICogcWluICk7CiAgICAgIExFMzJfT1VUX0ZMT0FUKCBkc3QsIHRlbXAqcnFkc3QgKTsJCQkvKiBWRVJURVhfP19TICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSAqIHFvdXQsIExFMzJfSU5fRkxPQVQoIGluICkgKiBxaW4gKTsKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdGVtcCpycWRzdCApOwkJCS8qIFZFUlRFWF8/X1QgKi8KICAgICAgZHN0Kys7IG91dCsrOyBpbisrOwogICAgICAKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdypycWRzdCApOwkJCQkvKiBWRVJURVhfP19XICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKI2Vsc2UgLyogIURPX1BURVggKi8KI2lmZGVmIE1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUwogICAgICBHTGZsb2F0IHFvdXQgPSB3IC8gTEUzMl9JTl9GTE9BVCggb3V0ICsgMiApOwogICAgICBHTGZsb2F0IHFpbiA9IHcgLyBMRTMyX0lOX0ZMT0FUKCBpbiArIDIgKTsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSAqIHFvdXQsIExFMzJfSU5fRkxPQVQoIGluICkgKiBxaW4gKTsKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdGVtcCApOwkJCQkvKiBWRVJURVhfP19TICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSAqIHFvdXQsIExFMzJfSU5fRkxPQVQoIGluICkgKiBxaW4gKTsKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdGVtcCApOwkJCQkvKiBWRVJURVhfP19UICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKI2Vsc2UgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwogICAgICBJTlRFUlBfRiggdCwgdGVtcCwgTEUzMl9JTl9GTE9BVCggb3V0ICksIExFMzJfSU5fRkxPQVQoIGluICkgKTsKICAgICAgTEUzMl9PVVRfRkxPQVQoIGRzdCwgdGVtcCApOwkJCQkvKiBWRVJURVhfP19TICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKICAgICAgCiAgICAgIElOVEVSUF9GKCB0LCB0ZW1wLCBMRTMyX0lOX0ZMT0FUKCBvdXQgKSwgTEUzMl9JTl9GTE9BVCggaW4gKSApOwogICAgICBMRTMyX09VVF9GTE9BVCggZHN0LCB0ZW1wICk7CQkJCS8qIFZFUlRFWF8/X1QgKi8KICAgICAgZHN0Kys7IG91dCsrOyBpbisrOwojZW5kaWYgLyogIU1BQ0g2NF9QUkVNVUxUX1RFWENPT1JEUyAqLwogICAgICBMRTMyX09VVF9GTE9BVCggZHN0LCB3ICk7CQkJCQkvKiBWRVJURVhfP19XICovCiAgICAgIGRzdCsrOyBvdXQrKzsgaW4rKzsKI2VuZGlmIC8qICFET19QVEVYICovCiAgIH0KI2Vsc2UgLyogIURPX1RFWDAgKi8KICAgZHN0ICs9IDM7IG91dCArPSAzOyBpbiArPSAzOwojZW5kaWYgLyogIURPX1RFWDAgKi8KICAgCiNpZiBET19TUEVDCiAgIElOVEVSUF9VQiggdCwgKChHTHVieXRlICopZHN0KVswXSwgKChHTHVieXRlICopb3V0KVswXSwgKChHTHVieXRlICopaW4pWzBdICk7CS8qIFZFUlRFWF8/X1NQRUNfQiAqLwogICBJTlRFUlBfVUIoIHQsICgoR0x1Ynl0ZSAqKWRzdClbMV0sICgoR0x1Ynl0ZSAqKW91dClbMV0sICgoR0x1Ynl0ZSAqKWluKVsxXSApOwkvKiBWRVJURVhfP19TUEVDX0cgKi8KICAgSU5URVJQX1VCKCB0LCAoKEdMdWJ5dGUgKilkc3QpWzJdLCAoKEdMdWJ5dGUgKilvdXQpWzJdLCAoKEdMdWJ5dGUgKilpbilbMl0gKTsJLyogVkVSVEVYXz9fU1BFQ19SICovCiNlbmRpZgogICAKI2lmIERPX0ZPRwogICBJTlRFUlBfVUIoIHQsICgoR0x1Ynl0ZSAqKWRzdClbM10sICgoR0x1Ynl0ZSAqKW91dClbM10sICgoR0x1Ynl0ZSAqKWluKVszXSApOwkvKiBWRVJURVhfP19TUEVDX0EgKi8KI2VuZGlmIC8qIERPX0ZPRyAqLwoKICAgZHN0Kys7IG91dCsrOyBpbisrOwoKICAgTEUzMl9PVVQoIGRzdCwgVklFV1BPUlRfWiggZHN0Y2xpcFsyXSAqIHcgKSApOwkJLyogVkVSVEVYXz9fWiAqLwogICBkc3QrKzsgb3V0Kys7IGluKys7CiAgCiAgIElOVEVSUF9VQiggdCwgKChHTHVieXRlICopZHN0KVswXSwgKChHTHVieXRlICopb3V0KVswXSwgKChHTHVieXRlICopaW4pWzBdICk7CS8qIFZFUlRFWF8/X0IgKi8KICAgSU5URVJQX1VCKCB0LCAoKEdMdWJ5dGUgKilkc3QpWzFdLCAoKEdMdWJ5dGUgKilvdXQpWzFdLCAoKEdMdWJ5dGUgKilpbilbMV0gKTsJLyogVkVSVEVYXz9fRyAqLwogICBJTlRFUlBfVUIoIHQsICgoR0x1Ynl0ZSAqKWRzdClbMl0sICgoR0x1Ynl0ZSAqKW91dClbMl0sICgoR0x1Ynl0ZSAqKWluKVsyXSApOwkvKiBWRVJURVhfP19SICovCiAgIElOVEVSUF9VQiggdCwgKChHTHVieXRlICopZHN0KVszXSwgKChHTHVieXRlICopb3V0KVszXSwgKChHTHVieXRlICopaW4pWzNdICk7CS8qIFZFUlRFWF8/X0EgKi8KICAgZHN0Kys7IC8qb3V0Kys7IGluKys7Ki8KCiAgIExFMzJfT1VUKCBkc3QsCgkgICAgIChWSUVXUE9SVF9YKCBkc3RjbGlwWzBdICogdyApIDw8IDE2KSB8CQkvKiBWRVJURVhfP19YICovCgkgICAgIChWSUVXUE9SVF9ZKCBkc3RjbGlwWzFdICogdyApICYgMHhmZmZmKSApOwkJLyogVkVSVEVYXz9fWSAqLwoKICAgYXNzZXJ0KCBkc3QgKyAxIC0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVkc3QgKiBzaXplKSkgPT0gMTAgKTsKICAgYXNzZXJ0KCBpbiAgKyAyIC0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVpbiAgKiBzaXplKSkgPT0gMTAgKTsKICAgYXNzZXJ0KCBvdXQgKyAyIC0gKENBUkQzMiAqKShkZHZlcnRzICsgKGVvdXQgKiBzaXplKSkgPT0gMTAgKTsKCiAgIGlmIChNQUNINjRfREVCVUcgJiBERUJVR19WRVJCT1NFX1BSSU1TKSB7CiAgICAgIGZwcmludGYoIHN0ZGVyciwgIiVzOiBkc3QgdmVydDogJS4yZiAlLjJmICUuMmYgJXhcbiIsCgkgICAgICAgX19GVU5DVElPTl9fLAoJICAgICAgIChHTHNob3J0KShMRTMyX0lOKCBkc3QgKSA+PiAxNikvNC4wLAoJICAgICAgIChHTHNob3J0KShMRTMyX0lOKCBkc3QgKSAmIDB4ZmZmZikvNC4wLAoJICAgICAgIExFMzJfSU4oIGRzdCAtIDIgKS82NTUzNi4wLAoJICAgICAgICooR0x1aW50ICopKGRzdCAtIDEpICk7CiAgIH0KfQoKI2VuZGlmIC8qIERPX1JHQkEgJiYgRE9fWFlaVyAqLwoKCnN0YXRpYyB2b2lkIFRBRyhjb3B5X3B2KSggR0xjb250ZXh0ICpjdHgsIEdMdWludCBlZHN0LCBHTHVpbnQgZXNyYyApCnsKI2lmIERPX1NQRUMgfHwgRE9fRk9HIHx8IERPX1JHQkEKICAgTE9DQUxWQVJTICAgCiAgIEdMdWJ5dGUgKnZlcnRzID0gR0VUX1ZFUlRFWF9TVE9SRSgpOwogICBHTHVpbnQgc2l6ZSA9IEdFVF9WRVJURVhfU0laRSgpOwogICBHTHVpbnQgKmRzdCA9IChHTHVpbnQgKikodmVydHMgKyAoZWRzdCAqIHNpemUpKTsKICAgR0x1aW50ICpzcmMgPSAoR0x1aW50ICopKHZlcnRzICsgKGVzcmMgKiBzaXplKSk7CiNlbmRpZgoKI2lmIERPX1NQRUMgfHwgRE9fRk9HCiAgIGRzdFs2XSA9IHNyY1s2XTsJCQkvKiBWRVJURVhfP19TUEVDX0FSR0IgKi8KI2VuZGlmCgojaWYgRE9fUkdCQQogICBkc3RbOF0gPSBzcmNbOF07CQkJLyogVkVSVEVYXz9fQVJHQiAqLwojZW5kaWYKfQoKc3RhdGljIHZvaWQgVEFHKGluaXQpKCB2b2lkICkKewogICBzZXR1cF90YWJbSU5EXS5lbWl0ID0gVEFHKGVtaXQpOwoKI2lmIERPX1hZWlcgJiYgRE9fUkdCQQogICBzZXR1cF90YWJbSU5EXS5jaGVja190ZXhfc2l6ZXMgPSBUQUcoY2hlY2tfdGV4X3NpemVzKTsKICAgc2V0dXBfdGFiW0lORF0uaW50ZXJwID0gVEFHKGludGVycCk7CiNlbmRpZgoKICAgc2V0dXBfdGFiW0lORF0uY29weV9wdiA9IFRBRyhjb3B5X3B2KTsKCiNpZiBET19URVgxCiAgIHNldHVwX3RhYltJTkRdLnZlcnRleF9mb3JtYXQgPSBURVgxX1ZFUlRFWF9GT1JNQVQ7CiAgIHNldHVwX3RhYltJTkRdLnZlcnRleF9zaXplID0gMTA7CiNlbGlmIERPX1RFWDAKICAgc2V0dXBfdGFiW0lORF0udmVydGV4X2Zvcm1hdCA9IFRFWDBfVkVSVEVYX0ZPUk1BVDsKICAgc2V0dXBfdGFiW0lORF0udmVydGV4X3NpemUgPSA3OwojZWxpZiBET19TUEVDIHx8IERPX0ZPRwogICBzZXR1cF90YWJbSU5EXS52ZXJ0ZXhfZm9ybWF0ID0gTk9URVhfVkVSVEVYX0ZPUk1BVDsKICAgc2V0dXBfdGFiW0lORF0udmVydGV4X3NpemUgPSA0OwojZWxzZQogICBzZXR1cF90YWJbSU5EXS52ZXJ0ZXhfZm9ybWF0ID0gVElOWV9WRVJURVhfRk9STUFUOwogICBzZXR1cF90YWJbSU5EXS52ZXJ0ZXhfc2l6ZSA9IDM7CiNlbmRpZgoKfQoKCiN1bmRlZiBJTkQKI3VuZGVmIFRBRwo=