From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zg8tmtu5ljg5lje1ms4xmtka.icoremail.net (zg8tmtu5ljg5lje1ms4xmtka.icoremail.net [159.89.151.119]) by sourceware.org (Postfix) with ESMTP id 76CD83858D1E for ; Tue, 31 Oct 2023 05:14:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 76CD83858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 76CD83858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=159.89.151.119 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698729267; cv=none; b=YEq6DkGVteyMNdgQfXWcKIbt9Y+kuYpKAjxXhzZ6BShbF9Q0cqnTciVCVVcMwwW4PSBmi0FmszWEML3E1o7jC7S1/0ijgXlAyCoIQl62zMqHA0ClwSVPOjgz8KjfsmskfBI/4U6qumBczwjCuGq1sbY6nSLeeSPlM1lAM3W1cnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698729267; c=relaxed/simple; bh=TooMsmQIdzng+EhGgXIljb6bPuMCrwrrnQlK1n0Ib3g=; h=Date:From:To:Subject:Mime-Version:Message-ID; b=rs6ANeY0D4Noqk9vcNOLWlZhcUvdsvy27NM6dkRHicy2/k+BupaiOXcGLxZ8hMmoDYxZLecSSExiod4b4h2l0OT8vZVg6TpMPYQm9Kty86r49oUlcc/aJ8pkRcPW4wz8Q6XzHgaBk3CsUw+NuAoMz4yqGs77cyafVNedvX/q2M0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from E0002559DT1 (unknown [123.157.234.42]) by app1 (Coremail) with SMTP id TAJkCgC3HUUXjUBlq4MBAA--.132S2; Tue, 31 Oct 2023 13:14:00 +0800 (CST) Date: Tue, 31 Oct 2023 13:14:14 +0800 From: "Li Xu" To: juzhe.zhong , gcc-patches Cc: kito.cheng , palmer Subject: Re: Re: [PATCH V5] RISC-V: Implement RESOLVE_OVERLOADED_BUILTIN for RVV intrinsic References: <20231031022436.18525-1-xuli1@eswincomputing.com>, X-Priority: 3 X-GUID: 4D8FA138-C00B-4177-B867-2B8D38CD1EAF X-Has-Attach: no X-Mailer: Foxmail 7.2.23.121[cn] Mime-Version: 1.0 Message-ID: <2023103113141379745544@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:TAJkCgC3HUUXjUBlq4MBAA--.132S2 X-Coremail-Antispam: 1UD129KBjvAXoWDJrWUJryrCr48Wry8Kw17Jrb_yoW7KFWfCo Zxur4rAFy5Wr129r1UJw17Gr43Gr18Gr4DXF4DWry7GF1UC3WYya4xt348W3y5Gr4rKrW7 X3sxJFW8AFy8Jr1rn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYg7k0a2IF6w4kM7kC6x804xWl1xkIjI8I6I8E6xAIw20EY4v2 0xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7 IYx2IY67AKxVW7JVWDJwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xv wVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcx kEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VW8 Jr1UJr1lYx0Ec7CjxVAajcxG14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG0x vY0x0EwIxGrwACY4xI67k04243AVAKzVAKj4xxMxkIecxEwVAFwVW8WwCF04k20xvY0x0E wIxGrwCF04k20xvE74AGY7Cv6cx26r4UJr1UJwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s 026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_ JF0_Jw1lIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20x vEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE 14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UMVCEFcxC0VAYjxAxZFUvcS sGvfC2KfnxnUUI43ZEXa7IUezyI5UUUUU== X-CM-SenderInfo: 50xoxi46hv4xpqfrz1xxwl0woofrz/ X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_ASCII_DIVIDERS,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SCC_10_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,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: U2luY2UgdGhlIGZvbGxvd2luZyB0aHJlZSBpbnN0YW5jZXMgc2hhcmUgdGhlIGNsYXNzIGJpbm9w LCAKSSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB2YWRkIGFuZCB2ZmFkZC4KIEkgdGhpbmsg aXQgaXMgZGlmZmljdWx0IHRvIGFkZCBtYXliZV9yZXF1aXJlX2ZybV9wIAphbmQgbWF5YmVfcmVx dWlyZV92eHJtX3AgdG8gZnVuY3Rpb25fYmFzZS4KCgpzdGF0aWMgQ09OU1RFWFBSIGNvbnN0IGJp bm9wPFBMVVM+IHZhZGRfb2JqOwpzdGF0aWMgQ09OU1RFWFBSIGNvbnN0IGJpbm9wPFBMVVM+IHZm YWRkX29iajsKc3RhdGljIENPTlNURVhQUiBjb25zdCBiaW5vcDxQTFVTLCBIQVNfRlJNPiB2ZmFk ZF9mcm1fb2JqOwoKCnRlbXBsYXRlPHJ0eF9jb2RlIENPREUsIGVudW0gZnJtX29wX3R5cGUgRlJN X09QID0gTk9fRlJNPgpjbGFzcyBiaW5vcCA6IHB1YmxpYyBmdW5jdGlvbl9iYXNlCnsKcHVibGlj OgogIGJvb2wgbWF5YmVfcmVxdWlyZV9mcm1fcCAoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0 cnVlOyB9Ly92YWRkIGlzIHRydWUKLi4uCn0KCgotLS0tLS0tLS0tLS0tLQoKCgpMaSBYdQoKCgo+ K3N0YXRpYyBib29sCgoKCj4rbWF5YmVfcmVxdWlyZV9mcm1fcCAoZnVuY3Rpb25faW5zdGFuY2Ug Jmluc3RhbmNlKQoKCgo+K3sKCgoKPivCoCByZXR1cm4gaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6 dmZ3cmVkdXN1bQoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3cmVkb3N1bSB8 fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZmFkZAoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9 PSBiYXNlczo6dmZ3c3ViIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmd25tc2FjCgoKCj4r CSB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZndubWFjYyB8fCBpbnN0YW5jZS5iYXNlID09 IGJhc2VzOjp2ZndtdWwKCgoKPisJIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmY3Z0X3gg fHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZjdnRfZgoKCgo+KwkgfHwgaW5zdGFuY2UuYmFz ZSA9PSBiYXNlczo6dmZjdnRfeHUgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3bXNhYwoK Cgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3bWFjYyB8fCBpbnN0YW5jZS5iYXNl ID09IGJhc2VzOjp2ZndjdnRfeAoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3 YWRkIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmc3ViCgoKCj4rCSB8fCBpbnN0YW5jZS5i YXNlID09IGJhc2VzOjp2ZnNxcnQgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZyZWR1c3Vt CgoKCj4rCSB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZnJzdWIgfHwgaW5zdGFuY2UuYmFz ZSA9PSBiYXNlczo6dmZyZWRvc3VtCgoKCj4rCSB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2 ZnJlYzcgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZyZGl2CgoKCj4rCSB8fCBpbnN0YW5j ZS5iYXNlID09IGJhc2VzOjp2Zm5tc3ViIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbm1z YWMKCgoKPisJIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbm1hZGQgfHwgaW5zdGFuY2Uu YmFzZSA9PSBiYXNlczo6dmZubWFjYwoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6 dmZuY3Z0X2YgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZuY3Z0X3gKCgoKPisJIHx8IGlu c3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbmN2dF94dSB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2Vz Ojp2Zm11bAoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZtc3ViIHx8IGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZmbXNhYwoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNl czo6dmZtYWRkIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbWFjYwoKCgo+KwkgfHwgaW5z dGFuY2UuYmFzZSA9PSBiYXNlczo6dmZkaXYgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3 Y3Z0X3h1OwoKCgo+K30KCgoKPisKCgoKPitzdGF0aWMgYm9vbAoKCgo+K21heWJlX3JlcXVpcmVf dnhybV9wIChmdW5jdGlvbl9pbnN0YW5jZSAmaW5zdGFuY2UpCgoKCj4rewoKCgo+K8KgIHJldHVy biBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2YWFkZCB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2Vz Ojp2YWFkZHUKCgoKPisJIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZhc3ViIHx8IGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZhc3VidQoKCgo+KwkgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNl czo6dnNzcmwgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dnNzcmEKCgoKPisJIHx8IGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZzbXVsIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZuY2xp cHUKCgoKPisJIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZuY2xpcDsKCgoKPit9CgoKCj4K CgoKPkkgYW0gc29ycnkgdGhhdCBJIGRpZG4ndCB3YXMgd3JvbmcgYmVmb3JlLgoKCgo+CgoKCj5D b3VsZCB3ZSBhZGQgbWF5YmVfcmVxdWlyZV9mcm1fcCBhbmQgbWF5YmVfcmVxdWlyZV92eHJtX3Ag aW50byBmdW5jdGlvbl9iYXNlID8KCgoKPkJ5IGRlZmF1bHQgaXQgaXMgRkFMU0UuCgoKCj4KCgoK PkluIHJpc2N2LXZlY3Rvci1idWlsdGlucy1iYXNlcy5jYywgc2V0IHRoZW0gaW4gZWFjaCBjb3Jy ZXNwb25kaW5nIGZ1bmN0aW9uX2Jhc2U6CgoKCj4KCgoKPkZvciBleGFtcGxlOgoKCgo+CgoKCj5j bGFzcyB2c211bCA6OiBwdWJsaWMgZnVuY3Rpb25fYmFzZQoKCgo+Ym9vbCBtYXliZV9yZXF1aXJl X3Z4cm1fcCAoKSBjb25zdAoKCgo+ewoKCgo+wqAgcmV0dXJuIHRydWU7CgoKCj59CgoKCj4KCgoK PlRoZSBiZW5lZml0cyBpcyB0aGF0IHlvdSBvbmx5IG5lZWQgdG8gdXNlIGluc3RhbmNlLmJhc2Uu bWF5YmVfcmVxdWlyZV9mcm1fcCAoKSBvciBpbnN0YW5jZS5iYXNlLm1heWJlX3JlcXVpcmVfdnhy bV9wICgpCgoKCj5BbmQgbm8gbmVlZCB0byBjb21wYXJlIHRoZW0gb25lIGJ5IG9uZS4KCgoKPgoK Cgo+VGhhbmtzLgoKCgo+CgoKCj4KCgoKPmp1emhlLnpob25nQHJpdmFpLmFpCgoKCj4gCgoKCj5G cm9tOiBMaSBYdQoKCgo+RGF0ZTogMjAyMy0xMC0zMSAxMDoyNAoKCgo+VG86IGdjYy1wYXRjaGVz CgoKCj5DQzoga2l0by5jaGVuZzsgcGFsbWVyOyBqdXpoZS56aG9uZzsgeHVsaQoKCgo+U3ViamVj dDogW1BBVENIIFY1XSBSSVNDLVY6IEltcGxlbWVudCBSRVNPTFZFX09WRVJMT0FERURfQlVJTFRJ TiBmb3IgUlZWIGludHJpbnNpYwoKCgo+RnJvbTogeHVsaSA8eHVsaTFAZXN3aW5jb21wdXRpbmcu Y29tPgoKCgo+IAoKCgo+VXBkYXRlIGluIHY1OgoKCgo+KiBTcGxpdCBoYXNfdnhybV9vcl9mcm1f cCBpbnRvIG1heWJlX3JlcXVpcmVfZnJtX3AgYW5kCgoKCj7CoCBtYXliZV9yZXF1aXJlX3Z4cm1f cC4KCgoKPiogQWRqdXN0IGNvbW1lbnRzLgoKCgo+IAoKCgo+VXBkYXRlIGluIHY0OgoKCgo+KiBS ZW1vdmUgY2xhc3MgZnVuY3Rpb25fcmVzb2x2ZXIuCgoKCj4qIFJlbW92ZSBmdW5jdGlvbiBnZXRf bm9uX292ZXJsb2FkZWRfaW5zdGFuY2UuCgoKCj4qIEFkZCBvdmVybG9hZGVkIGhhc2ggdHJhaXRz IGZvciBub24tb3ZlcmxvYWRlZCBpbnRyaW5zaWMuCgoKCj4qIEFsbCBvdmVybG9hZGVkIGludHJp bnNpY3MgYXJlIGltcGxlbWVudGVkLCBhbmQgdGhlIHRlc3RzIHBhc3MuCgoKCj4gCgoKCj5VcGRh dGUgaW4gdjM6CgoKCj4gCgoKCj4qIFJld3JpdGUgY29tbWVudCBmb3Igb3ZlcmxvYWRlZCBmdW5j dGlvbiBhZGQuCgoKCj4qIE1vdmUgZ2V0X25vbl9vdmVybG9hZGVkX2luc3RhbmNlIHRvIGZ1bmN0 aW9uX2Jhc2UuCgoKCj4gCgoKCj5VcGRhdGUgaW4gdjI6CgoKCj4gCgoKCj4qIEFkZCBnZXRfbm9u X292ZXJsb2FkZWRfaW5zdGFuY2UgZm9yIGZ1bmN0aW9uIGluc3RhbmNlLgoKCgo+KiBGaXggb3Zl cmxvYWQgY2hlY2sgZm9yIHBvbGljeSBmdW5jdGlvbi4KCgoKPiogRW5yaWNoIHRoZSB0ZXN0IGNh c2VzIGNoZWNrLgoKCgo+IAoKCgo+T3JpZ2luYWwgbG9nOgoKCgo+IAoKCgo+VGhpcyBwYXRjaCB3 b3VsZCBsaWtlIGFkZCB0aGUgZnJhbWV3b3JrIHRvIHN1cHBvcnQgdGhlIFJWViBvdmVybG9hZGVk CgoKCj5pbnRyaW5zaWMgQVBJIGluIHJpc2N2LXh4eC14eHgtZ2NjLCBsaWtlIHJpc2N2LXh4eC14 eHgtZysrIGRpZC4KCgoKPiAKCgoKPkhvd2V2ZXIsIGl0IGFsbW9zdCBsZXZlcmFnZSB0aGUgaG9v ayBUQVJHRVRfUkVTT0xWRV9PVkVSTE9BREVEX0JVSUxUSU4KCgoKPndpdGggYmVsb3cgc3RlcHMu CgoKCj4gCgoKCj4qIFJlZ2lzdGVyIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoKCgo+KiBBZGQgZnVu Y3Rpb25fcmVzb2x2ZXIgZm9yIG92ZXJsb2FkZWQgZnVuY3Rpb24gcmVzb2x2aW5nLgoKCgo+KiBB ZGQgcmVzb2x2ZSBBUEkgZm9yIGZ1bmN0aW9uIHNoYXBlIHdpdGggZGVmYXVsdCBpbXBsZW1lbnRh dGlvbi4KCgoKPiogSW1wbGVtZW50IEhPT0sgZm9yIG5hdmlnYXRpbmcgdGhlIG92ZXJsb2FkZWQg QVBJIHRvIG5vbi1vdmVybG9hZGVkIEFQSS4KCgoKPiAKCgoKPmdjYy9DaGFuZ2VMb2c6CgoKCj4g CgoKCj7CoMKgwqDCoMKgwqDCoCAqIGNvbmZpZy9yaXNjdi9yaXNjdi1jLmNjIChyaXNjdl9yZXNv bHZlX292ZXJsb2FkZWRfYnVpbHRpbik6IE5ldyBmdW5jdGlvbiBmb3IgdGhlIGhvb2suCgoKCj7C oMKgwqDCoMKgwqDCoCAocmlzY3ZfcmVnaXN0ZXJfcHJhZ21hcyk6IFJlZ2lzdGVyIHRoZSBob29r LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBjb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmggKHJlc29s dmVfb3ZlcmxvYWRlZF9idWlsdGluKTogTmV3IGRlY2wuCgoKCj7CoMKgwqDCoMKgwqDCoCAqIGNv bmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjIChidWlsZF9vbmUpOiBS ZWdpc3RlciBvdmVybG9hZGVkIGZ1bmN0aW9uLgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBjb25maWcv cmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLmNjIChzdHJ1Y3Qgbm9uX292ZXJsb2FkZWRfcmVn aXN0ZXJlZF9mdW5jdGlvbl9oYXNoZXIpOgoKCgo+wqDCoMKgwqDCoMKgwqDCoMKgIE5ldyBoYXNo IHRhYmxlLgoKCgo+wqDCoMKgwqDCoMKgwqAgKGZ1bmN0aW9uX2J1aWxkZXI6OmFkZF9mdW5jdGlv bik6IEFkZCBvdmVybG9hZGVkIGFyZy4KCgoKPsKgwqDCoMKgwqDCoMKgIChmdW5jdGlvbl9idWls ZGVyOjphZGRfdW5pcXVlX2Z1bmN0aW9uKTogTWFwIG92ZXJsb2FkZWQgZnVuY3Rpb24gdG8gbm9u LW92ZXJsb2FkZWQgZnVuY3Rpb24uCgoKCj7CoMKgwqDCoMKgwqDCoCAoZnVuY3Rpb25fYnVpbGRl cjo6YWRkX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBOZXcgQVBJIGltcGwuCgoKCj7CoMKgwqDCoMKg wqDCoCAocmVnaXN0ZXJlZF9mdW5jdGlvbjo6b3ZlcmxvYWRlZF9oYXNoKTogQ2FsY3VsYXRlIGhh c2ggdmFsdWUuCgoKCj7CoMKgwqDCoMKgwqDCoCAobWF5YmVfcmVxdWlyZV9mcm1fcCk6IE5ldyBm dW5jdGlvbiBpbXBsLgoKCgo+wqDCoMKgwqDCoMKgwqAgKG1heWJlX3JlcXVpcmVfdnhybV9wKTog RGl0dG8uCgoKCj7CoMKgwqDCoMKgwqDCoCAoaGFzX3Z4cm1fb3JfZnJtX3ApOiBEaXR0by4KCgoK PsKgwqDCoMKgwqDCoMKgIChub25fb3ZlcmxvYWRlZF9yZWdpc3RlcmVkX2Z1bmN0aW9uX2hhc2hl cjo6aGFzaCk6IERpdHRvLgoKCgo+wqDCoMKgwqDCoMKgwqAgKG5vbl9vdmVybG9hZGVkX3JlZ2lz dGVyZWRfZnVuY3Rpb25faGFzaGVyOjplcXVhbCk6IERpdHRvLgoKCgo+wqDCoMKgwqDCoMKgwqAg KGhhbmRsZV9wcmFnbWFfdmVjdG9yKTogQWxsb2NhdGUgc3BhY2UgZm9yIGhhc2ggdGFibGUuCgoK Cj7CoMKgwqDCoMKgwqDCoCAocmVzb2x2ZV9vdmVybG9hZGVkX2J1aWx0aW4pOiBOZXcgZnVuY3Rp b24gaW1wbC4KCgoKPsKgwqDCoMKgwqDCoMKgICogY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1i dWlsdGlucy5oOiBBZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIGFkZF9mdW5jdGlvbi4KCgoK PiAKCgoKPmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCgo+IAoKCgo+wqDCoMKgwqDCoMKgwqAg KiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92YWRkLmM6IE5ldyB0 ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJs b2FkZWRfcnYzMl92ZmFkZC5jOiBOZXcgdGVzdC4KCgoKPsKgwqDCoMKgwqDCoMKgICogZ2NjLnRh cmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmdldF92c2V0LmM6IE5ldyB0ZXN0 LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2Fk ZWRfcnYzMl92bG94c2VnMmVpMTYuYzogTmV3IHRlc3QuCgoKCj7CoMKgwqDCoMKgwqDCoCAqIGdj Yy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjMyX3Ztdi5jOiBOZXcgdGVzdC4K CgoKPsKgwqDCoMKgwqDCoMKgICogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVk X3J2MzJfdnJlaW50ZXJwcmV0LmM6IE5ldyB0ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2Mu dGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92YWRkLmM6IE5ldyB0ZXN0LgoK Cgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRf cnY2NF92ZmFkZC5jOiBOZXcgdGVzdC4KCgoKPsKgwqDCoMKgwqDCoMKgICogZ2NjLnRhcmdldC9y aXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmdldF92c2V0LmM6IE5ldyB0ZXN0LgoKCgo+ wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2 NF92bG94c2VnMmVpMTYuYzogTmV3IHRlc3QuCgoKCj7CoMKgwqDCoMKgwqDCoCAqIGdjYy50YXJn ZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3Ztdi5jOiBOZXcgdGVzdC4KCgoKPsKg wqDCoMKgwqDCoMKgICogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRf dnJlaW50ZXJwcmV0LmM6IE5ldyB0ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0 L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdmFkZC5oOiBOZXcgdGVzdC4KCgoKPsKgwqDCoMKg wqDCoMKgICogZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZmYWRkLmg6IE5l dyB0ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292 ZXJsb2FkZWRfdmdldF92c2V0Lmg6IE5ldyB0ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2Mu dGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdmxveHNlZzJlaTE2Lmg6IE5ldyB0ZXN0 LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2Fk ZWRfdm12Lmg6IE5ldyB0ZXN0LgoKCgo+wqDCoMKgwqDCoMKgwqAgKiBnY2MudGFyZ2V0L3Jpc2N2 L3J2di9iYXNlL292ZXJsb2FkZWRfdnJlaW50ZXJwcmV0Lmg6IE5ldyB0ZXN0LgoKCgo+IAoKCgo+ U2lnbmVkLW9mZi1ieTogTGkgWHUgPHh1bGkxQGVzd2luY29tcHV0aW5nLmNvbT4KCgoKPkNvLUF1 dGhvcmVkLUJ5OiBQYW4gTGkgPHBhbjIubGlAaW50ZWwuY29tPgoKCgo+LS0tCgoKCj5nY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2LWMuY2PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgIDM2ICsrLQoKCgo+Z2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCgoKCj4uLi4vcmlzY3YvcmlzY3YtdmVjdG9yLWJ1 aWx0aW5zLXNoYXBlcy5jY8KgwqDCoMKgIHzCoMKgIDEgKwoKCgo+Z2NjL2NvbmZpZy9yaXNjdi9y aXNjdi12ZWN0b3ItYnVpbHRpbnMuY2PCoMKgwqDCoCB8IDI1OSArKysrKysrKysrKysrKysrKy0K CgoKPmdjYy9jb25maWcvcmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLmjCoMKgwqDCoMKgIHzC oMKgIDUgKy0KCgoKPi4uLi9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmFkZC5jwqDC oMKgwqAgfMKgIDEyICsKCgoKPi4uLi9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmZh ZGQuY8KgwqDCoCB8wqAgMTIgKwoKCgo+Li4uL3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92Z2V0 X3ZzZXQuY8KgwqDCoMKgwqAgfMKgwqAgNyArCgoKCj4uLi4vcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9y djMyX3Zsb3hzZWcyZWkxNi5jwqDCoCB8wqAgMTEgKwoKCgo+Li4uL3Jpc2N2L3J2di9iYXNlL292 ZXJsb2FkZWRfcnYzMl92bXYuY8KgwqDCoMKgwqAgfMKgIDEwICsKCgoKPi4uLi9ydnYvYmFzZS9v dmVybG9hZGVkX3J2MzJfdnJlaW50ZXJwcmV0LmPCoMKgIHzCoCAxMCArCgoKCj4uLi4vcmlzY3Yv cnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3ZhZGQuY8KgwqDCoMKgIHzCoCAxMSArCgoKCj4uLi4v cmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3ZmYWRkLmPCoMKgwqAgfMKgIDExICsKCgoK Pi4uLi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmdldF92c2V0LmPCoMKgwqDCoMKgIHzCoMKg IDYgKwoKCgo+Li4uL3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92bG94c2VnMmVpMTYuY8KgwqAg fMKgIDEwICsKCgoKPi4uLi9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdm12LmPCoMKg wqDCoMKgIHzCoCAxMCArCgoKCj4uLi4vcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3ZyZWludGVy cHJldC5jwqDCoCB8wqDCoCA5ICsKCgoKPi4uLi9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3Zh ZGQuaMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgNTkgKysrKwoKCgo+Li4uL3Jpc2N2L3J2di9iYXNl L292ZXJsb2FkZWRfdmZhZGQuaMKgwqDCoMKgwqDCoMKgwqAgfMKgIDY3ICsrKysrCgoKCj4uLi4v cmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92Z2V0X3ZzZXQuaMKgwqDCoMKgIHzCoCAyNyArKwoK Cgo+Li4uL3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdmxveHNlZzJlaTE2LmjCoCB8wqAgMzkg KysrCgoKCj4uLi4vcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92bXYuaMKgwqDCoMKgwqDCoMKg wqDCoMKgIHzCoCAyNiArKwoKCgo+Li4uL3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdnJlaW50 ZXJwcmV0LmjCoCB8wqAgMjkgKysKCgoKPjIzIGZpbGVzIGNoYW5nZWQsIDY1OSBpbnNlcnRpb25z KCspLCA5IGRlbGV0aW9ucygtKQoKCgo+Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmFkZC5jCgoKCj5jcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292 ZXJsb2FkZWRfcnYzMl92ZmFkZC5jCgoKCj5jcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92Z2V0X3ZzZXQuYwoK Cgo+Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYv YmFzZS9vdmVybG9hZGVkX3J2MzJfdmxveHNlZzJlaTE2LmMKCgoKPmNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjMy X3Ztdi5jCgoKCj5jcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jp c2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92cmVpbnRlcnByZXQuYwoKCgo+Y3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9h ZGVkX3J2NjRfdmFkZC5jCgoKCj5jcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92ZmFkZC5jCgoKCj5jcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJs b2FkZWRfcnY2NF92Z2V0X3ZzZXQuYwoKCgo+Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmxveHNlZzJlaTE2 LmMKCgoKPmNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3Ztdi5jCgoKCj5jcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92cmVp bnRlcnByZXQuYwoKCgo+Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZhZGQuaAoKCgo+Y3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZmYWRk LmgKCgoKPmNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92Z2V0X3ZzZXQuaAoKCgo+Y3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3Zsb3hzZWcy ZWkxNi5oCgoKCj5jcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jp c2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdm12LmgKCgoKPmNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92cmVpbnRlcnBy ZXQuaAoKCgo+IAoKCgo+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtYy5jYyBi L2djYy9jb25maWcvcmlzY3YvcmlzY3YtYy5jYwoKCgo+aW5kZXggMjgzMDUyYWUzMTMuLmJlZGY3 MjE3MzkwIDEwMDY0NAoKCgo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1jLmNjCgoKCj4r KysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LWMuY2MKCgoKPkBAIC0yMTUsMTYgKzIxNSw1MCBA QCByaXNjdl9jaGVja19idWlsdGluX2NhbGwgKGxvY2F0aW9uX3QgbG9jLCB2ZWM8bG9jYXRpb25f dD4gYXJnX2xvYywgdHJlZSBmbmRlY2wsCgoKCj7CoMKgwqDCoCBjYXNlIFJJU0NWX0JVSUxUSU5f VkVDVE9SOgoKCgo+wqDCoMKgwqDCoMKgIHJldHVybiByaXNjdl92ZWN0b3I6OmNoZWNrX2J1aWx0 aW5fY2FsbCAobG9jLCBhcmdfbG9jLCBzdWJjb2RlLAoKCgo+LcKgwqDCoMKgwqDCoMKgIG9yaWdf Zm5kZWNsLCBuYXJncywgYXJncyk7CgoKCj4rwqDCoMKgwqDCoMKgwqAgZm5kZWNsLCBuYXJncywg YXJncyk7CgoKCj7CoMKgwqDCoCB9CgoKCj7CoMKgIGdjY191bnJlYWNoYWJsZSAoKTsKCgoKPn0K CgoKPisvKiBJbXBsZW1lbnQgVEFSR0VUX1JFU09MVkVfT1ZFUkxPQURFRF9CVUlMVElOLsKgICov CgoKCj4rc3RhdGljIHRyZWUKCgoKPityaXNjdl9yZXNvbHZlX292ZXJsb2FkZWRfYnVpbHRpbiAo dW5zaWduZWQgaW50IHVuY2FzdF9sb2NhdGlvbiwgdHJlZSBmbmRlY2wsCgoKCj4rwqDCoCB2b2lk ICp1bmNhc3RfYXJnbGlzdCkKCgoKPit7CgoKCj4rwqAgdmVjPHRyZWUsIHZhX2djPiBlbXB0eSA9 IHt9OwoKCgo+K8KgIGxvY2F0aW9uX3QgbG9jID0gKGxvY2F0aW9uX3QpIHVuY2FzdF9sb2NhdGlv bjsKCgoKPivCoCB2ZWM8dHJlZSwgdmFfZ2M+ICphcmdsaXN0ID0gKHZlYzx0cmVlLCB2YV9nYz4g KikgdW5jYXN0X2FyZ2xpc3Q7CgoKCj4rwqAgdW5zaWduZWQgaW50IGNvZGUgPSBERUNMX01EX0ZV TkNUSU9OX0NPREUgKGZuZGVjbCk7CgoKCj4rwqAgdW5zaWduZWQgaW50IHN1YmNvZGUgPSBjb2Rl ID4+IFJJU0NWX0JVSUxUSU5fU0hJRlQ7CgoKCj4rwqAgdHJlZSBuZXdfZm5kZWNsID0gTlVMTF9U UkVFOwoKCgo+KwoKCgo+K8KgIGlmICghYXJnbGlzdCkKCgoKPivCoMKgwqAgYXJnbGlzdCA9ICZl bXB0eTsKCgoKPisKCgoKPivCoCBzd2l0Y2ggKGNvZGUgJiBSSVNDVl9CVUlMVElOX0NMQVNTKQoK Cgo+K8KgwqDCoCB7CgoKCj4rwqDCoMKgIGNhc2UgUklTQ1ZfQlVJTFRJTl9HRU5FUkFMOgoKCgo+ K8KgwqDCoMKgwqAgYnJlYWs7CgoKCj4rwqDCoMKgIGNhc2UgUklTQ1ZfQlVJTFRJTl9WRUNUT1I6 CgoKCj4rwqDCoMKgwqDCoCBuZXdfZm5kZWNsID0gcmlzY3ZfdmVjdG9yOjpyZXNvbHZlX292ZXJs b2FkZWRfYnVpbHRpbiAoc3ViY29kZSwgYXJnbGlzdCk7CgoKCj4rwqDCoMKgwqDCoCBicmVhazsK CgoKPivCoMKgwqAgZGVmYXVsdDoKCgoKPivCoMKgwqDCoMKgIGdjY191bnJlYWNoYWJsZSAoKTsK CgoKPivCoMKgwqAgfQoKCgo+KwoKCgo+K8KgIGlmIChuZXdfZm5kZWNsID09IE5VTExfVFJFRSkK CgoKPivCoMKgwqAgcmV0dXJuIG5ld19mbmRlY2w7CgoKCj4rCgoKCj4rwqAgcmV0dXJuIGJ1aWxk X2Z1bmN0aW9uX2NhbGxfdmVjIChsb2MsIHZOVUxMLCBuZXdfZm5kZWNsLCBhcmdsaXN0LCBOVUxM LAoKCgo+K8KgwqAgZm5kZWNsKTsKCgoKPit9CgoKCj4rCgoKCj4vKiBJbXBsZW1lbnQgUkVHSVNU RVJfVEFSR0VUX1BSQUdNQVMuwqAgKi8KCgoKPnZvaWQKCgoKPnJpc2N2X3JlZ2lzdGVyX3ByYWdt YXMgKHZvaWQpCgoKCj57CgoKCj4rwqAgdGFyZ2V0bS5yZXNvbHZlX292ZXJsb2FkZWRfYnVpbHRp biA9IHJpc2N2X3Jlc29sdmVfb3ZlcmxvYWRlZF9idWlsdGluOwoKCgo+wqDCoCB0YXJnZXRtLmNo ZWNrX2J1aWx0aW5fY2FsbCA9IHJpc2N2X2NoZWNrX2J1aWx0aW5fY2FsbDsKCgoKPsKgwqAgY19y ZWdpc3Rlcl9wcmFnbWEgKCJyaXNjdiIsICJpbnRyaW5zaWMiLCByaXNjdl9wcmFnbWFfaW50cmlu c2ljKTsKCgoKPn0KCgoKPmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rv cy5oIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaAoKCgo+aW5kZXggMjkyNmQ1ZDUw ZDUuLjU4MzYzMzNiYzVkIDEwMDY0NAoKCgo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1w cm90b3MuaAoKCgo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaAoKCgo+QEAg LTQzMCw2ICs0MzAsNyBAQCBnaW1wbGUgKmdpbXBsZV9mb2xkX2J1aWx0aW4gKHVuc2lnbmVkIGlu dCwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2NhbGwgKik7CgoKCj5ydHggZXhwYW5kX2J1aWx0 aW4gKHVuc2lnbmVkIGludCwgdHJlZSwgcnR4KTsKCgoKPmJvb2wgY2hlY2tfYnVpbHRpbl9jYWxs IChsb2NhdGlvbl90LCB2ZWM8bG9jYXRpb25fdD4sIHVuc2lnbmVkIGludCwKCgoKPsKgwqAgdHJl ZSwgdW5zaWduZWQgaW50LCB0cmVlICopOwoKCgo+K3RyZWUgcmVzb2x2ZV9vdmVybG9hZGVkX2J1 aWx0aW4gKHVuc2lnbmVkIGludCwgdmVjPHRyZWUsIHZhX2djPiAqKTsKCgoKPmJvb2wgY29uc3Rf dmVjX2FsbF9zYW1lX2luX3JhbmdlX3AgKHJ0eCwgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lO VCk7CgoKCj5ib29sIGxlZ2l0aW1pemVfbW92ZSAocnR4LCBydHggKik7CgoKCj52b2lkIGVtaXRf dmxtYXhfdnNldHZsIChtYWNoaW5lX21vZGUsIHJ0eCk7CgoKCj5kaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjIGIvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMtc2hhcGVzLmNjCgoKCj5pbmRleCAwYmRhOTM0YWUx Ni4uZWU1NzA0NThjZTkgMTAwNjQ0CgoKCj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZl Y3Rvci1idWlsdGlucy1zaGFwZXMuY2MKCgoKPisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3Yt dmVjdG9yLWJ1aWx0aW5zLXNoYXBlcy5jYwoKCgo+QEAgLTQ5LDYgKzQ5LDcgQEAgYnVpbGRfb25l IChmdW5jdGlvbl9idWlsZGVyICZiLCBjb25zdCBmdW5jdGlvbl9ncm91cF9pbmZvICZncm91cCwK CgoKPsKgwqDCoMKgIGdyb3VwLm9wc19pbmZvcy50eXBlc1t2ZWNfdHlwZV9pZHhdLmluZGV4KTsK CgoKPsKgwqAgYi5hbGxvY2F0ZV9hcmd1bWVudF90eXBlcyAoZnVuY3Rpb25faW5zdGFuY2UsIGFy Z3VtZW50X3R5cGVzKTsKCgoKPsKgwqAgYi5hcHBseV9wcmVkaWNhdGlvbiAoZnVuY3Rpb25faW5z dGFuY2UsIHJldHVybl90eXBlLCBhcmd1bWVudF90eXBlcyk7CgoKCj4rwqAgYi5hZGRfb3Zlcmxv YWRlZF9mdW5jdGlvbiAoZnVuY3Rpb25faW5zdGFuY2UsICpncm91cC5zaGFwZSk7CgoKCj7CoMKg IGIuYWRkX3VuaXF1ZV9mdW5jdGlvbiAoZnVuY3Rpb25faW5zdGFuY2UsICgqZ3JvdXAuc2hhcGUp LCByZXR1cm5fdHlwZSwKCgoKPmFyZ3VtZW50X3R5cGVzKTsKCgoKPn0KCgoKPmRpZmYgLS1naXQg YS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5jYyBiL2djYy9jb25maWcv cmlzY3YvcmlzY3YtdmVjdG9yLWJ1aWx0aW5zLmNjCgoKCj5pbmRleCA1ZDRkYzI2NGZhNi4uNWM3 MGY3YTljNmMgMTAwNjQ0CgoKCj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1i dWlsdGlucy5jYwoKCgo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRp bnMuY2MKCgoKPkBAIC04MCw2ICs4MCwzMiBAQCBwdWJsaWM6CgoKCj7CoMKgIC8qIFRoZSBkZWNs IGl0c2VsZi7CoCAqLwoKCgo+wqDCoCB0cmVlIEdUWSAoKHNraXApKSBkZWNsOwoKCgo+KwoKCgo+ K8KgIC8qIFRoZSBvdmVybG9hZCBoYXNoIG9mIG5vbi1vdmVybG9hZGVkIGludHJpbnNpYyBpcyBk ZXRlcm1pbmVkIGJ5CgoKCj4rwqDCoMKgwqAgdGhlIG92ZXJsb2FkIG5hbWUgYW5kIGFyZ3VtZW50 IGxpc3QuIEFkZGluZyB0aGUgb3ZlcmxvYWQgbmFtZSB0bwoKCgo+K8KgwqDCoMKgIHRoZSBoYXNo IGlzIGFsc28gdG8gYWRkcmVzcyB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6CgoKCj4rwqDCoMKg wqAgdmludDE2bWY0X3TCoCBfX3Jpc2N2X3ZyZWludGVycHJldF9pMTZtZjQgKHZmbG9hdDE2bWY0 X3Qgc3JjKTsKCgoKPivCoMKgwqDCoCB2dWludDE2bWY0X3QgX19yaXNjdl92cmVpbnRlcnByZXRf dTE2bWY0ICh2ZmxvYXQxNm1mNF90IHNyYyk7CgoKCj4rwqDCoMKgwqAgVGhlIGJhc2UsIHNoYXBl IGFuZCBhcmd1bWVudCBsaXN0IG9mIHRoZSB2cmVpbnRlcnByZXQgaW5zdGFuY2UgYXJlCgoKCj4r wqDCoMKgwqAgdGhlIHNhbWUsIG9ubHkgdGhlIG92ZXJsb2FkIG5hbWUgaXMgZGlmZmVyZW50LiBU aGVyZWZvcmUsIGl0IGlzCgoKCj4rwqDCoMKgwqAgZW5vdWdoIHRvIGFkZCBvdmVybG9hZF9uYW1l IGFuZCBhcmd1bWVudCBsaXN0IHRvIHRoZSBoYXNoIHZhbHVlLiovCgoKCj4rwqAgY29uc3QgY2hh ciAqb3ZlcmxvYWRfbmFtZTsKCgoKPisKCgoKPivCoCAvKiBUaGUgYXJndW1lbnQgbGlzdCBwYXJ0 IG9mIHRoZSBoYXNoIHZhbHVlLiBBZGQgdGhlIHVuc2lnbmVkL3NpZ25lZCB0eXBlCgoKCj4rwqDC oMKgwqAgYW5kIG1hY2hpbmUgbW9kZSBvZiBlYWNoIGFyZ3VtZW50IHRvIHRoZSBoYXNoIHZhbHVl LiAqLwoKCgo+K8KgIHZlYzx0cmVlPiBHVFkgKChza2lwKSkgYXJndW1lbnRfdHlwZXM7CgoKCj4r CgoKCj4rwqAgLyogVHJ1ZSBpZiB0aGUgZGVjbCByZXByZXNlbnRzIGFuIG92ZXJsb2FkZWQgZnVu Y3Rpb24gdGhhdCBuZWVkcyB0byBiZQoKCgo+K8KgwqDCoMKgIHJlc29sdmVkLiAqLwoKCgo+K8Kg IGJvb2wgb3ZlcmxvYWRlZF9wOwoKCgo+KwoKCgo+K8KgIC8qIFRoZSBoYXNoIHZhbHVlIHRvIGlu ZGljYXRlIHRoZSBub24tb3ZlcmxvYWRlZCBmdW5jdGlvbi4gR2VuZXJhdGUgaGFzaCB2YWx1ZQoK Cgo+K8KgwqDCoMKgIGJhc2VkIG9uIG92ZXJsb2FkX25hbWUgYW5kIGFyZ3VtZW50X3R5cGVzLiAq LwoKCgo+K8KgIGhhc2h2YWxfdCBvdmVybG9hZGVkX2hhc2ggKCkgY29uc3Q7CgoKCj4rCgoKCj4r wqAgLyogR2VuZXJhdGUgaGFzaCB2YWx1ZSBiYXNlZCBvbiB0aGUgb3ZlcmxvYWRfbmFtZSBhbmQg dGhlIGFyZ3VtZW50IGxpc3QgcGFzc2VkCgoKCj4rwqDCoMKgwqAgYnkgdGhlIHVzZXIgd2hlbiBj YWxsaW5nLiAqLwoKCgo+K8KgIGhhc2h2YWxfdCBvdmVybG9hZGVkX2hhc2ggKGNvbnN0IHZlYzx0 cmVlLCB2YV9nYz4gJik7CgoKCj59OwoKCgo+LyogSGFzaCB0cmFpdHMgZm9yIHJlZ2lzdGVyZWRf ZnVuY3Rpb24uwqAgKi8KCgoKPkBAIC05MSw2ICsxMTcsMTQgQEAgc3RydWN0IHJlZ2lzdGVyZWRf ZnVuY3Rpb25faGFzaGVyIDogbm9mcmVlX3B0cl9oYXNoPHJlZ2lzdGVyZWRfZnVuY3Rpb24+CgoK Cj7CoMKgIHN0YXRpYyBib29sIGVxdWFsICh2YWx1ZV90eXBlLCBjb25zdCBjb21wYXJlX3R5cGUg Jik7CgoKCj59OwoKCgo+Ky8qIEhhc2ggdHJhaXRzIGZvciBvdmVybG9hZCByZWdpc3RlcmVkX2Z1 bmN0aW9uLiAqLwoKCgo+K3N0cnVjdCBub25fb3ZlcmxvYWRlZF9yZWdpc3RlcmVkX2Z1bmN0aW9u X2hhc2hlcgoKCgo+K8KgIDogbm9mcmVlX3B0cl9oYXNoPHJlZ2lzdGVyZWRfZnVuY3Rpb24+CgoK Cj4rewoKCgo+K8KgIHN0YXRpYyBoYXNodmFsX3QgaGFzaCAodmFsdWVfdHlwZSk7CgoKCj4rwqAg c3RhdGljIGJvb2wgZXF1YWwgKHZhbHVlX3R5cGUsIGNvbnN0IGNvbXBhcmVfdHlwZSAmKTsKCgoK Pit9OwoKCgo+KwoKCgo+LyogU3RhdGljIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggUlZWIHR5cGUu wqAgKi8KCgoKPnN0YXRpYyBDT05TVEVYUFIgY29uc3QgdmVjdG9yX3R5cGVfaW5mbyB2ZWN0b3Jf dHlwZXNbXSA9IHsKCgoKPiNkZWZpbmUgREVGX1JWVl9UWVBFKE5BTUUsIE5DSEFSUywgQUJJX05B TUUsIEFSR1MuLi4pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgXAoKCgo+QEAgLTI2MTEsNiArMjY0NSwxMiBAQCBzdGF0aWMgR1RZICgoKSkgdmVjPHJl Z2lzdGVyZWRfZnVuY3Rpb24gKiwgdmFfZ2M+ICpyZWdpc3RlcmVkX2Z1bmN0aW9uczsKCgoKPsKg wqDCoCBvdmVybG9hZGVkIGZ1bmN0aW9ucy7CoCAqLwoKCgo+c3RhdGljIGhhc2hfdGFibGU8cmVn aXN0ZXJlZF9mdW5jdGlvbl9oYXNoZXI+ICpmdW5jdGlvbl90YWJsZTsKCgoKPisvKiBBbGwgcmVn aXN0ZXJlZCBmdW5jdGlvbiBkZWNscywgaGFzaGVkIG9uIG92ZXJsb2FkX25hbWUgYW5kIGFyZ3Vt ZW50IGxpc3QKCgoKPivCoMKgIG9mIHRoZSByZWdpc3RlcmVkX2Z1bmN0aW9uLsKgIFRoaXMgaXMg dXNlZCBmb3IgbG9va2luZyB1cCBpbXBsZW1lbnRhdGlvbnMKCgoKPivCoMKgIG9mIG5vbi1vdmVy bG9hZGVkIGZ1bmN0aW9ucy4gKi8KCgoKPitzdGF0aWMgaGFzaF90YWJsZTxub25fb3ZlcmxvYWRl ZF9yZWdpc3RlcmVkX2Z1bmN0aW9uX2hhc2hlcj4KCgoKPivCoCAqbm9uX292ZXJsb2FkZWRfZnVu Y3Rpb25fdGFibGU7CgoKCj4rCgoKCj4vKiBSQUlJIGNsYXNzIGZvciBlbmFibGluZyBlbm91Z2gg UlZWIGZlYXR1cmVzIHRvIGRlZmluZSB0aGUgYnVpbHQtaW4KCgoKPsKgwqDCoCB0eXBlcyBhbmQg aW1wbGVtZW50IHRoZSByaXNjdl92ZWN0b3IuaCBwcmFnbWEuCgoKCj5AQCAtMzM2OSw3ICszNDA5 LDkgQEAgZnVuY3Rpb25fYnVpbGRlcjo6Z2V0X2F0dHJpYnV0ZXMgKGNvbnN0IGZ1bmN0aW9uX2lu c3RhbmNlICZpbnN0YW5jZSkKCgoKPnJlZ2lzdGVyZWRfZnVuY3Rpb24gJgoKCgo+ZnVuY3Rpb25f YnVpbGRlcjo6YWRkX2Z1bmN0aW9uIChjb25zdCBmdW5jdGlvbl9pbnN0YW5jZSAmaW5zdGFuY2Us CgoKCj5jb25zdCBjaGFyICpuYW1lLCB0cmVlIGZudHlwZSwgdHJlZSBhdHRycywKCgoKPi0gYm9v bCBwbGFjZWhvbGRlcl9wKQoKCgo+KyBib29sIHBsYWNlaG9sZGVyX3AsIGNvbnN0IGNoYXIgKm92 ZXJsb2FkX25hbWUsCgoKCj4rIGNvbnN0IHZlYzx0cmVlPiAmYXJndW1lbnRfdHlwZXMsCgoKCj4r IGJvb2wgb3ZlcmxvYWRlZF9wID0gZmFsc2UpCgoKCj57CgoKCj7CoMKgIHVuc2lnbmVkIGludCBj b2RlID0gdmVjX3NhZmVfbGVuZ3RoIChyZWdpc3RlcmVkX2Z1bmN0aW9ucyk7CgoKCj7CoMKgIGNv ZGUgPSAoY29kZSA8PCBSSVNDVl9CVUlMVElOX1NISUZUKSArIFJJU0NWX0JVSUxUSU5fVkVDVE9S OwoKCgo+QEAgLTMzOTUsNiArMzQzNyw5IEBAIGZ1bmN0aW9uX2J1aWxkZXI6OmFkZF9mdW5jdGlv biAoY29uc3QgZnVuY3Rpb25faW5zdGFuY2UgJmluc3RhbmNlLAoKCgo+wqDCoCByZWdpc3RlcmVk X2Z1bmN0aW9uICZyZm4gPSAqZ2djX2FsbG9jPHJlZ2lzdGVyZWRfZnVuY3Rpb24+ICgpOwoKCgo+ wqDCoCByZm4uaW5zdGFuY2UgPSBpbnN0YW5jZTsKCgoKPsKgwqAgcmZuLmRlY2wgPSBkZWNsOwoK Cgo+K8KgIHJmbi5vdmVybG9hZF9uYW1lID0gb3ZlcmxvYWRfbmFtZSA/IHhzdHJkdXAgKG92ZXJs b2FkX25hbWUpIDogTlVMTDsKCgoKPivCoCByZm4uYXJndW1lbnRfdHlwZXMgPSBhcmd1bWVudF90 eXBlczsKCgoKPivCoCByZm4ub3ZlcmxvYWRlZF9wID0gb3ZlcmxvYWRlZF9wOwoKCgo+wqDCoCB2 ZWNfc2FmZV9wdXNoIChyZWdpc3RlcmVkX2Z1bmN0aW9ucywgJnJmbik7CgoKCj7CoMKgIHJldHVy biByZm47CgoKCj5AQCAtMzQxNSw2ICszNDYwLDEwIEBAIGZ1bmN0aW9uX2J1aWxkZXI6OmFkZF91 bmlxdWVfZnVuY3Rpb24gKGNvbnN0IGZ1bmN0aW9uX2luc3RhbmNlICZpbnN0YW5jZSwKCgoKPsKg wqAgaWYgKCFjaGVja19yZXF1aXJlZF9leHRlbnNpb25zIChpbnN0YW5jZSkpCgoKCj7CoMKgwqDC oCByZXR1cm47CgoKCj4rwqAgLyogQWxzbyBhZGQgdGhlIGZ1bmN0aW9uIHVuZGVyIGl0cyBvdmVy bG9hZGVkIGFsaWFzLCBpZiB3ZSB3YW50CgoKCj4rwqDCoMKgwqAgYSBzZXBhcmF0ZSBkZWNsIGZv ciBlYWNoIGluc3RhbmNlIG9mIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24uwqAgKi8KCgoKPivCoCBj aGFyICpvdmVybG9hZF9uYW1lID0gc2hhcGUtPmdldF9uYW1lICgqdGhpcywgaW5zdGFuY2UsIHRy dWUpOwoKCgo+KwoKCgo+wqDCoCAvKiBBZGQgdGhlIGZ1bmN0aW9uIHVuZGVyIGl0cyBmdWxsICh1 bmlxdWUpIG5hbWUuwqAgKi8KCgoKPsKgwqAgY2hhciAqbmFtZSA9IHNoYXBlLT5nZXRfbmFtZSAo KnRoaXMsIGluc3RhbmNlLCBmYWxzZSk7CgoKCj7CoMKgIHRyZWUgZm50eXBlCgoKCj5AQCAtMzQy Miw3ICszNDcxLDggQEAgZnVuY3Rpb25fYnVpbGRlcjo6YWRkX3VuaXF1ZV9mdW5jdGlvbiAoY29u c3QgZnVuY3Rpb25faW5zdGFuY2UgJmluc3RhbmNlLAoKCgo+YXJndW1lbnRfdHlwZXMuYWRkcmVz cyAoKSk7CgoKCj7CoMKgIHRyZWUgYXR0cnMgPSBnZXRfYXR0cmlidXRlcyAoaW5zdGFuY2UpOwoK Cgo+wqDCoCByZWdpc3RlcmVkX2Z1bmN0aW9uICZyZm4KCgoKPi3CoMKgwqAgPSBhZGRfZnVuY3Rp b24gKGluc3RhbmNlLCBuYW1lLCBmbnR5cGUsIGF0dHJzLCBmYWxzZSk7CgoKCj4rwqDCoMKgID0g YWRkX2Z1bmN0aW9uIChpbnN0YW5jZSwgbmFtZSwgZm50eXBlLCBhdHRycywgZmFsc2UsIG92ZXJs b2FkX25hbWUsCgoKCj4rwqDCoMKgwqAgYXJndW1lbnRfdHlwZXMuY29weSAoKSk7CgoKCj7CoMKg IC8qIEVudGVyIHRoZSBmdW5jdGlvbiBpbnRvIHRoZSBoYXNoIHRhYmxlLsKgICovCgoKCj7CoMKg IGhhc2h2YWxfdCBoYXNoID0gaW5zdGFuY2UuaGFzaCAoKTsKCgoKPkBAIC0zNDMxLDE5ICszNDgx LDQ1IEBAIGZ1bmN0aW9uX2J1aWxkZXI6OmFkZF91bmlxdWVfZnVuY3Rpb24gKGNvbnN0IGZ1bmN0 aW9uX2luc3RhbmNlICZpbnN0YW5jZSwKCgoKPsKgwqAgZ2NjX2Fzc2VydCAoISpyZm5fc2xvdCk7 CgoKCj7CoMKgICpyZm5fc2xvdCA9ICZyZm47CgoKCj4twqAgLyogQWxzbyBhZGQgdGhlIGZ1bmN0 aW9uIHVuZGVyIGl0cyBvdmVybG9hZGVkIGFsaWFzLCBpZiB3ZSB3YW50CgoKCj4twqDCoMKgwqAg YSBzZXBhcmF0ZSBkZWNsIGZvciBlYWNoIGluc3RhbmNlIG9mIGFuIG92ZXJsb2FkZWQgZnVuY3Rp b24uwqAgKi8KCgoKPi3CoCBjaGFyICpvdmVybG9hZF9uYW1lID0gc2hhcGUtPmdldF9uYW1lICgq dGhpcywgaW5zdGFuY2UsIHRydWUpOwoKCgo+wqDCoCBpZiAob3ZlcmxvYWRfbmFtZSkKCgoKPsKg wqDCoMKgIHsKCgoKPsKgwqDCoMKgwqDCoCAvKiBBdHRyaWJ1dGUgbGlzdHMgc2hvdWxkbid0IGJl IHNoYXJlZC7CoCAqLwoKCgo+wqDCoMKgwqDCoMKgIHRyZWUgYXR0cnMgPSBnZXRfYXR0cmlidXRl cyAoaW5zdGFuY2UpOwoKCgo+wqDCoMKgwqDCoMKgIGJvb2wgcGxhY2Vob2xkZXJfcCA9ICFtX2Rp cmVjdF9vdmVybG9hZHM7CgoKCj4twqDCoMKgwqDCoCBhZGRfZnVuY3Rpb24gKGluc3RhbmNlLCBv dmVybG9hZF9uYW1lLCBmbnR5cGUsIGF0dHJzLCBwbGFjZWhvbGRlcl9wKTsKCgoKPivCoMKgwqDC oMKgIGFkZF9mdW5jdGlvbiAoaW5zdGFuY2UsIG92ZXJsb2FkX25hbWUsIGZudHlwZSwgYXR0cnMs IHBsYWNlaG9sZGVyX3AsIE5VTEwsCgoKCj4rwqDCoMKgwqAgdk5VTEwpOwoKCgo+KwoKCgo+K8Kg wqDCoMKgwqAgLyogRW50ZXIgdGhlIGZ1bmN0aW9uIGludG8gdGhlIG5vbi1vdmVybG9hZGVkIGhh c2ggdGFibGUuwqAgKi8KCgoKPivCoMKgwqDCoMKgIGhhc2ggPSByZm4ub3ZlcmxvYWRlZF9oYXNo ICgpOwoKCgo+K8KgwqDCoMKgwqAgcmZuX3Nsb3QgPSBub25fb3ZlcmxvYWRlZF9mdW5jdGlvbl90 YWJsZS0+ZmluZF9zbG90X3dpdGhfaGFzaCAoJnJmbiwgaGFzaCwKCgoKPivCoMKgwqDCoMKgIElO U0VSVCk7CgoKCj4rwqDCoMKgwqDCoCBnY2NfYXNzZXJ0ICghKnJmbl9zbG90KTsKCgoKPivCoMKg wqDCoMKgICpyZm5fc2xvdCA9ICZyZm47CgoKCj7CoMKgwqDCoCB9CgoKCj7CoMKgIG9ic3RhY2tf ZnJlZSAoJm1fc3RyaW5nX29ic3RhY2ssIG5hbWUpOwoKCgo+fQoKCgo+Ky8qIEFkZCBvdmVybG9h ZGVkIGZ1bmN0aW9uIGZvciBnY2MuICovCgoKCj4rdm9pZAoKCgo+K2Z1bmN0aW9uX2J1aWxkZXI6 OmFkZF9vdmVybG9hZGVkX2Z1bmN0aW9uIChjb25zdCBmdW5jdGlvbl9pbnN0YW5jZSAmaW5zdGFu Y2UsCgoKCj4rwqDCoMKgIGNvbnN0IGZ1bmN0aW9uX3NoYXBlICpzaGFwZSkKCgoKPit7CgoKCj4r wqAgaWYgKCFjaGVja19yZXF1aXJlZF9leHRlbnNpb25zIChpbnN0YW5jZSkpCgoKCj4rwqDCoMKg IHJldHVybjsKCgoKPisKCgoKPivCoCBjaGFyICpuYW1lID0gc2hhcGUtPmdldF9uYW1lICgqdGhp cywgaW5zdGFuY2UsIHRydWUpOwoKCgo+KwoKCgo+K8KgIGlmIChuYW1lKQoKCgo+K8KgwqDCoCB7 CgoKCj4rwqDCoMKgwqDCoCAvKiBUbyBhdm9pZCBBUEkgY29uZmxpY3RpbmcsIHRha2Ugdm9pZCBy ZXR1cm4gdHlwZSBhbmQgdm9pZCBhcmd1bWVudAoKCgo+KyBmb3IgdGhlIG92ZXJsb2FkZWQgZnVu Y3Rpb24uwqAgKi8KCgoKPivCoMKgwqDCoMKgIHRyZWUgZm50eXBlID0gYnVpbGRfZnVuY3Rpb25f dHlwZSAodm9pZF90eXBlX25vZGUsIHZvaWRfbGlzdF9ub2RlKTsKCgoKPivCoMKgwqDCoMKgIGFk ZF9mdW5jdGlvbiAoaW5zdGFuY2UsIG5hbWUsIGZudHlwZSwgTlVMTF9UUkVFLCBtX2RpcmVjdF9v dmVybG9hZHMsIG5hbWUsCgoKCj4rwqDCoMKgwqAgdk5VTEwsIHRydWUpOwoKCgo+K8KgwqDCoMKg wqAgb2JzdGFja19mcmVlICgmbV9zdHJpbmdfb2JzdGFjaywgbmFtZSk7CgoKCj4rwqDCoMKgIH0K CgoKPit9CgoKCj4rCgoKCj5mdW5jdGlvbl9jYWxsX2luZm86OmZ1bmN0aW9uX2NhbGxfaW5mbyAo bG9jYXRpb25fdCBsb2NhdGlvbl9pbiwKCgoKPmNvbnN0IGZ1bmN0aW9uX2luc3RhbmNlICZpbnN0 YW5jZV9pbiwKCgoKPnRyZWUgZm5kZWNsX2luKQoKCgo+QEAgLTM5OTEsNiArNDA2NywxNTUgQEAg cmVnaXN0ZXJlZF9mdW5jdGlvbl9oYXNoZXI6OmVxdWFsICh2YWx1ZV90eXBlIHZhbHVlLCBjb25z dCBjb21wYXJlX3R5cGUgJmtleSkKCgoKPsKgwqAgcmV0dXJuIHZhbHVlLT5pbnN0YW5jZSA9PSBr ZXk7CgoKCj59CgoKCj4raGFzaHZhbF90CgoKCj4rcmVnaXN0ZXJlZF9mdW5jdGlvbjo6b3Zlcmxv YWRlZF9oYXNoICgpIGNvbnN0CgoKCj4rewoKCgo+K8KgIGluY2hhc2g6Omhhc2ggaDsKCgoKPivC oCB0cmVlIHR5cGU7CgoKCj4rwqAgdW5zaWduZWQgaW50IHVuc2lnbmVkX3AsIG1vZGVfcDsKCgoK PivCoCBoLmFkZCAob3ZlcmxvYWRfbmFtZSwgc3RybGVuIChvdmVybG9hZF9uYW1lKSk7CgoKCj4r wqAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhcmd1bWVudF90eXBlcy5sZW5ndGggKCk7 IGkrKykKCgoKPivCoMKgwqAgewoKCgo+K8KgwqDCoMKgwqAgdHlwZSA9IGFyZ3VtZW50X3R5cGVz W2ldOwoKCgo+K8KgwqDCoMKgwqAgdW5zaWduZWRfcCA9IFBPSU5URVJfVFlQRV9QICh0eXBlKSA/ IFRZUEVfVU5TSUdORUQgKFRSRUVfVFlQRSAodHlwZSkpCgoKCj4rIDogVFlQRV9VTlNJR05FRCAo dHlwZSk7CgoKCj4rwqDCoMKgwqDCoCBtb2RlX3AgPSBQT0lOVEVSX1RZUEVfUCAodHlwZSkgPyBU WVBFX01PREUgKFRSRUVfVFlQRSAodHlwZSkpCgoKCj4rwqDCoMKgwqDCoCA6IFRZUEVfTU9ERSAo dHlwZSk7CgoKCj4rwqDCoMKgwqDCoCBoLmFkZF9pbnQgKHVuc2lnbmVkX3ApOwoKCgo+K8KgwqDC oMKgwqAgaC5hZGRfaW50IChtb2RlX3ApOwoKCgo+K8KgwqDCoCB9CgoKCj4rCgoKCj4rwqAgcmV0 dXJuIGguZW5kICgpOwoKCgo+K30KCgoKPisKCgoKPitzdGF0aWMgYm9vbAoKCgo+K21heWJlX3Jl cXVpcmVfZnJtX3AgKGZ1bmN0aW9uX2luc3RhbmNlICZpbnN0YW5jZSkKCgoKPit7CgoKCj4rwqAg cmV0dXJuIGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmd3JlZHVzdW0KCgoKPisgfHwgaW5zdGFu Y2UuYmFzZSA9PSBiYXNlczo6dmZ3cmVkb3N1bSB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2 ZmFkZAoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZndzdWIgfHwgaW5zdGFuY2Uu YmFzZSA9PSBiYXNlczo6dmZ3bm1zYWMKCgoKPisgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6 dmZ3bm1hY2MgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3bXVsCgoKCj4rIHx8IGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZmY3Z0X3ggfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZj dnRfZgoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZmN2dF94dSB8fCBpbnN0YW5j ZS5iYXNlID09IGJhc2VzOjp2Zndtc2FjCgoKCj4rIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6 OnZmd21hY2MgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3Y3Z0X3gKCgoKPisgfHwgaW5z dGFuY2UuYmFzZSA9PSBiYXNlczo6dmZ3YWRkIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZm c3ViCgoKCj4rIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmc3FydCB8fCBpbnN0YW5jZS5i YXNlID09IGJhc2VzOjp2ZnJlZHVzdW0KCgoKPisgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6 dmZyc3ViIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmcmVkb3N1bQoKCgo+KyB8fCBpbnN0 YW5jZS5iYXNlID09IGJhc2VzOjp2ZnJlYzcgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZy ZGl2CgoKCj4rIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbm1zdWIgfHwgaW5zdGFuY2Uu YmFzZSA9PSBiYXNlczo6dmZubXNhYwoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2 Zm5tYWRkIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbm1hY2MKCgoKPisgfHwgaW5zdGFu Y2UuYmFzZSA9PSBiYXNlczo6dmZuY3Z0X2YgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZu Y3Z0X3gKCgoKPisgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dmZuY3Z0X3h1IHx8IGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZmbXVsCgoKCj4rIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6 OnZmbXN1YiB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2Zm1zYWMKCgoKPisgfHwgaW5zdGFu Y2UuYmFzZSA9PSBiYXNlczo6dmZtYWRkIHx8IGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZmbWFj YwoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2ZmRpdiB8fCBpbnN0YW5jZS5iYXNl ID09IGJhc2VzOjp2ZndjdnRfeHU7CgoKCj4rfQoKCgo+KwoKCgo+K3N0YXRpYyBib29sCgoKCj4r bWF5YmVfcmVxdWlyZV92eHJtX3AgKGZ1bmN0aW9uX2luc3RhbmNlICZpbnN0YW5jZSkKCgoKPit7 CgoKCj4rwqAgcmV0dXJuIGluc3RhbmNlLmJhc2UgPT0gYmFzZXM6OnZhYWRkIHx8IGluc3RhbmNl LmJhc2UgPT0gYmFzZXM6OnZhYWRkdQoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2 YXN1YiB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2YXN1YnUKCgoKPisgfHwgaW5zdGFuY2Uu YmFzZSA9PSBiYXNlczo6dnNzcmwgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dnNzcmEKCgoK PisgfHwgaW5zdGFuY2UuYmFzZSA9PSBiYXNlczo6dnNtdWwgfHwgaW5zdGFuY2UuYmFzZSA9PSBi YXNlczo6dm5jbGlwdQoKCgo+KyB8fCBpbnN0YW5jZS5iYXNlID09IGJhc2VzOjp2bmNsaXA7CgoK Cj4rfQoKCgo+KwoKCgo+K2Jvb2wKCgoKPitoYXNfdnhybV9vcl9mcm1fcCAoZnVuY3Rpb25faW5z dGFuY2UgJmluc3RhbmNlLCBjb25zdCB2ZWM8dHJlZSwgdmFfZ2M+ICZhcmdsaXN0KQoKCgo+K3sK CgoKPivCoCBpZiAobWF5YmVfcmVxdWlyZV92eHJtX3AgKGluc3RhbmNlKQoKCgo+K8KgwqDCoMKg wqAgfHwgKG1heWJlX3JlcXVpcmVfZnJtX3AgKGluc3RhbmNlKQoKCgo+K8KgwqAgJiYgKFRSRUVf Q09ERSAoVFJFRV9UWVBFIChhcmdsaXN0W2FyZ2xpc3QubGVuZ3RoICgpIC0gMl0pKQoKCgo+K8Kg wqDCoMKgwqDCoCA9PSBJTlRFR0VSX1RZUEUpKSkKCgoKPivCoMKgwqAgcmV0dXJuIHRydWU7CgoK Cj4rwqAgcmV0dXJuIGZhbHNlOwoKCgo+K30KCgoKPisKCgoKPitoYXNodmFsX3QKCgoKPityZWdp c3RlcmVkX2Z1bmN0aW9uOjpvdmVybG9hZGVkX2hhc2ggKGNvbnN0IHZlYzx0cmVlLCB2YV9nYz4g JmFyZ2xpc3QpCgoKCj4rewoKCgo+K8KgIGFyZ3VtZW50X3R5cGVzID0gdk5VTEw7CgoKCj4rwqAg dW5zaWduZWQgaW50IGxlbiA9IGFyZ2xpc3QubGVuZ3RoICgpOwoKCgo+KwoKCgo+K8KgIGZvciAo dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCgoKCj4rwqDCoMKgIHsKCgoKPivCoMKg wqDCoMKgIC8qIHZpbnQ4bTFfdCBfX3Jpc2N2X3ZnZXRfaThtMSh2aW50OG0yX3Qgc3JjLCBzaXpl X3QgaW5kZXgpOwoKCgo+K8KgwqDCoMKgwqAgV2hlbiB0aGUgdXNlciBjYWxscyB2Z2V0IGludHJp bnNpYywgdGhlIF9fcmlzY3ZfdmdldF9pOG0xKHNyYywgMSkKCgoKPivCoMKgwqDCoMKgwqAgZm9y bSBpcyB1c2VkLiBUaGUgY29tcGlsZXIgcmVjb2duaXplcyB0aGF0IHRoZSBwYXJhbWV0ZXIgaW5k ZXggaXMgc2lnbmVkCgoKCj4rwqDCoMKgwqDCoMKgIGludCwgd2hpY2ggaXMgaW5jb25zaXN0ZW50 IHdpdGggc2l6ZV90LCBzbyB0aGUgaW5kZXggaXMgY29udmVydGVkIHRvCgoKCj4rwqDCoMKgwqDC oMKgIHNpemVfdCB0eXBlIGluIG9yZGVyIHRvIGdldCBjb3JyZWN0IGhhc2ggdmFsdWUuIHZpbnQ4 bTJfdAoKCgo+K8KgwqDCoMKgwqDCoCBfX3Jpc2N2X3ZzZXQodmludDhtMl90IGRlc3QsIHNpemVf dCBpbmRleCwgdmludDhtMV90IHZhbHVlKTsgVGhlIHJlYXNvbgoKCgo+K8KgwqDCoMKgwqDCoCBp cyB0aGUgc2FtZSBhcyBhYm92ZS4gKi8KCgoKPivCoMKgwqDCoMKgIGlmICgoaW5zdGFuY2UuYmFz ZSA9PSBiYXNlczo6dmdldCAmJiAoaSA9PSAobGVuIC0gMSkpKQoKCgo+K8KgwqAgfHwgKGluc3Rh bmNlLmJhc2UgPT0gYmFzZXM6OnZzZXQgJiYgKGkgPT0gKGxlbiAtIDIpKSkpCgoKCj4rIGFyZ3Vt ZW50X3R5cGVzLnNhZmVfcHVzaCAoc2l6ZV90eXBlX25vZGUpOwoKCgo+K8KgwqDCoMKgwqAgLyog VmVjdG9yIGZpeGVkLXBvaW50IGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zIHJlcXVpcmluZyBhcmd1 bWVudCB2eHJtLgoKCgo+K8KgwqDCoMKgwqAgRm9yIGV4YW1wbGU6IHZ1aW50MzJtNF90IF9fcmlz Y3ZfdmFhZGR1KHZ1aW50MzJtNF90IHZzMiwKCgoKPivCoMKgwqDCoMKgIHZ1aW50MzJtNF90IHZz MSwgdW5zaWduZWQgaW50IHZ4cm0sIHNpemVfdCB2bCk7IFRoZSB1c2VyIGNhbGxzIHZhYWRkdQoK Cgo+K8KgwqDCoMKgwqAgaW50cmluc2ljIGluIHRoZSBmb3JtIG9mIF9fcmlzY3ZfdmFhZGR1KHZz MiwgdnMxLCAyLCB2bCkuIFRoZSBjb21waWxlcgoKCgo+K8KgwqDCoMKgwqAgcmVjb2duaXplcyB0 aGF0IHRoZSBwYXJhbWV0ZXIgdnhybSBpcyBhIHNpZ25lZCBpbnQsIHdoaWNoIGlzIGluY29uc2lz dGVudAoKCgo+K8KgwqDCoMKgwqAgd2l0aCB0aGUgcGFyYW1ldGVyIHVuc2lnbmVkIGludCB2eHJt IGRlY2xhcmVkIGJ5IGludHJpbnNpYywgc28gdGhlCgoKCj4rwqDCoMKgwqDCoCBwYXJhbWV0ZXIg dnhybSBpcyBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgaW50IHR5cGUgaW4gb3JkZXIgdG8gZ2V0 CgoKCj4rwqDCoMKgwqDCoCBjb3JyZWN0IGhhc2ggdmFsdWUuCgoKCj4rCgoKCj4rwqDCoMKgwqDC oCBWZWN0b3IgRmxvYXRpbmctUG9pbnQgSW5zdHJ1Y3Rpb25zIHJlcXVpcmluZyBhcmd1bWVudCBm cm0uCgoKCj4rwqDCoMKgwqDCoCBERUZfUlZWX0ZVTkNUSU9OICh2ZmFkZCwgYWx1LCBmdWxsX3By ZWRzLCBmX3Z2dl9vcHMpCgoKCj4rwqDCoMKgwqDCoCBERUZfUlZWX0ZVTkNUSU9OICh2ZmFkZF9m cm0sIGFsdV9mcm0sIGZ1bGxfcHJlZHMsIGZfdnZ2X29wcykKCgoKPivCoMKgwqDCoMKgIFRha2lu ZyB2ZmFkZCBhcyBhbiBleGFtcGxlLCB0aGVvcmV0aWNhbGx5IHdlIGNhbiBhZGQgYmFzZSBvciBz aGFwZSB0byB0aGUKCgoKPivCoMKgwqDCoMKgIGhhc2ggdmFsdWUgdG8gZGlzdGluZ3Vpc2ggd2hl dGhlciB0aGUgZnJtIHBhcmFtZXRlciBpcyByZXF1aXJlZC4KCgoKPivCoMKgwqDCoMKgIHZmbG9h dDMybTFfdCBfX3Jpc2N2X3ZmYWRkKHZmbG9hdDMybTFfdCB2czIsIGZsb2F0MzJfdCByczEsIHNp emVfdCB2bCk7CgoKCj4rwqDCoMKgwqDCoCB2ZmxvYXQzMm0xX3QgX19yaXNjdl92ZmFkZCh2Zmxv YXQzMm0xX3QgdnMyLCB2ZmxvYXQzMm0xX3QgdnMxLCB1bnNpZ25lZCBpbnQKCgoKPivCoMKgwqDC oMKgIGZybSwgc2l6ZV90IHZsKTsKCgoKPisKCgoKPivCoMKgwqDCoCBIb3dldmVyLCB0aGUgY3Vy cmVudCByZWdpc3RyYXRpb24gbWVjaGFuaXNtIG9mIG92ZXJsb2FkZWQgaW50aW5zaWMgZm9yIGdj YwoKCgo+K8KgwqDCoMKgwqAgbGltaXRzIHRoZSBpbnRyaW5zaWMgb2J0YWluZWQgYnkgZW50ZXJp bmcgdGhlIGhvb2sgdG8gYWx3YXlzIGJlIHZmYWRkLCBub3QKCgoKPivCoMKgwqDCoMKgIHZmYWRk X2ZybS4gVGhlcmVmb3JlLCB0aGUgY29ycmVjdCBoYXNoIHZhbHVlIGNhbm5vdCBiZSBvYnRhaW5l ZCB0aHJvdWdoIHRoZQoKCgo+K8KgwqDCoMKgwqAgcGFyYW1ldGVyIGxpc3QgYW5kIG92ZXJsb2Fk IG5hbWUsIGJhc2Ugb3Igc2hhcGUuCgoKCj4rwqDCoMKgwqDCoCArLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKCj4rwqDCoMKgwqDCoCB8 IGluZGV4wqAgfCBuYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHwga2luZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwKCgoKPivCoMKgwqDCoMKgICstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgoK PivCoMKgwqDCoMKgIHwgMTI0NzMzIHwgX19yaXNjdl92ZmFkZMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IE92ZXJsb2FkZWTCoMKgwqDCoMKgwqDCoCB8IDwtIEhvb2sgZnVuIGNvZGUKCgoKPivC oMKgwqDCoMKgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLSsKCgoKPivCoMKgwqDCoMKgIHwgMTI0NzM1IHzCoCBfX3Jpc2N2X3ZmYWRkX3Z2 X2YzMm0xwqDCoCB8IE5vbi1vdmVybG9hZGVkwqDCoMKgIHwKCgoKPivCoMKgwqDCoMKgICstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgoK PivCoMKgwqDCoMKgIHwgMTI0NzM3IHwgX19yaXNjdl92ZmFkZMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IFBsYWNlaG9sZGVywqDCoMKgwqDCoMKgIHwKCgoKPivCoMKgwqDCoMKgICstLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgoKPivC oMKgwqDCoMKgIHwgLi4uwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHwKCgoKPivCoMKgwqDCoMKgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgoKPivCoMKgwqDCoMKgIHwgLi4uwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwKCgoKPivCoMKgwqDCoMKgICstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgoK PivCoMKgwqDCoMKgIHwgMTI1NzM5IHwgX19yaXNjdl92ZmFkZMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IE92ZXJsb2FkZWTCoMKgwqDCoMKgwqDCoCB8CgoKCj4rwqDCoMKgwqDCoCArLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKCj4r wqDCoMKgwqDCoCB8IDEyNTc0MSB8IF9fcmlzY3ZfdmZhZGRfdnZfZjMybTFfcm0gfCBOb24tb3Zl cmxvYWRlZMKgwqDCoCB8CgoKCj4rwqDCoMKgwqDCoCArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKCj4rwqDCoMKgwqDCoCB8IDEyNTc0 MyB8IF9fcmlzY3ZfdmZhZGTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCBQbGFjZWhvbGRlcsKg wqDCoMKgwqDCoCB8CgoKCj4rwqDCoMKgwqDCoCArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKCj4rCgoKCj4rwqDCoMKgwqAgVGhlcmVm b3JlLCB0aGUgaGFzaCB2YWx1ZSBjYW5ub3QgYmUgYWRkZWQgd2l0aCBiYXNlIG9yIHNoYXBlLCBh bmQgbmVlZHMKCgoKPivCoMKgwqDCoMKgIHRvIGJlIGRpc3Rpbmd1aXNoZWQgYnkgd2hldGhlciB0 aGUgcGVudWx0aW1hdGUgcGFyYW1ldGVyIGlzIElOVEVHRVJfVFlQRS4gKi8KCgoKPivCoMKgwqDC oMKgIGVsc2UgaWYgKGhhc192eHJtX29yX2ZybV9wIChpbnN0YW5jZSwgYXJnbGlzdCkgJiYgKGkg PT0gKGxlbiAtIDIpKSkKCgoKPisgYXJndW1lbnRfdHlwZXMuc2FmZV9wdXNoICh1bnNpZ25lZF90 eXBlX25vZGUpOwoKCgo+K8KgwqDCoMKgwqAgZWxzZQoKCgo+KyBhcmd1bWVudF90eXBlcy5zYWZl X3B1c2ggKFRSRUVfVFlQRSAoYXJnbGlzdFtpXSkpOwoKCgo+K8KgwqDCoCB9CgoKCj4rwqAgcmV0 dXJuIG92ZXJsb2FkZWRfaGFzaCAoKTsKCgoKPit9CgoKCj4rCgoKCj4raW5saW5lIGhhc2h2YWxf dAoKCgo+K25vbl9vdmVybG9hZGVkX3JlZ2lzdGVyZWRfZnVuY3Rpb25faGFzaGVyOjpoYXNoICh2 YWx1ZV90eXBlIHZhbHVlKQoKCgo+K3sKCgoKPivCoCByZXR1cm4gdmFsdWUtPm92ZXJsb2FkZWRf aGFzaCAoKTsKCgoKPit9CgoKCj4rCgoKCj4raW5saW5lIGJvb2wKCgoKPitub25fb3ZlcmxvYWRl ZF9yZWdpc3RlcmVkX2Z1bmN0aW9uX2hhc2hlcjo6ZXF1YWwgKHZhbHVlX3R5cGUgdmFsdWUsCgoK Cj4rwqDCoCBjb25zdCBjb21wYXJlX3R5cGUgJmtleSkKCgoKPit7CgoKCj4rwqAgcmV0dXJuICgo c3RyY21wICh2YWx1ZS0+b3ZlcmxvYWRfbmFtZSwga2V5LT5vdmVybG9hZF9uYW1lKSA9PSAwKQoK Cgo+K8KgwqAgJiYgdmFsdWUtPm92ZXJsb2FkZWRfaGFzaCAoKSA9PSBrZXktPm92ZXJsb2FkZWRf aGFzaCAoKSk7CgoKCj4rfQoKCgo+KwoKCgo+LyogSWYgVFlQRSBpcyBhIGJ1aWx0LWluIHR5cGUg ZGVmaW5lZCBieSB0aGUgUlZWIEFCSSwgcmV0dXJuIHRoZSBtYW5nbGVkIG5hbWUsCgoKCj7CoMKg wqAgb3RoZXJ3aXNlIHJldHVybiBOVUxMLsKgICovCgoKCj5jb25zdCBjaGFyICoKCgoKPkBAIC00 MTM5LDcgKzQzNjQsNyBAQCByZWdpc3Rlcl9mcm0gKCkKCgoKPnZvaWQKCgoKPmhhbmRsZV9wcmFn bWFfdmVjdG9yICgpCgoKCj57CgoKCj4twqAgaWYgKGZ1bmN0aW9uX3RhYmxlKQoKCgo+K8KgIGlm IChmdW5jdGlvbl90YWJsZSB8fCBub25fb3ZlcmxvYWRlZF9mdW5jdGlvbl90YWJsZSkKCgoKPsKg wqDCoMKgIHsKCgoKPsKgwqDCoMKgwqDCoCBlcnJvciAoImR1cGxpY2F0ZSBkZWZpbml0aW9uIG9m ICVxcyIsICJyaXNjdl92ZWN0b3IuaCIpOwoKCgo+wqDCoMKgwqDCoMKgIHJldHVybjsKCgoKPkBA IC00MTU2LDYgKzQzODEsOCBAQCBoYW5kbGVfcHJhZ21hX3ZlY3RvciAoKQoKCgo+wqDCoCAvKiBE ZWZpbmUgdGhlIGZ1bmN0aW9ucy7CoCAqLwoKCgo+wqDCoCBmdW5jdGlvbl90YWJsZSA9IG5ldyBo YXNoX3RhYmxlPHJlZ2lzdGVyZWRfZnVuY3Rpb25faGFzaGVyPiAoMTAyMyk7CgoKCj4rwqAgbm9u X292ZXJsb2FkZWRfZnVuY3Rpb25fdGFibGUKCgoKPivCoMKgwqAgPSBuZXcgaGFzaF90YWJsZTxu b25fb3ZlcmxvYWRlZF9yZWdpc3RlcmVkX2Z1bmN0aW9uX2hhc2hlcj4gKDEwMjMpOwoKCgo+wqDC oCBmdW5jdGlvbl9idWlsZGVyIGJ1aWxkZXI7CgoKCj7CoMKgIGZvciAodW5zaWduZWQgaW50IGkg PSAwOyBpIDwgQVJSQVlfU0laRSAoZnVuY3Rpb25fZ3JvdXBzKTsgKytpKQoKCgo+wqDCoMKgwqAg YnVpbGRlci5yZWdpc3Rlcl9mdW5jdGlvbl9ncm91cCAoZnVuY3Rpb25fZ3JvdXBzW2ldKTsKCgoK PkBAIC00MjA4LDYgKzQ0MzUsMjQgQEAgY2hlY2tfYnVpbHRpbl9jYWxsIChsb2NhdGlvbl90IGxv Y2F0aW9uLCB2ZWM8bG9jYXRpb25fdD4sIHVuc2lnbmVkIGludCBjb2RlLAoKCgo+wqDCoCBUUkVF X1RZUEUgKHJmbi5kZWNsKSwgbmFyZ3MsIGFyZ3MpLmNoZWNrICgpOwoKCgo+fQoKCgo+K3RyZWUK CgoKPityZXNvbHZlX292ZXJsb2FkZWRfYnVpbHRpbiAodW5zaWduZWQgaW50IGNvZGUsIHZlYzx0 cmVlLCB2YV9nYz4gKmFyZ2xpc3QpCgoKCj4rewoKCgo+K8KgIGlmIChjb2RlID49IHZlY19zYWZl X2xlbmd0aCAocmVnaXN0ZXJlZF9mdW5jdGlvbnMpKQoKCgo+K8KgwqDCoCByZXR1cm4gTlVMTF9U UkVFOwoKCgo+KwoKCgo+K8KgIHJlZ2lzdGVyZWRfZnVuY3Rpb24gKnJmdW4gPSAoKnJlZ2lzdGVy ZWRfZnVuY3Rpb25zKVtjb2RlXTsKCgoKPisKCgoKPivCoCBpZiAoIXJmdW4gfHwgIXJmdW4tPm92 ZXJsb2FkZWRfcCkKCgoKPivCoMKgwqAgcmV0dXJuIE5VTExfVFJFRTsKCgoKPisKCgoKPivCoCBo YXNodmFsX3QgaGFzaCA9IHJmdW4tPm92ZXJsb2FkZWRfaGFzaCAoKmFyZ2xpc3QpOwoKCgo+K8Kg IHJlZ2lzdGVyZWRfZnVuY3Rpb24gKnJmbgoKCgo+K8KgwqDCoCA9IG5vbl9vdmVybG9hZGVkX2Z1 bmN0aW9uX3RhYmxlLT5maW5kX3dpdGhfaGFzaCAocmZ1biwgaGFzaCk7CgoKCj4rwqAgZ2NjX2Fz c2VydCAocmZuKTsKCgoKPivCoCByZXR1cm4gcmZuLT5kZWNsOwoKCgo+K30KCgoKPisKCgoKPmZ1 bmN0aW9uX2luc3RhbmNlCgoKCj5nZXRfcmVhZF92bF9pbnN0YW5jZSAodm9pZCkKCgoKPnsKCgoK PmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXZlY3Rvci1idWlsdGlucy5oIGIv Z2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0b3ItYnVpbHRpbnMuaAoKCgo+aW5kZXggZTM1OGE4 ZTRkOTEuLjRmNDFlODgwYWMzIDEwMDY0NAoKCgo+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNj di12ZWN0b3ItYnVpbHRpbnMuaAoKCgo+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi12ZWN0 b3ItYnVpbHRpbnMuaAoKCgo+QEAgLTI3Nyw2ICsyNzcsOCBAQCBwdWJsaWM6CgoKCj7CoMKgIHZv aWQgYXBwbHlfcHJlZGljYXRpb24gKGNvbnN0IGZ1bmN0aW9uX2luc3RhbmNlICYsIHRyZWUsIHZl Yzx0cmVlPiAmKSBjb25zdDsKCgoKPsKgwqAgdm9pZCBhZGRfdW5pcXVlX2Z1bmN0aW9uIChjb25z dCBmdW5jdGlvbl9pbnN0YW5jZSAmLCBjb25zdCBmdW5jdGlvbl9zaGFwZSAqLAoKCgo+wqDCoMKg IHRyZWUsIHZlYzx0cmVlPiAmKTsKCgoKPivCoCB2b2lkIGFkZF9vdmVybG9hZGVkX2Z1bmN0aW9u IChjb25zdCBmdW5jdGlvbl9pbnN0YW5jZSAmLAoKCgo+KyBjb25zdCBmdW5jdGlvbl9zaGFwZSAq KTsKCgoKPsKgwqAgdm9pZCByZWdpc3Rlcl9mdW5jdGlvbl9ncm91cCAoY29uc3QgZnVuY3Rpb25f Z3JvdXBfaW5mbyAmKTsKCgoKPsKgwqAgdm9pZCBhcHBlbmRfbmFtZSAoY29uc3QgY2hhciAqKTsK CgoKPsKgwqAgdm9pZCBhcHBlbmRfYmFzZV9uYW1lIChjb25zdCBjaGFyICopOwoKCgo+QEAgLTI4 OCw3ICsyOTAsOCBAQCBwcml2YXRlOgoKCgo+wqDCoCB0cmVlIGdldF9hdHRyaWJ1dGVzIChjb25z dCBmdW5jdGlvbl9pbnN0YW5jZSAmKTsKCgoKPsKgwqAgcmVnaXN0ZXJlZF9mdW5jdGlvbiAmYWRk X2Z1bmN0aW9uIChjb25zdCBmdW5jdGlvbl9pbnN0YW5jZSAmLCBjb25zdCBjaGFyICosCgoKCj4t wqDCoMKgwqDCoCB0cmVlLCB0cmVlLCBib29sKTsKCgoKPivCoMKgwqDCoMKgIHRyZWUsIHRyZWUs IGJvb2wsIGNvbnN0IGNoYXIgKiwKCgoKPivCoMKgwqDCoMKgIGNvbnN0IHZlYzx0cmVlPiAmLCBi b29sKTsKCgoKPsKgwqAgLyogVHJ1ZSBpZiB3ZSBzaG91bGQgY3JlYXRlIGEgc2VwYXJhdGUgZGVj bCBmb3IgZWFjaCBpbnN0YW5jZSBvZiBhbgoKCgo+wqDCoMKgwqDCoCBvdmVybG9hZGVkIGZ1bmN0 aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIGZ1bmN0aW9uX2J1aWxkZXIuwqAgKi8KCgoKPmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9y djMyX3ZhZGQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVy bG9hZGVkX3J2MzJfdmFkZC5jCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5kZXggMDAw MDAwMDAwMDAuLjVmMTBhYTliZjM1CgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjMyX3ZhZGQuYwoK Cgo+QEAgLTAsMCArMSwxMiBAQAoKCgo+Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCgoKCj4rLyog eyBkZy1vcHRpb25zICItbWFyY2g9cnYzMmdjdl96dmZoIC1tYWJpPWlscDMyIC1PMyAtV25vLXBz YWJpIiB9ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdmFkZC5oIgoKCgo+KwoK Cgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8s XHMqW2F4XVswLTldKyxccyplOCxccyptMSxccyp0YSxccyptYX0gNCB9IH0gKi8KCgoKPisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccytbYXhdWzAtOV0rLFxz Knplcm8sXHMqZTgsXHMqbTEsXHMqdGEsXHMqbWF9IDggfSB9ICovCgoKCj4rLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMremVybyxccypbYXhdWzAtOV0rLFxz KmU4LFxzKm0xLFxzKnR1LFxzKm1hfSA0IH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxccyplOCxccypt MSxccyp0YSxccyptdX0gMiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTgsXHMqbTEsXHMqdHUs XHMqbXV9IDIgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHt2YWRkXC52dlxzK3ZbMC05XSssXHMqdlswLTldKyxccyp2WzAtOV0rfSA2IH0gfSAqLwoKCgo+ Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dmFkZFwudnhccyt2WzAtOV0r LFxzKnZbMC05XSssXHMqW2F4XVswLTldK30gNiB9IH0gKi8KCgoKPmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjMyX3ZmYWRk LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9y djMyX3ZmYWRkLmMKCgoKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0CgoKCj5pbmRleCAwMDAwMDAwMDAw MC4uYmVhMzVhMTNhN2IKCgoKPi0tLSAvZGV2L251bGwKCgoKPisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmZhZGQuYwoKCgo+QEAg LTAsMCArMSwxMiBAQAoKCgo+Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCgoKCj4rLyogeyBkZy1v cHRpb25zICItbWFyY2g9cnYzMmdjdl96dmZoIC1tYWJpPWlscDMyIC1PMyAtV25vLXBzYWJpIiB9 ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdmZhZGQuaCIKCgoKPisKCgoKPisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccytbYXhdWzAtOV0r LFxzKnplcm8sXHMqZTE2LFxzKm1mNCxccyp0YSxccyptYX0gMTYgfSB9ICovCgoKCj4rLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMremVybyxccypbYXhdWzAt OV0rLFxzKmUxNixccyptZjQsXHMqdGEsXHMqbWF9IDQgfSB9ICovCgoKCj4rLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMrW2F4XVswLTldKyxccyp6ZXJvLFxz KmU4LFxzKm1mOCxccyp0YSxccyptYX0gOCB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTE2LFxz Km1mNCxccyp0dSxccyptYX0gNCB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTE2LFxzKm1mNCxc cyp0dSxccyptdX0gMiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTE2LFxzKm1mNCxccyp0YSxc cyptdX0gMiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg e3ZmYWRkXC52dlxzK3ZbMC05XSssXHMqdlswLTldKyxccyp2WzAtOV0rfSAxMiB9IH0gKi8KCgoK PmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3Zl cmxvYWRlZF9ydjMyX3ZnZXRfdnNldC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2 L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92Z2V0X3ZzZXQuYwoKCgo+bmV3IGZpbGUgbW9kZSAx MDA2NDQKCgoKPmluZGV4IDAwMDAwMDAwMDAwLi42YjBiYTE0MmI5MAoKCgo+LS0tIC9kZXYvbnVs bAoKCgo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJs b2FkZWRfcnYzMl92Z2V0X3ZzZXQuYwoKCgo+QEAgLTAsMCArMSw3IEBACgoKCj4rLyogeyBkZy1k byBjb21waWxlIH0gKi8KCgoKPisvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjMyZ2N2X3p2Zmgg LW1hYmk9aWxwMzIgLU8zIC1Xbm8tcHNhYmkiIH0gKi8KCgoKPisKCgoKPisjaW5jbHVkZSAib3Zl cmxvYWRlZF92Z2V0X3ZzZXQuaCIKCgoKPisKCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMge3ZsWzAtOV0rcmVbMC05XStcLnZccyt2WzAtOV0rLFxzKjBcKFtheF1bMC05 XStcKX0gMTQgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHt2c1swLTldK3JcLnZccyt2WzAtOV0rLFxzKjBcKFtheF1bMC05XStcKX0gMTMgfSB9ICovCgoK Cj5kaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292 ZXJsb2FkZWRfcnYzMl92bG94c2VnMmVpMTYuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9y aXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2MzJfdmxveHNlZzJlaTE2LmMKCgoKPm5ldyBmaWxl IG1vZGUgMTAwNjQ0CgoKCj5pbmRleCAwMDAwMDAwMDAwMC4uYTIwZTRhM2JiNGYKCgoKPi0tLSAv ZGV2L251bGwKCgoKPisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFz ZS9vdmVybG9hZGVkX3J2MzJfdmxveHNlZzJlaTE2LmMKCgoKPkBAIC0wLDAgKzEsMTEgQEAKCgoK PisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwoKCgo+Ky8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPXJ2 MzJnY3ZfenZmaCAtbWFiaT1pbHAzMiAtTzMgLVduby1wc2FiaSIgfSAqLwoKCgo+KwoKCgo+KyNp bmNsdWRlICJvdmVybG9hZGVkX3Zsb3hzZWcyZWkxNi5oIgoKCgo+KwoKCgo+Ky8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxc cyplNjQsXHMqbTQsXHMqdGEsXHMqbWF9IDIgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMrW2F4XVswLTldKyxccyp6ZXJvLFxzKmU4LFxz Km1mMixccyp0YSxccyptYX0gNCB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTY0LFxzKm00LFxz KnR1LFxzKm1hfSAyIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxccyplNjQsXHMqbTQsXHMqdHUsXHMq bXV9IDEgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2 c2V0dmxpXHMremVybyxccypbYXhdWzAtOV0rLFxzKmU2NCxccyptNCxccyp0YSxccyptdX0gMSB9 IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3Zsb3hzZWcy ZWkxNlwudlxzK3ZbMC05XSssXHMqXChbYXhdWzAtOV0rXCksXHMqdlswLTldK30gNiB9IH0gKi8K CgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uv b3ZlcmxvYWRlZF9ydjMyX3Ztdi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2 di9iYXNlL292ZXJsb2FkZWRfcnYzMl92bXYuYwoKCgo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKCgoK PmluZGV4IDAwMDAwMDAwMDAwLi4yMzdiMzRkYmU5MQoKCgo+LS0tIC9kZXYvbnVsbAoKCgo+Kysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYz Ml92bXYuYwoKCgo+QEAgLTAsMCArMSwxMCBAQAoKCgo+Ky8qIHsgZGctZG8gY29tcGlsZSB9ICov CgoKCj4rLyogeyBkZy1vcHRpb25zICItbWFyY2g9cnYzMmdjdl96dmZoIC1tYWJpPWlscDMyIC1P MyAtV25vLXBzYWJpIiB9ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdm12Lmgi CgoKCj4rCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxp XHMremVybyxccypbYXhdWzAtOV0rLFxzKmU4LFxzKm0xLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoK Cgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8s XHMqW2F4XVswLTldKyxccyplOCxccyptMSxccyp0dSxccyptYX0gMiB9IH0gKi8KCgoKPisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1b MC05XSssXHMqZTE2LFxzKm0xLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxc cyplMTYsXHMqbTEsXHMqdHUsXHMqbWF9IDEgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0aXZsaVxzK3plcm8sXHMqMCxccyplOCxccyptMSxccyp0 YSxccyptYX0gMSB9IH0gKi8KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjMyX3ZyZWludGVycHJldC5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92cmVpbnRl cnByZXQuYwoKCgo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKCgoKPmluZGV4IDAwMDAwMDAwMDAwLi40 MmQ1MDU4OTI0NgoKCgo+LS0tIC9kZXYvbnVsbAoKCgo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnYzMl92cmVpbnRlcnByZXQuYwoKCgo+ QEAgLTAsMCArMSwxMCBAQAoKCgo+Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCgoKCj4rLyogeyBk Zy1vcHRpb25zICItbWFyY2g9cnYzMmdjdl96dmZoIC1tYWJpPWlscDMyIC1PMyAtV25vLXBzYWJp IiB9ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdnJlaW50ZXJwcmV0LmgiCgoK Cj4rCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMr W2F4XVswLTldKyxccyp6ZXJvLFxzKmU4LFxzKm00LFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+ Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05 XSssXHMqemVybyxccyplOCxccyptMixccyp0YSxccyptYX0gMSB9IH0gKi8KCgoKPisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccytbYXhdWzAtOV0rLFxzKnpl cm8sXHMqZTgsXHMqbWYyLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05XSssXHMqemVybyxccypl MTYsXHMqbWYyLFxzKnRhLFxzKm1hfSAyIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05XSssXHMqemVybyxccyplMzIsXHMq bWYyLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmFkZC5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92YWRkLmMK CgoKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0CgoKCj5pbmRleCAwMDAwMDAwMDAwMC4uYzQ1NTVlM2Y0 NzcKCgoKPi0tLSAvZGV2L251bGwKCgoKPisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9y aXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmFkZC5jCgoKCj5AQCAtMCwwICsxLDExIEBA CgoKCj4rLyogeyBkZy1vcHRpb25zICItbWFyY2g9cnY2NGdjdl96dmZoIC1tYWJpPWxwNjQgLU8z IC1Xbm8tcHNhYmkiIH0gKi8KCgoKPisKCgoKPisjaW5jbHVkZSAib3ZlcmxvYWRlZF92YWRkLmgi CgoKCj4rCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxp XHMremVybyxccypbYXhdWzAtOV0rLFxzKmU4LFxzKm0xLFxzKnRhLFxzKm1hfSA0IH0gfSAqLwoK Cgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1b MC05XSssXHMqemVybyxccyplOCxccyptMSxccyp0YSxccyptYX0gOCB9IH0gKi8KCgoKPisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1b MC05XSssXHMqZTgsXHMqbTEsXHMqdHUsXHMqbWF9IDQgfSB9ICovCgoKCj4rLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMremVybyxccypbYXhdWzAtOV0rLFxz KmU4LFxzKm0xLFxzKnRhLFxzKm11fSAyIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxccyplOCxccypt MSxccyp0dSxccyptdX0gMiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge3ZhZGRcLnZ2XHMrdlswLTldKyxccyp2WzAtOV0rLFxzKnZbMC05XSt9IDYgfSB9 ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2YWRkXC52eFxz K3ZbMC05XSssXHMqdlswLTldKyxccypbYXhdWzAtOV0rfSA2IH0gfSAqLwoKCgo+ZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2 NjRfdmZhZGQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVy bG9hZGVkX3J2NjRfdmZhZGQuYwoKCgo+bmV3IGZpbGUgbW9kZSAxMDA2NDQKCgoKPmluZGV4IDAw MDAwMDAwMDAwLi5jYTk4MTM2Y2U5YgoKCgo+LS0tIC9kZXYvbnVsbAoKCgo+KysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92ZmFkZC5j CgoKCj5AQCAtMCwwICsxLDExIEBACgoKCj4rLyogeyBkZy1vcHRpb25zICItbWFyY2g9cnY2NGdj dl96dmZoIC1tYWJpPWxwNjQgLU8zIC1Xbm8tcHNhYmkiIH0gKi8KCgoKPisKCgoKPisjaW5jbHVk ZSAib3ZlcmxvYWRlZF92ZmFkZC5oIgoKCgo+KwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05XSssXHMqemVybyxccyplMTYsXHMqbWY0 LFxzKnRhLFxzKm1hfSAxNiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTE2LFxzKm1mNCxccyp0 YSxccyptYX0gNCB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMge3ZzZXR2bGlccytbYXhdWzAtOV0rLFxzKnplcm8sXHMqZTgsXHMqbWY4LFxzKnRhLFxzKm1h fSA4IH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNl dHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxccyplMTYsXHMqbWY0LFxzKnR1LFxzKm1hfSA0IH0g fSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxz K3plcm8sXHMqW2F4XVswLTldKyxccyplMTYsXHMqbWY0LFxzKnR1LFxzKm11fSAyIH0gfSAqLwoK Cgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8s XHMqW2F4XVswLTldKyxccyplMTYsXHMqbWY0LFxzKnRhLFxzKm11fSAyIH0gfSAqLwoKCgo+Ky8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dmZhZGRcLnZ2XHMrdlswLTldKyxc cyp2WzAtOV0rLFxzKnZbMC05XSt9IDEyIH0gfSAqLwoKCgo+ZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdmdldF92c2V0 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9y djY0X3ZnZXRfdnNldC5jCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5kZXggMDAwMDAw MDAwMDAuLjFjYjQyMjUwODRjCgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3ZnZXRfdnNldC5j CgoKCj5AQCAtMCwwICsxLDYgQEAKCgoKPisvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjY0Z2N2 X3p2ZmggLW1hYmk9bHA2NCAtTzMgLVduby1wc2FiaSIgfSAqLwoKCgo+KwoKCgo+KyNpbmNsdWRl ICJvdmVybG9hZGVkX3ZnZXRfdnNldC5oIgoKCgo+KwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7dmxbMC05XStyZVswLTldK1wudlxzK3ZbMC05XSssXHMqMFwoW2F4 XVswLTldK1wpfSAxNCB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge3ZzWzAtOV0rclwudlxzK3ZbMC05XSssXHMqMFwoW2F4XVswLTldK1wpfSAxMyB9IH0g Ki8KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jh c2Uvb3ZlcmxvYWRlZF9ydjY0X3Zsb3hzZWcyZWkxNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfcnY2NF92bG94c2VnMmVpMTYuYwoKCgo+bmV3 IGZpbGUgbW9kZSAxMDA2NDQKCgoKPmluZGV4IDAwMDAwMDAwMDAwLi5lYTczMTcwNDQ0ZAoKCgo+ LS0tIC9kZXYvbnVsbAoKCgo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2 di9iYXNlL292ZXJsb2FkZWRfcnY2NF92bG94c2VnMmVpMTYuYwoKCgo+QEAgLTAsMCArMSwxMCBA QAoKCgo+Ky8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPXJ2NjRnY3ZfenZmaCAtbWFiaT1scDY0IC1P MyAtV25vLXBzYWJpIiB9ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdmxveHNl ZzJlaTE2LmgiCgoKCj4rCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHt2c2V0dmxpXHMremVybyxccypbYXhdWzAtOV0rLFxzKmU2NCxccyptNCxccyp0YSxccyptYX0g MiB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2 bGlccytbYXhdWzAtOV0rLFxzKnplcm8sXHMqZTgsXHMqbWYyLFxzKnRhLFxzKm1hfSA0IH0gfSAq LwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3pl cm8sXHMqW2F4XVswLTldKyxccyplNjQsXHMqbTQsXHMqdHUsXHMqbWF9IDIgfSB9ICovCgoKCj4r LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMremVybyxccypb YXhdWzAtOV0rLFxzKmU2NCxccyptNCxccyp0dSxccyptdX0gMSB9IH0gKi8KCgoKPisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05 XSssXHMqZTY0LFxzKm00LFxzKnRhLFxzKm11fSAxIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dmxveHNlZzJlaTE2XC52XHMrdlswLTldKyxccypcKFth eF1bMC05XStcKSxccyp2WzAtOV0rfSA2IH0gfSAqLwoKCgo+ZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdm12LmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3Zt di5jCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5kZXggMDAwMDAwMDAwMDAuLmM1ZGE2 YmJmY2E4CgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF9ydjY0X3Ztdi5jCgoKCj5AQCAtMCwwICsxLDEw IEBACgoKCj4rLyogeyBkZy1kbyBjb21waWxlIH0gKi8KCgoKPisvKiB7IGRnLW9wdGlvbnMgIi1t YXJjaD1ydjY0Z2N2X3p2ZmggLW1hYmk9bHA2NCAtTzMgLVduby1wc2FiaSIgfSAqLwoKCgo+KwoK Cgo+KyNpbmNsdWRlICJvdmVybG9hZGVkX3Ztdi5oIgoKCgo+KwoKCgo+Ky8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK3plcm8sXHMqW2F4XVswLTldKyxccypl OCxccyptMSxccyp0YSxccyptYX0gMSB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTgsXHMqbTEs XHMqdHUsXHMqbWF9IDIgfSB9ICovCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHt2c2V0dmxpXHMremVybyxccypbYXhdWzAtOV0rLFxzKmUxNixccyptMSxccyp0YSxc cyptYX0gMSB9IH0gKi8KCgoKPisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg e3ZzZXR2bGlccyt6ZXJvLFxzKltheF1bMC05XSssXHMqZTE2LFxzKm0xLFxzKnR1LFxzKm1hfSAx IH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldGl2 bGlccyt6ZXJvLFxzKjAsXHMqZTgsXHMqbTEsXHMqdGEsXHMqbWF9IDEgfSB9ICovCgoKCj5kaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2Fk ZWRfcnY2NF92cmVpbnRlcnByZXQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9y dnYvYmFzZS9vdmVybG9hZGVkX3J2NjRfdnJlaW50ZXJwcmV0LmMKCgoKPm5ldyBmaWxlIG1vZGUg MTAwNjQ0CgoKCj5pbmRleCAwMDAwMDAwMDAwMC4uM2I4Mzk5YzEyNmQKCgoKPi0tLSAvZGV2L251 bGwKCgoKPisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVy bG9hZGVkX3J2NjRfdnJlaW50ZXJwcmV0LmMKCgoKPkBAIC0wLDAgKzEsOSBAQAoKCgo+Ky8qIHsg ZGctb3B0aW9ucyAiLW1hcmNoPXJ2NjRnY3ZfenZmaCAtbWFiaT1scDY0IC1PMyAtV25vLXBzYWJp IiB9ICovCgoKCj4rCgoKCj4rI2luY2x1ZGUgIm92ZXJsb2FkZWRfdnJlaW50ZXJwcmV0LmgiCgoK Cj4rCgoKCj4rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHt2c2V0dmxpXHMr W2F4XVswLTldKyxccyp6ZXJvLFxzKmU4LFxzKm00LFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+ Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05 XSssXHMqemVybyxccyplOCxccyptMixccyp0YSxccyptYX0gMSB9IH0gKi8KCgoKPisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge3ZzZXR2bGlccytbYXhdWzAtOV0rLFxzKnpl cm8sXHMqZTgsXHMqbWYyLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05XSssXHMqemVybyxccypl MTYsXHMqbWYyLFxzKnRhLFxzKm1hfSAyIH0gfSAqLwoKCgo+Ky8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7dnNldHZsaVxzK1theF1bMC05XSssXHMqemVybyxccyplMzIsXHMq bWYyLFxzKnRhLFxzKm1hfSAxIH0gfSAqLwoKCgo+ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZhZGQuaCBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZhZGQuaAoKCgo+bmV3IGZp bGUgbW9kZSAxMDA2NDQKCgoKPmluZGV4IDAwMDAwMDAwMDAwLi4zYjQxY2ZmMWI2MgoKCgo+LS0t IC9kZXYvbnVsbAoKCgo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9i YXNlL292ZXJsb2FkZWRfdmFkZC5oCgoKCj5AQCAtMCwwICsxLDU5IEBACgoKCj4rI2luY2x1ZGUg InJpc2N2X3ZlY3Rvci5oIgoKCgo+KwoKCgo+K3ZpbnQ4bTFfdCB0ZXN0X3ZhZGRfdnZfaThtMSh2 aW50OG0xX3QgdnMyLCB2aW50OG0xX3QgdnMxLCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4g X19yaXNjdl92YWRkKHZzMiwgdnMxLCB2bCk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZpbnQ4bTFfdCB0 ZXN0X3ZhZGRfdnhfaThtMSh2aW50OG0xX3QgdnMyLCBpbnQ4X3QgcnMxLCBzaXplX3QgdmwpIHsK CgoKPivCoCByZXR1cm4gX19yaXNjdl92YWRkKHZzMiwgcnMxLCB2bCk7CgoKCj4rfQoKCgo+KwoK Cgo+K3ZpbnQ4bTFfdCB0ZXN0X3ZhZGRfdnZfaThtMV9tKHZib29sOF90IHZtLCB2aW50OG0xX3Qg dnMyLCB2aW50OG0xX3QgdnMxLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9f cmlzY3ZfdmFkZCh2bSwgdnMyLCB2czEsIHZsKTsKCgoKPit9CgoKCj4rCgoKCj4rdmludDhtMV90 IHRlc3RfdmFkZF92eF9pOG0xX20odmJvb2w4X3Qgdm0sIHZpbnQ4bTFfdCB2czIsIGludDhfdCBy czEsCgoKCj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92YWRkKHZtLCB2 czIsIHJzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2aW50OG0xX3QgdGVzdF92YWRkX3Z2X2k4 bTFfdHUodmludDhtMV90IHZkLCB2aW50OG0xX3QgdnMyLCB2aW50OG0xX3QgdnMxLAoKCgo+K8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92YWRkX3R1KHZkLCB2czIsIHZz MSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2aW50OG0xX3QgdGVzdF92YWRkX3Z4X2k4bTFfdHUo dmludDhtMV90IHZkLCB2aW50OG0xX3QgdnMyLCBpbnQ4X3QgcnMxLAoKCgo+K8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3Qg dmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92YWRkX3R1KHZkLCB2czIsIHJzMSwgdmwpOwoK Cgo+K30KCgoKPisKCgoKPit2aW50OG0xX3QgdGVzdF92YWRkX3Z2X2k4bTFfdHVtKHZib29sOF90 IHZtLCB2aW50OG0xX3QgdmQsIHZpbnQ4bTFfdCB2czIsCgoKCj4rwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmludDhtMV90IHZz MSwgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmFkZF90dW0odm0sIHZkLCB2 czIsIHZzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2aW50OG0xX3QgdGVzdF92YWRkX3Z4X2k4 bTFfdHVtKHZib29sOF90IHZtLCB2aW50OG0xX3QgdmQsIHZpbnQ4bTFfdCB2czIsCgoKCj4rwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaW50OF90IHJzMSwgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmFkZF90 dW0odm0sIHZkLCB2czIsIHJzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2aW50OG0xX3QgdGVz dF92YWRkX3Z2X2k4bTFfbXUodmJvb2w4X3Qgdm0sIHZpbnQ4bTFfdCB2ZCwgdmludDhtMV90IHZz MiwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdmludDhtMV90IHZzMSwgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9f cmlzY3ZfdmFkZF9tdSh2bSwgdmQsIHZzMiwgdnMxLCB2bCk7CgoKCj4rfQoKCgo+KwoKCgo+K3Zp bnQ4bTFfdCB0ZXN0X3ZhZGRfdnhfaThtMV9tdSh2Ym9vbDhfdCB2bSwgdmludDhtMV90IHZkLCB2 aW50OG0xX3QgdnMyLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQ4X3QgcnMxLCBzaXplX3QgdmwpIHsKCgoKPivCoCBy ZXR1cm4gX19yaXNjdl92YWRkX211KHZtLCB2ZCwgdnMyLCByczEsIHZsKTsKCgoKPit9CgoKCj4r CgoKCj4rdmludDhtMV90IHRlc3RfdmFkZF92dl9pOG0xX3R1bXUodmJvb2w4X3Qgdm0sIHZpbnQ4 bTFfdCB2ZCwgdmludDhtMV90IHZzMiwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZpbnQ4bTFfdCB2czEsIHNpemVf dCB2bCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3ZhZGRfdHVtdSh2bSwgdmQsIHZzMiwgdnMx LCB2bCk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZpbnQ4bTFfdCB0ZXN0X3ZhZGRfdnhfaThtMV90dW11 KHZib29sOF90IHZtLCB2aW50OG0xX3QgdmQsIHZpbnQ4bTFfdCB2czIsCgoKCj4rwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQ4X3QgcnMxLCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92YWRkX3R1bXUo dm0sIHZkLCB2czIsIHJzMSwgdmwpOwoKCgo+K30KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92ZmFkZC5oIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJsb2FkZWRfdmZhZGQuaAoKCgo+ bmV3IGZpbGUgbW9kZSAxMDA2NDQKCgoKPmluZGV4IDAwMDAwMDAwMDAwLi43OThhZjQyMGYyZAoK Cgo+LS0tIC9kZXYvbnVsbAoKCgo+KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2 L3J2di9iYXNlL292ZXJsb2FkZWRfdmZhZGQuaAoKCgo+QEAgLTAsMCArMSw2NyBAQAoKCgo+KyNp bmNsdWRlICJyaXNjdl92ZWN0b3IuaCIKCgoKPisKCgoKPit2ZmxvYXQxNm1mNF90IHRlc3RfdmZh ZGRfdnZfZjE2bWY0KHZmbG9hdDE2bWY0X3QgdnMyLCB2ZmxvYXQxNm1mNF90IHZzMSwKCgoKPivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92ZmFkZCh2czIs IHZzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2ZmxvYXQxNm1mNF90IHRlc3RfdmZhZGRfdnZf ZjE2bWY0X20odmJvb2w2NF90IHZtLCB2ZmxvYXQxNm1mNF90IHZzMiwKCgoKPivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdmZsb2F0MTZtZjRfdCB2czEsIHNpemVfdCB2bCkgewoKCgo+K8KgIHJldHVybiBfX3Jp c2N2X3ZmYWRkKHZtLCB2czIsIHZzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2ZmxvYXQxNm1m NF90IHRlc3RfdmZhZGRfdnZfZjE2bWY0X3R1KHZmbG9hdDE2bWY0X3QgdmQsIHZmbG9hdDE2bWY0 X3QgdnMyLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZmbG9hdDE2bWY0X3QgdnMxLCBzaXplX3Qg dmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92ZmFkZF90dSh2ZCwgdnMyLCB2czEsIHZsKTsK CgoKPit9CgoKCj4rCgoKCj4rdmZsb2F0MTZtZjRfdCB0ZXN0X3ZmYWRkX3Z2X2YxNm1mNF90dW0o dmJvb2w2NF90IHZtLCB2ZmxvYXQxNm1mNF90IHZkLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dmZsb2F0MTZtZjRfdCB2czIsIHZmbG9hdDE2bWY0X3QgdnMxLAoKCgo+K8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmZhZGRfdHVtKHZtLCB2 ZCwgdnMyLCB2czEsIHZsKTsKCgoKPit9CgoKCj4rCgoKCj4rdmZsb2F0MTZtZjRfdCB0ZXN0X3Zm YWRkX3Z2X2YxNm1mNF90dW11KHZib29sNjRfdCB2bSwgdmZsb2F0MTZtZjRfdCB2ZCwKCgoKPivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZsb2F0MTZtZjRfdCB2czIsIHZmbG9hdDE2bWY0X3QgdnMx LAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4g X19yaXNjdl92ZmFkZF90dW11KHZtLCB2ZCwgdnMyLCB2czEsIHZsKTsKCgoKPit9CgoKCj4rCgoK Cj4rdmZsb2F0MTZtZjRfdCB0ZXN0X3ZmYWRkX3Z2X2YxNm1mNF9tdSh2Ym9vbDY0X3Qgdm0sIHZm bG9hdDE2bWY0X3QgdmQsCgoKCj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZsb2F0MTZtZjRfdCB2czIs IHZmbG9hdDE2bWY0X3QgdnMxLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCB2bCkgewoK Cgo+K8KgIHJldHVybiBfX3Jpc2N2X3ZmYWRkX211KHZtLCB2ZCwgdnMyLCB2czEsIHZsKTsKCgoK Pit9CgoKCj4rCgoKCj4rdmZsb2F0MTZtZjRfdCB0ZXN0X3ZmYWRkX3Z2X2YxNm1mNF9ybSh2Zmxv YXQxNm1mNF90IHZzMiwgdmZsb2F0MTZtZjRfdCB2czEsCgoKCj4rwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmZhZGQodnMyLCB2czEsIF9fUklT Q1ZfRlJNX1JORSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2ZmxvYXQxNm1mNF90IHRlc3RfdmZh ZGRfdnZfZjE2bWY0X3JtX20odmJvb2w2NF90IHZtLCB2ZmxvYXQxNm1mNF90IHZzMiwKCgoKPivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZsb2F0MTZtZjRfdCB2czEsIHNpemVfdCB2bCkgewoKCgo+ K8KgIHJldHVybiBfX3Jpc2N2X3ZmYWRkKHZtLCB2czIsIHZzMSwgX19SSVNDVl9GUk1fUk5FLCB2 bCk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZmbG9hdDE2bWY0X3QgdGVzdF92ZmFkZF92dl9mMTZtZjRf cm1fdHUodmZsb2F0MTZtZjRfdCB2ZCwgdmZsb2F0MTZtZjRfdCB2czIsCgoKCj4rwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdmZsb2F0MTZtZjRfdCB2czEsIHNpemVfdCB2bCkgewoKCgo+K8KgIHJl dHVybiBfX3Jpc2N2X3ZmYWRkX3R1KHZkLCB2czIsIHZzMSwgX19SSVNDVl9GUk1fUk5FLCB2bCk7 CgoKCj4rfQoKCgo+KwoKCgo+K3ZmbG9hdDE2bWY0X3QgdGVzdF92ZmFkZF92dl9mMTZtZjRfcm1f dHVtKHZib29sNjRfdCB2bSwgdmZsb2F0MTZtZjRfdCB2ZCwKCgoKPivCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZmbG9hdDE2bWY0X3QgdnMyLCB2ZmxvYXQxNm1mNF90IHZzMSwKCgoKPivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCB2bCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2 X3ZmYWRkX3R1bSh2bSwgdmQsIHZzMiwgdnMxLCBfX1JJU0NWX0ZSTV9STkUsIHZsKTsKCgoKPit9 CgoKCj4rCgoKCj4rdmZsb2F0MTZtZjRfdCB0ZXN0X3ZmYWRkX3Z2X2YxNm1mNF9ybV90dW11KHZi b29sNjRfdCB2bSwgdmZsb2F0MTZtZjRfdCB2ZCwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdmZsb2F0MTZtZjRfdCB2czIsIHZmbG9hdDE2bWY0X3QgdnMxLAoKCgo+K8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92 ZmFkZF90dW11KHZtLCB2ZCwgdnMyLCB2czEsIF9fUklTQ1ZfRlJNX1JORSwgdmwpOwoKCgo+K30K CgoKPisKCgoKPit2ZmxvYXQxNm1mNF90IHRlc3RfdmZhZGRfdnZfZjE2bWY0X3JtX211KHZib29s NjRfdCB2bSwgdmZsb2F0MTZtZjRfdCB2ZCwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2 ZmxvYXQxNm1mNF90IHZzMiwgdmZsb2F0MTZtZjRfdCB2czEsCgoKCj4rwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmZhZGRfbXUodm0s IHZkLCB2czIsIHZzMSwgX19SSVNDVl9GUk1fUk5FLCB2bCk7CgoKCj4rfQoKCgo+ZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3Zn ZXRfdnNldC5oIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9iYXNlL292ZXJs b2FkZWRfdmdldF92c2V0LmgKCgoKPm5ldyBmaWxlIG1vZGUgMTAwNjQ0CgoKCj5pbmRleCAwMDAw MDAwMDAwMC4uMDFlMDcyZWIzOGYKCgoKPi0tLSAvZGV2L251bGwKCgoKPisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZnZXRfdnNldC5oCgoK Cj5AQCAtMCwwICsxLDI3IEBACgoKCj4rI2luY2x1ZGUgInJpc2N2X3ZlY3Rvci5oIgoKCgo+KwoK Cgo+K3ZmbG9hdDE2bTFfdCB0ZXN0X3ZnZXRfdl9mMTZtMl9mMTZtMSh2ZmxvYXQxNm0yX3Qgc3Jj LCBzaXplX3QgaW5kZXgpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92Z2V0X2YxNm0xKHNyYywg MCk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZpbnQ2NG0xX3QgdGVzdF92Z2V0X3ZfaTY0bTRfaTY0bTEo dmludDY0bTRfdCBzcmMsIHNpemVfdCBpbmRleCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Zn ZXRfaTY0bTEoc3JjLCAwKTsKCgoKPit9CgoKCj4rCgoKCj4rdmZsb2F0MTZtMV90IHRlc3Rfdmdl dF92X2YxNm0xeDRfZjE2bTEodmZsb2F0MTZtMXg0X3Qgc3JjLCBzaXplX3QgaW5kZXgpIHsKCgoK PivCoCByZXR1cm4gX19yaXNjdl92Z2V0X2YxNm0xKHNyYywgMCk7CgoKCj4rfQoKCgo+KwoKCgo+ K3ZpbnQ4bTJfdCB0ZXN0X3ZnZXRfdl9pOG0yeDNfaThtMih2aW50OG0yeDNfdCBzcmMsIHNpemVf dCBpbmRleCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3ZnZXRfaThtMihzcmMsIDApOwoKCgo+ K30KCgoKPisKCgoKPit2ZmxvYXQxNm0yX3QgdGVzdF92c2V0X3ZfZjE2bTFfZjE2bTIodmZsb2F0 MTZtMl90IGRlc3QsIHNpemVfdCBpbmRleCwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZsb2F0MTZt MV90IHZhbHVlKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdnNldChkZXN0LCAwLCB2YWx1ZSk7 CgoKCj4rfQoKCgo+KwoKCgo+K3ZmbG9hdDY0bTF4N190IHRlc3RfdnNldF92X2Y2NG0xX2Y2NG0x eDcodmZsb2F0NjRtMXg3X3QgZGVzdCwgc2l6ZV90IGluZGV4LAoKCgo+K8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZmbG9hdDY0bTFfdCB2YWx1ZSkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Zz ZXQoZGVzdCwgMCwgdmFsdWUpOwoKCgo+K30KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92bG94c2VnMmVpMTYuaCBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3Zsb3hzZWcy ZWkxNi5oCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5kZXggMDAwMDAwMDAwMDAuLjJl YmNkYjQxNzk1CgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92bG94c2VnMmVpMTYuaAoKCgo+QEAgLTAs MCArMSwzOSBAQAoKCgo+KyNpbmNsdWRlICJyaXNjdl92ZWN0b3IuaCIKCgoKPisKCgoKPit0eXBl ZGVmIF9GbG9hdDE2IGZsb2F0MTZfdDsKCgoKPit0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKCgoK Pit0eXBlZGVmIGRvdWJsZSBmbG9hdDY0X3Q7CgoKCj4rCgoKCj4rdmZsb2F0NjRtNHgyX3QgdGVz dF92bG94c2VnMmVpMTZfdl9mNjRtNHgyKGNvbnN0IGZsb2F0NjRfdCAqcnMxLAoKCgo+K8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dWludDE2bTFfdCByczIsIHNpemVfdCB2bCkgewoKCgo+ K8KgIHJldHVybiBfX3Jpc2N2X3Zsb3hzZWcyZWkxNihyczEsIHJzMiwgdmwpOwoKCgo+K30KCgoK PisKCgoKPit2ZmxvYXQ2NG00eDJfdCB0ZXN0X3Zsb3hzZWcyZWkxNl92X2Y2NG00eDJfbSh2Ym9v bDE2X3Qgdm0sIGNvbnN0IGZsb2F0NjRfdCAqcnMxLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdnVpbnQxNm0xX3QgcnMyLCBzaXplX3QgdmwpIHsKCgoKPivCoCByZXR1cm4g X19yaXNjdl92bG94c2VnMmVpMTYodm0sIHJzMSwgcnMyLCB2bCk7CgoKCj4rfQoKCgo+KwoKCgo+ K3ZmbG9hdDY0bTR4Ml90IHRlc3RfdmxveHNlZzJlaTE2X3ZfZjY0bTR4Ml90dW0odmJvb2wxNl90 IHZtLCB2ZmxvYXQ2NG00eDJfdCB2ZCwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCBmbG9hdDY0X3QgKnJzMSwKCgoKPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB2dWludDE2bTFfdCByczIsIHNpemVfdCB2bCkgewoKCgo+K8KgIHJldHVy biBfX3Jpc2N2X3Zsb3hzZWcyZWkxNl90dW0odm0sIHZkLCByczEsIHJzMiwgdmwpOwoKCgo+K30K CgoKPisKCgoKPit2ZmxvYXQ2NG00eDJfdCB0ZXN0X3Zsb3hzZWcyZWkxNl92X2Y2NG00eDJfdHVt dSh2Ym9vbDE2X3Qgdm0sIHZmbG9hdDY0bTR4Ml90IHZkLAoKCgo+K8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgZmxvYXQ2NF90ICpyczEsCgoKCj4rwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dWludDE2bTFfdCByczIsIHNpemVfdCB2bCkg ewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Zsb3hzZWcyZWkxNl90dW11KHZtLCB2ZCwgcnMxLCBy czIsIHZsKTsKCgoKPit9CgoKCj4rCgoKCj4rdmZsb2F0NjRtNHgyX3QgdGVzdF92bG94c2VnMmVp MTZfdl9mNjRtNHgyX211KHZib29sMTZfdCB2bSwgdmZsb2F0NjRtNHgyX3QgdmQsCgoKCj4rwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGZsb2F0NjRfdCAqcnMxLAoKCgo+ K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dWludDE2bTFfdCByczIsIHNpemVf dCB2bCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Zsb3hzZWcyZWkxNl9tdSh2bSwgdmQsIHJz MSwgcnMyLCB2bCk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZmbG9hdDY0bTR4Ml90IHRlc3RfdmxveHNl ZzJlaTE2X3ZfZjY0bTR4Ml90dSh2ZmxvYXQ2NG00eDJfdCB2ZCwKCgoKPivCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgZmxvYXQ2NF90ICpyczEsCgoKCj4rwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ1aW50MTZtMV90IHJzMiwgc2l6ZV90IHZsKSB7CgoK Cj4rwqAgcmV0dXJuIF9fcmlzY3ZfdmxveHNlZzJlaTE2X3R1KHZkLCByczEsIHJzMiwgdmwpOwoK Cgo+K30KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2 L2Jhc2Uvb3ZlcmxvYWRlZF92bXYuaCBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9y dnYvYmFzZS9vdmVybG9hZGVkX3Ztdi5oCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5k ZXggMDAwMDAwMDAwMDAuLmZkM2YxZDI4YzBhCgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92bXYuaAoK Cgo+QEAgLTAsMCArMSwyNiBAQAoKCgo+KyNpbmNsdWRlICJyaXNjdl92ZWN0b3IuaCIKCgoKPisK CgoKPit2aW50OG0xX3QgdGVzdF92bXZfdl92X2k4bTEgKHZpbnQ4bTFfdCB2czEsIHNpemVfdCB2 bCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Ztdl92ICh2czEsIHZsKTsKCgoKPit9CgoKCj4r CgoKCj4rdmludDhtMV90IHRlc3Rfdm12X3Zfdl9pOG0xX3R1ICh2aW50OG0xX3QgdmQsIHZpbnQ4 bTFfdCB2czEsIHNpemVfdCB2bCkgewoKCgo+K8KgIHJldHVybiBfX3Jpc2N2X3Ztdl92X3R1KHZk LCB2czEsIHZsKTsKCgoKPit9CgoKCj4rCgoKCj4rdmZsb2F0MTZtMV90IHRlc3Rfdm12X3Zfdl9m MTZtMSAodmZsb2F0MTZtMV90IHZzMSwgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlz Y3Zfdm12X3YgKHZzMSwgdmwpOwoKCgo+K30KCgoKPisKCgoKPit2ZmxvYXQxNm0xX3QgdGVzdF92 bXZfdl92X2YxNm0xX3R1ICh2ZmxvYXQxNm0xX3QgdmQsIHZmbG9hdDE2bTFfdCB2czEsCgoKCj4r wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3Zfdm12X3ZfdHUg KHZkLCB2czEsIHZsKTsKCgoKPit9CgoKCj4rCgoKCj4raW50OF90IHRlc3Rfdm12X3hfc19pOG0x X2k4KHZpbnQ4bTFfdCB2czEpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92bXZfeCAodnMxKTsK CgoKPit9CgoKCj4rCgoKCj4rdmludDhtMV90IHRlc3Rfdm12X3NfeF9pOG0xX3R1KHZpbnQ4bTFf dCB2ZCwgaW50OF90IHJzMSwgc2l6ZV90IHZsKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3Zfdm12 X3NfdHUodmQsIHJzMSwgdmwpOwoKCgo+K30KCgoKPmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92cmVpbnRlcnByZXQuaCBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9ydnYvYmFzZS9vdmVybG9hZGVkX3ZyZWludGVy cHJldC5oCgoKCj5uZXcgZmlsZSBtb2RlIDEwMDY0NAoKCgo+aW5kZXggMDAwMDAwMDAwMDAuLjkw NGIwY2VlZTcyCgoKCj4tLS0gL2Rldi9udWxsCgoKCj4rKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvcmlzY3YvcnZ2L2Jhc2Uvb3ZlcmxvYWRlZF92cmVpbnRlcnByZXQuaAoKCgo+QEAgLTAs MCArMSwyOSBAQAoKCgo+KyNpbmNsdWRlICJyaXNjdl92ZWN0b3IuaCIKCgoKPisKCgoKPit2dWlu dDE2bTFfdCB0ZXN0X3ZyZWludGVycHJldF92X2IyX3UxNm0xKHZib29sMl90IHNyYykgewoKCgo+ K8KgIHJldHVybiBfX3Jpc2N2X3ZyZWludGVycHJldF91MTZtMShzcmMpOwoKCgo+K30KCgoKPisK CgoKPit2Ym9vbDRfdCB0ZXN0X3ZyZWludGVycHJldF92X2kzMm0xX2I0KHZpbnQzMm0xX3Qgc3Jj KSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdnJlaW50ZXJwcmV0X2I0KHNyYyk7CgoKCj4rfQoK Cgo+KwoKCgo+K3ZpbnQ4bWYyX3QgdGVzdF92cmVpbnRlcnByZXRfdl9pMTZtZjJfaThtZjIodmlu dDE2bWYyX3Qgc3JjKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdnJlaW50ZXJwcmV0X2k4bWYy KHNyYyk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZpbnQzMm1mMl90IHRlc3RfdnJlaW50ZXJwcmV0X3Zf aTE2bWYyX2kzMm1mMih2aW50MTZtZjJfdCBzcmMpIHsKCgoKPivCoCByZXR1cm4gX19yaXNjdl92 cmVpbnRlcnByZXRfaTMybWYyKHNyYyk7CgoKCj4rfQoKCgo+KwoKCgo+K3ZpbnQzMm0xX3QgdGVz dF92cmVpbnRlcnByZXRfdl9pMTZtMV9pMzJtMSh2aW50MTZtMV90IHNyYykgewoKCgo+K8KgIHJl dHVybiBfX3Jpc2N2X3ZyZWludGVycHJldF9pMzJtMShzcmMpOwoKCgo+K30KCgoKPisKCgoKPit2 aW50OG00X3QgdGVzdF92cmVpbnRlcnByZXRfdl9pMzJtNF9pOG00KHZpbnQzMm00X3Qgc3JjKSB7 CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdnJlaW50ZXJwcmV0X2k4bTQoc3JjKTsKCgoKPit9CgoK Cj4rCgoKCj4rdnVpbnQ4bThfdCB0ZXN0X3ZyZWludGVycHJldF92X3UzMm04X3U4bTgodnVpbnQz Mm04X3Qgc3JjKSB7CgoKCj4rwqAgcmV0dXJuIF9fcmlzY3ZfdnJlaW50ZXJwcmV0X3U4bTgoc3Jj KTsKCgoKPit9CgoKCj4tLSAKCgoKPjIuMTcuMQoKCgo+IAoKCgo+IAoKCg==