Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

patch to ASCO 0.4.6 to support multiple analyses with Spectre

12 views
Skip to first unread message

J. Patrick Bedell

unread,
Nov 27, 2008, 5:32:49 PM11/27/08
to
Hello,
I've been using the ASCO tool (http://asco.sf.net) for automated
circuit sizing and optimization. Because ASCO 0.4.6, the latest
version, doesn't support optimizing on multiple analyses (AC, TRAN,
DC, etc.) simultaneously with Spectre, I added that functionality.
Here's the patch, for anyone who is interested. I've encoded it in
base64 - to get the text of the patch, using the base64 code in GNU
coreutils, you can run "base64 -d <textfile>" where textfile has the
text block below. Let me know if you need any help with it...

Patrick


LS0tIHRtcC9hc2NvLTAuNC42L2luaXRpYWxpemUuaAkyMDA2LTA1LTE2IDA0OjQ4OjQ0LjAwMDAw
MDAwMCAtMDcwMAorKysgY29kZS9hc2NvL2luaXRpYWxpemUuaAkyMDA4LTExLTE2IDEyOjQ1OjM3
LjAwMDAwMDAwMCAtMDgwMApAQCAtNTAsNiArNTAsNyBAQAogICovCiB0eXBlZGVmIHN0cnVjdCB7
CiAJY2hhciBtZWFzX3N5bWJvbFtMT05HU1RSSU5HU0laRV07IC8qc3ltYm9sIGluIHRoZSBTUElD
RSBvdXRwdXQgZmlsZSB0aGF0IHdpbGwgYmUgbWVhc3VyZWQgKi8KKyAgaW50IGFuYWx5c2lzX3R5
cGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBTcGVjdHJlIC0gd2hpY2ggYW5hbHlzaXMg
d2lsbCB0aGUgbWVhc3VyZW1lbnQgYmUgYWRkZWQgdG8/
ICovIAogCWNoYXIgbm9kZVtMT05HU1RS
SU5HU0laRV07ICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovCiAJaW50IG9iamVjdGl2ZV9jb25zdHJhaW50OyAgICAgICAgIC8q
TUlOPTEsIE1BWD0yLCBNT049MywgTEU9NCwgR0U9NSwgRVE9NiAgICAgICAgICAgICAgICAgKi8K
IAlkb3VibGUgY29uc3RyYWludF92YWx1ZTsgICAgICAgICAgLypzcGVjaWZpZWQgYnkgdGhlIHVz
ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTcsNyArNTgsMTQgQEAK
IAlpbnQgY29uc3RyYWludF9tZXQ7ICAgICAgICAgICAgICAgLyoxIGlmIGNvbnN0cmFpbnQgaXMg
bWV0LCAwIG90aGVyd2lzZSAgICAgICAgICAgICAgICAgICAqLwogfSBtZWFzdXJlbWVudHNfbGlu
ZTsKIAotCisvKgorICogIHN0cnVjdCB0byBhY2NvbW9kYXRlIGluZm9ybWF0aW9uIGZvciBTcGVj
dHJlIE1ETCBmaWxlcy4KKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0IHsgCisgIGNoYXIgbmFtZVtM
T05HU1RSSU5HU0laRV07IC8qIG5hbWUgb2YgYW5hbHlzaXMgKi8KKyAgaW50IHR5cGU7IC8qIERD
PTEsIEFDPTIsIFRSQU49MyAqLworfSBzcGVjdHJlX2FuYWx5c2lzOwogCiAKIGludCBpbml0aWFs
aXplKGNoYXIgKmZpbGVuYW1lKTsKQEAgLTY2LDEwICs3NCwxMSBAQAogZG91YmxlIHNjYWxldG8o
ZG91YmxlIHZhbHVlLCBkb3VibGUgaW5hLCBkb3VibGUgaW5iLCBkb3VibGUgb3V0YSwgZG91Ymxl
IG91dGIsIGludCBmb3JtYXQpOwogCiAKLQotCiBwYXJhbWV0ZXJzX2xpbmUgcGFyYW1ldGVyc1tN
QVhQQVJBTUVURVJTXTsgICAgICAgLyoqLwogbWVhc3VyZW1lbnRzX2xpbmUgbWVhc3VyZW1lbnRz
W01BWE1FQVNVUkVNRU5UU107IC8qKi8KK3NwZWN0cmVfYW5hbHlzaXMgYW5hbHlzaXNfbmFtZXNb
M107CisKKwogLyoKICAqIHRvIGtub3cgaWYgYW4gQUxURVIgYW5kL29yIE1DIHNpbXVsYXRpb24g
aXMgdG8gYmUgcGVyZm9ybWVkCiAgKiAwICAwICgwKSA9PiBub3RoaW5nCi0tLSB0bXAvYXNjby0w
LjQuNi9pbml0aWFsaXplLmMJMjAwNi0xMi0xOCAwMTo0ODozMy4wMDAwMDAwMDAgLTA4MDAKKysr
IGNvZGUvYXNjby9pbml0aWFsaXplLmMJMjAwOC0xMS0xNiAxMjo0OTozNS4wMDAwMDAwMDAgLTA4
MDAKQEAgLTEwOCw2ICsxMDgsMzEgQEAKIAogCiAKKy8qCisgKiBMb29rcyBpbiAic3RyZWFtIiBm
b3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgImtleSIgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVu
dCBzZWVrCisgKiBwb2ludC4gSWYgZm91bmQgIlJlc3VsdCIgY29udGFpbnMgdGhlIGxpbmUgd2hp
Y2ggaXMgJ1wwJyBvdGhlcndpc2UuCisgKi8KK3ZvaWQgUmVhZFN1YnN0cmluZ0tleShjaGFyICpS
ZXN1bHQsIGNoYXIgKmtleSwgRklMRSAqc3RyZWFtKQoreworICBjaGFyIGxrazFbTE9OR1NUUklO
R1NJWkVdOworICBjaGFyIFNUUjFbTE9OR1NUUklOR1NJWkVdOworICAKKyAgaW50IGtleV9sZW4g
PSBzdHJsZW4oa2V5KTsKKworICBmZ2V0czIobGtrMSwgTE9OR1NUUklOR1NJWkUsIHN0cmVhbSk7
CisKKyAgd2hpbGUgKChzdHJuY21wKChzcHJpbnRmKFNUUjEsICIlLipzIiwgKGludClzdHJsZW4o
a2V5KSwgbGtrMSksIFNUUjEpLCAKKwkJIGtleSwga2V5X2xlbikgIT0gMCkgJiAoIVBfZW9mKHN0
cmVhbSkpKQorICAgIGZnZXRzMihsa2sxLCBMT05HU1RSSU5HU0laRSwgc3RyZWFtKTsKKworICBp
ZiAoc3RybmNtcCgoc3ByaW50ZihTVFIxLCAiJS4qcyIsIChpbnQpc3RybGVuKGtleSksIGxrazEp
LCBTVFIxKSwgCisJICAgICAga2V5LCBrZXlfbGVuKSkKKyAgICBSZXN1bHRbMF09J1wwJzsKKyAg
ZWxzZQorICAgIHN0cmNweShSZXN1bHQsIGxrazEpOworfSAvKlJlYWRLZXkqLworCisKIAogLyoK
ICAqIHJlY2VpdmVzIGEgU1BJQ0Ugc3RyaW5nIGZyb20gdGhlIDxpbnB1dGZpbGU
+Liogd2l0aCAj
PHRleHQ
+IyBhbmQgcmVwbGFjZXMKQEAgLTIyMiwxMCArMjQ3LDE5IEBACiAJaW50IGksIGlpOwog
CWludCBjY29kZTsKIAljaGFyIGxhdXhbTE9OR1NUUklOR1NJWkVdLCBsYXV4MltTSE9SVFNUUklO
R1NJWkVdLCBob3N0bmFtZVtTSE9SVFNUUklOR1NJWkVdID0gIjAiOwotCisJY2hhciBsYXV4M1tM
T05HU1RSSU5HU0laRV0gPSAiMCI7CisJCiAJLyogICA8aW5wdXRmaWxlPi4qICAgPGlucHV0Zmls
ZT4uY2ZnIDxob3N0bmFtZT4udG1wIC9leHRyYWN0LzxmaWxlPiAqLwogCUZJTEUgKmZzcGljZV9z
b3VyY2UsICpmc3BpY2VfY2ZnLCAgICAqZnNwaWNlX3RtcCwgICAqZmV4dHJhY3Q7CiAKKworCWFu
YWx5c2lzX25hbWVzWzBdLnR5cGUgPSAxOworCWFuYWx5c2lzX25hbWVzWzBdLm5hbWVbMF0gPSAn
XDAnOyAKKwlhbmFseXNpc19uYW1lc1sxXS50eXBlID0gMjsKKwlhbmFseXNpc19uYW1lc1sxXS5u
YW1lWzBdID0gJ1wwJzsKKwlhbmFseXNpc19uYW1lc1syXS50eXBlID0gMzsKKwlhbmFseXNpc19u
YW1lc1syXS5uYW1lWzBdID0gJ1wwJzsKKwogCS8qKi8KIAkvKlN0ZXAxOiBPcHRpbWl6YXRpb24g
Rmxvdzogc2hvdWxkIEFsdGVyIGFuZC9vciBNb250ZUNhcmxvIGJlIGRvbmU/
Ki8KIAlzcHJpbnRm
KGxhdXgsICIlcyVzIiwgZmlsZW5hbWUsICIuY2ZnIik7CkBAIC0zMjEsNiArMzU1LDggQEAKIAkJ
CQlSZWFkU3ViS2V5KGxhdXgsIGxraywgJmlpLCAnOicsICc6JywgNSk7CiAJCQkJcGFyYW1ldGVy
c1tpXS5tYXhpbXVtPWFzYzJyZWFsKGxhdXgsIDEsIChpbnQpc3RybGVuKGxhdXgpKTsgLyptYXhp
bXVtICovCiAJCQkJaWYgKHBhcmFtZXRlcnNbaV0ubWluaW11bSA
+IHBhcmFtZXRlcnNbaV0ubWF4
aW11bSkgeyAvKmp1c3QgdG8gaGVscCovCisJCQkJICAgICAgICBwcmludGYoImluaXRpYWxpemUu
YyAtIFN0ZXAyIC0tIE1pbmltdW0gKCVmKSBpcyBsYXJnZXIgdGhhbiBNYXhpbXVtICglZikgaW4g
bGluZTogJXNcbiIsIAorCQkJCQkgICAgICAgcGFyYW1ldGVyc1tpXS5taW5pbXVtLCBwYXJhbWV0
ZXJzW2ldLm1heGltdW0sIGxrayk7CiAJCQkJCXByaW50ZigiaW5pdGlhbGl6ZS5jIC0gU3RlcDIg
LS0gTWluaW11bSBpcyBsYXJnZXIgdGhhbiBNYXhpbXVtIGluIGxpbmU6ICVzXG4iLCBsa2spOwog
CQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CiAJCQkJfQpAQCAtNTc5LDI1ICs2MTUsMzQgQEAKIAkJ
CQkJU3RyaXBTcGFjZXMobGF1eCk7ICAgICAgICAgICAvKmF2b2lkIHNwYWNlcyBhZnRlciB0aGUg
Y29tbWFuZCovCiAKIAkJCQkJaWYgKHN0cnBvczIobGF1eCwgIiBkYyAiLCAxKSkgewotCQkJCQkJ
ZnByaW50Zihmc3BpY2VfdG1wLCAiYWxpYXMgbWVhc3VyZW1lbnQgZGNfcnVuIHtcbiIpOwogCQkJ
CQkJaT1zdHJwb3MyKGxhdXgsICIgZGMgIiwgMSk7CiAJCQkJCQlzdHJzdWIobGF1eCwgbGtrLCAx
LCBpKTsKIAkJCQkJCVN0cmlwU3BhY2VzKGxhdXgpOwotCQkJCQkJZnByaW50Zihmc3BpY2VfdG1w
LCAicnVuICVzXG4iLCBsYXV4KTsKKwkJCQkJCWlmICggYW5hbHlzaXNfbmFtZXNbMF0ubmFtZVsw
XSAhPSAnXDAnICkgeyAKKwkJCQkJCSAgcHJpbnRmKCJpbml0aWFsaXplLmMgLSBTdGVwNC4xIC0g
b25seSBvbmUgREMgYW5hbHlzaXMgaXMgYWxsb3dlZC5cbiIpOworCQkJCQkJICBleGl0KEVYSVRf
RkFJTFVSRSk7CisJCQkJCQl9CisJCQkJCQlzdHJjcHkoYW5hbHlzaXNfbmFtZXNbMF0ubmFtZSwg
bGF1eCk7CiAJCQkJCX0KIAkJCQkJaWYgKHN0cnBvczIobGF1eCwgIiBhYyAiLCAxKSkgewotCQkJ
CQkJZnByaW50Zihmc3BpY2VfdG1wLCAiYWxpYXMgbWVhc3VyZW1lbnQgYWNfcnVuIHtcbiIpOwog
CQkJCQkJaT1zdHJwb3MyKGxhdXgsICIgYWMgIiwgMSk7CiAJCQkJCQlzdHJzdWIobGF1eCwgbGtr
LCAxLCBpKTsKIAkJCQkJCVN0cmlwU3BhY2VzKGxhdXgpOwotCQkJCQkJZnByaW50Zihmc3BpY2Vf
dG1wLCAicnVuICVzXG4iLCBsYXV4KTsKKwkJCQkJCWlmICggYW5hbHlzaXNfbmFtZXNbMV0ubmFt
ZVswXSAhPSAnXDAnICkgeyAKKwkJCQkJCSAgcHJpbnRmKCJpbml0aWFsaXplLmMgLSBTdGVwNC4x
IC0gb25seSBvbmUgQUMgYW5hbHlzaXMgaXMgYWxsb3dlZC5cbiIpOworCQkJCQkJICBleGl0KEVY
SVRfRkFJTFVSRSk7CisJCQkJCQl9CisJCQkJCQlzdHJjcHkoYW5hbHlzaXNfbmFtZXNbMV0ubmFt
ZSwgbGF1eCk7CiAJCQkJCX0KIAkJCQkJaWYgKHN0cnBvczIobGF1eCwgIiB0cmFuICIsIDEpKSB7
Ci0JCQkJCQlmcHJpbnRmKGZzcGljZV90bXAsICJhbGlhcyBtZWFzdXJlbWVudCB0cmFuX3J1biB7
XG4iKTsKIAkJCQkJCWk9c3RycG9zMihsYXV4LCAiIHRyYW4gIiwgMSk7CiAJCQkJCQlzdHJzdWIo
bGF1eCwgbGtrLCAxLCBpKTsKIAkJCQkJCVN0cmlwU3BhY2VzKGxhdXgpOwotCQkJCQkJZnByaW50
Zihmc3BpY2VfdG1wLCAicnVuICVzXG4iLCBsYXV4KTsKKwkJCQkJCWlmICggYW5hbHlzaXNfbmFt
ZXNbMl0ubmFtZVswXSAhPSAnXDAnICkgeyAKKwkJCQkJCSAgcHJpbnRmKCJpbml0aWFsaXplLmMg
LSBTdGVwNC4xIC0gb25seSBvbmUgVFJBTiBhbmFseXNpcyBpcyBhbGxvd2VkLlxuIik7CisJCQkJ
CQkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQkJCX0KKwkJCQkJCXN0cmNweShhbmFseXNpc19u
YW1lc1syXS5uYW1lLCBsYXV4KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTYyNCw4ICs2Njks
MzAgQEAKIAkJCXByaW50ZigiaW5pdGlhbGl6ZS5jIC0gU3RlcDQuMiAtLSBDYW5ub3QgZmluZCBt
ZWFzdXJlbWVudCBmaWxlOiAlc1xuIiwgbGtrKTsKIAkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKIAkJ
fQotCiAJCXN0cmNweShsYXV4LGxrayk7CisKKwkJLyogZmluZCB0aGUgYW5hbHlzaXMgdHlwZSBh
bmQgcHV0IGl0IGluIG1lYXN1cmVtZW50c1tpXS5hbmFseXNpc190eXBlICovIAorCQlSZWFkU3Vi
c3RyaW5nS2V5KGxhdXgzLCAiQW5hbHlzaXMgdHlwZToiLCBmZXh0cmFjdCk7IAorCQlpZiggc3Ry
cG9zMihsYXV4MywgIkFuYWx5c2lzIHR5cGU6IiwxKSApIHsKKwkJICBTdHIyTG93ZXIobGF1eDMp
OworCQkgIGlmICggc3RycG9zMihsYXV4MywiZGMiLDEpICkgeyAKKwkJICAgIG1lYXN1cmVtZW50
c1tpXS5hbmFseXNpc190eXBlID0gMTsKKwkJICB9CisJCSAgZWxzZSBpZiAoIHN0cnBvczIobGF1
eDMsImFjIiwxKSApIHsgCisJCSAgICBtZWFzdXJlbWVudHNbaV0uYW5hbHlzaXNfdHlwZSA9IDI7
CisJCSAgfQorCQkgIGVsc2UgaWYgKCBzdHJwb3MyKGxhdXgzLCJ0cmFuIiwxKSApIHsgCisJCSAg
ICBtZWFzdXJlbWVudHNbaV0uYW5hbHlzaXNfdHlwZSA9IDM7CisJCSAgfQorCQkgIGVsc2UgeyAK
KwkJICAgIHByaW50ZigiT25seSBEQywgQUMsIGFuZCBUUkFOIGFuYWx5c2lzIHR5cGVzIGFyZSBz
dXBwb3J0ZWQuXG4iKTsKKwkJICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJICB9CisJCX0KKwkJ
ZWxzZSB7IAorCQkgIHByaW50ZigiXCJBbmFseXNpcyB0eXBlOlwiIGxpbmUgbXVzdCBiZSBwcmVz
ZW50IGluIGV4dHJhY3QgZmlsZSFcbiIpOworCQkgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQog
CQlSZWFkS2V5KGxraywgIiMgQ29tbWFuZHMgIyIsIGZleHRyYWN0KTsKIAkJaWYgKHN0cmNtcChs
a2ssICIjIENvbW1hbmRzICMiKSkgeyAgICAgICAgICAgIC8qZmluZHMgIiMgQ29tbWFuZHMgIyIg
YW5kIHdyaXRlcyB0byA8aG9zdG5hbWU
+LnRtcCB1bnRpbCB0aGUgZW5kIG9mIGZpbGUqLwogCQkJ
cHJpbnRmKCJpbml0aWFsaXplLmMgLSBTdGVwNC4yIC0tIFdyb25nIGZvcm1hdCBpbiBmaWxlOiAl
c1xuIiwgbGF1eCk7CkBAIC02NDksNyArNzE2LDggQEAKICAgCQkJCWZwcmludGYoZnNwaWNlX3Rt
cCwgIiogJWkpIEV4dHJhY3QgXCclc1wnXG4iLCBpKzEsIGxrayk7CiAJCQkJYnJlYWs7CiAJCQlj
YXNlIDQ6IC8qU3BlY3RyZSovCi0gIAkJCQlmcHJpbnRmKGZzcGljZV90bXAsICIvLyAlaSkgRXh0
cmFjdCBcJyVzXCdcbiIsIGkrMSwgbGtrKTsKKwkJCSAgICAgICAgLyogaGFuZGxlIFNwZWN0cmUg
c2VwYXJhdGVseSAqLworICAJCQkJLyogZnByaW50Zihmc3BpY2VfdG1wLCAiLy8gJWkpIEV4dHJh
Y3QgXCclc1wnXG4iLCBpKzEsIGxrayk7ICovIAogCQkJCWJyZWFrOwogCQkJY2FzZSA1MDogLypR
dWNzKi8KICAgCQkJCWZwcmludGYoZnNwaWNlX3RtcCwgIiMgJWkpIEV4dHJhY3QgXCclc1wnXG4i
LCBpKzEsIGxrayk7CkBAIC02OTgsNyArNzY2LDggQEAKIAkJCQlEZWNvZGVTeW1ib2xOb2RlKGxr
aywgaSk7IC8qaGFzIHRvIHJlcGxhY2UgIzx0ZXh0PiMgaW4gdGhpcyBsaW5lKi8KIAkJCX0KIAkJ
CWlmIChsa2tbMF0hPScjJykgeyAvKmlmIGVuZCBvZiBibG9jayBoYXMgbm90IGJlZW4gcmVhY2hl
ZCovCi0JCQkJZnByaW50Zihmc3BpY2VfdG1wLCAiJXNcbiIsIGxrayk7IC8qIHdyaXRlcyB0byA8
aG9zdG5hbWU
+LnRtcCAqLworCQkJICBpZiAoIHNwaWNlICE9IDQgKSAvKiBoYW5kbGUgU3BlY3Ry
ZSB3cml0aW5nIHNlcGFyYXRlbHkgKi8gCisJCQkgICAgZnByaW50Zihmc3BpY2VfdG1wLCAiJXNc
biIsIGxrayk7IC8qIHdyaXRlcyB0byA8aG9zdG5hbWU
+LnRtcCAqLwogCQkJfQogCQkJZmdldHMy
KGxraywgTE9OR1NUUklOR1NJWkUsIGZleHRyYWN0KTsgLypyZWFkcyBmcm9tIGRpcmVjdG9yeSAi
ZXh0cmFjdC8iKi8KIAkJfQpAQCAtNzc2LDUzICs4NDUsNyBAQAogCQkJZnByaW50Zihmc3BpY2Vf
dG1wLCAiJXNcbiIsICIuZW5kIik7CiAJCQlicmVhazsKIAkJY2FzZSA0OiAvKlNwZWN0cmUqLwot
CS8qU3BlY2lhbCBjYXNlIHRvIGRlYWwgd2l0aCBTcGVjdHJlIE1ETCovCi0JCQljY29kZT0wOyAv
KiBhdCB0aGlzIG1vbW1lbnQsIG9ubHkgb25lIG1lYXN1cmVtZW50IGNhbiBleGlzdCBpbiB0aGUg
PGlucHV0ZmlsZT4uc2NzICovCi0JCQlmc2Vlayhmc3BpY2Vfc291cmNlLCAwLCBTRUVLX1NFVCk7
Ci0JCQlmcHJpbnRmKGZzcGljZV90bXAsICJ9XG5cbiIpOwotCQkJd2hpbGUgKCFQX2VvZihmc3Bp
Y2Vfc291cmNlKSkgewotCQkJCWZnZXRzMihsa2ssIExPTkdTVFJJTkdTSVpFLCBmc3BpY2Vfc291
cmNlKTsKLQkJCQlpZiAoIChsa2tbMF0gIT0gJyonKSAmJiAobGtrWzBdICE9ICdcMCcpICYmICgh
c3RycG9zMihsa2ssICIvLyIsIDEpKSApIHsKLQkJCQkJc3RyY3B5KGxhdXgsIGxrayk7ICAgICAg
ICAgICAvKmRldGVjdCAiVFJBTiIsICJ0cmFuIiwgIlRSYW4iLCAuLi4gKi8KLQkJCQkJU3RyMkxv
d2VyKGxhdXgpOwotCQkJCQlTdHJpcFNwYWNlcyhsYXV4KTsgICAgICAgICAgIC8qYXZvaWQgc3Bh
Y2VzIGFmdGVyIHRoZSBjb21tYW5kKi8KLQotCQkJCQlpZiAoc3RycG9zMihsYXV4LCAiIGRjICIs
IDEpKSB7Ci0JCQkJCQlpZiAoY2NvZGUhPTApIHsKLQkJCQkJCQlwcmludGYoImluaXRpYWxpemUu
YyAtIFN0ZXA0LjMgLS0gT25seSBvbmUgdHlwZSBvZiBzaW11bGF0aW9uIGlzIGltcGxlbWVtdGVk
IGF0IHRoaXMgdGltZSFcbiIpOwotCQkJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJCQkJCX0K
LQkJCQkJCWNjb2RlKys7Ci0JCQkJCQlpPXN0cnBvczIobGF1eCwgIiBkYyAiLCAxKTsKLQkJCQkJ
CXN0cnN1YihsYXV4LCBsa2ssIDEsIGkpOwotCQkJCQkJU3RyaXBTcGFjZXMobGF1eCk7Ci0JCQkJ
CQlmcHJpbnRmKGZzcGljZV90bXAsICJydW4gZGNfcnVuIGFzIGRjMVxuIik7Ci0JCQkJCX0KLQkJ
CQkJaWYgKHN0cnBvczIobGF1eCwgIiBhYyAiLCAxKSkgewotCQkJCQkJaWYgKGNjb2RlIT0wKSB7
Ci0JCQkJCQkJcHJpbnRmKCJpbml0aWFsaXplLmMgLSBTdGVwNC4zIC0tIE9ubHkgb25lIHR5cGUg
b2Ygc2ltdWxhdGlvbiBpcyBpbXBsZW1lbXRlZCBhdCB0aGlzIHRpbWUhXG4iKTsKLQkJCQkJCQll
eGl0KEVYSVRfRkFJTFVSRSk7Ci0JCQkJCQl9Ci0JCQkJCQljY29kZSsrOwotCQkJCQkJaT1zdHJw
b3MyKGxhdXgsICIgYWMgIiwgMSk7Ci0JCQkJCQlzdHJzdWIobGF1eCwgbGtrLCAxLCBpKTsKLQkJ
CQkJCVN0cmlwU3BhY2VzKGxhdXgpOwotCQkJCQkJZnByaW50Zihmc3BpY2VfdG1wLCAicnVuIGFj
X3J1biBhcyBhYzFcbiIpOwotCQkJCQl9Ci0JCQkJCWlmIChzdHJwb3MyKGxhdXgsICIgdHJhbiAi
LCAxKSkgewotCQkJCQkJaWYgKGNjb2RlIT0wKSB7Ci0JCQkJCQkJcHJpbnRmKCJpbml0aWFsaXpl
LmMgLSBTdGVwNC4zIC0tIE9ubHkgb25lIHR5cGUgb2Ygc2ltdWxhdGlvbiBpcyBpbXBsZW1lbXRl
ZCBhdCB0aGlzIHRpbWUhXG4iKTsKLQkJCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCQkJCQl9
Ci0JCQkJCQljY29kZSsrOwotCQkJCQkJaT1zdHJwb3MyKGxhdXgsICIgdHJhbiAiLCAxKTsKLQkJ
CQkJCXN0cnN1YihsYXV4LCBsa2ssIDEsIGkpOwotCQkJCQkJU3RyaXBTcGFjZXMobGF1eCk7Ci0J
CQkJCQlmcHJpbnRmKGZzcGljZV90bXAsICJydW4gdHJhbl9ydW4gYXMgdHJhbjFcbiIpOwotCQkJ
CQl9Ci0JCQkJfQotCQkJfQotCS8qU3BlY2lhbCBjYXNlIHRvIGRlYWwgd2l0aCBTcGVjdHJlIE1E
TCovCisJCSAgLyogaGFuZGxlIFNwZWN0cmUgTURMIHNlcGFyYXRlbHkgKi8KIAkJCWJyZWFrOwog
CQljYXNlIDUwOiAvKlF1Y3MqLwogCQkJYnJlYWs7CkBAIC04MzMsNiArODU2LDQyIEBACiAJCQll
eGl0KEVYSVRfRkFJTFVSRSk7CiAJfQogCisJaWYgKCBzcGljZSA9PSA0ICkgeyAvKiBTcGVjdHJl
LXNwZWNpZmljIHJvdXRpbmUuICovCisJICAvKiBHbyB0aHJvdWdoIGVhY2ggb2YgdGhlIGFuYWx5
c2lzX25hbWVzIGVsZW1lbnRzIGFuZCBvdXRwdXQgc3RhdGVtZW50cyBpZiB0aGUgYW5hbHlzaXNf
bmFtZXNbaV0ubmFtZSBpcyBub3QgbnVsbC4gKi8JICAKKwkgIC8qIE9ubHkgREMsIEFDLCBhbmQg
VFJBTiBhbmFseXNpcyBpcyBzdXBwb3J0ZWQsIGF0IG1vc3Qgb25lIG9mIGVhY2guICovCisJICBp
ZiAoIGFuYWx5c2lzX25hbWVzWzBdLm5hbWVbMF0gIT0gJ1wwJyApIHsgCisJICAgIGZwcmludGYo
ZnNwaWNlX3RtcCwgImFsaWFzIG1lYXN1cmVtZW50IGRjX3J1biB7XG4iKTsKKwkgICAgZnByaW50
Zihmc3BpY2VfdG1wLCAicnVuICVzXG4iLCBhbmFseXNpc19uYW1lc1swXS5uYW1lKTsKKwkgICAg
aWYgKFNwZWN0cmVNRExTdGF0ZW1lbnRzKGZzcGljZV90bXAsIDEpICE9IDApIHsKKwkgICAgICBw
cmludGYoIlByb2JsZW0gd2l0aCBTcGVjdHJlTURMU3RhdGVtZW50cygpLlxuIik7CisJICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOworCSAgICB9CisJICAgIGZwcmludGYoZnNwaWNlX3RtcCwgIn1c
biIpOworCSAgICBmcHJpbnRmKGZzcGljZV90bXAsICJydW4gZGNfcnVuIGFzIGRjMVxuXG4iKTsK
KwkgIH0KKwkgIGlmICggYW5hbHlzaXNfbmFtZXNbMV0ubmFtZVswXSAhPSAnXDAnICkgeyAKKwkg
ICAgZnByaW50Zihmc3BpY2VfdG1wLCAiYWxpYXMgbWVhc3VyZW1lbnQgYWNfcnVuIHtcbiIpOwor
CSAgICBmcHJpbnRmKGZzcGljZV90bXAsICJydW4gJXNcbiIsIGFuYWx5c2lzX25hbWVzWzFdLm5h
bWUpOworCSAgICBpZiAoU3BlY3RyZU1ETFN0YXRlbWVudHMoZnNwaWNlX3RtcCwgMikgIT0gMCkg
eworCSAgICAgIHByaW50ZigiUHJvYmxlbSB3aXRoIFNwZWN0cmVNRExTdGF0ZW1lbnRzKCkuXG4i
KTsKKwkgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisJICAgIH0KKwkgICAgZnByaW50Zihmc3Bp
Y2VfdG1wLCAifVxuIik7CisJICAgIGZwcmludGYoZnNwaWNlX3RtcCwgInJ1biBhY19ydW4gYXMg
YWMxXG5cbiIpOworCSAgICAKKwkgIH0KKwkgIGlmICggYW5hbHlzaXNfbmFtZXNbMl0ubmFtZVsw
XSAhPSAnXDAnICkgeyAKKwkgICAgZnByaW50Zihmc3BpY2VfdG1wLCAiYWxpYXMgbWVhc3VyZW1l
bnQgdHJhbl9ydW4ge1xuIik7CisJICAgIGZwcmludGYoZnNwaWNlX3RtcCwgInJ1biAlc1xuIiwg
YW5hbHlzaXNfbmFtZXNbMl0ubmFtZSk7CisJICAgIGlmIChTcGVjdHJlTURMU3RhdGVtZW50cyhm
c3BpY2VfdG1wLCAzKSAhPSAwKSB7CisJICAgICAgcHJpbnRmKCJQcm9ibGVtIHdpdGggU3BlY3Ry
ZU1ETFN0YXRlbWVudHMoKS5cbiIpOworCSAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKwkgICAg
fQorCSAgICBmcHJpbnRmKGZzcGljZV90bXAsICJ9XG4iKTsKKwkgICAgZnByaW50Zihmc3BpY2Vf
dG1wLCAicnVuIHRyYW5fcnVuIGFzIHRyYW4xXG4iKTsKKwkgIH0KKwl9CisJCiAJZmNsb3NlKGZz
cGljZV9zb3VyY2UpOwogCWZjbG9zZShmc3BpY2VfdG1wKTsKIApAQCAtODc2LDMgKzkzNSw2MyBA
QAogCS8qSW5pdGlhbGl6YXRpb243Ki8KIAlyZXR1cm4gRVhJVF9TVUNDRVNTOwogfQorCisvKgor
ICogIFRha2VzIHRoZSBNREwgZmlsZSBhdCBmc3BpY2VfdG1wIGFuZCB0aGUgYW5hbHlzaXMgdHlw
ZSwgdXNlcyBnbG9iYWwgCisgKiAgbWVhc3VyZW1lbnRzIGFycmF5IHRvIHdyaXRlIE1ETCBzdGF0
ZW1lbnRzIGZvciBhbmFseXNpc190eXBlLiAgCisgKiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwu
CisgKi8KKworaW50IFNwZWN0cmVNRExTdGF0ZW1lbnRzKEZJTEUgKmZzcGljZV90bXAsIGludCBh
bmFseXNpc190eXBlKSB7IAorICBpbnQgayA9IDA7CisgIGludCBpaSA9IDA7CisgIEZJTEUgKmZl
eHRyYWN0OworICBjaGFyIGxrazJbTE9OR1NUUklOR1NJWkVdLCBsYXV4MltMT05HU1RSSU5HU0la
RV07CisKKyAgd2hpbGUgKCBzdHJjbXAobWVhc3VyZW1lbnRzW2tdLm1lYXNfc3ltYm9sLCJcMCIp
ICkgeyAKKyAgICBpZiAobWVhc3VyZW1lbnRzW2tdLmFuYWx5c2lzX3R5cGUgPT0gYW5hbHlzaXNf
dHlwZSkgeyAKKyAgICAgIHNwcmludGYobGtrMiwgIiVpIiwgayk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiB0byByZW1vdmUgaW50ZWdlciBhZGRlZCBpbiAoKikg
Ki8KKyAgICAgIGlpPShpbnQpc3RybGVuKGxrazIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiB0byByZW1vdmUgaW50ZWdlciBhZGRlZCBpbiAoKikgKi8KKyAg
ICAgIHNwcmludGYobGtrMiwgIiVzJXMiLCAiZXh0cmFjdC8iLCBtZWFzdXJlbWVudHNba10ubWVh
c19zeW1ib2wpOyAvKiB0byByZW1vdmUgaW50ZWdlciBhZGRlZCBpbiAoKikgKi8KKyAgICAgIGxr
azJbKGludClzdHJsZW4obGtrMiktaWldPSdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogdG8gcmVtb3ZlIGludGVnZXIgYWRkZWQgaW4gKCopICovCisgICAgICBpZiAoKGZl
eHRyYWN0ID1mb3Blbihsa2syICwicnQiKSkgPT0gMCkgeworCXByaW50ZigiaW5pdGlhbGl6ZS5j
IC0gU3RlcDQuMiAtLSBDYW5ub3QgZmluZCBtZWFzdXJlbWVudCBmaWxlOiAlc1xuIiwgbGtrKTsK
KwlleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICBzdHJjcHkobGF1eDIsIGxrazIp
OworCisgICAgICBSZWFkS2V5KGxrazIsICIjIENvbW1hbmRzICMiLCBmZXh0cmFjdCk7CisgICAg
ICBpZiAoc3RyY21wKGxrazIsICIjIENvbW1hbmRzICMiKSkgeyAgICAgICAgICAgIC8qZmluZHMg
IiMgQ29tbWFuZHMgIyIgYW5kIHdyaXRlcyB0byA8aG9zdG5hbWU
+LnRtcCB1bnRpbCB0aGUgZW5k
IG9mIGZpbGUqLworCXByaW50ZigiaW5pdGlhbGl6ZS5jIC0gU3RlcDQuMiAtLSBXcm9uZyBmb3Jt
YXQgaW4gZmlsZTogJXMgLSBzdHJpbmcgcmV0dXJuZWQgaXMgXCIlc1wiLlxuIiwgbGF1eDIsIGxr
azIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKworICAgICAgc3ByaW50Zihsa2sy
LCAiJWkiLCBrKTsgICAgICAgICAgICAgICAgICAgIC8qIHRvIHJlbW92ZSBpbnRlZ2VyIGFkZGVk
IGluICgqKSAqLworICAgICAgaWk9KGludClzdHJsZW4obGtrMik7ICAgICAgICAgICAgICAgICAg
ICAgIC8qIHRvIHJlbW92ZSBpbnRlZ2VyIGFkZGVkIGluICgqKSAqLworICAgICAgc3RyY3B5KGxr
azIsIG1lYXN1cmVtZW50c1trXS5tZWFzX3N5bWJvbCk7IC8qIHRvIHJlbW92ZSBpbnRlZ2VyIGFk
ZGVkIGluICgqKSAqLworICAgICAgbGtrMlsoaW50KXN0cmxlbihsa2syKS1paV09J1wwJzsgICAg
ICAgICAgICAvKiB0byByZW1vdmUgaW50ZWdlciBhZGRlZCBpbiAoKikgKi8KKworICAgICAgZnBy
aW50Zihmc3BpY2VfdG1wLCAiLy8gJWkpIEV4dHJhY3QgXCclc1wnXG4iLCBrKzEsIGxrazIpOwor
CisgICAgICBmZ2V0czIobGtrMiwgTE9OR1NUUklOR1NJWkUsIGZleHRyYWN0KTsgLyogcmVhZHMg
ZnJvbSBkaXJlY3RvcnkgImV4dHJhY3QvIiAqLworICAgICAgd2hpbGUgKChsa2syWzBdICE9ICcj
JykgJiYgKGxrazJbMF0gIT0gJ1wwJykgJiYgKCFmZW9mKGZleHRyYWN0KSkpIHsKKwlpaT0xOwor
CVJlYWRTdWJLZXkobGF1eDIsIGxrazIsICZpaSwgJyMnLCAnIycsIDApOworCWlmIChsYXV4Mlsw
XSE9J1wwJykgeworCSAgRGVjb2RlU3ltYm9sTm9kZShsa2syLCBrKTsgLypoYXMgdG8gcmVwbGFj
ZSAjPHRleHQ
+IyBpbiB0aGlzIGxpbmUqLworCX0KKwlpZiAobGtrMlswXSE9JyMnKSB7IC8qaWYg
ZW5kIG9mIGJsb2NrIGhhcyBub3QgYmVlbiByZWFjaGVkKi8KKwkgIC8vIHByaW50ZigibGtrMiBp
cyBcIiVzXCJcbiIsIGxrazIpOworCSAgZnByaW50Zihmc3BpY2VfdG1wLCAiJXNcbiIsIGxrazIp
OyAvKiB3cml0ZXMgdG8gPGhvc3RuYW1lPi50bXAgKi8KKwkgIC8vIGZwcmludGYoZnNwaWNlX3Rt
cCwgIlxuIik7CisJfQorCWZnZXRzMihsa2syLCBMT05HU1RSSU5HU0laRSwgZmV4dHJhY3QpOyAv
KnJlYWRzIGZyb20gZGlyZWN0b3J5ICJleHRyYWN0LyIqLworICAgICAgfQorICAgICAgZmNsb3Nl
KGZleHRyYWN0KTsKKyAgICB9CisgICAgaysrOworICB9CisgIHJldHVybiAwOworfQorCisK


0 new messages