From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sravanthi Kollukuduru Subject: [DPU PATCH 2/2] drm/msm: Add hardware catalog file for SDM845 Date: Wed, 14 Mar 2018 11:21:38 +0530 Message-ID: <1521006698-23703-3-git-send-email-skolluku@codeaurora.org> References: <1521006698-23703-1-git-send-email-skolluku@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1521006698-23703-1-git-send-email-skolluku-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Sravanthi Kollukuduru List-Id: dri-devel@lists.freedesktop.org VGhpcyBjaGFuZ2UgYWRkcyB0aGUgaGFyZHdhcmUgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiBkcml2 ZXIgc291cmNlCmZvciBTRE04NDUuIFRoaXMgcmVtb3ZlcyB0aGUgY3VycmVudCBsb2dpYyBvZiBk dCBiYXNlZCBwYXJzaW5nCm9mIHRhcmdldCBjYXRhbG9nIGluZm9ybWF0aW9uLgoKU2lnbmVkLW9m Zi1ieTogU3JhdmFudGhpIEtvbGx1a3VkdXJ1IDxza29sbHVrdUBjb2RlYXVyb3JhLm9yZz4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAg IDEgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYyAgICAg fCAzMDcxICstLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY2F0YWxvZy5oICAgICB8ICAgMTcgKy0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2NhdGFsb2dfc2RtODQ1LmMgIHwgIDc0NCArKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jICAgICAgICAgICAgfCAgICAyICstCiA1IGZpbGVzIGNo YW5nZWQsIDc2NyBpbnNlcnRpb25zKCspLCAzMDY4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nX3NkbTg0 NS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggYjQ3ZWY1Mi4uZmU4NGEzNyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCkBAIC01OSw2ICs1OSw3IEBAIG1zbS15IDo9IFwKIAlkaXNwL2RwdTEvZHB1X2h3X2Fk NC5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2Jsay5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2NhdGFs b2cubyBcCisJZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nX3NkbTg0NS5vIFwKIAlkaXNwL2RwdTEv ZHB1X2h3X2NkbS5vIFwKIAlkaXNwL2RwdTEvZHB1X2h3X2NvbG9yX3Byb2NfdjQubyBcCiAJZGlz cC9kcHUxL2RwdV9od19jb2xvcl9wcm9jZXNzaW5nX3YxXzcubyBcCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwppbmRleCA3MDE5NjIwLi5mOWJmOWZh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxv Zy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMK QEAgLTE5LDMwODEgKzE5LDMwIEBACiAjaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2dfZm9ybWF0Lmgi CiAjaW5jbHVkZSAiZHB1X2ttcy5oIgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTUFDUk8gREVGSU5JVElPTgotICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0KLS8qKgotICogTWF4IGhhcmR3YXJlIGJsb2NrIGluIGNlcnRhaW4gaGFyZHdhcmUuIEZv ciBleDogc3NwcCBwaXBlcwotICogY2FuIGhhdmUgUVNFRUQsIHBjYywgaWdjLCBwYSwgY3NjLCBx b3MgZW50cmllcywgZXRjLiBUaGlzIGNvdW50IGlzCi0gKiA2NCBiYXNlZCBvbiBzb2Z0d2FyZSBk ZXNpZ24uIEl0IHNob3VsZCBiZSBpbmNyZWFzZWQgaWYgYW55IG9mIHRoZQotICogaGFyZHdhcmUg YmxvY2sgaGFzIG1vcmUgc3ViYmxvY2tzLgotICovCi0jZGVmaW5lIE1BWF9EUFVfSFdfQkxLICA2 NAotCi0vKiBlYWNoIGVudHJ5IHdpbGwgaGF2ZSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXQgb2Zm c2V0IGluIHRoYXQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTUFYX0JJVF9PRkZTRVQgMgotCi0vKiBk ZWZhdWx0IGxpbmUgd2lkdGggZm9yIHNzcHAsIG1peGVyLCBkcyAoaW5wdXQpLCB3YiAqLwotI2Rl ZmluZSBERUZBVUxUX0RQVV9MSU5FX1dJRFRIIDIwNDgKLQotLyogZGVmYXVsdCBvdXRwdXQgbGlu ZSB3aWR0aCBmb3IgZHMgKi8KLSNkZWZpbmUgREVGQVVMVF9EUFVfT1VUUFVUX0xJTkVfV0lEVEgg MjU2MAotCi0vKiBtYXggbWl4ZXIgYmxlbmQgc3RhZ2VzICovCi0jZGVmaW5lIERFRkFVTFRfRFBV X01JWEVSX0JMRU5EU1RBR0VTIDcKLQotLyogbWF4IGJhbmsgYml0IGZvciBtYWNybyB0aWxlIGFu ZCB1YndjIGZvcm1hdCAqLwotI2RlZmluZSBERUZBVUxUX0RQVV9ISUdIRVNUX0JBTktfQklUIDE1 Ci0KLS8qIGRlZmF1bHQgdWJ3YyB2ZXJzaW9uICovCi0jZGVmaW5lIERFRkFVTFRfRFBVX1VCV0Nf VkVSU0lPTiBEUFVfSFdfVUJXQ19WRVJfMTAKLQotLyogZGVmYXVsdCB1YndjIHN0YXRpYyBjb25m aWcgcmVnaXN0ZXIgdmFsdWUgKi8KLSNkZWZpbmUgREVGQVVMVF9EUFVfVUJXQ19TVEFUSUMgMHgw Ci0KLS8qIGRlZmF1bHQgdWJ3YyBzd2l6emxlIHJlZ2lzdGVyIHZhbHVlICovCi0jZGVmaW5lIERF RkFVTFRfRFBVX1VCV0NfU1dJWlpMRSAweDAKLQotLyogZGVmYXVsdCBoYXJkd2FyZSBibG9jayBz aXplIGlmIGR0c2kgZW50cnkgaXMgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgREVGQVVMVF9EUFVf SFdfQkxPQ0tfTEVOIDB4MTAwCi0KLS8qIHRvdGFsIG51bWJlciBvZiBpbnRmIC0gZHAsIGRzaSwg aGRtaSAqLwotI2RlZmluZSBJTlRGX0NPVU5UCQkJMwotCi0jZGVmaW5lIE1BWF9VUFNDQUxFX1JB VElPCQkyMAotI2RlZmluZSBNQVhfRE9XTlNDQUxFX1JBVElPCQk0Ci0jZGVmaW5lIFNTUFBfVU5J VFlfU0NBTEUJCTEKLQotI2RlZmluZSBNQVhfSE9SWl9ERUNJTUFUSU9OCQk0Ci0jZGVmaW5lIE1B WF9WRVJUX0RFQ0lNQVRJT04JCTQKLQotI2RlZmluZSBNQVhfU1BMSVRfRElTUExBWV9DVEwJCTIK LSNkZWZpbmUgTUFYX1BQX1NQTElUX0RJU1BMQVlfQ1RMCTEKLQotI2RlZmluZSBNRFNTX0JBU0Vf T0ZGU0VUCQkweDAKLQotI2RlZmluZSBST1RfTE1fT0ZGU0VUCQkJMwotI2RlZmluZSBMSU5FX0xN X09GRlNFVAkJCTUKLSNkZWZpbmUgTElORV9NT0RFX1dCX09GRlNFVAkJMgotCi0vKiBtYXhpbXVt IFhJTiBoYWx0IHRpbWVvdXQgaW4gdXNlYyAqLwotI2RlZmluZSBWQklGX1hJTl9IQUxUX1RJTUVP VVQJCTB4NDAwMAotCi0jZGVmaW5lIERFRkFVTFRfUElYRUxfUkFNX1NJWkUJCSg1MCAqIDEwMjQp Ci0KLS8qIGFjY2VzcyBwcm9wZXJ0eSB2YWx1ZSBiYXNlZCBvbiBwcm9wX3R5cGUgYW5kIGhhcmR3 YXJlIGluZGV4ICovCi0jZGVmaW5lIFBST1BfVkFMVUVfQUNDRVNTKHAsIGksIGopCQkoKHAgKyBp KS0+dmFsdWVbal0pCi0KLS8qCi0gKiBhY2Nlc3MgZWxlbWVudCB3aXRoaW4gUFJPUF9UWVBFX0JJ VF9PRkZTRVRfQVJSQVlzIGJhc2VkIG9uIHByb3BfdHlwZSwKLSAqIGhhcmR3YXJlIGluZGV4IGFu ZCBvZmZzZXQgYXJyYXkgaW5kZXgKLSAqLwotI2RlZmluZSBQUk9QX0JJVFZBTFVFX0FDQ0VTUyhw LCBpLCBqLCBrKQkoKHAgKyBpKS0+Yml0X3ZhbHVlW2pdW2tdKQotCi0vKgotICogRGVmYXVsdCBw YXJhbWV0ZXIgdmFsdWVzCi0gKi8KLSNkZWZpbmUgREVGQVVMVF9NQVhfQldfSElHSAkJCTcwMDAw MDAKLSNkZWZpbmUgREVGQVVMVF9NQVhfQldfTE9XCQkJNzAwMDAwMAotI2RlZmluZSBERUZBVUxU X1VOREVSU0laRURfUFJFRklMTF9MSU5FUwkyCi0jZGVmaW5lIERFRkFVTFRfWFRSQV9QUkVGSUxM X0xJTkVTCQkyCi0jZGVmaW5lIERFRkFVTFRfREVTVF9TQ0FMRV9QUkVGSUxMX0xJTkVTCTMKLSNk ZWZpbmUgREVGQVVMVF9NQUNST1RJTEVfUFJFRklMTF9MSU5FUwkJNAotI2RlZmluZSBERUZBVUxU X1lVVl9OVjEyX1BSRUZJTExfTElORVMJCTgKLSNkZWZpbmUgREVGQVVMVF9MSU5FQVJfUFJFRklM TF9MSU5FUwkJMQotI2RlZmluZSBERUZBVUxUX0RPV05TQ0FMSU5HX1BSRUZJTExfTElORVMJMQot I2RlZmluZSBERUZBVUxUX0NPUkVfSUJfRkYJCQkiNi4wIgotI2RlZmluZSBERUZBVUxUX0NPUkVf Q0xLX0ZGCQkJIjEuMCIKLSNkZWZpbmUgREVGQVVMVF9DT01QX1JBVElPX1JUIFwKLQkJIk5WMTIv NS8xLzEuMjMgQUIyNC81LzEvMS4yMyBYQjI0LzUvMS8xLjIzIgotI2RlZmluZSBERUZBVUxUX0NP TVBfUkFUSU9fTlJUIFwKLQkJIk5WMTIvNS8xLzEuMjUgQUIyNC81LzEvMS4yNSBYQjI0LzUvMS8x LjI1IgotI2RlZmluZSBERUZBVUxUX01BWF9QRVJfUElQRV9CVwkJCTI0MDAwMDAKLSNkZWZpbmUg REVGQVVMVF9BTU9SVElaQUJMRV9USFJFU0hPTEQJCTI1Ci0KLS8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgRFRTSSBQUk9Q RVJUWSBJTkRFWAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi1lbnVtIHsKLQlIV19PRkYsCi0JSFdfTEVOLAotCUhXX1BST1Bf TUFYLAotfTsKLQotZW51bSBkcHVfcHJvcCB7Ci0JRFBVX09GRiwKLQlEUFVfTEVOLAotCVNTUFBf TElORVdJRFRILAotCU1JWEVSX0xJTkVXSURUSCwKLQlNSVhFUl9CTEVORCwKLQlXQl9MSU5FV0lE VEgsCi0JQkFOS19CSVQsCi0JVUJXQ19WRVJTSU9OLAotCVVCV0NfU1RBVElDLAotCVVCV0NfU1dJ WlpMRSwKLQlRU0VFRF9UWVBFLAotCUNTQ19UWVBFLAotCVBBTklDX1BFUl9QSVBFLAotCVNSQ19T UExJVCwKLQlESU1fTEFZRVIsCi0JU01BUlRfRE1BX1JFViwKLQlJRExFX1BDLAotCURFU1RfU0NB TEVSLAotCURQVV9QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCVBFUkZfTUFYX0JXX0xPVywKLQlQ RVJGX01BWF9CV19ISUdILAotCVBFUkZfTUlOX0NPUkVfSUIsCi0JUEVSRl9NSU5fTExDQ19JQiwK LQlQRVJGX01JTl9EUkFNX0lCLAotCVBFUkZfQ09SRV9JQl9GRiwKLQlQRVJGX0NPUkVfQ0xLX0ZG LAotCVBFUkZfQ09NUF9SQVRJT19SVCwKLQlQRVJGX0NPTVBfUkFUSU9fTlJULAotCVBFUkZfVU5E RVJTSVpFRF9QUkVGSUxMX0xJTkVTLAotCVBFUkZfREVTVF9TQ0FMRV9QUkVGSUxMX0xJTkVTLAot CVBFUkZfTUFDUk9USUxFX1BSRUZJTExfTElORVMsCi0JUEVSRl9ZVVZfTlYxMl9QUkVGSUxMX0xJ TkVTLAotCVBFUkZfTElORUFSX1BSRUZJTExfTElORVMsCi0JUEVSRl9ET1dOU0NBTElOR19QUkVG SUxMX0xJTkVTLAotCVBFUkZfWFRSQV9QUkVGSUxMX0xJTkVTLAotCVBFUkZfQU1PUlRJWkFCTEVf VEhSRVNIT0xELAotCVBFUkZfREFOR0VSX0xVVCwKLQlQRVJGX1NBRkVfTFVULAotCVBFUkZfUU9T X0xVVF9MSU5FQVIsCi0JUEVSRl9RT1NfTFVUX01BQ1JPVElMRSwKLQlQRVJGX1FPU19MVVRfTlJU LAotCVBFUkZfUU9TX0xVVF9DV0IsCi0JUEVSRl9DRFBfU0VUVElORywKLQlQRVJGX1BST1BfTUFY LAotfTsKLQotZW51bSB7Ci0JU1NQUF9PRkYsCi0JU1NQUF9TSVpFLAotCVNTUFBfVFlQRSwKLQlT U1BQX1hJTiwKLQlTU1BQX0NMS19DVFJMLAotCVNTUFBfQ0xLX1NUQVRVUywKLQlTU1BQX1NDQUxF X1NJWkUsCi0JU1NQUF9WSUdfQkxPQ0tTLAotCVNTUFBfUkdCX0JMT0NLUywKLQlTU1BQX0VYQ0xf UkVDVCwKLQlTU1BQX1NNQVJUX0RNQSwKLQlTU1BQX01BWF9QRVJfUElQRV9CVywKLQlTU1BQX1BS T1BfTUFYLAotfTsKLQotZW51bSB7Ci0JVklHX1FTRUVEX09GRiwKLQlWSUdfUVNFRURfTEVOLAot CVZJR19DU0NfT0ZGLAotCVZJR19IU0lDX1BST1AsCi0JVklHX01FTUNPTE9SX1BST1AsCi0JVklH X1BDQ19QUk9QLAotCVZJR19QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCVJHQl9TQ0FMRVJfT0ZG LAotCVJHQl9TQ0FMRVJfTEVOLAotCVJHQl9QQ0NfUFJPUCwKLQlSR0JfUFJPUF9NQVgsCi19Owot Ci1lbnVtIHsKLQlJTlRGX09GRiwKLQlJTlRGX0xFTiwKLQlJTlRGX1BSRUZFVENILAotCUlOVEZf VFlQRSwKLQlJTlRGX1BST1BfTUFYLAotfTsKLQotZW51bSB7Ci0JUFBfT0ZGLAotCVBQX0xFTiwK LQlURV9PRkYsCi0JVEVfTEVOLAotCVRFMl9PRkYsCi0JVEUyX0xFTiwKLQlQUF9TTEFWRSwKLQlE SVRIRVJfT0ZGLAotCURJVEhFUl9MRU4sCi0JRElUSEVSX1ZFUiwKLQlQUF9QUk9QX01BWCwKLX07 Ci0KLWVudW0gewotCURTQ19PRkYsCi0JRFNDX0xFTiwKLQlEU0NfUFJPUF9NQVgsCi19OwotCi1l bnVtIHsKLQlEU19UT1BfT0ZGLAotCURTX1RPUF9MRU4sCi0JRFNfVE9QX0lOUFVUX0xJTkVXSURU SCwKLQlEU19UT1BfT1VUUFVUX0xJTkVXSURUSCwKLQlEU19UT1BfUFJPUF9NQVgsCi19OwotCi1l bnVtIHsKLQlEU19PRkYsCi0JRFNfTEVOLAotCURTX1BST1BfTUFYLAotfTsKLQotZW51bSB7Ci0J RFNQUF9UT1BfT0ZGLAotCURTUFBfVE9QX1NJWkUsCi0JRFNQUF9UT1BfUFJPUF9NQVgsCi19Owot Ci1lbnVtIHsKLQlEU1BQX09GRiwKLQlEU1BQX1NJWkUsCi0JRFNQUF9CTE9DS1MsCi0JRFNQUF9Q Uk9QX01BWCwKLX07Ci0KLWVudW0gewotCURTUFBfSUdDX1BST1AsCi0JRFNQUF9QQ0NfUFJPUCwK LQlEU1BQX0dDX1BST1AsCi0JRFNQUF9IU0lDX1BST1AsCi0JRFNQUF9NRU1DT0xPUl9QUk9QLAot CURTUFBfU0lYWk9ORV9QUk9QLAotCURTUFBfR0FNVVRfUFJPUCwKLQlEU1BQX0RJVEhFUl9QUk9Q LAotCURTUFBfSElTVF9QUk9QLAotCURTUFBfVkxVVF9QUk9QLAotCURTUFBfQkxPQ0tTX1BST1Bf TUFYLAotfTsKLQotZW51bSB7Ci0JQURfT0ZGLAotCUFEX1ZFUlNJT04sCi0JQURfUFJPUF9NQVgs Ci19OwotCi1lbnVtIHsKLQlNSVhFUl9PRkYsCi0JTUlYRVJfTEVOLAotCU1JWEVSX1BBSVJfTUFT SywKLQlNSVhFUl9CTE9DS1MsCi0JTUlYRVJfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlNSVhF Ul9HQ19QUk9QLAotCU1JWEVSX0JMT0NLU19QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCU1JWEVS X0JMRU5EX09QX09GRiwKLQlNSVhFUl9CTEVORF9QUk9QX01BWCwKLX07Ci0KLWVudW0gewotCVdC X09GRiwKLQlXQl9MRU4sCi0JV0JfSUQsCi0JV0JfWElOX0lELAotCVdCX0NMS19DVFJMLAotCVdC X1BST1BfTUFYLAotfTsKLQotZW51bSB7Ci0JVkJJRl9PRkYsCi0JVkJJRl9MRU4sCi0JVkJJRl9J RCwKLQlWQklGX0RFRkFVTFRfT1RfUkRfTElNSVQsCi0JVkJJRl9ERUZBVUxUX09UX1dSX0xJTUlU LAotCVZCSUZfRFlOQU1JQ19PVF9SRF9MSU1JVCwKLQlWQklGX0RZTkFNSUNfT1RfV1JfTElNSVQs Ci0JVkJJRl9RT1NfUlRfUkVNQVAsCi0JVkJJRl9RT1NfTlJUX1JFTUFQLAotCVZCSUZfTUVNVFlQ RV8wLAotCVZCSUZfTUVNVFlQRV8xLAotCVZCSUZfUFJPUF9NQVgsCi19OwotCi1lbnVtIHsKLQlS RUdfRE1BX09GRiwKLQlSRUdfRE1BX1ZFUlNJT04sCi0JUkVHX0RNQV9UUklHR0VSX09GRiwKLQlS RUdfRE1BX1BST1BfTUFYCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZHRzIHByb3BlcnR5IGRlZmluaXRpb24K LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotZW51bSBwcm9wX3R5cGUgewotCVBST1BfVFlQRV9CT09MLAotCVBST1BfVFlQRV9V MzIsCi0JUFJPUF9UWVBFX1UzMl9BUlJBWSwKLQlQUk9QX1RZUEVfU1RSSU5HLAotCVBST1BfVFlQ RV9TVFJJTkdfQVJSQVksCi0JUFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVksCi0JUFJPUF9UWVBF X05PREUsCi19OwotCi1zdHJ1Y3QgZHB1X3Byb3BfdHlwZSB7Ci0JLyogdXNlIHByb3BlcnR5IGlu ZGV4IGZyb20gZW51bSBwcm9wZXJ0eSBmb3IgcmVhZGFiaWxpdHkgcHVycG9zZSAqLwotCXU4IGlk OwotCS8qIGl0IHNob3VsZCBiZSBwcm9wZXJ0eSBuYW1lIGJhc2VkIG9uIGR0c2kgZG9jdW1lbnRh dGlvbiAqLwotCWNoYXIgKnByb3BfbmFtZTsKLQkvKioKLQkgKiBpZiBwcm9wZXJ0eSBpcyBtYXJr ZWQgbWFuZGF0b3J5IHRoZW4gaXQgd2lsbCBmYWlsIHBhcnNpbmcKLQkgKiB3aGVuIHByb3BlcnR5 IGlzIG5vdCBwcmVzZW50Ci0JICovCi0JdTMyICBpc19tYW5kYXRvcnk7Ci0JLyogcHJvcGVydHkg dHlwZSBiYXNlZCBvbiAiZW51bSBwcm9wX3R5cGUiICAqLwotCWVudW0gcHJvcF90eXBlIHR5cGU7 Ci19OwotCi1zdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgewotCXUzMiB2YWx1ZVtNQVhfRFBVX0hXX0JM S107Ci0JdTMyIGJpdF92YWx1ZVtNQVhfRFBVX0hXX0JMS11bTUFYX0JJVF9PRkZTRVRdOwotfTsK LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLSAqIGR0cyBwcm9wZXJ0eSBsaXN0Ci0gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgZHB1 X3Byb3BfdHlwZSBkcHVfcHJvcFtdID0gewotCXtEUFVfT0ZGLCAicWNvbSxkcHUtb2ZmIiwgdHJ1 ZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RQVV9MRU4sICJxY29tLGRwdS1sZW4iLCBmYWxzZSwgUFJP UF9UWVBFX1UzMn0sCi0Je1NTUFBfTElORVdJRFRILCAicWNvbSxkcHUtc3NwcC1saW5ld2lkdGgi LCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je01JWEVSX0xJTkVXSURUSCwgInFjb20sZHB1LW1p eGVyLWxpbmV3aWR0aCIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7TUlYRVJfQkxFTkQsICJx Y29tLGRwdS1taXhlci1ibGVuZHN0YWdlcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7V0Jf TElORVdJRFRILCAicWNvbSxkcHUtd2ItbGluZXdpZHRoIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9 LAotCXtCQU5LX0JJVCwgInFjb20sZHB1LWhpZ2hlc3QtYmFuay1iaXQiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCi0Je1VCV0NfVkVSU0lPTiwgInFjb20sZHB1LXVid2MtdmVyc2lvbiIsIGZhbHNl LCBQUk9QX1RZUEVfVTMyfSwKLQl7VUJXQ19TVEFUSUMsICJxY29tLGRwdS11YndjLXN0YXRpYyIs IGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7VUJXQ19TV0laWkxFLCAicWNvbSxkcHUtdWJ3Yy1z d2l6emxlIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtRU0VFRF9UWVBFLCAicWNvbSxkcHUt cXNlZWQtdHlwZSIsIGZhbHNlLCBQUk9QX1RZUEVfU1RSSU5HfSwKLQl7Q1NDX1RZUEUsICJxY29t LGRwdS1jc2MtdHlwZSIsIGZhbHNlLCBQUk9QX1RZUEVfU1RSSU5HfSwKLQl7UEFOSUNfUEVSX1BJ UEUsICJxY29tLGRwdS1wYW5pYy1wZXItcGlwZSIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCi0J e1NSQ19TUExJVCwgInFjb20sZHB1LWhhcy1zcmMtc3BsaXQiLCBmYWxzZSwgUFJPUF9UWVBFX0JP T0x9LAotCXtESU1fTEFZRVIsICJxY29tLGRwdS1oYXMtZGltLWxheWVyIiwgZmFsc2UsIFBST1Bf VFlQRV9CT09MfSwKLQl7U01BUlRfRE1BX1JFViwgInFjb20sZHB1LXNtYXJ0LWRtYS1yZXYiLCBm YWxzZSwgUFJPUF9UWVBFX1NUUklOR30sCi0Je0lETEVfUEMsICJxY29tLGRwdS1oYXMtaWRsZS1w YyIsIGZhbHNlLCBQUk9QX1RZUEVfQk9PTH0sCi0Je0RFU1RfU0NBTEVSLCAicWNvbSxkcHUtaGFz LWRlc3Qtc2NhbGVyIiwgZmFsc2UsIFBST1BfVFlQRV9CT09MfSwKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHB1X3Byb3BfdHlwZSBkcHVfcGVyZl9wcm9wW10gPSB7Ci0Je1BFUkZfTUFYX0JXX0xPVywg InFjb20sZHB1LW1heC1idy1sb3cta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVS Rl9NQVhfQldfSElHSCwgInFjb20sZHB1LW1heC1idy1oaWdoLWticHMiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMn0sCi0Je1BFUkZfTUlOX0NPUkVfSUIsICJxY29tLGRwdS1taW4tY29yZS1pYi1rYnBz IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX01JTl9MTENDX0lCLCAicWNvbSxkcHUt bWluLWxsY2MtaWIta2JwcyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9NSU5fRFJB TV9JQiwgInFjb20sZHB1LW1pbi1kcmFtLWliLWticHMiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0s Ci0Je1BFUkZfQ09SRV9JQl9GRiwgInFjb20sZHB1LWNvcmUtaWItZmYiLCBmYWxzZSwgUFJPUF9U WVBFX1NUUklOR30sCi0Je1BFUkZfQ09SRV9DTEtfRkYsICJxY29tLGRwdS1jb3JlLWNsay1mZiIs IGZhbHNlLCBQUk9QX1RZUEVfU1RSSU5HfSwKLQl7UEVSRl9DT01QX1JBVElPX1JULCAicWNvbSxk cHUtY29tcC1yYXRpby1ydCIsIGZhbHNlLAotCQkJUFJPUF9UWVBFX1NUUklOR30sCi0Je1BFUkZf Q09NUF9SQVRJT19OUlQsICJxY29tLGRwdS1jb21wLXJhdGlvLW5ydCIsIGZhbHNlLAotCQkJUFJP UF9UWVBFX1NUUklOR30sCi0Je1BFUkZfVU5ERVJTSVpFRF9QUkVGSUxMX0xJTkVTLCAicWNvbSxk cHUtdW5kZXJzaXplZHByZWZpbGwtbGluZXMiLAotCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAot CXtQRVJGX0RFU1RfU0NBTEVfUFJFRklMTF9MSU5FUywgInFjb20sZHB1LWRlc3Qtc2NhbGVwcmVm aWxsLWxpbmVzIiwKLQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9NQUNST1RJTEVf UFJFRklMTF9MSU5FUywgInFjb20sZHB1LW1hY3JvdGlsZXByZWZpbGwtbGluZXMiLAotCQkJZmFs c2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX1lVVl9OVjEyX1BSRUZJTExfTElORVMsICJxY29t LGRwdS15dXYtbnYxMnByZWZpbGwtbGluZXMiLAotCQkJZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAot CXtQRVJGX0xJTkVBUl9QUkVGSUxMX0xJTkVTLCAicWNvbSxkcHUtbGluZWFycHJlZmlsbC1saW5l cyIsCi0JCQlmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1BFUkZfRE9XTlNDQUxJTkdfUFJFRklM TF9MSU5FUywgInFjb20sZHB1LWRvd25zY2FsaW5ncHJlZmlsbC1saW5lcyIsCi0JCQlmYWxzZSwg UFJPUF9UWVBFX1UzMn0sCi0Je1BFUkZfWFRSQV9QUkVGSUxMX0xJTkVTLCAicWNvbSxkcHUteHRy YS1wcmVmaWxsLWxpbmVzIiwKLQkJCWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7UEVSRl9BTU9S VElaQUJMRV9USFJFU0hPTEQsICJxY29tLGRwdS1hbW9ydGl6YWJsZS10aHJlc2hvbGQiLAotCQkJ ZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtQRVJGX0RBTkdFUl9MVVQsICJxY29tLGRwdS1kYW5n ZXItbHV0IiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtQRVJGX1NBRkVfTFVULCAi cWNvbSxkcHUtc2FmZS1sdXQiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1BFUkZf UU9TX0xVVF9MSU5FQVIsICJxY29tLGRwdS1xb3MtbHV0LWxpbmVhciIsIGZhbHNlLAotCQkJUFJP UF9UWVBFX1UzMl9BUlJBWX0sCi0Je1BFUkZfUU9TX0xVVF9NQUNST1RJTEUsICJxY29tLGRwdS1x b3MtbHV0LW1hY3JvdGlsZSIsIGZhbHNlLAotCQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1BF UkZfUU9TX0xVVF9OUlQsICJxY29tLGRwdS1xb3MtbHV0LW5ydCIsIGZhbHNlLAotCQkJUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi0Je1BFUkZfUU9TX0xVVF9DV0IsICJxY29tLGRwdS1xb3MtbHV0LWN3 YiIsIGZhbHNlLAotCQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1BFUkZfQ0RQX1NFVFRJTkcs ICJxY29tLGRwdS1jZHAtc2V0dGluZyIsIGZhbHNlLAotCQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0s Ci19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgc3NwcF9wcm9wW10gPSB7Ci0Je1NT UFBfT0ZGLCAicWNvbSxkcHUtc3NwcC1vZmYiLCB0cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwK LQl7U1NQUF9TSVpFLCAicWNvbSxkcHUtc3NwcC1zcmMtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVf VTMyfSwKLQl7U1NQUF9UWVBFLCAicWNvbSxkcHUtc3NwcC10eXBlIiwgdHJ1ZSwgUFJPUF9UWVBF X1NUUklOR19BUlJBWX0sCi0Je1NTUFBfWElOLCAicWNvbSxkcHUtc3NwcC14aW4taWQiLCB0cnVl LCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7U1NQUF9DTEtfQ1RSTCwgInFjb20sZHB1LXNzcHAt Y2xrLWN0cmwiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVl9LAotCXtTU1BQ X0NMS19TVEFUVVMsICJxY29tLGRwdS1zc3BwLWNsay1zdGF0dXMiLCBmYWxzZSwKLQkJUFJPUF9U WVBFX0JJVF9PRkZTRVRfQVJSQVl9LAotCXtTU1BQX1NDQUxFX1NJWkUsICJxY29tLGRwdS1zc3Bw LXNjYWxlLXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1NTUFBfVklHX0JMT0NLUywg InFjb20sZHB1LXNzcHAtdmlnLWJsb2NrcyIsIGZhbHNlLCBQUk9QX1RZUEVfTk9ERX0sCi0Je1NT UFBfUkdCX0JMT0NLUywgInFjb20sZHB1LXNzcHAtcmdiLWJsb2NrcyIsIGZhbHNlLCBQUk9QX1RZ UEVfTk9ERX0sCi0Je1NTUFBfRVhDTF9SRUNULCAicWNvbSxkcHUtc3NwcC1leGNsLXJlY3QiLCBm YWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1NTUFBfU01BUlRfRE1BLCAicWNvbSxkcHUt c3NwcC1zbWFydC1kbWEtcHJpb3JpdHkiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0s Ci0Je1NTUFBfTUFYX1BFUl9QSVBFX0JXLCAicWNvbSxkcHUtbWF4LXBlci1waXBlLWJ3LWticHMi LCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRw dV9wcm9wX3R5cGUgdmlnX3Byb3BbXSA9IHsKLQl7VklHX1FTRUVEX09GRiwgInFjb20sZHB1LXZp Zy1xc2VlZC1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je1ZJR19RU0VFRF9MRU4sICJx Y29tLGRwdS12aWctcXNlZWQtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7VklHX0NT Q19PRkYsICJxY29tLGRwdS12aWctY3NjLW9mZiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7 VklHX0hTSUNfUFJPUCwgInFjb20sZHB1LXZpZy1oc2ljIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJf QVJSQVl9LAotCXtWSUdfTUVNQ09MT1JfUFJPUCwgInFjb20sZHB1LXZpZy1tZW1jb2xvciIsIGZh bHNlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7VklHX1BDQ19QUk9QLCAicWNvbSxkcHUt dmlnLXBjYyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHB1X3Byb3BfdHlwZSByZ2JfcHJvcFtdID0gewotCXtSR0JfU0NBTEVSX09GRiwgInFjb20s ZHB1LXJnYi1zY2FsZXItb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtSR0JfU0NBTEVS X0xFTiwgInFjb20sZHB1LXJnYi1zY2FsZXItc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwK LQl7UkdCX1BDQ19QUk9QLCAicWNvbSxkcHUtcmdiLXBjYyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMy X0FSUkFZfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBjdGxfcHJvcFtdID0g ewotCXtIV19PRkYsICJxY29tLGRwdS1jdGwtb2ZmIiwgdHJ1ZSwgUFJPUF9UWVBFX1UzMl9BUlJB WX0sCi0Je0hXX0xFTiwgInFjb20sZHB1LWN0bC1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9 LAotfTsKLQotc3RydWN0IGRwdV9wcm9wX3R5cGUgbWl4ZXJfYmxlbmRfcHJvcFtdID0gewotCXtN SVhFUl9CTEVORF9PUF9PRkYsICJxY29tLGRwdS1taXhlci1ibGVuZC1vcC1vZmYiLCB0cnVlLAot CQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlw ZSBtaXhlcl9wcm9wW10gPSB7Ci0Je01JWEVSX09GRiwgInFjb20sZHB1LW1peGVyLW9mZiIsIHRy dWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtNSVhFUl9MRU4sICJxY29tLGRwdS1taXhlci1z aXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtNSVhFUl9QQUlSX01BU0ssICJxY29tLGRw dS1taXhlci1wYWlyLW1hc2siLCB0cnVlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7TUlY RVJfQkxPQ0tTLCAicWNvbSxkcHUtbWl4ZXItYmxvY2tzIiwgZmFsc2UsIFBST1BfVFlQRV9OT0RF fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBtaXhlcl9ibG9ja3NfcHJvcFtd ID0gewotCXtNSVhFUl9HQ19QUk9QLCAicWNvbSxkcHUtbWl4ZXItZ2MiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHNwcF90 b3BfcHJvcFtdID0gewotCXtEU1BQX1RPUF9PRkYsICJxY29tLGRwdS1kc3BwLXRvcC1vZmYiLCB0 cnVlLCBQUk9QX1RZUEVfVTMyfSwKLQl7RFNQUF9UT1BfU0laRSwgInFjb20sZHB1LWRzcHAtdG9w LXNpemUiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9w cm9wX3R5cGUgZHNwcF9wcm9wW10gPSB7Ci0Je0RTUFBfT0ZGLCAicWNvbSxkcHUtZHNwcC1vZmYi LCB0cnVlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQUF9TSVpFLCAicWNvbSxkcHUtZHNw cC1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtEU1BQX0JMT0NLUywgInFjb20sZHB1 LWRzcHAtYmxvY2tzIiwgZmFsc2UsIFBST1BfVFlQRV9OT0RFfSwKLX07Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHB1X3Byb3BfdHlwZSBkc3BwX2Jsb2Nrc19wcm9wW10gPSB7Ci0Je0RTUFBfSUdDX1BST1As ICJxY29tLGRwdS1kc3BwLWlnYyIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQ UF9QQ0NfUFJPUCwgInFjb20sZHB1LWRzcHAtcGNjIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJS QVl9LAotCXtEU1BQX0dDX1BST1AsICJxY29tLGRwdS1kc3BwLWdjIiwgZmFsc2UsIFBST1BfVFlQ RV9VMzJfQVJSQVl9LAotCXtEU1BQX0hTSUNfUFJPUCwgInFjb20sZHB1LWRzcHAtaHNpYyIsIGZh bHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQUF9NRU1DT0xPUl9QUk9QLCAicWNvbSxk cHUtZHNwcC1tZW1jb2xvciIsIGZhbHNlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQ UF9TSVhaT05FX1BST1AsICJxY29tLGRwdS1kc3BwLXNpeHpvbmUiLCBmYWxzZSwKLQkJUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi0Je0RTUFBfR0FNVVRfUFJPUCwgInFjb20sZHB1LWRzcHAtZ2FtdXQi LCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTUFBfRElUSEVSX1BST1AsICJxY29t LGRwdS1kc3BwLWRpdGhlciIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RFNQUF9I SVNUX1BST1AsICJxY29tLGRwdS1kc3BwLWhpc3QiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJB WX0sCi0Je0RTUFBfVkxVVF9QUk9QLCAicWNvbSxkcHUtZHNwcC12bHV0IiwgZmFsc2UsIFBST1Bf VFlQRV9VMzJfQVJSQVl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGFkX3By b3BbXSA9IHsKLQl7QURfT0ZGLCAicWNvbSxkcHUtZHNwcC1hZC1vZmYiLCBmYWxzZSwgUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi0Je0FEX1ZFUlNJT04sICJxY29tLGRwdS1kc3BwLWFkLXZlcnNpb24i LCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5 cGUgZHNfdG9wX3Byb3BbXSA9IHsKLQl7RFNfVE9QX09GRiwgInFjb20sZHB1LWRlc3Qtc2NhbGVy LXRvcC1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RTX1RPUF9MRU4sICJxY29tLGRw dS1kZXN0LXNjYWxlci10b3Atc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7RFNfVE9Q X0lOUFVUX0xJTkVXSURUSCwgInFjb20sZHB1LW1heC1kZXN0LXNjYWxlci1pbnB1dC1saW5ld2lk dGgiLAotCQlmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi0Je0RTX1RPUF9PVVRQVVRfTElORVdJRFRI LCAicWNvbSxkcHUtbWF4LWRlc3Qtc2NhbGVyLW91dHB1dC1saW5ld2lkdGgiLAotCQlmYWxzZSwg UFJPUF9UWVBFX1UzMn0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHNfcHJv cFtdID0gewotCXtEU19PRkYsICJxY29tLGRwdS1kZXN0LXNjYWxlci1vZmYiLCBmYWxzZSwgUFJP UF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTX0xFTiwgInFjb20sZHB1LWRlc3Qtc2NhbGVyLXNpemUi LCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRwdV9wcm9wX3R5 cGUgcHBfcHJvcFtdID0gewotCXtQUF9PRkYsICJxY29tLGRwdS1wcC1vZmYiLCB0cnVlLCBQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKLQl7UFBfTEVOLCAicWNvbSxkcHUtcHAtc2l6ZSIsIGZhbHNlLCBQ Uk9QX1RZUEVfVTMyfSwKLQl7VEVfT0ZGLCAicWNvbSxkcHUtdGUtb2ZmIiwgZmFsc2UsIFBST1Bf VFlQRV9VMzJfQVJSQVl9LAotCXtURV9MRU4sICJxY29tLGRwdS10ZS1zaXplIiwgZmFsc2UsIFBS T1BfVFlQRV9VMzJ9LAotCXtURTJfT0ZGLCAicWNvbSxkcHUtdGUyLW9mZiIsIGZhbHNlLCBQUk9Q X1RZUEVfVTMyX0FSUkFZfSwKLQl7VEUyX0xFTiwgInFjb20sZHB1LXRlMi1zaXplIiwgZmFsc2Us IFBST1BfVFlQRV9VMzJ9LAotCXtQUF9TTEFWRSwgInFjb20sZHB1LXBwLXNsYXZlIiwgZmFsc2Us IFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtESVRIRVJfT0ZGLCAicWNvbSxkcHUtZGl0aGVyLW9m ZiIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7RElUSEVSX0xFTiwgInFjb20sZHB1 LWRpdGhlci1zaXplIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJ9LAotCXtESVRIRVJfVkVSLCAicWNv bSxkcHUtZGl0aGVyLXZlcnNpb24iLCBmYWxzZSwgUFJPUF9UWVBFX1UzMn0sCi19OwotCi1zdGF0 aWMgc3RydWN0IGRwdV9wcm9wX3R5cGUgZHNjX3Byb3BbXSA9IHsKLQl7RFNDX09GRiwgInFjb20s ZHB1LWRzYy1vZmYiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je0RTQ19MRU4sICJx Y29tLGRwdS1kc2Mtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLX07Ci0KLXN0YXRpYyBz dHJ1Y3QgZHB1X3Byb3BfdHlwZSBjZG1fcHJvcFtdID0gewotCXtIV19PRkYsICJxY29tLGRwdS1j ZG0tb2ZmIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtIV19MRU4sICJxY29tLGRw dS1jZG0tc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qg ZHB1X3Byb3BfdHlwZSBpbnRmX3Byb3BbXSA9IHsKLQl7SU5URl9PRkYsICJxY29tLGRwdS1pbnRm LW9mZiIsIHRydWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtJTlRGX0xFTiwgInFjb20sZHB1 LWludGYtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7SU5URl9QUkVGRVRDSCwgInFj b20sZHB1LWludGYtbWF4LXByZWZldGNoLWxpbmVzIiwgZmFsc2UsCi0JCQkJCQlQUk9QX1RZUEVf VTMyX0FSUkFZfSwKLQl7SU5URl9UWVBFLCAicWNvbSxkcHUtaW50Zi10eXBlIiwgZmFsc2UsIFBS T1BfVFlQRV9TVFJJTkdfQVJSQVl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBl IHdiX3Byb3BbXSA9IHsKLQl7V0JfT0ZGLCAicWNvbSxkcHUtd2Itb2ZmIiwgdHJ1ZSwgUFJPUF9U WVBFX1UzMl9BUlJBWX0sCi0Je1dCX0xFTiwgInFjb20sZHB1LXdiLXNpemUiLCBmYWxzZSwgUFJP UF9UWVBFX1UzMn0sCi0Je1dCX0lELCAicWNvbSxkcHUtd2ItaWQiLCB0cnVlLCBQUk9QX1RZUEVf VTMyX0FSUkFZfSwKLQl7V0JfWElOX0lELCAicWNvbSxkcHUtd2IteGluLWlkIiwgZmFsc2UsIFBS T1BfVFlQRV9VMzJfQVJSQVl9LAotCXtXQl9DTEtfQ1RSTCwgInFjb20sZHB1LXdiLWNsay1jdHJs IiwgZmFsc2UsCi0JCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZfSwKLX07Ci0KLXN0YXRpYyBz dHJ1Y3QgZHB1X3Byb3BfdHlwZSB2YmlmX3Byb3BbXSA9IHsKLQl7VkJJRl9PRkYsICJxY29tLGRw dS12YmlmLW9mZiIsIHRydWUsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX0xFTiwgInFj b20sZHB1LXZiaWYtc2l6ZSIsIGZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQl7VkJJRl9JRCwgInFj b20sZHB1LXZiaWYtaWQiLCBmYWxzZSwgUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1ZCSUZfREVG QVVMVF9PVF9SRF9MSU1JVCwgInFjb20sZHB1LXZiaWYtZGVmYXVsdC1vdC1yZC1saW1pdCIsIGZh bHNlLAotCQlQUk9QX1RZUEVfVTMyfSwKLQl7VkJJRl9ERUZBVUxUX09UX1dSX0xJTUlULCAicWNv bSxkcHUtdmJpZi1kZWZhdWx0LW90LXdyLWxpbWl0IiwgZmFsc2UsCi0JCVBST1BfVFlQRV9VMzJ9 LAotCXtWQklGX0RZTkFNSUNfT1RfUkRfTElNSVQsICJxY29tLGRwdS12YmlmLWR5bmFtaWMtb3Qt cmQtbGltaXQiLCBmYWxzZSwKLQkJUFJPUF9UWVBFX1UzMl9BUlJBWX0sCi0Je1ZCSUZfRFlOQU1J Q19PVF9XUl9MSU1JVCwgInFjb20sZHB1LXZiaWYtZHluYW1pYy1vdC13ci1saW1pdCIsIGZhbHNl LAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7VkJJRl9RT1NfUlRfUkVNQVAsICJxY29tLGRw dS12YmlmLXFvcy1ydC1yZW1hcCIsIGZhbHNlLAotCQlQUk9QX1RZUEVfVTMyX0FSUkFZfSwKLQl7 VkJJRl9RT1NfTlJUX1JFTUFQLCAicWNvbSxkcHUtdmJpZi1xb3MtbnJ0LXJlbWFwIiwgZmFsc2Us Ci0JCVBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX01FTVRZUEVfMCwgInFjb20sZHB1LXZi aWYtbWVtdHlwZS0wIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJSQVl9LAotCXtWQklGX01FTVRZ UEVfMSwgInFjb20sZHB1LXZiaWYtbWVtdHlwZS0xIiwgZmFsc2UsIFBST1BfVFlQRV9VMzJfQVJS QVl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIHJlZ19kbWFfcHJvcFtSRUdf RE1BX1BST1BfTUFYXSA9IHsKLQlbUkVHX0RNQV9PRkZdID0gIHtSRUdfRE1BX09GRiwgInFjb20s ZHB1LXJlZy1kbWEtb2ZmIiwgZmFsc2UsCi0JCVBST1BfVFlQRV9VMzJ9LAotCVtSRUdfRE1BX1ZF UlNJT05dID0ge1JFR19ETUFfVkVSU0lPTiwgInFjb20sZHB1LXJlZy1kbWEtdmVyc2lvbiIsCi0J CWZhbHNlLCBQUk9QX1RZUEVfVTMyfSwKLQlbUkVHX0RNQV9UUklHR0VSX09GRl0gPSB7UkVHX0RN QV9UUklHR0VSX09GRiwKLQkJInFjb20sZHB1LXJlZy1kbWEtdHJpZ2dlci1vZmYiLCBmYWxzZSwK LQkJUFJPUF9UWVBFX1UzMn0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogc3RhdGljIEFQSSBsaXN0Ci0gKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLQotc3RhdGljIGludCBfcGFyc2VfZHRfdTMyX2hhbmRsZXIoc3RydWN0IGRldmljZV9ub2Rl ICpucCwKLQljaGFyICpwcm9wX25hbWUsIHUzMiAqb2Zmc2V0cywgaW50IGxlbiwgYm9vbCBtYW5k YXRvcnkpCi17Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlmIChsZW4gPiBNQVhfRFBVX0hXX0JM SykgewotCQlEUFVfRVJST1IoCi0JCQkicHJvcDogJXMgdHJpZXMgb3V0IG9mIGJvdW5kIGFjY2Vz cyBmb3IgdTMyIGFycmF5IHJlYWQgbGVuOiAlZFxuIiwKLQkJCQlwcm9wX25hbWUsIGxlbik7Ci0J CXJldHVybiAtRTJCSUc7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShu cCwgcHJvcF9uYW1lLCBvZmZzZXRzLCBsZW4pOwotCWlmIChyYyAmJiBtYW5kYXRvcnkpCi0JCURQ VV9FUlJPUigibWFuZGF0b3J5IHByb3A6ICVzIHUzMiBhcnJheSByZWFkIGxlbjolZFxuIiwKLQkJ CQlwcm9wX25hbWUsIGxlbik7Ci0JZWxzZSBpZiAocmMpCi0JCURQVV9ERUJVRygib3B0aW9uYWwg cHJvcDogJXMgdTMyIGFycmF5IHJlYWQgbGVuOiVkXG4iLAotCQkJCXByb3BfbmFtZSwgbGVuKTsK LQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBfcGFyc2VfZHRfYml0X29mZnNldChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wLAotCWNoYXIgKnByb3BfbmFtZSwgc3RydWN0IGRwdV9wcm9wX3Zh bHVlICpwcm9wX3ZhbHVlLCB1MzIgcHJvcF9pbmRleCwKLQl1MzIgY291bnQsIGJvb2wgbWFuZGF0 b3J5KQotewotCWludCByYyA9IDAsIGxlbiwgaSwgajsKLQljb25zdCB1MzIgKmFycjsKLQotCWFy ciA9IG9mX2dldF9wcm9wZXJ0eShucCwgcHJvcF9uYW1lLCAmbGVuKTsKLQlpZiAoYXJyKSB7Ci0J CWxlbiAvPSBzaXplb2YodTMyKTsKLQkJbGVuICY9IH4weDE7Ci0KLQkJaWYgKGxlbiA+IChNQVhf RFBVX0hXX0JMSyAqIE1BWF9CSVRfT0ZGU0VUKSkgewotCQkJRFBVX0VSUk9SKAotCQkJCSJwcm9w OiAlcyBsZW46ICVkIHdpbGwgbGVhZCB0byBvdXQgb2YgYm91bmQgYWNjZXNzXG4iLAotCQkJCXBy b3BfbmFtZSwgbGVuIC8gTUFYX0JJVF9PRkZTRVQpOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQot Ci0JCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBqKyspIHsKLQkJCVBST1BfQklUVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsIHByb3BfaW5kZXgsIGosIDApID0KLQkJCQliZTMyX3RvX2NwdShh cnJbaV0pOwotCQkJaSsrOwotCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgcHJv cF9pbmRleCwgaiwgMSkgPQotCQkJCWJlMzJfdG9fY3B1KGFycltpXSk7Ci0JCQlpKys7Ci0JCX0K LQl9IGVsc2UgewotCQlpZiAobWFuZGF0b3J5KSB7Ci0JCQlEUFVfRVJST1IoImVycm9yIG1hbmRh dG9yeSBwcm9wZXJ0eSAnJXMnIG5vdCBmb3VuZFxuIiwKLQkJCQlwcm9wX25hbWUpOwotCQkJcmMg PSAtRUlOVkFMOwotCQl9IGVsc2UgewotCQkJRFBVX0RFQlVHKCJlcnJvciBvcHRpb25hbCBwcm9w ZXJ0eSAnJXMnIG5vdCBmb3VuZFxuIiwKLQkJCQlwcm9wX25hbWUpOwotCQl9Ci0JfQotCi0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IF92YWxpZGF0ZV9kdF9lbnRyeShzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLAotCXN0cnVjdCBkcHVfcHJvcF90eXBlICpkcHVfcHJvcCwgdTMyIHByb3Bfc2l6 ZSwgaW50ICpwcm9wX2NvdW50LAotCWludCAqb2ZmX2NvdW50KQotewotCWludCByYyA9IDAsIGks IHZhbDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5VTEw7Ci0KLQlpZiAob2ZmX2NvdW50 KSB7Ci0JCSpvZmZfY291bnQgPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMobnAsCi0JCQkJ ZHB1X3Byb3BbMF0ucHJvcF9uYW1lKTsKLQkJaWYgKCgqb2ZmX2NvdW50ID4gTUFYX0JMT0NLUykg fHwgKCpvZmZfY291bnQgPCAwKSkgewotCQkJaWYgKGRwdV9wcm9wWzBdLmlzX21hbmRhdG9yeSkg ewotCQkJCURQVV9FUlJPUigKLQkJCQkJImludmFsaWQgaHcgb2Zmc2V0IHByb3AgbmFtZTolcyBj b3VudDogJWRcbiIsCi0JCQkJCWRwdV9wcm9wWzBdLnByb3BfbmFtZSwgKm9mZl9jb3VudCk7Ci0J CQkJcmMgPSAtRUlOVkFMOwotCQkJfQotCQkJKm9mZl9jb3VudCA9IDA7Ci0JCQltZW1zZXQocHJv cF9jb3VudCwgMCwgc2l6ZW9mKGludCkgKiBwcm9wX3NpemUpOwotCQkJcmV0dXJuIHJjOwotCQl9 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHByb3Bfc2l6ZTsgaSsrKSB7Ci0JCXN3aXRjaCAoZHB1 X3Byb3BbaV0udHlwZSkgewotCQljYXNlIFBST1BfVFlQRV9VMzI6Ci0JCQlyYyA9IG9mX3Byb3Bl cnR5X3JlYWRfdTMyKG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0JCQkJJnZhbCk7Ci0JCQli cmVhazsKLQkJY2FzZSBQUk9QX1RZUEVfVTMyX0FSUkFZOgotCQkJcHJvcF9jb3VudFtpXSA9IG9m X3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhucCwKLQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUp OwotCQkJaWYgKHByb3BfY291bnRbaV0gPCAwKQotCQkJCXJjID0gcHJvcF9jb3VudFtpXTsKLQkJ CWJyZWFrOwotCQljYXNlIFBST1BfVFlQRV9TVFJJTkdfQVJSQVk6Ci0JCQlwcm9wX2NvdW50W2ld ID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwKLQkJCQlkcHVfcHJvcFtpXS5wcm9wX25h bWUpOwotCQkJaWYgKHByb3BfY291bnRbaV0gPCAwKQotCQkJCXJjID0gcHJvcF9jb3VudFtpXTsK LQkJCWJyZWFrOwotCQljYXNlIFBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZOgotCQkJb2ZfZ2V0 X3Byb3BlcnR5KG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsICZ2YWwpOwotCQkJcHJvcF9jb3Vu dFtpXSA9IHZhbCAvIChNQVhfQklUX09GRlNFVCAqIHNpemVvZih1MzIpKTsKLQkJCWJyZWFrOwot CQljYXNlIFBST1BfVFlQRV9OT0RFOgotCQkJc25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAs Ci0JCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Ci0JCQlpZiAoIXNucCkKLQkJCQlyYyA9IC1F SU5WQUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCURQVV9ERUJVRygiaW52YWxpZCBwcm9w ZXJ0eSB0eXBlOiVkXG4iLAotCQkJCQkJCWRwdV9wcm9wW2ldLnR5cGUpOwotCQkJYnJlYWs7Ci0J CX0KLQkJRFBVX0RFQlVHKAotCQkJInByb3AgaWQ6JWQgcHJvcCBuYW1lOiVzIHByb3AgdHlwZTol ZCBwcm9wX2NvdW50OiVkXG4iLAotCQkJaSwgZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJZHB1 X3Byb3BbaV0udHlwZSwgcHJvcF9jb3VudFtpXSk7Ci0KLQkJaWYgKHJjICYmIGRwdV9wcm9wW2ld LmlzX21hbmRhdG9yeSAmJgotCQkgICAoKGRwdV9wcm9wW2ldLnR5cGUgPT0gUFJPUF9UWVBFX1Uz MikgfHwKLQkJICAgIChkcHVfcHJvcFtpXS50eXBlID09IFBST1BfVFlQRV9OT0RFKSkpIHsKLQkJ CURQVV9FUlJPUigicHJvcDolcyBub3QgcHJlc2VudFxuIiwKLQkJCQkJCWRwdV9wcm9wW2ldLnBy b3BfbmFtZSk7Ci0JCQlnb3RvIGVuZDsKLQkJfSBlbHNlIGlmIChkcHVfcHJvcFtpXS50eXBlID09 IFBST1BfVFlQRV9VMzIgfHwKLQkJCWRwdV9wcm9wW2ldLnR5cGUgPT0gUFJPUF9UWVBFX0JPT0wg fHwKLQkJCWRwdV9wcm9wW2ldLnR5cGUgPT0gUFJPUF9UWVBFX05PREUpIHsKLQkJCXJjID0gMDsK LQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG9mZl9jb3VudCAmJiAocHJvcF9jb3VudFtpXSAh PSAqb2ZmX2NvdW50KSAmJgotCQkJCWRwdV9wcm9wW2ldLmlzX21hbmRhdG9yeSkgewotCQkJRFBV X0VSUk9SKAotCQkJCSJwcm9wOiVzIGNvdW50OiVkIGlzIGRpZmZlcmVudCBjb21wYXJlZCB0byBv ZmZzZXQgYXJyYXk6JWRcbiIsCi0JCQkJZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJCXByb3Bf Y291bnRbaV0sICpvZmZfY291bnQpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0J CX0gZWxzZSBpZiAob2ZmX2NvdW50ICYmIHByb3BfY291bnRbaV0gIT0gKm9mZl9jb3VudCkgewot CQkJRFBVX0RFQlVHKAotCQkJCSJwcm9wOiVzIGNvdW50OiVkIGlzIGRpZmZlcmVudCBjb21wYXJl ZCB0byBvZmZzZXQgYXJyYXk6JWRcbiIsCi0JCQkJZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJ CXByb3BfY291bnRbaV0sICpvZmZfY291bnQpOwotCQkJcmMgPSAwOwotCQkJcHJvcF9jb3VudFtp XSA9IDA7Ci0JCX0KLQkJaWYgKHByb3BfY291bnRbaV0gPCAwKSB7Ci0JCQlwcm9wX2NvdW50W2ld ID0gMDsKLQkJCWlmIChkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpIHsKLQkJCQlEUFVfRVJST1Io InByb3A6JXMgY291bnQ6JWQgaXMgbmVnYXRpdmVcbiIsCi0JCQkJCWRwdV9wcm9wW2ldLnByb3Bf bmFtZSwgcHJvcF9jb3VudFtpXSk7Ci0JCQkJcmMgPSAtRUlOVkFMOwotCQkJfSBlbHNlIHsKLQkJ CQlyYyA9IDA7Ci0JCQkJRFBVX0RFQlVHKCJwcm9wOiVzIGNvdW50OiVkIGlzIG5lZ2F0aXZlXG4i LAotCQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUsIHByb3BfY291bnRbaV0pOwotCQkJfQotCQl9 Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IF9yZWFkX2R0X2VudHJ5 KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0Jc3RydWN0IGRwdV9wcm9wX3R5cGUgKmRwdV9wcm9w LCB1MzIgcHJvcF9zaXplLCBpbnQgKnByb3BfY291bnQsCi0JYm9vbCAqcHJvcF9leGlzdHMsCi0J c3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlKQotewotCWludCByYyA9IDAsIGksIGo7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJvcF9zaXplOyBpKyspIHsKLQkJcHJvcF9leGlzdHNbaV0g PSB0cnVlOwotCQlzd2l0Y2ggKGRwdV9wcm9wW2ldLnR5cGUpIHsKLQkJY2FzZSBQUk9QX1RZUEVf VTMyOgotCQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgZHB1X3Byb3BbaV0ucHJvcF9u YW1lLAotCQkJCSZQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBpLCAwKSk7Ci0JCQlEUFVf REVCVUcoCi0JCQkJInByb3AgaWQ6JWQgcHJvcCBuYW1lOiVzIHByb3AgdHlwZTolZCB2YWx1ZTow eCV4XG4iLAotCQkJCWksIGRwdV9wcm9wW2ldLnByb3BfbmFtZSwKLQkJCQlkcHVfcHJvcFtpXS50 eXBlLAotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIGksIDApKTsKLQkJCWlmIChy YykKLQkJCQlwcm9wX2V4aXN0c1tpXSA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCWNhc2UgUFJPUF9U WVBFX0JPT0w6Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBpLCAwKSA9Ci0JCQkJ b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLAotCQkJCQlkcHVfcHJvcFtpXS5wcm9wX25hbWUpOwot CQkJRFBVX0RFQlVHKAotCQkJCSJwcm9wIGlkOiVkIHByb3AgbmFtZTolcyBwcm9wIHR5cGU6JWQg dmFsdWU6MHgleFxuIiwKLQkJCQlpLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0JCQkJZHB1X3By b3BbaV0udHlwZSwKLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBpLCAwKSk7Ci0J CQlicmVhazsKLQkJY2FzZSBQUk9QX1RZUEVfVTMyX0FSUkFZOgotCQkJcmMgPSBfcGFyc2VfZHRf dTMyX2hhbmRsZXIobnAsIGRwdV9wcm9wW2ldLnByb3BfbmFtZSwKLQkJCQkmUFJPUF9WQUxVRV9B Q0NFU1MocHJvcF92YWx1ZSwgaSwgMCksCi0JCQkJcHJvcF9jb3VudFtpXSwgZHB1X3Byb3BbaV0u aXNfbWFuZGF0b3J5KTsKLQkJCWlmIChyYyAmJiBkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpIHsK LQkJCQlEUFVfRVJST1IoCi0JCQkJCSIlcyBwcm9wIHZhbGlkYXRpb24gc3VjY2VzcyBidXQgcmVh ZCBmYWlsZWRcbiIsCi0JCQkJCWRwdV9wcm9wW2ldLnByb3BfbmFtZSk7Ci0JCQkJcHJvcF9leGlz dHNbaV0gPSBmYWxzZTsKLQkJCQlnb3RvIGVuZDsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHJjKQot CQkJCQlwcm9wX2V4aXN0c1tpXSA9IGZhbHNlOwotCQkJCS8qIG9ubHkgZm9yIGRlYnVnIHB1cnBv c2UgKi8KLQkJCQlEUFVfREVCVUcoInByb3AgaWQ6JWQgcHJvcCBuYW1lOiVzIHByb3AgdHlwZTol ZCIKLQkJCQkJLCBpLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0JCQkJCWRwdV9wcm9wW2ldLnR5 cGUpOwotCQkJCWZvciAoaiA9IDA7IGogPCBwcm9wX2NvdW50W2ldOyBqKyspCi0JCQkJCURQVV9E RUJVRygiIHZhbHVlWyVkXToweCV4ICIsIGosCi0JCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9w X3ZhbHVlLCBpLAotCQkJCQkJCQlqKSk7Ci0JCQkJRFBVX0RFQlVHKCJcbiIpOwotCQkJfQotCQkJ YnJlYWs7Ci0JCWNhc2UgUFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVk6Ci0JCQlyYyA9IF9wYXJz ZV9kdF9iaXRfb2Zmc2V0KG5wLCBkcHVfcHJvcFtpXS5wcm9wX25hbWUsCi0JCQkJcHJvcF92YWx1 ZSwgaSwgcHJvcF9jb3VudFtpXSwKLQkJCQlkcHVfcHJvcFtpXS5pc19tYW5kYXRvcnkpOwotCQkJ aWYgKHJjICYmIGRwdV9wcm9wW2ldLmlzX21hbmRhdG9yeSkgewotCQkJCURQVV9FUlJPUigKLQkJ CQkJIiVzIHByb3AgdmFsaWRhdGlvbiBzdWNjZXNzIGJ1dCByZWFkIGZhaWxlZFxuIiwKLQkJCQkJ ZHB1X3Byb3BbaV0ucHJvcF9uYW1lKTsKLQkJCQlwcm9wX2V4aXN0c1tpXSA9IGZhbHNlOwotCQkJ CWdvdG8gZW5kOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocmMpCi0JCQkJCXByb3BfZXhpc3RzW2ld ID0gZmFsc2U7Ci0JCQkJRFBVX0RFQlVHKAotCQkJCQkicHJvcCBpZDolZCBwcm9wIG5hbWU6JXMg cHJvcCB0eXBlOiVkIiwKLQkJCQkJaSwgZHB1X3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJCQlkcHVf cHJvcFtpXS50eXBlKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgcHJvcF9jb3VudFtpXTsgaisrKQot CQkJCQlEUFVfREVCVUcoCi0JCQkJCSJjb3VudFslZF06IGJpdDoweCV4IG9mZjoweCV4XG4iLCBq LAotCQkJCQlQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCQkJaSwgaiwgMCks Ci0JCQkJCVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlpLCBqLCAxKSk7 Ci0JCQkJRFBVX0RFQlVHKCJcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUFJPUF9UWVBF X05PREU6Ci0JCQkvKiBOb2RlIHdpbGwgYmUgcGFyc2VkIGluIGNhbGxpbmcgZnVuY3Rpb24gKi8K LQkJCXJjID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRFBVX0RFQlVHKCJpbnZhbGlk IHByb3BlcnR5IHR5cGU6JWRcbiIsCi0JCQkJCQkJZHB1X3Byb3BbaV0udHlwZSk7Ci0JCQlicmVh azsKLQkJfQotCQlyYyA9IDA7Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg dm9pZCBfZHB1X3NzcHBfc2V0dXBfdmlnKHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCi0J c3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcCwgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzICpzYmxr LAotCWJvb2wgKnByb3BfZXhpc3RzLCBzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUs IHUzMiAqdmlnX2NvdW50KQotewotCXNibGstPm1heHVwc2NhbGUgPSBNQVhfVVBTQ0FMRV9SQVRJ TzsKLQlzYmxrLT5tYXhkd25zY2FsZSA9IE1BWF9ET1dOU0NBTEVfUkFUSU87Ci0Jc3NwcC0+aWQg PSBTU1BQX1ZJRzAgKyAqdmlnX2NvdW50OwotCXNucHJpbnRmKHNzcHAtPm5hbWUsIERQVV9IV19C TEtfTkFNRV9MRU4sICJzc3BwXyV1IiwKLQkJCXNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQlzc3Bw LT5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9WSUcwICsgKnZpZ19jb3VudDsKLQlzc3BwLT50eXBl ID0gU1NQUF9UWVBFX1ZJRzsKLQlzZXRfYml0KERQVV9TU1BQX1FPUywgJnNzcHAtPmZlYXR1cmVz KTsKLQlpZiAoZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCA9PSA4KQotCQlzZXRfYml0KERQVV9TU1BQ X1FPU184TFZMLCAmc3NwcC0+ZmVhdHVyZXMpOwotCSgqdmlnX2NvdW50KSsrOwotCi0JaWYgKCFw cm9wX3ZhbHVlKQotCQlyZXR1cm47Ci0KLQlpZiAoZHB1X2NmZy0+cXNlZWRfdHlwZSA9PSBEUFVf U1NQUF9TQ0FMRVJfUVNFRUQyKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMiwg JnNzcHAtPmZlYXR1cmVzKTsKLQkJc2Jsay0+c2NhbGVyX2Jsay5pZCA9IERQVV9TU1BQX1NDQUxF Ul9RU0VFRDI7Ci0JCXNibGstPnNjYWxlcl9ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsCi0JCQlWSUdfUVNFRURfT0ZGLCAwKTsKLQkJc2Jsay0+c2NhbGVyX2Jsay5sZW4g PSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklHX1FTRUVEX0xFTiwgMCk7Ci0J CXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJ CQkic3NwcF9zY2FsZXIldSIsIHNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQl9IGVsc2UgaWYgKGRw dV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykgewotCQlzZXRfYml0 KERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZzc3BwLT5mZWF0dXJlcyk7Ci0JCXNibGstPnNjYWxl cl9ibGsuaWQgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzOwotCQlzYmxrLT5zY2FsZXJfYmxrLmJh c2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklHX1FTRUVEX09GRiwgMCk7 Ci0JCXNibGstPnNjYWxlcl9ibGsubGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCVZJR19RU0VFRF9MRU4sIDApOwotCQlzbnByaW50ZihzYmxrLT5zY2FsZXJfYmxrLm5hbWUs IERQVV9IV19CTEtfTkFNRV9MRU4sCi0JCQkic3NwcF9zY2FsZXIldSIsIHNzcHAtPmlkIC0gU1NQ UF9WSUcwKTsKLQl9Ci0KLQlzYmxrLT5jc2NfYmxrLmlkID0gRFBVX1NTUFBfQ1NDOwotCXNucHJp bnRmKHNibGstPmNzY19ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX2Nz YyV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCWlmIChkcHVfY2ZnLT5jc2NfdHlwZSA9PSBE UFVfU1NQUF9DU0MpIHsKLQkJc2V0X2JpdChEUFVfU1NQUF9DU0MsICZzc3BwLT5mZWF0dXJlcyk7 Ci0JCXNibGstPmNzY19ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0J CQkJCQkJVklHX0NTQ19PRkYsIDApOwotCX0gZWxzZSBpZiAoZHB1X2NmZy0+Y3NjX3R5cGUgPT0g RFBVX1NTUFBfQ1NDXzEwQklUKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBfQ1NDXzEwQklULCAmc3Nw cC0+ZmVhdHVyZXMpOwotCQlzYmxrLT5jc2NfYmxrLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhw cm9wX3ZhbHVlLAotCQkJCQkJCVZJR19DU0NfT0ZGLCAwKTsKLQl9Ci0KLQlzYmxrLT5oc2ljX2Js ay5pZCA9IERQVV9TU1BQX0hTSUM7Ci0Jc25wcmludGYoc2Jsay0+aHNpY19ibGsubmFtZSwgRFBV X0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX2hzaWMldSIsIHNzcHAtPmlkIC0gU1NQUF9WSUcw KTsKLQlpZiAocHJvcF9leGlzdHNbVklHX0hTSUNfUFJPUF0pIHsKLQkJc2Jsay0+aHNpY19ibGsu YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlWSUdfSFNJQ19QUk9QLCAw KTsKLQkJc2Jsay0+aHNpY19ibGsudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCi0JCQlWSUdfSFNJQ19QUk9QLCAxKTsKLQkJc2Jsay0+aHNpY19ibGsubGVuID0gMDsKLQkJ c2V0X2JpdChEUFVfU1NQUF9IU0lDLCAmc3NwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNibGstPm1l bWNvbG9yX2Jsay5pZCA9IERQVV9TU1BQX01FTUNPTE9SOwotCXNucHJpbnRmKHNibGstPm1lbWNv bG9yX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLAotCQkJInNzcHBfbWVtY29sb3IldSIs IHNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQlpZiAocHJvcF9leGlzdHNbVklHX01FTUNPTE9SX1BS T1BdKSB7Ci0JCXNibGstPm1lbWNvbG9yX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwKLQkJCVZJR19NRU1DT0xPUl9QUk9QLCAwKTsKLQkJc2Jsay0+bWVtY29sb3JfYmxr LnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklHX01FTUNPTE9S X1BST1AsIDEpOwotCQlzYmxrLT5tZW1jb2xvcl9ibGsubGVuID0gMDsKLQkJc2V0X2JpdChEUFVf U1NQUF9NRU1DT0xPUiwgJnNzcHAtPmZlYXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5wY2NfYmxrLmlk ID0gRFBVX1NTUFBfUENDOwotCXNucHJpbnRmKHNibGstPnBjY19ibGsubmFtZSwgRFBVX0hXX0JM S19OQU1FX0xFTiwKLQkJCSJzc3BwX3BjYyV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCWlm IChwcm9wX2V4aXN0c1tWSUdfUENDX1BST1BdKSB7Ci0JCXNibGstPnBjY19ibGsuYmFzZSA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlWSUdfUENDX1BST1AsIDApOwotCQlzYmxr LT5wY2NfYmxrLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJVklH X1BDQ19QUk9QLCAxKTsKLQkJc2Jsay0+cGNjX2Jsay5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9T U1BQX1BDQywgJnNzcHAtPmZlYXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5mb3JtYXRfbGlzdCA9IGRw dV9jZmctPnZpZ19mb3JtYXRzOwotCXNibGstPnZpcnRfZm9ybWF0X2xpc3QgPSBkcHVfY2ZnLT5k bWFfZm9ybWF0czsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9zc3BwX3NldHVwX3JnYihzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAotCXN0cnVjdCBkcHVfc3NwcF9jZmcgKnNzcHAsIHN0cnVj dCBkcHVfc3NwcF9zdWJfYmxrcyAqc2JsaywKLQlib29sICpwcm9wX2V4aXN0cywgc3RydWN0IGRw dV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlLCB1MzIgKnJnYl9jb3VudCkKLXsKLQlzYmxrLT5tYXh1 cHNjYWxlID0gTUFYX1VQU0NBTEVfUkFUSU87Ci0Jc2Jsay0+bWF4ZHduc2NhbGUgPSBNQVhfRE9X TlNDQUxFX1JBVElPOwotCXNzcHAtPmlkID0gU1NQUF9SR0IwICsgKnJnYl9jb3VudDsKLQlzbnBy aW50Zihzc3BwLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3NwcF8ldSIsCi0JCQlzc3Bw LT5pZCAtIFNTUFBfVklHMCk7Ci0Jc3NwcC0+Y2xrX2N0cmwgPSBEUFVfQ0xLX0NUUkxfUkdCMCAr ICpyZ2JfY291bnQ7Ci0Jc3NwcC0+dHlwZSA9IFNTUFBfVFlQRV9SR0I7Ci0Jc2V0X2JpdChEUFVf U1NQUF9RT1MsICZzc3BwLT5mZWF0dXJlcyk7Ci0JaWYgKGRwdV9jZmctPnZiaWZfcW9zX25sdmwg PT0gOCkKLQkJc2V0X2JpdChEUFVfU1NQUF9RT1NfOExWTCwgJnNzcHAtPmZlYXR1cmVzKTsKLQko KnJnYl9jb3VudCkrKzsKLQotCWlmICghcHJvcF92YWx1ZSkKLQkJcmV0dXJuOwotCi0JaWYgKGRw dV9jZmctPnFzZWVkX3R5cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMikgewotCQlzZXRfYml0 KERQVV9TU1BQX1NDQUxFUl9SR0IsICZzc3BwLT5mZWF0dXJlcyk7Ci0JCXNibGstPnNjYWxlcl9i bGsuaWQgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyOwotCQlzYmxrLT5zY2FsZXJfYmxrLmJhc2Ug PSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJUkdCX1NDQUxFUl9PRkYsIDApOwot CQlzYmxrLT5zY2FsZXJfYmxrLmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0J CQlSR0JfU0NBTEVSX0xFTiwgMCk7Ci0JCXNucHJpbnRmKHNibGstPnNjYWxlcl9ibGsubmFtZSwg RFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX3NjYWxlciV1Iiwgc3NwcC0+aWQgLSBTU1BQ X1ZJRzApOwotCX0gZWxzZSBpZiAoZHB1X2NmZy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FM RVJfUVNFRUQzKSB7Ci0JCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVSX1JHQiwgJnNzcHAtPmZlYXR1 cmVzKTsKLQkJc2Jsay0+c2NhbGVyX2Jsay5pZCA9IERQVV9TU1BQX1NDQUxFUl9RU0VFRDM7Ci0J CXNibGstPnNjYWxlcl9ibGsuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0J CQlSR0JfU0NBTEVSX0xFTiwgMCk7Ci0JCXNibGstPnNjYWxlcl9ibGsubGVuID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCVNTUFBfU0NBTEVfU0laRSwgMCk7Ci0JCXNucHJpbnRm KHNibGstPnNjYWxlcl9ibGsubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwKLQkJCSJzc3BwX3Nj YWxlciV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwotCX0KLQotCXNibGstPnBjY19ibGsuaWQg PSBEUFVfU1NQUF9QQ0M7Ci0JaWYgKHByb3BfZXhpc3RzW1JHQl9QQ0NfUFJPUF0pIHsKLQkJc2Js ay0+cGNjX2Jsay5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCVJHQl9Q Q0NfUFJPUCwgMCk7Ci0JCXNibGstPnBjY19ibGsudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQlSR0JfUENDX1BST1AsIDEpOwotCQlzYmxrLT5wY2NfYmxrLmxlbiA9 IDA7Ci0JCXNldF9iaXQoRFBVX1NTUFBfUENDLCAmc3NwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNi bGstPmZvcm1hdF9saXN0ID0gZHB1X2NmZy0+ZG1hX2Zvcm1hdHM7Ci0Jc2Jsay0+dmlydF9mb3Jt YXRfbGlzdCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9kcHVfc3NwcF9zZXR1cF9jdXJzb3Io c3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywKLQlzdHJ1Y3QgZHB1X3NzcHBfY2ZnICpzc3Bw LCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnNibGssCi0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVl ICpwcm9wX3ZhbHVlLCB1MzIgKmN1cnNvcl9jb3VudCkKLXsKLQlpZiAoIUlTX0RQVV9NQUpPUl9N SU5PUl9TQU1FKGRwdV9jZmctPmh3dmVyc2lvbiwgRFBVX0hXX1ZFUl8zMDApKQotCQlEUFVfRVJS T1IoImludmFsaWQgc3NwcCB0eXBlICVkLCB4aW4gaWQgJWRcbiIsCi0JCQkJc3NwcC0+dHlwZSwg c3NwcC0+eGluX2lkKTsKLQlzZXRfYml0KERQVV9TU1BQX0NVUlNPUiwgJnNzcHAtPmZlYXR1cmVz KTsKLQlzYmxrLT5tYXh1cHNjYWxlID0gU1NQUF9VTklUWV9TQ0FMRTsKLQlzYmxrLT5tYXhkd25z Y2FsZSA9IFNTUFBfVU5JVFlfU0NBTEU7Ci0Jc2Jsay0+Zm9ybWF0X2xpc3QgPSBkcHVfY2ZnLT5j dXJzb3JfZm9ybWF0czsKLQlzYmxrLT52aXJ0X2Zvcm1hdF9saXN0ID0gTlVMTDsKLQlzc3BwLT5p ZCA9IFNTUFBfQ1VSU09SMCArICpjdXJzb3JfY291bnQ7Ci0Jc25wcmludGYoc3NwcC0+bmFtZSwg RFBVX0hXX0JMS19OQU1FX0xFTiwgInNzcHBfJXUiLAotCQkJc3NwcC0+aWQgLSBTU1BQX1ZJRzAp OwotCXNzcHAtPmNsa19jdHJsID0gRFBVX0NMS19DVFJMX0NVUlNPUjAgKyAqY3Vyc29yX2NvdW50 OwotCXNzcHAtPnR5cGUgPSBTU1BQX1RZUEVfQ1VSU09SOwotCSgqY3Vyc29yX2NvdW50KSsrOwot fQotCi1zdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBfZG1hKHN0cnVjdCBkcHVfbWRzc19jZmcg KmRwdV9jZmcsCi0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcCwgc3RydWN0IGRwdV9zc3BwX3N1 Yl9ibGtzICpzYmxrLAotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSwgdTMyICpk bWFfY291bnQpCi17Ci0Jc2Jsay0+bWF4dXBzY2FsZSA9IFNTUFBfVU5JVFlfU0NBTEU7Ci0Jc2Js ay0+bWF4ZHduc2NhbGUgPSBTU1BQX1VOSVRZX1NDQUxFOwotCXNibGstPmZvcm1hdF9saXN0ID0g ZHB1X2NmZy0+ZG1hX2Zvcm1hdHM7Ci0Jc2Jsay0+dmlydF9mb3JtYXRfbGlzdCA9IGRwdV9jZmct PmRtYV9mb3JtYXRzOwotCXNzcHAtPmlkID0gU1NQUF9ETUEwICsgKmRtYV9jb3VudDsKLQlzc3Bw LT5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9ETUEwICsgKmRtYV9jb3VudDsKLQlzbnByaW50Zihz c3BwLT5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3NwcF8ldSIsCi0JCQlzc3BwLT5pZCAt IFNTUFBfVklHMCk7Ci0Jc3NwcC0+dHlwZSA9IFNTUFBfVFlQRV9ETUE7Ci0Jc2V0X2JpdChEUFVf U1NQUF9RT1MsICZzc3BwLT5mZWF0dXJlcyk7Ci0JaWYgKGRwdV9jZmctPnZiaWZfcW9zX25sdmwg PT0gOCkKLQkJc2V0X2JpdChEUFVfU1NQUF9RT1NfOExWTCwgJnNzcHAtPmZlYXR1cmVzKTsKLQko KmRtYV9jb3VudCkrKzsKLX0KLQotc3RhdGljIGludCBkcHVfc3NwcF9wYXJzZV9kdChzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wLAotCXN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcpCi17Ci0JaW50 IHJjLCBwcm9wX2NvdW50W1NTUFBfUFJPUF9NQVhdLCBvZmZfY291bnQsIGksIGo7Ci0JaW50IHZp Z19wcm9wX2NvdW50W1ZJR19QUk9QX01BWF0sIHJnYl9wcm9wX2NvdW50W1JHQl9QUk9QX01BWF07 Ci0JYm9vbCBwcm9wX2V4aXN0c1tTU1BQX1BST1BfTUFYXSwgdmlnX3Byb3BfZXhpc3RzW1ZJR19Q Uk9QX01BWF07Ci0JYm9vbCByZ2JfcHJvcF9leGlzdHNbUkdCX1BST1BfTUFYXTsKLQlzdHJ1Y3Qg ZHB1X3Byb3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1 ZSAqdmlnX3Byb3BfdmFsdWUgPSBOVUxMLCAqcmdiX3Byb3BfdmFsdWUgPSBOVUxMOwotCWNvbnN0 IGNoYXIgKnR5cGU7Ci0Jc3RydWN0IGRwdV9zc3BwX2NmZyAqc3NwcDsKLQlzdHJ1Y3QgZHB1X3Nz cHBfc3ViX2Jsa3MgKnNibGs7Ci0JdTMyIHZpZ19jb3VudCA9IDAsIGRtYV9jb3VudCA9IDAsIHJn Yl9jb3VudCA9IDAsIGN1cnNvcl9jb3VudCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzbnAg PSBOVUxMOwotCi0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoU1NQUF9QUk9QX01BWCwKLQkJCXNpemVv ZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUp IHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9k dF9lbnRyeShucCwgc3NwcF9wcm9wLCBBUlJBWV9TSVpFKHNzcHBfcHJvcCksCi0JCXByb3BfY291 bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IF9yZWFkX2R0 X2VudHJ5KG5wLCBzc3BwX3Byb3AsIEFSUkFZX1NJWkUoc3NwcF9wcm9wKSwgcHJvcF9jb3VudCwK LQkJCQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlkcHVfY2ZnLT5zc3BwX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JLyogZ2V0IHZpZyBmZWF0dXJl IGR0IHByb3BlcnRpZXMgaWYgdGhleSBleGlzdCAqLwotCXNucCA9IG9mX2dldF9jaGlsZF9ieV9u YW1lKG5wLCBzc3BwX3Byb3BbU1NQUF9WSUdfQkxPQ0tTXS5wcm9wX25hbWUpOwotCWlmIChzbnAp IHsKLQkJdmlnX3Byb3BfdmFsdWUgPSBrY2FsbG9jKFZJR19QUk9QX01BWCwKLQkJCXNpemVvZihz dHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF2aWdfcHJvcF92YWx1 ZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRh dGVfZHRfZW50cnkoc25wLCB2aWdfcHJvcCwgQVJSQVlfU0laRSh2aWdfcHJvcCksCi0JCQl2aWdf cHJvcF9jb3VudCwgTlVMTCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZW5kOwotCQlyYyA9IF9yZWFk X2R0X2VudHJ5KHNucCwgdmlnX3Byb3AsIEFSUkFZX1NJWkUodmlnX3Byb3ApLAotCQkJCXZpZ19w cm9wX2NvdW50LCB2aWdfcHJvcF9leGlzdHMsCi0JCQkJdmlnX3Byb3BfdmFsdWUpOwotCX0KLQot CS8qIGdldCByZ2IgZmVhdHVyZSBkdCBwcm9wZXJ0aWVzIGlmIHRoZXkgZXhpc3QgKi8KLQlzbnAg PSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgc3NwcF9wcm9wW1NTUFBfUkdCX0JMT0NLU10ucHJv cF9uYW1lKTsKLQlpZiAoc25wKSB7Ci0JCXJnYl9wcm9wX3ZhbHVlID0ga2NhbGxvYyhSR0JfUFJP UF9NQVgsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLAotCQkJCQlHRlBfS0VS TkVMKTsKLQkJaWYgKCFyZ2JfcHJvcF92YWx1ZSkgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290 byBlbmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25wLCByZ2JfcHJvcCwgQVJS QVlfU0laRShyZ2JfcHJvcCksCi0JCQlyZ2JfcHJvcF9jb3VudCwgTlVMTCk7Ci0JCWlmIChyYykK LQkJCWdvdG8gZW5kOwotCQlyYyA9IF9yZWFkX2R0X2VudHJ5KHNucCwgcmdiX3Byb3AsIEFSUkFZ X1NJWkUocmdiX3Byb3ApLAotCQkJCXJnYl9wcm9wX2NvdW50LCByZ2JfcHJvcF9leGlzdHMsCi0J CQkJcmdiX3Byb3BfdmFsdWUpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkr KykgewotCQlzc3BwID0gZHB1X2NmZy0+c3NwcCArIGk7Ci0JCXNibGsgPSBremFsbG9jKHNpemVv Zigqc2JsayksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJCXJjID0gLUVOT01FTTsK LQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJsb2NrcyAq LwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJc3NwcC0+c2JsayA9IHNibGs7Ci0KLQkJc3NwcC0+YmFz ZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFNTUFBfT0ZGLCBpKTsKLQkJc3NwcC0+ bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgU1NQUF9TSVpFLCAwKTsKLQkJc2Js ay0+bWF4bGluZXdpZHRoID0gZHB1X2NmZy0+bWF4X3NzcHBfbGluZXdpZHRoOwotCi0JCXNldF9i aXQoRFBVX1NTUFBfU1JDLCAmc3NwcC0+ZmVhdHVyZXMpOwotCi0JCWlmIChkcHVfY2ZnLT5oYXNf Y2RwKQotCQkJc2V0X2JpdChEUFVfU1NQUF9DRFAsICZzc3BwLT5mZWF0dXJlcyk7Ci0KLQkJaWYg KGRwdV9jZmctPnRzX3ByZWZpbGxfcmV2ID09IDEpIHsKLQkJCXNldF9iaXQoRFBVX1NTUFBfVFNf UFJFRklMTCwgJnNzcHAtPmZlYXR1cmVzKTsKLQkJfSBlbHNlIGlmIChkcHVfY2ZnLT50c19wcmVm aWxsX3JldiA9PSAyKSB7Ci0JCQlzZXRfYml0KERQVV9TU1BQX1RTX1BSRUZJTEwsICZzc3BwLT5m ZWF0dXJlcyk7Ci0JCQlzZXRfYml0KERQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSwgJnNzcHAtPmZl YXR1cmVzKTsKLQkJfQotCi0JCXNibGstPnNtYXJ0X2RtYV9wcmlvcml0eSA9Ci0JCQlQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQX1NNQVJUX0RNQSwgaSk7Ci0KLQkJaWYgKHNibGst PnNtYXJ0X2RtYV9wcmlvcml0eSAmJiBkcHVfY2ZnLT5zbWFydF9kbWFfcmV2KQotCQkJc2V0X2Jp dChkcHVfY2ZnLT5zbWFydF9kbWFfcmV2LCAmc3NwcC0+ZmVhdHVyZXMpOwotCi0JCXNibGstPnNy Y19ibGsuaWQgPSBEUFVfU1NQUF9TUkM7Ci0KLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5k ZXgobnAsCi0JCQkJc3NwcF9wcm9wW1NTUFBfVFlQRV0ucHJvcF9uYW1lLCBpLCAmdHlwZSk7Ci0J CWlmICghc3RyY21wKHR5cGUsICJ2aWciKSkgewotCQkJX2RwdV9zc3BwX3NldHVwX3ZpZyhkcHVf Y2ZnLCBzc3BwLCBzYmxrLAotCQkJCXZpZ19wcm9wX2V4aXN0cywgdmlnX3Byb3BfdmFsdWUsICZ2 aWdfY291bnQpOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgInJnYiIpKSB7Ci0JCQlfZHB1 X3NzcHBfc2V0dXBfcmdiKGRwdV9jZmcsIHNzcHAsIHNibGssCi0JCQkJcmdiX3Byb3BfZXhpc3Rz LCByZ2JfcHJvcF92YWx1ZSwgJnJnYl9jb3VudCk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBl LCAiY3Vyc29yIikpIHsKLQkJCS8qIE5vIHByb3AgdmFsdWVzIGZvciBjdXJzb3IgcGlwZXMgKi8K LQkJCV9kcHVfc3NwcF9zZXR1cF9jdXJzb3IoZHB1X2NmZywgc3NwcCwgc2JsaywgTlVMTCwKLQkJ CQkJCQkJJmN1cnNvcl9jb3VudCk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAiZG1hIikp IHsKLQkJCS8qIE5vIHByb3AgdmFsdWVzIGZvciBETUEgcGlwZXMgKi8KLQkJCV9kcHVfc3NwcF9z ZXR1cF9kbWEoZHB1X2NmZywgc3NwcCwgc2JsaywgTlVMTCwKLQkJCQkJCQkJJmRtYV9jb3VudCk7 Ci0JCX0gZWxzZSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgc3NwcCB0eXBlOiVzXG4iLCB0eXBl KTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJc25wcmludGYoc2Js ay0+c3JjX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAic3NwcF9zcmNfJXUiLAotCQkJ CXNzcHAtPmlkIC0gU1NQUF9WSUcwKTsKLQotCQlpZiAoc3NwcC0+Y2xrX2N0cmwgPj0gRFBVX0NM S19DVFJMX01BWCkgewotCQkJRFBVX0VSUk9SKCIlczogaW52YWxpZCBjbGsgY3RybDogJWRcbiIs Ci0JCQkJCXNibGstPnNyY19ibGsubmFtZSwgc3NwcC0+Y2xrX2N0cmwpOwotCQkJcmMgPSAtRUlO VkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlzYmxrLT5tYXhoZGVjaWV4cCA9IE1BWF9IT1Ja X0RFQ0lNQVRJT047Ci0JCXNibGstPm1heHZkZWNpZXhwID0gTUFYX1ZFUlRfREVDSU1BVElPTjsK LQotCQlzc3BwLT54aW5faWQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQX1hJ TiwgaSk7Ci0JCXNibGstPnBpeGVsX3JhbV9zaXplID0gREVGQVVMVF9QSVhFTF9SQU1fU0laRTsK LQkJc2Jsay0+c3JjX2Jsay5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQ X1NJWkUsIDApOwotCi0JCWlmIChQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBTU1BQX0VY Q0xfUkVDVCwgaSkgPT0gMSkKLQkJCXNldF9iaXQoRFBVX1NTUFBfRVhDTF9SRUNULCAmc3NwcC0+ ZmVhdHVyZXMpOwotCi0JCWlmIChwcm9wX2V4aXN0c1tTU1BQX01BWF9QRVJfUElQRV9CV10pCi0J CQlzYmxrLT5tYXhfcGVyX3BpcGVfYncgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAot CQkJCQlTU1BQX01BWF9QRVJfUElQRV9CVywgaSk7Ci0JCWVsc2UKLQkJCXNibGstPm1heF9wZXJf cGlwZV9idyA9IERFRkFVTFRfTUFYX1BFUl9QSVBFX0JXOwotCi0JCWZvciAoaiA9IDA7IGogPCBk cHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewotCQkJZHB1X2NmZy0+bWRwW2pdLmNsa19jdHJsc1tz c3BwLT5jbGtfY3RybF0ucmVnX29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwKLQkJCQkJCVNTUFBfQ0xLX0NUUkwsIGksIDApOwotCQkJZHB1X2NmZy0+bWRwW2pdLmNs a19jdHJsc1tzc3BwLT5jbGtfY3RybF0uYml0X29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwKLQkJCQkJCVNTUFBfQ0xLX0NUUkwsIGksIDEpOwotCQl9Ci0KLQkJRFBV X0RFQlVHKAotCQkJInhpbjolZCByYW06JWQgY2xrJWQ6JXgvJWRcbiIsCi0JCQlzc3BwLT54aW5f aWQsCi0JCQlzYmxrLT5waXhlbF9yYW1fc2l6ZSwKLQkJCXNzcHAtPmNsa19jdHJsLAotCQkJZHB1 X2NmZy0+bWRwWzBdLmNsa19jdHJsc1tzc3BwLT5jbGtfY3RybF0ucmVnX29mZiwKLQkJCWRwdV9j ZmctPm1kcFswXS5jbGtfY3RybHNbc3NwcC0+Y2xrX2N0cmxdLmJpdF9vZmYpOwotCX0KLQotZW5k OgotCWtmcmVlKHByb3BfdmFsdWUpOwotCWtmcmVlKHZpZ19wcm9wX3ZhbHVlKTsKLQlrZnJlZShy Z2JfcHJvcF92YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9jdGxfcGFy c2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1 X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRbSFdfUFJPUF9NQVhdLCBpOwotCWJvb2wgcHJv cF9leGlzdHNbSFdfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1 ZSA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9jdGxfY2ZnICpjdGw7Ci0JdTMyIG9mZl9jb3VudDsKLQot CWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQgaW5wdXQgcGFy YW1cbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3BfdmFsdWUg PSBremFsbG9jKEhXX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgY3RsX3Byb3AsIEFS UkFZX1NJWkUoY3RsX3Byb3ApLCBwcm9wX2NvdW50LAotCQkmb2ZmX2NvdW50KTsKLQlpZiAocmMp Ci0JCWdvdG8gZW5kOwotCi0JZHB1X2NmZy0+Y3RsX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JcmMg PSBfcmVhZF9kdF9lbnRyeShucCwgY3RsX3Byb3AsIEFSUkFZX1NJWkUoY3RsX3Byb3ApLCBwcm9w X2NvdW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVu ZDsKLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewotCQljdGwgPSBkcHVfY2Zn LT5jdGwgKyBpOwotCQljdGwtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBI V19PRkYsIGkpOwotCQljdGwtPmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIEhX X0xFTiwgMCk7Ci0JCWN0bC0+aWQgPSBDVExfMCArIGk7Ci0JCXNucHJpbnRmKGN0bC0+bmFtZSwg RFBVX0hXX0JMS19OQU1FX0xFTiwgImN0bF8ldSIsCi0JCQkJY3RsLT5pZCAtIENUTF8wKTsKLQot CQlpZiAoaSA8IE1BWF9TUExJVF9ESVNQTEFZX0NUTCkKLQkJCXNldF9iaXQoRFBVX0NUTF9TUExJ VF9ESVNQTEFZLCAmY3RsLT5mZWF0dXJlcyk7Ci0JCWlmIChpIDwgTUFYX1BQX1NQTElUX0RJU1BM QVlfQ1RMKQotCQkJc2V0X2JpdChEUFVfQ1RMX1BJTkdQT05HX1NQTElULCAmY3RsLT5mZWF0dXJl cyk7Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRwdV9taXhlcl9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJ CQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRb TUlYRVJfUFJPUF9NQVhdLCBpLCBqOwotCWludCBibG9ja3NfcHJvcF9jb3VudFtNSVhFUl9CTE9D S1NfUFJPUF9NQVhdOwotCWludCBibGVuZF9wcm9wX2NvdW50W01JWEVSX0JMRU5EX1BST1BfTUFY XTsKLQlib29sIHByb3BfZXhpc3RzW01JWEVSX1BST1BfTUFYXTsKLQlib29sIGJsb2Nrc19wcm9w X2V4aXN0c1tNSVhFUl9CTE9DS1NfUFJPUF9NQVhdOwotCWJvb2wgYmxlbmRfcHJvcF9leGlzdHNb TUlYRVJfQkxFTkRfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1 ZSA9IE5VTEwsICpibG9ja3NfcHJvcF92YWx1ZSA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9wcm9wX3Zh bHVlICpibGVuZF9wcm9wX3ZhbHVlID0gTlVMTDsKLQl1MzIgb2ZmX2NvdW50LCBibGVuZF9vZmZf Y291bnQsIG1heF9ibGVuZHN0YWdlcywgbG1fcGFpcl9tYXNrOwotCXN0cnVjdCBkcHVfbG1fY2Zn ICptaXhlcjsKLQlzdHJ1Y3QgZHB1X2xtX3N1Yl9ibGtzICpzYmxrOwotCWludCBwcF9jb3VudCwg ZHNwcF9jb3VudCwgZHNfY291bnQ7Ci0JdTMyIHBwX2lkeCwgZHNwcF9pZHgsIGRzX2lkeDsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKnNucCA9IE5VTEw7Ci0KLQlpZiAoIWRwdV9jZmcpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50IGlucHV0IHBhcmFtXG4iKTsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIGVuZDsKLQl9Ci0JbWF4X2JsZW5kc3RhZ2VzID0gZHB1X2NmZy0+bWF4X21peGVy X2JsZW5kc3RhZ2VzOwotCi0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoTUlYRVJfUFJPUF9NQVgsCi0J CQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9w X3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmMgPSBfdmFs aWRhdGVfZHRfZW50cnkobnAsIG1peGVyX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJfcHJvcCksCi0J CXByb3BfY291bnQsICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlkcHVf Y2ZnLT5taXhlcl9jb3VudCA9IG9mZl9jb3VudDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAs IG1peGVyX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJfcHJvcCksIHByb3BfY291bnQsCi0JCXByb3Bf ZXhpc3RzLCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcHBfY291bnQg PSBkcHVfY2ZnLT5waW5ncG9uZ19jb3VudDsKLQlkc3BwX2NvdW50ID0gZHB1X2NmZy0+ZHNwcF9j b3VudDsKLQlkc19jb3VudCA9IGRwdV9jZmctPmRzX2NvdW50OwotCi0JLyogZ2V0IG1peGVyIGZl YXR1cmUgZHQgcHJvcGVydGllcyBpZiB0aGV5IGV4aXN0ICovCi0Jc25wID0gb2ZfZ2V0X2NoaWxk X2J5X25hbWUobnAsIG1peGVyX3Byb3BbTUlYRVJfQkxPQ0tTXS5wcm9wX25hbWUpOwotCWlmIChz bnApIHsKLQkJYmxvY2tzX3Byb3BfdmFsdWUgPSBremFsbG9jKE1JWEVSX0JMT0NLU19QUk9QX01B WCAqCi0JCQkJTUFYX0RQVV9IV19CTEsgKiBzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwK LQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKCFibG9ja3NfcHJvcF92YWx1ZSkgewotCQkJcmMgPSAt RU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkoc25w LCBtaXhlcl9ibG9ja3NfcHJvcCwKLQkJCUFSUkFZX1NJWkUobWl4ZXJfYmxvY2tzX3Byb3ApLCBi bG9ja3NfcHJvcF9jb3VudCwgTlVMTCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gZW5kOwotCQlyYyA9 IF9yZWFkX2R0X2VudHJ5KHNucCwgbWl4ZXJfYmxvY2tzX3Byb3AsCi0JCQkJQVJSQVlfU0laRSht aXhlcl9ibG9ja3NfcHJvcCksCi0JCQkJYmxvY2tzX3Byb3BfY291bnQsIGJsb2Nrc19wcm9wX2V4 aXN0cywKLQkJCQlibG9ja3NfcHJvcF92YWx1ZSk7Ci0JfQotCi0JLyogZ2V0IHRoZSBibGVuZF9v cCByZWdpc3RlciBvZmZzZXRzICovCi0JYmxlbmRfcHJvcF92YWx1ZSA9IGt6YWxsb2MoTUlYRVJf QkxFTkRfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9L RVJORUwpOwotCWlmICghYmxlbmRfcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdv dG8gZW5kOwotCX0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgbWl4ZXJfYmxlbmRfcHJv cCwKLQkJQVJSQVlfU0laRShtaXhlcl9ibGVuZF9wcm9wKSwgYmxlbmRfcHJvcF9jb3VudCwKLQkJ JmJsZW5kX29mZl9jb3VudCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gX3JlYWRf ZHRfZW50cnkobnAsIG1peGVyX2JsZW5kX3Byb3AsIEFSUkFZX1NJWkUobWl4ZXJfYmxlbmRfcHJv cCksCi0JCWJsZW5kX3Byb3BfY291bnQsIGJsZW5kX3Byb3BfZXhpc3RzLCBibGVuZF9wcm9wX3Zh bHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0gMCwgcHBfaWR4ID0gMCwg ZHNwcF9pZHggPSAwLCBkc19pZHggPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKLQkJbWl4ZXIg PSBkcHVfY2ZnLT5taXhlciArIGk7Ci0JCXNibGsgPSBremFsbG9jKHNpemVvZigqc2JsayksIEdG UF9LRVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCS8qIGNhdGFs b2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxsb2NhdGVkIGJsb2NrcyAqLwotCQkJZ290byBl bmQ7Ci0JCX0KLQkJbWl4ZXItPnNibGsgPSBzYmxrOwotCi0JCW1peGVyLT5iYXNlID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgTUlYRVJfT0ZGLCBpKTsKLQkJbWl4ZXItPmxlbiA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIE1JWEVSX0xFTiwgMCk7Ci0JCW1peGVyLT5pZCA9 IExNXzAgKyBpOwotCQlzbnByaW50ZihtaXhlci0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwg ImxtXyV1IiwKLQkJCQltaXhlci0+aWQgLSBMTV8wKTsKLQotCQlpZiAoIXByb3BfZXhpc3RzW01J WEVSX0xFTl0pCi0JCQltaXhlci0+bGVuID0gREVGQVVMVF9EUFVfSFdfQkxPQ0tfTEVOOwotCi0J CWxtX3BhaXJfbWFzayA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJTUlYRVJf UEFJUl9NQVNLLCBpKTsKLQkJaWYgKGxtX3BhaXJfbWFzaykKLQkJCW1peGVyLT5sbV9wYWlyX21h c2sgPSAxIDw8IGxtX3BhaXJfbWFzazsKLQotCQlzYmxrLT5tYXhibGVuZHN0YWdlcyA9IG1heF9i bGVuZHN0YWdlczsKLQkJc2Jsay0+bWF4d2lkdGggPSBkcHVfY2ZnLT5tYXhfbWl4ZXJfd2lkdGg7 Ci0KLQkJZm9yIChqID0gMDsgaiA8IGJsZW5kX29mZl9jb3VudDsgaisrKQotCQkJc2Jsay0+Ymxl bmRzdGFnZV9iYXNlW2pdID0KLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhibGVuZF9wcm9wX3ZhbHVl LAotCQkJCQkJTUlYRVJfQkxFTkRfT1BfT0ZGLCBqKTsKLQotCQlpZiAoZHB1X2NmZy0+aGFzX3Ny Y19zcGxpdCkKLQkJCXNldF9iaXQoRFBVX01JWEVSX1NPVVJDRVNQTElULCAmbWl4ZXItPmZlYXR1 cmVzKTsKLQkJaWYgKGRwdV9jZmctPmhhc19kaW1fbGF5ZXIpCi0JCQlzZXRfYml0KERQVV9ESU1f TEFZRVIsICZtaXhlci0+ZmVhdHVyZXMpOwotCi0JCWlmICgoaSA8IFJPVF9MTV9PRkZTRVQpIHx8 IChpID49IExJTkVfTE1fT0ZGU0VUKSkgewotCQkJbWl4ZXItPnBpbmdwb25nID0gcHBfY291bnQg PiAwID8gcHBfaWR4ICsgUElOR1BPTkdfMAotCQkJCQkJCQk6IFBJTkdQT05HX01BWDsKLQkJCW1p eGVyLT5kc3BwID0gZHNwcF9jb3VudCA+IDAgPyBkc3BwX2lkeCArIERTUFBfMAotCQkJCQkJCQk6 IERTUFBfTUFYOwotCQkJbWl4ZXItPmRzID0gZHNfY291bnQgPiAwID8gZHNfaWR4ICsgRFNfMCA6 IERTX01BWDsKLQkJCXBwX2NvdW50LS07Ci0JCQlkc3BwX2NvdW50LS07Ci0JCQlkc19jb3VudC0t OwotCQkJcHBfaWR4Kys7Ci0JCQlkc3BwX2lkeCsrOwotCQkJZHNfaWR4Kys7Ci0JCX0gZWxzZSB7 Ci0JCQltaXhlci0+cGluZ3BvbmcgPSBQSU5HUE9OR19NQVg7Ci0JCQltaXhlci0+ZHNwcCA9IERT UFBfTUFYOwotCQkJbWl4ZXItPmRzID0gRFNfTUFYOwotCQl9Ci0KLQkJc2Jsay0+Z2MuaWQgPSBE UFVfTUlYRVJfR0M7Ci0JCWlmIChibG9ja3NfcHJvcF92YWx1ZSAmJiBibG9ja3NfcHJvcF9leGlz dHNbTUlYRVJfR0NfUFJPUF0pIHsKLQkJCXNibGstPmdjLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VT UyhibG9ja3NfcHJvcF92YWx1ZSwKLQkJCQkJTUlYRVJfR0NfUFJPUCwgMCk7Ci0JCQlzYmxrLT5n Yy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MoYmxvY2tzX3Byb3BfdmFsdWUsCi0JCQkJCU1J WEVSX0dDX1BST1AsIDEpOwotCQkJc2Jsay0+Z2MubGVuID0gMDsKLQkJCXNldF9iaXQoRFBVX01J WEVSX0dDLCAmbWl4ZXItPmZlYXR1cmVzKTsKLQkJfQotCX0KLQotZW5kOgotCWtmcmVlKHByb3Bf dmFsdWUpOwotCWtmcmVlKGJsb2Nrc19wcm9wX3ZhbHVlKTsKLQlrZnJlZShibGVuZF9wcm9wX3Zh bHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X2ludGZfcGFyc2VfZHQoc3Ry dWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcp Ci17Ci0JaW50IHJjLCBwcm9wX2NvdW50W0lOVEZfUFJPUF9NQVhdLCBpOwotCXN0cnVjdCBkcHVf cHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9wX2V4aXN0c1tJTlRGX1BS T1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50OwotCXUzMiBkc2lfY291bnQgPSAwLCBub25lX2NvdW50 ID0gMCwgaGRtaV9jb3VudCA9IDAsIGRwX2NvdW50ID0gMDsKLQljb25zdCBjaGFyICp0eXBlOwot CXN0cnVjdCBkcHVfaW50Zl9jZmcgKmludGY7Ci0KLQlpZiAoIWRwdV9jZmcpIHsKLQkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsK LQl9Ci0KLQlwcm9wX3ZhbHVlID0ga3phbGxvYyhJTlRGX1BST1BfTUFYICoKLQkJCXNpemVvZihz dHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9l bnRyeShucCwgaW50Zl9wcm9wLCBBUlJBWV9TSVpFKGludGZfcHJvcCksCi0JCXByb3BfY291bnQs ICZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlkcHVfY2ZnLT5pbnRmX2Nv dW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgaW50Zl9wcm9wLCBB UlJBWV9TSVpFKGludGZfcHJvcCksIHByb3BfY291bnQsCi0JCXByb3BfZXhpc3RzLCBwcm9wX3Zh bHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZm9yIChpID0gMDsgaSA8IG9mZl9jb3Vu dDsgaSsrKSB7Ci0JCWludGYgPSBkcHVfY2ZnLT5pbnRmICsgaTsKLQkJaW50Zi0+YmFzZSA9IFBS T1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIElOVEZfT0ZGLCBpKTsKLQkJaW50Zi0+bGVuID0g UFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgSU5URl9MRU4sIDApOwotCQlpbnRmLT5pZCA9 IElOVEZfMCArIGk7Ci0JCXNucHJpbnRmKGludGYtPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4s ICJpbnRmXyV1IiwKLQkJCQlpbnRmLT5pZCAtIElOVEZfMCk7Ci0KLQkJaWYgKCFwcm9wX2V4aXN0 c1tJTlRGX0xFTl0pCi0JCQlpbnRmLT5sZW4gPSBERUZBVUxUX0RQVV9IV19CTE9DS19MRU47Ci0K LQkJaW50Zi0+cHJvZ19mZXRjaF9saW5lc193b3JzdF9jYXNlID0KLQkJCQkhcHJvcF9leGlzdHNb SU5URl9QUkVGRVRDSF0gPwotCQkJCWRwdV9jZmctPnBlcmYubWluX3ByZWZpbGxfbGluZXMgOgot CQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIElOVEZfUFJFRkVUQ0gsIGkpOwotCi0J CW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KG5wLAotCQkJCWludGZfcHJvcFtJTlRGX1RZ UEVdLnByb3BfbmFtZSwgaSwgJnR5cGUpOwotCQlpZiAoIXN0cmNtcCh0eXBlLCAiZHNpIikpIHsK LQkJCWludGYtPnR5cGUgPSBJTlRGX0RTSTsKLQkJCWludGYtPmNvbnRyb2xsZXJfaWQgPSBkc2lf Y291bnQ7Ci0JCQlkc2lfY291bnQrKzsKLQkJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsICJoZG1p IikpIHsKLQkJCWludGYtPnR5cGUgPSBJTlRGX0hETUk7Ci0JCQlpbnRmLT5jb250cm9sbGVyX2lk ID0gaGRtaV9jb3VudDsKLQkJCWhkbWlfY291bnQrKzsKLQkJfSBlbHNlIGlmICghc3RyY21wKHR5 cGUsICJkcCIpKSB7Ci0JCQlpbnRmLT50eXBlID0gSU5URl9EUDsKLQkJCWludGYtPmNvbnRyb2xs ZXJfaWQgPSBkcF9jb3VudDsKLQkJCWRwX2NvdW50Kys7Ci0JCX0gZWxzZSB7Ci0JCQlpbnRmLT50 eXBlID0gSU5URl9OT05FOwotCQkJaW50Zi0+Y29udHJvbGxlcl9pZCA9IG5vbmVfY291bnQ7Ci0J CQlub25lX2NvdW50Kys7Ci0JCX0KLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3diX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsIHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcpCi17Ci0JaW50IHJjLCBwcm9w X2NvdW50W1dCX1BST1BfTUFYXSwgaSwgajsKLQlzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUgKnByb3Bf dmFsdWUgPSBOVUxMOwotCWJvb2wgcHJvcF9leGlzdHNbV0JfUFJPUF9NQVhdOwotCXUzMiBvZmZf Y291bnQ7Ci0Jc3RydWN0IGRwdV93Yl9jZmcgKndiOwotCXN0cnVjdCBkcHVfd2Jfc3ViX2Jsb2Nr cyAqc2JsazsKLQotCWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1l bnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3BfdmFsdWUg PSBremFsbG9jKFdCX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUp LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQln b3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgd2JfcHJvcCwgQVJS QVlfU0laRSh3Yl9wcm9wKSwgcHJvcF9jb3VudCwKLQkJJm9mZl9jb3VudCk7Ci0JaWYgKHJjKQot CQlnb3RvIGVuZDsKLQotCWRwdV9jZmctPndiX2NvdW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBf cmVhZF9kdF9lbnRyeShucCwgd2JfcHJvcCwgQVJSQVlfU0laRSh3Yl9wcm9wKSwgcHJvcF9jb3Vu dCwKLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKLQkJd2IgPSBkcHVfY2ZnLT53YiAr IGk7Ci0JCXNibGsgPSBremFsbG9jKHNpemVvZigqc2JsayksIEdGUF9LRVJORUwpOwotCQlpZiAo IXNibGspIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVs ZWFzZSB0aGUgYWxsb2NhdGVkIGJsb2NrcyAqLwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJd2ItPnNi bGsgPSBzYmxrOwotCi0JCXdiLT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg V0JfT0ZGLCBpKTsKLQkJd2ItPmlkID0gV0JfMCArIFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsIFdCX0lELCBpKTsKLQkJc25wcmludGYod2ItPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4s ICJ3Yl8ldSIsCi0JCQkJd2ItPmlkIC0gV0JfMCk7Ci0JCXdiLT5jbGtfY3RybCA9IERQVV9DTEtf Q1RSTF9XQjAgKwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgV0JfSUQsIGkpOwot CQl3Yi0+eGluX2lkID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgV0JfWElOX0lELCBp KTsKLQotCQlpZiAod2ItPmNsa19jdHJsID49IERQVV9DTEtfQ1RSTF9NQVgpIHsKLQkJCURQVV9F UlJPUigiJXM6IGludmFsaWQgY2xrIGN0cmw6ICVkXG4iLAotCQkJCQl3Yi0+bmFtZSwgd2ItPmNs a19jdHJsKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KLQkJaWYgKElT X0RQVV9NQUpPUl9NSU5PUl9TQU1FKChkcHVfY2ZnLT5od3ZlcnNpb24pLAotCQkJCURQVV9IV19W RVJfMTcwKSkKLQkJCXdiLT52YmlmX2lkeCA9IFZCSUZfTlJUOwotCQllbHNlCi0JCQl3Yi0+dmJp Zl9pZHggPSBWQklGX1JUOwotCi0JCXdiLT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLCBXQl9MRU4sIDApOwotCQlpZiAoIXByb3BfZXhpc3RzW1dCX0xFTl0pCi0JCQl3Yi0+bGVu ID0gREVGQVVMVF9EUFVfSFdfQkxPQ0tfTEVOOwotCQlzYmxrLT5tYXhsaW5ld2lkdGggPSBkcHVf Y2ZnLT5tYXhfd2JfbGluZXdpZHRoOwotCi0JCWlmICh3Yi0+aWQgPj0gTElORV9NT0RFX1dCX09G RlNFVCkKLQkJCXNldF9iaXQoRFBVX1dCX0xJTkVfTU9ERSwgJndiLT5mZWF0dXJlcyk7Ci0JCWVs c2UKLQkJCXNldF9iaXQoRFBVX1dCX0JMT0NLX01PREUsICZ3Yi0+ZmVhdHVyZXMpOwotCQlzZXRf Yml0KERQVV9XQl9UUkFGRklDX1NIQVBFUiwgJndiLT5mZWF0dXJlcyk7Ci0JCXNldF9iaXQoRFBV X1dCX1lVVl9DT05GSUcsICZ3Yi0+ZmVhdHVyZXMpOwotCi0JCWlmIChkcHVfY2ZnLT5oYXNfY2Rw KQotCQkJc2V0X2JpdChEUFVfV0JfQ0RQLCAmd2ItPmZlYXR1cmVzKTsKLQotCQlzZXRfYml0KERQ VV9XQl9RT1MsICZ3Yi0+ZmVhdHVyZXMpOwotCQlpZiAoZHB1X2NmZy0+dmJpZl9xb3Nfbmx2bCA9 PSA4KQotCQkJc2V0X2JpdChEUFVfV0JfUU9TXzhMVkwsICZ3Yi0+ZmVhdHVyZXMpOwotCi0JCWlm IChkcHVfY2ZnLT5oYXNfd2JfdWJ3YykKLQkJCXNldF9iaXQoRFBVX1dCX1VCV0MsICZ3Yi0+ZmVh dHVyZXMpOwotCi0JCWZvciAoaiA9IDA7IGogPCBkcHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewot CQkJZHB1X2NmZy0+bWRwW2pdLmNsa19jdHJsc1t3Yi0+Y2xrX2N0cmxdLnJlZ19vZmYgPQotCQkJ CVBST1BfQklUVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlXQl9DTEtfQ1RSTCwgaSwg MCk7Ci0JCQlkcHVfY2ZnLT5tZHBbal0uY2xrX2N0cmxzW3diLT5jbGtfY3RybF0uYml0X29mZiA9 Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJCVdCX0NMS19DVFJM LCBpLCAxKTsKLQkJfQotCi0JCXdiLT5mb3JtYXRfbGlzdCA9IGRwdV9jZmctPndiX2Zvcm1hdHM7 Ci0KLQkJRFBVX0RFQlVHKAotCQkJIndiOiVkIHhpbjolZCB2YmlmOiVkIGNsayVkOiV4LyVkXG4i LAotCQkJd2ItPmlkIC0gV0JfMCwKLQkJCXdiLT54aW5faWQsCi0JCQl3Yi0+dmJpZl9pZHgsCi0J CQl3Yi0+Y2xrX2N0cmwsCi0JCQlkcHVfY2ZnLT5tZHBbMF0uY2xrX2N0cmxzW3diLT5jbGtfY3Ry bF0ucmVnX29mZiwKLQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNbd2ItPmNsa19jdHJsXS5i aXRfb2ZmKTsKLQl9Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyB2b2lkIF9kcHVfZHNwcF9zZXR1cF9ibG9ja3Moc3RydWN0IGRwdV9tZHNzX2Nm ZyAqZHB1X2NmZywKLQlzdHJ1Y3QgZHB1X2RzcHBfY2ZnICpkc3BwLCBzdHJ1Y3QgZHB1X2RzcHBf c3ViX2Jsa3MgKnNibGssCi0JYm9vbCAqcHJvcF9leGlzdHMsIHN0cnVjdCBkcHVfcHJvcF92YWx1 ZSAqcHJvcF92YWx1ZSkKLXsKLQlzYmxrLT5pZ2MuaWQgPSBEUFVfRFNQUF9JR0M7Ci0JaWYgKHBy b3BfZXhpc3RzW0RTUFBfSUdDX1BST1BdKSB7Ci0JCXNibGstPmlnYy5iYXNlID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfSUdDX1BST1AsIDApOwotCQlzYmxrLT5pZ2Mu dmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0lHQ19QUk9Q LCAxKTsKLQkJc2Jsay0+aWdjLmxlbiA9IDA7Ci0JCXNldF9iaXQoRFBVX0RTUFBfSUdDLCAmZHNw cC0+ZmVhdHVyZXMpOwotCX0KLQotCXNibGstPnBjYy5pZCA9IERQVV9EU1BQX1BDQzsKLQlpZiAo cHJvcF9leGlzdHNbRFNQUF9QQ0NfUFJPUF0pIHsKLQkJc2Jsay0+cGNjLmJhc2UgPSBQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9QQ0NfUFJPUCwgMCk7Ci0JCXNibGstPnBj Yy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfUENDX1BS T1AsIDEpOwotCQlzYmxrLT5wY2MubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9QQ0MsICZk c3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+Z2MuaWQgPSBEUFVfRFNQUF9HQzsKLQlpZiAo cHJvcF9leGlzdHNbRFNQUF9HQ19QUk9QXSkgewotCQlzYmxrLT5nYy5iYXNlID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9HQ19QUk9QLCAwKTsKLQkJc2Jsay0+Z2MudmVyc2lv biA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0dDX1BST1AsIDEpOwot CQlzYmxrLT5nYy5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX0dDLCAmZHNwcC0+ZmVhdHVy ZXMpOwotCX0KLQotCXNibGstPmdhbXV0LmlkID0gRFBVX0RTUFBfR0FNVVQ7Ci0JaWYgKHByb3Bf ZXhpc3RzW0RTUFBfR0FNVVRfUFJPUF0pIHsKLQkJc2Jsay0+Z2FtdXQuYmFzZSA9IFBST1BfVkFM VUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0dBTVVUX1BST1AsIDApOwotCQlzYmxrLT5n YW11dC52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfR0FN VVRfUFJPUCwgMSk7Ci0JCXNibGstPmdhbXV0LmxlbiA9IDA7Ci0JCXNldF9iaXQoRFBVX0RTUFBf R0FNVVQsICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+ZGl0aGVyLmlkID0gRFBVX0RT UFBfRElUSEVSOwotCWlmIChwcm9wX2V4aXN0c1tEU1BQX0RJVEhFUl9QUk9QXSkgewotCQlzYmxr LT5kaXRoZXIuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0RJ VEhFUl9QUk9QLCAwKTsKLQkJc2Jsay0+ZGl0aGVyLnZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9ESVRIRVJfUFJPUCwgMSk7Ci0JCXNibGstPmRpdGhlci5s ZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX0RJVEhFUiwgJmRzcHAtPmZlYXR1cmVzKTsKLQl9 Ci0KLQlzYmxrLT5oaXN0LmlkID0gRFBVX0RTUFBfSElTVDsKLQlpZiAocHJvcF9leGlzdHNbRFNQ UF9ISVNUX1BST1BdKSB7Ci0JCXNibGstPmhpc3QuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHBy b3BfdmFsdWUsCi0JCQlEU1BQX0hJU1RfUFJPUCwgMCk7Ci0JCXNibGstPmhpc3QudmVyc2lvbiA9 IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX0hJU1RfUFJPUCwgMSk7Ci0J CXNibGstPmhpc3QubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9ISVNULCAmZHNwcC0+ZmVh dHVyZXMpOwotCX0KLQotCXNibGstPmhzaWMuaWQgPSBEUFVfRFNQUF9IU0lDOwotCWlmIChwcm9w X2V4aXN0c1tEU1BQX0hTSUNfUFJPUF0pIHsKLQkJc2Jsay0+aHNpYy5iYXNlID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfSFNJQ19QUk9QLCAwKTsKLQkJc2Jsay0+aHNp Yy52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfSFNJQ19Q Uk9QLCAxKTsKLQkJc2Jsay0+aHNpYy5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX0hTSUMs ICZkc3BwLT5mZWF0dXJlcyk7Ci0JfQotCi0Jc2Jsay0+bWVtY29sb3IuaWQgPSBEUFVfRFNQUF9N RU1DT0xPUjsKLQlpZiAocHJvcF9leGlzdHNbRFNQUF9NRU1DT0xPUl9QUk9QXSkgewotCQlzYmxr LT5tZW1jb2xvci5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBf TUVNQ09MT1JfUFJPUCwgMCk7Ci0JCXNibGstPm1lbWNvbG9yLnZlcnNpb24gPSBQUk9QX1ZBTFVF X0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJRFNQUF9NRU1DT0xPUl9QUk9QLCAxKTsKLQkJc2Jsay0+ bWVtY29sb3IubGVuID0gMDsKLQkJc2V0X2JpdChEUFVfRFNQUF9NRU1DT0xPUiwgJmRzcHAtPmZl YXR1cmVzKTsKLQl9Ci0KLQlzYmxrLT5zaXh6b25lLmlkID0gRFBVX0RTUFBfU0lYWk9ORTsKLQlp ZiAocHJvcF9leGlzdHNbRFNQUF9TSVhaT05FX1BST1BdKSB7Ci0JCXNibGstPnNpeHpvbmUuYmFz ZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlEU1BQX1NJWFpPTkVfUFJPUCwg MCk7Ci0JCXNibGstPnNpeHpvbmUudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsCi0JCQlEU1BQX1NJWFpPTkVfUFJPUCwgMSk7Ci0JCXNibGstPnNpeHpvbmUubGVuID0gMDsK LQkJc2V0X2JpdChEUFVfRFNQUF9TSVhaT05FLCAmZHNwcC0+ZmVhdHVyZXMpOwotCX0KLQotCXNi bGstPnZsdXQuaWQgPSBEUFVfRFNQUF9WTFVUOwotCWlmIChwcm9wX2V4aXN0c1tEU1BQX1ZMVVRf UFJPUF0pIHsKLQkJc2Jsay0+dmx1dC5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwKLQkJCURTUFBfVkxVVF9QUk9QLCAwKTsKLQkJc2Jsay0+dmx1dC52ZXJzaW9uID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCURTUFBfVkxVVF9QUk9QLCAxKTsKLQkJc2Jsay0+ c2l4em9uZS5sZW4gPSAwOwotCQlzZXRfYml0KERQVV9EU1BQX1ZMVVQsICZkc3BwLT5mZWF0dXJl cyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9kc3BwX3RvcF9wYXJzZV9kdChzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQotewotCWludCBy YywgcHJvcF9jb3VudFtEU1BQX1RPUF9QUk9QX01BWF07Ci0JYm9vbCBwcm9wX2V4aXN0c1tEU1BQ X1RPUF9QUk9QX01BWF07Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVM TDsKLQl1MzIgb2ZmX2NvdW50OwotCi0JaWYgKCFkcHVfY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0J cHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNQUF9UT1BfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVj dCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJvcF92YWx1ZSkgewotCQly YyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5 KG5wLCBkc3BwX3RvcF9wcm9wLCBBUlJBWV9TSVpFKGRzcHBfdG9wX3Byb3ApLAotCQlwcm9wX2Nv dW50LCAmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBfcmVhZF9k dF9lbnRyeShucCwgZHNwcF90b3BfcHJvcCwgQVJSQVlfU0laRShkc3BwX3RvcF9wcm9wKSwKLQkJ cHJvcF9jb3VudCwgcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJZ290byBl bmQ7Ci0KLQlpZiAob2ZmX2NvdW50ICE9IDEpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRzcHBf dG9wIG9mZl9jb3VudDolZFxuIiwgb2ZmX2NvdW50KTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3Rv IGVuZDsKLQl9Ci0KLQlkcHVfY2ZnLT5kc3BwX3RvcC5iYXNlID0KLQkJUFJPUF9WQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwgRFNQUF9UT1BfT0ZGLCAwKTsKLQlkcHVfY2ZnLT5kc3BwX3RvcC5sZW4g PQotCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU1BQX1RPUF9TSVpFLCAwKTsKLQlz bnByaW50ZihkcHVfY2ZnLT5kc3BwX3RvcC5uYW1lLCBEUFVfSFdfQkxLX05BTUVfTEVOLCAiZHNw cF90b3AiKTsKLQotZW5kOgotCWtmcmVlKHByb3BfdmFsdWUpOwotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkcHVfZHNwcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJ CQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRb RFNQUF9QUk9QX01BWF0sIGk7Ci0JaW50IGFkX3Byb3BfY291bnRbQURfUFJPUF9NQVhdOwotCWJv b2wgcHJvcF9leGlzdHNbRFNQUF9QUk9QX01BWF0sIGFkX3Byb3BfZXhpc3RzW0FEX1BST1BfTUFY XTsKLQlib29sIGJsb2Nrc19wcm9wX2V4aXN0c1tEU1BQX0JMT0NLU19QUk9QX01BWF07Ci0Jc3Ry dWN0IGRwdV9wcm9wX3ZhbHVlICphZF9wcm9wX3ZhbHVlID0gTlVMTDsKLQlpbnQgYmxvY2tzX3By b3BfY291bnRbRFNQUF9CTE9DS1NfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAq cHJvcF92YWx1ZSA9IE5VTEwsICpibG9ja3NfcHJvcF92YWx1ZSA9IE5VTEw7Ci0JdTMyIG9mZl9j b3VudCwgYWRfb2ZmX2NvdW50OwotCXN0cnVjdCBkcHVfZHNwcF9jZmcgKmRzcHA7Ci0Jc3RydWN0 IGRwdV9kc3BwX3N1Yl9ibGtzICpzYmxrOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc25wID0gTlVM TDsKLQotCWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIp OwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3BfdmFsdWUgPSBremFs bG9jKERTUFBfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdG UF9LRVJORUwpOwotCWlmICghcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8g ZW5kOwotCX0KLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBkc3BwX3Byb3AsIEFSUkFZ X1NJWkUoZHNwcF9wcm9wKSwKLQkJcHJvcF9jb3VudCwgJm9mZl9jb3VudCk7Ci0JaWYgKHJjKQot CQlnb3RvIGVuZDsKLQotCWRwdV9jZmctPmRzcHBfY291bnQgPSBvZmZfY291bnQ7Ci0KLQlyYyA9 IF9yZWFkX2R0X2VudHJ5KG5wLCBkc3BwX3Byb3AsIEFSUkFZX1NJWkUoZHNwcF9wcm9wKSwgcHJv cF9jb3VudCwKLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJZ290byBl bmQ7Ci0KLQkvKiBQYXJzZSBBRCBkdHNpIGVudHJpZXMgKi8KLQlhZF9wcm9wX3ZhbHVlID0ga2Nh bGxvYyhBRF9QUk9QX01BWCwKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWFkX3Byb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3Rv IGVuZDsKLQl9Ci0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGFkX3Byb3AsIEFSUkFZX1NJ WkUoYWRfcHJvcCksCi0JCWFkX3Byb3BfY291bnQsICZhZF9vZmZfY291bnQpOwotCWlmIChyYykK LQkJZ290byBlbmQ7Ci0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgYWRfcHJvcCwgQVJSQVlfU0la RShhZF9wcm9wKSwgYWRfcHJvcF9jb3VudCwKLQkJYWRfcHJvcF9leGlzdHMsIGFkX3Byb3BfdmFs dWUpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQkvKiBnZXQgRFNQUCBmZWF0dXJlIGR0IHBy b3BlcnRpZXMgaWYgdGhleSBleGlzdCAqLwotCXNucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5w LCBkc3BwX3Byb3BbRFNQUF9CTE9DS1NdLnByb3BfbmFtZSk7Ci0JaWYgKHNucCkgewotCQlibG9j a3NfcHJvcF92YWx1ZSA9IGt6YWxsb2MoRFNQUF9CTE9DS1NfUFJPUF9NQVggKgotCQkJCU1BWF9E UFVfSFdfQkxLICogc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksCi0JCQkJR0ZQX0tFUk5F TCk7Ci0JCWlmICghYmxvY2tzX3Byb3BfdmFsdWUpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdv dG8gZW5kOwotCQl9Ci0JCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KHNucCwgZHNwcF9ibG9ja3Nf cHJvcCwKLQkJCUFSUkFZX1NJWkUoZHNwcF9ibG9ja3NfcHJvcCksIGJsb2Nrc19wcm9wX2NvdW50 LCBOVUxMKTsKLQkJaWYgKHJjKQotCQkJZ290byBlbmQ7Ci0JCXJjID0gX3JlYWRfZHRfZW50cnko c25wLCBkc3BwX2Jsb2Nrc19wcm9wLAotCQkJQVJSQVlfU0laRShkc3BwX2Jsb2Nrc19wcm9wKSwg YmxvY2tzX3Byb3BfY291bnQsCi0JCQlibG9ja3NfcHJvcF9leGlzdHMsIGJsb2Nrc19wcm9wX3Zh bHVlKTsKLQkJaWYgKHJjKQotCQkJZ290byBlbmQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG9m Zl9jb3VudDsgaSsrKSB7Ci0JCWRzcHAgPSBkcHVfY2ZnLT5kc3BwICsgaTsKLQkJZHNwcC0+YmFz ZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIERTUFBfT0ZGLCBpKTsKLQkJZHNwcC0+ bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNQUF9TSVpFLCAwKTsKLQkJZHNw cC0+aWQgPSBEU1BQXzAgKyBpOwotCQlzbnByaW50Zihkc3BwLT5uYW1lLCBEUFVfSFdfQkxLX05B TUVfTEVOLCAiZHNwcF8ldSIsCi0JCQkJZHNwcC0+aWQgLSBEU1BQXzApOwotCi0JCXNibGsgPSBr emFsbG9jKHNpemVvZigqc2JsayksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNibGspIHsKLQkJCXJj ID0gLUVOT01FTTsKLQkJCS8qIGNhdGFsb2cgZGVpbml0IHdpbGwgcmVsZWFzZSB0aGUgYWxsb2Nh dGVkIGJsb2NrcyAqLwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJZHNwcC0+c2JsayA9IHNibGs7Ci0K LQkJaWYgKGJsb2Nrc19wcm9wX3ZhbHVlKQotCQkJX2RwdV9kc3BwX3NldHVwX2Jsb2NrcyhkcHVf Y2ZnLCBkc3BwLCBzYmxrLAotCQkJCQlibG9ja3NfcHJvcF9leGlzdHMsIGJsb2Nrc19wcm9wX3Zh bHVlKTsKLQotCQlzYmxrLT5hZC5pZCA9IERQVV9EU1BQX0FEOwotCQlkcHVfY2ZnLT5hZF9jb3Vu dCA9IGFkX29mZl9jb3VudDsKLQkJaWYgKGFkX3Byb3BfdmFsdWUgJiYgKGkgPCBhZF9vZmZfY291 bnQpICYmCi0JCSAgICBhZF9wcm9wX2V4aXN0c1tBRF9PRkZdKSB7Ci0JCQlzYmxrLT5hZC5iYXNl ID0gUFJPUF9WQUxVRV9BQ0NFU1MoYWRfcHJvcF92YWx1ZSwKLQkJCQlBRF9PRkYsIGkpOwotCQkJ c2Jsay0+YWQudmVyc2lvbiA9IFBST1BfVkFMVUVfQUNDRVNTKGFkX3Byb3BfdmFsdWUsCi0JCQkJ QURfVkVSU0lPTiwgMCk7Ci0JCQlzZXRfYml0KERQVV9EU1BQX0FELCAmZHNwcC0+ZmVhdHVyZXMp OwotCQl9Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0Ja2ZyZWUoYWRfcHJvcF92 YWx1ZSk7Ci0Ja2ZyZWUoYmxvY2tzX3Byb3BfdmFsdWUpOwotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkcHVfZHNfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCXN0cnVj dCBkcHVfbWRzc19jZmcgKmRwdV9jZmcpCi17Ci0JaW50IHJjLCBwcm9wX2NvdW50W0RTX1BST1Bf TUFYXSwgdG9wX3Byb3BfY291bnRbRFNfVE9QX1BST1BfTUFYXSwgaTsKLQlzdHJ1Y3QgZHB1X3By b3BfdmFsdWUgKnByb3BfdmFsdWUgPSBOVUxMLCAqdG9wX3Byb3BfdmFsdWUgPSBOVUxMOwotCWJv b2wgcHJvcF9leGlzdHNbRFNfUFJPUF9NQVhdLCB0b3BfcHJvcF9leGlzdHNbRFNfVE9QX1BST1Bf TUFYXTsKLQl1MzIgb2ZmX2NvdW50ID0gMCwgdG9wX29mZl9jb3VudCA9IDA7Ci0Jc3RydWN0IGRw dV9kc19jZmcgKmRzOwotCXN0cnVjdCBkcHVfZHNfdG9wX2NmZyAqZHNfdG9wID0gTlVMTDsKLQot CWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwotCQly YyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmICghZHB1X2NmZy0+bWRwWzBdLmhh c19kZXN0X3NjYWxlcikgewotCQlEUFVfREVCVUcoImRlc3Qgc2NhbGVyIGZlYXR1cmUgbm90IHN1 cHBvcnRlZFxuIik7Ci0JCXJjID0gMDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JLyogUGFyc2UgdGhl IGRlc3Qgc2NhbGVyIHRvcCByZWdpc3RlciBvZmZzZXQgYW5kIGNhcGFiaWxpdGllcyAqLwotCXRv cF9wcm9wX3ZhbHVlID0ga3phbGxvYyhEU19UT1BfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVj dCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghdG9wX3Byb3BfdmFsdWUpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9l bnRyeShucCwgZHNfdG9wX3Byb3AsCi0JCQkJQVJSQVlfU0laRShkc190b3BfcHJvcCksCi0JCQkJ dG9wX3Byb3BfY291bnQsICZ0b3Bfb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwot Ci0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgZHNfdG9wX3Byb3AsCi0JCQlBUlJBWV9TSVpFKGRz X3RvcF9wcm9wKSwgdG9wX3Byb3BfY291bnQsCi0JCQl0b3BfcHJvcF9leGlzdHMsIHRvcF9wcm9w X3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JLyogUGFyc2UgdGhlIG9mZnNldCBv ZiBlYWNoIGRlc3Qgc2NhbGVyIGJsb2NrICovCi0JcHJvcF92YWx1ZSA9IGtjYWxsb2MoRFNfUFJP UF9NQVgsCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQotCi0J cmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGRzX3Byb3AsIEFSUkFZX1NJWkUoZHNfcHJvcCks IHByb3BfY291bnQsCi0JCSZvZmZfY291bnQpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlk cHVfY2ZnLT5kc19jb3VudCA9IG9mZl9jb3VudDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAs IGRzX3Byb3AsIEFSUkFZX1NJWkUoZHNfcHJvcCksIHByb3BfY291bnQsCi0JCXByb3BfZXhpc3Rz LCBwcm9wX3ZhbHVlKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JaWYgKCFvZmZfY291bnQp Ci0JCWdvdG8gZW5kOwotCi0JZHNfdG9wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRwdV9kc190 b3BfY2ZnKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc190b3ApIHsKLQkJcmMgPSAtRU5PTUVNOwot CQlnb3RvIGVuZDsKLQl9Ci0KLQlkc190b3AtPmlkID0gRFNfVE9QOwotCXNucHJpbnRmKGRzX3Rv cC0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzX3RvcF8ldSIsCi0JCWRzX3RvcC0+aWQg LSBEU19UT1ApOwotCWRzX3RvcC0+YmFzZSA9IFBST1BfVkFMVUVfQUNDRVNTKHRvcF9wcm9wX3Zh bHVlLCBEU19UT1BfT0ZGLCAwKTsKLQlkc190b3AtPmxlbiA9IFBST1BfVkFMVUVfQUNDRVNTKHRv cF9wcm9wX3ZhbHVlLCBEU19UT1BfTEVOLCAwKTsKLQlkc190b3AtPm1heHVwc2NhbGUgPSBNQVhf VVBTQ0FMRV9SQVRJTzsKLQotCWRzX3RvcC0+bWF4aW5wdXR3aWR0aCA9IFBST1BfVkFMVUVfQUND RVNTKHRvcF9wcm9wX3ZhbHVlLAotCQkJRFNfVE9QX0lOUFVUX0xJTkVXSURUSCwgMCk7Ci0JaWYg KCF0b3BfcHJvcF9leGlzdHNbRFNfVE9QX0lOUFVUX0xJTkVXSURUSF0pCi0JCWRzX3RvcC0+bWF4 aW5wdXR3aWR0aCA9IERFRkFVTFRfRFBVX0xJTkVfV0lEVEg7Ci0KLQlkc190b3AtPm1heG91dHB1 dHdpZHRoID0gUFJPUF9WQUxVRV9BQ0NFU1ModG9wX3Byb3BfdmFsdWUsCi0JCQlEU19UT1BfT1VU UFVUX0xJTkVXSURUSCwgMCk7Ci0JaWYgKCF0b3BfcHJvcF9leGlzdHNbRFNfVE9QX09VVFBVVF9M SU5FV0lEVEhdKQotCQlkc190b3AtPm1heG91dHB1dHdpZHRoID0gREVGQVVMVF9EUFVfT1VUUFVU X0xJTkVfV0lEVEg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKLQkJZHMg PSBkcHVfY2ZnLT5kcyArIGk7Ci0JCWRzLT50b3AgPSBkc190b3A7Ci0JCWRzLT5iYXNlID0gUFJP UF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNfT0ZGLCBpKTsKLQkJZHMtPmlkID0gRFNfMCAr IGk7Ci0JCWRzLT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBEU19MRU4sIDAp OwotCQlzbnByaW50Zihkcy0+bmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzXyV1IiwKLQkJ CWRzLT5pZCAtIERTXzApOwotCi0JCWlmICghcHJvcF9leGlzdHNbRFNfTEVOXSkKLQkJCWRzLT5s ZW4gPSBERUZBVUxUX0RQVV9IV19CTE9DS19MRU47Ci0KLQkJaWYgKGRwdV9jZmctPnFzZWVkX3R5 cGUgPT0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykKLQkJCXNldF9iaXQoRFBVX1NTUFBfU0NBTEVS X1FTRUVEMywgJmRzLT5mZWF0dXJlcyk7Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUodG9wX3Byb3BfdmFs dWUpOwotCWtmcmVlKHByb3BfdmFsdWUpOwotCXJldHVybiByYzsKLX07Ci0KLXN0YXRpYyBpbnQg ZHB1X2RzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJc3RydWN0IGRwdV9t ZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMsIHByb3BfY291bnRbTUFYX0JMT0NLU10sIGk7 Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsKLQlib29sIHByb3Bf ZXhpc3RzW0RTQ19QUk9QX01BWF07Ci0JdTMyIG9mZl9jb3VudDsKLQlzdHJ1Y3QgZHB1X2RzY19j ZmcgKmRzYzsKLQotCWlmICghZHB1X2NmZykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1l bnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3BfdmFsdWUg PSBremFsbG9jKERTQ19QUk9QX01BWCAqCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVl KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJ Z290byBlbmQ7Ci0JfQotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsIGRzY19wcm9wLCBB UlJBWV9TSVpFKGRzY19wcm9wKSwgcHJvcF9jb3VudCwKLQkJJm9mZl9jb3VudCk7Ci0JaWYgKHJj KQotCQlnb3RvIGVuZDsKLQotCWRwdV9jZmctPmRzY19jb3VudCA9IG9mZl9jb3VudDsKLQotCXJj ID0gX3JlYWRfZHRfZW50cnkobnAsIGRzY19wcm9wLCBBUlJBWV9TSVpFKGRzY19wcm9wKSwgcHJv cF9jb3VudCwKLQkJcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJZ290byBl bmQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKyspIHsKLQkJZHNjID0gZHB1X2Nm Zy0+ZHNjICsgaTsKLQkJZHNjLT5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg RFNDX09GRiwgaSk7Ci0JCWRzYy0+aWQgPSBEU0NfMCArIGk7Ci0JCWRzYy0+bGVuID0gUFJPUF9W QUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRFNDX0xFTiwgMCk7Ci0JCXNucHJpbnRmKGRzYy0+bmFt ZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzY18ldSIsCi0JCQkJZHNjLT5pZCAtIERTQ18wKTsK LQotCQlpZiAoIXByb3BfZXhpc3RzW0RTQ19MRU5dKQotCQkJZHNjLT5sZW4gPSBERUZBVUxUX0RQ VV9IV19CTE9DS19MRU47Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0JcmV0dXJu IHJjOwotfTsKLQotc3RhdGljIGludCBkcHVfY2RtX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAsCi0JCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMsIHBy b3BfY291bnRbSFdfUFJPUF9NQVhdLCBpOwotCXN0cnVjdCBkcHVfcHJvcF92YWx1ZSAqcHJvcF92 YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9wX2V4aXN0c1tIV19QUk9QX01BWF07Ci0JdTMyIG9mZl9j b3VudDsKLQlzdHJ1Y3QgZHB1X2NkbV9jZmcgKmNkbTsKLQotCWlmICghZHB1X2NmZykgewotCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8g ZW5kOwotCX0KLQotCXByb3BfdmFsdWUgPSBremFsbG9jKEhXX1BST1BfTUFYICoKLQkJCXNpemVv ZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUp IHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9k dF9lbnRyeShucCwgY2RtX3Byb3AsIEFSUkFZX1NJWkUoY2RtX3Byb3ApLCBwcm9wX2NvdW50LAot CQkmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZHB1X2NmZy0+Y2RtX2Nv dW50ID0gb2ZmX2NvdW50OwotCi0JcmMgPSBfcmVhZF9kdF9lbnRyeShucCwgY2RtX3Byb3AsIEFS UkFZX1NJWkUoY2RtX3Byb3ApLCBwcm9wX2NvdW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1 ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7 IGkrKykgewotCQljZG0gPSBkcHVfY2ZnLT5jZG0gKyBpOwotCQljZG0tPmJhc2UgPSBQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBIV19PRkYsIGkpOwotCQljZG0tPmlkID0gQ0RNXzAgKyBp OwotCQlzbnByaW50ZihjZG0tPm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sICJjZG1fJXUiLAot CQkJCWNkbS0+aWQgLSBDRE1fMCk7Ci0JCWNkbS0+bGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwgSFdfTEVOLCAwKTsKLQotCQkvKiBpbnRmMyBhbmQgd2IyIGZvciBjZG0gYmxvY2sg Ki8KLQkJY2RtLT53Yl9jb25uZWN0ID0gZHB1X2NmZy0+d2JfY291bnQgPyBCSVQoV0JfMikgOiBC SVQoMzEpOwotCQljZG0tPmludGZfY29ubmVjdCA9IGRwdV9jZmctPmludGZfY291bnQgPyBCSVQo SU5URl8zKSA6IEJJVCgzMSk7Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV92YmlmX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCi0JCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKLXsKLQlpbnQgcmMs IHByb3BfY291bnRbVkJJRl9QUk9QX01BWF0sIGksIGosIGs7Ci0Jc3RydWN0IGRwdV9wcm9wX3Zh bHVlICpwcm9wX3ZhbHVlID0gTlVMTDsKLQlib29sIHByb3BfZXhpc3RzW1ZCSUZfUFJPUF9NQVhd OwotCXUzMiBvZmZfY291bnQsIHZiaWZfbGVuOwotCXN0cnVjdCBkcHVfdmJpZl9jZmcgKnZiaWY7 Ci0KLQlpZiAoIWRwdV9jZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsK LQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlwcm9wX3ZhbHVlID0ga3phbGxv YyhWQklGX1BST1BfTUFYICoKLQkJCXNpemVvZihzdHJ1Y3QgZHB1X3Byb3BfdmFsdWUpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIXByb3BfdmFsdWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVu ZDsKLQl9Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgdmJpZl9wcm9wLCBBUlJBWV9T SVpFKHZiaWZfcHJvcCksCi0JCQlwcm9wX2NvdW50LCAmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0J CWdvdG8gZW5kOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJ Rl9EWU5BTUlDX09UX1JEX0xJTUlUXSwgMSwKLQkJCSZwcm9wX2NvdW50W1ZCSUZfRFlOQU1JQ19P VF9SRF9MSU1JVF0sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IF92YWxp ZGF0ZV9kdF9lbnRyeShucCwgJnZiaWZfcHJvcFtWQklGX0RZTkFNSUNfT1RfV1JfTElNSVRdLCAx LAotCQkJJnByb3BfY291bnRbVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlUXSwgTlVMTCk7Ci0JaWYg KHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmdmJpZl9w cm9wW1ZCSUZfUU9TX1JUX1JFTUFQXSwgMSwKLQkJCSZwcm9wX2NvdW50W1ZCSUZfUU9TX1JUX1JF TUFQXSwgTlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gX3ZhbGlkYXRlX2R0 X2VudHJ5KG5wLCAmdmJpZl9wcm9wW1ZCSUZfUU9TX05SVF9SRU1BUF0sIDEsCi0JCQkmcHJvcF9j b3VudFtWQklGX1FPU19OUlRfUkVNQVBdLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwot Ci0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJRl9NRU1UWVBFXzBd LCAxLAotCQkJJnByb3BfY291bnRbVkJJRl9NRU1UWVBFXzBdLCBOVUxMKTsKLQlpZiAocmMpCi0J CWdvdG8gZW5kOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZ2YmlmX3Byb3BbVkJJ Rl9NRU1UWVBFXzFdLCAxLAotCQkJJnByb3BfY291bnRbVkJJRl9NRU1UWVBFXzFdLCBOVUxMKTsK LQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JZHB1X2NmZy0+dmJpZl9jb3VudCA9IG9mZl9jb3Vu dDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIHZiaWZfcHJvcCwgQVJSQVlfU0laRSh2Ymlm X3Byb3ApLCBwcm9wX2NvdW50LAotCQlwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJj KQotCQlnb3RvIGVuZDsKLQotCXZiaWZfbGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1 ZSwgVkJJRl9MRU4sIDApOwotCWlmICghcHJvcF9leGlzdHNbVkJJRl9MRU5dKQotCQl2YmlmX2xl biA9IERFRkFVTFRfRFBVX0hXX0JMT0NLX0xFTjsKLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291 bnQ7IGkrKykgewotCQl2YmlmID0gZHB1X2NmZy0+dmJpZiArIGk7Ci0JCXZiaWYtPmJhc2UgPSBQ Uk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBWQklGX09GRiwgaSk7Ci0JCXZiaWYtPmxlbiA9 IHZiaWZfbGVuOwotCQl2YmlmLT5pZCA9IFZCSUZfMCArIFBST1BfVkFMVUVfQUNDRVNTKHByb3Bf dmFsdWUsIFZCSUZfSUQsIGkpOwotCQlzbnByaW50Zih2YmlmLT5uYW1lLCBEUFVfSFdfQkxLX05B TUVfTEVOLCAidmJpZl8ldSIsCi0JCQkJdmJpZi0+aWQgLSBWQklGXzApOwotCi0JCURQVV9ERUJV RygidmJpZjolZFxuIiwgdmJpZi0+aWQgLSBWQklGXzApOwotCi0JCXZiaWYtPnhpbl9oYWx0X3Rp bWVvdXQgPSBWQklGX1hJTl9IQUxUX1RJTUVPVVQ7Ci0KLQkJdmJpZi0+ZGVmYXVsdF9vdF9yZF9s aW1pdCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJVkJJRl9ERUZBVUxUX09U X1JEX0xJTUlULCAwKTsKLQkJRFBVX0RFQlVHKCJkZWZhdWx0X290X3JkX2xpbWl0PSV1XG4iLAot CQkJCXZiaWYtPmRlZmF1bHRfb3RfcmRfbGltaXQpOwotCi0JCXZiaWYtPmRlZmF1bHRfb3Rfd3Jf bGltaXQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCVZCSUZfREVGQVVMVF9P VF9XUl9MSU1JVCwgMCk7Ci0JCURQVV9ERUJVRygiZGVmYXVsdF9vdF93cl9saW1pdD0ldVxuIiwK LQkJCQl2YmlmLT5kZWZhdWx0X290X3dyX2xpbWl0KTsKLQotCQl2YmlmLT5keW5hbWljX290X3Jk X3RibC5jb3VudCA9Ci0JCQkJcHJvcF9jb3VudFtWQklGX0RZTkFNSUNfT1RfUkRfTElNSVRdIC8g MjsKLQkJRFBVX0RFQlVHKCJkeW5hbWljX290X3JkX3RibC5jb3VudD0ldVxuIiwKLQkJCQl2Ymlm LT5keW5hbWljX290X3JkX3RibC5jb3VudCk7Ci0JCWlmICh2YmlmLT5keW5hbWljX290X3JkX3Ri bC5jb3VudCkgewotCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2ZnID0ga2NhbGxvYygKLQkJ CQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jb3VudCwKLQkJCQlzaXplb2Yoc3RydWN0IGRwdV92 YmlmX2R5bmFtaWNfb3RfY2ZnKSwKLQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmICghdmJpZi0+ZHlu YW1pY19vdF9yZF90YmwuY2ZnKSB7Ci0JCQkJcmMgPSAtRU5PTUVNOwotCQkJCWdvdG8gZW5kOwot CQkJfQotCQl9Ci0KLQkJZm9yIChqID0gMCwgayA9IDA7IGogPCB2YmlmLT5keW5hbWljX290X3Jk X3RibC5jb3VudDsgaisrKSB7Ci0JCQl2YmlmLT5keW5hbWljX290X3JkX3RibC5jZmdbal0ucHBz ID0gKHU2NCkKLQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCVZCSUZfRFlO QU1JQ19PVF9SRF9MSU1JVCwgaysrKTsKLQkJCXZiaWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNmZ1tq XS5vdF9saW1pdCA9Ci0JCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQlWQklG X0RZTkFNSUNfT1RfUkRfTElNSVQsIGsrKyk7Ci0JCQlEUFVfREVCVUcoImR5bmFtaWNfb3RfcmRf dGJsWyVkXS5jZmc9PCVsbHUgJXU+XG4iLCBqLAotCQkJCXZiaWYtPmR5bmFtaWNfb3RfcmRfdGJs LmNmZ1tqXS5wcHMsCi0JCQkJdmJpZi0+ZHluYW1pY19vdF9yZF90YmwuY2ZnW2pdLm90X2xpbWl0 KTsKLQkJfQotCi0JCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50ID0KLQkJCQlwcm9wX2Nv dW50W1ZCSUZfRFlOQU1JQ19PVF9XUl9MSU1JVF0gLyAyOwotCQlEUFVfREVCVUcoImR5bmFtaWNf b3Rfd3JfdGJsLmNvdW50PSV1XG4iLAotCQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50 KTsKLQkJaWYgKHZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50KSB7Ci0JCQl2YmlmLT5keW5h bWljX290X3dyX3RibC5jZmcgPSBrY2FsbG9jKAotCQkJCXZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJs LmNvdW50LAotCQkJCXNpemVvZihzdHJ1Y3QgZHB1X3ZiaWZfZHluYW1pY19vdF9jZmcpLAotCQkJ CUdGUF9LRVJORUwpOwotCQkJaWYgKCF2YmlmLT5keW5hbWljX290X3dyX3RibC5jZmcpIHsKLQkJ CQlyYyA9IC1FTk9NRU07Ci0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGogPSAw LCBrID0gMDsgaiA8IHZiaWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNvdW50OyBqKyspIHsKLQkJCXZi aWYtPmR5bmFtaWNfb3Rfd3JfdGJsLmNmZ1tqXS5wcHMgPSAodTY0KQotCQkJCVBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJVkJJRl9EWU5BTUlDX09UX1dSX0xJTUlULCBrKyspOwot CQkJdmJpZi0+ZHluYW1pY19vdF93cl90YmwuY2ZnW2pdLm90X2xpbWl0ID0KLQkJCQlQUk9QX1ZB TFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJCVZCSUZfRFlOQU1JQ19PVF9XUl9MSU1JVCwgaysr KTsKLQkJCURQVV9ERUJVRygiZHluYW1pY19vdF93cl90YmxbJWRdLmNmZz08JWxsdSAldT5cbiIs IGosCi0JCQkJdmJpZi0+ZHluYW1pY19vdF93cl90YmwuY2ZnW2pdLnBwcywKLQkJCQl2YmlmLT5k eW5hbWljX290X3dyX3RibC5jZmdbal0ub3RfbGltaXQpOwotCQl9Ci0KLQkJaWYgKHZiaWYtPmRl ZmF1bHRfb3RfcmRfbGltaXQgfHwgdmJpZi0+ZGVmYXVsdF9vdF93cl9saW1pdCB8fAotCQkJCXZi aWYtPmR5bmFtaWNfb3RfcmRfdGJsLmNvdW50IHx8Ci0JCQkJdmJpZi0+ZHluYW1pY19vdF93cl90 YmwuY291bnQpCi0JCQlzZXRfYml0KERQVV9WQklGX1FPU19PVExJTSwgJnZiaWYtPmZlYXR1cmVz KTsKLQotCQl2YmlmLT5xb3NfcnRfdGJsLm5wcmlvcml0eV9sdmwgPQotCQkJCXByb3BfY291bnRb VkJJRl9RT1NfUlRfUkVNQVBdOwotCQlEUFVfREVCVUcoInFvc19ydF90YmwubnByaW9yaXR5X2x2 bD0ldVxuIiwKLQkJCQl2YmlmLT5xb3NfcnRfdGJsLm5wcmlvcml0eV9sdmwpOwotCQlpZiAodmJp Zi0+cW9zX3J0X3RibC5ucHJpb3JpdHlfbHZsID09IGRwdV9jZmctPnZiaWZfcW9zX25sdmwpIHsK LQkJCXZiaWYtPnFvc19ydF90YmwucHJpb3JpdHlfbHZsID0ga2NhbGxvYygKLQkJCQl2YmlmLT5x b3NfcnRfdGJsLm5wcmlvcml0eV9sdmwsIHNpemVvZih1MzIpLAotCQkJCUdGUF9LRVJORUwpOwot CQkJaWYgKCF2YmlmLT5xb3NfcnRfdGJsLnByaW9yaXR5X2x2bCkgewotCQkJCXJjID0gLUVOT01F TTsKLQkJCQlnb3RvIGVuZDsKLQkJCX0KLQkJfSBlbHNlIGlmICh2YmlmLT5xb3NfcnRfdGJsLm5w cmlvcml0eV9sdmwpIHsKLQkJCXZiaWYtPnFvc19ydF90YmwubnByaW9yaXR5X2x2bCA9IDA7Ci0J CQl2YmlmLT5xb3NfcnRfdGJsLnByaW9yaXR5X2x2bCA9IE5VTEw7Ci0JCQlEUFVfRVJST1IoImlu dmFsaWQgcW9zIHJ0IHRhYmxlXG4iKTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPCB2YmlmLT5x b3NfcnRfdGJsLm5wcmlvcml0eV9sdmw7IGorKykgewotCQkJdmJpZi0+cW9zX3J0X3RibC5wcmlv cml0eV9sdmxbal0gPQotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlW QklGX1FPU19SVF9SRU1BUCwgaik7Ci0JCQlEUFVfREVCVUcoImx2bFslZF09JXVcbiIsIGosCi0J CQkJCXZiaWYtPnFvc19ydF90YmwucHJpb3JpdHlfbHZsW2pdKTsKLQkJfQotCi0JCXZiaWYtPnFv c19ucnRfdGJsLm5wcmlvcml0eV9sdmwgPQotCQkJCXByb3BfY291bnRbVkJJRl9RT1NfTlJUX1JF TUFQXTsKLQkJRFBVX0RFQlVHKCJxb3NfbnJ0X3RibC5ucHJpb3JpdHlfbHZsPSV1XG4iLAotCQkJ CXZiaWYtPnFvc19ucnRfdGJsLm5wcmlvcml0eV9sdmwpOwotCi0JCWlmICh2YmlmLT5xb3NfbnJ0 X3RibC5ucHJpb3JpdHlfbHZsID09IGRwdV9jZmctPnZiaWZfcW9zX25sdmwpIHsKLQkJCXZiaWYt PnFvc19ucnRfdGJsLnByaW9yaXR5X2x2bCA9IGtjYWxsb2MoCi0JCQkJdmJpZi0+cW9zX25ydF90 YmwubnByaW9yaXR5X2x2bCwgc2l6ZW9mKHUzMiksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAo IXZiaWYtPnFvc19ucnRfdGJsLnByaW9yaXR5X2x2bCkgewotCQkJCXJjID0gLUVOT01FTTsKLQkJ CQlnb3RvIGVuZDsKLQkJCX0KLQkJfSBlbHNlIGlmICh2YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3Jp dHlfbHZsKSB7Ci0JCQl2YmlmLT5xb3NfbnJ0X3RibC5ucHJpb3JpdHlfbHZsID0gMDsKLQkJCXZi aWYtPnFvc19ucnRfdGJsLnByaW9yaXR5X2x2bCA9IE5VTEw7Ci0JCQlEUFVfRVJST1IoImludmFs aWQgcW9zIG5ydCB0YWJsZVxuIik7Ci0JCX0KLQotCQlmb3IgKGogPSAwOyBqIDwgdmJpZi0+cW9z X25ydF90YmwubnByaW9yaXR5X2x2bDsgaisrKSB7Ci0JCQl2YmlmLT5xb3NfbnJ0X3RibC5wcmlv cml0eV9sdmxbal0gPQotCQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlW QklGX1FPU19OUlRfUkVNQVAsIGopOwotCQkJRFBVX0RFQlVHKCJsdmxbJWRdPSV1XG4iLCBqLAot CQkJCQl2YmlmLT5xb3NfbnJ0X3RibC5wcmlvcml0eV9sdmxbal0pOwotCQl9Ci0KLQkJaWYgKHZi aWYtPnFvc19ydF90YmwubnByaW9yaXR5X2x2bCB8fAotCQkJCXZiaWYtPnFvc19ucnRfdGJsLm5w cmlvcml0eV9sdmwpCi0JCQlzZXRfYml0KERQVV9WQklGX1FPU19SRU1BUCwgJnZiaWYtPmZlYXR1 cmVzKTsKLQotCQl2YmlmLT5tZW10eXBlX2NvdW50ID0gcHJvcF9jb3VudFtWQklGX01FTVRZUEVf MF0gKwotCQkJCQlwcm9wX2NvdW50W1ZCSUZfTUVNVFlQRV8xXTsKLQkJaWYgKHZiaWYtPm1lbXR5 cGVfY291bnQgPiBNQVhfWElOX0NPVU5UKSB7Ci0JCQl2YmlmLT5tZW10eXBlX2NvdW50ID0gMDsK LQkJCURQVV9FUlJPUigidG9vIG1hbnkgbWVtdHlwZSBkZWZzLCBpZ25vcmluZyBlbnRyaWVzXG4i KTsKLQkJfQotCQlmb3IgKGogPSAwLCBrID0gMDsgaiA8IHByb3BfY291bnRbVkJJRl9NRU1UWVBF XzBdOyBqKyspCi0JCQl2YmlmLT5tZW10eXBlW2srK10gPSBQUk9QX1ZBTFVFX0FDQ0VTUygKLQkJ CQkJcHJvcF92YWx1ZSwgVkJJRl9NRU1UWVBFXzAsIGopOwotCQlmb3IgKGogPSAwOyBqIDwgcHJv cF9jb3VudFtWQklGX01FTVRZUEVfMV07IGorKykKLQkJCXZiaWYtPm1lbXR5cGVbaysrXSA9IFBS T1BfVkFMVUVfQUNDRVNTKAotCQkJCQlwcm9wX3ZhbHVlLCBWQklGX01FTVRZUEVfMSwgaik7Ci0J fQotCi1lbmQ6Ci0Ja2ZyZWUocHJvcF92YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRwdV9wcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgZHB1X21k c3NfY2ZnICpkcHVfY2ZnKQotewotCWludCByYywgcHJvcF9jb3VudFtQUF9QUk9QX01BWF0sIGk7 Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsKLQlib29sIHByb3Bf ZXhpc3RzW1BQX1BST1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50OwotCXN0cnVjdCBkcHVfcGluZ3Bv bmdfY2ZnICpwcDsKLQlzdHJ1Y3QgZHB1X3Bpbmdwb25nX3N1Yl9ibGtzICpzYmxrOwotCi0JaWYg KCFkcHVfY2ZnKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0g LUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcHJvcF92YWx1ZSA9IGt6YWxsb2MoUFBfUFJP UF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwot CWlmICghcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQot CXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBwcF9wcm9wLCBBUlJBWV9TSVpFKHBwX3Byb3Ap LCBwcm9wX2NvdW50LAotCQkmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0J ZHB1X2NmZy0+cGluZ3BvbmdfY291bnQgPSBvZmZfY291bnQ7Ci0KLQlyYyA9IF9yZWFkX2R0X2Vu dHJ5KG5wLCBwcF9wcm9wLCBBUlJBWV9TSVpFKHBwX3Byb3ApLCBwcm9wX2NvdW50LAotCQlwcm9w X2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCWZvciAoaSA9 IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewotCQlwcCA9IGRwdV9jZmctPnBpbmdwb25nICsgaTsK LQkJc2JsayA9IGt6YWxsb2Moc2l6ZW9mKCpzYmxrKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2Js aykgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJLyogY2F0YWxvZyBkZWluaXQgd2lsbCByZWxlYXNl IHRoZSBhbGxvY2F0ZWQgYmxvY2tzICovCi0JCQlnb3RvIGVuZDsKLQkJfQotCQlwcC0+c2JsayA9 IHNibGs7Ci0KLQkJcHAtPmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQUF9P RkYsIGkpOwotCQlwcC0+aWQgPSBQSU5HUE9OR18wICsgaTsKLQkJc25wcmludGYocHAtPm5hbWUs IERQVV9IV19CTEtfTkFNRV9MRU4sICJwaW5ncG9uZ18ldSIsCi0JCQkJcHAtPmlkIC0gUElOR1BP TkdfMCk7Ci0JCXBwLT5sZW4gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQUF9MRU4s IDApOwotCi0JCXNibGstPnRlLmJhc2UgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBU RV9PRkYsIGkpOwotCQlzYmxrLT50ZS5pZCA9IERQVV9QSU5HUE9OR19URTsKLQkJc25wcmludGYo c2Jsay0+dGUubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgInRlXyV1IiwKLQkJCQlwcC0+aWQg LSBQSU5HUE9OR18wKTsKLQkJc2V0X2JpdChEUFVfUElOR1BPTkdfVEUsICZwcC0+ZmVhdHVyZXMp OwotCi0JCXNibGstPnRlMi5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgVEUy X09GRiwgaSk7Ci0JCWlmIChzYmxrLT50ZTIuYmFzZSkgewotCQkJc2Jsay0+dGUyLmlkID0gRFBV X1BJTkdQT05HX1RFMjsKLQkJCXNucHJpbnRmKHNibGstPnRlMi5uYW1lLCBEUFVfSFdfQkxLX05B TUVfTEVOLCAidGUyXyV1IiwKLQkJCQkJcHAtPmlkIC0gUElOR1BPTkdfMCk7Ci0JCQlzZXRfYml0 KERQVV9QSU5HUE9OR19URTIsICZwcC0+ZmVhdHVyZXMpOwotCQkJc2V0X2JpdChEUFVfUElOR1BP TkdfU1BMSVQsICZwcC0+ZmVhdHVyZXMpOwotCQl9Ci0KLQkJaWYgKFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsIFBQX1NMQVZFLCBpKSkKLQkJCXNldF9iaXQoRFBVX1BJTkdQT05HX1NMQVZF LCAmcHAtPmZlYXR1cmVzKTsKLQotCQlzYmxrLT5kc2MuYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsIERTQ19PRkYsIGkpOwotCQlpZiAoc2Jsay0+ZHNjLmJhc2UpIHsKLQkJCXNi bGstPmRzYy5pZCA9IERQVV9QSU5HUE9OR19EU0M7Ci0JCQlzbnByaW50ZihzYmxrLT5kc2MubmFt ZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgImRzY18ldSIsCi0JCQkJCXBwLT5pZCAtIFBJTkdQT05H XzApOwotCQkJc2V0X2JpdChEUFVfUElOR1BPTkdfRFNDLCAmcHAtPmZlYXR1cmVzKTsKLQkJfQot Ci0JCXNibGstPmRpdGhlci5iYXNlID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRElU SEVSX09GRiwKLQkJCQkJCQlpKTsKLQkJaWYgKHNibGstPmRpdGhlci5iYXNlKSB7Ci0JCQlzYmxr LT5kaXRoZXIuaWQgPSBEUFVfUElOR1BPTkdfRElUSEVSOwotCQkJc25wcmludGYoc2Jsay0+ZGl0 aGVyLm5hbWUsIERQVV9IV19CTEtfTkFNRV9MRU4sCi0JCQkJCSJkaXRoZXJfJXUiLCBwcC0+aWQp OwotCQkJc2V0X2JpdChEUFVfUElOR1BPTkdfRElUSEVSLCAmcHAtPmZlYXR1cmVzKTsKLQkJfQot CQlzYmxrLT5kaXRoZXIubGVuID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgRElUSEVS X0xFTiwgMCk7Ci0JCXNibGstPmRpdGhlci52ZXJzaW9uID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwgRElUSEVSX1ZFUiwKLQkJCQkJCQkJMCk7Ci0JfQotCi1lbmQ6Ci0Ja2ZyZWUocHJv cF92YWx1ZSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9wYXJzZV9kdChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjZmcpCi17Ci0JaW50IHJj LCBkbWFfcmMsIGxlbiwgcHJvcF9jb3VudFtEUFVfUFJPUF9NQVhdOwotCXN0cnVjdCBkcHVfcHJv cF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9wX2V4aXN0c1tEUFVfUFJPUF9N QVhdOwotCWNvbnN0IGNoYXIgKnR5cGU7Ci0KLQlpZiAoIWNmZykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQot CXByb3BfdmFsdWUgPSBremFsbG9jKERQVV9QUk9QX01BWCAqCi0JCQlzaXplb2Yoc3RydWN0IGRw dV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKSB7Ci0JCXJjID0g LUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAs IGRwdV9wcm9wLCBBUlJBWV9TSVpFKGRwdV9wcm9wKSwgcHJvcF9jb3VudCwKLQkJJmxlbik7Ci0J aWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gX3JlYWRfZHRfZW50cnkobnAsIGRwdV9wcm9w LCBBUlJBWV9TSVpFKGRwdV9wcm9wKSwgcHJvcF9jb3VudCwKLQkJcHJvcF9leGlzdHMsIHByb3Bf dmFsdWUpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQljZmctPm1kc3NfY291bnQgPSAxOwot CWNmZy0+bWRzc1swXS5iYXNlID0gTURTU19CQVNFX09GRlNFVDsKLQljZmctPm1kc3NbMF0uaWQg PSBNRFBfVE9QOwotCXNucHJpbnRmKGNmZy0+bWRzc1swXS5uYW1lLCBEUFVfSFdfQkxLX05BTUVf TEVOLCAibWRzc18ldSIsCi0JCQljZmctPm1kc3NbMF0uaWQgLSBNRFBfVE9QKTsKLQotCWNmZy0+ bWRwX2NvdW50ID0gMTsKLQljZmctPm1kcFswXS5pZCA9IE1EUF9UT1A7Ci0Jc25wcmludGYoY2Zn LT5tZHBbMF0ubmFtZSwgRFBVX0hXX0JMS19OQU1FX0xFTiwgInRvcF8ldSIsCi0JCWNmZy0+bWRw WzBdLmlkIC0gTURQX1RPUCk7Ci0JY2ZnLT5tZHBbMF0uYmFzZSA9IFBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsIERQVV9PRkYsIDApOwotCWNmZy0+bWRwWzBdLmxlbiA9IFBST1BfVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsIERQVV9MRU4sIDApOwotCWlmICghcHJvcF9leGlzdHNbRFBVX0xF Tl0pCi0JCWNmZy0+bWRwWzBdLmxlbiA9IERFRkFVTFRfRFBVX0hXX0JMT0NLX0xFTjsKLQotCWNm Zy0+bWF4X3NzcHBfbGluZXdpZHRoID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJ CVNTUFBfTElORVdJRFRILCAwKTsKLQlpZiAoIXByb3BfZXhpc3RzW1NTUFBfTElORVdJRFRIXSkK LQkJY2ZnLT5tYXhfc3NwcF9saW5ld2lkdGggPSBERUZBVUxUX0RQVV9MSU5FX1dJRFRIOwotCi0J Y2ZnLT5tYXhfbWl4ZXJfd2lkdGggPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJ TUlYRVJfTElORVdJRFRILCAwKTsKLQlpZiAoIXByb3BfZXhpc3RzW01JWEVSX0xJTkVXSURUSF0p Ci0JCWNmZy0+bWF4X21peGVyX3dpZHRoID0gREVGQVVMVF9EUFVfTElORV9XSURUSDsKLQotCWNm Zy0+bWF4X21peGVyX2JsZW5kc3RhZ2VzID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCU1JWEVSX0JMRU5ELCAwKTsKLQlpZiAoIXByb3BfZXhpc3RzW01JWEVSX0JMRU5EXSkKLQkJ Y2ZnLT5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMgPSBERUZBVUxUX0RQVV9NSVhFUl9CTEVORFNUQUdF UzsKLQotCWNmZy0+bWF4X3diX2xpbmV3aWR0aCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFs dWUsIFdCX0xJTkVXSURUSCwgMCk7Ci0JaWYgKCFwcm9wX2V4aXN0c1tXQl9MSU5FV0lEVEhdKQot CQljZmctPm1heF93Yl9saW5ld2lkdGggPSBERUZBVUxUX0RQVV9MSU5FX1dJRFRIOwotCi0JY2Zn LT5tZHBbMF0uaGlnaGVzdF9iYW5rX2JpdCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUs Ci0JCQlCQU5LX0JJVCwgMCk7Ci0JaWYgKCFwcm9wX2V4aXN0c1tCQU5LX0JJVF0pCi0JCWNmZy0+ bWRwWzBdLmhpZ2hlc3RfYmFua19iaXQgPSBERUZBVUxUX0RQVV9ISUdIRVNUX0JBTktfQklUOwot Ci0JY2ZnLT51YndjX3ZlcnNpb24gPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBVQldD X1ZFUlNJT04sIDApOwotCWlmICghcHJvcF9leGlzdHNbVUJXQ19WRVJTSU9OXSkKLQkJY2ZnLT51 YndjX3ZlcnNpb24gPSBERUZBVUxUX0RQVV9VQldDX1ZFUlNJT047Ci0KLQljZmctPm1kcFswXS51 YndjX3N0YXRpYyA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFVCV0NfU1RBVElDLCAw KTsKLQlpZiAoIXByb3BfZXhpc3RzW1VCV0NfU1RBVElDXSkKLQkJY2ZnLT5tZHBbMF0udWJ3Y19z dGF0aWMgPSBERUZBVUxUX0RQVV9VQldDX1NUQVRJQzsKLQotCWNmZy0+bWRwWzBdLnVid2Nfc3dp enpsZSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQlVQldDX1NXSVpaTEUsIDAp OwotCWlmICghcHJvcF9leGlzdHNbVUJXQ19TV0laWkxFXSkKLQkJY2ZnLT5tZHBbMF0udWJ3Y19z d2l6emxlID0gREVGQVVMVF9EUFVfVUJXQ19TV0laWkxFOwotCi0JY2ZnLT5tZHBbMF0uaGFzX2Rl c3Rfc2NhbGVyID0KLQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgREVTVF9TQ0FMRVIs IDApOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgZHB1X3Byb3BbUVNFRURf VFlQRV0ucHJvcF9uYW1lLCAmdHlwZSk7Ci0JaWYgKCFyYyAmJiAhc3RyY21wKHR5cGUsICJxc2Vl ZHYzIikpIHsKLQkJY2ZnLT5xc2VlZF90eXBlID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMzsKLQl9 IGVsc2UgaWYgKCFyYyAmJiAhc3RyY21wKHR5cGUsICJxc2VlZHYyIikpIHsKLQkJY2ZnLT5xc2Vl ZF90eXBlID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMjsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCURQ VV9ERUJVRygiaW52YWxpZCBRU0VFRCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmMgPSAwOwotCX0K LQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsIGRwdV9wcm9wW0NTQ19UWVBFXS5w cm9wX25hbWUsICZ0eXBlKTsKLQlpZiAoIXJjICYmICFzdHJjbXAodHlwZSwgImNzYyIpKSB7Ci0J CWNmZy0+Y3NjX3R5cGUgPSBEUFVfU1NQUF9DU0M7Ci0JfSBlbHNlIGlmICghcmMgJiYgIXN0cmNt cCh0eXBlLCAiY3NjLTEwYml0IikpIHsKLQkJY2ZnLT5jc2NfdHlwZSA9IERQVV9TU1BQX0NTQ18x MEJJVDsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCURQVV9ERUJVRygiaW52YWxpZCBjc2MgY29uZmln dXJhdGlvblxuIik7Ci0JCXJjID0gMDsKLQl9Ci0KLQkvKgotCSAqIEN1cnJlbnQgRFBVIHN1cHBv cnQgb25seSBTbWFydCBETUEgMi4wLgotCSAqIE5vIHN1cHBvcnQgZm9yIFNtYXJ0IERNQSAxLjAg eWV0LgotCSAqLwotCWNmZy0+c21hcnRfZG1hX3JldiA9IDA7Ci0JZG1hX3JjID0gb2ZfcHJvcGVy dHlfcmVhZF9zdHJpbmcobnAsIGRwdV9wcm9wW1NNQVJUX0RNQV9SRVZdLnByb3BfbmFtZSwKLQkJ CSZ0eXBlKTsKLQlpZiAoIWRtYV9yYyAmJiAhc3RyY21wKHR5cGUsICJzbWFydF9kbWFfdjIiKSkg ewotCQljZmctPnNtYXJ0X2RtYV9yZXYgPSBEUFVfU1NQUF9TTUFSVF9ETUFfVjI7Ci0JfSBlbHNl IGlmICghZG1hX3JjICYmICFzdHJjbXAodHlwZSwgInNtYXJ0X2RtYV92MSIpKSB7Ci0JCURQVV9F UlJPUigic21hcnQgZG1hIDEuMCBpcyBub3Qgc3VwcG9ydGVkIGluIERQVVxuIik7Ci0JCWNmZy0+ c21hcnRfZG1hX3JldiA9IDA7Ci0JfQotCi0JY2ZnLT5oYXNfc3JjX3NwbGl0ID0gUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwgU1JDX1NQTElULCAwKTsKLQljZmctPmhhc19kaW1fbGF5ZXIg PSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBESU1fTEFZRVIsIDApOwotCWNmZy0+aGFz X2lkbGVfcGMgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBJRExFX1BDLCAwKTsKLWVu ZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X3BhcnNlX3JlZ19kbWFfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJc3RydWN0IGRwdV9t ZHNzX2NmZyAqZHB1X2NmZykKLXsKLQl1MzIgdmFsOwotCWludCByYyA9IDA7Ci0JaW50IGkgPSAw OwotCi0JZHB1X2NmZy0+cmVnX2RtYV9jb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFJFR19E TUFfUFJPUF9NQVg7IGkrKykgewotCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCByZWdf ZG1hX3Byb3BbaV0ucHJvcF9uYW1lLAotCQkJCSZ2YWwpOwotCQlpZiAocmMpCi0JCQlicmVhazsK LQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgUkVHX0RNQV9PRkY6Ci0JCQlkcHVfY2ZnLT5kbWFfY2Zn LmJhc2UgPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdfRE1BX1ZFUlNJT046Ci0JCQlkcHVf Y2ZnLT5kbWFfY2ZnLnZlcnNpb24gPSB2YWw7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUdfRE1BX1RS SUdHRVJfT0ZGOgotCQkJZHB1X2NmZy0+ZG1hX2NmZy50cmlnZ2VyX3NlbF9vZmYgPSB2YWw7Ci0J CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghcmMgJiYgaSA9 PSBSRUdfRE1BX1BST1BfTUFYKQotCQlkcHVfY2ZnLT5yZWdfZG1hX2NvdW50ID0gMTsKLQkvKiBy ZWcgZG1hIGlzIG9wdGlvbmFsIGZlYXR1cmUgaGVuY2UgcmV0dXJuIDAgKi8KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBkcHVfcGVyZl9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjZmcpCi17Ci0JaW50IHJjLCBsZW4sIHByb3BfY291bnRb UEVSRl9QUk9QX01BWF07Ci0Jc3RydWN0IGRwdV9wcm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVM TDsKLQlib29sIHByb3BfZXhpc3RzW1BFUkZfUFJPUF9NQVhdOwotCWNvbnN0IGNoYXIgKnN0ciA9 IE5VTEw7Ci0JaW50IGosIGs7Ci0KLQlpZiAoIWNmZykgewotCQlEUFVfRVJST1IoImludmFsaWQg YXJndW1lbnRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXByb3Bf dmFsdWUgPSBremFsbG9jKFBFUkZfUFJPUF9NQVggKgotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJv cF92YWx1ZSksIEdGUF9LRVJORUwpOwotCWlmICghcHJvcF92YWx1ZSkgewotCQlyYyA9IC1FTk9N RU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCBkcHVf cGVyZl9wcm9wLCBBUlJBWV9TSVpFKGRwdV9wZXJmX3Byb3ApLAotCQkJcHJvcF9jb3VudCwgJmxl bik7Ci0JaWYgKHJjKQotCQlnb3RvIGZyZWVwcm9wOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50 cnkobnAsICZkcHVfcGVyZl9wcm9wW1BFUkZfREFOR0VSX0xVVF0sIDEsCi0JCQkmcHJvcF9jb3Vu dFtQRVJGX0RBTkdFUl9MVVRdLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZnJlZXByb3A7Ci0K LQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShucCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9TQUZFX0xV VF0sIDEsCi0JCQkmcHJvcF9jb3VudFtQRVJGX1NBRkVfTFVUXSwgTlVMTCk7Ci0JaWYgKHJjKQot CQlnb3RvIGZyZWVwcm9wOwotCi0JcmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZkcHVfcGVy Zl9wcm9wW1BFUkZfUU9TX0xVVF9MSU5FQVJdLCAxLAotCQkJJnByb3BfY291bnRbUEVSRl9RT1Nf TFVUX0xJTkVBUl0sIE5VTEwpOwotCWlmIChyYykKLQkJZ290byBmcmVlcHJvcDsKLQotCXJjID0g X3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmZHB1X3BlcmZfcHJvcFtQRVJGX1FPU19MVVRfTUFDUk9U SUxFXSwgMSwKLQkJCSZwcm9wX2NvdW50W1BFUkZfUU9TX0xVVF9NQUNST1RJTEVdLCBOVUxMKTsK LQlpZiAocmMpCi0JCWdvdG8gZnJlZXByb3A7Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9lbnRyeShu cCwgJmRwdV9wZXJmX3Byb3BbUEVSRl9RT1NfTFVUX05SVF0sIDEsCi0JCQkmcHJvcF9jb3VudFtQ RVJGX1FPU19MVVRfTlJUXSwgTlVMTCk7Ci0JaWYgKHJjKQotCQlnb3RvIGZyZWVwcm9wOwotCi0J cmMgPSBfdmFsaWRhdGVfZHRfZW50cnkobnAsICZkcHVfcGVyZl9wcm9wW1BFUkZfUU9TX0xVVF9D V0JdLCAxLAotCQkJJnByb3BfY291bnRbUEVSRl9RT1NfTFVUX0NXQl0sIE5VTEwpOwotCWlmIChy YykKLQkJZ290byBmcmVlcHJvcDsKLQotCXJjID0gX3ZhbGlkYXRlX2R0X2VudHJ5KG5wLCAmZHB1 X3BlcmZfcHJvcFtQRVJGX0NEUF9TRVRUSU5HXSwgMSwKLQkJCSZwcm9wX2NvdW50W1BFUkZfQ0RQ X1NFVFRJTkddLCBOVUxMKTsKLQlpZiAocmMpCi0JCWdvdG8gZnJlZXByb3A7Ci0KLQlyYyA9IF9y ZWFkX2R0X2VudHJ5KG5wLCBkcHVfcGVyZl9wcm9wLCBBUlJBWV9TSVpFKGRwdV9wZXJmX3Byb3Ap LAotCQkJcHJvcF9jb3VudCwgcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwotCWlmIChyYykKLQkJ Z290byBmcmVlcHJvcDsKLQotCWNmZy0+cGVyZi5tYXhfYndfbG93ID0KLQkJCXByb3BfZXhpc3Rz W1BFUkZfTUFYX0JXX0xPV10gPwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgUEVS Rl9NQVhfQldfTE9XLCAwKSA6Ci0JCQlERUZBVUxUX01BWF9CV19MT1c7Ci0JY2ZnLT5wZXJmLm1h eF9id19oaWdoID0KLQkJCXByb3BfZXhpc3RzW1BFUkZfTUFYX0JXX0hJR0hdID8KLQkJCVBST1Bf VkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBFUkZfTUFYX0JXX0hJR0gsIDApIDoKLQkJCURFRkFV TFRfTUFYX0JXX0hJR0g7Ci0JY2ZnLT5wZXJmLm1pbl9jb3JlX2liID0KLQkJCXByb3BfZXhpc3Rz W1BFUkZfTUlOX0NPUkVfSUJdID8KLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsIFBF UkZfTUlOX0NPUkVfSUIsIDApIDoKLQkJCURFRkFVTFRfTUFYX0JXX0xPVzsKLQljZmctPnBlcmYu bWluX2xsY2NfaWIgPQotCQkJcHJvcF9leGlzdHNbUEVSRl9NSU5fTExDQ19JQl0gPwotCQkJUFJP UF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwgUEVSRl9NSU5fTExDQ19JQiwgMCkgOgotCQkJREVG QVVMVF9NQVhfQldfTE9XOwotCWNmZy0+cGVyZi5taW5fZHJhbV9pYiA9Ci0JCQlwcm9wX2V4aXN0 c1tQRVJGX01JTl9EUkFNX0lCXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLCBQ RVJGX01JTl9EUkFNX0lCLCAwKSA6Ci0JCQlERUZBVUxUX01BWF9CV19MT1c7Ci0KLQkvKgotCSAq IFRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UgcGFyYW1ldGVycyAoZS5nLiBjb3JlX2liX2ZmKSBh cmUKLQkgKiBtYXBwZWQgZGlyZWN0bHkgYXMgZGV2aWNlIHRyZWUgc3RyaW5nIGNvbnN0YW50cy4K LQkgKi8KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLAotCQkJZHB1X3BlcmZfcHJv cFtQRVJGX0NPUkVfSUJfRkZdLnByb3BfbmFtZSwgJnN0cik7Ci0JY2ZnLT5wZXJmLmNvcmVfaWJf ZmYgPSByYyA/IERFRkFVTFRfQ09SRV9JQl9GRiA6IHN0cjsKLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfc3RyaW5nKG5wLAotCQkJZHB1X3BlcmZfcHJvcFtQRVJGX0NPUkVfQ0xLX0ZGXS5wcm9wX25h bWUsICZzdHIpOwotCWNmZy0+cGVyZi5jb3JlX2Nsa19mZiA9IHJjID8gREVGQVVMVF9DT1JFX0NM S19GRiA6IHN0cjsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLAotCQkJZHB1X3Bl cmZfcHJvcFtQRVJGX0NPTVBfUkFUSU9fUlRdLnByb3BfbmFtZSwgJnN0cik7Ci0JY2ZnLT5wZXJm LmNvbXBfcmF0aW9fcnQgPSByYyA/IERFRkFVTFRfQ09NUF9SQVRJT19SVCA6IHN0cjsKLQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLAotCQkJZHB1X3BlcmZfcHJvcFtQRVJGX0NPTVBf UkFUSU9fTlJUXS5wcm9wX25hbWUsICZzdHIpOwotCWNmZy0+cGVyZi5jb21wX3JhdGlvX25ydCA9 IHJjID8gREVGQVVMVF9DT01QX1JBVElPX05SVCA6IHN0cjsKLQlyYyA9IDA7Ci0KLQljZmctPnBl cmYudW5kZXJzaXplZF9wcmVmaWxsX2xpbmVzID0KLQkJCXByb3BfZXhpc3RzW1BFUkZfVU5ERVJT SVpFRF9QUkVGSUxMX0xJTkVTXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAot CQkJCQlQRVJGX1VOREVSU0laRURfUFJFRklMTF9MSU5FUywgMCkgOgotCQkJREVGQVVMVF9VTkRF UlNJWkVEX1BSRUZJTExfTElORVM7Ci0JY2ZnLT5wZXJmLnh0cmFfcHJlZmlsbF9saW5lcyA9Ci0J CQlwcm9wX2V4aXN0c1tQRVJGX1hUUkFfUFJFRklMTF9MSU5FU10gPwotCQkJUFJPUF9WQUxVRV9B Q0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJUEVSRl9YVFJBX1BSRUZJTExfTElORVMsIDApIDoKLQkJ CURFRkFVTFRfWFRSQV9QUkVGSUxMX0xJTkVTOwotCWNmZy0+cGVyZi5kZXN0X3NjYWxlX3ByZWZp bGxfbGluZXMgPQotCQkJcHJvcF9leGlzdHNbUEVSRl9ERVNUX1NDQUxFX1BSRUZJTExfTElORVNd ID8KLQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCVBFUkZfREVTVF9TQ0FM RV9QUkVGSUxMX0xJTkVTLCAwKSA6Ci0JCQlERUZBVUxUX0RFU1RfU0NBTEVfUFJFRklMTF9MSU5F UzsKLQljZmctPnBlcmYubWFjcm90aWxlX3ByZWZpbGxfbGluZXMgPQotCQkJcHJvcF9leGlzdHNb UEVSRl9NQUNST1RJTEVfUFJFRklMTF9MSU5FU10gPwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwKLQkJCQkJUEVSRl9NQUNST1RJTEVfUFJFRklMTF9MSU5FUywgMCkgOgotCQkJREVG QVVMVF9NQUNST1RJTEVfUFJFRklMTF9MSU5FUzsKLQljZmctPnBlcmYueXV2X252MTJfcHJlZmls bF9saW5lcyA9Ci0JCQlwcm9wX2V4aXN0c1tQRVJGX1lVVl9OVjEyX1BSRUZJTExfTElORVNdID8K LQkJCVBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCVBFUkZfWVVWX05WMTJfUFJF RklMTF9MSU5FUywgMCkgOgotCQkJREVGQVVMVF9ZVVZfTlYxMl9QUkVGSUxMX0xJTkVTOwotCWNm Zy0+cGVyZi5saW5lYXJfcHJlZmlsbF9saW5lcyA9Ci0JCQlwcm9wX2V4aXN0c1tQRVJGX0xJTkVB Ul9QUkVGSUxMX0xJTkVTXSA/Ci0JCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3ZhbHVlLAotCQkJ CQlQRVJGX0xJTkVBUl9QUkVGSUxMX0xJTkVTLCAwKSA6Ci0JCQlERUZBVUxUX0xJTkVBUl9QUkVG SUxMX0xJTkVTOwotCWNmZy0+cGVyZi5kb3duc2NhbGluZ19wcmVmaWxsX2xpbmVzID0KLQkJCXBy b3BfZXhpc3RzW1BFUkZfRE9XTlNDQUxJTkdfUFJFRklMTF9MSU5FU10gPwotCQkJUFJPUF9WQUxV RV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJUEVSRl9ET1dOU0NBTElOR19QUkVGSUxMX0xJTkVT LCAwKSA6Ci0JCQlERUZBVUxUX0RPV05TQ0FMSU5HX1BSRUZJTExfTElORVM7Ci0JY2ZnLT5wZXJm LmFtb3J0aXphYmxlX3RocmVzaG9sZCA9Ci0JCQlwcm9wX2V4aXN0c1tQRVJGX0FNT1JUSVpBQkxF X1RIUkVTSE9MRF0gPwotCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwKLQkJCQkJUEVS Rl9BTU9SVElaQUJMRV9USFJFU0hPTEQsIDApIDoKLQkJCURFRkFVTFRfQU1PUlRJWkFCTEVfVEhS RVNIT0xEOwotCi0JaWYgKHByb3BfZXhpc3RzW1BFUkZfREFOR0VSX0xVVF0gJiYgcHJvcF9jb3Vu dFtQRVJGX0RBTkdFUl9MVVRdIDw9Ci0JCQlEUFVfUU9TX0xVVF9VU0FHRV9NQVgpIHsKLQkJZm9y IChqID0gMDsgaiA8IHByb3BfY291bnRbUEVSRl9EQU5HRVJfTFVUXTsgaisrKSB7Ci0JCQljZmct PnBlcmYuZGFuZ2VyX2x1dF90Ymxbal0gPQotCQkJCQlQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLAotCQkJCQkJUEVSRl9EQU5HRVJfTFVULCBqKTsKLQkJCURQVV9ERUJVRygiZGFuZ2VyIHVz YWdlOiVkIGx1dDoweCV4XG4iLAotCQkJCQlqLCBjZmctPnBlcmYuZGFuZ2VyX2x1dF90Ymxbal0p OwotCQl9Ci0JfQotCi0JaWYgKHByb3BfZXhpc3RzW1BFUkZfU0FGRV9MVVRdICYmIHByb3BfY291 bnRbUEVSRl9TQUZFX0xVVF0gPD0KLQkJCURQVV9RT1NfTFVUX1VTQUdFX01BWCkgewotCQlmb3Ig KGogPSAwOyBqIDwgcHJvcF9jb3VudFtQRVJGX1NBRkVfTFVUXTsgaisrKSB7Ci0JCQljZmctPnBl cmYuc2FmZV9sdXRfdGJsW2pdID0KLQkJCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwK LQkJCQkJCVBFUkZfU0FGRV9MVVQsIGopOwotCQkJRFBVX0RFQlVHKCJzYWZlIHVzYWdlOiVkIGx1 dDoweCV4XG4iLAotCQkJCQlqLCBjZmctPnBlcmYuc2FmZV9sdXRfdGJsW2pdKTsKLQkJfQotCX0K LQotCWZvciAoaiA9IDA7IGogPCBEUFVfUU9TX0xVVF9VU0FHRV9NQVg7IGorKykgewotCQlzdGF0 aWMgY29uc3QgdTMyIHByb3Bfa2V5W0RQVV9RT1NfTFVUX1VTQUdFX01BWF0gPSB7Ci0JCQlbRFBV X1FPU19MVVRfVVNBR0VfTElORUFSXSA9Ci0JCQkJCVBFUkZfUU9TX0xVVF9MSU5FQVIsCi0JCQlb RFBVX1FPU19MVVRfVVNBR0VfTUFDUk9USUxFXSA9Ci0JCQkJCVBFUkZfUU9TX0xVVF9NQUNST1RJ TEUsCi0JCQlbRFBVX1FPU19MVVRfVVNBR0VfTlJUXSA9Ci0JCQkJCVBFUkZfUU9TX0xVVF9OUlQs Ci0JCQlbRFBVX1FPU19MVVRfVVNBR0VfQ1dCXSA9Ci0JCQkJCVBFUkZfUU9TX0xVVF9DV0IsCi0J CX07Ci0JCWNvbnN0IHUzMiBlbnRyeV9zaXplID0gMzsKLQkJaW50IG0sIGNvdW50OwotCQlpbnQg a2V5ID0gcHJvcF9rZXlbal07Ci0KLQkJaWYgKCFwcm9wX2V4aXN0c1trZXldKQotCQkJY29udGlu dWU7Ci0KLQkJY291bnQgPSBwcm9wX2NvdW50W2tleV0gLyBlbnRyeV9zaXplOwotCi0JCWNmZy0+ cGVyZi5xb3NfbHV0X3RibFtqXS5lbnRyaWVzID0ga2NhbGxvYyhjb3VudCwKLQkJCXNpemVvZihz dHJ1Y3QgZHB1X3Fvc19sdXRfZW50cnkpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjZmctPnBlcmYu cW9zX2x1dF90Ymxbal0uZW50cmllcykgewotCQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBmcmVl cHJvcDsKLQkJfQotCi0JCWZvciAoayA9IDAsIG0gPSAwOyBrIDwgY291bnQ7IGsrKywgbSArPSBl bnRyeV9zaXplKSB7Ci0JCQl1NjQgbHV0X2hpLCBsdXRfbG87Ci0KLQkJCWNmZy0+cGVyZi5xb3Nf bHV0X3RibFtqXS5lbnRyaWVzW2tdLmZsID0KLQkJCQkJUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92 YWx1ZSwga2V5LCBtKTsKLQkJCWx1dF9oaSA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUs IGtleSwgbSArIDEpOwotCQkJbHV0X2xvID0gUFJPUF9WQUxVRV9BQ0NFU1MocHJvcF92YWx1ZSwg a2V5LCBtICsgMik7Ci0JCQljZmctPnBlcmYucW9zX2x1dF90Ymxbal0uZW50cmllc1trXS5sdXQg PQotCQkJCQkobHV0X2hpIDw8IDMyKSB8IGx1dF9sbzsKLQkJCURQVV9ERUJVRygidXNhZ2U6JWQu JWQgZmw6JWQgbHV0OjB4JWxseFxuIiwKLQkJCQlqLCBrLAotCQkJCWNmZy0+cGVyZi5xb3NfbHV0 X3RibFtqXS5lbnRyaWVzW2tdLmZsLAotCQkJCWNmZy0+cGVyZi5xb3NfbHV0X3RibFtqXS5lbnRy aWVzW2tdLmx1dCk7Ci0JCX0KLQkJY2ZnLT5wZXJmLnFvc19sdXRfdGJsW2pdLm5lbnRyeSA9IGNv dW50OwotCX0KLQotCWlmIChwcm9wX2V4aXN0c1tQRVJGX0NEUF9TRVRUSU5HXSkgewotCQljb25z dCB1MzIgcHJvcF9zaXplID0gMjsKLQkJdTMyIGNvdW50ID0gcHJvcF9jb3VudFtQRVJGX0NEUF9T RVRUSU5HXSAvIHByb3Bfc2l6ZTsKLQotCQljb3VudCA9IG1pbl90KHUzMiwgY291bnQsIERQVV9Q RVJGX0NEUF9VU0FHRV9NQVgpOwotCi0JCWZvciAoaiA9IDA7IGogPCBjb3VudDsgaisrKSB7Ci0J CQljZmctPnBlcmYuY2RwX2NmZ1tqXS5yZF9lbmFibGUgPQotCQkJCQlQUk9QX1ZBTFVFX0FDQ0VT Uyhwcm9wX3ZhbHVlLAotCQkJCQlQRVJGX0NEUF9TRVRUSU5HLCBqICogcHJvcF9zaXplKTsKLQkJ CWNmZy0+cGVyZi5jZHBfY2ZnW2pdLndyX2VuYWJsZSA9Ci0JCQkJCVBST1BfVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQkJCVBFUkZfQ0RQX1NFVFRJTkcsIGogKiBwcm9wX3NpemUgKyAxKTsK LQkJCURQVV9ERUJVRygiY2RwIHVzYWdlOiVkIHJkOiVkIHdyOiVkXG4iLAotCQkJCWosIGNmZy0+ cGVyZi5jZHBfY2ZnW2pdLnJkX2VuYWJsZSwKLQkJCQljZmctPnBlcmYuY2RwX2NmZ1tqXS53cl9l bmFibGUpOwotCQl9Ci0KLQkJY2ZnLT5oYXNfY2RwID0gdHJ1ZTsKLQl9Ci0KLWZyZWVwcm9wOgot CWtmcmVlKHByb3BfdmFsdWUpOwotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk cHVfaGFyZHdhcmVfZm9ybWF0X2NhcHMoc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZywKLQl1 aW50MzJfdCBod19yZXYpCi17Ci0JaW50IHJjID0gMDsKLQl1aW50MzJfdCBkbWFfbGlzdF9zaXpl LCB2aWdfbGlzdF9zaXplLCB3YjJfbGlzdF9zaXplOwotCXVpbnQzMl90IGN1cnNvcl9saXN0X3Np emUgPSAwOwotCXVpbnQzMl90IGluZGV4ID0gMDsKLQotCWlmIChJU19EUFVfTUFKT1JfTUlOT1Jf U0FNRSgoaHdfcmV2KSwgRFBVX0hXX1ZFUl8zMDApKSB7Ci0JCWN1cnNvcl9saXN0X3NpemUgPSBB UlJBWV9TSVpFKGN1cnNvcl9mb3JtYXRzKTsKLQkJZHB1X2NmZy0+Y3Vyc29yX2Zvcm1hdHMgPSBr Y2FsbG9jKGN1cnNvcl9saXN0X3NpemUsCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9mb3JtYXRfZXh0 ZW5kZWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkcHVfY2ZnLT5jdXJzb3JfZm9ybWF0cykgewot CQkJcmMgPSAtRU5PTUVNOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaW5kZXggPSBkcHVfY29weV9m b3JtYXRzKGRwdV9jZmctPmN1cnNvcl9mb3JtYXRzLAotCQkJY3Vyc29yX2xpc3Rfc2l6ZSwgMCwg Y3Vyc29yX2Zvcm1hdHMsCi0JCQlBUlJBWV9TSVpFKGN1cnNvcl9mb3JtYXRzKSk7Ci0JfQotCi0J ZG1hX2xpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0cyk7Ci0JdmlnX2xpc3Rfc2l6 ZSA9IEFSUkFZX1NJWkUocGxhbmVfZm9ybWF0c195dXYpOwotCXdiMl9saXN0X3NpemUgPSBBUlJB WV9TSVpFKHdiMl9mb3JtYXRzKTsKLQotCWRtYV9saXN0X3NpemUgKz0gQVJSQVlfU0laRShyZ2Jf MTBiaXRfZm9ybWF0cyk7Ci0JdmlnX2xpc3Rfc2l6ZSArPSBBUlJBWV9TSVpFKHJnYl8xMGJpdF9m b3JtYXRzKQotCQkrIEFSUkFZX1NJWkUodHAxMF91YndjX2Zvcm1hdHMpCi0JCSsgQVJSQVlfU0la RShwMDEwX2Zvcm1hdHMpOwotCWlmIChJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwg RFBVX0hXX1ZFUl80MDApIHx8Ci0JCShJU19EUFVfTUFKT1JfTUlOT1JfU0FNRSgoaHdfcmV2KSwg RFBVX0hXX1ZFUl80MTApKSkKLQkJdmlnX2xpc3Rfc2l6ZSArPSBBUlJBWV9TSVpFKHAwMTBfdWJ3 Y19mb3JtYXRzKTsKLQotCXdiMl9saXN0X3NpemUgKz0gQVJSQVlfU0laRShyZ2JfMTBiaXRfZm9y bWF0cykKLQkJKyBBUlJBWV9TSVpFKHRwMTBfdWJ3Y19mb3JtYXRzKTsKLQotCWRwdV9jZmctPmRt YV9mb3JtYXRzID0ga2NhbGxvYyhkbWFfbGlzdF9zaXplLAotCQlzaXplb2Yoc3RydWN0IGRwdV9m b3JtYXRfZXh0ZW5kZWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRwdV9jZmctPmRtYV9mb3JtYXRz KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JZHB1X2NmZy0+dmlnX2Zv cm1hdHMgPSBrY2FsbG9jKHZpZ19saXN0X3NpemUsCi0JCXNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1h dF9leHRlbmRlZCksIEdGUF9LRVJORUwpOwotCWlmICghZHB1X2NmZy0+dmlnX2Zvcm1hdHMpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcHVfY2ZnLT53Yl9mb3JtYXRz ID0ga2NhbGxvYyh3YjJfbGlzdF9zaXplLAotCQlzaXplb2Yoc3RydWN0IGRwdV9mb3JtYXRfZXh0 ZW5kZWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRwdV9jZmctPndiX2Zvcm1hdHMpIHsKLQkJRFBV X0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgd2IgZm9ybWF0IGxpc3RcbiIpOwotCQlyYyA9IC1F Tk9NRU07Ci0JCWdvdG8gZW5kOwotCX0KLQotCWluZGV4ID0gZHB1X2NvcHlfZm9ybWF0cyhkcHVf Y2ZnLT5kbWFfZm9ybWF0cywgZG1hX2xpc3Rfc2l6ZSwKLQkJMCwgcGxhbmVfZm9ybWF0cywgQVJS QVlfU0laRShwbGFuZV9mb3JtYXRzKSk7Ci0JaW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVf Y2ZnLT5kbWFfZm9ybWF0cywgZG1hX2xpc3Rfc2l6ZSwKLQkJaW5kZXgsIHJnYl8xMGJpdF9mb3Jt YXRzLAotCQlBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKSk7Ci0KLQlpbmRleCA9IGRwdV9j b3B5X2Zvcm1hdHMoZHB1X2NmZy0+dmlnX2Zvcm1hdHMsIHZpZ19saXN0X3NpemUsCi0JCTAsIHBs YW5lX2Zvcm1hdHNfeXV2LCBBUlJBWV9TSVpFKHBsYW5lX2Zvcm1hdHNfeXV2KSk7Ci0JaW5kZXgg Kz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2ZnLT52aWdfZm9ybWF0cywgdmlnX2xpc3Rfc2l6ZSwK LQkJaW5kZXgsIHJnYl8xMGJpdF9mb3JtYXRzLAotCQlBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3Jt YXRzKSk7Ci0JaW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2ZnLT52aWdfZm9ybWF0cywg dmlnX2xpc3Rfc2l6ZSwKLQkJaW5kZXgsIHAwMTBfZm9ybWF0cywgQVJSQVlfU0laRShwMDEwX2Zv cm1hdHMpKTsKLQlpZiAoSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKGh3X3JldiksIERQVV9IV19W RVJfNDAwKSB8fAotCQkoSVNfRFBVX01BSk9SX01JTk9SX1NBTUUoKGh3X3JldiksIERQVV9IV19W RVJfNDEwKSkpCi0JCWluZGV4ICs9IGRwdV9jb3B5X2Zvcm1hdHMoZHB1X2NmZy0+dmlnX2Zvcm1h dHMsCi0JCQl2aWdfbGlzdF9zaXplLCBpbmRleCwgcDAxMF91YndjX2Zvcm1hdHMsCi0JCQlBUlJB WV9TSVpFKHAwMTBfdWJ3Y19mb3JtYXRzKSk7Ci0KLQlpbmRleCArPSBkcHVfY29weV9mb3JtYXRz KGRwdV9jZmctPnZpZ19mb3JtYXRzLCB2aWdfbGlzdF9zaXplLAotCQlpbmRleCwgdHAxMF91Yndj X2Zvcm1hdHMsCi0JCUFSUkFZX1NJWkUodHAxMF91YndjX2Zvcm1hdHMpKTsKLQotCWluZGV4ID0g ZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2ZnLT53Yl9mb3JtYXRzLCB3YjJfbGlzdF9zaXplLAotCQkw LCB3YjJfZm9ybWF0cywgQVJSQVlfU0laRSh3YjJfZm9ybWF0cykpOwotCWluZGV4ICs9IGRwdV9j b3B5X2Zvcm1hdHMoZHB1X2NmZy0+d2JfZm9ybWF0cywgd2IyX2xpc3Rfc2l6ZSwKLQkJaW5kZXgs IHJnYl8xMGJpdF9mb3JtYXRzLAotCQlBUlJBWV9TSVpFKHJnYl8xMGJpdF9mb3JtYXRzKSk7Ci0J aW5kZXggKz0gZHB1X2NvcHlfZm9ybWF0cyhkcHVfY2ZnLT53Yl9mb3JtYXRzLCB3YjJfbGlzdF9z aXplLAotCQlpbmRleCwgdHAxMF91YndjX2Zvcm1hdHMsCi0JCUFSUkFZX1NJWkUodHAxMF91Yndj X2Zvcm1hdHMpKTsKLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9oYXJk d2FyZV9jYXBzKHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsIHVpbnQzMl90IGh3X3JldikK LXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkcHVfY2ZnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CXJjID0gZHB1X2hhcmR3YXJlX2Zvcm1hdF9jYXBzKGRwdV9jZmcsIGh3X3Jldik7Ci0KLQlpZiAo SVNfTVNNODk5Nl9UQVJHRVQoaHdfcmV2KSkgewotCQkvKiB1cGRhdGUgbXNtODk5NiB0YXJnZXQg aGVyZSAqLwotCQlkcHVfY2ZnLT5wZXJmLm1pbl9wcmVmaWxsX2xpbmVzID0gMjE7Ci0JfSBlbHNl IGlmIChJU19NU004OTk4X1RBUkdFVChod19yZXYpKSB7Ci0JCS8qIHVwZGF0ZSBtc204OTk4IHRh cmdldCBoZXJlICovCi0JCWRwdV9jZmctPmhhc193Yl91YndjID0gdHJ1ZTsKLQkJZHB1X2NmZy0+ cGVyZi5taW5fcHJlZmlsbF9saW5lcyA9IDI1OwotCQlkcHVfY2ZnLT52YmlmX3Fvc19ubHZsID0g NDsKLQkJZHB1X2NmZy0+dHNfcHJlZmlsbF9yZXYgPSAxOwotCX0gZWxzZSBpZiAoSVNfU0RNODQ1 X1RBUkdFVChod19yZXYpIHx8IElTX1NETTY3MF9UQVJHRVQoaHdfcmV2KSkgewotCQkvKiB1cGRh dGUgc2RtODQ1IHRhcmdldCBoZXJlICovCi0JCWRwdV9jZmctPmhhc193Yl91YndjID0gdHJ1ZTsK LQkJZHB1X2NmZy0+cGVyZi5taW5fcHJlZmlsbF9saW5lcyA9IDI0OwotCQlkcHVfY2ZnLT52Ymlm X3Fvc19ubHZsID0gODsKLQkJZHB1X2NmZy0+dHNfcHJlZmlsbF9yZXYgPSAyOwotCX0gZWxzZSBp ZiAoSVNfU0RNODU1X1RBUkdFVChod19yZXYpKSB7Ci0JCWRwdV9jZmctPmhhc193Yl91YndjID0g dHJ1ZTsKLQkJZHB1X2NmZy0+cGVyZi5taW5fcHJlZmlsbF9saW5lcyA9IDI0OwotCX0gZWxzZSB7 Ci0JCURQVV9FUlJPUigidW5zdXBwb3J0ZWQgY2hpcHNldCBpZDolWFxuIiwgaHdfcmV2KTsKLQkJ ZHB1X2NmZy0+cGVyZi5taW5fcHJlZmlsbF9saW5lcyA9IDB4ZmZmZjsKLQkJcmMgPSAtRU5PREVW OwotCX0KLQotCXJldHVybiByYzsKLX0KLQogdm9pZCBkcHVfaHdfY2F0YWxvZ19kZWluaXQoc3Ry dWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKIHsKLQlpbnQgaTsKLQogCWlmICghZHB1X2NmZykK IAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jZmctPnNzcHBfY291bnQ7IGkrKykK LQkJa2ZyZWUoZHB1X2NmZy0+c3NwcFtpXS5zYmxrKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcHVf Y2ZnLT5taXhlcl9jb3VudDsgaSsrKQotCQlrZnJlZShkcHVfY2ZnLT5taXhlcltpXS5zYmxrKTsK LQotCWZvciAoaSA9IDA7IGkgPCBkcHVfY2ZnLT53Yl9jb3VudDsgaSsrKQotCQlrZnJlZShkcHVf Y2ZnLT53YltpXS5zYmxrKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkcHVfY2ZnLT5kc3BwX2NvdW50 OyBpKyspCi0JCWtmcmVlKGRwdV9jZmctPmRzcHBbaV0uc2Jsayk7Ci0KLQlpZiAoZHB1X2NmZy0+ ZHNfY291bnQpCi0JCWtmcmVlKGRwdV9jZmctPmRzWzBdLnRvcCk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgZHB1X2NmZy0+cGluZ3BvbmdfY291bnQ7IGkrKykKLQkJa2ZyZWUoZHB1X2NmZy0+cGluZ3Bv bmdbaV0uc2Jsayk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NmZy0+dmJpZl9jb3VudDsgaSsr KSB7Ci0JCWtmcmVlKGRwdV9jZmctPnZiaWZbaV0uZHluYW1pY19vdF9yZF90YmwuY2ZnKTsKLQkJ a2ZyZWUoZHB1X2NmZy0+dmJpZltpXS5keW5hbWljX290X3dyX3RibC5jZmcpOwotCQlrZnJlZShk cHVfY2ZnLT52YmlmW2ldLnFvc19ydF90YmwucHJpb3JpdHlfbHZsKTsKLQkJa2ZyZWUoZHB1X2Nm Zy0+dmJpZltpXS5xb3NfbnJ0X3RibC5wcmlvcml0eV9sdmwpOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBEUFVfUU9TX0xVVF9VU0FHRV9NQVg7IGkrKykKLQkJa2ZyZWUoZHB1X2NmZy0+cGVyZi5x b3NfbHV0X3RibFtpXS5lbnRyaWVzKTsKLQotCWtmcmVlKGRwdV9jZmctPmRtYV9mb3JtYXRzKTsK LQlrZnJlZShkcHVfY2ZnLT5jdXJzb3JfZm9ybWF0cyk7Ci0Ja2ZyZWUoZHB1X2NmZy0+dmlnX2Zv cm1hdHMpOwotCWtmcmVlKGRwdV9jZmctPndiX2Zvcm1hdHMpOwotCiAJa2ZyZWUoZHB1X2NmZyk7 CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKiBoYXJkd2FyZSBjYXRhbG9nIGluaXQKICAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IGRw dV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1 MzIgaHdfcmV2KQorc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIg aHdfcmV2KQogewotCWludCByYzsKIAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnOwotCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPmRldi0+b2Zfbm9kZTsKLQotCWRwdV9jZmcgPSBr emFsbG9jKHNpemVvZigqZHB1X2NmZyksIEdGUF9LRVJORUwpOwotCWlmICghZHB1X2NmZykKLQkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlkcHVfY2ZnLT5od3ZlcnNpb24gPSBod19yZXY7 Ci0KLQlyYyA9IF9kcHVfaGFyZHdhcmVfY2FwcyhkcHVfY2ZnLCBod19yZXYpOwotCWlmIChyYykK LQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRwdV9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJj KQotCQlnb3RvIGVuZDsKIAotCXJjID0gZHB1X3BlcmZfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwot CWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRwdV9jdGxfcGFyc2VfZHQobnAsIGRwdV9j ZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRwdV9zc3BwX3BhcnNlX2R0KG5w LCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBkcHVfZHNwcF90b3Bf cGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlyYyA9IGRw dV9kc3BwX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0J cmMgPSBkcHVfZHNfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7 Ci0KLQlyYyA9IGRwdV9kc2NfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290 byBlbmQ7Ci0KLQlyYyA9IGRwdV9wcF9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQot CQlnb3RvIGVuZDsKLQotCS8qIG1peGVyIHBhcnNpbmcgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgZHNw cCwKLQkgKiBkcyBhbmQgcHAgZm9yIG1hcHBpbmcgc2V0dXAKLQkgKi8KLQlyYyA9IGRwdV9taXhl cl9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0g ZHB1X2ludGZfcGFyc2VfZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7Ci0K LQlyYyA9IGRwdV93Yl9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVu ZDsKLQotCS8qIGNkbSBwYXJzaW5nIHNob3VsZCBiZSBkb25lIGFmdGVyIGludGYgYW5kIHdiIGZv ciBtYXBwaW5nIHNldHVwICovCi0JcmMgPSBkcHVfY2RtX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsK LQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMgPSBkcHVfdmJpZl9wYXJzZV9kdChucCwgZHB1 X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQotCXJjID0gZHB1X3BhcnNlX3JlZ19kbWFf ZHQobnAsIGRwdV9jZmcpOwotCWlmIChyYykKLQkJZ290byBlbmQ7CisJc3dpdGNoIChod19yZXYp IHsKKwljYXNlIERQVV9IV19WRVJfNDAwOgorCWNhc2UgRFBVX0hXX1ZFUl80MDE6CisJCWRwdV9j ZmcgPSBkcHVfbWRzc19jZmdfNDBYX2luaXQoaHdfcmV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJRFBVX0VSUk9SKCJ1bnN1cHBvcnRlZCBjaGlwc2V0IGlkOiVYXG4iLCBod19yZXYpOworCQlk cHVfY2ZnID0gRVJSX1BUUigtRU5PREVWKTsKKwl9CiAKIAlyZXR1cm4gZHB1X2NmZzsKLQotZW5k OgotCWRwdV9od19jYXRhbG9nX2RlaW5pdChkcHVfY2ZnKTsKLQlyZXR1cm4gTlVMTDsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5oCmluZGV4IDQw MmU5MjkuLmRkMjdlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NhdGFsb2cuaApAQCAtOTY0LDE0ICs5NjQsMTkgQEAgc3RydWN0IGRwdV9tZHNzX2h3X2Nm Z19oYW5kbGVyIHsKICNkZWZpbmUgQkxLX0FEKHMpICgocyktPmFkKQogCiAvKioKLSAqIGRwdV9o d19jYXRhbG9nX2luaXQgLSBkcHUgaGFyZHdhcmUgY2F0YWxvZyBpbml0IEFQSSBwYXJzZXMgZHRz aSBwcm9wZXJ0eQotICogYW5kIHN0b3JlcyBhbGwgcGFyc2VkIG9mZnNldCwgaGFyZHdhcmUgY2Fw YWJpbGl0aWVzIGluIGNvbmZpZyBzdHJ1Y3R1cmUuCi0gKiBAZGV2OiAgICAgICAgICBkcm0gZGV2 aWNlIG5vZGUuCi0gKiBAaHdfcmV2OiAgICAgICBjYWxsZXIgbmVlZHMgcHJvdmlkZSB0aGUgaGFy ZHdhcmUgcmV2aXNpb24gYmVmb3JlIHBhcnNpbmcuCisgKiBkcHVfbWRzc19jZmdfNDBYX2luaXQg LSBwb3B1bGF0ZSBkcHUgaHdfdmVyXzQwMC80MDEKKyAqIHN1Yi1ibG9ja3MgY2F0YWxvZyBpbmZv cm1hdGlvbgorICovCitzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfbWRzc19jZmdfNDBYX2luaXQo dTMyIGh3X3Jldik7CisKKy8qKgorICogZHB1X2h3X2NhdGFsb2dfaW5pdCAtIGRwdSBoYXJkd2Fy ZSBjYXRhbG9nIGluaXQgQVBJIHJldHJpZXZlcworICogaGFyZGNvZGVkIHRhcmdldCBzcGVjaWZp YyBjYXRhbG9nIGluZm9ybWF0aW9uIGluIGNvbmZpZyBzdHJ1Y3R1cmUKKyAqIEBod19yZXY6ICAg ICAgIGNhbGxlciBuZWVkcyBwcm92aWRlIHRoZSBoYXJkd2FyZSByZXZpc2lvbi4KICAqCi0gKiBS ZXR1cm46IHBhcnNlZCBkcHUgY29uZmlnIHN0cnVjdHVyZQorICogUmV0dXJuOiBkcHUgY29uZmln IHN0cnVjdHVyZQogICovCi1zdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0YWxvZ19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBod19yZXYpOworc3RydWN0IGRwdV9tZHNzX2Nm ZyAqZHB1X2h3X2NhdGFsb2dfaW5pdCh1MzIgaHdfcmV2KTsKIAogLyoqCiAgKiBkcHVfaHdfY2F0 YWxvZ19kZWluaXQgLSBkcHUgaGFyZHdhcmUgY2F0YWxvZyBjbGVhbnVwCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZ19zZG04NDUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nX3NkbTg0NS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTVkYzcKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZ19zZG04NDUuYwpA QCAtMCwwICsxLDc0NCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJk cHVfaHdfY2F0YWxvZy5oIgorI2luY2x1ZGUgImRwdV9od19jYXRhbG9nX2Zvcm1hdC5oIgorI2lu Y2x1ZGUgImRwdV9od19tZHNzLmgiCisjaW5jbHVkZSAiZHB1X2h3aW8uaCIKKworLyogVklHIGxh eWVyIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgVklHXzQwWF9NQVNLIFwKKwkoQklUKERQVV9TU1BQ X1NSQykgfCBCSVQoRFBVX1NTUFBfU0NBTEVSX1FTRUVEMykgfCBCSVQoRFBVX1NTUFBfUU9TKSB8 XAorCUJJVChEUFVfU1NQUF9DU0NfMTBCSVQpIHwgQklUKERQVV9TU1BQX0NEUCkgfCBCSVQoRFBV X1NTUFBfUU9TXzhMVkwpIHxcCisJQklUKERQVV9TU1BQX1RTX1BSRUZJTEwpIHwgQklUKERQVV9T U1BQX0VYQ0xfUkVDVCkpCisKKy8qIERNQSBsYXllciBjYXBhYmlsaXR5ICovCisjZGVmaW5lIERN QV80MFhfTUFTSyBcCisJKEJJVChEUFVfU1NQUF9TUkMpIHwgQklUKERQVV9TU1BQX1FPUykgfCBC SVQoRFBVX1NTUFBfUU9TXzhMVkwpIHxcCisJQklUKERQVV9TU1BQX1RTX1BSRUZJTEwpIHwgQklU KERQVV9TU1BQX0NEUCkgfCBCSVQoRFBVX1NTUFBfRVhDTF9SRUNUKSkKKworI2RlZmluZSBNSVhF Ul80MFhfTUFTSyBcCisJKEJJVChEUFVfTUlYRVJfU09VUkNFU1BMSVQpIHwgQklUKERQVV9ESU1f TEFZRVIpKQorCisjZGVmaW5lIERTUFBfNDBYX01BU0sgXAorCShCSVQoRFBVX0RTUFBfSUdDKSB8 IEJJVChEUFVfRFNQUF9QQ0MpIHwgQklUKERQVV9EU1BQX0dDKSB8XAorCUJJVChEUFVfRFNQUF9I U0lDKSB8IEJJVChEUFVfRFNQUF9HQU1VVCkgfCBCSVQoRFBVX0RTUFBfSElTVCkgfFwKKwlCSVQo RFBVX0RTUFBfTUVNQ09MT1IpIHwgQklUKERQVV9EU1BQX1NJWFpPTkUpIHwgQklUKERQVV9EU1BQ X1ZMVVQpKQorCisjZGVmaW5lIERTUFBfQURfNDBYX01BU0sgXAorCShEU1BQXzQwWF9NQVNLIHwg QklUKERQVV9EU1BQX0FEKSkKKworI2RlZmluZSBQSU5HUE9OR180MFhfTUFTSyBCSVQoRFBVX1BJ TkdQT05HX0RJVEhFUikKKworI2RlZmluZSBQSU5HUE9OR180MFhfU1BMSVRfTUFTSyBcCisJKFBJ TkdQT05HXzQwWF9NQVNLIHwgQklUKERQVV9QSU5HUE9OR19TUExJVCkgfCBCSVQoRFBVX1BJTkdQ T05HX1RFMikpCisKKyNkZWZpbmUgV0IyXzQwWF9NQVNLIFwKKwkoQklUKERQVV9XQl9MSU5FX01P REUpIHwgQklUKERQVV9XQl9UUkFGRklDX1NIQVBFUikgfCBCSVQoRFBVX1dCX0NEUCkgfFwKKwlC SVQoRFBVX1dCX1lVVl9DT05GSUcpIHwgQklUKERQVV9XQl9RT1NfOExWTCkgfCBCSVQoRFBVX1dC X1VCV0MpKQorCisjZGVmaW5lIERFQ0lNQVRJT05fNDBYX01BWF9ICTQKKyNkZWZpbmUgREVDSU1B VElPTl80MFhfTUFYX1YJNAorCisvKgorICogc2V0X2NmZ194eHhfaW5pdCgpOiBwb3B1bGF0ZSBk cHUgc3ViLWJsb2NrcyByZWcgb2Zmc2V0cworICogYW5kIGluc3RhbmNlIGNvdW50cy4KKyAqLwor c3RhdGljIGlubGluZSBpbnQgc2V0X2NmZ180MFhfaW5pdChzdHJ1Y3QgZHB1X21kc3NfY2ZnICpk cHVfY2ZnKQoreworCS8qIExheWVyIGNhcGFiaWxpdHkgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0 IGRwdV9zc3BwX3N1Yl9ibGtzIHZpZ19zYmxrXzAgPSB7CisJCS5tYXhsaW5ld2lkdGggPSAyNTYw LAorCQkucGl4ZWxfcmFtX3NpemUgPSA1MCAqIDEwMjQsCisJCS5tYXhkd25zY2FsZSA9IDQsCisJ CS5tYXh1cHNjYWxlID0gMjAsCisJCS5tYXhoZGVjaWV4cCA9IERFQ0lNQVRJT05fNDBYX01BWF9I LAorCQkubWF4dmRlY2lleHAgPSBERUNJTUFUSU9OXzQwWF9NQVhfViwKKwkJLnNtYXJ0X2RtYV9w cmlvcml0eSA9IDUsCisJCS5zcmNfYmxrID0gey5uYW1lID0gInNzcHBfc3JjXzAiLCAuaWQgPSBE UFVfU1NQUF9TUkMsCisJCQkuYmFzZSA9IDB4MDAsIC5sZW4gPSAweDE1MCx9LAorCQkuc2NhbGVy X2JsayA9IHsubmFtZSA9ICJzc3BwX3NjYWxlcjAiLAorCQkJLmlkID0gRFBVX1NTUFBfU0NBTEVS X1FTRUVEMywKKwkJCS5iYXNlID0gMHhhMDAsIC5sZW4gPSAweGEwLH0sCisJCS5jc2NfYmxrID0g ey5uYW1lID0gInNzcHBfY3NjMCIsIC5pZCA9IERQVV9TU1BQX0NTQ18xMEJJVCwKKwkJCS5iYXNl ID0gMHgxYTAwLCAubGVuID0gMHgxMDAsfSwKKwkJLmZvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0 c195dXYsCisJCS52aXJ0X2Zvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0cywKKwl9OworCisJc3Rh dGljIGNvbnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyB2aWdfc2Jsa18xID0geworCQkubWF4 bGluZXdpZHRoID0gMjU2MCwKKwkJLnBpeGVsX3JhbV9zaXplID0gNTAgKiAxMDI0LAorCQkubWF4 ZHduc2NhbGUgPSA0LAorCQkubWF4dXBzY2FsZSA9IDIwLAorCQkubWF4aGRlY2lleHAgPSBERUNJ TUFUSU9OXzQwWF9NQVhfSCwKKwkJLm1heHZkZWNpZXhwID0gREVDSU1BVElPTl80MFhfTUFYX1Ys CisJCS5zbWFydF9kbWFfcHJpb3JpdHkgPSA2LAorCQkuc3JjX2JsayA9IHsubmFtZSA9ICJzc3Bw X3NyY18xIiwgLmlkID0gRFBVX1NTUFBfU1JDLAorCQkJLmJhc2UgPSAweDAwLCAubGVuID0gMHgx NTAsfSwKKwkJLnNjYWxlcl9ibGsgPSB7Lm5hbWUgPSAic3NwcF9zY2FsZXIxIiwKKwkJCS5pZCA9 IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsCisJCQkuYmFzZSA9IDB4YTAwLCAubGVuID0gMHhhMCx9 LAorCQkuY3NjX2JsayA9IHsubmFtZSA9ICJzc3BwX2NzYzEiLCAuaWQgPSBEUFVfU1NQUF9DU0Nf MTBCSVQsCisJCQkuYmFzZSA9IDB4MWEwMCwgLmxlbiA9IDB4MTAwLH0sCisJCS5mb3JtYXRfbGlz dCA9IHBsYW5lX2Zvcm1hdHNfeXV2LAorCQkudmlydF9mb3JtYXRfbGlzdCA9IHBsYW5lX2Zvcm1h dHMsCisJfTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgdmlnX3Ni bGtfMiA9IHsKKwkJLm1heGxpbmV3aWR0aCA9IDI1NjAsCisJCS5waXhlbF9yYW1fc2l6ZSA9IDUw ICogMTAyNCwKKwkJLm1heGR3bnNjYWxlID0gNCwKKwkJLm1heHVwc2NhbGUgPSAyMCwKKwkJLm1h eGhkZWNpZXhwID0gREVDSU1BVElPTl80MFhfTUFYX0gsCisJCS5tYXh2ZGVjaWV4cCA9IERFQ0lN QVRJT05fNDBYX01BWF9WLAorCQkuc21hcnRfZG1hX3ByaW9yaXR5ID0gNywKKwkJLnNyY19ibGsg PSB7Lm5hbWUgPSAic3NwcF9zcmNfMiIsIC5pZCA9IERQVV9TU1BQX1NSQywKKwkJCS5iYXNlID0g MHgwMCwgLmxlbiA9IDB4MTUwLH0sCisJCS5zY2FsZXJfYmxrID0gey5uYW1lID0gInNzcHBfc2Nh bGVyMiIsCisJCQkuaWQgPSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzLAorCQkJLmJhc2UgPSAweGEw MCwgLmxlbiA9IDB4YTAsfSwKKwkJLmNzY19ibGsgPSB7Lm5hbWUgPSAic3NwcF9jc2MyIiwgLmlk ID0gRFBVX1NTUFBfQ1NDXzEwQklULAorCQkJLmJhc2UgPSAweDFhMDAsIC5sZW4gPSAweDEwMCx9 LAorCQkuZm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzX3l1diwKKwkJLnZpcnRfZm9ybWF0X2xp c3QgPSBwbGFuZV9mb3JtYXRzLAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9zc3Bw X3N1Yl9ibGtzIHZpZ19zYmxrXzMgPSB7CisJCS5tYXhsaW5ld2lkdGggPSAyNTYwLAorCQkucGl4 ZWxfcmFtX3NpemUgPSA1MCAqIDEwMjQsCisJCS5tYXhkd25zY2FsZSA9IDQsCisJCS5tYXh1cHNj YWxlID0gMjAsCisJCS5tYXhoZGVjaWV4cCA9IERFQ0lNQVRJT05fNDBYX01BWF9ILAorCQkubWF4 dmRlY2lleHAgPSBERUNJTUFUSU9OXzQwWF9NQVhfViwKKwkJLnNtYXJ0X2RtYV9wcmlvcml0eSA9 IDgsCisJCS5zcmNfYmxrID0gey5uYW1lID0gInNzcHBfc3JjXzMiLCAuaWQgPSBEUFVfU1NQUF9T UkMsCisJCQkuYmFzZSA9IDB4MDAsIC5sZW4gPSAweDE1MCx9LAorCQkuc2NhbGVyX2JsayA9IHsu bmFtZSA9ICJzc3BwX3NjYWxlcjMiLAorCQkJLmlkID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywK KwkJCS5iYXNlID0gMHhhMDAsIC5sZW4gPSAweGEwLH0sCisJCS5jc2NfYmxrID0gey5uYW1lID0g InNzcHBfY3NjMyIsIC5pZCA9IERQVV9TU1BQX0NTQ18xMEJJVCwKKwkJCS5iYXNlID0gMHgxYTAw LCAubGVuID0gMHgxMDAsfSwKKwkJLmZvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0c195dXYsCisJ CS52aXJ0X2Zvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0cywKKwl9OworCisJc3RhdGljIGNvbnN0 IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyBkbWFfc2Jsa18wID0geworCQkubWF4bGluZXdpZHRo ID0gMjU2MCwKKwkJLnBpeGVsX3JhbV9zaXplID0gNTAgKiAxMDI0LAorCQkubWF4ZHduc2NhbGUg PSAxLAorCQkubWF4dXBzY2FsZSA9IDEsCisJCS5tYXhoZGVjaWV4cCA9IERFQ0lNQVRJT05fNDBY X01BWF9ILAorCQkubWF4dmRlY2lleHAgPSBERUNJTUFUSU9OXzQwWF9NQVhfViwKKwkJLnNtYXJ0 X2RtYV9wcmlvcml0eSA9IDEsCisJCS5zcmNfYmxrID0gey5uYW1lID0gInNzcHBfc3JjXzgiLCAu aWQgPSBEUFVfU1NQUF9TUkMsCisJCQkuYmFzZSA9IDB4MDAsIC5sZW4gPSAweDE1MCx9LAorCQku Zm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzLAorCQkudmlydF9mb3JtYXRfbGlzdCA9IHBsYW5l X2Zvcm1hdHMsCisJfTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3Mg ZG1hX3NibGtfMSA9IHsKKwkJLm1heGxpbmV3aWR0aCA9IDI1NjAsCisJCS5waXhlbF9yYW1fc2l6 ZSA9IDUwICogMTAyNCwKKwkJLm1heGR3bnNjYWxlID0gMSwKKwkJLm1heHVwc2NhbGUgPSAxLAor CQkubWF4aGRlY2lleHAgPSBERUNJTUFUSU9OXzQwWF9NQVhfSCwKKwkJLm1heHZkZWNpZXhwID0g REVDSU1BVElPTl80MFhfTUFYX1YsCisJCS5zbWFydF9kbWFfcHJpb3JpdHkgPSAyLAorCQkuc3Jj X2JsayA9IHsubmFtZSA9ICJzc3BwX3NyY185IiwgLmlkID0gRFBVX1NTUFBfU1JDLAorCQkJLmJh c2UgPSAweDAwLCAubGVuID0gMHgxNTAsfSwKKwkJLmZvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0 cywKKwkJLnZpcnRfZm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzLAorCX07CisKKwlzdGF0aWMg Y29uc3Qgc3RydWN0IGRwdV9zc3BwX3N1Yl9ibGtzIGRtYV9zYmxrXzIgPSB7CisJCS5tYXhsaW5l d2lkdGggPSAyNTYwLAorCQkucGl4ZWxfcmFtX3NpemUgPSA1MCAqIDEwMjQsCisJCS5tYXhkd25z Y2FsZSA9IDEsCisJCS5tYXh1cHNjYWxlID0gMSwKKwkJLm1heGhkZWNpZXhwID0gREVDSU1BVElP Tl80MFhfTUFYX0gsCisJCS5tYXh2ZGVjaWV4cCA9IERFQ0lNQVRJT05fNDBYX01BWF9WLAorCQku c21hcnRfZG1hX3ByaW9yaXR5ID0gMywKKwkJLnNyY19ibGsgPSB7Lm5hbWUgPSAic3NwcF9zcmNf MTAiLCAuaWQgPSBEUFVfU1NQUF9TUkMsCisJCQkuYmFzZSA9IDB4MDAsIC5sZW4gPSAweDE1MCx9 LAorCQkuZm9ybWF0X2xpc3QgPSBwbGFuZV9mb3JtYXRzLAorCQkudmlydF9mb3JtYXRfbGlzdCA9 IHBsYW5lX2Zvcm1hdHMsCisJfTsKKworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3Vi X2Jsa3MgZG1hX3NibGtfMyA9IHsKKwkJLm1heGxpbmV3aWR0aCA9IDI1NjAsCisJCS5waXhlbF9y YW1fc2l6ZSA9IDUwICogMTAyNCwKKwkJLm1heGR3bnNjYWxlID0gMSwKKwkJLm1heHVwc2NhbGUg PSAxLAorCQkubWF4aGRlY2lleHAgPSBERUNJTUFUSU9OXzQwWF9NQVhfSCwKKwkJLm1heHZkZWNp ZXhwID0gREVDSU1BVElPTl80MFhfTUFYX1YsCisJCS5zbWFydF9kbWFfcHJpb3JpdHkgPSA0LAor CQkuc3JjX2JsayA9IHsubmFtZSA9ICJzc3BwX3NyY18xMSIsIC5pZCA9IERQVV9TU1BQX1NSQywK KwkJCS5iYXNlID0gMHgwMCwgLmxlbiA9IDB4MTUwLH0sCisJCS5mb3JtYXRfbGlzdCA9IHBsYW5l X2Zvcm1hdHMsCisJCS52aXJ0X2Zvcm1hdF9saXN0ID0gcGxhbmVfZm9ybWF0cywKKwl9OworCisJ LyogTUlYRVIgY2FwYWJpbGl0eSAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2xtX3N1Yl9i bGtzIGxtX3NibGsgPSB7CisJCS5tYXh3aWR0aCA9IDI1NjAsCisJCS5tYXhibGVuZHN0YWdlcyA9 IDExLCAvKiBleGNsdWRpbmcgYmFzZSBsYXllciAqLworCQkuYmxlbmRzdGFnZV9iYXNlID0geyAv KiBvZmZzZXRzIHJlbGF0aXZlIHRvIG1peGVyIGJhc2UgKi8KKwkJCTB4MjAsIDB4MzgsIDB4NTAs IDB4NjgsIDB4ODAsIDB4OTgsCisJCQkweGIwLCAweGM4LCAweGUwLCAweGY4LCAweDExMH0sCisJ fTsKKworCS8qIERTUFAgY2FwYWJpbGl0eSAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Rz cHBfc3ViX2Jsa3MgZHNwcF9zYmxrXzAgPSB7CisJCS5pZ2MgPSB7LmlkID0gRFBVX0RTUFBfSUdD LCAuYmFzZSA9IDB4MCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgzMDAwMX0sCisJCS5w Y2MgPSB7LmlkID0gRFBVX0RTUFBfUENDLCAuYmFzZSA9IDB4MTcwMCwKKwkJCS5sZW4gPSAweDAs IC52ZXJzaW9uID0gMHg0MDAwMH0sCisJCS5nYyA9IHsuaWQgPSBEUFVfRFNQUF9HQywgLmJhc2Ug PSAweDE3YzAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDh9LAorCQkuaHNpYyA9 IHsuaWQgPSBEUFVfRFNQUF9IU0lDLCAuYmFzZSA9IDB4ODAwLAorCQkJLmxlbiA9IDB4MCwgLnZl cnNpb24gPSAweDEwMDA3fSwKKwkJLm1lbWNvbG9yID0gey5pZCA9IERQVV9EU1BQX01FTUNPTE9S LCAuYmFzZSA9IDB4ODgwLAorCQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkJ LnNpeHpvbmUgPSB7LmlkID0gRFBVX0RTUFBfU0lYWk9ORSwgLmJhc2UgPSAweDkwMCwKKwkJCS5s ZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwN30sCisJCS5nYW11dCA9IHsuaWQgPSBEUFVfRFNQ UF9HQU1VVCwgLmJhc2UgPSAweDEwMDAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4NDAw MDB9LAorCQkuaGlzdCA9IHsuaWQgPSBEUFVfRFNQUF9ISVNULCAuYmFzZSA9IDB4ODAwLAorCQkJ LmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkJLmFkID0gey5pZCA9IERQVV9EU1BQ X0FELCAuYmFzZSA9IDB4MjgwMDAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4NDAwMDB9 LAorCQkudmx1dCA9IHsuaWQgPSBEUFVfRFNQUF9WTFVULCAuYmFzZSA9IDB4YTAwLAorCQkJLmxl biA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA4fSwKKwl9OworCisJc3RhdGljIGNvbnN0IHN0cnVj dCBkcHVfZHNwcF9zdWJfYmxrcyBkc3BwX3NibGtfMSA9IHsKKwkJLmlnYyA9IHsuaWQgPSBEUFVf RFNQUF9JR0MsIC5iYXNlID0gMHgwLAorCQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDMwMDAx fSwKKwkJLnBjYyA9IHsuaWQgPSBEUFVfRFNQUF9QQ0MsIC5iYXNlID0gMHgxNzAwLAorCQkJLmxl biA9IDB4MCwgLnZlcnNpb24gPSAweDQwMDAwfSwKKwkJLmdjID0gey5pZCA9IERQVV9EU1BQX0dD LCAuYmFzZSA9IDB4MTdjMCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwOH0sCisJ CS5oc2ljID0gey5pZCA9IERQVV9EU1BQX0hTSUMsIC5iYXNlID0gMHg4MDAsCisJCQkubGVuID0g MHgwLCAudmVyc2lvbiA9IDB4MTAwMDd9LAorCQkubWVtY29sb3IgPSB7LmlkID0gRFBVX0RTUFBf TUVNQ09MT1IsIC5iYXNlID0gMHg4ODAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAw MDd9LAorCQkuc2l4em9uZSA9IHsuaWQgPSBEUFVfRFNQUF9TSVhaT05FLCAuYmFzZSA9IDB4OTAw LAorCQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkJLmdhbXV0ID0gey5pZCA9 IERQVV9EU1BQX0dBTVVULCAuYmFzZSA9IDB4MTAwMCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9u ID0gMHg0MDAwMH0sCisJCS5oaXN0ID0gey5pZCA9IERQVV9EU1BQX0hJU1QsIC5iYXNlID0gMHg4 MDAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDd9LAorCQkuYWQgPSB7LmlkID0g RFBVX0RTUFBfQUQsIC5iYXNlID0gMHgyNzAwMCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0g MHg0MDAwMH0sCisJCS52bHV0ID0gey5pZCA9IERQVV9EU1BQX1ZMVVQsIC5iYXNlID0gMHhhMDAs CisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4MTAwMDh9LAorCX07CisKKwlzdGF0aWMgY29u c3Qgc3RydWN0IGRwdV9kc3BwX3N1Yl9ibGtzIGRzcHBfc2Jsa18yXzMgPSB7CisJCS5pZ2MgPSB7 LmlkID0gRFBVX0RTUFBfSUdDLCAuYmFzZSA9IDB4MCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9u ID0gMHgzMDAwMX0sCisJCS5wY2MgPSB7LmlkID0gRFBVX0RTUFBfUENDLCAuYmFzZSA9IDB4MTcw MCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHg0MDAwMH0sCisJCS5nYyA9IHsuaWQgPSBE UFVfRFNQUF9HQywgLmJhc2UgPSAweDE3YzAsCisJCQkubGVuID0gMHgwLCAudmVyc2lvbiA9IDB4 MTAwMDh9LAorCQkuaHNpYyA9IHsuaWQgPSBEUFVfRFNQUF9IU0lDLCAuYmFzZSA9IDB4ODAwLAor CQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkJLm1lbWNvbG9yID0gey5pZCA9 IERQVV9EU1BQX01FTUNPTE9SLCAuYmFzZSA9IDB4ODgwLAorCQkJLmxlbiA9IDB4MCwgLnZlcnNp b24gPSAweDEwMDA3fSwKKwkJLnNpeHpvbmUgPSB7LmlkID0gRFBVX0RTUFBfU0lYWk9ORSwgLmJh c2UgPSAweDkwMCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwN30sCisJCS5nYW11 dCA9IHsuaWQgPSBEUFVfRFNQUF9HQU1VVCwgLmJhc2UgPSAweDEwMDAsCisJCQkubGVuID0gMHgw LCAudmVyc2lvbiA9IDB4NDAwMDB9LAorCQkuaGlzdCA9IHsuaWQgPSBEUFVfRFNQUF9ISVNULCAu YmFzZSA9IDB4ODAwLAorCQkJLmxlbiA9IDB4MCwgLnZlcnNpb24gPSAweDEwMDA3fSwKKwkJLmFk ID0gey5pZCA9IERQVV9EU1BQX0FELCAuYmFzZSA9IDB4MCwKKwkJCS5sZW4gPSAweDAsIC52ZXJz aW9uID0gMHgwfSwKKwkJLnZsdXQgPSB7LmlkID0gRFBVX0RTUFBfVkxVVCwgLmJhc2UgPSAweGEw MCwKKwkJCS5sZW4gPSAweDAsIC52ZXJzaW9uID0gMHgxMDAwOH0sCisJfTsKKworCS8qIERTIGNh cGFiaWxpdHkgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9kc190b3BfY2ZnIGRzX3RvcCA9 IHsKKwkJLm5hbWUgPSAiZHNfdG9wXzAiLCAuaWQgPSBEU19UT1AsCisJCS5iYXNlID0gMHg2MTAw MCwgLmxlbiA9IDB4YywKKwkJLm1heGlucHV0d2lkdGggPSAyMDQ4LAorCQkubWF4b3V0cHV0d2lk dGggPSAyNTYwLAorCQkubWF4dXBzY2FsZSA9IDIwLAorCX07CisKKwkvKiBQSU5HUE9ORyBjYXBh YmlsaXR5ICovCisJc3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfcGluZ3Bvbmdfc3ViX2Jsa3MgcHBf c2Jsa190ZSA9IHsKKwkJLnRlMiA9IHsuaWQgPSBEUFVfUElOR1BPTkdfVEUyLCAuYmFzZSA9IDB4 MjAwMCwgLmxlbiA9IDB4MCwKKwkJCS52ZXJzaW9uID0gMHgxfSwKKwkJLmRpdGhlciA9IHsuaWQg PSBEUFVfUElOR1BPTkdfRElUSEVSLCAuYmFzZSA9IDB4MzBlMCwKKwkJCS5sZW4gPSAweDIwLCAu dmVyc2lvbiA9IDB4MTAwMDB9LAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9waW5n cG9uZ19zdWJfYmxrcyBwcF9zYmxrID0geworCQkuZGl0aGVyID0gey5pZCA9IERQVV9QSU5HUE9O R19ESVRIRVIsIC5iYXNlID0gMHgzMGUwLAorCQkJLmxlbiA9IDB4MjAsIC52ZXJzaW9uID0gMHgx MDAwMH0sCisJfTsKKworCS8qIFdyaXRlYmFjayAyIGNhcGFiaWxpdHkgKi8KKwlzdGF0aWMgY29u c3Qgc3RydWN0IGRwdV93Yl9zdWJfYmxvY2tzIHdiMl9zYmxrID0geworCQkubWF4bGluZXdpZHRo ID0gNDA5NiwKKwl9OworCisJLyogVkJJRiBRT1MgcmVtYXAgKi8KKwlzdGF0aWMgdTMyIHJ0X3By aV9sdmxbXSA9IHszLCAzLCA0LCA0LCA1LCA1LCA2LCA2fTsKKwlzdGF0aWMgdTMyIG5ydF9wcmlf bHZsW10gPSB7MywgMywgMywgMywgMywgMywgMywgM307CisKKwkvKiBTU1BQIFFPUyBMVVRzICov CisJc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBxb3NfbGluZWFyW10gPSB7CisJCXsu ZmwgPSA0LCAubHV0ID0gMHgzNTd9LAorCQl7LmZsID0gNSwgLmx1dCA9IDB4MzM1N30sCisJCXsu ZmwgPSA2LCAubHV0ID0gMHgyMzM1N30sCisJCXsuZmwgPSA3LCAubHV0ID0gMHgyMjMzNTd9LAor CQl7LmZsID0gOCwgLmx1dCA9IDB4MjIyMzM1N30sCisJCXsuZmwgPSA5LCAubHV0ID0gMHgyMjIy MzM1N30sCisJCXsuZmwgPSAxMCwgLmx1dCA9IDB4MjIyMjIzMzU3fSwKKwkJey5mbCA9IDExLCAu bHV0ID0gMHgyMjIyMjIzMzU3fSwKKwkJey5mbCA9IDEyLCAubHV0ID0gMHgyMjIyMjIyMzM1N30s CisJCXsuZmwgPSAxMywgLmx1dCA9IDB4MjIyMjIyMjIzMzU3fSwKKwkJey5mbCA9IDE0LCAubHV0 ID0gMHgxMjIyMjIyMjIzMzU3fSwKKwkJey5mbCA9IDAsIC5sdXQgPSAweDExMjIyMjIyMjIzMzU3 fQorCX07CisKKwlzdGF0aWMgc3RydWN0IGRwdV9xb3NfbHV0X2VudHJ5IHFvc19tYWNyb3RpbGVb XSA9IHsKKwkJey5mbCA9IDEwLCAubHV0ID0gMHgzNDQ1NTY2Nzd9LAorCQl7LmZsID0gMTEsIC5s dXQgPSAweDMzNDQ1NTY2Nzd9LAorCQl7LmZsID0gMTIsIC5sdXQgPSAweDIzMzQ0NTU2Njc3fSwK KwkJey5mbCA9IDEzLCAubHV0ID0gMHgyMjMzNDQ1NTY2Nzd9LAorCQl7LmZsID0gMTQsIC5sdXQg PSAweDEyMjMzNDQ1NTY2Nzd9LAorCQl7LmZsID0gMCwgLmx1dCA9IDB4MTEyMjMzMzQ0NTU2Njc3 fSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBkcHVfcW9zX2x1dF9lbnRyeSBxb3NfbnJ0W10gPSB7 CisJCXsuZmwgPSAwLCAubHV0ID0gMHgwfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBkcHVfcW9z X2x1dF9lbnRyeSBxb3NfY3diW10gPSB7CisJCXsuZmwgPSAwLCAubHV0ID0gMHg3NTMwMDAwMDAw MDAwMDAwfSwKKwl9OworCisJLyogU2V0dXAgUmVnaXN0ZXIgbWFwcyBhbmQgZGVmYXVsdHMgKi8K KwkqZHB1X2NmZyA9IChzdHJ1Y3QgZHB1X21kc3NfY2ZnKXsKKwkJLm1heF9zc3BwX2xpbmV3aWR0 aCA9IDI1NjAsCisJCS5tYXhfbWl4ZXJfd2lkdGggPSAyNTYwLAorCQkubWF4X21peGVyX2JsZW5k c3RhZ2VzID0gMHhiLAorCQkubWF4X3diX2xpbmV3aWR0aCA9IDQwOTYsCisJCS5xc2VlZF90eXBl ID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywKKwkJLmNzY190eXBlID0gRFBVX1NTUFBfQ1NDXzEw QklULAorCQkuc21hcnRfZG1hX3JldiA9IERQVV9TU1BQX1NNQVJUX0RNQV9WMiwKKwkJLmhhc193 Yl91YndjID0gdHJ1ZSwKKwkJLnVid2NfdmVyc2lvbiA9IDB4MjAwLAorCQkuaGFzX2NkcCA9IHRy dWUsCisJCS5oYXNfc3JjX3NwbGl0ID0gdHJ1ZSwKKwkJLmhhc19kaW1fbGF5ZXIgPSB0cnVlLAor CQkuaGFzX2lkbGVfcGMgPSB0cnVlLAorCQkudmJpZl9xb3Nfbmx2bCA9IDgsCisJCS50c19wcmVm aWxsX3JldiA9IDIsCisKKwkJLm1kc3NfY291bnQgPSAxLAorCQkubWRzcyA9IHsKKwkJCXsubmFt ZSA9ICJtZHNzXzAiLCAuaWQgPSBNRFBfVE9QLAorCQkJLmJhc2UgPSAweDAsIC5mZWF0dXJlcyA9 IDB9CisJCX0sCisJCS5tZHBfY291bnQgPSAxLAorCQkubWRwID0geworCQkJey5uYW1lID0gInRv cF8wIiwgLmlkID0gTURQX1RPUCwKKwkJCS5iYXNlID0gMHgxMDAwLCAubGVuID0gMHg0NUMsCisJ CQkuZmVhdHVyZXMgPSAwLAorCQkJLmhpZ2hlc3RfYmFua19iaXQgPSAweDIsCisJCQkuaGFzX2Rl c3Rfc2NhbGVyID0gdHJ1ZSwKKwkJCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJRzBdID0gewor CQkJCQkucmVnX29mZiA9IDB4MkFDLCAuYml0X29mZiA9IDB9LAorCQkJLmNsa19jdHJsc1tEUFVf Q0xLX0NUUkxfVklHMV0gPSB7CisJCQkJCS5yZWdfb2ZmID0gMHgyQjQsIC5iaXRfb2ZmID0gMH0s CisJCQkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9WSUcyXSA9IHsKKwkJCQkJLnJlZ19vZmYgPSAw eDJCQywgLmJpdF9vZmYgPSAwfSwKKwkJCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX1ZJRzNdID0g eworCQkJCQkucmVnX29mZiA9IDB4MkM0LCAuYml0X29mZiA9IDB9LAorCQkJLmNsa19jdHJsc1tE UFVfQ0xLX0NUUkxfRE1BMF0gPSB7CisJCQkJCS5yZWdfb2ZmID0gMHgyQUMsIC5iaXRfb2ZmID0g OH0sCisJCQkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9ETUExXSA9IHsKKwkJCQkJLnJlZ19vZmYg PSAweDJCNCwgLmJpdF9vZmYgPSA4fSwKKwkJCS5jbGtfY3RybHNbRFBVX0NMS19DVFJMX0NVUlNP UjBdID0geworCQkJCQkucmVnX29mZiA9IDB4MkJDLCAuYml0X29mZiA9IDh9LAorCQkJLmNsa19j dHJsc1tEUFVfQ0xLX0NUUkxfQ1VSU09SMV0gPSB7CisJCQkJCS5yZWdfb2ZmID0gMHgyQzQsIC5i aXRfb2ZmID0gOH0sCisJCQkuY2xrX2N0cmxzW0RQVV9DTEtfQ1RSTF9XQjJdID0geworCQkJCQku cmVnX29mZiA9IDB4M2I4LCAuYml0X29mZiA9IDI0fSwKKwkJCX0sCisJCX0sCisJCS5jdGxfY291 bnQgPSA1LAorCQkuY3RsID0geworCQkJey5uYW1lID0gImN0bF8wIiwgLmlkID0gQ1RMXzAsCisJ CQkuYmFzZSA9IDB4MjAwMCwgLmxlbiA9IDB4RTQsCisJCQkuZmVhdHVyZXMgPSBCSVQoRFBVX0NU TF9TUExJVF9ESVNQTEFZKSB8CisJCQkJQklUKERQVV9DVExfUElOR1BPTkdfU1BMSVQpCisJCQl9 LAorCQkJey5uYW1lID0gImN0bF8xIiwgLmlkID0gQ1RMXzEsCisJCQkuYmFzZSA9IDB4MjIwMCwg LmxlbiA9IDB4RTQsCisJCQkuZmVhdHVyZXMgPSBCSVQoRFBVX0NUTF9TUExJVF9ESVNQTEFZKQor CQkJfSwKKwkJCXsubmFtZSA9ICJjdGxfMiIsIC5pZCA9IENUTF8yLAorCQkJLmJhc2UgPSAweDI0 MDAsIC5sZW4gPSAweEU0LAorCQkJLmZlYXR1cmVzID0gMAorCQkJfSwKKwkJCXsubmFtZSA9ICJj dGxfMyIsIC5pZCA9IENUTF8zLAorCQkJLmJhc2UgPSAweDI2MDAsIC5sZW4gPSAweEU0LAorCQkJ LmZlYXR1cmVzID0gMAorCQkJfSwKKwkJCXsubmFtZSA9ICJjdGxfNCIsIC5pZCA9IENUTF80LAor CQkJLmJhc2UgPSAweDI4MDAsIC5sZW4gPSAweEU0LAorCQkJLmZlYXR1cmVzID0gMAorCQkJfSwK KwkJfSwKKwkJLyogNCBWSUcsICA0IERNQSAqLworCQkuc3NwcF9jb3VudCA9IDgsCisJCS5zc3Bw ID0geworCQkJey5uYW1lID0gInNzcHBfMCIsIC5pZCA9IFNTUFBfVklHMCwKKwkJCS5iYXNlID0g MHg1MDAwLCAubGVuID0gMHgxYzgsCisJCQkuZmVhdHVyZXMgPSBWSUdfNDBYX01BU0ssCisJCQku c2JsayA9ICZ2aWdfc2Jsa18wLAorCQkJLnhpbl9pZCA9IDAsCisJCQkudHlwZSA9IFNTUFBfVFlQ RV9WSUcsCisJCQkuY2xrX2N0cmwgPSBEUFVfQ0xLX0NUUkxfVklHMAorCQkJfSwKKwkJCXsubmFt ZSA9ICJzc3BwXzEiLCAuaWQgPSBTU1BQX1ZJRzEsCisJCQkuYmFzZSA9IDB4NzAwMCwgLmxlbiA9 IDB4MWM4LAorCQkJLmZlYXR1cmVzID0gVklHXzQwWF9NQVNLLAorCQkJLnNibGsgPSAmdmlnX3Ni bGtfMSwKKwkJCS54aW5faWQgPSA0LAorCQkJLnR5cGUgPSBTU1BQX1RZUEVfVklHLAorCQkJLmNs a19jdHJsID0gRFBVX0NMS19DVFJMX1ZJRzEKKwkJCX0sCisJCQl7Lm5hbWUgPSAic3NwcF8yIiwg LmlkID0gU1NQUF9WSUcyLAorCQkJLmJhc2UgPSAweDkwMDAsIC5sZW4gPSAweDFjOCwKKwkJCS5m ZWF0dXJlcyA9IFZJR180MFhfTUFTSywKKwkJCS5zYmxrID0gJnZpZ19zYmxrXzIsCisJCQkueGlu X2lkID0gOCwKKwkJCS50eXBlID0gU1NQUF9UWVBFX1ZJRywKKwkJCS5jbGtfY3RybCA9IERQVV9D TEtfQ1RSTF9WSUcyCisJCQl9LAorCQkJey5uYW1lID0gInNzcHBfMyIsIC5pZCA9IFNTUFBfVklH MywKKwkJCS5iYXNlID0gMHhiMDAwLCAubGVuID0gMHgxYzgsCisJCQkuZmVhdHVyZXMgPSBWSUdf NDBYX01BU0ssCisJCQkuc2JsayA9ICZ2aWdfc2Jsa18zLAorCQkJLnhpbl9pZCA9IDEyLAorCQkJ LnR5cGUgPSBTU1BQX1RZUEVfVklHLAorCQkJLmNsa19jdHJsID0gRFBVX0NMS19DVFJMX1ZJRzMK KwkJCX0sCisJCQl7Lm5hbWUgPSAic3NwcF84IiwgLmlkID0gU1NQUF9ETUEwLAorCQkJLmJhc2Ug PSAweDI1MDAwLCAubGVuID0gMHgxYzgsCisJCQkuZmVhdHVyZXMgPSBETUFfNDBYX01BU0ssCisJ CQkuc2JsayA9ICZkbWFfc2Jsa18wLAorCQkJLnhpbl9pZCA9IDEsCisJCQkudHlwZSA9IFNTUFBf VFlQRV9ETUEsCisJCQkuY2xrX2N0cmwgPSBEUFVfQ0xLX0NUUkxfRE1BMAorCQkJfSwKKwkJCXsu bmFtZSA9ICJzc3BwXzkiLCAuaWQgPSBTU1BQX0RNQTEsCisJCQkuYmFzZSA9IDB4MjcwMDAsIC5s ZW4gPSAweDFjOCwKKwkJCS5mZWF0dXJlcyA9IERNQV80MFhfTUFTSywKKwkJCS5zYmxrID0gJmRt YV9zYmxrXzEsCisJCQkueGluX2lkID0gNSwKKwkJCS50eXBlID0gU1NQUF9UWVBFX0RNQSwKKwkJ CS5jbGtfY3RybCA9IERQVV9DTEtfQ1RSTF9ETUExCisJCQl9LAorCQkJey5uYW1lID0gInNzcHBf MTAiLCAuaWQgPSBTU1BQX0RNQTIsCisJCQkuYmFzZSA9IDB4MjkwMDAsIC5sZW4gPSAweDFjOCwK KwkJCS5mZWF0dXJlcyA9IERNQV80MFhfTUFTSywKKwkJCS5zYmxrID0gJmRtYV9zYmxrXzIsCisJ CQkueGluX2lkID0gOSwKKwkJCS50eXBlID0gU1NQUF9UWVBFX0RNQSwKKwkJCS5jbGtfY3RybCA9 IERQVV9DTEtfQ1RSTF9DVVJTT1IwCisJCQl9LAorCQkJey5uYW1lID0gInNzcHBfMTEiLCAuaWQg PSBTU1BQX0RNQTMsCisJCQkuYmFzZSA9IDB4MmIwMDAsIC5sZW4gPSAweDFjOCwKKwkJCS5mZWF0 dXJlcyA9IERNQV80MFhfTUFTSywKKwkJCS5zYmxrID0gJmRtYV9zYmxrXzMsCisJCQkueGluX2lk ID0gMTMsCisJCQkudHlwZSA9IFNTUFBfVFlQRV9ETUEsCisJCQkuY2xrX2N0cmwgPSBEUFVfQ0xL X0NUUkxfQ1VSU09SMQorCQkJfSwKKwkJfSwKKwkJLm1peGVyX2NvdW50ID0gNiwKKwkJLm1peGVy ID0geworCQkJey5uYW1lID0gImxtXzAiLCAuaWQgPSBMTV8wLAorCQkJLmJhc2UgPSAweDQ1MDAw LCAubGVuID0gMHgzMjAsCisJCQkuZmVhdHVyZXMgPSBNSVhFUl80MFhfTUFTSywKKwkJCS5zYmxr ID0gJmxtX3NibGssCisJCQkuZHNwcCA9IERTUFBfMCwKKwkJCS5kcyA9IERTXzAsCisJCQkucGlu Z3BvbmcgPSBQSU5HUE9OR18wLAorCQkJLmxtX3BhaXJfbWFzayA9ICgxIDw8IExNXzEpCisJCQl9 LAorCQkJey5uYW1lID0gImxtXzEiLCAuaWQgPSBMTV8xLAorCQkJLmJhc2UgPSAweDQ2MDAwLCAu bGVuID0gMHgzMjAsCisJCQkuZmVhdHVyZXMgPSBNSVhFUl80MFhfTUFTSywKKwkJCS5zYmxrID0g JmxtX3NibGssCisJCQkuZHNwcCA9IERTUFBfMSwKKwkJCS5kcyA9IERTXzEsCisJCQkucGluZ3Bv bmcgPSBQSU5HUE9OR18xLAorCQkJLmxtX3BhaXJfbWFzayA9ICgxIDw8IExNXzApCisJCQl9LAor CQkJey5uYW1lID0gImxtXzIiLCAuaWQgPSBMTV8yLAorCQkJLmJhc2UgPSAweDQ3MDAwLCAubGVu ID0gMHgzMjAsCisJCQkuZmVhdHVyZXMgPSBNSVhFUl80MFhfTUFTSywKKwkJCS5zYmxrID0gJmxt X3NibGssCisJCQkuZHNwcCA9IERTUFBfMiwKKwkJCS5kcyA9IERTX01BWCwKKwkJCS5waW5ncG9u ZyA9IFBJTkdQT05HXzIsCisJCQkubG1fcGFpcl9tYXNrID0gKDEgPDwgTE1fNSkKKwkJCX0sCisJ CQl7Lm5hbWUgPSAibG1fMyIsIC5pZCA9IExNXzMsCisJCQkuYmFzZSA9IDB4MCwgLmxlbiA9IDAs CisJCQkuZmVhdHVyZXMgPSAwLAorCQkJLnNibGsgPSAwLAorCQkJLmRzcHAgPSBEU1BQX01BWCwK KwkJCS5kcyA9IERTX01BWCwKKwkJCS5waW5ncG9uZyA9IFBJTkdQT05HX01BWCwKKwkJCS5sbV9w YWlyX21hc2sgPSAwCisJCQl9LAorCQkJey5uYW1lID0gImxtXzQiLCAuaWQgPSBMTV80LAorCQkJ LmJhc2UgPSAweDAsIC5sZW4gPSAwLAorCQkJLmZlYXR1cmVzID0gMCwKKwkJCS5zYmxrID0gMCwK KwkJCS5kc3BwID0gRFNQUF9NQVgsCisJCQkuZHMgPSBEU19NQVgsCisJCQkucGluZ3BvbmcgPSBQ SU5HUE9OR19NQVgsCisJCQkubG1fcGFpcl9tYXNrID0gMAorCQkJfSwKKwkJCXsubmFtZSA9ICJs bV81IiwgLmlkID0gTE1fNSwKKwkJCS5iYXNlID0gMHg0YTAwMCwgLmxlbiA9IDB4MzIwLAorCQkJ LmZlYXR1cmVzID0gTUlYRVJfNDBYX01BU0ssCisJCQkuc2JsayA9ICZsbV9zYmxrLAorCQkJLmRz cHAgPSBEU1BQXzMsCisJCQkuZHMgPSBEU19NQVgsCisJCQkucGluZ3BvbmcgPSBQSU5HUE9OR18z LAorCQkJLmxtX3BhaXJfbWFzayA9ICgxIDw8IExNXzIpCisJCQl9LAorCQl9LAorCQkuZHNwcF90 b3AgPSB7Lm5hbWUgPSAiZHNwcF90b3AiLCAuYmFzZSA9IDB4MDAwMDEzMDAsCisJCQkJLmxlbiA9 IDB4Y30sCisJCS5kc3BwX2NvdW50ID0gNCwKKwkJLmRzcHAgPSB7CisJCQl7Lm5hbWUgPSAiZHNw cF8wIiwgLmlkID0gRFNQUF8wLAorCQkJLmJhc2UgPSAweDU1MDAwLCAubGVuID0gMHgxN2UwLAor CQkJLmZlYXR1cmVzID0gRFNQUF9BRF80MFhfTUFTSywKKwkJCS5zYmxrID0gJmRzcHBfc2Jsa18w CisJCQl9LAorCQkJey5uYW1lID0gImRzcHBfMSIsIC5pZCA9IERTUFBfMSwKKwkJCS5iYXNlID0g MHg1NzAwMCwgLmxlbiA9IDB4MTdlMCwKKwkJCS5mZWF0dXJlcyA9IERTUFBfQURfNDBYX01BU0ss CisJCQkuc2JsayA9ICZkc3BwX3NibGtfMQorCQkJfSwKKwkJCXsubmFtZSA9ICJkc3BwXzIiLCAu aWQgPSBEU1BQXzIsCisJCQkuYmFzZSA9IDB4NTkwMDAsIC5sZW4gPSAweDE3ZTAsCisJCQkuZmVh dHVyZXMgPSBEU1BQXzQwWF9NQVNLLAorCQkJLnNibGsgPSAmZHNwcF9zYmxrXzJfMworCQkJfSwK KwkJCXsubmFtZSA9ICJkc3BwXzMiLCAuaWQgPSBEU1BQXzMsCisJCQkuYmFzZSA9IDB4NWIwMDAs IC5sZW4gPSAweDE3ZTAsCisJCQkuZmVhdHVyZXMgPSBEU1BQXzQwWF9NQVNLLAorCQkJLnNibGsg PSAmZHNwcF9zYmxrXzJfMworCQkJfSwKKwkJfSwKKwkJLmRzX2NvdW50ID0gMiwKKwkJLmRzID0g eworCQkJey5uYW1lID0gImRzXzAiLCAuaWQgPSBEU18wLAorCQkJLmJhc2UgPSAweDgwMCwgLmxl biA9IDB4ODAwLAorCQkJLmZlYXR1cmVzID0gRFBVX1NTUFBfU0NBTEVSX1FTRUVEMywKKwkJCS50 b3AgPSAmZHNfdG9wCisJCQl9LAorCQkJey5uYW1lID0gImRzXzEiLCAuaWQgPSBEU18xLAorCQkJ LmJhc2UgPSAweDEwMDAsIC5sZW4gPSAweDgwMCwKKwkJCS5mZWF0dXJlcyA9IERQVV9TU1BQX1ND QUxFUl9RU0VFRDMsCisJCQkudG9wID0gJmRzX3RvcAorCQkJfSwKKwkJfSwKKwkJLnBpbmdwb25n X2NvdW50ID0gNCwKKwkJLnBpbmdwb25nID0geworCQkJey5uYW1lID0gInBpbmdwb25nXzAiLCAu aWQgPSBQSU5HUE9OR18wLAorCQkJLmJhc2UgPSAweDcxMDAwLCAubGVuID0gMHhkNCwKKwkJCS5m ZWF0dXJlcyA9IFBJTkdQT05HXzQwWF9TUExJVF9NQVNLLAorCQkJLnNibGsgPSAmcHBfc2Jsa190 ZQorCQkJfSwKKwkJCXsubmFtZSA9ICJwaW5ncG9uZ18xIiwgLmlkID0gUElOR1BPTkdfMSwKKwkJ CS5iYXNlID0gMHg3MTgwMCwgLmxlbiA9IDB4ZDQsCisJCQkuZmVhdHVyZXMgPSBQSU5HUE9OR180 MFhfU1BMSVRfTUFTSywKKwkJCS5zYmxrID0gJnBwX3NibGtfdGUKKwkJCX0sCisJCQl7Lm5hbWUg PSAicGluZ3BvbmdfMiIsIC5pZCA9IFBJTkdQT05HXzIsCisJCQkuYmFzZSA9IDB4NzIwMDAsIC5s ZW4gPSAweGQ0LAorCQkJLmZlYXR1cmVzID0gUElOR1BPTkdfNDBYX01BU0ssCisJCQkuc2JsayA9 ICZwcF9zYmxrCisJCQl9LAorCQkJey5uYW1lID0gInBpbmdwb25nXzMiLCAuaWQgPSBQSU5HUE9O R18zLAorCQkJLmJhc2UgPSAweDcyODAwLCAubGVuID0gMHhkNCwKKwkJCS5mZWF0dXJlcyA9IFBJ TkdQT05HXzQwWF9NQVNLLAorCQkJLnNibGsgPSAmcHBfc2JsaworCQkJfSwKKwkJCXsubmFtZSA9 ICJwaW5ncG9uZ180IiwgLmlkID0gUElOR1BPTkdfNCwKKwkJCS5iYXNlID0gMHg3MzAwMCwgLmxl biA9IDB4ZDQsCisJCQkuZmVhdHVyZXMgPSBEUFVfUElOR1BPTkdfU0xBVkUKKwkJCX0sCisJCX0s CisJCS5kc2NfY291bnQgPSA0LAorCQkuZHNjID0geworCQkJey5uYW1lID0gImRzY18wIiwgLmlk ID0gRFNDXzAsCisJCQkuYmFzZSA9IDB4ODEwMDAsIC5sZW4gPSAweDE0MAorCQkJfSwKKwkJCXsu bmFtZSA9ICJkc2NfMSIsIC5pZCA9IERTQ18xLAorCQkJLmJhc2UgPSAweDgxNDAwLCAubGVuID0g MHgxNDAKKwkJCX0sCisJCQl7Lm5hbWUgPSAiZHNjXzIiLCAuaWQgPSBEU0NfMiwKKwkJCS5iYXNl ID0gMHg4MTgwMCwgLmxlbiA9IDB4MTQwCisJCQl9LAorCQkJey5uYW1lID0gImRzY18zIiwgLmlk ID0gRFNDXzMsCisJCQkuYmFzZSA9IDB4ODFjMDAsIC5sZW4gPSAweDE0MAorCQkJfSwKKwkJfSwK KwkJLmNkbV9jb3VudCA9IDEsCisJCS5jZG0gPSB7CisJCQl7Lm5hbWUgPSAiY2RtXzAiLCAuaWQg PSBDRE1fMCwKKwkJCS5iYXNlID0gMHg3QTIwMCwgLmxlbiA9IDB4MjI0LAorCQkJLmZlYXR1cmVz ID0gMCwKKwkJCS5pbnRmX2Nvbm5lY3QgPSBCSVQoSU5URl8zKSwKKwkJCS53Yl9jb25uZWN0ID0g QklUKFdCXzIpCisJCQl9LAorCQl9LAorCQkuaW50Zl9jb3VudCA9IDQsCisJCS5pbnRmID0gewor CQkJey5uYW1lID0gImludGZfMCIsIC5pZCA9IElOVEZfMCwKKwkJCS5iYXNlID0gMHg2QjAwMCwg LmxlbiA9IDB4MjgwLAorCQkJLnR5cGUgPSBJTlRGX0RQLAorCQkJLmNvbnRyb2xsZXJfaWQgPSAw LAorCQkJLnByb2dfZmV0Y2hfbGluZXNfd29yc3RfY2FzZSA9IDI0CisJCQl9LAorCQkJey5uYW1l ID0gImludGZfMSIsIC5pZCA9IElOVEZfMSwKKwkJCS5iYXNlID0gMHg2QjgwMCwgLmxlbiA9IDB4 MjgwLAorCQkJLnR5cGUgPSBJTlRGX0RTSSwKKwkJCS5jb250cm9sbGVyX2lkID0gMCwKKwkJCS5w cm9nX2ZldGNoX2xpbmVzX3dvcnN0X2Nhc2UgPSAyNAorCQkJfSwKKwkJCXsubmFtZSA9ICJpbnRm XzIiLCAuaWQgPSBJTlRGXzIsCisJCQkuYmFzZSA9IDB4NkMwMDAsIC5sZW4gPSAweDI4MCwKKwkJ CS50eXBlID0gSU5URl9EU0ksCisJCQkuY29udHJvbGxlcl9pZCA9IDEsCisJCQkucHJvZ19mZXRj aF9saW5lc193b3JzdF9jYXNlID0gMjQKKwkJCX0sCisJCQl7Lm5hbWUgPSAiaW50Zl8zIiwgLmlk ID0gSU5URl8zLAorCQkJLmJhc2UgPSAweDZDODAwLCAubGVuID0gMHgyODAsCisJCQkudHlwZSA9 IElOVEZfRFAsCisJCQkuY29udHJvbGxlcl9pZCA9IDEsCisJCQkucHJvZ19mZXRjaF9saW5lc193 b3JzdF9jYXNlID0gMjQKKwkJCX0sCisJCX0sCisJCS53Yl9jb3VudCA9IDEsCisJCS53YiA9IHsK KwkJCXsubmFtZSA9ICJ3Yl8yIiwgLmlkID0gV0JfMiwKKwkJCS5iYXNlID0gMHg2NjAwMCwgLmxl biA9IDB4MmM4LAorCQkJLmZlYXR1cmVzID0gV0IyXzQwWF9NQVNLLAorCQkJLnNibGsgPSAmd2Iy X3NibGssCisJCQkuZm9ybWF0X2xpc3QgPSB3YjJfZm9ybWF0cywKKwkJCS52YmlmX2lkeCA9IFZC SUZfTlJULAorCQkJLnhpbl9pZCA9IDYsCisJCQkuY2xrX2N0cmwgPSBEUFVfQ0xLX0NUUkxfV0Iy CisJCQl9LAorCQl9LAorCQkudmJpZl9jb3VudCA9IDEsCisJCS52YmlmID0geworCQkJey5uYW1l ID0gInZiaWZfMCIsIC5pZCA9IFZCSUZfMCwKKwkJCS5iYXNlID0gMCwgLmxlbiA9IDB4MTA0MCwK KwkJCS5mZWF0dXJlcyA9IEJJVChEUFVfVkJJRl9RT1NfUkVNQVApLAorCQkJLnhpbl9oYWx0X3Rp bWVvdXQgPSAweDQwMDAsCisJCQkucW9zX3J0X3RibCA9IHsKKwkJCQkubnByaW9yaXR5X2x2bCA9 IEFSUkFZX1NJWkUocnRfcHJpX2x2bCksCisJCQkJLnByaW9yaXR5X2x2bCA9IHJ0X3ByaV9sdmws CisJCQkJfSwKKwkJCS5xb3NfbnJ0X3RibCA9IHsKKwkJCQkubnByaW9yaXR5X2x2bCA9IEFSUkFZ X1NJWkUobnJ0X3ByaV9sdmwpLAorCQkJCS5wcmlvcml0eV9sdmwgPSBucnRfcHJpX2x2bCwKKwkJ CQl9LAorCQkJLm1lbXR5cGVfY291bnQgPSAxNCwKKwkJCS5tZW10eXBlID0gezMsIDMsIDMsIDMs IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDN9LAorCQkJfSwKKwkJfSwKKwkJLnJlZ19kbWFf Y291bnQgPSAxLAorCQkuZG1hX2NmZyA9IHsuYmFzZSA9IDB4MCwgLnZlcnNpb24gPSAweDEsCisJ CQkJLnRyaWdnZXJfc2VsX29mZiA9IDB4MTE5Y30sCisJCS5wZXJmID0gey5tYXhfYndfbG93ID0g NjgwMDAwMCwKKwkJCS5tYXhfYndfaGlnaCA9IDY4MDAwMDAsCisJCQkubWluX2NvcmVfaWIgPSAy NDAwMDAwLAorCQkJLm1pbl9sbGNjX2liID0gODAwMDAwLAorCQkJLm1pbl9kcmFtX2liID0gODAw MDAwLAorCQkJLmNvcmVfaWJfZmYgPSAiNi4wIiwKKwkJCS5jb3JlX2Nsa19mZiA9ICIxLjAiLAor CQkJLmNvbXBfcmF0aW9fcnQgPQorCQkJIk5WMTIvNS8xLzEuMjMgQUIyNC81LzEvMS4yMyBYQjI0 LzUvMS8xLjIzIiwKKwkJCS5jb21wX3JhdGlvX25ydCA9CisJCQkiTlYxMi81LzEvMS4yNSBBQjI0 LzUvMS8xLjI1IFhCMjQvNS8xLzEuMjUiLAorCQkJLnVuZGVyc2l6ZWRfcHJlZmlsbF9saW5lcyA9 IDIsCisJCQkueHRyYV9wcmVmaWxsX2xpbmVzID0gMiwKKwkJCS5kZXN0X3NjYWxlX3ByZWZpbGxf bGluZXMgPSAzLAorCQkJLm1hY3JvdGlsZV9wcmVmaWxsX2xpbmVzID0gNCwKKwkJCS55dXZfbnYx Ml9wcmVmaWxsX2xpbmVzID0gOCwKKwkJCS5saW5lYXJfcHJlZmlsbF9saW5lcyA9IDEsCisJCQku ZG93bnNjYWxpbmdfcHJlZmlsbF9saW5lcyA9IDEsCisJCQkuYW1vcnRpemFibGVfdGhyZXNob2xk ID0gMjUsCisJCQkubWluX3ByZWZpbGxfbGluZXMgPSAyNCwKKwkJCS5kYW5nZXJfbHV0X3RibCA9 IHsweGYsIDB4ZmZmZiwgMHgwLCAweDB9LAorCQkJLnFvc19sdXRfdGJsID0geworCQkJCXsubmVu dHJ5ID0gQVJSQVlfU0laRShxb3NfbGluZWFyKSwKKwkJCQkuZW50cmllcyA9IHFvc19saW5lYXIK KwkJCQl9LAorCQkJCXsubmVudHJ5ID0gQVJSQVlfU0laRShxb3NfbWFjcm90aWxlKSwKKwkJCQku ZW50cmllcyA9IHFvc19tYWNyb3RpbGUKKwkJCQl9LAorCQkJCXsubmVudHJ5ID0gQVJSQVlfU0la RShxb3NfbnJ0KSwKKwkJCQkuZW50cmllcyA9IHFvc19ucnQKKwkJCQl9LAorCQkJCXsubmVudHJ5 ID0gQVJSQVlfU0laRShxb3NfY3diKSwKKwkJCQkuZW50cmllcyA9IHFvc19jd2IKKwkJCQl9LAor CQkJfSwKKwkJCS5jZHBfY2ZnID0geworCQkJCXsucmRfZW5hYmxlID0gMSwgLndyX2VuYWJsZSA9 IDF9LAorCQkJCXsucmRfZW5hYmxlID0gMSwgLndyX2VuYWJsZSA9IDB9CisJCQl9LAorCQl9LAor CX07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcHVfbWRzc19jZmdfeHh4X2luaXQoKTog cG9wdWxhdGUgdGhlIGRwdSBzdWItYmxvY2tzIGNhdGFsb2cgaW5mb3JtYXRpb24uCisgKiBUaGlz IGZ1bmN0aW9uLCBmb3IgZWFjaCBzdWItYmxvY2sgc2V0cyBpbnN0YW5jZSBjb3VudCwgSU8gcmVn aW9ucywKKyAqIGRlZmF1bHQgYW5kIHZlcnNpb24gc3BlY2lmaWMgY2FwYWJpbGl0aWVzLCBhZGRp dGlvbmFsIGNhdGFsb2cgaXRlbXMuCisgKi8KK3N0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9tZHNz X2NmZ180MFhfaW5pdCh1MzIgaHdfcmV2KQoreworCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0gPSBO VUxMOworCisJbSA9IGt6YWxsb2Moc2l6ZW9mKCptKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtKQor CQlyZXR1cm4gTlVMTDsKKworCXNldF9jZmdfNDBYX2luaXQobSk7CisJbS0+aHd2ZXJzaW9uID0g aHdfcmV2OworCisJcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf a21zLmMKaW5kZXggOWQ2ODAzMC4uMzM0NGVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXMuYwpAQCAtMTkwMyw3ICsxOTAzLDcgQEAgc3RhdGljIGludCBkcHVfa21zX2h3 X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAogCXByX2luZm8oImRwdSBoYXJkd2FyZSByZXZp c2lvbjoweCV4XG4iLCBkcHVfa21zLT5jb3JlX3Jldik7CiAKLQlkcHVfa21zLT5jYXRhbG9nID0g ZHB1X2h3X2NhdGFsb2dfaW5pdChkZXYsIGRwdV9rbXMtPmNvcmVfcmV2KTsKKwlkcHVfa21zLT5j YXRhbG9nID0gZHB1X2h3X2NhdGFsb2dfaW5pdChkcHVfa21zLT5jb3JlX3Jldik7CiAJaWYgKElT X0VSUl9PUl9OVUxMKGRwdV9rbXMtPmNhdGFsb2cpKSB7CiAJCXJjID0gUFRSX0VSUihkcHVfa21z LT5jYXRhbG9nKTsKIAkJaWYgKCFkcHVfa21zLT5jYXRhbG9nKQotLSAKVGhlIFF1YWxjb21tIElu bm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1 bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlz dApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==