LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgIEtvCiNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICBBCiNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAiJktvcmVhbiIKCi8qIE1lbnUgKi8KCiNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAixsTAzygmRikiCiNkZWZpbmUgTUVOVV9GSUxFX05FVyAgICAgICAgICAgICAgICAiu/UgxsTAzygmTikuLi4iCiNkZWZpbmUgTUVOVV9GSUxFX09QRU4gICAgICAgICAgICAgICAiv62x4igmUClcdEVudGVyIgojZGVmaW5lIE1FTlVfRklMRV9NT1ZFICAgICAgICAgICAgICAgIsDMtb8oJk0pLi4uXHRGNyIKI2RlZmluZSBNRU5VX0ZJTEVfQ09QWSAgICAgICAgICAgICAgICK6ubvnKCZDKS4uLlx0RjgiCiNkZWZpbmUgTUVOVV9GSUxFX0RFTEVURSAgICAgICAgICAgICAiu+jBpigmRClcdEVudGYiCiNkZWZpbmUgTUVOVV9GSUxFX0FUVFJJQlVURVMgICAgICAgICAivNO8uigmQSkuLi5cdEFsdCtFbnRlciIKI2RlZmluZSBNRU5VX0ZJTEVfRVhFQ1VURSAgICAgICAgICAgICK9x8fgKCZFKS4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICLAqbW1v+wgwb634SgmWCkuLi4iCgojZGVmaW5lIE1FTlVfT1BUSU9OUyAgICAgICAgICAgICAgICAgIr/JvMcoJk8pIgojZGVmaW5lIE1FTlVfT1BUSU9OU19BVVRPX0FSUkFOR0UgICAgIsDatb8gwaS3xCgmQSkiCiNkZWZpbmUgTUVOVV9PUFRJT05TX01JTl9PTl9SVU4gICAgICAivcfH4L3DIL7GwMzE3MC4t84gtcooJk0pIgojZGVmaW5lIE1FTlVfT1BUSU9OU19TQVZFX1NFVFRJTkdTICAgIsG+t+G9wyC8s8GkILO7v+sgwPrA5SgmUykiCgojZGVmaW5lIE1FTlVfV0lORE9XUyAgICAgICAgICAgICAgICAgIsOiKCZXKSIKI2RlZmluZSBNRU5VX1dJTkRPV1NfT1ZFUkxBUCAgICAgICAgICLB38O4KCZPKVx0U2hpZnQrRjUiCiNkZWZpbmUgTUVOVV9XSU5ET1dTX1NJREVfQllfU0lERSAgICAiutDH0igmUylcdFNoaWZ0K0Y0IgojZGVmaW5lIE1FTlVfV0lORE9XU19BUlJBTkdFICAgICAgICAgIr7GwMzE3CDBpLfEKCZBKSIKCiNkZWZpbmUgTUVOVV9MQU5HVUFHRSAgICAgICAgICAgICAgICAivvC+7igmTCkiCgojZGVmaW5lIE1FTlVfSEVMUCAgICAgICAgICAgICAgICAgICAgIrW1v/K4uygmSCkiCiNkZWZpbmUgTUVOVV9IRUxQX0NPTlRFTlRTICAgICAgICAgICAiuPHC9ygmQykiCiNkZWZpbmUgTUVOVV9IRUxQX1NFQVJDSCAgICAgICAgICAgICAiw6Ox4igmUykuLi4iCiNkZWZpbmUgTUVOVV9IRUxQX0hFTFBfT05fSEVMUCAgICAgICAitbW/8ri7ILvnv+u5/SgmSCkiCiNkZWZpbmUgTUVOVV9IRUxQX1RVVE9SSUFMICAgICAgICAgICAiwNq9wLytKCZUKSIKCiNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiwaS6uCgmSSkuLi4iCiNkZWZpbmUgTUVOVV9JTkZPX0xJQ0VOU0UgICAgICAgICAgICAitvPAzLy+vbooJkwpIgojZGVmaW5lIE1FTlVfSU5GT19OT19XQVJSQU5UWSAgICAgICAgIrmrurjB9SgmTikiCiNkZWZpbmUgTUVOVV9JTkZPX0FCT1VUX1dJTkUgICAgICAgICAiv83Azr+hILD8x8+/qSgmQSkiCgovKiBEaWFsb2dzICovCgojZGVmaW5lIERJQUxPR19PSyAgICAgICAgICAgICAgICAgICAgIsiuwM4iCiNkZWZpbmUgRElBTE9HX0NBTkNFTCAgICAgICAgICAgICAgICAiw+u80iIKI2RlZmluZSBESUFMT0dfQlJPV1NFICAgICAgICAgICAgICAgICKwy7v2KCZCKSIKI2RlZmluZSBESUFMT0dfSEVMUCAgICAgICAgICAgICAgICAgICK1tb/yuLsoJkgpIgoKI2RlZmluZSBESUFMT0dfTkVXX0NBUFRJT04gICAgICAgICAgICK79SDHwbfOsde3pSCws8O8IgojZGVmaW5lIERJQUxPR19ORVdfTkVXICAgICAgICAgICAgICAgIrv1ILCzw7wiCiNkZWZpbmUgRElBTE9HX05FV19HUk9VUCAgICAgICAgICAgICAix8G3zrHXt6Ugsde37CgmRykiCiNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAix8G3zrHXt6UoJlApIgoKI2RlZmluZSBESUFMT0dfTU9WRV9DQVBUSU9OICAgICAgICAgICLHwbfOsde3pSDAzLW/IgojZGVmaW5lIERJQUxPR19NT1ZFX1BST0dSQU0gICAgICAgICAgIsfBt86x17elIMDMtb86IgojZGVmaW5lIERJQUxPR19NT1ZFX0ZST01fR1JPVVAgICAgICAgIsDMtb8gwPw6IgojZGVmaW5lIERJQUxPR19NT1ZFX1RPX0dST1VQICAgICAgICAgIsDMtb8gyMQoJlQpOiIKCiNkZWZpbmUgRElBTE9HX0NPUFlfQ0FQVElPTiAgICAgICAgICAix8G3zrHXt6Ugurm75yIKI2RlZmluZSBESUFMT0dfQ09QWV9QUk9HUkFNICAgICAgICAgICLHwbfOsde3pSC6ubvnOiIKI2RlZmluZSBESUFMT0dfQ09QWV9GUk9NX0dST1VQICAgICAgIERJQUxPR19NT1ZFX0ZST01fR1JPVVAKI2RlZmluZSBESUFMT0dfQ09QWV9UT19HUk9VUCAgICAgICAgIERJQUxPR19NT1ZFX1RPX0dST1VQCgojZGVmaW5lIERJQUxPR19HUk9VUF9DQVBUSU9OICAgICAgICAgIsfBt86x17elILHXt+wgvNO8uiIKI2RlZmluZSBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04gICAgICK8s7jtKCZEKToiCiNkZWZpbmUgRElBTE9HX0dST1VQX0ZJTEUgICAgICAgICAgICAisde37CDGxMDPKCZHKToiCgojZGVmaW5lIERJQUxPR19QUk9HUkFNX0NBUFRJT04gICAgICAgIsfBt86x17elILzTvLoiCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fREVTQ1JJUFRJT04gICBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04KI2RlZmluZSBESUFMT0dfUFJPR1JBTV9DT01NQU5EX0xJTkUgICK47bfJx+AoJkMpOiIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9ESVJFQ1RPUlkgICAgICLA2773ILXwt7rF5LiuKCZXKToiCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fSE9UX0tFWSAgICAgICAixbAgwbbH1SgmSyk6IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX1NZTUJPTCAgICAgICAgIr7GwMzE3MC4t84oJlMpIgojZGVmaW5lIERJQUxPR19QUk9HUkFNX09USEVSX1NZTUJPTCAgIrTZuKUgvsbAzMTcKCZPKS4uLiIKCiNkZWZpbmUgRElBTE9HX1NZTUJPTF9DQVBUSU9OICAgICAgICAivsbAzMTcILyxxcMiCiNkZWZpbmUgRElBTE9HX1NZTUJPTF9GSUxFICAgICAgICAgICAixsTAz7jtKCZGKToiCiNkZWZpbmUgRElBTE9HX1NZTUJPTF9DVVJSRU5UICAgICAgICAix/bA5yC+xsDMxNwoJkMpOiIKCiNkZWZpbmUgRElBTE9HX0VYRUNVVEVfQ0FQVElPTiAgICAgICAix8G3zrHXt6UgvcfH4CIKI2RlZmluZSBESUFMT0dfRVhFQ1VURV9DT01NQU5EX0xJTkUgIERJQUxPR19QUk9HUkFNX0NPTU1BTkRfTElORQojZGVmaW5lIERJQUxPR19FWEVDVVRFX1NZTUJPTCAgICAgICAgRElBTE9HX1BST0dSQU1fU1lNQk9MCgovKiBTdHJpbmdzICovCgojZGVmaW5lIFNUUklOR19QUk9HUkFNX01BTkFHRVIgICAgICAgICAgICAix8G3zrHXt6UgsPy4rsDaIgojZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAiv8C3+SIKI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICAgIrDmsO0iCiNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAgICAgICLBpLq4IgojZGVmaW5lIFNUUklOR19ERUxFVEUgICAgICAgICAgICAgICAgICAgICAiu+jBpiIKI2RlZmluZSBTVFJJTkdfREVMRVRFX0dST1VQX3MgICAgICAgICAgICAgIrHXt+wgYCVzJ7imILvowabH0rHuv+Q/IgojZGVmaW5lIFNUUklOR19ERUxFVEVfUFJPR1JBTV9zICAgICAgICAgICAix8G3zrHXt6UgYCVzJ7imILvowabH0rHuv+Q/IgojZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAisbjH9rXHwfYgvsq+0sC9IgojZGVmaW5lIFNUUklOR19GSUxFX1JFQURfRVJST1JfcyAgICAgICAgICAiYCVzJyDA0LHiIL/At/kiCiNkZWZpbmUgU1RSSU5HX0ZJTEVfV1JJVEVfRVJST1JfcyAgICAgICAgICJgJXMnIL6yseIgv8C3+SIKCiNkZWZpbmUgU1RSSU5HX0dSUEZJTEVfUkVBRF9FUlJPUl9zICAgICAgICJcCrHXt+wgxsTAzyBgJXMnuKYgv60gvPYgvvi9wLTPtNkuXG5cCsfRufggtPUgvcO1tcfYILq8se6/5D8iCgojZGVmaW5lIFNUUklOR19PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAiuN648LiuILrOwbciCiNkZWZpbmUgU1RSSU5HX1dJTkhFTFBfRVJST1IgICAgICAgICAgICAgICK1tb/yuLvAzCC++L3AtM+02SIKI2RlZmluZSBTVFJJTkdfVU5LTk9XTl9GRUFUVVJFX3MgICAgICAgICAgIiVzv6EgvssgvPYgvvi0wiCx4rTJwMwgwNbAvSIKI2RlZmluZSBTVFJJTkdfRklMRV9OT1RfT1ZFUldSSVRURU5fcyAgICAgIsbEwM8gYCVzJ7ChIMG4wOfH1bTPtNkuILWkvu6+ssH2IL7KvcC0z7TZLiIKI2RlZmluZSBTVFJJTkdfU0FWRV9HUk9VUF9BU19zICAgICAgICAgICAgIr/4t6EgxsTAz8C7ILWkvu6+srTCILDNwLsguLex4iDAp8fYILHXt+zAuyBgJXMnt84gwPrA5cfVtM+02SIKCiNkZWZpbmUgU1RSSU5HX05PX0hPVF9LRVkgICAgICAgICAgICAgICAgICK++MC9IgoKI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICAgICAgIrjwtecgxsTAzyAoKi4qKSIKI2RlZmluZSBTVFJJTkdfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgIsfBt86x17elIgojZGVmaW5lIFNUUklOR19MSUJSQVJJRVNfRExMICAgICAgICAgICAgICAitvPAzLrqt6+4riAoKi5kbGwpIgojZGVmaW5lIFNUUklOR19TWU1CT0xfRklMRVMgICAgICAgICAgICAgICAivsbAzMTcIMbEwM8iCiNkZWZpbmUgU1RSSU5HX1NZTUJPTFNfSUNPICAgICAgICAgICAgICAgICK+xsDMxNwgKCouaWNvKSIKCiNpbmNsdWRlICJYeC5yYyIK