From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Garver Subject: [PATCH net-next v21 3/4] openvswitch: 802.1AD Flow handling, actions, vlan parsing, netlink attributes Date: Thu, 1 Sep 2016 16:45:26 -0400 Message-ID: <1472762727-25844-4-git-send-email-e@erig.me> References: <1472762727-25844-1-git-send-email-e@erig.me> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, Thomas F Herbert To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Return-path: In-Reply-To: <1472762727-25844-1-git-send-email-e-jCUjZXiOoP8@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-yBygre7rU0TnMu66kgdUjQ@public.gmane.org Sender: "dev" List-Id: netdev.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIDgwMi4xYWQgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIHB1c2ggYW5k IHBvcCBkb3VibGUKdGFnZ2VkIHZsYW5zLiBBZGQgc3VwcG9ydCBmb3IgODAyLjFhZCB0byBuZXRs aW5rIHBhcnNpbmcgYW5kIGZsb3cKY29udmVyc2lvbi4gVXNlcyBkb3VibGUgbmVzdGVkIGVuY2Fw IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IGRvdWJsZQp0YWdnZWQgdmxhbi4gSW5uZXIgVFBJRCBl bmNvZGVkIGFsb25nIHdpdGggY3RjaSBpbiBuZXN0ZWQgYXR0cmlidXRlcy4KClRoaXMgaXMgYmFz ZWQgb24gVGhvbWFzIEYgSGVyYmVydCdzIG9yaWdpbmFsIHYyMCBwYXRjaC4gSSBtYWRlIHNvbWUK c21hbGwgY2xlYW4gdXBzIGFuZCBidWcgZml4ZXMuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgRiBI ZXJiZXJ0IDx0aG9tYXNmaGVyYmVydEBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IEVyaWMgR2Fy dmVyIDxlQGVyaWcubWU+Ci0tLQogbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyAgICAgIHwgIDE2 ICstLQogbmV0L29wZW52c3dpdGNoL2Zsb3cuYyAgICAgICAgIHwgIDY0ICsrKysrKysrLS0tLQog bmV0L29wZW52c3dpdGNoL2Zsb3cuaCAgICAgICAgIHwgICA4ICstCiBuZXQvb3BlbnZzd2l0Y2gv Zmxvd19uZXRsaW5rLmMgfCAyMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0KIG5ldC9vcGVudnN3aXRjaC92cG9ydC5jICAgICAgICB8ICAgNyArLQogNSBmaWxlcyBj aGFuZ2VkLCAyMzUgaW5zZXJ0aW9ucygrKSwgODcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv bmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKaW5k ZXggY2E5MWZjMzNmOGE5Li40ZmU5MDMyYjExNjAgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRj aC9hY3Rpb25zLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwpAQCAtMjQ2LDIwICsy NDYsMjQgQEAgc3RhdGljIGludCBwb3BfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg c3dfZmxvd19rZXkgKmtleSkKIAlpbnQgZXJyOwogCiAJZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7 Ci0JaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCisJaWYgKHNrYl92bGFuX3RhZ19wcmVz ZW50KHNrYikpIHsKIAkJaW52YWxpZGF0ZV9mbG93X2tleShrZXkpOwotCWVsc2UKLQkJa2V5LT5l dGgudGNpID0gMDsKKwl9IGVsc2UgeworCQlrZXktPmV0aC52bGFuLnRjaSA9IDA7CisJCWtleS0+ ZXRoLnZsYW4udHBpZCA9IDA7CisJfQogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcHVz aF92bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LAogCQkg ICAgIGNvbnN0IHN0cnVjdCBvdnNfYWN0aW9uX3B1c2hfdmxhbiAqdmxhbikKIHsKLQlpZiAoc2ti X3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkg ewogCQlpbnZhbGlkYXRlX2Zsb3dfa2V5KGtleSk7Ci0JZWxzZQotCQlrZXktPmV0aC50Y2kgPSB2 bGFuLT52bGFuX3RjaTsKKwl9IGVsc2UgeworCQlrZXktPmV0aC52bGFuLnRjaSA9IHZsYW4tPnZs YW5fdGNpOworCQlrZXktPmV0aC52bGFuLnRwaWQgPSB2bGFuLT52bGFuX3RwaWQ7CisJfQogCXJl dHVybiBza2Jfdmxhbl9wdXNoKHNrYiwgdmxhbi0+dmxhbl90cGlkLAogCQkJICAgICBudG9ocyh2 bGFuLT52bGFuX3RjaSkgJiB+VkxBTl9UQUdfUFJFU0VOVCk7CiB9CmRpZmYgLS1naXQgYS9uZXQv b3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwppbmRleCAwZWExMjhl ZWVhYjIuLjEzZjZlYmRmMzc5YiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwor KysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCkBAIC0zMDIsMjQgKzMwMiw1NiBAQCBzdGF0aWMg Ym9vbCBpY21wNmhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJCSAgc2l6ZW9mKHN0cnVj dCBpY21wNmhkcikpOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3ZsYW4oc3RydWN0IHNrX2J1ZmYg KnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCisvKioKKyAqIFBhcnNlIHZsYW4gdGFnIGZy b20gdmxhbiBoZWFkZXIuCisgKiBSZXR1cm5zIEVSUk9SIG9uIG1lbW9yeSBlcnJvci4KKyAqIFJl dHVybnMgMCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXZsYW4gb3IgaW5jb21wbGV0ZSBwYWNrZXQu CisgKiBSZXR1cm5zIDEgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBhcnNpbmcgdmxhbiB0YWcuCisgKi8K K3N0YXRpYyBpbnQgcGFyc2Vfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZs YW5faGVhZCAqdmxhbikKIHsKLQlzdHJ1Y3QgcXRhZ19wcmVmaXggewotCQlfX2JlMTYgZXRoX3R5 cGU7IC8qIEVUSF9QXzgwMjFRICovCi0JCV9fYmUxNiB0Y2k7Ci0JfTsKLQlzdHJ1Y3QgcXRhZ19w cmVmaXggKnFwOworCXN0cnVjdCB2bGFuX2hlYWQgKnFwID0gKHN0cnVjdCB2bGFuX2hlYWQgKilz a2ItPmRhdGE7CiAKLQlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IHF0YWdf cHJlZml4KSArIHNpemVvZihfX2JlMTYpKSkKKwlpZiAobGlrZWx5KCFldGhfdHlwZV92bGFuKHFw LT50cGlkKSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNr Yiwgc2l6ZW9mKHN0cnVjdCBxdGFnX3ByZWZpeCkgKwotCQkJCQkgc2l6ZW9mKF9fYmUxNikpKSkK KwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IHZsYW5faGVhZCkgKyBzaXpl b2YoX19iZTE2KSkpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxs KHNrYiwgc2l6ZW9mKHN0cnVjdCB2bGFuX2hlYWQpICsKKwkJCQkgc2l6ZW9mKF9fYmUxNikpKSkK IAkJcmV0dXJuIC1FTk9NRU07CiAKLQlxcCA9IChzdHJ1Y3QgcXRhZ19wcmVmaXggKikgc2tiLT5k YXRhOwotCWtleS0+ZXRoLnRjaSA9IHFwLT50Y2kgfCBodG9ucyhWTEFOX1RBR19QUkVTRU5UKTsK LQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBxdGFnX3ByZWZpeCkpOworCXZsYW4tPnRj aSA9IHFwLT50Y2kgfCBodG9ucyhWTEFOX1RBR19QUkVTRU5UKTsKKwl2bGFuLT50cGlkID0gcXAt PnRwaWQ7CisKKwlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB2bGFuX2hlYWQpKTsKKwly ZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZV92bGFuKHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQoreworCWludCByZXM7CisKKwlrZXktPmV0aC52bGFu LnRjaSA9IDA7CisJa2V5LT5ldGgudmxhbi50cGlkID0gMDsKKwlrZXktPmV0aC5jdmxhbi50Y2kg PSAwOworCWtleS0+ZXRoLmN2bGFuLnRwaWQgPSAwOworCisJaWYgKGxpa2VseShza2Jfdmxhbl90 YWdfcHJlc2VudChza2IpKSkgeworCQlrZXktPmV0aC52bGFuLnRjaSA9IGh0b25zKHNrYi0+dmxh bl90Y2kpOworCQlrZXktPmV0aC52bGFuLnRwaWQgPSBza2ItPnZsYW5fcHJvdG87CisJfSBlbHNl IHsKKwkJLyogUGFyc2Ugb3V0ZXIgdmxhbiB0YWcgaW4gdGhlIG5vbi1hY2NlbGVyYXRlZCBjYXNl LiAqLworCQlyZXMgPSBwYXJzZV92bGFuX3RhZyhza2IsICZrZXktPmV0aC52bGFuKTsKKwkJaWYg KHJlcyA8PSAwKQorCQkJcmV0dXJuIHJlczsKKwl9CisKKwkvKiBQYXJzZSBpbm5lciB2bGFuIHRh Zy4gKi8KKwlyZXMgPSBwYXJzZV92bGFuX3RhZyhza2IsICZrZXktPmV0aC5jdmxhbik7CisJaWYg KHJlcyA8PSAwKQorCQlyZXR1cm4gcmVzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODAsMTIgKzUx Miw4IEBAIHN0YXRpYyBpbnQga2V5X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0 IHN3X2Zsb3dfa2V5ICprZXkpCiAJICogdXBkYXRlIHNrYi0+Y3N1bSBoZXJlLgogCSAqLwogCi0J a2V5LT5ldGgudGNpID0gMDsKLQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKLQkJa2V5 LT5ldGgudGNpID0gaHRvbnMoc2tiLT52bGFuX3RjaSk7Ci0JZWxzZSBpZiAoZXRoLT5oX3Byb3Rv ID09IGh0b25zKEVUSF9QXzgwMjFRKSkKLQkJaWYgKHVubGlrZWx5KHBhcnNlX3ZsYW4oc2tiLCBr ZXkpKSkKLQkJCXJldHVybiAtRU5PTUVNOworCWlmICh1bmxpa2VseShwYXJzZV92bGFuKHNrYiwg a2V5KSkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJa2V5LT5ldGgudHlwZSA9IHBhcnNlX2V0aGVy dHlwZShza2IpOwogCWlmICh1bmxpa2VseShrZXktPmV0aC50eXBlID09IGh0b25zKDApKSkKZGlm ZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmggYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5o CmluZGV4IDAzMzc4ZTc1YTY3Yy4uMTU2YTMwMjljMTdiIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZz d2l0Y2gvZmxvdy5oCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmgKQEAgLTUwLDYgKzUwLDEx IEBAIHN0cnVjdCBvdnNfdHVubmVsX2luZm8gewogCXN0cnVjdCBtZXRhZGF0YV9kc3QJKnR1bl9k c3Q7CiB9OwogCitzdHJ1Y3Qgdmxhbl9oZWFkIHsKKwlfX2JlMTYgdHBpZDsgLyogVmxhbiB0eXBl LiBHZW5lcmFsbHkgODAyLjFxIG9yIDgwMi4xYWQuKi8KKwlfX2JlMTYgdGNpOyAgLyogMCBpZiBu byBWTEFOLCBWTEFOX1RBR19QUkVTRU5UIHNldCBvdGhlcndpc2UuICovCit9OworCiAjZGVmaW5l IE9WU19TV19GTE9XX0tFWV9NRVRBREFUQV9TSVpFCQkJXAogCShvZmZzZXRvZihzdHJ1Y3Qgc3df Zmxvd19rZXksIHJlY2lyY19pZCkgKwlcCiAJRklFTERfU0laRU9GKHN0cnVjdCBzd19mbG93X2tl eSwgcmVjaXJjX2lkKSkKQEAgLTY5LDcgKzc0LDggQEAgc3RydWN0IHN3X2Zsb3dfa2V5IHsKIAlz dHJ1Y3QgewogCQl1OCAgICAgc3JjW0VUSF9BTEVOXTsJLyogRXRoZXJuZXQgc291cmNlIGFkZHJl c3MuICovCiAJCXU4ICAgICBkc3RbRVRIX0FMRU5dOwkvKiBFdGhlcm5ldCBkZXN0aW5hdGlvbiBh ZGRyZXNzLiAqLwotCQlfX2JlMTYgdGNpOwkJLyogMCBpZiBubyBWTEFOLCBWTEFOX1RBR19QUkVT RU5UIHNldCBvdGhlcndpc2UuICovCisJCXN0cnVjdCB2bGFuX2hlYWQgdmxhbjsKKwkJc3RydWN0 IHZsYW5faGVhZCBjdmxhbjsKIAkJX19iZTE2IHR5cGU7CQkvKiBFdGhlcm5ldCBmcmFtZSB0eXBl LiAqLwogCX0gZXRoOwogCXVuaW9uIHsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93 X25ldGxpbmsuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYwppbmRleCBjNzhhNmEx NDc2ZmIuLmZiZTllMGU0NzkyZCAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0 bGluay5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYwpAQCAtOTM1LDcgKzkz NSw3IEBAIHN0YXRpYyBpbnQgb3ZzX2tleV9mcm9tX25sYXR0cnMoc3RydWN0IG5ldCAqbmV0LCBz dHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0J CVNXX0ZMT1dfS0VZX1BVVChtYXRjaCwgZXRoLnRjaSwgdGNpLCBpc19tYXNrKTsKKwkJU1dfRkxP V19LRVlfUFVUKG1hdGNoLCBldGgudmxhbi50Y2ksIHRjaSwgaXNfbWFzayk7CiAJCWF0dHJzICY9 IH4oMSA8PCBPVlNfS0VZX0FUVFJfVkxBTik7CiAJfQogCkBAIC0xMTYwLDYgKzExNjAsMTI1IEBA IHN0YXRpYyB2b2lkIG1hc2tfc2V0X25sYXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCB1OCB2YWwp CiAJbmxhdHRyX3NldChhdHRyLCB2YWwsIG92c19rZXlfbGVucyk7CiB9CiAKK3N0YXRpYyBpbnQg ZW5jb2RlX3ZsYW5fZnJvbV9ubGF0dHJzKHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCwKKwkJ CQkgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYVtdLAorCQkJCSAgICBib29sIGlzX21hc2ssIGJv b2wgaW5uZXIsIGJvb2wgbG9nKQoreworCV9fYmUxNiB0Y2kgPSAwOworCV9fYmUxNiB0cGlkID0g MDsKKworCWlmIChhW09WU19LRVlfQVRUUl9WTEFOXSkKKwkJdGNpID0gbmxhX2dldF9iZTE2KGFb T1ZTX0tFWV9BVFRSX1ZMQU5dKTsKKworCWlmIChhW09WU19LRVlfQVRUUl9FVEhFUlRZUEVdKQor CQl0cGlkID0gbmxhX2dldF9iZTE2KGFbT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRV0pOworCisJaWYg KGlzX21hc2sgJiYgdHBpZCAhPSBodG9ucygweGZmZmYpKSB7CisJCU9WU19OTEVSUihsb2csICJN dXN0IGhhdmUgYW4gZXhhY3QgbWF0Y2ggb24gdGhlICVzIFRQSUQgKG1hc2s9MHgleCkuIiwKKwkJ ICAgICAgICAgIChpbm5lcikgPyAiQy1WTEFOIiA6ICJWTEFOIiwgbnRvaHModHBpZCkpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCEodGNpICYgaHRvbnMoVkxBTl9UQUdfUFJFU0VOVCkp KSB7CisJCWlmICghaXNfbWFzayAmJiAhdGNpKSB7CisJCQkvKiBDb3JuZXIgY2FzZSBmb3IgdHJ1 bmNhdGVkIFZMQU4gaGVhZGVyLiAqLworCQkJaWYgKG5sYV9sZW4oYVtPVlNfS0VZX0FUVFJfRU5D QVBdKSkgeworCQkJCU9WU19OTEVSUihsb2csICJUcnVuY2F0ZWQgJXMgaGVhZGVyIGhhcyBub24t emVybyBlbmNhcCBhdHRyaWJ1dGUuIiwKKwkJCQkgICAgICAgICAgKGlubmVyKSA/ICJDLVZMQU4i IDogIlZMQU4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlm IChpc19tYXNrKQorCQkJCU9WU19OTEVSUihsb2csICIlcyBUQ0kgbWFzayBkb2VzIG5vdCBoYXZl IGV4YWN0IG1hdGNoIGZvciBWTEFOX1RBR19QUkVTRU5UIGJpdC4iLAorCQkJCSAgICAgICAgICAo aW5uZXIpID8gIkMtVkxBTiIgOiAiVkxBTiIpOworCQkJZWxzZQorCQkJCU9WU19OTEVSUihsb2cs ICIlcyBUQ0kgZG9lcyBub3QgaGF2ZSBWTEFOX1RBR19QUkVTRU5UIGJpdCBzZXQuIiwKKwkJCQkg ICAgICAgICAgKGlubmVyKSA/ICJDLVZMQU4iIDogIlZMQU4iKTsKKwkJCXJldHVybiAtRUlOVkFM OworCQl9CisJfQorCWlmIChsaWtlbHkoIWlubmVyKSkgeworCQlTV19GTE9XX0tFWV9QVVQobWF0 Y2gsIGV0aC52bGFuLnRwaWQsIHRwaWQsIGlzX21hc2spOworCQlTV19GTE9XX0tFWV9QVVQobWF0 Y2gsIGV0aC52bGFuLnRjaSwgdGNpLCBpc19tYXNrKTsKKwl9IGVsc2UgeworCQlTV19GTE9XX0tF WV9QVVQobWF0Y2gsIGV0aC5jdmxhbi50cGlkLCB0cGlkLCBpc19tYXNrKTsKKwkJU1dfRkxPV19L RVlfUFVUKG1hdGNoLCBldGguY3ZsYW4udGNpLCB0Y2ksIGlzX21hc2spOworCX0KKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBfX3BhcnNlX3ZsYW5fZnJvbV9ubGF0dHJzKHN0cnVjdCBzd19m bG93X21hdGNoICptYXRjaCwKKwkJCQkgICAgIHU2NCAqa2V5X2F0dHJzLCBib29sIGlubmVyLAor CQkJCSAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqKmEsIGJvb2wgaXNfbWFzaywKKwkJCQkgICAg IGJvb2wgbG9nKQoreworCWludCBlcnI7CisJY29uc3Qgc3RydWN0IG5sYXR0ciAqZW5jYXA7CisK KwllcnIgPSBlbmNvZGVfdmxhbl9mcm9tX25sYXR0cnMobWF0Y2gsIGEsIGlzX21hc2ssIGlubmVy LCBsb2cpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqa2V5X2F0dHJzICY9IH4oMSA8 PCBPVlNfS0VZX0FUVFJfRU5DQVApOworCisJLyogRW5zdXJlIHRoYXQgdGNpIGtleSBhdHRyaWJ1 dGUgaXNuJ3QKKwkgKiBvdmVyd3JpdHRlbiBieSBlbmNhcHN1bGF0ZWQgY3VzdG9tZXIgdGNpLgor CSAqIEV0aGVydHlwZSBpcyBjbGVhcmVkIGJlY2F1c2UgaXQgaXMgY190cGlkLgorCSAqLworCSpr ZXlfYXR0cnMgJj0gfigxIDw8IE9WU19LRVlfQVRUUl9WTEFOKTsKKwkqa2V5X2F0dHJzICY9IH4o MSA8PCBPVlNfS0VZX0FUVFJfRVRIRVJUWVBFKTsKKworCWVuY2FwID0gYVtPVlNfS0VZX0FUVFJf RU5DQVBdOworCisJaWYgKGlzX21hc2spCisJCWVyciA9IHBhcnNlX2Zsb3dfbWFza19ubGF0dHJz KGVuY2FwLCBhLCBrZXlfYXR0cnMsIGxvZyk7CisJZWxzZQorCQllcnIgPSBwYXJzZV9mbG93X25s YXR0cnMoZW5jYXAsIGEsIGtleV9hdHRycywgbG9nKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBpbnQgcGFyc2Vfdmxhbl9mcm9tX25sYXR0cnMoc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1h dGNoLAorCQkJCSAgIHU2NCAqa2V5X2F0dHJzLCBib29sICppZV92YWxpZCwKKwkJCQkgICBjb25z dCBzdHJ1Y3QgbmxhdHRyICoqYSwgYm9vbCBpc19tYXNrLAorCQkJCSAgIGJvb2wgbG9nKQorewor CWludCBlcnI7CisKKwllcnIgPSBfX3BhcnNlX3ZsYW5fZnJvbV9ubGF0dHJzKG1hdGNoLCBrZXlf YXR0cnMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYSwgaXNfbWFz aywgbG9nKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCFpc19tYXNrKSB7CisJ CWlmICgoKmtleV9hdHRycyAmICgxIDw8IE9WU19LRVlfQVRUUl9FVEhFUlRZUEUpKSAmJgorCQkg ICAgZXRoX3R5cGVfdmxhbihubGFfZ2V0X2JlMTYoYVtPVlNfS0VZX0FUVFJfRVRIRVJUWVBFXSkp KSB7CisKKwkJCWlmICghKCgqa2V5X2F0dHJzICYgKDEgPDwgT1ZTX0tFWV9BVFRSX1ZMQU4pKSAm JgorCQkJICAgICAgKCprZXlfYXR0cnMgJiAoMSA8PCBPVlNfS0VZX0FUVFJfRU5DQVApKSkpIHsK KwkJCQlPVlNfTkxFUlIobG9nLCAiSW52YWxpZCBJbm5lciBWTEFOIGZyYW1lIik7CisJCQkJcmV0 dXJuIC1FSU5WQUw7CisJCQl9CisJCQkqaWVfdmFsaWQgPSB0cnVlOworCQl9CisJfSBlbHNlIHsK KwkJaWYgKCprZXlfYXR0cnMgJiAoMSA8PCBPVlNfS0VZX0FUVFJfRU5DQVApKSB7CisJCQlpZiAo ISppZV92YWxpZCkgeworCQkJCU9WU19OTEVSUihsb2csICJFbmNhcCBtYXNrIGF0dHJpYnV0ZSBp cyBzZXQgZm9yIG5vbi1DVkxBTiBmcmFtZS4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0K KwkJfQorCX0KKworCWlmICgqaWVfdmFsaWQpIHsKKwkJZXJyID0gX19wYXJzZV92bGFuX2Zyb21f bmxhdHRycyhtYXRjaCwga2V5X2F0dHJzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRydWUsIGEsIGlzX21hc2ssIGxvZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwor CX0KKworCXJldHVybiAwOworfQorCiAvKioKICAqIG92c19ubGFfZ2V0X21hdGNoIC0gcGFyc2Vz IE5ldGxpbmsgYXR0cmlidXRlcyBpbnRvIGEgZmxvdyBrZXkgYW5kCiAgKiBtYXNrLiBJbiBjYXNl IHRoZSAnbWFzaycgaXMgTlVMTCwgdGhlIGZsb3cgaXMgdHJlYXRlZCBhcyBleGFjdCBtYXRjaApA QCAtMTE4MiwxMSArMTMwMSwxMSBAQCBpbnQgb3ZzX25sYV9nZXRfbWF0Y2goc3RydWN0IG5ldCAq bmV0LCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCSAgICAgIGJvb2wgbG9nKQogewog CWNvbnN0IHN0cnVjdCBubGF0dHIgKmFbT1ZTX0tFWV9BVFRSX01BWCArIDFdOwotCWNvbnN0IHN0 cnVjdCBubGF0dHIgKmVuY2FwOwogCXN0cnVjdCBubGF0dHIgKm5ld21hc2sgPSBOVUxMOwogCXU2 NCBrZXlfYXR0cnMgPSAwOwogCXU2NCBtYXNrX2F0dHJzID0gMDsKIAlib29sIGVuY2FwX3ZhbGlk ID0gZmFsc2U7CisJYm9vbCBpX2VuY2FwX3ZhbGlkID0gZmFsc2U7CiAJaW50IGVycjsKIAogCWVy ciA9IHBhcnNlX2Zsb3dfbmxhdHRycyhubGFfa2V5LCBhLCAma2V5X2F0dHJzLCBsb2cpOwpAQCAt MTE5NSwzNSArMTMxNCwyMCBAQCBpbnQgb3ZzX25sYV9nZXRfbWF0Y2goc3RydWN0IG5ldCAqbmV0 LCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAKIAlpZiAoKGtleV9hdHRycyAmICgxIDw8 IE9WU19LRVlfQVRUUl9FVEhFUk5FVCkpICYmCiAJICAgIChrZXlfYXR0cnMgJiAoMSA8PCBPVlNf S0VZX0FUVFJfRVRIRVJUWVBFKSkgJiYKLQkgICAgKG5sYV9nZXRfYmUxNihhW09WU19LRVlfQVRU Ul9FVEhFUlRZUEVdKSA9PSBodG9ucyhFVEhfUF84MDIxUSkpKSB7Ci0JCV9fYmUxNiB0Y2k7CisJ ICAgIGV0aF90eXBlX3ZsYW4obmxhX2dldF9iZTE2KGFbT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRV0p KSkgewogCiAJCWlmICghKChrZXlfYXR0cnMgJiAoMSA8PCBPVlNfS0VZX0FUVFJfVkxBTikpICYm CiAJCSAgICAgIChrZXlfYXR0cnMgJiAoMSA8PCBPVlNfS0VZX0FUVFJfRU5DQVApKSkpIHsKIAkJ CU9WU19OTEVSUihsb2csICJJbnZhbGlkIFZsYW4gZnJhbWUuIik7CiAJCQlyZXR1cm4gLUVJTlZB TDsKIAkJfQotCi0JCWtleV9hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSk7 Ci0JCXRjaSA9IG5sYV9nZXRfYmUxNihhW09WU19LRVlfQVRUUl9WTEFOXSk7Ci0JCWVuY2FwID0g YVtPVlNfS0VZX0FUVFJfRU5DQVBdOwotCQlrZXlfYXR0cnMgJj0gfigxIDw8IE9WU19LRVlfQVRU Ul9FTkNBUCk7CiAJCWVuY2FwX3ZhbGlkID0gdHJ1ZTsKIAotCQlpZiAodGNpICYgaHRvbnMoVkxB Tl9UQUdfUFJFU0VOVCkpIHsKLQkJCWVyciA9IHBhcnNlX2Zsb3dfbmxhdHRycyhlbmNhcCwgYSwg JmtleV9hdHRycywgbG9nKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNl IGlmICghdGNpKSB7Ci0JCQkvKiBDb3JuZXIgY2FzZSBmb3IgdHJ1bmNhdGVkIDgwMi4xUSBoZWFk ZXIuICovCi0JCQlpZiAobmxhX2xlbihlbmNhcCkpIHsKLQkJCQlPVlNfTkxFUlIobG9nLCAiVHJ1 bmNhdGVkIDgwMi4xUSBoZWFkZXIgaGFzIG5vbi16ZXJvIGVuY2FwIGF0dHJpYnV0ZS4iKTsKLQkJ CQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCU9WU19OTEVSUihsb2csICJF bmNhcCBhdHRyIGlzIHNldCBmb3Igbm9uLVZMQU4gZnJhbWUiKTsKLQkJCXJldHVybiAgLUVJTlZB TDsKLQkJfQorCQllcnIgPSBwYXJzZV92bGFuX2Zyb21fbmxhdHRycyhtYXRjaCwgJmtleV9hdHRy cywKKwkJCQkJICAgICAgJmlfZW5jYXBfdmFsaWQsIGEsIGZhbHNlLAorCQkJCQkgICAgICBsb2cp OworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CiAKIAllcnIgPSBvdnNfa2V5X2Zyb21f bmxhdHRycyhuZXQsIG1hdGNoLCBrZXlfYXR0cnMsIGEsIGZhbHNlLCBsb2cpOwpAQCAtMTI2NSwx MSArMTM2OSwxMCBAQCBpbnQgb3ZzX25sYV9nZXRfbWF0Y2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1 Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCQlnb3RvIGZyZWVfbmV3bWFzazsKIAogCQkvKiBB bHdheXMgbWF0Y2ggb24gdGNpLiAqLwotCQlTV19GTE9XX0tFWV9QVVQobWF0Y2gsIGV0aC50Y2ks IGh0b25zKDB4ZmZmZiksIHRydWUpOworCQlTV19GTE9XX0tFWV9QVVQobWF0Y2gsIGV0aC52bGFu LnRjaSwgaHRvbnMoMHhmZmZmKSwgdHJ1ZSk7CisJCVNXX0ZMT1dfS0VZX1BVVChtYXRjaCwgZXRo LmN2bGFuLnRjaSwgaHRvbnMoMHhmZmZmKSwgdHJ1ZSk7CiAKIAkJaWYgKG1hc2tfYXR0cnMgJiAx IDw8IE9WU19LRVlfQVRUUl9FTkNBUCkgewotCQkJX19iZTE2IGV0aF90eXBlID0gMDsKLQkJCV9f YmUxNiB0Y2kgPSAwOwogCiAJCQlpZiAoIWVuY2FwX3ZhbGlkKSB7CiAJCQkJT1ZTX05MRVJSKGxv ZywgIkVuY2FwIG1hc2sgYXR0cmlidXRlIGlzIHNldCBmb3Igbm9uLVZMQU4gZnJhbWUuIik7CkBA IC0xMjc3LDMzICsxMzgwLDExIEBAIGludCBvdnNfbmxhX2dldF9tYXRjaChzdHJ1Y3QgbmV0ICpu ZXQsIHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCwKIAkJCQlnb3RvIGZyZWVfbmV3bWFzazsK IAkJCX0KIAotCQkJbWFza19hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VOQ0FQKTsKLQkJ CWlmIChhW09WU19LRVlfQVRUUl9FVEhFUlRZUEVdKQotCQkJCWV0aF90eXBlID0gbmxhX2dldF9i ZTE2KGFbT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRV0pOwotCi0JCQlpZiAoZXRoX3R5cGUgPT0gaHRv bnMoMHhmZmZmKSkgewotCQkJCW1hc2tfYXR0cnMgJj0gfigxIDw8IE9WU19LRVlfQVRUUl9FVEhF UlRZUEUpOwotCQkJCWVuY2FwID0gYVtPVlNfS0VZX0FUVFJfRU5DQVBdOwotCQkJCWVyciA9IHBh cnNlX2Zsb3dfbWFza19ubGF0dHJzKGVuY2FwLCBhLAotCQkJCQkJCSAgICAgICZtYXNrX2F0dHJz LCBsb2cpOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gZnJlZV9uZXdtYXNrOwotCQkJfSBlbHNl IHsKLQkJCQlPVlNfTkxFUlIobG9nLCAiVkxBTiBmcmFtZXMgbXVzdCBoYXZlIGFuIGV4YWN0IG1h dGNoIG9uIHRoZSBUUElEIChtYXNrPSV4KS4iLAotCQkJCQkgIG50b2hzKGV0aF90eXBlKSk7Ci0J CQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGZyZWVfbmV3bWFzazsKLQkJCX0KLQotCQkJaWYg KGFbT1ZTX0tFWV9BVFRSX1ZMQU5dKQotCQkJCXRjaSA9IG5sYV9nZXRfYmUxNihhW09WU19LRVlf QVRUUl9WTEFOXSk7Ci0KLQkJCWlmICghKHRjaSAmIGh0b25zKFZMQU5fVEFHX1BSRVNFTlQpKSkg ewotCQkJCU9WU19OTEVSUihsb2csICJWTEFOIHRhZyBwcmVzZW50IGJpdCBtdXN0IGhhdmUgYW4g ZXhhY3QgbWF0Y2ggKHRjaV9tYXNrPSV4KS4iLAotCQkJCQkgIG50b2hzKHRjaSkpOwotCQkJCWVy ciA9IC1FSU5WQUw7CisJCQllcnIgPSBwYXJzZV92bGFuX2Zyb21fbmxhdHRycyhtYXRjaCwgJm1h c2tfYXR0cnMsCisJCQkJCQkgICAgICAmaV9lbmNhcF92YWxpZCwKKwkJCQkJCSAgICAgIGEsIHRy dWUsIGxvZyk7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gZnJlZV9uZXdtYXNrOwotCQkJfQogCQl9 CiAKIAkJZXJyID0gb3ZzX2tleV9mcm9tX25sYXR0cnMobmV0LCBtYXRjaCwgbWFza19hdHRycywg YSwgdHJ1ZSwKQEAgLTE0MTUsNyArMTQ5Niw5IEBAIHN0YXRpYyBpbnQgX19vdnNfbmxhX3B1dF9r ZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tleSwKIAkJCSAgICAgc3RydWN0IHNrX2J1 ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgb3ZzX2tleV9ldGhlcm5ldCAqZXRoX2tleTsKLQlzdHJ1Y3Qg bmxhdHRyICpubGEsICplbmNhcDsKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJc3RydWN0IG5sYXR0 ciAqZW5jYXAgPSBOVUxMOworCXN0cnVjdCBubGF0dHIgKmluX2VuY2FwID0gTlVMTDsKIAogCWlm IChubGFfcHV0X3UzMihza2IsIE9WU19LRVlfQVRUUl9SRUNJUkNfSUQsIG91dHB1dC0+cmVjaXJj X2lkKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC0xNDY0LDE3ICsxNTQ3LDM3IEBAIHN0 YXRpYyBpbnQgX19vdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tl eSwKIAlldGhlcl9hZGRyX2NvcHkoZXRoX2tleS0+ZXRoX3NyYywgb3V0cHV0LT5ldGguc3JjKTsK IAlldGhlcl9hZGRyX2NvcHkoZXRoX2tleS0+ZXRoX2RzdCwgb3V0cHV0LT5ldGguZHN0KTsKIAot CWlmIChzd2tleS0+ZXRoLnRjaSB8fCBzd2tleS0+ZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1BfODAy MVEpKSB7CisJaWYgKHN3a2V5LT5ldGgudmxhbi50Y2kgfHwgZXRoX3R5cGVfdmxhbihzd2tleS0+ ZXRoLnR5cGUpKSB7CiAJCV9fYmUxNiBldGhfdHlwZTsKLQkJZXRoX3R5cGUgPSAhaXNfbWFzayA/ IGh0b25zKEVUSF9QXzgwMjFRKSA6IGh0b25zKDB4ZmZmZik7CisJCWV0aF90eXBlID0gIWlzX21h c2sgPyBvdXRwdXQtPmV0aC52bGFuLnRwaWQgOiBodG9ucygweGZmZmYpOwogCQlpZiAobmxhX3B1 dF9iZTE2KHNrYiwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSwgZXRoX3R5cGUpIHx8Ci0JCSAgICBu bGFfcHV0X2JlMTYoc2tiLCBPVlNfS0VZX0FUVFJfVkxBTiwgb3V0cHV0LT5ldGgudGNpKSkKKwkJ ICAgIG5sYV9wdXRfYmUxNihza2IsIE9WU19LRVlfQVRUUl9WTEFOLCBvdXRwdXQtPmV0aC52bGFu LnRjaSkpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAkJZW5jYXAgPSBubGFfbmVzdF9zdGFy dChza2IsIE9WU19LRVlfQVRUUl9FTkNBUCk7Ci0JCWlmICghc3drZXktPmV0aC50Y2kpCisJCWlm ICghc3drZXktPmV0aC52bGFuLnRjaSkKIAkJCWdvdG8gdW5lbmNhcDsKLQl9IGVsc2UKLQkJZW5j YXAgPSBOVUxMOworCisJCWlmIChzd2tleS0+ZXRoLmN2bGFuLnRjaSB8fCBldGhfdHlwZV92bGFu KHN3a2V5LT5ldGgudHlwZSkpIHsKKwkJCS8qIEN1c3RvbWVyIHRjaSBpcyBuZXN0ZWQgYnV0IHVz ZXMgc2FtZSBrZXkgYXR0cmlidXRlLgorCQkJICovCisJCQlldGhfdHlwZSA9ICFpc19tYXNrID8g b3V0cHV0LT5ldGguY3ZsYW4udHBpZCA6IGh0b25zKDB4ZmZmZik7CisJCQlpZiAobmxhX3B1dF9i ZTE2KHNrYiwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSwgZXRoX3R5cGUpIHx8CisJCQkgICAgbmxh X3B1dF9iZTE2KHNrYiwgT1ZTX0tFWV9BVFRSX1ZMQU4sIG91dHB1dC0+ZXRoLmN2bGFuLnRjaSkp CisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQlpbl9lbmNhcCA9IG5sYV9uZXN0X3N0YXJ0 KHNrYiwgT1ZTX0tFWV9BVFRSX0VOQ0FQKTsKKwkJCWlmICghc3drZXktPmV0aC5jdmxhbi50Y2kp CisJCQkJZ290byB1bmVuY2FwOworCQl9CisJfQorCisJaWYgKGV0aF90eXBlX3ZsYW4oc3drZXkt PmV0aC50eXBlKSAmJiBlbmNhcCAmJiBpbl9lbmNhcCkgeworCQkvKiBUaGVyZSBhcmUgMyBWTEFO IHRhZ3MsIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlCisJCSAq IHBhY2tldCwgc28gdHJ1bmNhdGUgaGVyZS4KKwkJICovCisJCWlmIChubGFfcHV0X2JlMTYoc2ti LCBPVlNfS0VZX0FUVFJfRVRIRVJUWVBFLCBvdXRwdXQtPmV0aC50eXBlKSkKKwkJCWdvdG8gbmxh X3B1dF9mYWlsdXJlOworCQlnb3RvIHVuZW5jYXA7CisJfQogCiAJaWYgKHN3a2V5LT5ldGgudHlw ZSA9PSBodG9ucyhFVEhfUF84MDJfMikpIHsKIAkJLyoKQEAgLTE2MTksNiArMTcyMiw4IEBAIHN0 YXRpYyBpbnQgX19vdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tl eSwKIAl9CiAKIHVuZW5jYXA6CisJaWYgKGluX2VuY2FwKQorCQlubGFfbmVzdF9lbmQoc2tiLCBp bl9lbmNhcCk7CiAJaWYgKGVuY2FwKQogCQlubGFfbmVzdF9lbmQoc2tiLCBlbmNhcCk7CiAKQEAg LTIyODMsNyArMjM4OCw3IEBAIHN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1 Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAKIAkJY2FzZSBPVlNfQUNU SU9OX0FUVFJfUFVTSF9WTEFOOgogCQkJdmxhbiA9IG5sYV9kYXRhKGEpOwotCQkJaWYgKHZsYW4t PnZsYW5fdHBpZCAhPSBodG9ucyhFVEhfUF84MDIxUSkpCisJCQlpZiAoIWV0aF90eXBlX3ZsYW4o dmxhbi0+dmxhbl90cGlkKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmICghKHZsYW4tPnZs YW5fdGNpICYgaHRvbnMoVkxBTl9UQUdfUFJFU0VOVCkpKQogCQkJCXJldHVybiAtRUlOVkFMOwpA QCAtMjM4OCw3ICsyNDkzLDcgQEAgaW50IG92c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQg Km5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAogCSgqc2ZhKS0+b3JpZ19sZW4gPSBu bGFfbGVuKGF0dHIpOwogCWVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBr ZXksIDAsIHNmYSwga2V5LT5ldGgudHlwZSwKLQkJCQkgICAgIGtleS0+ZXRoLnRjaSwgbG9nKTsK KwkJCQkgICAgIGtleS0+ZXRoLnZsYW4udGNpLCBsb2cpOwogCWlmIChlcnIpCiAJCW92c19ubGFf ZnJlZV9mbG93X2FjdGlvbnMoKnNmYSk7CiAKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92 cG9ydC5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMKaW5kZXggNmIyMWZkMDY4ZDg3Li44ZjE5 ODQzN2M3MjQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC5jCisrKyBiL25ldC9v cGVudnN3aXRjaC92cG9ydC5jCkBAIC00ODUsOSArNDg1LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBp bnQgcGFja2V0X2xlbmd0aChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVk IGludCBsZW5ndGggPSBza2ItPmxlbiAtIEVUSF9ITEVOOwogCi0JaWYgKHNrYi0+cHJvdG9jb2wg PT0gaHRvbnMoRVRIX1BfODAyMVEpKQorCWlmIChza2Jfdmxhbl90YWdnZWQoc2tiKSkKIAkJbGVu Z3RoIC09IFZMQU5fSExFTjsKIAorCS8qIERvbid0IHN1YnRyYWN0IGZvciBtdWx0aXBsZSBWTEFO IHRhZ3MuIE1vc3QgKGFsbD8pIGRyaXZlcnMgYWxsb3cKKwkgKiAoRVRIX0xFTiArIFZMQU5fSExF TikgaW4gYWRkaXRpb24gdG8gdGhlIG10dSB2YWx1ZSwgYnV0IGFsbW9zdCBub25lCisJICogYWNj b3VudCBmb3IgODAyLjFhZC4gZS5nLiBpc19za2JfZm9yd2FyZGFibGUoKS4KKwkgKi8KKwogCXJl dHVybiBsZW5ndGg7CiB9CiAKLS0gCjIuNS41CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkZXYgbWFpbGluZyBsaXN0CmRldkBvcGVudnN3aXRjaC5vcmcK aHR0cDovL29wZW52c3dpdGNoLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Rldgo=