LyoKICogUHJvZ3JhbSBNYW5hZ2VyIChTbG92ZW5pYW4gUmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMiBSb2sgTWFuZGVsamMgPHJvay5tYW5kZWxqY0BnaW1iLm9yZz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgIFNpCiNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICAxYwojZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIlNsb3ZlJm6a6GluYSIKCi8qIE1lbnUgKi8KCiNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAiJkRhdG90ZWthIgojZGVmaW5lIE1FTlVfRklMRV9ORVcgICAgICAgICAgICAgICAgIiZOb3ZhIC4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImT2RwcmlcdEVudGVyIgojZGVmaW5lIE1FTlVfRklMRV9NT1ZFICAgICAgICAgICAgICAgIlByZSZtYWtuaVx0RjciCiNkZWZpbmUgTUVOVV9GSUxFX0NPUFkgICAgICAgICAgICAgICAiJktvcGlyYWpcdEY4IgojZGVmaW5lIE1FTlVfRklMRV9ERUxFVEUgICAgICAgICAgICAgIkl6YnJpJpppXHREZWwiCiNkZWZpbmUgTUVOVV9GSUxFX0FUVFJJQlVURVMgICAgICAgICAiJkxhc3Rub3N0aSAuLi5cdEFsdCtFbnRlciIKI2RlZmluZSBNRU5VX0ZJTEVfRVhFQ1VURSAgICAgICAgICAgICImWmGeZW5pIC4uLiIKI2RlZmluZSBNRU5VX0ZJTEVfRVhJVCAgICAgICAgICAgICAgICJJeiZob2QgaXogcHJvZ3JhbWEgV2luZG93cyAuLi4iCgojZGVmaW5lIE1FTlVfT1BUSU9OUyAgICAgICAgICAgICAgICAgIiZNb55ub3N0aSIKI2RlZmluZSBNRU5VX09QVElPTlNfQVVUT19BUlJBTkdFICAgICImU2Ftb2Rlam5vIHJhenBvcmVkaSIKI2RlZmluZSBNRU5VX09QVElPTlNfTUlOX09OX1JVTiAgICAgICImT2IgcmFiaSBtaW5pbWlyYWoiCiNkZWZpbmUgTUVOVV9PUFRJT05TX1NBVkVfU0VUVElOR1MgICAiU2hyYW5pICZuYXN0YXZpdHZlIG9iIGl6aG9kdSIKCiNkZWZpbmUgTUVOVV9XSU5ET1dTICAgICAgICAgICAgICAgICAiJk9rbm8iCiNkZWZpbmUgTUVOVV9XSU5ET1dTX09WRVJMQVAgICAgICAgICAiJlYga2Fza2Fkb1x0U2hpZnQrRjUiCiNkZWZpbmUgTUVOVV9XSU5ET1dTX1NJREVfQllfU0lERSAgICAiJlJhenBvc3RhdmlcdFNoaWZ0K0Y0IgojZGVmaW5lIE1FTlVfV0lORE9XU19BUlJBTkdFICAgICAgICAgIlJhenBvcmVkaSAmaWtvbmUiCgojZGVmaW5lIE1FTlVfTEFOR1VBR0UgICAgICAgICAgICAgICAgIiZKZXppayIKCiNkZWZpbmUgTUVOVV9IRUxQICAgICAgICAgICAgICAgICAgICAiJlBvbW/oIgojZGVmaW5lIE1FTlVfSEVMUF9DT05URU5UUyAgICAgICAgICAgIiZUZW1lIHBvbW/oaSIKI2RlZmluZSBNRU5VX0hFTFBfU0VBUkNIICAgICAgICAgICAgICImTmFqZGkgLi4uIgojZGVmaW5lIE1FTlVfSEVMUF9IRUxQX09OX0hFTFAgICAgICAgIiZPIHBvbW/oaSIKI2RlZmluZSBNRU5VX0hFTFBfVFVUT1JJQUwgICAgICAgICAgICImVmFkbmljYSIKCiNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiSW5mJm9ybWFjaWplIC4uLiIKI2RlZmluZSBNRU5VX0lORk9fTElDRU5TRSAgICAgICAgICAgICImTGljZW7obmEgcG9nb2RiYSIKI2RlZmluZSBNRU5VX0lORk9fTk9fV0FSUkFOVFkgICAgICAgICImQlJFWiBHQVJBTkNJSkUiCiNkZWZpbmUgTUVOVV9JTkZPX0FCT1VUX1dJTkUgICAgICAgICAiJk8gV0lORSIKCi8qIERpYWxvZ3MgKi8KCiNkZWZpbmUgRElBTE9HX09LICAgICAgICAgICAgICAgICAgICAiViByZWR1IgojZGVmaW5lIERJQUxPR19DQU5DRUwgICAgICAgICAgICAgICAgIlByZWtsaehpIgojZGVmaW5lIERJQUxPR19CUk9XU0UgICAgICAgICAgICAgICAgIlByZSZicnNrYWogLi4uIgojZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgIiZQb21v6CIKCiNkZWZpbmUgRElBTE9HX05FV19DQVBUSU9OICAgICAgICAgICAiTm92IHByb2dyYW1za2kgcHJlZG1ldCIKI2RlZmluZSBESUFMT0dfTkVXX05FVyAgICAgICAgICAgICAgICJOb3YoYSkiCiNkZWZpbmUgRElBTE9HX05FV19HUk9VUCAgICAgICAgICAgICAiUHJvZ3JhbXNrYSAmc2t1cGluYSIKI2RlZmluZSBESUFMT0dfTkVXX1BST0dSQU0gICAgICAgICAgICJQJnJvZ3JhbSIKCiNkZWZpbmUgRElBTE9HX01PVkVfQ0FQVElPTiAgICAgICAgICAiUHJlbWlrIHByb2dyYW1hIgojZGVmaW5lIERJQUxPR19NT1ZFX1BST0dSQU0gICAgICAgICAgIlByZW1ha25pIHByb2dyYW06IgojZGVmaW5lIERJQUxPR19NT1ZFX0ZST01fR1JPVVAgICAgICAgIkl6IHByb2dyYW1za2Ugc2t1cGluZToiCiNkZWZpbmUgRElBTE9HX01PVkVfVE9fR1JPVVAgICAgICAgICAiJlYgc2t1cGlubzoiCgojZGVmaW5lIERJQUxPR19DT1BZX0NBUFRJT04gICAgICAgICAgIktvcGlyYW5qZSBwcm9ncmFtYSIKI2RlZmluZSBESUFMT0dfQ09QWV9QUk9HUkFNICAgICAgICAgICJLb3BpcmFqIHByb2dyYW06IgojZGVmaW5lIERJQUxPR19DT1BZX0ZST01fR1JPVVAgICAgICAgRElBTE9HX01PVkVfRlJPTV9HUk9VUAojZGVmaW5lIERJQUxPR19DT1BZX1RPX0dST1VQICAgICAgICAgRElBTE9HX01PVkVfVE9fR1JPVVAKCiNkZWZpbmUgRElBTE9HX0dST1VQX0NBUFRJT04gICAgICAgICAiTGFzdG5vc3RpIHByb2dyYW1za2Ugc2t1cGluZSIKI2RlZmluZSBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04gICAgICImT3BpczoiCiNkZWZpbmUgRElBTE9HX0dST1VQX0ZJTEUgICAgICAgICAgICAiJkRhdG90ZWthIHNrdXBpbmU6IgoKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9DQVBUSU9OICAgICAgICJMYXN0bm9zdGkgcHJvZ3JhbWEiCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fREVTQ1JJUFRJT04gICBESUFMT0dfR1JPVVBfREVTQ1JJUFRJT04KI2RlZmluZSBESUFMT0dfUFJPR1JBTV9DT01NQU5EX0xJTkUgICImVWthem5hIHZyc3RpY2E6IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX0RJUkVDVE9SWSAgICAgIiZEZWxvdm5hIG1hcGE6IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX0hPVF9LRVkgICAgICAgIiZUaXBrZSB6YSBibGmebmppY286IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX1NZTUJPTCAgICAgICAgIiZNaW5pbWlyYW4gemFnb24iCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fT1RIRVJfU1lNQk9MICAiWmFtZW5qYWogJmlrb25vIC4uLiIKCiNkZWZpbmUgRElBTE9HX1NZTUJPTF9DQVBUSU9OICAgICAgICAiWmFtZW5qYXZhIGlrb25lIgojZGVmaW5lIERJQUxPR19TWU1CT0xfRklMRSAgICAgICAgICAgIkltZSAmZGF0b3Rla2U6IgojZGVmaW5lIERJQUxPR19TWU1CT0xfQ1VSUkVOVCAgICAgICAgIiZUcmVudXRuYSBpa29uYToiCgojZGVmaW5lIERJQUxPR19FWEVDVVRFX0NBUFRJT04gICAgICAgIlphZ29uIHByb2dyYW1hIgojZGVmaW5lIERJQUxPR19FWEVDVVRFX0NPTU1BTkRfTElORSAgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FCiNkZWZpbmUgRElBTE9HX0VYRUNVVEVfU1lNQk9MICAgICAgICBESUFMT0dfUFJPR1JBTV9TWU1CT0wKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1BST0dSQU1fTUFOQUdFUiAgICAgICAgICAgICJVcHJhdml0ZWxqIHByb2dyYW1vdiIKI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgIk5BUEFLQSIKI2RlZmluZSBTVFJJTkdfV0FSTklORyAgICAgICAgICAgICAgICAgICAgIk9QT1pPUklMTyIKI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aWNpamEiCiNkZWZpbmUgU1RSSU5HX0RFTEVURSAgICAgICAgICAgICAgICAgICAgICJCcmlzYW5qZSIKI2RlZmluZSBTVFJJTkdfREVMRVRFX0dST1VQX3MgICAgICAgICAgICAgIkFsaSBzdGUgcHJlcHJp6GFuaSwgZGEgnmVsaXRlIGl6YnJpc2F0aSBza3VwaW5vILslc6s/IgojZGVmaW5lIFNUUklOR19ERUxFVEVfUFJPR1JBTV9zICAgICAgICAgICAiQWxpIHN0ZSBwcmVwcmnoYW5pLCBkYSCeZWxpdGUgaXpicmlzYXRpIGVsZW1lbnQguyVzqz8iCiNkZWZpbmUgU1RSSU5HX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICJOaSAommUpIG5hIHZvbGpvIgojZGVmaW5lIFNUUklOR19GSUxFX1JFQURfRVJST1JfcyAgICAgICAgICAiTmFwYWthIHByaSBicmFuanUgaXoguyVzqyIKI2RlZmluZSBTVFJJTkdfRklMRV9XUklURV9FUlJPUl9zICAgICAgICAgIk5hcGFrYSBwcmkgcGlzYW5qdSB2ILslc6siCgojZGVmaW5lIFNUUklOR19HUlBGSUxFX1JFQURfRVJST1JfcyAgICAgICAiXApEYXRvdGVrZSBwcm9ncmFtc2tlIHNrdXBpbmUguyVzqyBuaSBtb2dv6GUgb2RwcmV0aS5cblwKQWxpIJ5lbGl0ZSwgZGEgam8gdXByYXZpdGVsaiBwcm9ncmFtb3YgcG9za3WaYSBuYWxvnml0aSB0dWRpIHYgcHJpaG9kbmplPyIKCiNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICJabWFuamthbG8gamUgcG9tbmlsbmlrYSIKI2RlZmluZSBTVFJJTkdfV0lOSEVMUF9FUlJPUiAgICAgICAgICAgICAgIlBvbW/oIG5pIG5hIHZvbGpvIgojZGVmaW5lIFNUUklOR19VTktOT1dOX0ZFQVRVUkVfcyAgICAgICAgICAiTmV6bmFuYSBtb55ub3N0IHYgJXMiCiNkZWZpbmUgU1RSSU5HX0ZJTEVfTk9UX09WRVJXUklUVEVOX3MgICAgICJEYXRvdGVrYSBgJXMnIJ5lIG9ic3RhamEgaW4gbmkgYmlsYSBwcmVwaXNhbmEuIgojZGVmaW5lIFNUUklOR19TQVZFX0dST1VQX0FTX3MgICAgICAgICAgICAiU2hyYW5qdWplbSBkYXRvdGVrbyBza3VwaW5lIGtvdCBgJXMnLCBkYSBiaSBwcmVwcmXoaWwgcHJlcGlzYW5qZSBvcmlnaW5hbG5lIGRhdG90ZWtlIgoKI2RlZmluZSBTVFJJTkdfTk9fSE9UX0tFWSAgICAgICAgICAgICAgICAgIk5vYmVuIgoKI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICAgICAgIlZzZSBkYXRvdGVrZSAoKi4qKSIKI2RlZmluZSBTVFJJTkdfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgIlByb2dyYW1pIgojZGVmaW5lIFNUUklOR19MSUJSQVJJRVNfRExMICAgICAgICAgICAgICAiS25qaZ5uaWNlICgqLmRsbCkiCiNkZWZpbmUgU1RSSU5HX1NZTUJPTF9GSUxFUyAgICAgICAgICAgICAgICJJa29uc2tlIGRhdG90ZWtlIgojZGVmaW5lIFNUUklOR19TWU1CT0xTX0lDTyAgICAgICAgICAgICAgICAiSWtvbmUgKCouaWNvKSIKCiNpbmNsdWRlICJYeC5yYyIK