LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBNb25nb2xpYW4gKEN5cmlsbGljKQogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGV3ZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTEpCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX01PTkdPTElBTiwgU1VCTEFOR19ERUZBVUxUCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDIwM1x4ODAwMFx4Mzg0OFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwNFx4MDAwMFx4MDAwMFx4MDAwMlx4MDAwNFx4MDAwMFx4MDAwMFx4MDIwMiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjAiCiAgTE9DQUxFX0lDT1VOVFJZICI5NzYiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjEiCiAgTE9DQUxFX0lEQVRFICIyIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUxIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI4NjYiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiOTc2IgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDg4MCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiNDUwIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIwIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDUwIgogIExPQ0FMRV9JTERBVEUgIjIiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjUiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjAiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiTU5HIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIsTgIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIsz/IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgIsv1IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgTCJceDA0MWZceDA0YWYiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAiweAiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAiwf8iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNyAizf8iCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiTU9OIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAiSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgIklJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAiSUlJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAiSVYiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICJWIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiAiVkkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICJWSUkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICJW2CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIklYIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIlgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAiWEkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiAiWElJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIk1vbmdvbGlhIgogIExPQ0FMRV9TQ1VSUkVOQ1kgTCJceDIwYWUiCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgIsTg4uDgIgogIExPQ0FMRV9TREFZTkFNRTIgIsz/4+zg8CIKICBMT0NBTEVfU0RBWU5BTUUzICLL9eDj4uAiCiAgTE9DQUxFX1NEQVlOQU1FNCBMIlx4MDQxZlx4MDRhZlx4MDQ0MFx4MDQ0ZFx4MDQzMiIKICBMT0NBTEVfU0RBWU5BTUU1ICLB4ODx4O0iCiAgTE9DQUxFX1NEQVlOQU1FNiAiwf/s4eAiCiAgTE9DQUxFX1NEQVlOQU1FNyAizf/sIgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIk1vbmdvbGlhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIlR1Z3JpayIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJNb25nb2xpYW4iCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiTU5UIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJNTiIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJtbiIKICBMT0NBTEVfU0xBTkdVQUdFICJNb25nb2xpYW4gKEN5cmlsbGljKSIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAieXl5eSAn7u37JyBNTU1NIGQiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgTCIxXHgwMGEwXHgwNDM0XHgwNGFmXHgwNDMzXHgwNDRkXHgwNDRkXHgwNDQwXHgwMGEwXHgwNDQxXHgwNDMwXHgwNDQwIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAiMqDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAiM6Dk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FNCBMIjRceDAwYTBceDA0MzRceDA0YWZceDA0MzNceDA0NGRceDA0NGRceDA0NDBceDAwYTBceDA0NDFceDA0MzBceDA0NDAiCiAgTE9DQUxFX1NNT05USE5BTUU1ICI1oOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUU2ICI2oOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUU3ICI3oOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUU4ICI4oOTz4+Dg8KDx4PAiCiAgTE9DQUxFX1NNT05USE5BTUU5IEwiOVx4MDBhMFx4MDQzNFx4MDRhZlx4MDQzM1x4MDQ0ZFx4MDQ0ZFx4MDQ0MFx4MDBhMFx4MDQ0MVx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU01PTlRITkFNRTEwICIxMKDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgTCIxMVx4MDBhMFx4MDQzNFx4MDRhZlx4MDQzM1x4MDQ0ZFx4MDQ0ZFx4MDQ0MFx4MDBhMFx4MDQ0MVx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU01PTlRITkFNRTEyICIxMqDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICKgIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIszu7ePu66Dz6/EiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSBMIlx4MDQyMlx4MDRlOVx4MDQzM1x4MDQ0MFx4MDRlOVx4MDQzMyIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICLM7u3j7uug9f3rIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTSE9SVERBVEUgInl5Lk1NLmRkIgogIExPQ0FMRV9TU09SVE5BTUUgIkRlZmF1bHQiCiAgTE9DQUxFX1NUSE9VU0FORCAioCIKICBMT0NBTEVfU1RJTUUgIjoiCiAgTE9DQUxFX1NUSU1FRk9STUFUICJIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJ5eXl5ICfu7ScgTU1NTSIKfQo=