LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqLwoKLyoJQXQgdGhlIG1vbWVudCwgdGhlc2UgYXJlIG9ubHkgZW1wdHkgc3R1YnMuCiAqLwoKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAid2luZG93cy5oIgojaW5jbHVkZSAib2xlLmgiCiNpbmNsdWRlICJvcHRpb25zLmgiCiNpbmNsdWRlICJ3aW5ubHMuaCIKI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiNpbmNsdWRlICJkZWJ1Zy5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBHZXRVc2VyRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMSkKICovCkRXT1JEIEdldFVzZXJEZWZhdWx0TENJRCgpCnsKLyogRGVmYXVsdCBzb3J0aW5nLCBuZXV0cmFsIHN1Ymxhbmd1YWdlICovCiAgICBzd2l0Y2goT3B0aW9ucy5sYW5ndWFnZSkKICAgIHsKICAgIGNhc2UgTEFOR19FbjogcmV0dXJuIDB4MDk7CiAgICBjYXNlIExBTkdfRXM6IHJldHVybiAweDA3OyAvKiBKdXN0IGEgR3Vlc3MgOi0pICovCiAgICBjYXNlIExBTkdfRGU6IHJldHVybiAweDA3OwogICAgY2FzZSBMQU5HX05vOiByZXR1cm4gMHgxNDsKICAgIGNhc2UgTEFOR19GcjoKICAgIGNhc2UgTEFOR19GaToKICAgIGNhc2UgTEFOR19EYToKICAgIGNhc2UgTEFOR19DejoKICAgIGNhc2UgTEFOR19FbzoKICAgIGNhc2UgTEFOR19JdDoKICAgIGNhc2UgTEFOR19LbzoKICAgIGRlZmF1bHQ6CglyZXR1cm4gMDsgIC8qIE5ldXRyYWwgbGFuZ3VhZ2UgKi8KICAgIH0KfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMikKICovCkRXT1JEIEdldFN5c3RlbURlZmF1bHRMQ0lEKCkKewoJcmV0dXJuIEdldFVzZXJEZWZhdWx0TENJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRVc2VyRGVmYXVsdExhbmdJRCAgICAgICAoT0xFMk5MUy4zKQogKi8KV09SRCBHZXRVc2VyRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiAoV09SRClHZXRVc2VyRGVmYXVsdExDSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCAgICAgKE9MRTJOTFMuNCkKICovCldPUkQgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiBHZXRVc2VyRGVmYXVsdExhbmdJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRMb2NhbGVJbmZvQSAgICAgICAgICAgICAoT0xFMk5MUy41KQogKiBJcyB0aGUgbGFzdCBwYXJhbWV0ZXIgcmVhbGx5IFdPUkQgZm9yIFdpbjE2PwogKi8KaW50IEdldExvY2FsZUluZm9BKERXT1JEIGxjaWQsRFdPUkQgTENUeXBlLExQU1RSIGJ1ZixXT1JEIGxlbikKewoJY2hhciAqcmV0U3RyaW5nOwogICAgaW50IHJldExlbjsKICAgIGRwcmludGZfb2xlKHN0ZGRlYiwiR2V0TG9jYWxlSW5mb0EoJThsWCwlOGxYLCVwLCU0WClcbiIsCgkJCWxjaWQsTENUeXBlLGJ1ZixsZW4pOwoJLyogV2luZSBpcyBzdXBwb3J0aW5nIG9ubHkgdGhlIGRlZmF1bHQgbG9jYWxlICovCglpZihsY2lkIT1HZXRVc2VyRGVmYXVsdExDSUQoKSkKCXsKCQlkcHJpbnRmX29sZShzdGRuaW1wLCJHZXRMb2NhbGVJbmZvQTogVW5rbm93biBsb2NhbGVcbiIpOwoJCXJldHVybiAwOwoJfQoJLyogQXMgYW4gb3B0aW9uLCB3ZSBjb3VsZCBvYnRhaW4gdGhlIHZhbHVlIGZyb20gd2luLmluaS4KCSAgIFRoaXMgd291bGQgbm90IG1hdGNoIHRoZSBXaW5lIGNvbXBpbGUtdGltZSBvcHRpb24uCgkgICBBbHNvLCBub3QgYWxsIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUgZnJvbSB3aW4uaW5pICovCglyZXRTdHJpbmc9MDsKCXJldExlbj0wOwoJLyogSWYgd2UgYXJlIHRocm91Z2ggYWxsIG9mIHRoaXMsIHJldExlbiBzaG91bGQgbm90IGJlIHplcm8gYW55bW9yZS4KCSAgIElmIGl0IGlzLCB0aGUgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCAqLwojZGVmaW5lIExPQ1ZBTCh0eXBlLHZhbHVlKQlpZih0eXBlPT1MQ1R5cGUpCQkJXAoJCQkJCQkJCXtyZXRMZW49c3RybGVuKHZhbHVlKSsxO1wKCQkJCQkJCQkgcmV0U3RyaW5nPXZhbHVlOyAgICAgICBcCgkJCQkJCQkJfQojZGVmaW5lIFVOU1VQUE9SVEVEKHR5cGUpICAgaWYodHlwZT09bGNpZClyZXRTdHJpbmc9I3R5cGU7CgovKiBJIHJlYWxseSB3aXNoIEkgd291bGQga25vdyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyAqLwpVTlNVUFBPUlRFRChMT0NBTEVfSUxBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0xBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0VOR0xBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRUxBTkdOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNPVU5UUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9TQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NFTkdDT1VOVFJZKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkNUUllOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRUNUUllOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NMSVNUKQpVTlNVUFBPUlRFRChMT0NBTEVfSU1FQVNVUkUpClVOU1VQUE9SVEVEKExPQ0FMRV9TREVDSU1BTCkKVU5TVVBQT1JURUQoTE9DQUxFX1NUSE9VU0FORCkKVU5TVVBQT1JURUQoTE9DQUxFX1NHUk9VUElORykKVU5TVVBQT1JURUQoTE9DQUxFX0lESUdJVFMpClVOU1VQUE9SVEVEKExPQ0FMRV9JTFpFUk8pClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHTlVNQkVSKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRURJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX1NDVVJSRU5DWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NJTlRMU1lNQk9MKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTkRFQ0lNQUxTRVApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OR1JPVVBJTkcpClVOU1VQUE9SVEVEKExPQ0FMRV9JQ1VSUkRJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX0lDVVJSRU5DWSkKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdDVVJSKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TVElNRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NTSE9SVERBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TTE9OR0RBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TVElNRUZPUk1BVCkKVU5TVVBQT1JURUQoTE9DQUxFX0lEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfSUxEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfSVRJTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9JVElNRU1BUktQT1NOKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNFTlRVUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9JVExaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfSURBWUxaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfSU1PTkxaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfUzExNTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TMjM1OSkKVU5TVVBQT1JURUQoTE9DQUxFX0lDQUxFTkRBUlRZUEUpClVOU1VQUE9SVEVEKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKVU5TVVBQT1JURUQoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKVU5TVVBQT1JURUQoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU4KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTApClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQpVTlNVUFBPUlRFRChMT0NBTEVfU05FR0FUSVZFU0lHTikKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTSUdOUE9TTikKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdTSUdOUE9TTikKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCgovKiBOb3csIHRoZSBsYW5ndWFnZSBzcGVjaWZpYyBkZWZpbml0aW9ucy4gVGhleSBkb24ndCBoYXZlIHRvIGJlCiAgIGNvbXBsZXRlICovCiAgICBzd2l0Y2goT3B0aW9ucy5sYW5ndWFnZSkKICAgIHsKICAgIGNhc2UgTEFOR19EZToKLyogVGhpcyBkZWZpbml0aW9ucyBhcHBseSB0byBHZXJtYW55IG9ubHkuIFVzZXJzIGluIEF1c3RyaWEgCiAgIG9yIFN3aXR6ZXJsYW5kIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IHRoZW0gKi8KTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJHZXJtYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGV1IikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkRldXRzY2giKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRGV1dHNjaGxhbmQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRGUiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGV1dHNjaGxhbmQiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJETSIpCi8qCkxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi8qCkxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qCkxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCiovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lMREFURSkKKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQpMT0NWQUwoTE9DQUxFX1MxMTU5KQpMT0NWQUwoTE9DQUxFX1MyMzU5KQpMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCkxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKQpMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCiovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiRGllbnN0YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWl0dHdvY2giKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJGcmVpdGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNvbm5hYmVuZCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJTb25udGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIkRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk1pIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1haSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQXVndXN0IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGV6IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KICAgIGJyZWFrOyAgLyogTEFORyhEZSkgKi8KCiAgICBjYXNlIExBTkdfRGE6Ci8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikgKi8KTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRhbnNrIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkRhbmlzaCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkYW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGFuc2siKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRhbm1hcmsiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEZW5tYXJrIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRhIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRhbm1hcmsiKQovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKSAqLwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpCi8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCi8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi8qIExPQ1ZBTChMT0NBTEVfUzExNTkpICovCi8qIExPQ1ZBTChMT0NBTEVfUzIzNTkpICovCi8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCi8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1hbmRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUaXJzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUb3JzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM+HJkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU/huZGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnRzIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW5pIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlY2VtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCiAgICBicmVhazsgLyogTEFORyhEYSkgKi8KCiAgICBjYXNlIExBTkdfRW86Ci8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikgSVNPIG51bWVyaWNhbCBJRCBmb3IgbGFuZ3VhZ2UgVE9ETyAqLwpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwZXJhbnRvIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkVzcGVyYW50byIpCi8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZXUiKSAqLwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwZXJhbnRvIikKLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSBub3Qgb2ZmaWNpYWwgaW4gYW55IG9uZSBjb3VudHJ5ICovCi8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRldXRzY2hsYW5kIikgKi8KLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiR2VybWFueSIpICovCi8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJEZSIpICovCi8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEZXV0c2NobGFuZCIpICovCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpIElTTyBJRCBvZiBsYW5nIFRPRE8gKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikgKi8KTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLDMpIC8qIGlzIHRoaXMgcmlnaHQ/IFRPRE8gKi8KTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwzKSAvKiBpcyB0aGlzIHJpZ2h0PyBUT0RPICovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJOTEciKSAvKiBhY2NvdW50aW5nIGN1cnJlbmN5IG9mIFVFQSAqLwovKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCi8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkubW0uZGQiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWVya3JlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwivGH9ZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic2FiYXRvIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRpbWFu5m8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwivGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhcm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1ham8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYf1ndXN0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJybyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3RvYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImH9ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJva3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCiAgICBicmVhazsgIC8qIExBTkcoRW8pICovCiAgICAKICAgIGNhc2UgTEFOR19JdDoKTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiSXRhbGlhbm8iKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiSXRhbGlhbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJpdGEiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiSXRhbGlhbm8iKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzOSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkl0YWxpYSIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkl0YWx5IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkl0IikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkl0YWxpYSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzOSIpCi8qIER1bm5vCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkKTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkKKi8KTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQovKgpMT0NWQUwoTE9DQUxFX1NHUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCklzIHRoaXMgIjAxMjM0NTY3ODkiID8/CkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkxpdC4iKQovKgpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKQpMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQovKgpMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKgpMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKQoqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTERBVEUpCiovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpCiovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQpMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykKTE9DVkFMKExPQ0FMRV9TMTE1OSkKTE9DVkFMKExPQ0FMRV9TMjM1OSkKTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKQpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQpMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKQoqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTHVuZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJNYXJ0ZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJNZXJjb2xlZGknIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkdpb3ZlZGknIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlZlbmVyZGknIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNhYmF0byIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJEb21lbmljYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJMdSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJNYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJHaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJWZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJEbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkdlbm5haW8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJicmFpbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnpvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWxlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFnZ2lvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiR2l1Z25vIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiTHVnbGlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQWdvc3RvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2V0dGVtYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk90dG9icmUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1icmUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGljZW1icmUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiR2VuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiR2l1IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiTHVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQWdvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2V0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk90dCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGljIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KICAgIGJyZWFrOyAgLyogTEFORyhJdCkgKi8KCgovKkluc2VydCBvdGhlciBsYW5ndWFnZXMgaGVyZSovCgogICAgZGVmYXVsdDoKCWJyZWFrOwogICAgfSAgLyogc3dpdGNoICovCgoJaWYoIXJldExlbikKCXsKCQlpZighcmV0U3RyaW5nKWZwcmludGYoc3RkZXJyLCJVbmtvd24gTEMgdHlwZSAlbFhcbiIsTENUeXBlKTsKCQllbHNlIGZwcmludGYoc3RkZXJyLCInJXMnIG5vdCBzdXBwb3J0ZWQgZm9yIHlvdXIgbGFuZ3VhZ2UuXG4iLAoJCQlyZXRTdHJpbmcpOwoJCXJldHVybiAwOwoJfQoKCWlmKHJldExlbj5sZW4pcmV0TGVuPWxlbjsKCWxzdHJjcHluMzJBKGJ1ZixyZXRTdHJpbmcsbGVuKTsKCXJldHVybiByZXRMZW47Cn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIENvbXBhcmVTdHJpbmdBICAgICAgIChPTEUyTkxTLjgpCiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgbG9jYWxlLCBhbmQgdHJ1c3RzIGluIGxpYmMKICovCmludCBDb21wYXJlU3RyaW5nQShEV09SRCBsY2lkLCBEV09SRCBmZHdTdHlsZSwgCgljaGFyICpzMSwgaW50IGwxLCBjaGFyICpzMixpbnQgbDIpCnsKCWludCBsZW4scmV0OwoJaWYoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRU5PTlNQQUNFKQoJewoJCWZwcmludGYoc3RkbmltcCwgIkNvbXBhcmVTdHJpbmdBOiBJR05PUkVOT05TUEFDRSBub3Qgc3VwcHJ0ZWRcbiIpOwoJfQoJaWYoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRVNZTUJPTFMpCgkJZnByaW50ZihzdGRuaW1wLCAiQ29tcGFyZVN0cmluZ0E6IElHTk9SRVNZTUJPTFMgbm90IHN1cHBvcnRlZFxuIik7CgkvKiBJcyBzdHJjbXAgZGVmYXVsdGluZyB0byBzdHJpbmcgc29ydCBvciB0byB3b3JkIHNvcnQ/PyAqLwoJLyogRklYTUU6IEhhbmRsZSBOT1JNX1NUUklOR1NPUlQgKi8KCWwxID0gKGwxPT0tMSk/c3RybGVuKHMxKTpsMTsKCWwyID0gKGwyPT0tMSk/c3RybGVuKHMyKTpsMjsKCWxlbiA9IGwxPGwyID8gbDE6bDI7CglyZXQgPSAoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRUNBU0UpID8KCQlsc3RybmNtcGkzMkEoczEsczIsbGVuKQk6IGxzdHJuY21wMzJBKHMxLHMyLGxlbik7CgkvKiBub3QgZXF1YWwsIHJldHVybiAxIG9yIDMgKi8KCWlmKHJldCE9MClyZXR1cm4gcmV0KzI7CgkvKiBzYW1lIGxlbiwgcmV0dXJuIDIgKi8KCWlmKGwxPT1sMilyZXR1cm4gMjsKCS8qIHRoZSBsb25nZXIgb25lIGlzIGxleGljYWxseSBncmVhdGVyICovCglyZXR1cm4gKGwxPGwyKT8gMSA6IDM7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgU2V0TG9jYWxJbmZvQSAgICAgICAoS0VSTkVMMzIuNDk5KQogKi8KQk9PTCBTZXRMb2NhbGVJbmZvQShEV09SRCBsY2lkLCBEV09SRCBsY3R5cGUsIExQQ1NUUiBkYXRhKSB7CglmcHJpbnRmKHN0ZG5pbXAsIlNldExvY2FsZUluZm9BKCVsZCwlbGQsJXMpXG4iLGxjaWQsbGN0eXBlLGRhdGEpOwoJcmV0dXJuIFRSVUU7Cn0K