LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBIZWJyZXcKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKiBDb3B5cmlnaHQgMjAwMyBTaGFjaGFyIFNoZW1lc2gKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1NSkKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfSEVCUkVXLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgxOGFiXHg4MDAwXHgzOGNiXHgxMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwODAwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjk3MiIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMiIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTUiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2MiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI5NzIiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQwZCIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDUiCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5OCIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjYiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDBkIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMCIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjIiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjQiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjgiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjQiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjEiCiAgTE9DQUxFX1MxMTU5ICJBTSIKICBMT0NBTEVfUzIzNTkgIlBNIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIklTUiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLhIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIuIiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAi4yIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLkIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIuUiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAi+SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLgIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkhFQiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIunw5eD4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi9OH45eD4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAi7vj1IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAi4PT46ewiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLu4OkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLp5fDpIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAi6eXs6SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIuDl4uXx6CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIvH06O7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLg5ffo5eH4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIvDl4e7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLj9u7h+CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJJc3JhZWwiCiAgTE9DQUxFX1NDVVJSRU5DWSAipCIKICBMT0NBTEVfU0RBVEUgIi8iCiAgTE9DQUxFX1NEQVlOQU1FMSAi6eXtoPnw6SIKICBMT0NBTEVfU0RBWU5BTUUyICLp5e2g+ezp+ekiCiAgTE9DQUxFX1NEQVlOQU1FMyAi6eXtoPjh6fLpIgogIExPQ0FMRV9TREFZTkFNRTQgIunl7aDn7un56SIKICBMT0NBTEVfU0RBWU5BTUU1ICLp5e2g+en56SIKICBMT0NBTEVfU0RBWU5BTUU2ICL54foiCiAgTE9DQUxFX1NEQVlOQU1FNyAi6eXtoPjg+eXvIgogIExPQ0FMRV9TREVDSU1BTCAiLiIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIklzcmFlbCIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJJc3JhZWxpIE5ldyBTaGVrZWwiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiSGVicmV3IgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIklMUyIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiSUwiCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAiaGUiCiAgTE9DQUxFX1NMQU5HVUFHRSAiSGVicmV3IgogIExPQ0FMRV9TTElTVCAiLCIKICBMT0NBTEVfU0xPTkdEQVRFICJkZGRkIGRkIE1NTU0geXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIi4iCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAi6fDl4PgiCiAgTE9DQUxFX1NNT05USE5BTUUyICL04fjl4PgiCiAgTE9DQUxFX1NNT05USE5BTUUzICLu+PUiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLg9Pjp7CIKICBMT0NBTEVfU01PTlRITkFNRTUgIu7g6SIKICBMT0NBTEVfU01PTlRITkFNRTYgIunl8OkiCiAgTE9DQUxFX1NNT05USE5BTUU3ICLp5ezpIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAi4OXi5fHoIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAi8fTo7uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTAgIuDl9+jl4fgiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAi8OXh7uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIuP27uH4IgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICIsIgogIExPQ0FMRV9TTkFNRSAiaGUtSUwiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAi6fn44OwiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi+ffsIOfj+SIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICLy4fjp+iIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0NSSVBUUyAiSGVicjsiCiAgTE9DQUxFX1NTSE9SVERBVEUgImRkL01NL3l5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkhIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NIHl5eXkiCgogIExHUlBJRF9XRVNURVJOX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIu7y+OEg4On45fTkIOXg+Pbl+iDk4fjp+iIKICBMR1JQSURfQ0VOVFJBTF9FVVJPUEUrTEdSUElEX1JFU19CQVNFICLu+OvmIODp+OX05CIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAiQmFsdGljIgogIExHUlBJRF9HUkVFSytMR1JQSURfUkVTX0JBU0UgIunl5fDp+iIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICL3+Ons6foiCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICLo5fj36foiCiAgTEdSUElEX0pBUEFORVNFK0xHUlBJRF9SRVNfQkFTRSAi6fTw6foiCiAgTEdSUElEX0tPUkVBTitMR1JQSURfUkVTX0JBU0UgIvfl+Ong8On6IgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAi8enw6fog7vHl+Prp+iIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAi8enw6fog7vTl+ej6IgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAi+uDp7PDj6foiCiAgTEdSUElEX0hFQlJFVytMR1JQSURfUkVTX0JBU0UgIvLh+On6IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICLy+OHp+iIgCiAgTEdSUElEX1ZJRVROQU1FU0UrTEdSUElEX1JFU19CQVNFICLl6eDo8O7p+iIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICLg+O7w6foiCn0K