LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBCYXNxdWUKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2Rld2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19CQVNRVUUsIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAwMmZceDgwMDBceDM4MDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDFceDAwMDBceDAwMDBceDQwMDBceDAwMTNceDAwMDBceDAwMDBceGM1ZDQiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzQiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjMiCiAgTE9DQUxFX0lEQVRFICIyIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUyIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI4NTAiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiMzQiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQyZCIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDAiCiAgTE9DQUxFX0lESUdJVFMgIjIiCiAgTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiAiMSIKICBMT0NBTEVfSUZJUlNUREFZT0ZXRUVLICIwIgogIExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSICIwIgogIExPQ0FMRV9JSU5UTENVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lMQU5HVUFHRSAiMDQyZCIKICBMT0NBTEVfSUxEQVRFICIyIgogIExPQ0FMRV9JTFpFUk8gIjEiCiAgTE9DQUxFX0lNRUFTVVJFICIwIgogIExPQ0FMRV9JTU9OTFpFUk8gIjEiCiAgTE9DQUxFX0lORUdDVVJSICI4IgogIExPQ0FMRV9JTkVHTlVNQkVSICIxIgogIExPQ0FMRV9JTkVHU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSU5FR1NJR05QT1NOICIxIgogIExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMgIjAiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICIwIgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSVBPU1NJR05QT1NOICIxIgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjAiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIxIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIkVTUCIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICJhbC4iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAiYXMuIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgImF6LiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICJvZy4iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAib3IuIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgImxyLiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICJpZy4iCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiRVVRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAidXJ0LiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgIm90cy4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJtYXIuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAiYXBpLiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIm1haS4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJla2EuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAidXp0LiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggImFidS4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJpcmEuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgInVyci4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAiYXphLiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICJhYmUuIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIlNwYWluIgogIExPQ0FMRV9TQ1VSUkVOQ1kgIoAiCiAgTE9DQUxFX1NEQVRFICIvIgogIExPQ0FMRV9TREFZTkFNRTEgImFzdGVsZWhlbmEiCiAgTE9DQUxFX1NEQVlOQU1FMiAiYXN0ZWFydGVhIgogIExPQ0FMRV9TREFZTkFNRTMgImFzdGVhemtlbmEiCiAgTE9DQUxFX1NEQVlOQU1FNCAib3N0ZWd1bmEiCiAgTE9DQUxFX1NEQVlOQU1FNSAib3N0aXJhbGEiCiAgTE9DQUxFX1NEQVlOQU1FNiAibGFydW5iYXRhIgogIExPQ0FMRV9TREFZTkFNRTcgImlnYW5kZWEiCiAgTE9DQUxFX1NERUNJTUFMICIsIgogIExPQ0FMRV9TRU5HQ09VTlRSWSAiU3BhaW4iCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiRXVybyIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJCYXNxdWUiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiRVVSIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJFUyIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJldSIKICBMT0NBTEVfU0xBTkdVQUdFICJCYXNxdWUiCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgImRkZGQsIHl5eXkuJ2VrbycgTU1NTSdrICdkIgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLCIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICJ1cnRhcnJpbGEiCiAgTE9DQUxFX1NNT05USE5BTUUyICJvdHNhaWxhIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAibWFydHhvYSIKICBMT0NBTEVfU01PTlRITkFNRTQgImFwaXJpbGEiCiAgTE9DQUxFX1NNT05USE5BTUU1ICJtYWlhdHphIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAiZWthaW5hIgogIExPQ0FMRV9TTU9OVEhOQU1FNyAidXp0YWlsYSIKICBMT0NBTEVfU01PTlRITkFNRTggImFidXp0dWEiCiAgTE9DQUxFX1NNT05USE5BTUU5ICJpcmFpbGEiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAidXJyaWEiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAiYXphcm9hIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgImFiZW5kdWEiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIi4iCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiRXNwYWluaWEiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAiZXVybyIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICJldXNrYXJhIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTSE9SVERBVEUgInl5eXkvTU0vZGQiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIuIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkhIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJ5eXl5Lidla28nIE1NTU0iCn0K