LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBIZWJyZXcKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKiBDb3B5cmlnaHQgMjAwMyBTaGFjaGFyIFNoZW1lc2gKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1NSkKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfSEVCUkVXLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgxOGFiXHg4MDAwXHgzOGNiXHgxMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwODAwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjk3MiIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMiIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTUiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2MiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI5NzIiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQwZCIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDUiCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5OCIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjYiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDBkIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMCIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjIiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjQiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjgiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjQiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICJBTSIKICBMT0NBTEVfUzIzNTkgIlBNIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIklTUiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLhIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIuIiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAi4yIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLkIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIuUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAi+SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLgIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkhFQiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIunw5eD4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi9OH45eD4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAi7vj1IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAi4PT46ewiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLu4OkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLp5fDpIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAi6eXs6SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIuDl4uXx6CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIvH06O7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLg5ffo5eH4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIvDl4e7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLj9u7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJJc3JhZWwiCiAgTE9DQUxFX1NDVVJSRU5DWSAipCIKICBMT0NBTEVfU0RBVEUgIi8iCiAgTE9DQUxFX1NEQVlOQU1FMSAi6eXtoPnw6SIKICBMT0NBTEVfU0RBWU5BTUUyICLp5e2g+ezp+ekiCiAgTE9DQUxFX1NEQVlOQU1FMyAi6eXtoPjh6fLpIgogIExPQ0FMRV9TREFZTkFNRTQgIunl7aDn7un56SIKICBMT0NBTEVfU0RBWU5BTUU1ICLp5e2g+en56SIKICBMT0NBTEVfU0RBWU5BTUU2ICL54foiCiAgTE9DQUxFX1NEQVlOQU1FNyAi6eXtoPjg+eXvIgogIExPQ0FMRV9TREVDSU1BTCAiLiIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIklzcmFlbCIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJJc3JhZWxpIE5ldyBTaGVrZWwiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiSGVicmV3IgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIklMUyIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiSUwiCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAiaGUiCiAgTE9DQUxFX1NMQU5HVUFHRSAiSGVicmV3IgogIExPQ0FMRV9TTElTVCAiLCIKICBMT0NBTEVfU0xPTkdEQVRFICJkZGRkIGRkIE1NTU0geXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIi4iCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAi6fDl4PgiCiAgTE9DQUxFX1NNT05USE5BTUUyICL04fjl4PgiCiAgTE9DQUxFX1NNT05USE5BTUUzICLu+PUiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLg9Pjp7CIKICBMT0NBTEVfU01PTlRITkFNRTUgIu7g6SIKICBMT0NBTEVfU01PTlRITkFNRTYgIunl8OkiCiAgTE9DQUxFX1NNT05USE5BTUU3ICLp5ezpIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAi4OXi5fHoIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAi8fTo7uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIuDl9+jl4fgiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAi8OXh7uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIuP27uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICIsIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIun5+ODsIgogIExPQ0FMRV9TTkFUSVZFQ1VSUk5BTUUgIvn37CDn4/kiCiAgTE9DQUxFX1NOQVRJVkVESUdJVFMgIjAxMjM0NTY3ODkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAi8uH46foiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQvTU0veXl5eSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIiwiCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSEg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAi7vL44SDg6fjl9OQg5eD49uX6IOTh+On6IgogIExHUlBJRF9DRU5UUkFMX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIu746+Yg4On45fTkIgogIExHUlBJRF9CQUxUSUMrTEdSUElEX1JFU19CQVNFICJCYWx0aWMiCiAgTEdSUElEX0dSRUVLK0xHUlBJRF9SRVNfQkFTRSAi6eXl8On6IgogIExHUlBJRF9DWVJJTExJQytMR1JQSURfUkVTX0JBU0UgIvf46ezp+iIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIujl+Pfp+iIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICLp9PDp+iIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAi9+X46eDw6foiCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICLx6fDp+iDu8eX4+un6IgogIExHUlBJRF9TSU1QTElGSUVEX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICLx6fDp+iDu9OX56PoiCiAgTEdSUElEX1RIQUkrTEdSUElEX1JFU19CQVNFICL64Ons8OPp+iIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAi8uH46foiCiAgTEdSUElEX0FSQUJJQytMR1JQSURfUkVTX0JBU0UgIvL44en6IiAKICBMR1JQSURfVklFVE5BTUVTRStMR1JQSURfUkVTX0JBU0UgIuXp4Ojw7un6IgogIExHUlBJRF9JTkRJQytMR1JQSURfUkVTX0JBU0UgIkluZGljIgogIExHUlBJRF9HRU9SR0lBTitMR1JQSURfUkVTX0JBU0UgIkdlb3JnaWFuIgogIExHUlBJRF9BUk1FTklBTitMR1JQSURfUkVTX0JBU0UgIuD47vDp+iIKfQo=