From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by sourceware.org (Postfix) with ESMTPS id A43173858D35 for ; Thu, 29 Jun 2023 15:32:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A43173858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-51d93425853so914382a12.1 for ; Thu, 29 Jun 2023 08:32:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688052775; x=1690644775; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=YJmj7K0Q1wgD5Qx8dkb+2XOhp3A9Tb0AR5cmfHSfHHA=; b=dU9R1gRzM/iwETgA2Liqv18Q/9WzaalP87w+hkcPLQNgPnQfu96fMv8R9ThxKrG1yr rZDeXouCUfZsHqjp94DaTSbcLsIYgBGhr5tfKy1NuJ6WILnOmkffEpu+KibIAbmrtA1C WWVUaTs90DfQhldPl2WfqmS0qZis4DNsoaWUpOu5OOn8GlOnbCqV0IrKkem0Sr0mqJP9 +28mAnPHntFrpXfTiIkQtzT/A9ln1BipBAyZkJelR/ohxFpp8QYyCLZ84N+kdNu1egcq YRSh/5eAhG6v/NgCHKVaJCx2COkow2raAOvOX2j02NOAme0HKXvIj/u1f8e8wHXG63jt NKYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688052775; x=1690644775; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=YJmj7K0Q1wgD5Qx8dkb+2XOhp3A9Tb0AR5cmfHSfHHA=; b=bjPDUizmojHQcDBzXlnCsePUCVXPgrf2jSs9yFIkPOihbiRgACZJ+9ltUbbBd/MDgq FWVogmXSasOk/MR/0Tjk9llpQYT/tissBGjGwIF3IM73od65gnO+tKkunii0M2JhgQZA mJKjDteNf49tVGV1lp1orYF9bW+dy5iWZcWa+WI+bOJ+NrR2dmuq8NXt0SfkscpunAEU 7/BTs8vhQr6YrJjrmPVRfbs515OBi682XjeXptreBdErVwzZvViibp4gNUqw2MQrEo4W YSZgGi7lfg2VkDPepQTnA76EFHIvVJ6CGXhyNlnwpAQ3Utr6P9Nq57vaSzeZzIr7+XN9 7fDQ== X-Gm-Message-State: AC+VfDzj0T4F4P7Y8o0gPelc7xJ1JXmBcnXVhvkc4gQDL0J1WmcuVPRX 9XTmRUsERsgbLzUtL1qaHeJct+0S4oYCrp3so/42CYo6KI1URA== X-Google-Smtp-Source: ACHHUZ6HlVUtBiLryUq5mYiI01zht/hPs4M0HaYTqjiD5Vrci4zf1honYMXJeYrinoKI5+/3FNUvgE+ru/6nNWQiMtM= X-Received: by 2002:aa7:d341:0:b0:51d:d30c:f1e3 with SMTP id m1-20020aa7d341000000b0051dd30cf1e3mr2869802edr.16.1688052774930; Thu, 29 Jun 2023 08:32:54 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Thu, 29 Jun 2023 17:32:43 +0200 Message-ID: Subject: [committed] cselib+expr+bitmap: Change return type of predicate functions from int to bool To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000032c0f05ff466a8f" X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000032c0f05ff466a8f Content-Type: text/plain; charset="UTF-8" gcc/ChangeLog: * cselib.h (rtx_equal_for_cselib_1): Change return type from int to bool. (references_value_p): Ditto. (rtx_equal_for_cselib_p): Ditto. * expr.h (can_store_by_pieces): Ditto. (try_casesi): Ditto. (try_tablejump): Ditto. (safe_from_p): Ditto. * sbitmap.h (bitmap_equal_p): Ditto. * cselib.cc (references_value_p): Change return type from int to void and adjust function body accordingly. (rtx_equal_for_cselib_1): Ditto. * expr.cc (is_aligning_offset): Ditto. (can_store_by_pieces): Ditto. (mostly_zeros_p): Ditto. (all_zeros_p): Ditto. (safe_from_p): Ditto. (is_aligning_offset): Ditto. (try_casesi): Ditto. (try_tablejump): Ditto. (store_constructor): Change "need_to_clear" and "const_bounds_p" variables to bool. * sbitmap.cc (bitmap_equal_p): Change return type from int to bool. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros, --000000000000032c0f05ff466a8f Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljhb104u0 ZGlmZiAtLWdpdCBhL2djYy9jc2VsaWIuY2MgYi9nY2MvY3NlbGliLmNjCmluZGV4IDA2NTg2N2I0 YTg0Li41Yjk4NDNhNTk0MiAxMDA2NDQKLS0tIGEvZ2NjL2NzZWxpYi5jYworKysgYi9nY2MvY3Nl bGliLmNjCkBAIC02MzYsNyArNjM2LDcgQEAgY3NlbGliX2ZpbmRfc2xvdCAobWFjaGluZV9tb2Rl IG1vZGUsIHJ0eCB4LCBoYXNodmFsX3QgaGFzaCwKICAgIGVsZW1lbnQgaGFzIGJlZW4gc2V0IHRv IHplcm8sIHdoaWNoIGltcGxpZXMgdGhlIGNzZWxpYl92YWwgd2lsbCBiZQogICAgcmVtb3ZlZC4g ICovCiAKLWludAorYm9vbAogcmVmZXJlbmNlc192YWx1ZV9wIChjb25zdF9ydHggeCwgaW50IG9u bHlfdXNlbGVzcykKIHsKICAgY29uc3QgZW51bSBydHhfY29kZSBjb2RlID0gR0VUX0NPREUgKHgp OwpAQCAtNjQ2LDE5ICs2NDYsMTkgQEAgcmVmZXJlbmNlc192YWx1ZV9wIChjb25zdF9ydHggeCwg aW50IG9ubHlfdXNlbGVzcykKICAgaWYgKEdFVF9DT0RFICh4KSA9PSBWQUxVRQogICAgICAgJiYg KCEgb25seV91c2VsZXNzCiAJICB8fCAoQ1NFTElCX1ZBTF9QVFIgKHgpLT5sb2NzID09IDAgJiYg IVBSRVNFUlZFRF9WQUxVRV9QICh4KSkpKQotICAgIHJldHVybiAxOworICAgIHJldHVybiB0cnVl OwogCiAgIGZvciAoaSA9IEdFVF9SVFhfTEVOR1RIIChjb2RlKSAtIDE7IGkgPj0gMDsgaS0tKQog ICAgIHsKICAgICAgIGlmIChmbXRbaV0gPT0gJ2UnICYmIHJlZmVyZW5jZXNfdmFsdWVfcCAoWEVY UCAoeCwgaSksIG9ubHlfdXNlbGVzcykpCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiAgICAg ICBlbHNlIGlmIChmbXRbaV0gPT0gJ0UnKQogCWZvciAoaiA9IDA7IGogPCBYVkVDTEVOICh4LCBp KTsgaisrKQogCSAgaWYgKHJlZmVyZW5jZXNfdmFsdWVfcCAoWFZFQ0VYUCAoeCwgaSwgaiksIG9u bHlfdXNlbGVzcykpCi0JICAgIHJldHVybiAxOworCSAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK LSAgcmV0dXJuIDA7CisgIHJldHVybiBmYWxzZTsKIH0KIAogLyogUmV0dXJuIHRydWUgaWYgViBp cyBhIHVzZWxlc3MgVkFMVUUgYW5kIGNhbiBiZSBkaXNjYXJkZWQgYXMgc3VjaC4gICovCkBAIC05 MjYsMTMgKzkyNiwxMyBAQCBhdXRvaW5jX3NwbGl0IChydHggeCwgcnR4ICpvZmYsIG1hY2hpbmVf bW9kZSBtZW1tb2RlKQogICByZXR1cm4geDsKIH0KIAotLyogUmV0dXJuIG5vbnplcm8gaWYgd2Ug Y2FuIHByb3ZlIHRoYXQgWCBhbmQgWSBjb250YWluIHRoZSBzYW1lIHZhbHVlLAorLyogUmV0dXJu IHRydWUgaWYgd2UgY2FuIHByb3ZlIHRoYXQgWCBhbmQgWSBjb250YWluIHRoZSBzYW1lIHZhbHVl LAogICAgdGFraW5nIG91ciBnYXRoZXJlZCBpbmZvcm1hdGlvbiBpbnRvIGFjY291bnQuICBNRU1N T0RFIGhvbGRzIHRoZQogICAgbW9kZSBvZiB0aGUgZW5jbG9zaW5nIE1FTSwgaWYgYW55LCBhcyBy ZXF1aXJlZCB0byBkZWFsIHdpdGggYXV0b2luYwogICAgYWRkcmVzc2luZyBtb2Rlcy4gIElmIFgg YW5kIFkgYXJlIG5vdCAoa25vd24gdG8gYmUpIHBhcnQgb2YKICAgIGFkZHJlc3NlcywgTUVNTU9E RSBzaG91bGQgYmUgVk9JRG1vZGUuICAqLwogCi1pbnQKK2Jvb2wKIHJ0eF9lcXVhbF9mb3JfY3Nl bGliXzEgKHJ0eCB4LCBydHggeSwgbWFjaGluZV9tb2RlIG1lbW1vZGUsIGludCBkZXB0aCkKIHsK ICAgZW51bSBydHhfY29kZSBjb2RlOwpAQCAtOTU2LDcgKzk1Niw3IEBAIHJ0eF9lcXVhbF9mb3Jf Y3NlbGliXzEgKHJ0eCB4LCBydHggeSwgbWFjaGluZV9tb2RlIG1lbW1vZGUsIGludCBkZXB0aCkK ICAgICB9CiAKICAgaWYgKHggPT0geSkKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdHJ1ZTsK IAogICBpZiAoR0VUX0NPREUgKHgpID09IFZBTFVFKQogICAgIHsKQEAgLTk3MywxMSArOTczLDEx IEBAIHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHJ0eCB4LCBydHggeSwgbWFjaGluZV9tb2RlIG1l bW1vZGUsIGludCBkZXB0aCkKIAkgIHJ0eCB5b2ZmID0gTlVMTDsKIAkgIHJ0eCB5ciA9IGF1dG9p bmNfc3BsaXQgKHksICZ5b2ZmLCBtZW1tb2RlKTsKIAkgIGlmICgoeXIgPT0geCB8fCB5ciA9PSBl LT52YWxfcnR4KSAmJiB5b2ZmID09IE5VTExfUlRYKQotCSAgICByZXR1cm4gMTsKKwkgICAgcmV0 dXJuIHRydWU7CiAJfQogCiAgICAgICBpZiAoZGVwdGggPT0gMTI4KQotCXJldHVybiAwOworCXJl dHVybiBmYWxzZTsKIAogICAgICAgZm9yIChsID0gZS0+bG9jczsgbDsgbCA9IGwtPm5leHQpCiAJ ewpAQCAtOTg5LDEwICs5ODksMTAgQEAgcnR4X2VxdWFsX2Zvcl9jc2VsaWJfMSAocnR4IHgsIHJ0 eCB5LCBtYWNoaW5lX21vZGUgbWVtbW9kZSwgaW50IGRlcHRoKQogCSAgaWYgKFJFR19QICh0KSB8 fCBNRU1fUCAodCkgfHwgR0VUX0NPREUgKHQpID09IFZBTFVFKQogCSAgICBjb250aW51ZTsKIAkg IGVsc2UgaWYgKHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHQsIHksIG1lbW1vZGUsIGRlcHRoICsg MSkpCi0JICAgIHJldHVybiAxOworCSAgICByZXR1cm4gdHJ1ZTsKIAl9CiAKLSAgICAgIHJldHVy biAwOworICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgZWxzZSBpZiAoR0VUX0NPREUgKHkp ID09IFZBTFVFKQogICAgIHsKQEAgLTEwMDYsMTEgKzEwMDYsMTEgQEAgcnR4X2VxdWFsX2Zvcl9j c2VsaWJfMSAocnR4IHgsIHJ0eCB5LCBtYWNoaW5lX21vZGUgbWVtbW9kZSwgaW50IGRlcHRoKQog CSAgcnR4IHhvZmYgPSBOVUxMOwogCSAgcnR4IHhyID0gYXV0b2luY19zcGxpdCAoeCwgJnhvZmYs IG1lbW1vZGUpOwogCSAgaWYgKCh4ciA9PSB5IHx8IHhyID09IGUtPnZhbF9ydHgpICYmIHhvZmYg PT0gTlVMTF9SVFgpCi0JICAgIHJldHVybiAxOworCSAgICByZXR1cm4gdHJ1ZTsKIAl9CiAKICAg ICAgIGlmIChkZXB0aCA9PSAxMjgpCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogCiAgICAg ICBmb3IgKGwgPSBlLT5sb2NzOyBsOyBsID0gbC0+bmV4dCkKIAl7CkBAIC0xMDE5LDE0ICsxMDE5 LDE0IEBAIHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHJ0eCB4LCBydHggeSwgbWFjaGluZV9tb2Rl IG1lbW1vZGUsIGludCBkZXB0aCkKIAkgIGlmIChSRUdfUCAodCkgfHwgTUVNX1AgKHQpIHx8IEdF VF9DT0RFICh0KSA9PSBWQUxVRSkKIAkgICAgY29udGludWU7CiAJICBlbHNlIGlmIChydHhfZXF1 YWxfZm9yX2NzZWxpYl8xICh4LCB0LCBtZW1tb2RlLCBkZXB0aCArIDEpKQotCSAgICByZXR1cm4g MTsKKwkgICAgcmV0dXJuIHRydWU7CiAJfQogCi0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVy biBmYWxzZTsKICAgICB9CiAKICAgaWYgKEdFVF9NT0RFICh4KSAhPSBHRVRfTU9ERSAoeSkpCi0g ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGlmIChHRVRfQ09ERSAoeCkgIT0g R0VUX0NPREUgKHkpCiAgICAgICB8fCAoR0VUX0NPREUgKHgpID09IFBMVVMKQEAgLTEwNDQsMTYg KzEwNDQsMTYgQEAgcnR4X2VxdWFsX2Zvcl9jc2VsaWJfMSAocnR4IHgsIHJ0eCB5LCBtYWNoaW5l X21vZGUgbWVtbW9kZSwgaW50IGRlcHRoKQogICAgICAgaWYgKHggIT0geG9yaWcgfHwgeSAhPSB5 b3JpZykKIAl7CiAJICBpZiAoIXhvZmYgIT0gIXlvZmYpCi0JICAgIHJldHVybiAwOworCSAgICBy ZXR1cm4gZmFsc2U7CiAKIAkgIGlmICh4b2ZmICYmICFydHhfZXF1YWxfZm9yX2NzZWxpYl8xICh4 b2ZmLCB5b2ZmLCBtZW1tb2RlLCBkZXB0aCkpCi0JICAgIHJldHVybiAwOworCSAgICByZXR1cm4g ZmFsc2U7CiAKIAkgIHJldHVybiBydHhfZXF1YWxfZm9yX2NzZWxpYl8xICh4LCB5LCBtZW1tb2Rl LCBkZXB0aCk7CiAJfQogCiAgICAgICBpZiAoR0VUX0NPREUgKHhvcmlnKSAhPSBHRVRfQ09ERSAo eW9yaWcpKQotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKICAgICB9CiAKICAgLyogVGhlc2Ug d29uJ3QgYmUgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlIGNvZGUgYmVsb3cuICAqLwpAQCAtMTA2 MSw3ICsxMDYxLDcgQEAgcnR4X2VxdWFsX2Zvcl9jc2VsaWJfMSAocnR4IHgsIHJ0eCB5LCBtYWNo aW5lX21vZGUgbWVtbW9kZSwgaW50IGRlcHRoKQogICAgIHsKICAgICBDQVNFX0NPTlNUX1VOSVFV RToKICAgICBjYXNlIERFQlVHX0VYUFI6Ci0gICAgICByZXR1cm4gMDsKKyAgICAgIHJldHVybiBm YWxzZTsKIAogICAgIGNhc2UgQ09OU1RfVkVDVE9SOgogICAgICAgaWYgKCFzYW1lX3ZlY3Rvcl9l bmNvZGluZ3NfcCAoeCwgeSkpCkBAIC0xMTA4LDMxICsxMTA4LDMxIEBAIHJ0eF9lcXVhbF9mb3Jf Y3NlbGliXzEgKHJ0eCB4LCBydHggeSwgbWFjaGluZV9tb2RlIG1lbW1vZGUsIGludCBkZXB0aCkK IAl7CiAJY2FzZSAndyc6CiAJICBpZiAoWFdJTlQgKHgsIGkpICE9IFhXSU5UICh5LCBpKSkKLQkg ICAgcmV0dXJuIDA7CisJICAgIHJldHVybiBmYWxzZTsKIAkgIGJyZWFrOwogCiAJY2FzZSAnbic6 CiAJY2FzZSAnaSc6CiAJICBpZiAoWElOVCAoeCwgaSkgIT0gWElOVCAoeSwgaSkpCi0JICAgIHJl dHVybiAwOworCSAgICByZXR1cm4gZmFsc2U7CiAJICBicmVhazsKIAogCWNhc2UgJ3AnOgogCSAg aWYgKG1heWJlX25lIChTVUJSRUdfQllURSAoeCksIFNVQlJFR19CWVRFICh5KSkpCi0JICAgIHJl dHVybiAwOworCSAgICByZXR1cm4gZmFsc2U7CiAJICBicmVhazsKIAogCWNhc2UgJ1YnOgogCWNh c2UgJ0UnOgogCSAgLyogVHdvIHZlY3RvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gICov CiAJICBpZiAoWFZFQ0xFTiAoeCwgaSkgIT0gWFZFQ0xFTiAoeSwgaSkpCi0JICAgIHJldHVybiAw OworCSAgICByZXR1cm4gZmFsc2U7CiAKIAkgIC8qIEFuZCB0aGUgY29ycmVzcG9uZGluZyBlbGVt ZW50cyBtdXN0IG1hdGNoLiAgKi8KIAkgIGZvciAoaiA9IDA7IGogPCBYVkVDTEVOICh4LCBpKTsg aisrKQogCSAgICBpZiAoISBydHhfZXF1YWxfZm9yX2NzZWxpYl8xIChYVkVDRVhQICh4LCBpLCBq KSwKIAkJCQkJICBYVkVDRVhQICh5LCBpLCBqKSwgbWVtbW9kZSwgZGVwdGgpKQotCSAgICAgIHJl dHVybiAwOworCSAgICAgIHJldHVybiBmYWxzZTsKIAkgIGJyZWFrOwogCiAJY2FzZSAnZSc6CkBA IC0xMTQyLDE2ICsxMTQyLDE2IEBAIHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHJ0eCB4LCBydHgg eSwgbWFjaGluZV9tb2RlIG1lbW1vZGUsIGludCBkZXB0aCkKIAkJCQkJIGRlcHRoKQogCSAgICAg ICYmIHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKFhFWFAgKHgsIDApLCBYRVhQICh5LCAxKSwgbWVt bW9kZSwKIAkJCQkJIGRlcHRoKSkKLQkgICAgcmV0dXJuIDE7CisJICAgIHJldHVybiB0cnVlOwog CSAgaWYgKCEgcnR4X2VxdWFsX2Zvcl9jc2VsaWJfMSAoWEVYUCAoeCwgaSksIFhFWFAgKHksIGkp LCBtZW1tb2RlLAogCQkJCQlkZXB0aCkpCi0JICAgIHJldHVybiAwOworCSAgICByZXR1cm4gZmFs c2U7CiAJICBicmVhazsKIAogCWNhc2UgJ1MnOgogCWNhc2UgJ3MnOgogCSAgaWYgKHN0cmNtcCAo WFNUUiAoeCwgaSksIFhTVFIgKHksIGkpKSkKLQkgICAgcmV0dXJuIDA7CisJICAgIHJldHVybiBm YWxzZTsKIAkgIGJyZWFrOwogCiAJY2FzZSAndSc6CkBAIC0xMTY5LDcgKzExNjksNyBAQCBydHhf ZXF1YWxfZm9yX2NzZWxpYl8xIChydHggeCwgcnR4IHksIG1hY2hpbmVfbW9kZSBtZW1tb2RlLCBp bnQgZGVwdGgpCiAJICBnY2NfdW5yZWFjaGFibGUgKCk7CiAJfQogICAgIH0KLSAgcmV0dXJuIDE7 CisgIHJldHVybiB0cnVlOwogfQogCiAvKiBXcmFwcGVyIGZvciBydHhfZXF1YWxfZm9yX2NzZWxp Yl9wIHRvIGRldGVybWluZSB3aGV0aGVyIGEgU0VUIGlzCmRpZmYgLS1naXQgYS9nY2MvY3NlbGli LmggYi9nY2MvY3NlbGliLmgKaW5kZXggZTJmYThlOGMyYzEuLjBjZWQ1ZDVkNDAxIDEwMDY0NAot LS0gYS9nY2MvY3NlbGliLmgKKysrIGIvZ2NjL2NzZWxpYi5oCkBAIC04Miw5ICs4Miw5IEBAIGV4 dGVybiB2b2lkIGNzZWxpYl9maW5pc2ggKHZvaWQpOwogZXh0ZXJuIHZvaWQgY3NlbGliX3Byb2Nl c3NfaW5zbiAocnR4X2luc24gKik7CiBleHRlcm4gYm9vbCBmcF9zZXR0ZXJfaW5zbiAocnR4X2lu c24gKik7CiBleHRlcm4gbWFjaGluZV9tb2RlIGNzZWxpYl9yZWdfc2V0X21vZGUgKGNvbnN0X3J0 eCk7Ci1leHRlcm4gaW50IHJ0eF9lcXVhbF9mb3JfY3NlbGliXzEgKHJ0eCwgcnR4LCBtYWNoaW5l X21vZGUsIGludCk7CitleHRlcm4gYm9vbCBydHhfZXF1YWxfZm9yX2NzZWxpYl8xIChydHgsIHJ0 eCwgbWFjaGluZV9tb2RlLCBpbnQpOwogZXh0ZXJuIGJvb2wgY3NlbGliX3JlZHVuZGFudF9zZXRf cCAocnR4KTsKLWV4dGVybiBpbnQgcmVmZXJlbmNlc192YWx1ZV9wIChjb25zdF9ydHgsIGludCk7 CitleHRlcm4gYm9vbCByZWZlcmVuY2VzX3ZhbHVlX3AgKGNvbnN0X3J0eCwgaW50KTsKIGV4dGVy biBydHggY3NlbGliX2V4cGFuZF92YWx1ZV9ydHggKHJ0eCwgYml0bWFwLCBpbnQpOwogdHlwZWRl ZiBydHggKCpjc2VsaWJfZXhwYW5kX2NhbGxiYWNrKShydHgsIGJpdG1hcCwgaW50LCB2b2lkICop OwogZXh0ZXJuIHJ0eCBjc2VsaWJfZXhwYW5kX3ZhbHVlX3J0eF9jYiAocnR4LCBiaXRtYXAsIGlu dCwKQEAgLTEyOCwxNCArMTI4LDE0IEBAIGNhbm9uaWNhbF9jc2VsaWJfdmFsIChjc2VsaWJfdmFs ICp2YWwpCiAgIHJldHVybiBjYW5vbjsKIH0KIAotLyogUmV0dXJuIG5vbnplcm8gaWYgd2UgY2Fu IHByb3ZlIHRoYXQgWCBhbmQgWSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0YWtpbmcKKy8qIFJl dHVybiB0cnVlIGlmIHdlIGNhbiBwcm92ZSB0aGF0IFggYW5kIFkgY29udGFpbiB0aGUgc2FtZSB2 YWx1ZSwgdGFraW5nCiAgICBvdXIgZ2F0aGVyZWQgaW5mb3JtYXRpb24gaW50byBhY2NvdW50LiAg Ki8KIAotaW5saW5lIGludAoraW5saW5lIGJvb2wKIHJ0eF9lcXVhbF9mb3JfY3NlbGliX3AgKHJ0 eCB4LCBydHggeSkKIHsKICAgaWYgKHggPT0geSkKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4g dHJ1ZTsKIAogICByZXR1cm4gcnR4X2VxdWFsX2Zvcl9jc2VsaWJfMSAoeCwgeSwgVk9JRG1vZGUs IDApOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL2V4cHIuY2MgYi9nY2MvZXhwci5jYwppbmRleCA2MmNk OGZhY2Y3NS4uZThiNzIxYTg0YzMgMTAwNjQ0Ci0tLSBhL2djYy9leHByLmNjCisrKyBiL2djYy9l eHByLmNjCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBydHggc3RvcmVfZmllbGQgKHJ0eCwgcG9s eV9pbnQ2NCwgcG9seV9pbnQ2NCwgcG9seV91aW50NjQsIHBvbHlfdWludDY0LAogCiBzdGF0aWMg dW5zaWduZWQgSE9TVF9XSURFX0lOVCBoaWdoZXN0X3BvdzJfZmFjdG9yX2Zvcl90YXJnZXQgKGNv bnN0X3RyZWUsIGNvbnN0X3RyZWUpOwogCi1zdGF0aWMgaW50IGlzX2FsaWduaW5nX29mZnNldCAo Y29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitzdGF0aWMgYm9vbCBpc19hbGlnbmluZ19vZmZzZXQg KGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOwogc3RhdGljIHJ0eCByZWR1Y2VfdG9fYml0X2ZpZWxk X3ByZWNpc2lvbiAocnR4LCBydHgsIHRyZWUpOwogc3RhdGljIHJ0eCBkb19zdG9yZV9mbGFnIChz ZXBvcHMsIHJ0eCwgbWFjaGluZV9tb2RlKTsKICNpZmRlZiBQVVNIX1JPVU5ESU5HCkBAIC0xNjkx LDkgKzE2OTEsOSBAQCBzdG9yZV9ieV9waWVjZXNfZDo6ZmluaXNoX3JldG1vZGUgKG1lbW9wX3Jl dCByZXRtb2RlKQogICAgYSBwb2ludGVyIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGFzIGFyZ3VtZW50 IGluIGV2ZXJ5IENPTlNURlVOIGNhbGwuCiAgICBBTElHTiBpcyBtYXhpbXVtIGFsaWdubWVudCB3 ZSBjYW4gYXNzdW1lLiAgTUVNU0VUUCBpcyB0cnVlIGlmIHRoaXMgaXMKICAgIGEgbWVtc2V0IG9w ZXJhdGlvbiBhbmQgZmFsc2UgaWYgaXQncyBhIGNvcHkgb2YgYSBjb25zdGFudCBzdHJpbmcuCi0g ICBSZXR1cm4gbm9uemVybyBpZiBhIGNhbGwgdG8gc3RvcmVfYnlfcGllY2VzIHNob3VsZCBzdWNj ZWVkLiAgKi8KKyAgIFJldHVybiB0cnVlIGlmIGEgY2FsbCB0byBzdG9yZV9ieV9waWVjZXMgc2hv dWxkIHN1Y2NlZWQuICAqLwogCi1pbnQKK2Jvb2wKIGNhbl9zdG9yZV9ieV9waWVjZXMgKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgbGVuLAogCQkgICAgIGJ5X3BpZWNlc19jb25zdGZuIGNvbnN0ZnVu LAogCQkgICAgIHZvaWQgKmNvbnN0ZnVuZGF0YSwgdW5zaWduZWQgaW50IGFsaWduLCBib29sIG1l bXNldHApCkBAIC0xNzA3LDE0ICsxNzA3LDE0IEBAIGNhbl9zdG9yZV9ieV9waWVjZXMgKHVuc2ln bmVkIEhPU1RfV0lERV9JTlQgbGVuLAogICBydHggY3N0IEFUVFJJQlVURV9VTlVTRUQ7CiAKICAg aWYgKGxlbiA9PSAwKQotICAgIHJldHVybiAxOworICAgIHJldHVybiB0cnVlOwogCiAgIGlmICgh dGFyZ2V0bS51c2VfYnlfcGllY2VzX2luZnJhc3RydWN0dXJlX3AgKGxlbiwgYWxpZ24sCiAJCQkJ CSAgICAgICBtZW1zZXRwCiAJCQkJCQkgPyBTRVRfQllfUElFQ0VTCiAJCQkJCQkgOiBTVE9SRV9C WV9QSUVDRVMsCiAJCQkJCSAgICAgICBvcHRpbWl6ZV9pbnNuX2Zvcl9zcGVlZF9wICgpKSkKLSAg ICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgYWxpZ24gPSBhbGlnbm1lbnRfZm9y X3BpZWNld2lzZV9tb3ZlIChTVE9SRV9NQVhfUElFQ0VTLCBhbGlnbik7CiAKQEAgLTE3NDksNyAr MTc0OSw3IEBAIGNhbl9zdG9yZV9ieV9waWVjZXMgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbGVu LAogCQkgICAgIHZlY3RvciBtb2RlIGZvciB0aGUgbWVtc2V0IGV4cGFuZGVyLiAgKi8KIAkJICBp ZiAoISgobWVtc2V0cCAmJiBWRUNUT1JfTU9ERV9QIChtb2RlKSkKIAkJCXx8IHRhcmdldG0ubGVn aXRpbWF0ZV9jb25zdGFudF9wIChtb2RlLCBjc3QpKSkKLQkJICAgIHJldHVybiAwOworCQkgICAg cmV0dXJuIGZhbHNlOwogCiAJCSAgaWYgKCFyZXZlcnNlKQogCQkgICAgb2Zmc2V0ICs9IHNpemU7 CkBAIC0xNzY1LDcgKzE3NjUsNyBAQCBjYW5fc3RvcmVfYnlfcGllY2VzICh1bnNpZ25lZCBIT1NU X1dJREVfSU5UIGxlbiwKICAgICAgIGdjY19hc3NlcnQgKCFsKTsKICAgICB9CiAKLSAgcmV0dXJu IDE7CisgIHJldHVybiB0cnVlOwogfQogCiAvKiBHZW5lcmF0ZSBzZXZlcmFsIG1vdmUgaW5zdHJ1 Y3Rpb25zIHRvIHN0b3JlIExFTiBieXRlcyBnZW5lcmF0ZWQgYnkKQEAgLTY4NjgsOSArNjg2OCw5 IEBAIGNvbXBsZXRlX2N0b3JfYXRfbGV2ZWxfcCAoY29uc3RfdHJlZSB0eXBlLCBIT1NUX1dJREVf SU5UIG51bV9lbHRzLAogICByZXR1cm4gY291bnRfdHlwZV9lbGVtZW50cyAodHlwZSwgdHJ1ZSkg PT0gbnVtX2VsdHM7CiB9CiAKLS8qIFJldHVybiAxIGlmIEVYUCBjb250YWlucyBtb3N0bHkgKDMv NCkgemVyb3MuICAqLworLyogUmV0dXJuIHRydWUgaWYgRVhQIGNvbnRhaW5zIG1vc3RseSAoMy80 KSB6ZXJvcy4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBtb3N0bHlfemVyb3NfcCAo Y29uc3RfdHJlZSBleHApCiB7CiAgIGlmIChUUkVFX0NPREUgKGV4cCkgPT0gQ09OU1RSVUNUT1Ip CkBAIC02ODg2LDkgKzY4ODYsOSBAQCBtb3N0bHlfemVyb3NfcCAoY29uc3RfdHJlZSBleHApCiAg IHJldHVybiBpbml0aWFsaXplcl96ZXJvcCAoZXhwKTsKIH0KIAotLyogUmV0dXJuIDEgaWYgRVhQ IGNvbnRhaW5zIGFsbCB6ZXJvcy4gICovCisvKiBSZXR1cm4gdHJ1ZSBpZiBFWFAgY29udGFpbnMg YWxsIHplcm9zLiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGFsbF96ZXJvc19wIChj b25zdF90cmVlIGV4cCkKIHsKICAgaWYgKFRSRUVfQ09ERSAoZXhwKSA9PSBDT05TVFJVQ1RPUikK QEAgLTcxNDYsMTAgKzcxNDYsMTAgQEAgc3RvcmVfY29uc3RydWN0b3IgKHRyZWUgZXhwLCBydHgg dGFyZ2V0LCBpbnQgY2xlYXJlZCwgcG9seV9pbnQ2NCBzaXplLAogICAgICAgewogCXRyZWUgdmFs dWUsIGluZGV4OwogCXVuc2lnbmVkIEhPU1RfV0lERV9JTlQgaTsKLQlpbnQgbmVlZF90b19jbGVh cjsKKwlib29sIG5lZWRfdG9fY2xlYXI7CiAJdHJlZSBkb21haW47CiAJdHJlZSBlbHR0eXBlID0g VFJFRV9UWVBFICh0eXBlKTsKLQlpbnQgY29uc3RfYm91bmRzX3A7CisJYm9vbCBjb25zdF9ib3Vu ZHNfcDsKIAlIT1NUX1dJREVfSU5UIG1pbmVsdCA9IDA7CiAJSE9TVF9XSURFX0lOVCBtYXhlbHQg PSAwOwogCkBAIC03MTczLDkgKzcxNzMsOSBAQCBzdG9yZV9jb25zdHJ1Y3RvciAodHJlZSBleHAs IHJ0eCB0YXJnZXQsIGludCBjbGVhcmVkLCBwb2x5X2ludDY0IHNpemUsCiAgICAgICAgICAgIHRo ZSB3aG9sZSBhcnJheSBmaXJzdC4gIFNpbWlsYXJseSBpZiB0aGlzIGlzIHN0YXRpYwogICAgICAg ICAgICBjb25zdHJ1Y3RvciBvZiBhIG5vbi1CTEttb2RlIG9iamVjdC4gICovCiAJaWYgKGNsZWFy ZWQpCi0JICBuZWVkX3RvX2NsZWFyID0gMDsKKwkgIG5lZWRfdG9fY2xlYXIgPSBmYWxzZTsKIAll bHNlIGlmIChSRUdfUCAodGFyZ2V0KSAmJiBUUkVFX1NUQVRJQyAoZXhwKSkKLQkgIG5lZWRfdG9f Y2xlYXIgPSAxOworCSAgbmVlZF90b19jbGVhciA9IHRydWU7CiAJZWxzZQogCSAgewogCSAgICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIGlkeDsKQEAgLTcyMDAsNyArNzIwMCw3IEBAIHN0b3JlX2Nv bnN0cnVjdG9yICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgaW50IGNsZWFyZWQsIHBvbHlfaW50NjQg c2l6ZSwKIAkJICAgIGlmICghIHRyZWVfZml0c191aHdpX3AgKGxvX2luZGV4KQogCQkJfHwgISB0 cmVlX2ZpdHNfdWh3aV9wIChoaV9pbmRleCkpCiAJCSAgICAgIHsKLQkJCW5lZWRfdG9fY2xlYXIg PSAxOworCQkJbmVlZF90b19jbGVhciA9IHRydWU7CiAJCQlicmVhazsKIAkJICAgICAgfQogCkBA IC03MjIxLDcgKzcyMjEsNyBAQCBzdG9yZV9jb25zdHJ1Y3RvciAodHJlZSBleHAsIHJ0eCB0YXJn ZXQsIGludCBjbGVhcmVkLCBwb2x5X2ludDY0IHNpemUsCiAJICAgIGlmICghIG5lZWRfdG9fY2xl YXIKIAkJJiYgKGNvdW50IDwgbWF4ZWx0IC0gbWluZWx0ICsgMQogCQkgICAgfHwgNCAqIHplcm9f Y291bnQgPj0gMyAqIGNvdW50KSkKLQkgICAgICBuZWVkX3RvX2NsZWFyID0gMTsKKwkgICAgICBu ZWVkX3RvX2NsZWFyID0gdHJ1ZTsKIAkgIH0KIAogCWlmIChuZWVkX3RvX2NsZWFyICYmIG1heWJl X2d0IChzaXplLCAwKSkKQEAgLTc0MTMsNyArNzQxMyw3IEBAIHN0b3JlX2NvbnN0cnVjdG9yICh0 cmVlIGV4cCwgcnR4IHRhcmdldCwgaW50IGNsZWFyZWQsIHBvbHlfaW50NjQgc2l6ZSwKIAl1bnNp Z25lZCBIT1NUX1dJREVfSU5UIGlkeDsKIAljb25zdHJ1Y3Rvcl9lbHQgKmNlOwogCWludCBpOwot CWludCBuZWVkX3RvX2NsZWFyOworCWJvb2wgbmVlZF90b19jbGVhcjsKIAlpbnNuX2NvZGUgaWNv ZGUgPSBDT0RFX0ZPUl9ub3RoaW5nOwogCXRyZWUgZWx0OwogCXRyZWUgZWx0dHlwZSA9IFRSRUVf VFlQRSAodHlwZSk7CkBAIC03NDk4LDkgKzc0OTgsOSBAQCBzdG9yZV9jb25zdHJ1Y3RvciAodHJl ZSBleHAsIHJ0eCB0YXJnZXQsIGludCBjbGVhcmVkLCBwb2x5X2ludDY0IHNpemUsCiAJICAgY2xl YXIgdGhlIHdob2xlIGFycmF5IGZpcnN0LiAgU2ltaWxhcmx5IGlmIHRoaXMgaXMgc3RhdGljCiAJ ICAgY29uc3RydWN0b3Igb2YgYSBub24tQkxLbW9kZSBvYmplY3QuICAqLwogCWlmIChjbGVhcmVk KQotCSAgbmVlZF90b19jbGVhciA9IDA7CisJICBuZWVkX3RvX2NsZWFyID0gZmFsc2U7CiAJZWxz ZSBpZiAoUkVHX1AgKHRhcmdldCkgJiYgVFJFRV9TVEFUSUMgKGV4cCkpCi0JICBuZWVkX3RvX2Ns ZWFyID0gMTsKKwkgIG5lZWRfdG9fY2xlYXIgPSB0cnVlOwogCWVsc2UKIAkgIHsKIAkgICAgdW5z aWduZWQgSE9TVF9XSURFX0lOVCBjb3VudCA9IDAsIHplcm9fY291bnQgPSAwOwpAQCAtODI3MCwx NSArODI3MCwxNSBAQCBmb3JjZV9vcGVyYW5kIChydHggdmFsdWUsIHJ0eCB0YXJnZXQpCiAgIHJl dHVybiB2YWx1ZTsKIH0KIAwKLS8qIFN1YnJvdXRpbmUgb2YgZXhwYW5kX2V4cHI6IHJldHVybiBu b256ZXJvIGlmZiB0aGVyZSBpcyBubyB3YXkgdGhhdAorLyogU3Vicm91dGluZSBvZiBleHBhbmRf ZXhwcjogcmV0dXJuIHRydWUgaWZmIHRoZXJlIGlzIG5vIHdheSB0aGF0CiAgICBFWFAgY2FuIHJl ZmVyZW5jZSBYLCB3aGljaCBpcyBiZWluZyBtb2RpZmllZC4gIFRPUF9QIGlzIG5vbnplcm8gaWYg dGhpcwogICAgY2FsbCBpcyBnb2luZyB0byBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHdl IG5lZWQgYSB0ZW1wb3JhcnkKICAgIGZvciBFWFAsIGFzIG9wcG9zZWQgdG8gYSByZWN1cnNpdmUg Y2FsbCB0byB0aGlzIGZ1bmN0aW9uLgogCi0gICBJdCBpcyBhbHdheXMgc2FmZSBmb3IgdGhpcyBy b3V0aW5lIHRvIHJldHVybiB6ZXJvIHNpbmNlIGl0IG1lcmVseQorICAgSXQgaXMgYWx3YXlzIHNh ZmUgZm9yIHRoaXMgcm91dGluZSB0byByZXR1cm4gZmFsc2Ugc2luY2UgaXQgbWVyZWx5CiAgICBz ZWFyY2hlcyBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuICAqLwogCi1pbnQKK2Jvb2wK IHNhZmVfZnJvbV9wIChjb25zdF9ydHggeCwgdHJlZSBleHAsIGludCB0b3BfcCkKIHsKICAgcnR4 IGV4cF9ydGwgPSAwOwpAQCAtODMwMyw3ICs4MzAzLDcgQEAgc2FmZV9mcm9tX3AgKGNvbnN0X3J0 eCB4LCB0cmVlIGV4cCwgaW50IHRvcF9wKQogCSAgJiYgKFhFWFAgKHgsIDApID09IHZpcnR1YWxf b3V0Z29pbmdfYXJnc19ydHgKIAkgICAgICB8fCAoR0VUX0NPREUgKFhFWFAgKHgsIDApKSA9PSBQ TFVTCiAJCSAgJiYgWEVYUCAoWEVYUCAoeCwgMCksIDApID09IHZpcnR1YWxfb3V0Z29pbmdfYXJn c19ydHgpKSkpCi0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHRydWU7CiAKICAgLyogSWYgdGhp cyBpcyBhIHN1YnJlZyBvZiBhIGhhcmQgcmVnaXN0ZXIsIGRlY2xhcmUgaXQgdW5zYWZlLCBvdGhl cndpc2UsCiAgICAgIGZpbmQgdGhlIHVuZGVybHlpbmcgcHNldWRvLiAgKi8KQEAgLTgzMTEsNyAr ODMxMSw3IEBAIHNhZmVfZnJvbV9wIChjb25zdF9ydHggeCwgdHJlZSBleHAsIGludCB0b3BfcCkK ICAgICB7CiAgICAgICB4ID0gU1VCUkVHX1JFRyAoeCk7CiAgICAgICBpZiAoUkVHX1AgKHgpICYm IFJFR05PICh4KSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUikKLQlyZXR1cm4gMDsKKwlyZXR1cm4g ZmFsc2U7CiAgICAgfQogCiAgIC8qIE5vdyBsb29rIGF0IG91ciB0cmVlIGNvZGUgYW5kIHBvc3Np Ymx5IHJlY3Vyc2UuICAqLwpAQCAtODMyMiw3ICs4MzIyLDcgQEAgc2FmZV9mcm9tX3AgKGNvbnN0 X3J0eCB4LCB0cmVlIGV4cCwgaW50IHRvcF9wKQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIHRj Y19jb25zdGFudDoKLSAgICAgIHJldHVybiAxOworICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBj YXNlIHRjY19leGNlcHRpb25hbDoKICAgICAgIGlmIChUUkVFX0NPREUgKGV4cCkgPT0gVFJFRV9M SVNUKQpAQCAtODMzMCwxMCArODMzMCwxMCBAQCBzYWZlX2Zyb21fcCAoY29uc3RfcnR4IHgsIHRy ZWUgZXhwLCBpbnQgdG9wX3ApCiAJICB3aGlsZSAoMSkKIAkgICAgewogCSAgICAgIGlmIChUUkVF X1ZBTFVFIChleHApICYmICFzYWZlX2Zyb21fcCAoeCwgVFJFRV9WQUxVRSAoZXhwKSwgMCkpCi0J CXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJICAgICAgZXhwID0gVFJFRV9DSEFJTiAoZXhw KTsKIAkgICAgICBpZiAoIWV4cCkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCSAgICAg IGlmIChUUkVFX0NPREUgKGV4cCkgIT0gVFJFRV9MSVNUKQogCQlyZXR1cm4gc2FmZV9mcm9tX3Ag KHgsIGV4cCwgMCk7CiAJICAgIH0KQEAgLTgzNDYsMTMgKzgzNDYsMTMgQEAgc2FmZV9mcm9tX3Ag KGNvbnN0X3J0eCB4LCB0cmVlIGV4cCwgaW50IHRvcF9wKQogCSAgRk9SX0VBQ0hfVkVDX1NBRkVf RUxUIChDT05TVFJVQ1RPUl9FTFRTIChleHApLCBpZHgsIGNlKQogCSAgICBpZiAoKGNlLT5pbmRl eCAhPSBOVUxMX1RSRUUgJiYgIXNhZmVfZnJvbV9wICh4LCBjZS0+aW5kZXgsIDApKQogCQl8fCAh c2FmZV9mcm9tX3AgKHgsIGNlLT52YWx1ZSwgMCkpCi0JICAgICAgcmV0dXJuIDA7Ci0JICByZXR1 cm4gMTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICByZXR1cm4gdHJ1ZTsKIAl9CiAgICAgICBl bHNlIGlmIChUUkVFX0NPREUgKGV4cCkgPT0gRVJST1JfTUFSSykKLQlyZXR1cm4gMTsJLyogQW4g YWxyZWFkeS12aXNpdGVkIFNBVkVfRVhQUj8gKi8KKwlyZXR1cm4gdHJ1ZTsJLyogQW4gYWxyZWFk eS12aXNpdGVkIFNBVkVfRVhQUj8gKi8KICAgICAgIGVsc2UKLQlyZXR1cm4gMDsKKwlyZXR1cm4g ZmFsc2U7CiAKICAgICBjYXNlIHRjY19zdGF0ZW1lbnQ6CiAgICAgICAvKiBUaGUgb25seSBjYXNl IHdlIGxvb2sgYXQgaGVyZSBpcyB0aGUgREVDTF9JTklUSUFMIGluc2lkZSBhCkBAIC04MzY1LDcg KzgzNjUsNyBAQCBzYWZlX2Zyb21fcCAoY29uc3RfcnR4IHgsIHRyZWUgZXhwLCBpbnQgdG9wX3Ap CiAgICAgY2FzZSB0Y2NfYmluYXJ5OgogICAgIGNhc2UgdGNjX2NvbXBhcmlzb246CiAgICAgICBp ZiAoIXNhZmVfZnJvbV9wICh4LCBUUkVFX09QRVJBTkQgKGV4cCwgMSksIDApKQotCXJldHVybiAw OworCXJldHVybiBmYWxzZTsKICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCiAKICAgICBjYXNl IHRjY191bmFyeToKQEAgLTgzODcsNyArODM4Nyw3IEBAIHNhZmVfZnJvbV9wIChjb25zdF9ydHgg eCwgdHJlZSBleHAsIGludCB0b3BfcCkKIAkgIGlmIChzdGF0aWNwIChUUkVFX09QRVJBTkQgKGV4 cCwgMCkpCiAJICAgICAgfHwgVFJFRV9TVEFUSUMgKGV4cCkKIAkgICAgICB8fCBzYWZlX2Zyb21f cCAoeCwgVFJFRV9PUEVSQU5EIChleHAsIDApLCAwKSkKLQkgICAgcmV0dXJuIDE7CisJICAgIHJl dHVybiB0cnVlOwogCiAJICAvKiBPdGhlcndpc2UsIHRoZSBvbmx5IHdheSB0aGlzIGNhbiBjb25m bGljdCBpcyBpZiB3ZSBhcmUgdGFraW5nCiAJICAgICB0aGUgYWRkcmVzcyBvZiBhIERFQ0wgYSB0 aGF0IGFkZHJlc3MgaWYgcGFydCBvZiBYLCB3aGljaCBpcwpAQCAtODM5Nyw3ICs4Mzk3LDcgQEAg c2FmZV9mcm9tX3AgKGNvbnN0X3J0eCB4LCB0cmVlIGV4cCwgaW50IHRvcF9wKQogCSAgICB7CiAJ ICAgICAgaWYgKCFERUNMX1JUTF9TRVRfUCAoZXhwKQogCQkgIHx8ICFNRU1fUCAoREVDTF9SVEwg KGV4cCkpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCSAgICAgIGVsc2UKIAkJZXhw X3J0bCA9IFhFWFAgKERFQ0xfUlRMIChleHApLCAwKTsKIAkgICAgfQpAQCAtODQwNyw3ICs4NDA3 LDcgQEAgc2FmZV9mcm9tX3AgKGNvbnN0X3J0eCB4LCB0cmVlIGV4cCwgaW50IHRvcF9wKQogCSAg aWYgKE1FTV9QICh4KQogCSAgICAgICYmIGFsaWFzX3NldHNfY29uZmxpY3RfcCAoTUVNX0FMSUFT X1NFVCAoeCksCiAJCQkJCWdldF9hbGlhc19zZXQgKGV4cCkpKQotCSAgICByZXR1cm4gMDsKKwkg ICAgcmV0dXJuIGZhbHNlOwogCSAgYnJlYWs7CiAKIAljYXNlIENBTExfRVhQUjoKQEAgLTg0MTUs NyArODQxNSw3IEBAIHNhZmVfZnJvbV9wIChjb25zdF9ydHggeCwgdHJlZSBleHAsIGludCB0b3Bf cCkKIAkgICAgIGFsbCBvZiBtZW1vcnkuICAqLwogCSAgaWYgKChSRUdfUCAoeCkgJiYgUkVHTk8g KHgpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKQogCSAgICAgIHx8IE1FTV9QICh4KSkKLQkgICAg cmV0dXJuIDA7CisJICAgIHJldHVybiBmYWxzZTsKIAkgIGJyZWFrOwogCiAJY2FzZSBXSVRIX0NM RUFOVVBfRVhQUjoKQEAgLTg0MzgsNyArODQzOCw3IEBAIHNhZmVfZnJvbV9wIChjb25zdF9ydHgg eCwgdHJlZSBleHAsIGludCB0b3BfcCkKICAgICAgIGZvciAoaSA9IDA7IGkgPCBub3BzOyBpKysp CiAJaWYgKFRSRUVfT1BFUkFORCAoZXhwLCBpKSAhPSAwCiAJICAgICYmICEgc2FmZV9mcm9tX3Ag KHgsIFRSRUVfT1BFUkFORCAoZXhwLCBpKSwgMCkpCi0JICByZXR1cm4gMDsKKwkgIHJldHVybiBm YWxzZTsKIAogICAgICAgYnJlYWs7CiAKQEAgLTg0NTYsNyArODQ1Niw3IEBAIHNhZmVfZnJvbV9w IChjb25zdF9ydHggeCwgdHJlZSBleHAsIGludCB0b3BfcCkKIAkgIGV4cF9ydGwgPSBTVUJSRUdf UkVHIChleHBfcnRsKTsKIAkgIGlmIChSRUdfUCAoZXhwX3J0bCkKIAkgICAgICAmJiBSRUdOTyAo ZXhwX3J0bCkgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpCi0JICAgIHJldHVybiAwOworCSAgICBy ZXR1cm4gZmFsc2U7CiAJfQogCiAgICAgICAvKiBJZiB0aGUgcnRsIGlzIFgsIHRoZW4gaXQgaXMg bm90IHNhZmUuICBPdGhlcndpc2UsIGl0IGlzIHVubGVzcyBib3RoCkBAIC04NDY3LDcgKzg0Njcs NyBAQCBzYWZlX2Zyb21fcCAoY29uc3RfcnR4IHgsIHRyZWUgZXhwLCBpbnQgdG9wX3ApCiAgICAg fQogCiAgIC8qIElmIHdlIHJlYWNoIGhlcmUsIGl0IGlzIHNhZmUuICAqLwotICByZXR1cm4gMTsK KyAgcmV0dXJuIHRydWU7CiB9CiAKIAwKQEAgLTEyMTgyLDExICsxMjE4MiwxMSBAQCByZWR1Y2Vf dG9fYml0X2ZpZWxkX3ByZWNpc2lvbiAocnR4IGV4cCwgcnR4IHRhcmdldCwgdHJlZSB0eXBlKQog ICAgIH0KIH0KIAwKLS8qIFN1YnJvdXRpbmUgb2YgYWJvdmU6IHJldHVybnMgMSBpZiBPRkZTRVQg Y29ycmVzcG9uZHMgdG8gYW4gb2Zmc2V0IHRoYXQKKy8qIFN1YnJvdXRpbmUgb2YgYWJvdmU6IHJl dHVybnMgdHJ1ZSBpZiBPRkZTRVQgY29ycmVzcG9uZHMgdG8gYW4gb2Zmc2V0IHRoYXQKICAgIHdo ZW4gYXBwbGllZCB0byB0aGUgYWRkcmVzcyBvZiBFWFAgcHJvZHVjZXMgYW4gYWRkcmVzcyBrbm93 biB0byBiZQogICAgYWxpZ25lZCBtb3JlIHRoYW4gQklHR0VTVF9BTElHTk1FTlQuICAqLwogCi1z dGF0aWMgaW50CitzdGF0aWMgYm9vbAogaXNfYWxpZ25pbmdfb2Zmc2V0IChjb25zdF90cmVlIG9m ZnNldCwgY29uc3RfdHJlZSBleHApCiB7CiAgIC8qIFN0cmlwIG9mZiBhbnkgY29udmVyc2lvbnMu ICAqLwpAQCAtMTIyMDAsNyArMTIyMDAsNyBAQCBpc19hbGlnbmluZ19vZmZzZXQgKGNvbnN0X3Ry ZWUgb2Zmc2V0LCBjb25zdF90cmVlIGV4cCkKICAgICAgIHx8IGNvbXBhcmVfdHJlZV9pbnQgKFRS RUVfT1BFUkFORCAob2Zmc2V0LCAxKSwKIAkJCSAgIEJJR0dFU1RfQUxJR05NRU5UIC8gQklUU19Q RVJfVU5JVCkgPD0gMAogICAgICAgfHwgIXBvdzJwX2h3aSAodHJlZV90b191aHdpIChUUkVFX09Q RVJBTkQgKG9mZnNldCwgMSkpICsgMSkpCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZhbHNl OwogCiAgIC8qIExvb2sgYXQgdGhlIGZpcnN0IG9wZXJhbmQgb2YgQklUX0FORF9FWFBSIGFuZCBz dHJpcCBhbnkgY29udmVyc2lvbi4KICAgICAgSXQgbXVzdCBiZSBORUdBVEVfRVhQUi4gIFRoZW4g c3RyaXAgYW55IG1vcmUgY29udmVyc2lvbnMuICAqLwpAQCAtMTIyMDksNyArMTIyMDksNyBAQCBp c19hbGlnbmluZ19vZmZzZXQgKGNvbnN0X3RyZWUgb2Zmc2V0LCBjb25zdF90cmVlIGV4cCkKICAg ICBvZmZzZXQgPSBUUkVFX09QRVJBTkQgKG9mZnNldCwgMCk7CiAKICAgaWYgKFRSRUVfQ09ERSAo b2Zmc2V0KSAhPSBORUdBVEVfRVhQUikKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7 CiAKICAgb2Zmc2V0ID0gVFJFRV9PUEVSQU5EIChvZmZzZXQsIDApOwogICB3aGlsZSAoQ09OVkVS VF9FWFBSX1AgKG9mZnNldCkpCkBAIC0xMzIwNywxMiArMTMyMDcsMTIgQEAgZG9fc3RvcmVfZmxh ZyAoc2Vwb3BzIG9wcywgcnR4IHRhcmdldCwgbWFjaGluZV9tb2RlIG1vZGUpCiAJCQkJICYmICFU WVBFX1VOU0lHTkVEIChvcHMtPnR5cGUpKSA/IC0xIDogMSk7CiB9CiAMCi0vKiBBdHRlbXB0IHRv IGdlbmVyYXRlIGEgY2FzZXNpIGluc3RydWN0aW9uLiAgUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWws Ci0gICAwIG90aGVyd2lzZSAoaS5lLiBpZiB0aGVyZSBpcyBubyBjYXNlc2kgaW5zdHJ1Y3Rpb24p LgorLyogQXR0ZW1wdCB0byBnZW5lcmF0ZSBhIGNhc2VzaSBpbnN0cnVjdGlvbi4gIFJldHVybnMg dHJ1ZSBpZiBzdWNjZXNzZnVsLAorICAgZmFsc2Ugb3RoZXJ3aXNlIChpLmUuIGlmIHRoZXJlIGlz IG5vIGNhc2VzaSBpbnN0cnVjdGlvbikuCiAKICAgIERFRkFVTFRfUFJPQkFCSUxJVFkgaXMgdGhl IHByb2JhYmlsaXR5IG9mIGp1bXBpbmcgdG8gdGhlIGRlZmF1bHQKICAgIGxhYmVsLiAgKi8KLWlu dAorYm9vbAogdHJ5X2Nhc2VzaSAodHJlZSBpbmRleF90eXBlLCB0cmVlIGluZGV4X2V4cHIsIHRy ZWUgbWludmFsLCB0cmVlIHJhbmdlLAogCSAgICBydHggdGFibGVfbGFiZWwsIHJ0eCBkZWZhdWx0 X2xhYmVsLCBydHggZmFsbGJhY2tfbGFiZWwsCiAgICAgICAgICAgICBwcm9maWxlX3Byb2JhYmls aXR5IGRlZmF1bHRfcHJvYmFiaWxpdHkpCkBAIC0xMzIyMiw3ICsxMzIyMiw3IEBAIHRyeV9jYXNl c2kgKHRyZWUgaW5kZXhfdHlwZSwgdHJlZSBpbmRleF9leHByLCB0cmVlIG1pbnZhbCwgdHJlZSBy YW5nZSwKICAgcnR4IG9wMSwgb3AyLCBpbmRleDsKIAogICBpZiAoISB0YXJnZXRtLmhhdmVfY2Fz ZXNpICgpKQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKIAogICAvKiBUaGUgaW5k ZXggbXVzdCBiZSBzb21lIGZvcm0gb2YgaW50ZWdlci4gIENvbnZlcnQgaXQgdG8gU0ltb2RlLiAg Ki8KICAgc2NhbGFyX2ludF9tb2RlIG9tb2RlID0gU0NBTEFSX0lOVF9UWVBFX01PREUgKGluZGV4 X3R5cGUpOwpAQCAtMTMyNjYsNyArMTMyNjYsNyBAQCB0cnlfY2FzZXNpICh0cmVlIGluZGV4X3R5 cGUsIHRyZWUgaW5kZXhfZXhwciwgdHJlZSBtaW52YWwsIHRyZWUgcmFuZ2UsCiAJCQkJICA/IGRl ZmF1bHRfbGFiZWwKIAkJCQkgIDogZmFsbGJhY2tfbGFiZWwpKTsKICAgZXhwYW5kX2p1bXBfaW5z biAodGFyZ2V0bS5jb2RlX2Zvcl9jYXNlc2ksIDUsIG9wcyk7Ci0gIHJldHVybiAxOworICByZXR1 cm4gdHJ1ZTsKIH0KIAogLyogQXR0ZW1wdCB0byBnZW5lcmF0ZSBhIHRhYmxlanVtcCBpbnN0cnVj dGlvbjsgc2FtZSBjb25jZXB0LiAgKi8KQEAgLTEzMzYxLDcgKzEzMzYxLDcgQEAgZG9fdGFibGVq dW1wIChydHggaW5kZXgsIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggcmFuZ2UsIHJ0eCB0YWJsZV9s YWJlbCwKICAgICBlbWl0X2JhcnJpZXIgKCk7CiB9CiAKLWludAorYm9vbAogdHJ5X3RhYmxlanVt cCAodHJlZSBpbmRleF90eXBlLCB0cmVlIGluZGV4X2V4cHIsIHRyZWUgbWludmFsLCB0cmVlIHJh bmdlLAogCSAgICAgICBydHggdGFibGVfbGFiZWwsIHJ0eCBkZWZhdWx0X2xhYmVsLCAKIAkgICAg ICAgcHJvZmlsZV9wcm9iYWJpbGl0eSBkZWZhdWx0X3Byb2JhYmlsaXR5KQpAQCAtMTMzNjksNyAr MTMzNjksNyBAQCB0cnlfdGFibGVqdW1wICh0cmVlIGluZGV4X3R5cGUsIHRyZWUgaW5kZXhfZXhw ciwgdHJlZSBtaW52YWwsIHRyZWUgcmFuZ2UsCiAgIHJ0eCBpbmRleDsKIAogICBpZiAoISB0YXJn ZXRtLmhhdmVfdGFibGVqdW1wICgpKQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsK IAogICBpbmRleF9leHByID0gZm9sZF9idWlsZDIgKE1JTlVTX0VYUFIsIGluZGV4X3R5cGUsCiAJ CQkgICAgZm9sZF9jb252ZXJ0IChpbmRleF90eXBlLCBpbmRleF9leHByKSwKQEAgLTEzMzgzLDcg KzEzMzgzLDcgQEAgdHJ5X3RhYmxlanVtcCAodHJlZSBpbmRleF90eXBlLCB0cmVlIGluZGV4X2V4 cHIsIHRyZWUgbWludmFsLCB0cmVlIHJhbmdlLAogCQkJICAgICAgIGV4cGFuZF9ub3JtYWwgKHJh bmdlKSwKIAkJCSAgICAgICBUWVBFX1VOU0lHTkVEIChUUkVFX1RZUEUgKHJhbmdlKSkpLAogCQl0 YWJsZV9sYWJlbCwgZGVmYXVsdF9sYWJlbCwgZGVmYXVsdF9wcm9iYWJpbGl0eSk7Ci0gIHJldHVy biAxOworICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogUmV0dXJuIGEgQ09OU1RfVkVDVE9SIHJ0eCBy ZXByZXNlbnRpbmcgdmVjdG9yIG1hc2sgZm9yCmRpZmYgLS1naXQgYS9nY2MvZXhwci5oIGIvZ2Nj L2V4cHIuaAppbmRleCAwYzA1OWVkOTAyMy4uMTFiZmY1MzE4NjIgMTAwNjQ0Ci0tLSBhL2djYy9l eHByLmgKKysrIGIvZ2NjL2V4cHIuaApAQCAtMjIyLDE2ICsyMjIsMTYgQEAgZXh0ZXJuIGJvb2wg c2V0X3N0b3JhZ2VfdmlhX3NldG1lbSAocnR4LCBydHgsIHJ0eCwgdW5zaWduZWQgaW50LAogCQkJ CSAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAogCQkJCSAgICB1bnNpZ25lZCBIT1NUX1dJREVf SU5UKTsKIAotLyogUmV0dXJuIG5vbnplcm8gaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHN0b3JlIExF TiBieXRlcyBnZW5lcmF0ZWQgYnkKKy8qIFJldHVybiB0cnVlIGlmIGl0IGlzIGRlc2lyYWJsZSB0 byBzdG9yZSBMRU4gYnl0ZXMgZ2VuZXJhdGVkIGJ5CiAgICBDT05TVEZVTiB3aXRoIHNldmVyYWwg bW92ZSBpbnN0cnVjdGlvbnMgYnkgc3RvcmVfYnlfcGllY2VzCiAgICBmdW5jdGlvbi4gIENPTlNU RlVOREFUQSBpcyBhIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnQKICAg IGluIGV2ZXJ5IENPTlNURlVOIGNhbGwuCiAgICBBTElHTiBpcyBtYXhpbXVtIGFsaWdubWVudCB3 ZSBjYW4gYXNzdW1lLgogICAgTUVNU0VUUCBpcyB0cnVlIGlmIHRoaXMgaXMgYSByZWFsIG1lbXNl dC9iemVybywgbm90IGEgY29weQogICAgb2YgYSBjb25zdCBzdHJpbmcuICAqLwotZXh0ZXJuIGlu dCBjYW5fc3RvcmVfYnlfcGllY2VzICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAotCQkJCWJ5X3Bp ZWNlc19jb25zdGZuLAotCQkJCXZvaWQgKiwgdW5zaWduZWQgaW50LCBib29sKTsKK2V4dGVybiBi b29sIGNhbl9zdG9yZV9ieV9waWVjZXMgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsCisJCQkJIGJ5 X3BpZWNlc19jb25zdGZuLAorCQkJCSB2b2lkICosIHVuc2lnbmVkIGludCwgYm9vbCk7CiAKIC8q IEdlbmVyYXRlIHNldmVyYWwgbW92ZSBpbnN0cnVjdGlvbnMgdG8gc3RvcmUgTEVOIGJ5dGVzIGdl bmVyYXRlZCBieQogICAgQ09OU1RGVU4gdG8gYmxvY2sgVE8uICAoQSBNRU0gcnR4IHdpdGggQkxL bW9kZSkuICBDT05TVEZVTkRBVEEgaXMgYQpAQCAtMzI5LDEwICszMjksMTIgQEAgZXh0ZXJuIGVu dW0gdHJlZV9jb2RlIG1heWJlX29wdGltaXplX21vZF9jbXAgKGVudW0gdHJlZV9jb2RlLCB0cmVl ICosIHRyZWUgKik7CiBleHRlcm4gdm9pZCBtYXliZV9vcHRpbWl6ZV9zdWJfY21wXzAgKGVudW0g dHJlZV9jb2RlLCB0cmVlICosIHRyZWUgKik7CiAKIC8qIFR3byBkaWZmZXJlbnQgd2F5cyBvZiBn ZW5lcmF0aW5nIHN3aXRjaCBzdGF0ZW1lbnRzLiAgKi8KLWV4dGVybiBpbnQgdHJ5X2Nhc2VzaSAo dHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgcnR4LCBydHgsIHJ0eCwgcHJvZmlsZV9wcm9iYWJpbGl0 eSk7Ci1leHRlcm4gaW50IHRyeV90YWJsZWp1bXAgKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHJ0 eCwgcnR4LCBwcm9maWxlX3Byb2JhYmlsaXR5KTsKK2V4dGVybiBib29sIHRyeV9jYXNlc2kgKHRy ZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHJ0eCwgcnR4LCBydHgsCisJCQlwcm9maWxlX3Byb2JhYmls aXR5KTsKK2V4dGVybiBib29sIHRyeV90YWJsZWp1bXAgKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUs IHJ0eCwgcnR4LAorCQkJICAgcHJvZmlsZV9wcm9iYWJpbGl0eSk7CiAKLWV4dGVybiBpbnQgc2Fm ZV9mcm9tX3AgKGNvbnN0X3J0eCwgdHJlZSwgaW50KTsKK2V4dGVybiBib29sIHNhZmVfZnJvbV9w IChjb25zdF9ydHgsIHRyZWUsIGludCk7CiAKIC8qIEdldCB0aGUgcGVyc29uYWxpdHkgbGliZnVu YyBmb3IgYSBmdW5jdGlvbiBkZWNsLiAgKi8KIHJ0eCBnZXRfcGVyc29uYWxpdHlfZnVuY3Rpb24g KHRyZWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL3NiaXRtYXAuY2MgYi9nY2Mvc2JpdG1hcC5jYwppbmRl eCA4MjBmYWI1NWU3Mi4uNDFhOWU2Mzg0NDggMTAwNjQ0Ci0tLSBhL2djYy9zYml0bWFwLmNjCisr KyBiL2djYy9zYml0bWFwLmNjCkBAIC0xODcsNyArMTg3LDcgQEAgYml0bWFwX2NvcHkgKHNiaXRt YXAgZHN0LCBjb25zdF9zYml0bWFwIHNyYykKIH0KIAogLyogRGV0ZXJtaW5lIGlmIGEgPT0gYi4g ICovCi1pbnQKK2Jvb2wKIGJpdG1hcF9lcXVhbF9wIChjb25zdF9zYml0bWFwIGEsIGNvbnN0X3Ni aXRtYXAgYikKIHsKICAgYml0bWFwX2NoZWNrX3NpemVzIChhLCBiKTsKZGlmZiAtLWdpdCBhL2dj Yy9zYml0bWFwLmggYi9nY2Mvc2JpdG1hcC5oCmluZGV4IDYxMTcyZGI5ZDdiLi45M2Y3NGY0Y2Q1 ZiAxMDA2NDQKLS0tIGEvZ2NjL3NiaXRtYXAuaAorKysgYi9nY2Mvc2JpdG1hcC5oCkBAIC0yNjQs NyArMjY0LDcgQEAgZXh0ZXJuIHNiaXRtYXAgc2JpdG1hcF9hbGxvYyAodW5zaWduZWQgaW50KTsK IGV4dGVybiBzYml0bWFwICpzYml0bWFwX3ZlY3Rvcl9hbGxvYyAodW5zaWduZWQgaW50LCB1bnNp Z25lZCBpbnQpOwogZXh0ZXJuIHNiaXRtYXAgc2JpdG1hcF9yZXNpemUgKHNiaXRtYXAsIHVuc2ln bmVkIGludCwgaW50KTsKIGV4dGVybiB2b2lkIGJpdG1hcF9jb3B5IChzYml0bWFwLCBjb25zdF9z Yml0bWFwKTsKLWV4dGVybiBpbnQgYml0bWFwX2VxdWFsX3AgKGNvbnN0X3NiaXRtYXAsIGNvbnN0 X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgYml0bWFwX2VxdWFsX3AgKGNvbnN0X3NiaXRtYXAsIGNv bnN0X3NiaXRtYXApOwogZXh0ZXJuIHVuc2lnbmVkIGludCBiaXRtYXBfY291bnRfYml0cyAoY29u c3Rfc2JpdG1hcCk7CiBleHRlcm4gYm9vbCBiaXRtYXBfZW1wdHlfcCAoY29uc3Rfc2JpdG1hcCk7 CiBleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXIgKHNiaXRtYXApOwo= --000000000000032c0f05ff466a8f--