Issue #4257 has been updated by tadayoshi funaba.

File switch_hitter.patch4 added

i'm planning to apply this change within a couple of weeks.
----------------------------------------
http://redmine.ruby-lang.org/issues/show/4257

----------------------------------------
http://redmine.ruby-lang.org
SW5kZXg6IGxpYi9kYXRlLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGxpYi9kYXRlLnJiCShyZXZpc2lvbiAzMDg1NikKKysrIGxpYi9kYXRlLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogIwotIyBkYXRlLnJi
IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CisjIGRhdGUucmIgPHN3aXRjaF9o
aXR0ZXI+IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CiAjCiAjIEF1dGhvcjog
VGFkYXlvc2hpIEZ1bmFiYSAxOTk4LTIwMTEKICMKQEAgLTI4MCw2ICsyODAs
MTUgQEAKICAgICAgIGVuZAogICAgIGVuZAogCisgICAgZGVmIHRvX2YKKyAg
ICAgIHJldHVybiAwIGlmIEBkID09IDAKKyAgICAgIGlmIEBkID4gMAorCUZs
b2F0OjpJTkZJTklUWQorICAgICAgZWxzZQorCS1GbG9hdDo6SU5GSU5JVFkK
KyAgICAgIGVuZAorICAgIGVuZAorCiAgIGVuZAogCiAgICMgVGhlIEp1bGlh
biBEYXkgTnVtYmVyIG9mIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtIGZv
ciBJdGFseQpAQCAtNDQzLDggKzQ1MiwxNCBAQAogICAgICMgW2NvbW1lcmNp
YWxfeWVhciwgd2Vla19vZl95ZWFyLCBkYXlfb2Zfd2Vla10KICAgICBkZWYg
amRfdG9fY29tbWVyY2lhbChqZCwgc2c9R1JFR09SSUFOKSAjIDpub2RvYzoK
ICAgICAgIGEgPSBqZF90b19jaXZpbChqZCAtIDMsIHNnKVswXQotICAgICAg
eSA9IGlmIGpkID49IGNvbW1lcmNpYWxfdG9famQoYSArIDEsIDEsIDEsIHNn
KSB0aGVuIGEgKyAxIGVsc2UgYSBlbmQKLSAgICAgIHcgPSAxICsgKChqZCAt
IGNvbW1lcmNpYWxfdG9famQoeSwgMSwgMSwgc2cpKSAvIDcpLmZsb29yCisg
ICAgICBqID0gY29tbWVyY2lhbF90b19qZChhICsgMSwgMSwgMSwgc2cpCisg
ICAgICBpZiBqZCA+PSBqCisJeSA9IGEgKyAxCisgICAgICBlbHNlCisJaiA9
IGNvbW1lcmNpYWxfdG9famQoYSwgMSwgMSwgc2cpCisJeSA9IGEKKyAgICAg
IGVuZAorICAgICAgdyA9IDEgKyAoKGpkIC0gaikgLyA3KS5mbG9vcgogICAg
ICAgZCA9IChqZCArIDEpICUgNwogICAgICAgZCA9IDcgaWYgZCA9PSAwCiAg
ICAgICByZXR1cm4geSwgdywgZApAQCAtNzE5LDI2ICs3MzQsMzEgQEAKICAg
ZGVmIHNlbGYuZ3JlZ29yaWFuX2xlYXA/ICh5KSB5ICUgNCA9PSAwICYmIHkg
JSAxMDAgIT0gMCB8fCB5ICUgNDAwID09IDAgZW5kCiAKICAgY2xhc3MgPDwg
c2VsZjsgYWxpYXNfbWV0aG9kIDpsZWFwPywgOmdyZWdvcmlhbl9sZWFwPyBl
bmQKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0aG9kIDpuZXchLCA6bmV3
IGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2pkPyAoamQsIHNnPUlUQUxZKQor
ICBkZWYgc2VsZi52YWxpZF9qZF9yPyAoamQsIHNnPUlUQUxZKQogICAgICEh
X3ZhbGlkX2pkPyhqZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlk
X29yZGluYWw/ICh5LCBkLCBzZz1JVEFMWSkKKyAgcHJpdmF0ZV9jbGFzc19t
ZXRob2QgOnZhbGlkX2pkX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfb3JkaW5h
bF9yPyAoeSwgZCwgc2c9SVRBTFkpCiAgICAgISFfdmFsaWRfb3JkaW5hbD8o
eSwgZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2NpdmlsPyAo
eSwgbSwgZCwgc2c9SVRBTFkpCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDp2
YWxpZF9vcmRpbmFsX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfY2l2aWxfcj8g
KHksIG0sIGQsIHNnPUlUQUxZKQogICAgICEhX3ZhbGlkX2NpdmlsPyh5LCBt
LCBkLCBzZykKICAgZW5kCiAKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0
aG9kIDp2YWxpZF9kYXRlPywgOnZhbGlkX2NpdmlsPyBlbmQKKyAgcHJpdmF0
ZV9jbGFzc19tZXRob2QgOnZhbGlkX2NpdmlsX3I/CiAKLSAgZGVmIHNlbGYu
dmFsaWRfY29tbWVyY2lhbD8gKHksIHcsIGQsIHNnPUlUQUxZKQorICBkZWYg
c2VsZi52YWxpZF9jb21tZXJjaWFsX3I/ICh5LCB3LCBkLCBzZz1JVEFMWSkK
ICAgICAhIV92YWxpZF9jb21tZXJjaWFsPyh5LCB3LCBkLCBzZykKICAgZW5k
CiAKKyAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOnZhbGlkX2NvbW1lcmNpYWxf
cj8KKwogICBkZWYgc2VsZi52YWxpZF93ZWVrbnVtPyAoeSwgdywgZCwgZiwg
c2c9SVRBTFkpICMgOm5vZG9jOgogICAgICEhX3ZhbGlkX3dlZWtudW0/KHks
IHcsIGQsIGYsIHNnKQogICBlbmQKQEAgLTc1NywxNiArNzc3LDI4IEBACiAK
ICAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOnZhbGlkX3RpbWU/CiAKKyAgZGVm
IHNlbGYubmV3IShhamQ9MCwgb2Y9MCwgc2c9SVRBTFkpCisgICAgamQsIGRm
ID0gYWpkX3RvX2pkKGFqZCwgMCkKKyAgICBpZiAhKEZpeG51bSA9PT0gamQp
IHx8CisJamQgPCBzZyB8fCBkZiAhPTAgfHwgb2YgIT0gMCB8fAorICAgICAg
ICBqZCA8IC0zMjcgfHwgamQgPiAzNjY5NjM5MjUKKyAgICAgIHJldHVybiBu
ZXdfciEoYWpkLCBvZiwgc2cpCisgICAgZW5kCisgICAgbmV3X2whKGpkLCBz
ZykKKyAgZW5kCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZSBvYmplY3QgZnJv
bSBhIEp1bGlhbiBEYXkgTnVtYmVyLgogICAjCiAgICMgK2pkKyBpcyB0aGUg
SnVsaWFuIERheSBOdW1iZXI7IGlmIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1
bHRzIHRvCiAgICMgMC4KICAgIyArc2crIHNwZWNpZmllcyB0aGUgRGF5IG9m
IENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIHNlbGYuamQoamQ9MCwgc2c9SVRB
TFkpCisgIGRlZiBzZWxmLmpkX3IoamQ9MCwgc2c9SVRBTFkpICMgOm5vZG9j
OgogICAgIGpkID0gX3ZhbGlkX2pkPyhqZCwgc2cpCi0gICAgbmV3IShqZF90
b19hamQoamQsIDAsIDApLCAwLCBzZykKKyAgICBuZXdfciEoamRfdG9fYWpk
KGpkLCAwLCAwKSwgMCwgc2cpCiAgIGVuZAogCisgIHByaXZhdGVfY2xhc3Nf
bWV0aG9kIDpqZF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZSBvYmplY3Qg
ZnJvbSBhbiBPcmRpbmFsIERhdGUsIHNwZWNpZmllZAogICAjIGJ5IHllYXIg
K3krIGFuZCBkYXktb2YteWVhciArZCsuICtkKyBjYW4gYmUgbmVnYXRpdmUs
CiAgICMgaW4gd2hpY2ggaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIHRoZSBl
bmQgb2YgdGhlIHllYXIuCkBAIC03NzcsMTMgKzgwOSwxNSBAQAogICAjIE51
bWJlciBkYXkgMC4KICAgIwogICAjICtzZysgc3BlY2lmaWVzIHRoZSBEYXkg
b2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYgc2VsZi5vcmRpbmFsKHk9LTQ3
MTIsIGQ9MSwgc2c9SVRBTFkpCisgIGRlZiBzZWxmLm9yZGluYWxfcih5PS00
NzEyLCBkPTEsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1bmxlc3MgamQg
PSBfdmFsaWRfb3JkaW5hbD8oeSwgZCwgc2cpCiAgICAgICByYWlzZSBBcmd1
bWVudEVycm9yLCAnaW52YWxpZCBkYXRlJwogICAgIGVuZAotICAgIG5ldyEo
amRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCisgICAgbmV3X3IhKGpkX3Rv
X2FqZChqZCwgMCwgMCksIDAsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2Ns
YXNzX21ldGhvZCA6b3JkaW5hbF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0
ZSBvYmplY3QgZm9yIHRoZSBDaXZpbCBEYXRlIHNwZWNpZmllZCBieQogICAj
IHllYXIgK3krLCBtb250aCArbSssIGFuZCBkYXktb2YtbW9udGggK2QrLgog
ICAjCkBAIC03OTcsMTQgKzgzMSwxNCBAQAogICAjIEp1bGlhbiBEYXkgTnVt
YmVyIGRheSAwLgogICAjCiAgICMgK3NnKyBzcGVjaWZpZXMgdGhlIERheSBv
ZiBDYWxlbmRhciBSZWZvcm0uCi0gIGRlZiBzZWxmLmNpdmlsKHk9LTQ3MTIs
IG09MSwgZD0xLCBzZz1JVEFMWSkKKyAgZGVmIHNlbGYuY2l2aWxfcih5PS00
NzEyLCBtPTEsIGQ9MSwgc2c9SVRBTFkpICMgOm5vZG9jOgogICAgIHVubGVz
cyBqZCA9IF92YWxpZF9jaXZpbD8oeSwgbSwgZCwgc2cpCiAgICAgICByYWlz
ZSBBcmd1bWVudEVycm9yLCAnaW52YWxpZCBkYXRlJwogICAgIGVuZAotICAg
IG5ldyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCisgICAgbmV3X3Ih
KGpkX3RvX2FqZChqZCwgMCwgMCksIDAsIHNnKQogICBlbmQKIAotICBjbGFz
cyA8PCBzZWxmOyBhbGlhc19tZXRob2QgOm5ldywgOmNpdmlsIGVuZAorICBw
cml2YXRlX2NsYXNzX21ldGhvZCA6Y2l2aWxfcgogCiAgICMgQ3JlYXRlIGEg
bmV3IERhdGUgb2JqZWN0IGZvciB0aGUgQ29tbWVyY2lhbCBEYXRlIHNwZWNp
ZmllZCBieQogICAjIHllYXIgK3krLCB3ZWVrLW9mLXllYXIgK3crLCBhbmQg
ZGF5LW9mLXdlZWsgK2QrLgpAQCAtODIwLDEzICs4NTQsMTUgQEAKICAgIyBK
dWxpYW4gRGF5IE51bWJlciBkYXkgMC4KICAgIwogICAjICtzZysgc3BlY2lm
aWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYgc2VsZi5j
b21tZXJjaWFsKHk9LTQ3MTIsIHc9MSwgZD0xLCBzZz1JVEFMWSkKKyAgZGVm
IHNlbGYuY29tbWVyY2lhbF9yKHk9LTQ3MTIsIHc9MSwgZD0xLCBzZz1JVEFM
WSkgIyA6bm9kb2M6CiAgICAgdW5sZXNzIGpkID0gX3ZhbGlkX2NvbW1lcmNp
YWw/KHksIHcsIGQsIHNnKQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwg
J2ludmFsaWQgZGF0ZScKICAgICBlbmQKLSAgICBuZXchKGpkX3RvX2FqZChq
ZCwgMCwgMCksIDAsIHNnKQorICAgIG5ld19yIShqZF90b19hamQoamQsIDAs
IDApLCAwLCBzZykKICAgZW5kCiAKKyAgcHJpdmF0ZV9jbGFzc19tZXRob2Qg
OmNvbW1lcmNpYWxfcgorCiAgIGRlZiBzZWxmLndlZWtudW0oeT0tNDcxMiwg
dz0wLCBkPTEsIGY9MCwgc2c9SVRBTFkpCiAgICAgdW5sZXNzIGpkID0gX3Zh
bGlkX3dlZWtudW0/KHksIHcsIGQsIGYsIHNnKQogICAgICAgcmFpc2UgQXJn
dW1lbnRFcnJvciwgJ2ludmFsaWQgZGF0ZScKQEAgLTEwOTksNyArMTEzNSw3
IEBACiAJICBhbGlhc19tZXRob2QgOl9fI3tpZC5vYmplY3RfaWR9X18sIDoj
e2lkLnRvX3N9CiAJICBwcml2YXRlIDpfXyN7aWQub2JqZWN0X2lkfV9fCiAJ
ICBkZWYgI3tpZC50b19zfSgqYXJncykKLQkgICAgQF9fY2FfX1sje2lkLm9i
amVjdF9pZH1dIHx8PSBfXyN7aWQub2JqZWN0X2lkfV9fKCphcmdzKQorCSAg
ICBfX2NhX19bI3tpZC5vYmplY3RfaWR9XSB8fD0gX18je2lkLm9iamVjdF9p
ZH1fXygqYXJncykKIAkgIGVuZAogCWVuZDsKICAgICAgIGVuZApAQCAtMTEw
OSw5NiArMTE0NSw2OSBAQAogCiAgIGVuZAogCi0gICMgKk5PVEUqIHRoaXMg
aXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBtZXRob2QgbmV3ISgpLiAg
SWYKLSAgIyB5b3UgYXJlIHJlYWRpbmcgdGhpcyBhcyB0aGUgZG9jdW1lbnRh
dGlvbiBmb3IgbmV3KCksIHRoYXQgaXMKLSAgIyBiZWNhdXNlIHJkb2MgZG9l
c24ndCBmdWxseSBzdXBwb3J0IHRoZSBhbGlhc2luZyBvZiB0aGUKLSAgIyBp
bml0aWFsaXplKCkgbWV0aG9kLgotICAjIG5ldygpIGlzIGluCi0gICMgZmFj
dCBhbiBhbGlhcyBmb3IgI2NpdmlsKCk6IHJlYWQgdGhlIGRvY3VtZW50YXRp
b24gZm9yIHRoYXQKLSAgIyBtZXRob2QgaW5zdGVhZC4KLSAgIwotICAjIENy
ZWF0ZSBhIG5ldyBEYXRlIG9iamVjdC4KLSAgIwotICAjICthamQrIGlzIHRo
ZSBBc3Ryb25vbWljYWwgSnVsaWFuIERheSBOdW1iZXIuCi0gICMgK29mKyBp
cyB0aGUgb2Zmc2V0IGZyb20gVVRDIGFzIGEgZnJhY3Rpb24gb2YgYSBkYXku
Ci0gICMgQm90aCBkZWZhdWx0IHRvIDAuCi0gICMKLSAgIyArc2crIHNwZWNp
ZmllcyB0aGUgRGF5IG9mIENhbGVuZGFyIFJlZm9ybSB0byB1c2UgZm9yIHRo
aXMKLSAgIyBEYXRlIG9iamVjdC4KLSAgIwotICAjIFVzaW5nIG9uZSBvZiB0
aGUgZmFjdG9yeSBtZXRob2RzIHN1Y2ggYXMgRGF0ZTo6Y2l2aWwgaXMKLSAg
IyBnZW5lcmFsbHkgZWFzaWVyIGFuZCBzYWZlci4KLSAgZGVmIGluaXRpYWxp
emUoYWpkPTAsIG9mPTAsIHNnPUlUQUxZKQotICAgIEBhamQsIEBvZiwgQHNn
ID0gYWpkLCBvZiwgc2cKLSAgICBAX19jYV9fID0ge30KLSAgZW5kCi0KLSAg
IyBHZXQgdGhlIGRhdGUgYXMgYW4gQXN0cm9ub21pY2FsIEp1bGlhbiBEYXkg
TnVtYmVyLgotICBkZWYgYWpkKCkgQGFqZCBlbmQKLQogICAjIEdldCB0aGUg
ZGF0ZSBhcyBhbiBBc3Ryb25vbWljYWwgTW9kaWZpZWQgSnVsaWFuIERheSBO
dW1iZXIuCi0gIGRlZiBhbWpkKCkgYWpkX3RvX2FtamQoQGFqZCkgZW5kCisg
IGRlZiBhbWpkX3IoKSBhamRfdG9fYW1qZChhamQpIGVuZAogCi0gIG9uY2Ug
OmFtamQKKyAgb25jZSA6YW1qZF9yCiAKLSAgZGVmIGRheW51bSgpIGFqZF90
b19qZChAYWpkLCBAb2YpIGVuZAorICBkZWYgZGF5bnVtKCkgYWpkX3RvX2pk
KGFqZCwgb2Zmc2V0KSBlbmQKIAogICBvbmNlIDpkYXludW0KICAgcHJpdmF0
ZSA6ZGF5bnVtCiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYSBKdWxpYW4gRGF5
IE51bWJlci4KLSAgZGVmIGpkKCkgZGF5bnVtWzBdIGVuZAorICBkZWYgamRf
cigpIGRheW51bVswXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgYW55IGZy
YWN0aW9uYWwgZGF5IHBhcnQgb2YgdGhlIGRhdGUuCi0gIGRlZiBkYXlfZnJh
Y3Rpb24oKSBkYXludW1bMV0gZW5kCisgIGRlZiBkYXlfZnJhY3Rpb25fcigp
IGRheW51bVsxXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIGRhdGUg
YXMgYSBNb2RpZmllZCBKdWxpYW4gRGF5IE51bWJlci4KLSAgZGVmIG1qZCgp
IGpkX3RvX21qZChqZCkgZW5kCisgIGRlZiBtamRfcigpIGpkX3RvX21qZChq
ZCkgZW5kICMgOm5vZG9jOgogCiAgICMgR2V0IHRoZSBkYXRlIGFzIHRoZSBu
dW1iZXIgb2YgZGF5cyBzaW5jZSB0aGUgRGF5IG9mIENhbGVuZGFyCiAgICMg
UmVmb3JtIChpbiBJdGFseSBhbmQgdGhlIENhdGhvbGljIGNvdW50cmllcyku
Ci0gIGRlZiBsZCgpIGpkX3RvX2xkKGpkKSBlbmQKKyAgZGVmIGxkX3IoKSBq
ZF90b19sZChqZCkgZW5kICMgOm5vZG9jOgogCi0gIG9uY2UgOmpkLCA6ZGF5
X2ZyYWN0aW9uLCA6bWpkLCA6bGQKKyAgb25jZSA6amRfciwgOmRheV9mcmFj
dGlvbl9yLCA6bWpkX3IsIDpsZF9yCisgIHByaXZhdGUgOmpkX3IsIDpkYXlf
ZnJhY3Rpb25fciwgOm1qZF9yLCA6bGRfcgogCiAgICMgR2V0IHRoZSBkYXRl
IGFzIGEgQ2l2aWwgRGF0ZSwgW3llYXIsIG1vbnRoLCBkYXlfb2ZfbW9udGhd
Ci0gIGRlZiBjaXZpbCgpIGpkX3RvX2NpdmlsKGpkLCBAc2cpIGVuZCAjIDpu
b2RvYzoKKyAgZGVmIGNpdmlsKCkgamRfdG9fY2l2aWwoamQsIHN0YXJ0KSBl
bmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYW4gT3JkaW5h
bCBEYXRlLCBbeWVhciwgZGF5X29mX3llYXJdCi0gIGRlZiBvcmRpbmFsKCkg
amRfdG9fb3JkaW5hbChqZCwgQHNnKSBlbmQgIyA6bm9kb2M6CisgIGRlZiBv
cmRpbmFsKCkgamRfdG9fb3JkaW5hbChqZCwgc3RhcnQpIGVuZCAjIDpub2Rv
YzoKIAogICAjIEdldCB0aGUgZGF0ZSBhcyBhIENvbW1lcmNpYWwgRGF0ZSwg
W3llYXIsIHdlZWtfb2ZfeWVhciwgZGF5X29mX3dlZWtdCi0gIGRlZiBjb21t
ZXJjaWFsKCkgamRfdG9fY29tbWVyY2lhbChqZCwgQHNnKSBlbmQgIyA6bm9k
b2M6CisgIGRlZiBjb21tZXJjaWFsKCkgamRfdG9fY29tbWVyY2lhbChqZCwg
c3RhcnQpIGVuZCAjIDpub2RvYzoKIAotICBkZWYgd2Vla251bTAoKSBqZF90
b193ZWVrbnVtKGpkLCAwLCBAc2cpIGVuZCAjIDpub2RvYzoKLSAgZGVmIHdl
ZWtudW0xKCkgamRfdG9fd2Vla251bShqZCwgMSwgQHNnKSBlbmQgIyA6bm9k
b2M6CisgIGRlZiB3ZWVrbnVtMCgpIGpkX3RvX3dlZWtudW0oamQsIDAsIHN0
YXJ0KSBlbmQgIyA6bm9kb2M6CisgIGRlZiB3ZWVrbnVtMSgpIGpkX3RvX3dl
ZWtudW0oamQsIDEsIHN0YXJ0KSBlbmQgIyA6bm9kb2M6CiAKICAgb25jZSA6
Y2l2aWwsIDpvcmRpbmFsLCA6Y29tbWVyY2lhbCwgOndlZWtudW0wLCA6d2Vl
a251bTEKICAgcHJpdmF0ZSA6Y2l2aWwsIDpvcmRpbmFsLCA6Y29tbWVyY2lh
bCwgOndlZWtudW0wLCA6d2Vla251bTEKIAogICAjIEdldCB0aGUgeWVhciBv
ZiB0aGlzIGRhdGUuCi0gIGRlZiB5ZWFyKCkgY2l2aWxbMF0gZW5kCisgIGRl
ZiB5ZWFyX3IoKSBjaXZpbFswXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQg
dGhlIGRheS1vZi10aGUteWVhciBvZiB0aGlzIGRhdGUuCiAgICMKICAgIyBK
YW51YXJ5IDEgaXMgZGF5LW9mLXRoZS15ZWFyIDEKLSAgZGVmIHlkYXkoKSBv
cmRpbmFsWzFdIGVuZAorICBkZWYgeWRheV9yKCkgb3JkaW5hbFsxXSBlbmQg
IyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIG1vbnRoIG9mIHRoaXMgZGF0ZS4K
ICAgIwogICAjIEphbnVhcnkgaXMgbW9udGggMS4KLSAgZGVmIG1vbigpIGNp
dmlsWzFdIGVuZAorICBkZWYgbW9uX3IoKSBjaXZpbFsxXSBlbmQgIyA6bm9k
b2M6CiAKICAgIyBHZXQgdGhlIGRheS1vZi10aGUtbW9udGggb2YgdGhpcyBk
YXRlLgotICBkZWYgbWRheSgpIGNpdmlsWzJdIGVuZAorICBkZWYgbWRheV9y
KCkgY2l2aWxbMl0gZW5kICMgOm5vZG9jOgogCi0gIGFsaWFzX21ldGhvZCA6
bW9udGgsIDptb24KLSAgYWxpYXNfbWV0aG9kIDpkYXksIDptZGF5CisgIHBy
aXZhdGUgOnllYXJfciwgOnlkYXlfciwgOm1vbl9yLCA6bWRheV9yCiAKLSAg
ZGVmIHdudW0wKCkgd2Vla251bTBbMV0gZW5kICMgOm5vZG9jOgotICBkZWYg
d251bTEoKSB3ZWVrbnVtMVsxXSBlbmQgIyA6bm9kb2M6CisgIGRlZiB3bnVt
MF9yKCkgd2Vla251bTBbMV0gZW5kICMgOm5vZG9jOgorICBkZWYgd251bTFf
cigpIHdlZWtudW0xWzFdIGVuZCAjIDpub2RvYzoKIAotICBwcml2YXRlIDp3
bnVtMCwgOndudW0xCisgIHByaXZhdGUgOndudW0wX3IsIDp3bnVtMV9yCiAK
ICAgIyBHZXQgdGhlIHRpbWUgb2YgdGhpcyBkYXRlIGFzIFtob3VycywgbWlu
dXRlcywgc2Vjb25kcywKICAgIyBmcmFjdGlvbl9vZl9hX3NlY29uZF0KQEAg
LTEyMTAsMjUgKzEyMTksMjAgQEAKICAgcHJpdmF0ZSA6dGltZSwgOnRpbWVf
d29fc2YsIDp0aW1lX3NmCiAKICAgIyBHZXQgdGhlIGhvdXIgb2YgdGhpcyBk
YXRlLgotICBkZWYgaG91cigpIHRpbWVfd29fc2ZbMF0gZW5kICMgNHAKKyAg
ZGVmIGhvdXJfcigpIHRpbWVfd29fc2ZbMF0gZW5kICMgOm5vZG9jOiAjIDRw
CiAKICAgIyBHZXQgdGhlIG1pbnV0ZSBvZiB0aGlzIGRhdGUuCi0gIGRlZiBt
aW4oKSB0aW1lX3dvX3NmWzFdIGVuZCAjIDRwCisgIGRlZiBtaW5fcigpIHRp
bWVfd29fc2ZbMV0gZW5kICMgOm5vZG9jOiAjIDRwCiAKICAgIyBHZXQgdGhl
IHNlY29uZCBvZiB0aGlzIGRhdGUuCi0gIGRlZiBzZWMoKSB0aW1lX3dvX3Nm
WzJdIGVuZCAjIDRwCisgIGRlZiBzZWNfcigpIHRpbWVfd29fc2ZbMl0gZW5k
ICMgOm5vZG9jOiAjIDRwCiAKICAgIyBHZXQgdGhlIGZyYWN0aW9uLW9mLWEt
c2Vjb25kIG9mIHRoaXMgZGF0ZS4KLSAgZGVmIHNlY19mcmFjdGlvbigpIHRp
bWVfc2YgZW5kICMgNHAKKyAgZGVmIHNlY19mcmFjdGlvbl9yKCkgdGltZV9z
ZiBlbmQgIyA0cAogCi0gIGFsaWFzX21ldGhvZCA6bWludXRlLCA6bWluCi0g
IGFsaWFzX21ldGhvZCA6c2Vjb25kLCA6c2VjCi0gIGFsaWFzX21ldGhvZCA6
c2Vjb25kX2ZyYWN0aW9uLCA6c2VjX2ZyYWN0aW9uCisgIHByaXZhdGUgOmhv
dXJfciwgOm1pbl9yLCA6c2VjX3IsIDpzZWNfZnJhY3Rpb25fcgogCi0gIHBy
aXZhdGUgOmhvdXIsIDptaW4sIDpzZWMsIDpzZWNfZnJhY3Rpb24sCi0JICA6
bWludXRlLCA6c2Vjb25kLCA6c2Vjb25kX2ZyYWN0aW9uCi0KLSAgZGVmIHpv
bmUgIyA0cCAtIHN0cmZ0aW1lKCclOnonKQorICBkZWYgem9uZV9yICMgOm5v
ZG9jOiAjIDRwIC0gc3RyZnRpbWUoJyU6eicpCiAgICAgc2lnbiA9IGlmIG9m
ZnNldCA8IDAgdGhlbiAnLScgZWxzZSAnKycgZW5kCiAgICAgZnIgPSBvZmZz
ZXQuYWJzCiAgICAgc3MgPSBmci5kaXYoU0VDT05EU19JTl9EQVkpCkBAIC0x
MjM3LDI0ICsxMjQxLDI3IEBACiAgICAgZm9ybWF0KCclcyUwMmQ6JTAyZCcs
IHNpZ24sIGhoLCBtbSkKICAgZW5kCiAKLSAgcHJpdmF0ZSA6em9uZQorICBw
cml2YXRlIDp6b25lX3IKIAogICAjIEdldCB0aGUgY29tbWVyY2lhbCB5ZWFy
IG9mIHRoaXMgZGF0ZS4gIFNlZSAqQ29tbWVyY2lhbCogKkRhdGUqCiAgICMg
aW4gdGhlIGludHJvZHVjdGlvbiBmb3IgaG93IHRoaXMgZGlmZmVycyBmcm9t
IHRoZSBub3JtYWwgeWVhci4KLSAgZGVmIGN3eWVhcigpIGNvbW1lcmNpYWxb
MF0gZW5kCisgIGRlZiBjd3llYXJfcigpIGNvbW1lcmNpYWxbMF0gZW5kICMg
Om5vZG9jOgogCiAgICMgR2V0IHRoZSBjb21tZXJjaWFsIHdlZWsgb2YgdGhl
IHllYXIgb2YgdGhpcyBkYXRlLgotICBkZWYgY3dlZWsoKSBjb21tZXJjaWFs
WzFdIGVuZAorICBkZWYgY3dlZWtfcigpIGNvbW1lcmNpYWxbMV0gZW5kICMg
Om5vZG9jOgogCiAgICMgR2V0IHRoZSBjb21tZXJjaWFsIGRheSBvZiB0aGUg
d2VlayBvZiB0aGlzIGRhdGUuICBNb25kYXkgaXMKICAgIyBjb21tZXJjaWFs
IGRheS1vZi13ZWVrIDE7IFN1bmRheSBpcyBjb21tZXJjaWFsIGRheS1vZi13
ZWVrIDcuCi0gIGRlZiBjd2RheSgpIGNvbW1lcmNpYWxbMl0gZW5kCisgIGRl
ZiBjd2RheV9yKCkgY29tbWVyY2lhbFsyXSBlbmQgIyA6bm9kb2M6CiAKKyAg
cHJpdmF0ZSA6Y3d5ZWFyX3IsIDpjd2Vla19yLCA6Y3dkYXlfcgorCiAgICMg
R2V0IHRoZSB3ZWVrIGRheSBvZiB0aGlzIGRhdGUuICBTdW5kYXkgaXMgZGF5
LW9mLXdlZWsgMDsKICAgIyBTYXR1cmRheSBpcyBkYXktb2Ytd2VlayA2Lgot
ICBkZWYgd2RheSgpIGpkX3RvX3dkYXkoamQpIGVuZAorICBkZWYgd2RheV9y
KCkgamRfdG9fd2RheShqZCkgZW5kICMgOm5vZG9jOgogCi0gIG9uY2UgOndk
YXkKKyAgb25jZSA6d2RheV9yCisgIHByaXZhdGUgOndkYXlfcgogCiA9YmVn
aW4KICAgTU9OVEhOQU1FUy5lYWNoX3dpdGhfaW5kZXggZG8gfG4sIGl8CkBA
IC0xMjY4LDE5ICsxMjc1LDIwIEBACiAgICAgZGVmaW5lX21ldGhvZChuLmRv
d25jYXNlICsgJz8nKXt3ZGF5ID09IGl9CiAgIGVuZAogCi0gIGRlZiBudGhf
a2RheT8gKG4sIGspCisgIGRlZiBudGhfa2RheT8gKG4sIGspICMgOm5vZG9j
OgogICAgIGsgPT0gd2RheSAmJiBqZCA9PT0gbnRoX2tkYXlfdG9famQoeWVh
ciwgbW9uLCBuLCBrLCBzdGFydCkKICAgZW5kCiAKICAgcHJpdmF0ZSA6bnRo
X2tkYXk/CiAKICAgIyBJcyB0aGUgY3VycmVudCBkYXRlIG9sZC1zdHlsZSAo
SnVsaWFuIENhbGVuZGFyKT8KLSAgZGVmIGp1bGlhbj8gKCkgamQgPCBAc2cg
ZW5kCisgIGRlZiBqdWxpYW5fcj8gKCkgamQgPCBzdGFydCBlbmQgIyA6bm9k
b2M6CiAKICAgIyBJcyB0aGUgY3VycmVudCBkYXRlIG5ldy1zdHlsZSAoR3Jl
Z29yaWFuIENhbGVuZGFyKT8KLSAgZGVmIGdyZWdvcmlhbj8gKCkgIWp1bGlh
bj8gZW5kCisgIGRlZiBncmVnb3JpYW5fcj8gKCkgIWp1bGlhbj8gZW5kICMg
Om5vZG9jOgogCi0gIG9uY2UgOmp1bGlhbj8sIDpncmVnb3JpYW4/CisgIG9u
Y2UgOmp1bGlhbl9yPywgOmdyZWdvcmlhbl9yPworICBwcml2YXRlIDpqdWxp
YW5fcj8sIDpncmVnb3JpYW5fcj8KIAogICBkZWYgZml4X3N0eWxlICMgOm5v
ZG9jOgogICAgIGlmIGp1bGlhbj8KQEAgLTEyOTEsMTkgKzEyOTksMjIgQEAK
ICAgcHJpdmF0ZSA6Zml4X3N0eWxlCiAKICAgIyBJcyB0aGlzIGEgbGVhcCB5
ZWFyPwotICBkZWYgbGVhcD8KKyAgZGVmIGxlYXBfcj8gIyA6bm9kb2M6CiAg
ICAgamRfdG9fY2l2aWwoY2l2aWxfdG9famQoeWVhciwgMywgMSwgZml4X3N0
eWxlKSAtIDEsCiAJCWZpeF9zdHlsZSlbLTFdID09IDI5CiAgIGVuZAogCi0g
IG9uY2UgOmxlYXA/CisgIG9uY2UgOmxlYXBfcj8KKyAgcHJpdmF0ZSA6bGVh
cF9yPwogCiAgICMgV2hlbiBpcyB0aGUgRGF5IG9mIENhbGVuZGFyIFJlZm9y
bSBmb3IgdGhpcyBEYXRlIG9iamVjdD8KLSAgZGVmIHN0YXJ0KCkgQHNnIGVu
ZAorICBkZWYgc3RhcnRfcigpIEBzZyBlbmQgIyA6bm9kb2M6CiAKICAgIyBD
cmVhdGUgYSBjb3B5IG9mIHRoaXMgRGF0ZSBvYmplY3QgdXNpbmcgYSBuZXcg
RGF5IG9mIENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIG5ld19zdGFydChzZz1z
ZWxmLmNsYXNzOjpJVEFMWSkgc2VsZi5jbGFzcy5uZXchKEBhamQsIEBvZiwg
c2cpIGVuZAorICBkZWYgbmV3X3N0YXJ0X3Ioc2c9c2VsZi5jbGFzczo6SVRB
TFkpIHNlbGYuY2xhc3MubmV3X3IhKGFqZCwgb2Zmc2V0LCBzZykgZW5kICMg
Om5vZG9jOgogCisgIHByaXZhdGUgOnN0YXJ0X3IsIDpuZXdfc3RhcnRfcgor
CiAgICMgQ3JlYXRlIGEgY29weSBvZiB0aGlzIERhdGUgb2JqZWN0IHRoYXQg
dXNlcyB0aGUgSXRhbGlhbi9DYXRob2xpYwogICAjIERheSBvZiBDYWxlbmRh
ciBSZWZvcm0uCiAgIGRlZiBpdGFseSgpIG5ld19zdGFydChzZWxmLmNsYXNz
OjpJVEFMWSkgZW5kCkBAIC0xMzIwLDE2ICsxMzMxLDE2IEBACiAgICMgQ2Fs
ZW5kYXIuCiAgIGRlZiBncmVnb3JpYW4oKSBuZXdfc3RhcnQoc2VsZi5jbGFz
czo6R1JFR09SSUFOKSBlbmQKIAotICBkZWYgb2Zmc2V0KCkgQG9mIGVuZAot
Ci0gIGRlZiBuZXdfb2Zmc2V0KG9mPTApCisgIGRlZiBuZXdfb2Zmc2V0X3Io
b2Y9MCkgIyA6bm9kb2M6CiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAg
b2YgPSBSYXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQor
ICAgIGVsc2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgo
b2YgKiA4NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIHNlbGYu
Y2xhc3MubmV3IShAYWpkLCBvZiwgQHNnKQorICAgIHNlbGYuY2xhc3MubmV3
X3IhKGFqZCwgb2YsIHN0YXJ0KQogICBlbmQKIAotICBwcml2YXRlIDpvZmZz
ZXQsIDpuZXdfb2Zmc2V0CisgIHByaXZhdGUgOm5ld19vZmZzZXRfcgogCiAg
ICMgUmV0dXJuIGEgbmV3IERhdGUgb2JqZWN0IHRoYXQgaXMgK24rIGRheXMg
bGF0ZXIgdGhhbiB0aGUKICAgIyBjdXJyZW50IG9uZS4KQEAgLTEzNDAsMTMg
KzEzNTEsMTkgQEAKICAgIwogICAjIElmICtuKyBpcyBub3QgYSBOdW1lcmlj
LCBhIFR5cGVFcnJvciB3aWxsIGJlIHRocm93bi4gIEluCiAgICMgcGFydGlj
dWxhciwgdHdvIERhdGVzIGNhbm5vdCBiZSBhZGRlZCB0byBlYWNoIG90aGVy
LgotICBkZWYgKyAobikKKyAgZGVmIHBsdXNfciAobikgIyA6bm9kb2M6CiAg
ICAgY2FzZSBuCi0gICAgd2hlbiBOdW1lcmljOyByZXR1cm4gc2VsZi5jbGFz
cy5uZXchKEBhamQgKyBuLCBAb2YsIEBzZykKKyAgICB3aGVuIE51bWVyaWMK
KyAgICAgIGlmIEZsb2F0ID09PSBuCisJbiA9IFJhdGlvbmFsKChuICogODY0
MDAwMDAwMDAwMDApLnJvdW5kLCA4NjQwMDAwMDAwMDAwMCkKKyAgICAgIGVu
ZAorICAgICAgcmV0dXJuIHNlbGYuY2xhc3MubmV3X3IhKGFqZCArIG4sIG9m
ZnNldCwgc3RhcnQpCiAgICAgZW5kCiAgICAgcmFpc2UgVHlwZUVycm9yLCAn
ZXhwZWN0ZWQgbnVtZXJpYycKICAgZW5kCiAKKyAgcHJpdmF0ZSA6cGx1c19y
CisKICAgIyBJZiAreCsgaXMgYSBOdW1lcmljIHZhbHVlLCBjcmVhdGUgYSBu
ZXcgRGF0ZSBvYmplY3QgdGhhdCBpcwogICAjICt4KyBkYXlzIGVhcmxpZXIg
dGhhbiB0aGUgY3VycmVudCBvbmUuCiAgICMKQEAgLTEzNTUsMTQgKzEzNzIs
MjEgQEAKICAgIyBkYXRlIGlzIHRoYW4gK3grLgogICAjCiAgICMgSWYgK3gr
IGlzIG5laXRoZXIgTnVtZXJpYyBub3IgYSBEYXRlLCBhIFR5cGVFcnJvciBp
cyByYWlzZWQuCi0gIGRlZiAtICh4KQorICBkZWYgbWludXNfciAoeCkgIyA6
bm9kb2M6CiAgICAgY2FzZSB4Ci0gICAgd2hlbiBOdW1lcmljOyByZXR1cm4g
c2VsZi5jbGFzcy5uZXchKEBhamQgLSB4LCBAb2YsIEBzZykKLSAgICB3aGVu
IERhdGU7ICAgIHJldHVybiBAYWpkIC0geC5hamQKKyAgICB3aGVuIE51bWVy
aWMKKyAgICAgIGlmIEZsb2F0ID09PSB4CisJeCA9IFJhdGlvbmFsKCh4ICog
ODY0MDAwMDAwMDAwMDApLnJvdW5kLCA4NjQwMDAwMDAwMDAwMCkKKyAgICAg
IGVuZAorICAgICAgcmV0dXJuIHNlbGYuY2xhc3MubmV3X3IhKGFqZCAtIHgs
IG9mZnNldCwgc3RhcnQpCisgICAgd2hlbiBEYXRlCisgICAgICByZXR1cm4g
YWpkIC0geC5hamQKICAgICBlbmQKICAgICByYWlzZSBUeXBlRXJyb3IsICdl
eHBlY3RlZCBudW1lcmljIG9yIGRhdGUnCiAgIGVuZAogCisgIHByaXZhdGUg
Om1pbnVzX3IKKwogICAjIENvbXBhcmUgdGhpcyBkYXRlIHdpdGggYW5vdGhl
ciBkYXRlLgogICAjCiAgICMgK290aGVyKyBjYW4gYWxzbyBiZSBhIE51bWVy
aWMgdmFsdWUsIGluIHdoaWNoIGNhc2UgaXQgaXMKQEAgLTEzNzQsMTAgKzEz
OTgsMTAgQEAKICAgIyB0d28gRGF0ZVRpbWUgaW5zdGFuY2VzLiAgV2hlbiBj
b21wYXJpbmcgYSBEYXRlVGltZSBpbnN0YW5jZQogICAjIHdpdGggYSBEYXRl
IGluc3RhbmNlLCB0aGUgdGltZSBvZiB0aGUgbGF0dGVyIHdpbGwgYmUKICAg
IyBjb25zaWRlcmVkIGFzIGZhbGxpbmcgb24gbWlkbmlnaHQgVVRDLgotICBk
ZWYgPD0+IChvdGhlcikKKyAgZGVmIGNtcF9yIChvdGhlcikgIyA6bm9kb2M6
CiAgICAgY2FzZSBvdGhlcgotICAgIHdoZW4gTnVtZXJpYzsgcmV0dXJuIEBh
amQgPD0+IG90aGVyCi0gICAgd2hlbiBEYXRlOyAgICByZXR1cm4gQGFqZCA8
PT4gb3RoZXIuYWpkCisgICAgd2hlbiBOdW1lcmljOyByZXR1cm4gYWpkIDw9
PiBvdGhlcgorICAgIHdoZW4gRGF0ZTsgICAgcmV0dXJuIGFqZCA8PT4gb3Ro
ZXIuYWpkCiAgICAgZWxzZQogICAgICAgYmVnaW4KICAgICAgICAgbCwgciA9
IG90aGVyLmNvZXJjZShzZWxmKQpAQCAtMTM4OCwxMyArMTQxMiwxNSBAQAog
ICAgIG5pbAogICBlbmQKIAorICBwcml2YXRlIDpjbXBfcgorCiAgICMgVGhl
IHJlbGF0aW9uc2hpcCBvcGVyYXRvciBmb3IgRGF0ZS4KICAgIwogICAjIENv
bXBhcmVzIGRhdGVzIGJ5IEp1bGlhbiBEYXkgTnVtYmVyLiAgV2hlbiBjb21w
YXJpbmcKICAgIyB0d28gRGF0ZVRpbWUgaW5zdGFuY2VzLCBvciBhIERhdGVU
aW1lIHdpdGggYSBEYXRlLAogICAjIHRoZSBpbnN0YW5jZXMgd2lsbCBiZSBy
ZWdhcmRlZCBhcyBlcXVpdmFsZW50IGlmIHRoZXkKICAgIyBmYWxsIG9uIHRo
ZSBzYW1lIGRhdGUgaW4gbG9jYWwgdGltZS4KLSAgZGVmID09PSAob3RoZXIp
CisgIGRlZiBlcXVhbF9yIChvdGhlcikgIyA6bm9kb2M6CiAgICAgY2FzZSBv
dGhlcgogICAgIHdoZW4gTnVtZXJpYzsgcmV0dXJuIGpkID09IG90aGVyCiAg
ICAgd2hlbiBEYXRlOyAgICByZXR1cm4gamQgPT0gb3RoZXIuamQKQEAgLTE0
MDgsNiArMTQzNCw4IEBACiAgICAgZmFsc2UKICAgZW5kCiAKKyAgcHJpdmF0
ZSA6ZXF1YWxfcgorCiAgIGRlZiBuZXh0X2RheShuPTEpIHNlbGYgKyBuIGVu
ZAogICBkZWYgcHJldl9kYXkobj0xKSBzZWxmIC0gbiBlbmQKIApAQCAtMTQy
Niw3ICsxNDU0LDcgQEAKICAgICB5LCBtID0gKHllYXIgKiAxMiArIChtb24g
LSAxKSArIG4pLmRpdm1vZCgxMikKICAgICBtLCAgID0gKG0gKyAxKSAgICAg
ICAgICAgICAgICAgICAgLmRpdm1vZCgxKQogICAgIGQgPSBtZGF5Ci0gICAg
dW50aWwgamQyID0gX3ZhbGlkX2NpdmlsPyh5LCBtLCBkLCBAc2cpCisgICAg
dW50aWwgamQyID0gX3ZhbGlkX2NpdmlsPyh5LCBtLCBkLCBzdGFydCkKICAg
ICAgIGQgLT0gMQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgJ2ludmFs
aWQgZGF0ZScgdW5sZXNzIGQgPiAwCiAgICAgZW5kCkBAIC0xNDg2LDMwICsx
NTE0LDI5IEBACiAgICMgSXMgdGhpcyBEYXRlIGVxdWFsIHRvICtvdGhlcis/
CiAgICMKICAgIyArb3RoZXIrIG11c3QgYm90aCBiZSBhIERhdGUgb2JqZWN0
LCBhbmQgcmVwcmVzZW50IHRoZSBzYW1lIGRhdGUuCi0gIGRlZiBlcWw/IChv
dGhlcikgRGF0ZSA9PT0gb3RoZXIgJiYgc2VsZiA9PSBvdGhlciBlbmQKKyAg
ZGVmIGVxbF9yPyAob3RoZXIpIERhdGUgPT09IG90aGVyICYmIHNlbGYgPT0g
b3RoZXIgZW5kICMgOm5vZG9jOgogCisgIHByaXZhdGUgOmVxbF9yPworCiAg
ICMgQ2FsY3VsYXRlIGEgaGFzaCB2YWx1ZSBmb3IgdGhpcyBkYXRlLgotICBk
ZWYgaGFzaCgpIEBhamQuaGFzaCBlbmQKKyAgZGVmIGhhc2hfcigpIGFqZC5o
YXNoIGVuZCAjIDpub2RvYzoKIAorICBwcml2YXRlIDpoYXNoX3IKKwogICAj
IFJldHVybiBpbnRlcm5hbCBvYmplY3Qgc3RhdGUgYXMgYSBwcm9ncmFtbWVy
LXJlYWRhYmxlIHN0cmluZy4KLSAgZGVmIGluc3BlY3QKLSAgICBmb3JtYXQo
JyM8JXM6ICVzICglcywlcywlcyk+Jywgc2VsZi5jbGFzcywgdG9fcywgQGFq
ZCwgQG9mLCBAc2cpCisgIGRlZiBpbnNwZWN0X3IgIyA6bm9kb2M6CisgICAg
Zm9ybWF0KCcjPCVzW1JdOiAlcyAoJXMsJXMsJXMpPicsIHNlbGYuY2xhc3Ms
IHRvX3NfciwgYWpkLCBvZmZzZXQsIHN0YXJ0KQogICBlbmQKIAorICBwcml2
YXRlIDppbnNwZWN0X3IKKwogICAjIFJldHVybiB0aGUgZGF0ZSBhcyBhIGh1
bWFuLXJlYWRhYmxlIHN0cmluZy4KICAgIwogICAjIFRoZSBmb3JtYXQgdXNl
ZCBpcyBZWVlZLU1NLURELgotICBkZWYgdG9fcygpIGZvcm1hdCgnJS40ZC0l
MDJkLSUwMmQnLCB5ZWFyLCBtb24sIG1kYXkpIGVuZCAjIDRwCisgIGRlZiB0
b19zX3IoKSBmb3JtYXQoJyUuNGQtJTAyZC0lMDJkJywgeWVhciwgbW9uLCBt
ZGF5KSBlbmQgIyA6bm9kb2M6ICMgNHAKIAotICAjIER1bXAgdG8gTWFyc2hh
bCBmb3JtYXQuCi0gIGRlZiBtYXJzaGFsX2R1bXAoKSBbQGFqZCwgQG9mLCBA
c2ddIGVuZAorICBwcml2YXRlIDp0b19zX3IKIAotICAjIExvYWQgZnJvbSBN
YXJzaGFsIGZvcm1hdC4KLSAgZGVmIG1hcnNoYWxfbG9hZChhKQotICAgIEBh
amQsIEBvZiwgQHNnLCA9IGEKLSAgICBAX19jYV9fID0ge30KLSAgZW5kCi0K
IGVuZAogCiAjIENsYXNzIHJlcHJlc2VudGluZyBhIGRhdGUgYW5kIHRpbWUu
CkBAIC0xNTYyLDYgKzE1ODksMTkgQEAKICMKIGNsYXNzIERhdGVUaW1lIDwg
RGF0ZQogCisgIGRlZiBzZWxmLm5ldyEoYWpkPTAsIG9mPTAsIHNnPUlUQUxZ
KQorICAgIGpkLCBkZiA9IGFqZF90b19qZChhamQsIDApCisgICAgZGYsIHNm
ID0gKGRmICogODY0MDApLmRpdm1vZCgxKQorICAgIHNmLCBzc2YgPSAoc2Yg
KiAxMDAwMDAwMDAwKS5kaXZtb2QoMSkKKyAgICBvZGYsIG9zZiA9IChvZiAq
IDg2NDAwKS5kaXZtb2QoMSkKKyAgICBpZiAhKEZpeG51bSA9PT0gamQpIHx8
CisJamQgPCBzZyB8fCBzc2YgIT0gMCB8fCBvc2YgIT0gMCB8fAorICAgICAg
ICBqZCA8IC0zMjcgfHwgamQgPiAzNjY5NjM5MjUKKyAgICAgIHJldHVybiBu
ZXdfciEoYWpkLCBvZiwgc2cpCisgICAgZW5kCisgICAgbmV3X2whKGpkLCBk
Ziwgc2YsIG9kZiwgc2cpCisgIGVuZAorCiAgICMgQ3JlYXRlIGEgbmV3IERh
dGVUaW1lIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQK
ICAgIyBKdWxpYW4gRGF5IE51bWJlciAramQrIGFuZCBob3VyICtoKywgbWlu
dXRlICttaW4rLCBzZWNvbmQgK3MrLgogICAjCkBAIC0xNTc1LDE3ICsxNjE1
LDIxIEBACiAgICMgK3NnKyBzcGVjaWZpZXMgdGhlIERheSBvZiBDYWxlbmRh
ciBSZWZvcm0uCiAgICMKICAgIyBBbGwgZGF5L3RpbWUgdmFsdWVzIGRlZmF1
bHQgdG8gMC4KLSAgZGVmIHNlbGYuamQoamQ9MCwgaD0wLCBtaW49MCwgcz0w
LCBvZj0wLCBzZz1JVEFMWSkKKyAgZGVmIHNlbGYuamRfcihqZD0wLCBoPTAs
IG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1
bmxlc3MgKGpkID0gX3ZhbGlkX2pkPyhqZCwgc2cpKSAmJgogCSAgIChmciA9
IF92YWxpZF90aW1lPyhoLCBtaW4sIHMpKQogICAgICAgcmFpc2UgQXJndW1l
bnRFcnJvciwgJ2ludmFsaWQgZGF0ZScKICAgICBlbmQKICAgICBpZiBTdHJp
bmcgPT09IG9mCiAgICAgICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9fZGlmZihv
ZikgfHwgMCwgODY0MDApCisgICAgZWxzaWYgRmxvYXQgPT09IG9mCisgICAg
ICBvZiA9IFJhdGlvbmFsKChvZiAqIDg2NDAwKS5yb3VuZCwgODY0MDApCiAg
ICAgZW5kCi0gICAgbmV3IShqZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBz
ZykKKyAgICBuZXdfciEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBvZiwgc2cp
CiAgIGVuZAogCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpqZF9yCisKICAg
IyBDcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcg
dG8gdGhlIHNwZWNpZmllZAogICAjIE9yZGluYWwgRGF0ZSBhbmQgaG91ciAr
aCssIG1pbnV0ZSArbWluKywgc2Vjb25kICtzKy4KICAgIwpAQCAtMTYwMCwx
NyArMTY0NCwyMSBAQAogICAjCiAgICMgK3krIGRlZmF1bHRzIHRvIC00NzEy
LCBhbmQgK2QrIHRvIDE7IHRoaXMgaXMgSnVsaWFuIERheSBOdW1iZXIKICAg
IyBkYXkgMC4gIFRoZSB0aW1lIHZhbHVlcyBkZWZhdWx0IHRvIDAuCi0gIGRl
ZiBzZWxmLm9yZGluYWwoeT0tNDcxMiwgZD0xLCBoPTAsIG1pbj0wLCBzPTAs
IG9mPTAsIHNnPUlUQUxZKQorICBkZWYgc2VsZi5vcmRpbmFsX3IoeT0tNDcx
MiwgZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpu
b2RvYzoKICAgICB1bmxlc3MgKGpkID0gX3ZhbGlkX29yZGluYWw/KHksIGQs
IHNnKSkgJiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBzKSkK
ICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAg
ICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRp
b25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lm
IEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQw
MCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpk
KGpkLCBmciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChq
ZCwgZnIsIG9mKSwgb2YsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2NsYXNz
X21ldGhvZCA6b3JkaW5hbF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZVRp
bWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZAogICAj
IENpdmlsIERhdGUgYW5kIGhvdXIgK2grLCBtaW51dGUgK21pbissIHNlY29u
ZCArcysuCiAgICMKQEAgLTE2MjUsMTggKzE2NzMsMjAgQEAKICAgIwogICAj
ICt5KyBkZWZhdWx0cyB0byAtNDcxMiwgK20rIHRvIDEsIGFuZCArZCsgdG8g
MTsgdGhpcyBpcyBKdWxpYW4gRGF5CiAgICMgTnVtYmVyIGRheSAwLiAgVGhl
IHRpbWUgdmFsdWVzIGRlZmF1bHQgdG8gMC4KLSAgZGVmIHNlbGYuY2l2aWwo
eT0tNDcxMiwgbT0xLCBkPTEsIGg9MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9
SVRBTFkpCisgIGRlZiBzZWxmLmNpdmlsX3IoeT0tNDcxMiwgbT0xLCBkPTEs
IGg9MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9SVRBTFkpICMgOm5vZG9jOgog
ICAgIHVubGVzcyAoamQgPSBfdmFsaWRfY2l2aWw/KHksIG0sIGQsIHNnKSkg
JiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBzKSkKICAgICAg
IHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAgICAgZW5k
CiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRpb25hbCh6
b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lmIEZsb2F0
ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQwMCkucm91
bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpkKGpkLCBm
ciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChqZCwgZnIs
IG9mKSwgb2YsIHNnKQogICBlbmQKIAotICBjbGFzcyA8PCBzZWxmOyBhbGlh
c19tZXRob2QgOm5ldywgOmNpdmlsIGVuZAorICBwcml2YXRlX2NsYXNzX21l
dGhvZCA6Y2l2aWxfcgogCiAgICMgQ3JlYXRlIGEgbmV3IERhdGVUaW1lIG9i
amVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQKICAgIyBDb21t
ZXJjaWFsIERhdGUgYW5kIGhvdXIgK2grLCBtaW51dGUgK21pbissIHNlY29u
ZCArcysuCkBAIC0xNjUzLDE3ICsxNzAzLDIxIEBACiAgICMgK3krIGRlZmF1
bHRzIHRvIC00NzEyLCArdysgdG8gMSwgYW5kICtkKyB0byAxOyB0aGlzIGlz
CiAgICMgSnVsaWFuIERheSBOdW1iZXIgZGF5IDAuCiAgICMgVGhlIHRpbWUg
dmFsdWVzIGRlZmF1bHQgdG8gMC4KLSAgZGVmIHNlbGYuY29tbWVyY2lhbCh5
PS00NzEyLCB3PTEsIGQ9MSwgaD0wLCBtaW49MCwgcz0wLCBvZj0wLCBzZz1J
VEFMWSkKKyAgZGVmIHNlbGYuY29tbWVyY2lhbF9yKHk9LTQ3MTIsIHc9MSwg
ZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpub2Rv
YzoKICAgICB1bmxlc3MgKGpkID0gX3ZhbGlkX2NvbW1lcmNpYWw/KHksIHcs
IGQsIHNnKSkgJiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBz
KSkKICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUn
CiAgICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBS
YXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVs
c2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4
NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9f
YWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2Fq
ZChqZCwgZnIsIG9mKSwgb2YsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2Ns
YXNzX21ldGhvZCA6Y29tbWVyY2lhbF9yCisKICAgZGVmIHNlbGYud2Vla251
bSh5PS00NzEyLCB3PTAsIGQ9MSwgZj0wLCBoPTAsIG1pbj0wLCBzPTAsIG9m
PTAsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1bmxlc3MgKGpkID0gX3Zh
bGlkX3dlZWtudW0/KHksIHcsIGQsIGYsIHNnKSkgJiYKIAkgICAoZnIgPSBf
dmFsaWRfdGltZT8oaCwgbWluLCBzKSkKQEAgLTE2NzEsNiArMTcyNSw4IEBA
CiAgICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBS
YXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVs
c2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4
NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAogICAgIG5ldyEoamRfdG9f
YWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCiAgIGVuZApAQCAtMTY4NCw2ICsx
NzQwLDggQEAKICAgICBlbmQKICAgICBpZiBTdHJpbmcgPT09IG9mCiAgICAg
ICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9fZGlmZihvZikgfHwgMCwgODY0MDAp
CisgICAgZWxzaWYgRmxvYXQgPT09IG9mCisgICAgICBvZiA9IFJhdGlvbmFs
KChvZiAqIDg2NDAwKS5yb3VuZCwgODY0MDApCiAgICAgZW5kCiAgICAgbmV3
IShqZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBzZykKICAgZW5kCkBAIC0x
NzcwLDE0ICsxODI4LDEzIEBACiAgICAgbmV3X2J5X2ZyYWdzKGVsZW0sIHNn
KQogICBlbmQKIAotICBwdWJsaWMgOmhvdXIsIDptaW4sIDpzZWMsIDpzZWNf
ZnJhY3Rpb24sIDp6b25lLCA6b2Zmc2V0LCA6bmV3X29mZnNldCwKLQkgOm1p
bnV0ZSwgOnNlY29uZCwgOnNlY29uZF9mcmFjdGlvbgotCi0gIGRlZiB0b19z
ICMgNHAKKyAgZGVmIHRvX3NfciAjIDpub2RvYzogIyA0cAogICAgIGZvcm1h
dCgnJS40ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlcycsCiAJICAgeWVh
ciwgbW9uLCBtZGF5LCBob3VyLCBtaW4sIHNlYywgem9uZSkKICAgZW5kCiAK
KyAgcHJpdmF0ZSA6dG9fc19yCisKIGVuZAogCiBjbGFzcyBUaW1lCkBAIC0x
Nzk1LDcgKzE4NTIsNyBAQAogICAgICAgUmF0aW9uYWwoc3Vic2VjLCA4NjQw
MCkKICAgICBvZiA9IFJhdGlvbmFsKHV0Y19vZmZzZXQsIDg2NDAwKQogICAg
IERhdGVUaW1lLm5ldyEoRGF0ZVRpbWUuX19zZW5kX18oOmpkX3RvX2FqZCwg
amQsIGZyLCBvZiksCi0JCSAgb2YsIERhdGVUaW1lOjpJVEFMWSkKKyAgICAg
ICAgICAgICAgICAgIG9mLCBEYXRlVGltZTo6SVRBTFkpCiAgIGVuZAogCiBl
bmQKQEAgLTE4MDQsMzEgKzE4NjEsOCBAQAogCiAgIGRlZiB0b190aW1lKCkg
VGltZS5sb2NhbCh5ZWFyLCBtb24sIG1kYXkpIGVuZAogICBkZWYgdG9fZGF0
ZSgpIHNlbGYgZW5kCi0gIGRlZiB0b19kYXRldGltZSgpIERhdGVUaW1lLm5l
dyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgQG9mLCBAc2cpIGVuZAorICBkZWYg
dG9fZGF0ZXRpbWUoKSBEYXRlVGltZS5uZXchKGpkX3RvX2FqZChqZCwgMCwg
MCksIG9mZnNldCwgc3RhcnQpIGVuZAogCi0gICMgQ3JlYXRlIGEgbmV3IERh
dGUgb2JqZWN0IHJlcHJlc2VudGluZyB0b2RheS4KLSAgIwotICAjICtzZysg
c3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYg
c2VsZi50b2RheShzZz1JVEFMWSkKLSAgICB0ID0gVGltZS5ub3cKLSAgICBq
ZCA9IGNpdmlsX3RvX2pkKHQueWVhciwgdC5tb24sIHQubWRheSwgc2cpCi0g
ICAgbmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzZykKLSAgZW5kCi0K
LSAgIyBDcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IHJlcHJlc2VudGlu
ZyB0aGUgY3VycmVudCB0aW1lLgotICAjCi0gICMgK3NnKyBzcGVjaWZpZXMg
dGhlIERheSBvZiBDYWxlbmRhciBSZWZvcm0uCi0gIGRlZiBzZWxmLm5vdyhz
Zz1JVEFMWSkKLSAgICB0ID0gVGltZS5ub3cKLSAgICBqZCA9IGNpdmlsX3Rv
X2pkKHQueWVhciwgdC5tb24sIHQubWRheSwgc2cpCi0gICAgZnIgPSB0aW1l
X3RvX2RheV9mcmFjdGlvbih0LmhvdXIsIHQubWluLCBbdC5zZWMsIDU5XS5t
aW4pICsKLSAgICAgIFJhdGlvbmFsKHQuc3Vic2VjLCA4NjQwMCkKLSAgICBv
ZiA9IFJhdGlvbmFsKHQudXRjX29mZnNldCwgODY0MDApCi0gICAgbmV3IShq
ZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBzZykKLSAgZW5kCi0KLSAgcHJp
dmF0ZV9jbGFzc19tZXRob2QgOm5vdwotCiBlbmQKIAogY2xhc3MgRGF0ZVRp
bWUgPCBEYXRlCkBAIC0xODM5LDEzICsxODczLDEyIEBACiAgICAgICBUaW1l
LnV0Yyh5ZWFyLCBtb24sIG1kYXksIGhvdXIsIG1pbiwgc2VjICsKIAkgICAg
ICAgc2VjX2ZyYWN0aW9uKQogICAgIGVuZC4KLQlnZXRsb2NhbAorICAgICAg
ICBnZXRsb2NhbAogICBlbmQKIAotICBkZWYgdG9fZGF0ZSgpIERhdGUubmV3
IShqZF90b19hamQoamQsIDAsIDApLCAwLCBAc2cpIGVuZAorICBkZWYgdG9f
ZGF0ZSgpIERhdGUubmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzdGFy
dCkgZW5kCiAgIGRlZiB0b19kYXRldGltZSgpIHNlbGYgZW5kCiAKLSAgcHJp
dmF0ZV9jbGFzc19tZXRob2QgOnRvZGF5Ci0gIHB1YmxpY19jbGFzc19tZXRo
b2QgIDpub3cKK2VuZAogCi1lbmQKK3JlcXVpcmUgJ2RhdGVfY29yZScKSW5k
ZXg6IGV4dC9kYXRlL2RhdGVfY29yZS5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGV4dC9kYXRlL2RhdGVfY29yZS5jCShyZXZpc2lvbiAwKQorKysg
ZXh0L2RhdGUvZGF0ZV9jb3JlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzU2NyBAQAorLyoKKyAgZGF0ZV9jb3JlLmMgPHN3aXRjaF9oaXR0ZXI+OiBD
b2RlZCBieSBUYWRheW9zaGkgRnVuYWJhIDIwMTAsIDIwMTEKKyovCisKKyNp
bmNsdWRlICJydWJ5LmgiCisjaW5jbHVkZSAicnVieS9lbmNvZGluZy5oIgor
I2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZp
bmUgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZmRlZiBSVUJZ
X0VYVENPTkZfSAorI2luY2x1ZGUgUlVCWV9FWFRDT05GX0gKKyNlbmRpZgor
CisjaWZuZGVmIEhBVkVfRkxPT1JMCisjZGVmaW5lIGZsb29ybCh4KSAoKGxv
bmcgZG91YmxlKWZsb29yKChkb3VibGUpKHgpKSkKKyNlbmRpZgorI2lmbmRl
ZiBIQVZFX1JPVU5ETAorI2RlZmluZSByb3VuZGwoeCkgKChsb25nIGRvdWJs
ZSlyb3VuZCgoZG91YmxlKSh4KSkpCisjZW5kaWYKKworI2RlZmluZSBMSUdI
VF9NT0RFICgxIDw8IDApCisjZGVmaW5lIEhBVkVfSkQgICAgKDEgPDwgMSkK
KyNkZWZpbmUgSEFWRV9ERiAgICAoMSA8PCAyKQorI2RlZmluZSBIQVZFX0NJ
VklMICgxIDw8IDMpCisjZGVmaW5lIEhBVkVfVElNRSAgKDEgPDwgNCkKKwor
I2RlZmluZSBsaWdodF9tb2RlX3AoeCkgKCh4KS0+ZmxhZ3MgJiBMSUdIVF9N
T0RFKQorI2RlZmluZSBoYXZlX2pkX3AoeCkgKCh4KS0+ZmxhZ3MgJiBIQVZF
X0pEKQorI2RlZmluZSBoYXZlX2RmX3AoeCkgKCh4KS0+ZmxhZ3MgJiBIQVZF
X0RGKQorI2RlZmluZSBoYXZlX2NpdmlsX3AoeCkgKCh4KS0+ZmxhZ3MgJiBI
QVZFX0NJVklMKQorI2RlZmluZSBoYXZlX3RpbWVfcCh4KSAoKHgpLT5mbGFn
cyAmIEhBVkVfVElNRSkKKworI2RlZmluZSBNSU5fWUVBUiAtNDcxMworI2Rl
ZmluZSBNQVhfWUVBUiAxMDAwMDAwCisjZGVmaW5lIE1JTl9KRCAtMzI3Cisj
ZGVmaW5lIE1BWF9KRCAzNjY5NjM5MjUKKworI2RlZmluZSBMSUdIVEFCTEVf
SkQoaikgKGogPj0gTUlOX0pEICYmIGogPD0gTUFYX0pEKQorI2RlZmluZSBM
SUdIVEFCTEVfWUVBUih5KSAoeSA+PSBNSU5fWUVBUiAmJiB5IDw9IE1BWF9Z
RUFSKQorI2RlZmluZSBMSUdIVEFCTEVfQ1dZRUFSKHkpIExJR0hUQUJMRV9Z
RUFSKHkpCisKKyNkZWZpbmUgSVRBTFkgMjI5OTE2MQorCisjZGVmaW5lIERB
WV9JTl9TRUNPTkRTIDg2NDAwCisjZGVmaW5lIFNFQ09ORF9JTl9OQU5PU0VD
T05EUyAxMDAwMDAwMDAwCisjZGVmaW5lIERBWV9JTl9OQU5PU0VDT05EUyA4
NjQwMDAwMDAwMDAwMExMCisKKy8qIGNvcGllZCBmcm9tIHRpbWUuYyAqLwor
I2RlZmluZSBORElWKHgseSkgKC0oLSgoeCkrMSkvKHkpKS0xKQorI2RlZmlu
ZSBOTU9EKHgseSkgKCh5KS0oLSgoeCkrMSklKHkpKS0xKQorI2RlZmluZSBE
SVYobixkKSAoKG4pPDAgPyBORElWKChuKSwoZCkpIDogKG4pLyhkKSkKKyNk
ZWZpbmUgTU9EKG4sZCkgKChuKTwwID8gTk1PRCgobiksKGQpKSA6IChuKSUo
ZCkpCisKK3VuaW9uIERhdGVEYXRhCit7CisgIHVuc2lnbmVkIGZsYWdzOwor
ICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGZsYWdzOworICAgIFZBTFVFIGFq
ZDsKKyAgICBWQUxVRSBvZjsKKyAgICBWQUxVRSBzZzsKKyAgICBWQUxVRSBj
YXNoOworICB9IHI7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgZmxhZ3M7
CisgICAgbG9uZyBqZDsJCS8qIGFzIHV0YyAqLworICAgIGRvdWJsZSBzZzsK
KyAgICAvKiBkZWNvZGVkIGFzIHV0Yz1sb2NhbCAqLworICAgIGludCB5ZWFy
OworICAgIGludCBtb247CisgICAgaW50IG1kYXk7CisgIH0gbDsKK307CisK
K3VuaW9uIERhdGVUaW1lRGF0YQoreworICB1bnNpZ25lZCBmbGFnczsKKyAg
c3RydWN0IHsKKyAgICB1bnNpZ25lZCBmbGFnczsKKyAgICBWQUxVRSBhamQ7
CisgICAgVkFMVUUgb2Y7CisgICAgVkFMVUUgc2c7CisgICAgVkFMVUUgY2Fz
aDsKKyAgfSByOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGZsYWdzOwor
ICAgIGxvbmcgamQ7CQkvKiBhcyB1dGMgKi8KKyAgICBpbnQgZGY7CQkvKiBh
cyB1dGMsIGluIHNlY3MgKi8KKyAgICBsb25nIGxvbmcgc2Y7CS8qIGluIG5h
bm8gc2VjcyAqLworICAgIGludCBvZjsJCS8qIGluIHNlY3MgKi8KKyAgICBk
b3VibGUgc2c7CisgICAgLyogZGVjb2RlZCBhcyBsb2NhbCAqLworICAgIGlu
dCB5ZWFyOworICAgIGludCBtb247CisgICAgaW50IG1kYXk7CisgICAgaW50
IGhvdXI7CisgICAgaW50IG1pbjsKKyAgICBpbnQgc2VjOworICB9IGw7Cit9
OworCisjZGVmaW5lIGdldF9kMSh4KSBcCisgIHVuaW9uIERhdGVEYXRhICpk
YXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZURhdGEsIGRh
dCkKKworI2RlZmluZSBnZXRfZDIoeCx5KSBcCisgIHVuaW9uIERhdGVEYXRh
ICphZGF0LCAqYmRhdDtcCisgIERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBE
YXRlRGF0YSwgYWRhdCk7XAorICBEYXRhX0dldF9TdHJ1Y3QoeSwgdW5pb24g
RGF0ZURhdGEsIGJkYXQpCisKKyNkZWZpbmUgZ2V0X2QxX2R0MSh4LHkpIFwK
KyAgdW5pb24gRGF0ZURhdGEgKmFkYXQ7XAorICB1bmlvbiBEYXRlVGltZURh
dGEgKmJkYXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZURh
dGEsIGFkYXQpO1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVU
aW1lRGF0YSwgYmRhdCkKKworI2RlZmluZSBnZXRfZHQxKHgpIFwKKyAgdW5p
b24gRGF0ZVRpbWVEYXRhICpkYXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwg
dW5pb24gRGF0ZVRpbWVEYXRhLCBkYXQpCisKKyNkZWZpbmUgZ2V0X2R0Mih4
LHkpIFwKKyAgdW5pb24gRGF0ZVRpbWVEYXRhICphZGF0LCAqYmRhdDtcCisg
IERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBEYXRlVGltZURhdGEsIGFkYXQp
O1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVUaW1lRGF0YSwg
YmRhdCkKKworI2RlZmluZSBnZXRfZHQxX2QxKHgseSkgXAorICB1bmlvbiBE
YXRlVGltZURhdGEgKmFkYXQ7XAorICB1bmlvbiBEYXRlRGF0YSAqYmRhdDtc
CisgIERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBEYXRlVGltZURhdGEsIGFk
YXQpO1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVEYXRhLCBi
ZGF0KQorCisjZGVmaW5lIGdldF9kdDJfY2FzdCh4LHkpIFwKKyAgdW5pb24g
RGF0ZURhdGEgKmF0bXAsICpidG1wO1wKKyAgdW5pb24gRGF0ZVRpbWVEYXRh
IGFidWYsIGJidWYsICphZGF0LCAqYmRhdDsJXAorICBpZiAoa19kYXRldGlt
ZV9wKHgpKVwKKyAgICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZVRp
bWVEYXRhLCBhZGF0KTtcCisgIGVsc2Uge1wKKyAgICBEYXRhX0dldF9TdHJ1
Y3QoeCwgdW5pb24gRGF0ZURhdGEsIGF0bXApO1wKKyAgICBhYnVmLmwuamQg
PSBhdG1wLT5sLmpkO1wKKyAgICBhYnVmLmwuZGYgPSAwO1wKKyAgICBhYnVm
Lmwuc2YgPSAwO1wKKyAgICBhYnVmLmwub2YgPSAwO1wKKyAgICBhYnVmLmwu
c2cgPSBhdG1wLT5sLnNnO1wKKyAgICBhYnVmLmwueWVhciA9IGF0bXAtPmwu
eWVhcjtcCisgICAgYWJ1Zi5sLm1vbiA9IGF0bXAtPmwubW9uO1wKKyAgICBh
YnVmLmwubWRheSA9IGF0bXAtPmwubWRheTtcCisgICAgYWJ1Zi5sLmhvdXIg
PSAwO1wKKyAgICBhYnVmLmwubWluID0gMDtcCisgICAgYWJ1Zi5sLnNlYyA9
IDA7XAorICAgIGFidWYuZmxhZ3MgPSBIQVZFX0RGIHwgSEFWRV9USU1FIHwg
YXRtcC0+bC5mbGFncztcCisgICAgYWRhdCA9ICZhYnVmO1wKKyAgfVwKKyAg
aWYgKGtfZGF0ZXRpbWVfcCh5KSlcCisgICAgRGF0YV9HZXRfU3RydWN0KHks
IHVuaW9uIERhdGVUaW1lRGF0YSwgYmRhdCk7XAorICBlbHNlIHtcCisgICAg
RGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVEYXRhLCBidG1wKTtcCisg
ICAgYmJ1Zi5sLmpkID0gYnRtcC0+bC5qZDtcCisgICAgYmJ1Zi5sLmRmID0g
MDtcCisgICAgYmJ1Zi5sLnNmID0gMDtcCisgICAgYmJ1Zi5sLm9mID0gMDtc
CisgICAgYmJ1Zi5sLnNnID0gYnRtcC0+bC5zZztcCisgICAgYmJ1Zi5sLnll
YXIgPSBidG1wLT5sLnllYXI7XAorICAgIGJidWYubC5tb24gPSBidG1wLT5s
Lm1vbjtcCisgICAgYmJ1Zi5sLm1kYXkgPSBidG1wLT5sLm1kYXk7XAorICAg
IGJidWYubC5ob3VyID0gMDtcCisgICAgYmJ1Zi5sLm1pbiA9IDA7XAorICAg
IGJidWYubC5zZWMgPSAwO1wKKyAgICBiYnVmLmZsYWdzID0gSEFWRV9ERiB8
IEhBVkVfVElNRSB8IGJ0bXAtPmwuZmxhZ3M7XAorICAgIGJkYXQgPSAmYmJ1
ZjtcCisgIH0KKworI2RlZmluZSBmX2FkZCh4LHkpIHJiX2Z1bmNhbGwoeCwg
JysnLCAxLCB5KQorI2RlZmluZSBmX3N1Yih4LHkpIHJiX2Z1bmNhbGwoeCwg
Jy0nLCAxLCB5KQorI2RlZmluZSBmX211bCh4LHkpIHJiX2Z1bmNhbGwoeCwg
JyonLCAxLCB5KQorI2RlZmluZSBmX2Rpdih4LHkpIHJiX2Z1bmNhbGwoeCwg
Jy8nLCAxLCB5KQorCisjZGVmaW5lIGZvcndhcmQwKGssbSkgcmJfZnVuY2Fs
bChrLCByYl9pbnRlcm4obSksIDApCisjZGVmaW5lIGNmb3J3YXJkMChtKSBm
b3J3YXJkMChrbGFzcywgbSkKKyNkZWZpbmUgaWZvcndhcmQwKG0pIGZvcndh
cmQwKHNlbGYsIG0pCisjZGVmaW5lIGZvcndhcmQxKGssbSxhKSByYl9mdW5j
YWxsKGssIHJiX2ludGVybihtKSwgMSwgYSkKKyNkZWZpbmUgaWZvcndhcmQx
KG0sYSkgZm9yd2FyZDEoc2VsZiwgbSwgYSkKKyNkZWZpbmUgZm9yd2FyZHYo
ayxtKSByYl9mdW5jYWxsMihrLCByYl9pbnRlcm4obSksIGFyZ2MsIGFyZ3Yp
CisjZGVmaW5lIGNmb3J3YXJkdihtKSBmb3J3YXJkdihrbGFzcywgbSkKKyNk
ZWZpbmUgaWZvcndhcmR2KG0pIGZvcndhcmR2KHNlbGYsIG0pCisjZGVmaW5l
IGZvcndhcmRvcChrLG0pIHJiX2Z1bmNhbGwoaywgcmJfaW50ZXJuKG0pLCAx
LCBvdGhlcikKKyNkZWZpbmUgaWZvcndhcmRvcChtKSBmb3J3YXJkb3Aoc2Vs
ZiwgbSkKKworc3RhdGljIFZBTFVFIGNEYXRlLCBjRGF0ZVRpbWU7CitzdGF0
aWMgVkFMVUUgcnplcm8sIHJoYWxmLCBkYXlfaW5fbmFub3NlY29uZHM7CisK
K3N0YXRpYyBpbnQgdmFsaWRfY2l2aWxfcChpbnQgeSwgaW50IG0sIGludCBk
LCBkb3VibGUgc2csCisJCQkgaW50ICpybSwgaW50ICpyZCwgbG9uZyAqcmpk
LCBpbnQgKm5zKTsKKworc3RhdGljIGludAorZmluZF9mZG95KGludCB5LCBk
b3VibGUgc2csIGxvbmcgKnJqZCwgaW50ICpucykKK3sKKyAgaW50IGQsIHJt
LCByZDsKKworICBmb3IgKGQgPSAxOyBkIDwgMzE7IGQrKykKKyAgICBpZiAo
dmFsaWRfY2l2aWxfcCh5LCAxLCBkLCBzZywgJnJtLCAmcmQsIHJqZCwgbnMp
KQorICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg
aW50CitmaW5kX2xkb3koaW50IHksIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBp
bnQgKm5zKQoreworICBpbnQgaSwgcm0sIHJkOworCisgIGZvciAoaSA9IDA7
IGkgPCAzMDsgaSsrKQorICAgIGlmICh2YWxpZF9jaXZpbF9wKHksIDEyLCAz
MSAtIGksIHNnLCAmcm0sICZyZCwgcmpkLCBucykpCisgICAgICByZXR1cm4g
MTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfZmRvbShp
bnQgeSwgaW50IG0sIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQor
eworICBpbnQgZCwgcm0sIHJkOworCisgIGZvciAoZCA9IDE7IGQgPCAzMTsg
ZCsrKQorICAgIGlmICh2YWxpZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0s
ICZyZCwgcmpkLCBucykpCisgICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfbGRvbShpbnQgeSwgaW50IG0sIGRv
dWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBpbnQgaSwgcm0s
IHJkOworCisgIGZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKQorICAgIGlmICh2
YWxpZF9jaXZpbF9wKHksIG0sIDMxIC0gaSwgc2csICZybSwgJnJkLCByamQs
IG5zKSkKKyAgICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworc3Rh
dGljIHZvaWQKK2NpdmlsX3RvX2pkKGludCB5LCBpbnQgbSwgaW50IGQsIGRv
dWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBkb3VibGUgYSwg
YiwgamQ7CisKKyAgaWYgKG0gPD0gMikgeworICAgIHkgLT0gMTsKKyAgICBt
ICs9IDEyOworICB9CisgIGEgPSBmbG9vcih5IC8gMTAwLjApOworICBiID0g
MiAtIGEgKyBmbG9vcihhIC8gNC4wKTsKKyAgamQgPSBmbG9vcigzNjUuMjUg
KiAoeSArIDQ3MTYpKSArCisgICAgZmxvb3IoMzAuNjAwMSAqIChtICsgMSkp
ICsKKyAgICBkICsgYiAtIDE1MjQ7CisgIGlmIChqZCA8IHNnKSB7CisgICAg
amQgLT0gYjsKKyAgICAqbnMgPSAwOworICB9IGVsc2UKKyAgICAqbnMgPSAx
OworCisgICpyamQgPSBqZDsKK30KKworc3RhdGljIHZvaWQKK2pkX3RvX2Np
dmlsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpybSwgaW50
ICpyZG9tKQoreworICBkb3VibGUgeCwgYSwgYiwgYywgZCwgZSwgeSwgbSwg
ZG9tOworCisgIGlmIChqZCA8IHNnKQorICAgIGEgPSBqZDsKKyAgZWxzZSB7
CisgICAgeCA9IGZsb29yKChqZCAtIDE4NjcyMTYuMjUpIC8gMzY1MjQuMjUp
OworICAgIGEgPSBqZCArIDEgKyB4IC0gZmxvb3IoeCAvIDQuMCk7CisgIH0K
KyAgYiA9IGEgKyAxNTI0OworICBjID0gZmxvb3IoKGIgLSAxMjIuMSkgLyAz
NjUuMjUpOworICBkID0gZmxvb3IoMzY1LjI1ICogYyk7CisgIGUgPSBmbG9v
cigoYiAtIGQpIC8gMzAuNjAwMSk7CisgIGRvbSA9IGIgLSBkIC0gZmxvb3Io
MzAuNjAwMSAqIGUpOworICBpZiAoZSA8PSAxMykgeworICAgIG0gPSBlIC0g
MTsKKyAgICB5ID0gYyAtIDQ3MTY7CisgIH0gZWxzZSB7CisgICAgbSA9IGUg
LSAxMzsKKyAgICB5ID0gYyAtIDQ3MTU7CisgIH0KKworICAqcnkgPSB5Owor
ICAqcm0gPSBtOworICAqcmRvbSA9IGRvbTsKK30KKworc3RhdGljIHZvaWQK
K29yZGluYWxfdG9famQoaW50IHksIGludCBkLCBkb3VibGUgc2csIGxvbmcg
KnJqZCwgaW50ICpucykKK3sKKyAgaW50IG5zMjsKKworICBmaW5kX2Zkb3ko
eSwgc2csIHJqZCwgJm5zMik7CisgICpyamQgKz0gZCAtIDE7CisgICpucyA9
ICgqcmpkIDwgc2cpID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkCitqZF90
b19vcmRpbmFsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpy
ZCkKK3sKKyAgaW50IHJtMiwgcmQyLCBuczsKKyAgbG9uZyByamQ7CisKKyAg
amRfdG9fY2l2aWwoamQsIHNnLCByeSwgJnJtMiwgJnJkMik7CisgIGZpbmRf
ZmRveSgqcnksIHNnLCAmcmpkLCAmbnMpOworICAqcmQgPSBqZCAtIHJqZCAr
IDE7Cit9CisKK3N0YXRpYyB2b2lkCitjb21tZXJjaWFsX3RvX2pkKGludCB5
LCBpbnQgdywgaW50IGQsIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5z
KQoreworICBsb25nIHJqZDI7CisgIGludCBuczI7CisKKyAgZmluZF9mZG95
KHksIHNnLCAmcmpkMiwgJm5zMik7CisgIHJqZDIgKz0gMzsKKyAgKnJqZCA9
CisgICAgKHJqZDIgLSBNT0QoKHJqZDIgLSAxKSArIDEsIDcpKSArCisgICAg
NyAqICh3IC0gMSkgKworICAgIChkIC0gMSk7CisgICpucyA9ICgqcmpkIDwg
c2cpID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkCitqZF90b19jb21tZXJj
aWFsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpydywgaW50
ICpyZCkKK3sKKyAgaW50IHJ5Miwgcm0yLCByZDIsIGEsIG5zMjsKKyAgbG9u
ZyByamQyOworCisgIGpkX3RvX2NpdmlsKGpkIC0gMywgc2csICZyeTIsICZy
bTIsICZyZDIpOworICBhID0gcnkyOworICBjb21tZXJjaWFsX3RvX2pkKGEg
KyAxLCAxLCAxLCBzZywgJnJqZDIsICZuczIpOworICBpZiAoamQgPj0gcmpk
MikKKyAgICAqcnkgPSBhICsgMTsKKyAgZWxzZSB7CisgICAgY29tbWVyY2lh
bF90b19qZChhLCAxLCAxLCBzZywgJnJqZDIsICZuczIpOworICAgICpyeSA9
IGE7CisgIH0KKyAgKnJ3ID0gMSArIERJVihqZCAtIHJqZDIsICA3KTsKKyAg
KnJkID0gTU9EKGpkICsgMSwgNyk7CisgIGlmICgqcmQgPT0gMCkKKyAgICAq
cmQgPSA3OworfQorCitzdGF0aWMgdm9pZAord2Vla251bV90b19qZChpbnQg
eSwgaW50IHcsIGludCBkLCBpbnQgZiwgZG91YmxlIHNnLCBsb25nICpyamQs
IGludCAqbnMpCit7CisgIGxvbmcgcmpkMjsKKyAgaW50IG5zMjsKKworICBm
aW5kX2Zkb3koeSwgc2csICZyamQyLCAmbnMyKTsKKyAgcmpkMiArPSA2Owor
ICAqcmpkID0gKHJqZDIgLSBNT0QoKChyamQyIC0gZikgKyAxKSwgNykgLSA3
KSArIDcgKiB3ICsgZDsKKyAgKm5zID0gKCpyamQgPCBzZykgPyAwIDogMTsK
K30KKworc3RhdGljIHZvaWQKK2pkX3RvX3dlZWtudW0obG9uZyBqZCwgaW50
IGYsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpydywgaW50ICpyZCkKK3sK
KyAgaW50IHJtLCByZDIsIG5zOworICBsb25nIHJqZCwgajsKKworICBqZF90
b19jaXZpbChqZCwgc2csIHJ5LCAmcm0sICZyZDIpOworICBmaW5kX2Zkb3ko
KnJ5LCBzZywgJnJqZCwgJm5zKTsKKyAgcmpkICs9IDY7CisgIGogPSBqZCAt
IChyamQgLSBNT0QoKHJqZCAtIGYpICsgMSwgNykpICsgNzsKKyAgKnJ3ID0g
RElWKGosIDcpOworICAqcmQgPSBNT0QoaiwgNyk7Cit9CisKK3N0YXRpYyB2
b2lkCitudGhfa2RheV90b19qZChpbnQgeSwgaW50IG0sIGludCBuLCBpbnQg
aywgZG91YmxlIHNnLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGxvbmcg
cmpkMjsKKyAgaW50IG5zMjsKKworICBpZiAobiA+IDApIHsKKyAgICBmaW5k
X2Zkb20oeSwgbSwgc2csICZyamQyLCAmbnMyKTsKKyAgICByamQyIC09IDE7
CisgIH0gZWxzZSB7CisgICAgZmluZF9sZG9tKHksIG0sIHNnLCAmcmpkMiwg
Jm5zMik7CisgICAgcmpkMiArPSA3OworICB9CisgICpyamQgPSAocmpkMiAt
IE1PRCgocmpkMiAtIGspICsgMSwgNykpICsgNyAqIG47CisgICpucyA9ICgq
cmpkIDwgc2cpID8gMCA6IDE7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGpk
X3RvX3dkYXkobG9uZyBqZCk7CisKK3N0YXRpYyB2b2lkCitqZF90b19udGhf
a2RheShsb25nIGpkLCBkb3VibGUgc2csIGludCAqcnksIGludCAqcm0sIGlu
dCAqcm4sIGludCAqcmspCit7CisgIGludCByZCwgbnMyOworICBsb25nIHJq
ZDsKKworICBqZF90b19jaXZpbChqZCwgc2csIHJ5LCBybSwgJnJkKTsKKyAg
ZmluZF9mZG9tKCpyeSwgKnJtLCBzZywgJnJqZCwgJm5zMik7CisgICpybiA9
IERJVihqZCAtIHJqZCwgNykgKyAxOworICAqcmsgPSBqZF90b193ZGF5KGpk
KTsKK30KKworc3RhdGljIGludAordmFsaWRfb3JkaW5hbF9wKGludCB5LCBp
bnQgZCwgZG91YmxlIHNnLAorCQlpbnQgKnJkLCBsb25nICpyamQsIGludCAq
bnMpCit7CisgIGludCByeTIsIHJkMjsKKworICBpZiAoZCA8IDApIHsKKyAg
ICBsb25nIHJqZDI7CisgICAgaW50IG5zMjsKKworICAgIGlmICghZmluZF9s
ZG95KHksIHNnLCAmcmpkMiwgJm5zMikpCisgICAgICByZXR1cm4gMDsKKyAg
ICBqZF90b19vcmRpbmFsKHJqZDIgKyBkICsgMSwgc2csICZyeTIsICZyZDIp
OworICAgIGlmIChyeTIgIT0geSkKKyAgICAgIHJldHVybiAwOworICAgIGQg
PSByZDI7CisgIH0KKyAgb3JkaW5hbF90b19qZCh5LCBkLCBzZywgcmpkLCBu
cyk7CisgIGpkX3RvX29yZGluYWwoKnJqZCwgc2csICZyeTIsICZyZDIpOwor
ICBpZiAocnkyICE9IHkgfHwgcmQyICE9IGQpCisgICAgcmV0dXJuIDA7Cisg
IHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgaW50IG1vbnRodGFiWzJd
WzEzXSA9IHsKKyAgeyAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwg
MzEsIDMwLCAzMSwgMzAsIDMxIH0sCisgIHsgMCwgMzEsIDI5LCAzMSwgMzAs
IDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9Cit9OworCitpbmxp
bmUgc3RhdGljIGludAorbGVhcF9wKGludCB5KQoreworICByZXR1cm4gTU9E
KHksIDQpID09IDAgJiYgeSAlIDEwMCAhPSAwIHx8IE1PRCh5LCA0MDApID09
IDA7Cit9CisKK3N0YXRpYyBpbnQKK2xhc3RfZGF5X29mX21vbnRoKGludCB5
LCBpbnQgbSkKK3sKKyAgcmV0dXJuIG1vbnRodGFiW2xlYXBfcCh5KSA/IDEg
OiAwXVttXTsKK30KKworc3RhdGljIGludAordmFsaWRfZ3JlZ29yaWFuX3Ao
aW50IHksIGludCBtLCBpbnQgZCwgaW50ICpybSwgaW50ICpyZCkKK3sKKyAg
aW50IGxhc3Q7CisKKyAgaWYgKG0gPCAwKQorICAgIG0gKz0gMTM7CisgIGxh
c3QgPSBsYXN0X2RheV9vZl9tb250aCh5LCBtKTsKKyAgaWYgKGQgPCAwKQor
ICAgIGQgPSBsYXN0ICsgZCArIDE7CisKKyAgKnJtID0gbTsKKyAgKnJkID0g
ZDsKKworICByZXR1cm4gIShtIDwgMCB8fCBtID4gMTIgfHwKKwkgICBkIDwg
MSB8fCBkID4gbGFzdCk7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkX2Npdmls
X3AoaW50IHksIGludCBtLCBpbnQgZCwgZG91YmxlIHNnLAorCSAgICAgIGlu
dCAqcm0sIGludCAqcmQsIGxvbmcgKnJqZCwgaW50ICpucykKK3sKKyAgaW50
IHJ5OworCisgIGlmIChtIDwgMCkKKyAgICBtICs9IDEzOworICBpZiAoZCA8
IDApIHsKKyAgICBpZiAoIWZpbmRfbGRvbSh5LCBtLCBzZywgcmpkLCBucykp
CisgICAgICByZXR1cm4gMDsKKyAgICBqZF90b19jaXZpbCgqcmpkICsgZCAr
IDEsIHNnLCAmcnksIHJtLCByZCk7CisgICAgaWYgKHJ5ICE9IHkgfHwgKnJt
ICE9IG0pCisgICAgICByZXR1cm4gMDsKKyAgICBkID0gKnJkOworICB9Cisg
IGNpdmlsX3RvX2pkKHksIG0sIGQsIHNnLCByamQsIG5zKTsKKyAgamRfdG9f
Y2l2aWwoKnJqZCwgc2csICZyeSwgcm0sIHJkKTsKKyAgaWYgKHJ5ICE9IHkg
fHwgKnJtICE9IG0gfHwgKnJkICE9IGQpCisgICAgcmV0dXJuIDA7CisgIHJl
dHVybiAxOworfQorCitzdGF0aWMgaW50Cit2YWxpZF9jb21tZXJjaWFsX3Ao
aW50IHksIGludCB3LCBpbnQgZCwgZG91YmxlIHNnLAorCQkgICBpbnQgKnJ3
LCBpbnQgKnJkLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGludCBuczIs
IHJ5MiwgcncyLCByZDI7CisKKyAgaWYgKGQgPCAwKQorICAgIGQgKz0gODsK
KyAgaWYgKHcgPCAwKSB7CisgICAgbG9uZyByamQyOworCisgICAgY29tbWVy
Y2lhbF90b19qZCh5ICsgMSwgMSwgMSwgc2csICZyamQyLCAmbnMyKTsKKyAg
ICBqZF90b19jb21tZXJjaWFsKHJqZDIgKyB3ICogNywgc2csICZyeTIsICZy
dzIsICZyZDIpOworICAgIGlmIChyeTIgIT0geSkKKyAgICAgIHJldHVybiAw
OworICAgIHcgPSBydzI7CisgIH0KKyAgY29tbWVyY2lhbF90b19qZCh5LCB3
LCBkLCBzZywgcmpkLCBucyk7CisgIGpkX3RvX2NvbW1lcmNpYWwoKnJqZCwg
c2csICZyeTIsIHJ3LCByZCk7CisgIGlmICh5ICE9IHJ5MiB8fCB3ICE9ICpy
dyB8fCBkICE9ICpyZCkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9
CisKK3N0YXRpYyBpbnQKK3ZhbGlkX3RpbWVfcChpbnQgaCwgaW50IG1pbiwg
aW50IHMsIGludCAqcmgsIGludCAqcm1pbiwgaW50ICpycykKK3sKKyAgaWYg
KGggPCAwKQorICAgIGggKz0gMjQ7CisgIGlmIChtaW4gPCAwKQorICAgIG1p
biArPSA2MDsKKyAgaWYgKHMgPCAwKQorICAgIHMgKz0gNjA7CisgICpyaCA9
IGg7CisgICpybWluID0gbWluOworICAqcnMgPSBzOworICByZXR1cm4gISho
ICAgPCAwIHx8IGggICA+IDI0IHx8CisJICAgbWluIDwgMCB8fCBtaW4gPiA1
OSB8fAorCSAgIHMgICA8IDAgfHwgcyAgID4gNTkgfHwKKwkgICAoaCA9PSAy
NCAmJiAobWluID4gMCB8fCBzID4gMCkpKTsKK30KKworaW5saW5lIHN0YXRp
YyBpbnQKK2RmX2xvY2FsX3RvX3V0YyhpbnQgZGYsIGludCBvZikKK3sKKyAg
ZGYgLT0gb2Y7CisgIGlmIChkZiA8IDApCisgICAgZGYgKz0gREFZX0lOX1NF
Q09ORFM7CisgIGVsc2UgaWYgKGRmID49IERBWV9JTl9TRUNPTkRTKQorICAg
IGRmIC09IERBWV9JTl9TRUNPTkRTOworICByZXR1cm4gZGY7Cit9CisKK2lu
bGluZSBzdGF0aWMgaW50CitkZl91dGNfdG9fbG9jYWwoaW50IGRmLCBpbnQg
b2YpCit7CisgIGRmICs9IG9mOworICBpZiAoZGYgPCAwKQorICAgIGRmICs9
IERBWV9JTl9TRUNPTkRTOworICBlbHNlIGlmIChkZiA+PSBEQVlfSU5fU0VD
T05EUykKKyAgICBkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgcmV0dXJuIGRm
OworfQorCitpbmxpbmUgc3RhdGljIGxvbmcKK2pkX2xvY2FsX3RvX3V0Yyhs
b25nIGpkLCBpbnQgZGYsIGludCBvZikKK3sKKyAgZGYgLT0gb2Y7CisgIGlm
IChkZiA8IDApCisgICAgamQgLT0gMTsKKyAgZWxzZSBpZiAoZGYgPj0gREFZ
X0lOX1NFQ09ORFMpCisgICAgamQgKz0gMTsKKyAgcmV0dXJuIGpkOworfQor
CitpbmxpbmUgc3RhdGljIGxvbmcKK2pkX3V0Y190b19sb2NhbChsb25nIGpk
LCBpbnQgZGYsIGludCBvZikKK3sKKyAgZGYgKz0gb2Y7CisgIGlmIChkZiA8
IDApCisgICAgamQgLT0gMTsKKyAgZWxzZSBpZiAoZGYgPj0gREFZX0lOX1NF
Q09ORFMpCisgICAgamQgKz0gMTsKKyAgcmV0dXJuIGpkOworfQorCitpbmxp
bmUgc3RhdGljIGludAordGltZV90b19kZihpbnQgaCwgaW50IG1pbiwgaW50
IHMpCit7CisgIHJldHVybiBoICogMzYwMCArIG1pbiAqIDYwICsgczsKK30K
KworaW5saW5lIHN0YXRpYyBpbnQKK2pkX3RvX3dkYXkobG9uZyBqZCkKK3sK
KyAgcmV0dXJuIE1PRChqZCArIDEsIDcpOworfQorCitzdGF0aWMgaW50Citk
YXlkaWZmX3RvX3NlYyhWQUxVRSB2b2YsIGludCAqcm9mKQoreworICBzd2l0
Y2ggKFRZUEUodm9mKSkgeworICBjYXNlIFRfRklYTlVNOgorICAgIHsKKyAg
ICAgIGludCBuOworCisgICAgICBuID0gRklYMklOVCh2b2YpOworICAgICAg
aWYgKG4gIT0gLTEgJiYgbiAhPSAwICYmIG4gIT0gMSkKKwlyZXR1cm4gMDsK
KyAgICAgICpyb2YgPSBuICogREFZX0lOX1NFQ09ORFM7CisgICAgICByZXR1
cm4gMTsKKyAgICB9CisgIGNhc2UgVF9GTE9BVDoKKyAgICB7CisgICAgICBk
b3VibGUgbjsKKworICAgICAgbiA9IE5VTTJEQkwodm9mKTsKKyAgICAgIGlm
IChuIDwgLURBWV9JTl9TRUNPTkRTIHx8IG4gPiBEQVlfSU5fU0VDT05EUykK
KwlyZXR1cm4gMDsKKyAgICAgICpyb2YgPSByb3VuZChuICogREFZX0lOX1NF
Q09ORFMpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBjYXNlIFRfUkFU
SU9OQUw6CisgICAgeworICAgICAgVkFMVUUgdnMgPSBmX211bCh2b2YsIElO
VDJGSVgoREFZX0lOX1NFQ09ORFMpKTsKKyAgICAgIFZBTFVFIHZuID0gUlJB
VElPTkFMKHZzKS0+bnVtOworICAgICAgVkFMVUUgdmQgPSBSUkFUSU9OQUwo
dnMpLT5kZW47CisgICAgICBpbnQgbiwgZDsKKworICAgICAgaWYgKCFGSVhO
VU1fUCh2bikgfHwgIUZJWE5VTV9QKHZkKSkKKwlyZXR1cm4gMDsKKyAgICAg
IG4gPSBGSVgySU5UKHZuKTsKKyAgICAgIGQgPSBGSVgySU5UKHZkKTsKKyAg
ICAgIGlmIChkICE9IDEpCisJcmV0dXJuIDA7CisgICAgICBpZiAobiA8IC1E
QVlfSU5fU0VDT05EUyB8fCBuID4gREFZX0lOX1NFQ09ORFMpCisJcmV0dXJu
IDA7CisgICAgICAqcm9mID0gbjsKKyAgICAgIHJldHVybiAxOworICAgIH0K
KyAgY2FzZSBUX1NUUklORzoKKyAgICB7CisgICAgICBWQUxVRSB2cyA9IHJi
X2Z1bmNhbGwoY0RhdGUsIHJiX2ludGVybigiem9uZV90b19kaWZmIiksIDEs
IHZvZik7CisgICAgICBpbnQgbjsKKworICAgICAgaWYgKCFGSVhOVU1fUCh2
cykpCisJcmV0dXJuIDA7CisgICAgICBuID0gRklYMklOVCh2cyk7CisgICAg
ICBpZiAobiA8IC1EQVlfSU5fU0VDT05EUyB8fCBuID4gREFZX0lOX1NFQ09O
RFMpCisJcmV0dXJuIDA7CisgICAgICAqcm9mID0gbjsKKyAgICAgIHJldHVy
biAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworaW5saW5lIHN0
YXRpYyB2b2lkCitnZXRfZF9qZCh1bmlvbiBEYXRlRGF0YSAqeCkKK3sKKyAg
aWYgKCFoYXZlX2pkX3AoeCkpIHsKKyAgICBsb25nIGpkOworICAgIGludCBu
czsKKworICAgIGFzc2VydChoYXZlX2NpdmlsX3AoeCkpOworCisgICAgY2l2
aWxfdG9famQoeC0+bC55ZWFyLCB4LT5sLm1vbiwgeC0+bC5tZGF5LCB4LT5s
LnNnLCAmamQsICZucyk7CisgICAgeC0+bC5qZCA9IGpkOworICAgIHgtPmwu
ZmxhZ3MgfD0gSEFWRV9KRDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIHZv
aWQKK2dldF9kX2NpdmlsKHVuaW9uIERhdGVEYXRhICp4KQoreworICBpZiAo
IWhhdmVfY2l2aWxfcCh4KSkgeworICAgIGludCB5LCBtLCBkOworCisgICAg
YXNzZXJ0KGhhdmVfamRfcCh4KSk7CisKKyAgICBqZF90b19jaXZpbCh4LT5s
LmpkLCB4LT5sLnNnLCAmeSwgJm0sICZkKTsKKyAgICB4LT5sLnllYXIgPSB5
OworICAgIHgtPmwubW9uID0gbTsKKyAgICB4LT5sLm1kYXkgPSBkOworICAg
IHgtPmwuZmxhZ3MgfD0gSEFWRV9DSVZJTDsKKyAgfQorfQorCitpbmxpbmUg
c3RhdGljIHZvaWQKK2dldF9kdF9kZih1bmlvbiBEYXRlVGltZURhdGEgKngp
Cit7CisgIGlmICghaGF2ZV9kZl9wKHgpKSB7CisgICAgYXNzZXJ0KGhhdmVf
dGltZV9wKHgpKTsKKworICAgIHgtPmwuZGYgPSBkZl9sb2NhbF90b191dGMo
dGltZV90b19kZih4LT5sLmhvdXIsIHgtPmwubWluLCB4LT5sLnNlYyksCisJ
CQkgICAgICB4LT5sLm9mKTsKKyAgICB4LT5sLmZsYWdzIHw9IEhBVkVfREY7
CisgIH0KK30KKworaW5saW5lIHN0YXRpYyB2b2lkCitnZXRfZHRfdGltZSh1
bmlvbiBEYXRlVGltZURhdGEgKngpCit7CisgIGludCByOworCisgIGlmICgh
aGF2ZV90aW1lX3AoeCkpIHsKKyAgICBhc3NlcnQoaGF2ZV9kZl9wKHgpKTsK
KworICAgIHIgPSBkZl91dGNfdG9fbG9jYWwoeC0+bC5kZiwgeC0+bC5vZik7
CisgICAgeC0+bC5ob3VyID0gciAvIDM2MDA7CisgICAgciAlPSAzNjAwOwor
ICAgIHgtPmwubWluID0gciAvIDYwOworICAgIHgtPmwuc2VjID0gciAlIDYw
OworICAgIHgtPmwuZmxhZ3MgfD0gSEFWRV9USU1FOworICB9Cit9CisKK2lu
bGluZSBzdGF0aWMgdm9pZAorZ2V0X2R0X2pkKHVuaW9uIERhdGVUaW1lRGF0
YSAqeCkKK3sKKyAgaWYgKCFoYXZlX2pkX3AoeCkpIHsKKyAgICBsb25nIGpk
OworICAgIGludCBuczsKKworICAgIGFzc2VydChoYXZlX2NpdmlsX3AoeCkp
OworCisgICAgY2l2aWxfdG9famQoeC0+bC55ZWFyLCB4LT5sLm1vbiwgeC0+
bC5tZGF5LCB4LT5sLnNnLCAmamQsICZucyk7CisKKyAgICBnZXRfZHRfdGlt
ZSh4KTsKKyAgICB4LT5sLmpkID0gamRfbG9jYWxfdG9fdXRjKGpkLAorCQkJ
ICAgIHRpbWVfdG9fZGYoeC0+bC5ob3VyLCB4LT5sLm1pbiwgeC0+bC5zZWMp
LAorCQkJICAgIHgtPmwub2YpOworICAgIHgtPmwuZmxhZ3MgfD0gSEFWRV9K
RDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIHZvaWQKK2dldF9kdF9jaXZp
bCh1bmlvbiBEYXRlVGltZURhdGEgKngpCit7CisgIGlmICghaGF2ZV9jaXZp
bF9wKHgpKSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgeSwgbSwgZDsKKwor
ICAgIGFzc2VydChoYXZlX2pkX3AoeCkpOworCisgICAgZ2V0X2R0X2RmKHgp
OworICAgIGpkID0gamRfdXRjX3RvX2xvY2FsKHgtPmwuamQsIHgtPmwuZGYs
IHgtPmwub2YpOworICAgIGpkX3RvX2NpdmlsKGpkLCB4LT5sLnNnLCAmeSwg
Jm0sICZkKTsKKyAgICB4LT5sLnllYXIgPSB5OworICAgIHgtPmwubW9uID0g
bTsKKyAgICB4LT5sLm1kYXkgPSBkOworICAgIHgtPmwuZmxhZ3MgfD0gSEFW
RV9DSVZJTDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIGxvbmcKK2xvY2Fs
X2pkKHVuaW9uIERhdGVUaW1lRGF0YSAqeCkKK3sKKyAgYXNzZXJ0KGhhdmVf
amRfcCh4KSk7CisgIGFzc2VydChoYXZlX2RmX3AoeCkpOworICByZXR1cm4g
amRfdXRjX3RvX2xvY2FsKHgtPmwuamQsIHgtPmwuZGYsIHgtPmwub2YpOwor
fQorCitpbmxpbmUgc3RhdGljIGludAorbG9jYWxfZGYodW5pb24gRGF0ZVRp
bWVEYXRhICp4KQoreworICBhc3NlcnQoaGF2ZV9kZl9wKHgpKTsKKyAgcmV0
dXJuIGRmX3V0Y190b19sb2NhbCh4LT5sLmRmLCB4LT5sLm9mKTsKK30KKwor
aW5saW5lIHN0YXRpYyBWQUxVRQorZl9raW5kX29mX3AoVkFMVUUgeCwgVkFM
VUUgYykKK3sKKyAgcmV0dXJuIHJiX29ial9pc19raW5kX29mKHgsIGMpOwor
fQorCitpbmxpbmUgc3RhdGljIFZBTFVFCitrX2RhdGVfcChWQUxVRSB4KQor
eworICByZXR1cm4gZl9raW5kX29mX3AoeCwgY0RhdGUpOworfQorCitpbmxp
bmUgc3RhdGljIFZBTFVFCitrX2RhdGV0aW1lX3AoVkFMVUUgeCkKK3sKKyAg
cmV0dXJuIGZfa2luZF9vZl9wKHgsIGNEYXRlVGltZSk7Cit9CisKK2lubGlu
ZSBzdGF0aWMgVkFMVUUKK2tfbnVtZXJpY19wKFZBTFVFIHgpCit7CisgIHJl
dHVybiBmX2tpbmRfb2ZfcCh4LCByYl9jTnVtZXJpYyk7Cit9CisKK3N0YXRp
YyBWQUxVRQorZGF0ZV9zX3ZhbGlkX2pkX3AoaW50IGFyZ2MsIFZBTFVFICph
cmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdmpkLCB2c2c7CisKKyAg
cmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIxMSIsICZ2amQsICZ2c2cpOwor
CisgIHJldHVybiBRdHJ1ZTsKK30KKworc3RhdGljIFZBTFVFCitkYXRlX3Nf
dmFsaWRfY2l2aWxfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGts
YXNzKQoreworICBWQUxVRSB2eSwgdm0sIHZkLCB2c2c7CisgIGludCB5LCBt
LCBkLCBybSwgcmQ7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3Mo
YXJnYywgYXJndiwgIjMxIiwgJnZ5LCAmdm0sICZ2ZCwgJnZzZyk7CisKKyAg
aWYgKCEoRklYTlVNX1AodnkpICYmCisJRklYTlVNX1Aodm0pICYmCisJRklY
TlVNX1AodmQpKSkKKyAgICByZXR1cm4gY2ZvcndhcmR2KCJ2YWxpZF9jaXZp
bF9yPyIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJE
QkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00
NzEyOworICBtID0gMTsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdjKSB7
CisgIGNhc2UgNDoKKyAgY2FzZSAzOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7
CisgIGNhc2UgMjoKKyAgICBtID0gTlVNMkxPTkcodm0pOworICBjYXNlIDE6
CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9Z
RUFSKHkpKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigidmFsaWRfY2l2aWxf
cj8iKTsKKyAgfQorCisgIGlmIChpc2luZihzZykgJiYgc2cgPCAwKSB7Cisg
ICAgaWYgKCF2YWxpZF9ncmVnb3JpYW5fcCh5LCBtLCBkLCAmcm0sICZyZCkp
CisgICAgICByZXR1cm4gUWZhbHNlOworICAgIHJldHVybiBRdHJ1ZTsKKyAg
fSBlbHNlIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsKKworICAgIGlm
ICghdmFsaWRfY2l2aWxfcCh5LCBtLCBkLCBzZywgJnJtLCAmcmQsICZqZCwg
Jm5zKSkKKyAgICAgIHJldHVybiBRZmFsc2U7CisgICAgcmV0dXJuIFF0cnVl
OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3ZhbGlkX29yZGlu
YWxfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQorewor
ICBWQUxVRSB2eSwgdmQsIHZzZzsKKyAgaW50IHksIGQsIHJkOworICBkb3Vi
bGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIyMSIsICZ2
eSwgJnZkLCAmdnNnKTsKKworICBpZiAoIShGSVhOVU1fUCh2eSkgJiYKKwlG
SVhOVU1fUCh2ZCkpKQorICAgIHJldHVybiBjZm9yd2FyZHYoInZhbGlkX29y
ZGluYWxfcj8iKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBO
VU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIHkg
PSAtNDcxMjsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdjKSB7CisgIGNh
c2UgMzoKKyAgY2FzZSAyOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7CisgIGNh
c2UgMToKKyAgICB5ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRB
QkxFX1lFQVIoeSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJ2YWxpZF9v
cmRpbmFsX3I/Iik7CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBp
bnQgbnM7CisKKyAgICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywg
JnJkLCAmamQsICZucykpCisgICAgICByZXR1cm4gUWZhbHNlOworICAgIHJl
dHVybiBRdHJ1ZTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RhdGVfc192
YWxpZF9jb21tZXJjaWFsX3AoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxV
RSBrbGFzcykKK3sKKyAgVkFMVUUgdnksIHZ3LCB2ZCwgdnNnOworICBpbnQg
eSwgdywgZCwgcncsIHJkOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9h
cmdzKGFyZ2MsIGFyZ3YsICIzMSIsICZ2eSwgJnZ3LCAmdmQsICZ2c2cpOwor
CisgIGlmICghKEZJWE5VTV9QKHZ5KSAmJgorCUZJWE5VTV9QKHZ3KSAmJgor
CUZJWE5VTV9QKHZkKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigidmFsaWRf
Y29tbWVyY2lhbF9yPyIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBz
ZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisK
KyAgeSA9IC00NzEyOworICB3ID0gMTsKKyAgZCA9IDE7CisKKyAgc3dpdGNo
IChhcmdjKSB7CisgIGNhc2UgNDoKKyAgY2FzZSAzOgorICAgIGQgPSBOVU0y
TE9ORyh2ZCk7CisgIGNhc2UgMjoKKyAgICB3ID0gTlVNMkxPTkcodncpOwor
ICBjYXNlIDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJ
R0hUQUJMRV9DV1lFQVIoeSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJ2
YWxpZF9jb21tZXJjaWFsX3I/Iik7CisgIH0KKworICB7CisgICAgbG9uZyBq
ZDsKKyAgICBpbnQgbnM7CisKKyAgICBpZiAoIXZhbGlkX2NvbW1lcmNpYWxf
cCh5LCB3LCBkLCBzZywgJnJ3LCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJl
dHVybiBRZmFsc2U7CisgICAgcmV0dXJuIFF0cnVlOworICB9Cit9CisKK3N0
YXRpYyB2b2lkCitkX3JpZ2h0X2djX21hcmsodW5pb24gRGF0ZURhdGEgKmRh
dCkKK3sKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkgeworICAgIHJiX2dj
X21hcmsoZGF0LT5yLmFqZCk7CisgICAgcmJfZ2NfbWFyayhkYXQtPnIub2Yp
OworICAgIHJiX2djX21hcmsoZGF0LT5yLnNnKTsKKyAgICByYl9nY19tYXJr
KGRhdC0+ci5jYXNoKTsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIFZBTFVF
CitkX3JpZ2h0X3NfbmV3X2ludGVybmFsKFZBTFVFIGtsYXNzLCBWQUxVRSBh
amQsIFZBTFVFIG9mLCBWQUxVRSBzZywKKwkJICAgICAgIHVuc2lnbmVkIGZs
YWdzKQoreworICB1bmlvbiBEYXRlRGF0YSAqZGF0OworICBWQUxVRSBvYmo7
CisKKyAgb2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgdW5pb24gRGF0
ZURhdGEsIGRfcmlnaHRfZ2NfbWFyaywgLTEsIGRhdCk7CisKKyAgZGF0LT5y
LmFqZCA9IGFqZDsKKyAgZGF0LT5yLm9mID0gb2Y7CisgIGRhdC0+ci5zZyA9
IHNnOworICBkYXQtPnIuY2FzaCA9IHJiX2hhc2hfbmV3KCk7CisgIGRhdC0+
ci5mbGFncyA9IGZsYWdzOworCisgIHJldHVybiBvYmo7Cit9CisKK2lubGlu
ZSBzdGF0aWMgVkFMVUUKK2RfbGl0ZV9zX25ld19pbnRlcm5hbChWQUxVRSBr
bGFzcywgbG9uZyBqZCwgZG91YmxlIHNnLAorCQkgICAgICBpbnQgeSwgaW50
IG0sIGludCBkLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgdW5pb24gRGF0ZURh
dGEgKmRhdDsKKyAgVkFMVUUgb2JqOworCisgIG9iaiA9IERhdGFfTWFrZV9T
dHJ1Y3Qoa2xhc3MsIHVuaW9uIERhdGVEYXRhLCBkX3JpZ2h0X2djX21hcmss
IC0xLCBkYXQpOworCisgIGRhdC0+bC5qZCA9IGpkOworICBkYXQtPmwuc2cg
PSBzZzsKKyAgZGF0LT5sLnllYXIgPSB5OworICBkYXQtPmwubW9uID0gbTsK
KyAgZGF0LT5sLm1kYXkgPSBkOworICBkYXQtPmwuZmxhZ3MgPSBmbGFnczsK
KworICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9z
X25ld19pbnRlcm5hbF93b19jaXZpbChWQUxVRSBrbGFzcywgbG9uZyBqZCwg
ZG91YmxlIHNnLAorCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworICBy
ZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsKGtsYXNzLCBqZCwgc2csIDAs
IDAsIDAsIGZsYWdzKTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfc19h
bGxvYyhWQUxVRSBrbGFzcykKK3sKKyAgcmV0dXJuIGRfbGl0ZV9zX25ld19p
bnRlcm5hbF93b19jaXZpbChrbGFzcywgMCwgMCwgMCk7Cit9CisKK3N0YXRp
YyBWQUxVRQorZF9yaWdodF9zX25ld19yX2JhbmcoaW50IGFyZ2MsIFZBTFVF
ICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdmFqZCwgdm9mLCB2
c2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwMyIsICZ2YWpk
LCAmdm9mLCAmdnNnKTsKKworICBpZiAoYXJnYyA8IDEpCisgICAgdmFqZCA9
IElOVDJGSVgoMCk7CisgIGlmIChhcmdjIDwgMikKKyAgICB2b2YgPSBJTlQy
RklYKDApOworICBpZiAoYXJnYyA8IDMpCisgICAgdnNnID0gREJMMk5VTShJ
VEFMWSk7CisKKyAgcmV0dXJuIGRfcmlnaHRfc19uZXdfaW50ZXJuYWwoa2xh
c3MsIHZhamQsIHZvZiwgdnNnLCAwKTsKK30KKworc3RhdGljIFZBTFVFCitk
X2xpdGVfc19uZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM
VUUga2xhc3MpCit7CisgIFZBTFVFIHZqZCwgdnNnOworICBsb25nIGpkOwor
ICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIw
MiIsICZ2amQsICZ2c2cpOworCisgIGlmIChhcmdjIDwgMSkKKyAgICBqZCA9
IDA7CisgIGVsc2UgeworICAgIGlmICghRklYTlVNX1AodmpkKSkKKyAgICAg
IHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImNhbm5vdCBjcmVhdGUiKTsKKyAg
ICBqZCA9IE5VTTJMT05HKHZqZCk7CisgICAgaWYgKCFMSUdIVEFCTEVfSkQo
amQpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiY2Fubm90IGNy
ZWF0ZSIpOworICB9CisgIGlmIChhcmdjIDwgMikKKyAgICBzZyA9IDA7Cisg
IGVsc2UKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKworICByZXR1cm4gZF9s
aXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKGtsYXNzLAorCQkJCQlqZCwK
KwkJCQkJc2csCisJCQkJCUxJR0hUX01PREUgfCBIQVZFX0pEKTsKK30KKwor
c3RhdGljIFZBTFVFCitkYXRlX3NfbmV3X3JfYmFuZyhpbnQgYXJnYywgVkFM
VUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICByZXR1cm4gZF9yaWdodF9z
X25ld19yX2JhbmcoYXJnYywgYXJndiwga2xhc3MpOworfQorCitzdGF0aWMg
VkFMVUUKK2RhdGVfc19uZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJn
diwgVkFMVUUga2xhc3MpCit7CisgIHJldHVybiBkX2xpdGVfc19uZXdfbF9i
YW5nKGFyZ2MsIGFyZ3YsIGtsYXNzKTsKK30KKworc3RhdGljIFZBTFVFCitk
YXRlX3NfamQoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykK
K3sKKyAgVkFMVUUgdmpkLCB2c2c7CisgIGxvbmcgamQ7CisgIGRvdWJsZSBz
ZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAyIiwgJnZqZCwg
JnZzZyk7CisKKyAgaWYgKCFGSVhOVU1fUCh2amQpKQorICAgIHJldHVybiBj
Zm9yd2FyZHYoImpkX3IiKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAg
c2cgPSBOVU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOwor
CisgIGlmIChhcmdjID49IDEpIHsKKyAgICBqZCA9IE5VTTJMT05HKHZqZCk7
CisgICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpKQorICAgICAgcmV0dXJuIGNm
b3J3YXJkdigiamRfciIpOworICB9IGVsc2UKKyAgICBqZCA9IDA7CisKKyAg
aWYgKGpkIDwgc2cpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiamRfciIpOwor
CisgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xh
c3MsIGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworfQorCitzdGF0
aWMgVkFMVUUKK2RhdGVfc19vcmRpbmFsKGludCBhcmdjLCBWQUxVRSAqYXJn
diwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2ZCwgdnNnOworICBp
bnQgeSwgZCwgcmQ7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3Mo
YXJnYywgYXJndiwgIjAzIiwgJnZ5LCAmdmQsICZ2c2cpOworCisgIGlmICgh
KChOSUxfUCh2eSkgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2ZCkg
fHwgRklYTlVNX1AodmQpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigib3Jk
aW5hbF9yIik7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVN
MkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB5ID0g
LTQ3MTI7CisgIGQgPSAxOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNl
IDM6CisgIGNhc2UgMjoKKyAgICBkID0gTlVNMkxPTkcodmQpOworICBjYXNl
IDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJM
RV9ZRUFSKHkpKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigib3JkaW5hbF9y
Iik7CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisK
KyAgICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywgJnJkLCAmamQs
ICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlk
IGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8fCAhbnMp
CisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJvcmRpbmFsX3IiKTsKKworICAg
IHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xhc3Ms
IGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworICB9Cit9CisKK3N0
YXRpYyBWQUxVRQorZGF0ZV9zX2NpdmlsKGludCBhcmdjLCBWQUxVRSAqYXJn
diwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2bSwgdmQsIHZzZzsK
KyAgaW50IHksIG0sIGQsIHJtLCByZDsKKyAgZG91YmxlIHNnOworCisgIHJi
X3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDQiLCAmdnksICZ2bSwgJnZkLCAm
dnNnKTsKKworICBpZiAoISgoTklMX1AodnkpIHx8IEZJWE5VTV9QKHZ5KSkg
JiYKKwkoTklMX1Aodm0pIHx8IEZJWE5VTV9QKHZtKSkgJiYKKwkoTklMX1Ao
dmQpIHx8IEZJWE5VTV9QKHZkKSkpKQorICAgIHJldHVybiBjZm9yd2FyZHYo
ImNpdmlsX3IiKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBO
VU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIHkg
PSAtNDcxMjsKKyAgbSA9IDE7CisgIGQgPSAxOworCisgIHN3aXRjaCAoYXJn
YykgeworICBjYXNlIDQ6CisgIGNhc2UgMzoKKyAgICBkID0gTlVNMkxPTkco
dmQpOworICBjYXNlIDI6CisgICAgbSA9IE5VTTJMT05HKHZtKTsKKyAgY2Fz
ZSAxOgorICAgIHkgPSBOVU0yTE9ORyh2eSk7CisgICAgaWYgKCFMSUdIVEFC
TEVfWUVBUih5KSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNpdmlsX3Ii
KTsKKyAgfQorCisgIGlmIChpc2luZihzZykgJiYgc2cgPCAwKSB7CisgICAg
aWYgKCF2YWxpZF9ncmVnb3JpYW5fcCh5LCBtLCBkLCAmcm0sICZyZCkpCisg
ICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlkIGRhdGUiKTsK
KworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIDAs
IHNnLCB5LCBybSwgcmQsCisJCQkJIExJR0hUX01PREUgfCBIQVZFX0NJVklM
KTsKKyAgfSBlbHNlIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsKKwor
ICAgIGlmICghdmFsaWRfY2l2aWxfcCh5LCBtLCBkLCBzZywgJnJtLCAmcmQs
ICZqZCwgJm5zKSkKKyAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImlu
dmFsaWQgZGF0ZSIpOworCisgICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpIHx8
ICFucykKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNpdmlsX3IiKTsKKwor
ICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIGpkLCBz
ZywgeSwgcm0sIHJkLAorCQkJCSBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8IEhB
VkVfQ0lWSUwpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX2Nv
bW1lcmNpYWwoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykK
K3sKKyAgVkFMVUUgdnksIHZ3LCB2ZCwgdnNnOworICBpbnQgeSwgdywgZCwg
cncsIHJkOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2Ms
IGFyZ3YsICIwNCIsICZ2eSwgJnZ3LCAmdmQsICZ2c2cpOworCisgIGlmICgh
KChOSUxfUCh2eSkgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2dykg
fHwgRklYTlVNX1AodncpKSAmJgorCShOSUxfUCh2ZCkgfHwgRklYTlVNX1Ao
dmQpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiY29tbWVyY2lhbF9yIik7
CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cp
OworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB5ID0gLTQ3MTI7Cisg
IHcgPSAxOworICBkID0gMTsKKworICBzd2l0Y2ggKGFyZ2MpIHsKKyAgY2Fz
ZSA0OgorICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAgY2Fz
ZSAyOgorICAgIHcgPSBOVU0yTE9ORyh2dyk7CisgIGNhc2UgMToKKyAgICB5
ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxFX0NXWUVBUih5
KSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNvbW1lcmNpYWxfciIpOwor
ICB9CisKKyAgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOworCisgICAg
aWYgKCF2YWxpZF9jb21tZXJjaWFsX3AoeSwgdywgZCwgc2csICZydywgJnJk
LCAmamQsICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJp
bnZhbGlkIGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8
fCAhbnMpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjb21tZXJjaWFsX3Ii
KTsKKworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2
aWwoa2xhc3MsIGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworICB9
Cit9CisKKyNpZiAhZGVmaW5lZChIQVZFX0dNVElNRV9SKQorc3RhdGljIHN0
cnVjdCB0bSoKK2xvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdCwgc3RydWN0
IHRtICp0bSkKK3sKKyAgYXV0byBzdHJ1Y3QgdG0gKnRtcCA9IGxvY2FsdGlt
ZSh0KTsKKyAgaWYgKHRtcCkKKyAgICAqdG0gPSAqdG1wOworICByZXR1cm4g
dG1wOworfQorI2VuZGlmCisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3RvZGF5
KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7CisgIFZB
TFVFIHZzZzsKKyAgZG91YmxlIHNnOworICB0aW1lX3QgdDsKKyAgc3RydWN0
IHRtIHRtOworICBpbnQgeSwgbSwgZDsKKworICByYl9zY2FuX2FyZ3MoYXJn
YywgYXJndiwgIjAxIiwgJnZzZyk7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQor
ICAgIHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFM
WTsKKworICBpZiAodGltZSgmdCkgPT0gLTEpCisgICAgcmJfc3lzX2ZhaWwo
InRpbWUiKTsKKyAgbG9jYWx0aW1lX3IoJnQsICZ0bSk7CisKKyAgeSA9IHRt
LnRtX3llYXIgKyAxOTAwOworICBtID0gdG0udG1fbW9uICsgMTsKKyAgZCA9
IHRtLnRtX21kYXk7CisKKyAgaWYgKGlzaW5mKHNnKSAmJiBzZyA8IDApCisg
ICAgcmV0dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywgMCwgc2cs
IHksIG0sIGQsCisJCQkJIExJR0hUX01PREUgfCBIQVZFX0NJVklMKTsKKyAg
ZWxzZSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisKKyAgICBjaXZp
bF90b19qZCh5LCBtLCBkLCBzZywgJmpkLCAmbnMpOworCisgICAgcmV0dXJu
IGRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywgamQsIHNnLCB5LCBtLCBk
LAorCQkJCSBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8IEhBVkVfQ0lWSUwpOwor
ICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2FqZChWQUxVRSBzZWxm
KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh
dCkpCisgICAgcmV0dXJuIGRhdC0+ci5hamQ7CisgIHsKKyAgICBnZXRfZF9q
ZChkYXQpOworICAgIHJldHVybiBmX3N1YihJTlQyRklYKGRhdC0+bC5qZCks
IHJoYWxmKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9hbWpk
KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdo
dF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJhbWpkX3Ii
KTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAgcmV0dXJuIHJiX3Jh
dGlvbmFsX25ldzEoTE9ORzJOVU0oZGF0LT5sLmpkIC0gMjQwMDAwMUwpKTsK
KyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9qZChWQUxVRSBzZWxm
KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh
dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiamRfciIpOworICB7CisgICAg
Z2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwuamQp
OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX21qZChWQUxVRSBz
ZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9w
KGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgibWpkX3IiKTsKKyAgewor
ICAgIGdldF9kX2pkKGRhdCk7CisgICAgcmV0dXJuIExPTkcyTlVNKGRhdC0+
bC5qZCAtIDI0MDAwMDFMKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2Rf
bGl0ZV9sZChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlm
ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgi
bGRfciIpOworICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4g
TE9ORzJOVU0oZGF0LT5sLmpkIC0gMjI5OTE2MEwpOworICB9Cit9CisKK3N0
YXRpYyBWQUxVRQorZF9saXRlX3llYXIoVkFMVUUgc2VsZikKK3sKKyAgZ2V0
X2QxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJl
dHVybiBpZm9yd2FyZDAoInllYXJfciIpOworICB7CisgICAgZ2V0X2RfY2l2
aWwoZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwueWVhcik7Cisg
IH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfeWRheShWQUxVRSBzZWxm
KQoreworICBpbnQgcnksIHJkOworCisgIGdldF9kMShzZWxmKTsKKyAgaWYg
KCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJ5
ZGF5X3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAgamRfdG9f
b3JkaW5hbChkYXQtPmwuamQsIGRhdC0+bC5zZywgJnJ5LCAmcmQpOworICAg
IHJldHVybiBJTlQyRklYKHJkKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK
K2RfbGl0ZV9tb24oVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOwor
ICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2Fy
ZDAoIm1vbl9yIik7CisgIHsKKyAgICBnZXRfZF9jaXZpbChkYXQpOworICAg
IHJldHVybiBJTlQyRklYKGRhdC0+bC5tb24pOworICB9Cit9CisKK3N0YXRp
YyBWQUxVRQorZF9saXRlX21kYXkoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2Qx
KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy
biBpZm9yd2FyZDAoIm1kYXlfciIpOworICB7CisgICAgZ2V0X2RfY2l2aWwo
ZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwubWRheSk7CisgIH0K
K30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfZGF5X2ZyYWN0aW9uKFZBTFVF
IHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2Rl
X3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJkYXlfZnJhY3Rpb25f
ciIpOworICByZXR1cm4gSU5UMkZJWCgwKTsKK30KKworc3RhdGljIFZBTFVF
CitkX2xpdGVfd251bTAoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywg
cmQ7CisKKyAgZ2V0X2QxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChk
YXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoIndudW0wX3IiKTsKKyAgewor
ICAgIGdldF9kX2pkKGRhdCk7CisgICAgamRfdG9fd2Vla251bShkYXQtPmwu
amQsIDAsIGRhdC0+bC5zZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJu
IElOVDJGSVgocncpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRl
X3dudW0xKFZBTFVFIHNlbGYpCit7CisgIGludCByeSwgcncsIHJkOworCisg
IGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAg
ICByZXR1cm4gaWZvcndhcmQwKCJ3bnVtMV9yIik7CisgIHsKKyAgICBnZXRf
ZF9qZChkYXQpOworICAgIGpkX3RvX3dlZWtudW0oZGF0LT5sLmpkLCAxLCBk
YXQtPmwuc2csICZyeSwgJnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklY
KHJ3KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9ob3VyKFZB
TFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9t
b2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJob3VyX3IiKTsK
KyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9s
aXRlX21pbihWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlm
ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgi
bWluX3IiKTsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBW
QUxVRQorZF9saXRlX3NlYyhWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2Vs
Zik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlm
b3J3YXJkMCgic2VjX3IiKTsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisK
K3N0YXRpYyBWQUxVRQorZF9saXRlX3NlY19mcmFjdGlvbihWQUxVRSBzZWxm
KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh
dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgic2VjX2ZyYWN0aW9uX3IiKTsK
KyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9s
aXRlX29mZnNldChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7Cisg
IGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5v
ZjsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQor
ZF9saXRlX3pvbmUoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOwor
ICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2Fy
ZDAoInpvbmVfciIpOworICByZXR1cm4gcmJfdXNhc2NpaV9zdHJfbmV3Migi
KzAwOjAwIik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2N3eWVhcihW
QUxVRSBzZWxmKQoreworICBpbnQgcnksIHJ3LCByZDsKKworICBnZXRfZDEo
c2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJu
IGlmb3J3YXJkMCgiY3d5ZWFyX3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRh
dCk7CisgICAgamRfdG9fY29tbWVyY2lhbChkYXQtPmwuamQsIGRhdC0+bC5z
ZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJuIElOVDJGSVgocnkpOwor
ICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2N3ZWVrKFZBTFVFIHNl
bGYpCit7CisgIGludCByeSwgcncsIHJkOworCisgIGdldF9kMShzZWxmKTsK
KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh
cmQwKCJjd2Vla19yIik7CisgIHsKKyAgICBnZXRfZF9qZChkYXQpOworICAg
IGpkX3RvX2NvbW1lcmNpYWwoZGF0LT5sLmpkLCBkYXQtPmwuc2csICZyeSwg
JnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklYKHJ3KTsKKyAgfQorfQor
CitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9jd2RheShWQUxVRSBzZWxmKQorewor
ICBpbnQgdzsKKworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9k
ZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiY3dkYXlfciIpOwor
ICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICB3ID0gamRfdG9fd2RheShk
YXQtPmwuamQpOworICAgIGlmICh3ID09IDApCisgICAgICB3ID0gNzsKKyAg
ICByZXR1cm4gSU5UMkZJWCh3KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK
K2RfbGl0ZV93ZGF5KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsK
KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh
cmQwKCJ3ZGF5X3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAg
cmV0dXJuIElOVDJGSVgoamRfdG9fd2RheShkYXQtPmwuamQpKTsKKyAgfQor
fQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9qdWxpYW5fcChWQUxVRSBzZWxm
KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh
dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgianVsaWFuX3I/Iik7CisgIHJl
dHVybiBRZmFsc2U7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2dyZWdv
cmlhbl9wKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYg
KCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJn
cmVnb3JpYW5fcj8iKTsKKyAgcmV0dXJuIFF0cnVlOworfQorCitzdGF0aWMg
VkFMVUUKK2RfbGl0ZV9sZWFwX3AoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2Qx
KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy
biBpZm9yd2FyZDAoImxlYXBfcj8iKTsKKyAgeworICAgIGdldF9kX2Npdmls
KGRhdCk7CisgICAgcmV0dXJuIGxlYXBfcChkYXQtPmwueWVhcikgPyBRdHJ1
ZSA6IFFmYWxzZTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9z
dGFydChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICgh
bGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5zZzsKKyAg
cmV0dXJuIERCTDJOVU0oZGF0LT5sLnNnKTsKK30KKworc3RhdGljIFZBTFVF
CitkX2xpdGVfbmV3X3N0YXJ0KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM
VUUgc2VsZikKK3sKKyAgVkFMVUUgdnNnOworICBkb3VibGUgc2c7CisKKyAg
Z2V0X2QxKHNlbGYpOworCisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisg
ICAgcmV0dXJuIGlmb3J3YXJkdigibmV3X3N0YXJ0X3IiKTsKKworICByYl9z
Y2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwgJnZzZyk7CisKKyAgaWYgKCFO
SUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisg
ICAgc2cgPSBJVEFMWTsKKworICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKwor
ICAgIGlmIChkYXQtPmwuamQgPCBzZykKKyAgICAgIHJldHVybiBpZm9yd2Fy
ZHYoIm5ld19zdGFydF9yIik7CisKKyAgICByZXR1cm4gZF9saXRlX3NfbmV3
X2ludGVybmFsX3dvX2NpdmlsKENMQVNTX09GKHNlbGYpLAorCQkJCQkgIGRh
dC0+bC5qZCwKKwkJCQkJICBzZywKKwkJCQkJICBMSUdIVF9NT0RFIHwgSEFW
RV9KRCk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbmV3X29m
ZnNldChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCit7Cisg
IFZBTFVFIHZvZjsKKyAgaW50IHJvZjsKKworICBnZXRfZDEoc2VsZik7CisK
KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh
cmR2KCJuZXdfb2Zmc2V0X3IiKTsKKworICByYl9zY2FuX2FyZ3MoYXJnYywg
YXJndiwgIjAxIiwgJnZvZik7CisKKyAgaWYgKE5JTF9QKHZvZikpCisgICAg
cm9mID0gMDsKKyAgZWxzZSB7CisgICAgaWYgKCFkYXlkaWZmX3RvX3NlYyh2
b2YsICZyb2YpIHx8IHJvZiAhPSAwKQorICAgICAgcmV0dXJuIGlmb3J3YXJk
digibmV3X29mZnNldF9yIik7CisgIH0KKworICB7CisgICAgZ2V0X2RfamQo
ZGF0KTsKKworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29f
Y2l2aWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJCSAgZGF0LT5sLmpkLAorCQkJ
CQkgIGRhdC0+bC5zZywKKwkJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9KRCk7
CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfcGx1cyhWQUxVRSBz
ZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2QxKHNlbGYpOworCisgIGlm
ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkb3Ao
InBsdXNfciIpOworCisgIHN3aXRjaCAoVFlQRShvdGhlcikpIHsKKyAgY2Fz
ZSBUX0ZJWE5VTToKKyAgICB7CisgICAgICBsb25nIGpkOworCisgICAgICBn
ZXRfZF9qZChkYXQpOworCisgICAgICBqZCA9IGRhdC0+bC5qZCArIEZJWDJM
T05HKG90aGVyKTsKKworICAgICAgaWYgKExJR0hUQUJMRV9KRChqZCkgJiYg
amQgPj0gZGF0LT5sLnNnKQorCXJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJu
YWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJICAgICBqZCwgZGF0LT5sLnNnLAor
CQkJCSAgICAgMCwgMCwgMCwKKwkJCQkgICAgIGRhdC0+bC5mbGFncyAmIH5I
QVZFX0NJVklMKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgVF9GTE9B
VDoKKyAgICB7CisgICAgICBkb3VibGUgZCA9IE5VTTJEQkwob3RoZXIpOwor
ICAgICAgbG9uZyBsID0gcm91bmQoZCk7CisgICAgICBpZiAobCA9PSBkICYm
IExJR0hUQUJMRV9KRChsKSkKKwlyZXR1cm4gZF9saXRlX3BsdXMoc2VsZiwg
SU5UMkZJWChsKSk7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIHJldHVy
biBpZm9yd2FyZG9wKCJwbHVzX3IiKTsKK30KKworc3RhdGljIFZBTFVFCitt
aW51c19kZChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2R0
Ml9jYXN0KHNlbGYsIG90aGVyKTsKKworICBpZiAobGlnaHRfbW9kZV9wKGFk
YXQpICYmCisgICAgICBsaWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICBsb25n
IGQ7CisgICAgaW50IGRmLCBzZjsKKyAgICBWQUxVRSByOworICAgICAgCisg
ICAgZ2V0X2R0X2pkKGFkYXQpOworICAgIGdldF9kdF9qZChiZGF0KTsKKyAg
ICBnZXRfZHRfZGYoYWRhdCk7CisgICAgZ2V0X2R0X2RmKGJkYXQpOworCisg
ICAgZCA9IGFkYXQtPmwuamQgLSBiZGF0LT5sLmpkOworICAgIGRmID0gYWRh
dC0+bC5kZiAtIGJkYXQtPmwuZGY7CisgICAgc2YgPSBhZGF0LT5sLnNmIC0g
YmRhdC0+bC5zZjsKKyAgICBpZiAoZGYgPCAwKSB7CisgICAgICBkIC09IDE7
CisgICAgICBkZiArPSBEQVlfSU5fU0VDT05EUzsKKyAgICB9IGVsc2UgaWYg
KGRmID49IERBWV9JTl9TRUNPTkRTKSB7CisgICAgICBkICs9IDE7CisgICAg
ICBkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgICB9CisgICAgaWYgKHNmIDwg
MCkgeworICAgICAgZGYgLT0gMTsKKyAgICAgIHNmICs9IFNFQ09ORF9JTl9O
QU5PU0VDT05EUzsKKyAgICB9IGVsc2UgaWYgKHNmID49IFNFQ09ORF9JTl9O
QU5PU0VDT05EUykgeworICAgICAgZGYgKz0gMTsKKyAgICAgIHNmIC09IFNF
Q09ORF9JTl9OQU5PU0VDT05EUzsKKyAgICB9CisgICAgciA9IHJiX3JhdGlv
bmFsX25ldzEoTE9ORzJOVU0oZCkpOworICAgIGlmIChkZikKKyAgICAgIHIg
PSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgoZGYpLCBJTlQy
RklYKERBWV9JTl9TRUNPTkRTKSkpOworICAgIGlmIChzZikKKyAgICAgIHIg
PSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgoc2YpLCBkYXlf
aW5fbmFub3NlY29uZHMpKTsKKyAgICByZXR1cm4gcjsKKyAgfQorICByZXR1
cm4gaWZvcndhcmRvcCgibWludXNfciIpOworfQorCitzdGF0aWMgVkFMVUUK
K2RfbGl0ZV9taW51cyhWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg
aWYgKGtfZGF0ZXRpbWVfcChvdGhlcikpCisgICAgcmV0dXJuIG1pbnVzX2Rk
KHNlbGYsIG90aGVyKTsKKworICBhc3NlcnQoIWtfZGF0ZXRpbWVfcChvdGhl
cikpOworICBpZiAoa19kYXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2QyKHNl
bGYsIG90aGVyKTsKKworICAgIGlmIChsaWdodF9tb2RlX3AoYWRhdCkgJiYK
KwlsaWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICAgIGxvbmcgZDsKKyAgICAg
IAorICAgICAgZ2V0X2RfamQoYWRhdCk7CisgICAgICBnZXRfZF9qZChiZGF0
KTsKKworICAgICAgZCA9IGFkYXQtPmwuamQgLSBiZGF0LT5sLmpkOworICAg
ICAgcmV0dXJuIHJiX3JhdGlvbmFsX25ldzEoTE9ORzJOVU0oZCkpOworICAg
IH0KKyAgfQorCisgIHN3aXRjaCAoVFlQRShvdGhlcikpIHsKKyAgY2FzZSBU
X0ZJWE5VTToKKyAgICByZXR1cm4gZF9saXRlX3BsdXMoc2VsZiwgTE9ORzJO
VU0oLUZJWDJMT05HKG90aGVyKSkpOworICBjYXNlIFRfRkxPQVQ6CisgICAg
cmV0dXJuIGRfbGl0ZV9wbHVzKHNlbGYsIERCTDJOVU0oLU5VTTJEQkwob3Ro
ZXIpKSk7CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoIm1pbnVzX3IiKTsK
K30KKworc3RhdGljIFZBTFVFCitjbXBfZGQoVkFMVUUgc2VsZiwgVkFMVUUg
b3RoZXIpCit7CisgIGdldF9kdDJfY2FzdChzZWxmLCBvdGhlcik7CisKKyAg
aWYgKGxpZ2h0X21vZGVfcChhZGF0KSAmJgorICAgICAgbGlnaHRfbW9kZV9w
KGJkYXQpKSB7CisgICAgZ2V0X2R0X2pkKGFkYXQpOworICAgIGdldF9kdF9q
ZChiZGF0KTsKKyAgICBnZXRfZHRfZGYoYWRhdCk7CisgICAgZ2V0X2R0X2Rm
KGJkYXQpOworCisgICAgaWYgKGFkYXQtPmwuamQgPT0gYmRhdC0+bC5qZCkg
eworICAgICAgaWYgKGFkYXQtPmwuZGYgPT0gYmRhdC0+bC5kZikgeworCWlm
IChhZGF0LT5sLnNmID09IGJkYXQtPmwuc2YpIHsKKwkgIHJldHVybiBJTlQy
RklYKDApOworCX0gZWxzZSBpZiAoYWRhdC0+bC5zZiA8IGJkYXQtPmwuc2Yp
IHsKKwkgIHJldHVybiBJTlQyRklYKC0xKTsKKwl9IGVsc2UgeworCSAgcmV0
dXJuIElOVDJGSVgoMSk7CisJfQorICAgICAgfSBlbHNlIGlmIChhZGF0LT5s
LmRmIDwgYmRhdC0+bC5kZikgeworCXJldHVybiBJTlQyRklYKC0xKTsKKyAg
ICAgIH0gZWxzZSB7CisJcmV0dXJuIElOVDJGSVgoMSk7CisgICAgICB9Cisg
ICAgfSBlbHNlIGlmIChhZGF0LT5sLmpkIDwgYmRhdC0+bC5qZCkgeworICAg
ICAgcmV0dXJuIElOVDJGSVgoLTEpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gSU5UMkZJWCgxKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGlmb3J3
YXJkb3AoImNtcF9yIik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2Nt
cChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgaWYgKGtfZGF0ZXRp
bWVfcChvdGhlcikpCisgICAgcmV0dXJuIGNtcF9kZChzZWxmLCBvdGhlcik7
CisKKyAgYXNzZXJ0KCFrX2RhdGV0aW1lX3Aob3RoZXIpKTsKKyAgaWYgKGtf
ZGF0ZV9wKG90aGVyKSkgeworICAgIGdldF9kMihzZWxmLCBvdGhlcik7CisK
KyAgICBpZiAobGlnaHRfbW9kZV9wKGFkYXQpICYmCisJbGlnaHRfbW9kZV9w
KGJkYXQpKSB7CisgICAgICBpZiAoaGF2ZV9qZF9wKGFkYXQpICYmCisJICBo
YXZlX2pkX3AoYmRhdCkpIHsKKwlpZiAoYWRhdC0+bC5qZCA9PSBiZGF0LT5s
LmpkKQorCSAgcmV0dXJuIElOVDJGSVgoMCk7CisJaWYgKGFkYXQtPmwuamQg
PCBiZGF0LT5sLmpkKQorCSAgcmV0dXJuIElOVDJGSVgoLTEpOworCXJldHVy
biBJTlQyRklYKDEpOworICAgICAgfSBlbHNlIHsKKwlnZXRfZF9jaXZpbChh
ZGF0KTsKKwlnZXRfZF9jaXZpbChiZGF0KTsKKworCWlmIChhZGF0LT5sLnll
YXIgPT0gYmRhdC0+bC55ZWFyKSB7CisJICBpZiAoYWRhdC0+bC5tb24gPT0g
YmRhdC0+bC5tb24pIHsKKwkgICAgaWYgKGFkYXQtPmwubWRheSA9PSBiZGF0
LT5sLm1kYXkpIHsKKwkgICAgICByZXR1cm4gSU5UMkZJWCgwKTsKKwkgICAg
fSBlbHNlIGlmIChhZGF0LT5sLm1kYXkgPCBiZGF0LT5sLm1kYXkpIHsKKwkg
ICAgICByZXR1cm4gSU5UMkZJWCgtMSk7CisJICAgIH0gZWxzZSB7CisJICAg
ICAgcmV0dXJuIElOVDJGSVgoMSk7CisJICAgIH0KKwkgIH0gZWxzZSBpZiAo
YWRhdC0+bC5tb24gPCBiZGF0LT5sLm1vbikgeworCSAgICByZXR1cm4gSU5U
MkZJWCgtMSk7CisJICB9IGVsc2UgeworCSAgICByZXR1cm4gSU5UMkZJWCgx
KTsKKwkgIH0KKwl9IGVsc2UgaWYgKGFkYXQtPmwueWVhciA8IGJkYXQtPmwu
eWVhcikgeworCSAgcmV0dXJuIElOVDJGSVgoLTEpOworCX0gZWxzZSB7CisJ
ICByZXR1cm4gSU5UMkZJWCgxKTsKKwl9CisgICAgICB9CisgICAgfQorICB9
CisgIHJldHVybiBpZm9yd2FyZG9wKCJjbXBfciIpOworfQorCitzdGF0aWMg
VkFMVUUKK2VxdWFsX2RkKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQorewor
ICBnZXRfZHQyX2Nhc3Qoc2VsZiwgb3RoZXIpOworCisgIGlmIChsaWdodF9t
b2RlX3AoYWRhdCkgJiYKKyAgICAgIGxpZ2h0X21vZGVfcChiZGF0KSkgewor
ICAgIGdldF9kdF9qZChhZGF0KTsKKyAgICBnZXRfZHRfamQoYmRhdCk7Cisg
ICAgZ2V0X2R0X2RmKGFkYXQpOworICAgIGdldF9kdF9kZihiZGF0KTsKKwor
ICAgIGlmIChsb2NhbF9qZChhZGF0KSA9PSBsb2NhbF9qZChiZGF0KSkKKyAg
ICAgIHJldHVybiBRdHJ1ZTsKKyAgICByZXR1cm4gUWZhbHNlOworICB9Cisg
IHJldHVybiBpZm9yd2FyZG9wKCJlcXVhbF9yIik7Cit9CisKK3N0YXRpYyBW
QUxVRQorZF9saXRlX2VxdWFsKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQor
eworICBpZiAoa19kYXRldGltZV9wKG90aGVyKSkKKyAgICByZXR1cm4gZXF1
YWxfZGQoc2VsZiwgb3RoZXIpOworCisgIGFzc2VydCgha19kYXRldGltZV9w
KG90aGVyKSk7CisgIGlmIChrX2RhdGVfcChvdGhlcikpIHsKKyAgICBnZXRf
ZDIoc2VsZiwgb3RoZXIpOworCisgICAgaWYgKGxpZ2h0X21vZGVfcChhZGF0
KSAmJgorCWxpZ2h0X21vZGVfcChiZGF0KSkgeworICAgICAgaWYgKGhhdmVf
amRfcChhZGF0KSAmJgorCSAgaGF2ZV9qZF9wKGJkYXQpKSB7CisJaWYgKGFk
YXQtPmwuamQgPT0gYmRhdC0+bC5qZCkKKwkgIHJldHVybiBRdHJ1ZTsKKwly
ZXR1cm4gUWZhbHNlOworICAgICAgfSBlbHNlIHsKKwlnZXRfZF9jaXZpbChh
ZGF0KTsKKwlnZXRfZF9jaXZpbChiZGF0KTsKKworCWlmIChhZGF0LT5sLnll
YXIgPT0gYmRhdC0+bC55ZWFyKQorCSAgaWYgKGFkYXQtPmwubW9uID09IGJk
YXQtPmwubW9uKQorCSAgICBpZiAoYWRhdC0+bC5tZGF5ID09IGJkYXQtPmwu
bWRheSkKKwkgICAgICByZXR1cm4gUXRydWU7CisJcmV0dXJuIFFmYWxzZTsK
KyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoImVx
dWFsX3IiKTsKK30KKworc3RhdGljIFZBTFVFCitlcWxfcF9kZChWQUxVRSBz
ZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2R0Ml9jYXN0KHNlbGYsIG90
aGVyKTsKKworICBpZiAobGlnaHRfbW9kZV9wKGFkYXQpICYmCisgICAgICBs
aWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICBnZXRfZHRfamQoYWRhdCk7Cisg
ICAgZ2V0X2R0X2pkKGJkYXQpOworICAgIGdldF9kdF9kZihhZGF0KTsKKyAg
ICBnZXRfZHRfZGYoYmRhdCk7CisKKyAgICBpZiAoYWRhdC0+bC5qZCA9PSBi
ZGF0LT5sLmpkKQorICAgICAgaWYgKGFkYXQtPmwuZGYgPT0gYmRhdC0+bC5k
ZikKKwlpZiAoYWRhdC0+bC5zZiA9PSBiZGF0LT5sLnNmKQorCSAgcmV0dXJu
IFF0cnVlOworICAgIHJldHVybiBRZmFsc2U7CisgIH0KKyAgcmV0dXJuIGlm
b3J3YXJkb3AoImVxbF9yPyIpOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0
ZV9lcWxfcChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgaWYgKGtf
ZGF0ZXRpbWVfcChvdGhlcikpCisgICAgcmV0dXJuIGVxbF9wX2RkKHNlbGYs
IG90aGVyKTsKKworICBhc3NlcnQoIWtfZGF0ZXRpbWVfcChvdGhlcikpOwor
ICBpZiAoa19kYXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2QyKHNlbGYsIG90
aGVyKTsKKworICAgIGlmIChsaWdodF9tb2RlX3AoYWRhdCkgJiYKKwlsaWdo
dF9tb2RlX3AoYmRhdCkpIHsKKyAgICAgIGlmIChoYXZlX2pkX3AoYWRhdCkg
JiYKKwkgIGhhdmVfamRfcChiZGF0KSkgeworCWlmIChhZGF0LT5sLmpkID09
IGJkYXQtPmwuamQpCisJICByZXR1cm4gUXRydWU7CisJcmV0dXJuIFFmYWxz
ZTsKKyAgICAgIH0gZWxzZSB7CisJZ2V0X2RfY2l2aWwoYWRhdCk7CisJZ2V0
X2RfY2l2aWwoYmRhdCk7CisKKwlpZiAoYWRhdC0+bC55ZWFyID09IGJkYXQt
PmwueWVhcikKKwkgIGlmIChhZGF0LT5sLm1vbiA9PSBiZGF0LT5sLm1vbikK
KwkgICAgaWYgKGFkYXQtPmwubWRheSA9PSBiZGF0LT5sLm1kYXkpCisJICAg
ICAgcmV0dXJuIFF0cnVlOworCXJldHVybiBRZmFsc2U7CisgICAgICB9Cisg
ICAgfQorICB9CisgIHJldHVybiBpZm9yd2FyZG9wKCJlcWxfcj8iKTsKK30K
Kworc3RhdGljIFZBTFVFCitkX2xpdGVfaGFzaChWQUxVRSBzZWxmKQorewor
ICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisg
ICAgcmV0dXJuIGlmb3J3YXJkMCgiaGFzaF9yIik7CisgIHJldHVybiByYl9o
YXNoKGRfbGl0ZV9hamQoc2VsZikpOworfQorCitzdGF0aWMgVkFMVUUKK2Rf
bGl0ZV90b19zKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAg
aWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQw
KCJ0b19zX3IiKTsKKyAgeworICAgIGdldF9kX2NpdmlsKGRhdCk7CisgICAg
cmV0dXJuIHJiX2VuY19zcHJpbnRmKHJiX3VzYXNjaWlfZW5jb2RpbmcoKSwK
KwkJCSAgIiUuNGQtJTAyZC0lMDJkIiwKKwkJCSAgZGF0LT5sLnllYXIsIGRh
dC0+bC5tb24sIGRhdC0+bC5tZGF5KTsKKyAgfQorfQorCitzdGF0aWMgVkFM
VUUKK2RfbGl0ZV9pbnNwZWN0KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShz
ZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4g
aWZvcndhcmQwKCJpbnNwZWN0X3IiKTsKKyAgeworICAgIGdldF9kX2Npdmls
KGRhdCk7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4gcmJfZW5j
X3NwcmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiIzwlc1tM
XTogJS40ZC0lMDJkLSUwMmQgKCVsZGosMCwlLjBmKT4iLAorCQkJICByYl9v
YmpfY2xhc3NuYW1lKHNlbGYpLAorCQkJICBkYXQtPmwueWVhciwgZGF0LT5s
Lm1vbiwgZGF0LT5sLm1kYXksCisJCQkgIGRhdC0+bC5qZCwgZGF0LT5sLnNn
KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9tYXJzaGFsX2R1
bXAoVkFMVUUgc2VsZikKK3sKKyAgVkFMVUUgYTsKKworICBnZXRfZDEoc2Vs
Zik7CisKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICBhID0gcmJf
YXJ5X25ldzMoMywgZGF0LT5yLmFqZCwgZGF0LT5yLm9mLCBkYXQtPnIuc2cp
OworICBlbHNlIHsKKyAgICBnZXRfZF9qZChkYXQpOworICAgIGEgPSByYl9h
c3NvY19uZXcoTE9ORzJOVU0oZGF0LT5sLmpkKSwgREJMMk5VTShkYXQtPmwu
c2cpKTsKKyAgfQorCisgIGlmIChGTF9URVNUKHNlbGYsIEZMX0VYSVZBUikp
IHsKKyAgICByYl9jb3B5X2dlbmVyaWNfaXZhcihhLCBzZWxmKTsKKyAgICBG
TF9TRVQoYSwgRkxfRVhJVkFSKTsKKyAgfQorCisgIHJldHVybiBhOworfQor
CitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9tYXJzaGFsX2xvYWQoVkFMVUUgc2Vs
ZiwgVkFMVUUgYSkKK3sKKyAgZ2V0X2QxKHNlbGYpOworCisgIGlmICghRklY
TlVNX1AoUkFSUkFZX1BUUihhKVswXSkpIHsKKyAgICBkYXQtPnIuYWpkID0g
UkFSUkFZX1BUUihhKVswXTsKKyAgICBkYXQtPnIub2YgPSBSQVJSQVlfUFRS
KGEpWzFdOworICAgIGRhdC0+ci5zZyA9IFJBUlJBWV9QVFIoYSlbMl07Cisg
ICAgZGF0LT5yLmNhc2ggPSByYl9oYXNoX25ldygpOworICAgIGRhdC0+ci5m
bGFncyA9IDA7CisgIH0gZWxzZSB7CisgICAgZGF0LT5sLmpkID0gTlVNMkxP
TkcoUkFSUkFZX1BUUihhKVswXSk7CisgICAgZGF0LT5sLnNnID0gTlVNMkRC
TChSQVJSQVlfUFRSKGEpWzFdKTsKKyAgICBkYXQtPmwueWVhciA9IDA7Cisg
ICAgZGF0LT5sLm1vbiA9IDA7CisgICAgZGF0LT5sLm1kYXkgPSAwOworICAg
IGRhdC0+bC5mbGFncyA9IExJR0hUX01PREUgfCBIQVZFX0pEOworICB9CisK
KyAgaWYgKEZMX1RFU1QoYSwgRkxfRVhJVkFSKSkgeworICAgIHJiX2NvcHlf
Z2VuZXJpY19pdmFyKHNlbGYsIGEpOworICAgIEZMX1NFVChzZWxmLCBGTF9F
WElWQVIpOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBW
QUxVRQorZF9yaWdodF9jYXNoKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShz
ZWxmKTsKKyAgaWYgKGxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBR
bmlsOworICByZXR1cm4gZGF0LT5yLmNhc2g7Cit9CisKKy8qIGRhdGV0aW1l
IGxpZ2h0ICovCisKK2lubGluZSBzdGF0aWMgVkFMVUUKK2R0X2xpdGVfc19u
ZXdfaW50ZXJuYWwoVkFMVUUga2xhc3MsIGxvbmcgamQsIGludCBkZiwKKwkJ
ICAgICAgIGxvbmcgbG9uZyBzZiwgaW50IG9mLCBkb3VibGUgc2csCisJCSAg
ICAgICBpbnQgeSwgaW50IG0sIGludCBkLAorCQkgICAgICAgaW50IGgsIGlu
dCBtaW4sIGludCBzLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpCit7Cisg
IHVuaW9uIERhdGVUaW1lRGF0YSAqZGF0OworICBWQUxVRSBvYmo7CisKKyAg
b2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgdW5pb24gRGF0ZVRpbWVE
YXRhLCAwLCAtMSwgZGF0KTsKKworICBkYXQtPmwuamQgPSBqZDsKKyAgZGF0
LT5sLmRmID0gZGY7CisgIGRhdC0+bC5zZiA9IHNmOworICBkYXQtPmwub2Yg
PSBvZjsKKyAgZGF0LT5sLnNnID0gc2c7CisgIGRhdC0+bC55ZWFyID0geTsK
KyAgZGF0LT5sLm1vbiA9IG07CisgIGRhdC0+bC5tZGF5ID0gZDsKKyAgZGF0
LT5sLmhvdXIgPSBoOworICBkYXQtPmwubWluID0gbWluOworICBkYXQtPmwu
c2VjID0gczsKKyAgZGF0LT5sLmZsYWdzID0gZmxhZ3M7CisKKyAgcmV0dXJu
IG9iajsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX3NfbmV3X2ludGVy
bmFsX3dvX2NpdmlsKFZBTFVFIGtsYXNzLCBsb25nIGpkLCBpbnQgZGYsCisJ
CQkJbG9uZyBsb25nIHNmLCBpbnQgb2YsIGRvdWJsZSBzZywKKwkJCQl1bnNp
Z25lZCBmbGFncykKK3sKKyAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJu
YWwoa2xhc3MsIGpkLCBkZiwgc2YsIG9mLCBzZywKKwkJCQkwLCAwLCAwLCAw
LCAwLCAwLCBmbGFncyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9z
X2FsbG9jKFZBTFVFIGtsYXNzKQoreworICByZXR1cm4gZHRfbGl0ZV9zX25l
d19pbnRlcm5hbF93b19jaXZpbChrbGFzcywgMCwgMCwgMCwgMCwgMCwgMCk7
Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9zX25ld19sX2JhbmcoaW50
IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUg
dmpkLCB2ZGYsIHZzZiwgdm9mLCB2c2c7CisgIGxvbmcgamQ7CisKKyAgcmJf
c2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwNSIsICZ2amQsICZ2ZGYsICZ2c2Ys
ICZ2b2YsICZ2c2cpOworCisgIGlmIChhcmdjIDwgMSkKKyAgICB2amQgPSBJ
TlQyRklYKDApOworICBpZiAoYXJnYyA8IDIpCisgICAgdmRmID0gSU5UMkZJ
WCgwKTsKKyAgaWYgKGFyZ2MgPCAzKQorICAgIHZzZiA9IElOVDJGSVgoMCk7
CisgIGlmIChhcmdjIDwgNCkKKyAgICB2b2YgPSBJTlQyRklYKDApOworICBp
ZiAoYXJnYyA8IDUpCisgICAgdnNnID0gSU5UMkZJWCgwKTsKKworICBpZiAo
IUZJWE5VTV9QKHZqZCkgfHwKKyAgICAgICFGSVhOVU1fUCh2ZGYpIHx8Cisg
ICAgICAhRklYTlVNX1AodnNmKSB8fAorICAgICAgIUZJWE5VTV9QKHZvZikp
CisgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiY2Fubm90IGNyZWF0ZSIp
OworICBqZCA9IE5VTTJMT05HKHZqZCk7CisgIGlmICghTElHSFRBQkxFX0pE
KGpkKSkKKyAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJjYW5ub3QgY3Jl
YXRlIik7CisKKyAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWxfd29f
Y2l2aWwoa2xhc3MsCisJCQkJCSBqZCwKKwkJCQkJIEZJWDJJTlQodmRmKSwK
KwkJCQkJIEZJWDJJTlQodnNmKSwKKwkJCQkJIEZJWDJJTlQodm9mKSwKKwkJ
CQkJIE5VTTJEQkwodnNnKSwKKwkJCQkJIExJR0hUX01PREUgfCBIQVZFX0pE
IHwgSEFWRV9ERik7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZXRpbWVfc19u
ZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3Mp
Cit7CisgIHJldHVybiBkdF9saXRlX3NfbmV3X2xfYmFuZyhhcmdjLCBhcmd2
LCBrbGFzcyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZXRpbWVfc19qZChp
bnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxV
RSB2amQsIHZoLCB2bWluLCB2cywgdm9mLCB2c2c7CisgIGxvbmcgamQ7Cisg
IGludCBoLCBtaW4sIHMsIHJoLCBybWluLCBycywgcm9mOworICBkb3VibGUg
c2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwNiIsICZ2amQs
ICZ2aCwgJnZtaW4sICZ2cywgJnZvZiwgJnZzZyk7CisKKyAgaWYgKCFGSVhO
VU1fUCh2amQpKQorICAgIHJldHVybiBjZm9yd2FyZHYoImpkX3IiKTsKKwor
ICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZzZyk7Cisg
IGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIGpkID0gaCA9IG1pbiA9IHMg
PSAwOworICByb2YgPSAwOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNl
IDY6CisgIGNhc2UgNToKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwg
JnJvZikpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJqZF9yIik7CisgIGNh
c2UgNDoKKyAgICBzID0gTlVNMkxPTkcodnMpOworICBjYXNlIDM6CisgICAg
bWluID0gTlVNMkxPTkcodm1pbik7CisgIGNhc2UgMjoKKyAgICBoID0gTlVN
MkxPTkcodmgpOworICBjYXNlIDE6CisgICAgamQgPSBOVU0yTE9ORyh2amQp
OworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSkKKyAgICAgIHJldHVybiBj
Zm9yd2FyZHYoImpkX3IiKTsKKyAgfQorCisgIGlmIChqZCA8IHNnKQorICAg
IHJldHVybiBjZm9yd2FyZHYoImpkX3IiKTsKKworICBpZiAoIXZhbGlkX3Rp
bWVfcChoLCBtaW4sIHMsICZyaCwgJnJtaW4sICZycykpCisgICAgcmJfcmFp
c2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisKKyAgcmV0dXJu
IGR0X2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsCisJCQkJamRfbG9jYWxf
dG9fdXRjKGpkLAorCQkJCQkJdGltZV90b19kZihyaCwgcm1pbiwgcnMpLAor
CQkJCQkJcm9mKSwKKwkJCQkwLCAwLCByb2YsIHNnLCAwLCAwLCAwLCByaCwg
cm1pbiwgcnMsCisJCQkJTElHSFRfTU9ERSB8IEhBVkVfSkQgfCBIQVZFX1RJ
TUUpOworfQorCitzdGF0aWMgVkFMVUUKK2RhdGV0aW1lX3Nfb3JkaW5hbChp
bnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxV
RSB2eSwgdmQsIHZoLCB2bWluLCB2cywgdm9mLCB2c2c7CisgIGludCB5LCBk
LCByZCwgaCwgbWluLCBzLCByaCwgcm1pbiwgcnMsIHJvZjsKKyAgZG91Ymxl
IHNnOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDciLCAmdnks
ICZ2ZCwgJnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAo
ISgoTklMX1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2
ZCkgICB8fCBGSVhOVU1fUCh2ZCkpICYmCisJKE5JTF9QKHZoKSAgIHx8IEZJ
WE5VTV9QKHZoKSkgJiYKKwkoTklMX1Aodm1pbikgfHwgRklYTlVNX1Aodm1p
bikpICYmCisJKE5JTF9QKHZzKSAgIHx8IEZJWE5VTV9QKHZzKSkpKQorICAg
IHJldHVybiBjZm9yd2FyZHYoIm9yZGluYWxfciIpOworCisgIGlmICghTklM
X1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxzZQorICAg
IHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEyOworICBkID0gMTsKKworICBo
ID0gbWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNoIChhcmdj
KSB7CisgIGNhc2UgNzoKKyAgY2FzZSA2OgorICAgIGlmICghZGF5ZGlmZl90
b19zZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoIm9y
ZGluYWxfciIpOworICBjYXNlIDU6CisgICAgcyA9IE5VTTJMT05HKHZzKTsK
KyAgY2FzZSA0OgorICAgIG1pbiA9IE5VTTJMT05HKHZtaW4pOworICBjYXNl
IDM6CisgICAgaCA9IE5VTTJMT05HKHZoKTsKKyAgY2FzZSAyOgorICAgIGQg
PSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMToKKyAgICB5ID0gTlVNMkxPTkco
dnkpOworICAgIGlmICghTElHSFRBQkxFX1lFQVIoeSkpCisgICAgICByZXR1
cm4gY2ZvcndhcmR2KCJvcmRpbmFsX3IiKTsKKyAgfQorCisgIHsKKyAgICBs
b25nIGpkOworICAgIGludCBuczsKKworICAgIGlmICghdmFsaWRfb3JkaW5h
bF9wKHksIGQsIHNnLCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJiX3JhaXNl
KHJiX2VBcmdFcnJvciwgImludmFsaWQgZGF0ZSIpOworICAgIGlmICghdmFs
aWRfdGltZV9wKGgsIG1pbiwgcywgJnJoLCAmcm1pbiwgJnJzKSkKKyAgICAg
IHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImludmFsaWQgZGF0ZSIpOworCisg
ICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpIHx8ICFucykKKyAgICAgIHJldHVy
biBjZm9yd2FyZHYoIm9yZGluYWxfciIpOworCisgICAgcmV0dXJuIGR0X2xp
dGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsCisJCQkJICBqZF9sb2NhbF90b191
dGMoamQsCisJCQkJCQkgIHRpbWVfdG9fZGYocmgsIHJtaW4sIHJzKSwKKwkJ
CQkJCSAgcm9mKSwKKwkJCQkgIDAsIDAsIHJvZiwgc2csCisJCQkJICAwLCAw
LCAwLCByaCwgcm1pbiwgcnMsCisJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9K
RCB8IEhBVkVfVElNRSk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkYXRl
dGltZV9zX2NpdmlsKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xh
c3MpCit7CisgIFZBTFVFIHZ5LCB2bSwgdmQsIHZoLCB2bWluLCB2cywgdm9m
LCB2c2c7CisgIGludCB5LCBtLCBkLCBybSwgcmQsIGgsIG1pbiwgcywgcmgs
IHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2Fy
Z3MoYXJnYywgYXJndiwgIjA4IiwgJnZ5LCAmdm0sICZ2ZCwgJnZoLCAmdm1p
biwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAoISgoTklMX1AodnkpICAg
fHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2bSkgICB8fCBGSVhOVU1f
UCh2bSkpICYmCisJKE5JTF9QKHZkKSAgIHx8IEZJWE5VTV9QKHZkKSkgJiYK
KwkoTklMX1AodmgpICAgfHwgRklYTlVNX1AodmgpKSAmJgorCShOSUxfUCh2
bWluKSB8fCBGSVhOVU1fUCh2bWluKSkgJiYKKwkoTklMX1AodnMpICAgfHwg
RklYTlVNX1AodnMpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiY2l2aWxf
ciIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwo
dnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEy
OworICBtID0gMTsKKyAgZCA9IDE7CisKKyAgaCA9IG1pbiA9IHMgPSAwOwor
ICByb2YgPSAwOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNlIDg6Cisg
IGNhc2UgNzoKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwgJnJvZikp
CisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjaXZpbF9yIik7CisgIGNhc2Ug
NjoKKyAgICBzID0gTlVNMkxPTkcodnMpOworICBjYXNlIDU6CisgICAgbWlu
ID0gTlVNMkxPTkcodm1pbik7CisgIGNhc2UgNDoKKyAgICBoID0gTlVNMkxP
TkcodmgpOworICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAg
Y2FzZSAyOgorICAgIG0gPSBOVU0yTE9ORyh2bSk7CisgIGNhc2UgMToKKyAg
ICB5ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxFX1lFQVIo
eSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjaXZpbF9yIik7CisgIH0K
KworICBpZiAoaXNpbmYoc2cpICYmIHNnIDwgMCkgeworICAgIGlmICghdmFs
aWRfZ3JlZ29yaWFuX3AoeSwgbSwgZCwgJnJtLCAmcmQpKQorICAgICAgcmJf
cmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisgICAgaWYg
KCF2YWxpZF90aW1lX3AoaCwgbWluLCBzLCAmcmgsICZybWluLCAmcnMpKQor
ICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7
CisKKyAgICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywg
MCwgMCwgMCwgcm9mLCBzZywKKwkJCQkgIHksIHJtLCByZCwgcmgsIHJtaW4s
IHJzLAorCQkJCSAgTElHSFRfTU9ERSB8IEhBVkVfQ0lWSUwgfCBIQVZFX1RJ
TUUpOworICB9IGVsc2UgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOwor
CisgICAgaWYgKCF2YWxpZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0sICZy
ZCwgJmpkLCAmbnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAi
aW52YWxpZCBkYXRlIik7CisgICAgaWYgKCF2YWxpZF90aW1lX3AoaCwgbWlu
LCBzLCAmcmgsICZybWluLCAmcnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFy
Z0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisKKyAgICBpZiAoIUxJR0hUQUJM
RV9KRChqZCkgfHwgIW5zKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigiY2l2
aWxfciIpOworCisgICAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWwo
a2xhc3MsCisJCQkJICBqZF9sb2NhbF90b191dGMoamQsCisJCQkJCQkgIHRp
bWVfdG9fZGYocmgsIHJtaW4sIHJzKSwKKwkJCQkJCSAgcm9mKSwKKwkJCQkg
IDAsIDAsIHJvZiwgc2csCisJCQkJICB5LCBybSwgcmQsIHJoLCBybWluLCBy
cywKKwkJCQkgIExJR0hUX01PREUgfCBIQVZFX0pEIHwKKwkJCQkgIEhBVkVf
Q0lWSUwgfCBIQVZFX1RJTUUpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQor
ZGF0ZXRpbWVfc19jb21tZXJjaWFsKGludCBhcmdjLCBWQUxVRSAqYXJndiwg
VkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2dywgdmQsIHZoLCB2bWlu
LCB2cywgdm9mLCB2c2c7CisgIGludCB5LCB3LCBkLCBydywgcmQsIGgsIG1p
biwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKworICBy
Yl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA4IiwgJnZ5LCAmdncsICZ2ZCwg
JnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAoISgoTklM
X1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2dykgICB8
fCBGSVhOVU1fUCh2dykpICYmCisJKE5JTF9QKHZkKSAgIHx8IEZJWE5VTV9Q
KHZkKSkgJiYKKwkoTklMX1AodmgpICAgfHwgRklYTlVNX1AodmgpKSAmJgor
CShOSUxfUCh2bWluKSB8fCBGSVhOVU1fUCh2bWluKSkgJiYKKwkoTklMX1Ao
dnMpICAgfHwgRklYTlVNX1AodnMpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJk
digiY29tbWVyY2lhbF9yIik7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAg
IHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsK
KworICB5ID0gLTQ3MTI7CisgIHcgPSAxOworICBkID0gMTsKKworICBoID0g
bWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNoIChhcmdjKSB7
CisgIGNhc2UgODoKKyAgY2FzZSA3OgorICAgIGlmICghZGF5ZGlmZl90b19z
ZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNvbW1l
cmNpYWxfciIpOworICBjYXNlIDY6CisgICAgcyA9IE5VTTJMT05HKHZzKTsK
KyAgY2FzZSA1OgorICAgIG1pbiA9IE5VTTJMT05HKHZtaW4pOworICBjYXNl
IDQ6CisgICAgaCA9IE5VTTJMT05HKHZoKTsKKyAgY2FzZSAzOgorICAgIGQg
PSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMjoKKyAgICB3ID0gTlVNMkxPTkco
dncpOworICBjYXNlIDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBp
ZiAoIUxJR0hUQUJMRV9DV1lFQVIoeSkpCisgICAgICByZXR1cm4gY2Zvcndh
cmR2KCJjb21tZXJjaWFsX3IiKTsKKyAgfQorCisgIHsKKyAgICBsb25nIGpk
OworICAgIGludCBuczsKKworICAgIGlmICghdmFsaWRfY29tbWVyY2lhbF9w
KHksIHcsIGQsIHNnLCAmcncsICZyZCwgJmpkLCAmbnMpKQorICAgICAgcmJf
cmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisgICAgaWYg
KCF2YWxpZF90aW1lX3AoaCwgbWluLCBzLCAmcmgsICZybWluLCAmcnMpKQor
ICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7
CisKKyAgICBpZiAoIUxJR0hUQUJMRV9KRChqZCkgfHwgIW5zKQorICAgICAg
cmV0dXJuIGNmb3J3YXJkdigiY29tbWVyY2lhbF9yIik7CisKKyAgICByZXR1
cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywKKwkJCQkgIGpkX2xv
Y2FsX3RvX3V0YyhqZCwKKwkJCQkJCSAgdGltZV90b19kZihyaCwgcm1pbiwg
cnMpLAorCQkJCQkJICByb2YpLAorCQkJCSAgMCwgMCwgcm9mLCBzZywKKwkJ
CQkgIDAsIDAsIDAsIHJoLCBybWluLCBycywKKwkJCQkgIExJR0hUX01PREUg
fCBIQVZFX0pEIHwgSEFWRV9USU1FKTsKKyAgfQorfQorCitzdGF0aWMgVkFM
VUUKK2RhdGV0aW1lX3Nfbm93KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM
VUUga2xhc3MpCit7CisgIFZBTFVFIHZzZzsKKyAgZG91YmxlIHNnOworI2lm
ZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorICBzdHJ1Y3QgdGltZXNwZWMgdHM7
CisjZWxzZQorICBzdHJ1Y3QgdGltZXZhbCB0djsKKyNlbmRpZgorICBzdHJ1
Y3QgdG0gdG07CisgIGludCB5LCBtLCBkLCBoLCBtaW4sIHMsIG9mLCBzZjsK
KworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwgJnZzZyk7CisK
KyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cpOwor
ICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworI2lmZGVmIEhBVkVfQ0xPQ0tf
R0VUVElNRQorICBpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwg
JnRzKSA9PSAtMSkKKyAgICByYl9zeXNfZmFpbCgiY2xvY2tfZ2V0dGltZSIp
OworICBsb2NhbHRpbWVfcigmdHMudHZfc2VjLCAmdG0pOworI2Vsc2UKKyAg
aWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpID09IC0xKQorICAgIHJiX3N5
c19mYWlsKCJnZXR0aW1lb2ZkYXkiKTsKKyAgbG9jYWx0aW1lX3IoJnR2LnR2
X3NlYywgJnRtKTsKKyNlbmRpZgorCisgIHkgPSB0bS50bV95ZWFyICsgMTkw
MDsKKyAgbSA9IHRtLnRtX21vbiArIDE7CisgIGQgPSB0bS50bV9tZGF5Owor
ICBoID0gdG0udG1faG91cjsKKyAgbWluID0gdG0udG1fbWluOworICBzID0g
dG0udG1fc2VjOworICBpZiAocyA9PSA2MCkKKyAgICBzID0gNTk7CisjaWZk
ZWYgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgIG9mID0gdG0udG1fZ210
b2ZmOworI2Vsc2UKKyAgb2YgPSAoaW50KS10aW1lem9uZTsKKyNlbmRpZgor
I2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorICBzZiA9IHRzLnR2X25zZWM7
CisjZWxzZQorICBzZiA9IHR2LnR2X3VzZWMgKiAxMDAwOworI2VuZGlmCisK
KyAgaWYgKGlzaW5mKHNnKSAmJiBzZyA8IDApCisgICAgcmV0dXJuIGR0X2xp
dGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIDAsIDAsIHNmLCBvZiwgc2csCisJ
CQkJICB5LCBtLCBkLCBoLCBtaW4sIHMsCisJCQkJICBMSUdIVF9NT0RFIHwg
SEFWRV9DSVZJTCB8IEhBVkVfVElNRSk7CisgIGVsc2UgeworICAgIGxvbmcg
amQ7CisgICAgaW50IG5zOworCisgICAgY2l2aWxfdG9famQoeSwgbSwgZCwg
c2csICZqZCwgJm5zKTsKKworICAgIHJldHVybiBkdF9saXRlX3NfbmV3X2lu
dGVybmFsKGtsYXNzLAorCQkJCSAgamRfbG9jYWxfdG9fdXRjKGpkLAorCQkJ
CQkJICB0aW1lX3RvX2RmKGgsIG1pbiwgcyksCisJCQkJCQkgIG9mKSwKKwkJ
CQkgIDAsIHNmLCBvZiwgc2csCisJCQkJICB5LCBtLCBkLCBoLCBtaW4sIHMs
CisJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8CisJCQkJICBIQVZFX0NJ
VklMIHwgSEFWRV9USU1FKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2R0
X2xpdGVfYWpkKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7Cisg
IGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5h
amQ7CisgIHsKKyAgICBWQUxVRSByOworCisgICAgZ2V0X2R0X2pkKGRhdCk7
CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAgciA9IGZfc3ViKElOVDJGSVgo
ZGF0LT5sLmpkKSwgcmhhbGYpOworICAgIGlmIChkYXQtPmwuZGYpCisgICAg
ICByID0gZl9hZGQociwgcmJfcmF0aW9uYWxfbmV3MihJTlQyRklYKGRhdC0+
bC5kZiksCisJCQkJICAgIElOVDJGSVgoREFZX0lOX1NFQ09ORFMpKSk7Cisg
ICAgaWYgKGRhdC0+bC5zZikKKyAgICAgIHIgPSBmX2FkZChyLCByYl9yYXRp
b25hbF9uZXcyKElOVDJGSVgoZGF0LT5sLnNmKSwgZGF5X2luX25hbm9zZWNv
bmRzKSk7CisgICAgcmV0dXJuIHI7CisgIH0KK30KKworc3RhdGljIFZBTFVF
CitkdF9saXRlX2FtamQoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxm
KTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZv
cndhcmQwKCJhbWpkX3IiKTsKKyAgeworICAgIFZBTFVFIHI7CisKKyAgICBn
ZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByID0g
cmJfcmF0aW9uYWxfbmV3MShMT05HMk5VTShkYXQtPmwuamQgLSAyNDAwMDAx
TCkpOworICAgIGlmIChkYXQtPmwuZGYpCisgICAgICByID0gZl9hZGQociwg
cmJfcmF0aW9uYWxfbmV3MihJTlQyRklYKGRhdC0+bC5kZiksCisJCQkJICAg
IElOVDJGSVgoREFZX0lOX1NFQ09ORFMpKSk7CisgICAgaWYgKGRhdC0+bC5z
ZikKKyAgICAgIHIgPSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJG
SVgoZGF0LT5sLnNmKSwgZGF5X2luX25hbm9zZWNvbmRzKSk7CisgICAgcmV0
dXJuIHI7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2pkKFZB
TFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRf
bW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiamRfciIpOwor
ICB7CisgICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7
CisgICAgcmV0dXJuIElOVDJGSVgobG9jYWxfamQoZGF0KSk7CisgIH0KK30K
Kworc3RhdGljIFZBTFVFCitkdF9saXRlX21qZChWQUxVRSBzZWxmKQorewor
ICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQor
ICAgIHJldHVybiBpZm9yd2FyZDAoIm1qZF9yIik7CisgIHsKKyAgICBnZXRf
ZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByZXR1cm4g
TE9ORzJOVU0obG9jYWxfamQoZGF0KSAtIDI0MDAwMDFMKTsKKyAgfQorfQor
CitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbGQoVkFMVUUgc2VsZikKK3sKKyAg
Z2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAg
ICByZXR1cm4gaWZvcndhcmQwKCJsZF9yIik7CisgIHsKKyAgICBnZXRfZHRf
amQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByZXR1cm4gTE9O
RzJOVU0obG9jYWxfamQoZGF0KSAtIDIyOTkxNjBMKTsKKyAgfQorfQorCitz
dGF0aWMgVkFMVUUKK2R0X2xpdGVfeWVhcihWQUxVRSBzZWxmKQoreworICBn
ZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAg
IHJldHVybiBpZm9yd2FyZDAoInllYXJfciIpOworICB7CisgICAgZ2V0X2R0
X2NpdmlsKGRhdCk7CisgICAgcmV0dXJuIElOVDJGSVgoZGF0LT5sLnllYXIp
OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV95ZGF5KFZBTFVF
IHNlbGYpCit7CisgIGludCByeSwgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsK
KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh
cmQwKCJ5ZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9qZChkYXQpOworICAg
IGdldF9kdF9kZihkYXQpOworICAgIGpkX3RvX29yZGluYWwobG9jYWxfamQo
ZGF0KSwgZGF0LT5sLnNnLCAmcnksICZyZCk7CisgICAgcmV0dXJuIElOVDJG
SVgocmQpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9tb24o
VkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdo
dF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJtb25fciIp
OworICB7CisgICAgZ2V0X2R0X2NpdmlsKGRhdCk7CisgICAgcmV0dXJuIElO
VDJGSVgoZGF0LT5sLm1vbik7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitk
dF9saXRlX21kYXkoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsK
KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh
cmQwKCJtZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9jaXZpbChkYXQpOwor
ICAgIHJldHVybiBJTlQyRklYKGRhdC0+bC5tZGF5KTsKKyAgfQorfQorCitz
dGF0aWMgVkFMVUUKK2R0X2xpdGVfZGF5X2ZyYWN0aW9uKFZBTFVFIHNlbGYp
Cit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh
dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiZGF5X2ZyYWN0aW9uX3IiKTsK
KyAgeworICAgIGdldF9kdF9kZihkYXQpOworICAgIHJldHVybiByYl9yYXRp
b25hbF9uZXcyKElOVDJGSVgobG9jYWxfZGYoZGF0KSksIElOVDJGSVgoREFZ
X0lOX1NFQ09ORFMpKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2R0X2xp
dGVfd251bTAoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7CisK
KyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkK
KyAgICByZXR1cm4gaWZvcndhcmQwKCJ3bnVtMF9yIik7CisgIHsKKyAgICBn
ZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICBqZF90
b193ZWVrbnVtKGxvY2FsX2pkKGRhdCksIDAsIGRhdC0+bC5zZywgJnJ5LCAm
cncsICZyZCk7CisgICAgcmV0dXJuIElOVDJGSVgocncpOworICB9Cit9CisK
K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV93bnVtMShWQUxVRSBzZWxmKQorewor
ICBpbnQgcnksIHJ3LCByZDsKKworICBnZXRfZHQxKHNlbGYpOworICBpZiAo
IWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoIndu
dW0xX3IiKTsKKyAgeworICAgIGdldF9kdF9qZChkYXQpOworICAgIGdldF9k
dF9kZihkYXQpOworICAgIGpkX3RvX3dlZWtudW0obG9jYWxfamQoZGF0KSwg
MSwgZGF0LT5sLnNnLCAmcnksICZydywgJnJkKTsKKyAgICByZXR1cm4gSU5U
MkZJWChydyk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2hv
dXIoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFs
aWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJob3Vy
X3IiKTsKKyAgeworICAgIGdldF9kdF90aW1lKGRhdCk7CisgICAgcmV0dXJu
IElOVDJGSVgoZGF0LT5sLmhvdXIpOworICB9Cit9CisKK3N0YXRpYyBWQUxV
RQorZHRfbGl0ZV9taW4oVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxm
KTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZv
cndhcmQwKCJtaW5fciIpOworICB7CisgICAgZ2V0X2R0X3RpbWUoZGF0KTsK
KyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwubWluKTsKKyAgfQorfQorCitz
dGF0aWMgVkFMVUUKK2R0X2xpdGVfc2VjKFZBTFVFIHNlbGYpCit7CisgIGdl
dF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAg
cmV0dXJuIGlmb3J3YXJkMCgic2VjX3IiKTsKKyAgeworICAgIGdldF9kdF90
aW1lKGRhdCk7CisgICAgcmV0dXJuIElOVDJGSVgoZGF0LT5sLnNlYyk7Cisg
IH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX3NlY19mcmFjdGlvbihW
QUxVRSBzZWxmKQoreworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0
X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoInNlY19mcmFj
dGlvbl9yIik7CisgIHJldHVybiByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgo
ZGF0LT5sLnNmKSwgSU5UMkZJWChTRUNPTkRfSU5fTkFOT1NFQ09ORFMpKTsK
K30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX29mZnNldChWQUxVRSBzZWxm
KQoreworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChk
YXQpKQorICAgIHJldHVybiBkYXQtPnIub2Y7CisgIHJldHVybiByYl9yYXRp
b25hbF9uZXcyKElOVDJGSVgoZGF0LT5sLm9mKSwgSU5UMkZJWChEQVlfSU5f
U0VDT05EUykpOworfQorCisjZGVmaW5lIGRlY29kZV9vZmZzZXQob2Yscyxo
LG0pIFwKK3sgXAorICBpbnQgYTsgXAorICBzID0gKG9mIDwgMCkgPyAnLScg
OiAnKyc7IFwKKyAgYSA9IChvZiA8IDApID8gLW9mIDogb2Y7IFwKKyAgaCA9
IGEgLyAzNjAwOyBcCisgIG0gPSBhICUgMzYwMCAvIDYwOyBcCit9CisKK3N0
YXRpYyBWQUxVRQorZHRfbGl0ZV96b25lKFZBTFVFIHNlbGYpCit7CisgIGlu
dCBzLCBoLCBtOworCisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRf
bW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiem9uZV9yIik7
CisgIGRlY29kZV9vZmZzZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgcmV0
dXJuIHJiX2VuY19zcHJpbnRmKHJiX3VzYXNjaWlfZW5jb2RpbmcoKSwgIiVj
JTAyZDolMDJkIiwgcywgaCwgbSk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRf
bGl0ZV9jd3llYXIoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7
CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0
KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJjd3llYXJfciIpOworICB7Cisg
ICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAg
amRfdG9fY29tbWVyY2lhbChsb2NhbF9qZChkYXQpLCBkYXQtPmwuc2csICZy
eSwgJnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklYKHJ5KTsKKyAgfQor
fQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfY3dlZWsoVkFMVUUgc2VsZikK
K3sKKyAgaW50IHJ5LCBydywgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAg
aWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQw
KCJjd2Vla19yIik7CisgIHsKKyAgICBnZXRfZHRfamQoZGF0KTsKKyAgICBn
ZXRfZHRfZGYoZGF0KTsKKyAgICBqZF90b19jb21tZXJjaWFsKGxvY2FsX2pk
KGRhdCksIGRhdC0+bC5zZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJu
IElOVDJGSVgocncpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0
ZV9jd2RheShWQUxVRSBzZWxmKQoreworICBpbnQgdzsKKworICBnZXRfZHQx
KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy
biBpZm9yd2FyZDAoImN3ZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9qZChk
YXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAgIHcgPSBqZF90b193ZGF5
KGxvY2FsX2pkKGRhdCkpOworICAgIGlmICh3ID09IDApCisgICAgICB3ID0g
NzsKKyAgICByZXR1cm4gSU5UMkZJWCh3KTsKKyAgfQorfQorCitzdGF0aWMg
VkFMVUUKK2R0X2xpdGVfd2RheShWQUxVRSBzZWxmKQoreworICBpbnQgdzsK
KworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQp
KQorICAgIHJldHVybiBpZm9yd2FyZDAoIndkYXlfciIpOworICB7CisgICAg
Z2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAgdyA9
IGpkX3RvX3dkYXkobG9jYWxfamQoZGF0KSk7CisgICAgcmV0dXJuIElOVDJG
SVgodyk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2p1bGlh
bl9wKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICgh
bGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgianVs
aWFuX3I/Iik7CisgIHJldHVybiBRZmFsc2U7Cit9CisKK3N0YXRpYyBWQUxV
RQorZHRfbGl0ZV9ncmVnb3JpYW5fcChWQUxVRSBzZWxmKQoreworICBnZXRf
ZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJl
dHVybiBpZm9yd2FyZDAoImdyZWdvcmlhbl9yPyIpOworICByZXR1cm4gUXRy
dWU7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9sZWFwX3AoVkFMVUUg
c2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2Rl
X3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJsZWFwX3I/Iik7Cisg
IHsKKyAgICBnZXRfZHRfY2l2aWwoZGF0KTsKKyAgICByZXR1cm4gbGVhcF9w
KGRhdC0+bC55ZWFyKSA/IFF0cnVlIDogUWZhbHNlOworICB9Cit9CisKK3N0
YXRpYyBWQUxVRQorZHRfbGl0ZV9zdGFydChWQUxVRSBzZWxmKQoreworICBn
ZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAg
IHJldHVybiBkYXQtPnIuc2c7CisgIHJldHVybiBEQkwyTlVNKGRhdC0+bC5z
Zyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9uZXdfc3RhcnQoaW50
IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBzZWxmKQoreworICBWQUxVRSB2
c2c7CisgIGRvdWJsZSBzZzsKKworICBnZXRfZHQxKHNlbGYpOworCisgIGlm
ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkdigi
bmV3X3N0YXJ0X3IiKTsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwg
IjAxIiwgJnZzZyk7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0g
TlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB7
CisgICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisK
KyAgICBpZiAoZGF0LT5sLmpkIDwgc2cpCisgICAgICByZXR1cm4gaWZvcndh
cmR2KCJuZXdfc3RhcnRfciIpOworCisgICAgcmV0dXJuIGR0X2xpdGVfc19u
ZXdfaW50ZXJuYWxfd29fY2l2aWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJCSAg
IGRhdC0+bC5qZCwKKwkJCQkJICAgZGF0LT5sLmRmLAorCQkJCQkgICBkYXQt
Pmwuc2YsCisJCQkJCSAgIGRhdC0+bC5vZiwKKwkJCQkJICAgc2csCisJCQkJ
CSAgIExJR0hUX01PREUgfCBIQVZFX0pEIHwgSEFWRV9ERik7CisgIH0KK30K
Kworc3RhdGljIFZBTFVFCitkdF9saXRlX25ld19vZmZzZXQoaW50IGFyZ2Ms
IFZBTFVFICphcmd2LCBWQUxVRSBzZWxmKQoreworICBWQUxVRSB2b2Y7Cisg
IGludCByb2Y7CisKKyAgZ2V0X2R0MShzZWxmKTsKKworICBpZiAoIWxpZ2h0
X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZHYoIm5ld19vZmZz
ZXRfciIpOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDEiLCAm
dm9mKTsKKworICBpZiAoTklMX1Aodm9mKSkKKyAgICByb2YgPSAwOworICBl
bHNlIHsKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwgJnJvZikpCisg
ICAgICByZXR1cm4gaWZvcndhcmR2KCJuZXdfb2Zmc2V0X3IiKTsKKyAgfQor
CisgIHsKKyAgICBnZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0
KTsKKworICAgIHJldHVybiBkdF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2Np
dmlsKENMQVNTX09GKHNlbGYpLAorCQkJCQkgICBkYXQtPmwuamQsCisJCQkJ
CSAgIGRhdC0+bC5kZiwKKwkJCQkJICAgZGF0LT5sLnNmLAorCQkJCQkgICBy
b2YsCisJCQkJCSAgIGRhdC0+bC5zZywKKwkJCQkJICAgTElHSFRfTU9ERSB8
IEhBVkVfSkQgfCBIQVZFX0RGKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK
K2R0X2xpdGVfcGx1cyhWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg
Z2V0X2R0MShzZWxmKTsKKworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQor
ICAgIHJldHVybiBpZm9yd2FyZG9wKCJwbHVzX3IiKTsKKworICBzd2l0Y2gg
KFRZUEUob3RoZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgeworICAg
ICAgbG9uZyBqZDsKKworICAgICAgZ2V0X2R0MShzZWxmKTsKKyAgICAgIGdl
dF9kdF9qZChkYXQpOworICAgICAgZ2V0X2R0X2RmKGRhdCk7CisKKyAgICAg
IGpkID0gZGF0LT5sLmpkICsgRklYMkxPTkcob3RoZXIpOworCisgICAgICBp
ZiAoTElHSFRBQkxFX0pEKGpkKSAmJiBqZCA+PSBkYXQtPmwuc2cpCisJcmV0
dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWwoQ0xBU1NfT0Yoc2VsZiksCisJ
CQkJICAgICAgamQsCisJCQkJICAgICAgZGF0LT5sLmRmLAorCQkJCSAgICAg
IGRhdC0+bC5zZiwKKwkJCQkgICAgICBkYXQtPmwub2YsCisJCQkJICAgICAg
ZGF0LT5sLnNnLAorCQkJCSAgICAgIDAsIDAsIDAsCisJCQkJICAgICAgZGF0
LT5sLmhvdXIsCisJCQkJICAgICAgZGF0LT5sLm1pbiwKKwkJCQkgICAgICBk
YXQtPmwuc2VjLAorCQkJCSAgICAgIGRhdC0+bC5mbGFncyAmIH5IQVZFX0NJ
VklMKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgVF9GTE9BVDoKKyAg
ICB7CisgICAgICBsb25nIGpkLCBkZjsKKyAgICAgIGxvbmcgbG9uZyBzZjsK
KyAgICAgIGxvbmcgZG91YmxlIG87CisgICAgICBpbnQgczsKKworICAgICAg
Z2V0X2R0MShzZWxmKTsKKyAgICAgIGdldF9kdF9qZChkYXQpOworICAgICAg
Z2V0X2R0X2RmKGRhdCk7CisKKyAgICAgIGpkID0gZGF0LT5sLmpkOworICAg
ICAgbyA9IE5VTTJEQkwob3RoZXIpOworCisgICAgICBpZiAobyA8IDApIHsK
KwlzID0gLTE7CisJbyA9IC1vOworICAgICAgfSBlbHNlCisJcyA9ICsxOwor
CisgICAgICBqZCA9IChsb25nKWZsb29ybChvKTsKKyAgICAgIG8gPSBvIC0g
amQ7CisgICAgICBvICo9IERBWV9JTl9TRUNPTkRTOworICAgICAgZGYgPSAo
bG9uZylmbG9vcmwobyk7CisgICAgICBvID0gbyAtIGRmOworICAgICAgbyAq
PSBTRUNPTkRfSU5fTkFOT1NFQ09ORFM7CisgICAgICBzZiA9IChsb25nKXJv
dW5kbChvKTsKKworICAgICAgaWYgKHMgPCAwKSB7CisJamQgPSAtamQ7CisJ
ZGYgPSAtZGY7CisJc2YgPSAtc2Y7CisgICAgICB9CisKKyAgICAgIHNmID0g
ZGF0LT5sLnNmICsgc2Y7CisgICAgICBpZiAoc2YgPCAwKSB7CisJZGYgLT0g
MTsKKwlzZiArPSBTRUNPTkRfSU5fTkFOT1NFQ09ORFM7CisgICAgICB9IGVs
c2UgaWYgKHNmID49IFNFQ09ORF9JTl9OQU5PU0VDT05EUykgeworCWRmICs9
IDE7CisJc2YgLT0gU0VDT05EX0lOX05BTk9TRUNPTkRTOworICAgICAgfQor
CisgICAgICBkZiA9IGRhdC0+bC5kZiArIGRmOworICAgICAgaWYgKGRmIDwg
MCkgeworCWpkIC09IDE7CisJZGYgKz0gREFZX0lOX1NFQ09ORFM7CisgICAg
ICB9IGVsc2UgaWYgKGRmID49IERBWV9JTl9TRUNPTkRTKSB7CisJamQgKz0g
MTsKKwlkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgICAgIH0KKworICAgICAg
amQgPSBkYXQtPmwuamQgKyBqZDsKKworICAgICAgaWYgKExJR0hUQUJMRV9K
RChqZCkgJiYgamQgPj0gZGF0LT5sLnNnKQorCXJldHVybiBkdF9saXRlX3Nf
bmV3X2ludGVybmFsKENMQVNTX09GKHNlbGYpLAorCQkJCSAgICAgIGpkLAor
CQkJCSAgICAgIGRmLAorCQkJCSAgICAgIHNmLAorCQkJCSAgICAgIGRhdC0+
bC5vZiwKKwkJCQkgICAgICBkYXQtPmwuc2csCisJCQkJICAgICAgMCwgMCwg
MCwKKwkJCQkgICAgICBkYXQtPmwuaG91ciwKKwkJCQkgICAgICBkYXQtPmwu
bWluLAorCQkJCSAgICAgIGRhdC0+bC5zZWMsCisJCQkJICAgICAgZGF0LT5s
LmZsYWdzICYgfkhBVkVfQ0lWSUwgJiB+SEFWRV9USU1FKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoInBsdXNfciIp
OworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbWludXMoVkFMVUUgc2Vs
ZiwgVkFMVUUgb3RoZXIpCit7CisgIGlmIChrX2RhdGVfcChvdGhlcikpCisg
ICAgcmV0dXJuIG1pbnVzX2RkKHNlbGYsIG90aGVyKTsKKworICBzd2l0Y2gg
KFRZUEUob3RoZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgcmV0dXJu
IGR0X2xpdGVfcGx1cyhzZWxmLCBMT05HMk5VTSgtRklYMkxPTkcob3RoZXIp
KSk7CisgIGNhc2UgVF9GTE9BVDoKKyAgICByZXR1cm4gZHRfbGl0ZV9wbHVz
KHNlbGYsIERCTDJOVU0oLU5VTTJEQkwob3RoZXIpKSk7CisgIH0KKyAgcmV0
dXJuIGlmb3J3YXJkb3AoIm1pbnVzX3IiKTsKK30KKworc3RhdGljIFZBTFVF
CitkdF9saXRlX2NtcChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg
aWYgKGtfZGF0ZV9wKG90aGVyKSkKKyAgICByZXR1cm4gY21wX2RkKHNlbGYs
IG90aGVyKTsKKyAgcmV0dXJuIGlmb3J3YXJkb3AoImNtcF9yIik7Cit9CisK
K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9lcXVhbChWQUxVRSBzZWxmLCBWQUxV
RSBvdGhlcikKK3sKKyAgaWYgKGtfZGF0ZV9wKG90aGVyKSkKKyAgICByZXR1
cm4gZXF1YWxfZGQoc2VsZiwgb3RoZXIpOworICByZXR1cm4gaWZvcndhcmRv
cCgiZXF1YWxfciIpOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfZXFs
X3AoVkFMVUUgc2VsZiwgVkFMVUUgb3RoZXIpCit7CisgIGlmIChrX2RhdGVf
cChvdGhlcikpCisgICAgcmV0dXJuIGVxbF9wX2RkKHNlbGYsIG90aGVyKTsK
KyAgcmV0dXJuIGlmb3J3YXJkb3AoImVxbF9yPyIpOworfQorCitzdGF0aWMg
VkFMVUUKK2R0X2xpdGVfaGFzaChWQUxVRSBzZWxmKQoreworICBnZXRfZHQx
KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy
biBpZm9yd2FyZDAoImhhc2hfciIpOworICByZXR1cm4gcmJfaGFzaChkdF9s
aXRlX2FqZChzZWxmKSk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV90
b19zKFZBTFVFIHNlbGYpCit7CisgIGludCBzLCBoLCBtOworCisgIGdldF9k
dDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0
dXJuIGlmb3J3YXJkMCgidG9fc19yIik7CisgIHsKKyAgICBnZXRfZHRfY2l2
aWwoZGF0KTsKKyAgICBnZXRfZHRfdGltZShkYXQpOworICAgIGRlY29kZV9v
ZmZzZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgICByZXR1cm4gcmJfZW5j
X3NwcmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiJS40ZC0l
MDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6JTAyZCIsCisJCQkgIGRh
dC0+bC55ZWFyLCBkYXQtPmwubW9uLCBkYXQtPmwubWRheSwKKwkJCSAgZGF0
LT5sLmhvdXIsIGRhdC0+bC5taW4sIGRhdC0+bC5zZWMsCisJCQkgIHMsIGgs
IG0pOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9pbnNwZWN0
KFZBTFVFIHNlbGYpCit7CisgIGludCBzLCBoLCBtOworCisgIGdldF9kdDEo
c2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJu
IGlmb3J3YXJkMCgiaW5zcGVjdF9yIik7CisgIHsKKyAgICBnZXRfZHRfY2l2
aWwoZGF0KTsKKyAgICBnZXRfZHRfdGltZShkYXQpOworICAgIGdldF9kdF9q
ZChkYXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAgIGRlY29kZV9vZmZz
ZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgICByZXR1cm4gcmJfZW5jX3Nw
cmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiIzwlc1tMXTog
IgorCQkJICAiJS40ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6
JTAyZCAiCisJCQkgICIoKCVsZGosJWRzLCUuMGZuKSwlZC84NjQwMCwlLjBm
KT4iLAorCQkJICByYl9vYmpfY2xhc3NuYW1lKHNlbGYpLAorCQkJICBkYXQt
PmwueWVhciwgZGF0LT5sLm1vbiwgZGF0LT5sLm1kYXksCisJCQkgIGRhdC0+
bC5ob3VyLCBkYXQtPmwubWluLCBkYXQtPmwuc2VjLAorCQkJICBzLCBoLCBt
LAorCQkJICBkYXQtPmwuamQsIGRhdC0+bC5kZiwgKGRvdWJsZSlkYXQtPmwu
c2YsIGRhdC0+bC5vZiwKKwkJCSAgZGF0LT5sLnNnKTsKKyAgfQorfQorCitz
dGF0aWMgVkFMVUUKK2R0X2xpdGVfbWFyc2hhbF9kdW1wKFZBTFVFIHNlbGYp
Cit7CisgIFZBTFVFIGE7CisKKyAgZ2V0X2R0MShzZWxmKTsKKworICBpZiAo
IWxpZ2h0X21vZGVfcChkYXQpKQorICAgIGEgPSByYl9hcnlfbmV3MygzLCBk
YXQtPnIuYWpkLCBkYXQtPnIub2YsIGRhdC0+ci5zZyk7CisgIGVsc2Ugewor
ICAgIGdldF9kdF9qZChkYXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAg
IGEgPSByYl9hcnlfbmV3Myg1LAorCQkgICAgTE9ORzJOVU0oZGF0LT5sLmpk
KSwgSU5UMkZJWChkYXQtPmwuZGYpLCBJTlQyRklYKGRhdC0+bC5zZiksCisJ
CSAgICBJTlQyRklYKGRhdC0+bC5vZiksIERCTDJOVU0oZGF0LT5sLnNnKSk7
CisgIH0KKworICBpZiAoRkxfVEVTVChzZWxmLCBGTF9FWElWQVIpKSB7Cisg
ICAgcmJfY29weV9nZW5lcmljX2l2YXIoYSwgc2VsZik7CisgICAgRkxfU0VU
KGEsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1cm4gYTsKK30KKworc3Rh
dGljIFZBTFVFCitkdF9saXRlX21hcnNoYWxfbG9hZChWQUxVRSBzZWxmLCBW
QUxVRSBhKQoreworICBnZXRfZHQxKHNlbGYpOworCisgIGlmICghRklYTlVN
X1AoUkFSUkFZX1BUUihhKVswXSkpIHsKKyAgICBkYXQtPnIuYWpkID0gUkFS
UkFZX1BUUihhKVswXTsKKyAgICBkYXQtPnIub2YgPSBSQVJSQVlfUFRSKGEp
WzFdOworICAgIGRhdC0+ci5zZyA9IFJBUlJBWV9QVFIoYSlbMl07CisgICAg
ZGF0LT5yLmNhc2ggPSByYl9oYXNoX25ldygpOworICAgIGRhdC0+ci5mbGFn
cyA9IDA7CisgIH0gZWxzZSB7CisgICAgZGF0LT5sLmpkID0gTlVNMkxPTkco
UkFSUkFZX1BUUihhKVswXSk7CisgICAgZGF0LT5sLmRmID0gRklYMklOVChS
QVJSQVlfUFRSKGEpWzFdKTsKKyAgICBkYXQtPmwuc2YgPSBGSVgySU5UKFJB
UlJBWV9QVFIoYSlbMl0pOworICAgIGRhdC0+bC5vZiA9IEZJWDJJTlQoUkFS
UkFZX1BUUihhKVszXSk7CisgICAgZGF0LT5sLnNnID0gTlVNMkRCTChSQVJS
QVlfUFRSKGEpWzRdKTsKKyAgICBkYXQtPmwueWVhciA9IDA7CisgICAgZGF0
LT5sLm1vbiA9IDA7CisgICAgZGF0LT5sLm1kYXkgPSAwOworICAgIGRhdC0+
bC5ob3VyID0gMDsKKyAgICBkYXQtPmwubWluID0gMDsKKyAgICBkYXQtPmwu
c2VjID0gMDsKKyAgICBkYXQtPmwuZmxhZ3MgPSBMSUdIVF9NT0RFIHwgSEFW
RV9KRCB8IEhBVkVfREY7CisgIH0KKworICBpZiAoRkxfVEVTVChhLCBGTF9F
WElWQVIpKSB7CisgICAgcmJfY29weV9nZW5lcmljX2l2YXIoc2VsZiwgYSk7
CisgICAgRkxfU0VUKHNlbGYsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1
cm4gc2VsZjsKK30KKworc3RhdGljIFZBTFVFCitkdF9yaWdodF9jYXNoKFZB
TFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmIChsaWdodF9t
b2RlX3AoZGF0KSkKKyAgICByZXR1cm4gUW5pbDsKKyAgcmV0dXJuIGRhdC0+
ci5jYXNoOworfQorCisjaWZuZGVmIE5ERUJVRworc3RhdGljIGludAordGVz
dF9jaXZpbChsb25nIGZyb20sIGxvbmcgdG8sIGRvdWJsZSBzZykKK3sKKyAg
bG9uZyBqOworCisgIGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQp
IC0gJS4wZlxuIiwgZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3Ig
KGogPSBmcm9tOyBqIDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwgbSwgZCwg
bnM7CisgICAgbG9uZyByajsKKworICAgIGpkX3RvX2NpdmlsKGosIHNnLCAm
eSwgJm0sICZkKTsKKyAgICBjaXZpbF90b19qZCh5LCBtLCBkLCBzZywgJnJq
LCAmbnMpOworICAgIGlmIChqICE9IHJqKSB7CisgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVsZCAhPSAlbGRcbiIsIGosIHJqKTsKKyAgICAgIHJldHVybiAw
OworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIFZBTFVF
CitkYXRlX3NfdGVzdF9jaXZpbChWQUxVRSBrbGFzcykKK3sKKyAgZG91Ymxl
IGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0LCByYl9p
bnRlcm4oIklORklOSVRZIikpKTsKKworICBpZiAoIXRlc3RfY2l2aWwoTUlO
X0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7
CisgIGlmICghdGVzdF9jaXZpbCgyMzA1ODE0LCAyNTk4MDA3LCBncmVnKSkK
KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfY2l2aWwoTUFYX0pE
IC0gMzY2LCBNQVhfSkQsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisK
KyAgaWYgKCF0ZXN0X2NpdmlsKE1JTl9KRCwgTUlOX0pEICsgMzY2LCBJVEFM
WSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2NpdmlsKDIz
MDU4MTQsIDI1OTgwMDcsIElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNlOwor
ICBpZiAoIXRlc3RfY2l2aWwoTUFYX0pEIC0gMzY2LCBNQVhfSkQsIElUQUxZ
KSkKKyAgICByZXR1cm4gUWZhbHNlOworCisgIHJldHVybiBRdHJ1ZTsKK30K
Kworc3RhdGljIGludAordGVzdF9vcmRpbmFsKGxvbmcgZnJvbSwgbG9uZyB0
bywgZG91YmxlIHNnKQoreworICBsb25nIGo7CisKKyAgZnByaW50ZihzdGRl
cnIsICIlbGQuLi4lbGQgKCVsZCkgLSAlLjBmXG4iLCBmcm9tLCB0bywgdG8g
LSBmcm9tLCBzZyk7CisgIGZvciAoaiA9IGZyb207IGogPD0gdG87IGorKykg
eworICAgIGludCB5LCBkLCBuczsKKyAgICBsb25nIHJqOworCisgICAgamRf
dG9fb3JkaW5hbChqLCBzZywgJnksICZkKTsKKyAgICBvcmRpbmFsX3RvX2pk
KHksIGQsIHNnLCAmcmosICZucyk7CisgICAgaWYgKGogIT0gcmopIHsKKyAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJWxkICE9ICVsZFxuIiwgaiwgcmopOwor
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQor
CitzdGF0aWMgVkFMVUUKK2RhdGVfc190ZXN0X29yZGluYWwoVkFMVUUga2xh
c3MpCit7CisgIGRvdWJsZSBncmVnID0gLU5VTTJEQkwocmJfY29uc3RfZ2V0
KHJiX2NGbG9hdCwgcmJfaW50ZXJuKCJJTkZJTklUWSIpKSk7CisKKyAgaWYg
KCF0ZXN0X29yZGluYWwoTUlOX0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQor
ICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9vcmRpbmFsKDIzMDU4
MTQsIDI1OTgwMDcsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlm
ICghdGVzdF9vcmRpbmFsKE1BWF9KRCAtIDM2NiwgTUFYX0pELCBncmVnKSkK
KyAgICByZXR1cm4gUWZhbHNlOworCisgIGlmICghdGVzdF9vcmRpbmFsKE1J
Tl9KRCwgTUlOX0pEICsgMzY2LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxz
ZTsKKyAgaWYgKCF0ZXN0X29yZGluYWwoMjMwNTgxNCwgMjU5ODAwNywgSVRB
TFkpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9vcmRpbmFs
KE1BWF9KRCAtIDM2NiwgTUFYX0pELCBJVEFMWSkpCisgICAgcmV0dXJuIFFm
YWxzZTsKKworICByZXR1cm4gUXRydWU7Cit9CisKK3N0YXRpYyBpbnQKK3Rl
c3RfY29tbWVyY2lhbChsb25nIGZyb20sIGxvbmcgdG8sIGRvdWJsZSBzZykK
K3sKKyAgbG9uZyBqOworCisgIGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxk
ICglbGQpIC0gJS4wZlxuIiwgZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOwor
ICBmb3IgKGogPSBmcm9tOyBqIDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwg
dywgZCwgbnM7CisgICAgbG9uZyByajsKKworICAgIGpkX3RvX2NvbW1lcmNp
YWwoaiwgc2csICZ5LCAmdywgJmQpOworICAgIGNvbW1lcmNpYWxfdG9famQo
eSwgdywgZCwgc2csICZyaiwgJm5zKTsKKyAgICBpZiAoaiAhPSByaikgewor
ICAgICAgZnByaW50ZihzdGRlcnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7
CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9
CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3Rlc3RfY29tbWVyY2lhbChWQUxV
RSBrbGFzcykKK3sKKyAgZG91YmxlIGdyZWcgPSAtTlVNMkRCTChyYl9jb25z
dF9nZXQocmJfY0Zsb2F0LCByYl9pbnRlcm4oIklORklOSVRZIikpKTsKKwor
ICBpZiAoIXRlc3RfY29tbWVyY2lhbChNSU5fSkQsIE1JTl9KRCArIDM2Niwg
Z3JlZykpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2NvbW1l
cmNpYWwoMjMwNTgxNCwgMjU5ODAwNywgZ3JlZykpCisgICAgcmV0dXJuIFFm
YWxzZTsKKyAgaWYgKCF0ZXN0X2NvbW1lcmNpYWwoTUFYX0pEIC0gMzY2LCBN
QVhfSkQsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisKKyAgaWYgKCF0
ZXN0X2NvbW1lcmNpYWwoTUlOX0pELCBNSU5fSkQgKyAzNjYsIElUQUxZKSkK
KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfY29tbWVyY2lhbCgy
MzA1ODE0LCAyNTk4MDA3LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsK
KyAgaWYgKCF0ZXN0X2NvbW1lcmNpYWwoTUFYX0pEIC0gMzY2LCBNQVhfSkQs
IElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNlOworCisgIHJldHVybiBRdHJ1
ZTsKK30KKworc3RhdGljIGludAordGVzdF93ZWVrbnVtKGxvbmcgZnJvbSwg
bG9uZyB0bywgaW50IGYsIGRvdWJsZSBzZykKK3sKKyAgbG9uZyBqOworCisg
IGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQpIC0gJS4wZlxuIiwg
ZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3IgKGogPSBmcm9tOyBq
IDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwgdywgZCwgbnM7CisgICAgbG9u
ZyByajsKKworICAgIGpkX3RvX3dlZWtudW0oaiwgZiwgc2csICZ5LCAmdywg
JmQpOworICAgIHdlZWtudW1fdG9famQoeSwgdywgZCwgZiwgc2csICZyaiwg
Jm5zKTsKKyAgICBpZiAoaiAhPSByaikgeworICAgICAgZnByaW50ZihzdGRl
cnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7CisgICAgICByZXR1cm4gMDsK
KyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBWQUxVRQor
ZGF0ZV9zX3Rlc3Rfd2Vla251bShWQUxVRSBrbGFzcykKK3sKKyAgZG91Ymxl
IGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0LCByYl9p
bnRlcm4oIklORklOSVRZIikpKTsKKyAgaW50IGY7CisKKyAgZm9yIChmID0g
MDsgZiA8PSAxOyBmKyspIHsKKyAgICBpZiAoIXRlc3Rfd2Vla251bShNSU5f
SkQsIE1JTl9KRCArIDM2NiwgZiwgZ3JlZykpCisgICAgICByZXR1cm4gUWZh
bHNlOworICAgIGlmICghdGVzdF93ZWVrbnVtKDIzMDU4MTQsIDI1OTgwMDcs
IGYsIGdyZWcpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgICBpZiAoIXRl
c3Rfd2Vla251bShNQVhfSkQgLSAzNjYsIE1BWF9KRCwgZiwgZ3JlZykpCisg
ICAgICByZXR1cm4gUWZhbHNlOworCisgICAgaWYgKCF0ZXN0X3dlZWtudW0o
TUlOX0pELCBNSU5fSkQgKyAzNjYsIGYsIElUQUxZKSkKKyAgICAgIHJldHVy
biBRZmFsc2U7CisgICAgaWYgKCF0ZXN0X3dlZWtudW0oMjMwNTgxNCwgMjU5
ODAwNywgZiwgSVRBTFkpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgICBp
ZiAoIXRlc3Rfd2Vla251bShNQVhfSkQgLSAzNjYsIE1BWF9KRCwgZiwgSVRB
TFkpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgfQorCisgIHJldHVybiBR
dHJ1ZTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X250aF9rZGF5KGxvbmcg
ZnJvbSwgbG9uZyB0bywgZG91YmxlIHNnKQoreworICBsb25nIGo7CisKKyAg
ZnByaW50ZihzdGRlcnIsICIlbGQuLi4lbGQgKCVsZCkgLSAlLjBmXG4iLCBm
cm9tLCB0bywgdG8gLSBmcm9tLCBzZyk7CisgIGZvciAoaiA9IGZyb207IGog
PD0gdG87IGorKykgeworICAgIGludCB5LCBtLCBuLCBrLCBuczsKKyAgICBs
b25nIHJqOworCisgICAgamRfdG9fbnRoX2tkYXkoaiwgc2csICZ5LCAmbSwg
Jm4sICZrKTsKKyAgICBudGhfa2RheV90b19qZCh5LCBtLCBuLCBrLCBzZywg
JnJqLCAmbnMpOworICAgIGlmIChqICE9IHJqKSB7CisgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVsZCAhPSAlbGRcbiIsIGosIHJqKTsKKyAgICAgIHJldHVy
biAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIFZB
TFVFCitkYXRlX3NfdGVzdF9udGhfa2RheShWQUxVRSBrbGFzcykKK3sKKyAg
ZG91YmxlIGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0
LCByYl9pbnRlcm4oIklORklOSVRZIikpKTsKKworICBpZiAoIXRlc3RfbnRo
X2tkYXkoTUlOX0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQorICAgIHJldHVy
biBRZmFsc2U7CisgIGlmICghdGVzdF9udGhfa2RheSgyMzA1ODE0LCAyNTk4
MDA3LCBncmVnKSkKKyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3Rf
bnRoX2tkYXkoTUFYX0pEIC0gMzY2LCBNQVhfSkQsIGdyZWcpKQorICAgIHJl
dHVybiBRZmFsc2U7CisKKyAgaWYgKCF0ZXN0X250aF9rZGF5KE1JTl9KRCwg
TUlOX0pEICsgMzY2LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAg
aWYgKCF0ZXN0X250aF9rZGF5KDIzMDU4MTQsIDI1OTgwMDcsIElUQUxZKSkK
KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfbnRoX2tkYXkoTUFY
X0pEIC0gMzY2LCBNQVhfSkQsIElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNl
OworCisgIHJldHVybiBRdHJ1ZTsKK30KKworc3RhdGljIFZBTFVFCitkYXRl
X3NfdGVzdF9hbGwoVkFMVUUga2xhc3MpCit7CisgIGlmIChkYXRlX3NfdGVz
dF9jaXZpbChrbGFzcykgPT0gUWZhbHNlKQorICAgIHJldHVybiBRZmFsc2U7
CisgIGlmIChkYXRlX3NfdGVzdF9vcmRpbmFsKGtsYXNzKSA9PSBRZmFsc2Up
CisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKGRhdGVfc190ZXN0X2NvbW1l
cmNpYWwoa2xhc3MpID09IFFmYWxzZSkKKyAgICByZXR1cm4gUWZhbHNlOwor
ICBpZiAoZGF0ZV9zX3Rlc3Rfd2Vla251bShrbGFzcykgPT0gUWZhbHNlKQor
ICAgIHJldHVybiBRZmFsc2U7CisgIGlmIChkYXRlX3NfdGVzdF9udGhfa2Rh
eShrbGFzcykgPT0gUWZhbHNlKQorICAgIHJldHVybiBRZmFsc2U7CisgIHJl
dHVybiBRdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkCitJbml0X2RhdGVfY29y
ZSh2b2lkKQoreworICBhc3NlcnQoZnByaW50ZihzdGRlcnIsICJhc3NlcnQo
KSBpcyBub3cgYWN0aXZlXG4iKSk7CisKKyAgcnplcm8gPSByYl9yYXRpb25h
bF9uZXcxKElOVDJGSVgoMCkpOworICByaGFsZiA9IHJiX3JhdGlvbmFsX25l
dzIoSU5UMkZJWCgxKSwgSU5UMkZJWCgyKSk7CisgIGRheV9pbl9uYW5vc2Vj
b25kcyA9IHJiX2xsMmludW0oREFZX0lOX05BTk9TRUNPTkRTKTsKKworICBy
Yl9nY19yZWdpc3Rlcl9tYXJrX29iamVjdChyemVybyk7CisgIHJiX2djX3Jl
Z2lzdGVyX21hcmtfb2JqZWN0KHJoYWxmKTsKKyAgcmJfZ2NfcmVnaXN0ZXJf
bWFya19vYmplY3QoZGF5X2luX25hbm9zZWNvbmRzKTsKKworICAvKiBkYXRl
ICovCisKKyAgY0RhdGUgPSByYl9kZWZpbmVfY2xhc3MoIkRhdGUiLCByYl9j
T2JqZWN0KTsKKworICByYl9kZWZpbmVfYWxsb2NfZnVuYyhjRGF0ZSwgZF9s
aXRlX3NfYWxsb2MpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj
RGF0ZSwgIm5ld19yISIsIGRhdGVfc19uZXdfcl9iYW5nLCAtMSk7CisgIHJi
X2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAibmV3X2whIiwgZGF0
ZV9zX25ld19sX2JhbmcsIC0xKTsKKworICByYl9kZWZpbmVfc2luZ2xldG9u
X21ldGhvZChjRGF0ZSwgInZhbGlkX2pkPyIsIGRhdGVfc192YWxpZF9qZF9w
LCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAi
dmFsaWRfb3JkaW5hbD8iLAorCQkJICAgICBkYXRlX3NfdmFsaWRfb3JkaW5h
bF9wLCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRl
LCAidmFsaWRfY2l2aWw/IiwgZGF0ZV9zX3ZhbGlkX2NpdmlsX3AsIC0xKTsK
KyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJ2YWxpZF9k
YXRlPyIsIGRhdGVfc192YWxpZF9jaXZpbF9wLCAtMSk7CisgIHJiX2RlZmlu
ZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAidmFsaWRfY29tbWVyY2lhbD8i
LAorCQkJICAgICBkYXRlX3NfdmFsaWRfY29tbWVyY2lhbF9wLCAtMSk7Cisg
IHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAiamQiLCBkYXRl
X3NfamQsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0Rh
dGUsICJvcmRpbmFsIiwgZGF0ZV9zX29yZGluYWwsIC0xKTsKKyAgcmJfZGVm
aW5lX3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJjaXZpbCIsIGRhdGVfc19j
aXZpbCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0
ZSwgIm5ldyIsIGRhdGVfc19jaXZpbCwgLTEpOworICByYl9kZWZpbmVfc2lu
Z2xldG9uX21ldGhvZChjRGF0ZSwgImNvbW1lcmNpYWwiLCBkYXRlX3NfY29t
bWVyY2lhbCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj
RGF0ZSwgInRvZGF5IiwgZGF0ZV9zX3RvZGF5LCAtMSk7CisKKyAgcmJfZGVm
aW5lX21ldGhvZChjRGF0ZSwgImFqZCIsIGRfbGl0ZV9hamQsIDApOworICBy
Yl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiYW1qZCIsIGRfbGl0ZV9hbWpkLCAw
KTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImpkIiwgZF9saXRlX2pk
LCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1qZCIsIGRfbGl0
ZV9tamQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAibGQiLCBk
X2xpdGVfbGQsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJ5
ZWFyIiwgZF9saXRlX3llYXIsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE
YXRlLCAieWRheSIsIGRfbGl0ZV95ZGF5LCAwKTsKKyAgcmJfZGVmaW5lX21l
dGhvZChjRGF0ZSwgIm1vbiIsIGRfbGl0ZV9tb24sIDApOworICByYl9kZWZp
bmVfbWV0aG9kKGNEYXRlLCAibW9udGgiLCBkX2xpdGVfbW9uLCAwKTsKKyAg
cmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1kYXkiLCBkX2xpdGVfbWRheSwg
MCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJkYXkiLCBkX2xpdGVf
bWRheSwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJkYXlfZnJh
Y3Rpb24iLCBkX2xpdGVfZGF5X2ZyYWN0aW9uLCAwKTsKKworICByYl9kZWZp
bmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJ3bnVtMCIsIGRfbGl0ZV93bnVt
MCwgMCk7CisgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgIndu
dW0xIiwgZF9saXRlX3dudW0xLCAwKTsKKworICByYl9kZWZpbmVfcHJpdmF0
ZV9tZXRob2QoY0RhdGUsICJob3VyIiwgZF9saXRlX2hvdXIsIDApOworICBy
Yl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJtaW4iLCBkX2xpdGVf
bWluLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAi
bWludXRlIiwgZF9saXRlX21pbiwgMCk7CisgIHJiX2RlZmluZV9wcml2YXRl
X21ldGhvZChjRGF0ZSwgInNlYyIsIGRfbGl0ZV9zZWMsIDApOworICByYl9k
ZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJzZWNvbmQiLCBkX2xpdGVf
c2VjLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAi
c2VjX2ZyYWN0aW9uIiwgZF9saXRlX3NlY19mcmFjdGlvbiwgMCk7CisgIHJi
X2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgInNlY29uZF9mcmFjdGlv
biIsIGRfbGl0ZV9zZWNfZnJhY3Rpb24sIDApOworICByYl9kZWZpbmVfcHJp
dmF0ZV9tZXRob2QoY0RhdGUsICJvZmZzZXQiLCBkX2xpdGVfb2Zmc2V0LCAw
KTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAiem9uZSIs
IGRfbGl0ZV96b25lLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRl
LCAiY3d5ZWFyIiwgZF9saXRlX2N3eWVhciwgMCk7CisgIHJiX2RlZmluZV9t
ZXRob2QoY0RhdGUsICJjd2VlayIsIGRfbGl0ZV9jd2VlaywgMCk7CisgIHJi
X2RlZmluZV9tZXRob2QoY0RhdGUsICJjd2RheSIsIGRfbGl0ZV9jd2RheSwg
MCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIndkYXkiLCBkX2xp
dGVfd2RheSwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImp1
bGlhbj8iLCBkX2xpdGVfanVsaWFuX3AsIDApOworICByYl9kZWZpbmVfbWV0
aG9kKGNEYXRlLCAiZ3JlZ29yaWFuPyIsIGRfbGl0ZV9ncmVnb3JpYW5fcCwg
MCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJsZWFwPyIsIGRfbGl0
ZV9sZWFwX3AsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJz
dGFydCIsIGRfbGl0ZV9zdGFydCwgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo
Y0RhdGUsICJuZXdfc3RhcnQiLCBkX2xpdGVfbmV3X3N0YXJ0LCAtMSk7Cisg
IHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgIm5ld19vZmZzZXQi
LCBkX2xpdGVfbmV3X29mZnNldCwgLTEpOworCisgIHJiX2RlZmluZV9tZXRo
b2QoY0RhdGUsICIrIiwgZF9saXRlX3BsdXMsIDEpOworICByYl9kZWZpbmVf
bWV0aG9kKGNEYXRlLCAiLSIsIGRfbGl0ZV9taW51cywgMSk7CisKKyAgcmJf
ZGVmaW5lX21ldGhvZChjRGF0ZSwgIjw9PiIsIGRfbGl0ZV9jbXAsIDEpOwor
ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiPT09IiwgZF9saXRlX2VxdWFs
LCAxKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImVxbD8iLCBkX2xp
dGVfZXFsX3AsIDEpOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiaGFz
aCIsIGRfbGl0ZV9oYXNoLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9kKGNE
YXRlLCAidG9fcyIsIGRfbGl0ZV90b19zLCAwKTsKKyAgcmJfZGVmaW5lX21l
dGhvZChjRGF0ZSwgImluc3BlY3QiLCBkX2xpdGVfaW5zcGVjdCwgMCk7CisK
KyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1hcnNoYWxfZHVtcCIsIGRf
bGl0ZV9tYXJzaGFsX2R1bXAsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE
YXRlLCAibWFyc2hhbF9sb2FkIiwgZF9saXRlX21hcnNoYWxfbG9hZCwgMSk7
CisKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAiX19jYV9f
IiwgZF9yaWdodF9jYXNoLCAwKTsKKworICAvKiBkYXRldGltZSAqLworCisg
IGNEYXRlVGltZSA9IHJiX2RlZmluZV9jbGFzcygiRGF0ZVRpbWUiLCBjRGF0
ZSk7CisKKyAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoY0RhdGVUaW1lLCBkdF9s
aXRlX3NfYWxsb2MpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj
RGF0ZVRpbWUsICJuZXdfbCEiLCBkYXRldGltZV9zX25ld19sX2JhbmcsIC0x
KTsKKworICByYl91bmRlZl9tZXRob2QoQ0xBU1NfT0YoY0RhdGVUaW1lKSwg
InRvZGF5Iik7CisKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0Rh
dGVUaW1lLCAiamQiLCBkYXRldGltZV9zX2pkLCAtMSk7CisgIHJiX2RlZmlu
ZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlVGltZSwgIm9yZGluYWwiLCBkYXRl
dGltZV9zX29yZGluYWwsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9t
ZXRob2QoY0RhdGVUaW1lLCAiY2l2aWwiLCBkYXRldGltZV9zX2NpdmlsLCAt
MSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlVGltZSwg
Im5ldyIsIGRhdGV0aW1lX3NfY2l2aWwsIC0xKTsKKyAgcmJfZGVmaW5lX3Np
bmdsZXRvbl9tZXRob2QoY0RhdGVUaW1lLCAiY29tbWVyY2lhbCIsCisJCQkg
ICAgIGRhdGV0aW1lX3NfY29tbWVyY2lhbCwgLTEpOworICByYl9kZWZpbmVf
c2luZ2xldG9uX21ldGhvZChjRGF0ZVRpbWUsICJub3ciLCBkYXRldGltZV9z
X25vdywgLTEpOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAi
YWpkIiwgZHRfbGl0ZV9hamQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE
YXRlVGltZSwgImFtamQiLCBkdF9saXRlX2FtamQsIDApOworICByYl9kZWZp
bmVfbWV0aG9kKGNEYXRlVGltZSwgImpkIiwgZHRfbGl0ZV9qZCwgMCk7Cisg
IHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWpkIiwgZHRfbGl0ZV9t
amQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImxkIiwg
ZHRfbGl0ZV9sZCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp
bWUsICJ5ZWFyIiwgZHRfbGl0ZV95ZWFyLCAwKTsKKyAgcmJfZGVmaW5lX21l
dGhvZChjRGF0ZVRpbWUsICJ5ZGF5IiwgZHRfbGl0ZV95ZGF5LCAwKTsKKyAg
cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJtb24iLCBkdF9saXRlX21v
biwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibW9udGgi
LCBkdF9saXRlX21vbiwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVU
aW1lLCAibWRheSIsIGR0X2xpdGVfbWRheSwgMCk7CisgIHJiX2RlZmluZV9t
ZXRob2QoY0RhdGVUaW1lLCAiZGF5IiwgZHRfbGl0ZV9tZGF5LCAwKTsKKyAg
cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJkYXlfZnJhY3Rpb24iLCBk
dF9saXRlX2RheV9mcmFjdGlvbiwgMCk7CisKKyAgcmJfZGVmaW5lX3ByaXZh
dGVfbWV0aG9kKGNEYXRlVGltZSwgIndudW0wIiwgZHRfbGl0ZV93bnVtMCwg
MCk7CisgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZVRpbWUsICJ3
bnVtMSIsIGR0X2xpdGVfd251bTEsIDApOworCisgIHJiX2RlZmluZV9tZXRo
b2QoY0RhdGVUaW1lLCAiaG91ciIsIGR0X2xpdGVfaG91ciwgMCk7CisgIHJi
X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWluIiwgZHRfbGl0ZV9taW4s
IDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgIm1pbnV0ZSIs
IGR0X2xpdGVfbWluLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp
bWUsICJzZWMiLCBkdF9saXRlX3NlYywgMCk7CisgIHJiX2RlZmluZV9tZXRo
b2QoY0RhdGVUaW1lLCAic2Vjb25kIiwgZHRfbGl0ZV9zZWMsIDApOworICBy
Yl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgInNlY19mcmFjdGlvbiIsIGR0
X2xpdGVfc2VjX2ZyYWN0aW9uLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj
RGF0ZVRpbWUsICJzZWNvbmRfZnJhY3Rpb24iLCBkdF9saXRlX3NlY19mcmFj
dGlvbiwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAib2Zm
c2V0IiwgZHRfbGl0ZV9vZmZzZXQsIDApOworICByYl9kZWZpbmVfbWV0aG9k
KGNEYXRlVGltZSwgInpvbmUiLCBkdF9saXRlX3pvbmUsIDApOworCisgIHJi
X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiY3d5ZWFyIiwgZHRfbGl0ZV9j
d3llYXIsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImN3
ZWVrIiwgZHRfbGl0ZV9jd2VlaywgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo
Y0RhdGVUaW1lLCAiY3dkYXkiLCBkdF9saXRlX2N3ZGF5LCAwKTsKKworICBy
Yl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgIndkYXkiLCBkdF9saXRlX3dk
YXksIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAianVs
aWFuPyIsIGR0X2xpdGVfanVsaWFuX3AsIDApOworICByYl9kZWZpbmVfbWV0
aG9kKGNEYXRlVGltZSwgImdyZWdvcmlhbj8iLCBkdF9saXRlX2dyZWdvcmlh
bl9wLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJsZWFw
PyIsIGR0X2xpdGVfbGVhcF9wLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9k
KGNEYXRlVGltZSwgInN0YXJ0IiwgZHRfbGl0ZV9zdGFydCwgMCk7CisgIHJi
X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibmV3X3N0YXJ0IiwgZHRfbGl0
ZV9uZXdfc3RhcnQsIC0xKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp
bWUsICJuZXdfb2Zmc2V0IiwgZHRfbGl0ZV9uZXdfb2Zmc2V0LCAtMSk7CisK
KyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICIrIiwgZHRfbGl0ZV9w
bHVzLCAxKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICItIiwg
ZHRfbGl0ZV9taW51cywgMSk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0
ZVRpbWUsICI8PT4iLCBkdF9saXRlX2NtcCwgMSk7CisgIHJiX2RlZmluZV9t
ZXRob2QoY0RhdGVUaW1lLCAiPT09IiwgZHRfbGl0ZV9lcXVhbCwgMSk7Cisg
IHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiZXFsPyIsIGR0X2xpdGVf
ZXFsX3AsIDEpOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImhh
c2giLCBkdF9saXRlX2hhc2gsIDApOworCisgIHJiX2RlZmluZV9tZXRob2Qo
Y0RhdGVUaW1lLCAidG9fcyIsIGR0X2xpdGVfdG9fcywgMCk7CisgIHJiX2Rl
ZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiaW5zcGVjdCIsIGR0X2xpdGVfaW5z
cGVjdCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJt
YXJzaGFsX2R1bXAiLCBkdF9saXRlX21hcnNoYWxfZHVtcCwgMCk7CisgIHJi
X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWFyc2hhbF9sb2FkIiwgZHRf
bGl0ZV9tYXJzaGFsX2xvYWQsIDEpOworCisgIHJiX2RlZmluZV9wcml2YXRl
X21ldGhvZChjRGF0ZVRpbWUsICJfX2NhX18iLCBkdF9yaWdodF9jYXNoLCAw
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9t
ZXRob2QoY0RhdGUsICJ0ZXN0X2NpdmlsIiwgZGF0ZV9zX3Rlc3RfY2l2aWws
IDApOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRl
c3Rfb3JkaW5hbCIsIGRhdGVfc190ZXN0X29yZGluYWwsIDApOworICByYl9k
ZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRlc3RfY29tbWVyY2lh
bCIsIGRhdGVfc190ZXN0X2NvbW1lcmNpYWwsIDApOworICByYl9kZWZpbmVf
c2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRlc3Rfd2Vla251bSIsIGRhdGVf
c190ZXN0X3dlZWtudW0sIDApOworICByYl9kZWZpbmVfc2luZ2xldG9uX21l
dGhvZChjRGF0ZSwgInRlc3RfbnRoX2tkYXkiLCBkYXRlX3NfdGVzdF9udGhf
a2RheSwgMCk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRl
LCAidGVzdF9hbGwiLCBkYXRlX3NfdGVzdF9hbGwsIDApOworI2VuZGlmCit9
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBleHQvZGF0ZS9kYXRlX2NvcmUuYwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgdGV4dC9wbGFpbgoKSW5kZXg6IGV4dC9kYXRlL2V4dGNvbmYucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L2RhdGUvZXh0Y29uZi5yYgko
cmV2aXNpb24gMCkKKysrIGV4dC9kYXRlL2V4dGNvbmYucmIJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSAnbWttZicKK2hhdmVfZnVu
YygnZmxvb3JsJywgJ21hdGguaCcpCitoYXZlX2Z1bmMoJ3JvdW5kbCcsICdt
YXRoLmgnKQorY3JlYXRlX21ha2VmaWxlKCdkYXRlX2NvcmUnKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogZXh0L2RhdGUvZXh0Y29uZi5yYgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9w
bGFpbgoK