LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBDcm9hdGlhbgogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGV3ZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTApCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX1NFUkJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAwMjdceDgwMDBceDM4MDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDJceDAwMDBceDAwMDBceDA0MDBceDAwMTJceDAwMDBceDAwMDBceGM1ZDQiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzg1IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIzIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIwIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MCIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODUyIgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjM4NSIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiNTAwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDFhIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDA4MiIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDFhIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMCIKICBMT0NBTEVfSU5FR0NVUlIgIjgiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjIiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjAiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiSFJWIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgInBvbiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICJ1dG8iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAic3JpIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIuhldCIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICJwZXQiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAic3ViIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIm5lZCIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJIUlYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICJzaWoiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICJ2bGoiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJvnnUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICJ0cmEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICJzdmkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJsaXAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICJzcnAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICJrb2wiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJydWoiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAibGlzIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgInN0dSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICJwcm8iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiQ3JvYXRpYSIKICBMT0NBTEVfU0NVUlJFTkNZICJrbiIKICBMT0NBTEVfU0RBVEUgIi4iCiAgTE9DQUxFX1NEQVlOQU1FMSAicG9uZWRqZWxqYWsiCiAgTE9DQUxFX1NEQVlOQU1FMiAidXRvcmFrIgogIExPQ0FMRV9TREFZTkFNRTMgInNyaWplZGEiCiAgTE9DQUxFX1NEQVlOQU1FNCAi6GV0dnJ0YWsiCiAgTE9DQUxFX1NEQVlOQU1FNSAicGV0YWsiCiAgTE9DQUxFX1NEQVlOQU1FNiAic3Vib3RhIgogIExPQ0FMRV9TREFZTkFNRTcgIm5lZGplbGphIgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIkNyb2F0aWEiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiQ3JvYXRpYW4gS3VuYSIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJDcm9hdGlhbiIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJIUksiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIkhSIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgImhyIgogIExPQ0FMRV9TTEFOR1VBR0UgIkNyb2F0aWFuIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkLiBNTU1NIHl5eXkiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgInNpamXoYW5qIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAidmVsamHoYSIKICBMT0NBTEVfU01PTlRITkFNRTMgIm+edWphayIKICBMT0NBTEVfU01PTlRITkFNRTQgInRyYXZhbmoiCiAgTE9DQUxFX1NNT05USE5BTUU1ICJzdmliYW5qIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAibGlwYW5qIgogIExPQ0FMRV9TTU9OVEhOQU1FNyAic3JwYW5qIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAia29sb3ZveiIKICBMT0NBTEVfU01PTlRITkFNRTkgInJ1amFuIgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgImxpc3RvcGFkIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgInN0dWRlbmkiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAicHJvc2luYWMiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIi4iCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiSHJ2YXRza2EiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAiaHJ2YXRza2Ega3VuYSIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICJocnZhdHNraSIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0hPUlREQVRFICJkLk0ueXl5eSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIi4iCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSDptbTpzcyIKICBMT0NBTEVfU1lFQVJNT05USCAiTU1NTSwgeXl5eSIKfQo=