Terminal color scheme

exchange service <[email protected]> Sat, 11 Apr 2009 01:54:50 +0600
Newsgroups gmane.os.openbeos.preferences
Message-ID <[email protected]>
--0016e640d0f6d1f790046738bc54
Content-Type: multipart/alternative; boundary=0016e640d0f6d1f788046738bc52

--0016e640d0f6d1f788046738bc52
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Greet.
How about change default color scheme on something more beauty ?

Here my little patch with nice color solution.

GL.

--0016e640d0f6d1f788046738bc52
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Greet.<br>How about change default color scheme on something more beauty ?<br><br>Here my little patch with nice color solution.<br><br>GL.<br>

--0016e640d0f6d1f788046738bc52--
--0016e640d0f6d1f790046738bc54
Content-Type: application/octet-stream; name="PrefHandler.cpp"
Content-Disposition: attachment; filename="PrefHandler.cpp"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ftdanqot0

LyoKICogQ29weXJpZ2h0IDIwMDMtMjAwOSwgSGFpa3UsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICogQ29weXJpZ2h0IChjKSAyMDA0IERhbmllbCBGdXJyZXIgPGFzc2ltaWw4b3JAdXNlcnMu
c291cmNlZm9yZ2UubmV0PgogKiBDb3B5cmlnaHQgKGMpIDIwMDMtNCBLaWFuIER1ZmZ5IDxteW9i
QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICogQ29weXJpZ2h0IChjKSAxOTk4LDk5IEthenVobyBP
a3VpIGFuZCBUYWthc2hpIE11cmFpLiAKICoKICogRGlzdHJpYnV0ZWQgdW50ZXIgdGhlIHRlcm1z
IG9mIHRoZSBNSVQgTGljZW5zZS4KICovCgoKI2luY2x1ZGUgIkNvZGluZy5oIgojaW5jbHVkZSAi
UHJlZkhhbmRsZXIuaCIKI2luY2x1ZGUgIlRlcm1Db25zdC5oIgoKI2luY2x1ZGUgPERpcmVjdG9y
eS5oPgojaW5jbHVkZSA8RW50cnkuaD4KI2luY2x1ZGUgPEZpbGUuaD4KI2luY2x1ZGUgPEZpbmRE
aXJlY3RvcnkuaD4KI2luY2x1ZGUgPEZvbnQuaD4KI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5oPgoj
aW5jbHVkZSA8TWVzc2FnZS5oPgojaW5jbHVkZSA8Tm9kZUluZm8uaD4KI2luY2x1ZGUgPFBhdGgu
aD4KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRs
aWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLyoKICogU3RhcnR1cCBwcmVmZXJlbmNlIHNldHRp
bmdzLgogKi8Kc3RhdGljIGNvbnN0IHByZWZfZGVmYXVsdHMga1Rlcm1EZWZhdWx0c1tdID0gewoJ
eyBQUkVGX0NPTFMsCQkJCSI4MCIgfSwKCXsgUFJFRl9ST1dTLAkJCQkiMjUiIH0sCgoJeyBQUkVG
X0hBTEZfRk9OVF9GQU1JTFksCSJDb3VyaWVyMTAgQlQiIH0sCgl7IFBSRUZfSEFMRl9GT05UX1NJ
WkUsCQkiMTIiIH0sCgoJeyBQUkVGX1RFWFRfRk9SRV9DT0xPUiwJCSIgIDAsICAgMCwgICAwIiB9
LAoJeyBQUkVGX1RFWFRfQkFDS19DT0xPUiwJCSIyMjAsIDIyMCwgMjIwIiB9LAoJeyBQUkVGX1NF
TEVDVF9GT1JFX0NPTE9SLAkiICAwLCAgNzUsIDI1NSIgfSwKCXsgUFJFRl9TRUxFQ1RfQkFDS19D
T0xPUiwJIjE3MCwgMTcwLCAxNzAiIH0sCgl7IFBSRUZfQ1VSU09SX0ZPUkVfQ09MT1IsCSIyNTUs
IDI1NSwgMjU1IiB9LAoJeyBQUkVGX0NVUlNPUl9CQUNLX0NPTE9SLAkiMTI1LCAxMjUsIDEyNSIg
fSwKCgl7IFBSRUZfSU1fRk9SRV9DT0xPUiwJCSIgIDAsICAgMCwgICAwIiB9LAoJeyBQUkVGX0lN
X0JBQ0tfQ09MT1IsCQkiMTUyLCAyMDMsIDI1NSIgfSwKCXsgUFJFRl9JTV9TRUxFQ1RfQ09MT1Is
CQkiMjU1LCAxNTIsIDE1MiIgfSwKCgl7IFBSRUZfU0hFTEwsCQkJCSIvYmluL3NoIC1sb2dpbiIg
fSwKCXsgUFJFRl9ISVNUT1JZX1NJWkUsCQkiMTAwMDAiIH0sCgoJeyBQUkVGX1RFWFRfRU5DT0RJ
TkcsCQkiVVRGLTgiIH0sCgoJeyBQUkVGX0dVSV9MQU5HVUFHRSwJCSJFbmdsaXNoIn0sCgl7IFBS
RUZfSU1fQVdBUkUsCQkJIjAifSwKCXsgTlVMTCwgTlVMTH0sCn07CgoKUHJlZkhhbmRsZXIgKlBy
ZWZIYW5kbGVyOjpzUHJlZkhhbmRsZXIgPSBOVUxMOwoKClByZWZIYW5kbGVyOjpQcmVmSGFuZGxl
cigpCgk6CglmQ29udGFpbmVyKCdQcmVmJykKewoJX0xvYWRGcm9tRGVmYXVsdChrVGVybURlZmF1
bHRzKTsKCglCUGF0aCBwYXRoOwoJR2V0RGVmYXVsdFBhdGgocGF0aCk7CglPcGVuVGV4dChwYXRo
LlBhdGgoKSk7CgoJX0NvbmZpcm1Gb250KFBSRUZfSEFMRl9GT05UX0ZBTUlMWSwgYmVfZml4ZWRf
Zm9udCk7Cn0KCgpQcmVmSGFuZGxlcjo6UHJlZkhhbmRsZXIoY29uc3QgUHJlZkhhbmRsZXIqIHAp
CnsKCWZDb250YWluZXIgPSBwLT5mQ29udGFpbmVyOwp9CgoKUHJlZkhhbmRsZXI6On5QcmVmSGFu
ZGxlcigpCnsKfQoKCi8qIHN0YXRpYyAqLwpQcmVmSGFuZGxlciAqClByZWZIYW5kbGVyOjpEZWZh
dWx0KCkKewoJaWYgKHNQcmVmSGFuZGxlciA9PSBOVUxMKQoJCXNQcmVmSGFuZGxlciA9IG5ldyBQ
cmVmSGFuZGxlcigpOwoJcmV0dXJuIHNQcmVmSGFuZGxlcjsKfQoKCi8qIHN0YXRpYyAqLwp2b2lk
ClByZWZIYW5kbGVyOjpEZWxldGVEZWZhdWx0KCkKewoJZGVsZXRlIHNQcmVmSGFuZGxlcjsKCXNQ
cmVmSGFuZGxlciA9IE5VTEw7Cn0KCgovKiBzdGF0aWMgKi8Kdm9pZApQcmVmSGFuZGxlcjo6U2V0
RGVmYXVsdChQcmVmSGFuZGxlciAqcHJlZkhhbmRsZXIpCnsKCURlbGV0ZURlZmF1bHQoKTsKCXNQ
cmVmSGFuZGxlciA9IHByZWZIYW5kbGVyOwp9CgoKLyogc3RhdGljICovCnN0YXR1c190ClByZWZI
YW5kbGVyOjpHZXREZWZhdWx0UGF0aChCUGF0aCYgcGF0aCkKewoJaWYgKGZpbmRfZGlyZWN0b3J5
KEJfVVNFUl9TRVRUSU5HU19ESVJFQ1RPUlksICZwYXRoLCB0cnVlKSAhPSBCX09LKQoJCXJldHVy
biBCX0VSUk9SOwoKI2lmZGVmIEhBSUtVX1RBUkdFVF9QTEFURk9STV9IQUlLVQoJcGF0aC5BcHBl
bmQoIlRlcm1pbmFsX3NldHRpbmdzIik7CiNlbHNlCglwYXRoLkFwcGVuZCgiSGFpa3VUZXJtaW5h
bF9zZXR0aW5ncyIpOwojZW5kaWYKCglyZXR1cm4gQl9PSzsKfQoKCnN0YXR1c190ClByZWZIYW5k
bGVyOjpPcGVuKGNvbnN0IGNoYXIgKnBhdGgpCnsKCXJldHVybiBfTG9hZEZyb21GaWxlKHBhdGgp
Owp9CgoKc3RhdHVzX3QKUHJlZkhhbmRsZXI6Ok9wZW5UZXh0KGNvbnN0IGNoYXIgKnBhdGgpCnsK
CXJldHVybiBfTG9hZEZyb21UZXh0RmlsZShwYXRoKTsKfQoKCnN0YXR1c190ClByZWZIYW5kbGVy
OjpTYXZlKGNvbnN0IGNoYXIgKnBhdGgpCnsKCS8vIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHBhdGgg
ZXhpc3RzCiNpZiAwCgkvLyBUT0RPOiBjdXJyZW50bHkgbm90IG5lZWRlZCBhcyB3ZSdyZSByZXVz
aW5nIHRoZSBzdGFuZGFyZCBkaXJlY3RvcnkKCUJQYXRoIGRpcmVjdG9yeVBhdGgocGF0aCk7Cglp
ZiAoZGlyZWN0b3J5UGF0aC5HZXRQYXJlbnQoJmRpcmVjdG9yeVBhdGgpID09IEJfT0spCgkJY3Jl
YXRlX2RpcmVjdG9yeShkaXJlY3RvcnlQYXRoLlBhdGgoKSwgMDc1NSk7CiNlbmRpZgoKCUJGaWxl
IGZpbGUocGF0aCwgQl9XUklURV9PTkxZIHwgQl9DUkVBVEVfRklMRSB8IEJfRVJBU0VfRklMRSk7
CglyZXR1cm4gZkNvbnRhaW5lci5GbGF0dGVuKCZmaWxlKTsKfQoKCnZvaWQKUHJlZkhhbmRsZXI6
OlNhdmVBc1RleHQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbWltZXR5cGUsCgljb25z
dCBjaGFyICpzaWduYXR1cmUpCnsKCS8vIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHBhdGggZXhpc3Rz
CiNpZiAwCglCUGF0aCBkaXJlY3RvcnlQYXRoKHBhdGgpOwoJaWYgKGRpcmVjdG9yeVBhdGguR2V0
UGFyZW50KCZkaXJlY3RvcnlQYXRoKSA9PSBCX09LKQoJCWNyZWF0ZV9kaXJlY3RvcnkoZGlyZWN0
b3J5UGF0aC5QYXRoKCksIDA3NTUpOwojZW5kaWYKCglCRmlsZSBmaWxlKHBhdGgsIEJfV1JJVEVf
T05MWSB8IEJfQ1JFQVRFX0ZJTEUgfCBCX0VSQVNFX0ZJTEUpOwoJY2hhciBidWZmZXJbNTEyXTsK
CXR5cGVfY29kZSB0eXBlOwoJY29uc3QgY2hhciAqa2V5OwoKCWZvciAoaW50MzIgaSA9IDA7CiNp
ZmRlZiBCX0JFT1NfVkVSU0lPTl9EQU5PCgkJCWZDb250YWluZXIuR2V0SW5mbyhCX1NUUklOR19U
WVBFLCBpLCAma2V5LCAmdHlwZSkgPT0gQl9PSzsKI2Vsc2UKCQkJZkNvbnRhaW5lci5HZXRJbmZv
KEJfU1RSSU5HX1RZUEUsIGksIChjaGFyKiopJmtleSwgJnR5cGUpID09IEJfT0s7CiNlbmRpZgoJ
CQlpKyspIHsKCQlpbnQgbGVuID0gc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIlwi
JXNcIiAsIFwiJXNcIlxuIiwga2V5LCBnZXRTdHJpbmcoa2V5KSk7CgkJZmlsZS5Xcml0ZShidWZm
ZXIsIGxlbik7Cgl9CgoJaWYgKG1pbWV0eXBlICE9IE5VTEwpewoJCUJOb2RlSW5mbyBpbmZvKCZm
aWxlKTsKCQlpbmZvLlNldFR5cGUobWltZXR5cGUpOwoJCWluZm8uU2V0UHJlZmVycmVkQXBwKHNp
Z25hdHVyZSk7Cgl9Cn0KCgppbnQzMiAKUHJlZkhhbmRsZXI6OmdldEludDMyKGNvbnN0IGNoYXIg
KmtleSkKewoJY29uc3QgY2hhciAqdmFsdWUgPSBmQ29udGFpbmVyLkZpbmRTdHJpbmcoa2V5KTsK
CWlmICh2YWx1ZSA9PSBOVUxMKQoJCXJldHVybiAwOwoKCXJldHVybiBhdG9pKHZhbHVlKTsKfQoK
CmZsb2F0IApQcmVmSGFuZGxlcjo6Z2V0RmxvYXQoY29uc3QgY2hhciAqa2V5KQp7Cgljb25zdCBj
aGFyICp2YWx1ZSA9IGZDb250YWluZXIuRmluZFN0cmluZyhrZXkpOwoJaWYgKHZhbHVlID09IE5V
TEwpCgkJcmV0dXJuIDA7CgoJcmV0dXJuIGF0b2YodmFsdWUpOwp9CgoKY29uc3QgY2hhciogClBy
ZWZIYW5kbGVyOjpnZXRTdHJpbmcoY29uc3QgY2hhciAqa2V5KQp7Cgljb25zdCBjaGFyICpidWZm
ZXI7CglpZiAoZkNvbnRhaW5lci5GaW5kU3RyaW5nKGtleSwgJmJ1ZmZlcikgIT0gQl9PSykKCQli
dWZmZXIgPSAiRXJyb3IhIjsKCgkvL3ByaW50ZigiJXggR0VUICVzOiAlc1xuIiwgdGhpcywga2V5
LCBidWYpOwoJcmV0dXJuIGJ1ZmZlcjsKfQoKCmJvb2wKUHJlZkhhbmRsZXI6OmdldEJvb2woY29u
c3QgY2hhciAqa2V5KQp7Cgljb25zdCBjaGFyICp2YWx1ZSA9IGZDb250YWluZXIuRmluZFN0cmlu
ZyhrZXkpOwoJaWYgKHZhbHVlID09IE5VTEwpCgkJcmV0dXJuIGZhbHNlOwoKCXJldHVybiAhc3Ry
Y21wKHZhbHVlLCBQUkVGX1RSVUUpOwp9CgoKLyoqIFJldHVybnMgUkdCIGRhdGEgZnJvbSBnaXZl
biBrZXkuICovCgpyZ2JfY29sb3IKUHJlZkhhbmRsZXI6OmdldFJHQihjb25zdCBjaGFyICprZXkp
CnsKCXJnYl9jb2xvciBjb2w7CglpbnQgciwgZywgYjsKCglpZiAoY29uc3QgY2hhciAqcyA9IGZD
b250YWluZXIuRmluZFN0cmluZyhrZXkpKSB7CgkJc3NjYW5mKHMsICIlZCwgJWQsICVkIiwgJnIs
ICZnLCAmYik7Cgl9IGVsc2UgewoJCWZwcmludGYoc3RkZXJyLCAiUHJlZkhhbmRsZXI6OmdldFJH
QiglcykgLSBrZXkgbm90IGZvdW5kXG4iLCBrZXkpOwoJCXIgPSBnID0gYiA9IDA7Cgl9CgoJY29s
LnJlZCA9IHI7Cgljb2wuZ3JlZW4gPSBnOwoJY29sLmJsdWUgPSBiOwoJY29sLmFscGhhID0gMjU1
OwoJcmV0dXJuIGNvbDsKfQoKCi8qKiBTZXR0aW5nIEludDMyIGRhdGEgd2l0aCBrZXkuICovCgp2
b2lkClByZWZIYW5kbGVyOjpzZXRJbnQzMihjb25zdCBjaGFyICprZXksIGludDMyIGRhdGEpCnsK
CWNoYXIgYnVmZmVyWzMyXTsKCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIs
IChpbnQpZGF0YSk7CglzZXRTdHJpbmcoa2V5LCBidWZmZXIpOwp9CgoKLyoqIFNldHRpbmcgRmxv
YXQgZGF0YSB3aXRoIGtleSAqLwoKdm9pZApQcmVmSGFuZGxlcjo6c2V0RmxvYXQoY29uc3QgY2hh
ciAqa2V5LCBmbG9hdCBkYXRhKQp7CgljaGFyIGJ1ZmZlclszMl07CglzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJWciLCBkYXRhKTsKCXNldFN0cmluZyhrZXksIGJ1ZmZlcik7Cn0K
CgovKiogU2V0dGluZyBCb29sIGRhdGEgd2l0aCBrZXkgKi8KCnZvaWQKUHJlZkhhbmRsZXI6OnNl
dEJvb2woY29uc3QgY2hhciAqa2V5LCBib29sIGRhdGEpCnsKCWlmIChkYXRhKQoJCXNldFN0cmlu
ZyhrZXksIFBSRUZfVFJVRSk7CgllbHNlCgkJc2V0U3RyaW5nKGtleSwgUFJFRl9GQUxTRSk7Cn0K
CgovKiogU2V0dGluZyBDU3RyaW5nIGRhdGEgd2l0aCBrZXkgKi8KCnZvaWQKUHJlZkhhbmRsZXI6
OnNldFN0cmluZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmRhdGEpCnsKCS8vcHJpbnRm
KCIleCBTRVQgJXM6ICVzXG4iLCB0aGlzLCBrZXksIGRhdGEpOwoJZkNvbnRhaW5lci5SZW1vdmVO
YW1lKGtleSk7CglmQ29udGFpbmVyLkFkZFN0cmluZyhrZXksIGRhdGEpOwp9CgoKLyoqIFNldHRp
bmcgUkdCIGRhdGEgd2l0aCBrZXkgKi8KCnZvaWQKUHJlZkhhbmRsZXI6OnNldFJHQihjb25zdCBj
aGFyICprZXksIGNvbnN0IHJnYl9jb2xvciBkYXRhKQp7CgljaGFyIGJ1ZmZlclszMl07CglzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQsICVkLCAlZCIsIGRhdGEucmVkLCBkYXRh
LmdyZWVuLCBkYXRhLmJsdWUpOwoJc2V0U3RyaW5nKGtleSwgYnVmZmVyKTsKfQoKCi8qKiBDaGVj
ayBhbnkgcGVmZXJlbmNlIHN0b3JlZCBvciBub3QuICovCgpib29sClByZWZIYW5kbGVyOjpJc0Vt
cHR5KCkgY29uc3QKewoJcmV0dXJuIGZDb250YWluZXIuSXNFbXB0eSgpOwp9CgoKdm9pZApQcmVm
SGFuZGxlcjo6X0NvbmZpcm1Gb250KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgQkZvbnQgKmZhbGxi
YWNrKQp7CglpbnQzMiBjb3VudCA9IGNvdW50X2ZvbnRfZmFtaWxpZXMoKTsKCWNvbnN0IGNoYXIg
KmZvbnQgPSBnZXRTdHJpbmcoa2V5KTsKCWlmIChmb250ID09IE5VTEwpCgkJY291bnQgPSAwOwoK
CWZvbnRfZmFtaWx5IGZhbWlseTsKCglmb3IgKGludDMyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
ewoJCWlmIChnZXRfZm9udF9mYW1pbHkoaSwgJmZhbWlseSkgIT0gQl9PSykKCQkJY29udGludWU7
CgoJCWlmICghc3RyY21wKGZhbWlseSwgZm9udCkpIHsKCQkJLy8gZm91bmQgZm9udCBmYW1pbHk6
IHdlIGNhbiBzYWZlbHkgdXNlIHRoaXMgZm9udAoJCQlyZXR1cm47CgkJfQoJfQoKCS8vIHVzZSBm
YWxsLWJhY2sgZm9udAoKCWZhbGxiYWNrLT5HZXRGYW1pbHlBbmRTdHlsZSgmZmFtaWx5LCBOVUxM
KTsKCXNldFN0cmluZyhrZXksIGZhbWlseSk7Cn0KCgpzdGF0dXNfdApQcmVmSGFuZGxlcjo6X0xv
YWRGcm9tRmlsZShjb25zdCBjaGFyKiBwYXRoKQp7CgkvLyBGdXR1cmU6IEl0IHdvdWxkIGJlIG5p
Y2UgaWYgd2UgY291bGQgc2ltcGx5IHVzZSBhIGZsYXRlbmVkIEJNZXNzYWdlIHRvCgkvLyBzYXZl
IHRoZSBzZXR0aW5ncy4gKFdobyBjYXJlcyBhYm91dCBjb21wYXRpYmlsaXR5IGluIHRoaXMgY2Fz
ZSBhbnl3YXk/KQoKCUJGaWxlIGZpbGUocGF0aCwgQl9SRUFEX09OTFkpOwoJc3RhdHVzX3Qgc3Rh
dHVzID0gZmlsZS5Jbml0Q2hlY2soKTsKCWlmIChzdGF0dXMgIT0gQl9PSykKCQlyZXR1cm4gc3Rh
dHVzOwoKCS8vZkNvbnRhaW5lci5NYWtlRW1wdHkoKTsKCS8vZkNvbnRhaW5lci5VbmZsYXR0ZW4o
JmZpbGUpOwoKCW9mZl90IHNpemU7CglpZiAoZmlsZS5HZXRTaXplKCZzaXplKSAhPSBCX09LIHx8
IHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB0ZXJtcHJlZnMpKQoJCXJldHVybiBCX0VSUk9SOwoKCXN0
cnVjdCB0ZXJtcHJlZnMgcHJlZnM7CglmaWxlLlJlYWQoJnByZWZzLCBzaXplKTsKCWlmIChwcmVm
cy5tYWdpYyAhPSBUUF9NQUdJQyB8fCBwcmVmcy52ZXJzaW9uICE9IFRQX1ZFUlNJT04pCgkJcmV0
dXJuIEJfRVJST1I7CgoJLy8gVmFsaWQgc2V0dGluZ3MgZmlsZSEKCglzZXRJbnQzMihQUkVGX0NP
TFMsIHByZWZzLmNvbHMpOwoJc2V0SW50MzIoUFJFRl9ST1dTLCBwcmVmcy5yb3dzKTsKCXNldElu
dDMyKFBSRUZfSEFMRl9GT05UX1NJWkUsIHByZWZzLmZvbnRfc2l6ZSk7CgljaGFyICpmb250X2Zh
bWlseSA9IHN0cnRvayhwcmVmcy5mb250LCAiLyIpOwoJY2hhciAqZm9udF9zdHlsZSA9IHN0cnRv
ayhOVUxMLCAiIik7CglzZXRTdHJpbmcoUFJFRl9IQUxGX0ZPTlRfRkFNSUxZLCBmb250X2ZhbWls
eSk7CglzZXRTdHJpbmcoUFJFRl9IQUxGX0ZPTlRfU1RZTEUsIGZvbnRfc3R5bGUpOwoJc2V0UkdC
KFBSRUZfVEVYVF9CQUNLX0NPTE9SLCBwcmVmcy5iZyk7CglzZXRSR0IoUFJFRl9URVhUX0ZPUkVf
Q09MT1IsIHByZWZzLmZnKTsKCXNldFJHQihQUkVGX0NVUlNPUl9CQUNLX0NPTE9SLCBwcmVmcy5j
dXJiZyk7CglzZXRSR0IoUFJFRl9DVVJTT1JfRk9SRV9DT0xPUiwgcHJlZnMuY3VyZmcpOwoJc2V0
UkdCKFBSRUZfU0VMRUNUX0JBQ0tfQ09MT1IsIHByZWZzLnNlbGJnKTsKCXNldFJHQihQUkVGX1NF
TEVDVF9GT1JFX0NPTE9SLCBwcmVmcy5zZWxmZyk7CglzZXRTdHJpbmcoUFJFRl9URVhUX0VOQ09E
SU5HLCBFbmNvZGluZ0FzU3RyaW5nKHByZWZzLmVuY29kaW5nKSk7CgoJcmV0dXJuIEJfT0s7Cn0K
CgpzdGF0dXNfdApQcmVmSGFuZGxlcjo6X0xvYWRGcm9tRGVmYXVsdChjb25zdCBwcmVmX2RlZmF1
bHRzKiBkZWZhdWx0cykKewoJaWYgKGRlZmF1bHRzID09IE5VTEwpCgkJcmV0dXJuIEJfRVJST1I7
CgoJd2hpbGUgKGRlZmF1bHRzLT5rZXkpIHsKCQlzZXRTdHJpbmcoZGVmYXVsdHMtPmtleSwgZGVm
YXVsdHMtPml0ZW0pOwoJCSsrZGVmYXVsdHM7Cgl9CgoJcmV0dXJuIEJfT0s7Cn0KCgovKioJVGV4
dCBpcyAia2V5IiwiQ29udGVudCIKICoJQ29tbWVudCA6IFN0YXJ0IHdpdGggJyMnCiAqLwoKc3Rh
dHVzX3QKUHJlZkhhbmRsZXI6Ol9Mb2FkRnJvbVRleHRGaWxlKGNvbnN0IGNoYXIgKiBwYXRoKQp7
CgljaGFyIGJ1ZmZlclsxMDI0XTsKCWNoYXIga2V5W0JfRklFTERfTkFNRV9MRU5HVEhdLCBkYXRh
WzUxMl07CglpbnQgbjsKCUZJTEUgKmZpbGU7CgoJZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7Cglp
ZiAoZmlsZSA9PSBOVUxMKQoJCXJldHVybiBCX0VOVFJZX05PVF9GT1VORDsKCgl3aGlsZSAoZmdl
dHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZmlsZSkgIT0gTlVMTCkgewoJCWlmICgqYnVmZmVy
ID09ICcjJykKCQkJY29udGludWU7CgoJCW4gPSBzc2NhbmYoYnVmZmVyLCAiJSpbXCJdJVteXCJd
JSpbXCJdJSpbXlwiXSUqW1wiXSVbXlwiXSIsIGtleSwgZGF0YSk7CgkJaWYgKG4gPT0gMikKCQkJ
c2V0U3RyaW5nKGtleSwgZGF0YSk7Cgl9CgoJZmNsb3NlKGZpbGUpOwoJcmV0dXJuIEJfT0s7Cn0K
--0016e640d0f6d1f790046738bc54--