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 1lwLF0-0002zy-4H for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Jun 2021 09:01:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lwLEz-0002iK-3Q for pgsql-hackers@arkaria.postgresql.org; Thu, 24 Jun 2021 09:01:41 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lwLEy-0002fX-NR for pgsql-hackers@lists.postgresql.org; Thu, 24 Jun 2021 09:01:40 +0000 Received: from forward2-smtp.messagingengine.com ([66.111.4.226]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lwLEv-0007qo-Ir for pgsql-hackers@postgresql.org; Thu, 24 Jun 2021 09:01:39 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailforward.nyi.internal (Postfix) with ESMTP id D7EF6194045B for ; Thu, 24 Jun 2021 05:01:35 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Thu, 24 Jun 2021 05:01:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=0/jy3v2zAzJXhMZUiGfUj8Zka++lG Q4vOzir6n7ZOZQ=; b=CprZrVKiYBGUr9hVCRSILLFt7YeKNUiITuAsS0ZvjzbJ3 Zxnjc9PWzda2N48sioiodL2m9mTvE8TYgke6IR8ja9lPKPm3x5YLGZiYyznkS1i8 q4ZjFXRZ0oIoSHDqtymDWBV0tDs6NOK3T3Qv74gpJStj+6jybZbuExClS2UWhQu0 sSYyH9lHc+ki1xC7xf/zPLEinnUrWOXGFCtLCwpakJvmOaCP5A70tpr0VYZvL6ew qBSE5QYA9XS8/r/0sqjYTb9W9ERvWx2djmIlwEHjZmR/Tw5pGKNSxH6MIXuodP5R j47LRTZrSlz1pzrKun+hAF3YHeUqwNrsLmVyYhsOQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrfeeghedgudduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhuffvkffffgggtgesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepjeetheevueeuueduveetkeegfeeifeevtedtueekveetkeffffeijeehfffgjeel necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvth gvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Thu, 24 Jun 2021 05:01:34 -0400 (EDT) From: Peter Eisentraut Subject: Add tests for UNBOUNDED syntax ambiguity To: pgsql-hackers Message-ID: Date: Thu, 24 Jun 2021 11:01:32 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------6385DEE44B68C89481DD5D63" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------6385DEE44B68C89481DD5D63 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit As many will be aware, there is a syntactic ambiguity in the SQL standard regarding the keyword UNBOUNDED. Since UNBOUNDED is a non-reserved word, it could be the name of a function parameter and be used as an expression. There is a grammar hack to resolve such cases as the keyword. I brought this issue to the SQL standard working group, and a fix has been agreed. (Since long-standing syntax obviously can't be changed, the fix is basically just an additional rule saying, "if you see this, it means the keyword".) While working on that, I wrote a few test cases to explore this and check how PostgreSQL actually handles this. I figure these test cases are worth committing so that we have a record of this and future grammar refactorings can maintain the behavior. --------------6385DEE44B68C89481DD5D63 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-Add-tests-for-UNBOUNDED-syntax-ambiguity.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Add-tests-for-UNBOUNDED-syntax-ambiguity.patch" RnJvbSA1OWNiYjA2ZGMxYmQ1OGQ3NjY1MjkxNmVkZmZlNjkzMDRlYmJjNzk3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVGh1LCAyNCBKdW4gMjAyMSAxMDo1MzozMiArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIEFkZCB0ZXN0cyBmb3IgVU5CT1VOREVEIHN5bnRheCBhbWJpZ3VpdHkKClRo ZXJlIGlzIGEgc3ludGFjdGljIGFtYmlndWl0eSBpbiB0aGUgU1FMIHN0YW5kYXJkLiAgU2lu Y2UgVU5CT1VOREVECmlzIGEgbm9uLXJlc2VydmVkIHdvcmQsIGl0IGNvdWxkIGJlIHRoZSBu YW1lIG9mIGEgZnVuY3Rpb24gcGFyYW1ldGVyCmFuZCBiZSB1c2VkIGFzIGFuIGV4cHJlc3Np b24uICBUaGVyZSBpcyBhIGdyYW1tYXIgaGFjayB0byByZXNvbHZlIHN1Y2gKY2FzZXMgYXMg dGhlIGtleXdvcmQuICBBZGQgc29tZSB0ZXN0cyB0byByZWNvcmQgdGhpcyBiZWhhdmlvci4K LS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQgfCAxNDAgKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3Fs ICAgICAgfCAgNjYgKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMDYgaW5zZXJ0 aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93 Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAppbmRleCAxOWUy YWM1MThhLi5iYjlmZjdmMDdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3dpbmRvdy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cu b3V0CkBAIC0xODM5LDYgKzE4MzksMTQ2IEBAIHdpbmRvdyB3IGFzCiAgICB8IDQzIHwgICAg ICAgICAgNDIgfCAgICAgICAgIDQzCiAoNyByb3dzKQogCistLSBUaGVyZSBpcyBhIHN5bnRh Y3RpYyBhbWJpZ3VpdHkgaW4gdGhlIFNRTCBzdGFuZGFyZC4gIFNpbmNlCistLSBVTkJPVU5E RUQgaXMgYSBub24tcmVzZXJ2ZWQgd29yZCwgaXQgY291bGQgYmUgdGhlIG5hbWUgb2YgYQor LS0gZnVuY3Rpb24gcGFyYW1ldGVyIGFuZCBiZSB1c2VkIGFzIGFuIGV4cHJlc3Npb24uICBU aGVyZSBpcyBhCistLSBncmFtbWFyIGhhY2sgdG8gcmVzb2x2ZSBzdWNoIGNhc2VzIGFzIHRo ZSBrZXl3b3JkLiAgVGhlIGZvbGxvd2luZworLS0gdGVzdHMgcmVjb3JkIHRoaXMgYmVoYXZp b3IuCitDUkVBVEUgRlVOQ1RJT04gdW5ib3VuZGVkX3N5bnRheF90ZXN0MWEoeCBpbnQpIFJF VFVSTlMgVEFCTEUgKGEgaW50LCBiIGludCwgYyBpbnQpCitMQU5HVUFHRSBTUUwKK0JFR0lO IEFUT01JQworICBTRUxFQ1Qgc3VtKHVuaXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiB4IHBy ZWNlZGluZyBhbmQgeCBmb2xsb3dpbmcpLAorICAgICAgICAgdW5pcXVlMSwgZm91cgorICBG Uk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEgPCAxMDsKK0VORDsKK0NSRUFURSBGVU5DVElPTiB1 bmJvdW5kZWRfc3ludGF4X3Rlc3QxYih4IGludCkgUkVUVVJOUyBUQUJMRSAoYSBpbnQsIGIg aW50LCBjIGludCkKK0xBTkdVQUdFIFNRTAorQVMgJCQKKyAgU0VMRUNUIHN1bSh1bmlxdWUx KSBvdmVyIChyb3dzIGJldHdlZW4geCBwcmVjZWRpbmcgYW5kIHggZm9sbG93aW5nKSwKKyAg ICAgICAgIHVuaXF1ZTEsIGZvdXIKKyAgRlJPTSB0ZW5rMSBXSEVSRSB1bmlxdWUxIDwgMTA7 CiskJDsKKy0tIFRoZXNlIHdpbGwgYXBwbHkgdGhlIGFyZ3VtZW50IHRvIHRoZSB3aW5kb3cg c3BlY2lmaWNhdGlvbiBpbnNpZGUgdGhlIGZ1bmN0aW9uLgorU0VMRUNUICogRlJPTSB1bmJv dW5kZWRfc3ludGF4X3Rlc3QxYSgyKTsKKyBhICB8IGIgfCBjIAorLS0tLSstLS0rLS0tCisg IDcgfCA0IHwgMAorIDEzIHwgMiB8IDIKKyAyMiB8IDEgfCAxCisgMjYgfCA2IHwgMgorIDI5 IHwgOSB8IDEKKyAzMSB8IDggfCAwCisgMzIgfCA1IHwgMQorIDIzIHwgMyB8IDMKKyAxNSB8 IDcgfCAzCisgMTAgfCAwIHwgMAorKDEwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdW5ib3Vu ZGVkX3N5bnRheF90ZXN0MWIoMik7CisgYSAgfCBiIHwgYyAKKy0tLS0rLS0tKy0tLQorICA3 IHwgNCB8IDAKKyAxMyB8IDIgfCAyCisgMjIgfCAxIHwgMQorIDI2IHwgNiB8IDIKKyAyOSB8 IDkgfCAxCisgMzEgfCA4IHwgMAorIDMyIHwgNSB8IDEKKyAyMyB8IDMgfCAzCisgMTUgfCA3 IHwgMworIDEwIHwgMCB8IDAKKygxMCByb3dzKQorCitDUkVBVEUgRlVOQ1RJT04gdW5ib3Vu ZGVkX3N5bnRheF90ZXN0MmEodW5ib3VuZGVkIGludCkgUkVUVVJOUyBUQUJMRSAoYSBpbnQs IGIgaW50LCBjIGludCkKK0xBTkdVQUdFIFNRTAorQkVHSU4gQVRPTUlDCisgIFNFTEVDVCBz dW0odW5pcXVlMSkgb3ZlciAocm93cyBiZXR3ZWVuIHVuYm91bmRlZCBwcmVjZWRpbmcgYW5k IHVuYm91bmRlZCBmb2xsb3dpbmcpLAorICAgICAgICAgdW5pcXVlMSwgZm91cgorICBGUk9N IHRlbmsxIFdIRVJFIHVuaXF1ZTEgPCAxMDsKK0VORDsKK0NSRUFURSBGVU5DVElPTiB1bmJv dW5kZWRfc3ludGF4X3Rlc3QyYih1bmJvdW5kZWQgaW50KSBSRVRVUk5TIFRBQkxFIChhIGlu dCwgYiBpbnQsIGMgaW50KQorTEFOR1VBR0UgU1FMCitBUyAkJAorICBTRUxFQ1Qgc3VtKHVu aXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiB1bmJvdW5kZWQgcHJlY2VkaW5nIGFuZCB1bmJv dW5kZWQgZm9sbG93aW5nKSwKKyAgICAgICAgIHVuaXF1ZTEsIGZvdXIKKyAgRlJPTSB0ZW5r MSBXSEVSRSB1bmlxdWUxIDwgMTA7CiskJDsKKy0tIFRoZXNlIHdpbGwgbm90IGFwcGx5IHRo ZSBhcmd1bWVudCBidXQgaW5zdGVhZCB0cmVhdCBVTkJPVU5ERUQgYXMgYSBrZXl3b3JkLgor U0VMRUNUICogRlJPTSB1bmJvdW5kZWRfc3ludGF4X3Rlc3QyYSgyKTsKKyBhICB8IGIgfCBj IAorLS0tLSstLS0rLS0tCisgNDUgfCA0IHwgMAorIDQ1IHwgMiB8IDIKKyA0NSB8IDEgfCAx CisgNDUgfCA2IHwgMgorIDQ1IHwgOSB8IDEKKyA0NSB8IDggfCAwCisgNDUgfCA1IHwgMQor IDQ1IHwgMyB8IDMKKyA0NSB8IDcgfCAzCisgNDUgfCAwIHwgMAorKDEwIHJvd3MpCisKK1NF TEVDVCAqIEZST00gdW5ib3VuZGVkX3N5bnRheF90ZXN0MmIoMik7CisgYSAgfCBiIHwgYyAK Ky0tLS0rLS0tKy0tLQorIDQ1IHwgNCB8IDAKKyA0NSB8IDIgfCAyCisgNDUgfCAxIHwgMQor IDQ1IHwgNiB8IDIKKyA0NSB8IDkgfCAxCisgNDUgfCA4IHwgMAorIDQ1IHwgNSB8IDEKKyA0 NSB8IDMgfCAzCisgNDUgfCA3IHwgMworIDQ1IHwgMCB8IDAKKygxMCByb3dzKQorCitEUk9Q IEZVTkNUSU9OIHVuYm91bmRlZF9zeW50YXhfdGVzdDFhLCB1bmJvdW5kZWRfc3ludGF4X3Rl c3QxYiwKKyAgICAgICAgICAgICAgdW5ib3VuZGVkX3N5bnRheF90ZXN0MmEsIHVuYm91bmRl ZF9zeW50YXhfdGVzdDJiOworLS0gT3RoZXIgdGVzdHMgd2l0aCB0b2tlbiBVTkJPVU5ERUQg aW4gcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgcG9zaXRpb24KK0NSRUFURSBGVU5DVElPTiB1 bmJvdW5kZWQoeCBpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIFNRTCBJTU1VVEFCTEUgUkVU VVJOIHg7CitTRUxFQ1Qgc3VtKHVuaXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiAxIHByZWNl ZGluZyBhbmQgMSBmb2xsb3dpbmcpLAorICAgICAgIHVuaXF1ZTEsIGZvdXIKK0ZST00gdGVu azEgV0hFUkUgdW5pcXVlMSA8IDEwOworIHN1bSB8IHVuaXF1ZTEgfCBmb3VyIAorLS0tLS0r LS0tLS0tLS0tKy0tLS0tLQorICAgNiB8ICAgICAgIDQgfCAgICAwCisgICA3IHwgICAgICAg MiB8ICAgIDIKKyAgIDkgfCAgICAgICAxIHwgICAgMQorICAxNiB8ICAgICAgIDYgfCAgICAy CisgIDIzIHwgICAgICAgOSB8ICAgIDEKKyAgMjIgfCAgICAgICA4IHwgICAgMAorICAxNiB8 ICAgICAgIDUgfCAgICAxCisgIDE1IHwgICAgICAgMyB8ICAgIDMKKyAgMTAgfCAgICAgICA3 IHwgICAgMworICAgNyB8ICAgICAgIDAgfCAgICAwCisoMTAgcm93cykKKworU0VMRUNUIHN1 bSh1bmlxdWUxKSBvdmVyIChyb3dzIGJldHdlZW4gdW5ib3VuZGVkKDEpIHByZWNlZGluZyBh bmQgdW5ib3VuZGVkKDEpIGZvbGxvd2luZyksCisgICAgICAgdW5pcXVlMSwgZm91cgorRlJP TSB0ZW5rMSBXSEVSRSB1bmlxdWUxIDwgMTA7Cisgc3VtIHwgdW5pcXVlMSB8IGZvdXIgCist LS0tLSstLS0tLS0tLS0rLS0tLS0tCisgICA2IHwgICAgICAgNCB8ICAgIDAKKyAgIDcgfCAg ICAgICAyIHwgICAgMgorICAgOSB8ICAgICAgIDEgfCAgICAxCisgIDE2IHwgICAgICAgNiB8 ICAgIDIKKyAgMjMgfCAgICAgICA5IHwgICAgMQorICAyMiB8ICAgICAgIDggfCAgICAwCisg IDE2IHwgICAgICAgNSB8ICAgIDEKKyAgMTUgfCAgICAgICAzIHwgICAgMworICAxMCB8ICAg ICAgIDcgfCAgICAzCisgICA3IHwgICAgICAgMCB8ICAgIDAKKygxMCByb3dzKQorCitTRUxF Q1Qgc3VtKHVuaXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiB1bmJvdW5kZWQueCBwcmVjZWRp bmcgYW5kIHVuYm91bmRlZC54IGZvbGxvd2luZyksCisgICAgICAgdW5pcXVlMSwgZm91cgor RlJPTSB0ZW5rMSwgKHZhbHVlcyAoMSkpIGFzIHVuYm91bmRlZCh4KSBXSEVSRSB1bmlxdWUx IDwgMTA7CitFUlJPUjogIGFyZ3VtZW50IG9mIFJPV1MgbXVzdCBub3QgY29udGFpbiB2YXJp YWJsZXMKK0xJTkUgMTogU0VMRUNUIHN1bSh1bmlxdWUxKSBvdmVyIChyb3dzIGJldHdlZW4g dW5ib3VuZGVkLnggcHJlY2VkaW5nLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KK0RST1AgRlVOQ1RJT04gdW5ib3VuZGVkOwogLS0gQ2hl Y2sgb3ZlcmZsb3cgYmVoYXZpb3IgZm9yIHZhcmlvdXMgaW50ZWdlciBzaXplcwogc2VsZWN0 IHgsIGxhc3RfdmFsdWUoeCkgb3ZlciAob3JkZXIgYnkgeDo6c21hbGxpbnQgcmFuZ2UgYmV0 d2VlbiBjdXJyZW50IHJvdyBhbmQgMjE0NzQ1MDg4NCBmb2xsb3dpbmcpCiBmcm9tIGdlbmVy YXRlX3NlcmllcygzMjc2NCwgMzI3NjYpIHg7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC93aW5kb3cuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbApp bmRleCBlYWU1ZmE2MDE3Li40MWE4ZTBkMTUyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC93aW5kb3cuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5z cWwKQEAgLTQ3MSw2ICs0NzEsNzIgQEAgQ1JFQVRFIFRFTVAgVklFVyB2X3dpbmRvdyBBUwog d2luZG93IHcgYXMKICAgKG9yZGVyIGJ5IHggZGVzYyBudWxscyBsYXN0IHJhbmdlIGJldHdl ZW4gMiBwcmVjZWRpbmcgYW5kIDIgZm9sbG93aW5nKTsKIAorLS0gVGhlcmUgaXMgYSBzeW50 YWN0aWMgYW1iaWd1aXR5IGluIHRoZSBTUUwgc3RhbmRhcmQuICBTaW5jZQorLS0gVU5CT1VO REVEIGlzIGEgbm9uLXJlc2VydmVkIHdvcmQsIGl0IGNvdWxkIGJlIHRoZSBuYW1lIG9mIGEK Ky0tIGZ1bmN0aW9uIHBhcmFtZXRlciBhbmQgYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uLiAg VGhlcmUgaXMgYQorLS0gZ3JhbW1hciBoYWNrIHRvIHJlc29sdmUgc3VjaCBjYXNlcyBhcyB0 aGUga2V5d29yZC4gIFRoZSBmb2xsb3dpbmcKKy0tIHRlc3RzIHJlY29yZCB0aGlzIGJlaGF2 aW9yLgorCitDUkVBVEUgRlVOQ1RJT04gdW5ib3VuZGVkX3N5bnRheF90ZXN0MWEoeCBpbnQp IFJFVFVSTlMgVEFCTEUgKGEgaW50LCBiIGludCwgYyBpbnQpCitMQU5HVUFHRSBTUUwKK0JF R0lOIEFUT01JQworICBTRUxFQ1Qgc3VtKHVuaXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiB4 IHByZWNlZGluZyBhbmQgeCBmb2xsb3dpbmcpLAorICAgICAgICAgdW5pcXVlMSwgZm91cgor ICBGUk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEgPCAxMDsKK0VORDsKKworQ1JFQVRFIEZVTkNU SU9OIHVuYm91bmRlZF9zeW50YXhfdGVzdDFiKHggaW50KSBSRVRVUk5TIFRBQkxFIChhIGlu dCwgYiBpbnQsIGMgaW50KQorTEFOR1VBR0UgU1FMCitBUyAkJAorICBTRUxFQ1Qgc3VtKHVu aXF1ZTEpIG92ZXIgKHJvd3MgYmV0d2VlbiB4IHByZWNlZGluZyBhbmQgeCBmb2xsb3dpbmcp LAorICAgICAgICAgdW5pcXVlMSwgZm91cgorICBGUk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEg PCAxMDsKKyQkOworCistLSBUaGVzZSB3aWxsIGFwcGx5IHRoZSBhcmd1bWVudCB0byB0aGUg d2luZG93IHNwZWNpZmljYXRpb24gaW5zaWRlIHRoZSBmdW5jdGlvbi4KK1NFTEVDVCAqIEZS T00gdW5ib3VuZGVkX3N5bnRheF90ZXN0MWEoMik7CitTRUxFQ1QgKiBGUk9NIHVuYm91bmRl ZF9zeW50YXhfdGVzdDFiKDIpOworCitDUkVBVEUgRlVOQ1RJT04gdW5ib3VuZGVkX3N5bnRh eF90ZXN0MmEodW5ib3VuZGVkIGludCkgUkVUVVJOUyBUQUJMRSAoYSBpbnQsIGIgaW50LCBj IGludCkKK0xBTkdVQUdFIFNRTAorQkVHSU4gQVRPTUlDCisgIFNFTEVDVCBzdW0odW5pcXVl MSkgb3ZlciAocm93cyBiZXR3ZWVuIHVuYm91bmRlZCBwcmVjZWRpbmcgYW5kIHVuYm91bmRl ZCBmb2xsb3dpbmcpLAorICAgICAgICAgdW5pcXVlMSwgZm91cgorICBGUk9NIHRlbmsxIFdI RVJFIHVuaXF1ZTEgPCAxMDsKK0VORDsKKworQ1JFQVRFIEZVTkNUSU9OIHVuYm91bmRlZF9z eW50YXhfdGVzdDJiKHVuYm91bmRlZCBpbnQpIFJFVFVSTlMgVEFCTEUgKGEgaW50LCBiIGlu dCwgYyBpbnQpCitMQU5HVUFHRSBTUUwKK0FTICQkCisgIFNFTEVDVCBzdW0odW5pcXVlMSkg b3ZlciAocm93cyBiZXR3ZWVuIHVuYm91bmRlZCBwcmVjZWRpbmcgYW5kIHVuYm91bmRlZCBm b2xsb3dpbmcpLAorICAgICAgICAgdW5pcXVlMSwgZm91cgorICBGUk9NIHRlbmsxIFdIRVJF IHVuaXF1ZTEgPCAxMDsKKyQkOworCistLSBUaGVzZSB3aWxsIG5vdCBhcHBseSB0aGUgYXJn dW1lbnQgYnV0IGluc3RlYWQgdHJlYXQgVU5CT1VOREVEIGFzIGEga2V5d29yZC4KK1NFTEVD VCAqIEZST00gdW5ib3VuZGVkX3N5bnRheF90ZXN0MmEoMik7CitTRUxFQ1QgKiBGUk9NIHVu Ym91bmRlZF9zeW50YXhfdGVzdDJiKDIpOworCitEUk9QIEZVTkNUSU9OIHVuYm91bmRlZF9z eW50YXhfdGVzdDFhLCB1bmJvdW5kZWRfc3ludGF4X3Rlc3QxYiwKKyAgICAgICAgICAgICAg dW5ib3VuZGVkX3N5bnRheF90ZXN0MmEsIHVuYm91bmRlZF9zeW50YXhfdGVzdDJiOworCist LSBPdGhlciB0ZXN0cyB3aXRoIHRva2VuIFVOQk9VTkRFRCBpbiBwb3RlbnRpYWxseSBwcm9i bGVtYXRpYyBwb3NpdGlvbgorQ1JFQVRFIEZVTkNUSU9OIHVuYm91bmRlZCh4IGludCkgUkVU VVJOUyBpbnQgTEFOR1VBR0UgU1FMIElNTVVUQUJMRSBSRVRVUk4geDsKKworU0VMRUNUIHN1 bSh1bmlxdWUxKSBvdmVyIChyb3dzIGJldHdlZW4gMSBwcmVjZWRpbmcgYW5kIDEgZm9sbG93 aW5nKSwKKyAgICAgICB1bmlxdWUxLCBmb3VyCitGUk9NIHRlbmsxIFdIRVJFIHVuaXF1ZTEg PCAxMDsKKworU0VMRUNUIHN1bSh1bmlxdWUxKSBvdmVyIChyb3dzIGJldHdlZW4gdW5ib3Vu ZGVkKDEpIHByZWNlZGluZyBhbmQgdW5ib3VuZGVkKDEpIGZvbGxvd2luZyksCisgICAgICAg dW5pcXVlMSwgZm91cgorRlJPTSB0ZW5rMSBXSEVSRSB1bmlxdWUxIDwgMTA7CisKK1NFTEVD VCBzdW0odW5pcXVlMSkgb3ZlciAocm93cyBiZXR3ZWVuIHVuYm91bmRlZC54IHByZWNlZGlu ZyBhbmQgdW5ib3VuZGVkLnggZm9sbG93aW5nKSwKKyAgICAgICB1bmlxdWUxLCBmb3VyCitG Uk9NIHRlbmsxLCAodmFsdWVzICgxKSkgYXMgdW5ib3VuZGVkKHgpIFdIRVJFIHVuaXF1ZTEg PCAxMDsKKworRFJPUCBGVU5DVElPTiB1bmJvdW5kZWQ7CisKIC0tIENoZWNrIG92ZXJmbG93 IGJlaGF2aW9yIGZvciB2YXJpb3VzIGludGVnZXIgc2l6ZXMKIAogc2VsZWN0IHgsIGxhc3Rf dmFsdWUoeCkgb3ZlciAob3JkZXIgYnkgeDo6c21hbGxpbnQgcmFuZ2UgYmV0d2VlbiBjdXJy ZW50IHJvdyBhbmQgMjE0NzQ1MDg4NCBmb2xsb3dpbmcpCi0tIAoyLjMyLjAKCg== --------------6385DEE44B68C89481DD5D63--