From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5329 invoked by alias); 23 Sep 2002 19:44:12 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 5318 invoked from network); 23 Sep 2002 19:44:09 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 23 Sep 2002 19:44:09 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id g8NJQQi25717 for ; Mon, 23 Sep 2002 15:26:26 -0400 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g8NJi9f00593 for ; Mon, 23 Sep 2002 15:44:09 -0400 Received: from lindt.uglyboxes.com (vpn50-21.rdu.redhat.com [172.16.50.21]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g8NJi4J25505; Mon, 23 Sep 2002 15:44:04 -0400 Date: Mon, 23 Sep 2002 12:44:00 -0000 From: Keith Seitz X-X-Sender: keiths@lindt.uglyboxes.com To: Elena Zannoni cc: gdb-patches@sources.redhat.com Subject: Re: [RFC] Interpreters (~final) (fwd) In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="26611400-108273181-1032810900=:10013" X-SW-Source: 2002-09/txt/msg00569.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --26611400-108273181-1032810900=:10013 Content-Type: TEXT/PLAIN; charset=US-ASCII Content-length: 401 On Mon, 23 Sep 2002, Keith Seitz wrote: > I'll let you know when I have something "simpler". Ok, well, it isn't much simpler. I whacked a couple of bug fixes, docs, and testsuites. You should be able to run mi-cli.exp with this jumbo patch, but you will get a couple of false failures, since I did not include the mi-support.exp changes to support async event notifications. Good luck... Keith --26611400-108273181-1032810900=:10013 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="giant-interps.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="giant-interps.patch" Content-length: 113086 SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9NYWtlZmlsZS5pbix2DQpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMjYzDQpkaWZmIC1wIC1yMS4yNjMgTWFrZWZp bGUuaW4NCioqKiBNYWtlZmlsZS5pbgkyMCBTZXAgMjAwMiAxODoxNDo0OSAt MDAwMAkxLjI2Mw0KLS0tIE1ha2VmaWxlLmluCTIzIFNlcCAyMDAyIDE5OjM3 OjM2IC0wMDAwDQoqKioqKioqKioqKioqKiogTElCSUNPTlYgPSBATElCSUNP TlZADQoqKiogMTQ1LDE1NSAqKioqDQogICMgQ0xJIHN1YiBkaXJlY3Rvcnkg ZGVmaW5pdG9ucw0KICAjDQogIFNVQkRJUl9DTElfT0JTID0gXA0KISAJY2xp LWR1bXAubyBcDQohIAljbGktZGVjb2RlLm8gY2xpLXNjcmlwdC5vIGNsaS1j bWRzLm8gY2xpLXNldHNob3cubyBjbGktdXRpbHMubw0KICBTVUJESVJfQ0xJ X1NSQ1MgPSBcDQohIAljbGkvY2xpLWR1bXAuYyBcDQohIAljbGkvY2xpLWRl Y29kZS5jIGNsaS9jbGktc2NyaXB0LmMgY2xpL2NsaS1jbWRzLmMgY2xpL2Ns aS1zZXRzaG93LmMgXA0KICAJY2xpL2NsaS11dGlscy5jDQogIFNVQkRJUl9D TElfREVQUyA9DQogIFNVQkRJUl9DTElfSU5JVFMgPSBcDQotLS0gMTQ1LDE1 NSAtLS0tDQogICMgQ0xJIHN1YiBkaXJlY3RvcnkgZGVmaW5pdG9ucw0KICAj DQogIFNVQkRJUl9DTElfT0JTID0gXA0KISAJY2xpLWR1bXAubyBjbGktZGVj b2RlLm8gXA0KISAJY2xpLWludGVycC5vIGNsaS1zY3JpcHQubyBjbGktY21k cy5vIGNsaS1zZXRzaG93Lm8gY2xpLXV0aWxzLm8NCiAgU1VCRElSX0NMSV9T UkNTID0gXA0KISAJY2xpL2NsaS1kdW1wLmMgY2xpL2NsaS1kZWNvZGUuYyBc DQohIAljbGkvY2xpLWludGVycC5jIGNsaS9jbGktc2NyaXB0LmMgY2xpL2Ns aS1jbWRzLmMgY2xpL2NsaS1zZXRzaG93LmMgXA0KICAJY2xpL2NsaS11dGls cy5jDQogIFNVQkRJUl9DTElfREVQUyA9DQogIFNVQkRJUl9DTElfSU5JVFMg PSBcDQoqKioqKioqKioqKioqKiogU1VCRElSX0NMSV9VTklOU1RBTEw9DQoq KiogMTY3LDE3OSAqKioqDQogIFNVQkRJUl9NSV9PQlMgPSBcDQogIAltaS1v dXQubyBtaS1jb25zb2xlLm8gXA0KICAJbWktY21kcy5vIG1pLWNtZC12YXIu byBtaS1jbWQtYnJlYWsubyBtaS1jbWQtc3RhY2subyBcDQohIAltaS1jbWQt ZGlzYXMubyBcDQogIAltaS1tYWluLm8gbWktcGFyc2UubyBtaS1nZXRvcHQu bw0KICBTVUJESVJfTUlfU1JDUyA9IFwNCiAgCW1pL21pLW91dC5jIG1pL21p LWNvbnNvbGUuYyBcDQogIAltaS9taS1jbWRzLmMgXA0KICAJbWkvbWktY21k LXZhci5jIG1pL21pLWNtZC1icmVhay5jIG1pL21pLWNtZC1zdGFjay5jIFwN CiEgCW1pL21pLWNtZC1kaXNhcy5jIFwNCiAgCW1pL21pLW1haW4uYyBtaS9t aS1wYXJzZS5jIG1pL21pLWdldG9wdC5jDQogIFNVQkRJUl9NSV9ERVBTID0N CiAgU1VCRElSX01JX0lOSVRTID0gXA0KLS0tIDE2NywxNzkgLS0tLQ0KICBT VUJESVJfTUlfT0JTID0gXA0KICAJbWktb3V0Lm8gbWktY29uc29sZS5vIFwN CiAgCW1pLWNtZHMubyBtaS1jbWQtdmFyLm8gbWktY21kLWJyZWFrLm8gbWkt Y21kLXN0YWNrLm8gXA0KISAJbWktY21kLWRpc2FzLm8gbWktZXZlbnRzLm8g bWktaW50ZXJwLm8gXA0KICAJbWktbWFpbi5vIG1pLXBhcnNlLm8gbWktZ2V0 b3B0Lm8NCiAgU1VCRElSX01JX1NSQ1MgPSBcDQogIAltaS9taS1vdXQuYyBt aS9taS1jb25zb2xlLmMgXA0KICAJbWkvbWktY21kcy5jIFwNCiAgCW1pL21p LWNtZC12YXIuYyBtaS9taS1jbWQtYnJlYWsuYyBtaS9taS1jbWQtc3RhY2su YyBcDQohIAltaS9taS1jbWQtZGlzYXMuYyBtaS9taS1ldmVudHMuYyBtaS9t aS1pbnRlcnAuYyBcDQogIAltaS9taS1tYWluLmMgbWkvbWktcGFyc2UuYyBt aS9taS1nZXRvcHQuYw0KICBTVUJESVJfTUlfREVQUyA9DQogIFNVQkRJUl9N SV9JTklUUyA9IFwNCioqKioqKioqKioqKioqKiBTRklMRVMgPSBhZGEtZXhw LnkgYWRhLWxhbmcuYyBhZGEtdHlwZXByDQoqKiogNTQwLDU0NiAqKioqDQog IAlmaW5kdmFyLmMgcmVnY2FjaGUuYyBnZGJhcmNoLmMgYXJjaC11dGlscy5j IGdkYnR5cGVzLmMgb3NhYmkuYyBcDQogIAlpbmYtbG9vcC5jIGluZmNtZC5j IGluZmxvdy5jIGluZnJ1bi5jIGxhbmd1YWdlLmMgXA0KICAJa29kLmMga29k LWNpc2NvLmMgXA0KISAJdWktb3V0LmMgY2xpLW91dC5jIFwNCiAgCXZhcm9i ai5jIHdyYXBwZXIuYyBcDQogIAlqdi1leHAueSBqdi1sYW5nLmMganYtdmFs cHJpbnQuYyBqdi10eXBlcHJpbnQuYyBcDQogIAltMi1leHAueSBtMi1sYW5n LmMgbTItdHlwZXByaW50LmMgbTItdmFscHJpbnQuYyBtYWluLmMgbWFpbnQu YyBcDQotLS0gNTQwLDU0NiAtLS0tDQogIAlmaW5kdmFyLmMgcmVnY2FjaGUu YyBnZGJhcmNoLmMgYXJjaC11dGlscy5jIGdkYnR5cGVzLmMgb3NhYmkuYyBc DQogIAlpbmYtbG9vcC5jIGluZmNtZC5jIGluZmxvdy5jIGluZnJ1bi5jIGxh bmd1YWdlLmMgXA0KICAJa29kLmMga29kLWNpc2NvLmMgXA0KISAJdWktb3V0 LmMgY2xpLW91dC5jIGludGVycHMuYyBcDQogIAl2YXJvYmouYyB3cmFwcGVy LmMgXA0KICAJanYtZXhwLnkganYtbGFuZy5jIGp2LXZhbHByaW50LmMganYt dHlwZXByaW50LmMgXA0KICAJbTItZXhwLnkgbTItbGFuZy5jIG0yLXR5cGVw cmludC5jIG0yLXZhbHByaW50LmMgbWFpbi5jIG1haW50LmMgXA0KKioqKioq KioqKioqKioqIGkzODZfdGRlcF9oID0gaTM4Ni10ZGVwLmggJChvc2FiaV9o KQ0KKioqIDY3MSw2NzYgKioqKg0KLS0tIDY3MSw2NzcgLS0tLQ0KICBpMzg3 X3RkZXBfaCA9IGkzODctdGRlcC5oDQogIGluZl9sb29wX2ggPSBpbmYtbG9v cC5oDQogIGluZmVyaW9yX2ggPSBpbmZlcmlvci5oICQoYnJlYWtwb2ludF9o KSAkKHRhcmdldF9oKQ0KKyBpbnRlcnBzX2ggPSBpbnRlcnBzLmgNCiAganZf bGFuZ19oID0ganYtbGFuZy5oDQogIGtvZF9oID0ga29kLmgNCiAgbGFuZ3Vh Z2VfaCA9IGxhbmd1YWdlLmgNCioqKioqKioqKioqKioqKiBjbGlfdXRpbHNf aCA9ICQoc3JjZGlyKS9jbGkvY2xpLXV0aWxzLmgNCioqKiA3NDcsNzUyICoq KioNCi0tLSA3NDgsNzU0IC0tLS0NCiAgIyBnZGIvbWkvIGhlYWRlcnMNCiAg Iw0KICANCisgbWlfaCA9ICQoc3JjZGlyKS9taS9taS5oDQogIG1pX2NtZHNf aCA9ICQoc3JjZGlyKS9taS9taS1jbWRzLmgNCiAgbWlfY29uc29sZV9oID0g JChzcmNkaXIpL21pL21pLWNvbnNvbGUuaA0KICBtaV9nZXRvcHRfaCA9ICQo c3JjZGlyKS9taS9taS1nZXRvcHQuaA0KKioqKioqKioqKioqKioqIENPTU1P Tl9PQlMgPSB2ZXJzaW9uLm8gYmxvY2tmcmFtZS5vIGJyZWENCioqKiA4NDEs ODQ3ICoqKioNCiAgCWRieHJlYWQubyBjb2ZmcmVhZC5vIGVsZnJlYWQubyBc DQogIAlkd2FyZnJlYWQubyBkd2FyZjJyZWFkLm8gbWlwc3JlYWQubyBzdGFi c3JlYWQubyBjb3JlZmlsZS5vIFwNCiAgCWMtbGFuZy5vIGYtbGFuZy5vIFwN CiEgCXVpLW91dC5vIGNsaS1vdXQubyBcDQogIAl2YXJvYmoubyB3cmFwcGVy Lm8gXA0KICAJanYtbGFuZy5vIGp2LXZhbHByaW50Lm8ganYtdHlwZXByaW50 Lm8gXA0KICAJbTItbGFuZy5vIHAtbGFuZy5vIHAtdHlwZXByaW50Lm8gcC12 YWxwcmludC5vIFwNCi0tLSA4NDMsODQ5IC0tLS0NCiAgCWRieHJlYWQubyBj b2ZmcmVhZC5vIGVsZnJlYWQubyBcDQogIAlkd2FyZnJlYWQubyBkd2FyZjJy ZWFkLm8gbWlwc3JlYWQubyBzdGFic3JlYWQubyBjb3JlZmlsZS5vIFwNCiAg CWMtbGFuZy5vIGYtbGFuZy5vIFwNCiEgCXVpLW91dC5vIGNsaS1vdXQubyBp bnRlcnBzLm8gXA0KICAJdmFyb2JqLm8gd3JhcHBlci5vIFwNCiAgCWp2LWxh bmcubyBqdi12YWxwcmludC5vIGp2LXR5cGVwcmludC5vIFwNCiAgCW0yLWxh bmcubyBwLWxhbmcubyBwLXR5cGVwcmludC5vIHAtdmFscHJpbnQubyBcDQoq KioqKioqKioqKioqKiogZXZhbC5vOiBldmFsLmMgJChkZWZzX2gpICQoZ2Ri X3N0cmluZ19oKQ0KKioqIDE2NjAsMTY2NiAqKioqDQogIGV2ZW50LWxvb3Au bzogZXZlbnQtbG9vcC5jICQoZGVmc19oKSAkKGV2ZW50X2xvb3BfaCkgJChl dmVudF90b3BfaCkgXA0KICAJJChnZGJfc3RyaW5nX2gpDQogIGV2ZW50LXRv cC5vOiBldmVudC10b3AuYyAkKGRlZnNfaCkgJCh0b3BfaCkgJChpbmZlcmlv cl9oKSAkKHRhcmdldF9oKSBcDQohIAkkKHRlcm1pbmFsX2gpICQoZXZlbnRf bG9vcF9oKSAkKGV2ZW50X3RvcF9oKSAkKGdkYmNtZF9oKQ0KICBleGVjLm86 IGV4ZWMuYyAkKGRlZnNfaCkgJChmcmFtZV9oKSAkKGluZmVyaW9yX2gpICQo dGFyZ2V0X2gpICQoZ2RiY21kX2gpIFwNCiAgCSQobGFuZ3VhZ2VfaCkgJChz eW1maWxlX2gpICQob2JqZmlsZXNfaCkgJChjb21wbGV0ZXJfaCkgJCh2YWx1 ZV9oKSBcDQogIAkkKGdkYl9zdHJpbmdfaCkgJChnZGJjb3JlX2gpICQoZ2Ri X3N0YXRfaCkgJCh4Y29mZnNvbGliX2gpDQotLS0gMTY2MiwxNjY4IC0tLS0N CiAgZXZlbnQtbG9vcC5vOiBldmVudC1sb29wLmMgJChkZWZzX2gpICQoZXZl bnRfbG9vcF9oKSAkKGV2ZW50X3RvcF9oKSBcDQogIAkkKGdkYl9zdHJpbmdf aCkNCiAgZXZlbnQtdG9wLm86IGV2ZW50LXRvcC5jICQoZGVmc19oKSAkKHRv cF9oKSAkKGluZmVyaW9yX2gpICQodGFyZ2V0X2gpIFwNCiEgCSQodGVybWlu YWxfaCkgJChldmVudF9sb29wX2gpICQoZXZlbnRfdG9wX2gpICQoZ2RiY21k X2gpICQoaW50ZXJwc19oKQ0KICBleGVjLm86IGV4ZWMuYyAkKGRlZnNfaCkg JChmcmFtZV9oKSAkKGluZmVyaW9yX2gpICQodGFyZ2V0X2gpICQoZ2RiY21k X2gpIFwNCiAgCSQobGFuZ3VhZ2VfaCkgJChzeW1maWxlX2gpICQob2JqZmls ZXNfaCkgJChjb21wbGV0ZXJfaCkgJCh2YWx1ZV9oKSBcDQogIAkkKGdkYl9z dHJpbmdfaCkgJChnZGJjb3JlX2gpICQoZ2RiX3N0YXRfaCkgJCh4Y29mZnNv bGliX2gpDQoqKioqKioqKioqKioqKiogaW5mdGFyZy5vOiBpbmZ0YXJnLmMg JChkZWZzX2gpICQoZnJhbWVfaA0KKioqIDE4MDksMTgxNCAqKioqDQotLS0g MTgxMSwxODE4IC0tLS0NCiAgCSQoZ2RiY29yZV9oKSAkKGNvbW1hbmRfaCkg JChnZGJfc3RhdF9oKSAkKGdkYl93YWl0X2gpDQogIGluZnR0cmFjZS5vOiBp bmZ0dHJhY2UuYyAkKGRlZnNfaCkgJChmcmFtZV9oKSAkKGluZmVyaW9yX2gp ICQodGFyZ2V0X2gpIFwNCiAgCSQoZ2RiX3N0cmluZ19oKSAkKGdkYl93YWl0 X2gpICQoY29tbWFuZF9oKSAkKGdkYmNvcmVfaCkNCisgaW50ZXJwcy5vOiBp bnRlcnBzLmMgJChkZWZzX2gpICQoZ2RiY21kX2gpICQodWlfb3V0X2gpICQo ZXZlbnRfbG9vcF9oKSBcDQorIAkkKGV2ZW50X3RvcF9oKSAkKGludGVycHNf aCkgJChnZGJfaCkgJCh3cmFwcGVyX2gpICQoZ2RiX2V2ZW50c19oKQ0KICBp cml4NC1uYXQubzogaXJpeDQtbmF0LmMgJChkZWZzX2gpICQoaW5mZXJpb3Jf aCkgJChnZGJjb3JlX2gpICQocmVnY2FjaGVfaCkgXA0KICAJJChncmVnc2V0 X2gpDQogIGlyaXg1LW5hdC5vOiBpcml4NS1uYXQuYyAkKGRlZnNfaCkgJChp bmZlcmlvcl9oKSAkKGdkYmNvcmVfaCkgJCh0YXJnZXRfaCkgXA0KKioqKioq KioqKioqKioqIGNsaS1kdW1wLm86ICQoc3JjZGlyKS9jbGkvY2xpLWR1bXAu YyAkKGQNCioqKiAyMzI0LDIzMjkgKioqKg0KLS0tIDIzMjgsMjMzNiAtLS0t DQogIAkkKGNsaV9kZWNvZGVfaCkgJChjbGlfY21kc19oKSAkKHZhbHVlX2gp ICQoY29tcGxldGVyX2gpIFwNCiAgCSQoY2xpX2R1bXBfaCkgJChnZGJfYXNz ZXJ0X2gpICQodGFyZ2V0X2gpDQogIAkkKENDKSAtYyAkKElOVEVSTkFMX0NG TEFHUykgJChzcmNkaXIpL2NsaS9jbGktZHVtcC5jDQorIGNsaS1pbnRlcnAu bzogJChzcmNkaXIpL2NsaS9jbGktaW50ZXJwLmMgJChkZWZzX2gpICQodmFs dWVfaCkgXA0KKyAJJCh3cmFwcGVyX2gpICQoZXZlbnRfdG9wX2gpICQodWlf b3V0X2gpICQoY2xpX291dF9oKQ0KKyAJJChDQykgLWMgJChJTlRFUk5BTF9D RkxBR1MpICQoc3JjZGlyKS9jbGkvY2xpLWludGVycC5jDQogIGNsaS1zY3Jp cHQubzogJChzcmNkaXIpL2NsaS9jbGktc2NyaXB0LmMgJChkZWZzX2gpICQo dmFsdWVfaCkgJChsYW5ndWFnZV9oKSBcDQogIAkkKHVpX291dF9oKSAkKGdk Yl9zdHJpbmdfaCkgJCh0b3BfaCkgJChjbGlfY21kc19oKSAkKGNsaV9kZWNv ZGVfaCkgXA0KICAJJChjbGlfc2NyaXB0X2gpDQoqKioqKioqKioqKioqKiog bWktY21kcy5vOiAkKHNyY2RpcikvbWkvbWktY21kcy5jICQoZGVmcw0KKioq IDI0NDEsMjQ0OSAqKioqDQotLS0gMjQ0OCwyNDYzIC0tLS0NCiAgbWktY29u c29sZS5vOiAkKHNyY2RpcikvbWkvbWktY29uc29sZS5jICQoZGVmc19oKSAk KG1pX2NvbnNvbGVfaCkgXA0KICAJJChnZGJfc3RyaW5nX2gpDQogIAkkKEND KSAtYyAkKElOVEVSTkFMX0NGTEFHUykgJChzcmNkaXIpL21pL21pLWNvbnNv bGUuYw0KKyBtaS1ldmVudHMubzogJChzcmNkaXIpL21pL21pLWV2ZW50cy5j ICQoZGVmc19oKSAkKHVpX291dF9oKSAkKGludGVycHNfaCkgXA0KKyAJJChn ZGJfaCkgJChicmVha3BvaW50X2gpICQobWlfaCkNCisgCSQoQ0MpIC1jICQo SU5URVJOQUxfQ0ZMQUdTKSAkKHNyY2RpcikvbWkvbWktZXZlbnRzLmMNCiAg bWktZ2V0b3B0Lm86ICQoc3JjZGlyKS9taS9taS1nZXRvcHQuYyAkKGRlZnNf aCkgJChtaV9nZXRvcHRfaCkgXA0KICAJJChnZGJfc3RyaW5nX2gpDQogIAkk KENDKSAtYyAkKElOVEVSTkFMX0NGTEFHUykgJChzcmNkaXIpL21pL21pLWdl dG9wdC5jDQorIG1pLWludGVycC5vOiAkKHNyY2RpcikvbWkvbWktaW50ZXJw LmMgJChkZWZzX2gpICQoaW50ZXJwc19oKSBcDQorIAkkKGV2ZW50X3RvcF9o KSAkKGV2ZW50X2xvb3BfaCkgJChpbmZlcmlvcl9oKSAkKHVpX291dF9oKSBc DQorIAkkKHRvcF9oKSAkKG1pX2gpICQobWlfY21kc19oKSAkKG1pX291dF9o KSAkKG1pX2NvbnNvbGVfaCkNCisgCSQoQ0MpIC1jICQoSU5URVJOQUxfQ0ZM QUdTKSAkKHNyY2RpcikvbWkvbWktaW50ZXJwLmMNCiAgbWktbWFpbi5vOiAk KHNyY2RpcikvbWkvbWktbWFpbi5jICQoZGVmc19oKSAkKHRhcmdldF9oKSAk KGluZmVyaW9yX2gpIFwNCiAgCSQoZ2RiX3N0cmluZ19oKSAkKHRvcF9oKSAk KGdkYnRocmVhZF9oKSAkKG1pX2NtZHNfaCkgJChtaV9wYXJzZV9oKSBcDQog IAkkKG1pX2dldG9wdF9oKSAkKG1pX2NvbnNvbGVfaCkgJCh1aV9vdXRfaCkg JChtaV9vdXRfaCkgXA0KSW5kZXg6IGNsaS1vdXQuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY2xpLW91 dC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNA0KZGlmZiAtcCAtcjEu MTQgY2xpLW91dC5jDQoqKiogY2xpLW91dC5jCTE5IE1hciAyMDAyIDAyOjUx OjA0IC0wMDAwCTEuMTQNCi0tLSBjbGktb3V0LmMJMjMgU2VwIDIwMDIgMTk6 Mzc6MzYgLTAwMDANCioqKioqKioqKioqKioqKiBjbGlfb3V0X25ldyAoc3Ry dWN0IHVpX2ZpbGUgKnN0cmVhbSkNCioqKiAzNjUsMzcwICoqKioNCi0tLSAz NjUsMzc5IC0tLS0NCiAgICByZXR1cm4gdWlfb3V0X25ldyAoJmNsaV91aV9v dXRfaW1wbCwgZGF0YSwgZmxhZ3MpOw0KICB9DQogIA0KKyBzdHJ1Y3QgdWlf ZmlsZSAqDQorIGNsaV9vdXRfc2V0X3N0cmVhbSAoc3RydWN0IHVpX291dCAq dWlvdXQsIHN0cnVjdCB1aV9maWxlICpzdHJlYW0pDQorIHsNCisgICBzdHJ1 Y3QgdWlfb3V0X2RhdGEgKmRhdGEgPSB1aV9vdXRfZGF0YSAodWlvdXQpOw0K KyAgIHN0cnVjdCB1aV9maWxlICpvbGQgPSBkYXRhLT5zdHJlYW07DQorICAg ZGF0YS0+c3RyZWFtID0gc3RyZWFtOw0KKyAgIHJldHVybiBvbGQ7DQorIH0N CisgDQogIC8qIHN0YW5kYXJkIGdkYiBpbml0aWFsaXphdGlvbiBob29rICov DQogIHZvaWQNCiAgX2luaXRpYWxpemVfY2xpX291dCAodm9pZCkNCkluZGV4 OiBjbGktb3V0LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL2NsaS1vdXQuaCx2DQpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMg0KZGlmZiAtcCAtcjEuMiBjbGktb3V0LmgNCioqKiBjbGkt b3V0LmgJNiBNYXIgMjAwMSAwODoyMTowNiAtMDAwMAkxLjINCi0tLSBjbGkt b3V0LmgJMjMgU2VwIDIwMDIgMTk6Mzc6MzYgLTAwMDANCioqKioqKioqKioq KioqKg0KKioqIDIzLDI3ICoqKioNCiAgI2RlZmluZSBDTElfT1VUX0gNCiAg DQogIGV4dGVybiBzdHJ1Y3QgdWlfb3V0ICpjbGlfb3V0X25ldyAoc3RydWN0 IHVpX2ZpbGUgKnN0cmVhbSk7DQohIA0KICAjZW5kaWYNCi0tLSAyMywyOCAt LS0tDQogICNkZWZpbmUgQ0xJX09VVF9IDQogIA0KICBleHRlcm4gc3RydWN0 IHVpX291dCAqY2xpX291dF9uZXcgKHN0cnVjdCB1aV9maWxlICpzdHJlYW0p Ow0KISBleHRlcm4gc3RydWN0IHVpX2ZpbGUgKmNsaV9vdXRfc2V0X3N0cmVh bSAoc3RydWN0IHVpX291dCAqdWlvdXQsDQohIAkJCQkJICAgc3RydWN0IHVp X2ZpbGUgKnN0cmVhbSk7DQogICNlbmRpZg0KSW5kZXg6IGV2ZW50LWxvb3Au Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy9nZGIvZXZlbnQtbG9vcC5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS4xOQ0KZGlmZiAtcCAtcjEuMTkgZXZlbnQtbG9vcC5jDQoqKiogZXZlbnQt bG9vcC5jCTEwIFNlcCAyMDAyIDE5OjUzOjI0IC0wMDAwCTEuMTkNCi0tLSBl dmVudC1sb29wLmMJMjMgU2VwIDIwMDIgMTk6Mzc6MzcgLTAwMDANCioqKioq KioqKioqKioqKg0KKioqIDIyLDI3ICoqKioNCi0tLSAyMiwyOCAtLS0tDQog ICNpbmNsdWRlICJkZWZzLmgiDQogICNpbmNsdWRlICJldmVudC1sb29wLmgi DQogICNpbmNsdWRlICJldmVudC10b3AuaCINCisgI2luY2x1ZGUgImludGVy cHMuaCINCiAgDQogICNpZmRlZiBIQVZFX1BPTEwNCiAgI2lmIGRlZmluZWQg KEhBVkVfUE9MTF9IKQ0KKioqKioqKioqKioqKioqIHN0YXRpYyB2b2lkIGNy ZWF0ZV9maWxlX2hhbmRsZXIgKGludCBmZCwNCioqKiAyMTAsMjE1ICoqKioN Ci0tLSAyMTEsMjE3IC0tLS0NCiAgc3RhdGljIHZvaWQgaW52b2tlX2FzeW5j X3NpZ25hbF9oYW5kbGVyICh2b2lkKTsNCiAgc3RhdGljIHZvaWQgaGFuZGxl X2ZpbGVfZXZlbnQgKGludCBldmVudF9maWxlX2Rlc2MpOw0KICBzdGF0aWMg aW50IGdkYl93YWl0X2Zvcl9ldmVudCAodm9pZCk7DQorIHN0YXRpYyBpbnQg Z2RiX2RvX29uZV9ldmVudCAodm9pZCAqZGF0YSk7DQogIHN0YXRpYyBpbnQg Y2hlY2tfYXN5bmNfcmVhZHkgKHZvaWQpOw0KICBzdGF0aWMgdm9pZCBhc3lu Y19xdWV1ZV9ldmVudCAoZ2RiX2V2ZW50ICogZXZlbnRfcHRyLCBxdWV1ZV9w b3NpdGlvbiBwb3NpdGlvbik7DQogIHN0YXRpYyBnZGJfZXZlbnQgKmNyZWF0 ZV9maWxlX2V2ZW50IChpbnQgZmQpOw0KKioqKioqKioqKioqKioqIHByb2Nl c3NfZXZlbnQgKHZvaWQpDQoqKiogMzQ1LDM1MSAqKioqDQogICAgIGNhbiBo YXBwZW4gaWYgdGhlcmUgYXJlIG5vIGV2ZW50IHNvdXJjZXMgdG8gd2FpdCBm b3IpLiAgSWYgYW4gZXJyb3INCiAgICAgb2NjdXJzIGNhdGNoX2Vycm9ycygp IHdoaWNoIGNhbGxzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLiAqLw0K ICANCiEgaW50DQogIGdkYl9kb19vbmVfZXZlbnQgKHZvaWQgKmRhdGEpDQog IHsNCiAgICAvKiBBbnkgZXZlbnRzIGFscmVhZHkgd2FpdGluZyBpbiB0aGUg cXVldWU/ICovDQotLS0gMzQ3LDM1MyAtLS0tDQogICAgIGNhbiBoYXBwZW4g aWYgdGhlcmUgYXJlIG5vIGV2ZW50IHNvdXJjZXMgdG8gd2FpdCBmb3IpLiAg SWYgYW4gZXJyb3INCiAgICAgb2NjdXJzIGNhdGNoX2Vycm9ycygpIHdoaWNo IGNhbGxzIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLiAqLw0KICANCiEg c3RhdGljIGludA0KICBnZGJfZG9fb25lX2V2ZW50ICh2b2lkICpkYXRhKQ0K ICB7DQogICAgLyogQW55IGV2ZW50cyBhbHJlYWR5IHdhaXRpbmcgaW4gdGhl IHF1ZXVlPyAqLw0KKioqKioqKioqKioqKioqIHN0YXJ0X2V2ZW50X2xvb3Ag KHZvaWQpDQoqKiogMzkyLDQwMSAqKioqDQogICAgICAgbG9uZ2VyIGFueSBl dmVudCBzb3VyY2VzIHJlZ2lzdGVyZWQuICovDQogICAgd2hpbGUgKDEpDQog ICAgICB7DQohICAgICAgIGludCByZXN1bHQgPSBjYXRjaF9lcnJvcnMgKGdk Yl9kb19vbmVfZXZlbnQsIDAsICIiLCBSRVRVUk5fTUFTS19BTEwpOw0KISAg ICAgICBpZiAocmVzdWx0IDwgMCkNCiAgCWJyZWFrOw0KISAgICAgICBpZiAo cmVzdWx0ID09IDApDQogIAl7DQogIAkgIC8qIEZJWE1FOiB0aGlzIHNob3Vs ZCByZWFsbHkgYmUgYSBjYWxsIHRvIGEgaG9vayB0aGF0IGlzDQogIAkgICAg IGludGVyZmFjZSBzcGVjaWZpYywgYmVjYXVzZSBpbnRlcmZhY2VzIGNhbiBk aXNwbGF5IHRoZQ0KLS0tIDM5NCw0MTYgLS0tLQ0KICAgICAgIGxvbmdlciBh bnkgZXZlbnQgc291cmNlcyByZWdpc3RlcmVkLiAqLw0KICAgIHdoaWxlICgx KQ0KICAgICAgew0KISAgICAgICBpbnQgZ2RiX3Jlc3VsdCwgaW50ZXJwX3Jl c3VsdDsNCiEgDQohICAgICAgIGdkYl9yZXN1bHQgPSBjYXRjaF9lcnJvcnMg KGdkYl9kb19vbmVfZXZlbnQsIDAsICIiLCBSRVRVUk5fTUFTS19BTEwpOw0K ISAgICAgICBpZiAoZ2RiX3Jlc3VsdCA8IDApDQogIAlicmVhazsNCiEgDQoh ICAgICAgIGludGVycF9yZXN1bHQgPSBjYXRjaF9lcnJvcnMgKGludGVycHJl dGVyX2RvX29uZV9ldmVudCwgMCwgIiIsIFJFVFVSTl9NQVNLX0FMTCk7DQoh ICAgICAgIGlmIChpbnRlcnBfcmVzdWx0IDwgMCkNCiEgICAgICAgICB7DQoh ICAgICAgICAgICAvKiBGSVhNRSAtIGtpbGwgdGhlIGludGVycHJldGVyICov DQohICAgICAgICAgfQ0KISANCiEgICAgICAgLyogSWYgd2UgbG9uZy1qdW1w ZWQgb3V0IG9mIGRvX29uZV9ldmVudCwgd2UgcHJvYmFibHkNCiEgICAgICAg ICAgZGlkbid0IGdldCBhcm91bmQgdG8gcmVzZXR0aW5nIHRoZSBwcm9tcHQs IHdoaWNoIGxlYXZlcw0KISAgICAgICAgICByZWFkbGluZSBpbiBhIG1lc3Nl ZC11cCBzdGF0ZS4gUmVzZXQgaXQgaGVyZS4gKi8NCiEgDQohICAgICAgIGlm IChnZGJfcmVzdWx0ID09IDApDQogIAl7DQogIAkgIC8qIEZJWE1FOiB0aGlz IHNob3VsZCByZWFsbHkgYmUgYSBjYWxsIHRvIGEgaG9vayB0aGF0IGlzDQog IAkgICAgIGludGVyZmFjZSBzcGVjaWZpYywgYmVjYXVzZSBpbnRlcmZhY2Vz IGNhbiBkaXNwbGF5IHRoZQ0KSW5kZXg6IGV2ZW50LXRvcC5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9l dmVudC10b3AuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjINCmRpZmYg LXAgLXIxLjIyIGV2ZW50LXRvcC5jDQoqKiogZXZlbnQtdG9wLmMJMyBKdWwg MjAwMiAyMDoyNzoxMiAtMDAwMAkxLjIyDQotLS0gZXZlbnQtdG9wLmMJMjMg U2VwIDIwMDIgMTk6Mzc6MzcgLTAwMDANCioqKioqKioqKioqKioqKg0KKioq IDI2LDMxICoqKioNCi0tLSAyNiwzMiAtLS0tDQogICNpbmNsdWRlICJ0ZXJt aW5hbC5oIgkJLyogZm9yIGpvYl9jb250cm9sICovDQogICNpbmNsdWRlICJl dmVudC1sb29wLmgiDQogICNpbmNsdWRlICJldmVudC10b3AuaCINCisgI2lu Y2x1ZGUgImludGVycHMuaCINCiAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAN CiAgLyogRm9yIGRvbnRfcmVwZWF0KCkgKi8NCioqKioqKioqKioqKioqKiBk aXNwbGF5X2dkYl9wcm9tcHQgKGNoYXIgKm5ld19wcm9tcHQpDQoqKiogMjUy LDI1OCAqKioqDQogIA0KICAgIC8qIFdoZW4gYW4gYWx0ZXJuYXRpdmUgaW50 ZXJwcmV0ZXIgaGFzIGJlZW4gaW5zdGFsbGVkLCBkbyBub3QNCiAgICAgICBk aXNwbGF5IHRoZSBjb21hbmQgcHJvbXB0LiAqLw0KISAgIGlmIChpbnRlcnBy ZXRlcl9wKQ0KICAgICAgcmV0dXJuOw0KICANCiAgICBpZiAodGFyZ2V0X2V4 ZWN1dGluZyAmJiBzeW5jX2V4ZWN1dGlvbikNCi0tLSAyNTMsMjU5IC0tLS0N CiAgDQogICAgLyogV2hlbiBhbiBhbHRlcm5hdGl2ZSBpbnRlcnByZXRlciBo YXMgYmVlbiBpbnN0YWxsZWQsIGRvIG5vdA0KICAgICAgIGRpc3BsYXkgdGhl IGNvbWFuZCBwcm9tcHQuICovDQohICAgaWYgKGdkYl9pbnRlcnByZXRlcl9k aXNwbGF5X3Byb21wdCAobmV3X3Byb21wdCkpDQogICAgICByZXR1cm47DQog IA0KICAgIGlmICh0YXJnZXRfZXhlY3V0aW5nICYmIHN5bmNfZXhlY3V0aW9u KQ0KKioqKioqKioqKioqKioqIHNldF9hc3luY19wcm9tcHQgKGNoYXIgKmFy Z3MsIGludCBmcm9tX3QNCioqKiAxMTEzLDExMjYgKioqKg0KICAgIFBST01Q VCAoMCkgPSBzYXZlc3RyaW5nIChuZXdfYXN5bmNfcHJvbXB0LCBzdHJsZW4g KG5ld19hc3luY19wcm9tcHQpKTsNCiAgfQ0KICANCiAgLyogU2V0IHRoaW5n cyB1cCBmb3IgcmVhZGxpbmUgdG8gYmUgaW52b2tlZCB2aWEgdGhlIGFsdGVy bmF0ZQ0KICAgICBpbnRlcmZhY2UsIGkuZS4gdmlhIGEgY2FsbGJhY2sgZnVu Y3Rpb24gKHJsX2NhbGxiYWNrX3JlYWRfY2hhciksDQogICAgIGFuZCBob29r IHVwIGluc3RyZWFtIHRvIHRoZSBldmVudCBsb29wLiAqLw0KICB2b2lkDQoh IF9pbml0aWFsaXplX2V2ZW50X2xvb3AgKHZvaWQpDQogIHsNCiAgICBpZiAo ZXZlbnRfbG9vcF9wKQ0KICAgICAgew0KICAgICAgICAvKiBJZiB0aGUgaW5w dXQgc3RyZWFtIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLCB0dXJuIG9u DQogICAgICAgICAgIGVkaXRpbmcuICAqLw0KICAgICAgICBpZiAoSVNBVFRZ IChpbnN0cmVhbSkpDQotLS0gMTExNCwxMTQ0IC0tLS0NCiAgICBQUk9NUFQg KDApID0gc2F2ZXN0cmluZyAobmV3X2FzeW5jX3Byb21wdCwgc3RybGVuIChu ZXdfYXN5bmNfcHJvbXB0KSk7DQogIH0NCiAgDQorIHZvaWQNCisgX2luaXRp YWxpemVfZXZlbnRfbG9vcCAodm9pZCkNCisgew0KKyAgIC8qIFRlbGwgZ2Ri IHRvIHVzZSB0aGUgY2xpX2NvbW1hbmRfbG9vcCBhcyB0aGUgbWFpbiBsb29w LiAqLw0KKyAgIGlmIChldmVudF9sb29wX3AgJiYgY29tbWFuZF9sb29wX2hv b2sgPT0gTlVMTCkNCisgICAgIGNvbW1hbmRfbG9vcF9ob29rID0gY2xpX2Nv bW1hbmRfbG9vcDsNCisgfQ0KKyANCiAgLyogU2V0IHRoaW5ncyB1cCBmb3Ig cmVhZGxpbmUgdG8gYmUgaW52b2tlZCB2aWEgdGhlIGFsdGVybmF0ZQ0KICAg ICBpbnRlcmZhY2UsIGkuZS4gdmlhIGEgY2FsbGJhY2sgZnVuY3Rpb24gKHJs X2NhbGxiYWNrX3JlYWRfY2hhciksDQogICAgIGFuZCBob29rIHVwIGluc3Ry ZWFtIHRvIHRoZSBldmVudCBsb29wLiAqLw0KICB2b2lkDQohIGdkYl9zZXR1 cF9yZWFkbGluZSAodm9pZCkNCiAgew0KKyAgIC8qIFRoaXMgZnVuY3Rpb24g aXMgYSBub29wIGZvciB0aGUgYXN5bmMgY2FzZS4gIFRoZSBhc3N1bXB0aW9u IGlzIHRoYXQNCisgICAgICB0aGUgYXN5bmMgc2V0dXAgaXMgQUxMIGRvbmUg aW4gZ2RiX2luaXQsIGFuZCB3ZSB3b3VsZCBvbmx5IG1lc3MgaXQgdXANCisg ICAgICBoZXJlLiAgVGhlIGFzeW5jIHN0dWZmIHNob3VsZCByZWFsbHkgZ28g YXdheSBvdmVyIHRpbWUuICovDQorIA0KICAgIGlmIChldmVudF9sb29wX3Ap DQogICAgICB7DQorICAgICAgIGdkYl9zdGRvdXQgPSBzdGRpb19maWxlb3Bl biAoc3Rkb3V0KTsNCisgICAgICAgZ2RiX3N0ZGVyciA9IHN0ZGlvX2ZpbGVv cGVuIChzdGRlcnIpOw0KKyAgICAgICBnZGJfc3RkbG9nID0gZ2RiX3N0ZGVy cjsgIC8qIGZvciBtb21lbnQgKi8NCisgICAgICAgZ2RiX3N0ZHRhcmcgPSBn ZGJfc3RkZXJyOyAvKiBmb3IgbW9tZW50ICovDQorIA0KICAgICAgICAvKiBJ ZiB0aGUgaW5wdXQgc3RyZWFtIGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFs LCB0dXJuIG9uDQogICAgICAgICAgIGVkaXRpbmcuICAqLw0KICAgICAgICBp ZiAoSVNBVFRZIChpbnN0cmVhbSkpDQoqKioqKioqKioqKioqKiogX2luaXRp YWxpemVfZXZlbnRfbG9vcCAodm9pZCkNCioqKiAxMTUzLDExNjEgKioqKg0K ICAgICAgICAgICByZWdpc3RlciBpdCB3aXRoIHRoZSBldmVudCBsb29wLiAq Lw0KICAgICAgICBpbnB1dF9mZCA9IGZpbGVubyAoaW5zdHJlYW0pOw0KICAN Ci0gICAgICAgLyogVGVsbCBnZGIgdG8gdXNlIHRoZSBjbGlfY29tbWFuZF9s b29wIGFzIHRoZSBtYWluIGxvb3AuICovDQotICAgICAgIGNvbW1hbmRfbG9v cF9ob29rID0gY2xpX2NvbW1hbmRfbG9vcDsNCi0gDQogICAgICAgIC8qIE5v dyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgZXZlbnQgc291cmNlcyBmb3IgdGhl IGlucHV0IGZpbGUNCiAgICAgICAgICAgZGVzY3JpcHRvci4gKi8NCiAgICAg ICAgLyogQXQgdGhpcyBwb2ludCBpbiB0aW1lLCB0aGlzIGlzIHRoZSBvbmx5 IGV2ZW50IHNvdXJjZSB0aGF0IHdlDQotLS0gMTE3MSwxMTc2IC0tLS0NCioq KioqKioqKioqKioqKiBfaW5pdGlhbGl6ZV9ldmVudF9sb29wICh2b2lkKQ0K KioqIDExNjYsMTE2OCAqKioqDQotLS0gMTE4MSwxMjExIC0tLS0NCiAgICAg ICAgYWRkX2ZpbGVfaGFuZGxlciAoaW5wdXRfZmQsIHN0ZGluX2V2ZW50X2hh bmRsZXIsIDApOw0KICAgICAgfQ0KICB9DQorIA0KKyAvKiBEaXNhYmxlIGNv bW1hbmQgaW5wdXQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQ0xJIGNoYW5uZWxz LiAgVXNlZCBpbg0KKyAgICB0aGUgc3VzcGVuZCBwcm9jIGZvciBpbnRlcnBy ZXRlcnMgdGhhdCB1c2UgdGhlIHN0YW5kYXJkIGdkYiByZWFkbGluZQ0KKyAg ICBpbnRlcmZhY2UsIGxpa2UgdGhlIGNsaSAmIHRoZSBtaS4gKi8NCisgDQor IHZvaWQNCisgZ2RiX2Rpc2FibGVfcmVhZGxpbmUgKHZvaWQpDQorIHsNCisg ICBpZiAoZXZlbnRfbG9vcF9wKQ0KKyAgICAgew0KKyAgICAgICAvKiBGSVhN RSAtIEl0IGlzIHRvbyBoZWF2eXdlaWdodCB0byBkZWxldGUgYW5kIHJlbWFr ZSB0aGVzZQ0KKyAgICAgICAgICBldmVyeSB0aW1lIHlvdSBydW4gYW4gaW50 ZXJwcmV0ZXIgdGhhdCBuZWVkcyByZWFkbGluZS4NCisgICAgICAgICAgSXQg aXMgcHJvYmFibHkgYmV0dGVyIHRvIGhhdmUgdGhlIGludGVycHJldGVycyBj YWNoZSB0aGVzZSwNCisgICAgICAgICAgd2hpY2ggaW4gdHVybiBtZWFucyB0 aGF0IHRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgaW50byBpbnRlcnByZXRlcg0K KyAgICAgICAgICBzcGVjaWZpYyBjb2RlLiAqLw0KKyANCisgI2lmIDANCisg ICAgICAgdWlfZmlsZV9kZWxldGUgKGdkYl9zdGRvdXQpOw0KKyAgICAgICB1 aV9maWxlX2RlbGV0ZSAoZ2RiX3N0ZGVycik7DQorICAgICAgIGdkYl9zdGRs b2cgPSBOVUxMOw0KKyAgICAgICBnZGJfc3RkdGFyZyA9IE5VTEw7DQorICNl bmRpZg0KKyANCisgICAgICAgcmxfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUg KCk7DQorICAgICAgIGRlbGV0ZV9maWxlX2hhbmRsZXIgKGlucHV0X2ZkKTsN CisgICAgIH0NCisgfQ0KKyANCkluZGV4OiBldmVudC10b3AuaA0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIv ZXZlbnQtdG9wLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjQNCmRpZmYg LXAgLXIxLjQgZXZlbnQtdG9wLmgNCioqKiBldmVudC10b3AuaAkyNyBOb3Yg MjAwMSAwNDoxNTowOSAtMDAwMAkxLjQNCi0tLSBldmVudC10b3AuaAkyMyBT ZXAgMjAwMiAxOTozNzozNyAtMDAwMA0KKioqKioqKioqKioqKioqIHN0cnVj dCBwcm9tcHRzDQoqKiogNzEsNzYgKioqKg0KLS0tIDcxLDc4IC0tLS0NCiAg ICAgRklYTUU6IHRoZXNlIHNob3VsZCByZWFsbHkgZ28gaW50byB0b3AuaC4g ICovDQogIA0KICBleHRlcm4gdm9pZCBkaXNwbGF5X2dkYl9wcm9tcHQgKGNo YXIgKm5ld19wcm9tcHQpOw0KKyBleHRlcm4gdm9pZCBnZGJfc2V0dXBfcmVh ZGxpbmUgKHZvaWQpOw0KKyBleHRlcm4gdm9pZCBnZGJfZGlzYWJsZV9yZWFk bGluZSAodm9pZCk7DQogIGV4dGVybiB2b2lkIGFzeW5jX2luaXRfc2lnbmFs cyAodm9pZCk7DQogIGV4dGVybiB2b2lkIHNldF9hc3luY19lZGl0aW5nX2Nv bW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSwNCiAgCQkJCSAgICAg ICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYyk7DQpJbmRleDogaW50ZXJw cy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogaW50ZXJw cy5jDQpkaWZmIC1OIGludGVycHMuYw0KKioqIGludGVycHMuYwkxIEphbiAx OTcwIDAwOjAwOjAwIC0wMDAwDQotLS0gaW50ZXJwcy5jCTIzIFNlcCAyMDAy IDE5OjM3OjM3IC0wMDAwDQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioN Ci0tLSAxLDY2MSAtLS0tDQorIC8qIE1hbmFnZXMgaW50ZXJwcmV0ZXJzIGZv ciBnZGIuDQorICAgIENvcHlyaWdodCAyMDAwLCAyMDAyIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLg0KKyAgICBXcml0dGVuIGJ5IEppbSBJbmdo YW0gPGppbmdoYW1AYXBwbGUuY29tPiBvZiBBcHBsZSBDb21wdXRlciwgSW5j Lg0KKyANCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLg0KKyANCisg ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkNCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCisgICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgDQorICAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0K KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorIA0KKyAgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQ0KKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAgICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsDQor ICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLw0KKyANCisgLyog VGhpcyBpcyBqdXN0IGEgZmlyc3QgY3V0IGF0IHNlcGFyYXRpbmcgb3V0IHRo ZSAiaW50ZXJwcmV0ZXIiIGZ1bmN0aW9ucw0KKyAgICBvZiBnZGIgaW50byBz ZWxmLWNvbnRhaW5lZCBtb2R1bGVzLiAgVGhlcmUgYXJlIGEgY291cGxlIG9m IG9wZW4gYXJlYXMgdGhhdA0KKyAgICBuZWVkIHRvIGJlIHNvcnRlZCBvdXQ6 DQorIA0KKyAgICAxKSBUaGUgaW50ZXJwcmV0ZXIgZXhwbGljaXRseSBjb250 YWlucyBhIFVJX09VVCwgYW5kIGNhbiBpbnNlcnQgaXRzZWxmDQorICAgIGlu dG8gdGhlIGV2ZW50IGxvb3AsIGJ1dCBpdCBkb2Vzbid0IGV4cGxpY2l0bHkg Y29udGFpbiBob29rcyBmb3IgcmVhZGxpbmUuDQorICAgIEkgZGlkIHRoaXMg YmVjYXVzZSBpdCBzZWVtcyB0byBtZSBtYW55IGludGVycHJldGVycyB3b24n dCB3YW50IHRvIHVzZQ0KKyAgICB0aGUgcmVhZGxpbmUgY29tbWFuZCBpbnRl cmZhY2UsIGFuZCBpdCBpcyBwcm9iYWJseSBzaW1wbGVyIHRvIGp1c3QgbGV0 DQorICAgIHRoZW0gdGFrZSBvdmVyIHRoZSBpbnB1dCBpbiB0aGVpciByZXN1 bWUgcHJvYy4gIA0KKyANCisgICAgMikgVGhlIGV2ZW50IGxvb3AgaW5zZXJ0 aW9uIGlzIHByb2JhYmx5IHdyb25nLiAgSSBqdXN0IGluc2VydGVkIGEgDQor ICAgIGRvX29uZV9ldmVudCBhbG9uZ3NpZGUgZ2RiJ3MgZG9fb25lX2V2ZW50 LiAgVGhpcyBwcm9iYWJseSB3aWxsIGxlYWQNCisgICAgdG8gb25lIG9yIHRo ZSBvdGhlciBldmVudCBsb29wIGdldHRpbmcgc3RhcnZlZC4gIEl0IHdvdWxk IGJlIGJldHRlcg0KKyAgICB0byBwcm92aWRlIGNvbnZlcnNpb24gZnVuY3Rp b25zIGZvciB0aGUgZ2RiIGZpbGUgaGFuZGxlcnMsIGFuZCB3aGVuDQorICAg IGFuIGludGVycHJldGVyIHN0YXJ0cyB1cCwgaXQgZ3JhYnMgYWxsIHRoZSBn ZGIgY3JlYXRlZCBmaWxlIGhhbmRsZXJzDQorICAgIGFuZCBpbnNlcnRzIHRo ZW0gaW50byBpdHMgc2VsZWN0LiAgVGhpcyBpcyBtb3JlIGNvbXBsaWNhdGVk LCBob3dldmVyLA0KKyAgICBhbmQgSSBoYXZlIHJ1biBvdXQgb2YgdGltZSBm b3Igbm93Lg0KKyAqLw0KKyANCisgI2luY2x1ZGUgImRlZnMuaCINCisgI2lu Y2x1ZGUgImdkYmNtZC5oIg0KKyAjaW5jbHVkZSAidWktb3V0LmgiDQorICNp bmNsdWRlICJldmVudC1sb29wLmgiDQorICNpbmNsdWRlICJldmVudC10b3Au aCINCisgI2luY2x1ZGUgImludGVycHMuaCINCisgI2luY2x1ZGUgImNvbXBs ZXRlci5oIg0KKyAjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIg0KKyAjaW5jbHVk ZSAiZ2RiLWV2ZW50cy5oIg0KKyANCisgc3RydWN0IGdkYl9pbnRlcnByZXRl cg0KKyB7DQorICAgY2hhciAqbmFtZTsJCQkvKiBUaGlzIGlzIHRoZSBuYW1l IGluICItaT0iIGFuZCBzZXQgaW50ZXJwcmV0ZXIuICovDQorICAgc3RydWN0 IGdkYl9pbnRlcnByZXRlciAqbmV4dDsJLyogSW50ZXJwcmV0ZXJzIGFyZSBz dG9yZWQgaW4gYSBsaW5rZWQgbGlzdCwgDQorIAkJCQkgICB0aGlzIGlzIHRo ZSBuZXh0IG9uZS4uLiAqLw0KKyAgIHZvaWQgKmRhdGE7CQkJLyogVGhpcyBp cyBhIGNvb2tpZSB0aGF0IHRoZSBpbnN0YW5jZSBvZiB0aGUgDQorIAkJCQkg ICBpbnRlcnByZXRlciBjYW4gdXNlLCBmb3IgaW5zdGFuY2UgdG8gY2FsbCAN CisgCQkJCSAgIGl0c2VsZiBpbiBob29rIGZ1bmN0aW9ucyAqLw0KKyAgIGlu dCBpbml0ZWQ7CQkJLyogSGFzIHRoZSBpbml0X3Byb2MgYmVlbiBydW4/ICov DQorICAgc3RydWN0IHVpX291dCAqaW50ZXJwcmV0ZXJfb3V0OwkvKiBUaGlz IGlzIHRoZSB1aV9vdXQgdXNlZCB0byBjb2xsZWN0IA0KKyAJCQkJCSAgIHJl c3VsdHMgZm9yIHRoaXMgaW50ZXJwcmV0ZXIuICBJdCBjYW4gDQorIAkJCQkJ ICAgYmUgYSBmb3JtYXR0ZXIgZm9yIHN0ZG91dCwgYXMgaXMgdGhlIA0KKyAJ CQkJCSAgIGNhc2UgZm9yIHRoZSBjb25zb2xlICYgbWkgb3V0cHV0cywgb3Ig aXQgDQorIAkJCQkJICAgbWlnaHQgYmUgYSByZXN1bHQgZm9ybWF0dGVyLiAq Lw0KKyAgIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgcHJvY3M7DQor ICAgaW50IHF1aWV0X3A7DQorIH07DQorIA0KKyAvKiBGdW5jdGlvbnMgbG9j YWwgdG8gdGhpcyBmaWxlLiAqLw0KKyBzdGF0aWMgdm9pZCBpbml0aWFsaXpl X2ludGVycHMgKHZvaWQpOw0KKyANCisgc3RhdGljIHZvaWQgc2V0X2ludGVy cHJldGVyX2NtZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5LA0KKyAJCQkJ IHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjKTsNCisgc3RhdGljIHZvaWQg bGlzdF9pbnRlcnByZXRlcl9jbWQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0 eSk7DQorIHN0YXRpYyB2b2lkIGRvX3NldF9pbnRlcnByZXRlciAoaW50IG5v dF9hbl9mZCk7DQorIHN0YXRpYyBjaGFyICoqaW50ZXJwcmV0ZXJfY29tcGxl dGVyIChjaGFyICp0ZXh0LCBjaGFyICp3b3JkKTsNCisgDQorIC8qIFRoZSBt YWdpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGlzIG1vZHVsZS4g Ki8NCisgDQorIHZvaWQgX2luaXRpYWxpemVfaW50ZXJwcmV0ZXIgKHZvaWQp Ow0KKyANCisgLyogVmFyaWFibGVzIGxvY2FsIHRvIHRoaXMgZmlsZTogKi8N CisgDQorIHN0YXRpYyBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnBf bGlzdCA9IE5VTEw7DQorIHN0YXRpYyBzdHJ1Y3QgZ2RiX2ludGVycHJldGVy ICpjdXJyZW50X2ludGVycHJldGVyID0gTlVMTDsNCisgDQorIHN0YXRpYyBp bnQgaW50ZXJwcmV0ZXJfaW5pdGlhbGl6ZWQgPSAwOw0KKyANCisgLyogZ2Ri X25ld19pbnRlcnByZXRlciAtIFRoaXMgYWxsb2NhdGVzIHNwYWNlIGZvciBh IG5ldyBpbnRlcnByZXRlciwNCisgICAgZmlsbHMgdGhlIGZpZWxkcyBmcm9t IHRoZSBpbnB1dHMsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUNCisg ICAgaW50ZXJwcmV0ZXIuICovDQorIA0KKyBzdHJ1Y3QgZ2RiX2ludGVycHJl dGVyICoNCisgZ2RiX25ld19pbnRlcnByZXRlciAoY2hhciAqbmFtZSwNCisg CQkgICAgIHZvaWQgKmRhdGEsDQorIAkJICAgICBzdHJ1Y3QgdWlfb3V0ICp1 aW91dCwNCisgCQkgICAgIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3Mg KnByb2NzKQ0KKyB7DQorICAgc3RydWN0IGdkYl9pbnRlcnByZXRlciAqbmV3 X2ludGVycDsNCisgDQorICAgbmV3X2ludGVycCA9DQorICAgICAoc3RydWN0 IGdkYl9pbnRlcnByZXRlciAqKSB4bWFsbG9jIChzaXplb2YgKHN0cnVjdCBn ZGJfaW50ZXJwcmV0ZXIpKTsNCisgDQorICAgbmV3X2ludGVycC0+bmFtZSA9 IHhzdHJkdXAgKG5hbWUpOw0KKyAgIG5ld19pbnRlcnAtPmRhdGEgPSBkYXRh Ow0KKyAgIG5ld19pbnRlcnAtPmludGVycHJldGVyX291dCA9IHVpb3V0Ow0K KyAgIG5ld19pbnRlcnAtPnF1aWV0X3AgPSAwOw0KKyAgIG5ld19pbnRlcnAt PnByb2NzLmluaXRfcHJvYyA9IHByb2NzLT5pbml0X3Byb2M7DQorICAgbmV3 X2ludGVycC0+cHJvY3MucmVzdW1lX3Byb2MgPSBwcm9jcy0+cmVzdW1lX3By b2M7DQorICAgbmV3X2ludGVycC0+cHJvY3MuZG9fb25lX2V2ZW50X3Byb2Mg PSBwcm9jcy0+ZG9fb25lX2V2ZW50X3Byb2M7DQorICAgbmV3X2ludGVycC0+ cHJvY3Muc3VzcGVuZF9wcm9jID0gcHJvY3MtPnN1c3BlbmRfcHJvYzsNCisg ICBuZXdfaW50ZXJwLT5wcm9jcy5kZWxldGVfcHJvYyA9IHByb2NzLT5kZWxl dGVfcHJvYzsNCisgICBuZXdfaW50ZXJwLT5wcm9jcy5leGVjX3Byb2MgPSBw cm9jcy0+ZXhlY19wcm9jOw0KKyAgIG5ld19pbnRlcnAtPnByb2NzLnByb21w dF9wcm9jID0gcHJvY3MtPnByb21wdF9wcm9jOw0KKyAgIG5ld19pbnRlcnAt PmluaXRlZCA9IDA7DQorIA0KKyAgIHJldHVybiBuZXdfaW50ZXJwOw0KKyB9 DQorIA0KKyAvKiBBZGQgaW50ZXJwcmV0ZXIgSU5URVJQIHRvIHRoZSBnZGIg aW50ZXJwcmV0ZXIgbGlzdC4gIElmIGFuDQorICAgIGludGVycHJldGVyIG9m IHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgbGlzdCwgdGhlbg0K KyAgICB0aGUgbmV3IG9uZSBpcyBOT1QgYWRkZWQsIGFuZCB0aGUgZnVuY3Rp b24gcmV0dXJucyAwLiAgT3RoZXJ3aXNlDQorICAgIGl0IHJldHVybnMgMS4g Ki8NCisgDQorIGludA0KKyBnZGJfYWRkX2ludGVycHJldGVyIChzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyICppbnRlcnApDQorIHsNCisgICBpZiAoIWludGVy cHJldGVyX2luaXRpYWxpemVkKQ0KKyAgICAgaW5pdGlhbGl6ZV9pbnRlcnBz ICgpOw0KKyANCisgICBpZiAoZ2RiX2xvb2t1cF9pbnRlcnByZXRlciAoaW50 ZXJwLT5uYW1lKSAhPSBOVUxMKQ0KKyAgICAgcmV0dXJuIDA7DQorIA0KKyAg IGludGVycC0+bmV4dCA9IGludGVycF9saXN0Ow0KKyAgIGludGVycF9saXN0 ID0gaW50ZXJwOw0KKyANCisgICByZXR1cm4gMTsNCisgfQ0KKyANCisgLyog TG9va3MgZm9yIHRoZSBpbnRlcnByZXRlciBJTlRFUlAgaW4gdGhlIGludGVy cHJldGVyIGxpc3QuICBJZiBpdCBleGlzdHMsDQorICAgIHJ1bnMgdGhlIGRl bGV0ZV9wcm9jLCBhbmQgaWYgdGhpcyBpcyBzdWNjZXNzZnVsLCB0aGUgSU5U RVJQIGlzIGRlbGV0ZWQgZnJvbQ0KKyAgICB0aGUgaW50ZXJwcmV0ZXIgbGlz dCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS4gIElmIHRoZSBkZWxldGVf cHJvYyBmYWlscywgdGhlDQorICAgIGZ1bmN0aW9uIHJldHVybnMgLTEgYW5k IHRoZSBpbnRlcnByZXRlciBpcyBOT1QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0 LiAgSWYgdGhlDQorICAgIGludGVycCBpcyBub3QgZm91bmQsIDAgaXMgcmV0 dXJuZWQuICovDQorIA0KKyBpbnQNCisgZ2RiX2RlbGV0ZV9pbnRlcnByZXRl ciAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKQ0KKyB7DQorICAg c3RydWN0IGdkYl9pbnRlcnByZXRlciAqY3VyX3B0ciwgKnByZXZfcHRyOw0K KyANCisgICBpZiAoIWludGVycHJldGVyX2luaXRpYWxpemVkKQ0KKyAgICAg ew0KKyAgICAgICB1aV9vdXRfbWVzc2FnZSAodWlvdXQsIDAsDQorIAkJICAg ICAgIllvdSBjYW4ndCBkZWxldGUgYW4gaW50ZXJwIGJlZm9yZSB5b3UgaGF2 ZSBhZGRlZCBvbmUhIik7DQorICAgICAgIHJldHVybiAtMTsNCisgICAgIH0N CisgDQorICAgaWYgKGludGVycF9saXN0ID09IE5VTEwpDQorICAgICB7DQor ICAgICAgIHVpX291dF9tZXNzYWdlICh1aW91dCwgMCwgIk5vIGludGVycHJl dGVycyB0byBkZWxldGUuIik7DQorICAgICAgIHJldHVybiAtMTsNCisgICAg IH0NCisgDQorICAgaWYgKGludGVycF9saXN0LT5uZXh0ID09IE5VTEwpDQor ICAgICB7DQorICAgICAgIHVpX291dF9tZXNzYWdlICh1aW91dCwgMCwgIllv dSBjYW4ndCBkZWxldGUgZ2RiJ3Mgb25seSBpbnRlcHJldGVyLiIpOw0KKyAg ICAgICByZXR1cm4gLTE7DQorICAgICB9DQorIA0KKyAgIGZvciAoY3VyX3B0 ciA9IGludGVycF9saXN0LCBwcmV2X3B0ciA9IE5VTEw7DQorICAgICAgICBj dXJfcHRyICE9IE5VTEw7IHByZXZfcHRyID0gY3VyX3B0ciwgY3VyX3B0ciA9 IGN1cl9wdHItPm5leHQpDQorICAgICB7DQorICAgICAgIGlmIChjdXJfcHRy ID09IGludGVycCkNCisgCXsNCisgCSAgLyogQ2FuJ3QgY3VycmVudGx5IGRl bGV0ZSB0aGUgY29uc29sZSBpbnRlcnByZXRlci4uLiAqLw0KKyAJICBpZiAo c3RyY21wIChpbnRlcnAtPm5hbWUsICJjb25zb2xlIikgPT0gMCkNCisgCSAg ICB7DQorIAkgICAgICB1aV9vdXRfbWVzc2FnZSAodWlvdXQsIDAsDQorIAkJ CSAgICAgICJZb3UgY2FuJ3QgZGVsZXRlIHRoZSBjb25zb2xlIGludGVycHJl dGVyLiIpOw0KKyAJICAgICAgcmV0dXJuIC0xOw0KKyAJICAgIH0NCisgDQor IAkgIC8qIElmIHRoZSBpbnRlcnByZXRlciBpcyB0aGUgY3VycmVudCBpbnRl cnByZXRlciwgc3dpdGNoDQorIAkgICAgIGJhY2sgdG8gdGhlIGNvbnNvbGUg aW50ZXJwcmV0ZXIgKi8NCisgDQorIAkgIGlmIChpbnRlcnAgPT0gY3VycmVu dF9pbnRlcnByZXRlcikNCisgCSAgICB7DQorIAkgICAgICBnZGJfc2V0X2lu dGVycHJldGVyIChnZGJfbG9va3VwX2ludGVycHJldGVyICgiY29uc29sZSIp KTsNCisgCSAgICB9DQorIA0KKyAJICAvKiBEb24ndCBkZWxldGUgdGhlIGlu dGVycHJldGVyIGlmIGl0cyBkZWxldGUgcHJvYyBmYWlscyAqLw0KKyANCisg CSAgaWYgKChpbnRlcnAtPnByb2NzLmRlbGV0ZV9wcm9jICE9IE5VTEwpDQor IAkgICAgICAmJiAoIWludGVycC0+cHJvY3MuZGVsZXRlX3Byb2MgKGludGVy cC0+ZGF0YSkpKQ0KKyAJICAgIHJldHVybiAtMTsNCisgDQorIAkgIGlmIChj dXJfcHRyID09IGludGVycF9saXN0KQ0KKyAJICAgIGludGVycF9saXN0ID0g Y3VyX3B0ci0+bmV4dDsNCisgCSAgZWxzZQ0KKyAJICAgIHByZXZfcHRyLT5u ZXh0ID0gY3VyX3B0ci0+bmV4dDsNCisgDQorIAkgIGJyZWFrOw0KKyAJfQ0K KyAgICAgfQ0KKyANCisgICBpZiAoY3VyX3B0ciA9PSBOVUxMKQ0KKyAgICAg cmV0dXJuIDA7DQorICAgZWxzZQ0KKyAgICAgcmV0dXJuIDE7DQorIH0NCisg DQorIC8qIFRoaXMgc2V0cyB0aGUgY3VycmVudCBpbnRlcnByZXRlciB0byBi ZSBJTlRFUlAuICBJZiBJTlRFUlAgaGFzIG5vdA0KKyAgICBiZWVuIGluaXRp YWxpemVkLCB0aGVuIHRoaXMgd2lsbCBhbHNvIHJ1biB0aGUgaW5pdCBwcm9j LiAgSWYgdGhlDQorICAgIGluaXQgcHJvYyBpcyBzdWNjZXNzZnVsLCByZXR1 cm4gMSwgaWYgaXQgZmFpbHMsIHNldCB0aGUgb2xkDQorICAgIGludGVycHJl dGVyIGJhY2sgaW4gcGxhY2UgYW5kIHJldHVybiAwLiAgSWYgd2UgY2FuJ3Qg cmVzdG9yZSB0aGUNCisgICAgb2xkIGludGVycHJldGVyLCB0aGVuIHJhaXNl IGFuIGludGVybmFsIGVycm9yLCBzaW5jZSB3ZSBhcmUgaW4NCisgICAgcHJl dHR5IGJhZCBzaGFwZSBhdCB0aGlzIHBvaW50LiAqLw0KKyANCisgaW50DQor IGdkYl9zZXRfaW50ZXJwcmV0ZXIgKHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIg KmludGVycCkNCisgew0KKyAgIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKm9s ZF9pbnRlcnAgPSBjdXJyZW50X2ludGVycHJldGVyOw0KKyAgIGludCBmaXJz dF90aW1lID0gMDsNCisgDQorIA0KKyAgIGNoYXIgYnVmZmVyWzY0XTsNCisg DQorICAgaWYgKGN1cnJlbnRfaW50ZXJwcmV0ZXIgIT0gTlVMTCkNCisgICAg IHsNCisgICAgICAgZG9fYWxsX2NvbnRpbnVhdGlvbnMgKCk7DQorICAgICAg IHVpX291dF9mbHVzaCAodWlvdXQpOw0KKyAgICAgICBpZiAoY3VycmVudF9p bnRlcnByZXRlci0+cHJvY3Muc3VzcGVuZF9wcm9jDQorIAkgICYmICFjdXJy ZW50X2ludGVycHJldGVyLT5wcm9jcy5zdXNwZW5kX3Byb2MgKGN1cnJlbnRf aW50ZXJwcmV0ZXItPg0KKyAJCQkJCQkgICAgICAgZGF0YSkpDQorIAl7DQor IAkgIGVycm9yICgiQ291bGQgbm90IHN1c3BlbmQgaW50ZXJwcmV0ZXIgXCIl c1wiXG4iLA0KKyAJCSBjdXJyZW50X2ludGVycHJldGVyLT5uYW1lKTsNCisg CX0NCisgICAgIH0NCisgICBlbHNlDQorICAgICB7DQorICAgICAgIGZpcnN0 X3RpbWUgPSAxOw0KKyAgICAgfQ0KKyANCisgICBjdXJyZW50X2ludGVycHJl dGVyID0gaW50ZXJwOw0KKyANCisgICAvKiBXZSB1c2UgaW50ZXJwcmV0ZXJf cCBmb3IgdGhlICJzZXQgaW50ZXJwcmV0ZXIiIHZhcmlhYmxlLCBzbyB3ZSBu ZWVkDQorICAgICAgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBtYWxsb2MnZWQg Y29weSBmb3IgdGhlIHNldCBjb21tYW5kIHRvIGZyZWUuICovDQorICAgaWYg KGludGVycHJldGVyX3AgIT0gTlVMTA0KKyAgICAgICAmJiBzdHJjbXAgKGN1 cnJlbnRfaW50ZXJwcmV0ZXItPm5hbWUsIGludGVycHJldGVyX3ApICE9IDAp DQorICAgICB7DQorICAgICAgIHhmcmVlIChpbnRlcnByZXRlcl9wKTsNCisg DQorICAgICAgIGludGVycHJldGVyX3AgPSB4c3RyZHVwIChjdXJyZW50X2lu dGVycHJldGVyLT5uYW1lKTsNCisgICAgIH0NCisgDQorICAgdWlvdXQgPSBp bnRlcnAtPmludGVycHJldGVyX291dDsNCisgDQorICAgLyogUnVuIHRoZSBp bml0IHByb2MuICBJZiBpdCBmYWlscywgdHJ5IHRvIHJlc3RvcmUgdGhlIG9s ZCBpbnRlcnAuICovDQorIA0KKyAgIGlmICghaW50ZXJwLT5pbml0ZWQpDQor ICAgICB7DQorICAgICAgIGlmIChpbnRlcnAtPnByb2NzLmluaXRfcHJvYyAh PSBOVUxMKQ0KKyAJew0KKyAJICBpZiAoIWludGVycC0+cHJvY3MuaW5pdF9w cm9jIChpbnRlcnAtPmRhdGEpKQ0KKyAJICAgIHsNCisgCSAgICAgIGlmICgh Z2RiX3NldF9pbnRlcnByZXRlciAob2xkX2ludGVycCkpDQorIAkJaW50ZXJu YWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywNCisgCQkJCSJGYWlsZWQg dG8gaW5pdGlhbGl6ZSBuZXcgaW50ZXJwIFwiJXNcIiAlcyIsDQorIAkJCQlp bnRlcnAtPm5hbWUsDQorIAkJCQkiYW5kIGNvdWxkIG5vdCByZXN0b3JlIG9s ZCBpbnRlcnAhXG4iKTsNCisgCSAgICAgIHJldHVybiAwOw0KKyAJICAgIH0N CisgCSAgZWxzZQ0KKyAJICAgIHsNCisgCSAgICAgIGludGVycC0+aW5pdGVk ID0gMTsNCisgCSAgICB9DQorIAl9DQorICAgICAgIGVsc2UNCisgCXsNCisg CSAgaW50ZXJwLT5pbml0ZWQgPSAxOw0KKyAJfQ0KKyAgICAgfQ0KKyANCisg ICAvKiBDbGVhciBvdXQgYW55IGluc3RhbGxlZCBpbnRlcnByZXRlciBob29r cy9ldmVudCBoYW5kbGVycy4gKi8NCisgICBjbGVhcl9pbnRlcnByZXRlcl9o b29rcyAoKTsNCisgDQorICAgaWYgKGludGVycC0+cHJvY3MucmVzdW1lX3By b2MgIT0gTlVMTA0KKyAgICAgICAmJiAoIWludGVycC0+cHJvY3MucmVzdW1l X3Byb2MgKGludGVycC0+ZGF0YSkpKQ0KKyAgICAgew0KKyAgICAgICBpZiAo IWdkYl9zZXRfaW50ZXJwcmV0ZXIgKG9sZF9pbnRlcnApKQ0KKyAJaW50ZXJu YWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywNCisgCQkJIkZhaWxlZCB0 byBpbml0aWFsaXplIG5ldyBpbnRlcnAgXCIlc1wiICVzIiwNCisgCQkJaW50 ZXJwLT5uYW1lLCAiYW5kIGNvdWxkIG5vdCByZXN0b3JlIG9sZCBpbnRlcnAh XG4iKTsNCisgICAgICAgcmV0dXJuIDA7DQorICAgICB9DQorIA0KKyAgIC8q IEZpbmFsbHksIHB1dCB1cCB0aGUgbmV3IHByb21wdCB0byBzaG93IHRoYXQg d2UgYXJlIGluZGVlZCBoZXJlLiANCisgICAgICBBbHNvLCBkaXNwbGF5X2dk Yl9wcm9tcHQgZm9yIHRoZSBjb25zb2xlIGRvZXMgc29tZSByZWFkbGluZSBt YWdpYw0KKyAgICAgIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIGNvbnNvbGUg aW50ZXJwcmV0ZXIsIGF0IGxlYXN0Li4uICovDQorIA0KKyAgIGlmICghZmly c3RfdGltZSkNCisgICAgIHsNCisgICAgICAgaWYgKCFnZGJfaW50ZXJwcmV0 ZXJfaXNfcXVpZXQgKGludGVycCkpDQorIAl7DQorIAkgIHNwcmludGYgKGJ1 ZmZlciwgIlN3aXRjaGluZyB0byBpbnRlcnByZXRlciBcIiUuMjRzXCIuXG4i LA0KKyAJCSAgIGludGVycC0+bmFtZSk7DQorIAkgIHVpX291dF90ZXh0ICh1 aW91dCwgYnVmZmVyKTsNCisgCX0NCisgICAgICAgZGlzcGxheV9nZGJfcHJv bXB0IChOVUxMKTsNCisgICAgIH0NCisgDQorICAgcmV0dXJuIDE7DQorIH0N CisgDQorIC8qDQorICAqIGdkYl9sb29rdXBfaW50ZXJwcmV0ZXIgLSBMb29r cyB1cCB0aGUgaW50ZXJwcmV0ZXIgZm9yIE5BTUUuICBJZg0KKyAgKiBubyBz dWNoIGludGVycHJldGVyIGV4aXN0cywgcmV0dXJuIE5VTEwsIG90aGVyd2lz ZSByZXR1cm4gYSBwb2ludGVyDQorICAqIHRvIHRoZSBpbnRlcnByZXRlci4g DQorICAqLw0KKyANCisgc3RydWN0IGdkYl9pbnRlcnByZXRlciAqDQorIGdk Yl9sb29rdXBfaW50ZXJwcmV0ZXIgKGNoYXIgKm5hbWUpDQorIHsNCisgICBz dHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnA7DQorIA0KKyAgIGlmIChu YW1lID09IE5VTEwgfHwgc3RybGVuIChuYW1lKSA9PSAwKQ0KKyAgICAgcmV0 dXJuIE5VTEw7DQorIA0KKyAgIGZvciAoaW50ZXJwID0gaW50ZXJwX2xpc3Q7 IGludGVycCAhPSBOVUxMOyBpbnRlcnAgPSBpbnRlcnAtPm5leHQpDQorICAg ICB7DQorICAgICAgIGlmIChzdHJjbXAgKGludGVycC0+bmFtZSwgbmFtZSkg PT0gMCkNCisgCXJldHVybiBpbnRlcnA7DQorICAgICB9DQorIA0KKyAgIHJl dHVybiBOVUxMOw0KKyB9DQorIA0KKyAvKiBSZXR1cm5zIHRoZSBjdXJyZW50 IGludGVycHJldGVyLiAqLw0KKyANCisgc3RydWN0IGdkYl9pbnRlcnByZXRl ciAqDQorIGdkYl9jdXJyZW50X2ludGVycHJldGVyICgpDQorIHsNCisgICBy ZXR1cm4gY3VycmVudF9pbnRlcnByZXRlcjsNCisgfQ0KKyANCisgc3RydWN0 IHVpX291dCAqDQorIGdkYl9pbnRlcnByZXRlcl91aV9vdXQgKHN0cnVjdCBn ZGJfaW50ZXJwcmV0ZXIgKmludGVycCkNCisgew0KKyAgIGlmIChpbnRlcnAg IT0gTlVMTCkNCisgICAgIHJldHVybiBpbnRlcnAtPmludGVycHJldGVyX291 dDsNCisgDQorICAgcmV0dXJuIGN1cnJlbnRfaW50ZXJwcmV0ZXItPmludGVy cHJldGVyX291dDsNCisgfQ0KKyANCisgLyogUmV0dXJucyB0cnVlIGlmIHRo ZSBjdXJyZW50IGludGVycCBpcyB0aGUgcGFzc2VkIGluIG5hbWUuICovDQor IGludA0KKyBnZGJfY3VycmVudF9pbnRlcnByZXRlcl9pc19uYW1lZCAoY2hh ciAqaW50ZXJwX25hbWUpDQorIHsNCisgICBzdHJ1Y3QgZ2RiX2ludGVycHJl dGVyICpjdXJyZW50X2ludGVycCA9IGdkYl9jdXJyZW50X2ludGVycHJldGVy ICgpOw0KKyANCisgICBpZiAoY3VycmVudF9pbnRlcnApDQorICAgICByZXR1 cm4gKHN0cmNtcCAoY3VycmVudF9pbnRlcnAtPm5hbWUsIGludGVycF9uYW1l KSA9PSAwKTsNCisgDQorICAgcmV0dXJuIDA7DQorIH0NCisgDQorIC8qIFRo aXMgaXMgY2FsbGVkIGluIGRpc3BsYXlfZ2RiX3Byb21wdC4NCisgICAgSWYg dGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIgZGVmaW5lcyBhIHByb21wdF9wcm9j LCB0aGVuIHRoYXQgcHJvYyBpcyANCisgICAgcnVuLiAgSWYgdGhlIHByb2Mg cmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCBkaXNwbGF5X2dkYl9wcm9tcHQg d2lsbA0KKyAgICByZXR1cm4gd2l0aG91dCBpdHNlbGYgZGlzcGxheWluZyB0 aGUgcHJvbXB0LiAqLw0KKyANCisgaW50DQorIGdkYl9pbnRlcnByZXRlcl9k aXNwbGF5X3Byb21wdCAoY2hhciAqbmV3X3Byb21wdCkNCisgew0KKyAgIGlm IChjdXJyZW50X2ludGVycHJldGVyLT5wcm9jcy5wcm9tcHRfcHJvYyA9PSBO VUxMKQ0KKyAgICAgcmV0dXJuIDA7DQorICAgZWxzZQ0KKyAgICAgcmV0dXJu IGN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2NzLnByb21wdF9wcm9jIChjdXJy ZW50X2ludGVycHJldGVyLT5kYXRhLA0KKyAJCQkJCQkgICBuZXdfcHJvbXB0 KTsNCisgfQ0KKyANCisgaW50DQorIGdkYl9pbnRlcnByZXRlcl9pc19xdWll dCAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKQ0KKyB7DQorICAg aWYgKGludGVycCAhPSBOVUxMKQ0KKyAgICAgcmV0dXJuIGludGVycC0+cXVp ZXRfcDsNCisgICBlbHNlDQorICAgICByZXR1cm4gY3VycmVudF9pbnRlcnBy ZXRlci0+cXVpZXRfcDsNCisgfQ0KKyANCisgaW50DQorIGdkYl9pbnRlcnBy ZXRlcl9zZXRfcXVpZXQgKHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXIgKmludGVy cCwgaW50IHF1aWV0KQ0KKyB7DQorICAgaW50IG9sZF92YWwgPSBpbnRlcnAt PnF1aWV0X3A7DQorICAgaW50ZXJwLT5xdWlldF9wID0gcXVpZXQ7DQorICAg cmV0dXJuIG9sZF92YWw7DQorIH0NCisgDQorIC8qIGdkYl9pbnRlcnByZXRl cl9leGVjIC0gVGhpcyBleGVjdXRlcyBDT01NQU5EX1NUUiBpbiB0aGUgY3Vy cmVudCANCisgICAgaW50ZXJwcmV0ZXIuICovDQorIA0KKyBpbnQNCisgZ2Ri X2ludGVycHJldGVyX2V4ZWMgKGNoYXIgKmNvbW1hbmRfc3RyKQ0KKyB7DQor ICAgaWYgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2NzLmV4ZWNfcHJvYyAh PSBOVUxMKQ0KKyAgICAgew0KKyAgICAgICByZXR1cm4gY3VycmVudF9pbnRl cnByZXRlci0+cHJvY3MuZXhlY19wcm9jIChjdXJyZW50X2ludGVycHJldGVy LT5kYXRhLA0KKyAJCQkJCQkgICBjb21tYW5kX3N0cik7DQorICAgICB9DQor IA0KKyAgIHJldHVybiAwOw0KKyB9DQorIA0KKyBzdHJ1Y3QgZ2RiX2ludGVy cHJldGVyX3Byb2NzICoNCisgZ2RiX2ludGVycHJldGVyX2dldF9wcm9jcyAo c3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKQ0KKyB7DQorICAgaWYg KGludGVycCAhPSBOVUxMKQ0KKyAgICAgcmV0dXJuICZpbnRlcnAtPnByb2Nz Ow0KKyANCisgICByZXR1cm4gJmN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2Nz Ow0KKyB9DQorIA0KKyB2b2lkICoNCisgZ2RiX2ludGVycHJldGVyX2dldF9k YXRhIChzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnApDQorIHsNCisg ICBpZiAoaW50ZXJwICE9IE5VTEwpDQorICAgICByZXR1cm4gaW50ZXJwLT5k YXRhOw0KKyANCisgICByZXR1cm4gY3VycmVudF9pbnRlcnByZXRlci0+ZGF0 YTsNCisgfQ0KKyANCisgaW50DQorIGludGVycHJldGVyX2RvX29uZV9ldmVu dCAoKQ0KKyB7DQorICAgaWYgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2Nz LmRvX29uZV9ldmVudF9wcm9jID09IE5VTEwpDQorICAgICByZXR1cm4gMDsN CisgDQorICAgcmV0dXJuIGN1cnJlbnRfaW50ZXJwcmV0ZXItPnByb2NzLmRv X29uZV9ldmVudF9wcm9jIChjdXJyZW50X2ludGVycHJldGVyLT4NCisgCQkJ CQkJICAgICAgIGRhdGEpOw0KKyB9DQorIA0KKyAvKiBBIGNvbnZlbmllbmNl IHJvdXRpbmUgdGhhdCBudWxscyBvdXQgYWxsIHRoZQ0KKyAgICBjb21tb24g Y29tbWFuZCBob29rcy4gIFVzZSBpdCB3aGVuIHJlbW92aW5nIHlvdXIgaW50 ZXJwcmV0ZXIgaW4gaXRzIA0KKyAgICBzdXNwZW5kIHByb2MuICovDQorIA0K KyB2b2lkDQorIGNsZWFyX2ludGVycHJldGVyX2hvb2tzICgpDQorIHsNCisg ICBpbml0X3VpX2hvb2sgPSAwOw0KKyAgIHByaW50X2ZyYW1lX2luZm9fbGlz dGluZ19ob29rID0gMDsNCisgICAvKnByaW50X2ZyYW1lX21vcmVfaW5mb19o b29rID0gMDsgKi8NCisgICBxdWVyeV9ob29rID0gMDsNCisgICB3YXJuaW5n X2hvb2sgPSAwOw0KKyAgIGNyZWF0ZV9icmVha3BvaW50X2hvb2sgPSAwOw0K KyAgIGRlbGV0ZV9icmVha3BvaW50X2hvb2sgPSAwOw0KKyAgIG1vZGlmeV9i cmVha3BvaW50X2hvb2sgPSAwOw0KKyAgIGludGVyYWN0aXZlX2hvb2sgPSAw Ow0KKyAgIHJlZ2lzdGVyc19jaGFuZ2VkX2hvb2sgPSAwOw0KKyAgIHJlYWRs aW5lX2JlZ2luX2hvb2sgPSAwOw0KKyAgIHJlYWRsaW5lX2hvb2sgPSAwOw0K KyAgIHJlYWRsaW5lX2VuZF9ob29rID0gMDsNCisgICByZWdpc3Rlcl9jaGFu Z2VkX2hvb2sgPSAwOw0KKyAgIG1lbW9yeV9jaGFuZ2VkX2hvb2sgPSAwOw0K KyAgIGNvbnRleHRfaG9vayA9IDA7DQorICAgdGFyZ2V0X3dhaXRfaG9vayA9 IDA7DQorICAgY2FsbF9jb21tYW5kX2hvb2sgPSAwOw0KKyAgIGVycm9yX2hv b2sgPSAwOw0KKyAgIGVycm9yX2JlZ2luX2hvb2sgPSAwOw0KKyAgIGNvbW1h bmRfbG9vcF9ob29rID0gMDsNCisgICBjbGVhcl9nZGJfZXZlbnRfaG9va3Mg KCk7DQorIH0NCisgDQorIC8qIFRoaXMgaXMgYSBsYXp5IGluaXQgcm91dGlu ZSwgY2FsbGVkIHRoZSBmaXJzdCB0aW1lDQorICAgIHRoZSBpbnRlcnByZXRl ciBtb2R1bGUgaXMgdXNlZC4gIEkgcHV0IGl0IGhlcmUganVzdCBpbiBjYXNl LCBidXQgSSBoYXZlbid0DQorICAgIHRob3VnaHQgb2YgYSB1c2UgZm9yIGl0 IHlldC4gIEkgd2lsbCBwcm9iYWJseSBiYWcgaXQgc29vbiwgc2luY2UgSSBk b24ndA0KKyAgICB0aGluayBpdCB3aWxsIGJlIG5lY2Vzc2FyeS4gKi8NCisg DQorIHN0YXRpYyB2b2lkDQorIGluaXRpYWxpemVfaW50ZXJwcyAodm9pZCkN Cisgew0KKyAgIGludGVycHJldGVyX2luaXRpYWxpemVkID0gMTsNCisgICAv KiBEb24ndCBrbm93IGlmIGFueXRoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVy ZS4uLiAqLw0KKyB9DQorIA0KKyAvKiBzZXRfaW50ZXJwcmV0ZXJfY21kIC0g VGhpcyBpbXBsZW1lbnRzICJzZXQgaW50ZXJwcmV0ZXIgZm9vIi4gKi8NCisg DQorIHN0YXRpYyB2b2lkDQorIHNldF9pbnRlcnByZXRlcl9jbWQgKGNoYXIg KmFyZ3MsIGludCBmcm9tX3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQg KmMpDQorIHsNCisgICBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnBf cHRyOw0KKyANCisgICBkb250X3JlcGVhdCAoKTsNCisgDQorICAgaWYgKGNt ZF90eXBlIChjKSAhPSBzZXRfY21kKQ0KKyAgICAgcmV0dXJuOw0KKyANCisg ICBpbnRlcnBfcHRyID0gZ2RiX2xvb2t1cF9pbnRlcnByZXRlciAoaW50ZXJw cmV0ZXJfcCk7DQorICAgaWYgKGludGVycF9wdHIgIT0gTlVMTCkNCisgICAg IHsNCisgICAgICAgaWYgKCFnZGJfc2V0X2ludGVycHJldGVyIChpbnRlcnBf cHRyKSkNCisgCWVycm9yICgiXG5Db3VsZCBub3Qgc3dpdGNoIHRvIGludGVy cHJldGVyIFwiJXNcIiwgJXMlc1wiLlxuIiwNCisgCSAgICAgICBpbnRlcnBf cHRyLT5uYW1lLCAicmV2ZXJ0aW5nIHRvIGludGVycHJldGVyIFwiIiwNCisg CSAgICAgICBjdXJyZW50X2ludGVycHJldGVyLT5uYW1lKTsNCisgICAgIH0N CisgICBlbHNlDQorICAgICB7DQorICAgICAgIGNoYXIgKmJhZF9uYW1lID0g aW50ZXJwcmV0ZXJfcDsNCisgICAgICAgaW50ZXJwcmV0ZXJfcCA9IHhzdHJk dXAgKGN1cnJlbnRfaW50ZXJwcmV0ZXItPm5hbWUpOw0KKyAgICAgICBlcnJv ciAoIkNvdWxkIG5vdCBmaW5kIGludGVycHJldGVyIFwiJXNcIi4iLCBiYWRf bmFtZSk7DQorICAgICB9DQorIH0NCisgDQorIC8qIGxpc3RfaW50ZXJwcmV0 ZXJfY21kIC0gVGhpcyBpbXBsZW1lbnRzICJpbmZvIGludGVycHJldGVycyIu ICovDQorIA0KKyB2b2lkDQorIGxpc3RfaW50ZXJwcmV0ZXJfY21kIChjaGFy ICphcmdzLCBpbnQgZnJvbV90dHkpDQorIHsNCisgICBzdHJ1Y3QgZ2RiX2lu dGVycHJldGVyICppbnRlcnBfcHRyOw0KKyANCisgICB1aV9vdXRfbGlzdF9i ZWdpbiAodWlvdXQsICJpbnRlcnByZXRlcnMiKTsNCisgICBmb3IgKGludGVy cF9wdHIgPSBpbnRlcnBfbGlzdDsgaW50ZXJwX3B0ciAhPSBOVUxMOw0KKyAg ICAgICAgaW50ZXJwX3B0ciA9IGludGVycF9wdHItPm5leHQpDQorICAgICB7 DQorICAgICAgIHVpX291dF90ZXh0ICh1aW91dCwgIiAgKiAiKTsNCisgICAg ICAgdWlfb3V0X2ZpZWxkX3N0cmluZyAodWlvdXQsICJpbnRlcnByZXRlciIs IGludGVycF9wdHItPm5hbWUpOw0KKyAgICAgICB1aV9vdXRfdGV4dCAodWlv dXQsICJcbiIpOw0KKyAgICAgfQ0KKyAgIHVpX291dF9saXN0X2VuZCAodWlv dXQpOw0KKyB9DQorIA0KKyB2b2lkDQorIGludGVycHJldGVyX2V4ZWNfY21k IChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpDQorIHsNCisgICBzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyICpvbGRfaW50ZXJwLCAqaW50ZXJwX3RvX3VzZTsN CisgICBjaGFyICoqcHJ1bGVzID0gTlVMTDsNCisgICBjaGFyICoqdHJ1bGUg PSBOVUxMOw0KKyAgIHVuc2lnbmVkIGludCBucnVsZXM7DQorICAgdW5zaWdu ZWQgaW50IGk7DQorICAgaW50IG9sZF9xdWlldCwgdXNlX3F1aWV0Ow0KKyAN CisgICBwcnVsZXMgPSBidWlsZGFyZ3YgKGFyZ3MpOw0KKyAgIGlmIChwcnVs ZXMgPT0gTlVMTCkNCisgICAgIHsNCisgICAgICAgZXJyb3IgKCJ1bmFibGUg dG8gcGFyc2UgYXJndW1lbnRzIik7DQorICAgICB9DQorIA0KKyAgIG5ydWxl cyA9IDA7DQorICAgaWYgKHBydWxlcyAhPSBOVUxMKQ0KKyAgICAgew0KKyAg ICAgICBmb3IgKHRydWxlID0gcHJ1bGVzOyAqdHJ1bGUgIT0gTlVMTDsgdHJ1 bGUrKykNCisgCXsNCisgCSAgbnJ1bGVzKys7DQorIAl9DQorICAgICB9DQor IA0KKyAgIGlmIChucnVsZXMgPCAyKQ0KKyAgICAgZXJyb3IgKCJ1c2FnZTog aW50ZXJwcmV0ZXItZXhlYyA8aW50ZXJwcmV0ZXI+IFsgPGNvbW1hbmQ+IC4u LiBdIik7DQorIA0KKyAgIG9sZF9pbnRlcnAgPSBnZGJfY3VycmVudF9pbnRl cnByZXRlciAoKTsNCisgDQorICAgaW50ZXJwX3RvX3VzZSA9IGdkYl9sb29r dXBfaW50ZXJwcmV0ZXIgKHBydWxlc1swXSk7DQorICAgaWYgKGludGVycF90 b191c2UgPT0gTlVMTCkNCisgICAgIGVycm9yICgiQ291bGQgbm90IGZpbmQg aW50ZXJwcmV0ZXIgXCIlc1wiLiIsIHBydWxlc1swXSk7DQorIA0KKyAgIC8q IFRlbXBvcmFyaWx5IHNldCBpbnRlcnByZXRlcnMgcXVpZXQgKi8NCisgICBv bGRfcXVpZXQgPSBnZGJfaW50ZXJwcmV0ZXJfc2V0X3F1aWV0IChvbGRfaW50 ZXJwLCAxKTsNCisgICB1c2VfcXVpZXQgPSBnZGJfaW50ZXJwcmV0ZXJfc2V0 X3F1aWV0IChpbnRlcnBfdG9fdXNlLCAxKTsNCisgDQorICAgaWYgKCFnZGJf c2V0X2ludGVycHJldGVyIChpbnRlcnBfdG9fdXNlKSkNCisgICAgIGVycm9y ICgiQ291bGQgbm90IHN3aXRjaCB0byBpbnRlcnByZXRlciBcIiVzXCIuIiwg cHJ1bGVzWzBdKTsNCisgDQorICAgZm9yIChpID0gMTsgaSA8IG5ydWxlczsg aSsrKQ0KKyAgICAgew0KKyAgICAgICBpZiAoIWdkYl9pbnRlcnByZXRlcl9l eGVjIChwcnVsZXNbaV0pKQ0KKyAJew0KKyAJICBnZGJfc2V0X2ludGVycHJl dGVyIChvbGRfaW50ZXJwKTsNCisgCSAgZ2RiX2ludGVycHJldGVyX3NldF9x dWlldCAoaW50ZXJwX3RvX3VzZSwgb2xkX3F1aWV0KTsNCisgCSAgZXJyb3IN CisgCSAgICAoImludGVycHJldGVyLWV4ZWM6IG1pX2ludGVycHJldGVyX2V4 ZWN1dGU6IGVycm9yIGluIGNvbW1hbmQ6IFwiJXNcIi4iLA0KKyAJICAgICBw cnVsZXNbaV0pOw0KKyAJICBicmVhazsNCisgCX0NCisgICAgIH0NCisgDQor ICAgZ2RiX3NldF9pbnRlcnByZXRlciAob2xkX2ludGVycCk7DQorICAgZ2Ri X2ludGVycHJldGVyX3NldF9xdWlldCAoaW50ZXJwX3RvX3VzZSwgdXNlX3F1 aWV0KTsNCisgICBnZGJfaW50ZXJwcmV0ZXJfc2V0X3F1aWV0IChvbGRfaW50 ZXJwLCBvbGRfcXVpZXQpOw0KKyB9DQorIA0KKyAvKiBMaXN0IHRoZSBwb3Nz aWJsZSBpbnRlcnByZXRlcnMgd2hpY2ggY291bGQgY29tcGxldGUgdGhlIGdp dmVuIHRleHQuICovDQorIA0KKyBzdGF0aWMgY2hhciAqKg0KKyBpbnRlcnBy ZXRlcl9jb21wbGV0ZXIgKGNoYXIgKnRleHQsIGNoYXIgKndvcmQpDQorIHsN CisgICBpbnQgYWxsb2NlZCwgdGV4dGxlbjsNCisgICBpbnQgbnVtX21hdGNo ZXM7DQorICAgY2hhciAqKm1hdGNoZXM7DQorICAgc3RydWN0IGdkYl9pbnRl cnByZXRlciAqaW50ZXJwOw0KKyANCisgICAvKiBXZSBleHBlY3Qgb25seSBh IHZlcnkgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJwcmV0ZXJzLCBzbyBqdXN0 DQorICAgICAgYWxsb2NhdGUgcm9vbSBmb3IgYWxsIG9mIHRoZW0uICovDQor ICAgZm9yIChpbnRlcnAgPSBpbnRlcnBfbGlzdDsgaW50ZXJwICE9IE5VTEw7 IGludGVycCA9IGludGVycC0+bmV4dCkNCisgICAgICsrYWxsb2NlZDsNCisg ICBtYXRjaGVzID0gKGNoYXIgKiopIHhtYWxsb2MgKGFsbG9jZWQgKiBzaXpl b2YgKGNoYXIgKikpOw0KKyANCisgICBudW1fbWF0Y2hlcyA9IDA7DQorICAg dGV4dGxlbiA9IHN0cmxlbiAodGV4dCk7DQorICAgZm9yIChpbnRlcnAgPSBp bnRlcnBfbGlzdDsgaW50ZXJwICE9IE5VTEw7IGludGVycCA9IGludGVycC0+ bmV4dCkNCisgICAgIHsNCisgICAgICAgaWYgKHN0cm5jbXAgKGludGVycC0+ bmFtZSwgdGV4dCwgdGV4dGxlbikgPT0gMCkNCisgCXsNCisgCSAgbWF0Y2hl c1tudW1fbWF0Y2hlc10gPQ0KKyAJICAgIChjaGFyICopIHhtYWxsb2MgKHN0 cmxlbiAod29yZCkgKyBzdHJsZW4gKGludGVycC0+bmFtZSkgKyAxKTsNCisg CSAgaWYgKHdvcmQgPT0gdGV4dCkNCisgCSAgICBzdHJjcHkgKG1hdGNoZXNb bnVtX21hdGNoZXNdLCBpbnRlcnAtPm5hbWUpOw0KKyAJICBlbHNlIGlmICh3 b3JkID4gdGV4dCkNCisgCSAgICB7DQorIAkgICAgICAvKiBSZXR1cm4gc29t ZSBwb3J0aW9uIG9mIGludGVycC0+bmFtZSAqLw0KKyAJICAgICAgc3RyY3B5 IChtYXRjaGVzW251bV9tYXRjaGVzXSwgaW50ZXJwLT5uYW1lICsgKHdvcmQg LSB0ZXh0KSk7DQorIAkgICAgfQ0KKyAJICBlbHNlDQorIAkgICAgew0KKyAJ ICAgICAgLyogUmV0dXJuIHNvbWUgb2YgdGV4dCBwbHVzIGludGVycC0+bmFt ZSAqLw0KKyAJICAgICAgc3RybmNweSAobWF0Y2hlc1tudW1fbWF0Y2hlc10s IHdvcmQsIHRleHQgLSB3b3JkKTsNCisgCSAgICAgIG1hdGNoZXNbbnVtX21h dGNoZXNdW3RleHQgLSB3b3JkXSA9ICdcMCc7DQorIAkgICAgICBzdHJjYXQg KG1hdGNoZXNbbnVtX21hdGNoZXNdLCBpbnRlcnAtPm5hbWUpOw0KKyAJICAg IH0NCisgCSAgKytudW1fbWF0Y2hlczsNCisgCX0NCisgICAgIH0NCisgDQor ICAgaWYgKG51bV9tYXRjaGVzID09IDApDQorICAgICB7DQorICAgICAgIHhm cmVlIChtYXRjaGVzKTsNCisgICAgICAgbWF0Y2hlcyA9IE5VTEw7DQorICAg ICB9DQorICAgZWxzZSBpZiAobnVtX21hdGNoZXMgPCBhbGxvY2VkKQ0KKyAg ICAgew0KKyAgICAgICBtYXRjaGVzID0gKGNoYXIgKiopIHhyZWFsbG9jICgo Y2hhciAqKSBtYXRjaGVzLCAoKG51bV9tYXRjaGVzICsgMSkNCisgCQkJCQkJ ICAgICAgICogc2l6ZW9mIChjaGFyICopKSk7DQorICAgICAgIG1hdGNoZXNb bnVtX21hdGNoZXNdID0gTlVMTDsNCisgICAgIH0NCisgDQorICAgcmV0dXJu IG1hdGNoZXM7DQorIH0NCisgDQorIC8qIFRoaXMganVzdCBhZGRzIHRoZSAi c2V0IGludGVycHJldGVyIiBhbmQgImluZm8gaW50ZXJwcmV0ZXJzIiBjb21t YW5kcy4gKi8NCisgDQorIHZvaWQNCisgX2luaXRpYWxpemVfaW50ZXJwcmV0 ZXIgKHZvaWQpDQorIHsNCisgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAq YzsNCisgDQorICAgYyA9IGFkZF9jbWQgKCJpbnRlcnByZXRlci1leGVjIiwg Y2xhc3Nfc3VwcG9ydCwNCisgCSAgICAgICBpbnRlcnByZXRlcl9leGVjX2Nt ZCwNCisgCSAgICAgICAiRXhlY3V0ZSBhIGNvbW1hbmQgaW4gYW4gaW50ZXJw cmV0ZXIuICBJdCB0YWtlcyB0d28gYXJndW1lbnRzOlxuXA0KKyBUaGUgZmly c3QgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGludGVycHJldGVyIHRv IHVzZS5cblwNCisgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY29tbWFu ZCB0byBleGVjdXRlLlxuIiwgJmNtZGxpc3QpOw0KKyAgIHNldF9jbWRfY29t cGxldGVyIChjLCBpbnRlcnByZXRlcl9jb21wbGV0ZXIpOw0KKyB9DQpJbmRl eDogaW50ZXJwcy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogaW50ZXJwcy5oDQpkaWZmIC1OIGludGVycHMuaA0KKioqIGludGVycHMu aAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQotLS0gaW50ZXJwcy5oCTIz IFNlcCAyMDAyIDE5OjM3OjM3IC0wMDAwDQoqKioqKioqKioqKioqKioNCioq KiAwICoqKioNCi0tLSAxLDc2IC0tLS0NCisgLyogTWFuYWdlcyBpbnRlcnBy ZXRlcnMgZm9yIGdkYi4NCisgICAgQ29weXJpZ2h0IDIwMDAsMjAwMiBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgICAgV3JpdHRlbiBieSBK aW0gSW5naGFtIDxqaW5naGFtQGFwcGxlLmNvbT4gb2YgQXBwbGUgQ29tcHV0 ZXIsIEluYy4NCisgDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4N CisgDQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5DQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y DQorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor IA0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyANCisgICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisg ICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg MzMwLA0KKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gKi8NCisg DQorICNpZm5kZWYgR0RCX0lOVEVSUFJFVEVSX0gNCisgI2RlZmluZSBHREJf SU5URVJQUkVURVJfSA0KKyANCisgdHlwZWRlZiBpbnQgKCppbnRlcnBfaW5p dF9mdHlwZSkgKHZvaWQgKmRhdGEpOw0KKyB0eXBlZGVmIGludCAoKmludGVy cF9yZXN1bWVfZnR5cGUpICh2b2lkICpkYXRhKTsNCisgdHlwZWRlZiBpbnQg KCppbnRlcnBfZG9fb25lX2V2ZW50X2Z0eXBlKSAodm9pZCAqZGF0YSk7DQor IHR5cGVkZWYgaW50ICgqaW50ZXJwX3N1c3BlbmRfZnR5cGUpICh2b2lkICpk YXRhKTsNCisgdHlwZWRlZiBpbnQgKCppbnRlcnBfZGVsZXRlX2Z0eXBlKSAo dm9pZCAqZGF0YSk7DQorIHR5cGVkZWYgaW50ICgqaW50ZXJwX3Byb21wdF9m dHlwZSkgKHZvaWQgKmRhdGEsIGNoYXIgKm5ld19wcm9tcHQpOw0KKyB0eXBl ZGVmIGludCAoKmludGVycF9leGVjX2Z0eXBlKSAodm9pZCAqZGF0YSwgY2hh ciAqY29tbWFuZCk7DQorIA0KKyBzdHJ1Y3QgdWlfb3V0Ow0KKyBzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyOw0KKyANCisgc3RydWN0IGdkYl9pbnRlcnByZXRl cl9wcm9jcw0KKyB7DQorICAgaW50ZXJwX2luaXRfZnR5cGUgaW5pdF9wcm9j Ow0KKyAgIGludGVycF9yZXN1bWVfZnR5cGUgcmVzdW1lX3Byb2M7DQorICAg aW50ZXJwX2RvX29uZV9ldmVudF9mdHlwZSBkb19vbmVfZXZlbnRfcHJvYzsN CisgICBpbnRlcnBfc3VzcGVuZF9mdHlwZSBzdXNwZW5kX3Byb2M7DQorICAg aW50ZXJwX2RlbGV0ZV9mdHlwZSBkZWxldGVfcHJvYzsNCisgICBpbnRlcnBf ZXhlY19mdHlwZSBleGVjX3Byb2M7DQorICAgaW50ZXJwX3Byb21wdF9mdHlw ZSBwcm9tcHRfcHJvYzsNCisgfTsNCisgDQorIGV4dGVybiBzdHJ1Y3QgZ2Ri X2ludGVycHJldGVyDQorICAgKmdkYl9uZXdfaW50ZXJwcmV0ZXIgKGNoYXIg Km5hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB1aV9vdXQgKnVpb3V0LA0KKyAJ CQlzdHJ1Y3QgZ2RiX2ludGVycHJldGVyX3Byb2NzICpwcm9jcyk7DQorIA0K KyBleHRlcm4gaW50IGdkYl9hZGRfaW50ZXJwcmV0ZXIgKHN0cnVjdCBnZGJf aW50ZXJwcmV0ZXIgKmludGVycCk7DQorIGV4dGVybiBpbnQgZ2RiX2RlbGV0 ZV9pbnRlcnByZXRlciAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJw KTsNCisgZXh0ZXJuIGludCBnZGJfc2V0X2ludGVycHJldGVyIChzdHJ1Y3Qg Z2RiX2ludGVycHJldGVyICppbnRlcnApOw0KKyBleHRlcm4gc3RydWN0IGdk Yl9pbnRlcnByZXRlciAqZ2RiX2xvb2t1cF9pbnRlcnByZXRlciAoY2hhciAq bmFtZSk7DQorIGV4dGVybiBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICpnZGJf Y3VycmVudF9pbnRlcnByZXRlciAoKTsNCisgZXh0ZXJuIHN0cnVjdCB1aV9v dXQgKmdkYl9pbnRlcnByZXRlcl91aV9vdXQgKHN0cnVjdCBnZGJfaW50ZXJw cmV0ZXIgKmludGVycCk7DQorIGV4dGVybiBpbnQgZ2RiX2N1cnJlbnRfaW50 ZXJwcmV0ZXJfaXNfbmFtZWQgKGNoYXIgKmludGVycF9uYW1lKTsNCisgZXh0 ZXJuIGludCBnZGJfaW50ZXJwcmV0ZXJfZXhlYyAoY2hhciAqY29tbWFuZF9z dHIpOw0KKyBleHRlcm4gaW50IGdkYl9pbnRlcnByZXRlcl9kaXNwbGF5X3By b21wdCAoY2hhciAqbmV3X3Byb21wdCk7DQorIGV4dGVybiBpbnQgZ2RiX2lu dGVycHJldGVyX3NldF9xdWlldCAoc3RydWN0IGdkYl9pbnRlcnByZXRlciAq aW50ZXJwLA0KKyAJCQkJICAgICAgaW50IHF1aWV0KTsNCisgZXh0ZXJuIGlu dCBnZGJfaW50ZXJwcmV0ZXJfaXNfcXVpZXQgKHN0cnVjdCBnZGJfaW50ZXJw cmV0ZXIgKmludGVycCk7DQorIGV4dGVybiBzdHJ1Y3QgZ2RiX2ludGVycHJl dGVyX3Byb2NzICpnZGJfaW50ZXJwcmV0ZXJfZ2V0X3Byb2NzIChzdHJ1Y3QN CisgCQkJCQkJCQlnZGJfaW50ZXJwcmV0ZXINCisgCQkJCQkJCQkqaW50ZXJw KTsNCisgZXh0ZXJuIHZvaWQgKmdkYl9pbnRlcnByZXRlcl9nZXRfZGF0YSAo c3RydWN0IGdkYl9pbnRlcnByZXRlciAqaW50ZXJwKTsNCisgZXh0ZXJuIGlu dCBpbnRlcnByZXRlcl9kb19vbmVfZXZlbnQgKCk7DQorIA0KKyB2b2lkIGNs ZWFyX2ludGVycHJldGVyX2hvb2tzICgpOw0KKyANCisgLyogd2VsbC1rbm93 biBpbnRlcnByZXRlcnMgKi8NCisgI2RlZmluZSBHREJfSU5URVJQUkVURVJf Q09OU09MRQkJImNvbnNvbGUiDQorICNkZWZpbmUgR0RCX0lOVEVSUFJFVEVS X01JMAkJIm1pMCINCisgI2RlZmluZSBHREJfSU5URVJQUkVURVJfTUkxICAg ICAgICAgICAgICJtaTEiDQorICNkZWZpbmUgR0RCX0lOVEVSUFJFVEVSX01J CQkibWkiDQorICNlbmRpZiAvKiBHREJfSU5URVJQUkVURVJfSCAqLw0KSW5k ZXg6IHRvcC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi90b3AuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9u IDEuNjcNCmRpZmYgLXAgLXIxLjY3IHRvcC5jDQoqKiogdG9wLmMJOSBTZXAg MjAwMiAyMTowMzoyNiAtMDAwMAkxLjY3DQotLS0gdG9wLmMJMjMgU2VwIDIw MDIgMTk6Mzc6MzcgLTAwMDANCioqKioqKioqKioqKioqKg0KKioqIDYzLDY4 ICoqKioNCi0tLSA2Myw2OSAtLS0tDQogICNpbmNsdWRlIDxjdHlwZS5oPg0K ICAjaW5jbHVkZSAidWktb3V0LmgiDQogICNpbmNsdWRlICJjbGktb3V0Lmgi DQorICNpbmNsdWRlICJpbnRlcnBzLmgiDQogIA0KICAvKiBEZWZhdWx0IGNv bW1hbmQgbGluZSBwcm9tcHQuICBUaGlzIGlzIG92ZXJyaWRlbiBpbiBzb21l IGNvbmZpZ3MuICovDQogIA0KKioqKioqKioqKioqKioqIGdkYl9pbml0IChj aGFyICphcmd2MCkNCioqKiAyMTI2LDIxNDIgKioqKg0KICAgICAgaW5pdF91 aV9ob29rIChhcmd2MCk7DQogIA0KICAgIC8qIEluc3RhbGwgdGhlIGRlZmF1 bHQgVUkgKi8NCiEgICBpZiAoIWluaXRfdWlfaG9vaykNCiEgICAgIHsNCiEg ICAgICAgdWlvdXQgPSBjbGlfb3V0X25ldyAoZ2RiX3N0ZG91dCk7DQogIA0K ISAgICAgICAvKiBBbGwgdGhlIGludGVycHJldGVycyBzaG91bGQgaGF2ZSBo YWQgYSBsb29rIGF0IHRoaW5ncyBieSBub3cuDQohIAkgSW5pdGlhbGl6ZSB0 aGUgc2VsZWN0ZWQgaW50ZXJwcmV0ZXIuICovDQohICAgICAgIGlmIChpbnRl cnByZXRlcl9wKQ0KISAJew0KISAJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRlcnIsICJJbnRlcnByZXRlciBgJXMnIHVucmVjb2duaXplZC5cbiIs DQohIAkJCSAgICAgIGludGVycHJldGVyX3ApOw0KISAJICBleGl0ICgxKTsN CiEgCX0NCiEgICAgIH0NCiAgfQ0KLS0tIDIxMjcsMjE1MiAtLS0tDQogICAg ICBpbml0X3VpX2hvb2sgKGFyZ3YwKTsNCiAgDQogICAgLyogSW5zdGFsbCB0 aGUgZGVmYXVsdCBVSSAqLw0KISAgIC8qIEFsbCB0aGUgaW50ZXJwcmV0ZXJz IHNob3VsZCBoYXZlIGhhZCBhIGxvb2sgYXQgdGhpbmdzIGJ5IG5vdy4NCiEg ICAgICBJbml0aWFsaXplIHRoZSBzZWxlY3RlZCBpbnRlcnByZXRlci4gKi8N CiEgICB7DQohICAgICBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICppbnRlcnA7 DQohICAgICBpZiAoaW50ZXJwcmV0ZXJfcCA9PSBOVUxMKQ0KISAgICAgICBp bnRlcnByZXRlcl9wID0geHN0cmR1cCAoR0RCX0lOVEVSUFJFVEVSX0NPTlNP TEUpOw0KICANCiEgICAgIGludGVycCA9IGdkYl9sb29rdXBfaW50ZXJwcmV0 ZXIgKGludGVycHJldGVyX3ApOw0KISANCiEgICAgIGlmIChpbnRlcnAgPT0g TlVMTCkNCiEgICAgICAgew0KISAgICAgICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGVyciwgIkludGVycHJldGVyIGAlcycgdW5yZWNvZ25pemVk LlxuIiwNCiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJl dGVyX3ApOw0KISAgICAgICAgIGV4aXQgKDEpOw0KISAgICAgICB9DQohICAg ICBpZiAoIWdkYl9zZXRfaW50ZXJwcmV0ZXIgKGludGVycCkpDQohICAgICAg IHsNCiEgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIs ICJJbnRlcnByZXRlciBgJXMnIGZhaWxlZCB0byBpbml0aWFsaXplLlxuIiwN CiEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJldGVyX3Ap Ow0KISAgICAgICAgIGV4aXQgKDEpOw0KISAgICAgICB9DQohICAgfQ0KICB9 DQpJbmRleDogd3JhcHBlci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi93cmFwcGVyLmMsdg0KcmV0cmll dmluZyByZXZpc2lvbiAxLjE0DQpkaWZmIC1wIC1yMS4xNCB3cmFwcGVyLmMN CioqKiB3cmFwcGVyLmMJMzEgT2N0IDIwMDEgMDM6MTY6MDQgLTAwMDAJMS4x NA0KLS0tIHdyYXBwZXIuYwkyMyBTZXAgMjAwMiAxOTozNzozOCAtMDAwMA0K KioqKioqKioqKioqKioqDQoqKiogMTksMjQgKioqKg0KLS0tIDE5LDI1IC0t LS0NCiAgI2luY2x1ZGUgImRlZnMuaCINCiAgI2luY2x1ZGUgInZhbHVlLmgi DQogICNpbmNsdWRlICJ3cmFwcGVyLmgiDQorICNpbmNsdWRlICJ0b3AuaCIJ CS8qIGZvciBleGVjdXRlX2NvbW1hbmQgKi8NCiAgDQogIC8qIFVzZSB0aGlz IHN0cnVjdCB0byBwYXNzIGFyZ3VtZW50cyB0byB3cmFwcGVyIHJvdXRpbmVz LiBXZSBhc3N1bWUNCiAgICAgKGFyYml0cmFyaWx5KSB0aGF0IG5vIGdkYiBm dW5jdGlvbiB0YWtlcyBtb3JlIHRoYW4gdGVuIGFyZ3VtZW50cy4gKi8NCioq KioqKioqKioqKioqKiBzdHJ1Y3QgY2FwdHVyZWRfdmFsdWVfc3RydWN0X2Vs dF9hcmdzDQoqKiogNTEsNTYgKioqKg0KLS0tIDUyLDYzIC0tLS0NCiAgICBz dHJ1Y3QgdmFsdWUgKipyZXN1bHRfcHRyOw0KICB9Ow0KICANCisgc3RydWN0 IGNhcHR1cmVkX2V4ZWN1dGVfY29tbWFuZF9hcmdzDQorIHsNCisgICBjaGFy ICpjb21tYW5kOw0KKyAgIGludCBmcm9tX3R0eTsNCisgfTsNCisgDQogIHN0 YXRpYyBpbnQgd3JhcF9wYXJzZV9leHBfMSAoY2hhciAqKTsNCiAgDQogIHN0 YXRpYyBpbnQgd3JhcF9ldmFsdWF0ZV9leHByZXNzaW9uIChjaGFyICopOw0K KioqKioqKioqKioqKioqIGRvX2NhcHR1cmVkX3ZhbHVlX3N0cnVjdF9lbHQg KHN0cnVjdCB1aV8NCioqKiAzMzEsMzMzICoqKioNCi0tLSAzMzgsMzU3IC0t LS0NCiAgICByZXR1cm4gR0RCX1JDX09LOw0KICB9DQogIA0KKyBzdGF0aWMg aW50DQorIGRvX2NhcHR1cmVkX2V4ZWN1dGVfY29tbWFuZCAoc3RydWN0IHVp X291dCAqdWlvdXQsIHZvaWQgKmRhdGEpDQorIHsNCisgICBzdHJ1Y3QgY2Fw dHVyZWRfZXhlY3V0ZV9jb21tYW5kX2FyZ3MgKmFyZ3MgPSBkYXRhOw0KKyAg IGV4ZWN1dGVfY29tbWFuZCAoYXJncy0+Y29tbWFuZCwgYXJncy0+ZnJvbV90 dHkpOw0KKyAgIHJldHVybiBHREJfUkNfT0s7DQorIH0NCisgDQorIGVudW0g Z2RiX3JjDQorIGdkYl9leGVjdXRlX2NvbW1hbmQgKHN0cnVjdCB1aV9vdXQg KnVpb3V0LCBjaGFyICpjb21tYW5kLCBpbnQgZnJvbV90dHkpDQorIHsNCisg ICBzdHJ1Y3QgY2FwdHVyZWRfZXhlY3V0ZV9jb21tYW5kX2FyZ3MgYXJnczsN CisgICBhcmdzLmNvbW1hbmQgPSBjb21tYW5kOw0KKyAgIGFyZ3MuZnJvbV90 dHkgPSBmcm9tX3R0eTsNCisgICByZXR1cm4gY2F0Y2hfZXhjZXB0aW9ucyAo dWlvdXQsIGRvX2NhcHR1cmVkX2V4ZWN1dGVfY29tbWFuZCwgJmFyZ3MsDQor IAkJCSAgIE5VTEwsIFJFVFVSTl9NQVNLX0FMTCk7DQorIH0NCkluZGV4OiB3 cmFwcGVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL3dyYXBwZXIuaCx2DQpyZXRyaWV2aW5nIHJldmlz aW9uIDEuMTINCmRpZmYgLXAgLXIxLjEyIHdyYXBwZXIuaA0KKioqIHdyYXBw ZXIuaAkzMSBPY3QgMjAwMSAwMzoxNjowNCAtMDAwMAkxLjEyDQotLS0gd3Jh cHBlci5oCTIzIFNlcCAyMDAyIDE5OjM3OjM4IC0wMDAwDQoqKioqKioqKioq KioqKioNCioqKiAyMSwyNiAqKioqDQotLS0gMjEsMzAgLS0tLQ0KICAjaW5j bHVkZSAiZ2RiLmgiDQogIA0KICBzdHJ1Y3QgdmFsdWU7DQorIHN0cnVjdCBi bG9jazsNCisgc3RydWN0IGV4cHJlc3Npb247DQorIHN0cnVjdCB1aV9vdXQ7 DQorIHN0cnVjdCB0eXBlOw0KICANCiAgLyogVXNlIHRoaXMgc3RydWN0IHRv IHBhc3MgYXJndW1lbnRzIHRvIHdyYXBwZXIgcm91dGluZXMuICovDQogIHN0 cnVjdCBnZGJfd3JhcHBlcl9hcmd1bWVudHM7DQoqKioqKioqKioqKioqKiog ZXh0ZXJuIGludCBnZGJfdmFsdWVfaW5kIChzdHJ1Y3QgdmFsdWUgKg0KKioq IDQ2LDQ5ICoqKioNCi0tLSA1MCw1NSAtLS0tDQogIA0KICBleHRlcm4gaW50 IGdkYl9wYXJzZV9hbmRfZXZhbF90eXBlIChjaGFyICosIGludCwgc3RydWN0 IHR5cGUgKiopOw0KICANCisgZXh0ZXJuIGVudW0gZ2RiX3JjIGdkYl9leGVj dXRlX2NvbW1hbmQgKHN0cnVjdCB1aV9vdXQgKnVpb3V0LCBjaGFyICpjb21t YW5kLA0KKyAJCQkJCWludCBmcm9tX3R0eSk7DQogICNlbmRpZiAvKiBXUkFQ UEVSX0ggKi8NCkluZGV4OiBjbGkvY2xpLWludGVycC5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpSQ1MgZmlsZTogY2xpL2NsaS1pbnRlcnAuYw0KZGlm ZiAtTiBjbGkvY2xpLWludGVycC5jDQoqKiogY2xpL2NsaS1pbnRlcnAuYwkx IEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQotLS0gY2xpL2NsaS1pbnRlcnAu YwkyMyBTZXAgMjAwMiAxOTozNzozOCAtMDAwMA0KKioqKioqKioqKioqKioq DQoqKiogMCAqKioqDQotLS0gMSwxMjcgLS0tLQ0KKyAvKiBDTEkgRGVmaW5p dGlvbnMgZm9yIEdEQg0KKyAgICBDb3B5cmlnaHQgMjAwMiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4NCisgDQorICAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4NCisgDQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 DQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yDQorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uDQorIA0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz Lg0KKyANCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs YWNlIC0gU3VpdGUgMzMwLA0KKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcs IFVTQS4gICovDQorIA0KKyAjaW5jbHVkZSAiZGVmcy5oIg0KKyAjaW5jbHVk ZSAiaW50ZXJwcy5oIg0KKyAjaW5jbHVkZSAid3JhcHBlci5oIg0KKyAjaW5j bHVkZSAiZXZlbnQtdG9wLmgiDQorICNpbmNsdWRlICJ1aS1vdXQuaCINCisg I2luY2x1ZGUgImNsaS1vdXQuaCINCisgDQorIC8qIFByb3RvdHlwZXMgZm9y IHRoZSBDTEkgSW50ZXJwcmV0ZXIgZnVuY3Rpb25zICovDQorIA0KKyBpbnQg Y2xpX2ludGVycHJldGVyX2luaXQgKHZvaWQgKmRhdGEpOw0KKyBpbnQgY2xp X2ludGVycHJldGVyX3Jlc3VtZSAodm9pZCAqZGF0YSk7DQorIGludCBjbGlf aW50ZXJwcmV0ZXJfZG9fb25lX2V2ZW50ICh2b2lkICpkYXRhKTsNCisgaW50 IGNsaV9pbnRlcnByZXRlcl9zdXNwZW5kICh2b2lkICpkYXRhKTsNCisgaW50 IGNsaV9pbnRlcnByZXRlcl9kZWxldGUgKHZvaWQgKmRhdGEpOw0KKyBpbnQg Y2xpX2ludGVycHJldGVyX2V4ZWMgKHZvaWQgKmRhdGEsIGNoYXIgKmNvbW1h bmRfc3RyKTsNCisgaW50IGNsaV9pbnRlcnByZXRlcl9kaXNwbGF5X3Byb21w dCAodm9pZCAqZGF0YSwgY2hhciAqbmV3X3Byb21wdCk7DQorIA0KKyAvKiBU aGVzZSBhcmUgdGhlIHVpX291dCBhbmQgdGhlIGludGVycHJldGVyIGZvciB0 aGUgY29uc29sZSBpbnRlcnByZXRlci4gKi8NCisgc3RhdGljIHN0cnVjdCB1 aV9vdXQgKmNsaV91aW91dDsNCisgc3RhdGljIHN0cnVjdCBnZGJfaW50ZXJw cmV0ZXIgKmNsaV9pbnRlcnA7DQorIA0KKyAvKiBUaGVzZSBpbXBsZW1lbnQg dGhlIGNsaSBvdXQgaW50ZXJwcmV0ZXI6ICovDQorIA0KKyBpbnQNCisgY2xp X2ludGVycHJldGVyX2luaXQgKHZvaWQgKmRhdGEpDQorIHsNCisgICByZXR1 cm4gMTsNCisgfQ0KKyANCisgaW50DQorIGNsaV9pbnRlcnByZXRlcl9yZXN1 bWUgKHZvaWQgKmRhdGEpDQorIHsNCisgICAvKnN5bmNfZXhlY3V0aW9uID0g MTsqLw0KKyAgIGdkYl9zZXR1cF9yZWFkbGluZSAoKTsNCisgICByZXR1cm4g MTsNCisgfQ0KKyANCisgaW50DQorIGNsaV9pbnRlcnByZXRlcl9kb19vbmVf ZXZlbnQgKHZvaWQgKmRhdGEpDQorIHsNCisgICByZXR1cm4gMTsNCisgfQ0K KyANCisgaW50DQorIGNsaV9pbnRlcnByZXRlcl9zdXNwZW5kICh2b2lkICpk YXRhKQ0KKyB7DQorICAgZ2RiX2Rpc2FibGVfcmVhZGxpbmUgKCk7DQorICAg cmV0dXJuIDE7DQorIH0NCisgDQorIGludA0KKyBjbGlfaW50ZXJwcmV0ZXJf ZGVsZXRlICh2b2lkICpkYXRhKQ0KKyB7DQorICAgcmV0dXJuIDE7DQorIH0N CisgDQorIGludA0KKyBjbGlfaW50ZXJwcmV0ZXJfZGlzcGxheV9wcm9tcHQg KHZvaWQgKmRhdGEsIGNoYXIgKm5ld19wcm9tcHQpDQorIHsNCisgICBpZiAo Z2RiX2ludGVycHJldGVyX2lzX3F1aWV0IChOVUxMKSkNCisgICAgIHsNCisg ICAgICAgcmV0dXJuIDE7DQorICAgICB9DQorICAgZWxzZQ0KKyAgICAgew0K KyAgICAgICByZXR1cm4gMDsNCisgICAgIH0NCisgfQ0KKyANCisgaW50DQor IGNsaV9pbnRlcnByZXRlcl9leGVjICh2b2lkICpkYXRhLCBjaGFyICpjb21t YW5kX3N0cikNCisgew0KKyAgIGludCByZXN1bHQ7DQorICAgc3RydWN0IHVp X2ZpbGUgKm9sZF9zdHJlYW07DQorIA0KKyAgIC8qIGdkYl9zdGRvdXQgY291 bGQgY2hhbmdlIGJldHdlZW4gdGhlIHRpbWUgY2xpX3Vpb3V0IHdhcyBpbml0 aWFsaXplZA0KKyAgICAgIGFuZCBub3cuIFNpbmNlIHdlJ3JlIHByb2JhYmx5 IHVzaW5nIGEgZGlmZmVyZW50IGludGVycHJldGVyIHdoaWNoIGhhcw0KKyAg ICAgIGEgbmV3IHVpX2ZpbGUgZm9yIGdkYl9zdGRvdXQsIHVzZSB0aGF0IG9u ZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0Lg0KKyAgIA0KKyAgICAgIEl0IGlz IGltcG9ydGFudCB0aGF0IGl0IGdldHMgcmVzZXQgZXZlcnl0aW1lLCBzaW5j ZSB0aGUgdXNlciBjb3VsZA0KKyAgICAgIHNldCBnZGIgdG8gdXNlIGEgZGlm ZmVyZW50IGludGVycHJldGVyLiAqLw0KKyAgIG9sZF9zdHJlYW0gPSBjbGlf b3V0X3NldF9zdHJlYW0gKGNsaV91aW91dCwgZ2RiX3N0ZG91dCk7DQorICAg cmVzdWx0ID0gZ2RiX2V4ZWN1dGVfY29tbWFuZCAoY2xpX3Vpb3V0LCBjb21t YW5kX3N0ciwgMSk7DQorICAgY2xpX291dF9zZXRfc3RyZWFtIChjbGlfdWlv dXQsIG9sZF9zdHJlYW0pOw0KKyAgIHJldHVybiByZXN1bHQ7DQorIH0NCisg DQorIC8qIHN0YW5kYXJkIGdkYiBpbml0aWFsaXphdGlvbiBob29rICovDQor IHZvaWQNCisgX2luaXRpYWxpemVfY2xpX2ludGVycCAodm9pZCkNCisgew0K KyAgIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgcHJvY3MgPSB7DQor ICAgICBjbGlfaW50ZXJwcmV0ZXJfaW5pdCwJLyogaW5pdF9wcm9jICovDQor ICAgICBjbGlfaW50ZXJwcmV0ZXJfcmVzdW1lLAkvKiByZXN1bWVfcHJvYyAq Lw0KKyAgICAgY2xpX2ludGVycHJldGVyX2RvX29uZV9ldmVudCwgLyogZG9f b25lX2V2ZW50X3Byb2MgKi8NCisgICAgIGNsaV9pbnRlcnByZXRlcl9zdXNw ZW5kLAkvKiBzdXNwZW5kX3Byb2MgKi8NCisgICAgIGNsaV9pbnRlcnByZXRl cl9kZWxldGUsCS8qIGRlbGV0ZV9wcm9jICovDQorICAgICBjbGlfaW50ZXJw cmV0ZXJfZXhlYywJLyogZXhlY19wcm9jICovDQorICAgICBjbGlfaW50ZXJw cmV0ZXJfZGlzcGxheV9wcm9tcHQgLyogcHJvbXB0X3Byb2MgKi8NCisgICB9 Ow0KKyANCisgICAvKiBDcmVhdGUgYSBkZWZhdWx0IHVpb3V0IGJ1aWxkZXIg Zm9yIHRoZSBDTEkuICovDQorICAgY2xpX3Vpb3V0ID0gY2xpX291dF9uZXcg KGdkYl9zdGRvdXQpOw0KKyAgIGNsaV9pbnRlcnAgPSBnZGJfbmV3X2ludGVy cHJldGVyIChHREJfSU5URVJQUkVURVJfQ09OU09MRSwgTlVMTCwgY2xpX3Vp b3V0LA0KKyAJCQkJICAgICZwcm9jcyk7DQorICAgZ2RiX2FkZF9pbnRlcnBy ZXRlciAoY2xpX2ludGVycCk7DQorIH0NCkluZGV4OiBtaS9taS1jbWRzLmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL21pL21pLWNtZHMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu OA0KZGlmZiAtcCAtcjEuOCBtaS1jbWRzLmMNCioqKiBtaS9taS1jbWRzLmMJ NiBNYXIgMjAwMSAwODoyMTo0NSAtMDAwMAkxLjgNCi0tLSBtaS9taS1jbWRz LmMJMjMgU2VwIDIwMDIgMTk6Mzc6MzggLTAwMDANCioqKioqKioqKioqKioq KiBzdHJ1Y3QgbWlfY21kIG1pX2NtZHNbXSA9DQoqKiogODgsOTMgKioqKg0K LS0tIDg4LDk0IC0tLS0NCiAgICB7ImdkYi1zaG93IiwgInNob3cgJXMiLCAw fSwNCiAgICB7ImdkYi1zb3VyY2UiLCAwLCAwfSwNCiAgICB7ImdkYi12ZXJz aW9uIiwgInNob3cgdmVyc2lvbiIsIDB9LA0KKyAgIHsiaW50ZXJwcmV0ZXIt ZXhlYyIsIDAsIDAsIG1pX2NtZF9pbnRlcnByZXRlcl9leGVjfSwNCiAgICB7 ImtvZC1pbmZvIiwgMCwgMH0sDQogICAgeyJrb2QtbGlzdCIsIDAsIDB9LA0K ICAgIHsia29kLWxpc3Qtb2JqZWN0LXR5cGVzIiwgMCwgMH0sDQpJbmRleDog bWkvbWktY21kcy5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9taS9taS1jbWRzLmgsdg0KcmV0cmlldmlu ZyByZXZpc2lvbiAxLjUNCmRpZmYgLXAgLXIxLjUgbWktY21kcy5oDQoqKiog bWkvbWktY21kcy5oCTYgTWFyIDIwMDEgMDg6MjE6NDUgLTAwMDAJMS41DQot LS0gbWkvbWktY21kcy5oCTIzIFNlcCAyMDAyIDE5OjM3OjM4IC0wMDAwDQoq KioqKioqKioqKioqKiogZXh0ZXJuIG1pX2NtZF9hcmdzX2Z0eXBlIG1pX2Nt ZF9leGVjX3N0ZQ0KKioqIDc1LDgwICoqKioNCi0tLSA3NSw4MSAtLS0tDQog IGV4dGVybiBtaV9jbWRfYXJnc19mdHlwZSBtaV9jbWRfZXhlY191bnRpbDsN CiAgZXh0ZXJuIG1pX2NtZF9hcmdzX2Z0eXBlIG1pX2NtZF9leGVjX2ludGVy cnVwdDsNCiAgZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1pX2NtZF9nZGJf ZXhpdDsNCisgZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1pX2NtZF9pbnRl cnByZXRlcl9leGVjOw0KICBleHRlcm4gbWlfY21kX2FyZ3ZfZnR5cGUgbWlf Y21kX3N0YWNrX2luZm9fZGVwdGg7DQogIGV4dGVybiBtaV9jbWRfYXJndl9m dHlwZSBtaV9jbWRfc3RhY2tfbGlzdF9hcmdzOw0KICBleHRlcm4gbWlfY21k X2FyZ3ZfZnR5cGUgbWlfY21kX3N0YWNrX2xpc3RfZnJhbWVzOw0KKioqKioq KioqKioqKioqIGV4dGVybiBpbnQgbWlfZGVidWdfcDsNCioqKiAxMjIsMTI1 ICoqKioNCi0tLSAxMjMsMTI5IC0tLS0NCiAgLyogUmF3IGNvbnNvbGUgb3V0 cHV0IC0gRklYTUU6IHNob3VsZCB0aGlzIGJlIGEgcGFyYW1ldGVyPyAqLw0K ICBleHRlcm4gc3RydWN0IHVpX2ZpbGUgKnJhd19zdGRvdXQ7DQogIA0KKyBl eHRlcm4gY2hhciAqbWlfZXJyb3JfbWVzc2FnZTsNCisgZXh0ZXJuIHZvaWQg bWlfZXJyb3JfbGFzdF9tZXNzYWdlICh2b2lkKTsNCisgZXh0ZXJuIHZvaWQg bWlfZXhlY3V0ZV9jb21tYW5kIChjaGFyICpjbWQsIGludCBmcm9tX3R0eSk7 DQogICNlbmRpZg0KSW5kZXg6IG1pL21pLWNvbnNvbGUuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvbWkv bWktY29uc29sZS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS44DQpkaWZm IC1wIC1yMS44IG1pLWNvbnNvbGUuYw0KKioqIG1pL21pLWNvbnNvbGUuYwkx OSBNYXIgMjAwMiAwMjo1MTowOCAtMDAwMAkxLjgNCi0tLSBtaS9taS1jb25z b2xlLmMJMjMgU2VwIDIwMDIgMTk6Mzc6MzggLTAwMDANCioqKioqKioqKioq KioqKiBzdHJ1Y3QgbWlfY29uc29sZV9maWxlDQoqKiogMzcsNDkgKioqKg0K ICAgICAgc3RydWN0IHVpX2ZpbGUgKnJhdzsNCiAgICAgIHN0cnVjdCB1aV9m aWxlICpidWZmZXI7DQogICAgICBjb25zdCBjaGFyICpwcmVmaXg7DQogICAg fTsNCiAgDQogIGludCBtaV9jb25zb2xlX2ZpbGVfbWFnaWM7DQogIA0KICBz dHJ1Y3QgdWlfZmlsZSAqDQogIG1pX2NvbnNvbGVfZmlsZV9uZXcgKHN0cnVj dCB1aV9maWxlICpyYXcsDQohIAkJICAgICBjb25zdCBjaGFyICpwcmVmaXgp DQogIHsNCiAgICBzdHJ1Y3QgdWlfZmlsZSAqdWlfZmlsZSA9IHVpX2ZpbGVf bmV3ICgpOw0KICAgIHN0cnVjdCBtaV9jb25zb2xlX2ZpbGUgKm1pX2NvbnNv bGUgPSBYTUFMTE9DIChzdHJ1Y3QgbWlfY29uc29sZV9maWxlKTsNCi0tLSAz Nyw1MCAtLS0tDQogICAgICBzdHJ1Y3QgdWlfZmlsZSAqcmF3Ow0KICAgICAg c3RydWN0IHVpX2ZpbGUgKmJ1ZmZlcjsNCiAgICAgIGNvbnN0IGNoYXIgKnBy ZWZpeDsNCisgICAgIGNoYXIgcXVvdGU7DQogICAgfTsNCiAgDQogIGludCBt aV9jb25zb2xlX2ZpbGVfbWFnaWM7DQogIA0KICBzdHJ1Y3QgdWlfZmlsZSAq DQogIG1pX2NvbnNvbGVfZmlsZV9uZXcgKHN0cnVjdCB1aV9maWxlICpyYXcs DQohIAkJICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgcXVvdGUpDQog IHsNCiAgICBzdHJ1Y3QgdWlfZmlsZSAqdWlfZmlsZSA9IHVpX2ZpbGVfbmV3 ICgpOw0KICAgIHN0cnVjdCBtaV9jb25zb2xlX2ZpbGUgKm1pX2NvbnNvbGUg PSBYTUFMTE9DIChzdHJ1Y3QgbWlfY29uc29sZV9maWxlKTsNCioqKioqKioq KioqKioqKiBtaV9jb25zb2xlX2ZpbGVfbmV3IChzdHJ1Y3QgdWlfZmlsZSAq cmF3DQoqKiogNTEsNTYgKioqKg0KLS0tIDUyLDU4IC0tLS0NCiAgICBtaV9j b25zb2xlLT5yYXcgPSByYXc7DQogICAgbWlfY29uc29sZS0+YnVmZmVyID0g bWVtX2ZpbGVvcGVuICgpOw0KICAgIG1pX2NvbnNvbGUtPnByZWZpeCA9IHBy ZWZpeDsNCisgICBtaV9jb25zb2xlLT5xdW90ZSA9IHF1b3RlOw0KICAgIHNl dF91aV9maWxlX2ZwdXRzICh1aV9maWxlLCBtaV9jb25zb2xlX2ZpbGVfZnB1 dHMpOw0KICAgIHNldF91aV9maWxlX2ZsdXNoICh1aV9maWxlLCBtaV9jb25z b2xlX2ZpbGVfZmx1c2gpOw0KICAgIHNldF91aV9maWxlX2RhdGEgKHVpX2Zp bGUsIG1pX2NvbnNvbGUsIG1pX2NvbnNvbGVfZmlsZV9kZWxldGUpOw0KKioq KioqKioqKioqKioqIG1pX2NvbnNvbGVfcmF3X3BhY2tldCAodm9pZCAqZGF0 YSwNCioqKiA5NiwxMDQgKioqKg0KICAgIGlmIChsZW5ndGhfYnVmID4gMCkN CiAgICAgIHsNCiAgICAgICAgZnB1dHNfdW5maWx0ZXJlZCAobWlfY29uc29s ZS0+cHJlZml4LCBtaV9jb25zb2xlLT5yYXcpOw0KISAgICAgICBmcHV0c191 bmZpbHRlcmVkICgiXCIiLCBtaV9jb25zb2xlLT5yYXcpOw0KISAgICAgICBm cHV0c3Rybl91bmZpbHRlcmVkIChidWYsIGxlbmd0aF9idWYsICciJywgbWlf Y29uc29sZS0+cmF3KTsNCiEgICAgICAgZnB1dHNfdW5maWx0ZXJlZCAoIlwi XG4iLCBtaV9jb25zb2xlLT5yYXcpOw0KICAgICAgICBnZGJfZmx1c2ggKG1p X2NvbnNvbGUtPnJhdyk7DQogICAgICB9DQogIH0NCi0tLSA5OCwxMTQgLS0t LQ0KICAgIGlmIChsZW5ndGhfYnVmID4gMCkNCiAgICAgIHsNCiAgICAgICAg ZnB1dHNfdW5maWx0ZXJlZCAobWlfY29uc29sZS0+cHJlZml4LCBtaV9jb25z b2xlLT5yYXcpOw0KISAgICAgICBpZiAobWlfY29uc29sZS0+cXVvdGUpDQoh IAl7DQohIAkgIGZwdXRzX3VuZmlsdGVyZWQgKCJcIiIsIG1pX2NvbnNvbGUt PnJhdyk7DQohIAkgIGZwdXRzdHJuX3VuZmlsdGVyZWQgKGJ1ZiwgbGVuZ3Ro X2J1ZiwgbWlfY29uc29sZS0+cXVvdGUsIG1pX2NvbnNvbGUtPnJhdyk7DQoh IAkgIGZwdXRzX3VuZmlsdGVyZWQgKCJcIlxuIiwgbWlfY29uc29sZS0+cmF3 KTsNCiEgCX0NCiEgICAgICAgZWxzZQ0KISAJew0KISAJICBmcHV0c3Rybl91 bmZpbHRlcmVkIChidWYsIGxlbmd0aF9idWYsIDAsIG1pX2NvbnNvbGUtPnJh dyk7DQohIAkgIGZwdXRzX3VuZmlsdGVyZWQgKCJcbiIsIG1pX2NvbnNvbGUt PnJhdyk7DQohIAl9DQogICAgICAgIGdkYl9mbHVzaCAobWlfY29uc29sZS0+ cmF3KTsNCiAgICAgIH0NCiAgfQ0KSW5kZXg6IG1pL21pLWNvbnNvbGUuaA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvbWkvbWktY29uc29sZS5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS40DQpkaWZmIC1wIC1yMS40IG1pLWNvbnNvbGUuaA0KKioqIG1pL21pLWNv bnNvbGUuaAk2IE1hciAyMDAxIDA4OjIxOjQ1IC0wMDAwCTEuNA0KLS0tIG1p L21pLWNvbnNvbGUuaAkyMyBTZXAgMjAwMiAxOTozNzozOCAtMDAwMA0KKioq KioqKioqKioqKioqDQoqKiogMjIsMjcgKioqKg0KICAjaWZuZGVmIE1JX0NP TlNPTEVfSA0KICAjZGVmaW5lIE1JX0NPTlNPTEVfSA0KICANCiEgZXh0ZXJu IHN0cnVjdCB1aV9maWxlICptaV9jb25zb2xlX2ZpbGVfbmV3IChzdHJ1Y3Qg dWlfZmlsZSAqcmF3LCBjb25zdCBjaGFyICpwcmVmaXgpOw0KICANCiAgI2Vu ZGlmDQotLS0gMjIsMjggLS0tLQ0KICAjaWZuZGVmIE1JX0NPTlNPTEVfSA0K ICAjZGVmaW5lIE1JX0NPTlNPTEVfSA0KICANCiEgZXh0ZXJuIHN0cnVjdCB1 aV9maWxlICptaV9jb25zb2xlX2ZpbGVfbmV3IChzdHJ1Y3QgdWlfZmlsZSAq cmF3LCBjb25zdCBjaGFyICpwcmVmaXgsDQohIAkJCQkJICAgIGNoYXIgcXVv dGUpOw0KICANCiAgI2VuZGlmDQpJbmRleDogbWkvbWktZXZlbnRzLmMNCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBtaS9taS1ldmVudHMu Yw0KZGlmZiAtTiBtaS9taS1ldmVudHMuYw0KKioqIG1pL21pLWV2ZW50cy5j CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCi0tLSBtaS9taS1ldmVudHMu YwkyMyBTZXAgMjAwMiAxOTozNzozOCAtMDAwMA0KKioqKioqKioqKioqKioq DQoqKiogMCAqKioqDQotLS0gMSwxMjAgLS0tLQ0KKyAvKiBNSSBFdmVudCBI YW5kbGVycw0KKyAgICBDb3B5cmlnaHQgMjAwMiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4NCisgDQorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEdEQi4NCisgDQorICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorICAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UsIG9yDQorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uDQorIA0KKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YNCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAN CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUNCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g U3VpdGUgMzMwLA0KKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4g ICovDQorIA0KKyAjaW5jbHVkZSAiZGVmcy5oIg0KKyAjaW5jbHVkZSAidWkt b3V0LmgiDQorICNpbmNsdWRlICJpbnRlcnBzLmgiDQorICNpbmNsdWRlICJn ZGIuaCINCisgI2luY2x1ZGUgImJyZWFrcG9pbnQuaCINCisgDQorICNpbmNs dWRlICJtaS5oIg0KKyANCisgdm9pZCANCisgbWlfaW50ZXJwX3N0YWNrX2No YW5nZWRfaG9vayAodm9pZCkNCisgew0KKyAgIHN0cnVjdCB1aV9vdXQgKnNh dmVkX3VpX291dCA9IHVpb3V0Ow0KKyAgIHN0cnVjdCBtaV9vdXQgKnRtcF9t aV9vdXQ7DQorIA0KKyAgIGlmIChnZGJfY3VycmVudF9pbnRlcnByZXRlcl9p c19uYW1lZCAoR0RCX0lOVEVSUFJFVEVSX01JMCkpDQorICAgICB1aW91dCA9 IGdkYl9pbnRlcnByZXRlcl91aV9vdXQgKG1pMF9pbnRlcnApOw0KKyAgIGVs c2UNCisgICAgIHVpb3V0ID0gZ2RiX2ludGVycHJldGVyX3VpX291dCAobWlf aW50ZXJwKTsNCisgDQorICAgdWlfb3V0X2xpc3RfYmVnaW4gKHVpb3V0LCAi TUlfSE9PS19SRVNVTFQiKTsNCisgICB1aV9vdXRfZmllbGRfc3RyaW5nICh1 aW91dCwgIkhPT0tfVFlQRSIsICJzdGFja19jaGFuZ2VkIik7DQorICAgdWlf b3V0X2xpc3RfZW5kICh1aW91dCk7DQorICAgdWlvdXQgPSBzYXZlZF91aV9v dXQ7DQorIH0NCisgDQorIHN0YXRpYyB2b2lkDQorIGV2ZW50X25vdGlmeSAo Y29uc3QgY2hhciAqc3RyaW5nLCAuLi4pDQorIHsNCisgICB2YV9saXN0IGFy Z3M7DQorIA0KKyAgIGlmICghZ2RiX2N1cnJlbnRfaW50ZXJwcmV0ZXJfaXNf bmFtZWQgKEdEQl9JTlRFUlBSRVRFUl9NSTApDQorICAgICAgICYmICFnZGJf Y3VycmVudF9pbnRlcnByZXRlcl9pc19uYW1lZCAoR0RCX0lOVEVSUFJFVEVS X01JMSkpDQorICAgICB7DQorICAgICAgIHZhX3N0YXJ0IChhcmdzLCBzdHJp bmcpOw0KKyAgICAgICB2ZnByaW50Zl91bmZpbHRlcmVkIChtaV9ldmVudF9j aGFubmVsLCBzdHJpbmcsIGFyZ3MpOw0KKyAgICAgICB2YV9lbmQgKGFyZ3Mp Ow0KKyAgICAgICBnZGJfZmx1c2ggKG1pX2V2ZW50X2NoYW5uZWwpOw0KKyAg ICAgfQ0KKyB9DQorIA0KKyAvKiBicmVha3BvaW50LWNyZWF0ZSxudW1iZXI9 YnBudW0gKi8NCisgdm9pZA0KKyBtaV9jcmVhdGVfYnJlYWtwb2ludCAoaW50 IGJwbnVtKQ0KKyB7DQorICAgZXZlbnRfbm90aWZ5ICgiYnJlYWtwb2ludC1j cmVhdGUsbnVtYmVyPVwiJWRcIiIsIGJwbnVtKTsNCisgfQ0KKyANCisgdm9p ZA0KKyBtaV9tb2RpZnlfYnJlYWtwb2ludCAoaW50IGJwbnVtKQ0KKyB7DQor ICAgZXZlbnRfbm90aWZ5ICgiYnJlYWtwb2ludC1tb2RpZnksbnVtYmVyPVwi JWRcIiIsIGJwbnVtKTsNCisgfQ0KKyANCisgdm9pZA0KKyBtaV9kZWxldGVf YnJlYWtwb2ludCAoaW50IGJwbnVtKQ0KKyB7DQorICAgZXZlbnRfbm90aWZ5 ICgiYnJlYWtwb2ludC1kZWxldGUsbnVtYmVyPVwiJWRcIiIsIGJwbnVtKTsN CisgfQ0KKyANCisgdm9pZA0KKyBtaV9jcmVhdGVfdHJhY2Vwb2ludCAoaW50 IHRwbnVtKQ0KKyB7DQorICAgZXZlbnRfbm90aWZ5ICgidHJhY2Vwb2ludC1j cmVhdGUsbnVtYmVyPVwiJWRcIiIsIHRwbnVtKTsNCisgfQ0KKyANCisgdm9p ZA0KKyBtaV9tb2RpZnlfdHJhY2Vwb2ludCAoaW50IHRwbnVtKQ0KKyB7DQor ICAgZXZlbnRfbm90aWZ5ICgidHJhY2Vwb2ludC1tb2RpZnksbnVtYmVyPVwi JWRcIiIsIHRwbnVtKTsNCisgfQ0KKyANCisgdm9pZA0KKyBtaV9kZWxldGVf dHJhY2Vwb2ludCAoaW50IHRwbnVtKQ0KKyB7DQorICAgZXZlbnRfbm90aWZ5 ICgidHJhY2Vwb2ludC1kZWxldGUsbnVtYmVyPVwiJWRcIiIsIHRwbnVtKTsN CisgfQ0KKyANCisgdm9pZA0KKyBtaV9hcmNoaXRlY3R1cmVfY2hhbmdlZCAo dm9pZCkNCisgew0KKyAgIGV2ZW50X25vdGlmeSAoImFyY2hpdGVjdHVyZS1j aGFuZ2VkIik7DQorIH0NCisgDQorIHZvaWQNCisgbWlfdGFyZ2V0X2NoYW5n ZWQgKHZvaWQpDQorIHsNCisgICBldmVudF9ub3RpZnkgKCJ0YXJnZXQtY2hh bmdlZCIpOw0KKyB9DQorIA0KKyB2b2lkDQorIG1pX3NlbGVjdGVkX2ZyYW1l X2xldmVsX2NoYW5nZWQgKGludCBsZXZlbCkNCisgew0KKyAgIGV2ZW50X25v dGlmeSAoInNlbGVjdGVkLWZyYW1lLWxldmVsLWNoYW5nZWQsbGV2ZWw9XCIl ZFwiIiwgbGV2ZWwpOw0KKyB9DQorIA0KKyB2b2lkDQorIG1pX2NvbnRleHRf Y2hhbmdlZCAoaW50IHRocmVhZF9pZCkNCisgew0KKyAgIGV2ZW50X25vdGlm eSAoImNvbnRleHQtY2hhbmdlZCx0aHJlYWQ9XCIlZFwiIiwgdGhyZWFkX2lk KTsNCisgfQ0KSW5kZXg6IG1pL21pLWludGVycC5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQpSQ1MgZmlsZTogbWkvbWktaW50ZXJwLmMNCmRpZmYgLU4g bWkvbWktaW50ZXJwLmMNCioqKiBtaS9taS1pbnRlcnAuYwkxIEphbiAxOTcw IDAwOjAwOjAwIC0wMDAwDQotLS0gbWkvbWktaW50ZXJwLmMJMjMgU2VwIDIw MDIgMTk6Mzc6MzggLTAwMDANCioqKioqKioqKioqKioqKg0KKioqIDAgKioq Kg0KLS0tIDEsNDc3IC0tLS0NCisgLyogTUkgSW50ZXJwcmV0ZXIgRGVmaW5p dGlvbnMgYW5kIENvbW1hbmRzDQorICAgIENvcHlyaWdodCAyMDAyIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyANCisgICAgVGhpcyBmaWxl IGlzIHBhcnQgb2YgR0RCLg0KKyANCisgICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkNCisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3INCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgDQorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0K KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl DQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuDQorIA0KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQ0KKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w bGUgUGxhY2UgLSBTdWl0ZSAzMzAsDQorICAgIEJvc3RvbiwgTUEgMDIxMTEt MTMwNywgVVNBLiAgKi8NCisgDQorICNpbmNsdWRlICJkZWZzLmgiDQorICNp bmNsdWRlICJpbnRlcnBzLmgiDQorICNpbmNsdWRlICJldmVudC10b3AuaCIN CisgI2luY2x1ZGUgImV2ZW50LWxvb3AuaCINCisgI2luY2x1ZGUgImluZmVy aW9yLmgiDQorICNpbmNsdWRlICJ1aS1vdXQuaCINCisgI2luY2x1ZGUgInRv cC5oIg0KKyANCisgI2luY2x1ZGUgIm1pLmgiDQorICNpbmNsdWRlICJtaS1j bWRzLmgiDQorICNpbmNsdWRlICJtaS1vdXQuaCINCisgI2luY2x1ZGUgIm1p LWNvbnNvbGUuaCINCisgDQorIC8qIE1JJ3Mgb3V0cHV0IGNoYW5uZWxzICov DQorIHN0cnVjdCB1aV9maWxlICptaV9zdGRvdXQ7DQorIHN0cnVjdCB1aV9m aWxlICptaV9zdGRlcnI7DQorIHN0cnVjdCB1aV9maWxlICptaV9zdGRsb2c7 DQorIHN0cnVjdCB1aV9maWxlICptaV9zdGR0YXJnOw0KKyBzdHJ1Y3QgdWlf ZmlsZSAqbWlfZXZlbnRfY2hhbm5lbDsNCisgDQorIC8qIFRoaXMgaXMgdGhl IGludGVycHJldGVyIGZvciB0aGUgbWkuLi4gKi8NCisgc3RydWN0IGdkYl9p bnRlcnByZXRlciAqbWkwX2ludGVycDsNCisgc3RydWN0IGdkYl9pbnRlcnBy ZXRlciAqbWkxX2ludGVycDsNCisgc3RydWN0IGdkYl9pbnRlcnByZXRlciAq bWlfaW50ZXJwOw0KKyANCisgLyogVGhlc2UgYXJlIHRoZSBpbnRlcnByZXRl ciBzZXR1cCwgZXRjLiBmdW5jdGlvbnMgZm9yIHRoZSBNSSBpbnRlcnByZXRl ciAqLw0KKyBzdGF0aWMgaW50IG1pX2ludGVycHJldGVyX2luaXQgKHZvaWQg KmRhdGEpOw0KKyBzdGF0aWMgaW50IG1pX2ludGVycHJldGVyX3Jlc3VtZSAo dm9pZCAqZGF0YSk7DQorIHN0YXRpYyBpbnQgbWlfaW50ZXJwcmV0ZXJfZG9f b25lX2V2ZW50ICh2b2lkICpkYXRhKTsNCisgc3RhdGljIGludCBtaV9pbnRl cnByZXRlcl9zdXNwZW5kICh2b2lkICpkYXRhKTsNCisgc3RhdGljIGludCBt aV9pbnRlcnByZXRlcl9kZWxldGUgKHZvaWQgKmRhdGEpOw0KKyBzdGF0aWMg aW50IG1pX2ludGVycHJldGVyX2V4ZWMgKHZvaWQgKmRhdGEsIGNoYXIgKmNv bW1hbmQpOw0KKyBzdGF0aWMgaW50IG1pX2ludGVycHJldGVyX3Byb21wdCAo dm9pZCAqZGF0YSwgY2hhciAqbmV3X3Byb21wdCk7DQorIA0KKyBzdGF0aWMg dm9pZCBtaV9leGVjdXRlX2NvbW1hbmRfd3JhcHBlciAoY2hhciAqY21kKTsN Cisgc3RhdGljIHZvaWQgbWlfY29tbWFuZF9sb29wIChpbnQgbWlfdmVyc2lv bik7DQorIHN0YXRpYyBjaGFyICptaV9pbnB1dCAoY2hhciAqKTsNCisgDQor IC8qIFRoZXNlIGFyZSBob29rcyB0aGF0IHdlIHB1dCBpbiBwbGFjZSB3aGls ZSBkb2luZyBpbnRlcnByZXRlcl9leGVjDQorICAgIHNvIHdlIGNhbiByZXBv cnQgaW50ZXJlc3RpbmcgdGhpbmdzIHRoYXQgaGFwcGVuZWQgImJlaGluZCB0 aGUgbWkncw0KKyAgICBiYWNrIiBpbiB0aGlzIGNvbW1hbmQgKi8NCisgc3Rh dGljIGludCBtaV9pbnRlcnBfcXVlcnlfaG9vayAoY29uc3QgY2hhciAqY3Rs c3RyLCB2YV9saXN0IGFwKTsNCisgc3RhdGljIGNoYXIgKm1pX2ludGVycF9y ZWFkX29uZV9saW5lX2hvb2sgKGNoYXIgKnByb21wdCwgaW50IHJlcGVhdCwN CisgCQkJCQkgICBjaGFyICphbm5vKTsNCisgDQorIHN0YXRpYyB2b2lkIG1p MF9jb21tYW5kX2xvb3AgKHZvaWQpOw0KKyBzdGF0aWMgdm9pZCBtaTFfY29t bWFuZF9sb29wICh2b2lkKTsNCisgDQorIHN0YXRpYyB2b2lkIG1pX2luc2Vy dF9ub3RpZnlfaG9va3MgKHZvaWQpOw0KKyBzdGF0aWMgdm9pZCBtaV9yZW1v dmVfbm90aWZ5X2hvb2tzICh2b2lkKTsNCisgDQorIHN0YXRpYyBzdHJ1Y3Qg Z2RiX2V2ZW50cyBtaV9ldmVudF9oYW5kbGVycyA9DQorICAgew0KKyAgICAg bWlfY3JlYXRlX2JyZWFrcG9pbnQsDQorICAgICBtaV9kZWxldGVfYnJlYWtw b2ludCwNCisgICAgIG1pX21vZGlmeV9icmVha3BvaW50LA0KKyAgICAgbWlf Y3JlYXRlX3RyYWNlcG9pbnQsDQorICAgICBtaV9kZWxldGVfdHJhY2Vwb2lu dCwNCisgICAgIG1pX21vZGlmeV90cmFjZXBvaW50LA0KKyAgICAgbWlfYXJj aGl0ZWN0dXJlX2NoYW5nZWQsDQorICAgICBtaV90YXJnZXRfY2hhbmdlZCwN CisgICAgIG1pX3NlbGVjdGVkX2ZyYW1lX2xldmVsX2NoYW5nZWQNCisgICB9 Ow0KKyANCisgc3RhdGljIGludA0KKyBtaV9pbnRlcnByZXRlcl9pbml0ICh2 b2lkICpkYXRhKQ0KKyB7DQorICAgc3RhdGljIHN0cnVjdCBnZGJfZXZlbnRz IGhhbmRsZXJzOw0KKyANCisgICAvKiBXaHkgaXMgdGhpcyBhIHBhcnQgb2Yg dGhlIG1pIGFyY2hpdGVjdHVyZT8gKi8NCisgDQorICAgbWlfc2V0dXBfYXJj aGl0ZWN0dXJlX2RhdGEgKCk7DQorIA0KKyAgIC8qIEhBQ0s6IFdlIG5lZWQg dG8gZm9yY2Ugc3Rkb3V0L3N0ZGVyciB0byBwb2ludCBhdCB0aGUgY29uc29s ZS4gIFRoaXMgYXZvaWRzDQorICAgICAgYW55IHBvdGVudGlhbCBzaWRlIGVm ZmVjdHMgY2F1c2VkIGJ5IGxlZ2FjeSBjb2RlIHRoYXQgaXMgc3RpbGwNCisg ICAgICB1c2luZyB0aGUgVFVJIC8gZnB1dHNfdW5maWx0ZXJlZF9ob29rLiAg U28gd2Ugc2V0IHVwIG91dHB1dCBjaGFubmVscyBmb3INCisgICAgICB0aGlz IG5vdywgYW5kIHN3YXAgdGhlbSBpbiB3aGVuIHdlIGFyZSBydW4uICovDQor IA0KKyAgIHJhd19zdGRvdXQgPSBzdGRpb19maWxlb3BlbiAoc3Rkb3V0KTsN CisgDQorICAgLyogQ3JlYXRlIE1JIGNoYW5uZWxzICovDQorICAgbWlfc3Rk b3V0ID0gbWlfY29uc29sZV9maWxlX25ldyAocmF3X3N0ZG91dCwgIn4iLCAn IicpOw0KKyAgIG1pX3N0ZGVyciA9IG1pX2NvbnNvbGVfZmlsZV9uZXcgKHJh d19zdGRvdXQsICImIiwgJyInKTsNCisgICBtaV9zdGRsb2cgPSBtaV9zdGRl cnI7DQorICAgbWlfc3RkdGFyZyA9IG1pX2NvbnNvbGVfZmlsZV9uZXcgKHJh d19zdGRvdXQsICJAIiwgJyInKTsNCisgICBtaV9ldmVudF9jaGFubmVsID0g bWlfY29uc29sZV9maWxlX25ldyAocmF3X3N0ZG91dCwgIj0iLCAwKTsNCisg DQorICAgcmV0dXJuIDE7DQorIH0NCisgDQorIHN0YXRpYyBpbnQNCisgbWlf aW50ZXJwcmV0ZXJfcmVzdW1lICh2b2lkICpkYXRhKQ0KKyB7DQorICAgLyog QXMgcGVyIGhhY2sgbm90ZSBpbiBtaV9pbnRlcnByZXRlcl9pbml0LCBzd2Fw IGluIHRoZSBvdXRwdXQgY2hhbm5lbHMuLi4gKi8NCisgDQorICAgZ2RiX3Nl dHVwX3JlYWRsaW5lICgpOw0KKyAgIG1pX3JlZ2lzdGVyX2dkYmFyY2hfc3dh cCAoKTsNCisgDQorICAgaWYgKGV2ZW50X2xvb3BfcCkNCisgICAgIHsNCisg ICAgICAgLyogVGhlc2Ugb3ZlcndyaXRlIHNvbWUgb2YgdGhlIGluaXRpYWxp emF0aW9uIGRvbmUgaW4NCisgICAgICAgICAgX2ludGlhbGl6ZV9ldmVudF9s b29wLiAqLw0KKyAgICAgICBjYWxsX3JlYWRsaW5lID0gZ2RiX3JlYWRsaW5l MjsNCisgICAgICAgaW5wdXRfaGFuZGxlciA9IG1pX2V4ZWN1dGVfY29tbWFu ZF93cmFwcGVyOw0KKyAgICAgICBhZGRfZmlsZV9oYW5kbGVyIChpbnB1dF9m ZCwgc3RkaW5fZXZlbnRfaGFuZGxlciwgMCk7DQorICAgICAgIGFzeW5jX2Nv bW1hbmRfZWRpdGluZ19wID0gMDsNCisgICAgICAgLyogRklYTUU6IFRoaXMg aXMgYSB0b3RhbCBoYWNrIGZvciBub3cuICBQQidzIHVzZSBvZiB0aGUgTUkg aW1wbGljaXRseQ0KKyAgICAgICAgICByZWxpZXMgb24gYSBidWcgaW4gdGhl IGFzeW5jIHN1cHBvcnQgd2hpY2ggYWxsb3dzIGFzeW5jaHJvbm91cw0KKyAg ICAgICAgICBjb21tYW5kcyB0byBsZWFrIHRocm91Z2ggdGhlIGNvbW1tYW5k IGxvb3AuICBUaGUgYnVnIGludm9sdmVzDQorICAgICAgICAgIChidXQgaXMg bm90IGxpbWl0ZWQgdG8pIHRoZSBmYWN0IHRoYXQgc3luY19leGVjdXRpb24g d2FzDQorICAgICAgICAgIGVycm9uZW91c2x5IGluaXRpYWxpemVkIHRvIDAu ICBEdXBsaWNhdGUgYnkgaW5pdGlhbGl6aW5nIGl0DQorICAgICAgICAgIHRo dXMgaGVyZS4uLiAqLw0KKyAgICAgICBzeW5jX2V4ZWN1dGlvbiA9IDA7DQor ICAgICB9DQorIA0KKyAgIGdkYl9zdGRvdXQgPSBtaV9zdGRvdXQ7DQorICAg LyogUm91dGUgZXJyb3IgYW5kIGxvZyBvdXRwdXQgdGhyb3VnaCB0aGUgTUkg Ki8NCisgICBnZGJfc3RkZXJyID0gbWlfc3RkZXJyOw0KKyAgIGdkYl9zdGRs b2cgPSBtaV9zdGRsb2c7DQorICAgLyogUm91dGUgdGFyZ2V0IG91dHB1dCB0 aHJvdWdoIHRoZSBNSS4gKi8NCisgICBnZGJfc3RkdGFyZyA9IG1pX3N0ZHRh cmc7DQorIA0KKyAgIC8qIFJlcGxhY2UgYWxsIHRoZSBob29rcyB0aGF0IHdl IGtub3cgYWJvdXQuICBUaGVyZSByZWFsbHkgbmVlZHMgdG8gYmUgYSBiZXR0 ZXIgd2F5DQorICAgICAgb2YgZG9pbmcgdGhpcy4uLiAqLw0KKyAgIGNsZWFy X2ludGVycHJldGVyX2hvb2tzICgpOw0KKyAgIHNldF9nZGJfZXZlbnRfaG9v a3MgKCZtaV9ldmVudF9oYW5kbGVycyk7DQorIA0KKyAgIHNob3dfbG9hZF9w cm9ncmVzcyA9IG1pX2xvYWRfcHJvZ3Jlc3M7DQorIA0KKyAgIC8qIElmIHdl J3JlIF90aGVfIGludGVycHJldGVyLCB0YWtlIGNvbnRyb2wuICovDQorICAg aWYgKGdkYl9jdXJyZW50X2ludGVycHJldGVyX2lzX25hbWVkIChHREJfSU5U RVJQUkVURVJfTUkwKSkNCisgICAgIGNvbW1hbmRfbG9vcF9ob29rID0gbWkw X2NvbW1hbmRfbG9vcDsNCisgICBlbHNlIGlmIChnZGJfY3VycmVudF9pbnRl cnByZXRlcl9pc19uYW1lZCAoR0RCX0lOVEVSUFJFVEVSX01JMSkpDQorICAg ICBjb21tYW5kX2xvb3BfaG9vayA9IG1pMV9jb21tYW5kX2xvb3A7DQorICAg ZWxzZSBpZiAoZ2RiX2N1cnJlbnRfaW50ZXJwcmV0ZXJfaXNfbmFtZWQgKEdE Ql9JTlRFUlBSRVRFUl9NSSkpDQorICAgICBjb21tYW5kX2xvb3BfaG9vayA9 IG1pMV9jb21tYW5kX2xvb3A7DQorICAgZWxzZQ0KKyAgICAgcmV0dXJuIDA7 DQorIA0KKyAgIHJldHVybiAxOw0KKyB9DQorIA0KKyBzdGF0aWMgaW50DQor IG1pX2ludGVycHJldGVyX3N1c3BlbmQgKHZvaWQgKmRhdGEpDQorIHsNCisg ICBnZGJfZGlzYWJsZV9yZWFkbGluZSAoKTsNCisgICByZXR1cm4gMTsNCisg fQ0KKyANCisgc3RhdGljIGludA0KKyBtaV9pbnRlcnByZXRlcl9kZWxldGUg KHZvaWQgKmRhdGEpDQorIHsNCisgICByZXR1cm4gMTsNCisgfQ0KKyANCisg c3RhdGljIGludA0KKyBtaV9pbnRlcnByZXRlcl9leGVjICh2b2lkICpkYXRh LCBjaGFyICpjb21tYW5kKQ0KKyB7DQorICAgbWlfZXhlY3V0ZV9jb21tYW5k X3dyYXBwZXIgKGNvbW1hbmQpOw0KKyAgIHJldHVybiAxOw0KKyB9DQorIA0K KyBzdGF0aWMgaW50DQorIG1pX2ludGVycHJldGVyX3Byb21wdCAodm9pZCAq ZGF0YSwgY2hhciAqbmV3X3Byb21wdCkNCisgew0KKyAgIHJldHVybiAxOw0K KyB9DQorIA0KKyBzdGF0aWMgaW50DQorIG1pX2RvX29uZV9ldmVudCAodm9p ZCAqZGF0YSkNCisgew0KKyAgIHJldHVybiAxOw0KKyB9DQorIA0KKyBzdGF0 aWMgdm9pZA0KKyBtaV9pbnRlcnByZXRlcl9leGVjX2NvbnRpbnVhdGlvbiAo c3RydWN0IGNvbnRpbnVhdGlvbl9hcmcgKmFyZykNCisgew0KKyAgIGJwc3Rh dF9kb19hY3Rpb25zICgmc3RvcF9icHN0YXQpOw0KKyAgIGlmICghdGFyZ2V0 X2V4ZWN1dGluZykNCisgICAgIHsNCisgICAgICAgZnB1dHNfdW5maWx0ZXJl ZCAoIipzdG9wcGVkIiwgcmF3X3N0ZG91dCk7DQorICAgICAgIG1pX291dF9w dXQgKHVpb3V0LCByYXdfc3Rkb3V0KTsNCisgICAgICAgZnB1dHNfdW5maWx0 ZXJlZCAoIlxuIiwgcmF3X3N0ZG91dCk7DQorICAgICAgIGZwdXRzX3VuZmls dGVyZWQgKCIoZ2RiKSBcbiIsIHJhd19zdGRvdXQpOw0KKyAgICAgICBnZGJf Zmx1c2ggKHJhd19zdGRvdXQpOw0KKyAgICAgICBkb19leGVjX2NsZWFudXBz IChBTExfQ0xFQU5VUFMpOw0KKyAgICAgfQ0KKyAgIGVsc2UgaWYgKHRhcmdl dF9jYW5fYXN5bmNfcCAoKSkNCisgICAgIHsNCisgICAgICAgYWRkX2NvbnRp bnVhdGlvbiAobWlfaW50ZXJwcmV0ZXJfZXhlY19jb250aW51YXRpb24sIE5V TEwpOw0KKyAgICAgfQ0KKyB9DQorIA0KKyBlbnVtIG1pX2NtZF9yZXN1bHQN CisgbWlfY21kX2ludGVycHJldGVyX2V4ZWMgKGNoYXIgKmNvbW1hbmQsIGNo YXIgKiphcmd2LCBpbnQgYXJnYykNCisgew0KKyAgIHN0cnVjdCBnZGJfaW50 ZXJwcmV0ZXIgKmludGVycF90b191c2U7DQorICAgZW51bSBtaV9jbWRfcmVz dWx0IHJlc3VsdCA9IE1JX0NNRF9ET05FOw0KKyAgIGludCBpOw0KKyAgIHN0 cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgKnByb2NzOw0KKyANCisgICBp ZiAoYXJnYyA8IDIpDQorICAgICB7DQorICAgICAgIHhhc3ByaW50ZiAoJm1p X2Vycm9yX21lc3NhZ2UsDQorIAkJICJtaV9jbWRfaW50ZXJwcmV0ZXJfZXhl YzogVXNhZ2U6IC1pbnRlcnByZXRlci1leGVjIGludGVycCBjb21tYW5kIik7 DQorICAgICAgIHJldHVybiBNSV9DTURfRVJST1I7DQorICAgICB9DQorIA0K KyAgIGludGVycF90b191c2UgPSBnZGJfbG9va3VwX2ludGVycHJldGVyIChh cmd2WzBdKTsNCisgICBpZiAoaW50ZXJwX3RvX3VzZSA9PSBOVUxMKQ0KKyAg ICAgew0KKyAgICAgICB4YXNwcmludGYgKCZtaV9lcnJvcl9tZXNzYWdlLA0K KyAJCSAibWlfY21kX2ludGVycHJldGVyX2V4ZWM6IGNvdWxkIG5vdCBmaW5k IGludGVycHJldGVyIFwiJXNcIiIsDQorIAkJIGFyZ3ZbMF0pOw0KKyAgICAg ICByZXR1cm4gTUlfQ01EX0VSUk9SOw0KKyAgICAgfQ0KKyANCisgICBwcm9j cyA9IGdkYl9pbnRlcnByZXRlcl9nZXRfcHJvY3MgKGludGVycF90b191c2Up Ow0KKyAgIGlmICghcHJvY3MtPmV4ZWNfcHJvYykNCisgICAgIHsNCisgICAg ICAgeGFzcHJpbnRmICgmbWlfZXJyb3JfbWVzc2FnZSwNCisgCQkgIm1pX2Nt ZF9pbnRlcnByZXRlcl9leGVjOiBpbnRlcnByZXRlciBcIiVzXCIgZG9lcyBu b3Qgc3VwcG9ydCBjb21tYW5kIGV4ZWN1dGlvbiIsDQorIAkJIGFyZ3ZbMF0p Ow0KKyAgICAgICByZXR1cm4gTUlfQ01EX0VSUk9SOw0KKyAgICAgfQ0KKyAN CisgICAvKiBJbnNlcnQgdGhlIE1JIG91dCBob29rcywgbWFraW5nIHN1cmUg dG8gYWxzbyBjYWxsIHRoZSBpbnRlcnByZXRlcidzIGhvb2tzDQorICAgICAg aWYgaXQgaGFzIGFueS4gKi8NCisgICAvKiBLUlM6IFdlIHNob3VsZG4ndCBu ZWVkIHRoaXMuLi4gRXZlbnRzIHNob3VsZCBiZSBpbnN0YWxsZWQgYW5kIHRo ZXkgc2hvdWxkDQorICAgICAganVzdCBBTFdBWVMgZmlyZSBzb21ldGhpbmcg b3V0IGRvd24gdGhlIE1JIGNoYW5uZWwuLi4gKi8NCisgICBtaV9pbnNlcnRf bm90aWZ5X2hvb2tzICgpOw0KKyANCisgICAvKiBOb3cgcnVuIHRoZSBjb2Rl Li4uICovDQorIA0KKyAgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspDQor ICAgICB7DQorICAgICAgIGNoYXIgKmJ1ZmYgPSBOVUxMOw0KKyAgICAgICAv KiBEbyB0aGlzIGluIGEgY2xlYW5lciB3YXkuLi4gIFdlIHdhbnQgdG8gZm9y Y2UgZXhlY3V0aW9uIHRvIGJlDQorICAgICAgICAgIGFzeW5jaHJvbm91cyBm b3IgY29tbWFuZHMgdGhhdCBydW4gdGhlIHRhcmdldC4gICovDQorICAgICAg IGlmICh0YXJnZXRfY2FuX2FzeW5jX3AgKCkgJiYgKHN0cmNtcCAoYXJndlsw XSwgImNvbnNvbGUiKSA9PSAwKSkNCisgCXsNCisgCSAgaW50IGxlbiA9IHN0 cmxlbiAoYXJndltpXSk7DQorIAkgIGJ1ZmYgPSB4bWFsbG9jIChsZW4gKyAy KTsNCisgCSAgbWVtY3B5IChidWZmLCBhcmd2W2ldLCBsZW4pOw0KKyAJICBi dWZmW2xlbl0gPSAnJic7DQorIAkgIGJ1ZmZbbGVuICsgMV0gPSAnXDAnOw0K KyAJfQ0KKyANCisgICAgICAgLyogV2UgaGFkIHRvIHNldCBzeW5jX2V4ZWN1 dGlvbiA9IDAgZm9yIHRoZSBtaSAod2VsbCByZWFsbHkgZm9yIFByb2plY3QN CisgICAgICAgICAgQnVpbGRlcidzIHVzZSBvZiB0aGUgbWkgLSBwYXJ0aWN1 bGFybHkgc28gaW50ZXJydXB0aW5nIHdvdWxkIHdvcmsuDQorICAgICAgICAg IEJ1dCBmb3IgY29uc29sZSBjb21tYW5kcyB0byB3b3JrLCB3ZSBuZWVkIHRv IGluaXRpYWxpemUgaXQgdG8gMSAtDQorICAgICAgICAgIHNpbmNlIHRoYXQg aXMgd2hhdCB0aGUgY2xpIGV4cGVjdHMgLSBiZWZvcmUgcnVubmluZyB0aGUg Y29tbWFuZCwNCisgICAgICAgICAgYW5kIHRoZW4gc2V0IGl0IGJhY2sgdG8g MCB3aGVuIHdlIGFyZSBkb25lLiAqLw0KKyAgICAgICBzeW5jX2V4ZWN1dGlv biA9IDE7DQorICAgICAgIGlmIChwcm9jcy0+ZXhlY19wcm9jIChnZGJfaW50 ZXJwcmV0ZXJfZ2V0X2RhdGEgKGludGVycF90b191c2UpLCBhcmd2W2ldKSA8 IDApDQorIAl7DQorIAkgIG1pX2Vycm9yX2xhc3RfbWVzc2FnZSAoKTsNCisg CSAgcmVzdWx0ID0gTUlfQ01EX0VSUk9SOw0KKyAJICBicmVhazsNCisgCX0N CisgICAgICAgeGZyZWUgKGJ1ZmYpOw0KKyAgICAgICBkb19leGVjX2Vycm9y X2NsZWFudXBzIChBTExfQ0xFQU5VUFMpOw0KKyAgICAgICBzeW5jX2V4ZWN1 dGlvbiA9IDA7DQorICAgICB9DQorIA0KKyAgIG1pX3JlbW92ZV9ub3RpZnlf aG9va3MgKCk7DQorIA0KKyAgIC8qIE9rYXksIG5vdyBsZXQncyBzZWUgaWYg dGhlIGNvbW1hbmQgc2V0IHRoZSBpbmZlcmlvciBnb2luZy4uLg0KKyAgICAg IFRyaWNreSBwb2ludCAtIGhhdmUgdG8gZG8gdGhpcyBBRlRFUiByZXNldHRp bmcgdGhlIGludGVycHJldGVyLCBzaW5jZQ0KKyAgICAgIGNoYW5naW5nIHRo ZSBpbnRlcnByZXRlciB3aWxsIGNsZWFyIG91dCBhbGwgdGhlIGNvbnRpbnVh dGlvbnMgZm9yDQorICAgICAgdGhhdCBpbnRlcnByZXRlci4uLiAqLw0KKyAN CisgICBpZiAodGFyZ2V0X2Nhbl9hc3luY19wICgpICYmIHRhcmdldF9leGVj dXRpbmcpDQorICAgICB7DQorICAgICAgIGZwdXRzX3VuZmlsdGVyZWQgKCJe cnVubmluZ1xuIiwgcmF3X3N0ZG91dCk7DQorICAgICAgIGFkZF9jb250aW51 YXRpb24gKG1pX2ludGVycHJldGVyX2V4ZWNfY29udGludWF0aW9uLCBOVUxM KTsNCisgICAgIH0NCisgDQorICAgcmV0dXJuIHJlc3VsdDsNCisgfQ0KKyAN CisgLyoNCisgICogbWlfaW5zZXJ0X25vdGlmeV9ob29rcyAtIFRoaXMgaW5z ZXJ0cyBhIG51bWJlciBvZiBob29rcyB0aGF0IGFyZSBtZWFudCB0byBwcm9k dWNlDQorICAqIGFzeW5jLW5vdGlmeSAoIj0iKSBNSSBtZXNzYWdlcyB3aGls ZSBydW5uaW5nIGNvbW1hbmRzIGluIGFub3RoZXIgaW50ZXJwcmV0ZXINCisg ICogdXNpbmcgbWlfaW50ZXJwcmV0ZXJfZXhlYy4gIFRoZSBjYW5vbmljYWwg dXNlIGZvciB0aGlzIGlzIHRvIGFsbG93IGFjY2VzcyB0bw0KKyAgKiB0aGUg Z2RiIENMSSBpbnRlcnByZXRlciBmcm9tIHdpdGhpbiB0aGUgTUksIHdoaWxl IHN0aWxsIHByb2R1Y2luZyBNSSBzdHlsZSBvdXRwdXQNCisgICogd2hlbiBh Y3Rpb25zIGluIHRoZSBDTEkgY29tbWFuZCBjaGFuZ2UgZ2RiJ3Mgc3RhdGUu DQorICovDQorIA0KKyBzdGF0aWMgdm9pZA0KKyBtaV9pbnNlcnRfbm90aWZ5 X2hvb2tzICh2b2lkKQ0KKyB7DQorICAgcXVlcnlfaG9vayA9IG1pX2ludGVy cF9xdWVyeV9ob29rOw0KKyB9DQorIA0KKyBzdGF0aWMgdm9pZA0KKyBtaV9y ZW1vdmVfbm90aWZ5X2hvb2tzICgpDQorIHsNCisgICBxdWVyeV9ob29rID0g TlVMTDsNCisgfQ0KKyANCisgc3RhdGljIGludA0KKyBtaV9pbnRlcnBfcXVl cnlfaG9vayAoY29uc3QgY2hhciAqY3Rsc3RyLCB2YV9saXN0IGFwKQ0KKyB7 DQorICAgcmV0dXJuIDE7DQorIH0NCisgDQorIHN0YXRpYyBjaGFyICoNCisg bWlfaW50ZXJwX3JlYWRfb25lX2xpbmVfaG9vayAoY2hhciAqcHJvbXB0LCBp bnQgcmVwZWF0LCBjaGFyICphbm5vKQ0KKyB7DQorICAgc3RhdGljIGNoYXIg YnVmZlsyNTZdOw0KKyAgIHByaW50Zl91bmZpbHRlcmVkICgiPXJlYWQtb25l LWxpbmUscHJvbXB0PVwiJXNcIlxuIiwgcHJvbXB0KTsNCisgICBnZGJfZmx1 c2ggKGdkYl9zdGRvdXQpOw0KKyAgICh2b2lkKSBmZ2V0cyAoYnVmZiwgc2l6 ZW9mIChidWZmKSwgc3RkaW4pOw0KKyAgIGJ1ZmZbKHN0cmxlbiAoYnVmZikg LSAxKV0gPSAwOw0KKyAgIHJldHVybiBidWZmOw0KKyB9DQorIA0KKyBzdGF0 aWMgdm9pZA0KKyBvdXRwdXRfY29udHJvbF9jaGFuZ2Vfbm90aWZpY2F0aW9u IChjaGFyICpub3RpZmljYXRpb24pDQorIHsNCisgICBwcmludGZfdW5maWx0 ZXJlZCAoIl4iKTsNCisgICBwcmludGZfdW5maWx0ZXJlZCAoIiVzXG4iLCBu b3RpZmljYXRpb24pOw0KKyAgIGdkYl9mbHVzaCAoZ2RiX3N0ZG91dCk7DQor IH0NCisgDQorIHN0YXRpYyB2b2lkDQorIG1pX2V4ZWN1dGVfY29tbWFuZF93 cmFwcGVyIChjaGFyICpjbWQpDQorIHsNCisgICBtaV9leGVjdXRlX2NvbW1h bmQgKGNtZCwgc3RkaW4gPT0gaW5zdHJlYW0pOw0KKyB9DQorIA0KKyBzdGF0 aWMgdm9pZA0KKyBtaTBfY29tbWFuZF9sb29wICh2b2lkKQ0KKyB7DQorICAg bWlfY29tbWFuZF9sb29wICgwKTsNCisgfQ0KKyANCisgc3RhdGljIHZvaWQN CisgbWkxX2NvbW1hbmRfbG9vcCAodm9pZCkNCisgew0KKyAgIG1pX2NvbW1h bmRfbG9vcCAoMSk7DQorIH0NCisgDQorIHN0YXRpYyB2b2lkDQorIG1pX2Nv bW1hbmRfbG9vcCAoaW50IG1pX3ZlcnNpb24pDQorIHsNCisgI2lmIDANCisg ICAvKiBIQUNLOiBGb3JjZSBzdGRvdXQvc3RkZXJyIHRvIHBvaW50IGF0IHRo ZSBjb25zb2xlLiAgVGhpcyBhdm9pZHMNCisgICAgICBhbnkgcG90ZW50aWFs IHNpZGUgZWZmZWN0cyBjYXVzZWQgYnkgbGVnYWN5IGNvZGUgdGhhdCBpcyBz dGlsbA0KKyAgICAgIHVzaW5nIHRoZSBUVUkgLyBmcHV0c191bmZpbHRlcmVk X2hvb2sgKi8NCisgICByYXdfc3Rkb3V0ID0gc3RkaW9fZmlsZW9wZW4gKHN0 ZG91dCk7DQorICAgLyogUm91dGUgbm9ybWFsIG91dHB1dCB0aHJvdWdoIHRo ZSBNSXggKi8NCisgICBnZGJfc3Rkb3V0ID0gbWlfY29uc29sZV9maWxlX25l dyAocmF3X3N0ZG91dCwgIn4iLCAnIicpOw0KKyAgIC8qIFJvdXRlIGVycm9y IGFuZCBsb2cgb3V0cHV0IHRocm91Z2ggdGhlIE1JICovDQorICAgZ2RiX3N0 ZGVyciA9IG1pX2NvbnNvbGVfZmlsZV9uZXcgKHJhd19zdGRvdXQsICImIiwg JyInKTsNCisgICBnZGJfc3RkbG9nID0gZ2RiX3N0ZGVycjsNCisgICAvKiBS b3V0ZSB0YXJnZXQgb3V0cHV0IHRocm91Z2ggdGhlIE1JLiAqLw0KKyAgIGdk Yl9zdGR0YXJnID0gbWlfY29uc29sZV9maWxlX25ldyAocmF3X3N0ZG91dCwg IkAiLCAnIicpOw0KKyAgIC8qIEhBQ0s6IFBva2UgdGhlIHVpX291dCB0YWJs ZSBkaXJlY3RseS4gIFNob3VsZCB3ZSBiZSBjcmVhdGluZyBhDQorICAgICAg bWlfb3V0IG9iamVjdCB3aXJlZCB1cCB0byB0aGUgYWJvdmUgZ2RiX3N0ZG91 dCAvIGdkYl9zdGRlcnI/ICovDQorICAgdWlvdXQgPSBtaV9vdXRfbmV3ICht aV92ZXJzaW9uKTsNCisgICAvKiBIQUNLOiBPdmVycmlkZSBhbnkgb3RoZXIg aW50ZXJwcmV0ZXIgaG9va3MuICBXZSBuZWVkIHRvIGNyZWF0ZSBhDQorICAg ICAgcmVhbCBldmVudCB0YWJsZSBhbmQgcGFzcyBpbiB0aGF0LiAqLw0KKyAg IGluaXRfdWlfaG9vayA9IDA7DQorICAgLyogY29tbWFuZF9sb29wX2hvb2sg PSAwOyAqLw0KKyAgIHByaW50X2ZyYW1lX2luZm9fbGlzdGluZ19ob29rID0g MDsNCisgICBxdWVyeV9ob29rID0gMDsNCisgICB3YXJuaW5nX2hvb2sgPSAw Ow0KKyAgIGNyZWF0ZV9icmVha3BvaW50X2hvb2sgPSAwOw0KKyAgIGRlbGV0 ZV9icmVha3BvaW50X2hvb2sgPSAwOw0KKyAgIG1vZGlmeV9icmVha3BvaW50 X2hvb2sgPSAwOw0KKyAgIGludGVyYWN0aXZlX2hvb2sgPSAwOw0KKyAgIHJl Z2lzdGVyc19jaGFuZ2VkX2hvb2sgPSAwOw0KKyAgIHJlYWRsaW5lX2JlZ2lu X2hvb2sgPSAwOw0KKyAgIHJlYWRsaW5lX2hvb2sgPSAwOw0KKyAgIHJlYWRs aW5lX2VuZF9ob29rID0gMDsNCisgICByZWdpc3Rlcl9jaGFuZ2VkX2hvb2sg PSAwOw0KKyAgIG1lbW9yeV9jaGFuZ2VkX2hvb2sgPSAwOw0KKyAgIGNvbnRl eHRfaG9vayA9IDA7DQorICAgdGFyZ2V0X3dhaXRfaG9vayA9IDA7DQorICAg Y2FsbF9jb21tYW5kX2hvb2sgPSAwOw0KKyAgIGVycm9yX2hvb2sgPSAwOw0K KyAgIGVycm9yX2JlZ2luX2hvb2sgPSAwOw0KKyAgIHNob3dfbG9hZF9wcm9n cmVzcyA9IG1pX2xvYWRfcHJvZ3Jlc3M7DQorICNlbmRpZg0KKyAgIC8qIFR1 cm4gb2ZmIDggYml0IHN0cmluZ3MgaW4gcXVvdGVkIG91dHB1dC4gIEFueSBj aGFyYWN0ZXIgd2l0aCB0aGUNCisgICAgICBoaWdoIGJpdCBzZXQgaXMgcHJp bnRlZCB1c2luZyBDJ3Mgb2N0YWwgZm9ybWF0LiAqLw0KKyAgIHNldmVuYml0 X3N0cmluZ3MgPSAxOw0KKyAgIC8qIFRlbGwgdGhlIHdvcmxkIHRoYXQgd2Un cmUgYWxpdmUgKi8NCisgICBmcHV0c191bmZpbHRlcmVkICgiKGdkYikgXG4i LCByYXdfc3Rkb3V0KTsNCisgICBnZGJfZmx1c2ggKHJhd19zdGRvdXQpOw0K KyAgIGlmICghZXZlbnRfbG9vcF9wKQ0KKyAgICAgc2ltcGxpZmllZF9jb21t YW5kX2xvb3AgKG1pX2lucHV0LCBtaV9leGVjdXRlX2NvbW1hbmQpOw0KKyAg IGVsc2UNCisgICAgIHN0YXJ0X2V2ZW50X2xvb3AgKCk7DQorIH0NCisgDQor IHN0YXRpYyBjaGFyICoNCisgbWlfaW5wdXQgKGNoYXIgKmJ1ZikNCisgew0K KyAgIHJldHVybiBnZGJfcmVhZGxpbmUgKE5VTEwpOw0KKyB9DQorIA0KKyB2 b2lkDQorIF9pbml0aWFsaXplX21pX2ludGVycCAodm9pZCkNCisgew0KKyAg IHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXJfcHJvY3MgcHJvY3MgPQ0KKyAgICAg ew0KKyAgICAgICBtaV9pbnRlcnByZXRlcl9pbml0LAkvKiBpbml0X3Byb2Mg Ki8NCisgICAgICAgbWlfaW50ZXJwcmV0ZXJfcmVzdW1lLAkvKiByZXN1bWVf cHJvYyAqLw0KKyAgICAgICBOVUxMLAkJCS8qIGRvX29uZV9ldmVudF9wcm9j ICovDQorICAgICAgIG1pX2ludGVycHJldGVyX3N1c3BlbmQsCS8qIHN1c3Bl bmRfcHJvYyAqLw0KKyAgICAgICBtaV9pbnRlcnByZXRlcl9kZWxldGUsCS8q IGRlbGV0ZV9wcm9jICovDQorICAgICAgIG1pX2ludGVycHJldGVyX2V4ZWMs CS8qIGV4ZWNfcHJvYyAqLw0KKyAgICAgICBtaV9pbnRlcnByZXRlcl9wcm9t cHQJLyogcHJvbXB0X3Byb2MgKi8NCisgICAgIH07DQorIA0KKyAgIC8qIENy ZWF0ZSBNSTAgaW50ZXJwcmV0ZXIgKi8NCisgICBpZiAobWkwX2ludGVycCA9 PSBOVUxMKQ0KKyAgICAgew0KKyAgICAgICBtaTBfaW50ZXJwID0NCisgCWdk Yl9uZXdfaW50ZXJwcmV0ZXIgKEdEQl9JTlRFUlBSRVRFUl9NSTAsIE5VTEws IG1pX291dF9uZXcgKDApLA0KKyAJCQkgICAgICZwcm9jcyk7DQorICAgICAg IGlmIChtaTBfaW50ZXJwID09IE5VTEwpDQorIAllcnJvcg0KKyAJICAoIkNv dWxkbid0IGFsbG9jYXRlIGEgbmV3IGludGVycHJldGVyIGZvciB0aGUgbWkw IGludGVycHJldGVyXG4iKTsNCisgICAgICAgaWYgKGdkYl9hZGRfaW50ZXJw cmV0ZXIgKG1pMF9pbnRlcnApICE9IDEpDQorIAllcnJvciAoIkNvdWxkbid0 IGFkZCB0aGUgbWkwIGludGVycHJldGVyIHRvIGdkYi5cbiIpOw0KKyAgICAg fQ0KKyANCisgICAvKiBDcmVhdGUgTUkxIGludGVycHJldGVyICovDQorICAg aWYgKG1pMV9pbnRlcnAgPT0gTlVMTCkNCisgICAgIHsNCisgICAgICAgbWkx X2ludGVycCA9DQorIAlnZGJfbmV3X2ludGVycHJldGVyIChHREJfSU5URVJQ UkVURVJfTUkxLCBOVUxMLCBtaV9vdXRfbmV3ICgxKSwNCisgCQkJICAgICAm cHJvY3MpOw0KKyAgICAgICBpZiAobWkxX2ludGVycCA9PSBOVUxMKQ0KKyAJ ZXJyb3INCisgCSAgKCJDb3VsZG4ndCBhbGxvY2F0ZSBhIG5ldyBpbnRlcnBy ZXRlciBmb3IgdGhlIG1pMSBpbnRlcnByZXRlclxuIik7DQorICAgICAgIGlm IChnZGJfYWRkX2ludGVycHJldGVyIChtaTFfaW50ZXJwKSAhPSAxKQ0KKyAJ ZXJyb3IgKCJDb3VsZG4ndCBhZGQgdGhlIG1pMSBpbnRlcnByZXRlciB0byBn ZGIuXG4iKTsNCisgICAgIH0NCisgDQorICAgLyogQ3JlYXRlIE1JMiBpbnRl cnByZXRlciAqLw0KKyAgIGlmIChtaV9pbnRlcnAgPT0gTlVMTCkNCisgICAg IHsNCisgICAgICAgbWlfaW50ZXJwID0NCisgCWdkYl9uZXdfaW50ZXJwcmV0 ZXIgKEdEQl9JTlRFUlBSRVRFUl9NSSwgTlVMTCwgbWlfb3V0X25ldyAoMiks DQorIAkJCSAgICAgJnByb2NzKTsNCisgICAgICAgaWYgKG1pX2ludGVycCA9 PSBOVUxMKQ0KKyAJZXJyb3INCisgCSAgKCJDb3VsZG4ndCBhbGxvY2F0ZSBh IG5ldyBpbnRlcnByZXRlciBmb3IgdGhlIG1pIGludGVycHJldGVyXG4iKTsN CisgICAgICAgaWYgKGdkYl9hZGRfaW50ZXJwcmV0ZXIgKG1pX2ludGVycCkg IT0gMSkNCisgCWVycm9yICgiQ291bGRuJ3QgYWRkIHRoZSBtaSBpbnRlcnBy ZXRlciB0byBnZGIuXG4iKTsNCisgICAgIH0NCisgfQ0KSW5kZXg6IG1pL21p LW1haW4uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvbWkvbWktbWFpbi5jLHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zMQ0KZGlmZiAtcCAtcjEuMzEgbWktbWFpbi5jDQoqKiogbWkv bWktbWFpbi5jCTExIFNlcCAyMDAyIDIxOjQ5OjA0IC0wMDAwCTEuMzENCi0t LSBtaS9taS1tYWluLmMJMjMgU2VwIDIwMDIgMTk6Mzc6MzggLTAwMDANCioq KioqKioqKioqKioqKg0KKioqIDMzLDM4ICoqKioNCi0tLSAzMywzOSAtLS0t DQogICNpbmNsdWRlICJtaS1jb25zb2xlLmgiDQogICNpbmNsdWRlICJ1aS1v dXQuaCINCiAgI2luY2x1ZGUgIm1pLW91dC5oIg0KKyAjaW5jbHVkZSAiaW50 ZXJwcy5oIg0KICAjaW5jbHVkZSAiZXZlbnQtbG9vcC5oIg0KICAjaW5jbHVk ZSAiZXZlbnQtdG9wLmgiDQogICNpbmNsdWRlICJnZGJjb3JlLmgiCQkvKiBm b3Igd3JpdGVfbWVtb3J5KCkgKi8NCioqKioqKioqKioqKioqKiBzdHJ1Y3Qg dWlfZmlsZSAqcmF3X3N0ZG91dDsNCioqKiA3NywxMDMgKioqKg0KICAvKiBU aGUgdG9rZW4gb2YgdGhlIGxhc3QgYXN5bmNocm9ub3VzIGNvbW1hbmQgKi8N CiAgc3RhdGljIGNoYXIgKmxhc3RfYXN5bmNfY29tbWFuZDsNCiAgc3RhdGlj IGNoYXIgKnByZXZpb3VzX2FzeW5jX2NvbW1hbmQ7DQohIHN0YXRpYyBjaGFy ICptaV9lcnJvcl9tZXNzYWdlOw0KICBzdGF0aWMgY2hhciAqb2xkX3JlZ3M7 DQogIA0KICBleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9taV9tYWluICh2b2lk KTsNCiEgc3RhdGljIGNoYXIgKm1pX2lucHV0IChjaGFyICopOw0KISBzdGF0 aWMgdm9pZCBtaV9leGVjdXRlX2NvbW1hbmQgKGNoYXIgKmNtZCwgaW50IGZy b21fdHR5KTsNCiAgc3RhdGljIGVudW0gbWlfY21kX3Jlc3VsdCBtaV9jbWRf ZXhlY3V0ZSAoc3RydWN0IG1pX3BhcnNlICpwYXJzZSk7DQogIA0KICBzdGF0 aWMgdm9pZCBtaV9leGVjdXRlX2NsaV9jb21tYW5kIChjb25zdCBjaGFyICpj bGksIGNoYXIgKmFyZ3MpOw0KICBzdGF0aWMgZW51bSBtaV9jbWRfcmVzdWx0 IG1pX2V4ZWN1dGVfYXN5bmNfY2xpX2NvbW1hbmQgKGNoYXIgKm1pLCBjaGFy ICphcmdzLCBpbnQgZnJvbV90dHkpOw0KLSBzdGF0aWMgdm9pZCBtaV9leGVj dXRlX2NvbW1hbmRfd3JhcHBlciAoY2hhciAqY21kKTsNCiAgDQogIHZvaWQg bWlfZXhlY19hc3luY19jbGlfY21kX2NvbnRpbnVhdGlvbiAoc3RydWN0IGNv bnRpbnVhdGlvbl9hcmcgKmFyZyk7DQogIA0KICBzdGF0aWMgaW50IHJlZ2lz dGVyX2NoYW5nZWRfcCAoaW50IHJlZ251bSk7DQogIHN0YXRpYyBpbnQgZ2V0 X3JlZ2lzdGVyIChpbnQgcmVnbnVtLCBpbnQgZm9ybWF0KTsNCiEgc3RhdGlj IHZvaWQgbWlfbG9hZF9wcm9ncmVzcyAoY29uc3QgY2hhciAqc2VjdGlvbl9u YW1lLA0KISAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNlbnRfc29fZmFyLA0K ISAJCQkgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsX3NlY3Rpb24sDQohIAkJ CSAgICAgIHVuc2lnbmVkIGxvbmcgdG90YWxfc2VudCwNCiEgCQkJICAgICAg dW5zaWduZWQgbG9uZyBncmFuZF90b3RhbCk7DQogIA0KICAvKiBGSVhNRTog dGhlc2Ugc2hvdWxkIGdvIGluIHNvbWUgLmggZmlsZSwgYnV0IGluZmNtZC5j IGRvZXNuJ3QgaGF2ZSBhDQogICAgIGNvcnJlc3BvbmRpbmcgLmggZmlsZS4g VGhlc2Ugd3JhcHBlcnMgd2lsbCBiZSBvYnNvbGV0ZSBhbnl3YXksIG9uY2UN Ci0tLSA3OCwxMDIgLS0tLQ0KICAvKiBUaGUgdG9rZW4gb2YgdGhlIGxhc3Qg YXN5bmNocm9ub3VzIGNvbW1hbmQgKi8NCiAgc3RhdGljIGNoYXIgKmxhc3Rf YXN5bmNfY29tbWFuZDsNCiAgc3RhdGljIGNoYXIgKnByZXZpb3VzX2FzeW5j X2NvbW1hbmQ7DQohIGNoYXIgKm1pX2Vycm9yX21lc3NhZ2U7DQogIHN0YXRp YyBjaGFyICpvbGRfcmVnczsNCiAgDQogIGV4dGVybiB2b2lkIF9pbml0aWFs aXplX21pX21haW4gKHZvaWQpOw0KISB2b2lkIG1pX2V4ZWN1dGVfY29tbWFu ZCAoY2hhciAqY21kLCBpbnQgZnJvbV90dHkpOw0KICBzdGF0aWMgZW51bSBt aV9jbWRfcmVzdWx0IG1pX2NtZF9leGVjdXRlIChzdHJ1Y3QgbWlfcGFyc2Ug KnBhcnNlKTsNCiAgDQogIHN0YXRpYyB2b2lkIG1pX2V4ZWN1dGVfY2xpX2Nv bW1hbmQgKGNvbnN0IGNoYXIgKmNsaSwgY2hhciAqYXJncyk7DQogIHN0YXRp YyBlbnVtIG1pX2NtZF9yZXN1bHQgbWlfZXhlY3V0ZV9hc3luY19jbGlfY29t bWFuZCAoY2hhciAqbWksIGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7DQog IA0KICB2b2lkIG1pX2V4ZWNfYXN5bmNfY2xpX2NtZF9jb250aW51YXRpb24g KHN0cnVjdCBjb250aW51YXRpb25fYXJnICphcmcpOw0KICANCiAgc3RhdGlj IGludCByZWdpc3Rlcl9jaGFuZ2VkX3AgKGludCByZWdudW0pOw0KICBzdGF0 aWMgaW50IGdldF9yZWdpc3RlciAoaW50IHJlZ251bSwgaW50IGZvcm1hdCk7 DQohIHZvaWQgbWlfbG9hZF9wcm9ncmVzcyAoY29uc3QgY2hhciAqc2VjdGlv bl9uYW1lLA0KISAJCSAgICAgICB1bnNpZ25lZCBsb25nIHNlbnRfc29fZmFy LA0KISAJCSAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsX3NlY3Rpb24sDQoh IAkJICAgICAgIHVuc2lnbmVkIGxvbmcgdG90YWxfc2VudCwNCiEgCQkgICAg ICAgdW5zaWduZWQgbG9uZyBncmFuZF90b3RhbCk7DQogIA0KICAvKiBGSVhN RTogdGhlc2Ugc2hvdWxkIGdvIGluIHNvbWUgLmggZmlsZSwgYnV0IGluZmNt ZC5jIGRvZXNuJ3QgaGF2ZSBhDQogICAgIGNvcnJlc3BvbmRpbmcgLmggZmls ZS4gVGhlc2Ugd3JhcHBlcnMgd2lsbCBiZSBvYnNvbGV0ZSBhbnl3YXksIG9u Y2UNCioqKioqKioqKioqKioqKiBzdGF0aWMgdm9pZCBtaV9sb2FkX3Byb2dy ZXNzIChjb25zdCBjaGFyDQoqKiogMTA1LDExMCAqKioqDQotLS0gMTA0LDEx OCAtLS0tDQogIGV4dGVybiB2b2lkIGludGVycnVwdF90YXJnZXRfY29tbWFu ZF93cmFwcGVyIChjaGFyICosIGludCk7DQogIGV4dGVybiB2b2lkIHJldHVy bl9jb21tYW5kX3dyYXBwZXIgKGNoYXIgKiwgaW50KTsNCiAgDQorIC8qIEEg aGVscGVyIGZ1bmN0aW9uIHdoaWNoIHdpbGwgc2V0IG1pX2Vycm9yX21lc3Nh Z2UgdG8gZXJyb3JfbGFzdF9tZXNzYWdlLiAqLw0KKyB2b2lkDQorIG1pX2Vy cm9yX2xhc3RfbWVzc2FnZSAodm9pZCkNCisgew0KKyAgIGNoYXIgKnMgPSBl cnJvcl9sYXN0X21lc3NhZ2UgKCk7DQorICAgeGFzcHJpbnRmICgmbWlfZXJy b3JfbWVzc2FnZSwgcyk7DQorICAgeGZyZWUgKHMpOw0KKyB9DQorIA0KICAv KiBDb21tYW5kIGltcGxlbWVudGF0aW9ucy4gRklYTUU6IElzIHRoaXMgbGli Z2RiPyBOby4gIFRoaXMgaXMgdGhlIE1JDQogICAgIGxheWVyIHRoYXQgY2Fs bHMgbGliZ2RiLiAgQW55IG9wZXJhdGlvbiB1c2VkIGluIHRoZSBiZWxvdyBz aG91bGQgYmUNCiAgICAgZm9ybWFsaXplZC4gKi8NCioqKioqKioqKioqKioq KiBtaV9leGVjdXRlX2NvbW1hbmQgKGNoYXIgKmNtZCwgaW50IGZyb21fDQoq KiogMTE2NSwxMTcxICoqKioNCiAgICBzdHJ1Y3QgbWlfcGFyc2UgKmNvbW1h bmQ7DQogICAgc3RydWN0IGNhcHR1cmVkX21pX2V4ZWN1dGVfY29tbWFuZF9h cmdzIGFyZ3M7DQogICAgc3RydWN0IHVpX291dCAqc2F2ZWRfdWlvdXQgPSB1 aW91dDsNCiEgICBpbnQgcmVzdWx0LCByYzsNCiAgDQogICAgLyogVGhpcyBp cyB0byBoYW5kbGUgRU9GICheRCkuIFdlIGp1c3QgcXVpdCBnZGIuICovDQog ICAgLyogRklYTUU6IHdlIHNob3VsZCBjYWxsIHNvbWUgQVBJIGZ1bmN0aW9u IGhlcmUuICovDQotLS0gMTE3MywxMTc5IC0tLS0NCiAgICBzdHJ1Y3QgbWlf cGFyc2UgKmNvbW1hbmQ7DQogICAgc3RydWN0IGNhcHR1cmVkX21pX2V4ZWN1 dGVfY29tbWFuZF9hcmdzIGFyZ3M7DQogICAgc3RydWN0IHVpX291dCAqc2F2 ZWRfdWlvdXQgPSB1aW91dDsNCiEgICBpbnQgcmVzdWx0Ow0KICANCiAgICAv KiBUaGlzIGlzIHRvIGhhbmRsZSBFT0YgKF5EKS4gV2UganVzdCBxdWl0IGdk Yi4gKi8NCiAgICAvKiBGSVhNRTogd2Ugc2hvdWxkIGNhbGwgc29tZSBBUEkg ZnVuY3Rpb24gaGVyZS4gKi8NCioqKioqKioqKioqKioqKiBtaV9jbWRfZXhl Y3V0ZSAoc3RydWN0IG1pX3BhcnNlICpwYXJzZSkNCioqKiAxMjczLDEyODQg KioqKg0KICAgICAgfQ0KICB9DQogIA0KLSBzdGF0aWMgdm9pZA0KLSBtaV9l eGVjdXRlX2NvbW1hbmRfd3JhcHBlciAoY2hhciAqY21kKQ0KLSB7DQotICAg bWlfZXhlY3V0ZV9jb21tYW5kIChjbWQsIHN0ZGluID09IGluc3RyZWFtKTsN Ci0gfQ0KLSANCiAgLyogRklYTUU6IFRoaXMgaXMganVzdCBhIGhhY2sgc28g d2UgY2FuIGdldCBzb21lIGV4dHJhIGNvbW1hbmRzIGdvaW5nLg0KICAgICBX ZSBkb24ndCB3YW50IHRvIGNoYW5uZWwgdGhpbmdzIHRocm91Z2ggdGhlIENM SSwgYnV0IGNhbGwgbGliZ2RiIGRpcmVjdGx5ICovDQogIC8qIFVzZSBvbmx5 IGZvciBzeW5jaHJvbm91cyBjb21tYW5kcyAqLw0KLS0tIDEyODEsMTI4NiAt LS0tDQoqKioqKioqKioqKioqKiogbWlfZXhlY19hc3luY19jbGlfY21kX2Nv bnRpbnVhdGlvbiAoc3RydQ0KKioqIDEzODEsMTM5MyAqKioqDQogICAgZG9f ZXhlY19jbGVhbnVwcyAoQUxMX0NMRUFOVVBTKTsNCiAgfQ0KICANCiEgc3Rh dGljIGNoYXIgKg0KISBtaV9pbnB1dCAoY2hhciAqYnVmKQ0KISB7DQohICAg cmV0dXJuIGdkYl9yZWFkbGluZSAoTlVMTCk7DQohIH0NCiEgDQohIHN0YXRp YyB2b2lkDQogIG1pX2xvYWRfcHJvZ3Jlc3MgKGNvbnN0IGNoYXIgKnNlY3Rp b25fbmFtZSwNCiAgCQkgIHVuc2lnbmVkIGxvbmcgc2VudF9zb19mYXIsDQog IAkJICB1bnNpZ25lZCBsb25nIHRvdGFsX3NlY3Rpb24sDQotLS0gMTM4Mywx Mzg5IC0tLS0NCiAgICBkb19leGVjX2NsZWFudXBzIChBTExfQ0xFQU5VUFMp Ow0KICB9DQogIA0KISB2b2lkDQogIG1pX2xvYWRfcHJvZ3Jlc3MgKGNvbnN0 IGNoYXIgKnNlY3Rpb25fbmFtZSwNCiAgCQkgIHVuc2lnbmVkIGxvbmcgc2Vu dF9zb19mYXIsDQogIAkJICB1bnNpZ25lZCBsb25nIHRvdGFsX3NlY3Rpb24s DQoqKioqKioqKioqKioqKiogbWlfbG9hZF9wcm9ncmVzcyAoY29uc3QgY2hh ciAqc2VjdGlvbl9uYQ0KKioqIDE0NTYsMTU3MyAqKioqDQogICAgICB9DQog IH0NCiAgDQohIHN0YXRpYyB2b2lkDQohIG1pX2NvbW1hbmRfbG9vcCAoaW50 IG1pX3ZlcnNpb24pDQohIHsNCiEgICAvKiBIQUNLOiBGb3JjZSBzdGRvdXQv c3RkZXJyIHRvIHBvaW50IGF0IHRoZSBjb25zb2xlLiAgVGhpcyBhdm9pZHMN CiEgICAgICBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBjYXVzZWQgYnkg bGVnYWN5IGNvZGUgdGhhdCBpcyBzdGlsbA0KISAgICAgIHVzaW5nIHRoZSBU VUkgLyBmcHV0c191bmZpbHRlcmVkX2hvb2sgKi8NCiEgICByYXdfc3Rkb3V0 ID0gc3RkaW9fZmlsZW9wZW4gKHN0ZG91dCk7DQohICAgLyogUm91dGUgbm9y bWFsIG91dHB1dCB0aHJvdWdoIHRoZSBNSXggKi8NCiEgICBnZGJfc3Rkb3V0 ID0gbWlfY29uc29sZV9maWxlX25ldyAocmF3X3N0ZG91dCwgIn4iKTsNCiEg ICAvKiBSb3V0ZSBlcnJvciBhbmQgbG9nIG91dHB1dCB0aHJvdWdoIHRoZSBN SSAqLw0KISAgIGdkYl9zdGRlcnIgPSBtaV9jb25zb2xlX2ZpbGVfbmV3IChy YXdfc3Rkb3V0LCAiJiIpOw0KISAgIGdkYl9zdGRsb2cgPSBnZGJfc3RkZXJy Ow0KISAgIC8qIFJvdXRlIHRhcmdldCBvdXRwdXQgdGhyb3VnaCB0aGUgTUku ICovDQohICAgZ2RiX3N0ZHRhcmcgPSBtaV9jb25zb2xlX2ZpbGVfbmV3IChy YXdfc3Rkb3V0LCAiQCIpOw0KISANCiEgICAvKiBIQUNLOiBQb2tlIHRoZSB1 aV9vdXQgdGFibGUgZGlyZWN0bHkuICBTaG91bGQgd2UgYmUgY3JlYXRpbmcg YQ0KISAgICAgIG1pX291dCBvYmplY3Qgd2lyZWQgdXAgdG8gdGhlIGFib3Zl IGdkYl9zdGRvdXQgLyBnZGJfc3RkZXJyPyAqLw0KISAgIHVpb3V0ID0gbWlf b3V0X25ldyAobWlfdmVyc2lvbik7DQohIA0KISAgIC8qIEhBQ0s6IE92ZXJy aWRlIGFueSBvdGhlciBpbnRlcnByZXRlciBob29rcy4gIFdlIG5lZWQgdG8g Y3JlYXRlIGENCiEgICAgICByZWFsIGV2ZW50IHRhYmxlIGFuZCBwYXNzIGlu IHRoYXQuICovDQohICAgaW5pdF91aV9ob29rID0gMDsNCiEgICAvKiBjb21t YW5kX2xvb3BfaG9vayA9IDA7ICovDQohICAgcHJpbnRfZnJhbWVfaW5mb19s aXN0aW5nX2hvb2sgPSAwOw0KISAgIHF1ZXJ5X2hvb2sgPSAwOw0KISAgIHdh cm5pbmdfaG9vayA9IDA7DQohICAgY3JlYXRlX2JyZWFrcG9pbnRfaG9vayA9 IDA7DQohICAgZGVsZXRlX2JyZWFrcG9pbnRfaG9vayA9IDA7DQohICAgbW9k aWZ5X2JyZWFrcG9pbnRfaG9vayA9IDA7DQohICAgaW50ZXJhY3RpdmVfaG9v ayA9IDA7DQohICAgcmVnaXN0ZXJzX2NoYW5nZWRfaG9vayA9IDA7DQohICAg cmVhZGxpbmVfYmVnaW5faG9vayA9IDA7DQohICAgcmVhZGxpbmVfaG9vayA9 IDA7DQohICAgcmVhZGxpbmVfZW5kX2hvb2sgPSAwOw0KISAgIHJlZ2lzdGVy X2NoYW5nZWRfaG9vayA9IDA7DQohICAgbWVtb3J5X2NoYW5nZWRfaG9vayA9 IDA7DQohICAgY29udGV4dF9ob29rID0gMDsNCiEgICB0YXJnZXRfd2FpdF9o b29rID0gMDsNCiEgICBjYWxsX2NvbW1hbmRfaG9vayA9IDA7DQohICAgZXJy b3JfaG9vayA9IDA7DQohICAgZXJyb3JfYmVnaW5faG9vayA9IDA7DQohICAg c2hvd19sb2FkX3Byb2dyZXNzID0gbWlfbG9hZF9wcm9ncmVzczsNCiEgDQoh ICAgLyogVHVybiBvZmYgOCBiaXQgc3RyaW5ncyBpbiBxdW90ZWQgb3V0cHV0 LiAgQW55IGNoYXJhY3RlciB3aXRoIHRoZQ0KISAgICAgIGhpZ2ggYml0IHNl dCBpcyBwcmludGVkIHVzaW5nIEMncyBvY3RhbCBmb3JtYXQuICovDQohICAg c2V2ZW5iaXRfc3RyaW5ncyA9IDE7DQohIA0KISAgIC8qIFRlbGwgdGhlIHdv cmxkIHRoYXQgd2UncmUgYWxpdmUgKi8NCiEgICBmcHV0c191bmZpbHRlcmVk ICgiKGdkYikgXG4iLCByYXdfc3Rkb3V0KTsNCiEgICBnZGJfZmx1c2ggKHJh d19zdGRvdXQpOw0KISANCiEgICBpZiAoIWV2ZW50X2xvb3BfcCkNCiEgICAg IHNpbXBsaWZpZWRfY29tbWFuZF9sb29wIChtaV9pbnB1dCwgbWlfZXhlY3V0 ZV9jb21tYW5kKTsNCiEgICBlbHNlDQohICAgICBzdGFydF9ldmVudF9sb29w ICgpOw0KISB9DQohIA0KISBzdGF0aWMgdm9pZA0KISBtaTBfY29tbWFuZF9s b29wICh2b2lkKQ0KISB7DQohICAgbWlfY29tbWFuZF9sb29wICgwKTsNCiEg fQ0KISANCiEgc3RhdGljIHZvaWQNCiEgbWkxX2NvbW1hbmRfbG9vcCAodm9p ZCkNCiEgew0KISAgIG1pX2NvbW1hbmRfbG9vcCAoMSk7DQohIH0NCiEgDQoh IHN0YXRpYyB2b2lkDQohIHNldHVwX2FyY2hpdGVjdHVyZV9kYXRhICh2b2lk KQ0KICB7DQogICAgLyogZG9uJ3QgdHJ1c3QgUkVHSVNURVJfQllURVMgdG8g YmUgemVyby4gKi8NCiAgICBvbGRfcmVncyA9IHhtYWxsb2MgKFJFR0lTVEVS X0JZVEVTICsgMSk7DQogICAgbWVtc2V0IChvbGRfcmVncywgMCwgUkVHSVNU RVJfQllURVMgKyAxKTsNCiAgfQ0KICANCi0gc3RhdGljIHZvaWQNCi0gbWlf aW5pdF91aSAoY2hhciAqYXJnMCkNCi0gew0KLSAgIC8qIEV2ZW50dWFsbHkg dGhpcyB3aWxsIGNvbnRhaW4gY29kZSB0aGF0IHRha2VzIGNvbnRyb2wgb2Yg dGhlDQotICAgICAgY29uc29sZS4gKi8NCi0gfQ0KLSANCiAgdm9pZA0KISBf aW5pdGlhbGl6ZV9taV9tYWluICh2b2lkKQ0KICB7DQotICAgaWYgKGludGVy cHJldGVyX3AgPT0gTlVMTCkNCi0gICAgIHJldHVybjsNCi0gDQotICAgLyog SWYgd2UncmUgX3RoZV8gaW50ZXJwcmV0ZXIsIHRha2UgY29udHJvbC4gKi8N Ci0gICBpZiAoc3RyY21wIChpbnRlcnByZXRlcl9wLCAibWkwIikgPT0gMCkN Ci0gICAgIGNvbW1hbmRfbG9vcF9ob29rID0gbWkwX2NvbW1hbmRfbG9vcDsN Ci0gICBlbHNlIGlmIChzdHJjbXAgKGludGVycHJldGVyX3AsICJtaSIpID09 IDANCi0gCSAgIHx8IHN0cmNtcCAoaW50ZXJwcmV0ZXJfcCwgIm1pMSIpID09 IDApDQotICAgICBjb21tYW5kX2xvb3BfaG9vayA9IG1pMV9jb21tYW5kX2xv b3A7DQotICAgZWxzZQ0KLSAgICAgcmV0dXJuOw0KLSANCi0gICBpbml0X3Vp X2hvb2sgPSBtaV9pbml0X3VpOw0KLSAgIHNldHVwX2FyY2hpdGVjdHVyZV9k YXRhICgpOw0KICAgIHJlZ2lzdGVyX2dkYmFyY2hfc3dhcCAoJm9sZF9yZWdz LCBzaXplb2YgKG9sZF9yZWdzKSwgTlVMTCk7DQohICAgcmVnaXN0ZXJfZ2Ri YXJjaF9zd2FwIChOVUxMLCAwLCBzZXR1cF9hcmNoaXRlY3R1cmVfZGF0YSk7 DQohICAgaWYgKGV2ZW50X2xvb3BfcCkNCiEgICAgIHsNCiEgICAgICAgLyog VGhlc2Ugb3ZlcndyaXRlIHNvbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIGRv bmUgaW4NCiEgCSBfaW50aWFsaXplX2V2ZW50X2xvb3AuICovDQohICAgICAg IGNhbGxfcmVhZGxpbmUgPSBnZGJfcmVhZGxpbmUyOw0KISAgICAgICBpbnB1 dF9oYW5kbGVyID0gbWlfZXhlY3V0ZV9jb21tYW5kX3dyYXBwZXI7DQohICAg ICAgIGFkZF9maWxlX2hhbmRsZXIgKGlucHV0X2ZkLCBzdGRpbl9ldmVudF9o YW5kbGVyLCAwKTsNCiEgICAgICAgYXN5bmNfY29tbWFuZF9lZGl0aW5nX3Ag PSAwOw0KISAgICAgfQ0KISAgIC8qIEZJWE1FOiBTaG91bGQgd2Ugbm90aWZ5 IG1haW4gdGhhdCB3ZSBhcmUgaGVyZSBhcyBhIHBvc3NpYmxlDQohICAgICAg aW50ZXJwcmV0ZXI/ICovDQogIH0NCi0tLSAxNDUyLDE0NjggLS0tLQ0KICAg ICAgfQ0KICB9DQogIA0KISB2b2lkDQohIG1pX3NldHVwX2FyY2hpdGVjdHVy ZV9kYXRhICh2b2lkKQ0KICB7DQogICAgLyogZG9uJ3QgdHJ1c3QgUkVHSVNU RVJfQllURVMgdG8gYmUgemVyby4gKi8NCiAgICBvbGRfcmVncyA9IHhtYWxs b2MgKFJFR0lTVEVSX0JZVEVTICsgMSk7DQogICAgbWVtc2V0IChvbGRfcmVn cywgMCwgUkVHSVNURVJfQllURVMgKyAxKTsNCiAgfQ0KICANCiAgdm9pZA0K ISBtaV9yZWdpc3Rlcl9nZGJhcmNoX3N3YXAgKHZvaWQpDQogIHsNCiAgICBy ZWdpc3Rlcl9nZGJhcmNoX3N3YXAgKCZvbGRfcmVncywgc2l6ZW9mIChvbGRf cmVncyksIE5VTEwpOw0KISAgIHJlZ2lzdGVyX2dkYmFyY2hfc3dhcCAoTlVM TCwgMCwgbWlfc2V0dXBfYXJjaGl0ZWN0dXJlX2RhdGEpOw0KICB9DQpJbmRl eDogbWkvbWkuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IG1pL21pLmgNCmRpZmYgLU4gbWkvbWkuaA0KKioqIG1pL21pLmgJMSBKYW4g MTk3MCAwMDowMDowMCAtMDAwMA0KLS0tIG1pL21pLmgJMjMgU2VwIDIwMDIg MTk6Mzc6MzggLTAwMDANCioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0K LS0tIDEsNTkgLS0tLQ0KKyAvKiBNSSBJbnRlcm5hbCBGdW5jdGlvbnMNCisg ICAgQ29weXJpZ2h0IDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuDQorIA0KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQorIA0K KyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQ0KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyANCisg ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgDQorICAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlDQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgIEZv dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwN CisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLw0KKyANCisg I2lmbmRlZiBNSV9IDQorICNkZWZpbmUgTUlfSA0KKyAvKiBUaGUgbWkgaW50 ZXJwcmV0ZXJzLiAqLw0KKyBzdHJ1Y3QgdWlfZmlsZTsNCisgc3RydWN0IGJy ZWFrcG9pbnQ7DQorIHN0cnVjdCBnZGJfaW50ZXJwcmV0ZXI7DQorIGV4dGVy biBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICptaV9pbnRlcnA7DQorIGV4dGVy biBzdHJ1Y3QgZ2RiX2ludGVycHJldGVyICptaTBfaW50ZXJwOw0KKyANCisg ZXh0ZXJuIHZvaWQgbWlfc2V0dXBfYXJjaGl0ZWN0dXJlX2RhdGEgKHZvaWQp Ow0KKyBleHRlcm4gdm9pZCBtaV9yZWdpc3Rlcl9nZGJhcmNoX3N3YXAgKHZv aWQpOw0KKyANCisgLyogTUkncyBvdXRwdXQgY2hhbm5lbHMgKi8NCisgZXh0 ZXJuIHN0cnVjdCB1aV9maWxlICptaV9zdGRvdXQ7DQorIGV4dGVybiBzdHJ1 Y3QgdWlfZmlsZSAqbWlfc3RkZXJyOw0KKyBleHRlcm4gc3RydWN0IHVpX2Zp bGUgKm1pX3N0ZGxvZzsNCisgZXh0ZXJuIHN0cnVjdCB1aV9maWxlICptaV9z dGR0YXJnOw0KKyBleHRlcm4gc3RydWN0IHVpX2ZpbGUgKm1pX2V2ZW50X2No YW5uZWw7DQorIA0KKyAvKiBFdmVudHMvSG9va3MgKi8NCisgZXh0ZXJuIHZv aWQgbWlfbG9hZF9wcm9ncmVzcyAoY29uc3QgY2hhciAqc2VjdGlvbl9uYW1l LA0KKyAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNlbnRfc29fZmFyLA0KKyAJ CQkgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsX3NlY3Rpb24sDQorIAkJCSAg ICAgIHVuc2lnbmVkIGxvbmcgdG90YWxfc2VudCwNCisgCQkJICAgICAgdW5z aWduZWQgbG9uZyBncmFuZF90b3RhbCk7DQorIGV4dGVybiB2b2lkIG1pX2lu dGVycF9mcmFtZV9jaGFuZ2VkX2hvb2sgKGludCBuZXdfZnJhbWVfbnVtYmVy KTsNCisgZXh0ZXJuIHZvaWQgbWlfaW50ZXJwX2NvbnRleHRfaG9vayAoaW50 IHRocmVhZF9pZCk7DQorIA0KKyBleHRlcm4gdm9pZCBtaV9jcmVhdGVfYnJl YWtwb2ludCAoaW50IGJwbnVtKTsNCisgZXh0ZXJuIHZvaWQgbWlfbW9kaWZ5 X2JyZWFrcG9pbnQgKGludCBicG51bSk7DQorIGV4dGVybiB2b2lkIG1pX2Rl bGV0ZV9icmVha3BvaW50IChpbnQgYnBudW0pOw0KKyBleHRlcm4gdm9pZCBt aV9jcmVhdGVfdHJhY2Vwb2ludCAoaW50IGJwbnVtKTsNCisgZXh0ZXJuIHZv aWQgbWlfbW9kaWZ5X3RyYWNlcG9pbnQgKGludCBicG51bSk7DQorIGV4dGVy biB2b2lkIG1pX2RlbGV0ZV90cmFjZXBvaW50IChpbnQgYnBudW0pOw0KKyBl eHRlcm4gdm9pZCBtaV9hcmNoaXRlY3R1cmVfY2hhbmdlZCAodm9pZCk7DQor IGV4dGVybiB2b2lkIG1pX3RhcmdldF9jaGFuZ2VkICh2b2lkKTsNCisgZXh0 ZXJuIHZvaWQgbWlfc2VsZWN0ZWRfZnJhbWVfbGV2ZWxfY2hhbmdlZCAoaW50 IGxldmVsKTsNCisgZXh0ZXJuIHZvaWQgbWlfY29udGV4dF9jaGFuZ2VkIChp bnQgdGhyZWFkX2lkKTsNCisgI2VuZGlmIC8qIE1JX0ggKi8NCg== --26611400-108273181-1032810900=:10013--