Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mGIzG-0004rJ-OJ for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Aug 2021 10:39:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mGIzE-0006rg-EY for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Aug 2021 10:39:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mGIzE-0006rY-1G for pgsql-hackers@lists.postgresql.org; Wed, 18 Aug 2021 10:39:56 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mGIzB-0005CM-DF for pgsql-hackers@lists.postgresql.org; Wed, 18 Aug 2021 10:39:55 +0000 Received: by mail-pl1-x62a.google.com with SMTP id c17so1553122plz.2 for ; Wed, 18 Aug 2021 03:39:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DL8mlHqJ0QYrwqkD5EKzCpRUU2vExJ1S9mK3hdQY88o=; b=BQDFgKd4qzZHvYVrQuhj88ptodoGmuwSg4vcRCxrbLqtl/J0BohN8esPmmdAJk1vNg GRmgPG4fN0q8k7IQZKY+iEICnVXbjKyaDbUCeqVehVB43Eyk/HinaQxgbWqPHL3w/5JM QNu8EHfvfElJneH9T6Yl8NxaX+m8I6F2KEjypW5KoSSqyBzJLAxW9qCa3LLkXS7tUY6g LGK3zZL1nOYMGZul71uJbtE37pzsqCzMIs3OTLxEfPfHQYg5ur6FsoNVpXptO7dMtsWB RppmZhfFiX+Di3jXj9PnL6LITdcSsMqI/26TZlvm+jqMff0brvtBMBMDCsjsoEF2FEMA BydQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=DL8mlHqJ0QYrwqkD5EKzCpRUU2vExJ1S9mK3hdQY88o=; b=KTO4oI3kPQtCYkRZCIeek6rE0R9OdanHdCZHPrUsp/tHDJTic3wdinhPjdN9nyQumh 990eY0wwm4AaDO2RxvxhO8bpi7tgVT28xMAnAjYh7tD4ANrl9VjBZVnsF8UZSCm++FYb GlzHI2ObSRHhDFuvkirTm2vtygKhMuohGnNh4uAovzBfa6dTDBTT8PSTMogs8RY2XPX7 w3kwDo6VQQ3RB8Te3zmD4uZW/LZT1Csq96SJK6cBhbqWCiqoGiHtk92SjwWeeEBsWzyb Sc54jeQzn+Q2sc2Il9xgHLt98CXQ07h6lr2hytUnsnojczkirQpwAgxdnN/fnf7mk+GO TQbA== X-Gm-Message-State: AOAM531SFbqN2+tJdT51ThpUySZ7wQUuIaC7/g4B9p/GvHWhxiXvpMF8 a0VxcF9xJ8WLL4RUQJy2pq+y8I5JA8DvGPuY9o0= X-Google-Smtp-Source: ABdhPJzohht+mj0i6qxlh8Um0E7eGp0oTy3npYSAR5Trm2EuCcWS9R0HJba5Y/11ZT4rQlLO1Xfc02t1Kzb40qyVrhI= X-Received: by 2002:a17:90a:bf92:: with SMTP id d18mr8966336pjs.193.1629283190925; Wed, 18 Aug 2021 03:39:50 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: David Rowley Date: Wed, 18 Aug 2021 22:39:36 +1200 Message-ID: Subject: Re: Window Function "Run Conditions" To: Zhihong Yu Cc: PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000d602b605c9d30dae" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d602b605c9d30dae Content-Type: text/plain; charset="UTF-8" On Tue, 17 Aug 2021 at 03:51, Zhihong Yu wrote: > + if ((res->monotonic & MONOTONICFUNC_INCREASING) == MONOTONICFUNC_INCREASING) > > The above can be simplified as 'if (res->monotonic & MONOTONICFUNC_INCREASING) ' True. I've attached an updated patch. David --000000000000d602b605c9d30dae Content-Type: application/octet-stream; name="v3_teach_planner_and_executor_about_monotonic_wfuncs.patch" Content-Disposition: attachment; filename="v3_teach_planner_and_executor_about_monotonic_wfuncs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kshd453j0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAxMDY0NGRmYWM0Li42OTBiYTg4ZTdlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCkBAIC0xOTc5LDYgKzE5NzksMTAgQEAgRXhwbGFpbk5vZGUoUGxhblN0 YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlzaG93X2luc3RydW1lbnRhdGlv bl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0 YXRlLCBlcyk7CiAJCQlicmVhazsKKwkJY2FzZSBUX1dpbmRvd0FnZzoKKwkJCXNob3dfdXBwZXJf cXVhbCgoKFdpbmRvd0FnZyAqKSBwbGFuKS0+cnVuY29uZGl0aW9ub3JpZywKKwkJCQkJCQkiUnVu IENvbmRpdGlvbiIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CisJCQlicmVhazsKIAkJY2Fz ZSBUX0dyb3VwOgogCQkJc2hvd19ncm91cF9rZXlzKGNhc3ROb2RlKEdyb3VwU3RhdGUsIHBsYW5z dGF0ZSksIGFuY2VzdG9ycywgZXMpOwogCQkJc2hvd191cHBlcl9xdWFsKHBsYW4tPnF1YWwsICJG aWx0ZXIiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdp bmRvd0FnZy5jCmluZGV4IGY4ZWE5ZTk2ZDguLmFkNWZjZGQxM2IgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlV2luZG93QWdnLmMKQEAgLTIwMjMsNiArMjAyMyw3IEBAIHN0YXRpYyBUdXBsZVRhYmxl U2xvdCAqCiBFeGVjV2luZG93QWdnKFBsYW5TdGF0ZSAqcHN0YXRlKQogewogCVdpbmRvd0FnZ1N0 YXRlICp3aW5zdGF0ZSA9IGNhc3ROb2RlKFdpbmRvd0FnZ1N0YXRlLCBwc3RhdGUpOworCVR1cGxl VGFibGVTbG90ICpzbG90OwogCUV4cHJDb250ZXh0ICplY29udGV4dDsKIAlpbnQJCQlpOwogCWlu dAkJCW51bWZ1bmNzOwpAQCAtMjIzNSw3ICsyMjM2LDIwIEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0 YXRlICpwc3RhdGUpCiAJICovCiAJZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHdpbnN0YXRl LT5zcy5zc19TY2FuVHVwbGVTbG90OwogCi0JcmV0dXJuIEV4ZWNQcm9qZWN0KHdpbnN0YXRlLT5z cy5wcy5wc19Qcm9qSW5mbyk7CisJc2xvdCA9IEV4ZWNQcm9qZWN0KHdpbnN0YXRlLT5zcy5wcy5w c19Qcm9qSW5mbyk7CisKKwkvKgorCSAqIE5vdyBldmFsdWF0ZSB0aGUgcnVuIGNvbmRpdGlvbiB0 byBzZWUgaWYgd2UgbmVlZCB0byBjb250aW51ZSBmdXJ0aGVyCisJICogd2l0aCBleGVjdXRpb24u CisJICovCisJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKKwlpZiAoIUV4ZWNRdWFs KHdpbnN0YXRlLT5ydW5jb25kaXRpb24sIGVjb250ZXh0KSkKKwl7CisJCXdpbnN0YXRlLT5hbGxf ZG9uZSA9IHRydWU7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBzbG90OwogfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjMwNyw2ICsyMzIxLDE4IEBAIEV4ZWNJbml0V2luZG93 QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJQXNzZXJ0 KG5vZGUtPnBsYW4ucXVhbCA9PSBOSUwpOwogCXdpbnN0YXRlLT5zcy5wcy5xdWFsID0gTlVMTDsK IAorCS8qCisJICogU2V0dXAgdGhlIHJ1biBjb25kaXRpb24sIGlmIHdlIHJlY2VpdmVkIG9uZSBm cm9tIHRoZSBxdWVyeSBwbGFubmVyLgorCSAqIFdoZW4gc2V0LCB0aGlzIGNhbiBhbGxvdyB1cyB0 byBmaW5pc2ggZXhlY3V0aW9uIGVhcmx5IGJlY2F1c2Ugd2Uga25vdworCSAqIHNvbWUgaGlnaGVy LWxldmVsIGZpbHRlciBleGlzdHMgdGhhdCB3b3VsZCBqdXN0IGZpbHRlciBvdXQgYW55IGZ1cnRo ZXIKKwkgKiByZXN1bHRzIHRoYXQgd2UgcHJvZHVjZS4KKwkgKi8KKwlpZiAobm9kZS0+cnVuY29u ZGl0aW9uICE9IE5JTCkKKwkJd2luc3RhdGUtPnJ1bmNvbmRpdGlvbiA9IEV4ZWNJbml0UXVhbChu b2RlLT5ydW5jb25kaXRpb24sCisJCQkJCQkJCQkJCSAgKFBsYW5TdGF0ZSAqKSB3aW5zdGF0ZSk7 CisJZWxzZQorCQl3aW5zdGF0ZS0+cnVuY29uZGl0aW9uID0gTlVMTDsKKwogCS8qCiAJICogaW5p dGlhbGl6ZSBjaGlsZCBub2RlcwogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCAzODI1MWMy YjhlLi5hMTg3NmZlNTRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTA5NSw2ICsxMDk1LDgg QEAgX2NvcHlXaW5kb3dBZ2coY29uc3QgV2luZG93QWdnICpmcm9tKQogCUNPUFlfU0NBTEFSX0ZJ RUxEKGZyYW1lT3B0aW9ucyk7CiAJQ09QWV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT1BZ X05PREVfRklFTEQoZW5kT2Zmc2V0KTsKKwlDT1BZX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsK KwlDT1BZX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQo c3RhcnRJblJhbmdlRnVuYyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoZW5kSW5SYW5nZUZ1bmMpOwog CUNPUFlfU0NBTEFSX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTI1NzEsNiArMjU3Myw4IEBAIF9j b3B5V2luZG93Q2xhdXNlKGNvbnN0IFdpbmRvd0NsYXVzZSAqZnJvbSkKIAlDT1BZX1NDQUxBUl9G SUVMRChmcmFtZU9wdGlvbnMpOwogCUNPUFlfTk9ERV9GSUVMRChzdGFydE9mZnNldCk7CiAJQ09Q WV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJQ09QWV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbik7 CisJQ09QWV9OT0RFX0ZJRUxEKHJ1bmNvbmRpdGlvbm9yaWcpOwogCUNPUFlfU0NBTEFSX0ZJRUxE KHN0YXJ0SW5SYW5nZUZ1bmMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGVuZEluUmFuZ2VGdW5jKTsK IAlDT1BZX1NDQUxBUl9GSUVMRChpblJhbmdlQ29sbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5k ZXggOGExNzYyMDAwYy4uNzkxMzZlYzQ3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMv ZXF1YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMjgz NCw2ICsyODM0LDggQEAgX2VxdWFsV2luZG93Q2xhdXNlKGNvbnN0IFdpbmRvd0NsYXVzZSAqYSwg Y29uc3QgV2luZG93Q2xhdXNlICpiKQogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGZyYW1lT3B0aW9u cyk7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT01QQVJFX05PREVfRklF TEQoZW5kT2Zmc2V0KTsKKwlDT01QQVJFX05PREVfRklFTEQocnVuY29uZGl0aW9uKTsKKwlDT01Q QVJFX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQo c3RhcnRJblJhbmdlRnVuYyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoZW5kSW5SYW5nZUZ1bmMp OwogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGluUmFuZ2VDb2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmlu ZGV4IDg3NTYxY2JiNmYuLjQxYjNkNjZmZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVz L291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtODE5LDYg KzgxOSw4IEBAIF9vdXRXaW5kb3dBZ2coU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpbmRvd0FnZyAq bm9kZSkKIAlXUklURV9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklURV9OT0RFX0ZJRUxE KHN0YXJ0T2Zmc2V0KTsKIAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7CisJV1JJVEVfTk9E RV9GSUVMRChydW5jb25kaXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVuY29uZGl0aW9ub3Jp Zyk7CiAJV1JJVEVfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVM RChlbmRJblJhbmdlRnVuYyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTMx NDIsNiArMzE0NCw4IEBAIF9vdXRXaW5kb3dDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdp bmRvd0NsYXVzZSAqbm9kZSkKIAlXUklURV9JTlRfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlXUklU RV9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlXUklURV9OT0RFX0ZJRUxEKGVuZE9mZnNldCk7 CisJV1JJVEVfTk9ERV9GSUVMRChydW5jb25kaXRpb24pOworCVdSSVRFX05PREVfRklFTEQocnVu Y29uZGl0aW9ub3JpZyk7CiAJV1JJVEVfT0lEX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1bmMpOwogCVdS SVRFX09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJV1JJVEVfT0lEX0ZJRUxEKGluUmFuZ2VD b2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggMGRkMWFkN2RmYy4uMzY2ZDJlZjQzZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTM4NCw2ICszODQsOCBAQCBfcmVhZFdpbmRvd0NsYXVzZSh2 b2lkKQogCVJFQURfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJUkVBRF9OT0RFX0ZJRUxEKHN0 YXJ0T2Zmc2V0KTsKIAlSRUFEX05PREVfRklFTEQoZW5kT2Zmc2V0KTsKKwlSRUFEX05PREVfRklF TEQocnVuY29uZGl0aW9uKTsKKwlSRUFEX05PREVfRklFTEQocnVuY29uZGl0aW9ub3JpZyk7CiAJ UkVBRF9PSURfRklFTEQoc3RhcnRJblJhbmdlRnVuYyk7CiAJUkVBRF9PSURfRklFTEQoZW5kSW5S YW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKQEAgLTIzNDYsNiArMjM0 OCw4IEBAIF9yZWFkV2luZG93QWdnKHZvaWQpCiAJUkVBRF9JTlRfRklFTEQoZnJhbWVPcHRpb25z KTsKIAlSRUFEX05PREVfRklFTEQoc3RhcnRPZmZzZXQpOwogCVJFQURfTk9ERV9GSUVMRChlbmRP ZmZzZXQpOworCVJFQURfTk9ERV9GSUVMRChydW5jb25kaXRpb24pOworCVJFQURfTk9ERV9GSUVM RChydW5jb25kaXRpb25vcmlnKTsKIAlSRUFEX09JRF9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsK IAlSRUFEX09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJUkVBRF9PSURfRklFTEQoaW5SYW5n ZUNvbGwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggMjk2ZGQ3NWMx Yi4uNWM2MTJlNTNlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0y Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMv c3VwcG9ydG5vZGVzLmgiCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAjaW5jbHVkZSAibm9kZXMv cHJpbnQuaCIKICNlbmRpZgpAQCAtMjA5MCw2ICsyMDkxLDM3NyBAQCBoYXNfbXVsdGlwbGVfYmFz ZXJlbHMoUGxhbm5lckluZm8gKnJvb3QpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogZmlu ZF93aW5kb3dfcnVuX2NvbmRpdGlvbnMKKyAqCQlDYWxsIHdmdW5jJ3MgcHJvc3VwcG9ydCBmdW5j dGlvbiB0byBhc2sgaWYgdGhlIGdpdmVuIHdpbmRvdyBmdW5jdGlvbgorICoJCWlzIG1vbm90b25p YyBhbmQgdGhlbiBzZWUgaWYgJ29wZXhwcicgY2FuIGJlIHVzZWQgdG8gc3RvcCBwcm9jZXNzaW5n CisgKgkJV2luZG93QWdnIG5vZGVzIGVhcmx5LgorICoKKyAqIEZvciBleGFtcGxlIHJvd19udW1i ZXIoKSBvdmVyIChvcmRlciBieSAuLi4pIGFsd2F5cyBwcm9kdWNlcyBhIHZhbHVlIG9uZQorICog aGlnaGVyIHRoYW4gdGhlIHByZXZpb3VzLiAgSWYgc29tZW9uZSBoYXMgYSB3aW5kb3cgZnVuY3Rp b24gc3VjaCBhcyB0aGF0CisgKiBpbiBhIHN1YnF1ZXJ5IGFuZCBqdXN0IHdhbnRzLCBzYXkgYWxs IHJvd3Mgd2l0aCBhIHJvdyBudW1iZXIgbGVzcyB0aGFuIG9yCisgKiBlcXVhbCB0byAxMCwgdGhl biB3ZSBtYXkgYXMgd2VsbCBzdG9wIHByb2Nlc3NpbmcgdGhlIHdpbmRvd2FnZyBvbmNlIHRoZSBy b3cKKyAqIG51bWJlciByZWFjaGVzIDExLiAgSGVyZSB3ZSBsb29rIGZvciBvcGV4cHJzIHRoYXQg bWlnaHQgaGVscCB1cyB0byBzdG9wCisgKiBkb2luZyBuZWVkbGVzcyBleHRyYSBwcm9jZXNzaW5n IGluIFdpbmRvd0FnZyBub2Rlcy4KKyAqCisgKiBUbyBkbyB0aGlzIHdlIG1ha2UgdXNlIG9mIHRo ZSB3aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBwb3J0IGZ1bmN0aW9uIHRvCisgKiBkZXRlcm1pbmUg aWYgdGhlIGdpdmVuIHdpbmRvdyBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiB3aW5kb3cgY2xhdXNl IGlzIGEKKyAqIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIGZ1bmN0aW9u LgorICoKKyAqICcqa2VlcF9vcmlnaW5hbCcgaXMgc2V0IHRvIHRydWUgaWYgdGhlIGNhbGxlciBz aG91bGQgYWxzbyB1c2UgJ29wZXhwcicgZm9yCisgKiBpdHMgb3JpZ2luYWwgcHVycG9zZS4gIFRo aXMgaXMgc2V0IHRvIGZhbHNlIGlmIHRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0CisgKiB0aGUg cnVuIGNvbmRpdGlvbiB3aWxsIGhhbmRsZSBhbGwgb2YgdGhlIHJlcXVpcmVkIGZpbHRlcmluZy4K KyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBydW4gY29uZGl0aW9uIHF1YWwgd2FzIGZvdW5kIGFu ZCBhZGRlZCB0byB0aGUKKyAqIHdjbGF1c2UtPnJ1bmNvbmRpdGlvbiBsaXN0IGFuZCBzZXRzICpr ZWVwX29yaWdpbmFsIGFjY29yZGluZ2x5LiAgUmV0dXJucworICogZmFsc2UgaWYgdW5hYmxlIHRv IHVzZSAnb3BleHByJyBhcyBhIHJ1biBjb25kaXRpb24gYW5kIGRvZXMgbm90IHNldAorICogKmtl ZXBfb3JpZ2luYWwuCisgKi8KK3N0YXRpYyBib29sCitmaW5kX3dpbmRvd19ydW5fY29uZGl0aW9u cyhRdWVyeSAqc3VicXVlcnksIFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRpLAorCQkJCQkJ ICAgQXR0ck51bWJlciBhdHRubywgV2luZG93Q2xhdXNlICp3Y2xhdXNlLAorCQkJCQkJICAgV2lu ZG93RnVuYyAqd2Z1bmMsIE9wRXhwciAqb3BleHByLCBib29sIHdmdW5jX2xlZnQsCisJCQkJCQkg ICBib29sICprZWVwX29yaWdpbmFsKQoreworCU9pZAkJCXByb3N1cHBvcnQ7CisJRXhwcgkgICAq b3RoZXJleHByOworCVN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgcmVxOworCVN1cHBvcnRS ZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKnJlczsKKwlMaXN0CSAgICpvcGluZm9zOworCU9wRXhwcgkg ICAqcnVub3BleHByOworCUxpc3RDZWxsICAgKmxjOworCisJKmtlZXBfb3JpZ2luYWwgPSB0cnVl OworCisJcHJvc3VwcG9ydCA9IGdldF9mdW5jX3N1cHBvcnQod2Z1bmMtPndpbmZub2lkKTsKKwor CS8qIENoZWNrIGlmIHRoZXJlJ3MgYSBzdXBwb3J0IGZ1bmN0aW9uIGZvciAnd2Z1bmMnICovCisJ aWYgKCFPaWRJc1ZhbGlkKHByb3N1cHBvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAq IEN1cnJlbnRseSB0aGUgV2luZG93QWdnIG5vZGUganVzdCBzdG9wIHdoZW4gdGhlIHJ1biBjb25k aXRpb24gaXMgbm8KKwkgKiBsb25nZXIgdHJ1ZS4gIElmIHRoZXJlIGlzIGEgUEFSVElUSU9OIEJZ IGNsYXVzZSB0aGVuIHdlIGNhbm5vdCBqdXN0CisJICogc3RvcCBhcyBvdGhlciBwYXJ0aXRpb25z IHN0aWxsIG5lZWQgdG8gYmUgcHJvY2Vzc2VkLgorCSAqLworCWlmICh3Y2xhdXNlLT5wYXJ0aXRp b25DbGF1c2UgIT0gTklMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBnZXQgdGhlIEV4cHIgZnJv bSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgT3BFeHByICovCisJaWYgKHdmdW5jX2xlZnQpCisJCW90 aGVyZXhwciA9IGxzZWNvbmQob3BleHByLT5hcmdzKTsKKwllbHNlCisJCW90aGVyZXhwciA9IGxp bml0aWFsKG9wZXhwci0+YXJncyk7CisKKwkvKgorCSAqIFRoZSB2YWx1ZSBiZWluZyBjb21wYXJl ZCBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZQorCSAqIHdpbmRv dyBwYXJ0aXRpb24uCisJICovCisJaWYgKCFpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlKChOb2Rl ICopIG90aGVyZXhwcikpCisJCXJldHVybiBmYWxzZTsKKworCXJlcS50eXBlID0gVF9TdXBwb3J0 UmVxdWVzdFdGdW5jTW9ub3RvbmljOworCXJlcS53aW5kb3dfZnVuYyA9IHdmdW5jOworCXJlcS53 aW5kb3dfY2xhdXNlID0gd2NsYXVzZTsKKworCS8qIENhbGwgdGhlIHN1cHBvcnQgZnVuY3Rpb24g Ki8KKwlyZXMgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKQorCQlEYXR1bUdldFBv aW50ZXIoT2lkRnVuY3Rpb25DYWxsMShwcm9zdXBwb3J0LAorCQkJCQkJCQkJCSBQb2ludGVyR2V0 RGF0dW0oJnJlcSkpKTsKKworCS8qCisJICogTm90aGluZyB0byBkbyBpZiB0aGUgZnVuY3Rpb24g aXMgbm90IG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvcgorCSAqIGRlY3JlYXNpbmcuCisJICov CisJaWYgKHJlcyA9PSBOVUxMIHx8IHJlcy0+bW9ub3RvbmljID09IE1PTk9UT05JQ0ZVTkNfTk9O RSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnVub3BleHByID0gTlVMTDsKKwlvcGluZm9zID0gZ2V0 X29wX2J0cmVlX2ludGVycHJldGF0aW9uKG9wZXhwci0+b3Bubyk7CisKKwlmb3JlYWNoKGxjLCBv cGluZm9zKQorCXsKKwkJT3BCdHJlZUludGVycHJldGF0aW9uICpvcGluZm8gPSAoT3BCdHJlZUlu dGVycHJldGF0aW9uICopIGxmaXJzdChsYyk7CisJCWludAkJCXN0cmF0ZWd5ID0gb3BpbmZvLT5z dHJhdGVneTsKKworCQlpZiAod2Z1bmNfbGVmdCkKKwkJeworCQkJLyogSGFuZGxlIDwgLyA8PSAq LworCQkJaWYgKHN0cmF0ZWd5ID09IEJUTGVzc1N0cmF0ZWd5TnVtYmVyIHx8CisJCQkJc3RyYXRl Z3kgPT0gQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElm IHRoZSBmcmFtZSBpcyBib3VuZCB0byB0aGUgdG9wIG9mIHRoZSB3aW5kb3cgdGhlbiB0aGUKKwkJ CQkgKiByZXN1bHQgY2Fubm90IGRlY3JlYXNlLgorCQkJCSAqLworCQkJCWlmIChyZXMtPm1vbm90 b25pYyAmIE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORykKKwkJCQl7CisJCQkJCSprZWVwX29yaWdp bmFsID0gZmFsc2U7CisJCQkJCXJ1bm9wZXhwciA9IG9wZXhwcjsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQl9CisJCQkvKiBIYW5kbGUgPiAvID49ICovCisJCQllbHNlIGlmIChzdHJhdGVneSA9PSBC VEdyZWF0ZXJTdHJhdGVneU51bWJlciB8fAorCQkJCQkgc3RyYXRlZ3kgPT0gQlRHcmVhdGVyRXF1 YWxTdHJhdGVneU51bWJlcikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBmcmFtZSBpcyBi b3VuZCB0byB0aGUgYm90dG9tIG9mIHRoZSB3aW5kb3cgdGhlbiB0aGUKKwkJCQkgKiByZXN1bHQg Y2Fubm90IGluY3JlYXNlLgorCQkJCSAqLworCQkJCWlmIChyZXMtPm1vbm90b25pYyAmIE1PTk9U T05JQ0ZVTkNfREVDUkVBU0lORykKKwkJCQl7CisJCQkJCSprZWVwX29yaWdpbmFsID0gZmFsc2U7 CisJCQkJCXJ1bm9wZXhwciA9IG9wZXhwcjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCQkv KiBIYW5kbGUgPSAqLworCQkJZWxzZSBpZiAoc3RyYXRlZ3kgPT0gQlRFcXVhbFN0cmF0ZWd5TnVt YmVyKQorCQkJeworCQkJCU9wRXhwcgkgICAqbmV3b3BleHByOworCQkJCU9pZAkJCW9wOworCQkJ CWludDE2CQluZXdzdHJhdGVneTsKKworCQkJCS8qCisJCQkJICogV2hlbiBib3RoIG1vbm90b25p Y2FsbHkgaW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZyB0aGVuIHRoZQorCQkJCSAqIHJldHVybiB2 YWx1ZSBvZiB0aGUgd2luZG93IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIHNhbWUgZWFjaAorCQkJCSAq IHRpbWUuICBXZSBjYW4gc2ltcGx5IHVzZSAnb3BleHByJyBhcyB0aGUgcnVuIGNvbmRpdGlvbgor CQkJCSAqIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LgorCQkJCSAqLworCQkJCWlmICgocmVzLT5tb25v dG9uaWMgJiBNT05PVE9OSUNGVU5DX0JPVEgpID09IE1PTk9UT05JQ0ZVTkNfQk9USCkKKwkJCQl7 CisJCQkJCSprZWVwX29yaWdpbmFsID0gZmFsc2U7CisJCQkJCXJ1bm9wZXhwciA9IG9wZXhwcjsK KwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBXaGVuIG1vbm90b25pY2FsbHkg aW5jcmVhc2luZyB3ZSBtYWtlIGEgcXVhbCB3aXRoIDx3ZnVuYz4KKwkJCQkgKiA8PSA8dmFsdWU+ IGluIG9yZGVyIHRvIGZpbHRlciBvdXQgdmFsdWVzIHdoaWNoIGFyZSBhYm92ZQorCQkJCSAqIHRo ZSB2YWx1ZSBpbiB0aGUgZXF1YWxpdHkgY29uZGl0aW9uLiAgRm9yIG1vbm90b25pY2FsbHkKKwkJ CQkgKiBkZWNyZWFzaW5nIHdlIHdhbnQgdG8gZmlsdGVyIHZhbHVlcyBiZWxvdyB0aGUgdmFsdWUg aW4gdGhlCisJCQkJICogZXF1YWxpdHkgY29uZGl0aW9uLgorCQkJCSAqLworCQkJCWlmIChyZXMt Pm1vbm90b25pYyAmIE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORykKKwkJCQkJbmV3c3RyYXRlZ3kg PSBCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVyOworCQkJCWVsc2UKKwkJCQkJbmV3c3RyYXRlZ3kg PSBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVtYmVyOworCisJCQkJb3AgPSBnZXRfb3BmYW1pbHlf bWVtYmVyKG9waW5mby0+b3BmYW1pbHlfaWQsCisJCQkJCQkJCQkJIG9waW5mby0+b3BsZWZ0dHlw ZSwKKwkJCQkJCQkJCQkgb3BpbmZvLT5vcHJpZ2h0dHlwZSwKKwkJCQkJCQkJCQkgbmV3c3RyYXRl Z3kpOworCisJCQkJbmV3b3BleHByID0gKE9wRXhwciAqKSBtYWtlX29wY2xhdXNlKG9wLAorCQkJ CQkJCQkJCQkJCSBvcGV4cHItPm9wcmVzdWx0dHlwZSwKKwkJCQkJCQkJCQkJCQkgb3BleHByLT5v cHJldHNldCwKKwkJCQkJCQkJCQkJCQkgKEV4cHIgKikgd2Z1bmMsCisJCQkJCQkJCQkJCQkJIG90 aGVyZXhwciwKKwkJCQkJCQkJCQkJCQkgb3BleHByLT5vcGNvbGxpZCwKKwkJCQkJCQkJCQkJCQkg b3BleHByLT5pbnB1dGNvbGxpZCk7CisJCQkJbmV3b3BleHByLT5vcGZ1bmNpZCA9IGdldF9vcGNv ZGUob3ApOworCisJCQkJKmtlZXBfb3JpZ2luYWwgPSB0cnVlOworCQkJCXJ1bm9wZXhwciA9IG5l d29wZXhwcjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEhhbmRs ZSA+IC8gPj0gKi8KKwkJCWlmIChzdHJhdGVneSA9PSBCVEdyZWF0ZXJTdHJhdGVneU51bWJlciB8 fAorCQkJCXN0cmF0ZWd5ID09IEJUR3JlYXRlckVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBJZiB0aGUgZnJhbWUgaXMgYm91bmQgdG8gdGhlIHRvcCBvZiB0aGUgd2lu ZG93IHRoZW4gdGhlCisJCQkJICogcmVzdWx0IGNhbm5vdCBkZWNyZWFzZS4KKwkJCQkgKi8KKwkJ CQlpZiAocmVzLT5tb25vdG9uaWMgJiBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcpCisJCQkJewor CQkJCQkqa2VlcF9vcmlnaW5hbCA9IGZhbHNlOworCQkJCQlydW5vcGV4cHIgPSBvcGV4cHI7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJLyogSGFuZGxlIDwgLyA8PSAqLworCQkJZWxzZSBp ZiAoc3RyYXRlZ3kgPT0gQlRMZXNzU3RyYXRlZ3lOdW1iZXIgfHwKKwkJCQkJIHN0cmF0ZWd5ID09 IEJUTGVzc0VxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUg ZnJhbWUgaXMgYm91bmQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgd2luZG93IHRoZW4gdGhlCisJCQkJ ICogcmVzdWx0IGNhbm5vdCBpbmNyZWFzZS4KKwkJCQkgKi8KKwkJCQlpZiAocmVzLT5tb25vdG9u aWMgJiBNT05PVE9OSUNGVU5DX0RFQ1JFQVNJTkcpCisJCQkJeworCQkJCQkqa2VlcF9vcmlnaW5h bCA9IGZhbHNlOworCQkJCQlydW5vcGV4cHIgPSBvcGV4cHI7CisJCQkJfQorCQkJCWJyZWFrOwor CQkJfQorCQkJLyogSGFuZGxlID0gKi8KKwkJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IEJURXF1YWxT dHJhdGVneU51bWJlcikKKwkJCXsKKwkJCQlPcEV4cHIJICAgKm5ld29wZXhwcjsKKwkJCQlPaWQJ CQlvcDsKKwkJCQlpbnQxNgkJbmV3c3RyYXRlZ3k7CisKKwkJCQkvKgorCQkJCSAqIFdoZW4gYm90 aCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlbiB0aGUKKwkJCQkg KiByZXR1cm4gdmFsdWUgb2YgdGhlIHdpbmRvdyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBzYW1lIGVh Y2gKKwkJCQkgKiB0aW1lLiAgV2UgY2FuIHNpbXBseSB1c2UgJ29wZXhwcicgYXMgdGhlIHJ1biBj b25kaXRpb24KKwkJCQkgKiB3aXRob3V0IG1vZGlmeWluZyBpdC4KKwkJCQkgKi8KKwkJCQlpZiAo KHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19CT1RIKSA9PSBNT05PVE9OSUNGVU5DX0JP VEgpCisJCQkJeworCQkJCQkqa2VlcF9vcmlnaW5hbCA9IGZhbHNlOworCQkJCQlydW5vcGV4cHIg PSBvcGV4cHI7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogV2hlbiBtb25v dG9uaWNhbGx5IGluY3JlYXNpbmcgd2UgbWFrZSBhIHF1YWwgd2l0aCA8dmFsdWU+CisJCQkJICog Pj0gPHdmdW5jPiBpbiBvcmRlciB0byBmaWx0ZXIgb3V0IHZhbHVlcyB3aGljaCBhcmUgYWJvdmUK KwkJCQkgKiB0aGUgdmFsdWUgaW4gdGhlIGVxdWFsaXR5IGNvbmRpdGlvbi4gIEZvciBtb25vdG9u aWNhbGx5CisJCQkJICogZGVjcmVhc2luZyB3ZSB3YW50IHRvIGZpbHRlciB2YWx1ZXMgYmVsb3cg dGhlIHZhbHVlIGluIHRoZQorCQkJCSAqIGVxdWFsaXR5IGNvbmRpdGlvbi4KKwkJCQkgKi8KKwkJ CQlpZiAocmVzLT5tb25vdG9uaWMgJiBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcpCisJCQkJCW5l d3N0cmF0ZWd5ID0gQlRHcmVhdGVyRXF1YWxTdHJhdGVneU51bWJlcjsKKwkJCQllbHNlCisJCQkJ CW5ld3N0cmF0ZWd5ID0gQlRMZXNzRXF1YWxTdHJhdGVneU51bWJlcjsKKworCQkJCW9wID0gZ2V0 X29wZmFtaWx5X21lbWJlcihvcGluZm8tPm9wZmFtaWx5X2lkLAorCQkJCQkJCQkJCSBvcGluZm8t Pm9wbGVmdHR5cGUsCisJCQkJCQkJCQkJIG9waW5mby0+b3ByaWdodHR5cGUsCisJCQkJCQkJCQkJ IG5ld3N0cmF0ZWd5KTsKKworCQkJCW5ld29wZXhwciA9IChPcEV4cHIgKikgbWFrZV9vcGNsYXVz ZShvcCwKKwkJCQkJCQkJCQkJCQkgb3BleHByLT5vcHJlc3VsdHR5cGUsCisJCQkJCQkJCQkJCQkJ IG9wZXhwci0+b3ByZXRzZXQsCisJCQkJCQkJCQkJCQkJIG90aGVyZXhwciwKKwkJCQkJCQkJCQkJ CQkgKEV4cHIgKikgd2Z1bmMsCisJCQkJCQkJCQkJCQkJIG9wZXhwci0+b3Bjb2xsaWQsCisJCQkJ CQkJCQkJCQkJIG9wZXhwci0+aW5wdXRjb2xsaWQpOworCQkJCW5ld29wZXhwci0+b3BmdW5jaWQg PSBnZXRfb3Bjb2RlKG9wKTsKKworCQkJCSprZWVwX29yaWdpbmFsID0gdHJ1ZTsKKwkJCQlydW5v cGV4cHIgPSBuZXdvcGV4cHI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocnVu b3BleHByICE9IE5VTEwpCisJeworCQlFeHByCSAgICpvcmlnZXhwcjsKKworCQl3Y2xhdXNlLT5y dW5jb25kaXRpb24gPSBsYXBwZW5kKHdjbGF1c2UtPnJ1bmNvbmRpdGlvbiwgcnVub3BleHByKTsK KworCQkvKiBhbHNvIGNyZWF0ZSBhIHZlcnNpb24gb2YgdGhlIHF1YWwgdGhhdCB3ZSBjYW4gZGlz cGxheSBpbiBFWFBMQUlOICovCisJCWlmICh3ZnVuY19sZWZ0KQorCQkJb3JpZ2V4cHIgPSBtYWtl X29wY2xhdXNlKHJ1bm9wZXhwci0+b3BubywKKwkJCQkJCQkJCSBydW5vcGV4cHItPm9wcmVzdWx0 dHlwZSwKKwkJCQkJCQkJCSBydW5vcGV4cHItPm9wcmV0c2V0LCAoRXhwciAqKSB3ZnVuYywKKwkJ CQkJCQkJCSBvdGhlcmV4cHIsIHJ1bm9wZXhwci0+b3Bjb2xsaWQsCisJCQkJCQkJCQkgcnVub3Bl eHByLT5pbnB1dGNvbGxpZCk7CisJCWVsc2UKKwkJCW9yaWdleHByID0gbWFrZV9vcGNsYXVzZShy dW5vcGV4cHItPm9wbm8sCisJCQkJCQkJCQkgcnVub3BleHByLT5vcHJlc3VsdHR5cGUsCisJCQkJ CQkJCQkgcnVub3BleHByLT5vcHJldHNldCwKKwkJCQkJCQkJCSBvdGhlcmV4cHIsIChFeHByICop IHdmdW5jLAorCQkJCQkJCQkJIHJ1bm9wZXhwci0+b3Bjb2xsaWQsCisJCQkJCQkJCQkgcnVub3Bl eHByLT5pbnB1dGNvbGxpZCk7CisKKwkJd2NsYXVzZS0+cnVuY29uZGl0aW9ub3JpZyA9IGxhcHBl bmQod2NsYXVzZS0+cnVuY29uZGl0aW9ub3JpZywgb3JpZ2V4cHIpOworCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwkvKiB1bnN1cHBvcnRlZCBPcEV4cHIgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8q CisgKiBjaGVja19hbmRfcHVzaF93aW5kb3dfcXVhbHMKKyAqCQlDaGVjayBpZiAncmluZm8nIGlz IGEgcXVhbCB0aGF0IGNhbiBiZSBwdXNoZWQgaW50byBhIFdpbmRvd0Z1bmMgYXMgYQorICoJCSdy dW5jb25kaXRpb24nIHF1YWwuICBUaGVzZSwgd2hlbiBwcmVzZW50LCBjYXVzZSB0aGUgd2luZG93 IGZ1bmN0aW9uCisgKgkJZXZhbHVhdGlvbiB0byBzdG9wIHdoZW4gdGhlIGNvbmRpdGlvbiBiZWNv bWVzIGZhbHNlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVyIHN0aWxsIG11c3Qg a2VlcCB0aGUgb3JpZ2luYWwgcXVhbCBvciBmYWxzZSBpZgorICogdGhlIGNhbGxlciBjYW4gc2Fm ZWx5IGlnbm9yZSB0aGUgb3JpZ2luYWwgcXVhbCBiZWNhdXNlIHRoZSB3aW5kb3cgZnVuY3Rpb24K KyAqIHdpbGwgdXNlIHRoZSBydW4gY29uZGl0aW9uIHRvIHN0b3AgYXQgdGhlIHJpZ2h0IHRpbWUu CisgKi8KK3N0YXRpYyBib29sCitjaGVja19hbmRfcHVzaF93aW5kb3dfcXVhbHMoUXVlcnkgKnN1 YnF1ZXJ5LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSwKKwkJCQkJCQlOb2RlICpjbGF1 c2UpCit7CisJT3BFeHByCSAgICpvcGV4cHIgPSAoT3BFeHByICopIGNsYXVzZTsKKwlib29sCQlr ZWVwX29yaWdpbmFsID0gdHJ1ZTsKKwlWYXIJCSAgICp2YXIxOworCVZhcgkJICAgKnZhcjI7CisK KwlpZiAoIUlzQShvcGV4cHIsIE9wRXhwcikpCisJCXJldHVybiB0cnVlOworCisJaWYgKGxpc3Rf bGVuZ3RoKG9wZXhwci0+YXJncykgIT0gMikKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIENo ZWNrIGZvciBwbGFpbiBWYXJzIHdoaWNoIHJlZmVyZW5jZSB3aW5kb3cgZnVuY3Rpb25zIGluIHRo ZSBzdWJxdWVyeS4KKwkgKiBJZiB3ZSBmaW5kIGFueSwgd2UnbGwgYXNrIGZpbmRfd2luZG93X3J1 bl9jb25kaXRpb25zKCkgaWYgJ29wZXhwcicgY2FuCisJICogYmUgdXNlZCBhcyBhIHJ1biBjb25k aXRpb24gdG8gYWxsb3cgdXMgdG8gc3RvcCB3aW5kb3dhZ2cgZXhlY3V0aW9uCisJICogZWFybHku CisJICovCisKKwkvKiBDaGVjayB0aGUgbGVmdCBzaWRlIG9mIHRoZSBPcEV4cHIgKi8KKwl2YXIx ID0gbGluaXRpYWwob3BleHByLT5hcmdzKTsKKwlpZiAoSXNBKHZhcjEsIFZhcikgJiYgdmFyMS0+ dmFyYXR0bm8gPiAwKQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGxpc3RfbnRoKHN1YnF1ZXJ5 LT50YXJnZXRMaXN0LCB2YXIxLT52YXJhdHRubyAtIDEpOworCQlXaW5kb3dGdW5jICp3ZnVuYyA9 IChXaW5kb3dGdW5jICopIHRsZS0+ZXhwcjsKKworCQl3aGlsZSAoSXNBKHdmdW5jLCBSZWxhYmVs VHlwZSkpCisJCQl3ZnVuYyA9IChXaW5kb3dGdW5jICopICgoUmVsYWJlbFR5cGUgKikgd2Z1bmMp LT5hcmc7CisKKwkJaWYgKElzQSh3ZnVuYywgV2luZG93RnVuYykpCisJCXsKKwkJCVdpbmRvd0Ns YXVzZSAqd2NsYXVzZSA9IChXaW5kb3dDbGF1c2UgKikKKwkJCWxpc3RfbnRoKHN1YnF1ZXJ5LT53 aW5kb3dDbGF1c2UsCisJCQkJCSB3ZnVuYy0+d2lucmVmIC0gMSk7CisKKwkJCWlmIChmaW5kX3dp bmRvd19ydW5fY29uZGl0aW9ucyhzdWJxdWVyeSwgcnRlLCBydGksIHRsZS0+cmVzbm8sCisJCQkJ CQkJCQkJICAgd2NsYXVzZSwgd2Z1bmMsIG9wZXhwciwgdHJ1ZSwKKwkJCQkJCQkJCQkgICAma2Vl cF9vcmlnaW5hbCkpCisJCQkJcmV0dXJuIGtlZXBfb3JpZ2luYWw7CisJCX0KKwl9CisKKwkvKiBh bmQgY2hlY2sgdGhlIHJpZ2h0IHNpZGUgKi8KKwl2YXIyID0gbHNlY29uZChvcGV4cHItPmFyZ3Mp OworCWlmIChJc0EodmFyMiwgVmFyKSAmJiB2YXIyLT52YXJhdHRubyA+IDApCisJeworCQlUYXJn ZXRFbnRyeSAqdGxlID0gbGlzdF9udGgoc3VicXVlcnktPnRhcmdldExpc3QsIHZhcjItPnZhcmF0 dG5vIC0gMSk7CisJCVdpbmRvd0Z1bmMgKndmdW5jID0gKFdpbmRvd0Z1bmMgKikgdGxlLT5leHBy OworCisJCXdoaWxlIChJc0Eod2Z1bmMsIFJlbGFiZWxUeXBlKSkKKwkJCXdmdW5jID0gKFdpbmRv d0Z1bmMgKikgKChSZWxhYmVsVHlwZSAqKSB3ZnVuYyktPmFyZzsKKworCQlpZiAoSXNBKHdmdW5j LCBXaW5kb3dGdW5jKSkKKwkJeworCQkJV2luZG93Q2xhdXNlICp3Y2xhdXNlID0gKFdpbmRvd0Ns YXVzZSAqKQorCQkJbGlzdF9udGgoc3VicXVlcnktPndpbmRvd0NsYXVzZSwKKwkJCQkJIHdmdW5j LT53aW5yZWYgLSAxKTsKKworCQkJaWYgKGZpbmRfd2luZG93X3J1bl9jb25kaXRpb25zKHN1YnF1 ZXJ5LCBydGUsIHJ0aSwgdGxlLT5yZXNubywKKwkJCQkJCQkJCQkgICB3Y2xhdXNlLCB3ZnVuYywg b3BleHByLCBmYWxzZSwKKwkJCQkJCQkJCQkgICAma2VlcF9vcmlnaW5hbCkpCisJCQkJcmV0dXJu IGtlZXBfb3JpZ2luYWw7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIHNl dF9zdWJxdWVyeV9wYXRobGlzdAogICoJCUdlbmVyYXRlIFN1YnF1ZXJ5U2NhbiBhY2Nlc3MgcGF0 aHMgZm9yIGEgc3VicXVlcnkgUlRFCkBAIC0yMTc4LDE5ICsyNTUwLDMwIEBAIHNldF9zdWJxdWVy eV9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlmb3JlYWNo KGwsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbykKIAkJewogCQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9 IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGwpOworCQkJTm9kZQkgICAqY2xhdXNlID0gKE5vZGUg KikgcmluZm8tPmNsYXVzZTsKIAogCQkJaWYgKCFyaW5mby0+cHNldWRvY29uc3RhbnQgJiYKIAkJ CQlxdWFsX2lzX3B1c2hkb3duX3NhZmUoc3VicXVlcnksIHJ0aSwgcmluZm8sICZzYWZldHlJbmZv KSkKIAkJCXsKLQkJCQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSByaW5mby0+Y2xhdXNlOwot CiAJCQkJLyogUHVzaCBpdCBkb3duICovCiAJCQkJc3VicXVlcnlfcHVzaF9xdWFsKHN1YnF1ZXJ5 LCBydGUsIHJ0aSwgY2xhdXNlKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBLZWVwIGl0 IGluIHRoZSB1cHBlciBxdWVyeSAqLwotCQkJCXVwcGVycmVzdHJpY3RsaXN0ID0gbGFwcGVuZCh1 cHBlcnJlc3RyaWN0bGlzdCwgcmluZm8pOworCQkJCS8qCisJCQkJICogU2luY2Ugd2UgY2FuJ3Qg cHVzaCB0aGUgcXVhbCBkb3duIGludG8gdGhlIHN1YnF1ZXJ5LCBjaGVjaworCQkJCSAqIGlmIGl0 IGhhcHBlbnMgdG8gcmVmZXJlbmNlIGEgd2luZG93IGZ1bmN0aW9uLiAgSWYgc28gdGhlbgorCQkJ CSAqIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhbGxvdyB0aGUgd2luZG93IGV2YWx1YXRpb24gdG8g c3RvcAorCQkJCSAqIGVhcmx5LgorCQkJCSAqLworCQkJCWlmIChjaGVja19hbmRfcHVzaF93aW5k b3dfcXVhbHMoc3VicXVlcnksIHJ0ZSwgcnRpLCBjbGF1c2UpKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogSXQncyBub3QgYSBzdWl0YWJsZSB3aW5kb3cgcnVuIGNvbmRpdGlvbiBxdWFsIG9yIGl0 IGlzLAorCQkJCQkgKiBidXQgdGhlIG9yaWdpbmFsIG11c3QgYWxzbyBiZSBrZXB0IGluIHRoZSB1 cHBlciBxdWVyeS4KKwkJCQkJICovCisJCQkJCXVwcGVycmVzdHJpY3RsaXN0ID0gbGFwcGVuZCh1 cHBlcnJlc3RyaWN0bGlzdCwgcmluZm8pOworCQkJCX0KIAkJCX0KIAkJfQogCQlyZWwtPmJhc2Vy ZXN0cmljdGluZm8gPSB1cHBlcnJlc3RyaWN0bGlzdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwppbmRleCBhNWY2ZDY3OGNjLi42NDJlMDg4ZjdlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0yODYsNiArMjg2LDcgQEAgc3RhdGljIFdp bmRvd0FnZyAqbWFrZV93aW5kb3dhZ2coTGlzdCAqdGxpc3QsIEluZGV4IHdpbnJlZiwKIAkJCQkJ CQkJIGludCBmcmFtZU9wdGlvbnMsIE5vZGUgKnN0YXJ0T2Zmc2V0LCBOb2RlICplbmRPZmZzZXQs CiAJCQkJCQkJCSBPaWQgc3RhcnRJblJhbmdlRnVuYywgT2lkIGVuZEluUmFuZ2VGdW5jLAogCQkJ CQkJCQkgT2lkIGluUmFuZ2VDb2xsLCBib29sIGluUmFuZ2VBc2MsIGJvb2wgaW5SYW5nZU51bGxz Rmlyc3QsCisJCQkJCQkJCSBMaXN0ICpydW5jb25kaXRpb24sIExpc3QgKnJ1bmNvbmRpdGlvbm9y aWcsCiAJCQkJCQkJCSBQbGFuICpsZWZ0dHJlZSk7CiBzdGF0aWMgR3JvdXAgKm1ha2VfZ3JvdXAo TGlzdCAqdGxpc3QsIExpc3QgKnF1YWwsIGludCBudW1Hcm91cENvbHMsCiAJCQkJCQkgQXR0ck51 bWJlciAqZ3JwQ29sSWR4LCBPaWQgKmdycE9wZXJhdG9ycywgT2lkICpncnBDb2xsYXRpb25zLApA QCAtMjYxOSw2ICsyNjIwLDggQEAgY3JlYXRlX3dpbmRvd2FnZ19wbGFuKFBsYW5uZXJJbmZvICpy b290LCBXaW5kb3dBZ2dQYXRoICpiZXN0X3BhdGgpCiAJCQkJCQkgIHdjLT5pblJhbmdlQ29sbCwK IAkJCQkJCSAgd2MtPmluUmFuZ2VBc2MsCiAJCQkJCQkgIHdjLT5pblJhbmdlTnVsbHNGaXJzdCwK KwkJCQkJCSAgd2MtPnJ1bmNvbmRpdGlvbiwKKwkJCQkJCSAgd2MtPnJ1bmNvbmRpdGlvbm9yaWcs CiAJCQkJCQkgIHN1YnBsYW4pOwogCiAJY29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxh biwgKFBhdGggKikgYmVzdF9wYXRoKTsKQEAgLTY0NzcsNyArNjQ4MCw3IEBAIG1ha2Vfd2luZG93 YWdnKExpc3QgKnRsaXN0LCBJbmRleCB3aW5yZWYsCiAJCQkgICBpbnQgZnJhbWVPcHRpb25zLCBO b2RlICpzdGFydE9mZnNldCwgTm9kZSAqZW5kT2Zmc2V0LAogCQkJICAgT2lkIHN0YXJ0SW5SYW5n ZUZ1bmMsIE9pZCBlbmRJblJhbmdlRnVuYywKIAkJCSAgIE9pZCBpblJhbmdlQ29sbCwgYm9vbCBp blJhbmdlQXNjLCBib29sIGluUmFuZ2VOdWxsc0ZpcnN0LAotCQkJICAgUGxhbiAqbGVmdHRyZWUp CisJCQkgICBMaXN0ICpydW5jb25kaXRpb24sIExpc3QgKnJ1bmNvbmRpdGlvbm9yaWcsIFBsYW4g KmxlZnR0cmVlKQogewogCVdpbmRvd0FnZyAgKm5vZGUgPSBtYWtlTm9kZShXaW5kb3dBZ2cpOwog CVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+cGxhbjsKQEAgLTY0OTQsNiArNjQ5Nyw4IEBAIG1ha2Vf d2luZG93YWdnKExpc3QgKnRsaXN0LCBJbmRleCB3aW5yZWYsCiAJbm9kZS0+ZnJhbWVPcHRpb25z ID0gZnJhbWVPcHRpb25zOwogCW5vZGUtPnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CiAJbm9k ZS0+ZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OworCW5vZGUtPnJ1bmNvbmRpdGlvbiA9IHJ1bmNvbmRp dGlvbjsKKwlub2RlLT5ydW5jb25kaXRpb25vcmlnID0gcnVuY29uZGl0aW9ub3JpZzsKIAlub2Rl LT5zdGFydEluUmFuZ2VGdW5jID0gc3RhcnRJblJhbmdlRnVuYzsKIAlub2RlLT5lbmRJblJhbmdl RnVuYyA9IGVuZEluUmFuZ2VGdW5jOwogCW5vZGUtPmluUmFuZ2VDb2xsID0gaW5SYW5nZUNvbGw7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggZTUwNjI0YzQ2NS4uYTkyNWFh M2Q4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtODcwLDYgKzg3MCwx NCBAQCBzZXRfcGxhbl9yZWZzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLCBpbnQgcnRv ZmZzZXQpCiAJCQkJCWZpeF9zY2FuX2V4cHIocm9vdCwgd3BsYW4tPnN0YXJ0T2Zmc2V0LCBydG9m ZnNldCwgMSk7CiAJCQkJd3BsYW4tPmVuZE9mZnNldCA9CiAJCQkJCWZpeF9zY2FuX2V4cHIocm9v dCwgd3BsYW4tPmVuZE9mZnNldCwgcnRvZmZzZXQsIDEpOworCQkJCXdwbGFuLT5ydW5jb25kaXRp b24gPSBmaXhfc2Nhbl9saXN0KHJvb3QsCisJCQkJCQkJCQkJCQkJd3BsYW4tPnJ1bmNvbmRpdGlv biwKKwkJCQkJCQkJCQkJCQlydG9mZnNldCwKKwkJCQkJCQkJCQkJCQlOVU1fRVhFQ19UTElTVChw bGFuKSk7CisJCQkJd3BsYW4tPnJ1bmNvbmRpdGlvbm9yaWcgPSBmaXhfc2Nhbl9saXN0KHJvb3Qs CisJCQkJCQkJCQkJCQkJCXdwbGFuLT5ydW5jb25kaXRpb25vcmlnLAorCQkJCQkJCQkJCQkJCQly dG9mZnNldCwKKwkJCQkJCQkJCQkJCQkJTlVNX0VYRUNfVExJU1QocGxhbikpOwogCQkJfQogCQkJ YnJlYWs7CiAJCWNhc2UgVF9SZXN1bHQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvaW50OC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYwppbmRleCAyMTY4MDgwZGNj Li44YWJkNGU4NTk4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK ICNpbmNsdWRlICJ1dGlscy9pbnQ4LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAK IAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTg3Nyw2ICs4NzgsNyBAQCBpbnQ4ZGVjKFBHX0ZVTkNUSU9O X0FSR1MpCiB9CiAKIAorCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBleGFjdGx5IGxpa2Ug aW50OGluYy9pbnQ4ZGVjIGJ1dCBhcmUgdXNlZCBmb3IKICAqIGFnZ3JlZ2F0ZXMgdGhhdCBjb3Vu dCBvbmx5IG5vbi1udWxsIHZhbHVlcy4gIFNpbmNlIHRoZSBmdW5jdGlvbnMgYXJlCkBAIC05MDQs NiArOTA2LDQ5IEBAIGludDhkZWNfYW55KFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmV0dXJuIGludDhk ZWMoZmNpbmZvKTsKIH0KIAorLyoKKyAqIGludDhpbmNfc3VwcG9ydAorICoJCXByb3N1cHBvcnQg ZnVuY3Rpb24gZm9yIGludDhpbmMoKSBhbmQgaW50OGluY19hbnkoKQorICovCitEYXR1bQoraW50 OGluY19zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5v ZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJl cXVlc3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3Rvbmlj ICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKSByYXdyZXE7CisJCU1vbm90 b25pY0Z1bmN0aW9uIG1vbm90b25pYyA9IE1PTk9UT05JQ0ZVTkNfTk9ORTsKKwkJaW50CQkJZnJh bWVPcHRpb25zID0gcmVxLT53aW5kb3dfY2xhdXNlLT5mcmFtZU9wdGlvbnM7CisKKwkJLyogTm8g T1JERVIgQlkgY2xhdXNlIHRoZW4gYWxsIHJvd3MgYXJlIHBlZXJzICovCisJCWlmIChyZXEtPndp bmRvd19jbGF1c2UtPm9yZGVyQ2xhdXNlID09IE5JTCkKKwkJCW1vbm90b25pYyA9IE1PTk9UT05J Q0ZVTkNfQk9USDsKKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogT3RoZXJ3aXNlIHRha2UgaW50 byBhY2NvdW50IHRoZSBmcmFtZSBvcHRpb25zLiAgV2hlbiB0aGUgZnJhbWUKKwkJCSAqIGJvdW5k IGlzIHRoZSBzdGFydCBvZiB0aGUgd2luZG93IHRoZW4gdGhlIHJlc3VsdGluZyB2YWx1ZSBjYW4K KwkJCSAqIG5ldmVyIGRlY3JlYXNlLCB0aGVyZWZvcmUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFz aW5nCisJCQkgKi8KKwkJCWlmIChmcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElPTl9TVEFSVF9VTkJP VU5ERURfUFJFQ0VESU5HKQorCQkJCW1vbm90b25pYyB8PSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJ Tkc7CisKKwkJCS8qCisJCQkgKiBMaWtld2lzZSwgaWYgdGhlIGZyYW1lIGJvdW5kIGlzIHRoZSBl bmQgb2YgdGhlIHdpbmRvdyB0aGVuIHRoZQorCQkJICogcmVzdWx0aW5nIHZhbHVlIGNhbiBuZXZl ciBpbmNyZWFzZS4KKwkJCSAqLworCQkJaWYgKGZyYW1lT3B0aW9ucyAmIEZSQU1FT1BUSU9OX0VO RF9VTkJPVU5ERURfRk9MTE9XSU5HKQorCQkJCW1vbm90b25pYyB8PSBNT05PVE9OSUNGVU5DX0RF Q1JFQVNJTkc7CisJCX0KKworCQlyZXEtPm1vbm90b25pYyA9IG1vbm90b25pYzsKKwkJUEdfUkVU VVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKwog CiBEYXR1bQogaW50OGxhcmdlcihQR19GVU5DVElPTl9BUkdTKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvd2lu ZG93ZnVuY3MuYwppbmRleCA5YzEyNzYxN2QxLi4yNzI1N2I3NjI4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvd2luZG93ZnVuY3MuYwpAQCAtMTMsNiArMTMsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdy ZXMuaCIKIAorI2luY2x1ZGUgIm5vZGVzL3N1cHBvcnRub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAid2luZG93YXBpLmgiCiAKQEAgLTg4LDYgKzg5LDI2IEBA IHdpbmRvd19yb3dfbnVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0lOVDY0KGN1 cnBvcyArIDEpOwogfQogCisvKgorICogd2luZG93X3Jvd19udW1iZXJfc3VwcG9ydAorICoJCXBy b3N1cHBvcnQgZnVuY3Rpb24gZm9yIHdpbmRvd19yb3dfbnVtYmVyKCkKKyAqLworRGF0dW0KK3dp bmRvd19yb3dfbnVtYmVyX3N1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpy YXdyZXEgPSAoTm9kZSAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCWlmIChJc0EocmF3cmVx LCBTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljKSkKKwl7CisJCVN1cHBvcnRSZXF1ZXN0V0Z1 bmNNb25vdG9uaWMgKnJlcSA9IChTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICopIHJhd3Jl cTsKKworCQkvKiByb3dfbnVtYmVyKCkgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nICovCisJ CXJlcS0+bW9ub3RvbmljID0gTU9OT1RPTklDRlVOQ19JTkNSRUFTSU5HOworCQlQR19SRVRVUk5f UE9JTlRFUihyZXEpOworCX0KKworCVBHX1JFVFVSTl9QT0lOVEVSKE5VTEwpOworfQogCiAvKgog ICogcmFuawpAQCAtMTEwLDYgKzEzMSwyNyBAQCB3aW5kb3dfcmFuayhQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9JTlQ2NChjb250ZXh0LT5yYW5rKTsKIH0KIAorLyoKKyAqIHdpbmRvd19y YW5rX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3aW5kb3dfcmFuaygpCisg Ki8KK0RhdHVtCit3aW5kb3dfcmFua19zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9k ZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNB KHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBwb3J0UmVx dWVzdFdGdW5jTW9ub3RvbmljICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAq KSByYXdyZXE7CisKKwkJLyogcmFuaygpIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyAqLwor CQlyZXEtPm1vbm90b25pYyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORzsKKwkJUEdfUkVUVVJO X1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKwogLyoK ICAqIGRlbnNlX3JhbmsKICAqIFJhbmsgaW5jcmVhc2VzIGJ5IDEgd2hlbiBrZXkgY29sdW1ucyBj aGFuZ2UuCkBAIC0xMzAsNiArMTcyLDI3IEBAIHdpbmRvd19kZW5zZV9yYW5rKFBHX0ZVTkNUSU9O X0FSR1MpCiAJUEdfUkVUVVJOX0lOVDY0KGNvbnRleHQtPnJhbmspOwogfQogCisvKgorICogd2lu ZG93X2RlbnNlX3Jhbmtfc3VwcG9ydAorICoJCXByb3N1cHBvcnQgZnVuY3Rpb24gZm9yIHdpbmRv d19kZW5zZV9yYW5rKCkKKyAqLworRGF0dW0KK3dpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwlOb2RlCSAgICpyYXdyZXEgPSAoTm9kZSAqKSBQR19HRVRBUkdf UE9JTlRFUigwKTsKKworCWlmIChJc0EocmF3cmVxLCBTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3Rv bmljKSkKKwl7CisJCVN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKnJlcSA9IChTdXBwb3J0 UmVxdWVzdFdGdW5jTW9ub3RvbmljICopIHJhd3JlcTsKKworCQkvKiBkZW5zZV9yYW5rKCkgaXMg bW9ub3RvbmljYWxseSBpbmNyZWFzaW5nICovCisJCXJlcS0+bW9ub3RvbmljID0gTU9OT1RPTklD RlVOQ19JTkNSRUFTSU5HOworCQlQR19SRVRVUk5fUE9JTlRFUihyZXEpOworCX0KKworCVBHX1JF VFVSTl9QT0lOVEVSKE5VTEwpOworfQorCiAvKgogICogcGVyY2VudF9yYW5rCiAgKiByZXR1cm4g ZnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxIGluY2x1c2l2ZSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CmluZGV4IGI2MDM3MDBlZDkuLjIyOTg4ZDRjNTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtNjYyNiwxMSArNjYyNiwxNiBAQAogIyBjb3VudCBoYXMgdHdvIGZvcm1zOiBjb3VudChhbnkp IGFuZCBjb3VudCgqKQogeyBvaWQgPT4gJzIxNDcnLAogICBkZXNjciA9PiAnbnVtYmVyIG9mIGlu cHV0IHJvd3MgZm9yIHdoaWNoIHRoZSBpbnB1dCBleHByZXNzaW9uIGlzIG5vdCBudWxsJywKLSAg cHJvbmFtZSA9PiAnY291bnQnLCBwcm9raW5kID0+ICdhJywgcHJvaXNzdHJpY3QgPT4gJ2YnLCBw cm9yZXR0eXBlID0+ICdpbnQ4JywKLSAgcHJvYXJndHlwZXMgPT4gJ2FueScsIHByb3NyYyA9PiAn YWdncmVnYXRlX2R1bW15JyB9LAorICBwcm9uYW1lID0+ICdjb3VudCcsIHByb3N1cHBvcnQgPT4g J2ludDhpbmNfc3VwcG9ydCcsIHByb2tpbmQgPT4gJ2EnLAorICBwcm9pc3N0cmljdCA9PiAnZics IHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9hcmd0eXBlcyA9PiAnYW55JywKKyAgcHJvc3JjID0+ ICdhZ2dyZWdhdGVfZHVtbXknIH0sCiB7IG9pZCA9PiAnMjgwMycsIGRlc2NyID0+ICdudW1iZXIg b2YgaW5wdXQgcm93cycsCi0gIHByb25hbWUgPT4gJ2NvdW50JywgcHJva2luZCA9PiAnYScsIHBy b2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCi0gIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKKyAgcHJvbmFtZSA9PiAnY291bnQn LCBwcm9zdXBwb3J0ID0+ICdpbnQ4aW5jX3N1cHBvcnQnLCBwcm9raW5kID0+ICdhJywKKyAgcHJv aXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJycs CisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAoreyBvaWQgPT4gJzg4MDInLCBkZXNj ciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBjb3VudCBydW4gY29uZGl0aW9uJywKKyAgcHJvbmFt ZSA9PiAnaW50OGluY19zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9h cmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ2ludDhpbmNfc3VwcG9ydCcgfSwKIAog eyBvaWQgPT4gJzI3MTgnLAogICBkZXNjciA9PiAncG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBiaWdp bnQgaW5wdXQgdmFsdWVzIChzcXVhcmUgb2YgdGhlIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0 aW9uKScsCkBAIC0xMDA2NCwxNCArMTAwNjksMjYgQEAKIAogIyBTUUwtc3BlYyB3aW5kb3cgZnVu Y3Rpb25zCiB7IG9pZCA9PiAnMzEwMCcsIGRlc2NyID0+ICdyb3cgbnVtYmVyIHdpdGhpbiBwYXJ0 aXRpb24nLAotICBwcm9uYW1lID0+ICdyb3dfbnVtYmVyJywgcHJva2luZCA9PiAndycsIHByb2lz c3RyaWN0ID0+ICdmJywKLSAgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcn LCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVyJyB9LAorICBwcm9uYW1lID0+ICdyb3dfbnVt YmVyJywgcHJvc3VwcG9ydCA9PiAnd2luZG93X3Jvd19udW1iZXJfc3VwcG9ydCcsCisgIHByb2tp bmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsICBwcm9yZXR0eXBlID0+ICdpbnQ4JywKKyAg cHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAnd2luZG93X3Jvd19udW1iZXInIH0sCit7IG9p ZCA9PiAnODc5OScsIGRlc2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9yIHJvd19udW1iZXIgcnVu IGNvbmRpdGlvbicsCisgIHByb25hbWUgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnLCBw cm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ICdpbnRlcm5hbCcsIHBy b3NyYyA9PiAnd2luZG93X3Jvd19udW1iZXJfc3VwcG9ydCcgfSwKIHsgb2lkID0+ICczMTAxJywg ZGVzY3IgPT4gJ2ludGVnZXIgcmFuayB3aXRoIGdhcHMnLAotICBwcm9uYW1lID0+ICdyYW5rJywg cHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcs CisgIHByb25hbWUgPT4gJ3JhbmsnLCBwcm9zdXBwb3J0ID0+ICd3aW5kb3dfcmFua19zdXBwb3J0 JywKKyAgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAn aW50OCcsCiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19yYW5rJyB9LAor eyBvaWQgPT4gJzg4MDAnLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciByYW5rIHJ1biBj b25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5kb3dfcmFua19zdXBwb3J0JywgcHJvcmV0dHlw ZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4g J3dpbmRvd19yYW5rX3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzEwMicsIGRlc2NyID0+ICdpbnRl Z2VyIHJhbmsgd2l0aG91dCBnYXBzJywKLSAgcHJvbmFtZSA9PiAnZGVuc2VfcmFuaycsIHByb2tp bmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsCi0gIHByb3JldHR5cGUgPT4gJ2ludDgnLCBw cm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3aW5kb3dfZGVuc2VfcmFuaycgfSwKKyAgcHJv bmFtZSA9PiAnZGVuc2VfcmFuaycsIHByb3N1cHBvcnQgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1 cHBvcnQnLAorICBwcm9raW5kID0+ICd3JywgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBl ID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJycsCisgIHByb3NyYyA9PiAnd2luZG93X2RlbnNl X3JhbmsnIH0sCit7IG9pZCA9PiAnODgwMScsIGRlc2NyID0+ICdwbGFubmVyIHN1cHBvcnQgZm9y IGRlbnNlIHJhbmsgcnVuIGNvbmRpdGlvbicsCisgIHByb25hbWUgPT4gJ3dpbmRvd19kZW5zZV9y YW5rX3N1cHBvcnQnLCBwcm9yZXR0eXBlID0+ICdpbnRlcm5hbCcsCisgIHByb2FyZ3R5cGVzID0+ ICdpbnRlcm5hbCcsIHByb3NyYyA9PiAnd2luZG93X2RlbnNlX3Jhbmtfc3VwcG9ydCcgfSwKIHsg b2lkID0+ICczMTAzJywgZGVzY3IgPT4gJ2ZyYWN0aW9uYWwgcmFuayB3aXRoaW4gcGFydGl0aW9u JywKICAgcHJvbmFtZSA9PiAncGVyY2VudF9yYW5rJywgcHJva2luZCA9PiAndycsIHByb2lzc3Ry aWN0ID0+ICdmJywKICAgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAnd2luZG93X3BlcmNlbnRfcmFuaycgfSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5k ZXggMzdjYjRmM2Q1OS4uMWUyYmVmZDc5NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTI0MDgs NiArMjQwOCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogCU1lbW9yeUNvbnRl eHQgY3VyYWdnY29udGV4dDsJLyogY3VycmVudCBhZ2dyZWdhdGUncyB3b3JraW5nIGRhdGEgKi8K IAlFeHByQ29udGV4dCAqdG1wY29udGV4dDsJLyogc2hvcnQtdGVybSBldmFsdWF0aW9uIGNvbnRl eHQgKi8KIAorCUV4cHJTdGF0ZSAgKnJ1bmNvbmRpdGlvbjsJLyogQ29uZGl0aW9uIHdoaWNoIG11 c3QgcmVtYWluIHRydWUgb3RoZXJ3aXNlCisJCQkJCQkJCSAqIGV4ZWN1dGlvbiBvZiB0aGUgV2lu ZG93QWdnIHdpbGwgZmluaXNoLCBvcgorCQkJCQkJCQkgKiBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1 Y2ggY29uZGl0aW9uLiAqLworCiAJYm9vbAkJYWxsX2ZpcnN0OwkJLyogdHJ1ZSBpZiB0aGUgc2Nh biBpcyBzdGFydGluZyAqLwogCWJvb2wJCWFsbF9kb25lOwkJLyogdHJ1ZSBpZiB0aGUgc2NhbiBp cyBmaW5pc2hlZCAqLwogCWJvb2wJCXBhcnRpdGlvbl9zcG9vbGVkOwkvKiB0cnVlIGlmIGFsbCB0 dXBsZXMgaW4gY3VycmVudCBwYXJ0aXRpb24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCmluZGV4IDZhNGQ4MmYwYTguLjlj NDc5OWQzZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNTI2LDcgKzUyNiw4IEBAIHR5cGVkZWYgZW51bSBO b2RlVGFnCiAJVF9TdXBwb3J0UmVxdWVzdFNlbGVjdGl2aXR5LAkvKiBpbiBub2Rlcy9zdXBwb3J0 bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RDb3N0LAkJLyogaW4gbm9kZXMvc3VwcG9ydG5v ZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0Um93cywJCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rl cy5oICovCi0JVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uCS8qIGluIG5vZGVzL3N1cHBv cnRub2Rlcy5oICovCisJVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uLCAvKiBpbiBub2Rl cy9zdXBwb3J0bm9kZXMuaCAqLworCVRfU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYwkvKiBp biBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwogfSBOb2RlVGFnOwogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCmluZGV4IGUyODI0OGFmMzIuLmI3NmUzMTA2ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKQEAgLTEzODEsNiArMTM4MSw4IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd0NsYXVzZQogCWlu dAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMsIHNlZSBXaW5kb3dEZWYg Ki8KIAlOb2RlCSAgICpzdGFydE9mZnNldDsJLyogZXhwcmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91 bmQsIGlmIGFueSAqLwogCU5vZGUJICAgKmVuZE9mZnNldDsJCS8qIGV4cHJlc3Npb24gZm9yIGVu ZGluZyBib3VuZCwgaWYgYW55ICovCisJTGlzdAkgICAqcnVuY29uZGl0aW9uOwkvKiBFeGVjIFdp bmRvd0FnZyB3aGlsZSB0aGlzIGlzIHRydWUgKi8KKwlMaXN0CSAgICpydW5jb25kaXRpb25vcmln OwkvKiBFWFBMQUlOIGNvbXBhdGlibGUgdmVyc2lvbiBvZiBhYm92ZSAqLwogCU9pZAkJCXN0YXJ0 SW5SYW5nZUZ1bmM7CS8qIGluX3JhbmdlIGZ1bmN0aW9uIGZvciBzdGFydE9mZnNldCAqLwogCU9p ZAkJCWVuZEluUmFuZ2VGdW5jOyAvKiBpbl9yYW5nZSBmdW5jdGlvbiBmb3IgZW5kT2Zmc2V0ICov CiAJT2lkCQkJaW5SYW5nZUNvbGw7CS8qIGNvbGxhdGlvbiBmb3IgaW5fcmFuZ2UgdGVzdHMgKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggZWM5YThiMGM4MS4uMWM3MWU2ZGI0MSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGxhbm5vZGVzLmgKQEAgLTg5Myw2ICs4OTMsOSBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2cK IAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8qIGZyYW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgV2luZG93 RGVmICovCiAJTm9kZQkgICAqc3RhcnRPZmZzZXQ7CS8qIGV4cHJlc3Npb24gZm9yIHN0YXJ0aW5n IGJvdW5kLCBpZiBhbnkgKi8KIAlOb2RlCSAgICplbmRPZmZzZXQ7CQkvKiBleHByZXNzaW9uIGZv ciBlbmRpbmcgYm91bmQsIGlmIGFueSAqLworCUxpc3QJICAgKnJ1bmNvbmRpdGlvbjsJLyogQ29u ZGl0aW9ucyB0aGF0IG11c3QgcmVtYWluIHRydWUgaW4gb3JkZXIKKwkJCQkJCQkJICogZm9yIGV4 ZWN1dGlvbiB0byBjb250aW51ZSAqLworCUxpc3QJICAgKnJ1bmNvbmRpdGlvbm9yaWc7CS8qIHJ1 bmNvbmRpdGlvbiBmb3IgZGlzcGxheSBpbiBFWFBMQUlOICovCiAJLyogdGhlc2UgZmllbGRzIGFy ZSB1c2VkIHdpdGggUkFOR0Ugb2Zmc2V0IFBSRUNFRElORy9GT0xMT1dJTkc6ICovCiAJT2lkCQkJ c3RhcnRJblJhbmdlRnVuYzsJLyogaW5fcmFuZ2UgZnVuY3Rpb24gZm9yIHN0YXJ0T2Zmc2V0ICov CiAJT2lkCQkJZW5kSW5SYW5nZUZ1bmM7IC8qIGluX3JhbmdlIGZ1bmN0aW9uIGZvciBlbmRPZmZz ZXQgKi8KQEAgLTEyOTEsNCArMTI5NCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuSW52YWxJdGVt CiAJdWludDMyCQloYXNoVmFsdWU7CQkvKiBoYXNoIHZhbHVlIG9mIG9iamVjdCdzIGNhY2hlIGxv b2t1cCBrZXkgKi8KIH0gUGxhbkludmFsSXRlbTsKIAorLyoKKyAqIE1vbm90b25pY0Z1bmN0aW9u CisgKgorICogQWxsb3dzIHRoZSBwbGFubmVyIHRvIHRyYWNrIG1vbm90b25pYyBwcm9wZXJ0aWVz IG9mIGZ1bmN0aW9ucy4gIEEgZnVuY3Rpb24KKyAqIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2lu ZyBpZiBhIHN1YnNlcXVlbnQgY2FsbCBjYW5ub3QgeWllbGQgYSBsb3dlciB2YWx1ZQorICogdGhh biB0aGUgcHJldmlvdXMgY2FsbC4gIEEgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9u IGNhbm5vdCB5aWVsZCBhCisgKiBoaWdoZXIgdmFsdWUsIGFuZCBhIGZ1bmN0aW9uIHdoaWNoIGlz IGJvdGggbXVzdCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgb24KKyAqIGVhY2ggY2FsbC4KKyAqLwor dHlwZWRlZiBlbnVtIE1vbm90b25pY0Z1bmN0aW9uCit7CisJTU9OT1RPTklDRlVOQ19OT05FID0g MCwKKwlNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcgPSAoMSA8PCAwKSwKKwlNT05PVE9OSUNGVU5D X0RFQ1JFQVNJTkcgPSAoMSA8PCAxKSwKKwlNT05PVE9OSUNGVU5DX0JPVEggPSBNT05PVE9OSUNG VU5DX0lOQ1JFQVNJTkcgfCBNT05PVE9OSUNGVU5DX0RFQ1JFQVNJTkcKK30gTW9ub3RvbmljRnVu Y3Rpb247CisKICNlbmRpZgkJCQkJCQkvKiBQTEFOTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvc3VwcG9ydG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0 bm9kZXMuaAppbmRleCA4NWUxYjhhODMyLi4zMzcxODMzMmM5IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9zdXBwb3J0 bm9kZXMuaApAQCAtMzMsMTIgKzMzLDEyIEBACiAjaWZuZGVmIFNVUFBPUlROT0RFU19ICiAjZGVm aW5lIFNVUFBPUlROT0RFU19ICiAKLSNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKKyNpbmNs dWRlICJub2Rlcy9wbGFubm9kZXMuaCIKIAogc3RydWN0IFBsYW5uZXJJbmZvOwkJCQkvKiBhdm9p ZCBpbmNsdWRpbmcgcGF0aG5vZGVzLmggaGVyZSAqLwogc3RydWN0IEluZGV4T3B0SW5mbzsKIHN0 cnVjdCBTcGVjaWFsSm9pbkluZm87Ci0KK3N0cnVjdCBXaW5kb3dDbGF1c2U7CiAKIC8qCiAgKiBU aGUgU2ltcGxpZnkgcmVxdWVzdCBhbGxvd3MgdGhlIHN1cHBvcnQgZnVuY3Rpb24gdG8gcGVyZm9y bSBwbGFuLXRpbWUKQEAgLTIzOSw0ICsyMzksNTggQEAgdHlwZWRlZiBzdHJ1Y3QgU3VwcG9ydFJl cXVlc3RJbmRleENvbmRpdGlvbgogCQkJCQkJCQkgKiBlcXVpdmFsZW50IG9mIHRoZSBmdW5jdGlv biBjYWxsICovCiB9IFN1cHBvcnRSZXF1ZXN0SW5kZXhDb25kaXRpb247CiAKKy8qIC0tLS0tLS0t LS0KKyAqIFRvIGFsbG93IG1vcmUgZWZmaWNpZW50IGV4ZWN1dGlvbiBvZiBhbnkgbW9ub3Rvbmlj YWxseSBpbmNyZWFzaW5nIGFuZC9vcgorICogbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIHdpbmRv dyBmdW5jdGlvbnMsIHdlIHN1cHBvcnQgY2FsbGluZyB0aGUgd2luZG93CisgKiBmdW5jdGlvbidz IHByb3N1cHBvcnQgZnVuY3Rpb24gcGFzc2luZyBhbG9uZyB0aGlzIHN0cnVjdCB3aGVuZXZlciB0 aGUKKyAqIHBsYW5uZXIgc2VlcyBhbiBPcEV4cHIgcXVhbCBkaXJlY3RseSByZWZlcmVuY2UgYSB3 aW5kb3cgZnVuY3Rpb24gaW4gYQorICogc3VicXVlcnkuICBXaGVuIHRoZSBwbGFubmVyIGVuY291 bnRlcnMgdGhpcywgd2UgcG9wdWxhdGUgdGhpcyBzdHJ1Y3QgYW5kCisgKiBwYXNzIGl0IGFsb25n IHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24ncyBwcm9zdXBwb3J0IGZ1bmN0aW9uIHNvIHRoYXQgaXQg Y2FuCisgKiBldmFsdWF0ZSBpZiB0aGUgZ2l2ZW4gV2luZG93RnVuYyBpczsKKyAqCisgKiBhKSBt b25vdG9uaWNhbGx5IGluY3JlYXNpbmcsIG9yCisgKiBiKSBtb25vdG9uaWNhbGx5IGRlY3JlYXNp bmcsIG9yCisgKiBjKSBib3RoIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhbmQgZGVjcmVhc2lu Zywgb3IKKyAqIGQpIG5vbmUgb2YgdGhlIGFib3ZlLgorICoKKyAqIEEgZnVuY3Rpb24gdGhhdCBp cyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgY2FuIG5ldmVyIHJldHVybiBhIHZhbHVlIHRoYXQK KyAqIGlzIGxvd2VyIHRoYW4gYSB2YWx1ZSByZXR1cm5lZCBpbiBhICJwcmV2aW91cyBjYWxsIi4g IEEgbW9ub3RvbmljYWxseQorICogZGVjcmVhc2luZyBmdW5jdGlvbiBjYW4gbmV2ZXIgcmV0dXJu IGEgdmFsdWUgaGlnaGVyIHRoYW4gYSB2YWx1ZSByZXR1cm5lZAorICogaW4gYSBwcmV2aW91cyBj YWxsLiAgQSBmdW5jdGlvbiB3aGljaCBpcyBib3RoIG11c3QgcmV0dXJuIHRoZSBzYW1lIHZhbHVl CisgKiBlYWNoIHRpbWUuCisgKgorICogV2UgZGVmaW5lICJwcmV2aW91cyBjYWxsIiB0byBtZWFu IGEgcHJldmlvdXMgY2FsbCB0byB0aGUgc2FtZSBXaW5kb3dGdW5jCisgKiBzdHJ1Y3QgaW4gdGhl IHNhbWUgd2luZG93IHBhcnRpdGlvbi4KKyAqCisgKiByb3dfbnVtYmVyKCkgaXMgYW4gZXhhbXBs ZSBvZiBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBmdW5jdGlvbi4gIFRoZQorICogcmV0dXJu IHZhbHVlIHdpbGwgYmUgcmVzZXQgYmFjayB0byAxIGluIGVhY2ggbmV3IHBhcnRpdGlvbi4gIEFu IGV4YW1wbGUgb2YKKyAqIGEgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9uIGlzIGNv dW50KCopIG92ZXIgKCkuICBTaW5jZSB0aGVyZSBpcworICogbm8gT1JERVIgQlkgY2xhdXNlIGlu IHRoaXMgZXhhbXBsZSwgYWxsIHJvd3MgaW4gdGhlIHBhcnRpdGlvbiBhcmUgcGVlcnMgYW5kCisg KiBhbGwgcm93cyB3aXRoaW4gdGhlIHBhcnRpdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUgZnJhbWUg Ym91bmQuICBMaWtld2lzZSBmb3IKKyAqIGNvdW50KCopIG92ZXIob3JkZXIgYnkgYSByb3dzIGJl dHdlZW4gdW5ib3VuZGVkIHByZWNlZGluZyBhbmQgdW5ib3VuZGVkCisgKiBmb2xsb3dpbmcpLgor ICoKKyAqIElucHV0czoKKyAqCSd3aW5kb3dfZnVuYycgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIHdp bmRvdyBmdW5jdGlvbiBiZWluZyBjYWxsZWQuCisgKgorICoJJ3dpbmRvd19jbGF1c2UnIHBvaW50 ZXIgdG8gdGhlIFdpbmRvd0NsYXVzZSBkYXRhLiAgU3VwcG9ydCBmdW5jdGlvbnMgY2FuCisgKgl1 c2UgdGhpcyB0byBjaGVjayBmcmFtZSBib3VuZHMgYW5kIHBhcnRpdGlvbiBieSBjbGF1c2VzLCBl dGMuCisgKgorICogT3V0cHV0czoKKyAqCSdtb25vdG9uaWMnIHRoZSByZXN1bHRpbmcgTW9ub3Rv bmljRnVuY3Rpb24gdmFsdWUgZm9yIHRoZSBnaXZlbiBpbnB1dAorICoJd2luZG93IGZ1bmN0aW9u IGFuZCB3aW5kb3cgY2xhdXNlLgorICogLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBT dXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljCit7CisJTm9kZVRhZwkJdHlwZTsKKworCS8qIElu cHV0IGZpZWxkczogKi8KKwlXaW5kb3dGdW5jICp3aW5kb3dfZnVuYzsJLyogUG9pbnRlciB0byB0 aGUgd2luZG93IGZ1bmN0aW9uIGRhdGEgKi8KKwlzdHJ1Y3QgV2luZG93Q2xhdXNlICp3aW5kb3df Y2xhdXNlOyAvKiBQb2ludGVyIHRvIHRoZSB3aW5kb3cgY2xhdXNlIGRhdGEgKi8KKworCS8qIE91 dHB1dCBmaWVsZHM6ICovCisJTW9ub3RvbmljRnVuY3Rpb24gbW9ub3RvbmljOworfSBTdXBwb3J0 UmVxdWVzdFdGdW5jTW9ub3RvbmljOworCiAjZW5kaWYJCQkJCQkJLyogU1VQUE9SVE5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAppbmRleCBiYjlmZjdmMDdiLi43YzM0 M2RjM2U2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CkBAIC0zMzM2LDYgKzMz MzYsMjc1IEBAIFdIRVJFIGRlcG5hbWUgPSAnc2FsZXMnOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQogKDkgcm93cykKIAorLS0gVGVzdCB3aW5k b3cgZnVuY3Rpb24gcnVuIGNvbmRpdGlvbnMgYXJlIHByb3Blcmx5IHB1c2hlZCBkb3duIGludG8g dGhlCistLSBXaW5kb3dBZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAg KFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1w bm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29uZGl0aW9u OiAocm93X251bWJlcigpIE9WRVIgKD8pIDwgMykKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0 IEtleTogZW1wc2FsYXJ5LmVtcG5vCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5 CisoNSByb3dzKQorCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQgcmVzdWx0 IHRoZSBzYW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAg ICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNh bGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgZW1wbm8gfCBybiAKKy0tLS0tLS0rLS0tLQorICAg ICAxIHwgIDEKKyAgICAgMiB8ICAyCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxF Q1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBy bgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgMyA+IHJuOworIGVtcG5vIHwgcm4gCist LS0tLS0tKy0tLS0KKyAgICAgMSB8ICAxCisgICAgIDIgfCAgMgorKDIgcm93cykKKworU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChP UkRFUiBCWSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDIgPj0gcm47 CisgZW1wbm8gfCBybiAKKy0tLS0tLS0rLS0tLQorICAgICAxIHwgIDEKKyAgICAgMiB8ICAyCiso MiByb3dzKQorCistLSBFbnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1biBj b25kaXRpb24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFu aygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1w CitXSEVSRSByIDw9IDM7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cK KyAgIFJ1biBDb25kaXRpb246IChyYW5rKCkgT1ZFUiAoPykgPD0gMykKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1Qg ZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIHJhbmsoKSBPVkVSIChPUkRFUiBC WSBzYWxhcnkgREVTQykgcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgciA8PSAzOwor IGVtcG5vIHwgc2FsYXJ5IHwgciAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYw MDAgfCAxCisgICAgMTAgfCAgIDUyMDAgfCAyCisgICAgMTEgfCAgIDUyMDAgfCAyCisoMyByb3dz KQorCistLSBFbnN1cmUgZHIgPSAxIGlzIGNvbnZlcnRlZCB0byBkciA8PSAxIHRvIGdldCBhbGwg cm93cyBsZWFkaW5nIHVwIHRvIGRyID0gMQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBkZW5z ZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFy eSkgZW1wCitXSEVSRSBkciA9IDE7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGVtcAorICAgRmlsdGVyOiAoZW1w LmRyID0gMSkKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIFJ1biBDb25kaXRpb246IChkZW5z ZV9yYW5rKCkgT1ZFUiAoPykgPD0gMSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAg ICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZW1wc2FsYXJ5CisoNyByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1Qg ZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChP UkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRy ID0gMTsKKyBlbXBubyB8IHNhbGFyeSB8IGRyIAorLS0tLS0tLSstLS0tLS0tLSstLS0tCisgICAg IDggfCAgIDYwMDAgfCAgMQorKDEgcm93KQorCistLSBDaGVjayBDT1VOVCgpIGFuZCBDT1VOVCgq KQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAor ICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxh cnkgREVTQykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAgUnVuIENvbmRpdGlvbjog KGNvdW50KCopIE9WRVIgKD8pIDw9IDMpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6 IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFy eQorKDUgcm93cykKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAg IHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykg YworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworIGVtcG5vIHwgc2FsYXJ5 IHwgYyAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYwMDAgfCAxCisgICAgMTAg fCAgIDUyMDAgfCAzCisgICAgMTEgfCAgIDUyMDAgfCAzCisoMyByb3dzKQorCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2Fs YXJ5LAorICAgICAgICAgIGNvdW50KGVtcG5vKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykg YworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cK KyAgIFJ1biBDb25kaXRpb246IChjb3VudChlbXBzYWxhcnkuZW1wbm8pIE9WRVIgKD8pIDw9IDMp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQwor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3Vu dChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5 KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyBlbXBubyB8IHNhbGFyeSB8IGMgCistLS0tLS0tKy0tLS0t LS0tKy0tLQorICAgICA4IHwgICA2MDAwIHwgMQorICAgIDEwIHwgICA1MjAwIHwgMworICAgIDEx IHwgICA1MjAwIHwgMworKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3Vu dCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cg QU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJF IGMgPj0gMzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAg IFJ1biBDb25kaXRpb246IChjb3VudCgqKSBPVkVSICg/KSA+PSAzKQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoKikgT1ZFUiAoKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAxMSA8PSBj OworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4g Q29uZGl0aW9uOiAoMTEgPD0gY291bnQoKikgT1ZFUiAoPykpCisgICAtPiAgU2VxIFNjYW4gb24g ZW1wc2FsYXJ5CisoMyByb3dzKQorCistLSBUZXN0cyB0byBlbnN1cmUgd2UgZG9uJ3QgcHVzaCBk b3duIHRoZSBydW4gY29uZGl0aW9uIHdoZW4gaXQncyBub3QgdmFsaWQgdG8KKy0tIGRvIHNvLgor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAg ICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBl bXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwgMzsKKyAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5ybiA8IDMpCisgICAtPiAg V2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVt cHNhbGFyeS5kZXBuYW1lLCBlbXBzYWxhcnkuZW1wbm8KKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAg Y291bnQoZW1wbm8pIE9WRVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIHNhbGFyeSBE RVNDKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6IChlbXAuYyA8PSAz KQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNv cnQgS2V5OiBlbXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNiByb3dzKQorCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2Fs YXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDIFJPV1Mg QkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykgYworICAgRlJPTSBl bXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgU3VicXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5jIDw9 IDMpCisgICAtPiAgV2luZG93QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAg U29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGVtcHNhbGFyeQorKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBj b3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAK K1dIRVJFIDMgPD0gYzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3VicXVlcnkg U2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKDMgPD0gZW1wLmMpCisgICAtPiAgV2luZG93QWdnCisg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxh cnkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxhcnkKKyg2IHJvd3MpCisK IC0tIFRlc3QgU29ydCBub2RlIGNvbGxhcHNpbmcKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCAqIEZST00KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4IDQxYThlMGQxNTIuLmM3NDZkNTM0 M2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbApAQCAtOTg4LDYgKzk4OCwxNDYgQEAgU0VMRUNU ICogRlJPTQogICAgRlJPTSBlbXBzYWxhcnkpIGVtcAogV0hFUkUgZGVwbmFtZSA9ICdzYWxlcyc7 CiAKKy0tIFRlc3Qgd2luZG93IGZ1bmN0aW9uIHJ1biBjb25kaXRpb25zIGFyZSBwcm9wZXJseSBw dXNoZWQgZG93biBpbnRvIHRoZQorLS0gV2luZG93QWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9W RVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgcm4g PCAzOworCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQgcmVzdWx0IHRoZSBz YW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBy b3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkg ZW1wCitXSEVSRSBybiA8IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAg ICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVt cHNhbGFyeSkgZW1wCitXSEVSRSAzID4gcm47CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBl bXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisg ICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAyID49IHJuOworCistLSBFbnN1cmUgciA8PSAz IGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1biBjb25kaXRpb24gb2YgdGhlIHdpbmRvdyBhZ2cK K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAg ICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBE RVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7CisKK1NFTEVDVCAq IEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFu aygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1w CitXSEVSRSByIDw9IDM7CisKKy0tIEVuc3VyZSBkciA9IDEgaXMgY29udmVydGVkIHRvIGRyIDw9 IDEgdG8gZ2V0IGFsbCByb3dzIGxlYWRpbmcgdXAgdG8gZHIgPSAxCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAor ICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAg IEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKworU0VMRUNUICogRlJPTQorICAo U0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBkZW5zZV9yYW5rKCkg T1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitX SEVSRSBkciA9IDE7CisKKy0tIENoZWNrIENPVU5UKCkgYW5kIENPVU5UKCopCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2Fs YXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisg ICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisKK1NFTEVDVCAqIEZST00KKyAg KFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZF UiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJF IGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNU IGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAo T1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMg PD0gMzsKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFy eSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMK KyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwK KyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdF RU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2Fs YXJ5KSBlbXAKK1dIRVJFIGMgPj0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3Vu dCgqKSBPVkVSICgpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDExIDw9IGM7CisK Ky0tIFRlc3RzIHRvIGVuc3VyZSB3ZSBkb24ndCBwdXNoIGRvd24gdGhlIHJ1biBjb25kaXRpb24g d2hlbiBpdCdzIG5vdCB2YWxpZCB0bworLS0gZG8gc28uCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9W RVIgKFBBUlRJVElPTiBCWSBkZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBz YWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNv dW50KGVtcG5vKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBzYWxhcnkgREVT QykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2Fs YXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDIFJPV1Mg QkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykgYworICAgRlJPTSBl bXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAg IGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSkgYworICAgRlJPTSBlbXBzYWxhcnkpIGVt cAorV0hFUkUgMyA8PSBjOworCiAtLSBUZXN0IFNvcnQgbm9kZSBjb2xsYXBzaW5nCiBFWFBMQUlO IChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NCg== --000000000000d602b605c9d30dae--