Support for CALL statement in ecpg

Ashutosh Sharma <[email protected]> Thu, 18 Jul 2019 16:35:02 +0530
Newsgroups gmane.comp.db.postgresql.interfaces
Message-ID <CAE9k0Pn3s_YcOJpDMhZwaSaQ2YbKS-2hNCCVG=+WF85-R-20gQ@mail.gmail.com>
--0000000000008358c2058df295aa
Content-Type: text/plain; charset="UTF-8"

Hi All,

In the current code for ecpg, we can't use CALL statement to call
stored procedures. The attached patch adds the support for it.

With the attached patch, we can now have the following SQL statement
in ecpg application to call the stored procedures with IN or INOUT
params.

EXEC SQL CALL SP1(:hv1, :hv2);

Additionally, we can also use indicator variables along with the
arguments of stored procedure with CALL statement like shown below:

EXEC SQL CALL SP1(:hv1 :ind1, :hv2, :ind2);

The patch also adds some basic test-cases to verify if CALL statement
in ecpg can be used to call stored procedures with different type of
parameters.

Please have a look and let me know your thoughts.

Thank you.

-- 
With Regards,
Ashutosh Sharma
EnterpriseDB:http://www.enterprisedb.com

--0000000000008358c2058df295aa
Content-Type: text/x-patch; charset="US-ASCII"; name="v1-support-for-CALL-stmt-ecpg.patch"
Content-Disposition: attachment; 
	filename="v1-support-for-CALL-stmt-ecpg.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_jy8k6u8j0>
X-Attachment-Id: f_jy8k6u8j0

ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLmFkZG9ucyBiL3Ny
Yy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLmFkZG9ucwppbmRleCA0ZTMwMzc1Li5mYjI0
ZjIzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy5hZGRvbnMK
KysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcuYWRkb25zCkBAIC01NTUsMyAr
NTU1LDE5IEBAIEVDUEc6IGxpbWl0X2NsYXVzZUxJTUlUc2VsZWN0X2xpbWl0X3ZhbHVlJywnc2Vs
ZWN0X29mZnNldF92YWx1ZSBibG9jawogCX0KIEVDUEc6IFNpZ25lZEljb25zdEljb25zdCBydWxl
CiAJfCBjaXZhcgl7ICQkID0gJDE7IH0KK0VDUEc6IENhbGxTdG10Q0FMTGZ1bmNfYXBwbGljYXRp
b24KKwl7CisJCXN0cnVjdCBhcmd1bWVudHMgKnAgPSBhcmdzaW5zZXJ0OworCisJCSQkID0gY2F0
X3N0cigyLG1tX3N0cmR1cCgiY2FsbCIpLCQyKTsKKworCQkvKgorCQkgKiBDb3B5IGlucHV0IGFy
Z3VtZW50cyB0byB0aGUgcmVzdWx0IGFyZ3VtZW50cyBsaXN0IHNvIHRoYXQgYWxsIHRoZQorCQkg
KiBob3N0IHZhcmlhYmxlcyBnZXRzIHRyZWF0ZWQgYXMgSU5PVVQgcGFyYW1zLgorCQkgKi8KKwkJ
d2hpbGUgKHAgIT0gTlVMTCkKKwkJeworCQkJYWRkX3ZhcmlhYmxlX3RvX3RhaWwoJmFyZ3NyZXN1
bHQsIHAtPnZhcmlhYmxlLCBwLT5pbmRpY2F0b3IpOworCQkJcCA9IHAtPm5leHQ7CisJCX0KKwl9
CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSBiL3Ny
Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCmluZGV4IGUwMzRjNWEuLjdlNmI1
YzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCisr
KyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCkBAIC0zMyw2ICszMyw3
IEBAIHRlc3Q6IHByZXByb2Mvd2hlbmV2ZXJfZG9fY29udGludWUKIHRlc3Q6IHNxbC9hcnJheQog
dGVzdDogc3FsL2JpbmFyeQogdGVzdDogc3FsL2J5dGVhCit0ZXN0OiBzcWwvY2FsbAogdGVzdDog
c3FsL2NvZGUxMDAKIHRlc3Q6IHNxbC9jb3B5c3Rkb3V0CiB0ZXN0OiBzcWwvY3JlYXRldGFibGVh
cwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1jYWxs
LmMgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODBjMWVlCi0tLSAvZGV2L251bGwKKysrIGIv
c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1jYWxsLmMKQEAgLTAsMCArMSwy
MzEgQEAKKy8qIFByb2Nlc3NlZCBieSBlY3BnIChyZWdyZXNzaW9uIG1vZGUpICovCisvKiBUaGVz
ZSBpbmNsdWRlIGZpbGVzIGFyZSBhZGRlZCBieSB0aGUgcHJlcHJvY2Vzc29yICovCisjaW5jbHVk
ZSA8ZWNwZ2xpYi5oPgorI2luY2x1ZGUgPGVjcGdlcnJuby5oPgorI2luY2x1ZGUgPHNxbGNhLmg+
CisvKiBFbmQgb2YgYXV0b21hdGljIGluY2x1ZGUgc2VjdGlvbiAqLworI2RlZmluZSBFQ1BHZGVi
dWcoWCxZKSBFQ1BHZGVidWcoKFgpKzEwMCwoWSkpCisKKyNsaW5lIDEgImNhbGwucGdjIgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworI2xpbmUgMSAic3FsY2Eu
aCIKKyNpZm5kZWYgUE9TVEdSRVNfU1FMQ0FfSAorI2RlZmluZSBQT1NUR1JFU19TUUxDQV9ICisK
KyNpZm5kZWYgUEdETExJTVBPUlQKKyNpZiAgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZ
R1dJTl9fKQorI2RlZmluZSBQR0RMTElNUE9SVCBfX2RlY2xzcGVjIChkbGxpbXBvcnQpCisjZWxz
ZQorI2RlZmluZSBQR0RMTElNUE9SVAorI2VuZGlmCQkJCQkJCS8qIF9fQ1lHV0lOX18gKi8KKyNl
bmRpZgkJCQkJCQkvKiBQR0RMTElNUE9SVCAqLworCisjZGVmaW5lIFNRTEVSUk1DX0xFTgkxNTAK
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworc3RydWN0IHNx
bGNhX3QKK3sKKwljaGFyCQlzcWxjYWlkWzhdOworCWxvbmcJCXNxbGFiYzsKKwlsb25nCQlzcWxj
b2RlOworCXN0cnVjdAorCXsKKwkJaW50CQkJc3FsZXJybWw7CisJCWNoYXIJCXNxbGVycm1jW1NR
TEVSUk1DX0xFTl07CisJfQkJCXNxbGVycm07CisJY2hhcgkJc3FsZXJycFs4XTsKKwlsb25nCQlz
cWxlcnJkWzZdOworCS8qIEVsZW1lbnQgMDogZW1wdHkJCQkJCQkqLworCS8qIDE6IE9JRCBvZiBw
cm9jZXNzZWQgdHVwbGUgaWYgYXBwbGljYWJsZQkJCSovCisJLyogMjogbnVtYmVyIG9mIHJvd3Mg
cHJvY2Vzc2VkCQkJCSovCisJLyogYWZ0ZXIgYW4gSU5TRVJULCBVUERBVEUgb3IJCQkJKi8KKwkv
KiBERUxFVEUgc3RhdGVtZW50CQkJCQkqLworCS8qIDM6IGVtcHR5CQkJCQkJKi8KKwkvKiA0OiBl
bXB0eQkJCQkJCSovCisJLyogNTogZW1wdHkJCQkJCQkqLworCWNoYXIJCXNxbHdhcm5bOF07CisJ
LyogRWxlbWVudCAwOiBzZXQgdG8gJ1cnIGlmIGF0IGxlYXN0IG9uZSBvdGhlciBpcyAnVycJKi8K
KwkvKiAxOiBpZiAnVycgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBzdHJpbmcJCSovCisJLyogdmFs
dWUgd2FzIHRydW5jYXRlZCB3aGVuIGl0IHdhcwkJCSovCisJLyogc3RvcmVkIGludG8gYSBob3N0
IHZhcmlhYmxlLiAgICAgICAgICAgICAqLworCisJLyoKKwkgKiAyOiBpZiAnVycgYSAoaG9wZWZ1
bGx5KSBub24tZmF0YWwgbm90aWNlIG9jY3VycmVkCisJICovCS8qIDM6IGVtcHR5ICovCisJLyog
NDogZW1wdHkJCQkJCQkqLworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwkvKiA2OiBlbXB0eQkJCQkJ
CSovCisJLyogNzogZW1wdHkJCQkJCQkqLworCisJY2hhcgkJc3Fsc3RhdGVbNV07Cit9OworCitz
dHJ1Y3Qgc3FsY2FfdCAqRUNQR2dldF9zcWxjYSh2b2lkKTsKKworI2lmbmRlZiBQT1NUR1JFU19F
Q1BHX0lOVEVSTkFMCisjZGVmaW5lIHNxbGNhICgqRUNQR2dldF9zcWxjYSgpKQorI2VuZGlmCisK
KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisjbGluZSA0ICJjYWxs
LnBnYyIKKworCisjbGluZSAxICJyZWdyZXNzaW9uLmgiCisKKworCisKKworCisjbGluZSA1ICJj
YWxsLnBnYyIKKworCitpbnQKK21haW4odm9pZCkKK3sKKyAgIC8qIGV4ZWMgc3FsIGJlZ2luIGRl
Y2xhcmUgc2VjdGlvbiAqLworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAK
KyAgIAorI2xpbmUgMTEgImNhbGwucGdjIgorIGludCBodjEgPSAxMCA7CisgCisjbGluZSAxMiAi
Y2FsbC5wZ2MiCisgaW50IGh2MiA9IDIwIDsKKyAKKyNsaW5lIDEzICJjYWxsLnBnYyIKKyBpbnQg
aW5kMSA9IDAgOworIAorI2xpbmUgMTQgImNhbGwucGdjIgorIGludCBpbmQyID0gMCA7CisvKiBl
eGVjIHNxbCBlbmQgZGVjbGFyZSBzZWN0aW9uICovCisjbGluZSAxNSAiY2FsbC5wZ2MiCisKKwor
ICAgLyogZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJyb3IgIGRvIHNxbHByaW50ICggKSA7ICovCisj
bGluZSAxNyAiY2FsbC5wZ2MiCisKKyAgIHsgRUNQR2Nvbm5lY3QoX19MSU5FX18sIDAsICJlY3Bn
MV9yZWdyZXNzaW9uIiAsIE5VTEwsIE5VTEwgLCBOVUxMLCAwKTsgCisjbGluZSAxOCAiY2FsbC5w
Z2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5lIDE4ICJj
YWxsLnBnYyIKKzsKKworICAgLyogU3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24uICovCisgICB7IEVD
UEd0cmFucyhfX0xJTkVfXywgTlVMTCwgImJlZ2luIHRyYW5zYWN0aW9uIik7CisjbGluZSAyMSAi
Y2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5l
IDIxICJjYWxsLnBnYyIKKworCisgICAvKiBDcmVhdGUgdGVzdCB0YWJsZXMuICovCisgICB7IEVD
UEdkbyhfX0xJTkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImNyZWF0ZSB0YWJs
ZSB0MSAoIGEgaW50ICwgYiBpbnQgKSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUg
MjQgImNhbGwucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9Cisj
bGluZSAyNCAiY2FsbC5wZ2MiCisKKyAgIHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAw
LCBFQ1BHc3Rfbm9ybWFsLCAiY3JlYXRlIHRhYmxlIHQyICggYSBpbnQgLCBiIGludCApIiwgRUNQ
R3RfRU9JVCwgRUNQR3RfRU9SVCk7CisjbGluZSAyNSAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5z
cWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5lIDI1ICJjYWxsLnBnYyIKKworCisgICAv
KiBJbnNlcnQgc29tZSBkYXRhIGludG8gdGVzdCB0YWJsZXMgY3JlYXRlZCBhYm92ZS4gKi8KKyAg
IHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiaW5zZXJ0
IGludG8gdDEgdmFsdWVzICggMTAgLCAxMDAgKSAsICggMzAgLCAzMDAgKSAsICggNTAgLCA1MDAg
KSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUgMjggImNhbGwucGdjIgorCitpZiAo
c3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9CisjbGluZSAyOCAiY2FsbC5wZ2MiCisK
KyAgIHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiaW5z
ZXJ0IGludG8gdDIgdmFsdWVzICggMjAgLCAyMDAgKSAsICggNDAgLCA0MDAgKSAsICggNjAgLCA2
MDAgKSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUgMjkgImNhbGwucGdjIgorCitp
ZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9CisjbGluZSAyOSAiY2FsbC5wZ2Mi
CisKKworICAgLyogQ3JlYXRlIHN0b3JlZCBwcm9jZWR1cmUgd2l0aCBJTk9VVCBwYXJhbXMuICov
CisgICB7IEVDUEdkbyhfX0xJTkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImNy
ZWF0ZSBvciByZXBsYWNlIHByb2NlZHVyZSBzcDEgKCBpbm91dCB2MSBpbnQgLCBpbm91dCB2MiBp
bnQgKSBhcyAkJFwKKyAgICAgYmVnaW5cCisgICAgIHYxIDo9IChzZWxlY3QgYiBmcm9tIHQxIHdo
ZXJlIGEgPSB2MSk7XAorICAgICB2MiA6PSAoc2VsZWN0IGIgZnJvbSB0MiB3aGVyZSBhID0gdjIp
O1wKKyAgICAgZW5kOyAkJCBsYW5ndWFnZSBwbHBnc3FsIiwgRUNQR3RfRU9JVCwgRUNQR3RfRU9S
VCk7CisjbGluZSAzOCAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJp
bnQgKCApO30KKyNsaW5lIDM4ICJjYWxsLnBnYyIKKworCisgICAvKiBDYWxsIHN0b3JlZCBwcm9j
ZWR1cmUxIGFuZCBwcmludCBpdCdzIG91dHB1dC4gKi8KKyAgIHsgRUNQR2RvKF9fTElORV9fLCAw
LCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiY2FsbCBzcDEgKCAkMSAgLCAkMiAgKSIsIAor
CUVDUEd0X2ludCwmKGh2MSksKGxvbmcpMSwobG9uZykxLHNpemVvZihpbnQpLCAKKwlFQ1BHdF9O
T19JTkRJQ0FUT1IsIE5VTEwgLCAwTCwgMEwsIDBMLCAKKwlFQ1BHdF9pbnQsJihodjIpLChsb25n
KTEsKGxvbmcpMSxzaXplb2YoaW50KSwgCisJRUNQR3RfTk9fSU5ESUNBVE9SLCBOVUxMICwgMEws
IDBMLCAwTCwgRUNQR3RfRU9JVCwgCisJRUNQR3RfaW50LCYoaHYxKSwobG9uZykxLChsb25nKTEs
c2l6ZW9mKGludCksIAorCUVDUEd0X05PX0lORElDQVRPUiwgTlVMTCAsIDBMLCAwTCwgMEwsIAor
CUVDUEd0X2ludCwmKGh2MiksKGxvbmcpMSwobG9uZykxLHNpemVvZihpbnQpLCAKKwlFQ1BHdF9O
T19JTkRJQ0FUT1IsIE5VTEwgLCAwTCwgMEwsIDBMLCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDQxICJj
YWxsLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCAoICk7fQorI2xpbmUg
NDEgImNhbGwucGdjIgorCisKKyAgIHByaW50ZigiRmlyc3QgY2FsbCB0byBzdG9yZWQgcHJvY2Vk
dXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJsZXMuXG5cbiIpOworICAgcHJpbnRmKCJz
cDEgb3V0cHV0OiBodjEgPSAlZCwgaHYyID0gJWRcbiIsIGh2MSwgaHYyKTsKKworICAgLyogQ2Fs
bCBzdG9yZWQgcHJvY2VkdXJlMSB3aXRoIGluZGljYXRvciB2YXJpYWJsZXMgYW5kIHByaW50IGl0
J3Mgb3V0cHV0LiAqLworICAgeyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdz
dF9ub3JtYWwsICJjYWxsIHNwMSAoICQxICAsICQyICApIiwgCisJRUNQR3RfaW50LCYoaHYxKSwo
bG9uZykxLChsb25nKTEsc2l6ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDEpLChsb25nKTEs
KGxvbmcpMSxzaXplb2YoaW50KSwgCisJRUNQR3RfaW50LCYoaHYyKSwobG9uZykxLChsb25nKTEs
c2l6ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDIpLChsb25nKTEsKGxvbmcpMSxzaXplb2Yo
aW50KSwgRUNQR3RfRU9JVCwgCisJRUNQR3RfaW50LCYoaHYxKSwobG9uZykxLChsb25nKTEsc2l6
ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDEpLChsb25nKTEsKGxvbmcpMSxzaXplb2YoaW50
KSwgCisJRUNQR3RfaW50LCYoaHYyKSwobG9uZykxLChsb25nKTEsc2l6ZW9mKGludCksIAorCUVD
UEd0X2ludCwmKGluZDIpLChsb25nKTEsKGxvbmcpMSxzaXplb2YoaW50KSwgRUNQR3RfRU9SVCk7
CisjbGluZSA0NyAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQg
KCApO30KKyNsaW5lIDQ3ICJjYWxsLnBnYyIKKworCisgICBwcmludGYoIlxuU2Vjb25kIGNhbGwg
dG8gc3RvcmVkIHByb2NlZHVyZSBzcDEgdXNpbmcgaW5kaWNhdG9yIHZhcmlhYmxlcy5cbiIpOwor
ICAgcHJpbnRmKCJJbmRpY2F0b3IgdmFyaWFibGVzIGluZDEgYW5kIGluZDIgbXVzdCBob2xkIG5l
Z2F0aXZlIHZhbHVlcyBpbmRpY2F0aW5nIHRoYXQgc2VydmVyIHJldHVybmVkIE5VTEwgdmFsdWVz
IHRoaXMgdGltZS5cblxuIik7CisgICBwcmludGYoInNwMSBvdXRwdXQ6IGh2MSA9ICVkIGluZDEg
PSAlZCwgaHYyID0gJWQgaW5kMiA9ICVkXG4iLCBodjEsIGluZDEsIGh2MiwgaW5kMik7CisKKyAg
IHsgRUNQR3RyYW5zKF9fTElORV9fLCBOVUxMLCAicm9sbGJhY2siKTsKKyNsaW5lIDUzICJjYWxs
LnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCAoICk7fQorI2xpbmUgNTMg
ImNhbGwucGdjIgorCisKKyAgIHsgRUNQR2Rpc2Nvbm5lY3QoX19MSU5FX18sICJDVVJSRU5UIik7
CisjbGluZSA1NSAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQg
KCApO30KKyNsaW5lIDU1ICJjYWxsLnBnYyIKKworCisgICByZXR1cm4gMDsKK30KZGlmZiAtLWdp
dCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtY2FsbC5zdGRlcnIgYi9z
cmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3RkZXJyCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKZGlmZiAtLWdpdCBhL3NyYy9pbnRl
cmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtY2FsbC5zdGRvdXQgYi9zcmMvaW50ZXJmYWNl
cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM5MWE1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl
cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3Rkb3V0CkBAIC0wLDAgKzEsOCBAQAorRmly
c3QgY2FsbCB0byBzdG9yZWQgcHJvY2VkdXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJs
ZXMuCisKK3NwMSBvdXRwdXQ6IGh2MSA9IDEwMCwgaHYyID0gMjAwCisKK1NlY29uZCBjYWxsIHRv
IHN0b3JlZCBwcm9jZWR1cmUgc3AxIHVzaW5nIGluZGljYXRvciB2YXJpYWJsZXMuCitJbmRpY2F0
b3IgdmFyaWFibGVzIGluZDEgYW5kIGluZDIgbXVzdCBob2xkIG5lZ2F0aXZlIHZhbHVlcyBpbmRp
Y2F0aW5nIHRoYXQgc2VydmVyIHJldHVybmVkIE5VTEwgdmFsdWVzIHRoaXMgdGltZS4KKworc3Ax
IG91dHB1dDogaHYxID0gMTAwIGluZDEgPSAtMSwgaHYyID0gMjAwIGluZDIgPSAtMQpkaWZmIC0t
Z2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZh
Y2VzL2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUKaW5kZXggODc2Y2E4ZC4uMzgxNjlmNCAxMDA2NDQK
LS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMvaW50
ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw4IEBAIFRFU1RTID0g
YXJyYXkgYXJyYXkuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBcCiAJCWRlY2xhcmUgZGVj
bGFyZS5jIFwKIAkJYnl0ZWEgYnl0ZWEuYyBcCi0JCXByZXBhcmVhcyBwcmVwYXJlYXMuYworCQlw
cmVwYXJlYXMgcHJlcGFyZWFzLmMgXAorCQljYWxsIGNhbGwuYwogCiBhbGw6ICQoVEVTVFMpCiAK
ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvY2FsbC5wZ2MgYi9zcmMv
aW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL2NhbGwucGdjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA3ZGMyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9l
Y3BnL3Rlc3Qvc3FsL2NhbGwucGdjCkBAIC0wLDAgKzEsNTggQEAKKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleGVjIHNxbCBpbmNsdWRlIHNxbGNhOworZXhlYyBz
cWwgaW5jbHVkZSAuLi9yZWdyZXNzaW9uOworCitpbnQKK21haW4odm9pZCkKK3sKKyAgIGV4ZWMg
c3FsIGJlZ2luIGRlY2xhcmUgc2VjdGlvbjsKKyAgICAgaW50IGh2MSA9IDEwOworICAgICBpbnQg
aHYyID0gMjA7CisgICAgIGludCBpbmQxID0gMDsKKyAgICAgaW50IGluZDIgPSAwOworICAgZXhl
YyBzcWwgZW5kIGRlY2xhcmUgc2VjdGlvbjsKKworICAgZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJy
b3IgZG8gc3FscHJpbnQoKTsKKyAgIGV4ZWMgc3FsIGNvbm5lY3QgdG8gUkVHUkVTU0RCMTs7CisK
KyAgIC8qIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uLiAqLworICAgZXhlYyBzcWwgYmVnaW4gdHJh
bnNhY3Rpb247CisKKyAgIC8qIENyZWF0ZSB0ZXN0IHRhYmxlcy4gKi8KKyAgIGV4ZWMgc3FsIGNy
ZWF0ZSB0YWJsZSB0MShhIGludCwgYiBpbnQpOworICAgZXhlYyBzcWwgY3JlYXRlIHRhYmxlIHQy
KGEgaW50LCBiIGludCk7CisKKyAgIC8qIEluc2VydCBzb21lIGRhdGEgaW50byB0ZXN0IHRhYmxl
cyBjcmVhdGVkIGFib3ZlLiAqLworICAgZXhlYyBzcWwgaW5zZXJ0IGludG8gdDEgdmFsdWVzICgx
MCwgMTAwKSwgKDMwLCAzMDApLCAoNTAsIDUwMCk7CisgICBleGVjIHNxbCBpbnNlcnQgaW50byB0
MiB2YWx1ZXMgKDIwLCAyMDApLCAoNDAsIDQwMCksICg2MCwgNjAwKTsKKworICAgLyogQ3JlYXRl
IHN0b3JlZCBwcm9jZWR1cmUgd2l0aCBJTk9VVCBwYXJhbXMuICovCisgICBleGVjIHNxbCBjcmVh
dGUgb3IgcmVwbGFjZSBwcm9jZWR1cmUgc3AxKElOT1VUIHYxIGludCwgSU5PVVQgdjIgaW50KQor
ICAgICBhcyAkJAorICAgICBiZWdpbgorICAgICB2MSA6PSAoc2VsZWN0IGIgZnJvbSB0MSB3aGVy
ZSBhID0gdjEpOworICAgICB2MiA6PSAoc2VsZWN0IGIgZnJvbSB0MiB3aGVyZSBhID0gdjIpOwor
ICAgICBlbmQ7ICQkCisgICAgIGxhbmd1YWdlIHBscGdzcWw7CisKKyAgIC8qIENhbGwgc3RvcmVk
IHByb2NlZHVyZTEgYW5kIHByaW50IGl0J3Mgb3V0cHV0LiAqLworICAgZXhlYyBzcWwgY2FsbCBz
cDEoOmh2MSwgOmh2Mik7CisKKyAgIHByaW50ZigiRmlyc3QgY2FsbCB0byBzdG9yZWQgcHJvY2Vk
dXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJsZXMuXG5cbiIpOworICAgcHJpbnRmKCJz
cDEgb3V0cHV0OiBodjEgPSAlZCwgaHYyID0gJWRcbiIsIGh2MSwgaHYyKTsKKworICAgLyogQ2Fs
bCBzdG9yZWQgcHJvY2VkdXJlMSB3aXRoIGluZGljYXRvciB2YXJpYWJsZXMgYW5kIHByaW50IGl0
J3Mgb3V0cHV0LiAqLworICAgZXhlYyBzcWwgY2FsbCBzcDEoOmh2MSA6aW5kMSwgOmh2MiA6aW5k
Mik7CisKKyAgIHByaW50ZigiXG5TZWNvbmQgY2FsbCB0byBzdG9yZWQgcHJvY2VkdXJlIHNwMSB1
c2luZyBpbmRpY2F0b3IgdmFyaWFibGVzLlxuIik7CisgICBwcmludGYoIkluZGljYXRvciB2YXJp
YWJsZXMgaW5kMSBhbmQgaW5kMiBtdXN0IGhvbGQgbmVnYXRpdmUgdmFsdWVzIGluZGljYXRpbmcg
dGhhdCBzZXJ2ZXIgcmV0dXJuZWQgTlVMTCB2YWx1ZXMgdGhpcyB0aW1lLlxuXG4iKTsKKyAgIHBy
aW50Zigic3AxIG91dHB1dDogaHYxID0gJWQgaW5kMSA9ICVkLCBodjIgPSAlZCBpbmQyID0gJWRc
biIsIGh2MSwgaW5kMSwgaHYyLCBpbmQyKTsKKworICAgZXhlYyBzcWwgcm9sbGJhY2s7CisKKyAg
IGV4ZWMgc3FsIGRpc2Nvbm5lY3Q7CisKKyAgIHJldHVybiAwOworfQo=
--0000000000008358c2058df295aa--