From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Date: Sun, 10 Sep 2017 07:21:23 -0400 Subject: [U-Boot] [PATCH v3 3/9] fat/fs: convert to directory iterators In-Reply-To: <20170910112149.21358-1-robdclark@gmail.com> References: <20170910112149.21358-1-robdclark@gmail.com> Message-ID: <20170910112149.21358-7-robdclark@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1254" Content-Transfer-Encoding: base64 To: u-boot@lists.denx.de QW5kIGRyb3AgYSB3aG9sZSBsb3Qgb2YgdWdseSBjb2RlIQoKU2lnbmVkLW9mZi1ieTogUm9iIENs YXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogxYF1a2FzeiBNYWpld3NraSA8 bHVrbWFAZGVueC5kZT4KLS0tCiBmcy9mYXQvZmF0LmMgIHwgNzIyICsrKysrKystLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvZmF0Lmgg fCAgIDYgLQogMiBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCA2NTIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5jIGIvZnMvZmF0L2ZhdC5jCmluZGV4IGVlMmJi ZTM4ZjEuLmJiYmE3OTQ3ZWUgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuYworKysgYi9mcy9mYXQv ZmF0LmMKQEAgLTExOSwyMiArMTE5LDYgQEAgaW50IGZhdF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0 IGJsa19kZXNjICpkZXZfZGVzYywgaW50IHBhcnRfbm8pCiB9CiAKIC8qCi0gKiBHZXQgdGhlIGZp cnN0IG9jY3VyZW5jZSBvZiBhIGRpcmVjdG9yeSBkZWxpbWl0ZXIgKCcvJyBvciAnXCcpIGluIGEg c3RyaW5nLgotICogUmV0dXJuIGluZGV4IGludG8gc3RyaW5nIGlmIGZvdW5kLCAtMSBvdGhlcndp c2UuCi0gKi8KLXN0YXRpYyBpbnQgZGlyZGVsaW0oY2hhciAqc3RyKQotewotCWNoYXIgKnN0YXJ0 ID0gc3RyOwotCi0Jd2hpbGUgKCpzdHIgIT0gJ1wwJykgewotCQlpZiAoSVNESVJERUxJTSgqc3Ry KSkKLQkJCXJldHVybiBzdHIgLSBzdGFydDsKLQkJc3RyKys7Ci0JfQotCXJldHVybiAtMTsKLX0K LQotLyoKICAqIEV4dHJhY3QgemVybyB0ZXJtaW5hdGVkIHNob3J0IG5hbWUgZnJvbSBhIGRpcmVj dG9yeSBlbnRyeS4KICAqLwogc3RhdGljIHZvaWQgZ2V0X25hbWUoZGlyX2VudHJ5ICpkaXJlbnQs IGNoYXIgKnNfbmFtZSkKQEAgLTQ2OCw5NSArNDUyLDYgQEAgc3RhdGljIGludCBzbG90MnN0cihk aXJfc2xvdCAqc2xvdHB0ciwgY2hhciAqbF9uYW1lLCBpbnQgKmlkeCkKIAlyZXR1cm4gMDsKIH0K IAotLyoKLSAqIEV4dHJhY3QgdGhlIGZ1bGwgbG9uZyBmaWxlbmFtZSBzdGFydGluZyBhdCAncmV0 ZGVudCcgKHdoaWNoIGlzIHJlYWxseQotICogYSBzbG90KSBpbnRvICdsX25hbWUnLiBJZiBzdWNj ZXNzZnVsIGFsc28gY29weSB0aGUgcmVhbCBkaXJlY3RvcnkgZW50cnkKLSAqIGludG8gJ3JldGRl bnQnCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBp bnQKLWdldF92ZmF0bmFtZShmc2RhdGEgKm15ZGF0YSwgaW50IGN1cmNsdXN0LCBfX3U4ICpjbHVz dGVyLAotCSAgICAgZGlyX2VudHJ5ICpyZXRkZW50LCBjaGFyICpsX25hbWUpCi17Ci0JZGlyX2Vu dHJ5ICpyZWFsZGVudDsKLQlkaXJfc2xvdCAqc2xvdHB0ciA9IChkaXJfc2xvdCAqKXJldGRlbnQ7 Ci0JX191OCAqYnVmbGltaXQgPSBjbHVzdGVyICsgbXlkYXRhLT5zZWN0X3NpemUgKiAoKGN1cmNs dXN0ID09IDApID8KLQkJCQkJCQlQUkVGRVRDSF9CTE9DS1MgOgotCQkJCQkJCW15ZGF0YS0+Y2x1 c3Rfc2l6ZSk7Ci0JX191OCBjb3VudGVyID0gKHNsb3RwdHItPmlkICYgfkxBU1RfTE9OR19FTlRS WV9NQVNLKSAmIDB4ZmY7Ci0JaW50IGlkeCA9IDA7Ci0KLQlpZiAoY291bnRlciA+IFZGQVRfTUFY U0VRKSB7Ci0JCWRlYnVnKCJFcnJvcjogVkZBVCBuYW1lIGlzIHRvbyBsb25nXG4iKTsKLQkJcmV0 dXJuIC0xOwotCX0KLQotCXdoaWxlICgoX191OCAqKXNsb3RwdHIgPCBidWZsaW1pdCkgewotCQlp ZiAoY291bnRlciA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmICgoKHNsb3RwdHItPmlkICYgfkxBU1Rf TE9OR19FTlRSWV9NQVNLKSAmIDB4ZmYpICE9IGNvdW50ZXIpCi0JCQlyZXR1cm4gLTE7Ci0JCXNs b3RwdHIrKzsKLQkJY291bnRlci0tOwotCX0KLQotCWlmICgoX191OCAqKXNsb3RwdHIgPj0gYnVm bGltaXQpIHsKLQkJZGlyX3Nsb3QgKnNsb3RwdHIyOwotCi0JCWlmIChjdXJjbHVzdCA9PSAwKQot CQkJcmV0dXJuIC0xOwotCQljdXJjbHVzdCA9IGdldF9mYXRlbnQobXlkYXRhLCBjdXJjbHVzdCk7 Ci0JCWlmIChDSEVDS19DTFVTVChjdXJjbHVzdCwgbXlkYXRhLT5mYXRzaXplKSkgewotCQkJZGVi dWcoImN1cmNsdXN0OiAweCV4XG4iLCBjdXJjbHVzdCk7Ci0JCQlwcmludGYoIkludmFsaWQgRkFU IGVudHJ5XG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmIChnZXRfY2x1c3RlcihteWRh dGEsIGN1cmNsdXN0LCBnZXRfY29udGVudHNfdmZhdG5hbWVfYmxvY2ssCi0JCQkJbXlkYXRhLT5j bHVzdF9zaXplICogbXlkYXRhLT5zZWN0X3NpemUpICE9IDApIHsKLQkJCWRlYnVnKCJFcnJvcjog cmVhZGluZyBkaXJlY3RvcnkgYmxvY2tcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJc2xv dHB0cjIgPSAoZGlyX3Nsb3QgKilnZXRfY29udGVudHNfdmZhdG5hbWVfYmxvY2s7Ci0JCXdoaWxl IChjb3VudGVyID4gMCkgewotCQkJaWYgKCgoc2xvdHB0cjItPmlkICYgfkxBU1RfTE9OR19FTlRS WV9NQVNLKQotCQkJICAgICYgMHhmZikgIT0gY291bnRlcikKLQkJCQlyZXR1cm4gLTE7Ci0JCQlz bG90cHRyMisrOwotCQkJY291bnRlci0tOwotCQl9Ci0KLQkJLyogU2F2ZSB0aGUgcmVhbCBkaXJl Y3RvcnkgZW50cnkgKi8KLQkJcmVhbGRlbnQgPSAoZGlyX2VudHJ5ICopc2xvdHB0cjI7Ci0JCXdo aWxlICgoX191OCAqKXNsb3RwdHIyID4gZ2V0X2NvbnRlbnRzX3ZmYXRuYW1lX2Jsb2NrKSB7Ci0J CQlzbG90cHRyMi0tOwotCQkJc2xvdDJzdHIoc2xvdHB0cjIsIGxfbmFtZSwgJmlkeCk7Ci0JCX0K LQl9IGVsc2UgewotCQkvKiBTYXZlIHRoZSByZWFsIGRpcmVjdG9yeSBlbnRyeSAqLwotCQlyZWFs ZGVudCA9IChkaXJfZW50cnkgKilzbG90cHRyOwotCX0KLQotCWRvIHsKLQkJc2xvdHB0ci0tOwot CQlpZiAoc2xvdDJzdHIoc2xvdHB0ciwgbF9uYW1lLCAmaWR4KSkKLQkJCWJyZWFrOwotCX0gd2hp bGUgKCEoc2xvdHB0ci0+aWQgJiBMQVNUX0xPTkdfRU5UUllfTUFTSykpOwotCi0JbF9uYW1lW2lk eF0gPSAnXDAnOwotCWlmICgqbF9uYW1lID09IERFTEVURURfRkxBRykKLQkJKmxfbmFtZSA9ICdc MCc7Ci0JZWxzZSBpZiAoKmxfbmFtZSA9PSBhUklORykKLQkJKmxfbmFtZSA9IERFTEVURURfRkxB RzsKLQlkb3duY2FzZShsX25hbWUpOwotCi0JLyogUmV0dXJuIHRoZSByZWFsIGRpcmVjdG9yeSBl bnRyeSAqLwotCW1lbWNweShyZXRkZW50LCByZWFsZGVudCwgc2l6ZW9mKGRpcl9lbnRyeSkpOwot Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIENhbGN1bGF0ZSBzaG9ydCBuYW1lIGNoZWNrc3VtICovCiBz dGF0aWMgX191OCBta2Nrc3VtKGNvbnN0IGNoYXIgbmFtZVs4XSwgY29uc3QgY2hhciBleHRbM10p CiB7CkBAIC01NzMsMTY5ICs0NjgsMTMgQEAgc3RhdGljIF9fdTggbWtja3N1bShjb25zdCBjaGFy IG5hbWVbOF0sIGNvbnN0IGNoYXIgZXh0WzNdKQogfQogCiAvKgotICogR2V0IHRoZSBkaXJlY3Rv cnkgZW50cnkgYXNzb2NpYXRlZCB3aXRoICdmaWxlbmFtZScgZnJvbSB0aGUgZGlyZWN0b3J5Ci0g KiBzdGFydGluZyBhdCAnc3RhcnRzZWN0JworICogVE9ETyB0aGVzZSBzaG91bGQgZ28gYXdheSBv bmNlIGZhdF93cml0ZSBpcyByZXdvcmtlZCB0byB1c2UgdGhlCisgKiBkaXJlY3RvcnkgaXRlcmF0 b3IKICAqLwogX191OCBnZXRfZGVudGZyb21kaXJfYmxvY2tbTUFYX0NMVVNUU0laRV0KIAlfX2Fs aWduZWQoQVJDSF9ETUFfTUlOQUxJR04pOwotCi1zdGF0aWMgZGlyX2VudHJ5ICpnZXRfZGVudGZy b21kaXIoZnNkYXRhICpteWRhdGEsIGludCBzdGFydHNlY3QsCi0JCQkJICBjaGFyICpmaWxlbmFt ZSwgZGlyX2VudHJ5ICpyZXRkZW50LAotCQkJCSAgaW50IGRvbHMpCi17Ci0JX191MTYgcHJldmNr c3VtID0gMHhmZmZmOwotCV9fdTMyIGN1cmNsdXN0ID0gU1RBUlQocmV0ZGVudCk7Ci0JaW50IGZp bGVzID0gMCwgZGlycyA9IDA7Ci0KLQlkZWJ1ZygiZ2V0X2RlbnRmcm9tZGlyOiAlc1xuIiwgZmls ZW5hbWUpOwotCi0Jd2hpbGUgKDEpIHsKLQkJZGlyX2VudHJ5ICpkZW50cHRyOwotCi0JCWludCBp OwotCi0JCWlmIChnZXRfY2x1c3RlcihteWRhdGEsIGN1cmNsdXN0LCBnZXRfZGVudGZyb21kaXJf YmxvY2ssCi0JCQkJbXlkYXRhLT5jbHVzdF9zaXplICogbXlkYXRhLT5zZWN0X3NpemUpICE9IDAp IHsKLQkJCWRlYnVnKCJFcnJvcjogcmVhZGluZyBkaXJlY3RvcnkgYmxvY2tcbiIpOwotCQkJcmV0 dXJuIE5VTEw7Ci0JCX0KLQotCQlkZW50cHRyID0gKGRpcl9lbnRyeSAqKWdldF9kZW50ZnJvbWRp cl9ibG9jazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgRElSRU5UU1BFUkNMVVNUOyBpKyspIHsKLQkJ CWNoYXIgc19uYW1lWzE0XSwgbF9uYW1lW1ZGQVRfTUFYTEVOX0JZVEVTXTsKLQotCQkJbF9uYW1l WzBdID0gJ1wwJzsKLQkJCWlmIChkZW50cHRyLT5uYW1lWzBdID09IERFTEVURURfRkxBRykgewot CQkJCWRlbnRwdHIrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICgoZGVudHB0ci0+YXR0 ciAmIEFUVFJfVk9MVU1FKSkgewotCQkJCWlmICh2ZmF0X2VuYWJsZWQgJiYKLQkJCQkgICAgKGRl bnRwdHItPmF0dHIgJiBBVFRSX1ZGQVQpID09IEFUVFJfVkZBVCAmJgotCQkJCSAgICAoZGVudHB0 ci0+bmFtZVswXSAmIExBU1RfTE9OR19FTlRSWV9NQVNLKSkgewotCQkJCQlwcmV2Y2tzdW0gPSAo KGRpcl9zbG90ICopZGVudHB0ciktPmFsaWFzX2NoZWNrc3VtOwotCQkJCQlnZXRfdmZhdG5hbWUo bXlkYXRhLCBjdXJjbHVzdCwKLQkJCQkJCSAgICAgZ2V0X2RlbnRmcm9tZGlyX2Jsb2NrLAotCQkJ CQkJICAgICBkZW50cHRyLCBsX25hbWUpOwotCQkJCQlpZiAoZG9scykgewotCQkJCQkJaW50IGlz ZGlyOwotCQkJCQkJY2hhciBkaXJjOwotCQkJCQkJaW50IGRvaXQgPSAwOwotCi0JCQkJCQlpc2Rp ciA9IChkZW50cHRyLT5hdHRyICYgQVRUUl9ESVIpOwotCi0JCQkJCQlpZiAoaXNkaXIpIHsKLQkJ CQkJCQlkaXJzKys7Ci0JCQkJCQkJZGlyYyA9ICcvJzsKLQkJCQkJCQlkb2l0ID0gMTsKLQkJCQkJ CX0gZWxzZSB7Ci0JCQkJCQkJZGlyYyA9ICcgJzsKLQkJCQkJCQlpZiAobF9uYW1lWzBdICE9IDAp IHsKLQkJCQkJCQkJZmlsZXMrKzsKLQkJCQkJCQkJZG9pdCA9IDE7Ci0JCQkJCQkJfQotCQkJCQkJ fQotCQkJCQkJaWYgKGRvaXQpIHsKLQkJCQkJCQlpZiAoZGlyYyA9PSAnICcpIHsKLQkJCQkJCQkJ cHJpbnRmKCIgJTh1ICAgJXMlY1xuIiwKLQkJCQkJCQkJICAgICAgIEZBVDJDUFUzMihkZW50cHRy LT5zaXplKSwKLQkJCQkJCQkJCWxfbmFtZSwKLQkJCQkJCQkJCWRpcmMpOwotCQkJCQkJCX0gZWxz ZSB7Ci0JCQkJCQkJCXByaW50ZigiICAgICAgICAgICAgJXMlY1xuIiwKLQkJCQkJCQkJCWxfbmFt ZSwKLQkJCQkJCQkJCWRpcmMpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWRlbnRwdHIrKzsK LQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWRlYnVnKCJ2ZmF0bmFtZTogfCVzfFxuIiwg bF9uYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBWb2x1bWUgbGFiZWwgb3IgVkZBVCBlbnRy eSAqLwotCQkJCQlkZW50cHRyKys7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCWlm IChkZW50cHRyLT5uYW1lWzBdID09IDApIHsKLQkJCQlpZiAoZG9scykgewotCQkJCQlwcmludGYo IlxuJWQgZmlsZShzKSwgJWQgZGlyKHMpXG5cbiIsCi0JCQkJCQlmaWxlcywgZGlycyk7Ci0JCQkJ fQotCQkJCWRlYnVnKCJEZW50bmFtZSA9PSBOVUxMIC0gJWRcbiIsIGkpOwotCQkJCXJldHVybiBO VUxMOwotCQkJfQotCQkJaWYgKHZmYXRfZW5hYmxlZCkgewotCQkJCV9fdTggY3N1bSA9IG1rY2tz dW0oZGVudHB0ci0+bmFtZSwgZGVudHB0ci0+ZXh0KTsKLQkJCQlpZiAoZG9scyAmJiBjc3VtID09 IHByZXZja3N1bSkgewotCQkJCQlwcmV2Y2tzdW0gPSAweGZmZmY7Ci0JCQkJCWRlbnRwdHIrKzsK LQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCi0JCQlnZXRfbmFtZShkZW50cHRyLCBzX25h bWUpOwotCQkJaWYgKGRvbHMpIHsKLQkJCQlpbnQgaXNkaXIgPSAoZGVudHB0ci0+YXR0ciAmIEFU VFJfRElSKTsKLQkJCQljaGFyIGRpcmM7Ci0JCQkJaW50IGRvaXQgPSAwOwotCi0JCQkJaWYgKGlz ZGlyKSB7Ci0JCQkJCWRpcnMrKzsKLQkJCQkJZGlyYyA9ICcvJzsKLQkJCQkJZG9pdCA9IDE7Ci0J CQkJfSBlbHNlIHsKLQkJCQkJZGlyYyA9ICcgJzsKLQkJCQkJaWYgKHNfbmFtZVswXSAhPSAwKSB7 Ci0JCQkJCQlmaWxlcysrOwotCQkJCQkJZG9pdCA9IDE7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlp ZiAoZG9pdCkgewotCQkJCQlpZiAoZGlyYyA9PSAnICcpIHsKLQkJCQkJCXByaW50ZigiICU4dSAg ICVzJWNcbiIsCi0JCQkJCQkgICAgICAgRkFUMkNQVTMyKGRlbnRwdHItPnNpemUpLAotCQkJCQkJ CXNfbmFtZSwgZGlyYyk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwcmludGYoIiAgICAgICAgICAg ICVzJWNcbiIsCi0JCQkJCQkJc19uYW1lLCBkaXJjKTsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWRl bnRwdHIrKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKHN0cmNtcChmaWxlbmFtZSwg c19uYW1lKQotCQkJICAgICYmIHN0cmNtcChmaWxlbmFtZSwgbF9uYW1lKSkgewotCQkJCWRlYnVn KCJNaXNtYXRjaDogfCVzfCVzfFxuIiwgc19uYW1lLCBsX25hbWUpOwotCQkJCWRlbnRwdHIrKzsK LQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJbWVtY3B5KHJldGRlbnQsIGRlbnRwdHIsIHNpemVv ZihkaXJfZW50cnkpKTsKLQotCQkJZGVidWcoIkRlbnROYW1lOiAlcyIsIHNfbmFtZSk7Ci0JCQlk ZWJ1ZygiLCBzdGFydDogMHgleCIsIFNUQVJUKGRlbnRwdHIpKTsKLQkJCWRlYnVnKCIsIHNpemU6 ICAweCV4ICVzXG4iLAotCQkJICAgICAgRkFUMkNQVTMyKGRlbnRwdHItPnNpemUpLAotCQkJICAg ICAgKGRlbnRwdHItPmF0dHIgJiBBVFRSX0RJUikgPyAiKERJUikiIDogIiIpOwotCi0JCQlyZXR1 cm4gcmV0ZGVudDsKLQkJfQotCi0JCWN1cmNsdXN0ID0gZ2V0X2ZhdGVudChteWRhdGEsIGN1cmNs dXN0KTsKLQkJaWYgKENIRUNLX0NMVVNUKGN1cmNsdXN0LCBteWRhdGEtPmZhdHNpemUpKSB7Ci0J CQlkZWJ1ZygiY3VyY2x1c3Q6IDB4JXhcbiIsIGN1cmNsdXN0KTsKLQkJCXByaW50ZigiSW52YWxp ZCBGQVQgZW50cnlcbiIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVM TDsKLX0KK19fdTggZG9fZmF0X3JlYWRfYXRfYmxvY2tbTUFYX0NMVVNUU0laRV0KKwlfX2FsaWdu ZWQoQVJDSF9ETUFfTUlOQUxJR04pOwogCiAvKgogICogUmVhZCBib290IHNlY3RvciBhbmQgdm9s dW1lIGluZm8gZnJvbSBhIEZBVCBmaWxlc3lzdGVtCkBAIC04NzksMzc0ICs2MTgsNiBAQCBzdGF0 aWMgaW50IGdldF9mc19pbmZvKGZzZGF0YSAqbXlkYXRhKQogCXJldHVybiAwOwogfQogCi1fX3U4 IGRvX2ZhdF9yZWFkX2F0X2Jsb2NrW01BWF9DTFVTVFNJWkVdCi0JX19hbGlnbmVkKEFSQ0hfRE1B X01JTkFMSUdOKTsKLQotaW50IGRvX2ZhdF9yZWFkX2F0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBs b2ZmX3QgcG9zLCB2b2lkICpidWZmZXIsCi0JCSAgIGxvZmZfdCBtYXhzaXplLCBpbnQgZG9scywg aW50IGRvZ2V0c2l6ZSwgbG9mZl90ICpzaXplKQotewotCWNoYXIgZm5hbWVjb3B5WzIwNDhdOwot CWZzZGF0YSBkYXRhYmxvY2s7Ci0JZnNkYXRhICpteWRhdGEgPSAmZGF0YWJsb2NrOwotCWRpcl9l bnRyeSAqZGVudHB0ciA9IE5VTEw7Ci0JX191MTYgcHJldmNrc3VtID0gMHhmZmZmOwotCWNoYXIg KnN1Ym5hbWUgPSAiIjsKLQlfX3UzMiBjdXJzZWN0OwotCWludCBpZHgsIGlzZGlyID0gMDsKLQlp bnQgZmlsZXMgPSAwLCBkaXJzID0gMDsKLQlpbnQgcmV0ID0gLTE7Ci0JaW50IGZpcnN0dGltZTsK LQlfX3UzMiByb290X2NsdXN0ZXIgPSAwOwotCV9fdTMyIHJlYWRfYmxrOwotCWludCByb290ZGly X3NpemUgPSAwOwotCWludCBidWZmZXJfYmxrX2NudDsKLQlpbnQgZG9fcmVhZDsKLQlfX3U4ICpk aXJfcHRyOwotCi0JaWYgKGdldF9mc19pbmZvKG15ZGF0YSkpCi0JCXJldHVybiAtMTsKLQotCWN1 cnNlY3QgPSBteWRhdGEtPnJvb3RkaXJfc2VjdDsKLQotCS8qICJjd2QiIGlzIGFsd2F5cyB0aGUg cm9vdC4uLiAqLwotCXdoaWxlIChJU0RJUkRFTElNKCpmaWxlbmFtZSkpCi0JCWZpbGVuYW1lKys7 Ci0KLQkvKiBNYWtlIGEgY29weSBvZiB0aGUgZmlsZW5hbWUgYW5kIGNvbnZlcnQgaXQgdG8gbG93 ZXJjYXNlICovCi0Jc3RyY3B5KGZuYW1lY29weSwgZmlsZW5hbWUpOwotCWRvd25jYXNlKGZuYW1l Y29weSk7Ci0KLXJvb3RfcmVwYXJzZToKLQlpZiAoKmZuYW1lY29weSA9PSAnXDAnKSB7Ci0JCWlm ICghZG9scykKLQkJCWdvdG8gZXhpdDsKLQotCQlkb2xzID0gTFNfUk9PVDsKLQl9IGVsc2UgaWYg KChpZHggPSBkaXJkZWxpbShmbmFtZWNvcHkpKSA+PSAwKSB7Ci0JCWlzZGlyID0gMTsKLQkJZm5h bWVjb3B5W2lkeF0gPSAnXDAnOwotCQlzdWJuYW1lID0gZm5hbWVjb3B5ICsgaWR4ICsgMTsKLQot CQkvKiBIYW5kbGUgbXVsdGlwbGUgZGVsaW1pdGVycyAqLwotCQl3aGlsZSAoSVNESVJERUxJTSgq c3VibmFtZSkpCi0JCQlzdWJuYW1lKys7Ci0JfSBlbHNlIGlmIChkb2xzKSB7Ci0JCWlzZGlyID0g MTsKLQl9Ci0KLQlidWZmZXJfYmxrX2NudCA9IDA7Ci0JZmlyc3R0aW1lID0gMTsKLQl3aGlsZSAo MSkgewotCQlpbnQgaTsKLQotCQlpZiAobXlkYXRhLT5mYXRzaXplID09IDMyIHx8IGZpcnN0dGlt ZSkgewotCQkJZGlyX3B0ciA9IGRvX2ZhdF9yZWFkX2F0X2Jsb2NrOwotCQkJZmlyc3R0aW1lID0g MDsKLQkJfSBlbHNlIHsKLQkJCS8qKgotCQkJICogRkFUMTYgc2VjdG9yIGJ1ZmZlciBtb2RpZmlj YXRpb246Ci0JCQkgKiBFYWNoIGxvb3AsIHRoZSBzZWNvbmQgYnVmZmVyZWQgYmxvY2sgaXMgbW92 ZWQgdG8KLQkJCSAqIHRoZSBidWZmZXIgYmVnaW4sIGFuZCB0d28gbmV4dCBzZWN0b3JzIGFyZSBy ZWFkCi0JCQkgKiBuZXh0IHRvIHRoZSBwcmV2aW91c2x5IG1vdmVkIG9uZS4gU28gdGhlIHNlY3Rv cgotCQkJICogYnVmZmVyIGtlZXBzIGFsd2F5cyAzIHNlY3RvcnMgZm9yIGZhdDE2LgotCQkJICog QW5kIHRoZSBjdXJyZW50IHNlY3RvciBpcyB0aGUgYnVmZmVyIHNlY29uZCBzZWN0b3IKLQkJCSAq IGJlc2lkZSB0aGUgImZpcnN0dGltZSIgcmVhZCwgd2hlbiBpdCBpcyB0aGUgZmlyc3Qgb25lLgot CQkJICoKLQkJCSAqIFBSRUZFVENIX0JMT0NLUyBpcyAyIGZvciBGQVQxNiA9PSBsb29wWzA6MV0K LQkJCSAqIG4gPSBjb21wdXRlZCByb290IGRpciBzZWN0b3IKLQkJCSAqIGxvb3AgfCAgY3Vyc2Vj dC0xICB8IGN1cnNlY3QgICAgfCBjdXJzZWN0KzEgIHwKLQkJCSAqICAgMCAgfCAgc2VjdG9yIG4r MCB8IHNlY3RvciBuKzEgfCBub25lICAgICAgIHwKLQkJCSAqICAgMSAgfCAgbm9uZSAgICAgICB8 IHNlY3RvciBuKzAgfCBzZWN0b3IgbisxIHwKLQkJCSAqICAgMCAgfCAgc2VjdG9yIG4rMSB8IHNl Y3RvciBuKzIgfCBzZWN0b3IgbiszIHwKLQkJCSAqICAgMSAgfCAgc2VjdG9yIG4rMyB8IC4uLgot CQkJKi8KLQkJCWRpcl9wdHIgPSAoZG9fZmF0X3JlYWRfYXRfYmxvY2sgKyBteWRhdGEtPnNlY3Rf c2l6ZSk7Ci0JCQltZW1jcHkoZG9fZmF0X3JlYWRfYXRfYmxvY2ssIGRpcl9wdHIsIG15ZGF0YS0+ c2VjdF9zaXplKTsKLQkJfQotCi0JCWRvX3JlYWQgPSAxOwotCi0JCWlmIChteWRhdGEtPmZhdHNp emUgPT0gMzIgJiYgYnVmZmVyX2Jsa19jbnQpCi0JCQlkb19yZWFkID0gMDsKLQotCQlpZiAoZG9f cmVhZCkgewotCQkJcmVhZF9ibGsgPSAobXlkYXRhLT5mYXRzaXplID09IDMyKSA/Ci0JCQkJICAg IG15ZGF0YS0+Y2x1c3Rfc2l6ZSA6IFBSRUZFVENIX0JMT0NLUzsKLQotCQkJZGVidWcoIkZBVCBy ZWFkKHNlY3Q9JWQsIGNudDolZCksIGNsdXN0X3NpemU9JWQsIERJUkVOVFNQRVJCTE9DSz0lemRc biIsCi0JCQkJY3Vyc2VjdCwgcmVhZF9ibGssIG15ZGF0YS0+Y2x1c3Rfc2l6ZSwgRElSRU5UU1BF UkJMT0NLKTsKLQotCQkJaWYgKGRpc2tfcmVhZChjdXJzZWN0LCByZWFkX2JsaywgZGlyX3B0cikg PCAwKSB7Ci0JCQkJZGVidWcoIkVycm9yOiByZWFkaW5nIHJvb3RkaXIgYmxvY2tcbiIpOwotCQkJ CWdvdG8gZXhpdDsKLQkJCX0KLQotCQkJZGVudHB0ciA9IChkaXJfZW50cnkgKilkaXJfcHRyOwot CQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IERJUkVOVFNQRVJCTE9DSzsgaSsrKSB7Ci0JCQljaGFy IHNfbmFtZVsxNF0sIGxfbmFtZVtWRkFUX01BWExFTl9CWVRFU107Ci0JCQlfX3U4IGNzdW07Ci0K LQkJCWxfbmFtZVswXSA9ICdcMCc7Ci0JCQlpZiAoZGVudHB0ci0+bmFtZVswXSA9PSBERUxFVEVE X0ZMQUcpIHsKLQkJCQlkZW50cHRyKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmICh2 ZmF0X2VuYWJsZWQpCi0JCQkJY3N1bSA9IG1rY2tzdW0oZGVudHB0ci0+bmFtZSwgZGVudHB0ci0+ ZXh0KTsKLQotCQkJaWYgKGRlbnRwdHItPmF0dHIgJiBBVFRSX1ZPTFVNRSkgewotCQkJCWlmICh2 ZmF0X2VuYWJsZWQgJiYKLQkJCQkgICAgKGRlbnRwdHItPmF0dHIgJiBBVFRSX1ZGQVQpID09IEFU VFJfVkZBVCAmJgotCQkJCSAgICAoZGVudHB0ci0+bmFtZVswXSAmIExBU1RfTE9OR19FTlRSWV9N QVNLKSkgewotCQkJCQlwcmV2Y2tzdW0gPQotCQkJCQkJKChkaXJfc2xvdCAqKWRlbnRwdHIpLT5h bGlhc19jaGVja3N1bTsKLQotCQkJCQlnZXRfdmZhdG5hbWUobXlkYXRhLAotCQkJCQkJICAgICBy b290X2NsdXN0ZXIsCi0JCQkJCQkgICAgIGRpcl9wdHIsCi0JCQkJCQkgICAgIGRlbnRwdHIsIGxf bmFtZSk7Ci0KLQkJCQkJaWYgKGRvbHMgPT0gTFNfUk9PVCkgewotCQkJCQkJY2hhciBkaXJjOwot CQkJCQkJaW50IGRvaXQgPSAwOwotCQkJCQkJaW50IGlzZGlyID0KLQkJCQkJCQkoZGVudHB0ci0+ YXR0ciAmIEFUVFJfRElSKTsKLQotCQkJCQkJaWYgKGlzZGlyKSB7Ci0JCQkJCQkJZGlycysrOwot CQkJCQkJCWRpcmMgPSAnLyc7Ci0JCQkJCQkJZG9pdCA9IDE7Ci0JCQkJCQl9IGVsc2UgewotCQkJ CQkJCWRpcmMgPSAnICc7Ci0JCQkJCQkJaWYgKGxfbmFtZVswXSAhPSAwKSB7Ci0JCQkJCQkJCWZp bGVzKys7Ci0JCQkJCQkJCWRvaXQgPSAxOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWlmIChk b2l0KSB7Ci0JCQkJCQkJaWYgKGRpcmMgPT0gJyAnKSB7Ci0JCQkJCQkJCXByaW50ZigiICU4dSAg ICVzJWNcbiIsCi0JCQkJCQkJCSAgICAgICBGQVQyQ1BVMzIoZGVudHB0ci0+c2l6ZSksCi0JCQkJ CQkJCQlsX25hbWUsCi0JCQkJCQkJCQlkaXJjKTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQlw cmludGYoIiAgICAgICAgICAgICVzJWNcbiIsCi0JCQkJCQkJCQlsX25hbWUsCi0JCQkJCQkJCQlk aXJjKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlkZW50cHRyKys7Ci0JCQkJCQljb250aW51 ZTsKLQkJCQkJfQotCQkJCQlkZWJ1ZygiUm9vdHZmYXRuYW1lOiB8JXN8XG4iLAotCQkJCQkgICAg ICAgbF9uYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBWb2x1bWUgbGFiZWwgb3IgVkZBVCBl bnRyeSAqLwotCQkJCQlkZW50cHRyKys7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0gZWxz ZSBpZiAoZGVudHB0ci0+bmFtZVswXSA9PSAwKSB7Ci0JCQkJZGVidWcoIlJvb3REZW50bmFtZSA9 PSBOVUxMIC0gJWRcbiIsIGkpOwotCQkJCWlmIChkb2xzID09IExTX1JPT1QpIHsKLQkJCQkJcHJp bnRmKCJcbiVkIGZpbGUocyksICVkIGRpcihzKVxuXG4iLAotCQkJCQkJZmlsZXMsIGRpcnMpOwot CQkJCQlyZXQgPSAwOwotCQkJCX0KLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCQllbHNlIGlmICh2 ZmF0X2VuYWJsZWQgJiYKLQkJCQkgZG9scyA9PSBMU19ST09UICYmIGNzdW0gPT0gcHJldmNrc3Vt KSB7Ci0JCQkJcHJldmNrc3VtID0gMHhmZmZmOwotCQkJCWRlbnRwdHIrKzsKLQkJCQljb250aW51 ZTsKLQkJCX0KLQotCQkJZ2V0X25hbWUoZGVudHB0ciwgc19uYW1lKTsKLQotCQkJaWYgKGRvbHMg PT0gTFNfUk9PVCkgewotCQkJCWludCBpc2RpciA9IChkZW50cHRyLT5hdHRyICYgQVRUUl9ESVIp OwotCQkJCWNoYXIgZGlyYzsKLQkJCQlpbnQgZG9pdCA9IDA7Ci0KLQkJCQlpZiAoaXNkaXIpIHsK LQkJCQkJZGlyYyA9ICcvJzsKLQkJCQkJaWYgKHNfbmFtZVswXSAhPSAwKSB7Ci0JCQkJCQlkaXJz Kys7Ci0JCQkJCQlkb2l0ID0gMTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCWRpcmMgPSAn ICc7Ci0JCQkJCWlmIChzX25hbWVbMF0gIT0gMCkgewotCQkJCQkJZmlsZXMrKzsKLQkJCQkJCWRv aXQgPSAxOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChkb2l0KSB7Ci0JCQkJCWlmIChkaXJjID09 ICcgJykgewotCQkJCQkJcHJpbnRmKCIgJTh1ICAgJXMlY1xuIiwKLQkJCQkJCSAgICAgICBGQVQy Q1BVMzIoZGVudHB0ci0+c2l6ZSksCi0JCQkJCQkJc19uYW1lLCBkaXJjKTsKLQkJCQkJfSBlbHNl IHsKLQkJCQkJCXByaW50ZigiICAgICAgICAgICAgJXMlY1xuIiwKLQkJCQkJCQlzX25hbWUsIGRp cmMpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWRlbnRwdHIrKzsKLQkJCQljb250aW51ZTsKLQkJCX0K LQotCQkJaWYgKHN0cmNtcChmbmFtZWNvcHksIHNfbmFtZSkKLQkJCSAgICAmJiBzdHJjbXAoZm5h bWVjb3B5LCBsX25hbWUpKSB7Ci0JCQkJZGVidWcoIlJvb3RNaXNtYXRjaDogfCVzfCVzfFxuIiwg c19uYW1lLAotCQkJCSAgICAgICBsX25hbWUpOwotCQkJCWRlbnRwdHIrKzsKLQkJCQljb250aW51 ZTsKLQkJCX0KLQotCQkJaWYgKGlzZGlyICYmICEoZGVudHB0ci0+YXR0ciAmIEFUVFJfRElSKSkK LQkJCQlnb3RvIGV4aXQ7Ci0KLQkJCWRlYnVnKCJSb290TmFtZTogJXMiLCBzX25hbWUpOwotCQkJ ZGVidWcoIiwgc3RhcnQ6IDB4JXgiLCBTVEFSVChkZW50cHRyKSk7Ci0JCQlkZWJ1ZygiLCBzaXpl OiAgMHgleCAlc1xuIiwKLQkJCSAgICAgICBGQVQyQ1BVMzIoZGVudHB0ci0+c2l6ZSksCi0JCQkg ICAgICAgaXNkaXIgPyAiKERJUikiIDogIiIpOwotCi0JCQlnb3RvIHJvb3RkaXJfZG9uZTsJLyog V2UgZ290IGEgbWF0Y2ggKi8KLQkJfQotCQlkZWJ1ZygiRU5EIExPT1A6IGJ1ZmZlcl9ibGtfY250 PSVkICAgY2x1c3Rfc2l6ZT0lZFxuIiwgYnVmZmVyX2Jsa19jbnQsCi0JCSAgICAgICBteWRhdGEt PmNsdXN0X3NpemUpOwotCi0JCS8qCi0JCSAqIE9uIEZBVDMyIHdlIG11c3QgZmV0Y2ggdGhlIEZB VCBlbnRyaWVzIGZvciB0aGUgbmV4dAotCQkgKiByb290IGRpcmVjdG9yeSBjbHVzdGVycyB3aGVu IGEgY2x1c3RlciBoYXMgYmVlbgotCQkgKiBjb21wbGV0ZWx5IHByb2Nlc3NlZC4KLQkJICovCi0J CSsrYnVmZmVyX2Jsa19jbnQ7Ci0JCWludCByb290ZGlyX2VuZCA9IDA7Ci0JCWlmIChteWRhdGEt PmZhdHNpemUgPT0gMzIpIHsKLQkJCWlmIChidWZmZXJfYmxrX2NudCA9PSBteWRhdGEtPmNsdXN0 X3NpemUpIHsKLQkJCQlpbnQgbnh0c2VjdCA9IDA7Ci0JCQkJaW50IG54dF9jbHVzdCA9IDA7Ci0K LQkJCQlueHRfY2x1c3QgPSBnZXRfZmF0ZW50KG15ZGF0YSwgcm9vdF9jbHVzdGVyKTsKLQkJCQly b290ZGlyX2VuZCA9IENIRUNLX0NMVVNUKG54dF9jbHVzdCwgMzIpOwotCi0JCQkJbnh0c2VjdCA9 IG15ZGF0YS0+ZGF0YV9iZWdpbiArCi0JCQkJCShueHRfY2x1c3QgKiBteWRhdGEtPmNsdXN0X3Np emUpOwotCi0JCQkJcm9vdF9jbHVzdGVyID0gbnh0X2NsdXN0OwotCi0JCQkJY3Vyc2VjdCA9IG54 dHNlY3Q7Ci0JCQkJYnVmZmVyX2Jsa19jbnQgPSAwOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYg KGJ1ZmZlcl9ibGtfY250ID09IFBSRUZFVENIX0JMT0NLUykKLQkJCQlidWZmZXJfYmxrX2NudCA9 IDA7Ci0KLQkJCXJvb3RkaXJfZW5kID0gKCsrY3Vyc2VjdCAtIG15ZGF0YS0+cm9vdGRpcl9zZWN0 ID49Ci0JCQkJICAgICAgIHJvb3RkaXJfc2l6ZSk7Ci0JCX0KLQotCQkvKiBJZiBlbmQgb2Ygcm9v dGRpciByZWFjaGVkICovCi0JCWlmIChyb290ZGlyX2VuZCkgewotCQkJaWYgKGRvbHMgPT0gTFNf Uk9PVCkgewotCQkJCXByaW50ZigiXG4lZCBmaWxlKHMpLCAlZCBkaXIocylcblxuIiwKLQkJCQkg ICAgICAgZmlsZXMsIGRpcnMpOwotCQkJCSpzaXplID0gMDsKLQkJCX0KLQkJCWdvdG8gZXhpdDsK LQkJfQotCX0KLXJvb3RkaXJfZG9uZToKLQotCWZpcnN0dGltZSA9IDE7Ci0KLQl3aGlsZSAoaXNk aXIpIHsKLQkJaW50IHN0YXJ0c2VjdCA9IG15ZGF0YS0+ZGF0YV9iZWdpbgotCQkJKyBTVEFSVChk ZW50cHRyKSAqIG15ZGF0YS0+Y2x1c3Rfc2l6ZTsKLQkJZGlyX2VudHJ5IGRlbnQ7Ci0JCWNoYXIg Km5leHRuYW1lID0gTlVMTDsKLQotCQlkZW50ID0gKmRlbnRwdHI7Ci0JCWRlbnRwdHIgPSAmZGVu dDsKLQotCQlpZHggPSBkaXJkZWxpbShzdWJuYW1lKTsKLQotCQlpZiAoaWR4ID49IDApIHsKLQkJ CXN1Ym5hbWVbaWR4XSA9ICdcMCc7Ci0JCQluZXh0bmFtZSA9IHN1Ym5hbWUgKyBpZHggKyAxOwot CQkJLyogSGFuZGxlIG11bHRpcGxlIGRlbGltaXRlcnMgKi8KLQkJCXdoaWxlIChJU0RJUkRFTElN KCpuZXh0bmFtZSkpCi0JCQkJbmV4dG5hbWUrKzsKLQkJCWlmIChkb2xzICYmICpuZXh0bmFtZSA9 PSAnXDAnKQotCQkJCWZpcnN0dGltZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZG9scyAmJiBm aXJzdHRpbWUpIHsKLQkJCQlmaXJzdHRpbWUgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpc2RpciA9 IDA7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZ2V0X2RlbnRmcm9tZGlyKG15ZGF0YSwgc3RhcnRzZWN0 LCBzdWJuYW1lLCBkZW50cHRyLAotCQkJCSAgICAgaXNkaXIgPyAwIDogZG9scykgPT0gTlVMTCkg ewotCQkJaWYgKGRvbHMgJiYgIWlzZGlyKQotCQkJCSpzaXplID0gMDsKLQkJCWdvdG8gZXhpdDsK LQkJfQotCi0JCWlmIChpc2RpciAmJiAhKGRlbnRwdHItPmF0dHIgJiBBVFRSX0RJUikpCi0JCQln b3RvIGV4aXQ7Ci0KLQkJLyoKLQkJICogSWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgZGlyZWN0b3J5 LCBhbmQgZm91bmQgYSBkaXJlY3RvcnkKLQkJICogdHlwZSBlbnRyeSwgYW5kIHRoZSBlbnRyeSBp cyBmb3IgdGhlIHJvb3QgZGlyZWN0b3J5IChhcwotCQkgKiBkZW5vdGVkIGJ5IGEgY2x1c3RlciBu dW1iZXIgb2YgMCksIGp1bXAgYmFjayB0byB0aGUgc3RhcnQKLQkJICogb2YgdGhlIGZ1bmN0aW9u LCBzaW5jZSBhdCBsZWFzdCBvbiBGQVQxMi8xNiwgdGhlIHJvb3QgZGlyCi0JCSAqIGxpdmVzIGlu IGEgaGFyZC1jb2RlZCBsb2NhdGlvbiBhbmQgbmVlZHMgc3BlY2lhbCBoYW5kbGluZwotCQkgKiB0 byBwYXJzZSwgcmF0aGVyIHRoYW4gc2ltcGx5IGZvbGxvd2luZyB0aGUgY2x1c3RlciBsaW5rZWQK LQkJICogbGlzdCBpbiB0aGUgRkFULCBsaWtlIG90aGVyIGRpcmVjdG9yaWVzLgotCQkgKi8KLQkJ aWYgKGlzZGlyICYmIChkZW50cHRyLT5hdHRyICYgQVRUUl9ESVIpICYmICFTVEFSVChkZW50cHRy KSkgewotCQkJLyoKLQkJCSAqIE1vZGlmeSB0aGUgZmlsZW5hbWUgdG8gcmVtb3ZlIHRoZSBwcmVm aXggdGhhdCBnZXRzCi0JCQkgKiBiYWNrIHRvIHRoZSByb290IGRpcmVjdG9yeSwgc28gdGhlIGlu aXRpYWwgcm9vdCBkaXIKLQkJCSAqIHBhcnNpbmcgY29kZSBjYW4gY29udGludWUgZnJvbSB3aGVy ZSB3ZSBhcmUgd2l0aG91dAotCQkJICogY29uZnVzaW9uLgotCQkJICovCi0JCQlzdHJjcHkoZm5h bWVjb3B5LCBuZXh0bmFtZSA/OiAiIik7Ci0JCQkvKgotCQkJICogU2V0IHVwIHN0YXRlIHRoZSBz YW1lIHdheSBhcyB0aGUgZnVuY3Rpb24gZG9lcyB3aGVuCi0JCQkgKiBmaXJzdCBzdGFydGVkLiBU aGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgcm9vdCBkaXIKLQkJCSAqIHBhcnNpbmcgY29kZSBvcGVy YXRlcyBpbiBpdHMgZXhwZWN0ZWQgZW52aXJvbm1lbnQuCi0JCQkgKi8KLQkJCXN1Ym5hbWUgPSAi IjsKLQkJCWN1cnNlY3QgPSBteWRhdGEtPnJvb3RkaXJfc2VjdDsKLQkJCWlzZGlyID0gMDsKLQkJ CWdvdG8gcm9vdF9yZXBhcnNlOwotCQl9Ci0KLQkJaWYgKGlkeCA+PSAwKQotCQkJc3VibmFtZSA9 IG5leHRuYW1lOwotCX0KLQotCWlmIChkb2dldHNpemUpIHsKLQkJKnNpemUgPSBGQVQyQ1BVMzIo ZGVudHB0ci0+c2l6ZSk7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gZ2V0X2NvbnRl bnRzKG15ZGF0YSwgZGVudHB0ciwgcG9zLCBidWZmZXIsIG1heHNpemUsIHNpemUpOwotCX0KLQlk ZWJ1ZygiU2l6ZTogJXUsIGdvdDogJWxsdVxuIiwgRkFUMkNQVTMyKGRlbnRwdHItPnNpemUpLCAq c2l6ZSk7Ci0KLWV4aXQ6Ci0JZnJlZShteWRhdGEtPmZhdGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0K LQogCiAvKgogICogRGlyZWN0b3J5IGl0ZXJhdG9yLCB0byBzaW1wbGlmeSBmaWxlc3lzdGVtIHRy YXZlcnNhbApAQCAtMTU5NSwxMiArOTY2LDYgQEAgc3RhdGljIGludCBmYXRfaXRyX3Jlc29sdmUo ZmF0X2l0ciAqaXRyLCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCB0eXBlKQogCXJldHVybiAt RU5PRU5UOwogfQogCi1pbnQgZG9fZmF0X3JlYWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQg KmJ1ZmZlciwgbG9mZl90IG1heHNpemUsIGludCBkb2xzLAotCQlsb2ZmX3QgKmFjdHJlYWQpCi17 Ci0JcmV0dXJuIGRvX2ZhdF9yZWFkX2F0KGZpbGVuYW1lLCAwLCBidWZmZXIsIG1heHNpemUsIGRv bHMsIDAsIGFjdHJlYWQpOwotfQotCiBpbnQgZmlsZV9mYXRfZGV0ZWN0ZnModm9pZCkKIHsKIAli b290X3NlY3RvciBiczsKQEAgLTE2NjUsMzEgKzEwMzAsOTYgQEAgaW50IGZpbGVfZmF0X2RldGVj dGZzKHZvaWQpCiAKIGludCBmaWxlX2ZhdF9scyhjb25zdCBjaGFyICpkaXIpCiB7Ci0JbG9mZl90 IHNpemU7CisJZnNkYXRhIGZzZGF0YTsKKwlmYXRfaXRyIGl0cmJsb2NrLCAqaXRyID0gJml0cmJs b2NrOworCWludCBmaWxlcyA9IDAsIGRpcnMgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBmYXRf aXRyX3Jvb3QoaXRyLCAmZnNkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gZmF0X2l0cl9yZXNvbHZlKGl0ciwgZGlyLCBUWVBFX0RJUik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXdoaWxlIChmYXRfaXRyX25leHQoaXRyKSkgeworCQlpZiAoZmF0X2l0cl9p c2RpcihpdHIpKSB7CisJCQlwcmludGYoIiAgICAgICAgICAgICVzL1xuIiwgaXRyLT5uYW1lKTsK KwkJCWRpcnMrKzsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiICU4dSAgICVzXG4iLAorCQkJICAg ICAgIEZBVDJDUFUzMihpdHItPmRlbnQtPnNpemUpLAorCQkJICAgICAgIGl0ci0+bmFtZSk7CisJ CQlmaWxlcysrOworCQl9CisJfQogCi0JcmV0dXJuIGRvX2ZhdF9yZWFkKGRpciwgTlVMTCwgMCwg TFNfWUVTLCAmc2l6ZSk7CisJcHJpbnRmKCJcbiVkIGZpbGUocyksICVkIGRpcihzKVxuXG4iLCBm aWxlcywgZGlycyk7CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IGZhdF9leGlzdHMoY29uc3QgY2hh ciAqZmlsZW5hbWUpCiB7CisJZnNkYXRhIGZzZGF0YTsKKwlmYXRfaXRyIGl0cmJsb2NrLCAqaXRy ID0gJml0cmJsb2NrOwogCWludCByZXQ7Ci0JbG9mZl90IHNpemU7CiAKLQlyZXQgPSBkb19mYXRf cmVhZF9hdChmaWxlbmFtZSwgMCwgTlVMTCwgMCwgTFNfTk8sIDEsICZzaXplKTsKKwlyZXQgPSBm YXRfaXRyX3Jvb3QoaXRyLCAmZnNkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKworCXJl dCA9IGZhdF9pdHJfcmVzb2x2ZShpdHIsIGZpbGVuYW1lLCBUWVBFX0FOWSk7CiAJcmV0dXJuIHJl dCA9PSAwOwogfQogCiBpbnQgZmF0X3NpemUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGxvZmZfdCAq c2l6ZSkKIHsKLQlyZXR1cm4gZG9fZmF0X3JlYWRfYXQoZmlsZW5hbWUsIDAsIE5VTEwsIDAsIExT X05PLCAxLCBzaXplKTsKKwlmc2RhdGEgZnNkYXRhOworCWZhdF9pdHIgaXRyYmxvY2ssICppdHIg PSAmaXRyYmxvY2s7CisJaW50IHJldDsKKworCXJldCA9IGZhdF9pdHJfcm9vdChpdHIsICZmc2Rh dGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBmYXRfaXRyX3Jlc29sdmUo aXRyLCBmaWxlbmFtZSwgVFlQRV9GSUxFKTsKKwlpZiAocmV0KSB7CisJCS8qCisJCSAqIERpcmVj dG9yaWVzIGRvbid0IGhhdmUgc2l6ZSwgYnV0IGZzX3NpemUoKSBpcyBub3QKKwkJICogZXhwZWN0 ZWQgdG8gZmFpbCBpZiBwYXNzZWQgYSBkaXJlY3RvcnkgcGF0aDoKKwkJICovCisJCWZhdF9pdHJf cm9vdChpdHIsICZmc2RhdGEpOworCQlpZiAoIWZhdF9pdHJfcmVzb2x2ZShpdHIsIGZpbGVuYW1l LCBUWVBFX0RJUikpIHsKKwkJCSpzaXplID0gMDsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVy biByZXQ7CisJfQorCisJKnNpemUgPSBGQVQyQ1BVMzIoaXRyLT5kZW50LT5zaXplKTsKKworCXJl dHVybiAwOwogfQogCiBpbnQgZmlsZV9mYXRfcmVhZF9hdChjb25zdCBjaGFyICpmaWxlbmFtZSwg bG9mZl90IHBvcywgdm9pZCAqYnVmZmVyLAogCQkgICAgIGxvZmZfdCBtYXhzaXplLCBsb2ZmX3Qg KmFjdHJlYWQpCiB7CisJZnNkYXRhIGZzZGF0YTsKKwlmYXRfaXRyIGl0cmJsb2NrLCAqaXRyID0g Jml0cmJsb2NrOworCWludCByZXQ7CisKKwlyZXQgPSBmYXRfaXRyX3Jvb3QoaXRyLCAmZnNkYXRh KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZmF0X2l0cl9yZXNvbHZlKGl0 ciwgZmlsZW5hbWUsIFRZUEVfRklMRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXBy aW50ZigicmVhZGluZyAlc1xuIiwgZmlsZW5hbWUpOwotCXJldHVybiBkb19mYXRfcmVhZF9hdChm aWxlbmFtZSwgcG9zLCBidWZmZXIsIG1heHNpemUsIExTX05PLCAwLAotCQkJICAgICAgYWN0cmVh ZCk7CisJcmV0dXJuIGdldF9jb250ZW50cygmZnNkYXRhLCBpdHItPmRlbnQsIHBvcywgYnVmZmVy LCBtYXhzaXplLCBhY3RyZWFkKTsKIH0KIAogaW50IGZpbGVfZmF0X3JlYWQoY29uc3QgY2hhciAq ZmlsZW5hbWUsIHZvaWQgKmJ1ZmZlciwgaW50IG1heHNpemUpCmRpZmYgLS1naXQgYS9pbmNsdWRl L2ZhdC5oIGIvaW5jbHVkZS9mYXQuaAppbmRleCAyMWJiNjY2NmNmLi4xOGQ4OTgxYzQ4IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2ZhdC5oCisrKyBiL2luY2x1ZGUvZmF0LmgKQEAgLTU4LDEyICs1OCw2 IEBACiAgKi8KICNkZWZpbmUgTEFTVF9MT05HX0VOVFJZX01BU0sJMHg0MAogCi0vKiBGbGFncyB0 ZWxsaW5nIHdoZXRoZXIgd2Ugc2hvdWxkIHJlYWQgYSBmaWxlIG9yIGxpc3QgYSBkaXJlY3Rvcnkg Ki8KLSNkZWZpbmUgTFNfTk8JCTAKLSNkZWZpbmUgTFNfWUVTCQkxCi0jZGVmaW5lIExTX0RJUgkJ MQotI2RlZmluZSBMU19ST09UCQkyCi0KICNkZWZpbmUgSVNESVJERUxJTShjKQkoKGMpID09ICcv JyB8fCAoYykgPT0gJ1xcJykKIAogI2RlZmluZSBGU1RZUEVfTk9ORQkoLTEpCi0tIAoyLjEzLjUK Cg==