From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 46F73A0543 for ; Thu, 22 Sep 2022 21:35:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2596D40150; Thu, 22 Sep 2022 21:35:54 +0200 (CEST) Received: from mail-pj1-f100.google.com (mail-pj1-f100.google.com [209.85.216.100]) by mails.dpdk.org (Postfix) with ESMTP id B2AE4400D7 for ; Thu, 22 Sep 2022 21:35:52 +0200 (CEST) Received: by mail-pj1-f100.google.com with SMTP id o99-20020a17090a0a6c00b002039c4fce53so3484288pjo.2 for ; Thu, 22 Sep 2022 12:35:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; h=date:message-id:cc:to:from:subject:mime-version:from:to:cc:subject :date; bh=kTbe66/ogdUEVdp4l57+F/nxXZxhT488AcxXugd1DKA=; b=IxyTFRh7TnJ8MtEoJ+tUE4KaqLwypXv6nKpUtVOyb5Ee3IuqHWeENKlQbLOjtN6Ngx iMNjAb2gCGsDOJDL8viVOSraOogwTkyFFsQ/g0CV+eKKQR6YUZC8xM7vGm9evsAxDTQG X75Hqz+XwDNen8def7EzuwYrO1Jn48LuAemAs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=date:message-id:cc:to:from:subject:mime-version:x-gm-message-state :from:to:cc:subject:date; bh=kTbe66/ogdUEVdp4l57+F/nxXZxhT488AcxXugd1DKA=; b=1r0oc1kVsQQt6a0W6AFI2EJsqpW8OqeKZ5UjKU1z0vuUBVHsaY0rbigwKu0V9VkruU 2VRFfFtc9c0ISK/JIksSAhWyCnwaYWfOkK5dSoCJGv8VSM1ylPfrnsNAt07uWPzoH3Ut RCFzjYBbfJaBpJ+vLYPQ8iDJdV5wFrB67g7+T9W7DoaCBPHilnRWpZ6wyAUKsEcgcnxH G8WFLEbX0vIIYT2LO3GnoTelJBZRweaBxtmdPYuIMGWOjIf66TOn2aCPpHv5ZrWrLqm2 iiGlhTn4cETJ1Mq/IWuFRvlfKmf91LVa2ccVA2lP5nUn34ZPHvr3+KCLp1hEemI2cDSM iYzA== X-Gm-Message-State: ACrzQf0QHOfyar0jODsVvsTF1me2ALhVrF0CX89iYCChFpG68wtD2gXK YAGscZtCCtl2ViKhG0I/SJfxBfA6hitmMLOIB/d7ns9XOmlUug== X-Google-Smtp-Source: AMsMyM7apUeeuMpQbw6tGvfKLNhR32j89iRViAuw6FAXoF+2g1VtqCsuJ85ahrfOubF5IthyH9PYztIEP4Sn X-Received: by 2002:a17:902:e212:b0:178:5c:8248 with SMTP id u18-20020a170902e21200b00178005c8248mr4915443plb.102.1663875351774; Thu, 22 Sep 2022 12:35:51 -0700 (PDT) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [132.177.123.84]) by smtp-relay.gmail.com with ESMTPS id w18-20020a17090a8a1200b00202ad692b9asm45014pjn.16.2022.09.22.12.35.51 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Sep 2022 12:35:51 -0700 (PDT) X-Relaying-Domain: iol.unh.edu Received: from noxus.dpdklab.iol.unh.edu (unknown [IPv6:2606:4100:3880:1722::4]) by postal.iol.unh.edu (Postfix) with ESMTP id C7A16605246B; Thu, 22 Sep 2022 15:35:50 -0400 (EDT) Received: from noxus.dpdklab.iol.unh.edu (localhost [IPv6:::1]) by noxus.dpdklab.iol.unh.edu (Postfix) with ESMTP id 8F53C6D509; Thu, 22 Sep 2022 15:35:50 -0400 (EDT) Content-Type: multipart/mixed; boundary="===============8952135068005641714==" MIME-Version: 1.0 Subject: |WARNING| pw116664-116682 [PATCH] [v1, 19/19] net/mlx5/hws: Enable HWS From: dpdklab@iol.unh.edu To: test-report@dpdk.org Cc: dpdk-test-reports@iol.unh.edu Message-Id: <20220922193550.8F53C6D509@noxus.dpdklab.iol.unh.edu> Date: Thu, 22 Sep 2022 15:35:50 -0400 (EDT) X-BeenThere: test-report@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: automatic DPDK test reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: test-report-bounces@dpdk.org --===============8952135068005641714== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGVzdC1MYWJlbDogaW9sLXRlc3RpbmcKVGVzdC1TdGF0dXM6IFdBUk5JTkcKaHR0cDovL2RwZGsu b3JnL3BhdGNoLzExNjY2NAoKX2FwcGx5IHBhdGNoIGZhaWx1cmVfCgpTdWJtaXR0ZXI6IEFsZXgg VmVza2VyIDx2YWxleEBudmlkaWEuY29tPgpEYXRlOiBUaHVyc2RheSwgU2VwdGVtYmVyIDIyIDIw MjIgMTk6MDM6NDQgCkFwcGxpZWQgb246IENvbW1pdElEOjcyYjQ1MmM1ZjI1OTlmOTcwZjQ3ZmQx N2QzZThlNWQ2MGJmZWJlN2EKQXBwbHkgcGF0Y2ggc2V0IDExNjY2NC0xMTY2ODIgZmFpbGVkOgoK Q2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYy4uLgpIdW5rICMx IHN1Y2NlZWRlZCBhdCAxMzAxMiAob2Zmc2V0IC0xNyBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVk IGF0IDEzMDIyIChvZmZzZXQgLTE3IGxpbmVzKS4KZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6 CiAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQg cnRlX2Vycm5vIGlzIHNldC4KICovCnN0YXRpYyBpbnQKZmxvd19kdl90cmFuc2xhdGUoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsCgkJICBzdHJ1Y3QgbWx4NV9mbG93ICpkZXZfZmxvdywKCQkgIGNv bnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLAoJCSAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93 X2l0ZW0gaXRlbXNbXSwKCQkgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gYWN0aW9uc1td LAoJCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikKewoJc3RydWN0IG1seDVfcHJpdiAq cHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7CglzdHJ1Y3QgbWx4NV9zaF9jb25maWcgKmRl dl9jb25mID0gJnByaXYtPnNoLT5jb25maWc7CglzdHJ1Y3QgcnRlX2Zsb3cgKmZsb3cgPSBkZXZf Zmxvdy0+ZmxvdzsKCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpoYW5kbGUgPSBkZXZfZmxvdy0+ aGFuZGxlOwoJc3RydWN0IG1seDVfZmxvd193b3Jrc3BhY2UgKndrcyA9IG1seDVfZmxvd19nZXRf dGhyZWFkX3dvcmtzcGFjZSgpOwoJc3RydWN0IG1seDVfZmxvd19yc3NfZGVzYyAqcnNzX2Rlc2M7 Cgl1aW50NjRfdCBpdGVtX2ZsYWdzID0gMDsKCXVpbnQ2NF90IGxhc3RfaXRlbSA9IDA7Cgl1aW50 NjRfdCBhY3Rpb25fZmxhZ3MgPSAwOwoJc3RydWN0IG1seDVfZmxvd19kdl9tYXRjaGVyIG1hdGNo ZXIgPSB7CgkJLm1hc2sgPSB7CgkJCS5zaXplID0gc2l6ZW9mKG1hdGNoZXIubWFzay5idWYpLAoJ CX0sCgl9OwoJaW50IGFjdGlvbnNfbiA9IDA7Cglib29sIGFjdGlvbnNfZW5kID0gZmFsc2U7Cgl1 bmlvbiB7CgkJc3RydWN0IG1seDVfZmxvd19kdl9tb2RpZnlfaGRyX3Jlc291cmNlIHJlczsKCQl1 aW50OF90IGxlbltzaXplb2Yoc3RydWN0IG1seDVfZmxvd19kdl9tb2RpZnlfaGRyX3Jlc291cmNl KSArCgkJCSAgICBzaXplb2Yoc3RydWN0IG1seDVfbW9kaWZpY2F0aW9uX2NtZCkgKgoJCQkgICAg KE1MWDVfTUFYX01PRElGWV9OVU0gKyAxKV07Cgl9IG1oZHJfZHVtbXk7CglzdHJ1Y3QgbWx4NV9m bG93X2R2X21vZGlmeV9oZHJfcmVzb3VyY2UgKm1oZHJfcmVzID0gJm1oZHJfZHVtbXkucmVzOwoJ Y29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9jb3VudCAqY291bnQgPSBOVUxMOwoJY29uc3Qg c3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9hZ2UgKm5vbl9zaGFyZWRfYWdlID0gTlVMTDsKCXVuaW9u IGZsb3dfZHZfYXR0ciBmbG93X2F0dHIgPSB7IC5hdHRyID0gMCB9OwoJdWludDMyX3QgdGFnX2Jl OwoJdW5pb24gbWx4NV9mbG93X3RibF9rZXkgdGJsX2tleTsKCXVpbnQzMl90IG1vZGlmeV9hY3Rp b25fcG9zaXRpb24gPSBVSU5UMzJfTUFYOwoJdm9pZCAqbWF0Y2hfbWFzayA9IG1hdGNoZXIubWFz ay5idWY7Cgl2b2lkICptYXRjaF92YWx1ZSA9IGRldl9mbG93LT5kdi52YWx1ZS5idWY7Cgl1aW50 OF90IG5leHRfcHJvdG9jb2wgPSAweGZmOwoJc3RydWN0IHJ0ZV92bGFuX2hkciB2bGFuID0geyAw IH07CglzdHJ1Y3QgbWx4NV9mbG93X2R2X2Rlc3RfYXJyYXlfcmVzb3VyY2UgbWRlc3RfcmVzOwoJ c3RydWN0IG1seDVfZmxvd19kdl9zYW1wbGVfcmVzb3VyY2Ugc2FtcGxlX3JlczsKCXZvaWQgKnNh bXBsZV9hY3Rpb25zW01MWDVfRFZfTUFYX05VTUJFUl9PRl9BQ1RJT05TXSA9IHswfTsKCWNvbnN0 IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fc2FtcGxlICpzYW1wbGUgPSBOVUxMOwoJc3RydWN0IG1s eDVfZmxvd19zdWJfYWN0aW9uc19saXN0ICpzYW1wbGVfYWN0OwoJdWludDMyX3Qgc2FtcGxlX2Fj dF9wb3MgPSBVSU5UMzJfTUFYOwoJdWludDMyX3QgYWdlX2FjdF9wb3MgPSBVSU5UMzJfTUFYOwoJ dWludDMyX3QgbnVtX29mX2Rlc3QgPSAwOwoJaW50IHRtcF9hY3Rpb25zX24gPSAwOwoJdWludDMy X3QgdGFibGU7CglpbnQgcmV0ID0gMDsKCWNvbnN0IHN0cnVjdCBtbHg1X2Zsb3dfdHVubmVsICp0 dW5uZWwgPSBOVUxMOwoJc3RydWN0IGZsb3dfZ3JwX2luZm8gZ3JwX2luZm8gPSB7CgkJLmV4dGVy bmFsID0gISFkZXZfZmxvdy0+ZXh0ZXJuYWwsCgkJLnRyYW5zZmVyID0gISFhdHRyLT50cmFuc2Zl ciwKCQkuZmRiX2RlZl9ydWxlID0gISFwcml2LT5mZGJfZGVmX3J1bGUsCgkJLnNraXBfc2NhbGUg PSBkZXZfZmxvdy0+c2tpcF9zY2FsZSAmCgkJCSgxIDw8IE1MWDVfU0NBTEVfRkxPV19HUk9VUF9C SVQpLAoJCS5zdGRfdGJsX2ZpeCA9IHRydWUsCgl9OwoJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0 ZW0gKmludGVncml0eV9pdGVtc1syXSA9IHtOVUxMLCBOVUxMfTsKCWNvbnN0IHN0cnVjdCBydGVf Zmxvd19pdGVtICp0dW5uZWxfaXRlbSA9IE5VTEw7Cgljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRl bSAqZ3JlX2l0ZW0gPSBOVUxMOwoKCWlmICghd2tzKQoJCXJldHVybiBydGVfZmxvd19lcnJvcl9z ZXQoZXJyb3IsIEVOT01FTSwKCQkJCQkgIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQs CgkJCQkJICBOVUxMLAoJCQkJCSAgImZhaWxlZCB0byBwdXNoIGZsb3cgd29ya3NwYWNlIik7Cgly c3NfZGVzYyA9ICZ3a3MtPnJzc19kZXNjOwoJbWVtc2V0KCZtZGVzdF9yZXMsIDAsIHNpemVvZihz dHJ1Y3QgbWx4NV9mbG93X2R2X2Rlc3RfYXJyYXlfcmVzb3VyY2UpKTsKCW1lbXNldCgmc2FtcGxl X3JlcywgMCwgc2l6ZW9mKHN0cnVjdCBtbHg1X2Zsb3dfZHZfc2FtcGxlX3Jlc291cmNlKSk7Cglt aGRyX3Jlcy0+ZnRfdHlwZSA9IGF0dHItPmVncmVzcyA/IE1MWDVEVl9GTE9XX1RBQkxFX1RZUEVf TklDX1RYIDoKCQkJCQkgICBNTFg1RFZfRkxPV19UQUJMRV9UWVBFX05JQ19SWDsKCS8qIHVwZGF0 ZSBub3JtYWwgcGF0aCBhY3Rpb24gcmVzb3VyY2UgaW50byBsYXN0IGluZGV4IG9mIGFycmF5ICov CglzYW1wbGVfYWN0ID0gJm1kZXN0X3Jlcy5zYW1wbGVfYWN0W01MWDVfTUFYX0RFU1RfTlVNIC0g MV07CglpZiAoaXNfdHVubmVsX29mZmxvYWRfYWN0aXZlKGRldikpIHsKCQlpZiAoZGV2X2Zsb3ct PnR1bm5lbCkgewoJCQlSVEVfVkVSSUZZKGRldl9mbG93LT50b2ZfdHlwZSA9PQoJCQkJICAgTUxY NV9UVU5ORUxfT0ZGTE9BRF9NSVNTX1JVTEUpOwoJCQl0dW5uZWwgPSBkZXZfZmxvdy0+dHVubmVs OwoJCX0gZWxzZSB7CgkJCXR1bm5lbCA9IG1seDVfZ2V0X3RvZihpdGVtcywgYWN0aW9ucywKCQkJ CQkgICAgICAmZGV2X2Zsb3ctPnRvZl90eXBlKTsKCQkJZGV2X2Zsb3ctPnR1bm5lbCA9IHR1bm5l bDsKCQl9CgkJZ3JwX2luZm8uc3RkX3RibF9maXggPSB0dW5uZWxfdXNlX3N0YW5kYXJkX2F0dHJf Z3JvdXBfdHJhbnNsYXRlCgkJCQkJKGRldiwgYXR0ciwgdHVubmVsLCBkZXZfZmxvdy0+dG9mX3R5 cGUpOwoJfQoJbWhkcl9yZXMtPmZ0X3R5cGUgPSBhdHRyLT5lZ3Jlc3MgPyBNTFg1RFZfRkxPV19U QUJMRV9UWVBFX05JQ19UWCA6CgkJCQkJICAgTUxYNURWX0ZMT1dfVEFCTEVfVFlQRV9OSUNfUlg7 CglyZXQgPSBtbHg1X2Zsb3dfZ3JvdXBfdG9fdGFibGUoZGV2LCB0dW5uZWwsIGF0dHItPmdyb3Vw LCAmdGFibGUsCgkJCQkgICAgICAgJmdycF9pbmZvLCBlcnJvcik7CglpZiAocmV0KQoJCXJldHVy biByZXQ7CglkZXZfZmxvdy0+ZHYuZ3JvdXAgPSB0YWJsZTsKCWlmIChhdHRyLT50cmFuc2ZlcikK CQltaGRyX3Jlcy0+ZnRfdHlwZSA9IE1MWDVEVl9GTE9XX1RBQkxFX1RZUEVfRkRCOwoJLyogbnVt YmVyIG9mIGFjdGlvbnMgbXVzdCBiZSBzZXQgdG8gMCBpbiBjYXNlIG9mIGRpcnR5IHN0YWNrLiAq LwoJbWhkcl9yZXMtPmFjdGlvbnNfbnVtID0gMDsKCWlmIChpc19mbG93X3R1bm5lbF9tYXRjaF9y dWxlKGRldl9mbG93LT50b2ZfdHlwZSkpIHsKCQkvKgoJCSAqIGRvIG5vdCBhZGQgZGVjYXAgYWN0 aW9uIGlmIG1hdGNoIHJ1bGUgZHJvcHMgcGFja2V0CgkJICogSFcgcmVqZWN0cyBydWxlcyB3aXRo IGRlY2FwICYgZHJvcAoJCSAqCgkJICogaWYgdHVubmVsIG1hdGNoIHJ1bGUgd2FzIGluc2VydGVk IGJlZm9yZSBtYXRjaGluZyB0dW5uZWwgc2V0CgkJICogcnVsZSBmbG93IHRhYmxlIHVzZWQgaW4g dGhlIG1hdGNoIHJ1bGUgbXVzdCBiZSByZWdpcwplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJz L25ldC9tbHg1L21seDVfZmxvd19kdi5jOjEzMDQ5Ckh1bmsgIzQgc3VjY2VlZGVkIGF0IDE0MTM0 IChvZmZzZXQgLTYzIGxpbmVzKS4KQXBwbHlpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1 X2Zsb3dfZHYuYyB3aXRoIDEgcmVqZWN0Li4uCkh1bmsgIzEgYXBwbGllZCBjbGVhbmx5LgpIdW5r ICMyIGFwcGxpZWQgY2xlYW5seS4KUmVqZWN0ZWQgaHVuayAjMy4KSHVuayAjNCBhcHBsaWVkIGNs ZWFubHkuCmRpZmYgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19kdi5jIGIvZHJpdmVycy9u ZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYwkocmVqZWN0ZWQgaHVua3MpCkBAIC0xMzA0OSwxMDQxICsx MzA0OCwxMDg2IEBAIGZsb3dfZHZfdHJhbnNsYXRlX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXYsCiAgKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1 ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCiAgKi8KIHN0YXRpYyBpbnQKLWZsb3df ZHZfdHJhbnNsYXRlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LAotCQkgIHN0cnVjdCBtbHg1X2Zs b3cgKmRldl9mbG93LAotCQkgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLAotCQkg IGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW10sCi0JCSAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbiBhY3Rpb25zW10sCi0JCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cikKK2Zsb3dfZHZfdHJhbnNsYXRlX2l0ZW1zKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LAorCQkJ c3RydWN0IG1seDVfZmxvdyAqZGV2X2Zsb3csCisJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0 ciAqYXR0ciwKKwkJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW10sCisJCQlzdHJ1 Y3QgbWx4NV9mbG93X2R2X21hdGNoZXIgKm1hdGNoZXIsCisJCQlzdHJ1Y3QgcnRlX2Zsb3dfZXJy b3IgKmVycm9yKQogewogCXN0cnVjdCBtbHg1X3ByaXYgKnByaXYgPSBkZXYtPmRhdGEtPmRldl9w cml2YXRlOwotCXN0cnVjdCBtbHg1X3NoX2NvbmZpZyAqZGV2X2NvbmYgPSAmcHJpdi0+c2gtPmNv bmZpZzsKIAlzdHJ1Y3QgcnRlX2Zsb3cgKmZsb3cgPSBkZXZfZmxvdy0+ZmxvdzsKIAlzdHJ1Y3Qg bWx4NV9mbG93X2hhbmRsZSAqaGFuZGxlID0gZGV2X2Zsb3ctPmhhbmRsZTsKIAlzdHJ1Y3QgbWx4 NV9mbG93X3dvcmtzcGFjZSAqd2tzID0gbWx4NV9mbG93X2dldF90aHJlYWRfd29ya3NwYWNlKCk7 Ci0Jc3RydWN0IG1seDVfZmxvd19yc3NfZGVzYyAqcnNzX2Rlc2M7CisJc3RydWN0IG1seDVfZmxv d19yc3NfZGVzYyAqcnNzX2Rlc2MgPSAmd2tzLT5yc3NfZGVzYzsKIAl1aW50NjRfdCBpdGVtX2Zs YWdzID0gMDsKIAl1aW50NjRfdCBsYXN0X2l0ZW0gPSAwOwotCXVpbnQ2NF90IGFjdGlvbl9mbGFn cyA9IDA7Ci0Jc3RydWN0IG1seDVfZmxvd19kdl9tYXRjaGVyIG1hdGNoZXIgPSB7Ci0JCS5tYXNr ID0gewotCQkJLnNpemUgPSBzaXplb2YobWF0Y2hlci5tYXNrLmJ1ZiksCi0JCX0sCi0JfTsKLQlp bnQgYWN0aW9uc19uID0gMDsKLQlib29sIGFjdGlvbnNfZW5kID0gZmFsc2U7Ci0JdW5pb24gewot CQlzdHJ1Y3QgbWx4NV9mbG93X2R2X21vZGlmeV9oZHJfcmVzb3VyY2UgcmVzOwotCQl1aW50OF90 IGxlbltzaXplb2Yoc3RydWN0IG1seDVfZmxvd19kdl9tb2RpZnlfaGRyX3Jlc291cmNlKSArCi0J CQkgICAgc2l6ZW9mKHN0cnVjdCBtbHg1X21vZGlmaWNhdGlvbl9jbWQpICoKLQkJCSAgICAoTUxY NV9NQVhfTU9ESUZZX05VTSArIDEpXTsKLQl9IG1oZHJfZHVtbXk7Ci0Jc3RydWN0IG1seDVfZmxv d19kdl9tb2RpZnlfaGRyX3Jlc291cmNlICptaGRyX3JlcyA9ICZtaGRyX2R1bW15LnJlczsKLQlj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX2NvdW50ICpjb3VudCA9IE5VTEw7Ci0JY29uc3Qg c3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9hZ2UgKm5vbl9zaGFyZWRfYWdlID0gTlVMTDsKLQl1bmlv biBmbG93X2R2X2F0dHIgZmxvd19hdHRyID0geyAuYXR0ciA9IDAgfTsKLQl1aW50MzJfdCB0YWdf YmU7Ci0JdW5pb24gbWx4NV9mbG93X3RibF9rZXkgdGJsX2tleTsKLQl1aW50MzJfdCBtb2RpZnlf YWN0aW9uX3Bvc2l0aW9uID0gVUlOVDMyX01BWDsKLQl2b2lkICptYXRjaF9tYXNrID0gbWF0Y2hl ci5tYXNrLmJ1ZjsKKwl2b2lkICptYXRjaF9tYXNrID0gbWF0Y2hlci0+bWFzay5idWY7CiAJdm9p ZCAqbWF0Y2hfdmFsdWUgPSBkZXZfZmxvdy0+ZHYudmFsdWUuYnVmOwogCXVpbnQ4X3QgbmV4dF9w cm90b2NvbCA9IDB4ZmY7Ci0Jc3RydWN0IHJ0ZV92bGFuX2hkciB2bGFuID0geyAwIH07Ci0Jc3Ry dWN0IG1seDVfZmxvd19kdl9kZXN0X2FycmF5X3Jlc291cmNlIG1kZXN0X3JlczsKLQlzdHJ1Y3Qg bWx4NV9mbG93X2R2X3NhbXBsZV9yZXNvdXJjZSBzYW1wbGVfcmVzOwotCXZvaWQgKnNhbXBsZV9h Y3Rpb25zW01MWDVfRFZfTUFYX05VTUJFUl9PRl9BQ1RJT05TXSA9IHswfTsKLQljb25zdCBzdHJ1 Y3QgcnRlX2Zsb3dfYWN0aW9uX3NhbXBsZSAqc2FtcGxlID0gTlVMTDsKLQlzdHJ1Y3QgbWx4NV9m bG93X3N1Yl9hY3Rpb25zX2xpc3QgKnNhbXBsZV9hY3Q7Ci0JdWludDMyX3Qgc2FtcGxlX2FjdF9w b3MgPSBVSU5UMzJfTUFYOwotCXVpbnQzMl90IGFnZV9hY3RfcG9zID0gVUlOVDMyX01BWDsKLQl1 aW50MzJfdCBudW1fb2ZfZGVzdCA9IDA7Ci0JaW50IHRtcF9hY3Rpb25zX24gPSAwOwotCXVpbnQz Ml90IHRhYmxlOwotCWludCByZXQgPSAwOwotCWNvbnN0IHN0cnVjdCBtbHg1X2Zsb3dfdHVubmVs ICp0dW5uZWwgPSBOVUxMOwotCXN0cnVjdCBmbG93X2dycF9pbmZvIGdycF9pbmZvID0gewotCQku ZXh0ZXJuYWwgPSAhIWRldl9mbG93LT5leHRlcm5hbCwKLQkJLnRyYW5zZmVyID0gISFhdHRyLT50 cmFuc2ZlciwKLQkJLmZkYl9kZWZfcnVsZSA9ICEhcHJpdi0+ZmRiX2RlZl9ydWxlLAotCQkuc2tp cF9zY2FsZSA9IGRldl9mbG93LT5za2lwX3NjYWxlICYKLQkJCSgxIDw8IE1MWDVfU0NBTEVfRkxP V19HUk9VUF9CSVQpLAotCQkuc3RkX3RibF9maXggPSB0cnVlLAotCX07CisJdWludDE2X3QgcHJp b3JpdHkgPSAwOwogCWNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtICppbnRlZ3JpdHlfaXRlbXNb Ml0gPSB7TlVMTCwgTlVMTH07CiAJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKnR1bm5lbF9p dGVtID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSAqZ3JlX2l0ZW0gPSBOVUxM OworCWludCByZXQgPSAwOwogCi0JaWYgKCF3a3MpCi0JCXJldHVybiBydGVfZmxvd19lcnJvcl9z ZXQoZXJyb3IsIEVOT01FTSwKLQkJCQkJICBSVEVfRkxPV19FUlJPUl9UWVBFX1VOU1BFQ0lGSUVE LAotCQkJCQkgIE5VTEwsCi0JCQkJCSAgImZhaWxlZCB0byBwdXNoIGZsb3cgd29ya3NwYWNlIik7 Ci0JcnNzX2Rlc2MgPSAmd2tzLT5yc3NfZGVzYzsKLQltZW1zZXQoJm1kZXN0X3JlcywgMCwgc2l6 ZW9mKHN0cnVjdCBtbHg1X2Zsb3dfZHZfZGVzdF9hcnJheV9yZXNvdXJjZSkpOwotCW1lbXNldCgm c2FtcGxlX3JlcywgMCwgc2l6ZW9mKHN0cnVjdCBtbHg1X2Zsb3dfZHZfc2FtcGxlX3Jlc291cmNl KSk7Ci0JbWhkcl9yZXMtPmZ0X3R5cGUgPSBhdHRyLT5lZ3Jlc3MgPyBNTFg1RFZfRkxPV19UQUJM RV9UWVBFX05JQ19UWCA6Ci0JCQkJCSAgIE1MWDVEVl9GTE9XX1RBQkxFX1RZUEVfTklDX1JYOwot CS8qIHVwZGF0ZSBub3JtYWwgcGF0aCBhY3Rpb24gcmVzb3VyY2UgaW50byBsYXN0IGluZGV4IG9m IGFycmF5ICovCi0Jc2FtcGxlX2FjdCA9ICZtZGVzdF9yZXMuc2FtcGxlX2FjdFtNTFg1X01BWF9E RVNUX05VTSAtIDFdOwotCWlmIChpc190dW5uZWxfb2ZmbG9hZF9hY3RpdmUoZGV2KSkgewotCQlp ZiAoZGV2X2Zsb3ctPnR1bm5lbCkgewotCQkJUlRFX1ZFUklGWShkZXZfZmxvdy0+dG9mX3R5cGUg PT0KLQkJCQkgICBNTFg1X1RVTk5FTF9PRkZMT0FEX01JU1NfUlVMRSk7Ci0JCQl0dW5uZWwgPSBk ZXZfZmxvdy0+dHVubmVsOwotCQl9IGVsc2UgewotCQkJdHVubmVsID0gbWx4NV9nZXRfdG9mKGl0 ZW1zLCBhY3Rpb25zLAotCQkJCQkgICAgICAmZGV2X2Zsb3ctPnRvZl90eXBlKTsKLQkJCWRldl9m bG93LT50dW5uZWwgPSB0dW5uZWw7Ci0JCX0KLQkJZ3JwX2luZm8uc3RkX3RibF9maXggPSB0dW5u ZWxfdXNlX3N0YW5kYXJkX2F0dHJfZ3JvdXBfdHJhbnNsYXRlCi0JCQkJCShkZXYsIGF0dHIsIHR1 bm5lbCwgZGV2X2Zsb3ctPnRvZl90eXBlKTsKLQl9Ci0JbWhkcl9yZXMtPmZ0X3R5cGUgPSBhdHRy LT5lZ3Jlc3MgPyBNTFg1RFZfRkxPV19UQUJMRV9UWVBFX05JQ19UWCA6Ci0JCQkJCSAgIE1MWDVE Vl9GTE9XX1RBQkxFX1RZUEVfTklDX1JYOwotCXJldCA9IG1seDVfZmxvd19ncm91cF90b190YWJs ZShkZXYsIHR1bm5lbCwgYXR0ci0+Z3JvdXAsICZ0YWJsZSwKLQkJCQkgICAgICAgJmdycF9pbmZv LCBlcnJvcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlkZXZfZmxvdy0+ZHYuZ3JvdXAg PSB0YWJsZTsKLQlpZiAoYXR0ci0+dHJhbnNmZXIpCi0JCW1oZHJfcmVzLT5mdF90eXBlID0gTUxY NURWX0ZMT1dfVEFCTEVfVFlQRV9GREI7Ci0JLyogbnVtYmVyIG9mIGFjdGlvbnMgbXVzdCBiZSBz ZXQgdG8gMCBpbiBjYXNlIG9mIGRpcnR5IHN0YWNrLiAqLwotCW1oZHJfcmVzLT5hY3Rpb25zX251 bSA9IDA7Ci0JaWYgKGlzX2Zsb3dfdHVubmVsX21hdGNoX3J1bGUoZGV2X2Zsb3ctPnRvZl90eXBl KSkgewotCQkvKgotCQkgKiBkbyBub3QgYWRkIGRlY2FwIGFjdGlvbiBpZiBtYXRjaCBydWxlIGRy b3BzIHBhY2tldAotCQkgKiBIVyByZWplY3RzIHJ1bGVzIHdpdGggZGVjYXAgJiBkcm9wCi0JCSAq Ci0JCSAqIGlmIHR1bm5lbCBtYXRjaCBydWxlIHdhcyBpbnNlcnRlZCBiZWZvcmUgbWF0Y2hpbmcg dHVubmVsIHNldAotCQkgKiBydWxlIGZsb3cgdGFibGUgdXNlZCBpbiB0aGUgbWF0Y2ggcnVsZSBt dXN0IGJlIHJlZ2lzdGVyZWQuCi0JCSAqIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0 aGF0IGluIHRoZQotCQkgKiBmbG93X2R2X21hdGNoX3JlZ2lzdGVyKCkgYXQgdGhlIGZ1bmN0aW9u IGVuZC4KLQkJICovCi0JCWJvb2wgYWRkX2RlY2FwID0gdHJ1ZTsKLQkJY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbiAqcHRyID0gYWN0aW9uczsKLQotCQlmb3IgKDsgcHRyLT50eXBlICE9IFJU RV9GTE9XX0FDVElPTl9UWVBFX0VORDsgcHRyKyspIHsKLQkJCWlmIChwdHItPnR5cGUgPT0gUlRF X0ZMT1dfQUNUSU9OX1RZUEVfRFJPUCkgewotCQkJCWFkZF9kZWNhcCA9IGZhbHNlOwotCQkJCWJy ZWFrOwotCQkJfQotCQl9Ci0JCWlmIChhZGRfZGVjYXApIHsKLQkJCWlmIChmbG93X2R2X2NyZWF0 ZV9hY3Rpb25fbDJfZGVjYXAoZGV2LCBkZXZfZmxvdywKLQkJCQkJCQkgICBhdHRyLT50cmFuc2Zl ciwKLQkJCQkJCQkgICBlcnJvcikpCi0JCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JCQlkZXZfZmxv dy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQotCQkJCQlkZXZfZmxvdy0+ZHYuZW5jYXBfZGVj YXAtPmFjdGlvbjsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ0FQOwot CQl9Ci0JfQotCWZvciAoOyAhYWN0aW9uc19lbmQgOyBhY3Rpb25zKyspIHsKLQkJY29uc3Qgc3Ry dWN0IHJ0ZV9mbG93X2FjdGlvbl9xdWV1ZSAqcXVldWU7Ci0JCWNvbnN0IHN0cnVjdCBydGVfZmxv d19hY3Rpb25fcnNzICpyc3M7Ci0JCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlv biA9IGFjdGlvbnM7Ci0JCWNvbnN0IHVpbnQ4X3QgKnJzc19rZXk7Ci0JCXN0cnVjdCBtbHg1X2Zs b3dfdGJsX3Jlc291cmNlICp0Ymw7Ci0JCXN0cnVjdCBtbHg1X2Fzb19hZ2VfYWN0aW9uICphZ2Vf YWN0OwotCQlzdHJ1Y3QgbWx4NV9mbG93X2NvdW50ZXIgKmNudF9hY3Q7Ci0JCXVpbnQzMl90IHBv cnRfaWQgPSAwOwotCQlzdHJ1Y3QgbWx4NV9mbG93X2R2X3BvcnRfaWRfYWN0aW9uX3Jlc291cmNl IHBvcnRfaWRfcmVzb3VyY2U7Ci0JCWludCBhY3Rpb25fdHlwZSA9IGFjdGlvbnMtPnR5cGU7Ci0J CWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmZvdW5kX2FjdGlvbiA9IE5VTEw7Ci0JCXVp bnQzMl90IGp1bXBfZ3JvdXAgPSAwOwotCQl1aW50MzJfdCBvd25lcl9pZHg7Ci0JCXN0cnVjdCBt bHg1X2Fzb19jdF9hY3Rpb24gKmN0OworCWZvciAoOyBpdGVtcy0+dHlwZSAhPSBSVEVfRkxPV19J VEVNX1RZUEVfRU5EOyBpdGVtcysrKSB7CisJCWludCB0dW5uZWwgPSAhIShpdGVtX2ZsYWdzICYg TUxYNV9GTE9XX0xBWUVSX1RVTk5FTCk7CisJCWludCBpdGVtX3R5cGUgPSBpdGVtcy0+dHlwZTsK IAotCQlpZiAoIW1seDVfZmxvd19vc19hY3Rpb25fc3VwcG9ydGVkKGFjdGlvbl90eXBlKSkKKwkJ aWYgKCFtbHg1X2Zsb3dfb3NfaXRlbV9zdXBwb3J0ZWQoaXRlbV90eXBlKSkKIAkJCXJldHVybiBy dGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsCi0JCQkJCQkgIFJURV9GTE9XX0VSUk9S X1RZUEVfQUNUSU9OLAotCQkJCQkJICBhY3Rpb25zLAotCQkJCQkJICAiYWN0aW9uIG5vdCBzdXBw b3J0ZWQiKTsKLQkJc3dpdGNoIChhY3Rpb25fdHlwZSkgewotCQljYXNlIE1MWDVfUlRFX0ZMT1df QUNUSU9OX1RZUEVfVFVOTkVMX1NFVDoKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNU SU9OX1RVTk5FTF9TRVQ7CisJCQkJCQkgIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTSwKKwkJCQkJ CSAgTlVMTCwgIml0ZW0gbm90IHN1cHBvcnRlZCIpOworCQlzd2l0Y2ggKGl0ZW1fdHlwZSkgewor CQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9FU1A6CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVt X2VzcChtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJCSAgIGl0ZW1zLCB0dW5uZWwpOwor CQkJcHJpb3JpdHkgPSBNTFg1X1BSSU9SSVRZX01BUF9MNDsKKwkJCWxhc3RfaXRlbSA9IE1MWDVf RkxPV19JVEVNX0VTUDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1ZP SUQ6CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1BPUlRfSUQ6CisJCQlmbG93X2R2X3RyYW5z bGF0ZV9pdGVtX3BvcnRfaWQKKwkJCQkoZGV2LCBtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwgaXRl bXMsIGF0dHIpOworCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0lURU1fUE9SVF9JRDsKIAkJCWJy ZWFrOwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1BPUlRfSUQ6Ci0JCWNhc2UgUlRFX0ZM T1dfQUNUSU9OX1RZUEVfUkVQUkVTRU5URURfUE9SVDoKLQkJCWlmIChmbG93X2R2X3RyYW5zbGF0 ZV9hY3Rpb25fcG9ydF9pZChkZXYsIGFjdGlvbiwKLQkJCQkJCQkgICAgICZwb3J0X2lkLCBlcnJv cikpCi0JCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JCQlwb3J0X2lkX3Jlc291cmNlLnBvcnRfaWQg PSBwb3J0X2lkOwotCQkJTUxYNV9BU1NFUlQoIWhhbmRsZS0+cml4X3BvcnRfaWRfYWN0aW9uKTsK LQkJCWlmIChmbG93X2R2X3BvcnRfaWRfYWN0aW9uX3Jlc291cmNlX3JlZ2lzdGVyCi0JCQkgICAg KGRldiwgJnBvcnRfaWRfcmVzb3VyY2UsIGRldl9mbG93LCBlcnJvcikpCi0JCQkJcmV0dXJuIC1y dGVfZXJybm87Ci0JCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQotCQkJCQlk ZXZfZmxvdy0+ZHYucG9ydF9pZF9hY3Rpb24tPmFjdGlvbjsKLQkJCWFjdGlvbl9mbGFncyB8PSBN TFg1X0ZMT1dfQUNUSU9OX1BPUlRfSUQ7Ci0JCQlkZXZfZmxvdy0+aGFuZGxlLT5mYXRlX2FjdGlv biA9IE1MWDVfRkxPV19GQVRFX1BPUlRfSUQ7Ci0JCQlzYW1wbGVfYWN0LT5hY3Rpb25fZmxhZ3Mg fD0gTUxYNV9GTE9XX0FDVElPTl9QT1JUX0lEOwotCQkJbnVtX29mX2Rlc3QrKzsKKwkJY2FzZSBS VEVfRkxPV19JVEVNX1RZUEVfUkVQUkVTRU5URURfUE9SVDoKKwkJCWZsb3dfZHZfdHJhbnNsYXRl X2l0ZW1fcmVwcmVzZW50ZWRfcG9ydAorCQkJCShkZXYsIG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVl LCBpdGVtcywgYXR0cik7CisJCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9SRVBSRVNFTlRF RF9QT1JUOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfRkxBRzoKLQkJ CWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0ZMQUc7Ci0JCQl3a3MtPm1hcmsgPSAx OwotCQkJaWYgKGRldl9jb25mLT5kdl94bWV0YV9lbiAhPSBNTFg1X1hNRVRBX01PREVfTEVHQUNZ KSB7Ci0JCQkJc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrIG1hcmsgPSB7Ci0JCQkJCS5pZCA9 IE1MWDVfRkxPV19NQVJLX0RFRkFVTFQsCi0JCQkJfTsKLQotCQkJCWlmIChmbG93X2R2X2NvbnZl cnRfYWN0aW9uX21hcmsoZGV2LCAmbWFyaywKLQkJCQkJCQkJbWhkcl9yZXMsCi0JCQkJCQkJCWVy cm9yKSkKLQkJCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVf RkxPV19BQ1RJT05fTUFSS19FWFQ7Ci0JCQkJYnJlYWs7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9U WVBFX0VUSDoKKwkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZXRoKG1hdGNoX21hc2ssIG1hdGNo X3ZhbHVlLAorCQkJCQkJICAgaXRlbXMsIHR1bm5lbCwKKwkJCQkJCSAgIGRldl9mbG93LT5kdi5n cm91cCk7CisJCQlwcmlvcml0eSA9IGRldl9mbG93LT5hY3RfZmxhZ3MgJgorCQkJCQlNTFg1X0ZM T1dfQUNUSU9OX0RFRkFVTFRfTUlTUyAmJgorCQkJCQkhZGV2X2Zsb3ctPmV4dGVybmFsID8KKwkJ CQkJTUxYNV9QUklPUklUWV9NQVBfTDMgOgorCQkJCQlNTFg1X1BSSU9SSVRZX01BUF9MMjsKKwkJ CWxhc3RfaXRlbSA9IHR1bm5lbCA/IE1MWDVfRkxPV19MQVlFUl9JTk5FUl9MMiA6CisJCQkJCSAg ICAgTUxYNV9GTE9XX0xBWUVSX09VVEVSX0wyOworCQkJYnJlYWs7CisJCWNhc2UgUlRFX0ZMT1df SVRFTV9UWVBFX1ZMQU46CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX3ZsYW4oZGV2X2Zsb3cs CisJCQkJCQkgICAgbWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCisJCQkJCQkgICAgaXRlbXMsIHR1 bm5lbCwKKwkJCQkJCSAgICBkZXZfZmxvdy0+ZHYuZ3JvdXApOworCQkJcHJpb3JpdHkgPSBNTFg1 X1BSSU9SSVRZX01BUF9MMjsKKwkJCWxhc3RfaXRlbSA9IHR1bm5lbCA/IChNTFg1X0ZMT1dfTEFZ RVJfSU5ORVJfTDIgfAorCQkJCQkgICAgICBNTFg1X0ZMT1dfTEFZRVJfSU5ORVJfVkxBTikgOgor CQkJCQkgICAgIChNTFg1X0ZMT1dfTEFZRVJfT1VURVJfTDIgfAorCQkJCQkgICAgICBNTFg1X0ZM T1dfTEFZRVJfT1VURVJfVkxBTik7CisJCQlicmVhazsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZ UEVfSVBWNDoKKwkJCW1seDVfZmxvd190dW5uZWxfaXBfY2hlY2soaXRlbXMsIG5leHRfcHJvdG9j b2wsCisJCQkJCQkgICZpdGVtX2ZsYWdzLCAmdHVubmVsKTsKKwkJCWZsb3dfZHZfdHJhbnNsYXRl X2l0ZW1faXB2NChtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJCSAgICBpdGVtcywgdHVu bmVsLAorCQkJCQkJICAgIGRldl9mbG93LT5kdi5ncm91cCk7CisJCQlwcmlvcml0eSA9IE1MWDVf UFJJT1JJVFlfTUFQX0wzOworCQkJbGFzdF9pdGVtID0gdHVubmVsID8gTUxYNV9GTE9XX0xBWUVS X0lOTkVSX0wzX0lQVjQgOgorCQkJCQkgICAgIE1MWDVfRkxPV19MQVlFUl9PVVRFUl9MM19JUFY0 OworCQkJaWYgKGl0ZW1zLT5tYXNrICE9IE5VTEwgJiYKKwkJCSAgICAoKGNvbnN0IHN0cnVjdCBy dGVfZmxvd19pdGVtX2lwdjQgKikKKwkJCSAgICAgaXRlbXMtPm1hc2spLT5oZHIubmV4dF9wcm90 b19pZCkgeworCQkJCW5leHRfcHJvdG9jb2wgPQorCQkJCQkoKGNvbnN0IHN0cnVjdCBydGVfZmxv d19pdGVtX2lwdjQgKikKKwkJCQkJIChpdGVtcy0+c3BlYykpLT5oZHIubmV4dF9wcm90b19pZDsK KwkJCQluZXh0X3Byb3RvY29sICY9CisJCQkJCSgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW1f aXB2NCAqKQorCQkJCQkgKGl0ZW1zLT5tYXNrKSktPmhkci5uZXh0X3Byb3RvX2lkOworCQkJfSBl bHNlIHsKKwkJCQkvKiBSZXNldCBmb3IgaW5uZXIgbGF5ZXIuICovCisJCQkJbmV4dF9wcm90b2Nv bCA9IDB4ZmY7CiAJCQl9Ci0JCQl0YWdfYmUgPSBtbHg1X2Zsb3dfbWFya19zZXQoTUxYNV9GTE9X X01BUktfREVGQVVMVCk7Ci0JCQkvKgotCQkJICogT25seSBvbmUgRkxBRyBvciBNQVJLIGlzIHN1 cHBvcnRlZCBwZXIgZGV2aWNlIGZsb3cKLQkJCSAqIHJpZ2h0IG5vdy4gU28gdGhlIHBvaW50ZXIg dG8gdGhlIHRhZyByZXNvdXJjZSBtdXN0IGJlCi0JCQkgKiB6ZXJvIGJlZm9yZSB0aGUgcmVnaXN0 ZXIgcHJvY2Vzcy4KLQkJCSAqLwotCQkJTUxYNV9BU1NFUlQoIWhhbmRsZS0+ZHZoLnJpeF90YWcp OwotCQkJaWYgKGZsb3dfZHZfdGFnX3Jlc291cmNlX3JlZ2lzdGVyKGRldiwgdGFnX2JlLAotCQkJ CQkJCSAgZGV2X2Zsb3csIGVycm9yKSkKLQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCU1MWDVf QVNTRVJUKGRldl9mbG93LT5kdi50YWdfcmVzb3VyY2UpOwotCQkJZGV2X2Zsb3ctPmR2LmFjdGlv bnNbYWN0aW9uc19uKytdID0KLQkJCQkJZGV2X2Zsb3ctPmR2LnRhZ19yZXNvdXJjZS0+YWN0aW9u OwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUFSSzoKLQkJCWFjdGlv bl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX01BUks7Ci0JCQl3a3MtPm1hcmsgPSAxOwotCQkJ aWYgKGRldl9jb25mLT5kdl94bWV0YV9lbiAhPSBNTFg1X1hNRVRBX01PREVfTEVHQUNZKSB7Ci0J CQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrICptYXJrID0KLQkJCQkJKGNvbnN0 IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fbWFyayAqKQotCQkJCQkJYWN0aW9ucy0+Y29uZjsKLQot CQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21hcmsoZGV2LCBtYXJrLAotCQkJCQkJCQlt aGRyX3JlcywKLQkJCQkJCQkJZXJyb3IpKQotCQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCQlh Y3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9NQVJLX0VYVDsKLQkJCQlicmVhazsKKwkJ Y2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfSVBWNjoKKwkJCW1seDVfZmxvd190dW5uZWxfaXBfY2hl Y2soaXRlbXMsIG5leHRfcHJvdG9jb2wsCisJCQkJCQkgICZpdGVtX2ZsYWdzLCAmdHVubmVsKTsK KwkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1faXB2NihtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwK KwkJCQkJCSAgICBpdGVtcywgdHVubmVsLAorCQkJCQkJICAgIGRldl9mbG93LT5kdi5ncm91cCk7 CisJCQlwcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlfTUFQX0wzOworCQkJbGFzdF9pdGVtID0gdHVu bmVsID8gTUxYNV9GTE9XX0xBWUVSX0lOTkVSX0wzX0lQVjYgOgorCQkJCQkgICAgIE1MWDVfRkxP V19MQVlFUl9PVVRFUl9MM19JUFY2OworCQkJaWYgKGl0ZW1zLT5tYXNrICE9IE5VTEwgJiYKKwkJ CSAgICAoKGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjYgKikKKwkJCSAgICAgaXRlbXMt Pm1hc2spLT5oZHIucHJvdG8pIHsKKwkJCQluZXh0X3Byb3RvY29sID0KKwkJCQkJKChjb25zdCBz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2ICopCisJCQkJCSBpdGVtcy0+c3BlYyktPmhkci5wcm90 bzsKKwkJCQluZXh0X3Byb3RvY29sICY9CisJCQkJCSgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0 ZW1faXB2NiAqKQorCQkJCQkgaXRlbXMtPm1hc2spLT5oZHIucHJvdG87CisJCQl9IGVsc2Ugewor CQkJCS8qIFJlc2V0IGZvciBpbm5lciBsYXllci4gKi8KKwkJCQluZXh0X3Byb3RvY29sID0gMHhm ZjsKIAkJCX0KLQkJCS8qIEZhbGwtdGhyb3VnaCAqLwotCQljYXNlIE1MWDVfUlRFX0ZMT1dfQUNU SU9OX1RZUEVfTUFSSzoKLQkJCS8qIExlZ2FjeSAobm9uLWV4dGVuc2l2ZSkgTUFSSyBhY3Rpb24u ICovCi0JCQl0YWdfYmUgPSBtbHg1X2Zsb3dfbWFya19zZXQKLQkJCSAgICAgICgoKGNvbnN0IHN0 cnVjdCBydGVfZmxvd19hY3Rpb25fbWFyayAqKQotCQkJICAgICAgIChhY3Rpb25zLT5jb25mKSkt PmlkKTsKLQkJCU1MWDVfQVNTRVJUKCFoYW5kbGUtPmR2aC5yaXhfdGFnKTsKLQkJCWlmIChmbG93 X2R2X3RhZ19yZXNvdXJjZV9yZWdpc3RlcihkZXYsIHRhZ19iZSwKLQkJCQkJCQkgIGRldl9mbG93 LCBlcnJvcikpCi0JCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JCQlNTFg1X0FTU0VSVChkZXZfZmxv dy0+ZHYudGFnX3Jlc291cmNlKTsKLQkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisr XSA9Ci0JCQkJCWRldl9mbG93LT5kdi50YWdfcmVzb3VyY2UtPmFjdGlvbjsKIAkJCWJyZWFrOwot CQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9NRVRBOgotCQkJaWYgKGZsb3dfZHZfY29u dmVydF9hY3Rpb25fc2V0X21ldGEKLQkJCQkoZGV2LCBtaGRyX3JlcywgYXR0ciwKLQkJCQkgKGNv bnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fc2V0X21ldGEgKikKLQkJCQkgIGFjdGlvbnMtPmNv bmYsIGVycm9yKSkKLQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBN TFg1X0ZMT1dfQUNUSU9OX1NFVF9NRVRBOworCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9JUFY2 X0ZSQUdfRVhUOgorCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9pcHY2X2ZyYWdfZXh0KG1hdGNo X21hc2ssCisJCQkJCQkJICAgICBtYXRjaF92YWx1ZSwKKwkJCQkJCQkgICAgIGl0ZW1zLCB0dW5u ZWwpOworCQkJbGFzdF9pdGVtID0gdHVubmVsID8KKwkJCQkJTUxYNV9GTE9XX0xBWUVSX0lOTkVS X0wzX0lQVjZfRlJBR19FWFQgOgorCQkJCQlNTFg1X0ZMT1dfTEFZRVJfT1VURVJfTDNfSVBWNl9G UkFHX0VYVDsKKwkJCWlmIChpdGVtcy0+bWFzayAhPSBOVUxMICYmCisJCQkgICAgKChjb25zdCBz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2X2ZyYWdfZXh0ICopCisJCQkgICAgIGl0ZW1zLT5tYXNr KS0+aGRyLm5leHRfaGVhZGVyKSB7CisJCQkJbmV4dF9wcm90b2NvbCA9CisJCQkJKChjb25zdCBz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2X2ZyYWdfZXh0ICopCisJCQkJIGl0ZW1zLT5zcGVjKS0+ aGRyLm5leHRfaGVhZGVyOworCQkJCW5leHRfcHJvdG9jb2wgJj0KKwkJCQkoKGNvbnN0IHN0cnVj dCBydGVfZmxvd19pdGVtX2lwdjZfZnJhZ19leHQgKikKKwkJCQkgaXRlbXMtPm1hc2spLT5oZHIu bmV4dF9oZWFkZXI7CisJCQl9IGVsc2UgeworCQkJCS8qIFJlc2V0IGZvciBpbm5lciBsYXllci4g Ki8KKwkJCQluZXh0X3Byb3RvY29sID0gMHhmZjsKKwkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFJU RV9GTE9XX0FDVElPTl9UWVBFX1NFVF9UQUc6Ci0JCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlv bl9zZXRfdGFnCi0JCQkJKGRldiwgbWhkcl9yZXMsCi0JCQkJIChjb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfYWN0aW9uX3NldF90YWcgKikKLQkJCQkgIGFjdGlvbnMtPmNvbmYsIGVycm9yKSkKLQkJCQly ZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX1NF VF9UQUc7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1RDUDoKKwkJCWZsb3dfZHZfdHJhbnNs YXRlX2l0ZW1fdGNwKG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAorCQkJCQkJICAgaXRlbXMsIHR1 bm5lbCk7CisJCQlwcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlfTUFQX0w0OworCQkJbGFzdF9pdGVt ID0gdHVubmVsID8gTUxYNV9GTE9XX0xBWUVSX0lOTkVSX0w0X1RDUCA6CisJCQkJCSAgICAgTUxY NV9GTE9XX0xBWUVSX09VVEVSX0w0X1RDUDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FD VElPTl9UWVBFX0RST1A6Ci0JCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9EUk9Q OwotCQkJZGV2X2Zsb3ctPmhhbmRsZS0+ZmF0ZV9hY3Rpb24gPSBNTFg1X0ZMT1dfRkFURV9EUk9Q OworCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9VRFA6CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9p dGVtX3VkcChtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJCSAgIGl0ZW1zLCB0dW5uZWwp OworCQkJcHJpb3JpdHkgPSBNTFg1X1BSSU9SSVRZX01BUF9MNDsKKwkJCWxhc3RfaXRlbSA9IHR1 bm5lbCA/IE1MWDVfRkxPV19MQVlFUl9JTk5FUl9MNF9VRFAgOgorCQkJCQkgICAgIE1MWDVfRkxP V19MQVlFUl9PVVRFUl9MNF9VRFA7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19BQ1RJT05f VFlQRV9RVUVVRToKLQkJCXF1ZXVlID0gYWN0aW9ucy0+Y29uZjsKLQkJCXJzc19kZXNjLT5xdWV1 ZV9udW0gPSAxOwotCQkJcnNzX2Rlc2MtPnF1ZXVlWzBdID0gcXVldWUtPmluZGV4OwotCQkJYWN0 aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fUVVFVUU7Ci0JCQlkZXZfZmxvdy0+aGFuZGxl LT5mYXRlX2FjdGlvbiA9IE1MWDVfRkxPV19GQVRFX1FVRVVFOwotCQkJc2FtcGxlX2FjdC0+YWN0 aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fUVVFVUU7Ci0JCQludW1fb2ZfZGVzdCsrOwor CQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9HUkU6CisJCQlwcmlvcml0eSA9IE1MWDVfVFVOTkVM X1BSSU9fR0VUKHJzc19kZXNjKTsKKwkJCWxhc3RfaXRlbSA9IE1MWDVfRkxPV19MQVlFUl9HUkU7 CisJCQl0dW5uZWxfaXRlbSA9IGl0ZW1zOworCQkJZ3JlX2l0ZW0gPSBpdGVtczsKIAkJCWJyZWFr OwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1JTUzoKLQkJCXJzcyA9IGFjdGlvbnMtPmNv bmY7Ci0JCQltZW1jcHkocnNzX2Rlc2MtPnF1ZXVlLCByc3MtPnF1ZXVlLAotCQkJICAgICAgIHJz cy0+cXVldWVfbnVtICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCQlyc3NfZGVzYy0+cXVldWVfbnVt ID0gcnNzLT5xdWV1ZV9udW07Ci0JCQkvKiBOVUxMIFJTUyBrZXkgaW5kaWNhdGVzIGRlZmF1bHQg UlNTIGtleS4gKi8KLQkJCXJzc19rZXkgPSAhcnNzLT5rZXkgPyByc3NfaGFzaF9kZWZhdWx0X2tl eSA6IHJzcy0+a2V5OwotCQkJbWVtY3B5KHJzc19kZXNjLT5rZXksIHJzc19rZXksIE1MWDVfUlNT X0hBU0hfS0VZX0xFTik7Ci0JCQkvKgotCQkJICogcnNzLT5sZXZlbCBhbmQgcnNzLnR5cGVzIHNo b3VsZCBiZSBzZXQgaW4gYWR2YW5jZQotCQkJICogd2hlbiBleHBhbmRpbmcgaXRlbXMgZm9yIFJT Uy4KLQkJCSAqLwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fUlNTOwotCQkJ ZGV2X2Zsb3ctPmhhbmRsZS0+ZmF0ZV9hY3Rpb24gPSByc3NfZGVzYy0+c2hhcmVkX3JzcyA/Ci0J CQkJTUxYNV9GTE9XX0ZBVEVfU0hBUkVEX1JTUyA6Ci0JCQkJTUxYNV9GTE9XX0ZBVEVfUVVFVUU7 CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0dSRV9LRVk6CisJCQlmbG93X2R2X3RyYW5zbGF0 ZV9pdGVtX2dyZV9rZXkobWF0Y2hfbWFzaywKKwkJCQkJCSAgICAgICBtYXRjaF92YWx1ZSwgaXRl bXMpOworCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0dSRV9LRVk7CiAJCQlicmVhazsK LQkJY2FzZSBNTFg1X1JURV9GTE9XX0FDVElPTl9UWVBFX0FHRToKLQkJCW93bmVyX2lkeCA9ICh1 aW50MzJfdCkodWludHB0cl90KWFjdGlvbi0+Y29uZjsKLQkJCWFnZV9hY3QgPSBmbG93X2Fzb19h Z2VfZ2V0X2J5X2lkeChkZXYsIG93bmVyX2lkeCk7Ci0JCQlpZiAoZmxvdy0+YWdlID09IDApIHsK LQkJCQlmbG93LT5hZ2UgPSBvd25lcl9pZHg7Ci0JCQkJX19hdG9taWNfZmV0Y2hfYWRkKCZhZ2Vf YWN0LT5yZWZjbnQsIDEsCi0JCQkJCQkgICBfX0FUT01JQ19SRUxBWEVEKTsKLQkJCX0KLQkJCWFn ZV9hY3RfcG9zID0gYWN0aW9uc19uKys7Ci0JCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FD VElPTl9BR0U7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0dSRV9PUFRJT046CisJCQlwcmlv cml0eSA9IE1MWDVfVFVOTkVMX1BSSU9fR0VUKHJzc19kZXNjKTsKKwkJCWxhc3RfaXRlbSA9IE1M WDVfRkxPV19MQVlFUl9HUkU7CisJCQl0dW5uZWxfaXRlbSA9IGl0ZW1zOwogCQkJYnJlYWs7Ci0J CWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfQUdFOgotCQkJbm9uX3NoYXJlZF9hZ2UgPSBhY3Rp b24tPmNvbmY7Ci0JCQlhZ2VfYWN0X3BvcyA9IGFjdGlvbnNfbisrOwotCQkJYWN0aW9uX2ZsYWdz IHw9IE1MWDVfRkxPV19BQ1RJT05fQUdFOworCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9OVkdS RToKKwkJCXByaW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOworCQkJbGFz dF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0dSRTsKKwkJCXR1bm5lbF9pdGVtID0gaXRlbXM7CiAJ CQlicmVhazsKLQkJY2FzZSBNTFg1X1JURV9GTE9XX0FDVElPTl9UWVBFX0NPVU5UOgotCQkJb3du ZXJfaWR4ID0gKHVpbnQzMl90KSh1aW50cHRyX3QpYWN0aW9uLT5jb25mOwotCQkJY250X2FjdCA9 IGZsb3dfZHZfY291bnRlcl9nZXRfYnlfaWR4KGRldiwgb3duZXJfaWR4LAotCQkJCQkJCSAgICAg TlVMTCk7Ci0JCQlNTFg1X0FTU0VSVChjbnRfYWN0ICE9IE5VTEwpOwotCQkJLyoqCi0JCQkgKiBX aGVuIGNyZWF0aW5nIG1ldGVyIGRyb3AgZmxvdyBpbiBkcm9wIHRhYmxlLCB0aGUKLQkJCSAqIGNv dW50ZXIgc2hvdWxkIG5vdCBvdmVyd3JpdGUgdGhlIHJ0ZSBmbG93IGNvdW50ZXIuCi0JCQkgKi8K LQkJCWlmIChhdHRyLT5ncm91cCA9PSBNTFg1X0ZMT1dfVEFCTEVfTEVWRUxfTUVURVIgJiYKLQkJ CSAgICBkZXZfZmxvdy0+ZHYudGFibGVfaWQgPT0gTUxYNV9NVFJfVEFCTEVfSURfRFJPUCkgewot CQkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9Ci0JCQkJCQkJY250X2FjdC0+ YWN0aW9uOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoZmxvdy0+Y291bnRlciA9PSAwKSB7Ci0JCQkJ CWZsb3ctPmNvdW50ZXIgPSBvd25lcl9pZHg7Ci0JCQkJCV9fYXRvbWljX2ZldGNoX2FkZAotCQkJ CQkJKCZjbnRfYWN0LT5zaGFyZWRfaW5mby5yZWZjbnQsCi0JCQkJCQkgMSwgX19BVE9NSUNfUkVM QVhFRCk7Ci0JCQkJfQotCQkJCS8qIFNhdmUgaW5mb3JtYXRpb24gZmlyc3QsIHdpbGwgYXBwbHkg bGF0ZXIuICovCi0JCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fQ09VTlQ7Ci0J CQl9CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1ZYTEFOOgorCQkJZmxvd19kdl90cmFuc2xh dGVfaXRlbV92eGxhbihkZXYsIGF0dHIsCisJCQkJCQkgICAgIG1hdGNoX21hc2ssIG1hdGNoX3Zh bHVlLAorCQkJCQkJICAgICBpdGVtcywgdHVubmVsKTsKKwkJCXByaW9yaXR5ID0gTUxYNV9UVU5O RUxfUFJJT19HRVQocnNzX2Rlc2MpOworCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX1ZY TEFOOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfQ09VTlQ6Ci0JCQlp ZiAoIXByaXYtPnNoLT5jZGV2LT5jb25maWcuZGV2eCkgewotCQkJCXJldHVybiBydGVfZmxvd19l cnJvcl9zZXQKLQkJCQkJICAgICAgKGVycm9yLCBFTk9UU1VQLAotCQkJCQkgICAgICAgUlRFX0ZM T1dfRVJST1JfVFlQRV9VTlNQRUNJRklFRCwKLQkJCQkJICAgICAgIE5VTEwsCi0JCQkJCSAgICAg ICAiY291bnQgYWN0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKLQkJCX0KLQkJCS8qIFNhdmUgaW5mb3Jt YXRpb24gZmlyc3QsIHdpbGwgYXBwbHkgbGF0ZXIuICovCi0JCQljb3VudCA9IGFjdGlvbi0+Y29u ZjsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0NPVU5UOworCQljYXNlIFJU RV9GTE9XX0lURU1fVFlQRV9WWExBTl9HUEU6CisJCQlwcmlvcml0eSA9IE1MWDVfVFVOTkVMX1BS SU9fR0VUKHJzc19kZXNjKTsKKwkJCWxhc3RfaXRlbSA9IE1MWDVfRkxPV19MQVlFUl9WWExBTl9H UEU7CisJCQl0dW5uZWxfaXRlbSA9IGl0ZW1zOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1df QUNUSU9OX1RZUEVfT0ZfUE9QX1ZMQU46Ci0JCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25z X24rK10gPQotCQkJCQkJcHJpdi0+c2gtPnBvcF92bGFuX2FjdGlvbjsKLQkJCWFjdGlvbl9mbGFn cyB8PSBNTFg1X0ZMT1dfQUNUSU9OX09GX1BPUF9WTEFOOworCQljYXNlIFJURV9GTE9XX0lURU1f VFlQRV9HRU5FVkU6CisJCQlwcmlvcml0eSA9IE1MWDVfVFVOTkVMX1BSSU9fR0VUKHJzc19kZXNj KTsKKwkJCWxhc3RfaXRlbSA9IE1MWDVfRkxPV19MQVlFUl9HRU5FVkU7CisJCQl0dW5uZWxfaXRl bSA9IGl0ZW1zOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfT0ZfUFVT SF9WTEFOOgotCQkJaWYgKCEoYWN0aW9uX2ZsYWdzICYKLQkJCSAgICAgIE1MWDVfRkxPV19BQ1RJ T05fT0ZfU0VUX1ZMQU5fVklEKSkKLQkJCQlmbG93X2Rldl9nZXRfdmxhbl9pbmZvX2Zyb21faXRl bXMoaXRlbXMsICZ2bGFuKTsKLQkJCXZsYW4uZXRoX3Byb3RvID0gcnRlX2JlX3RvX2NwdV8xNgot CQkJICAgICAoKCgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9vZl9wdXNoX3ZsYW4gKikK LQkJCQkJCSAgIGFjdGlvbnMtPmNvbmYpLT5ldGhlcnR5cGUpKTsKLQkJCWZvdW5kX2FjdGlvbiA9 IG1seDVfZmxvd19maW5kX2FjdGlvbgotCQkJCQkoYWN0aW9ucyArIDEsCi0JCQkJCSBSVEVfRkxP V19BQ1RJT05fVFlQRV9PRl9TRVRfVkxBTl9WSUQpOwotCQkJaWYgKGZvdW5kX2FjdGlvbikKLQkJ CQltbHg1X3VwZGF0ZV92bGFuX3ZpZF9wY3AoZm91bmRfYWN0aW9uLCAmdmxhbik7Ci0JCQlmb3Vu ZF9hY3Rpb24gPSBtbHg1X2Zsb3dfZmluZF9hY3Rpb24KLQkJCQkJKGFjdGlvbnMgKyAxLAotCQkJ CQkgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfT0ZfU0VUX1ZMQU5fUENQKTsKLQkJCWlmIChmb3VuZF9h Y3Rpb24pCi0JCQkJbWx4NV91cGRhdGVfdmxhbl92aWRfcGNwKGZvdW5kX2FjdGlvbiwgJnZsYW4p OwotCQkJaWYgKGZsb3dfZHZfY3JlYXRlX2FjdGlvbl9wdXNoX3ZsYW4KLQkJCQkJICAgIChkZXYs IGF0dHIsICZ2bGFuLCBkZXZfZmxvdywgZXJyb3IpKQotCQkJCXJldHVybiAtcnRlX2Vycm5vOwot CQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9uc19uKytdID0KLQkJCQkJZGV2X2Zsb3ctPmR2 LnB1c2hfdmxhbl9yZXMtPmFjdGlvbjsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNU SU9OX09GX1BVU0hfVkxBTjsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfR0VORVZFX09QVDoK KwkJCXJldCA9IGZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ2VuZXZlX29wdChkZXYsIG1hdGNoX21h c2ssCisJCQkJCQkJICBtYXRjaF92YWx1ZSwKKwkJCQkJCQkgIGl0ZW1zLCBlcnJvcik7CisJCQlp ZiAocmV0KQorCQkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIC1yZXQsCisJCQkJ CVJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTSwgTlVMTCwKKwkJCQkJImNhbm5vdCBjcmVhdGUgR0VO RVZFIFRMViBvcHRpb24iKTsKKwkJCWZsb3ctPmdlbmV2ZV90bHZfb3B0aW9uID0gMTsKKwkJCWxh c3RfaXRlbSA9IE1MWDVfRkxPV19MQVlFUl9HRU5FVkVfT1BUOwogCQkJYnJlYWs7Ci0JCWNhc2Ug UlRFX0ZMT1dfQUNUSU9OX1RZUEVfT0ZfU0VUX1ZMQU5fUENQOgotCQkJLyogb2Zfdmxhbl9wdXNo IGFjdGlvbiBoYW5kbGVkIHRoaXMgYWN0aW9uICovCi0JCQlNTFg1X0FTU0VSVChhY3Rpb25fZmxh Z3MgJgotCQkJCSAgICBNTFg1X0ZMT1dfQUNUSU9OX09GX1BVU0hfVkxBTik7CisJCWNhc2UgUlRF X0ZMT1dfSVRFTV9UWVBFX01QTFM6CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX21wbHMobWF0 Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCisJCQkJCQkgICAgaXRlbXMsIGxhc3RfaXRlbSwgdHVubmVs KTsKKwkJCXByaW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOworCQkJbGFz dF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX01QTFM7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxP V19BQ1RJT05fVFlQRV9PRl9TRVRfVkxBTl9WSUQ6Ci0JCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxY NV9GTE9XX0FDVElPTl9PRl9QVVNIX1ZMQU4pCi0JCQkJYnJlYWs7Ci0JCQlmbG93X2Rldl9nZXRf dmxhbl9pbmZvX2Zyb21faXRlbXMoaXRlbXMsICZ2bGFuKTsKLQkJCW1seDVfdXBkYXRlX3ZsYW5f dmlkX3BjcChhY3Rpb25zLCAmdmxhbik7Ci0JCQkvKiBJZiBubyBWTEFOIHB1c2ggLSB0aGlzIGlz IGEgbW9kaWZ5IGhlYWRlciBhY3Rpb24gKi8KLQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9u X21vZGlmeV92bGFuX3ZpZAotCQkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCi0JCQkJ cmV0dXJuIC1ydGVfZXJybm87Ci0JCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9P Rl9TRVRfVkxBTl9WSUQ7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX01BUks6CisJCQlmbG93 X2R2X3RyYW5zbGF0ZV9pdGVtX21hcmsoZGV2LCBtYXRjaF9tYXNrLAorCQkJCQkJICAgIG1hdGNo X3ZhbHVlLCBpdGVtcyk7CisJCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9NQVJLOwogCQkJ YnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfVlhMQU5fRU5DQVA6Ci0JCWNhc2Ug UlRFX0ZMT1dfQUNUSU9OX1RZUEVfTlZHUkVfRU5DQVA6Ci0JCQlpZiAoZmxvd19kdl9jcmVhdGVf YWN0aW9uX2wyX2VuY2FwKGRldiwgYWN0aW9ucywKLQkJCQkJCQkgICBkZXZfZmxvdywKLQkJCQkJ CQkgICBhdHRyLT50cmFuc2ZlciwKLQkJCQkJCQkgICBlcnJvcikpCi0JCQkJcmV0dXJuIC1ydGVf ZXJybm87Ci0JCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQotCQkJCQlkZXZf Zmxvdy0+ZHYuZW5jYXBfZGVjYXAtPmFjdGlvbjsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZM T1dfQUNUSU9OX0VOQ0FQOwotCQkJaWYgKGFjdGlvbl9mbGFncyAmIE1MWDVfRkxPV19BQ1RJT05f U0FNUExFKQotCQkJCXNhbXBsZV9hY3QtPmFjdGlvbl9mbGFncyB8PQotCQkJCQkJCU1MWDVfRkxP V19BQ1RJT05fRU5DQVA7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX01FVEE6CisJCQlmbG93 X2R2X3RyYW5zbGF0ZV9pdGVtX21ldGEoZGV2LCBtYXRjaF9tYXNrLAorCQkJCQkJICAgIG1hdGNo X3ZhbHVlLCBhdHRyLCBpdGVtcyk7CisJCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9NRVRB REFUQTsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1ZYTEFOX0RFQ0FQ OgotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX05WR1JFX0RFQ0FQOgotCQkJaWYgKGZsb3df ZHZfY3JlYXRlX2FjdGlvbl9sMl9kZWNhcChkZXYsIGRldl9mbG93LAotCQkJCQkJCSAgIGF0dHIt PnRyYW5zZmVyLAotCQkJCQkJCSAgIGVycm9yKSkKLQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKLQkJ CWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9Ci0JCQkJCWRldl9mbG93LT5kdi5l bmNhcF9kZWNhcC0+YWN0aW9uOwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05f REVDQVA7CisJCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0lDTVA6CisJCQlmbG93X2R2X3RyYW5z bGF0ZV9pdGVtX2ljbXAobWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCisJCQkJCQkgICAgaXRlbXMs IHR1bm5lbCk7CisJCQlwcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlfTUFQX0w0OworCQkJbGFzdF9p dGVtID0gTUxYNV9GTE9XX0xBWUVSX0lDTVA7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9SQVdfRU5DQVA6Ci0JCQkvKiBIYW5kbGUgZW5jYXAgd2l0aCBwcmVjZWRpbmcg ZGVjYXAuICovCi0JCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9GTE9XX0FDVElPTl9ERUNBUCkg ewotCQkJCWlmIChmbG93X2R2X2NyZWF0ZV9hY3Rpb25fcmF3X2VuY2FwCi0JCQkJCShkZXYsIGFj dGlvbnMsIGRldl9mbG93LCBhdHRyLCBlcnJvcikpCi0JCQkJCXJldHVybiAtcnRlX2Vycm5vOwot CQkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9Ci0JCQkJCWRldl9mbG93LT5k di5lbmNhcF9kZWNhcC0+YWN0aW9uOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBIYW5kbGUgZW5jYXAg d2l0aG91dCBwcmVjZWRpbmcgZGVjYXAuICovCi0JCQkJaWYgKGZsb3dfZHZfY3JlYXRlX2FjdGlv bl9sMl9lbmNhcAotCQkJCSAgICAoZGV2LCBhY3Rpb25zLCBkZXZfZmxvdywgYXR0ci0+dHJhbnNm ZXIsCi0JCQkJICAgICBlcnJvcikpCi0JCQkJCXJldHVybiAtcnRlX2Vycm5vOwotCQkJCWRldl9m bG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9Ci0JCQkJCWRldl9mbG93LT5kdi5lbmNhcF9k ZWNhcC0+YWN0aW9uOwotCQkJfQotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05f RU5DQVA7Ci0JCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9GTE9XX0FDVElPTl9TQU1QTEUpCi0J CQkJc2FtcGxlX2FjdC0+YWN0aW9uX2ZsYWdzIHw9Ci0JCQkJCQkJTUxYNV9GTE9XX0FDVElPTl9F TkNBUDsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfSUNNUDY6CisJCQlmbG93X2R2X3RyYW5z bGF0ZV9pdGVtX2ljbXA2KG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAorCQkJCQkJICAgICAgaXRl bXMsIHR1bm5lbCk7CisJCQlwcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlfTUFQX0w0OworCQkJbGFz dF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0lDTVA2OwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZM T1dfQUNUSU9OX1RZUEVfUkFXX0RFQ0FQOgotCQkJd2hpbGUgKCgrK2FjdGlvbiktPnR5cGUgPT0g UlRFX0ZMT1dfQUNUSU9OX1RZUEVfVk9JRCkKLQkJCQk7Ci0JCQlpZiAoYWN0aW9uLT50eXBlICE9 IFJURV9GTE9XX0FDVElPTl9UWVBFX1JBV19FTkNBUCkgewotCQkJCWlmIChmbG93X2R2X2NyZWF0 ZV9hY3Rpb25fbDJfZGVjYXAKLQkJCQkgICAgKGRldiwgZGV2X2Zsb3csIGF0dHItPnRyYW5zZmVy LCBlcnJvcikpCi0JCQkJCXJldHVybiAtcnRlX2Vycm5vOwotCQkJCWRldl9mbG93LT5kdi5hY3Rp b25zW2FjdGlvbnNfbisrXSA9Ci0JCQkJCWRldl9mbG93LT5kdi5lbmNhcF9kZWNhcC0+YWN0aW9u OwotCQkJfQotCQkJLyogSWYgZGVjYXAgaXMgZm9sbG93ZWQgYnkgZW5jYXAsIGhhbmRsZSBpdCBh dCBlbmNhcC4gKi8KLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ0FQOwor CQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9UQUc6CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVt X3RhZyhkZXYsIG1hdGNoX21hc2ssCisJCQkJCQkgICBtYXRjaF92YWx1ZSwgaXRlbXMpOworCQkJ bGFzdF9pdGVtID0gTUxYNV9GTE9XX0lURU1fVEFHOwogCQkJYnJlYWs7Ci0JCWNhc2UgTUxYNV9S VEVfRkxPV19BQ1RJT05fVFlQRV9KVU1QOgotCQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9u c19uKytdID0KLQkJCQkodm9pZCAqKSh1aW50cHRyX3QpYWN0aW9uLT5jb25mOwotCQkJYWN0aW9u X2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fSlVNUDsKKwkJY2FzZSBNTFg1X1JURV9GTE9XX0lU RU1fVFlQRV9UQUc6CisJCQlmbG93X2R2X3RyYW5zbGF0ZV9tbHg1X2l0ZW1fdGFnKGRldiwgbWF0 Y2hfbWFzaywKKwkJCQkJCQltYXRjaF92YWx1ZSwgaXRlbXMpOworCQkJbGFzdF9pdGVtID0gTUxY NV9GTE9XX0lURU1fVEFHOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVf SlVNUDoKLQkJCWp1bXBfZ3JvdXAgPSAoKGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fanVt cCAqKQotCQkJCQkJCWFjdGlvbi0+Y29uZiktPmdyb3VwOwotCQkJZ3JwX2luZm8uc3RkX3RibF9m aXggPSAwOwotCQkJaWYgKGRldl9mbG93LT5za2lwX3NjYWxlICYKLQkJCQkoMSA8PCBNTFg1X1ND QUxFX0pVTVBfRkxPV19HUk9VUF9CSVQpKQotCQkJCWdycF9pbmZvLnNraXBfc2NhbGUgPSAxOwot CQkJZWxzZQotCQkJCWdycF9pbmZvLnNraXBfc2NhbGUgPSAwOwotCQkJcmV0ID0gbWx4NV9mbG93 X2dyb3VwX3RvX3RhYmxlKGRldiwgdHVubmVsLAotCQkJCQkJICAgICAgIGp1bXBfZ3JvdXAsCi0J CQkJCQkgICAgICAgJnRhYmxlLAotCQkJCQkJICAgICAgICZncnBfaW5mbywgZXJyb3IpOworCQlj YXNlIE1MWDVfUlRFX0ZMT1dfSVRFTV9UWVBFX1RYX1FVRVVFOgorCQkJZmxvd19kdl90cmFuc2xh dGVfaXRlbV90eF9xdWV1ZShkZXYsIG1hdGNoX21hc2ssCisJCQkJCQkJbWF0Y2hfdmFsdWUsCisJ CQkJCQkJaXRlbXMpOworCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0lURU1fVFhfUVVFVUU7CisJ CQlicmVhazsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfR1RQOgorCQkJZmxvd19kdl90cmFu c2xhdGVfaXRlbV9ndHAobWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCisJCQkJCQkgICBpdGVtcywg dHVubmVsKTsKKwkJCXByaW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOwor CQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0dUUDsKKwkJCWJyZWFrOworCQljYXNlIFJU RV9GTE9XX0lURU1fVFlQRV9HVFBfUFNDOgorCQkJcmV0ID0gZmxvd19kdl90cmFuc2xhdGVfaXRl bV9ndHBfcHNjKG1hdGNoX21hc2ssCisJCQkJCQkJICBtYXRjaF92YWx1ZSwKKwkJCQkJCQkgIGl0 ZW1zKTsKIAkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXRibCA9IGZsb3dfZHZfdGJs X3Jlc291cmNlX2dldChkZXYsIHRhYmxlLCBhdHRyLT5lZ3Jlc3MsCi0JCQkJCQkgICAgICAgYXR0 ci0+dHJhbnNmZXIsCi0JCQkJCQkgICAgICAgISFkZXZfZmxvdy0+ZXh0ZXJuYWwsCi0JCQkJCQkg ICAgICAgdHVubmVsLCBqdW1wX2dyb3VwLCAwLAotCQkJCQkJICAgICAgIDAsIGVycm9yKTsKLQkJ CWlmICghdGJsKQotCQkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKLQkJCQkJCShlcnJvciwg ZXJybm8sCi0JCQkJCQkgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04sCi0JCQkJCQkgTlVMTCwK LQkJCQkJCSAiY2Fubm90IGNyZWF0ZSBqdW1wIGFjdGlvbi4iKTsKLQkJCWlmIChmbG93X2R2X2p1 bXBfdGJsX3Jlc291cmNlX3JlZ2lzdGVyCi0JCQkgICAgKGRldiwgdGJsLCBkZXZfZmxvdywgZXJy b3IpKSB7Ci0JCQkJZmxvd19kdl90YmxfcmVzb3VyY2VfcmVsZWFzZShNTFg1X1NIKGRldiksIHRi bCk7Ci0JCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAotCQkJCQkJKGVycm9yLCBlcnJubywK LQkJCQkJCSBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwKLQkJCQkJCSBOVUxMLAotCQkJCQkJ ICJjYW5ub3QgY3JlYXRlIGp1bXAgYWN0aW9uLiIpOworCQkJCXJldHVybiBydGVfZmxvd19lcnJv cl9zZXQoZXJyb3IsIC1yZXQsCisJCQkJCVJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTSwgTlVMTCwK KwkJCQkJImNhbm5vdCBjcmVhdGUgR1RQIFBTQyBpdGVtIik7CisJCQlsYXN0X2l0ZW0gPSBNTFg1 X0ZMT1dfTEFZRVJfR1RQX1BTQzsKKwkJCWJyZWFrOworCQljYXNlIFJURV9GTE9XX0lURU1fVFlQ RV9FQ1BSSToKKwkJCWlmICghbWx4NV9mbGV4X3BhcnNlcl9lY3ByaV9leGlzdChkZXYpKSB7CisJ CQkJLyogQ3JlYXRlIGl0IG9ubHkgdGhlIGZpcnN0IHRpbWUgdG8gYmUgdXNlZC4gKi8KKwkJCQly ZXQgPSBtbHg1X2ZsZXhfcGFyc2VyX2VjcHJpX2FsbG9jKGRldik7CisJCQkJaWYgKHJldCkKKwkJ CQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAorCQkJCQkJKGVycm9yLCAtcmV0LAorCQkJCQkJ UlRFX0ZMT1dfRVJST1JfVFlQRV9JVEVNLAorCQkJCQkJTlVMTCwKKwkJCQkJCSJjYW5ub3QgY3Jl YXRlIGVDUFJJIHBhcnNlciIpOworCQkJfQorCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9lY3By aShkZXYsIG1hdGNoX21hc2ssCisJCQkJCQkgICAgIG1hdGNoX3ZhbHVlLCBpdGVtcywKKwkJCQkJ CSAgICAgbGFzdF9pdGVtKTsKKwkJCS8qIE5vIG90aGVyIHByb3RvY29sIHNob3VsZCBmb2xsb3cg ZUNQUkkgbGF5ZXIuICovCisJCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZRVJfRUNQUkk7CisJ CQlicmVhazsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfSU5URUdSSVRZOgorCQkJZmxvd19k dl90cmFuc2xhdGVfaXRlbV9pbnRlZ3JpdHkoaXRlbXMsIGludGVncml0eV9pdGVtcywKKwkJCQkJ CQkgJmxhc3RfaXRlbSk7CisJCQlicmVhazsKKwkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfQ09O TlRSQUNLOgorCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9hc29fY3QoZGV2LCBtYXRjaF9tYXNr LAorCQkJCQkJICAgICAgbWF0Y2hfdmFsdWUsIGl0ZW1zKTsKKwkJCWJyZWFrOworCQljYXNlIFJU RV9GTE9XX0lURU1fVFlQRV9GTEVYOgorCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9mbGV4KGRl diwgbWF0Y2hfbWFzaywKKwkJCQkJCSAgICBtYXRjaF92YWx1ZSwgaXRlbXMsCisJCQkJCQkgICAg ZGV2X2Zsb3csIHR1bm5lbCAhPSAwKTsKKwkJCWxhc3RfaXRlbSA9IHR1bm5lbCA/IE1MWDVfRkxP V19JVEVNX0lOTkVSX0ZMRVggOgorCQkJCSAgICBNTFg1X0ZMT1dfSVRFTV9PVVRFUl9GTEVYOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpdGVtX2ZsYWdzIHw9IGxh c3RfaXRlbTsKKwl9CisJLyoKKwkgKiBXaGVuIEUtU3dpdGNoIG1vZGUgaXMgZW5hYmxlZCwgd2Ug aGF2ZSB0d28gY2FzZXMgd2hlcmUgd2UgbmVlZCB0bworCSAqIHNldCB0aGUgc291cmNlIHBvcnQg bWFudWFsbHkuCisJICogVGhlIGZpcnN0IG9uZSwgaXMgaW4gY2FzZSBvZiBOSUMgaW5ncmVzcyBz dGVlcmluZyBydWxlLCBhbmQgdGhlCisJICogc2Vjb25kIGlzIEUtU3dpdGNoIHJ1bGUgd2hlcmUg bm8gcG9ydF9pZCBpdGVtIHdhcyBmb3VuZC4KKwkgKiBJbiBib3RoIGNhc2VzIHRoZSBzb3VyY2Ug cG9ydCBpcyBzZXQgYWNjb3JkaW5nIHRoZSBjdXJyZW50IHBvcnQKKwkgKiBpbiB1c2UuCisJICov CisJaWYgKCEoaXRlbV9mbGFncyAmIE1MWDVfRkxPV19JVEVNX1BPUlRfSUQpICYmCisJICAgICEo aXRlbV9mbGFncyAmIE1MWDVfRkxPV19JVEVNX1JFUFJFU0VOVEVEX1BPUlQpICYmIHByaXYtPnNo LT5lc3dfbW9kZSAmJgorCSAgICAhKGF0dHItPmVncmVzcyAmJiAhYXR0ci0+dHJhbnNmZXIpKSB7 CisJCWlmIChmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX3BvcnRfaWQoZGV2LCBtYXRjaF9tYXNrLAor CQkJCQkJICAgbWF0Y2hfdmFsdWUsIE5VTEwsIGF0dHIpKQorCQkJcmV0dXJuIC1ydGVfZXJybm87 CisJfQorCWlmIChpdGVtX2ZsYWdzICYgTUxYNV9GTE9XX0lURU1fSU5URUdSSVRZKSB7CisJCWZs b3dfZHZfdHJhbnNsYXRlX2l0ZW1faW50ZWdyaXR5X3Bvc3QobWF0Y2hfbWFzaywgbWF0Y2hfdmFs dWUsCisJCQkJCQkgICAgICBpbnRlZ3JpdHlfaXRlbXMsCisJCQkJCQkgICAgICBpdGVtX2ZsYWdz KTsKKwl9CisJaWYgKGl0ZW1fZmxhZ3MgJiBNTFg1X0ZMT1dfTEFZRVJfVlhMQU5fR1BFKQorCQlm bG93X2R2X3RyYW5zbGF0ZV9pdGVtX3Z4bGFuX2dwZShtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwK KwkJCQkJCSB0dW5uZWxfaXRlbSwgaXRlbV9mbGFncyk7CisJZWxzZSBpZiAoaXRlbV9mbGFncyAm IE1MWDVfRkxPV19MQVlFUl9HRU5FVkUpCisJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ2VuZXZl KG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAorCQkJCQkgICAgICB0dW5uZWxfaXRlbSwgaXRlbV9m bGFncyk7CisJZWxzZSBpZiAoaXRlbV9mbGFncyAmIE1MWDVfRkxPV19MQVlFUl9HUkUpIHsKKwkJ aWYgKHR1bm5lbF9pdGVtLT50eXBlID09IFJURV9GTE9XX0lURU1fVFlQRV9HUkUpCisJCQlmbG93 X2R2X3RyYW5zbGF0ZV9pdGVtX2dyZShtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJCSAg IHR1bm5lbF9pdGVtLCBpdGVtX2ZsYWdzKTsKKwkJZWxzZSBpZiAodHVubmVsX2l0ZW0tPnR5cGUg PT0gUlRFX0ZMT1dfSVRFTV9UWVBFX05WR1JFKQorCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9u dmdyZShtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJCSAgICAgdHVubmVsX2l0ZW0sIGl0 ZW1fZmxhZ3MpOworCQllbHNlIGlmICh0dW5uZWxfaXRlbS0+dHlwZSA9PSBSVEVfRkxPV19JVEVN X1RZUEVfR1JFX09QVElPTikKKwkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ3JlX29wdGlvbiht YXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKKwkJCQkJdHVubmVsX2l0ZW0sIGdyZV9pdGVtLCBpdGVt X2ZsYWdzKTsKKwkJZWxzZQorCQkJTUxYNV9BU1NFUlQoZmFsc2UpOworCX0KKwltYXRjaGVyLT5w cmlvcml0eSA9IHByaW9yaXR5OworI2lmZGVmIFJURV9MSUJSVEVfTUxYNV9ERUJVRworCU1MWDVf QVNTRVJUKCFmbG93X2R2X2NoZWNrX3ZhbGlkX3NwZWMobWF0Y2hlci0+bWFzay5idWYsCisJCQkJ CSAgICAgIGRldl9mbG93LT5kdi52YWx1ZS5idWYpKTsKKyNlbmRpZgorCS8qCisJICogTGF5ZXJz IG1heSBiZSBhbHJlYWR5IGluaXRpYWxpemVkIGZyb20gcHJlZml4IGZsb3cgaWYgdGhpcyBkZXZf ZmxvdworCSAqIGlzIHRoZSBzdWZmaXggZmxvdy4KKwkgKi8KKwloYW5kbGUtPmxheWVycyB8PSBp dGVtX2ZsYWdzOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogRmlsbCB0aGUgZmxvdyB3aXRo IERWIHNwZWMsIGxvY2sgZnJlZQorICogKG11dGV4IHNob3VsZCBiZSBhY3F1aXJlZCBieSBjYWxs ZXIpLgorICoKKyAqIEBwYXJhbVtpbl0gZGV2CisgKiAgIFBvaW50ZXIgdG8gcnRlX2V0aF9kZXYg c3RydWN0dXJlLgorICogQHBhcmFtW2luLCBvdXRdIGRldl9mbG93CisgKiAgIFBvaW50ZXIgdG8g dGhlIHN1YiBmbG93LgorICogQHBhcmFtW2luXSBhdHRyCisgKiAgIFBvaW50ZXIgdG8gdGhlIGZs b3cgYXR0cmlidXRlcy4KKyAqIEBwYXJhbVtpbl0gaXRlbXMKKyAqICAgUG9pbnRlciB0byB0aGUg bGlzdCBvZiBpdGVtcy4KKyAqIEBwYXJhbVtpbl0gYWN0aW9ucworICogICBQb2ludGVyIHRvIHRo ZSBsaXN0IG9mIGFjdGlvbnMuCisgKiBAcGFyYW1bb3V0XSBlcnJvcgorICogICBQb2ludGVyIHRv IHRoZSBlcnJvciBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybgorICogICAwIG9uIHN1Y2Nlc3Ms IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lgor ICovCitzdGF0aWMgaW50CitmbG93X2R2X3RyYW5zbGF0ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwKKwkJICBzdHJ1Y3QgbWx4NV9mbG93ICpkZXZfZmxvdywKKwkJICBjb25zdCBzdHJ1Y3QgcnRl X2Zsb3dfYXR0ciAqYXR0ciwKKwkJICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1td LAorCQkgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gYWN0aW9uc1tdLAorCQkgIHN0cnVj dCBydGVfZmxvd19lcnJvciAqZXJyb3IpCit7CisJc3RydWN0IG1seDVfcHJpdiAqcHJpdiA9IGRl di0+ZGF0YS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1seDVfc2hfY29uZmlnICpkZXZfY29uZiA9 ICZwcml2LT5zaC0+Y29uZmlnOworCXN0cnVjdCBydGVfZmxvdyAqZmxvdyA9IGRldl9mbG93LT5m bG93OworCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpoYW5kbGUgPSBkZXZfZmxvdy0+aGFuZGxl OworCXN0cnVjdCBtbHg1X2Zsb3dfd29ya3NwYWNlICp3a3MgPSBtbHg1X2Zsb3dfZ2V0X3RocmVh ZF93b3Jrc3BhY2UoKTsKKwlzdHJ1Y3QgbWx4NV9mbG93X3Jzc19kZXNjICpyc3NfZGVzYzsKKwl1 aW50NjRfdCBhY3Rpb25fZmxhZ3MgPSAwOworCXN0cnVjdCBtbHg1X2Zsb3dfZHZfbWF0Y2hlciBt YXRjaGVyID0geworCQkubWFzayA9IHsKKwkJCS5zaXplID0gc2l6ZW9mKG1hdGNoZXIubWFzay5i dWYpLAorCQl9LAorCX07CisJaW50IGFjdGlvbnNfbiA9IDA7CisJYm9vbCBhY3Rpb25zX2VuZCA9 IGZhbHNlOworCXVuaW9uIHsKKwkJc3RydWN0IG1seDVfZmxvd19kdl9tb2RpZnlfaGRyX3Jlc291 cmNlIHJlczsKKwkJdWludDhfdCBsZW5bc2l6ZW9mKHN0cnVjdCBtbHg1X2Zsb3dfZHZfbW9kaWZ5 X2hkcl9yZXNvdXJjZSkgKworCQkJICAgIHNpemVvZihzdHJ1Y3QgbWx4NV9tb2RpZmljYXRpb25f Y21kKSAqCisJCQkgICAgKE1MWDVfTUFYX01PRElGWV9OVU0gKyAxKV07CisJfSBtaGRyX2R1bW15 OworCXN0cnVjdCBtbHg1X2Zsb3dfZHZfbW9kaWZ5X2hkcl9yZXNvdXJjZSAqbWhkcl9yZXMgPSAm bWhkcl9kdW1teS5yZXM7CisJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9jb3VudCAqY291 bnQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fYWdlICpub25fc2hhcmVk X2FnZSA9IE5VTEw7CisJdW5pb24gZmxvd19kdl9hdHRyIGZsb3dfYXR0ciA9IHsgLmF0dHIgPSAw IH07CisJdWludDMyX3QgdGFnX2JlOworCXVuaW9uIG1seDVfZmxvd190Ymxfa2V5IHRibF9rZXk7 CisJdWludDMyX3QgbW9kaWZ5X2FjdGlvbl9wb3NpdGlvbiA9IFVJTlQzMl9NQVg7CisJc3RydWN0 IHJ0ZV92bGFuX2hkciB2bGFuID0geyAwIH07CisJc3RydWN0IG1seDVfZmxvd19kdl9kZXN0X2Fy cmF5X3Jlc291cmNlIG1kZXN0X3JlczsKKwlzdHJ1Y3QgbWx4NV9mbG93X2R2X3NhbXBsZV9yZXNv dXJjZSBzYW1wbGVfcmVzOworCXZvaWQgKnNhbXBsZV9hY3Rpb25zW01MWDVfRFZfTUFYX05VTUJF Ul9PRl9BQ1RJT05TXSA9IHswfTsKKwljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NhbXBs ZSAqc2FtcGxlID0gTlVMTDsKKwlzdHJ1Y3QgbWx4NV9mbG93X3N1Yl9hY3Rpb25zX2xpc3QgKnNh bXBsZV9hY3Q7CisJdWludDMyX3Qgc2FtcGxlX2FjdF9wb3MgPSBVSU5UMzJfTUFYOworCXVpbnQz Ml90IGFnZV9hY3RfcG9zID0gVUlOVDMyX01BWDsKKwl1aW50MzJfdCBudW1fb2ZfZGVzdCA9IDA7 CisJaW50IHRtcF9hY3Rpb25zX24gPSAwOworCXVpbnQzMl90IHRhYmxlOworCWludCByZXQgPSAw OworCWNvbnN0IHN0cnVjdCBtbHg1X2Zsb3dfdHVubmVsICp0dW5uZWwgPSBOVUxMOworCXN0cnVj dCBmbG93X2dycF9pbmZvIGdycF9pbmZvID0geworCQkuZXh0ZXJuYWwgPSAhIWRldl9mbG93LT5l eHRlcm5hbCwKKwkJLnRyYW5zZmVyID0gISFhdHRyLT50cmFuc2ZlciwKKwkJLmZkYl9kZWZfcnVs ZSA9ICEhcHJpdi0+ZmRiX2RlZl9ydWxlLAorCQkuc2tpcF9zY2FsZSA9IGRldl9mbG93LT5za2lw X3NjYWxlICYKKwkJCSgxIDw8IE1MWDVfU0NBTEVfRkxPV19HUk9VUF9CSVQpLAorCQkuc3RkX3Ri bF9maXggPSB0cnVlLAorCX07CisKKwlpZiAoIXdrcykKKwkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9y X3NldChlcnJvciwgRU5PTUVNLAorCQkJCQkgIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJ RUQsCisJCQkJCSAgTlVMTCwKKwkJCQkJICAiZmFpbGVkIHRvIHB1c2ggZmxvdyB3b3Jrc3BhY2Ui KTsKKwlyc3NfZGVzYyA9ICZ3a3MtPnJzc19kZXNjOworCW1lbXNldCgmbWRlc3RfcmVzLCAwLCBz aXplb2Yoc3RydWN0IG1seDVfZmxvd19kdl9kZXN0X2FycmF5X3Jlc291cmNlKSk7CisJbWVtc2V0 KCZzYW1wbGVfcmVzLCAwLCBzaXplb2Yoc3RydWN0IG1seDVfZmxvd19kdl9zYW1wbGVfcmVzb3Vy Y2UpKTsKKwltaGRyX3Jlcy0+ZnRfdHlwZSA9IGF0dHItPmVncmVzcyA/IE1MWDVEVl9GTE9XX1RB QkxFX1RZUEVfTklDX1RYIDoKKwkJCQkJICAgTUxYNURWX0ZMT1dfVEFCTEVfVFlQRV9OSUNfUlg7 CisJLyogdXBkYXRlIG5vcm1hbCBwYXRoIGFjdGlvbiByZXNvdXJjZSBpbnRvIGxhc3QgaW5kZXgg b2YgYXJyYXkgKi8KKwlzYW1wbGVfYWN0ID0gJm1kZXN0X3Jlcy5zYW1wbGVfYWN0W01MWDVfTUFY X0RFU1RfTlVNIC0gMV07CisJaWYgKGlzX3R1bm5lbF9vZmZsb2FkX2FjdGl2ZShkZXYpKSB7CisJ CWlmIChkZXZfZmxvdy0+dHVubmVsKSB7CisJCQlSVEVfVkVSSUZZKGRldl9mbG93LT50b2ZfdHlw ZSA9PQorCQkJCSAgIE1MWDVfVFVOTkVMX09GRkxPQURfTUlTU19SVUxFKTsKKwkJCXR1bm5lbCA9 IGRldl9mbG93LT50dW5uZWw7CisJCX0gZWxzZSB7CisJCQl0dW5uZWwgPSBtbHg1X2dldF90b2Yo aXRlbXMsIGFjdGlvbnMsCisJCQkJCSAgICAgICZkZXZfZmxvdy0+dG9mX3R5cGUpOworCQkJZGV2 X2Zsb3ctPnR1bm5lbCA9IHR1bm5lbDsKKwkJfQorCQlncnBfaW5mby5zdGRfdGJsX2ZpeCA9IHR1 bm5lbF91c2Vfc3RhbmRhcmRfYXR0cl9ncm91cF90cmFuc2xhdGUKKwkJCQkJKGRldiwgYXR0ciwg dHVubmVsLCBkZXZfZmxvdy0+dG9mX3R5cGUpOworCX0KKwltaGRyX3Jlcy0+ZnRfdHlwZSA9IGF0 dHItPmVncmVzcyA/IE1MWDVEVl9GTE9XX1RBQkxFX1RZUEVfTklDX1RYIDoKKwkJCQkJICAgTUxY NURWX0ZMT1dfVEFCTEVfVFlQRV9OSUNfUlg7CisJcmV0ID0gbWx4NV9mbG93X2dyb3VwX3RvX3Rh YmxlKGRldiwgdHVubmVsLCBhdHRyLT5ncm91cCwgJnRhYmxlLAorCQkJCSAgICAgICAmZ3JwX2lu Zm8sIGVycm9yKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWRldl9mbG93LT5kdi5ncm91 cCA9IHRhYmxlOworCWlmIChhdHRyLT50cmFuc2ZlcikKKwkJbWhkcl9yZXMtPmZ0X3R5cGUgPSBN TFg1RFZfRkxPV19UQUJMRV9UWVBFX0ZEQjsKKwkvKiBudW1iZXIgb2YgYWN0aW9ucyBtdXN0IGJl IHNldCB0byAwIGluIGNhc2Ugb2YgZGlydHkgc3RhY2suICovCisJbWhkcl9yZXMtPmFjdGlvbnNf bnVtID0gMDsKKwlpZiAoaXNfZmxvd190dW5uZWxfbWF0Y2hfcnVsZShkZXZfZmxvdy0+dG9mX3R5 cGUpKSB7CisJCS8qCisJCSAqIGRvIG5vdCBhZGQgZGVjYXAgYWN0aW9uIGlmIG1hdGNoIHJ1bGUg ZHJvcHMgcGFja2V0CisJCSAqIEhXIHJlamVjdHMgcnVsZXMgd2l0aCBkZWNhcCAmIGRyb3AKKwkJ ICoKKwkJICogaWYgdHVubmVsIG1hdGNoIHJ1bGUgd2FzIGluc2VydGVkIGJlZm9yZSBtYXRjaGlu ZyB0dW5uZWwgc2V0CisJCSAqIHJ1bGUgZmxvdyB0YWJsZSB1c2VkIGluIHRoZSBtYXRjaCBydWxl IG11c3QgYmUgcmVnaXN0ZXJlZC4KKwkJICogY3VycmVudCBpbXBsZW1lbnRhdGlvbiBoYW5kbGVz IHRoYXQgaW4gdGhlCisJCSAqIGZsb3dfZHZfbWF0Y2hfcmVnaXN0ZXIoKSBhdCB0aGUgZnVuY3Rp b24gZW5kLgorCQkgKi8KKwkJYm9vbCBhZGRfZGVjYXAgPSB0cnVlOworCQljb25zdCBzdHJ1Y3Qg cnRlX2Zsb3dfYWN0aW9uICpwdHIgPSBhY3Rpb25zOworCisJCWZvciAoOyBwdHItPnR5cGUgIT0g UlRFX0ZMT1dfQUNUSU9OX1RZUEVfRU5EOyBwdHIrKykgeworCQkJaWYgKHB0ci0+dHlwZSA9PSBS VEVfRkxPV19BQ1RJT05fVFlQRV9EUk9QKSB7CisJCQkJYWRkX2RlY2FwID0gZmFsc2U7CisJCQkJ YnJlYWs7CiAJCQl9Ci0JCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQotCQkJ CQlkZXZfZmxvdy0+ZHYuanVtcC0+YWN0aW9uOwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxP V19BQ1RJT05fSlVNUDsKLQkJCWRldl9mbG93LT5oYW5kbGUtPmZhdGVfYWN0aW9uID0gTUxYNV9G TE9XX0ZBVEVfSlVNUDsKLQkJCXNhbXBsZV9hY3QtPmFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1df QUNUSU9OX0pVTVA7Ci0JCQludW1fb2ZfZGVzdCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZM T1dfQUNUSU9OX1RZUEVfU0VUX01BQ19TUkM6Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVf U0VUX01BQ19EU1Q6Ci0JCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlvbl9tb2RpZnlfbWFjCi0J CQkJCShtaGRyX3JlcywgYWN0aW9ucywgZXJyb3IpKQotCQkJCXJldHVybiAtcnRlX2Vycm5vOwot CQkJYWN0aW9uX2ZsYWdzIHw9IGFjdGlvbnMtPnR5cGUgPT0KLQkJCQkJUlRFX0ZMT1dfQUNUSU9O X1RZUEVfU0VUX01BQ19TUkMgPwotCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX1NFVF9NQUNfU1JDIDoK LQkJCQkJTUxYNV9GTE9XX0FDVElPTl9TRVRfTUFDX0RTVDsKLQkJCWJyZWFrOwotCQljYXNlIFJU RV9GTE9XX0FDVElPTl9UWVBFX1NFVF9JUFY0X1NSQzoKLQkJY2FzZSBSVEVfRkxPV19BQ1RJT05f VFlQRV9TRVRfSVBWNF9EU1Q6Ci0JCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlvbl9tb2RpZnlf aXB2NAotCQkJCQkobWhkcl9yZXMsIGFjdGlvbnMsIGVycm9yKSkKLQkJCQlyZXR1cm4gLXJ0ZV9l cnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBhY3Rpb25zLT50eXBlID09Ci0JCQkJCVJURV9GTE9X X0FDVElPTl9UWVBFX1NFVF9JUFY0X1NSQyA/Ci0JCQkJCU1MWDVfRkxPV19BQ1RJT05fU0VUX0lQ VjRfU1JDIDoKLQkJCQkJTUxYNV9GTE9XX0FDVElPTl9TRVRfSVBWNF9EU1Q7Ci0JCQlicmVhazsK LQkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfSVBWNl9TUkM6Ci0JCWNhc2UgUlRFX0ZM T1dfQUNUSU9OX1RZUEVfU0VUX0lQVjZfRFNUOgotCQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rp b25fbW9kaWZ5X2lwdjYKLQkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCisJCX0KKwkJ aWYgKGFkZF9kZWNhcCkgeworCQkJaWYgKGZsb3dfZHZfY3JlYXRlX2FjdGlvbl9sMl9kZWNhcChk ZXYsIGRldl9mbG93LAorCQkJCQkJCSAgIGF0dHItPnRyYW5zZmVyLAorCQkJCQkJCSAgIGVycm9y KSkKIAkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBhY3Rpb25zLT50 eXBlID09Ci0JCQkJCVJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9JUFY2X1NSQyA/Ci0JCQkJCU1M WDVfRkxPV19BQ1RJT05fU0VUX0lQVjZfU1JDIDoKLQkJCQkJTUxYNV9GTE9XX0FDVElPTl9TRVRf SVBWNl9EU1Q7CisJCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQorCQkJCQlk ZXZfZmxvdy0+ZHYuZW5jYXBfZGVjYXAtPmFjdGlvbjsKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1 X0ZMT1dfQUNUSU9OX0RFQ0FQOworCQl9CisJfQorCWZvciAoOyAhYWN0aW9uc19lbmQgOyBhY3Rp b25zKyspIHsKKwkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9xdWV1ZSAqcXVldWU7CisJ CWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcnNzICpyc3M7CisJCWNvbnN0IHN0cnVjdCBy dGVfZmxvd19hY3Rpb24gKmFjdGlvbiA9IGFjdGlvbnM7CisJCWNvbnN0IHVpbnQ4X3QgKnJzc19r ZXk7CisJCXN0cnVjdCBtbHg1X2Zsb3dfdGJsX3Jlc291cmNlICp0Ymw7CisJCXN0cnVjdCBtbHg1 X2Fzb19hZ2VfYWN0aW9uICphZ2VfYWN0OworCQlzdHJ1Y3QgbWx4NV9mbG93X2NvdW50ZXIgKmNu dF9hY3Q7CisJCXVpbnQzMl90IHBvcnRfaWQgPSAwOworCQlzdHJ1Y3QgbWx4NV9mbG93X2R2X3Bv cnRfaWRfYWN0aW9uX3Jlc291cmNlIHBvcnRfaWRfcmVzb3VyY2U7CisJCWludCBhY3Rpb25fdHlw ZSA9IGFjdGlvbnMtPnR5cGU7CisJCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmZvdW5k X2FjdGlvbiA9IE5VTEw7CisJCXVpbnQzMl90IGp1bXBfZ3JvdXAgPSAwOworCQl1aW50MzJfdCBv d25lcl9pZHg7CisJCXN0cnVjdCBtbHg1X2Fzb19jdF9hY3Rpb24gKmN0OworCisJCWlmICghbWx4 NV9mbG93X29zX2FjdGlvbl9zdXBwb3J0ZWQoYWN0aW9uX3R5cGUpKQorCQkJcmV0dXJuIHJ0ZV9m bG93X2Vycm9yX3NldChlcnJvciwgRU5PVFNVUCwKKwkJCQkJCSAgUlRFX0ZMT1dfRVJST1JfVFlQ RV9BQ1RJT04sCisJCQkJCQkgIGFjdGlvbnMsCisJCQkJCQkgICJhY3Rpb24gbm90IHN1cHBvcnRl ZCIpOworCQlzd2l0Y2ggKGFjdGlvbl90eXBlKSB7CisJCWNhc2UgTUxYNV9SVEVfRkxPV19BQ1RJ T05fVFlQRV9UVU5ORUxfU0VUOgorCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05f VFVOTkVMX1NFVDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9U UF9TUkM6Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX1RQX0RTVDoKLQkJCWlmIChm bG93X2R2X2NvbnZlcnRfYWN0aW9uX21vZGlmeV90cAotCQkJCQkobWhkcl9yZXMsIGFjdGlvbnMs IGl0ZW1zLAotCQkJCQkgJmZsb3dfYXR0ciwgZGV2X2Zsb3csICEhKGFjdGlvbl9mbGFncyAmCi0J CQkJCSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ0FQKSwgZXJyb3IpKQotCQkJCXJldHVybiAtcnRlX2Vy cm5vOwotCQkJYWN0aW9uX2ZsYWdzIHw9IGFjdGlvbnMtPnR5cGUgPT0KLQkJCQkJUlRFX0ZMT1df QUNUSU9OX1RZUEVfU0VUX1RQX1NSQyA/Ci0JCQkJCU1MWDVfRkxPV19BQ1RJT05fU0VUX1RQX1NS QyA6Ci0JCQkJCU1MWDVfRkxPV19BQ1RJT05fU0VUX1RQX0RTVDsKKwkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9WT0lEOgogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVf REVDX1RUTDoKLQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21vZGlmeV9kZWNfdHRsCi0J CQkJCShtaGRyX3JlcywgaXRlbXMsICZmbG93X2F0dHIsIGRldl9mbG93LAotCQkJCQkgISEoYWN0 aW9uX2ZsYWdzICYKLQkJCQkJIE1MWDVfRkxPV19BQ1RJT05fREVDQVApLCBlcnJvcikpCisJCWNh c2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUE9SVF9JRDoKKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05f VFlQRV9SRVBSRVNFTlRFRF9QT1JUOgorCQkJaWYgKGZsb3dfZHZfdHJhbnNsYXRlX2FjdGlvbl9w b3J0X2lkKGRldiwgYWN0aW9uLAorCQkJCQkJCSAgICAgJnBvcnRfaWQsIGVycm9yKSkKIAkJCQly ZXR1cm4gLXJ0ZV9lcnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RF Q19UVEw7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfVFRMOgot CQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rpb25fbW9kaWZ5X3R0bAotCQkJCQkobWhkcl9yZXMs IGFjdGlvbnMsIGl0ZW1zLCAmZmxvd19hdHRyLAotCQkJCQkgZGV2X2Zsb3csICEhKGFjdGlvbl9m bGFncyAmCi0JCQkJCSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ0FQKSwgZXJyb3IpKQorCQkJcG9ydF9p ZF9yZXNvdXJjZS5wb3J0X2lkID0gcG9ydF9pZDsKKwkJCU1MWDVfQVNTRVJUKCFoYW5kbGUtPnJp eF9wb3J0X2lkX2FjdGlvbik7CisJCQlpZiAoZmxvd19kdl9wb3J0X2lkX2FjdGlvbl9yZXNvdXJj ZV9yZWdpc3RlcgorCQkJICAgIChkZXYsICZwb3J0X2lkX3Jlc291cmNlLCBkZXZfZmxvdywgZXJy b3IpKQogCQkJCXJldHVybiAtcnRlX2Vycm5vOwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxP V19BQ1RJT05fU0VUX1RUTDsKKwkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9 CisJCQkJCWRldl9mbG93LT5kdi5wb3J0X2lkX2FjdGlvbi0+YWN0aW9uOworCQkJYWN0aW9uX2Zs YWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fUE9SVF9JRDsKKwkJCWRldl9mbG93LT5oYW5kbGUtPmZh dGVfYWN0aW9uID0gTUxYNV9GTE9XX0ZBVEVfUE9SVF9JRDsKKwkJCXNhbXBsZV9hY3QtPmFjdGlv bl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX1BPUlRfSUQ7CisJCQludW1fb2ZfZGVzdCsrOwog CQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfSU5DX1RDUF9TRVE6Ci0JCWNh c2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfREVDX1RDUF9TRVE6Ci0JCQlpZiAoZmxvd19kdl9jb252 ZXJ0X2FjdGlvbl9tb2RpZnlfdGNwX3NlcQotCQkJCQkobWhkcl9yZXMsIGFjdGlvbnMsIGVycm9y KSkKKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9GTEFHOgorCQkJYWN0aW9uX2ZsYWdzIHw9 IE1MWDVfRkxPV19BQ1RJT05fRkxBRzsKKwkJCXdrcy0+bWFyayA9IDE7CisJCQlpZiAoZGV2X2Nv bmYtPmR2X3htZXRhX2VuICE9IE1MWDVfWE1FVEFfTU9ERV9MRUdBQ1kpIHsKKwkJCQlzdHJ1Y3Qg cnRlX2Zsb3dfYWN0aW9uX21hcmsgbWFyayA9IHsKKwkJCQkJLmlkID0gTUxYNV9GTE9XX01BUktf REVGQVVMVCwKKwkJCQl9OworCisJCQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rpb25fbWFyayhk ZXYsICZtYXJrLAorCQkJCQkJCQltaGRyX3JlcywKKwkJCQkJCQkJZXJyb3IpKQorCQkJCQlyZXR1 cm4gLXJ0ZV9lcnJubzsKKwkJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9NQVJL X0VYVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXRhZ19iZSA9IG1seDVfZmxvd19tYXJrX3NldChN TFg1X0ZMT1dfTUFSS19ERUZBVUxUKTsKKwkJCS8qCisJCQkgKiBPbmx5IG9uZSBGTEFHIG9yIE1B UksgaXMgc3VwcG9ydGVkIHBlciBkZXZpY2UgZmxvdworCQkJICogcmlnaHQgbm93LiBTbyB0aGUg cG9pbnRlciB0byB0aGUgdGFnIHJlc291cmNlIG11c3QgYmUKKwkJCSAqIHplcm8gYmVmb3JlIHRo ZSByZWdpc3RlciBwcm9jZXNzLgorCQkJICovCisJCQlNTFg1X0FTU0VSVCghaGFuZGxlLT5kdmgu cml4X3RhZyk7CisJCQlpZiAoZmxvd19kdl90YWdfcmVzb3VyY2VfcmVnaXN0ZXIoZGV2LCB0YWdf YmUsCisJCQkJCQkJICBkZXZfZmxvdywgZXJyb3IpKQogCQkJCXJldHVybiAtcnRlX2Vycm5vOwot CQkJYWN0aW9uX2ZsYWdzIHw9IGFjdGlvbnMtPnR5cGUgPT0KLQkJCQkJUlRFX0ZMT1dfQUNUSU9O X1RZUEVfSU5DX1RDUF9TRVEgPwotCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX0lOQ19UQ1BfU0VRIDoK LQkJCQkJTUxYNV9GTE9XX0FDVElPTl9ERUNfVENQX1NFUTsKKwkJCU1MWDVfQVNTRVJUKGRldl9m bG93LT5kdi50YWdfcmVzb3VyY2UpOworCQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9uc19u KytdID0KKwkJCQkJZGV2X2Zsb3ctPmR2LnRhZ19yZXNvdXJjZS0+YWN0aW9uOwogCQkJYnJlYWs7 CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUFSSzoKKwkJCWFjdGlvbl9mbGFncyB8PSBN TFg1X0ZMT1dfQUNUSU9OX01BUks7CisJCQl3a3MtPm1hcmsgPSAxOworCQkJaWYgKGRldl9jb25m LT5kdl94bWV0YV9lbiAhPSBNTFg1X1hNRVRBX01PREVfTEVHQUNZKSB7CisJCQkJY29uc3Qgc3Ry dWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrICptYXJrID0KKwkJCQkJKGNvbnN0IHN0cnVjdCBydGVf Zmxvd19hY3Rpb25fbWFyayAqKQorCQkJCQkJYWN0aW9ucy0+Y29uZjsKIAotCQljYXNlIFJURV9G TE9XX0FDVElPTl9UWVBFX0lOQ19UQ1BfQUNLOgotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBF X0RFQ19UQ1BfQUNLOgotCQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rpb25fbW9kaWZ5X3RjcF9h Y2sKLQkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCisJCQkJaWYgKGZsb3dfZHZfY29u dmVydF9hY3Rpb25fbWFyayhkZXYsIG1hcmssCisJCQkJCQkJCW1oZHJfcmVzLAorCQkJCQkJCQll cnJvcikpCisJCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1 X0ZMT1dfQUNUSU9OX01BUktfRVhUOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogRmFsbC10aHJv dWdoICovCisJCWNhc2UgTUxYNV9SVEVfRkxPV19BQ1RJT05fVFlQRV9NQVJLOgorCQkJLyogTGVn YWN5IChub24tZXh0ZW5zaXZlKSBNQVJLIGFjdGlvbi4gKi8KKwkJCXRhZ19iZSA9IG1seDVfZmxv d19tYXJrX3NldAorCQkJICAgICAgKCgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJr ICopCisJCQkgICAgICAgKGFjdGlvbnMtPmNvbmYpKS0+aWQpOworCQkJTUxYNV9BU1NFUlQoIWhh bmRsZS0+ZHZoLnJpeF90YWcpOworCQkJaWYgKGZsb3dfZHZfdGFnX3Jlc291cmNlX3JlZ2lzdGVy KGRldiwgdGFnX2JlLAorCQkJCQkJCSAgZGV2X2Zsb3csIGVycm9yKSkKIAkJCQlyZXR1cm4gLXJ0 ZV9lcnJubzsKLQkJCWFjdGlvbl9mbGFncyB8PSBhY3Rpb25zLT50eXBlID09Ci0JCQkJCVJURV9G TE9XX0FDVElPTl9UWVBFX0lOQ19UQ1BfQUNLID8KLQkJCQkJTUxYNV9GTE9XX0FDVElPTl9JTkNf VENQX0FDSyA6Ci0JCQkJCU1MWDVfRkxPV19BQ1RJT05fREVDX1RDUF9BQ0s7CisJCQlNTFg1X0FT U0VSVChkZXZfZmxvdy0+ZHYudGFnX3Jlc291cmNlKTsKKwkJCWRldl9mbG93LT5kdi5hY3Rpb25z W2FjdGlvbnNfbisrXSA9CisJCQkJCWRldl9mbG93LT5kdi50YWdfcmVzb3VyY2UtPmFjdGlvbjsK IAkJCWJyZWFrOwotCQljYXNlIE1MWDVfUlRFX0ZMT1dfQUNUSU9OX1RZUEVfVEFHOgotCQkJaWYg KGZsb3dfZHZfY29udmVydF9hY3Rpb25fc2V0X3JlZwotCQkJCQkobWhkcl9yZXMsIGFjdGlvbnMs IGVycm9yKSkKKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfTUVUQToKKwkJCWlmIChm bG93X2R2X2NvbnZlcnRfYWN0aW9uX3NldF9tZXRhCisJCQkJKGRldiwgbWhkcl9yZXMsIGF0dHIs CisJCQkJIChjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NldF9tZXRhICopCisJCQkJICBh Y3Rpb25zLT5jb25mLCBlcnJvcikpCiAJCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JCQlhY3Rpb25f ZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9TRVRfVEFHOworCQkJYWN0aW9uX2ZsYWdzIHw9IE1M WDVfRkxPV19BQ1RJT05fU0VUX01FVEE7CiAJCQlicmVhazsKLQkJY2FzZSBNTFg1X1JURV9GTE9X X0FDVElPTl9UWVBFX0NPUFlfTVJFRzoKLQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX2Nv cHlfbXJlZwotCQkJCQkoZGV2LCBtaGRyX3JlcywgYWN0aW9ucywgZXJyb3IpKQorCQljYXNlIFJU RV9GTE9XX0FDVElPTl9UWVBFX1NFVF9UQUc6CisJCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlv bl9zZXRfdGFnCisJCQkJKGRldiwgbWhkcl9yZXMsCisJCQkJIChjb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfYWN0aW9uX3NldF90YWcgKikKKwkJCQkgIGFjdGlvbnMtPmNvbmYsIGVycm9yKSkKIAkJCQly ZXR1cm4gLXJ0ZV9lcnJubzsKIAkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX1NF VF9UQUc7CiAJCQlicmVhazsKLQkJY2FzZSBNTFg1X1JURV9GTE9XX0FDVElPTl9UWVBFX0RFRkFV TFRfTUlTUzoKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RFRkFVTFRfTUlT UzsKLQkJCWRldl9mbG93LT5oYW5kbGUtPmZhdGVfYWN0aW9uID0KLQkJCQkJTUxYNV9GTE9XX0ZB VEVfREVGQVVMVF9NSVNTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVf TUVURVI6Ci0JCQlpZiAoIXdrcy0+Zm0pCi0JCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldChl cnJvciwgcnRlX2Vycm5vLAotCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwKLQkJCQkJ TlVMTCwgIkZhaWxlZCB0byBnZXQgbWV0ZXIgaW4gZmxvdy4iKTsKLQkJCS8qIFNldCB0aGUgbWV0 ZXIgYWN0aW9uLiAqLwotCQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9uc19uKytdID0KLQkJ CQl3a3MtPmZtLT5tZXRlcl9hY3Rpb25fZzsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1df QUNUSU9OX01FVEVSOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VU X0lQVjRfRFNDUDoKLQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21vZGlmeV9pcHY0X2Rz Y3AobWhkcl9yZXMsCi0JCQkJCQkJICAgICAgYWN0aW9ucywgZXJyb3IpKQotCQkJCXJldHVybiAt cnRlX2Vycm5vOwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fU0VUX0lQVjRf RFNDUDsKLQkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9JUFY2X0RT Q1A6Ci0JCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlvbl9tb2RpZnlfaXB2Nl9kc2NwKG1oZHJf cmVzLAotCQkJCQkJCSAgICAgIGFjdGlvbnMsIGVycm9yKSkKLQkJCQlyZXR1cm4gLXJ0ZV9lcnJu bzsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX1NFVF9JUFY2X0RTQ1A7CisJ CWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfRFJPUDoKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1 X0ZMT1dfQUNUSU9OX0RST1A7CisJCQlkZXZfZmxvdy0+aGFuZGxlLT5mYXRlX2FjdGlvbiA9IE1M WDVfRkxPV19GQVRFX0RST1A7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQ RV9TQU1QTEU6Ci0JCQlzYW1wbGVfYWN0X3BvcyA9IGFjdGlvbnNfbjsKLQkJCXNhbXBsZSA9IChj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NhbXBsZSAqKQotCQkJCSBhY3Rpb24tPmNvbmY7 Ci0JCQlhY3Rpb25zX24rKzsKLQkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX1NB TVBMRTsKLQkJCS8qIHB1dCBlbmNhcCBhY3Rpb24gaW50byBncm91cCBpZiB3b3JrIHdpdGggcG9y dCBpZCAqLwotCQkJaWYgKChhY3Rpb25fZmxhZ3MgJiBNTFg1X0ZMT1dfQUNUSU9OX0VOQ0FQKSAm JgotCQkJICAgIChhY3Rpb25fZmxhZ3MgJiBNTFg1X0ZMT1dfQUNUSU9OX1BPUlRfSUQpKQotCQkJ CXNhbXBsZV9hY3QtPmFjdGlvbl9mbGFncyB8PQotCQkJCQkJCU1MWDVfRkxPV19BQ1RJT05fRU5D QVA7CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUVVFVUU6CisJCQlxdWV1ZSA9IGFjdGlv bnMtPmNvbmY7CisJCQlyc3NfZGVzYy0+cXVldWVfbnVtID0gMTsKKwkJCXJzc19kZXNjLT5xdWV1 ZVswXSA9IHF1ZXVlLT5pbmRleDsKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9O X1FVRVVFOworCQkJZGV2X2Zsb3ctPmhhbmRsZS0+ZmF0ZV9hY3Rpb24gPSBNTFg1X0ZMT1dfRkFU RV9RVUVVRTsKKwkJCXNhbXBsZV9hY3QtPmFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9O X1FVRVVFOworCQkJbnVtX29mX2Rlc3QrKzsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0FD VElPTl9UWVBFX01PRElGWV9GSUVMRDoKLQkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21v ZGlmeV9maWVsZAotCQkJCQkoZGV2LCBtaGRyX3JlcywgYWN0aW9ucywgYXR0ciwgZXJyb3IpKQot CQkJCXJldHVybiAtcnRlX2Vycm5vOwotCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJ T05fTU9ESUZZX0ZJRUxEOworCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1JTUzoKKwkJCXJz cyA9IGFjdGlvbnMtPmNvbmY7CisJCQltZW1jcHkocnNzX2Rlc2MtPnF1ZXVlLCByc3MtPnF1ZXVl LAorCQkJICAgICAgIHJzcy0+cXVldWVfbnVtICogc2l6ZW9mKHVpbnQxNl90KSk7CisJCQlyc3Nf ZGVzYy0+cXVldWVfbnVtID0gcnNzLT5xdWV1ZV9udW07CisJCQkvKiBOVUxMIFJTUyBrZXkgaW5k aWNhdGVzIGRlZmF1bHQgUlNTIGtleS4gKi8KKwkJCXJzc19rZXkgPSAhcnNzLT5rZXkgPyByc3Nf aGFzaF9kZWZhdWx0X2tleSA6IHJzcy0+a2V5OworCQkJbWVtY3B5KHJzc19kZXNjLT5rZXksIHJz c19rZXksIE1MWDVfUlNTX0hBU0hfS0VZX0xFTik7CisJCQkvKgorCQkJICogcnNzLT5sZXZlbCBh bmQgcnNzLnR5cGVzIHNob3VsZCBiZSBzZXQgaW4gYWR2YW5jZQorCQkJICogd2hlbiBleHBhbmRp bmcgaXRlbXMgZm9yIFJTUy4KKwkJCSAqLworCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19B Q1RJT05fUlNTOworCQkJZGV2X2Zsb3ctPmhhbmRsZS0+ZmF0ZV9hY3Rpb24gPSByc3NfZGVzYy0+ c2hhcmVkX3JzcyA/CisJCQkJTUxYNV9GTE9XX0ZBVEVfU0hBUkVEX1JTUyA6CisJCQkJTUxYNV9G TE9XX0ZBVEVfUVVFVUU7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9D T05OVFJBQ0s6CisJCWNhc2UgTUxYNV9SVEVfRkxPV19BQ1RJT05fVFlQRV9BR0U6CiAJCQlvd25l cl9pZHggPSAodWludDMyX3QpKHVpbnRwdHJfdClhY3Rpb24tPmNvbmY7Ci0JCQljdCA9IGZsb3df YXNvX2N0X2dldF9ieV9pZHgoZGV2LCBvd25lcl9pZHgpOwotCQkJaWYgKCFjdCkKLQkJCQlyZXR1 cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUwsCi0JCQkJCQlSVEVfRkxPV19FUlJP Ul9UWVBFX0FDVElPTiwKLQkJCQkJCU5VTEwsCi0JCQkJCQkiRmFpbGVkIHRvIGdldCBDVCBvYmpl Y3QuIik7Ci0JCQlpZiAobWx4NV9hc29fY3RfYXZhaWxhYmxlKHByaXYtPnNoLCBjdCkpCi0JCQkJ cmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgcnRlX2Vycm5vLAotCQkJCQkJUlRFX0ZM T1dfRVJST1JfVFlQRV9BQ1RJT04sCi0JCQkJCQlOVUxMLAotCQkJCQkJIkNUIGlzIHVuYXZhaWxh YmxlLiIpOwotCQkJaWYgKGN0LT5pc19vcmlnaW5hbCkKLQkJCQlkZXZfZmxvdy0+ZHYuYWN0aW9u c1thY3Rpb25zX25dID0KLQkJCQkJCQljdC0+ZHJfYWN0aW9uX29yaWc7Ci0JCQllbHNlCi0JCQkJ ZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9uc19uXSA9Ci0JCQkJCQkJY3QtPmRyX2FjdGlvbl9y cGx5OwotCQkJaWYgKGZsb3ctPmN0ID09IDApIHsKLQkJCQlmbG93LT5pbmRpcmVjdF90eXBlID0K LQkJCQkJCU1MWDVfSU5ESVJFQ1RfQUNUSU9OX1RZUEVfQ1Q7Ci0JCQkJZmxvdy0+Y3QgPSBvd25l cl9pZHg7Ci0JCQkJX19hdG9taWNfZmV0Y2hfYWRkKCZjdC0+cmVmY250LCAxLAorCQkJYWdlX2Fj dCA9IGZsb3dfYXNvX2FnZV9nZXRfYnlfaWR4KGRldiwgb3duZXJfaWR4KTsKKwkJCWlmIChmbG93 LT5hZ2UgPT0gMCkgeworCQkJCWZsb3ctPmFnZSA9IG93bmVyX2lkeDsKKwkJCQlfX2F0b21pY19m ZXRjaF9hZGQoJmFnZV9hY3QtPnJlZmNudCwgMSwKIAkJCQkJCSAgIF9fQVRPTUlDX1JFTEFYRUQp OwogCQkJfQotCQkJYWN0aW9uc19uKys7Ci0JCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FD VElPTl9DVDsKKwkJCWFnZV9hY3RfcG9zID0gYWN0aW9uc19uKys7CisJCQlhY3Rpb25fZmxhZ3Mg fD0gTUxYNV9GTE9XX0FDVElPTl9BR0U7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19BQ1RJ T05fVFlQRV9FTkQ6Ci0JCQlhY3Rpb25zX2VuZCA9IHRydWU7Ci0JCQlpZiAobWhkcl9yZXMtPmFj dGlvbnNfbnVtKSB7Ci0JCQkJLyogY3JlYXRlIG1vZGlmeSBhY3Rpb24gaWYgbmVlZGVkLiAqLwot CQkJCWlmIChmbG93X2R2X21vZGlmeV9oZHJfcmVzb3VyY2VfcmVnaXN0ZXIKLQkJCQkJKGRldiwg bWhkcl9yZXMsIGRldl9mbG93LCBlcnJvcikpCi0JCQkJCXJldHVybiAtcnRlX2Vycm5vOwotCQkJ CWRldl9mbG93LT5kdi5hY3Rpb25zW21vZGlmeV9hY3Rpb25fcG9zaXRpb25dID0KLQkJCQkJaGFu ZGxlLT5kdmgubW9kaWZ5X2hkci0+YWN0aW9uOwotCQkJfQotCQkJLyoKLQkJCSAqIEhhbmRsZSBB R0UgYW5kIENPVU5UIGFjdGlvbiBieSBzaW5nbGUgSFcgY291bnRlcgotCQkJICogd2hlbiB0aGV5 IGFyZSBub3Qgc2hhcmVkLgorCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0FHRToKKwkJCW5v bl9zaGFyZWRfYWdlID0gYWN0aW9uLT5jb25mOworCQkJYWdlX2FjdF9wb3MgPSBhY3Rpb25zX24r KzsKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0FHRTsKKwkJCWJyZWFrOwor CQljYXNlIE1MWDVfUlRFX0ZMT1dfQUNUSU9OX1RZUEVfQ09VTlQ6CisJCQlvd25lcl9pZHggPSAo dWludDMyX3QpKHVpbnRwdHJfdClhY3Rpb24tPmNvbmY7CisJCQljbnRfYWN0ID0gZmxvd19kdl9j b3VudGVyX2dldF9ieV9pZHgoZGV2LCBvd25lcl9pZHgsCisJCQkJCQkJICAgICBOVUxMKTsKKwkJ CU1MWDVfQVNTRVJUKGNudF9hY3QgIT0gTlVMTCk7CisJCQkvKioKKwkJCSAqIFdoZW4gY3JlYXRp bmcgbWV0ZXIgZHJvcCBmbG93IGluIGRyb3AgdGFibGUsIHRoZQorCQkJICogY291bnRlciBzaG91 bGQgbm90IG92ZXJ3cml0ZSB0aGUgcnRlIGZsb3cgY291bnRlci4KIAkJCSAqLwotCQkJaWYgKGFj dGlvbl9mbGFncyAmIE1MWDVfRkxPV19BQ1RJT05fQUdFKSB7Ci0JCQkJaWYgKChub25fc2hhcmVk X2FnZSAmJiBjb3VudCkgfHwKLQkJCQkgICAgIWZsb3dfaGl0X2Fzb19zdXBwb3J0ZWQocHJpdi0+ c2gsIGF0dHIpKSB7Ci0JCQkJCS8qIENyZWF0ZXMgYWdlIGJ5IGNvdW50ZXJzLiAqLwotCQkJCQlj bnRfYWN0ID0gZmxvd19kdl9wcmVwYXJlX2NvdW50ZXIKLQkJCQkJCQkJKGRldiwgZGV2X2Zsb3cs Ci0JCQkJCQkJCSBmbG93LCBjb3VudCwKLQkJCQkJCQkJIG5vbl9zaGFyZWRfYWdlLAotCQkJCQkJ CQkgZXJyb3IpOwotCQkJCQlpZiAoIWNudF9hY3QpCi0JCQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsK LQkJCQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWdlX2FjdF9wb3NdID0KLQkJCQkJCQkJY250X2Fj dC0+YWN0aW9uOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKCFmbG93LT5hZ2UgJiYgbm9u X3NoYXJlZF9hZ2UpIHsKLQkJCQkJZmxvdy0+YWdlID0gZmxvd19kdl9hc29fYWdlX2FsbG9jCi0J CQkJCQkJCShkZXYsIGVycm9yKTsKLQkJCQkJaWYgKCFmbG93LT5hZ2UpCi0JCQkJCQlyZXR1cm4g LXJ0ZV9lcnJubzsKLQkJCQkJZmxvd19kdl9hc29fYWdlX3BhcmFtc19pbml0Ci0JCQkJCQkgICAg KGRldiwgZmxvdy0+YWdlLAotCQkJCQkJICAgICBub25fc2hhcmVkX2FnZS0+Y29udGV4dCA/Ci0J CQkJCQkgICAgIG5vbl9zaGFyZWRfYWdlLT5jb250ZXh0IDoKLQkJCQkJCSAgICAgKHZvaWQgKiko dWludHB0cl90KQotCQkJCQkJICAgICAoZGV2X2Zsb3ctPmZsb3dfaWR4KSwKLQkJCQkJCSAgICAg bm9uX3NoYXJlZF9hZ2UtPnRpbWVvdXQpOwotCQkJCX0KLQkJCQlhZ2VfYWN0ID0gZmxvd19hc29f YWdlX2dldF9ieV9pZHgoZGV2LAotCQkJCQkJCQkgIGZsb3ctPmFnZSk7Ci0JCQkJZGV2X2Zsb3ct PmR2LmFjdGlvbnNbYWdlX2FjdF9wb3NdID0KLQkJCQkJCQkgICAgIGFnZV9hY3QtPmRyX2FjdGlv bjsKLQkJCX0KLQkJCWlmIChhY3Rpb25fZmxhZ3MgJiBNTFg1X0ZMT1dfQUNUSU9OX0NPVU5UKSB7 Ci0JCQkJLyoKLQkJCQkgKiBDcmVhdGUgb25lIGNvdW50IGFjdGlvbiwgdG8gYmUgdXNlZAotCQkJ CSAqIGJ5IGFsbCBzdWItZmxvd3MuCi0JCQkJICovCi0JCQkJY250X2FjdCA9IGZsb3dfZHZfcHJl cGFyZV9jb3VudGVyKGRldiwgZGV2X2Zsb3csCi0JCQkJCQkJCSAgZmxvdywgY291bnQsCi0JCQkJ CQkJCSAgTlVMTCwgZXJyb3IpOwotCQkJCWlmICghY250X2FjdCkKLQkJCQkJcmV0dXJuIC1ydGVf ZXJybm87CisJCQlpZiAoYXR0ci0+Z3JvdXAgPT0gTUxYNV9GTE9XX1RBQkxFX0xFVkVMX01FVEVS ICYmCisJCQkgICAgZGV2X2Zsb3ctPmR2LnRhYmxlX2lkID09IE1MWDVfTVRSX1RBQkxFX0lEX0RS T1ApIHsKIAkJCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQotCQkJCQkJCQlj bnRfYWN0LT5hY3Rpb247CisJCQkJCQkJY250X2FjdC0+YWN0aW9uOworCQkJfSBlbHNlIHsKKwkJ CQlpZiAoZmxvdy0+Y291bnRlciA9PSAwKSB7CisJCQkJCWZsb3ctPmNvdW50ZXIgPSBvd25lcl9p ZHg7CisJCQkJCV9fYXRvbWljX2ZldGNoX2FkZAorCQkJCQkJKCZjbnRfYWN0LT5zaGFyZWRfaW5m by5yZWZjbnQsCisJCQkJCQkgMSwgX19BVE9NSUNfUkVMQVhFRCk7CisJCQkJfQorCQkJCS8qIFNh dmUgaW5mb3JtYXRpb24gZmlyc3QsIHdpbGwgYXBwbHkgbGF0ZXIuICovCisJCQkJYWN0aW9uX2Zs YWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fQ09VTlQ7CiAJCQl9Ci0JCWRlZmF1bHQ6CiAJCQlicmVh azsKLQkJfQotCQlpZiAobWhkcl9yZXMtPmFjdGlvbnNfbnVtICYmCi0JCSAgICBtb2RpZnlfYWN0 aW9uX3Bvc2l0aW9uID09IFVJTlQzMl9NQVgpCi0JCQltb2RpZnlfYWN0aW9uX3Bvc2l0aW9uID0g YWN0aW9uc19uKys7Ci0JfQotCWZvciAoOyBpdGVtcy0+dHlwZSAhPSBSVEVfRkxPV19JVEVNX1RZ UEVfRU5EOyBpdGVtcysrKSB7Ci0JCWludCB0dW5uZWwgPSAhIShpdGVtX2ZsYWdzICYgTUxYNV9G TE9XX0xBWUVSX1RVTk5FTCk7Ci0JCWludCBpdGVtX3R5cGUgPSBpdGVtcy0+dHlwZTsKLQotCQlp ZiAoIW1seDVfZmxvd19vc19pdGVtX3N1cHBvcnRlZChpdGVtX3R5cGUpKQotCQkJcmV0dXJuIHJ0 ZV9mbG93X2Vycm9yX3NldChlcnJvciwgRU5PVFNVUCwKLQkJCQkJCSAgUlRFX0ZMT1dfRVJST1Jf VFlQRV9JVEVNLAotCQkJCQkJICBOVUxMLCAiaXRlbSBub3Qgc3VwcG9ydGVkIik7Ci0JCXN3aXRj aCAoaXRlbV90eXBlKSB7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0VTUDoKLQkJCWZsb3df ZHZfdHJhbnNsYXRlX2l0ZW1fZXNwKG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAotCQkJCQkJICAg aXRlbXMsIHR1bm5lbCk7Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9QUklPUklUWV9NQVBf TDQ7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9FU1A7CisJCWNhc2UgUlRFX0ZMT1df QUNUSU9OX1RZUEVfQ09VTlQ6CisJCQlpZiAoIXByaXYtPnNoLT5jZGV2LT5jb25maWcuZGV2eCkg eworCQkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKKwkJCQkJICAgICAgKGVycm9yLCBFTk9U U1VQLAorCQkJCQkgICAgICAgUlRFX0ZMT1dfRVJST1JfVFlQRV9VTlNQRUNJRklFRCwKKwkJCQkJ ICAgICAgIE5VTEwsCisJCQkJCSAgICAgICAiY291bnQgYWN0aW9uIG5vdCBzdXBwb3J0ZWQiKTsK KwkJCX0KKwkJCS8qIFNhdmUgaW5mb3JtYXRpb24gZmlyc3QsIHdpbGwgYXBwbHkgbGF0ZXIuICov CisJCQljb3VudCA9IGFjdGlvbi0+Y29uZjsKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1df QUNUSU9OX0NPVU5UOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1BPUlRf SUQ6Ci0JCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX3BvcnRfaWQKLQkJCQkoZGV2LCBtYXRjaF9t YXNrLCBtYXRjaF92YWx1ZSwgaXRlbXMsIGF0dHIpOwotCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9X X0lURU1fUE9SVF9JRDsKKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9PRl9QT1BfVkxBTjoK KwkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9CisJCQkJCQlwcml2LT5zaC0+ cG9wX3ZsYW5fYWN0aW9uOworCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fT0Zf UE9QX1ZMQU47CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfUkVQUkVTRU5U RURfUE9SVDoKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fcmVwcmVzZW50ZWRfcG9ydAotCQkJ CShkZXYsIG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLCBpdGVtcywgYXR0cik7Ci0JCQlsYXN0X2l0 ZW0gPSBNTFg1X0ZMT1dfSVRFTV9SRVBSRVNFTlRFRF9QT1JUOworCQljYXNlIFJURV9GTE9XX0FD VElPTl9UWVBFX09GX1BVU0hfVkxBTjoKKwkJCWlmICghKGFjdGlvbl9mbGFncyAmCisJCQkgICAg ICBNTFg1X0ZMT1dfQUNUSU9OX09GX1NFVF9WTEFOX1ZJRCkpCisJCQkJZmxvd19kZXZfZ2V0X3Zs YW5faW5mb19mcm9tX2l0ZW1zKGl0ZW1zLCAmdmxhbik7CisJCQl2bGFuLmV0aF9wcm90byA9IHJ0 ZV9iZV90b19jcHVfMTYKKwkJCSAgICAgKCgoKGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25f b2ZfcHVzaF92bGFuICopCisJCQkJCQkgICBhY3Rpb25zLT5jb25mKS0+ZXRoZXJ0eXBlKSk7CisJ CQlmb3VuZF9hY3Rpb24gPSBtbHg1X2Zsb3dfZmluZF9hY3Rpb24KKwkJCQkJKGFjdGlvbnMgKyAx LAorCQkJCQkgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfT0ZfU0VUX1ZMQU5fVklEKTsKKwkJCWlmIChm b3VuZF9hY3Rpb24pCisJCQkJbWx4NV91cGRhdGVfdmxhbl92aWRfcGNwKGZvdW5kX2FjdGlvbiwg JnZsYW4pOworCQkJZm91bmRfYWN0aW9uID0gbWx4NV9mbG93X2ZpbmRfYWN0aW9uCisJCQkJCShh Y3Rpb25zICsgMSwKKwkJCQkJIFJURV9GTE9XX0FDVElPTl9UWVBFX09GX1NFVF9WTEFOX1BDUCk7 CisJCQlpZiAoZm91bmRfYWN0aW9uKQorCQkJCW1seDVfdXBkYXRlX3ZsYW5fdmlkX3BjcChmb3Vu ZF9hY3Rpb24sICZ2bGFuKTsKKwkJCWlmIChmbG93X2R2X2NyZWF0ZV9hY3Rpb25fcHVzaF92bGFu CisJCQkJCSAgICAoZGV2LCBhdHRyLCAmdmxhbiwgZGV2X2Zsb3csIGVycm9yKSkKKwkJCQlyZXR1 cm4gLXJ0ZV9lcnJubzsKKwkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9CisJ CQkJCWRldl9mbG93LT5kdi5wdXNoX3ZsYW5fcmVzLT5hY3Rpb247CisJCQlhY3Rpb25fZmxhZ3Mg fD0gTUxYNV9GTE9XX0FDVElPTl9PRl9QVVNIX1ZMQU47CiAJCQlicmVhazsKLQkJY2FzZSBSVEVf RkxPV19JVEVNX1RZUEVfRVRIOgotCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9ldGgobWF0Y2hf bWFzaywgbWF0Y2hfdmFsdWUsCi0JCQkJCQkgICBpdGVtcywgdHVubmVsLAotCQkJCQkJICAgZGV2 X2Zsb3ctPmR2Lmdyb3VwKTsKLQkJCW1hdGNoZXIucHJpb3JpdHkgPSBhY3Rpb25fZmxhZ3MgJgot CQkJCQlNTFg1X0ZMT1dfQUNUSU9OX0RFRkFVTFRfTUlTUyAmJgotCQkJCQkhZGV2X2Zsb3ctPmV4 dGVybmFsID8KLQkJCQkJTUxYNV9QUklPUklUWV9NQVBfTDMgOgotCQkJCQlNTFg1X1BSSU9SSVRZ X01BUF9MMjsKLQkJCWxhc3RfaXRlbSA9IHR1bm5lbCA/IE1MWDVfRkxPV19MQVlFUl9JTk5FUl9M MiA6Ci0JCQkJCSAgICAgTUxYNV9GTE9XX0xBWUVSX09VVEVSX0wyOworCQljYXNlIFJURV9GTE9X X0FDVElPTl9UWVBFX09GX1NFVF9WTEFOX1BDUDoKKwkJCS8qIG9mX3ZsYW5fcHVzaCBhY3Rpb24g aGFuZGxlZCB0aGlzIGFjdGlvbiAqLworCQkJTUxYNV9BU1NFUlQoYWN0aW9uX2ZsYWdzICYKKwkJ CQkgICAgTUxYNV9GTE9XX0FDVElPTl9PRl9QVVNIX1ZMQU4pOwogCQkJYnJlYWs7Ci0JCWNhc2Ug UlRFX0ZMT1dfSVRFTV9UWVBFX1ZMQU46Ci0JCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX3ZsYW4o ZGV2X2Zsb3csCi0JCQkJCQkgICAgbWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCi0JCQkJCQkgICAg aXRlbXMsIHR1bm5lbCwKLQkJCQkJCSAgICBkZXZfZmxvdy0+ZHYuZ3JvdXApOwotCQkJbWF0Y2hl ci5wcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlfTUFQX0wyOwotCQkJbGFzdF9pdGVtID0gdHVubmVs ID8gKE1MWDVfRkxPV19MQVlFUl9JTk5FUl9MMiB8Ci0JCQkJCSAgICAgIE1MWDVfRkxPV19MQVlF Ul9JTk5FUl9WTEFOKSA6Ci0JCQkJCSAgICAgKE1MWDVfRkxPV19MQVlFUl9PVVRFUl9MMiB8Ci0J CQkJCSAgICAgIE1MWDVfRkxPV19MQVlFUl9PVVRFUl9WTEFOKTsKKwkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9PRl9TRVRfVkxBTl9WSUQ6CisJCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9G TE9XX0FDVElPTl9PRl9QVVNIX1ZMQU4pCisJCQkJYnJlYWs7CisJCQlmbG93X2Rldl9nZXRfdmxh bl9pbmZvX2Zyb21faXRlbXMoaXRlbXMsICZ2bGFuKTsKKwkJCW1seDVfdXBkYXRlX3ZsYW5fdmlk X3BjcChhY3Rpb25zLCAmdmxhbik7CisJCQkvKiBJZiBubyBWTEFOIHB1c2ggLSB0aGlzIGlzIGEg bW9kaWZ5IGhlYWRlciBhY3Rpb24gKi8KKwkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21v ZGlmeV92bGFuX3ZpZAorCQkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCisJCQkJcmV0 dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9PRl9T RVRfVkxBTl9WSUQ7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfSVBWNDoK LQkJCW1seDVfZmxvd190dW5uZWxfaXBfY2hlY2soaXRlbXMsIG5leHRfcHJvdG9jb2wsCi0JCQkJ CQkgICZpdGVtX2ZsYWdzLCAmdHVubmVsKTsKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1faXB2 NChtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJCSAgICBpdGVtcywgdHVubmVsLAotCQkJ CQkJICAgIGRldl9mbG93LT5kdi5ncm91cCk7Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9Q UklPUklUWV9NQVBfTDM7Ci0JCQlsYXN0X2l0ZW0gPSB0dW5uZWwgPyBNTFg1X0ZMT1dfTEFZRVJf SU5ORVJfTDNfSVBWNCA6Ci0JCQkJCSAgICAgTUxYNV9GTE9XX0xBWUVSX09VVEVSX0wzX0lQVjQ7 Ci0JCQlpZiAoaXRlbXMtPm1hc2sgIT0gTlVMTCAmJgotCQkJICAgICgoY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2l0ZW1faXB2NCAqKQotCQkJICAgICBpdGVtcy0+bWFzayktPmhkci5uZXh0X3Byb3Rv X2lkKSB7Ci0JCQkJbmV4dF9wcm90b2NvbCA9Ci0JCQkJCSgoY29uc3Qgc3RydWN0IHJ0ZV9mbG93 X2l0ZW1faXB2NCAqKQotCQkJCQkgKGl0ZW1zLT5zcGVjKSktPmhkci5uZXh0X3Byb3RvX2lkOwot CQkJCW5leHRfcHJvdG9jb2wgJj0KLQkJCQkJKChjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9p cHY0ICopCi0JCQkJCSAoaXRlbXMtPm1hc2spKS0+aGRyLm5leHRfcHJvdG9faWQ7Ci0JCQl9IGVs c2UgewotCQkJCS8qIFJlc2V0IGZvciBpbm5lciBsYXllci4gKi8KLQkJCQluZXh0X3Byb3RvY29s ID0gMHhmZjsKLQkJCX0KKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9WWExBTl9FTkNBUDoK KwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9OVkdSRV9FTkNBUDoKKwkJCWlmIChmbG93X2R2 X2NyZWF0ZV9hY3Rpb25fbDJfZW5jYXAoZGV2LCBhY3Rpb25zLAorCQkJCQkJCSAgIGRldl9mbG93 LAorCQkJCQkJCSAgIGF0dHItPnRyYW5zZmVyLAorCQkJCQkJCSAgIGVycm9yKSkKKwkJCQlyZXR1 cm4gLXJ0ZV9lcnJubzsKKwkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbisrXSA9CisJ CQkJCWRldl9mbG93LT5kdi5lbmNhcF9kZWNhcC0+YWN0aW9uOworCQkJYWN0aW9uX2ZsYWdzIHw9 IE1MWDVfRkxPV19BQ1RJT05fRU5DQVA7CisJCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9GTE9X X0FDVElPTl9TQU1QTEUpCisJCQkJc2FtcGxlX2FjdC0+YWN0aW9uX2ZsYWdzIHw9CisJCQkJCQkJ TUxYNV9GTE9XX0FDVElPTl9FTkNBUDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0lURU1f VFlQRV9JUFY2OgotCQkJbWx4NV9mbG93X3R1bm5lbF9pcF9jaGVjayhpdGVtcywgbmV4dF9wcm90 b2NvbCwKLQkJCQkJCSAgJml0ZW1fZmxhZ3MsICZ0dW5uZWwpOwotCQkJZmxvd19kdl90cmFuc2xh dGVfaXRlbV9pcHY2KG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAotCQkJCQkJICAgIGl0ZW1zLCB0 dW5uZWwsCi0JCQkJCQkgICAgZGV2X2Zsb3ctPmR2Lmdyb3VwKTsKLQkJCW1hdGNoZXIucHJpb3Jp dHkgPSBNTFg1X1BSSU9SSVRZX01BUF9MMzsKLQkJCWxhc3RfaXRlbSA9IHR1bm5lbCA/IE1MWDVf RkxPV19MQVlFUl9JTk5FUl9MM19JUFY2IDoKLQkJCQkJICAgICBNTFg1X0ZMT1dfTEFZRVJfT1VU RVJfTDNfSVBWNjsKLQkJCWlmIChpdGVtcy0+bWFzayAhPSBOVUxMICYmCi0JCQkgICAgKChjb25z dCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2ICopCi0JCQkgICAgIGl0ZW1zLT5tYXNrKS0+aGRy LnByb3RvKSB7Ci0JCQkJbmV4dF9wcm90b2NvbCA9Ci0JCQkJCSgoY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2l0ZW1faXB2NiAqKQotCQkJCQkgaXRlbXMtPnNwZWMpLT5oZHIucHJvdG87Ci0JCQkJbmV4 dF9wcm90b2NvbCAmPQotCQkJCQkoKGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjYgKikK LQkJCQkJIGl0ZW1zLT5tYXNrKS0+aGRyLnByb3RvOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBSZXNl dCBmb3IgaW5uZXIgbGF5ZXIuICovCi0JCQkJbmV4dF9wcm90b2NvbCA9IDB4ZmY7Ci0JCQl9CisJ CWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfVlhMQU5fREVDQVA6CisJCWNhc2UgUlRFX0ZMT1df QUNUSU9OX1RZUEVfTlZHUkVfREVDQVA6CisJCQlpZiAoZmxvd19kdl9jcmVhdGVfYWN0aW9uX2wy X2RlY2FwKGRldiwgZGV2X2Zsb3csCisJCQkJCQkJICAgYXR0ci0+dHJhbnNmZXIsCisJCQkJCQkJ ICAgZXJyb3IpKQorCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJZGV2X2Zsb3ctPmR2LmFjdGlv bnNbYWN0aW9uc19uKytdID0KKwkJCQkJZGV2X2Zsb3ctPmR2LmVuY2FwX2RlY2FwLT5hY3Rpb247 CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9ERUNBUDsKIAkJCWJyZWFrOwot CQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9JUFY2X0ZSQUdfRVhUOgotCQkJZmxvd19kdl90cmFu c2xhdGVfaXRlbV9pcHY2X2ZyYWdfZXh0KG1hdGNoX21hc2ssCi0JCQkJCQkJICAgICBtYXRjaF92 YWx1ZSwKLQkJCQkJCQkgICAgIGl0ZW1zLCB0dW5uZWwpOwotCQkJbGFzdF9pdGVtID0gdHVubmVs ID8KLQkJCQkJTUxYNV9GTE9XX0xBWUVSX0lOTkVSX0wzX0lQVjZfRlJBR19FWFQgOgotCQkJCQlN TFg1X0ZMT1dfTEFZRVJfT1VURVJfTDNfSVBWNl9GUkFHX0VYVDsKLQkJCWlmIChpdGVtcy0+bWFz ayAhPSBOVUxMICYmCi0JCQkgICAgKChjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2X2Zy YWdfZXh0ICopCi0JCQkgICAgIGl0ZW1zLT5tYXNrKS0+aGRyLm5leHRfaGVhZGVyKSB7Ci0JCQkJ bmV4dF9wcm90b2NvbCA9Ci0JCQkJKChjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2X2Zy YWdfZXh0ICopCi0JCQkJIGl0ZW1zLT5zcGVjKS0+aGRyLm5leHRfaGVhZGVyOwotCQkJCW5leHRf cHJvdG9jb2wgJj0KLQkJCQkoKGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjZfZnJhZ19l eHQgKikKLQkJCQkgaXRlbXMtPm1hc2spLT5oZHIubmV4dF9oZWFkZXI7CisJCWNhc2UgUlRFX0ZM T1dfQUNUSU9OX1RZUEVfUkFXX0VOQ0FQOgorCQkJLyogSGFuZGxlIGVuY2FwIHdpdGggcHJlY2Vk aW5nIGRlY2FwLiAqLworCQkJaWYgKGFjdGlvbl9mbGFncyAmIE1MWDVfRkxPV19BQ1RJT05fREVD QVApIHsKKwkJCQlpZiAoZmxvd19kdl9jcmVhdGVfYWN0aW9uX3Jhd19lbmNhcAorCQkJCQkoZGV2 LCBhY3Rpb25zLCBkZXZfZmxvdywgYXR0ciwgZXJyb3IpKQorCQkJCQlyZXR1cm4gLXJ0ZV9lcnJu bzsKKwkJCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQorCQkJCQlkZXZfZmxv dy0+ZHYuZW5jYXBfZGVjYXAtPmFjdGlvbjsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogUmVzZXQgZm9y IGlubmVyIGxheWVyLiAqLwotCQkJCW5leHRfcHJvdG9jb2wgPSAweGZmOworCQkJCS8qIEhhbmRs ZSBlbmNhcCB3aXRob3V0IHByZWNlZGluZyBkZWNhcC4gKi8KKwkJCQlpZiAoZmxvd19kdl9jcmVh dGVfYWN0aW9uX2wyX2VuY2FwCisJCQkJICAgIChkZXYsIGFjdGlvbnMsIGRldl9mbG93LCBhdHRy LT50cmFuc2ZlciwKKwkJCQkgICAgIGVycm9yKSkKKwkJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJ CQkJZGV2X2Zsb3ctPmR2LmFjdGlvbnNbYWN0aW9uc19uKytdID0KKwkJCQkJZGV2X2Zsb3ctPmR2 LmVuY2FwX2RlY2FwLT5hY3Rpb247CiAJCQl9CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9X X0FDVElPTl9FTkNBUDsKKwkJCWlmIChhY3Rpb25fZmxhZ3MgJiBNTFg1X0ZMT1dfQUNUSU9OX1NB TVBMRSkKKwkJCQlzYW1wbGVfYWN0LT5hY3Rpb25fZmxhZ3MgfD0KKwkJCQkJCQlNTFg1X0ZMT1df QUNUSU9OX0VOQ0FQOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1RDUDoK LQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fdGNwKG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAot CQkJCQkJICAgaXRlbXMsIHR1bm5lbCk7Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9QUklP UklUWV9NQVBfTDQ7Ci0JCQlsYXN0X2l0ZW0gPSB0dW5uZWwgPyBNTFg1X0ZMT1dfTEFZRVJfSU5O RVJfTDRfVENQIDoKLQkJCQkJICAgICBNTFg1X0ZMT1dfTEFZRVJfT1VURVJfTDRfVENQOwotCQkJ YnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1VEUDoKLQkJCWZsb3dfZHZfdHJhbnNs YXRlX2l0ZW1fdWRwKG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVlLAotCQkJCQkJICAgaXRlbXMsIHR1 bm5lbCk7Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9QUklPUklUWV9NQVBfTDQ7Ci0JCQls YXN0X2l0ZW0gPSB0dW5uZWwgPyBNTFg1X0ZMT1dfTEFZRVJfSU5ORVJfTDRfVURQIDoKLQkJCQkJ ICAgICBNTFg1X0ZMT1dfTEFZRVJfT1VURVJfTDRfVURQOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRF X0ZMT1dfSVRFTV9UWVBFX0dSRToKLQkJCW1hdGNoZXIucHJpb3JpdHkgPSBNTFg1X1RVTk5FTF9Q UklPX0dFVChyc3NfZGVzYyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZRVJfR1JFOwot CQkJdHVubmVsX2l0ZW0gPSBpdGVtczsKLQkJCWdyZV9pdGVtID0gaXRlbXM7CisJCWNhc2UgUlRF X0ZMT1dfQUNUSU9OX1RZUEVfUkFXX0RFQ0FQOgorCQkJd2hpbGUgKCgrK2FjdGlvbiktPnR5cGUg PT0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVfVk9JRCkKKwkJCQk7CisJCQlpZiAoYWN0aW9uLT50eXBl ICE9IFJURV9GTE9XX0FDVElPTl9UWVBFX1JBV19FTkNBUCkgeworCQkJCWlmIChmbG93X2R2X2Ny ZWF0ZV9hY3Rpb25fbDJfZGVjYXAKKwkJCQkgICAgKGRldiwgZGV2X2Zsb3csIGF0dHItPnRyYW5z ZmVyLCBlcnJvcikpCisJCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJCWRldl9mbG93LT5kdi5h Y3Rpb25zW2FjdGlvbnNfbisrXSA9CisJCQkJCWRldl9mbG93LT5kdi5lbmNhcF9kZWNhcC0+YWN0 aW9uOworCQkJfQorCQkJLyogSWYgZGVjYXAgaXMgZm9sbG93ZWQgYnkgZW5jYXAsIGhhbmRsZSBp dCBhdCBlbmNhcC4gKi8KKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ0FQ OwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0dSRV9LRVk6Ci0JCQlmbG93 X2R2X3RyYW5zbGF0ZV9pdGVtX2dyZV9rZXkobWF0Y2hfbWFzaywKLQkJCQkJCSAgICAgICBtYXRj aF92YWx1ZSwgaXRlbXMpOwotCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0dSRV9LRVk7 CisJCWNhc2UgTUxYNV9SVEVfRkxPV19BQ1RJT05fVFlQRV9KVU1QOgorCQkJZGV2X2Zsb3ctPmR2 LmFjdGlvbnNbYWN0aW9uc19uKytdID0KKwkJCQkodm9pZCAqKSh1aW50cHRyX3QpYWN0aW9uLT5j b25mOworCQkJYWN0aW9uX2ZsYWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fSlVNUDsKIAkJCWJyZWFr OwotCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9HUkVfT1BUSU9OOgotCQkJbWF0Y2hlci5wcmlv cml0eSA9IE1MWDVfVFVOTkVMX1BSSU9fR0VUKHJzc19kZXNjKTsKLQkJCWxhc3RfaXRlbSA9IE1M WDVfRkxPV19MQVlFUl9HUkU7Ci0JCQl0dW5uZWxfaXRlbSA9IGl0ZW1zOworCQljYXNlIFJURV9G TE9XX0FDVElPTl9UWVBFX0pVTVA6CisJCQlqdW1wX2dyb3VwID0gKChjb25zdCBzdHJ1Y3QgcnRl X2Zsb3dfYWN0aW9uX2p1bXAgKikKKwkJCQkJCQlhY3Rpb24tPmNvbmYpLT5ncm91cDsKKwkJCWdy cF9pbmZvLnN0ZF90YmxfZml4ID0gMDsKKwkJCWlmIChkZXZfZmxvdy0+c2tpcF9zY2FsZSAmCisJ CQkJKDEgPDwgTUxYNV9TQ0FMRV9KVU1QX0ZMT1dfR1JPVVBfQklUKSkKKwkJCQlncnBfaW5mby5z a2lwX3NjYWxlID0gMTsKKwkJCWVsc2UKKwkJCQlncnBfaW5mby5za2lwX3NjYWxlID0gMDsKKwkJ CXJldCA9IG1seDVfZmxvd19ncm91cF90b190YWJsZShkZXYsIHR1bm5lbCwKKwkJCQkJCSAgICAg ICBqdW1wX2dyb3VwLAorCQkJCQkJICAgICAgICZ0YWJsZSwKKwkJCQkJCSAgICAgICAmZ3JwX2lu Zm8sIGVycm9yKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCXRibCA9IGZsb3df ZHZfdGJsX3Jlc291cmNlX2dldChkZXYsIHRhYmxlLCBhdHRyLT5lZ3Jlc3MsCisJCQkJCQkgICAg ICAgYXR0ci0+dHJhbnNmZXIsCisJCQkJCQkgICAgICAgISFkZXZfZmxvdy0+ZXh0ZXJuYWwsCisJ CQkJCQkgICAgICAgdHVubmVsLCBqdW1wX2dyb3VwLCAwLAorCQkJCQkJICAgICAgIDAsIGVycm9y KTsKKwkJCWlmICghdGJsKQorCQkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKKwkJCQkJCShl cnJvciwgZXJybm8sCisJCQkJCQkgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04sCisJCQkJCQkg TlVMTCwKKwkJCQkJCSAiY2Fubm90IGNyZWF0ZSBqdW1wIGFjdGlvbi4iKTsKKwkJCWlmIChmbG93 X2R2X2p1bXBfdGJsX3Jlc291cmNlX3JlZ2lzdGVyCisJCQkgICAgKGRldiwgdGJsLCBkZXZfZmxv dywgZXJyb3IpKSB7CisJCQkJZmxvd19kdl90YmxfcmVzb3VyY2VfcmVsZWFzZShNTFg1X1NIKGRl diksIHRibCk7CisJCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAorCQkJCQkJKGVycm9yLCBl cnJubywKKwkJCQkJCSBSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwKKwkJCQkJCSBOVUxMLAor CQkJCQkJICJjYW5ub3QgY3JlYXRlIGp1bXAgYWN0aW9uLiIpOworCQkJfQorCQkJZGV2X2Zsb3ct PmR2LmFjdGlvbnNbYWN0aW9uc19uKytdID0KKwkJCQkJZGV2X2Zsb3ctPmR2Lmp1bXAtPmFjdGlv bjsKKwkJCWFjdGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0pVTVA7CisJCQlkZXZfZmxv dy0+aGFuZGxlLT5mYXRlX2FjdGlvbiA9IE1MWDVfRkxPV19GQVRFX0pVTVA7CisJCQlzYW1wbGVf YWN0LT5hY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9KVU1QOworCQkJbnVtX29mX2Rl c3QrKzsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9OVkdSRToKLQkJCW1h dGNoZXIucHJpb3JpdHkgPSBNTFg1X1RVTk5FTF9QUklPX0dFVChyc3NfZGVzYyk7Ci0JCQlsYXN0 X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZRVJfR1JFOwotCQkJdHVubmVsX2l0ZW0gPSBpdGVtczsKKwkJ Y2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfTUFDX1NSQzoKKwkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9TRVRfTUFDX0RTVDoKKwkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0aW9uX21v ZGlmeV9tYWMKKwkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCisJCQkJcmV0dXJuIC1y dGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gYWN0aW9ucy0+dHlwZSA9PQorCQkJCQlSVEVf RkxPV19BQ1RJT05fVFlQRV9TRVRfTUFDX1NSQyA/CisJCQkJCU1MWDVfRkxPV19BQ1RJT05fU0VU X01BQ19TUkMgOgorCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX1NFVF9NQUNfRFNUOwogCQkJYnJlYWs7 Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1ZYTEFOOgotCQkJZmxvd19kdl90cmFuc2xhdGVf aXRlbV92eGxhbihkZXYsIGF0dHIsCi0JCQkJCQkgICAgIG1hdGNoX21hc2ssIG1hdGNoX3ZhbHVl LAotCQkJCQkJICAgICBpdGVtcywgdHVubmVsKTsKLQkJCW1hdGNoZXIucHJpb3JpdHkgPSBNTFg1 X1RVTk5FTF9QUklPX0dFVChyc3NfZGVzYyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZ RVJfVlhMQU47CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX0lQVjRfU1JDOgorCQlj YXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9JUFY0X0RTVDoKKwkJCWlmIChmbG93X2R2X2Nv bnZlcnRfYWN0aW9uX21vZGlmeV9pcHY0CisJCQkJCShtaGRyX3JlcywgYWN0aW9ucywgZXJyb3Ip KQorCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJYWN0aW9uX2ZsYWdzIHw9IGFjdGlvbnMtPnR5 cGUgPT0KKwkJCQkJUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX0lQVjRfU1JDID8KKwkJCQkJTUxY NV9GTE9XX0FDVElPTl9TRVRfSVBWNF9TUkMgOgorCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX1NFVF9J UFY0X0RTVDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9WWExBTl9HUEU6 Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOwot CQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX1ZYTEFOX0dQRTsKLQkJCXR1bm5lbF9pdGVt ID0gaXRlbXM7CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX0lQVjZfU1JDOgorCQlj YXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9JUFY2X0RTVDoKKwkJCWlmIChmbG93X2R2X2Nv bnZlcnRfYWN0aW9uX21vZGlmeV9pcHY2CisJCQkJCShtaGRyX3JlcywgYWN0aW9ucywgZXJyb3Ip KQorCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJYWN0aW9uX2ZsYWdzIHw9IGFjdGlvbnMtPnR5 cGUgPT0KKwkJCQkJUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX0lQVjZfU1JDID8KKwkJCQkJTUxY NV9GTE9XX0FDVElPTl9TRVRfSVBWNl9TUkMgOgorCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX1NFVF9J UFY2X0RTVDsKIAkJCWJyZWFrOwotCQljYXNlIFJURV9GTE9XX0lURU1fVFlQRV9HRU5FVkU6Ci0J CQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOwotCQkJ bGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0dFTkVWRTsKLQkJCXR1bm5lbF9pdGVtID0gaXRl bXM7CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfU0VUX1RQX1NSQzoKKwkJY2FzZSBSVEVf RkxPV19BQ1RJT05fVFlQRV9TRVRfVFBfRFNUOgorCQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rp b25fbW9kaWZ5X3RwCisJCQkJCShtaGRyX3JlcywgYWN0aW9ucywgaXRlbXMsCisJCQkJCSAmZmxv d19hdHRyLCBkZXZfZmxvdywgISEoYWN0aW9uX2ZsYWdzICYKKwkJCQkJIE1MWDVfRkxPV19BQ1RJ T05fREVDQVApLCBlcnJvcikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxh Z3MgfD0gYWN0aW9ucy0+dHlwZSA9PQorCQkJCQlSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfVFBf U1JDID8KKwkJCQkJTUxYNV9GTE9XX0FDVElPTl9TRVRfVFBfU1JDIDoKKwkJCQkJTUxYNV9GTE9X X0FDVElPTl9TRVRfVFBfRFNUOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBF X0dFTkVWRV9PUFQ6Ci0JCQlyZXQgPSBmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX2dlbmV2ZV9vcHQo ZGV2LCBtYXRjaF9tYXNrLAotCQkJCQkJCSAgbWF0Y2hfdmFsdWUsCi0JCQkJCQkJICBpdGVtcywg ZXJyb3IpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9y LCAtcmV0LAotCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0lURU0sIE5VTEwsCi0JCQkJCSJjYW5u b3QgY3JlYXRlIEdFTkVWRSBUTFYgb3B0aW9uIik7Ci0JCQlmbG93LT5nZW5ldmVfdGx2X29wdGlv biA9IDE7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZRVJfR0VORVZFX09QVDsKKwkJY2Fz ZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9ERUNfVFRMOgorCQkJaWYgKGZsb3dfZHZfY29udmVydF9h Y3Rpb25fbW9kaWZ5X2RlY190dGwKKwkJCQkJKG1oZHJfcmVzLCBpdGVtcywgJmZsb3dfYXR0ciwg ZGV2X2Zsb3csCisJCQkJCSAhIShhY3Rpb25fZmxhZ3MgJgorCQkJCQkgTUxYNV9GTE9XX0FDVElP Tl9ERUNBUCksIGVycm9yKSkKKwkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKKwkJCWFjdGlvbl9mbGFn cyB8PSBNTFg1X0ZMT1dfQUNUSU9OX0RFQ19UVEw7CiAJCQlicmVhazsKLQkJY2FzZSBSVEVfRkxP V19JVEVNX1RZUEVfTVBMUzoKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fbXBscyhtYXRjaF9t YXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJCSAgICBpdGVtcywgbGFzdF9pdGVtLCB0dW5uZWwpOwot CQkJbWF0Y2hlci5wcmlvcml0eSA9IE1MWDVfVFVOTkVMX1BSSU9fR0VUKHJzc19kZXNjKTsKLQkJ CWxhc3RfaXRlbSA9IE1MWDVfRkxPV19MQVlFUl9NUExTOworCQljYXNlIFJURV9GTE9XX0FDVElP Tl9UWVBFX1NFVF9UVEw6CisJCQlpZiAoZmxvd19kdl9jb252ZXJ0X2FjdGlvbl9tb2RpZnlfdHRs CisJCQkJCShtaGRyX3JlcywgYWN0aW9ucywgaXRlbXMsICZmbG93X2F0dHIsCisJCQkJCSBkZXZf ZmxvdywgISEoYWN0aW9uX2ZsYWdzICYKKwkJCQkJIE1MWDVfRkxPV19BQ1RJT05fREVDQVApLCBl cnJvcikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9G TE9XX0FDVElPTl9TRVRfVFRMOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBF X01BUks6Ci0JCQlmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX21hcmsoZGV2LCBtYXRjaF9tYXNrLAot CQkJCQkJICAgIG1hdGNoX3ZhbHVlLCBpdGVtcyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1df SVRFTV9NQVJLOworCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0lOQ19UQ1BfU0VROgorCQlj YXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0RFQ19UQ1BfU0VROgorCQkJaWYgKGZsb3dfZHZfY29u dmVydF9hY3Rpb25fbW9kaWZ5X3RjcF9zZXEKKwkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJv cikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gYWN0aW9ucy0+ dHlwZSA9PQorCQkJCQlSVEVfRkxPV19BQ1RJT05fVFlQRV9JTkNfVENQX1NFUSA/CisJCQkJCU1M WDVfRkxPV19BQ1RJT05fSU5DX1RDUF9TRVEgOgorCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX0RFQ19U Q1BfU0VROwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX01FVEE6Ci0JCQlm bG93X2R2X3RyYW5zbGF0ZV9pdGVtX21ldGEoZGV2LCBtYXRjaF9tYXNrLAotCQkJCQkJICAgIG1h dGNoX3ZhbHVlLCBhdHRyLCBpdGVtcyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9N RVRBREFUQTsKKworCQljYXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0lOQ19UQ1BfQUNLOgorCQlj YXNlIFJURV9GTE9XX0FDVElPTl9UWVBFX0RFQ19UQ1BfQUNLOgorCQkJaWYgKGZsb3dfZHZfY29u dmVydF9hY3Rpb25fbW9kaWZ5X3RjcF9hY2sKKwkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJv cikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gYWN0aW9ucy0+ dHlwZSA9PQorCQkJCQlSVEVfRkxPV19BQ1RJT05fVFlQRV9JTkNfVENQX0FDSyA/CisJCQkJCU1M WDVfRkxPV19BQ1RJT05fSU5DX1RDUF9BQ0sgOgorCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX0RFQ19U Q1BfQUNLOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0lDTVA6Ci0JCQlm bG93X2R2X3RyYW5zbGF0ZV9pdGVtX2ljbXAobWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCi0JCQkJ CQkgICAgaXRlbXMsIHR1bm5lbCk7Ci0JCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9QUklPUklU WV9NQVBfTDQ7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfTEFZRVJfSUNNUDsKKwkJY2FzZSBN TFg1X1JURV9GTE9XX0FDVElPTl9UWVBFX1RBRzoKKwkJCWlmIChmbG93X2R2X2NvbnZlcnRfYWN0 aW9uX3NldF9yZWcKKwkJCQkJKG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikpCisJCQkJcmV0dXJu IC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9TRVRfVEFH OwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0lDTVA2OgotCQkJZmxvd19k dl90cmFuc2xhdGVfaXRlbV9pY21wNihtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJCSAg ICAgIGl0ZW1zLCB0dW5uZWwpOwotCQkJbWF0Y2hlci5wcmlvcml0eSA9IE1MWDVfUFJJT1JJVFlf TUFQX0w0OwotCQkJbGFzdF9pdGVtID0gTUxYNV9GTE9XX0xBWUVSX0lDTVA2OworCQljYXNlIE1M WDVfUlRFX0ZMT1dfQUNUSU9OX1RZUEVfQ09QWV9NUkVHOgorCQkJaWYgKGZsb3dfZHZfY29udmVy dF9hY3Rpb25fY29weV9tcmVnCisJCQkJCShkZXYsIG1oZHJfcmVzLCBhY3Rpb25zLCBlcnJvcikp CisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FD VElPTl9TRVRfVEFHOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX1RBRzoK LQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fdGFnKGRldiwgbWF0Y2hfbWFzaywKLQkJCQkJCSAg IG1hdGNoX3ZhbHVlLCBpdGVtcyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9UQUc7 CisJCWNhc2UgTUxYNV9SVEVfRkxPV19BQ1RJT05fVFlQRV9ERUZBVUxUX01JU1M6CisJCQlhY3Rp b25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9ERUZBVUxUX01JU1M7CisJCQlkZXZfZmxvdy0+ aGFuZGxlLT5mYXRlX2FjdGlvbiA9CisJCQkJCU1MWDVfRkxPV19GQVRFX0RFRkFVTFRfTUlTUzsK IAkJCWJyZWFrOwotCQljYXNlIE1MWDVfUlRFX0ZMT1dfSVRFTV9UWVBFX1RBRzoKLQkJCWZsb3df ZHZfdHJhbnNsYXRlX21seDVfaXRlbV90YWcoZGV2LCBtYXRjaF9tYXNrLAotCQkJCQkJCW1hdGNo X3ZhbHVlLCBpdGVtcyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9UQUc7CisJCWNh c2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUVURVI6CisJCQlpZiAoIXdrcy0+Zm0pCisJCQkJcmV0 dXJuIHJ0ZV9mbG93X2Vycm9yX3NldChlcnJvciwgcnRlX2Vycm5vLAorCQkJCQlSVEVfRkxPV19F UlJPUl9UWVBFX0FDVElPTiwKKwkJCQkJTlVMTCwgIkZhaWxlZCB0byBnZXQgbWV0ZXIgaW4gZmxv dy4iKTsKKwkJCS8qIFNldCB0aGUgbWV0ZXIgYWN0aW9uLiAqLworCQkJZGV2X2Zsb3ctPmR2LmFj dGlvbnNbYWN0aW9uc19uKytdID0KKwkJCQl3a3MtPmZtLT5tZXRlcl9hY3Rpb25fZzsKKwkJCWFj dGlvbl9mbGFncyB8PSBNTFg1X0ZMT1dfQUNUSU9OX01FVEVSOwogCQkJYnJlYWs7Ci0JCWNhc2Ug TUxYNV9SVEVfRkxPV19JVEVNX1RZUEVfVFhfUVVFVUU6Ci0JCQlmbG93X2R2X3RyYW5zbGF0ZV9p dGVtX3R4X3F1ZXVlKGRldiwgbWF0Y2hfbWFzaywKLQkJCQkJCQltYXRjaF92YWx1ZSwKLQkJCQkJ CQlpdGVtcyk7Ci0JCQlsYXN0X2l0ZW0gPSBNTFg1X0ZMT1dfSVRFTV9UWF9RVUVVRTsKKwkJY2Fz ZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfSVBWNF9EU0NQOgorCQkJaWYgKGZsb3dfZHZfY29u dmVydF9hY3Rpb25fbW9kaWZ5X2lwdjRfZHNjcChtaGRyX3JlcywKKwkJCQkJCQkgICAgICBhY3Rp b25zLCBlcnJvcikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0g TUxYNV9GTE9XX0FDVElPTl9TRVRfSVBWNF9EU0NQOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZM T1dfSVRFTV9UWVBFX0dUUDoKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ3RwKG1hdGNoX21h c2ssIG1hdGNoX3ZhbHVlLAotCQkJCQkJICAgaXRlbXMsIHR1bm5lbCk7Ci0JCQltYXRjaGVyLnBy aW9yaXR5ID0gTUxYNV9UVU5ORUxfUFJJT19HRVQocnNzX2Rlc2MpOwotCQkJbGFzdF9pdGVtID0g TUxYNV9GTE9XX0xBWUVSX0dUUDsKKwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRfSVBW Nl9EU0NQOgorCQkJaWYgKGZsb3dfZHZfY29udmVydF9hY3Rpb25fbW9kaWZ5X2lwdjZfZHNjcCht aGRyX3JlcywKKwkJCQkJCQkgICAgICBhY3Rpb25zLCBlcnJvcikpCisJCQkJcmV0dXJuIC1ydGVf ZXJybm87CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9TRVRfSVBWNl9EU0NQ OwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0dUUF9QU0M6Ci0JCQlyZXQg PSBmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX2d0cF9wc2MobWF0Y2hfbWFzaywKLQkJCQkJCQkgIG1h dGNoX3ZhbHVlLAotCQkJCQkJCSAgaXRlbXMpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcnRl X2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCAtcmV0LAotCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0lU RU0sIE5VTEwsCi0JCQkJCSJjYW5ub3QgY3JlYXRlIEdUUCBQU0MgaXRlbSIpOwotCQkJbGFzdF9p dGVtID0gTUxYNV9GTE9XX0xBWUVSX0dUUF9QU0M7CisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZ UEVfU0FNUExFOgorCQkJc2FtcGxlX2FjdF9wb3MgPSBhY3Rpb25zX247CisJCQlzYW1wbGUgPSAo Y29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9zYW1wbGUgKikKKwkJCQkgYWN0aW9uLT5jb25m OworCQkJYWN0aW9uc19uKys7CisJCQlhY3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9T QU1QTEU7CisJCQkvKiBwdXQgZW5jYXAgYWN0aW9uIGludG8gZ3JvdXAgaWYgd29yayB3aXRoIHBv cnQgaWQgKi8KKwkJCWlmICgoYWN0aW9uX2ZsYWdzICYgTUxYNV9GTE9XX0FDVElPTl9FTkNBUCkg JiYKKwkJCSAgICAoYWN0aW9uX2ZsYWdzICYgTUxYNV9GTE9XX0FDVElPTl9QT1JUX0lEKSkKKwkJ CQlzYW1wbGVfYWN0LT5hY3Rpb25fZmxhZ3MgfD0KKwkJCQkJCQlNTFg1X0ZMT1dfQUNUSU9OX0VO Q0FQOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0VDUFJJOgotCQkJaWYg KCFtbHg1X2ZsZXhfcGFyc2VyX2VjcHJpX2V4aXN0KGRldikpIHsKLQkJCQkvKiBDcmVhdGUgaXQg b25seSB0aGUgZmlyc3QgdGltZSB0byBiZSB1c2VkLiAqLwotCQkJCXJldCA9IG1seDVfZmxleF9w YXJzZXJfZWNwcmlfYWxsb2MoZGV2KTsKLQkJCQlpZiAocmV0KQotCQkJCQlyZXR1cm4gcnRlX2Zs b3dfZXJyb3Jfc2V0Ci0JCQkJCQkoZXJyb3IsIC1yZXQsCi0JCQkJCQlSVEVfRkxPV19FUlJPUl9U WVBFX0lURU0sCisJCWNhc2UgUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTU9ESUZZX0ZJRUxEOgorCQkJ aWYgKGZsb3dfZHZfY29udmVydF9hY3Rpb25fbW9kaWZ5X2ZpZWxkCisJCQkJCShkZXYsIG1oZHJf cmVzLCBhY3Rpb25zLCBhdHRyLCBlcnJvcikpCisJCQkJcmV0dXJuIC1ydGVfZXJybm87CisJCQlh Y3Rpb25fZmxhZ3MgfD0gTUxYNV9GTE9XX0FDVElPTl9NT0RJRllfRklFTEQ7CisJCQlicmVhazsK KwkJY2FzZSBSVEVfRkxPV19BQ1RJT05fVFlQRV9DT05OVFJBQ0s6CisJCQlvd25lcl9pZHggPSAo dWludDMyX3QpKHVpbnRwdHJfdClhY3Rpb24tPmNvbmY7CisJCQljdCA9IGZsb3dfYXNvX2N0X2dl dF9ieV9pZHgoZGV2LCBvd25lcl9pZHgpOworCQkJaWYgKCFjdCkKKwkJCQlyZXR1cm4gcnRlX2Zs b3dfZXJyb3Jfc2V0KGVycm9yLCBFSU5WQUwsCisJCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FD VElPTiwKIAkJCQkJCU5VTEwsCi0JCQkJCQkiY2Fubm90IGNyZWF0ZSBlQ1BSSSBwYXJzZXIiKTsK KwkJCQkJCSJGYWlsZWQgdG8gZ2V0IENUIG9iamVjdC4iKTsKKwkJCWlmIChtbHg1X2Fzb19jdF9h dmFpbGFibGUocHJpdi0+c2gsIGN0KSkKKwkJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVy cm9yLCBydGVfZXJybm8sCisJCQkJCQlSVEVfRkxPV19FUlJPUl9UWVBFX0FDVElPTiwKKwkJCQkJ CU5VTEwsCisJCQkJCQkiQ1QgaXMgdW5hdmFpbGFibGUuIik7CisJCQlpZiAoY3QtPmlzX29yaWdp bmFsKQorCQkJCWRldl9mbG93LT5kdi5hY3Rpb25zW2FjdGlvbnNfbl0gPQorCQkJCQkJCWN0LT5k cl9hY3Rpb25fb3JpZzsKKwkJCWVsc2UKKwkJCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thY3Rpb25z X25dID0KKwkJCQkJCQljdC0+ZHJfYWN0aW9uX3JwbHk7CisJCQlpZiAoZmxvdy0+Y3QgPT0gMCkg eworCQkJCWZsb3ctPmluZGlyZWN0X3R5cGUgPQorCQkJCQkJTUxYNV9JTkRJUkVDVF9BQ1RJT05f VFlQRV9DVDsKKwkJCQlmbG93LT5jdCA9IG93bmVyX2lkeDsKKwkJCQlfX2F0b21pY19mZXRjaF9h ZGQoJmN0LT5yZWZjbnQsIDEsCisJCQkJCQkgICBfX0FUT01JQ19SRUxBWEVEKTsKIAkJCX0KLQkJ CWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZWNwcmkoZGV2LCBtYXRjaF9tYXNrLAotCQkJCQkJICAg ICBtYXRjaF92YWx1ZSwgaXRlbXMsCi0JCQkJCQkgICAgIGxhc3RfaXRlbSk7Ci0JCQkvKiBObyBv dGhlciBwcm90b2NvbCBzaG91bGQgZm9sbG93IGVDUFJJIGxheWVyLiAqLwotCQkJbGFzdF9pdGVt ID0gTUxYNV9GTE9XX0xBWUVSX0VDUFJJOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlRFX0ZMT1dfSVRF TV9UWVBFX0lOVEVHUklUWToKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1faW50ZWdyaXR5KGl0 ZW1zLCBpbnRlZ3JpdHlfaXRlbXMsCi0JCQkJCQkJICZsYXN0X2l0ZW0pOwotCQkJYnJlYWs7Ci0J CWNhc2UgUlRFX0ZMT1dfSVRFTV9UWVBFX0NPTk5UUkFDSzoKLQkJCWZsb3dfZHZfdHJhbnNsYXRl X2l0ZW1fYXNvX2N0KGRldiwgbWF0Y2hfbWFzaywKLQkJCQkJCSAgICAgIG1hdGNoX3ZhbHVlLCBp dGVtcyk7Ci0JCQlicmVhazsKLQkJY2FzZSBSVEVfRkxPV19JVEVNX1RZUEVfRkxFWDoKLQkJCWZs b3dfZHZfdHJhbnNsYXRlX2l0ZW1fZmxleChkZXYsIG1hdGNoX21hc2ssCi0JCQkJCQkgICAgbWF0 Y2hfdmFsdWUsIGl0ZW1zLAotCQkJCQkJICAgIGRldl9mbG93LCB0dW5uZWwgIT0gMCk7Ci0JCQls YXN0X2l0ZW0gPSB0dW5uZWwgPyBNTFg1X0ZMT1dfSVRFTV9JTk5FUl9GTEVYIDoKLQkJCQkgICAg TUxYNV9GTE9XX0lURU1fT1VURVJfRkxFWDsKKwkJCWFjdGlvbnNfbisrOworCQkJYWN0aW9uX2Zs YWdzIHw9IE1MWDVfRkxPV19BQ1RJT05fQ1Q7CiAJCQlicmVhazsKKwkJY2FzZSBSVEVfRkxPV19B Q1RJT05fVFlQRV9FTkQ6CisJCQlhY3Rpb25zX2VuZCA9IHRydWU7CisJCQlpZiAobWhkcl9yZXMt PmFjdGlvbnNfbnVtKSB7CisJCQkJLyogY3JlYXRlIG1vZGlmeSBhY3Rpb24gaWYgbmVlZGVkLiAq LworCQkJCWlmIChmbG93X2R2X21vZGlmeV9oZHJfcmVzb3VyY2VfcmVnaXN0ZXIKKwkJCQkJKGRl diwgbWhkcl9yZXMsIGRldl9mbG93LCBlcnJvcikpCisJCQkJCXJldHVybiAtcnRlX2Vycm5vOwor CQkJCWRldl9mbG93LT5kdi5hY3Rpb25zW21vZGlmeV9hY3Rpb25fcG9zaXRpb25dID0KKwkJCQkJ aGFuZGxlLT5kdmgubW9kaWZ5X2hkci0+YWN0aW9uOworCQkJfQorCQkJLyoKKwkJCSAqIEhhbmRs ZSBBR0UgYW5kIENPVU5UIGFjdGlvbiBieSBzaW5nbGUgSFcgY291bnRlcgorCQkJICogd2hlbiB0 aGV5IGFyZSBub3Qgc2hhcmVkLgorCQkJICovCisJCQlpZiAoYWN0aW9uX2ZsYWdzICYgTUxYNV9G TE9XX0FDVElPTl9BR0UpIHsKKwkJCQlpZiAoKG5vbl9zaGFyZWRfYWdlICYmIGNvdW50KSB8fAor CQkJCSAgICAhZmxvd19oaXRfYXNvX3N1cHBvcnRlZChwcml2LT5zaCwgYXR0cikpIHsKKwkJCQkJ LyogQ3JlYXRlcyBhZ2UgYnkgY291bnRlcnMuICovCisJCQkJCWNudF9hY3QgPSBmbG93X2R2X3By ZXBhcmVfY291bnRlcgorCQkJCQkJCQkoZGV2LCBkZXZfZmxvdywKKwkJCQkJCQkJIGZsb3csIGNv dW50LAorCQkJCQkJCQkgbm9uX3NoYXJlZF9hZ2UsCisJCQkJCQkJCSBlcnJvcik7CisJCQkJCWlm ICghY250X2FjdCkKKwkJCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJCQlkZXZfZmxvdy0+ZHYu YWN0aW9uc1thZ2VfYWN0X3Bvc10gPQorCQkJCQkJCQljbnRfYWN0LT5hY3Rpb247CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCQlpZiAoIWZsb3ctPmFnZSAmJiBub25fc2hhcmVkX2FnZSkgeworCQkJ CQlmbG93LT5hZ2UgPSBmbG93X2R2X2Fzb19hZ2VfYWxsb2MKKwkJCQkJCQkJKGRldiwgZXJyb3Ip OworCQkJCQlpZiAoIWZsb3ctPmFnZSkKKwkJCQkJCXJldHVybiAtcnRlX2Vycm5vOworCQkJCQlm bG93X2R2X2Fzb19hZ2VfcGFyYW1zX2luaXQKKwkJCQkJCSAgICAoZGV2LCBmbG93LT5hZ2UsCisJ CQkJCQkgICAgIG5vbl9zaGFyZWRfYWdlLT5jb250ZXh0ID8KKwkJCQkJCSAgICAgbm9uX3NoYXJl ZF9hZ2UtPmNvbnRleHQgOgorCQkJCQkJICAgICAodm9pZCAqKSh1aW50cHRyX3QpCisJCQkJCQkg ICAgIChkZXZfZmxvdy0+Zmxvd19pZHgpLAorCQkJCQkJICAgICBub25fc2hhcmVkX2FnZS0+dGlt ZW91dCk7CisJCQkJfQorCQkJCWFnZV9hY3QgPSBmbG93X2Fzb19hZ2VfZ2V0X2J5X2lkeChkZXYs CisJCQkJCQkJCSAgZmxvdy0+YWdlKTsKKwkJCQlkZXZfZmxvdy0+ZHYuYWN0aW9uc1thZ2VfYWN0 X3Bvc10gPQorCQkJCQkJCSAgICAgYWdlX2FjdC0+ZHJfYWN0aW9uOworCQkJfQorCQkJaWYgKGFj dGlvbl9mbGFncyAmIE1MWDVfRkxPV19BQ1RJT05fQ09VTlQpIHsKKwkJCQkvKgorCQkJCSAqIENy ZWF0ZSBvbmUgY291bnQgYWN0aW9uLCB0byBiZSB1c2VkCisJCQkJICogYnkgYWxsIHN1Yi1mbG93 cy4KKwkJCQkgKi8KKwkJCQljbnRfYWN0ID0gZmxvd19kdl9wcmVwYXJlX2NvdW50ZXIoZGV2LCBk ZXZfZmxvdywKKwkJCQkJCQkJICBmbG93LCBjb3VudCwKKwkJCQkJCQkJICBOVUxMLCBlcnJvcik7 CisJCQkJaWYgKCFjbnRfYWN0KQorCQkJCQlyZXR1cm4gLXJ0ZV9lcnJubzsKKwkJCQlkZXZfZmxv dy0+ZHYuYWN0aW9uc1thY3Rpb25zX24rK10gPQorCQkJCQkJCQljbnRfYWN0LT5hY3Rpb247CisJ CQl9CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlpdGVtX2ZsYWdzIHw9IGxhc3RfaXRl bTsKLQl9Ci0JLyoKLQkgKiBXaGVuIEUtU3dpdGNoIG1vZGUgaXMgZW5hYmxlZCwgd2UgaGF2ZSB0 d28gY2FzZXMgd2hlcmUgd2UgbmVlZCB0bwotCSAqIHNldCB0aGUgc291cmNlIHBvcnQgbWFudWFs bHkuCi0JICogVGhlIGZpcnN0IG9uZSwgaXMgaW4gY2FzZSBvZiBOSUMgaW5ncmVzcyBzdGVlcmlu ZyBydWxlLCBhbmQgdGhlCi0JICogc2Vjb25kIGlzIEUtU3dpdGNoIHJ1bGUgd2hlcmUgbm8gcG9y dF9pZCBpdGVtIHdhcyBmb3VuZC4KLQkgKiBJbiBib3RoIGNhc2VzIHRoZSBzb3VyY2UgcG9ydCBp cyBzZXQgYWNjb3JkaW5nIHRoZSBjdXJyZW50IHBvcnQKLQkgKiBpbiB1c2UuCi0JICovCi0JaWYg KCEoaXRlbV9mbGFncyAmIE1MWDVfRkxPV19JVEVNX1BPUlRfSUQpICYmCi0JICAgICEoaXRlbV9m bGFncyAmIE1MWDVfRkxPV19JVEVNX1JFUFJFU0VOVEVEX1BPUlQpICYmIHByaXYtPnNoLT5lc3df bW9kZSAmJgotCSAgICAhKGF0dHItPmVncmVzcyAmJiAhYXR0ci0+dHJhbnNmZXIpKSB7Ci0JCWlm IChmbG93X2R2X3RyYW5zbGF0ZV9pdGVtX3BvcnRfaWQoZGV2LCBtYXRjaF9tYXNrLAotCQkJCQkJ ICAgbWF0Y2hfdmFsdWUsIE5VTEwsIGF0dHIpKQotCQkJcmV0dXJuIC1ydGVfZXJybm87Ci0JfQot CWlmIChpdGVtX2ZsYWdzICYgTUxYNV9GTE9XX0lURU1fSU5URUdSSVRZKSB7Ci0JCWZsb3dfZHZf dHJhbnNsYXRlX2l0ZW1faW50ZWdyaXR5X3Bvc3QobWF0Y2hfbWFzaywgbWF0Y2hfdmFsdWUsCi0J CQkJCQkgICAgICBpbnRlZ3JpdHlfaXRlbXMsCi0JCQkJCQkgICAgICBpdGVtX2ZsYWdzKTsKLQl9 Ci0JaWYgKGl0ZW1fZmxhZ3MgJiBNTFg1X0ZMT1dfTEFZRVJfVlhMQU5fR1BFKQotCQlmbG93X2R2 X3RyYW5zbGF0ZV9pdGVtX3Z4bGFuX2dwZShtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJ CSB0dW5uZWxfaXRlbSwgaXRlbV9mbGFncyk7Ci0JZWxzZSBpZiAoaXRlbV9mbGFncyAmIE1MWDVf RkxPV19MQVlFUl9HRU5FVkUpCi0JCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ2VuZXZlKG1hdGNo X21hc2ssIG1hdGNoX3ZhbHVlLAotCQkJCQkgICAgICB0dW5uZWxfaXRlbSwgaXRlbV9mbGFncyk7 Ci0JZWxzZSBpZiAoaXRlbV9mbGFncyAmIE1MWDVfRkxPV19MQVlFUl9HUkUpIHsKLQkJaWYgKHR1 bm5lbF9pdGVtLT50eXBlID09IFJURV9GTE9XX0lURU1fVFlQRV9HUkUpCi0JCQlmbG93X2R2X3Ry YW5zbGF0ZV9pdGVtX2dyZShtYXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJCSAgIHR1bm5l bF9pdGVtLCBpdGVtX2ZsYWdzKTsKLQkJZWxzZSBpZiAodHVubmVsX2l0ZW0tPnR5cGUgPT0gUlRF X0ZMT1dfSVRFTV9UWVBFX05WR1JFKQotCQkJZmxvd19kdl90cmFuc2xhdGVfaXRlbV9udmdyZSht YXRjaF9tYXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJCSAgICAgdHVubmVsX2l0ZW0sIGl0ZW1fZmxh Z3MpOwotCQllbHNlIGlmICh0dW5uZWxfaXRlbS0+dHlwZSA9PSBSVEVfRkxPV19JVEVNX1RZUEVf R1JFX09QVElPTikKLQkJCWZsb3dfZHZfdHJhbnNsYXRlX2l0ZW1fZ3JlX29wdGlvbihtYXRjaF9t YXNrLCBtYXRjaF92YWx1ZSwKLQkJCQkJdHVubmVsX2l0ZW0sIGdyZV9pdGVtLCBpdGVtX2ZsYWdz KTsKLQkJZWxzZQotCQkJTUxYNV9BU1NFUlQoZmFsc2UpOworCQlpZiAobWhkcl9yZXMtPmFjdGlv bnNfbnVtICYmCisJCSAgICBtb2RpZnlfYWN0aW9uX3Bvc2l0aW9uID09IFVJTlQzMl9NQVgpCisJ CQltb2RpZnlfYWN0aW9uX3Bvc2l0aW9uID0gYWN0aW9uc19uKys7CiAJfQotI2lmZGVmIFJURV9M SUJSVEVfTUxYNV9ERUJVRwotCU1MWDVfQVNTRVJUKCFmbG93X2R2X2NoZWNrX3ZhbGlkX3NwZWMo bWF0Y2hlci5tYXNrLmJ1ZiwKLQkJCQkJICAgICAgZGV2X2Zsb3ctPmR2LnZhbHVlLmJ1ZikpOwot I2VuZGlmCi0JLyoKLQkgKiBMYXllcnMgbWF5IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgZnJvbSBw cmVmaXggZmxvdyBpZiB0aGlzIGRldl9mbG93Ci0JICogaXMgdGhlIHN1ZmZpeCBmbG93LgotCSAq LwotCWhhbmRsZS0+bGF5ZXJzIHw9IGl0ZW1fZmxhZ3M7CisJZGV2X2Zsb3ctPmFjdF9mbGFncyA9 IGFjdGlvbl9mbGFnczsKKwlyZXQgPSBmbG93X2R2X3RyYW5zbGF0ZV9pdGVtcyhkZXYsIGRldl9m bG93LCBhdHRyLCBpdGVtcywgJm1hdGNoZXIsCisJCQkJICAgICAgZXJyb3IpOworCWlmIChyZXQp CisJCXJldHVybiAtcnRlX2Vycm5vOwogCWlmIChhY3Rpb25fZmxhZ3MgJiBNTFg1X0ZMT1dfQUNU SU9OX1JTUykKIAkJZmxvd19kdl9oYXNoZmllbGRzX3NldChkZXZfZmxvdy0+aGFuZGxlLT5sYXll cnMsCiAJCQkJICAgICAgIHJzc19kZXNjLApDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1 L21seDVfZmxvdy5oLi4uCkh1bmsgIzEgc3VjY2VlZGVkIGF0IDEyNjEgKG9mZnNldCAtMyBsaW5l cykuCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93X2R2LmMuLi4KZXJy b3I6IGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93X2R2LmM6IGRvZXMgbm90IG1hdGNoIGluZGV4 CkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuaCBjbGVhbmx5LgpDaGVj a2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5oLi4uCmVycm9yOiBkcml2ZXJz L25ldC9tbHg1L21seDVfZmxvdy5oOiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBwYXRj aCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19kdi5jLi4uCmVycm9yOiBkcml2ZXJzL25ldC9t bHg1L21seDVfZmxvd19kdi5jOiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBwYXRjaCBk cml2ZXJzL25ldC9tbHg1L2xpbnV4L21seDVfb3MuYy4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAx NTQ3IChvZmZzZXQgNyBsaW5lcykuCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4 NS5jLi4uCkh1bmsgIzEgc3VjY2VlZGVkIGF0IDE5MzYgKG9mZnNldCAtOSBsaW5lcykuCkNoZWNr aW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93LmMuLi4KQ2hlY2tpbmcgcGF0Y2gg ZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuaC4uLgplcnJvcjogZHJpdmVycy9uZXQvbWx4NS9t bHg1X2Zsb3cuaDogZG9lcyBub3QgbWF0Y2ggaW5kZXgKQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9u ZXQvbWx4NS9tbHg1X2Zsb3dfaHcuYy4uLgpBcHBsaWVkIHBhdGNoIGRyaXZlcnMvbmV0L21seDUv bGludXgvbWx4NV9vcy5jIGNsZWFubHkuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9t bHg1LmMgY2xlYW5seS4KQXBwbGllZCBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5j IGNsZWFubHkuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfaHcuYyBj bGVhbmx5LgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L2xpbnV4L21seDVfb3MuYy4u LgplcnJvcjogZHJpdmVycy9uZXQvbWx4NS9saW51eC9tbHg1X29zLmM6IGRvZXMgbm90IG1hdGNo IGluZGV4CkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NS5jLi4uCmVycm9yOiBk cml2ZXJzL25ldC9tbHg1L21seDUuYzogZG9lcyBub3QgbWF0Y2ggaW5kZXgKQ2hlY2tpbmcgcGF0 Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1LmguLi4KSHVuayAjMSBzdWNjZWVkZWQgYXQgMTE5OCAo b2Zmc2V0IC0yIGxpbmVzKS4KQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Rl ZnMuaC4uLgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jLi4uCmVy cm9yOiBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5jOiBkb2VzIG5vdCBtYXRjaCBpbmRleApD aGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5oLi4uCmVycm9yOiBkcml2 ZXJzL25ldC9tbHg1L21seDVfZmxvdy5oOiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBw YXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19ody5jLi4uCmVycm9yOiBkcml2ZXJzL25l dC9tbHg1L21seDVfZmxvd19ody5jOiBkb2VzIG5vdCBtYXRjaCBpbmRleApBcHBsaWVkIHBhdGNo IGRyaXZlcnMvbmV0L21seDUvbWx4NS5oIGNsZWFubHkuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9u ZXQvbWx4NS9tbHg1X2RlZnMuaCBjbGVhbmx5LgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9t bHg1L21lc29uLmJ1aWxkLi4uCkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NS5o Li4uCmVycm9yOiBkcml2ZXJzL25ldC9tbHg1L21seDUuaDogZG9lcyBub3QgbWF0Y2ggaW5kZXgK Q2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2RyLmMuLi4KQ2hlY2tpbmcgcGF0 Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X2RyLmguLi4KQXBwbGllZCBwYXRjaCBkcml2ZXJzL25l dC9tbHg1L21lc29uLmJ1aWxkIGNsZWFubHkuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvbWx4 NS9tbHg1X2RyLmMgY2xlYW5seS4KQXBwbGllZCBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVf ZHIuaCBjbGVhbmx5LgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L2h3cy9tZXNvbi5i dWlsZC4uLgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L2h3cy9tbHg1ZHIuaC4uLgpD aGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L2h3cy9tbHg1ZHJfaW50ZXJuYWwuaC4uLgpD aGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21lc29uLmJ1aWxkLi4uCmVycm9yOiBkcml2 ZXJzL25ldC9tbHg1L21lc29uLmJ1aWxkOiBkb2VzIG5vdCBtYXRjaCBpbmRleApDaGVja2luZyBw YXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDUuaC4uLgplcnJvcjogZHJpdmVycy9uZXQvbWx4NS9t bHg1Lmg6IGRvZXMgbm90IG1hdGNoIGluZGV4CkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21s eDUvbWx4NV9mbG93LmguLi4KZXJyb3I6IGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93Lmg6IGRv ZXMgbm90IG1hdGNoIGluZGV4CkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NV9m bG93X2h3LmMuLi4KZXJyb3I6IGRyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93X2h3LmM6IGRvZXMg bm90IG1hdGNoIGluZGV4CkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9od3MvbWVzb24u YnVpbGQgY2xlYW5seS4KQXBwbGllZCBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L2h3cy9tbHg1ZHIu aCBjbGVhbmx5LgpBcHBsaWVkIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvaHdzL21seDVkcl9pbnRl cm5hbC5oIGNsZWFubHkuCgpodHRwczovL2xhYi5kcGRrLm9yZy9yZXN1bHRzL2Rhc2hib2FyZC9w YXRjaHNldHMvMjM1OTUvCgpVTkgtSU9MIERQREsgQ29tbXVuaXR5IExhYgo= --===============8952135068005641714==--