LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqLwoKLyoJQXQgdGhlIG1vbWVudCwgdGhlc2UgYXJlIG9ubHkgZW1wdHkgc3R1YnMuCiAqLwoKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSAid2luZG93cy5oIgojaW5jbHVkZSAib2xlLmgiCiNpbmNsdWRlICJvcHRpb25zLmgiCiNpbmNsdWRlICJ3aW5ubHMuaCIKI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiNpbmNsdWRlICJkZWJ1Zy5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBHZXRVc2VyRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMSkKICovCkRXT1JEIEdldFVzZXJEZWZhdWx0TENJRCgpCnsKLyogRGVmYXVsdCBzb3J0aW5nLCBuZXV0cmFsIHN1Ymxhbmd1YWdlICovCiAgICBzd2l0Y2goT3B0aW9ucy5sYW5ndWFnZSkKICAgIHsKICAgIGNhc2UgTEFOR19FbjogcmV0dXJuIDB4MDk7CiAgICBjYXNlIExBTkdfRXM6IHJldHVybiAweDBhOwogICAgY2FzZSBMQU5HX0RlOiByZXR1cm4gMHgwNzsKICAgIGNhc2UgTEFOR19ObzogcmV0dXJuIDB4MTQ7CiAgICBjYXNlIExBTkdfRnI6IHJldHVybiAweDBjOwogICAgY2FzZSBMQU5HX0ZpOiByZXR1cm4gMHgwYjsKICAgIGNhc2UgTEFOR19EYTogcmV0dXJuIDB4MDY7CiAgICBjYXNlIExBTkdfQ3o6IHJldHVybiAweDA1OwogICAgY2FzZSBMQU5HX0VvOiByZXR1cm4gMHgyNTsgLyogbm90IG9mZmljaWFsICovCiAgICBjYXNlIExBTkdfSXQ6IHJldHVybiAweDEwOwogICAgY2FzZSBMQU5HX0tvOiByZXR1cm4gMHgxMjsKICAgIGRlZmF1bHQ6CglyZXR1cm4gMDsgIC8qIE5ldXRyYWwgbGFuZ3VhZ2UgKi8KICAgIH0KfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMikKICovCkRXT1JEIEdldFN5c3RlbURlZmF1bHRMQ0lEKCkKewoJcmV0dXJuIEdldFVzZXJEZWZhdWx0TENJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRVc2VyRGVmYXVsdExhbmdJRCAgICAgICAoT0xFMk5MUy4zKQogKi8KV09SRCBHZXRVc2VyRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiAoV09SRClHZXRVc2VyRGVmYXVsdExDSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCAgICAgKE9MRTJOTFMuNCkKICovCldPUkQgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiBHZXRVc2VyRGVmYXVsdExhbmdJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRMb2NhbGVJbmZvQSAgICAgICAgICAgICAoT0xFMk5MUy41KQogKiBJcyB0aGUgbGFzdCBwYXJhbWV0ZXIgcmVhbGx5IFdPUkQgZm9yIFdpbjE2PwogKi8KaW50IEdldExvY2FsZUluZm9BKERXT1JEIGxjaWQsRFdPUkQgTENUeXBlLExQU1RSIGJ1ZixXT1JEIGxlbikKewoJY2hhciAqcmV0U3RyaW5nOwogICAgaW50IHJldExlbjsKICAgIGRwcmludGZfb2xlKHN0ZGRlYiwiR2V0TG9jYWxlSW5mb0EoJThsWCwlOGxYLCVwLCU0WClcbiIsCgkJCWxjaWQsTENUeXBlLGJ1ZixsZW4pOwoJLyogV2luZSBpcyBzdXBwb3J0aW5nIG9ubHkgdGhlIGRlZmF1bHQgbG9jYWxlICovCglpZihsY2lkIT1HZXRVc2VyRGVmYXVsdExDSUQoKSkKCXsKCQlkcHJpbnRmX29sZShzdGRuaW1wLCJHZXRMb2NhbGVJbmZvQTogVW5rbm93biBsb2NhbGVcbiIpOwoJCXJldHVybiAwOwoJfQoJLyogQXMgYW4gb3B0aW9uLCB3ZSBjb3VsZCBvYnRhaW4gdGhlIHZhbHVlIGZyb20gd2luLmluaS4KCSAgIFRoaXMgd291bGQgbm90IG1hdGNoIHRoZSBXaW5lIGNvbXBpbGUtdGltZSBvcHRpb24uCgkgICBBbHNvLCBub3QgYWxsIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUgZnJvbSB3aW4uaW5pICovCglyZXRTdHJpbmc9MDsKCXJldExlbj0wOwoJLyogSWYgd2UgYXJlIHRocm91Z2ggYWxsIG9mIHRoaXMsIHJldExlbiBzaG91bGQgbm90IGJlIHplcm8gYW55bW9yZS4KCSAgIElmIGl0IGlzLCB0aGUgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCAqLwojZGVmaW5lIExPQ1ZBTCh0eXBlLHZhbHVlKQlpZih0eXBlPT1MQ1R5cGUpCQkJXAoJCQkJCQkJCXtyZXRMZW49c3RybGVuKHZhbHVlKSsxO1wKCQkJCQkJCQkgcmV0U3RyaW5nPXZhbHVlOyAgICAgICBcCgkJCQkJCQkJfQojZGVmaW5lIFVOU1VQUE9SVEVEKHR5cGUpICAgaWYodHlwZT09bGNpZClyZXRTdHJpbmc9I3R5cGU7CgovKiBJIHJlYWxseSB3aXNoIEkgd291bGQga25vdyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyAqLwpVTlNVUFBPUlRFRChMT0NBTEVfSUxBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0xBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0VOR0xBTkdVQUdFKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRUxBTkdOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNPVU5UUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9TQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NFTkdDT1VOVFJZKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVkNUUllOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRUNUUllOQU1FKQpVTlNVUFBPUlRFRChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSkKVU5TVVBQT1JURUQoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpClVOU1VQUE9SVEVEKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NMSVNUKQpVTlNVUFBPUlRFRChMT0NBTEVfSU1FQVNVUkUpClVOU1VQUE9SVEVEKExPQ0FMRV9TREVDSU1BTCkKVU5TVVBQT1JURUQoTE9DQUxFX1NUSE9VU0FORCkKVU5TVVBQT1JURUQoTE9DQUxFX1NHUk9VUElORykKVU5TVVBQT1JURUQoTE9DQUxFX0lESUdJVFMpClVOU1VQUE9SVEVEKExPQ0FMRV9JTFpFUk8pClVOU1VQUE9SVEVEKExPQ0FMRV9JTkVHTlVNQkVSKQpVTlNVUFBPUlRFRChMT0NBTEVfU05BVElWRURJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX1NDVVJSRU5DWSkKVU5TVVBQT1JURUQoTE9DQUxFX1NJTlRMU1lNQk9MKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTkRFQ0lNQUxTRVApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OR1JPVVBJTkcpClVOU1VQUE9SVEVEKExPQ0FMRV9JQ1VSUkRJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKVU5TVVBQT1JURUQoTE9DQUxFX0lDVVJSRU5DWSkKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdDVVJSKQpVTlNVUFBPUlRFRChMT0NBTEVfU0RBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TVElNRSkKVU5TVVBQT1JURUQoTE9DQUxFX1NTSE9SVERBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TTE9OR0RBVEUpClVOU1VQUE9SVEVEKExPQ0FMRV9TVElNRUZPUk1BVCkKVU5TVVBQT1JURUQoTE9DQUxFX0lEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfSUxEQVRFKQpVTlNVUFBPUlRFRChMT0NBTEVfSVRJTUUpClVOU1VQUE9SVEVEKExPQ0FMRV9JVElNRU1BUktQT1NOKQpVTlNVUFBPUlRFRChMT0NBTEVfSUNFTlRVUlkpClVOU1VQUE9SVEVEKExPQ0FMRV9JVExaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfSURBWUxaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfSU1PTkxaRVJPKQpVTlNVUFBPUlRFRChMT0NBTEVfUzExNTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TMjM1OSkKVU5TVVBQT1JURUQoTE9DQUxFX0lDQUxFTkRBUlRZUEUpClVOU1VQUE9SVEVEKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKVU5TVVBQT1JURUQoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKVU5TVVBQT1JURUQoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TREFZTkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NNT05USE5BTUU4KQpVTlNVUFBPUlRFRChMT0NBTEVfU01PTlRITkFNRTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTApClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TTU9OVEhOQU1FMTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyKQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCkKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNykKVU5TVVBQT1JURUQoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4KQpVTlNVUFBPUlRFRChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTApClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIpClVOU1VQUE9SVEVEKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMpClVOU1VQUE9SVEVEKExPQ0FMRV9TUE9TSVRJVkVTSUdOKQpVTlNVUFBPUlRFRChMT0NBTEVfU05FR0FUSVZFU0lHTikKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTSUdOUE9TTikKVU5TVVBQT1JURUQoTE9DQUxFX0lORUdTSUdOUE9TTikKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKVU5TVVBQT1JURUQoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQpVTlNVUFBPUlRFRChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCgovKiBOb3csIHRoZSBsYW5ndWFnZSBzcGVjaWZpYyBkZWZpbml0aW9ucy4gVGhleSBkb24ndCBoYXZlIHRvIGJlCiAgIGNvbXBsZXRlICovCiAgICBzd2l0Y2goT3B0aW9ucy5sYW5ndWFnZSkKICAgIHsKICAgIGNhc2UgTEFOR19EZToKLyogVGhpcyBkZWZpbml0aW9ucyBhcHBseSB0byBHZXJtYW55IG9ubHkuIFVzZXJzIGluIEF1c3RyaWEgCiAgIG9yIFN3aXR6ZXJsYW5kIG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IHRoZW0gKi8KTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJHZXJtYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGV1IikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkRldXRzY2giKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRGV1dHNjaGxhbmQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRGUiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGV1dHNjaGxhbmQiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJETSIpCi8qCkxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi8qCkxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qCkxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCiovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lMREFURSkKKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQpMT0NWQUwoTE9DQUxFX1MxMTU5KQpMT0NWQUwoTE9DQUxFX1MyMzU5KQpMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCkxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKQpMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCiovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJNb250YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiRGllbnN0YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWl0dHdvY2giKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiRG9ubmVyc3RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJGcmVpdGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNvbm5hYmVuZCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJTb25udGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIkRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk1pIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlNvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3kcnoiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJBcHJpbCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1haSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkp1bmkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJKdWxpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQXVndXN0IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGV6ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGV6IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KICAgIGJyZWFrOyAgLyogTEFORyhEZSkgKi8KCiAgICBjYXNlIExBTkdfRGE6Ci8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikgKi8KTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRhbnNrIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkRhbmlzaCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkYW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRGFuc2siKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRhbm1hcmsiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJEZW5tYXJrIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRhIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRhbm1hcmsiKQovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKSAqLwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpCi8qIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpICovCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpCi8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyogTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC9NTS15eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyogTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkgKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKSAqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pICovCi8qIExPQ1ZBTChMT0NBTEVfUzExNTkpICovCi8qIExPQ1ZBTChMT0NBTEVfUzIzNTkpICovCi8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCi8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1hbmRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUaXJzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUb3JzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM+HJkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU/huZGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnRzIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW5pIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlY2VtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCiAgICBicmVhazsgLyogTEFORyhEYSkgKi8KCiAgICBjYXNlIExBTkdfRW86Ci8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikgSVNPIG51bWVyaWNhbCBJRCBmb3IgbGFuZ3VhZ2UgVE9ETyAqLwpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwZXJhbnRvIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkVzcGVyYW50byIpCi8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZXUiKSAqLwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwZXJhbnRvIikKLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSBub3Qgb2ZmaWNpYWwgaW4gYW55IG9uZSBjb3VudHJ5ICovCi8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkRldXRzY2hsYW5kIikgKi8KLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiR2VybWFueSIpICovCi8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJEZSIpICovCi8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEZXV0c2NobGFuZCIpICovCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpIElTTyBJRCBvZiBsYW5nIFRPRE8gKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikgKi8KTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLDMpIC8qIGlzIHRoaXMgcmlnaHQ/IFRPRE8gKi8KTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwzKSAvKiBpcyB0aGlzIHJpZ2h0PyBUT0RPICovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJOTEciKSAvKiBhY2NvdW50aW5nIGN1cnJlbmN5IG9mIFVFQSAqLwovKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCi8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkubW0uZGQiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWVya3JlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwivGH9ZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic2FiYXRvIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRpbWFu5m8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwivGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhcm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1ham8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYf1ndXN0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJybyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3RvYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImH9ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJva3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCiAgICBicmVhazsgIC8qIExBTkcoRW8pICovCgogICAgY2FzZSBMQU5HX0ZpOgpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiMTEiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3VvbWkiKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRmlubmlzaCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmaW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwic3VvbWkiKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlN1b21pIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmlubGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJGaW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiU3VvbWkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjExIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjM1OCIpCi8qIApMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJtayIpCi8qCkxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi8qCkxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qCkxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCiovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lMREFURSkKKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQpMT0NWQUwoTE9DQUxFX1MxMTU5KQpMT0NWQUwoTE9DQUxFX1MyMzU5KQpMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCkxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKQpMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCiovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJtYWFuYW50YWkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGlpc3RhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJrZXNraXZpaWtrbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJ0b3JzdGFpIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInBlcmphbnRhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJsYXVhbnRhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udW50YWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiS2UiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiUGUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU3UiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJ0YW1taWt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImhlbG1pa3V1IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFhbGlza3V1IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiaHVodGlrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJ0b3Vrb2t1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImtlc+RrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJoZWlu5Gt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImVsb2t1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInN5eXNrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwibG9rYWt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJtYXJyYXNrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiam91bHVrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwidGFtbWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJoZWxtaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hYWxpcyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImh1aHRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwidG91a28iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJrZXPkIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiaGVpbuQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJlbG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzeXlzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsImxva2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibWFycmFzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImpvdWx1IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KICAgIGJyZWFrOyAgLyogTEFORyhGaSkgKi8KCiAgICBjYXNlIExBTkdfSXQ6CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkl0YWxpYW5vIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkl0YWxpYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaXRhIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkl0YWxpYW5vIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzkiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJJdGFsaWEiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJJdGFseSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJJdCIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJJdGFsaWEiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiMzkiKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMaXQuIikKLyoKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCkxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyoKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyoKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSUxEQVRFKQoqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQpMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQoqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCkxPQ1ZBTChMT0NBTEVfUzExNTkpCkxPQ1ZBTChMT0NBTEVfUzIzNTkpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIkx1bmVkaSciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiTWFydGVkaSciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWVyY29sZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJHaW92ZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJWZW5lcmRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTYWJhdG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiRG9tZW5pY2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiTWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiR2kiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiVmUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJHZW5uYWlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmViYnJhaW8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ6byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsZSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1hZ2dpbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkdpdWdubyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkx1Z2xpbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkFnb3N0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNldHRlbWJyZSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPdHRvYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRpY2VtYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkdlbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1hZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkdpdSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkx1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkFnbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNldCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPdHQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRpYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKgpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCiovCiAgICBicmVhazsgIC8qIExBTkcoSXQpICovCgoKLypJbnNlcnQgb3RoZXIgbGFuZ3VhZ2VzIGhlcmUqLwoKICAgIGRlZmF1bHQ6CglicmVhazsKICAgIH0gIC8qIHN3aXRjaCAqLwoKCWlmKCFyZXRMZW4pCgl7CgkJaWYoIXJldFN0cmluZylmcHJpbnRmKHN0ZGVyciwiVW5rb3duIExDIHR5cGUgJWxYXG4iLExDVHlwZSk7CgkJZWxzZSBmcHJpbnRmKHN0ZGVyciwiJyVzJyBub3Qgc3VwcG9ydGVkIGZvciB5b3VyIGxhbmd1YWdlLlxuIiwKCQkJcmV0U3RyaW5nKTsKCQlyZXR1cm4gMDsKCX0KCglpZihyZXRMZW4+bGVuKXJldExlbj1sZW47Cglsc3RyY3B5bjMyQShidWYscmV0U3RyaW5nLGxlbik7CglyZXR1cm4gcmV0TGVuOwp9CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBDb21wYXJlU3RyaW5nMTYgICAgICAgKE9MRTJOTFMuOCkKICovClVJTlQxNiBDb21wYXJlU3RyaW5nMTYoRFdPUkQgbGNpZCxEV09SRCBmZHdTdHlsZSwKCUxQQ1NUUiBzMSxEV09SRCBsMSxMUENTVFIgczIsRFdPUkQgbDIpCnsKCXJldHVybiAoVUlOVDE2KUNvbXBhcmVTdHJpbmczMkEobGNpZCxmZHdTdHlsZSxzMSxsMSxzMixsMik7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgQ29tcGFyZVN0cmluZzMyQSAgIChLRVJORUwzMi4yOSkKICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSBsb2NhbGUKICogRklYTUUKICovClVJTlQzMiBDb21wYXJlU3RyaW5nMzJBKERXT1JEIGxjaWQsIERXT1JEIGZkd1N0eWxlLCAKCUxQQ1NUUiBzMSwgRFdPUkQgbDEsIExQQ1NUUiBzMixEV09SRCBsMikKewoJaW50IGxlbixyZXQ7CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFTk9OU1BBQ0UpCgl7CgkJZnByaW50ZihzdGRuaW1wLCAiQ29tcGFyZVN0cmluZ0E6IElHTk9SRU5PTlNQQUNFIG5vdCBzdXBwcnRlZFxuIik7Cgl9CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFU1lNQk9MUykKCQlmcHJpbnRmKHN0ZG5pbXAsICJDb21wYXJlU3RyaW5nQTogSUdOT1JFU1lNQk9MUyBub3Qgc3VwcG9ydGVkXG4iKTsKCS8qIElzIHN0cmNtcCBkZWZhdWx0aW5nIHRvIHN0cmluZyBzb3J0IG9yIHRvIHdvcmQgc29ydD8/ICovCgkvKiBGSVhNRTogSGFuZGxlIE5PUk1fU1RSSU5HU09SVCAqLwoJbDEgPSAobDE9PS0xKT9zdHJsZW4oczEpOmwxOwoJbDIgPSAobDI9PS0xKT9zdHJsZW4oczIpOmwyOwoJbGVuID0gbDE8bDIgPyBsMTpsMjsKCXJldCA9IChmZHdTdHlsZSAmIE5PUk1fSUdOT1JFQ0FTRSkgPwoJCWxzdHJuY21waTMyQShzMSxzMixsZW4pCTogbHN0cm5jbXAzMkEoczEsczIsbGVuKTsKCS8qIG5vdCBlcXVhbCwgcmV0dXJuIDEgb3IgMyAqLwoJaWYocmV0IT0wKXJldHVybiByZXQrMjsKCS8qIHNhbWUgbGVuLCByZXR1cm4gMiAqLwoJaWYobDE9PWwyKXJldHVybiAyOwoJLyogdGhlIGxvbmdlciBvbmUgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgKi8KCXJldHVybiAobDE8bDIpPyAxIDogMzsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBDb21wYXJlU3RyaW5nMzJXICAgICAgIChLRVJORUwzMi4zMCkKICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSBsb2NhbGUKICogRklYTUUKICovClVJTlQzMiBDb21wYXJlU3RyaW5nMzJXKERXT1JEIGxjaWQsIERXT1JEIGZkd1N0eWxlLCAKCUxQQ1dTVFIgczEsIERXT1JEIGwxLCBMUENXU1RSIHMyLERXT1JEIGwyKQp7CglpbnQgbGVuLHJldDsKCWlmKGZkd1N0eWxlICYgTk9STV9JR05PUkVOT05TUEFDRSkKCQlmcHJpbnRmKHN0ZG5pbXAsIkNvbXBhcmVTdHJpbmdXOklHTk9SRU5PTlNQQUNFIG5vdCBzdXBwcnRlZFxuIik7CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFU1lNQk9MUykKCQlmcHJpbnRmKHN0ZG5pbXAsIkNvbXBhcmVTdHJpbmdXOklHTk9SRVNZTUJPTFMgbm90IHN1cHBvcnRlZFxuIik7CgoJLyogSXMgc3RyY21wIGRlZmF1bHRpbmcgdG8gc3RyaW5nIHNvcnQgb3IgdG8gd29yZCBzb3J0Pz8gKi8KCS8qIEZJWE1FOiBIYW5kbGUgTk9STV9TVFJJTkdTT1JUICovCglsMSA9IChsMT09LTEpP2xzdHJsZW4zMlcoczEpOmwxOwoJbDIgPSAobDI9PS0xKT9sc3RybGVuMzJXKHMyKTpsMjsKCWxlbiA9IGwxPGwyID8gbDE6bDI7CglyZXQgPSAoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRUNBU0UpID8KCQlsc3RybmNtcGkzMlcoczEsczIsbGVuKQk6IGxzdHJuY21wMzJXKHMxLHMyLGxlbik7CgkvKiBub3QgZXF1YWwsIHJldHVybiAxIG9yIDMgKi8KCWlmKHJldCE9MCkgcmV0dXJuIHJldCsyOwoJLyogc2FtZSBsZW4sIHJldHVybiAyICovCglpZihsMT09bDIpIHJldHVybiAyOwoJLyogdGhlIGxvbmdlciBvbmUgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgKi8KCXJldHVybiAobDE8bDIpPyAxIDogMzsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBTZXRMb2NhbEluZm9BICAgICAgIChLRVJORUwzMi40OTkpCiAqLwpCT09MIFNldExvY2FsZUluZm9BKERXT1JEIGxjaWQsIERXT1JEIGxjdHlwZSwgTFBDU1RSIGRhdGEpIHsKCWZwcmludGYoc3RkbmltcCwiU2V0TG9jYWxlSW5mb0EoJWxkLCVsZCwlcylcbiIsbGNpZCxsY3R5cGUsZGF0YSk7CglyZXR1cm4gVFJVRTsKfQo=