LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqICAgICAgQ29weXJpZ2h0IDE5OTggIERhdmlkIExlZSBMYW1iZXJ0CiAqLwoKI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgIndpbmRvd3MuaCIKI2luY2x1ZGUgImhlYXAuaCIKI2luY2x1ZGUgIm9sZS5oIgojaW5jbHVkZSAib3B0aW9ucy5oIgojaW5jbHVkZSAid2lubmxzLmgiCiNpbmNsdWRlICJ3aW5yZWcuaCIKI2luY2x1ZGUgIndpbmVycm9yLmgiCiNpbmNsdWRlICJkZWJ1Zy5oIgoKLyogTG9jYWxlIG5hbWUgdG8gaWQgbWFwLiB1c2VkIGJ5IEVudW1TeXN0ZW1Mb2NhbGVzLCBHZXRMb2NhbEluZm9BIAogKiBNVVNUIGNvbnRhaW4gYWxsICNkZWZpbmVzIGZyb20gd2lubmxzLmgKICogbGFzdCBlbnRyeSBoYXMgTlVMTCBuYW1lLCAwIGlkLgogKi8gCiNkZWZpbmUgTE9DQUxFX0VOVFJZKHgpCXsjeCxMT0NBTEVfIyN4fQpzdGF0aWMgc3RydWN0IHRhZ0xPQ0FMRV9OQU1FMklEIHsKCWNoYXIJKm5hbWU7CglEV09SRAlpZDsKfSBsb2NhbGVfbmFtZTJpZFtdPSB7CglMT0NBTEVfRU5UUlkoSUxBTkdVQUdFKSwKCUxPQ0FMRV9FTlRSWShTTEFOR1VBR0UpLAoJTE9DQUxFX0VOVFJZKFNFTkdMQU5HVUFHRSksCglMT0NBTEVfRU5UUlkoU0FCQlJFVkxBTkdOQU1FKSwKCUxPQ0FMRV9FTlRSWShTTkFUSVZFTEFOR05BTUUpLAoJTE9DQUxFX0VOVFJZKElDT1VOVFJZKSwKCUxPQ0FMRV9FTlRSWShTQ09VTlRSWSksCglMT0NBTEVfRU5UUlkoU0VOR0NPVU5UUlkpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZDVFJZTkFNRSksCglMT0NBTEVfRU5UUlkoU05BVElWRUNUUllOQU1FKSwKCUxPQ0FMRV9FTlRSWShJREVGQVVMVExBTkdVQUdFKSwKCUxPQ0FMRV9FTlRSWShJREVGQVVMVENPVU5UUlkpLAoJTE9DQUxFX0VOVFJZKElERUZBVUxUQ09ERVBBR0UpLAoJTE9DQUxFX0VOVFJZKElERUZBVUxUQU5TSUNPREVQQUdFKSwKCUxPQ0FMRV9FTlRSWShTTElTVCksCglMT0NBTEVfRU5UUlkoSU1FQVNVUkUpLAoJTE9DQUxFX0VOVFJZKFNERUNJTUFMKSwKCUxPQ0FMRV9FTlRSWShTVEhPVVNBTkQpLAoJTE9DQUxFX0VOVFJZKFNHUk9VUElORyksCglMT0NBTEVfRU5UUlkoSURJR0lUUyksCglMT0NBTEVfRU5UUlkoSUxaRVJPKSwKCUxPQ0FMRV9FTlRSWShJTkVHTlVNQkVSKSwKCUxPQ0FMRV9FTlRSWShTTkFUSVZFRElHSVRTKSwKCUxPQ0FMRV9FTlRSWShTQ1VSUkVOQ1kpLAoJTE9DQUxFX0VOVFJZKFNJTlRMU1lNQk9MKSwKCUxPQ0FMRV9FTlRSWShTTU9OREVDSU1BTFNFUCksCglMT0NBTEVfRU5UUlkoU01PTlRIT1VTQU5EU0VQKSwKCUxPQ0FMRV9FTlRSWShTTU9OR1JPVVBJTkcpLAoJTE9DQUxFX0VOVFJZKElDVVJSRElHSVRTKSwKCUxPQ0FMRV9FTlRSWShJSU5UTENVUlJESUdJVFMpLAoJTE9DQUxFX0VOVFJZKElDVVJSRU5DWSksCglMT0NBTEVfRU5UUlkoSU5FR0NVUlIpLAoJTE9DQUxFX0VOVFJZKFNEQVRFKSwKCUxPQ0FMRV9FTlRSWShTVElNRSksCglMT0NBTEVfRU5UUlkoU1NIT1JUREFURSksCglMT0NBTEVfRU5UUlkoU0xPTkdEQVRFKSwKCUxPQ0FMRV9FTlRSWShTVElNRUZPUk1BVCksCglMT0NBTEVfRU5UUlkoSURBVEUpLAoJTE9DQUxFX0VOVFJZKElMREFURSksCglMT0NBTEVfRU5UUlkoSVRJTUUpLAoJTE9DQUxFX0VOVFJZKElUSU1FTUFSS1BPU04pLAoJTE9DQUxFX0VOVFJZKElDRU5UVVJZKSwKCUxPQ0FMRV9FTlRSWShJVExaRVJPKSwKCUxPQ0FMRV9FTlRSWShJREFZTFpFUk8pLAoJTE9DQUxFX0VOVFJZKElNT05MWkVSTyksCglMT0NBTEVfRU5UUlkoUzExNTkpLAoJTE9DQUxFX0VOVFJZKFMyMzU5KSwKCUxPQ0FMRV9FTlRSWShJQ0FMRU5EQVJUWVBFKSwKCUxPQ0FMRV9FTlRSWShJT1BUSU9OQUxDQUxFTkRBUiksCglMT0NBTEVfRU5UUlkoSUZJUlNUREFZT0ZXRUVLKSwKCUxPQ0FMRV9FTlRSWShJRklSU1RXRUVLT0ZZRUFSKSwKCUxPQ0FMRV9FTlRSWShTREFZTkFNRTEpLAoJTE9DQUxFX0VOVFJZKFNEQVlOQU1FMiksCglMT0NBTEVfRU5UUlkoU0RBWU5BTUUzKSwKCUxPQ0FMRV9FTlRSWShTREFZTkFNRTQpLAoJTE9DQUxFX0VOVFJZKFNEQVlOQU1FNSksCglMT0NBTEVfRU5UUlkoU0RBWU5BTUU2KSwKCUxPQ0FMRV9FTlRSWShTREFZTkFNRTcpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZEQVlOQU1FMSksCglMT0NBTEVfRU5UUlkoU0FCQlJFVkRBWU5BTUUyKSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWREFZTkFNRTMpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZEQVlOQU1FNCksCglMT0NBTEVfRU5UUlkoU0FCQlJFVkRBWU5BTUU1KSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWREFZTkFNRTYpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZEQVlOQU1FNyksCglMT0NBTEVfRU5UUlkoU01PTlRITkFNRTEpLAoJTE9DQUxFX0VOVFJZKFNNT05USE5BTUUyKSwKCUxPQ0FMRV9FTlRSWShTTU9OVEhOQU1FMyksCglMT0NBTEVfRU5UUlkoU01PTlRITkFNRTQpLAoJTE9DQUxFX0VOVFJZKFNNT05USE5BTUU1KSwKCUxPQ0FMRV9FTlRSWShTTU9OVEhOQU1FNiksCglMT0NBTEVfRU5UUlkoU01PTlRITkFNRTcpLAoJTE9DQUxFX0VOVFJZKFNNT05USE5BTUU4KSwKCUxPQ0FMRV9FTlRSWShTTU9OVEhOQU1FOSksCglMT0NBTEVfRU5UUlkoU01PTlRITkFNRTEwKSwKCUxPQ0FMRV9FTlRSWShTTU9OVEhOQU1FMTEpLAoJTE9DQUxFX0VOVFJZKFNNT05USE5BTUUxMiksCglMT0NBTEVfRU5UUlkoU01PTlRITkFNRTEzKSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWTU9OVEhOQU1FMSksCglMT0NBTEVfRU5UUlkoU0FCQlJFVk1PTlRITkFNRTIpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZNT05USE5BTUUzKSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWTU9OVEhOQU1FNCksCglMT0NBTEVfRU5UUlkoU0FCQlJFVk1PTlRITkFNRTUpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZNT05USE5BTUU2KSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWTU9OVEhOQU1FNyksCglMT0NBTEVfRU5UUlkoU0FCQlJFVk1PTlRITkFNRTgpLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZNT05USE5BTUU5KSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWTU9OVEhOQU1FMTApLAoJTE9DQUxFX0VOVFJZKFNBQkJSRVZNT05USE5BTUUxMSksCglMT0NBTEVfRU5UUlkoU0FCQlJFVk1PTlRITkFNRTEyKSwKCUxPQ0FMRV9FTlRSWShTQUJCUkVWTU9OVEhOQU1FMTMpLAoJTE9DQUxFX0VOVFJZKFNQT1NJVElWRVNJR04pLAoJTE9DQUxFX0VOVFJZKFNORUdBVElWRVNJR04pLAoJTE9DQUxFX0VOVFJZKElQT1NTSUdOUE9TTiksCglMT0NBTEVfRU5UUlkoSU5FR1NJR05QT1NOKSwKCUxPQ0FMRV9FTlRSWShJUE9TU1lNUFJFQ0VERVMpLAoJTE9DQUxFX0VOVFJZKElQT1NTRVBCWVNQQUNFKSwKCUxPQ0FMRV9FTlRSWShJTkVHU1lNUFJFQ0VERVMpLAoJTE9DQUxFX0VOVFJZKElORUdTRVBCWVNQQUNFKSwKLyoJTE9DQUxFX0VOVFJZKEZPTlRTSUdOQVRVUkUpLCovCgl7TlVMTCwwfSwKfTsKCmNvbnN0IHN0cnVjdCBtYXBfbGNpZDJzdHIgewoJTENJRAkJbGFuZ2lkOwoJY29uc3QgY2hhcgkqbGFuZ25hbWU7Cn0gbGFuZ3VhZ2VzW109ewoJezB4MDQwMSwiQXJhYmlzY2gifSwKCXsweDA0MDIsIkJ1bGdhcmlzY2gifSwKCXsweDA0MDMsIkthdGFsYW5pc2NoIn0sCgl7MHgwNDA0LCJUcmFkaXRpb25hbGVzIENoaW5lc2lzY2gifSwKCXsweDA0MDUsIlRzY2hlY2lzY2gifSwKCXsweDA0MDYsIkRkbmlzY2gifSwKCXsweDA0MDcsIkRldXRzY2gifSwKCXsweDA0MDgsIkdyaWVjaGlzY2gifSwKCXsweDA0MDksIkFtZXJpa2FuaXNjaGVzIEVuZ2xpc2NoIn0sCgl7MHgwNDBBLCJLYXN0aWxpc2NoZXMgU3BhbmlzY2gifSwKCXsweDA0MEIsIkZpbm5pc2NoIn0sCgl7MHgwNDBDLCJGcmFuenZzaXNjaCJ9LAoJezB4MDQwRCwiSGVicmRpc2NoIn0sCgl7MHgwNDBFLCJVbmdhcmlzY2gifSwKCXsweDA0MEYsIklzbGRuZGlzY2gifSwKCXsweDA0MTAsIkl0YWxpZW5pc2NoIn0sCgl7MHgwNDExLCJKYXBhbmlzY2gifSwKCXsweDA0MTIsIktvcmVhbmlzY2gifSwKCXsweDA0MTMsIk5pZWRlcmxkbmRpc2NoIn0sCgl7MHgwNDE0LCJOb3J3ZWdpc2NoLUJva21hbCJ9LAoJezB4MDQxNSwiUG9sbmlzY2gifSwKCXsweDA0MTYsIkJyYXNpbGlhbmlzY2hlcyBQb3J0dWdpZXNpc2NoIn0sCgl7MHgwNDE3LCJSZHRvcm9tYW5pc2NoIn0sCgl7MHgwNDE4LCJSdW1kbmlzY2gifSwKCXsweDA0MTksIlJ1c3Npc2NoIn0sCgl7MHgwNDFBLCJLcm9hdG9zZXJiaXNjaCAobGF0ZWluaXNjaCkifSwKCXsweDA0MUIsIlNsb3dlbmlzY2gifSwKCXsweDA0MUMsIkFsYmFuaXNjaCJ9LAoJezB4MDQxRCwiU2Nod2VkaXNjaCJ9LAoJezB4MDQxRSwiVGhhaSJ9LAoJezB4MDQxRiwiVHxya2lzY2gifSwKCXsweDA0MjAsIlVyZHUifSwKCXsweDA0MjEsIkJhaGFzYSJ9LAoJezB4MDgwNCwiVmVyZWluZmFjaHRlcyBDaGluZXNpc2NoIn0sCgl7MHgwODA3LCJTY2h3ZWl6ZXJkZXV0c2NoIn0sCgl7MHgwODA5LCJCcml0aXNjaGVzIEVuZ2xpc2NoIn0sCgl7MHgwODBBLCJNZXhpa2FuaXNjaGVzIFNwYW5pc2NoIn0sCgl7MHgwODBDLCJCZWxnaXNjaGVzIEZyYW56dnNpc2NoIn0sCgl7MHgwODEwLCJTY2h3ZWl6ZXJpc2NoZXMgSXRhbGllbmlzY2gifSwKCXsweDA4MTMsIkJlbGdpc2NoZXMgTmllZGVybGRuZGlzY2gifSwKCXsweDA4MTQsIk5vcmd3ZWdpc2NoLU55bm9yc2sifSwKCXsweDA4MTYsIlBvcnR1Z2llc2lzY2gifSwKCXsweDA4MUEsIlNlcmJva3JhdGlzY2ggKGt5cmlsbGlzY2gpIn0sCgl7MHgwQzFDLCJLYW5hZGlzY2hlcyBGcmFuenZzaXNjaCJ9LAoJezB4MTAwQywiU2Nod2VpemVyaXNjaGVzIEZyYW56dnNpc2NoIn0sCgl7MHgwMDAwLCJVbmJla2FubnQifSwKfTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgR2V0VXNlckRlZmF1bHRMQ0lEICAgICAgIChPTEUyTkxTLjEpCiAqLwpMQ0lEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExDSUQoKQp7Ci8qIERlZmF1bHQgc29ydGluZywgbmV1dHJhbCBzdWJsYW5ndWFnZSAqLwogICAgc3dpdGNoKE9wdGlvbnMubGFuZ3VhZ2UpCiAgICB7CiAvKiBjYXNlIExBTkdfQnU6IHJldHVybiAweDAyOyAqLyAgICAgIC8qIEJ1bGdhcmlhbiAqLwogLyogY2FzZSBMQU5HX0NoOiByZXR1cm4gMHgwNDsgKi8gICAgICAvKiBDaGluZXNlICovCiAgICBjYXNlIExBTkdfQ3o6IHJldHVybiAweDA1OyAgICAgICAgIC8qIEN6ZWNoICovCiAgICBjYXNlIExBTkdfRGE6IHJldHVybiAweDA2OyAgICAgICAgIC8qIERhbmlzaCAqLwogICAgY2FzZSBMQU5HX0RlOiByZXR1cm4gMHgwNzsgICAgICAgICAvKiBHZXJtYW4gKi8KIC8qIGNhc2UgTEFOR19HcjogcmV0dXJuIDB4MDg7ICovICAgICAgLyogR3JlZWsgKi8KICAgIGNhc2UgTEFOR19FbjogcmV0dXJuIDB4MDk7ICAgICAgICAgLyogRW5nbGlzaCAqLwogICAgY2FzZSBMQU5HX0VzOiByZXR1cm4gMHgwYTsgICAgICAgICAvKiBTcGFuaXNoICovCiAgICBjYXNlIExBTkdfRmk6IHJldHVybiAweDBiOyAgICAgICAgIC8qIEZpbm5pc2ggKi8KICAgIGNhc2UgTEFOR19GcjogcmV0dXJuIDB4MGM7ICAgICAgICAgLyogRnJlbmNoICovCiAgICBjYXNlIExBTkdfSHU6IHJldHVybiAweDBlOyAgICAgICAgIC8qIEh1bmdhcmlhbiAqLwogLyogY2FzZSBMQU5HX0ljOiByZXR1cm4gMHgwZjsgKi8gICAgICAvKiBJY2VsYW5kaWMgKi8KICAgIGNhc2UgTEFOR19JdDogcmV0dXJuIDB4MTA7ICAgICAgICAgLyogSXRhbGlhbiAqLwogLyogY2FzZSBMQU5HX0pwOiByZXR1cm4gMHgxMTsgKi8gICAgICAvKiBKYXBhbmVzZSAqLwogICAgY2FzZSBMQU5HX0tvOiByZXR1cm4gMHgxMjsgICAgICAgICAvKiBLb3JlYW4gKi8KIC8qIGNhc2UgTEFOR19EdTogcmV0dXJuIDB4MTM7ICovICAgICAgLyogRHV0Y2ggKi8KICAgIGNhc2UgTEFOR19ObzogcmV0dXJuIDB4MTQ7ICAgICAgICAgLyogTm9yd2VnaWFuICovCiAgICBjYXNlIExBTkdfUGw6IHJldHVybiAweDE1OyAgICAgICAgIC8qIFBvbGlzaCAqLwogICAgY2FzZSBMQU5HX1BvOiByZXR1cm4gMHgxNjsgICAgICAgICAvKiBQb3J0dWd1ZXNlICovCiAvKiBjYXNlIExBTkdfUm86IHJldHVybiAweDE4OyAqLyAgICAgIC8qIFJvbWFuaWFuICovCiAvKiBjYXNlIExBTkdfUnU6IHJldHVybiAweDE5OyAqLyAgICAgIC8qIFJ1c3NpYW4gKi8KIC8qIGNhc2UgTEFOR19DcjogcmV0dXJuIDB4MWE7ICovICAgICAgLyogQ3JvYXRpYW4gKi8KIC8qIGNhc2UgTEFOR19TbDogcmV0dXJuIDB4MWI7ICovICAgICAgLyogU2xvdmFrICovCiAgICBjYXNlIExBTkdfU3c6IHJldHVybiAweDFkOyAgICAgICAgIC8qIFN3ZWRpc2ggKi8KIC8qIGNhc2UgTEFOR19UdTogcmV0dXJuIDB4MWY7ICovICAgICAgLyogVHVya2lzaCAqLwogLyogY2FzZSBMQU5HX1N2OiByZXR1cm4gMHgyNDsgKi8gICAgICAvKiBTbG92ZW5pYW4gKi8KICAgIGNhc2UgTEFOR19FbzogcmV0dXJuIDB4MjU7ICAgICAgICAgLyogRXNwZXJhbnRvIChub3Qgb2ZmaWNpYWwpICovCiAgICBjYXNlIExBTkdfQ2E6IHJldHVybiAweDI2OyAgICAgICAgIC8qIENhdGFsYW4gKi8KCiAgICBkZWZhdWx0OgoJcmV0dXJuIDB4MDA7ICAgICAgICAgICAgICAgICAgIC8qIE5ldXRyYWwgbGFuZ3VhZ2UgKi8KICAgIH0KfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExDSUQgICAgICAgKE9MRTJOTFMuMikKICovCkxDSUQgV0lOQVBJIEdldFN5c3RlbURlZmF1bHRMQ0lEKCkKewoJcmV0dXJuIEdldFVzZXJEZWZhdWx0TENJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRVc2VyRGVmYXVsdExhbmdJRCAgICAgICAoT0xFMk5MUy4zKQogKi8KTEFOR0lEIFdJTkFQSSBHZXRVc2VyRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiAoV09SRClHZXRVc2VyRGVmYXVsdExDSUQoKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCAgICAgKE9MRTJOTFMuNCkKICovCkxBTkdJRCBXSU5BUEkgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpCnsKCXJldHVybiBHZXRVc2VyRGVmYXVsdExhbmdJRCgpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICBHZXRMb2NhbGVJbmZvQSAgICAgICAgICAgICAoT0xFMk5MUy41KQogKiBJcyB0aGUgbGFzdCBwYXJhbWV0ZXIgcmVhbGx5IFdPUkQgZm9yIFdpbjE2PwogKi8KSU5UMTYgV0lOQVBJIEdldExvY2FsZUluZm8xNihMQ0lEIGxjaWQsTENUWVBFIExDVHlwZSxMUFNUUiBidWYsSU5UMTYgbGVuKQp7CglyZXR1cm4gR2V0TG9jYWxlSW5mbzMyQShsY2lkLExDVHlwZSxidWYsbGVuKTsKfQoKSU5UMzIgV0lOQVBJIEdldExvY2FsZUluZm8zMkEoTENJRCBsY2lkLExDVFlQRSBMQ1R5cGUsTFBTVFIgYnVmLElOVDMyIGxlbikKewoJY2hhcgkqcmV0U3RyaW5nOwoJaW50CWZvdW5kLGk7CgoJVFJBQ0Uob2xlLCIoJThsWCwlOGxYLCVwLCU0WClcbiIsCgkJCWxjaWQsTENUeXBlLGJ1ZixsZW4pOwoKCUxDVHlwZSAmPSB+KExPQ0FMRV9OT1VTRVJPVkVSUklERXxMT0NBTEVfVVNFX0NQX0FDUCk7CgoJLyogQXMgYW4gb3B0aW9uLCB3ZSBjb3VsZCBvYnRhaW4gdGhlIHZhbHVlIGZyb20gd2luLmluaS4KCSAgIFRoaXMgd291bGQgbm90IG1hdGNoIHRoZSBXaW5lIGNvbXBpbGUtdGltZSBvcHRpb24uCgkgICBBbHNvLCBub3QgYWxsIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUgZnJvbSB3aW4uaW5pICovCglyZXRTdHJpbmc9MDsKCS8qIElmIHdlIGFyZSB0aHJvdWdoIGFsbCBvZiB0aGlzLCByZXRMZW4gc2hvdWxkIG5vdCBiZSB6ZXJvIGFueW1vcmUuCgkgICBJZiBpdCBpcywgdGhlIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KCWk9MDsKCXdoaWxlIChsb2NhbGVfbmFtZTJpZFtpXS5uYW1lIT1OVUxMKSB7CgkJaWYgKExDVHlwZSA9PSBsb2NhbGVfbmFtZTJpZFtpXS5pZCkgewoJCQlyZXRTdHJpbmcgPSBsb2NhbGVfbmFtZTJpZFtpXS5uYW1lOwoJCQlicmVhazsKCQl9CgkJaSsrOwoJfQoJaWYgKCFyZXRTdHJpbmcpIHsKCQlmcHJpbnRmKHN0ZGVyciwiVW5rb3duIExDIHR5cGUgJWxYXG4iLExDVHlwZSk7CgkJcmV0dXJuIDA7Cgl9CgojZGVmaW5lIExPQ1ZBTCh0eXBlLHZhbHVlKSBjYXNlIHR5cGU6cmV0U3RyaW5nPXZhbHVlO2JyZWFrOwoKLyogTm93LCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWMgZGVmaW5pdGlvbnMuIFRoZXkgZG9uJ3QgaGF2ZSB0byBiZQogICBjb21wbGV0ZSAqLwogICAgZm91bmQ9MTsKICAgIHN3aXRjaChPcHRpb25zLmxhbmd1YWdlKQogICAgewogICAgY2FzZSBMQU5HX0RlOgogICAgCXN3aXRjaCAoTENUeXBlKSB7Ci8qIFRoaXMgZGVmaW5pdGlvbnMgYXBwbHkgdG8gR2VybWFueSBvbmx5LiBVc2VycyBpbiBBdXN0cmlhIAogICBvciBTd2l0emVybGFuZCBtaWdodCB3YW50IHRvIG1vZGlmeSB0aGVtICovCkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkRldXRzY2giKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJEZXV0c2NoIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEZXV0c2NobGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRlIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRldXRzY2hsYW5kIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKQoqLwpMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQpMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCi8qCkxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikKSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRE0iKQovKgpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKQpMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQovKgpMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkLk1NLnl5eXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKgpMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKQoqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTERBVEUpCiovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpCiovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQpMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykKTE9DVkFMKExPQ0FMRV9TMTE1OSkKTE9DVkFMKExPQ0FMRV9TMjM1OSkKTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKQpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQpMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKQoqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiTW9udGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIkRpZW5zdGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk1pdHR3b2NoIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkRvbm5lcnN0YWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiRnJlaXRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTb25uYWJlbmQiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU29ubnRhZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJEaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJEbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTYSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ1YXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJN5HJ6IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW5pIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlemVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk3kciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRleiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKgpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCiovCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7ICAvKiBMQU5HKERlKSAqLwoKICAgIGNhc2UgTEFOR19EYToKICAgIAlzd2l0Y2ggKExDVHlwZSkgewpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiNiIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJEYW5zayIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJEYW5pc2giKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZGFuIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkRhbnNrIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDUiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEYW5tYXJrIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRGVubWFyayIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJESyIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJEYW5tYXJrIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI2IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ1IikKLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwpMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQpMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLiIpCi8qIExPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKSAqLwpMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKSAqLwpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwia3IiKQovKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwpMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQovKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lMREFURSkgKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkgKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCi8qIExPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKSAqLwpMT0NWQUwoTE9DQUxFX1MxMTU5LCAiIikKTE9DVkFMKExPQ0FMRV9TMjM1OSwgIiIpCi8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCi8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1hbmRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUaXJzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUb3JzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM+HJkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU/huZGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1hIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP4IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnRzIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYWoiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW5pIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVsaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPa3RvYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlY2VtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPa3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQpMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIzIikKTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQpMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7IC8qIExBTkcoRGEpICovCgogICAgY2FzZSBMQU5HX0VuOgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVuZ2xpc2giKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRW5nbGlzaCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlbiIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFbmdsaXNoIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMTEiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJVbml0ZWQgU3RhdGVzIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiVW5pdGVkIFN0YXRlcyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJVUyIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJVbml0ZWQgU3RhdGVzIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQ5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI0MzciKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKQoqLwpMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLCIpCkxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCklzIHRoaXMgIjAxMjM0NTY3ODkiID8/CkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkRNIikKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlVTRCIpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIuIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiTU0vZGQveXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBNTU1NIGRcJ3RoXCcsIHl5eXkiKQpMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCAiaDptbTpzcyB0dCIpCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lMREFURSkKKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQoqLwpMT0NWQUwoTE9DQUxFX1MxMTU5LCJBTSIpCkxPQ1ZBTChMT0NBTEVfUzIzNTksIlBNIikKTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIk1vbmRheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJUdWVzZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIldlZG5lc2RheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUaHVyc2RheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJGcmlkYXkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2F0dXJkYXkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU3VuZGF5IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk1vbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJUdWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiV2VkIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRodSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJGcmkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2F0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlN1biIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkphbnVhcnkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJGZWJydWFyeSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcmNoIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiQXByaWwiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJNYXkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJKdW5lIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiSnVseSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPY3RvYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRlY2VtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1heSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPY3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sIiIpCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwiLSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UpCkxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKQoqLwoJZGVmYXVsdDogZm91bmQ9MDticmVhazsKCX0KICAgIGJyZWFrOyAgLyogTEFORyhFbikgKi8KCiAgICBjYXNlIExBTkdfRW86CiAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjkiKSBJU08gbnVtZXJpY2FsIElEIGZvciBsYW5ndWFnZSBUT0RPICovCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJFc3BlcmFudG8iKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRXNwZXJhbnRvIikKLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImRldSIpICovCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3BlcmFudG8iKQovKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpIG5vdCBvZmZpY2lhbCBpbiBhbnkgb25lIGNvdW50cnkgKi8KLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiRGV1dHNjaGxhbmQiKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJHZXJtYW55IikgKi8KLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRlIikgKi8KLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkRldXRzY2hsYW5kIikgKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikgSVNPIElEIG9mIGxhbmcgVE9ETyAqLwovKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKSAqLwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjMiKSAvKiBpcyB0aGlzIHJpZ2h0PyBUT0RPICovCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjMiKSAvKiBpcyB0aGlzIHJpZ2h0PyBUT0RPICovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyogTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpICovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJOTEciKSAvKiBhY2NvdW50aW5nIGN1cnJlbmN5IG9mIFVFQSAqLwovKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwovKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkgKi8KLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCi8qIExPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkubW0uZGQiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLyogTE9DVkFMKExPQ0FMRV9TMTE1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9TMjM1OSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwibHVuZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFyZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWVya3JlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwivGH9ZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZHJlZG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic2FiYXRvIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRpbWFu5m8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwivGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhcm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1ham8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW5pbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1bGlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYf1ndXN0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJybyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3RvYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImRlY2VtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImH9ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJva3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykgKi8KLyogTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpICovCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7ICAvKiBMQU5HKEVvKSAqLwoKICAgIGNhc2UgTEFOR19GaToKICAgIAlzd2l0Y2ggKExDVHlwZSkgewpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiMTEiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU3VvbWkiKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRmlubmlzaCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmaW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwic3VvbWkiKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlN1b21pIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmlubGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJGaW4iKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiU3VvbWkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjExIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjM1OCIpCi8qIApMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJtayIpCi8qCkxPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVApCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCi8qCkxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRU5DWSwiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCIuIikKTE9DVkFMKExPQ0FMRV9TVElNRSwiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQuTU0ueXl5eSIpCkxPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJkZGQsIGQuIE1NTU0geXl5eSIpCi8qCkxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpCiovCkxPQ1ZBTChMT0NBTEVfSURBVEUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lMREFURSkKKi8KTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSkKKi8KTE9DVkFMKExPQ0FMRV9JVExaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPKQoqLwpMT0NWQUwoTE9DQUxFX1MxMTU5LCAiQU0iKQpMT0NWQUwoTE9DQUxFX1MyMzU5LCAiUE0iKQovKgpMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpCkxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKQpMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpCiovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJtYWFuYW50YWkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidGlpc3RhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJrZXNraXZpaWtrbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJ0b3JzdGFpIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInBlcmphbnRhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJsYXVhbnRhaSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udW50YWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiS2UiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiVG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiUGUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiTGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU3UiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJ0YW1taWt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImhlbG1pa3V1IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFhbGlza3V1IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiaHVodGlrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJ0b3Vrb2t1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImtlc+RrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJoZWlu5Gt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImVsb2t1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInN5eXNrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwibG9rYWt1dSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJtYXJyYXNrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiam91bHVrdXUiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwidGFtbWkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJoZWxtaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hYWxpcyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsImh1aHRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwidG91a28iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJrZXPkIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiaGVpbuQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJlbG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzeXlzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsImxva2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibWFycmFzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImpvdWx1IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQovKgpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7Cgl9CiAgICBicmVhazsgIC8qIExBTkcoRmkpICovCgogICAgY2FzZSBMQU5HX0l0OgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkl0YWxpYW5vIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkl0YWxpYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiaXRhIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkl0YWxpYW5vIikKTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzkiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJJdGFsaWEiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJJdGFseSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJJdCIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJJdGFsaWEiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiMzkiKQovKiBEdW5ubwpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpCiovCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIuIikKLyoKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKQpJcyB0aGlzICIwMTIzNDU2Nzg5IiA/PwpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMaXQuIikKLyoKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCkxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyoKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyoKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSUxEQVRFKQoqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQpMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQoqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCkxPQ1ZBTChMT0NBTEVfUzExNTkpCkxPQ1ZBTChMT0NBTEVfUzIzNTkpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIkx1bmVkaSciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiTWFydGVkaSciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWVyY29sZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJHaW92ZWRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJWZW5lcmRpJyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTYWJhdG8iKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiRG9tZW5pY2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiTWEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiTWUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiR2kiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiVmUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU2EiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRG8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJHZW5uYWlvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmViYnJhaW8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJNYXJ6byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsZSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIk1hZ2dpbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIkdpdWdubyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkx1Z2xpbyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIkFnb3N0byIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIlNldHRlbWJyZSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJPdHRvYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIk5vdmVtYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkRpY2VtYnJlIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkdlbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1hZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkdpdSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkx1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIkFnbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIlNldCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJPdHQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkRpYyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKgpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCiovCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7ICAvKiBMQU5HKEl0KSAqLwoKICAgIGNhc2UgMHgwNDA5OgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDQwOSIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCAoVW5pdGVkIFN0YXRlcykiKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIkVuZ2xpc2giKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgIkVOVSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCkxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIxIikKTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlVuaXRlZCBTdGF0ZXMiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiVW5pdGVkIFN0YXRlcyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiVVNBIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsICJVbml0ZWQgU3RhdGVzIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCAiMDQwOSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjQzNyIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMSIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIuIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQpMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIiQiKQpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiVVNEIikKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjAiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiTS9kL3l5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCwgImg6bW06c3MgdHQiKQpMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSVRJTUUsICIwIikKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCkxPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiNiIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIk1vbmRheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCAiVHVlc2RheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCAiV2VkbmVzZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsICJUaHVyc2RheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiRnJpZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsICJTYXR1cmRheSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiU3VuZGF5IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsICJNb24iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwgIlR1ZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCAiV2VkIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsICJUaHUiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwgIkZyaSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCAiU2F0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsICJTdW4iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCAiSmFudWFyeSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsICJGZWJydWFyeSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsICJNYXJjaCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsICJBcHJpbCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsICJNYXkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuZSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsICJKdWx5IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwgIkF1Z3VzdCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksICJTZXB0ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwgIk9jdG9iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwgIk5vdmVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsICJEZWNlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCAiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwgIkphbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsICJGZWIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCAiTWFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwgIkFwciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsICJNYXkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCAiSnVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywgIkp1bCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsICJBdWciKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCAiU2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsICJPY3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwgIk5vdiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCAiRGVjIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsICIiKQpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQpMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIwIikKTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIxIikKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQpMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiMCIpCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7IC8qIExBTkcoMHgwNDA5KSAoVS5TLiBFbmdsaXNoKSAqLwoKICAgIGNhc2UgMHgwODA5OgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCAiMDgwOSIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCAiRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJFTkciKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwgIkVuZ2xpc2giKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiNDQiKQpMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCAiVW5pdGVkIEtpbmdkb20iKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiVW5pdGVkIEtpbmdkb20iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIkdCUiIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiVW5pdGVkIEtpbmdkb20iKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwODA5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICI0NCIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjg1MCIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsICIxMjUyIikKTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsICIuIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsICIsIikKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsICIzOzAiKQpMT0NWQUwoTE9DQUxFX0lESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sICIxIikKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCAiMSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywgIjAxMjM0NTY3ODkiKQpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwgIqMiKQpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCAiR0JQIikKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwgIi4iKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIiwiKQpMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywgIjM7MCIpCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMsICIyIikKTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksICIwIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwgIjEiKQpMT0NWQUwoTE9DQUxFX1NEQVRFLCAiLyIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsICI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCAiZGQvTU0veXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwgImRkIE1NTU0geXl5eSIpCkxPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQsICJISDptbTpzcyIpCkxPQ1ZBTChMT0NBTEVfSURBVEUsICIxIikKTE9DVkFMKExPQ0FMRV9JTERBVEUsICIxIikKTE9DVkFMKExPQ0FMRV9JVElNRSwgIjEiKQpMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04sICIwIikKTE9DVkFMKExPQ0FMRV9JQ0VOVFVSWSwgIjAiKQpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sICIxIikKTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8sICIxIikKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8sICIxIikKTE9DVkFMKExPQ0FMRV9TMTE1OSwgIkFNIikKTE9DVkFMKExPQ0FMRV9TMjM1OSwgIlBNIikKTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIsICIwIikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssICIwIikKTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSLCAiMCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCAiTW9uZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsICJUdWVzZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJXZWRuZXNkYXkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlRodXJzZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsICJGcmlkYXkiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNhdHVyZGF5IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsICJTdW5kYXkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwgIk1vbiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCAiVHVlIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsICJXZWQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwgIlRodSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCAiRnJpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsICJTYXQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywgIlN1biIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsICJKYW51YXJ5IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwgIkZlYnJ1YXJ5IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywgIk1hcmNoIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFwcmlsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1heSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsICJKdW5lIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywgIkp1bHkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQXVndXN0IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwgIlNlcHRlbWJlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCAiT2N0b2JlciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCAiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwgIkRlY2VtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsICIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCAiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwgIkZlYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsICJNYXIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCAiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwgIk1heSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsICJKdW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCAiSnVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwgIkF1ZyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksICJTZXAiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwgIk9jdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCAiTm92IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsICJEZWMiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywgIiIpCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7Cgl9CiAgICBicmVhazsgLyogTEFORygweDA4MDkpIChVLksuIEVuZ2xpc2gpICovCgogICAgY2FzZSBMQU5HX0tvOiAvKiBzdHJpbmcgdXNpbmcgY29kZXBhZ2UgOTQ5ICovCiAgICAgICAgc3dpdGNoIChMQ1R5cGUpIHsKTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIjE4IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIlwzMDdcMzIxXDI2MVwyNzFcMjc2XDM1NiIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJLb3JlYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiS09SIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlwzMDdcMzIxXDI2MVwyNzFcMjc2XDM1NiIpCkxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjgyIikKTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiXDI2NFwzNTNcMzA3XDMyMVwyNzFcMzE2XDI2MVwyNzEiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJLb3JlYSAoU291dGgpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIktPUiIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJcMjY0XDM1M1wzMDdcMzIxXDI3MVwzMTZcMjYxXDI3MSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiMTgiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiODIiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjk0OSIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjk0OSIpCkxPQ1ZBTChMT0NBTEVfU0xJU1QsIiwiKQpMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKTE9DVkFMKExPQ0FMRV9TREVDSU1BTCwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCIsIikKTE9DVkFMKExPQ0FMRV9TR1JPVVBJTkcsIjM7MCIpCkxPQ1ZBTChMT0NBTEVfSURJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCIwIikKTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSLCIxIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIlxcIikKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiV29uIikKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLiIpCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIsIikKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUywiMiIpCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi8iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJ5eXl5L01NL2RkIikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsInl5eXkvTU0vZGQiKQpMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFULCJoOm1tOnNzIHR0IikKTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCkxPQ1ZBTChMT0NBTEVfSUxEQVRFLCIxIikKTE9DVkFMKExPQ0FMRV9JVElNRSwiMSIpCkxPQ1ZBTChMT0NBTEVfSVRJTUVNQVJLUE9TTiwiMCIpCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlksIjAiKQpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjAiKQpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTywiMCIpCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCIwIikKTE9DVkFMKExPQ0FMRV9TMTE1OSwiXDI3N1wzMDBcMzAwXDM3NCIpCkxPQ1ZBTChMT0NBTEVfUzIzNTksIlwyNzdcMzAwXDMxMFwzMDQiKQpMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUsIjEiKQovKiBLb3JlYW4gVGFuZ3VuIEVyYSBjYWxlbmRhciAqLwpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCI1IikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUssIjYiKQpMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIsIjAiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiXDI3N1wzNzFcMjc3XDM0NFwzMDBcMzE3IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIlwzMTBcMjU1XDI3N1wzNDRcMzAwXDMxNyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJcMjc0XDM2NlwyNzdcMzQ0XDMwMFwzMTciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiXDI3MFwzNjFcMjc3XDM0NFwzMDBcMzE3IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlwyNjFcMzM1XDI3N1wzNDRcMzAwXDMxNyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJcMzA1XDM0NFwyNzdcMzQ0XDMwMFwzMTciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiXDMwMFwzMTdcMjc3XDM0NFwzMDBcMzE3IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIlwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlwzMTBcMjU1IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIlwyNzRcMzY2IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlwyNzBcMzYxIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlwyNjFcMzM1IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlwzMDVcMzQ0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlwzMDBcMzE3IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiMVwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiMlwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiM1wyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiNFwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiNVwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiNlwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiN1wyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiOFwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiOVwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIjEwXDI3N1wzNzEiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiMTFcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIxMlwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIjFcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIjJcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIjNcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIjRcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIjVcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIjZcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIjdcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIjhcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIjlcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIxMFwyNzdcMzcxIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIjExXDI3N1wzNzEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiMTJcMjc3XDM3MSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sIiIpCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwiLSIpCkxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sIjAiKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywiMyIpCkxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsIjAiKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsIjAiKQogICAgICAgIGRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7CiAgICAgICAgfQogICAgYnJlYWs7ICAvKiBMQU5HKEtvKSAqLwoKICAgIGNhc2UgTEFOR19IdToKICAgIAlzd2l0Y2ggKExDVHlwZSkgewpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJNYWd5YXIiKQpMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiSHVuZ2FyaWFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImh1biIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJNYWd5YXIiKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzNiIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIk1hZ3lhcm9yc3rhZyIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkh1bmdhcnkiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiSHUiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiTWFneWFyb3JzeuFnIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjM2IikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTIiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCI4NTIiKQpMT0NWQUwoTE9DQUxFX1NMSVNULCI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiMCIpCkxPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSE9VU0FORCwiLCIpCi8qCkxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lESUdJVFMsIjIiKQpMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikKSXMgdGhpcyAiMDEyMzQ1Njc4OSIgPz8KTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTKQoqLwpMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRnQiKQovKgpMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MKQpMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKQpMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjAiKQovKgpMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLyIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsInl5eXkuTU0uZGQiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCB5eXl5LiBNTU1NIGQiKQovKgpMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKQoqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JTERBVEUpCiovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpCiovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKQpMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykKTE9DVkFMKExPQ0FMRV9TMTE1OSkKTE9DVkFMKExPQ0FMRV9TMjM1OSkKTE9DVkFMKExPQ0FMRV9JQ0FMRU5EQVJUWVBFKQpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSKQpMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykKTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKQoqLwpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiSOl0ZvUiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiS2VkZCIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJTemVyZGEiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiQ3P8dPZydPZrIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlDpbnRlayIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJTem9tYmF0IikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlZhc+FybmFwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIkjpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIktlIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIlNlIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkNzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlDpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlZhIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudeFyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnXhciIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk3hcmNpdXMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCLBcHJpbGlzIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTeFqdXMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJK+m5pdXMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJK+mxpdXMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3p0dXMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJTemVwdGVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdPNiZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiwXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTeFqIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSvpuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSvpsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU3plIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi8qCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikKTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKQpMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkKKi8KCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7Cgl9CiAgICBicmVhazsgIC8qIExBTkcoRW4pICovCgogICAgY2FzZSBMQU5HX1BsOgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIlBvbHNraSIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJQb2xpc2giKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwgInBvbCIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJQb2xza2kiKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0OSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlBvbHNrYSIpCkxPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlBvbGFuZCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJQbCIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJQb2xza2EiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjEyNTIiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCIxMjUyIikKTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIiAiKQovKgpMT0NWQUwoTE9DQUxFX1NHUk9VUElORykKKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpCklzIHRoaXMgIjAxMjM0NTY3ODkiID8/CkxPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykKKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksInpceEIzIikKLyoKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkKTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCkKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApCkxPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKQoqLwpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikKLyoKTE9DVkFMKExPQ0FMRV9JSU5UTENVUlJESUdJVFMpCiovCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCIzIikKTE9DVkFMKExPQ0FMRV9JTkVHQ1VSUiwiOCIpCkxPQ1ZBTChMT0NBTEVfU0RBVEUsIi4iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikKTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJkZC5NTS55eXl5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsImRkZCwgZC4gTU1NTSB5eXl5IikKLyoKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCkKKi8KTE9DVkFMKExPQ0FMRV9JREFURSwiMSIpCi8qCkxPQ1ZBTChMT0NBTEVfSUxEQVRFKQoqLwpMT0NWQUwoTE9DQUxFX0lUSU1FLCIxIikKLyoKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOKQpMT0NWQUwoTE9DQUxFX0lDRU5UVVJZKQoqLwpMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQovKgpMT0NWQUwoTE9DQUxFX0lEQVlMWkVSTykKTE9DVkFMKExPQ0FMRV9JTU9OTFpFUk8pCkxPQ1ZBTChMT0NBTEVfUzExNTkpCkxPQ1ZBTChMT0NBTEVfUzIzNTkpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkKTE9DVkFMKExPQ0FMRV9JT1BUSU9OQUxDQUxFTkRBUikKTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikKKi8KTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBvbmllZHppYVwyNjNlayIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJXdG9yZWsiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiU3JvZGEiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiQ3p3YXJ0ZWsiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiUGlceEI5dGVrIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIlNvYm90YSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJOaWVkemllbGEiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUG8iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiV3QiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiU3IiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiQ3oiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiUHQiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiU28iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiTmkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJTdHljemVceEYxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiTHV0eSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnplYyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkt3aWVjaWVceEYxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFqIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiQ3plcndpZWMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJMaXBpZWMiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJTaWVycGllXHhGMSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIldyemVzaWVceEYxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIlBhXDIzN2R6aWVybmlrIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIkxpc3RhcGFkIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkdydWR6aWVceEYxIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIlN0eSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIkx1dCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkt3aSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIk1haiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkN6ZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkxpcCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIlNpZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIldyeiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJQYVx4OUYiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTGlzIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkdydSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQovKgpMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTikKTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04pCkxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUykKTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSkKTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UpCiovCglkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwoJfQogICAgYnJlYWs7ICAvKiBMQU5HKFBsKSAqLwoKICAgIGNhc2UgTEFOR19QbzoKICAgIAlzd2l0Y2ggKExDVHlwZSkgewpMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwgIjA0MTYiKQpMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwgIlBvcnR1Z3VcMzUycyAoQnJhc2lsKSIpCkxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCAiUHJvdHVndWVzZSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiUE9SIikKTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJQb3J0dWd1XDM1MnMiKQpMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCkxPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJCcmFzaWwiKQpMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCAiQnJhemlsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsICJCUkEiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIkJyYXNpbCIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjEiKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI0MzciKQpMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCkxPQ1ZBTChMT0NBTEVfU0xJU1QsICI7IikKTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwgIjEiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCAiLCIpCkxPQ1ZBTChMT0NBTEVfU1RIT1VTQU5ELCAiLiIpCkxPQ1ZBTChMT0NBTEVfU0dST1VQSU5HLCAiMzswIikKTE9DVkFMKExPQ0FMRV9JRElHSVRTLCAiMiIpCkxPQ1ZBTChMT0NBTEVfSUxaRVJPLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUiwgIjEiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsICIwMTIzNDU2Nzg5IikKTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksICIkIikKTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIlVTRCIpCkxPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsICIsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsICIuIikKTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQpMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCAiMiIpCkxPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTLCAiMiIpCkxPQ1ZBTChMT0NBTEVfSUNVUlJFTkNZLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsICIwIikKTE9DVkFMKExPQ0FMRV9TREFURSwgIi8iKQpMT0NWQUwoTE9DQUxFX1NUSU1FLCAiOiIpCkxPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwgImRkL01NL3l5IikKTE9DVkFMKExPQ0FMRV9TTE9OR0RBVEUsICJkZGRkLCBNTU1NIGRkLCB5eXl5IikKTE9DVkFMKExPQ0FMRV9TVElNRUZPUk1BVCwgImg6bW06c3MgdHQiKQpMT0NWQUwoTE9DQUxFX0lEQVRFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUxEQVRFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSVRJTUUsICIwIikKTE9DVkFMKExPQ0FMRV9JVElNRU1BUktQT1NOLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUNFTlRVUlksICIwIikKTE9DVkFMKExPQ0FMRV9JVExaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSURBWUxaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSU1PTkxaRVJPLCAiMCIpCkxPQ1ZBTChMT0NBTEVfUzExNTksICJBTSIpCkxPQ1ZBTChMT0NBTEVfUzIzNTksICJQTSIpCkxPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSwgIjEiKQpMT0NWQUwoTE9DQUxFX0lPUFRJT05BTENBTEVOREFSLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLLCAiNiIpCkxPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiwgIjAiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwgIlNlZ3VuZGEiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwgIlRlclwzNDdhIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsICJRdWFydGEiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwgIlF1aW50YSIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCAiU2V4dGEiKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwgIlNcMzQxYmFkbyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCAiRG9taW5nbyIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCAiU2VnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsICJUZXIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywgIlF1YSIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCAiUXVpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsICJTZXgiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwgIlNcMzQxYiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCAiRG9tIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwgIkphbmVpcm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCAiRmV2ZXJlaXJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywgIk1hclwzNDdvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwgIkFicmlsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwgIk1haW8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCAiSnVuaG8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCAiSnVsaG8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCAiQWdvc3RvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwgIlNldGVtYnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsICJPdXR1YnJvIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsICJOb3ZlbWJybyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCAiRGV6ZW1icm8iKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywgIiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsICJKYW4iKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCAiRmV2IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywgIk1hciIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsICJBYnIiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCAiTWFpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwgIkp1biIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsICJKdWwiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCAiQWdvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwgIlNldCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCAiT3V0IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsICJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwgIkRleiIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCAiIikKTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCkxPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiMyIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSVBPU1NFUEJZU1BBQ0UsICIwIikKTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQoJZGVmYXVsdDogZm91bmQ9MDticmVhazsKCX0KICAgIGJyZWFrOyAvKiBMQU5HKFBvKSAqLwoKY2FzZSBMQU5HX1N3OgogICAgCXN3aXRjaCAoTENUeXBlKSB7CkxPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIxZCIpCkxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJTdmVuc2thIikKTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlN3ZWRpc2giKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiU1YiKQpMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiU3ZlbnNrYSIpCkxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ1IikKTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiU1dFIikKTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3dlZGVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlNWRSIpCkxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJTdmVyaWdlIikKTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIxZCIpCkxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0NSIpCi8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCkxPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIjAiKQpMT0NWQUwoTE9DQUxFX1NERUNJTUFMLCIsIikKTE9DVkFMKExPQ0FMRV9TVEhPVVNBTkQsIi4iKQovKiBMT0NWQUwoTE9DQUxFX1NHUk9VUElORykgKi8KTE9DVkFMKExPQ0FMRV9JRElHSVRTLCIyIikKTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCi8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpCkxPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKLyogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcpICovCkxPQ1ZBTChMT0NBTEVfSUNVUlJESUdJVFMsIjIiKQovKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KTE9DVkFMKExPQ0FMRV9JQ1VSUkVOQ1ksIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdDVVJSLCI4IikKTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpCkxPQ1ZBTChMT0NBTEVfU1RJTUUsIjoiKQpMT0NWQUwoTE9DQUxFX1NTSE9SVERBVEUsImRkL01NLXl5eXkiKQpMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKQovKiBMT0NWQUwoTE9DQUxFX1NUSU1FRk9STUFUKSAqLwpMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikKLyogTE9DVkFMKExPQ0FMRV9JTERBVEUpICovCkxPQ1ZBTChMT0NBTEVfSVRJTUUsIjEiKQovKiBMT0NWQUwoTE9DQUxFX0lUSU1FTUFSS1BPU04pICovCi8qIExPQ1ZBTChMT0NBTEVfSUNFTlRVUlkpICovCkxPQ1ZBTChMT0NBTEVfSVRMWkVSTywiMSIpCi8qIExPQ1ZBTChMT0NBTEVfSURBWUxaRVJPKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpCkxPQ1ZBTChMT0NBTEVfUzIzNTksICIiKQovKiBMT0NWQUwoTE9DQUxFX0lDQUxFTkRBUlRZUEUpICovCi8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCi8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwovKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJN5W5kYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiVGlzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk9uc2RhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJUb3JzZGFnIikKTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIkZyZWRhZyIpCkxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJM9nJkYWciKQpMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU/ZuZGFnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIk3lIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIlRpIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIlRvIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIkZyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz2IikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIlP2IikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiSmFudWFyaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIkZlYnJ1YXJpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiTWFycyIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWFqIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSnVuaSIpCkxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIkp1bGkiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJBdWd1c3RpIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiU2VwdGVtYmVyIikKTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIk9rdG9iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTm92ZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiRGVjZW1iZXIiKQpMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSmFuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiRmViIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTWFyIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiQXByIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWFqIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiSnVuIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiSnVsIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQXVnIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiU2VwIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIk9rdCIpCkxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJOb3YiKQpMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiRGVjIikKTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCkxPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCkxPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQpMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIjMiKQpMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIjMiKQpMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQpMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFLCAiMCIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiMSIpCkxPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKCWRlZmF1bHQ6IGZvdW5kPTA7YnJlYWs7Cgl9CiAgICBicmVhazsgLyogTEFORyhTdykgKi8KCi8qSW5zZXJ0IG90aGVyIGxhbmd1YWdlcyBoZXJlKi8KCiAgICBkZWZhdWx0OgogICAgCWZvdW5kPTA7CglicmVhazsKICAgIH0gIC8qIHN3aXRjaCAqLwoKCWlmKCFmb3VuZCkgewoJCWZwcmludGYoc3RkZXJyLCInJXMnIG5vdCBzdXBwb3J0ZWQgZm9yIHlvdXIgbGFuZ3VhZ2UuXG4iLAoJCQlyZXRTdHJpbmcpOwoJCXJldFN0cmluZyA9ICI8V0lORS1OTFMtdW5rbm93bj4iOwoJCS8qcmV0dXJuIDA7Ki8KCX0KCWlmIChidWYpCgkJbHN0cmNweW4zMkEoYnVmLHJldFN0cmluZyxsZW4pOwoJcmV0dXJuIHN0cmxlbihyZXRTdHJpbmcpKzE7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgIEdldExvY2FsZUluZm8zMlcgICAgICAgICAgICAgKEtFUk5FTDMyLjIzMCkKICogSXMgdGhlIGxhc3QgcGFyYW1ldGVyIHJlYWxseSBXT1JEIGZvciBXaW4xNj8KICovCklOVDMyIFdJTkFQSSBHZXRMb2NhbGVJbmZvMzJXKExDSUQgbGNpZCxMQ1RZUEUgTENUeXBlLExQV1NUUiB3YnVmLElOVDMyIGxlbikKewoJTFBTVFIgYWJ1ZiA9IChMUFNUUilIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLGxlbik7CgoJSU5UMzIgbiA9IEdldExvY2FsZUluZm8zMkEobGNpZCwgTENUeXBlLCBhYnVmLCBsZW4pOwoJaWYgKHdidWYpCgkJbHN0cmNweW5BdG9XKHdidWYsYWJ1ZixsZW4pOwoJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGFidWYpOwoJcmV0dXJuIG47Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgQ29tcGFyZVN0cmluZzE2ICAgICAgIChPTEUyTkxTLjgpCiAqLwpVSU5UMTYgV0lOQVBJIENvbXBhcmVTdHJpbmcxNihEV09SRCBsY2lkLERXT1JEIGZkd1N0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgczEsRFdPUkQgbDEsTFBDU1RSIHMyLERXT1JEIGwyKQp7CglyZXR1cm4gKFVJTlQxNilDb21wYXJlU3RyaW5nMzJBKGxjaWQsZmR3U3R5bGUsczEsbDEsczIsbDIpOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIENvbXBhcmVTdHJpbmczMkEgICAoS0VSTkVMMzIuMjkpCiAqIFRoaXMgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgbG9jYWxlCiAqIEZJWE1FCiAqLwpVSU5UMzIgV0lOQVBJIENvbXBhcmVTdHJpbmczMkEoRFdPUkQgbGNpZCwgRFdPUkQgZmR3U3R5bGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSIHMxLCBEV09SRCBsMSwgTFBDU1RSIHMyLERXT1JEIGwyKQp7CglpbnQgbGVuLHJldDsKCWlmKGZkd1N0eWxlICYgTk9STV9JR05PUkVOT05TUEFDRSkKCXsKCQlmcHJpbnRmKHN0ZG5pbXAsICJDb21wYXJlU3RyaW5nQTogSUdOT1JFTk9OU1BBQ0Ugbm90IHN1cHBydGVkXG4iKTsKCX0KCWlmKGZkd1N0eWxlICYgTk9STV9JR05PUkVTWU1CT0xTKQoJCWZwcmludGYoc3RkbmltcCwgIkNvbXBhcmVTdHJpbmdBOiBJR05PUkVTWU1CT0xTIG5vdCBzdXBwb3J0ZWRcbiIpOwoJLyogSXMgc3RyY21wIGRlZmF1bHRpbmcgdG8gc3RyaW5nIHNvcnQgb3IgdG8gd29yZCBzb3J0Pz8gKi8KCS8qIEZJWE1FOiBIYW5kbGUgTk9STV9TVFJJTkdTT1JUICovCglsMSA9IChsMT09LTEpP3N0cmxlbihzMSk6bDE7CglsMiA9IChsMj09LTEpP3N0cmxlbihzMik6bDI7CglsZW4gPSBsMTxsMiA/IGwxOmwyOwoJcmV0ID0gKGZkd1N0eWxlICYgTk9STV9JR05PUkVDQVNFKSA/CgkJbHN0cm5jbXBpMzJBKHMxLHMyLGxlbikJOiBsc3RybmNtcDMyQShzMSxzMixsZW4pOwoJLyogbm90IGVxdWFsLCByZXR1cm4gMSBvciAzICovCglpZihyZXQhPTApcmV0dXJuIHJldCsyOwoJLyogc2FtZSBsZW4sIHJldHVybiAyICovCglpZihsMT09bDIpcmV0dXJuIDI7CgkvKiB0aGUgbG9uZ2VyIG9uZSBpcyBsZXhpY2FsbHkgZ3JlYXRlciAqLwoJcmV0dXJuIChsMTxsMik/IDEgOiAzOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIENvbXBhcmVTdHJpbmczMlcgICAgICAgKEtFUk5FTDMyLjMwKQogKiBUaGlzIGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIGxvY2FsZQogKiBGSVhNRQogKi8KVUlOVDMyIFdJTkFQSSBDb21wYXJlU3RyaW5nMzJXKERXT1JEIGxjaWQsIERXT1JEIGZkd1N0eWxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQ1dTVFIgczEsIERXT1JEIGwxLCBMUENXU1RSIHMyLERXT1JEIGwyKQp7CglpbnQgbGVuLHJldDsKCWlmKGZkd1N0eWxlICYgTk9STV9JR05PUkVOT05TUEFDRSkKCQlmcHJpbnRmKHN0ZG5pbXAsIkNvbXBhcmVTdHJpbmdXOklHTk9SRU5PTlNQQUNFIG5vdCBzdXBwcnRlZFxuIik7CglpZihmZHdTdHlsZSAmIE5PUk1fSUdOT1JFU1lNQk9MUykKCQlmcHJpbnRmKHN0ZG5pbXAsIkNvbXBhcmVTdHJpbmdXOklHTk9SRVNZTUJPTFMgbm90IHN1cHBvcnRlZFxuIik7CgoJLyogSXMgc3RyY21wIGRlZmF1bHRpbmcgdG8gc3RyaW5nIHNvcnQgb3IgdG8gd29yZCBzb3J0Pz8gKi8KCS8qIEZJWE1FOiBIYW5kbGUgTk9STV9TVFJJTkdTT1JUICovCglsMSA9IChsMT09LTEpP2xzdHJsZW4zMlcoczEpOmwxOwoJbDIgPSAobDI9PS0xKT9sc3RybGVuMzJXKHMyKTpsMjsKCWxlbiA9IGwxPGwyID8gbDE6bDI7CglyZXQgPSAoZmR3U3R5bGUgJiBOT1JNX0lHTk9SRUNBU0UpID8KCQlsc3RybmNtcGkzMlcoczEsczIsbGVuKQk6IGxzdHJuY21wMzJXKHMxLHMyLGxlbik7CgkvKiBub3QgZXF1YWwsIHJldHVybiAxIG9yIDMgKi8KCWlmKHJldCE9MCkgcmV0dXJuIHJldCsyOwoJLyogc2FtZSBsZW4sIHJldHVybiAyICovCglpZihsMT09bDIpIHJldHVybiAyOwoJLyogdGhlIGxvbmdlciBvbmUgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgKi8KCXJldHVybiAobDE8bDIpPyAxIDogMzsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBTZXRMb2NhbEluZm9BICAgICAgIChLRVJORUwzMi40OTkpCiAqLwpCT09MMTYgV0lOQVBJIFNldExvY2FsZUluZm9BKERXT1JEIGxjaWQsIERXT1JEIGxjdHlwZSwgTFBDU1RSIGRhdGEpCnsKICAgIGZwcmludGYoc3RkbmltcCwiU2V0TG9jYWxlSW5mb0EoJWxkLCVsZCwlcylcbiIsbGNpZCxsY3R5cGUsZGF0YSk7CiAgICByZXR1cm4gVFJVRTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBJc1ZhbGlkTG9jYWxlICAgICAgIChLRVJORUwzMi4zNjEpCiAqLwpCT09MMzIgV0lOQVBJIElzVmFsaWRMb2NhbGUoTENJRCBsY2lkLERXT1JEIGZsYWdzKQp7CgkvKiB3ZSBzdXBwb3J0IEFOWSBsYW5ndWFnZS4gV2VsbCwgYXQgbGVhc3Qgc2F5IHRoYXQuLi4qLwoJcmV0dXJuIFRSVUU7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgRW51bVN5c3RlbUxvY2FsZXMzMlcgICAgICAgICAgICAgICAgKEtFUk5FTDMyLjkzKQogKi8KQk9PTDMyIFdJTkFQSSBFbnVtU3lzdGVtTG9jYWxlczMyVyggTE9DQUxFX0VOVU1QUk9DMzJXIGxwZm5Mb2NhbGVFbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBmbGFncyApCnsKCWludAlpOwoJQk9PTDMyCXJldDsKCVdDSEFSCWJ1ZmZlclsyMDBdOwoJSEtFWQl4aGtleTsKCglUUkFDRSh3aW4zMiwiKCVwLCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgICAgIGxwZm5Mb2NhbGVFbnVtLGZsYWdzICk7CgkvKiBzZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBXaW45NSByZWdpc3RyeSBlbnRyaWVzLi4uLiAqLwoJaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ09wZW5LZXkzMkEoSEtFWV9MT0NBTF9NQUNISU5FLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwiLCZ4aGtleSkpIHsKCQlpPTA7CgkJd2hpbGUgKDEpIHsKCQkJaWYgKEVSUk9SX1NVQ0NFU1MhPVJlZ0VudW1LZXkzMlcoeGhrZXksaSxidWZmZXIsc2l6ZW9mKGJ1ZmZlcikpKQoJCQkJYnJlYWs7CiAgICAgICAgICAgIAkJaWYgKCFscGZuTG9jYWxlRW51bShidWZmZXIpKQoJCQkJYnJlYWs7CgkJCWkrKzsKCQl9CgkJUmVnQ2xvc2VLZXkoeGhrZXkpOwoJCXJldHVybiBUUlVFOwoJfQoKCWk9MDsKCXdoaWxlIChsYW5ndWFnZXNbaV0ubGFuZ25hbWUhPU5VTEwpCiAgICAgICAgewogICAgICAgICAgICBMUFdTVFIgY3A7CgkgICAgY2hhciAgIHhidWZmZXJbMTBdOwogIAkKCSAgICBzcHJpbnRmKHhidWZmZXIsIiUwOGx4IiwoRFdPUkQpbGFuZ3VhZ2VzW2ldLmxhbmdpZCk7CgoJICAgIGNwID0gSEVBUF9zdHJkdXBBdG9XKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCB4YnVmZmVyICk7CiAgICAgICAgICAgIHJldCA9IGxwZm5Mb2NhbGVFbnVtKGNwKTsKICAgICAgICAgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGNwICk7CiAgICAgICAgICAgIGlmICghcmV0KSBicmVhazsKICAgICAgICAgICAgaSsrOwoJfQoJcmV0dXJuIFRSVUU7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgRW51bVN5c3RlbUxvY2FsZXMzMkEgICAgICAgICAgICAgICAgKEtFUk5FTDMyLjkyKQogKi8KQk9PTDMyIFdJTkFQSSBFbnVtU3lzdGVtTG9jYWxlczMyQShMT0NBTEVfRU5VTVBST0MzMkEgbHBmbkxvY2FsZUVudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZmxhZ3MpCnsKCWludAlpOwoJQ0hBUglidWZmZXJbMjAwXTsKCUhLRVkJeGhrZXk7CgoJVFJBQ0Uod2luMzIsIiglcCwlMDhseClcbiIsCgkJbHBmbkxvY2FsZUVudW0sZmxhZ3MKCSk7CglpZiAoRVJST1JfU1VDQ0VTUz09UmVnT3BlbktleTMyQShIS0VZX0xPQ0FMX01BQ0hJTkUsIlxcU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcY29udHJvbFxcTmxzXFxMb2NhbGVcXCIsJnhoa2V5KSkgewoJCWk9MDsKCQl3aGlsZSAoMSkgewoJCQlpZiAoRVJST1JfU1VDQ0VTUyE9UmVnRW51bUtleTMyQSh4aGtleSxpLGJ1ZmZlcixzaXplb2YoYnVmZmVyKSkpCgkJCQlicmVhazsKICAgICAgICAgICAgCQlpZiAoIWxwZm5Mb2NhbGVFbnVtKGJ1ZmZlcikpCgkJCQlicmVhazsKCQkJaSsrOwoJCX0KCQlSZWdDbG9zZUtleSh4aGtleSk7CgkJcmV0dXJuIFRSVUU7Cgl9CglpPTA7Cgl3aGlsZSAobGFuZ3VhZ2VzW2ldLmxhbmduYW1lIT1OVUxMKSB7CgkJc3ByaW50ZihidWZmZXIsIiUwOGx4IiwoRFdPUkQpbGFuZ3VhZ2VzW2ldLmxhbmdpZCk7CgkJaWYgKCFscGZuTG9jYWxlRW51bShidWZmZXIpKQoJCQlicmVhazsKCQlpKys7Cgl9CglyZXR1cm4gVFJVRTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICBHZXRTdHJpbmdUeXBlQSAgICAgICAgICAgICAgICAoT0xFMk5MUy43KQogKi8KQk9PTDE2IFdJTkFQSSBHZXRTdHJpbmdUeXBlMTYoTENJRCBsb2NhbGUsRFdPUkQgZHdJbmZvVHlwZSxMUENTVFIgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQxNiBjY2hTcmMsTFBXT1JEIGNoYXJ0eXBlKQp7CglyZXR1cm4gR2V0U3RyaW5nVHlwZUV4MzJBKGxvY2FsZSxkd0luZm9UeXBlLHNyYyxjY2hTcmMsY2hhcnR5cGUpOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgR2V0U3RyaW5nVHlwZUEgICAgICAgICAgICAgICAgKEtFUk5FTDMyLjI3NykKICovCkJPT0wzMiBXSU5BUEkgR2V0U3RyaW5nVHlwZTMyQShMQ0lEIGxvY2FsZSxEV09SRCBkd0luZm9UeXBlLExQQ1NUUiBzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjY2hTcmMsTFBXT1JEIGNoYXJ0eXBlKQp7CglyZXR1cm4gR2V0U3RyaW5nVHlwZUV4MzJBKGxvY2FsZSxkd0luZm9UeXBlLHNyYyxjY2hTcmMsY2hhcnR5cGUpOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgR2V0U3RyaW5nVHlwZUV4QSAgICAgICAgICAgICAgICAoS0VSTkVMMzIuMjc2KQogKi8KQk9PTDMyIFdJTkFQSSBHZXRTdHJpbmdUeXBlRXgzMkEoTENJRCBsb2NhbGUsRFdPUkQgZHdJbmZvVHlwZSxMUENTVFIgc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBjY2hTcmMsTFBXT1JEIGNoYXJ0eXBlKQp7CglpbnQJaTsKCglzd2l0Y2ggKGR3SW5mb1R5cGUpIHsKCWNhc2UgQ1RfQ1RZUEUyOgoJCWZwcmludGYoc3RkZXJyLCJHZXRTdHJpbmdUeXBlMzJBOkNUX0NUWVBFMiBub3Qgc3VwcG9ydGVkLlxuIik7CgkJcmV0dXJuIEZBTFNFOwoJY2FzZSBDVF9DVFlQRTM6CgkJZnByaW50ZihzdGRlcnIsIkdldFN0cmluZ1R5cGUzMkE6Q1RfQ1RZUEUzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKCQlyZXR1cm4gRkFMU0U7CglkZWZhdWx0OmJyZWFrOwoJfQoJaWYgKGNjaFNyYz09LTEpCgkJY2NoU3JjPWxzdHJsZW4zMkEoc3JjKTsKCWZvciAoaT0wO2k8Y2NoU3JjO2krKykgewoJCWNoYXJ0eXBlW2ldID0gMDsKCQlpZiAoaXNkaWdpdChzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfRElHSVQ7CgkJaWYgKGlzYWxwaGEoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0FMUEhBOwoJCWlmIChpc2xvd2VyKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9MT1dFUjsKCQlpZiAoaXN1cHBlcihzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfVVBQRVI7CgkJaWYgKGlzc3BhY2Uoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX1NQQUNFOwoJCWlmIChpc3B1bmN0KHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9QVU5DVDsKCQlpZiAoaXNjbnRybChzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQ05UUkw7Ci8qIEZJWE1FOiBpc2JsYW5rKCkgaXMgYSBHTlUgZXh0ZW5zaW9uICovCi8qCQlpZiAoaXNibGFuayhzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQkxBTks7ICovCiAgICAgICAgICAgICAgICBpZiAoKHNyY1tpXSA9PSAnICcpIHx8IChzcmNbaV0gPT0gJ1x0JykpIGNoYXJ0eXBlW2ldfD1DMV9CTEFOSzsKCQkvKiBDMV9YRElHSVQgKi8KCX0KCXJldHVybiBUUlVFOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgIEdldFN0cmluZ1R5cGVXICAgICAgICAgICAgICAgIChLRVJORUwzMi4yNzkpCiAqIFllcywgdGhpcyBpcyBtaXNzaW5nIExDSUQgbG9jYWxlLiBNUyBmYXVsdC4KICovCkJPT0wzMiBXSU5BUEkgR2V0U3RyaW5nVHlwZTMyVyhEV09SRCBkd0luZm9UeXBlLExQQ1dTVFIgc3JjLElOVDMyIGNjaFNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQV09SRCBjaGFydHlwZSkKewoJcmV0dXJuIEdldFN0cmluZ1R5cGVFeDMyVygwLypkZWZhdWx0bG9jYWxlKi8sZHdJbmZvVHlwZSxzcmMsY2NoU3JjLGNoYXJ0eXBlKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICBHZXRTdHJpbmdUeXBlVyAgICAgICAgICAgICAgICAoS0VSTkVMMzIuMjc4KQogKiBGSVhNRTogdW5pY29kZSBjaGFycyBhcmUgYXNzdW1lZCBjaGFycwogKi8KQk9PTDMyIFdJTkFQSSBHZXRTdHJpbmdUeXBlRXgzMlcoTENJRCBsb2NhbGUsRFdPUkQgZHdJbmZvVHlwZSxMUENXU1RSIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY2NoU3JjLExQV09SRCBjaGFydHlwZSkKewoJaW50CWk7CgoJc3dpdGNoIChkd0luZm9UeXBlKSB7CgljYXNlIENUX0NUWVBFMjoKCQlmcHJpbnRmKHN0ZGVyciwiR2V0U3RyaW5nVHlwZTMyVzpDVF9DVFlQRTIgbm90IHN1cHBvcnRlZC5cbiIpOwoJCXJldHVybiBGQUxTRTsKCWNhc2UgQ1RfQ1RZUEUzOgoJCWZwcmludGYoc3RkZXJyLCJHZXRTdHJpbmdUeXBlMzJXOkNUX0NUWVBFMyBub3Qgc3VwcG9ydGVkLlxuIik7CgkJcmV0dXJuIEZBTFNFOwoJZGVmYXVsdDpicmVhazsKCX0KCWlmIChjY2hTcmM9PS0xKQoJCWNjaFNyYz1sc3RybGVuMzJXKHNyYyk7Cglmb3IgKGk9MDtpPGNjaFNyYztpKyspIHsKCQljaGFydHlwZVtpXSA9IDA7CgkJaWYgKGlzZGlnaXQoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0RJR0lUOwoJCWlmIChpc2FscGhhKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9BTFBIQTsKCQlpZiAoaXNsb3dlcihzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfTE9XRVI7CgkJaWYgKGlzdXBwZXIoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX1VQUEVSOwoJCWlmIChpc3NwYWNlKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9TUEFDRTsKCQlpZiAoaXNwdW5jdChzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfUFVOQ1Q7CgkJaWYgKGlzY250cmwoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0NOVFJMOwovKiBGSVhNRTogaXNibGFuaygpIGlzIGEgR05VIGV4dGVuc2lvbiAqLwovKgkJaWYgKGlzYmxhbmsoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0JMQU5LOyAqLwogICAgICAgICAgICAgICAgaWYgKChzcmNbaV0gPT0gJyAnKSB8fCAoc3JjW2ldID09ICdcdCcpKSBjaGFydHlwZVtpXXw9QzFfQkxBTks7CgkJLyogQzFfWERJR0lUICovCgl9CglyZXR1cm4gVFJVRTsKfQoKLyogVmVyTGFuZ3VhZ2VOYW1lCQkJCVtWRVIuMTBdICovCkRXT1JEIFdJTkFQSSBWZXJMYW5ndWFnZU5hbWUxNihVSU5UMTYgbGFuZ2lkLExQU1RSIGxhbmduYW1lLFVJTlQxNiBsYW5nbmFtZWxlbikKewoJaW50CWk7CgljaGFyCSpidWY7CgoJVFJBQ0UodmVyLCIoJWQsJXAsJWQpXG4iLGxhbmdpZCxsYW5nbmFtZSxsYW5nbmFtZWxlbik7CgkvKiBGaXJzdCwgY2hlY2sgXFN5c3RlbVxDdXJyZW50Q29udHJvbFNldFxjb250cm9sXE5sc1xMb2NhbGVcPGxhbmdpZD4KCSAqIGZyb20gdGhlIHJlZ2lzdHJ5LiAKCSAqLwoJYnVmPShjaGFyKiltYWxsb2Moc3RybGVuKCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwiKSs5KTsKCXNwcmludGYoYnVmLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwlMDh4IixsYW5naWQpOwoJaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ1F1ZXJ5VmFsdWUxNihIS0VZX0xPQ0FMX01BQ0hJTkUsYnVmLGxhbmduYW1lLChMUERXT1JEKSZsYW5nbmFtZWxlbikpIHsKCQlsYW5nbmFtZVtsYW5nbmFtZWxlbi0xXT0nXDAnOwoJCXJldHVybiBsYW5nbmFtZWxlbjsKCX0KCS8qIGlmIHRoYXQgZmFpbHMsIHVzZSB0aGUgaW50ZXJhbCB0YWJsZSAqLwoJZm9yIChpPTA7bGFuZ3VhZ2VzW2ldLmxhbmdpZCE9MDtpKyspCgkJaWYgKGxhbmdpZD09bGFuZ3VhZ2VzW2ldLmxhbmdpZCkKCQkJYnJlYWs7CglzdHJuY3B5KGxhbmduYW1lLGxhbmd1YWdlc1tpXS5sYW5nbmFtZSxsYW5nbmFtZWxlbik7CglsYW5nbmFtZVtsYW5nbmFtZWxlbi0xXT0nXDAnOwoJcmV0dXJuIHN0cmxlbihsYW5ndWFnZXNbaV0ubGFuZ25hbWUpOwp9CgovKiBWZXJMYW5ndWFnZU5hbWVBCQkJCVtWRVJTSU9OLjldICovCkRXT1JEIFdJTkFQSSBWZXJMYW5ndWFnZU5hbWUzMkEoVUlOVDMyIGxhbmdpZCxMUFNUUiBsYW5nbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbGFuZ25hbWVsZW4pCnsKCXJldHVybiBWZXJMYW5ndWFnZU5hbWUxNihsYW5naWQsbGFuZ25hbWUsbGFuZ25hbWVsZW4pOwp9CgovKiBWZXJMYW5ndWFnZU5hbWVXCQkJCVtWRVJTSU9OLjEwXSAqLwpEV09SRCBXSU5BUEkgVmVyTGFuZ3VhZ2VOYW1lMzJXKFVJTlQzMiBsYW5naWQsTFBXU1RSIGxhbmduYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiBsYW5nbmFtZWxlbikKewoJaW50CWk7CgljaGFyCWJ1ZmZlcls4MF07CglMUFdTVFIJa2V5bmFtZTsKCgkvKiBGaXJzdCwgY2hlY2sgXFN5c3RlbVxDdXJyZW50Q29udHJvbFNldFxjb250cm9sXE5sc1xMb2NhbGVcPGxhbmdpZD4KCSAqIGZyb20gdGhlIHJlZ2lzdHJ5LiAKCSAqLwoJc3ByaW50ZihidWZmZXIsIlxcU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcY29udHJvbFxcTmxzXFxMb2NhbGVcXCUwOHgiLGxhbmdpZCk7CglrZXluYW1lID0gSEVBUF9zdHJkdXBBdG9XKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBidWZmZXIgKTsKCWlmIChFUlJPUl9TVUNDRVNTPT1SZWdRdWVyeVZhbHVlMzJXKEhLRVlfTE9DQUxfTUFDSElORSxrZXluYW1lLGxhbmduYW1lLChMUERXT1JEKSZsYW5nbmFtZWxlbikpIHsKCQlIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwga2V5bmFtZSApOwoJCXJldHVybiBsYW5nbmFtZWxlbjsKCX0KICAgICAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwga2V5bmFtZSApOwoJLyogaWYgdGhhdCBmYWlscywgdXNlIHRoZSBpbnRlcmFsIHRhYmxlICovCglmb3IgKGk9MDtsYW5ndWFnZXNbaV0ubGFuZ2lkIT0wO2krKykKCQlpZiAobGFuZ2lkPT1sYW5ndWFnZXNbaV0ubGFuZ2lkKQoJCQlicmVhazsKICAgICAgICBsc3RyY3B5QXRvVyggbGFuZ25hbWUsIGxhbmd1YWdlc1tpXS5sYW5nbmFtZSApOwoJcmV0dXJuIHN0cmxlbihsYW5ndWFnZXNbaV0ubGFuZ25hbWUpOyAvKiBzYW1lIGFzIHN0cmxlblcobGFuZ25hbWUpOyAqLwp9CgoKSU5UMzIgV0lOQVBJIExDTWFwU3RyaW5nMzJBKAoJTENJRCBsY2lkLERXT1JEIG1hcGZsYWdzLExQQ1NUUiBzcmNzdHIsSU5UMzIgc3JjbGVuLExQU1RSIGRzdHN0ciwKCUlOVDMyIGRzdGxlbgopIHsKCWludAlpLGxlbjsKCglUUkFDRShzdHJpbmcsIigweCUwNGx4LDB4JTA4bHgsJXMsJWQsJXAsJWQpXG4iLAoJCWxjaWQsbWFwZmxhZ3Msc3Jjc3RyLHNyY2xlbixkc3RzdHIsZHN0bGVuKTsKCWlmICghZHN0bGVuIHx8ICFkc3RzdHIpIHsKCQlkc3RzdHIgPSAoTFBTVFIpc3Jjc3RyOwoJfQoJaWYgKCFzcmNsZW4pIHNyY2xlbiA9IHN0cmxlbihzcmNzdHIpOwoJaWYgKCFkc3RsZW4pIGRzdGxlbiA9IHN0cmxlbihkc3RzdHIpOwoJbGVuID0gZHN0bGVuOwoJaWYgKHNyY2xlbiA8IGxlbikKCQlsZW4gPSBzcmNsZW47CglpZiAobWFwZmxhZ3MgJiBMQ01BUF9MT1dFUkNBU0UpIHsKCQlmb3IgKGk9MDtpPGxlbjtpKyspCgkJCWRzdHN0cltpXT10b2xvd2VyKHNyY3N0cltpXSk7CgkJbWFwZmxhZ3MgJj0gfkxDTUFQX0xPV0VSQ0FTRTsKCX0KCWlmIChtYXBmbGFncyAmIExDTUFQX1VQUEVSQ0FTRSkgewoJCWZvciAoaT0wO2k8bGVuO2krKykKCQkJZHN0c3RyW2ldPXRvdXBwZXIoc3Jjc3RyW2ldKTsKCQltYXBmbGFncyAmPSB+TENNQVBfVVBQRVJDQVNFOwoJfQoJaWYgKG1hcGZsYWdzKQoJICB7CgkgICAgZnByaW50ZihzdGRlcnIsCgkJICAgICJMQ01hcFN0cmluZ0EoMHglMDRseCwweCUwOGx4LCVwLCVkLCVwLCVkKVxuIiwKCQkgICAgbGNpZCxtYXBmbGFncyxzcmNzdHIsc3JjbGVuLGRzdHN0cixkc3RsZW4pOwoJCWZwcmludGYoc3RkZXJyLCIJdW5pbXBsZW1lbnRlZCBmbGFnczogMHglMDhseFxuIixtYXBmbGFncyk7CgkgIH0KCXJldHVybiBsZW47Cn0KCi8qIEZJWE1FOiBpbXBsZW1lbnQgZXZlcnlodGluZyAmIGNvcnJlY3QgKi8KCklOVDMyIFdJTkFQSSBMQ01hcFN0cmluZzMyVygKCUxDSUQgbGNpZCxEV09SRCBtYXBmbGFncyxMUENXU1RSIHNyY3N0cixJTlQzMiBzcmNsZW4sTFBXU1RSIGRzdHN0ciwKCUlOVDMyIGRzdGxlbgopIHsKCWludAlpLGxlbjsKCglUUkFDRShzdHJpbmcsIigweCUwNGx4LDB4JTA4bHgsJXAsJWQsJXAsJWQpXG4iLAoJCWxjaWQsbWFwZmxhZ3Msc3Jjc3RyLHNyY2xlbixkc3RzdHIsZHN0bGVuCgkpOwoJaWYgKCFkc3RsZW4gfHwgIWRzdHN0cikgewoJCWRzdHN0ciA9IChMUFdTVFIpc3Jjc3RyOwoJfQoJaWYgKCFzcmNsZW4pIHNyY2xlbiA9IGxzdHJsZW4zMlcoc3Jjc3RyKTsKCWlmICghZHN0bGVuKSBkc3RsZW4gPSBsc3RybGVuMzJXKGRzdHN0cik7CglsZW4gPSBkc3RsZW47CglpZiAoc3JjbGVuIDwgbGVuKQoJCWxlbiA9IHNyY2xlbjsKCWlmIChtYXBmbGFncyAmIExDTUFQX0xPV0VSQ0FTRSkgewoJCWZvciAoaT0wO2k8bGVuO2krKykKCQkJZHN0c3RyW2ldPXRvbG93ZXIoc3Jjc3RyW2ldKTsKCQltYXBmbGFncyAmPSB+TENNQVBfTE9XRVJDQVNFOwoJfQoJaWYgKG1hcGZsYWdzICYgTENNQVBfVVBQRVJDQVNFKSB7CgkJZm9yIChpPTA7aTxsZW47aSsrKQoJCQlkc3RzdHJbaV09dG91cHBlcihzcmNzdHJbaV0pOwoJCW1hcGZsYWdzICY9IH5MQ01BUF9VUFBFUkNBU0U7Cgl9CglpZiAobWFwZmxhZ3MpCgkgIHsKCSAgICBmcHJpbnRmKHN0ZGVyciwKCQkgICAgIkxDTWFwU3RyaW5nVygweCUwNGx4LDB4JTA4bHgsJXAsJWQsJXAsJWQpXG4iLAoJCSAgICBsY2lkLG1hcGZsYWdzLHNyY3N0cixzcmNsZW4sZHN0c3RyLGRzdGxlbik7CgkJZnByaW50ZihzdGRlcnIsIgl1bmltcGxlbWVudGVkIGZsYWdzOiAweCUwOGx4XG4iLG1hcGZsYWdzKTsKCSAgfQoJcmV0dXJuIGxlbjsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqICBPTEVfR2V0Rm9ybWF0QSgpCiAqICBPTEVfR2V0Rm9ybWF0VygpCgogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHN0dWZmIGZvciBHZXREYXRlRm9ybWF0KCkgYW5kIAogR2V0VGltZUZvcm1hdCgpLgoKICBkICAgIHNpbmdsZS1kaWdpdCAobm8gbGVhZGluZyB6ZXJvKSBkYXkgKG9mIG1vbnRoKQogIGRkICAgdHdvLWRpZ2l0IGRheSAob2YgbW9udGgpCiAgZGRkICBzaG9ydCBkYXktb2Ytd2VlayBuYW1lCiAgZGRkZCBsb25nIGRheS1vZi13ZWVrIG5hbWUKICBNICAgIHNpbmdsZS1kaWdpdCBtb250aAogIE1NICAgdHdvLWRpZ2l0IG1vbnRoCiAgTU1NICBzaG9ydCBtb250aCBuYW1lCiAgTU1NTSBmdWxsIG1vbnRoIG5hbWUKICB5ICAgIHR3by1kaWdpdCB5ZWFyLCBubyBsZWFkaW5nIDAKICB5eSAgIHR3by1kaWdpdCB5ZWFyCiAgeXl5eSBmb3VyLWRpZ2l0IHllYXIKICBnZyAgIGVyYSBzdHJpbmcKICBoICAgIGhvdXJzIHdpdGggbm8gbGVhZGluZyB6ZXJvICgxMi1ob3VyKQogIGhoICAgaG91cnMgd2l0aCBmdWxsIHR3byBkaWdpdHMKICBIICAgIGhvdXJzIHdpdGggbm8gbGVhZGluZyB6ZXJvICgyNC1ob3VyKQogIEhIICAgaG91cnMgd2l0aCBmdWxsIHR3byBkaWdpdHMKICBtICAgIG1pbnV0ZXMgd2l0aCBubyBsZWFkaW5nIHplcm8KICBtbSAgIG1pbnV0ZXMgd2l0aCBmdWxsIHR3byBkaWdpdHMKICBzICAgIHNlY29uZHMgd2l0aCBubyBsZWFkaW5nIHplcm8KICBzcyAgIHNlY29uZHMgd2l0aCBmdWxsIHR3byBkaWdpdHMKICB0ICAgIHRpbWUgbWFya2VyIChBIG9yIFApCiAgdHQgICB0aW1lIG1hcmtlciAoQU0sIFBNKQogICcnICAgdXNlZCB0byBxdW90ZSBsaXRlcmFsIGNoYXJhY3RlcnMKICAnJyAgICh3aXRoaW4gYSBxdW90ZWQgc3RyaW5nKSBpbmRpY2F0ZXMgYSBsaXRlcmFsICcKCiBUaGVzZSBmdW5jdGlvbnMgUkVRVUlSRSB2YWxpZCBsb2NhbGUsIGRhdGUsICBhbmQgZm9ybWF0LiAKCiAqLwoKSU5UMzIgV0lOQVBJIE9MRV9HZXRGb3JtYXRBKExDSUQgbG9jYWxlLAoJCQkgICAgRFdPUkQgZmxhZ3MsCgkJCSAgICBMUFNZU1RFTVRJTUUgeHRpbWUsCgkJCSAgICBMUENTVFIgZm9ybWF0LCAKCQkJICAgIExQU1RSIGRhdGUsIElOVDMyIGRhdGVsZW4pCnsKICAgSU5UMzIgaW5wb3MsIG91dHBvczsKICAgaW50IGNvdW50LCB0eXBlLCBpbnF1b3RlLCBPdmVyZmxvdzsKICBjaGFyIGJ1Zls0MF07CiAgaW50IGJ1ZmxlbjsKCiAgIGNvbnN0IGNoYXIgKiBfZGdmbXRbXSA9IHsgIiVkIiwgIiUwMmQiIH07CiAgIGNvbnN0IGNoYXIgKiogZGdmbXQgPSBfZGdmbXQgLSAxOyAKCiAgIC8qIHJlcG9ydCwgZm9yIGRlYnVnZ2luZyAqLwogICBUUkFDRShvbGUsICJmdW5jKCU4eCwlOHgsIHRpbWUoZD0lZCxoPSVkLG09JWQscz0lZCksIGZtdDpcJyVzXCcgKGF0ICVwKSwgJXAgKCU5cyksIGxlbj0lbGQpXG4iLCBsb2NhbGUsIGZsYWdzLAoJCXh0aW1lLT53RGF5LCB4dGltZS0+d0hvdXIsIHh0aW1lLT53TWludXRlLCB4dGltZS0+d1NlY29uZCwKCQlmb3JtYXQsIGZvcm1hdCwgZGF0ZSwgZGF0ZSwgZGF0ZWxlbik7CiAgCiAgIC8qIGluaXRhbGl6ZSBzdGF0ZSB2YXJpYWJsZXMgYW5kIG91dHB1dCBidWZmZXIgKi8KICAgaW5wb3MgPSBvdXRwb3MgPSAwOwogICBjb3VudCA9IDA7IGlucXVvdGUgPSAwOyBPdmVyZmxvdyA9IDA7CiAgIHR5cGUgPSAnXDAnOwogICBkYXRlWzBdID0gYnVmWzBdID0gJ1wwJzsKICAgICAgCiAgIGZvciAoaW5wb3MgPSAwOzsgaW5wb3MrKykgewogICAgICAvKiBUUkFDRShvbGUsICJTVEFURSBpbnBvcz0lMmQgb3V0cG9zPSUyZCBjb3VudD0lZCBpbnF1b3RlPSVkIHR5cGU9JWMgYnVmLGRhdGUgPSAlYywlY1xuIiwgaW5wb3MsIG91dHBvcywgY291bnQsIGlucXVvdGUsIHR5cGUsIGJ1ZltpbnBvc10sIGRhdGVbb3V0cG9zXSk7ICovCiAgICAgIGlmIChpbnF1b3RlKSB7CgkgaWYgKGZvcm1hdFtpbnBvc10gPT0gJ1wnJykgewoJICAgIGlmIChmb3JtYXRbaW5wb3MrMV0gPT0gJ1wnJykgewoJICAgICAgIGlucG9zICs9IDE7CgkgICAgICAgZGF0ZVtvdXRwb3MrK10gPSAnXCcnOwoJICAgIH0gZWxzZSB7CgkgICAgICAgaW5xdW90ZSA9IDA7CgkgICAgICAgY29udGludWU7IC8qIHdlIGRpZCBub3RoaW5nIHRvIHRoZSBvdXRwdXQgKi8KCSAgICB9CgkgfSBlbHNlIGlmIChmb3JtYXRbaW5wb3NdID09ICdcMCcpIHsKCSAgICBkYXRlW291dHBvcysrXSA9ICdcMCc7CgkgICAgaWYgKG91dHBvcyA+IGRhdGVsZW4pIE92ZXJmbG93ID0gMTsKCSAgICBicmVhazsKCSB9IGVsc2UgewoJICAgIGRhdGVbb3V0cG9zKytdID0gZm9ybWF0W2lucG9zXTsKCSAgICBpZiAob3V0cG9zID4gZGF0ZWxlbikgewoJICAgICAgIE92ZXJmbG93ID0gMTsKCSAgICAgICBkYXRlW291dHBvcy0xXSA9ICdcMCc7IC8qIHRoaXMgaXMgdGhlIGxhc3QgcGxhY2Ugd2hlcmUKCQkJCQkgaXQncyBzYWZlIHRvIHdyaXRlICovCgkgICAgICAgYnJlYWs7CgkgICAgfQoJIH0KICAgICAgfSBlbHNlIGlmICggIChjb3VudCAmJiAoZm9ybWF0W2lucG9zXSAhPSB0eXBlKSkKCQkgICB8fCBjb3VudCA9PSA0CgkJICAgfHwgKGNvdW50ID09IDIgJiYgc3RyY2hyKCJnaEhtc3QiLCB0eXBlKSkgKQogICAgICAgewoJICAgIGlmICAgICAgICAgKHR5cGUgPT0gJ2QnKSB7CgkgICAgICAgaWYgICAgICAgIChjb3VudCA9PSA0KSB7CgkJICBHZXRMb2NhbGVJbmZvMzJBKGxvY2FsZSwKCQkJCSAgIExPQ0FMRV9TREFZTkFNRTEKCQkJCSAgICsgeHRpbWUtPndEYXlPZldlZWsgLSAxLAoJCQkJICAgYnVmLCBzaXplb2YoYnVmKSk7CgkgICAgICAgfSBlbHNlIGlmIChjb3VudCA9PSAzKSB7CgkJCSAgIEdldExvY2FsZUluZm8zMkEobG9jYWxlLCAKCQkJCQkgICAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAKCQkJCQkgICAgKyB4dGltZS0+d0RheU9mV2VlayAtIDEsCgkJCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwoJCSAgICAgIH0gZWxzZSB7CgkJICBzcHJpbnRmKGJ1ZiwgZGdmbXRbY291bnRdLCB4dGltZS0+d0RheSk7CgkgICAgICAgfQoJICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnTScpIHsKCSAgICAgICBpZiAoY291bnQgPT0gMykgewoJCSAgR2V0TG9jYWxlSW5mbzMyQShsb2NhbGUsIAoJCQkJICAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxCgkJCQkgICArIHh0aW1lLT53TW9udGggLSAxLAoJCQkJICAgYnVmLCBzaXplb2YoYnVmKSk7CgkgICAgICAgfSBlbHNlIGlmIChjb3VudCA9PSA0KSB7CgkJICBHZXRMb2NhbGVJbmZvMzJBKGxvY2FsZSwKCQkJCSAgIExPQ0FMRV9TTU9OVEhOQU1FMQoJCQkJICAgKyB4dGltZS0+d01vbnRoIC0gMSwKCQkJCSAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwoJCSB9IGVsc2UgewoJCSAgc3ByaW50ZihidWYsIGRnZm10W2NvdW50XSwgeHRpbWUtPndNb250aCk7CgkgICAgICAgfQoJICAgIH0gZWxzZSBpZiAodHlwZSA9PSAneScpIHsKCSAgICAgICBpZiAoY291bnQgPT0gNCkgewoJCSAgICAgIHNwcmludGYoYnVmLCAiJWQiLCB4dGltZS0+d1llYXIpOwoJICAgICAgIH0gZWxzZSBpZiAoY291bnQgPT0gMykgewoJCSAgc3RyY3B5KGJ1ZiwgInl5eSIpOwoJCSAgV0FSTihvbGUsCgkJCSAgICAgICJ1bmtub3duIGZvcm1hdCxcCmM9JWMsIG49JWRcbiIsICB0eXBlLCBjb3VudCk7CgkJIH0gZWxzZSB7CgkJICBzcHJpbnRmKGJ1ZiwgZGdmbXRbY291bnRdLCB4dGltZS0+d1llYXIgJSAxMDApOwoJICAgICAgIH0KCSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ2cnKSB7CgkgICAgICAgaWYgICAgICAgIChjb3VudCA9PSAyKSB7CgkJICBGSVhNRShvbGUsICJMT0NBTEVfSUNBTEVOREFSVFlQRSB1bmltcC5cbiIpOwoJCSAgc3RyY3B5KGJ1ZiwgIkFEIik7CgkgICAgfSBlbHNlIHsKCQkgIHN0cmNweShidWYsICJnIik7CgkJICBXQVJOKG9sZSwKCQkJICAgICAgICJ1bmtub3duIGZvcm1hdCwgXApjPSVjLCBuPSVkXG4iLCB0eXBlLCBjb3VudCk7CgkgICAgICAgfQoJICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnaCcpIHsKCSAgICAgICAvKiBnaXZlcyB1cyBob3VycyAxOjAwIC0tIDEyOjAwICovCgkgICAgICAgc3ByaW50ZihidWYsIGRnZm10W2NvdW50XSwgKHh0aW1lLT53SG91ci0xKSUxMiArMSk7CgkgICAgfSBlbHNlIGlmICh0eXBlID09ICdIJykgewoJICAgICAgIC8qIDI0LWhvdXIgdGltZSAqLwoJICAgICAgIHNwcmludGYoYnVmLCBkZ2ZtdFtjb3VudF0sIHh0aW1lLT53SG91cik7CgkgICAgfSBlbHNlIGlmICh0eXBlID09ICdtJykgewoJICAgICAgIHNwcmludGYoYnVmLCBkZ2ZtdFtjb3VudF0sIHh0aW1lLT53TWludXRlKTsKCSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ3MnKSB7CgkgICAgICAgc3ByaW50ZihidWYsIGRnZm10W2NvdW50XSwgeHRpbWUtPndTZWNvbmQpOwoJICAgIH0gZWxzZSBpZiAodHlwZSA9PSAndCcpIHsKCSAgICAgICBpZiAgICAgICAgKGNvdW50ID09IDEpIHsKCQkgIHNwcmludGYoYnVmLCAiJWMiLCAoeHRpbWUtPndIb3VyIDwgMTIpID8gJ0EnIDogJ1AnKTsKCSAgICAgICB9IGVsc2UgaWYgKGNvdW50ID09IDIpIHsKCQkgIC8qIHNwcmludGYoYnVmLCAiJXMiLCAoeHRpbWUtPndIb3VyIDwgMTIpID8gIkFNIiA6ICJQTSIpOyAqLwoJCSAgR2V0TG9jYWxlSW5mbzMyQShsb2NhbGUsCgkJCQkgICAoeHRpbWUtPndIb3VyPDEyKSAKCQkJCSAgID8gTE9DQUxFX1MxMTU5IDogTE9DQUxFX1MyMzU5LAoJCQkJICAgYnVmLCBzaXplb2YoYnVmKSk7CgkgICAgICAgfQoJICAgIH07CgoJICAgIC8qIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG5leHQgY2hhciBpbiB0aGUgZm9ybWF0IHN0cmluZyAKCSAgICAgICBhZ2Fpbiwgbm8gbWF0dGVyIHdoYXQgaGFwcGVuZWQgKi8KCSAgICBpbnBvcy0tOwoJICAgIAoJICAgIC8qIGFkZCB0aGUgY29udGVudHMgb2YgYnVmIHRvIHRoZSBvdXRwdXQgKi8KCSAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKCSAgICBpZiAob3V0cG9zICsgYnVmbGVuIDwgZGF0ZWxlbikgewoJICAgICAgIGRhdGVbb3V0cG9zXSA9ICdcMCc7IC8qIGZvciBzdHJjYXQgdG8gaG9vayBvbnRvICovCgkJIHN0cmNhdChkYXRlLCBidWYpOwoJICAgICAgIG91dHBvcyArPSBidWZsZW47CgkgICAgfSBlbHNlIHsKCSAgICAgICBkYXRlW291dHBvc10gPSAnXDAnOwoJICAgICAgIHN0cm5jYXQoZGF0ZSwgYnVmLCBkYXRlbGVuIC0gb3V0cG9zKTsKCQkgZGF0ZVtkYXRlbGVuIC0gMV0gPSAnXDAnOwoJCSBTZXRMYXN0RXJyb3IoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUik7CgkgICAgICAgV0FSTihvbGUsICJpbnN1ZmZpY2llbnQgYnVmZmVyXG4iKTsKCQkgcmV0dXJuIDA7CgkgICAgfQoKCSAgICAvKiByZXNldCB0aGUgdmFyaWFibGVzIHdlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGlzIGl0ZW0gKi8KCSAgICBjb3VudCA9IDA7CgkgICAgdHlwZSA9ICdcMCc7CgkgfSBlbHNlIGlmIChmb3JtYXRbaW5wb3NdID09ICdcMCcpIHsKCSAgICAvKiB3ZSBjYW4ndCBjaGVjayBmb3IgdGhpcyBhdCB0aGUgbG9vcC1oZWFkLCBiZWNhdXNlCgkgICAgICAgdGhhdCBicmVha3MgdGhlIHByaW50aW5nIG9mIHRoZSBsYXN0IGZvcm1hdC1pdGVtICovCgkgICAgZGF0ZVtvdXRwb3NdID0gJ1wwJzsKCSAgICBicmVhazsKICAgICAgICAgfSBlbHNlIGlmIChjb3VudCkgewoJICAgIC8qIGNvbnRpbnVpbmcgYSBjb2RlIGZvciBhbiBpdGVtICovCgkgICAgY291bnQgKz0xOwoJICAgIGNvbnRpbnVlOwoJIH0gZWxzZSBpZiAoc3RyY2hyKCJoSG1zdHlNZGciLCBmb3JtYXRbaW5wb3NdKSkgewoJICAgIHR5cGUgPSBmb3JtYXRbaW5wb3NdOwoJICAgIGNvdW50ID0gMTsKCSAgICBjb250aW51ZTsKCSB9IGVsc2UgaWYgKGZvcm1hdFtpbnBvc10gPT0gJ1wnJykgewoJICAgIGlucXVvdGUgPSAxOwoJICAgIGNvbnRpbnVlOwogICAgICAgfSBlbHNlIHsKCSAgICBkYXRlW291dHBvcysrXSA9IGZvcm1hdFtpbnBvc107CgkgfQogICAgICAvKiBub3cgZGVhbCB3aXRoIGEgcG9zc2libGUgYnVmZmVyIG92ZXJmbG93ICovCiAgICAgIGlmIChvdXRwb3MgPj0gZGF0ZWxlbikgewogICAgICAgZGF0ZVtkYXRlbGVuIC0gMV0gPSAnXDAnOwogICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpOwogICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgfQogICAKICAgaWYgKE92ZXJmbG93KSB7CiAgICAgIFNldExhc3RFcnJvcihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKTsKICAgfTsKCiAgIC8qIGZpbmlzaCBpdCBvZmYgd2l0aCBhIHN0cmluZyB0ZXJtaW5hdG9yICovCiAgIG91dHBvcysrOwogICAvKiBzYW5pdHkgY2hlY2sgKi8KICAgaWYgKG91dHBvcyA+IGRhdGVsZW4tMSkgb3V0cG9zID0gZGF0ZWxlbi0xOwogICBkYXRlW291dHBvc10gPSAnXDAnOwogICAKICAgVFJBQ0Uob2xlLCAiT0xFX0dldEZvcm1hdEEgcmV0dXJucyBzdHJpbmcgJyVzJywgbGVuICVkXG4iLAoJICAgICAgIGRhdGUsIG91dHBvcyk7CiAgIHJldHVybiBvdXRwb3M7Cn0KCklOVDMyIFdJTkFQSSBPTEVfR2V0Rm9ybWF0VyhMQ0lEIGxvY2FsZSwgRFdPUkQgZmxhZ3MsCgkJCSAgICBMUFNZU1RFTVRJTUUgeHRpbWUsCgkJCSAgICBMUENXU1RSIGZvcm1hdCwKCQkJICAgIExQV1NUUiB0aW1lc3RyLCBJTlQzMiB0aW1lbGVuKQp7CiAgIEZJWE1FKG9sZSwgIih1bmljb2RlIEdldERhdGVGb3JtYXQpIFNUVUJcbiIpOwogICByZXR1cm4gMDsKICAgCn0KCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogIEdldERhdGVGb3JtYXQzMkEoKQoKICBUaGlzIGZ1bmN0aW9uIHVzZXMgZm9ybWF0IHRvIGZvcm1hdCB0aGUgZGF0ZSwgIG9yLCAgaWYgZm9ybWF0CiAgaXMgTlVMTCwgdXNlcyB0aGUgZGVmYXVsdCBmb3IgdGhlIGxvY2FsZS4gIGZvcm1hdCBpcyBhIHN0cmluZwogIG9mIGxpdGVyYWwgZmllbGRzIGFuZCBjaGFyYWN0ZXJzIGFzIGZvbGxvd3M6CgogIGQgICAgc2luZ2xlLWRpZ2l0IChubyBsZWFkaW5nIHplcm8pIGRheSAob2YgbW9udGgpCiAgZGQgICB0d28tZGlnaXQgZGF5IChvZiBtb250aCkKICBkZGQgIHNob3J0IGRheS1vZi13ZWVrIG5hbWUKICBkZGRkIGxvbmcgZGF5LW9mLXdlZWsgbmFtZQogIE0gICAgc2luZ2xlLWRpZ2l0IG1vbnRoCiAgTU0gICB0d28tZGlnaXQgbW9udGgKICBNTU0gIHNob3J0IG1vbnRoIG5hbWUKICBNTU1NIGZ1bGwgbW9udGggbmFtZQogIHkgICAgdHdvLWRpZ2l0IHllYXIsIG5vIGxlYWRpbmcgMAogIHl5ICAgdHdvLWRpZ2l0IHllYXIKICB5eXl5IGZvdXItZGlnaXQgeWVhcgogIGdnICAgZXJhIHN0cmluZwoKICogKioqKioqKioqKioqKioqKioqKioqKiovCgpJTlQzMiBXSU5BUEkgR2V0RGF0ZUZvcm1hdDMyQShMQ0lEIGxvY2FsZSxEV09SRCBmbGFncywKCQkJICAgICAgTFBTWVNURU1USU1FIHh0aW1lLAoJCQkgICAgICBMUENTVFIgZm9ybWF0LCBMUFNUUiBkYXRlLElOVDMyIGRhdGVsZW4pIAp7CiAgIAogIGNoYXIgZm9ybWF0X2J1Zls0MF07CiAgTFBDU1RSIHRoaXNmb3JtYXQ7CiAgU1lTVEVNVElNRSB0OwogIExQU1lTVEVNVElNRSB0aGlzdGltZTsKICBMQ0lEIHRoaXNsb2NhbGU7CgogIElOVDMyIHJldDsKCiAgVFJBQ0Uob2xlLCIoMHglMDRseCwweCUwOGx4LCVwLCVzLCVwLCVkKVxuIiwKCSAgICAgIGxvY2FsZSxmbGFncyx4dGltZSxmb3JtYXQsZGF0ZSxkYXRlbGVuKTsKICAKICBpZiAoIWxvY2FsZSkgewogICAgIGxvY2FsZSA9IExPQ0FMRV9TWVNURU1fREVGQVVMVDsKICAgICB9OwogIAogIGlmIChsb2NhbGUgPT0gTE9DQUxFX1NZU1RFTV9ERUZBVUxUKSB7CiAgICAgdGhpc2xvY2FsZSA9IEdldFN5c3RlbURlZmF1bHRMQ0lEKCk7CiAgfSBlbHNlIGlmIChsb2NhbGUgPT0gTE9DQUxFX1VTRVJfREVGQVVMVCkgewogICAgIHRoaXNsb2NhbGUgPSBHZXRVc2VyRGVmYXVsdExDSUQoKTsKICB9IGVsc2UgewogICAgIHRoaXNsb2NhbGUgPSBsb2NhbGU7CiAgIH07CgogIGlmICh4dGltZSA9PSBOVUxMKSB7CiAgICAgR2V0U3lzdGVtVGltZSgmdCk7CiAgICAgdGhpc3RpbWUgPSAmdDsKICB9IGVsc2UgewogICAgIHRoaXN0aW1lID0geHRpbWU7CiAgfTsKCiAgaWYgKGZvcm1hdCA9PSBOVUxMKSB7CiAgICAgR2V0TG9jYWxlSW5mbzMyQSh0aGlzbG9jYWxlLCAoKGZsYWdzJkRBVEVfTE9OR0RBVEUpIAoJCQkJICAgPyBMT0NBTEVfU0xPTkdEQVRFCgkJCQkgICA6IExPQ0FMRV9TU0hPUlREQVRFKSwKCQkgICAgICBmb3JtYXRfYnVmLCBzaXplb2YoZm9ybWF0X2J1ZikpOwogICAgIHRoaXNmb3JtYXQgPSBmb3JtYXRfYnVmOwogIH0gZWxzZSB7CiAgICAgdGhpc2Zvcm1hdCA9IGZvcm1hdDsKICB9OwoKICAKICByZXQgPSBPTEVfR2V0Rm9ybWF0QSh0aGlzbG9jYWxlLCBmbGFncywgdGhpc3RpbWUsIHRoaXNmb3JtYXQsIAoJCSAgICAgICBkYXRlLCBkYXRlbGVuKTsKICAKCiAgIFRSQUNFKG9sZSwgCgkgICAgICAgIkdldERhdGVGb3JtYXQzMkEoKSByZXR1cm5pbmcgJWQsIHdpdGggZGF0YT0lc1xuIiwKCSAgICAgICByZXQsIGRhdGUpOwogIHJldHVybiByZXQ7Cn0KCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIEdldERhdGVGb3JtYXQzMlcoKQoKICogQWN0cyB0aGUgc2FtZSBhcyBHZXREYXRlRm9ybWF0MzJBKCksICBleGNlcHQgdGhhdCBpdCdzIFVuaWNvZGUuCiAqIEFjY2VwdHMgJiByZXR1cm5zIHNpemVzIGFzIGNvdW50cyBvZiBVbmljb2RlIGNoYXJhY3RlcnMuCgogKi8KSU5UMzIgV0lOQVBJIEdldERhdGVGb3JtYXQzMlcoTENJRCBsb2NhbGUsRFdPUkQgZmxhZ3MsCgkJCSAgICAgIExQU1lTVEVNVElNRSB4dGltZSwKCQkJICAgICAgTFBDV1NUUiBmb3JtYXQsCgkJCSAgICAgIExQV1NUUiBkYXRlLCBJTlQzMiBkYXRlbGVuKQp7CiAgIHNob3J0IGRhdGVhcnJbXSA9IHsnMScsJzknLCc5JywnNCcsJy0nLCcxJywnLScsJzEnLDB9OwoKICAgRklYTUUob2xlLCAiU1RVQlxuIik7ICAgCiAgIGxzdHJjcHluMzJXKGRhdGUsIGRhdGVhcnIsIGRhdGVsZW4pOwogICByZXR1cm4gKCAgZGF0ZWxlbiA8IDkpID8gZGF0ZWxlbiA6IDk7CiAgIAogICAKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEdldFRpbWVGb3JtYXQzMkEoKSAKCiBGb3JtYXRzIGRhdGUgYWNjb3JkaW5nIHRvIGZvcm1hdCwgIG9yIGxvY2FsZSBkZWZhdWx0IGlmIGZvcm1hdCBpcwogTlVMTC4gVGhlIGZvcm1hdCBjb25zaXN0cyBvZiBsaXRlcmFsIGNoYXJhY3RlcnMgYW5kIGZpZWxkcyBhcyBmb2xsb3dzOgoKIGggIGhvdXJzIHdpdGggbm8gbGVhZGluZyB6ZXJvICgxMi1ob3VyKQogaGggaG91cnMgd2l0aCBmdWxsIHR3byBkaWdpdHMKIEggIGhvdXJzIHdpdGggbm8gbGVhZGluZyB6ZXJvICgyNC1ob3VyKQogSEggaG91cnMgd2l0aCBmdWxsIHR3byBkaWdpdHMKIG0gIG1pbnV0ZXMgd2l0aCBubyBsZWFkaW5nIHplcm8KIG1tIG1pbnV0ZXMgd2l0aCBmdWxsIHR3byBkaWdpdHMKIHMgIHNlY29uZHMgd2l0aCBubyBsZWFkaW5nIHplcm8KIHNzIHNlY29uZHMgd2l0aCBmdWxsIHR3byBkaWdpdHMKIHQgIHRpbWUgbWFya2VyIChBIG9yIFApCiB0dCB0aW1lIG1hcmtlciAoQU0sIFBNKQoKICovCgpJTlQzMiBXSU5BUEkgR2V0VGltZUZvcm1hdDMyQShMQ0lEIGxvY2FsZSxEV09SRCBmbGFncywKCQkJICAgICAgTFBTWVNURU1USU1FIHh0aW1lLAoJCQkgICAgICBMUENTVFIgZm9ybWF0LCAKCQkJICAgICAgTFBTVFIgdGltZXN0cixJTlQzMiB0aW1lbGVuKSAKewogICBJTlQzMiByZXQ7CiAgIExQQ1NUUiByZWFsZm9ybWF0OwogICBjaGFyIGZtdF9idWZbNDBdOwogICAKICAgVFJBQ0Uob2xlLCJHZXRUaW1lRm9ybWF0KDB4JTA0bHgsMHglMDhseCwlcCwlcywlcCwlZClcbiIsCgkJbG9jYWxlLGZsYWdzLHh0aW1lLGZvcm1hdCx0aW1lc3RyLHRpbWVsZW4KCSk7CiAgIAogICBpZiAoZm9ybWF0KSB7CiAgICAgIHJlYWxmb3JtYXQgPSBmb3JtYXQ7CiAgIH0gZWxzZSBpZiAobG9jYWxlKSB7CiAgICAgIEdldExvY2FsZUluZm8zMkEobG9jYWxlLCBMT0NBTEVfU1RJTUVGT1JNQVQsCgkJICAgICAgIGZtdF9idWYsICBzaXplb2YoZm10X2J1ZikpOwogICAgICByZWFsZm9ybWF0ID0gZm10X2J1ZjsKICAgfSBlbHNlIHsKICAgICAgV0FSTihvbGUsICJDYWxsZXIgZ2F2ZSBubyBsb2NhbGUgYW5kIG5vIGZvcm1hdFxuIik7CiAgICAgIHJlYWxmb3JtYXQgPSAiaGg6bW06c3MiOwogICB9OwogICBpZiAoIWxvY2FsZSkgewogICAgICBsb2NhbGUgPSBHZXRTeXN0ZW1EZWZhdWx0TENJRCgpOwogICB9CgoKICAgcmV0dXJuIE9MRV9HZXRGb3JtYXRBKGxvY2FsZSwgZmxhZ3MsIHh0aW1lLCByZWFsZm9ybWF0LCB0aW1lc3RyLCB0aW1lbGVuKTsKCn0KCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIEdldFRpbWVGb3JtYXQzMlcoKQogKiAKICoKICovCgpJTlQzMiBXSU5BUEkgR2V0VGltZUZvcm1hdDMyVyhMQ0lEIGxvY2FsZSxEV09SRCBmbGFncywKCQkJICAgICAgTFBTWVNURU1USU1FIHh0aW1lLAoJCQkgICAgICBMUENXU1RSIGZvcm1hdCwgCgkJCSAgICAgIExQV1NUUiB0aW1lc3RyLElOVDMyIHRpbWVsZW4pIAp7CiAgIGNoYXIgYnVmWzQwXTsKICAgCiAgIGxzdHJjcHluV3RvQShidWYsIGZvcm1hdCwgKHNpemVvZihidWYpKS8yKTsKICAgCiAgIFRSQUNFKG9sZSwgIkdldFRpbWVGb3JtYXRXIGxlbiAlZCBmbGFncyAweCVsWCBmb3JtYXQgPiVzPFxuIiwKCQl0aW1lbGVuLCBmbGFncywgYnVmKTsKICAgRklYTUUob2xlLCAiU1RVQiIpOwogICBTZXRMYXN0RXJyb3IoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUik7CiAgIHJldHVybiAwOwoKCn0KCgoKCgoKCgo=