c++/1726: ?!?

johanc@ida.his.se johanc@ida.his.se
Sun Apr 1 00:00:00 GMT 2001


>Number:         1726
>Category:       c++
>Synopsis:       ?!?
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 22 04:36:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     johanc@ida.his.se
>Release:        gcc version 2.95.2 20000220 (Debian GNU/Linux)
>Organization:
>Environment:
Debian woody;
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="04" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu")
BASH_VERSION='2.04.0(1)-release'
COLUMNS=125
DIRSTACK=()
DISPLAY=:0.0
EBIN=/usr/bin
ECACHEDIR=/root/.enlightenment
ECONFDIR=/root/.enlightenment
EPID=2618
EROOT=/usr/share/enlightenment
ETHEME=/usr/share/enlightenment/themes/BrushedMetal-Tigert
EUID=1000
EVERSION=0.16.5
GDMSESSION=Debian
GDM_LANG=C
GROUPS=()
HISTFILE=/home/johanc/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/home/johanc
HOSTNAME=r2d2
HOSTTYPE=i386
HTTP_PROXY=wwwproxy.his.se
IFS=' 
'
LANG=C
LINES=67
LOGNAME=root
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:
*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;3
1:*.jar=01;31:*.jpg=01;35:*.png=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.x
pm=01;35:*.tif=01;35:*.png=01;35:*.mpg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:'
LS_OPTIONS=--color=auto
MACHTYPE=i386-pc-linux-gnu
MAILCHECK=60
OLDPWD=/home/johanc/khepera
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:./:/home/johanc/bin:/home/johanc/legOS:/home/johanc/legOS/util:/hom
e/johanc/legOS/util
PIPESTATUS=([0]="0")
PPID=25588
PS1='\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/home/johanc/khepera/optann
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:histexpand:monitor:history:interactive-comments:emacs
SHLVL=4
SOCKS_SERVER=titus.ida.his.se:1080
SSH_AGENT_PID=2658
SSH_AUTH_SOCK=/tmp/ssh-XXqzKwe2/agent.2618
TERM=xterm
UID=1000
USER=root
USERNAME=root
WINDOWID=71303182
XAUTHORITY=/tmp/.gdmnH6Vqf
_=-v
ftp_proxy= http://wwwproxy.his.se/
gopher_proxy= http://wwwproxy.his.se/
http_proxy= http://wwwproxy.his.se/
socks_server=titus.ida.his.se:1080
wais_proxy= http://wwwproxy.his.se/
>Description:
r2d2:~/khepera/optann$ make gsim
g++ -c environ.cc -O3 -g2 -L./lib -Wall -I/pub/sun/include  -L./trivialgfx/lib -I./trivialgfx/include `gtk-config --cflags` -DGUI -DTARGET_X -o environg.o
environ.cc: In method `void Environ::loadWorld(const char *)':
environ.cc:361: Internal compiler error in `find_function_data', at function.c:542
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
make: *** [environg.o] Error 1
>How-To-Repeat:
g++ -c environ.cc -O3 -g2 -L./lib -Wall -I/pub/sun/include  -L./trivialgfx/lib -I./trivialgfx/include `gtk-config --cflags` -DGUI -DTARGET_X -o environg.o
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-c++src; name="environ.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="environ.cc"

LyoKICBPcHRhbm4sIGEgS2hlcGVyYSBzaW11bGF0b3IgaW5jbHVkaW5nIGEgc2VwYXJhdGUgR0Eg
YW5kIEFOTiAKICAoR2VuZXRpYyBBbGdvcml0bSwgQXJ0aWZpY2lhbCBOZXVyYWwgTmV0KS4KICBD
b3B5cmlnaHQgKEMpIDIwMDAgIEpvaGFuIENhcmxzc29uIChqb2hhbmNAaWRhLmhpcy5zZSkKICAK
ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMgogIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lv
bi4KICAKICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgogIAogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVT
QS4KCiAqLwoKI2luY2x1ZGUgImVudmlyb24uaCIKCgoKRW52aXJvbjo6RW52aXJvbigpewogIG5y
T2ZMaWdodHMgPSAwOwogIG5yT2ZXYWxscyA9IDA7CiAgbnJPZk9ic3QgPSAwOwogIG5yT2ZTT2Jz
dCA9IDA7CiAgbnJPZlJvYm90cyA9IDA7CiAgbnJPZlpvbmVzID0gMDsKICBkeCA9IDA7CiAgZHkg
PSAwOwogIFNFVFAoKTsKICByb2JvdCA9IChjbGFzcyBSb2JvdCoqKSBtYWxsb2Moc2l6ZW9mKGNs
YXNzIFJvYm90KikpOwogIHJvYm90WzBdID0gbmV3IFJvYm90KCk7CiAgbnJPZlJvYm90cysrOwp9
Cgp2b2lkIEVudmlyb246OmluaXRXb3JsZCgpewogIGZvcihpbnQgaT0wOyBpIDwgbnJPZlJvYm90
czsgaSsrKQogICAgcm9ib3RbaV0tPnJlc2V0Um9ib3QoKTsKfQpFbnZpcm9uOjp+RW52aXJvbigp
ewogIGludCBpOwogIGlmKG5yT2ZMaWdodHMgPiAwKXsKICAgIGZvcihpPTA7IGkgPCBuck9mTGln
aHRzOyBpKyspewogICAgICBkZWxldGUobGlnaHRbaV0pOwogICAgfQogICAgZnJlZShsaWdodCk7
CiAgfQogIGlmKG5yT2ZXYWxscyA+IDApewogICAgZm9yKGk9MDtpIDwgbnJPZldhbGxzOyBpKysp
ewogICAgICBkZWxldGUod2FsbFtpXSk7CiAgICB9CiAgICBmcmVlKHdhbGwpOwogIH0KICBpZihu
ck9mT2JzdD4wKXsKICAgIGZvcihpPTA7IGkgPCBuck9mT2JzdDsgaSsrKXsKICAgICAgZGVsZXRl
KG9ic3RbaV0pOwogICAgfQogICAgZnJlZShvYnN0KTsKICB9CgogIGlmKG5yT2ZTT2JzdCA+IDAp
ewogICAgZm9yKGk9MDsgaSA8IG5yT2ZTT2JzdDsgaSsrKXsKICAgICAgZGVsZXRlKHNvYnN0W2ld
KTsKICAgIH0KICAgIGZyZWUoc29ic3QpOwogIH0KICBpZihuck9mUm9ib3RzID4gMCl7CiAgICBm
b3IoaT0wOyBpIDwgbnJPZlJvYm90czsgaSsrKXsKICAgICAgZGVsZXRlKHJvYm90W2ldKTsKICAg
IH0KICAgIGZyZWUocm9ib3QpOwogIH0KICBpZiggbnJPZlpvbmVzID4gMCl7CiAgICBmb3IoaT0w
OyBpIDwgbnJPZlpvbmVzOyBpKyspewogICAgICBkZWxldGUoem9uZVtpXSk7CiAgICB9CiAgICBm
cmVlKHpvbmUpOwogIH0KICAKfQoKCgovKgogKiAgIFJ1biBlbnZpcm9ubWVudCBvbmUgdGltZXN0
ZXAKICovCgp2b2lkIEVudmlyb246OnJ1blN0ZXAoZmxvYXQgbzEsIGZsb2F0IG8yLCBpbnQgcm9i
b3ROcil7CiNpZmRlZiBHVUkKICBzdGF0aWMgaW50IG5pc3NlPTA7CiNlbmRpZiAvKiBHVUkgKi8K
ICByb2JvdFtyb2JvdE5yXS0+cnVuKG8xLG8yKTsKI2lmZGVmIEdVSQogIC8qIFRoZSBjYWxsIHRh
a2VzIGxvbmdlciB0aW1lIHRoYW4gdGhlIGRlbGF5ICAgICovCiAgLyogQ2hhbmdpbmcgdGhlIGRl
bGF5IGRvZXNudCByZWFsbHkgbWF0aGVyIHRoYXQgKi8KICAvKiBtdWNoIGlmIGRlbGF5IDwgNTAw
MCwgb24gRGViaWFuIHdvb2R5LCBTTVAgUC1JSUkgKi8KICBpZihnZnhVcGRhdGUpewogICAgdXNs
ZWVwKHVwZGF0ZURlbGF5KTsKICAgIHJvYm90W3JvYm90TnJdLT51cGRhdGUoc2ltb3V0cHV0W3Jv
Ym90TnJdWzBdLAoJCQkgICBzaW1vdXRwdXRbcm9ib3ROcl1bMV0sCgkJCSAgIHNpbW91dHB1dFty
b2JvdE5yXVsyXSwKCQkJICAgc2ltb3V0cHV0W3JvYm90TnJdWzNdLAoJCQkgICBzaW1vdXRwdXRb
cm9ib3ROcl1bNF0sCgkJCSAgIHNpbW91dHB1dFtyb2JvdE5yXVs1XSwKCQkJICAgc2ltb3V0cHV0
W3JvYm90TnJdWzddLAoJCQkgICBzaW1vdXRwdXRbcm9ib3ROcl1bNl0pOwogCQkJICAgCiAgICBp
Zihub3RUcmFqYWN0b3J5Um9ib3QpewogICAgICBndWlfZHJhd1JvYm90KChpbnQpKHhTY2FsZSpy
b2JvdFtyb2JvdE5yXS0+Z2V0T1goKSksCgkJICAgICAgIChpbnQpKHhTY2FsZSpyb2JvdFtyb2Jv
dE5yXS0+Z2V0T1koKSksCgkJICAgICAgIHJvYm90W3JvYm90TnJdLT5vbGRkaXJlY3Rpb24sCgkJ
ICAgICAgIChpbnQpKHhTY2FsZSpyb2JvdFtyb2JvdE5yXS0+Z2V0UmFkaXVzKCkpLAoJCSAgICAg
ICAwKTsKICAgIH0KICAgIGd1aV9kcmF3Um9ib3QoKGludCkoeFNjYWxlKnJvYm90W3JvYm90TnJd
LT5nZXRYKCkpLAoJCSAgICAgKGludCkoeFNjYWxlKnJvYm90W3JvYm90TnJdLT5nZXRZKCkpLAoJ
CSAgICAgcm9ib3Rbcm9ib3ROcl0tPmRpcmVjdGlvbiwKCQkgICAgIChpbnQpKHhTY2FsZSpyb2Jv
dFtyb2JvdE5yXS0+Z2V0UmFkaXVzKCkpLAoJCSAgICAgMSk7CiAgICBndWlfcmVkcmF3V29ybGQo
KTsKICAgIGZvcihpbnQgaT0wOyBpIDwgODsgaSsrKQogICAgICBndWlfZHJhd1NlbnNvcihpLG5p
c3NlLHNpbW91dHB1dFtyb2JvdE5yXVtpK0xpZ2h0QnVsYlNlbnNvcl0pOwogICAgaWYobmlzc2Ul
NTAgPT0gMCkKICAgICAgZ3VpX2RyYXdTZW5zb3JNYXJrZXIobmlzc2UpOwogICAgZ3VpX3JlZHJh
d1NlbnNvcnMoKTsKICAgIG5pc3NlKys7CiAgICBpZihuaXNzZT09NTAwKXsKICAgICAgbmlzc2U9
MDsKICAgICAgZ3VpX2NsZWFyU2Vuc29yKCk7CiAgICAgIGd1aV9yZWRyYXdTZW5zb3JzKCk7CiAg
ICB9CiAgfQoKI2VuZGlmIC8qIEdVSSAqLwp9Cgp2b2lkIEVudmlyb246OnJ1bkdyaXBwZXIoZmxv
YXQgYXJtLCBmbG9hdCBncmlwcGVyLCBpbnQgcm9ib3ROcil7CiAgY2xhc3MgR3JpcHBlclJvYm90
ICpyb2I7CiAgcm9iID0gKGNsYXNzIEdyaXBwZXJSb2JvdCopcm9ib3Rbcm9ib3ROcl07CiAgcm9i
LT5zZXRBcm1Qb3NpdGlvbihhcm0pOwogIHJvYi0+dXBkYXRlR3JpcHBlckNvcmRzKCk7CgogIC8q
IGNoZWNrIGlmIHdlIGFyZSBob2xkaW5nIHNvbWV0aGluZyAqLwogIC8qICAgICAgIHRoZW4gZG9u
dCBkbyBub3RoaW5nICovCiAgLyogd2UgYXJlbnQgaG9sZGluZyBhbnl0aGluZyAqLwogIC8qICAg
Y2hlY2sgZm9yIG9iamVjdCBiZXR3ZWVuIGhhbmRzICovCiAgLyogICBhY3RpdmF0ZSBzZW5zb3Ig
aWYgb2JqZWN0IHByZXNlbnQgKi8KICByb2ItPnNldEdyaXBwZXJQb3NpdGlvbihncmlwcGVyKTsg
IAogIC8qIGNoZWNrIGlmIHdlIGdyaXBwZWQgc29tZXRoaW5nICAqLwogIC8qICAgICAgbWFya2Vk
IHRoYXQgb2JqZWN0IHRha2VuICAqLwogIAp9Cgp2b2lkIEVudmlyb246OnJlc2V0RW52aXJvbm1l
bnQoKXsKICBpbnQgaTsKICAvKiBSZWxvY2F0ZSByb2JvdHMsIHJhbmRvbSBvciBmaXhlZCBwb3Np
dGlvbiAqLwogIGZvcihpPTA7IGkgPCBuck9mUm9ib3RzOyBpKyspewogICAgcmVzZXRSb2JvdChp
KTsKICB9CiAgLyogTWFyayBhbGwgc21hbGwgcm91bmQgb2JzdGFjbGVzIG5vdCB0YWtlbiAqLwog
IC8qIGFuZCBtb3ZlIHRoZW0gaWYgbW92ZU9ic3RhY2xlcz0xICAqLwogIGZvcihpPTA7IGkgPCBu
ck9mU09ic3Q7IGkrKyl7CiAgICByZXNldE9ic3RhY2xlKGkpOyAKICB9CiNpZmRlZiBHVUkKICBp
ZihnZnhVcGRhdGUpIC8qIHNob3cgZW52aXJvbm1lbnQgYWZ0ZXIgcmVzZXQgKi8KICAgIHJlZHJh
d1dvcmxkKCk7CiNlbmRpZiAvKiBHVUkgKi8KfQoKI2lmZGVmIEdVSQp2b2lkIEVudmlyb246OnJl
ZHJhd1dvcmxkKCl7CiAgZ3VpX2NsZWFyKCk7CgogIGZvcihpbnQgaT0wOyBpIDxuck9mV2FsbHM7
IGkrKyl7CiAgICBndWlfZHJhd1dhbGwoKGludCkoeFNjYWxlKndhbGxbaV0tPngxKSwKCSAgICAg
ICAoaW50KSh4U2NhbGUqd2FsbFtpXS0+eTEpLAoJICAgICAgIChpbnQpKHhTY2FsZSp3YWxsW2ld
LT54MiksCgkgICAgICAgKGludCkoeFNjYWxlKndhbGxbaV0tPnkyKSk7CiAgfQogIGZvcihpbnQg
aT0wOyBpIDwgbnJPZlNPYnN0OyBpKyspewogICAgZ3VpX2RyYXdTT2JzdCgoaW50KSh4U2NhbGUq
c29ic3RbaV0tPngpLAoJCShpbnQpKHhTY2FsZSpzb2JzdFtpXS0+eSksCgkJKGludCkoeFNjYWxl
KnNvYnN0W2ldLT5yKSk7CiAgfQogIGZvcihpbnQgaT0wOyBpIDwgbnJPZk9ic3Q7IGkrKyl7CiAg
ICBndWlfZHJhd09ic3QoKGludCkoeFNjYWxlKm9ic3RbaV0tPngpLAoJICAgICAgIChpbnQpKHhT
Y2FsZSpvYnN0W2ldLT55KSwKCSAgICAgICAoaW50KSh4U2NhbGUqb2JzdFtpXS0+cikpOwogIH0K
ICBmb3IoaW50IGk9MDsgaSA8IG5yT2Zab25lczsgaSsrKXsKICAgIGd1aV9kcmF3Wm9uZSgoaW50
KSh4U2NhbGUqem9uZVtpXS0+eCksKGludCkoeFNjYWxlKnpvbmVbaV0tPnkpLChpbnQpKHhTY2Fs
ZSp6b25lW2ldLT5yKSk7CiAgfQogIGZvcihpbnQgaT0wOyBpIDwgbnJPZkxpZ2h0czsgaSsrKXsK
ICAgIGd1aV9kcmF3TGlnaHQoKGludCkoeFNjYWxlKmxpZ2h0W2ldLT54KSwoaW50KSh4U2NhbGUq
bGlnaHRbaV0tPnkpLChpbnQpKHhTY2FsZSpsaWdodFtpXS0+cikpOwogIH0KCiAgZ3VpX3JlZHJh
d1dvcmxkKCk7Cn0KI2VuZGlmIC8qIEdVSSAqLwoKaW50IEVudmlyb246OmluWm9uZShpbnQgcm9i
b3ROcikgY29uc3R7CiAgZmxvYXQgcngscnk7CiAgcng9cm9ib3Rbcm9ib3ROcl0tPmdldFgoKTsK
ICByeT1yb2JvdFtyb2JvdE5yXS0+Z2V0WSgpOwogIGZvcihpbnQgaT0wOyBpIDwgbnJPZlpvbmVz
OyBpKyspewogICAgaWYoem9uZVtpXS0+aW5ab25lKHJ4LHJ5KSl7CiAgICAgIHJldHVybiBpOwog
ICAgfQogIH0KICByZXR1cm4gLTE7Cn0KCnZvaWQgRW52aXJvbjo6cmVzZXRab25lcygpewogIGZv
cihpbnQgaT0wOyBpIDwgbnJPZlpvbmVzOyBpKyspewogICAgem9uZVtpXS0+Y2xlYXJWaXNpdCgp
OwogIH0KfQoKaW50IEVudmlyb246OnpvbmVzVmlzaXRlZCgpIGNvbnN0ewogIGludCB2aXNpdHM9
MDsKICBmb3IoaW50IGk9MDsgaSA8IG5yT2Zab25lczsgaSsrKXsKICAgIGlmKHpvbmVbaV0tPnZp
c2l0cygpKXsKICAgICAgdmlzaXRzKys7CiAgICB9CiAgfSAgCiAgcmV0dXJuIHZpc2l0czsKfQoK
dm9pZCBFbnZpcm9uOjpyZXNldE9ic3RhY2xlKGludCB3aGljaE9ic3RhY2xlKXsKICBmbG9hdCB4
LHk7CiAgc29ic3Rbd2hpY2hPYnN0YWNsZV0tPnRha2VuPTA7IAogIGlmIChtb3ZlT2JzdGFjbGVz
KXsKICAgIHggPSByYW5zKGR4KTsKICAgIHkgPSByYW5zKGR5KTsKICAgIHdoaWxlIChub3RQbGFj
ZWRPayh3aGljaE9ic3RhY2xlLHgseSxzb2JzdFt3aGljaE9ic3RhY2xlXS0+cikpewogICAgICB4
ID0gcmFucyhkeCk7CiAgICAgIHkgPSByYW5zKGR5KTsKICAgIH0JICAgCiAgICBzb2JzdFt3aGlj
aE9ic3RhY2xlXS0+eCA9IHg7CiAgICBzb2JzdFt3aGljaE9ic3RhY2xlXS0+eSA9IHk7CiAgfQp9
CgppbnQgRW52aXJvbjo6bm90UGxhY2VkT2soaW50IG9ic3ROciwgZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgcmFkaXVzKSBjb25zdHsKICBmbG9hdCB0bXA9MDsKICBmb3IoaW50IGk9MDsgaSA8IG5y
T2ZTT2JzdDsgaSsrKXsKICAgIGlmKGkhPW9ic3ROcil7CiAgICAgIHRtcCA9IG1kaXN0KHgsIHks
IHNvYnN0W2ldLT54LCBzb2JzdFtpXS0+eSkgLSBzb2JzdFtpXS0+cjsKICAgICAgaWYodG1wID4g
cmFkaXVzKQoJcmV0dXJuIDE7CiAgICB9CiAgfQogIGZvcihpbnQgaT0wOyBpIDwgbnJPZk9ic3Q7
IGkrKyl7CiAgICB0bXAgPSBtZGlzdCh4LCB5LCBvYnN0W2ldLT54LCBvYnN0W2ldLT55KSAtIG9i
c3RbaV0tPnI7CiAgICBpZih0bXAgPiByYWRpdXMpCiAgICAgIHJldHVybiAxOwogIH0KICBmb3Io
aW50IGk9MDsgaSA8IG5yT2ZXYWxsczsgaSsrKXsKICAgIHRtcCA9IGxpbmVEaXN0KHgseSwKCQkg
ICB3YWxsW2ldLT54MSwgd2FsbFtpXS0+eTEsCgkJICAgd2FsbFtpXS0+eDIsIHdhbGxbaV0tPnky
KTsKICAgIGlmKHRtcCA+IHJhZGl1cykKICAgICAgcmV0dXJuIDE7CiAgfQogIHJldHVybiAwOwp9
Ci8qIAogKiBsb2FkIHdvcmxkCiAqLwp2b2lkIEVudmlyb246OmxvYWRXb3JsZChjaGFyICpmaWxl
TmFtZSl7CgogICBGSUxFICpmcDsKICAgaW50ICAgIGksaWk7CiAgIGZsb2F0ICByYWRpdXM7CiAg
IGNoYXIgICB0bXBTdHJbMzAwXTsKICAgaWYoZmlsZU5hbWU9PU5VTEwpewogICAgIHByaW50Zigi
RW52aXJvbjo6bG9hZFdvcmxkIE5vIHdvcmxkIGZpbGUgc3BlY2lmaWVkIGluIG9wdGlvbiBmaWxl
XG4iKTsKICAgICBleGl0KC0xKTsKICAgfQogICBpZiAodmVyYm9zZUxldmVsID4gMCkKICAgICBw
cmludGYoIkxvYWRpbmcgd29ybGQgJXNcbiIsZmlsZU5hbWUpOwogICBmcD1mb3BlbihmaWxlTmFt
ZSwgInIiKTsKICAgaWYoZnA9PU5VTEwpewogICAgIHByaW50ZigiQ291bGRuJ3Qgb3BlbiB3b3Js
ZGZpbGUgJXMgZm9yIHJlYWRpbmciLGZpbGVOYW1lKTsKICAgICBleGl0KC0xKTsKICAgfQogICBm
c2NhbmYoZnAsIiVkICVkICVkICVkICVkICVkXG4iLCAKCSAgJm5yT2ZXYWxscywgCgkgICZuck9m
Wm9uZXMsIAoJICAmbnJPZkxpZ2h0cywKCSAgJm5yT2ZPYnN0LAoJICAmbnJPZlNPYnN0LAoJICAm
bnJPZlN0YXJ0UG9zaXRpb25zCgkgICk7CiAgIGlmKG5yT2ZXYWxscz4wKXsKICAgICB3YWxsICA9
IChjbGFzcyBXYWxsKiopIG1hbGxvYyhuck9mV2FsbHMgKiBzaXplb2YoY2xhc3MgV2FsbCopKTsK
ICAgfQogICBpZihuck9mTGlnaHRzPjApewogICAgIGxpZ2h0ID0gKGNsYXNzIExpZ2h0KiopIG1h
bGxvYyhuck9mTGlnaHRzICogc2l6ZW9mKGNsYXNzIExpZ2h0KikpOwogICB9CiAgIGlmKG5yT2Za
b25lcz4wKXsKICAgICB6b25lICA9IChjbGFzcyBab25lKiopIG1hbGxvYyhuck9mWm9uZXMgKiBz
aXplb2YoY2xhc3MgWm9uZSopKTsKICAgfQogICBpZihuck9mT2JzdCl7CiAgICAgb2JzdCAgPSAo
Y2xhc3MgT2JzdCoqKSBtYWxsb2MobnJPZk9ic3QgKiBzaXplb2YoY2xhc3MgT2JzdCopKTsKICAg
fQogICBpZihuck9mU09ic3Q+MCl7CiAgICAgc29ic3QgPSAoY2xhc3MgU29ic3QqKikgbWFsbG9j
KG5yT2ZTT2JzdCAqIHNpemVvZihjbGFzcyBTb2JzdCopKTsKICAgfQogICBpZihuck9mU3RhcnRQ
b3NpdGlvbnM+MCl7CiAgICAgc3RhcnQgPSAoZmxvYXQgKiopIG1hbGxvYyhuck9mU3RhcnRQb3Np
dGlvbnMgKiBzaXplb2YoZmxvYXQqKSk7CiAgIH0KICAgCiAgIGZvciAoaT0wOyBpIDwgbnJPZldh
bGxzOyBpKyspewogICAgIHdhbGxbaV0gPSBuZXcgV2FsbChmcCk7CiAgICAgaWYgKHdhbGxbaV0t
PngxID4gZHgpCiAgICAgICBkeCA9KGludCkgd2FsbFtpXS0+eDE7CiAgICAgaWYgKHdhbGxbaV0t
PngyID4gZHgpCiAgICAgICBkeCA9IChpbnQpIHdhbGxbaV0tPngyOwogICAgIGlmICh3YWxsW2ld
LT55MSA+IGR5KQogICAgICAgZHkgPSAoaW50KSB3YWxsW2ldLT55MTsKICAgICBpZiAod2FsbFtp
XS0+eTI+IGR5KQogICAgICAgZHkgPSAoaW50KXdhbGxbaV0tPnkyOyAKICAgfQogICBpZihuck9m
V2FsbHM+MCl7CiAgICAgc3ByaW50Zih0bXBTdHIsIiVzLyVzIixjYW1lcmFQYXRoLHdhbGxDYW1l
cmEpOwogICAgIHdhbGxbMF0tPmluaXQodG1wU3RyKTsKICAgfQoKICAgZm9yKGk9MDsgaSA8IG5y
T2Zab25lczsgaSsrKXsKICAgICB6b25lW2ldID0gbmV3IFpvbmUoZnApOwogICB9CgogICBmb3Io
aT0wOyBpIDwgbnJPZkxpZ2h0czsgaSsrKXsKICAgICBsaWdodFtpXSA9IG5ldyBMaWdodChmcCk7
CiAgIH0KCiAgIGlmKG5yT2ZMaWdodHM+MCl7CiAgICAgc3ByaW50Zih0bXBTdHIsIiVzLyVzIixj
YW1lcmFQYXRoLGxpZ2h0Q2FtZXJhKTsgICAgIAogICAgIGxpZ2h0WzBdLT5pbml0KHRtcFN0cik7
CiAgIH0KCiAgIGlmKG5yT2ZPYnN0ID4gMCkKICAgICBmc2NhbmYoZnAsInJhZGl1cyAlZlxuIiwg
JnJhZGl1cyk7CgogICBmb3IoaT0wOyBpIDwgbnJPZk9ic3Q7IGkrKyl7CiAgICAgIG9ic3RbaV0g
PSBuZXcgT2JzdChmcCk7CiAgIH0KCiAgIGlmKG5yT2ZPYnN0ID4gMCl7CiAgICAgb2JzdFswXS0+
c2V0UmFkaXVzKHJhZGl1cyk7ICAgLyogQ29tbW9uIGZvciBhbGwgcm91bmQgb2JzdGFjbGVzIChk
ZWNsYXJlZCBzdGF0aWMgaW4gY2xhc3MgT2JzdCkgKi8KICAgICBzcHJpbnRmKHRtcFN0ciwiJXMv
JXMiLGNhbWVyYVBhdGgsYmlnQ2FtZXJhKTsKICAgICBvYnN0WzBdLT5pbml0KHRtcFN0cik7CiAg
IH0KCiAgIGlmKG5yT2ZTT2JzdCA+IDApCiAgICAgZnNjYW5mKGZwLCJzcmFkaXVzICVmXG4iLCAm
cmFkaXVzKTsgICAgICAgICAgICAgIAoKICAgZm9yKGk9MDsgaSA8IG5yT2ZTT2JzdDsgaSsrKXsK
ICAgICBzb2JzdFtpXSA9IG5ldyBTb2JzdChmcCk7CiAgIH0KCiAgIGlmKG5yT2ZTT2JzdCA+IDAp
ewogICAgIHNwcmludGYodG1wU3RyLCIlcy8lcyIsY2FtZXJhUGF0aCxzbWFsbENhbWVyYSk7CiAg
ICAgc29ic3RbMF0tPmluaXQodG1wU3RyKTsKICAgICBzb2JzdFswXS0+c2V0UmFkaXVzKHJhZGl1
cyk7CiAgIH0KCiAgIGZvcihpPTA7IGkgPCBuck9mU3RhcnRQb3NpdGlvbnM7IGkrKyl7CiAgICAg
IHN0YXJ0W2ldID0gKGZsb2F0ICopIG1hbGxvYygzICogc2l6ZW9mKGZsb2F0KSk7CiAgICAgIGZz
Y2FuZihmcCwic3RhcnQiKTsKICAgICAgZm9yIChpaT0wOyBpaSA8IDM7IGlpKyspICAgICAgICAK
ICAgICAgICBmc2NhbmYoZnAsIiVmIiwgJnN0YXJ0W2ldW2lpXSk7CSAKICAgICAgZnNjYW5mKGZw
LCJcbiIpOwkgICAgIAogICB9CiAgIGZjbG9zZShmcCk7CiNpZmRlZiBHVUkKICAgZ3VpX3NldFdv
cmxkU2l6ZShkeCwgZHkpOwojZW5kaWYgLyogR1VJICovCn0KCnZvaWQgRW52aXJvbjo6c2F2ZVdv
cmxkKGNoYXIgKndvcmxkRmlsZU5hbWUpewogIGludCBpLGlpOwogIEZJTEUgKmZwOwogIGlmKG5y
T2ZTdGFydFBvc2l0aW9ucyA+IDApewogICAgZm9yIChpPTA7IGkgPCBuck9mU3RhcnRQb3NpdGlv
bnM7IGkrKyl7CiAgICAgIHN0YXJ0W2ldWzBdID0gKGZsb2F0KSBtcmFuZChkeC00MCkgKyAyMDsJ
IAogICAgICBzdGFydFtpXVsxXSA9IChmbG9hdCkgbXJhbmQoZHktNDApICsgMjA7CSAJICAgCiAg
ICAgIHdoaWxlIChjaGVja0NyYXNoKHN0YXJ0W2ldWzBdLHN0YXJ0W2ldWzFdLDE4MC4wKSAhPSAw
KXsKCXN0YXJ0W2ldWzBdID0gKGZsb2F0KSBtcmFuZChkeC00MCkgKyAyMDsJCglzdGFydFtpXVsx
XSA9IChmbG9hdCkgbXJhbmQoZHktNDApICsgMjA7CSAJIAogICAgICB9CSAgIAogICAgICBzdGFy
dFtpXVsyXSA9IChmbG9hdCkgbXJhbmQoMzYwKTsJIAkgICAJICAgCiAgICB9IAkgIAogICAgZnA9
Zm9wZW4od29ybGRGaWxlTmFtZSwgInciKTsKICAgIGlmKGZwPT1OVUxMKXsKICAgICAgcHJpbnRm
KCJDb3VsZG4ndCBvcGVuIHdvcmxkIGZpbGUgJXMgZm9yIHdyaXRpbmdcbiIsd29ybGRGaWxlTmFt
ZSk7CiAgICAgIGV4aXQoLTEpOwogICAgfQogICAgZnByaW50ZihmcCwiJWQgJWQgJWQgJWQgJWQg
JWRcbiIsbnJPZldhbGxzICxuck9mWm9uZXMsbnJPZkxpZ2h0cyxuck9mT2JzdCxuck9mU09ic3Qs
bnJPZlN0YXJ0UG9zaXRpb25zKTsJIAoKICAgIGZvciAoaT0wOyBpIDwgbnJPZldhbGxzOyBpKysp
CiAgICAgIGZwcmludGYoZnAsIndhbGwgJWYgJWYgJWYgJWZcbiIsCgkgICAgICB3YWxsW2ldLT54
MSx3YWxsW2ldLT55MSwKCSAgICAgIHdhbGxbaV0tPngyLHdhbGxbaV0tPnkyKTsKCiAgICBmb3Ig
KGk9MDsgaSA8IG5yT2Zab25lczsgaSsrKQogICAgICBmcHJpbnRmKGZwLCJ6b25lICVmICVmICVm
XG4iLAoJICAgICAgem9uZVtpXS0+eCx6b25lW2ldLT55LAoJICAgICAgem9uZVtpXS0+cik7Cgog
ICAgZm9yIChpPTA7IGkgPCBuck9mTGlnaHRzOyBpKyspCiAgICAgIGZwcmludGYoZnAsImJ1bGJs
aWdodCAlZiAlZlxuIiwgCgkgICAgICBsaWdodFtpXS0+eCxsaWdodFtpXS0+eSk7CgogICAgaWYg
KG5yT2ZPYnN0ID4gMCl7CiAgICAgIGZwcmludGYoZnAsInJhZGl1cyAlZlxuIiwgb2JzdFswXS0+
cik7ICAgICAgICAgICAgICAgICAgCgogICAgICBmb3IgKGk9MDsgaSA8IG5yT2ZPYnN0OyBpKysp
CglmcHJpbnRmKGZwLCJyb3VuZG9ic3QgJWYgJWZcbiIsIAoJCW9ic3RbaV0tPngsb2JzdFtpXS0+
eSk7CiAgICB9CgogICAgaWYgKG5yT2ZTT2JzdCA+IDApewogICAgICBmcHJpbnRmKGZwLCJzcmFk
aXVzICVmXG4iLCBzb2JzdFswXS0+cik7ICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAg
Zm9yIChpPTA7IGkgPCBuck9mU09ic3Q7IGkrKykKCWZwcmludGYoZnAsInNyb3VuZG9ic3QgJWYg
JWZcbiIsIAoJCXNvYnN0W2ldLT54LHNvYnN0W2ldLT55KTsgICAgICAgCiAgICB9CgogICAgZm9y
IChpPTA7IGkgPCBuck9mU3RhcnRQb3NpdGlvbnM7IGkrKyl7CiAgICAgIGZvciAoaWk9MDsgaWkg
PCAzOyBpaSsrKSAgICAgICAgCglmcHJpbnRmKGZwLCIlZiAiLCBzdGFydFtpXVtpaV0pOwkgCiAg
ICAgIGZwcmludGYoZnAsIlxuIik7CSAgICAgCiAgICB9CiAgICBmY2xvc2UoZnApOyAgICAgICAK
ICB9Cn0KCnZvaWQgRW52aXJvbjo6cHJpbnRXb3JsZCgpIGNvbnN0ewogIGludCBpLGlpOwogIHBy
aW50Zigid29ybGQgc2l6ZSA9ICVkeCVkIFxuIixkeCxkeSk7ICAgCiAgcHJpbnRmKCIlZCB3YWxs
cyAgOiIsbnJPZldhbGxzKTsgICAgICAgIAogIGZvciAoaT0wOyBpIDwgbnJPZldhbGxzOyBpKysp
CiAgICBwcmludGYoIiUuMGYgJS4wZiAlLjBmICUuMGYgICIsCgkgICB3YWxsW2ldLT54MSwKCSAg
IHdhbGxbaV0tPnkxLAoJICAgd2FsbFtpXS0+eDIsCgkgICB3YWxsW2ldLT55MgoJICAgKTsKICBw
cmludGYoIlxuIik7CiAgaWYgKG5yT2Zab25lcyA+IDApewogICAgcHJpbnRmKCIlZCB6b25lcyAg
OiIsbnJPZlpvbmVzKTsgICAgICAgIAogICAgZm9yIChpPTA7IGkgPCBuck9mWm9uZXM7IGkrKykK
ICAgICAgcHJpbnRmKCIlLjBmICUuMGYgJS4wZiAgIiwKCSAgICAgem9uZVtpXS0+eCwKCSAgICAg
em9uZVtpXS0+eSwKCSAgICAgem9uZVtpXS0+cgoJICAgICApOwogICAgcHJpbnRmKCJcbiIpOwog
IH0KICBpZiAobnJPZkxpZ2h0cyA+IDApewogICAgcHJpbnRmKCIlZCBsaWdodCAgOiIsbnJPZkxp
Z2h0cyk7ICAgICAgICAJICAKICAgIGZvciAoaT0wOyBpIDwgbnJPZkxpZ2h0czsgaSsrKQogICAg
ICBwcmludGYoIiUuMGYgJS4wZiAgIiwKCSAgICAgbGlnaHRbaV0tPngsCgkgICAgIGxpZ2h0W2ld
LT55CgkgICAgICk7CiAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgCiAgfQogIGlmIChuck9m
T2JzdCA+IDApewogICAgcHJpbnRmKCIlZCByb3VuZG8gOiIsbnJPZk9ic3QpOyAgICAgICAgCSAg
CSAgCiAgICBwcmludGYoInJhZGl1cyAlLjBmICAiLG9ic3RbMF0tPnIpOyAgICAgICAgICAKICAg
IGZvciAoaT0wOyBpIDwgbnJPZk9ic3Q7IGkrKykKICAgICAgcHJpbnRmKCIlLjBmICUuMGYgICIs
IAoJICAgICBvYnN0W2ldLT54LAoJICAgICBvYnN0W2ldLT55CgkgICAgICk7CiAgICBwcmludGYo
IlxuIik7ICAgICAgICAgICAgICAgICAKICB9CiAgaWYgKG5yT2ZTT2JzdCA+IDApewogICAgcHJp
bnRmKCIlZCBzcm91bmRvIDoiLG5yT2ZTT2JzdCk7ICAgICAgICAJICAJICAKICAgIHByaW50Zigi
c3JhZGl1cyAlLjBmICAiLCBzb2JzdFswXS0+cik7ICAgICAgICAgIAogICAgZm9yIChpPTA7IGkg
PCBuck9mU09ic3Q7IGkrKykKICAgICAgcHJpbnRmKCIlLjBmICUuMGYgICIsIAoJICAgICBzb2Jz
dFtpXS0+eCwKCSAgICAgc29ic3RbaV0tPnkKCSAgICAgKTsKICAgIHByaW50ZigiXG4iKTsgICAg
ICAgICAgICAgICAgIAogIH0gICAgICAKICBpZiAobnJPZlN0YXJ0UG9zaXRpb25zID4gMCl7CiAg
ICBwcmludGYoInN0YXJ0c1xuIik7CSAgICAgCiAgICBmb3IgKGk9MDsgaSA8IG5yT2ZTdGFydFBv
c2l0aW9uczsgaSsrKXsKICAgICAgZm9yIChpaT0wOyBpaSA8IDU7IGlpKyspICAgICAgICAKCXBy
aW50ZigiJS4xZlx0Iiwgc3RhcnRbaV1baWldKTsJIAogICAgICBwcmludGYoIlxuIik7CSAgICAg
CiAgICB9IAogIH0KfQoKCmludCBFbnZpcm9uOjpjaGVja0NyYXNoKGZsb2F0IHAxLCBmbG9hdCBw
MiwgZG91YmxlIGRpcmVjdGlvbikgY29uc3R7CiAgaW50IGk7CiAgZG91YmxlICBkaXN0OwogIGRv
dWJsZSAgbWluZGlzdDsKICAKICBtaW5kaXN0ID0gcm9ib3RbMF0tPmdldFJhZGl1cygpOwogIGZv
cihpPTA7aTxuck9mV2FsbHM7aSsrKXsKICAgIGRpc3QgPSB3YWxsW2ldLT5kaXN0UihwMSxwMik7
CiAgICBpZiAoZGlzdCA8IG1pbmRpc3QpCiAgICAgIHJldHVybiAxOwogIH0KICBmb3IoaT0wO2k8
bnJPZk9ic3Q7aSsrKXsKICAgIGRpc3QgPSBtZGlzdChwMSxwMixvYnN0W2ldLT54LG9ic3RbaV0t
PnkpLW9ic3RbMF0tPnI7CiAgICBpZiAoZGlzdCA8IG1pbmRpc3QpCiAgICAgIHJldHVybiAxOwog
IH0KICBmb3IoaT0wO2k8bnJPZlNPYnN0O2krKyl7CiAgICBpZiAoc29ic3RbaV0tPnRha2VuID09
IDAuMCl7CiAgICAgIGRpc3QgPSBtZGlzdChwMSxwMixzb2JzdFtpXS0+eCxzb2JzdFtpXS0+eSkt
c29ic3RbMF0tPnI7CiAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkKCXJldHVybiAxOwogICAgfQog
IH0KICByZXR1cm4oMCk7Cn0KCmludCBFbnZpcm9uOjpjaGVja0dyaXBwZXIoaW50IHdoaWNoUm9i
b3QpIGNvbnN0ewogIGludCBpOwogIGRvdWJsZSAgZGlzdDsKICBkb3VibGUgIG1pbmRpc3Q7CiAg
ZmxvYXQgICBwMSxwMjsKICBkb3VibGUgZGlyZWN0aW9uOwogIGNsYXNzIEdyaXBwZXJSb2JvdCAq
cm9iOwogIHJvYiA9IChjbGFzcyBHcmlwcGVyUm9ib3QqKXJvYm90W3doaWNoUm9ib3RdOwogIHAx
ID0gcm9iLT5nZXRYKCk7CiAgcDIgPSByb2ItPmdldFkoKTsKICBkaXJlY3Rpb24gPSByb2ItPmRp
cmVjdGlvbjsKCiAgLy8gIG1pbmRpc3QgPSByb2ItPmdldFJhZGl1cygpOwoKICByb2ItPnVwZGF0
ZUdyaXBwZXJDb3JkcygpOwogIGlmKHJvYi0+Z3JpcHBlckRvd24oKSl7CiAgICBmb3IoaT0wO2k8
bnJPZldhbGxzO2krKyl7CiAgICAgIGRpc3QgPSB3YWxsW2ldLT5kaXN0Uihyb2ItPmxncmlwcGVy
WzJdLHJvYi0+bGdyaXBwZXJbM10pOwogICAgICBpZigzIDwgZGlzdCkgLyogT2sgdGhpcyBpc24n
dCByZWFsbHkgdGhlIHJpZ2h0IHdheSB0byBkbyBpdCAqLwoJcmV0dXJuIDE7ICAvKiBCdXQgaXQg
d2lsbCBoYXZlIHRvIGRvIGZvciBub3cgICAgICAgICAgICAgICovCiAgICAgIAogICAgICBkaXN0
ID0gd2FsbFtpXS0+ZGlzdFIocm9iLT5yZ3JpcHBlclsyXSxyb2ItPnJncmlwcGVyWzNdKTsKICAg
ICAgaWYoMyA8IGRpc3QpIC8qIE9rIHRoaXMgaXNuJ3QgcmVhbGx5IHRoZSByaWdodCB3YXkgdG8g
ZG8gaXQgKi8KCXJldHVybiAxOyAgLyogQnV0IGl0IHdpbGwgaGF2ZSB0byBkbyBmb3Igbm93ICAg
ICAgICAgICAgICAqLwoKICAgIH0KICAgIGlmKG5yT2ZPYnN0ID4gMCl7CiAgICAgIG1pbmRpc3Qg
PSBvYnN0WzBdLT5yOwoJZm9yKGk9MDtpPG5yT2ZPYnN0O2krKyl7CgkgIGRpc3QgPSBsaW5lRGlz
dChvYnN0W2ldLT54LG9ic3RbaV0tPnksCgkJCSAgcm9iLT5sZ3JpcHBlclswXSxyb2ItPmxncmlw
cGVyWzFdLAoJCQkgIHJvYi0+bGdyaXBwZXJbMl0scm9iLT5sZ3JpcHBlclszXSk7CgkgIGlmIChk
aXN0IDwgbWluZGlzdCApCgkgICAgcmV0dXJuIDE7CgkgIGRpc3QgID0gbGluZURpc3Qob2JzdFtp
XS0+eCxvYnN0W2ldLT55LAoJCQkgIHJvYi0+cmdyaXBwZXJbMF0scm9iLT5yZ3JpcHBlclsxXSwK
CQkJICByb2ItPnJncmlwcGVyWzJdLHJvYi0+cmdyaXBwZXJbM10pOwoJICBpZiAoZGlzdCA8IG1p
bmRpc3QgKQoJICAgIHJldHVybiAxOwoJfQogICAgfQogICAgaWYobnJPZlNPYnN0ID4gMCl7CiAg
ICAgIG1pbmRpc3QgPSBvYnN0WzBdLT5yOyAgICAgIAogICAgICBmb3IoaT0wO2k8bnJPZlNPYnN0
O2krKyl7CglpZiAoc29ic3RbaV0tPnRha2VuID09IDAuMCl7CgkgIGRpc3QgPSBsaW5lRGlzdChz
b2JzdFtpXS0+eCxzb2JzdFtpXS0+eSwKCQkJICByb2ItPmxncmlwcGVyWzBdLHJvYi0+bGdyaXBw
ZXJbMV0sCgkJCSAgcm9iLT5sZ3JpcHBlclsyXSxyb2ItPmxncmlwcGVyWzNdKTsKCSAgaWYgKGRp
c3QgPCBtaW5kaXN0ICkKCSAgICByZXR1cm4gMTsKCSAgZGlzdCAgPSBsaW5lRGlzdChzb2JzdFtp
XS0+eCxzb2JzdFtpXS0+eSwKCQkJICByb2ItPnJncmlwcGVyWzBdLHJvYi0+cmdyaXBwZXJbMV0s
CgkJCSAgcm9iLT5yZ3JpcHBlclsyXSxyb2ItPnJncmlwcGVyWzNdKTsKCSAgaWYgKGRpc3QgPCBt
aW5kaXN0ICkKCSAgICByZXR1cm4gMTsKCX0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4oMCk7
Cn0KCgppbnQgRW52aXJvbjo6Y2hlY2tDcmFzaChpbnQgd2hpY2hSb2JvdCkgY29uc3R7CiAgaW50
IGk7CiAgZG91YmxlICBkaXN0OwogIGRvdWJsZSAgbWluZGlzdDsKICBmbG9hdCAgIHAxLHAyOwog
IGRvdWJsZSBkaXJlY3Rpb247CgogIHAxID0gcm9ib3Rbd2hpY2hSb2JvdF0tPmdldFgoKTsKICBw
MiA9IHJvYm90W3doaWNoUm9ib3RdLT5nZXRZKCk7CiAgZGlyZWN0aW9uID0gcm9ib3Rbd2hpY2hS
b2JvdF0tPmRpcmVjdGlvbjsKCiAgbWluZGlzdCA9IHJvYm90W3doaWNoUm9ib3RdLT5nZXRSYWRp
dXMoKTsKICBmb3IoaT0wO2k8bnJPZldhbGxzO2krKyl7CiAgICBkaXN0ID0gd2FsbFtpXS0+ZGlz
dFIocDEscDIpOwogICAgaWYgKGRpc3QgPCBtaW5kaXN0KQogICAgICByZXR1cm4gMTsKICB9CiAg
Zm9yKGk9MDtpPG5yT2ZPYnN0O2krKyl7CiAgICBkaXN0ID0gbWRpc3QocDEscDIsb2JzdFtpXS0+
eCxvYnN0W2ldLT55KS1vYnN0WzBdLT5yOwogICAgaWYgKGRpc3QgPCBtaW5kaXN0KQogICAgICBy
ZXR1cm4gMTsKICB9CiAgZm9yKGk9MDtpPG5yT2ZTT2JzdDtpKyspewogICAgaWYgKHNvYnN0W2ld
LT50YWtlbiA9PSAwLjApewogICAgICBkaXN0ID0gbWRpc3QocDEscDIsc29ic3RbaV0tPngsc29i
c3RbaV0tPnkpLXNvYnN0WzBdLT5yOwogICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpCglyZXR1cm4g
MTsKICAgIH0KICB9CiAgcmV0dXJuKDApOwp9CgovKgogKiByZXNldCBrZXBlcmEgcG9zaXRpb24K
ICogd2UgZG8gbm90IHdhbnQgY3Jhc2hzIGFuZCB3ZSBkbyBub3Qgd2FudCBrZXBlcmEgdG9vIGNs
b3NlIHRvIHRhcmdldHMKICovCnZvaWQgRW52aXJvbjo6cmVzZXRSb2JvdChpbnQgcm9ib3ROcil7
CiAgZmxvYXQgeCx5LGRpcjsKCiAgaWYgKHRlc3RTYW1lU3RhcnRQb3NpdGlvbiA+IDApewogICAg
cm9ib3Rbcm9ib3ROcl0tPnNldFgoMTAwKTsKICAgIHJvYm90W3JvYm90TnJdLT5zZXRZKDEwMCk7
CiAgICByb2JvdFtyb2JvdE5yXS0+ZGlyZWN0aW9uID0gMTAwOwogIH0KICBlbHNlewogICAgeCA9
IHJhbnMoZHgpOwogICAgeSA9IHJhbnMoZHkpOwogICAgZGlyID0gZmFicyhyYW5zKDM2MC4wKSk7
ICAgCiAgICB3aGlsZSAoY2hlY2tDcmFzaCh4LHksZGlyKSA9PSAxICl7CiAgICAgIHggPSByYW5z
KGR4KTsKICAgICAgeSA9IHJhbnMoZHkpOwogICAgICBkaXIgPSBmYWJzKHJhbnMoMzYwLjApKTsg
ICAJICAgICAKICAgIH0JICAgCiAgICByb2JvdFtyb2JvdE5yXS0+c2V0WCh4KTsKICAgIHJvYm90
W3JvYm90TnJdLT5zZXRZKHkpOwogICAgcm9ib3Rbcm9ib3ROcl0tPmRpcmVjdGlvbiA9IGRpcjsK
ICB9CiAgCn0KCnZvaWQgRW52aXJvbjo6cHJpbnRJbnB1dChpbnQgcm9ib3ROciwgY2hhciAqc3Ry
KSBjb25zdHsKICBpbnQgaTsKCiAgcHJpbnRmKCItLS0tV0FIT09PICVzIixzdHIpOwogIGZvcihp
PTA7IGkgPCA4OyBpKyspCiAgICBwcmludGYoIiUuMmYgIixpbnB1dFtyb2JvdE5yXVtpXSk7CiAg
cHJpbnRmKCJcbiIpOwogIHByaW50ZigiLS0tLVlBSE9PTyAlc1xuIixzdHIpOwp9Cgp2b2lkIEVu
dmlyb246OmFkZFRvSW5wdXRBcnJheShpbnQgcm9ib3ROciwgZmxvYXQgKnNlbnMpewogIGludCBp
aT0wOwogIHN3aXRjaChuck9mRnJvbnRJbmZyYXJlZCl7CiAgY2FzZSA2OgogICAgZm9yKGlpPTA7
aWk8ODtpaSsrKXsKICAgICAgaW5wdXRbcm9ib3ROcl1baWldICs9IHNlbnNbaWldOwogICAgfQog
ICAgYnJlYWs7CiAgY2FzZSA0OgogICAgaW5wdXRbcm9ib3ROcl1bMF0gKz0gKHNlbnNbMF0gKyBz
ZW5zWzFdKSAvIDI7CiAgICBpbnB1dFtyb2JvdE5yXVsxXSArPSAoc2Vuc1sxXSArIHNlbnNbMl0p
IC8gMjsKICAgIGlucHV0W3JvYm90TnJdWzJdICs9IChzZW5zWzNdICsgc2Vuc1s0XSkgLyAyOwog
ICAgaW5wdXRbcm9ib3ROcl1bM10gKz0gKHNlbnNbNF0gKyBzZW5zWzVdKSAvIDI7CiAgICBpbnB1
dFtyb2JvdE5yXVs2XSArPSBzZW5zWzZdOwogICAgaW5wdXRbcm9ib3ROcl1bN10gKz0gc2Vuc1s3
XTsKICAgIGJyZWFrOwogIGNhc2UgMjoKICAgIGlucHV0W3JvYm90TnJdWzBdICs9IChzZW5zWzBd
ICsgc2Vuc1sxXSArIHNlbnNbMl0pIC8gMzsKICAgIGlucHV0W3JvYm90TnJdWzFdICs9IChzZW5z
WzNdICsgc2Vuc1s0XSArIHNlbnNbNV0pIC8gMzsKICAgIGlucHV0W3JvYm90TnJdWzZdICs9IHNl
bnNbNl07CiAgICBpbnB1dFtyb2JvdE5yXVs3XSArPSBzZW5zWzddOwogICAgYnJlYWs7CiAgZGVm
YXVsdDoKICAgIHByaW50ZigiU2FuZSBjaGVjayBpbiBzaW0uYyByZW1vdmVkIGFuZCBFbnZpcm9u
OjphZGRUb0lucHV0QXJyYXkgZnJlYWtlZCBvdXRcbiIpOwogICAgcHJpbnRmKCJPUlxuU29tZXRo
aW5nIGhhdmUgbWVzc2VkIHVwIHRoZSB2YXJpYWJsZSBuck9mRnJvbnRJbmZyYXJlZFxuIik7CiAg
ICBwcmludGYoIi0gbnJPZkZyb250SW5mcmFyZWQgbXVzdCBiZSAyLCA0IG9yIDYgLVxuIik7CiAg
ICBwcmludGYoIkJBSUxJTkcgT1VUICEhISBcbiIpOwogICAgZXhpdCgtMSk7CiAgfQp9CgovKgog
KiByZWNlaXZlIGtlcGVyYSBwb3NpdGlvbiBhbmQgc2V0IHNlbnNvciBhY3RpdmF0aW9uCiAqIHNl
dCBpbmZyYS1yZWQgc2Vuc29ycyAKICogc2V0IGxpZ2h0IHNlbnNvcnMgKGlmIGEgbGlnaHQgc2Vu
c29yIGV4aXN0cykKICogc2V0IHpvbmUgc2Vuc29yIChpZiBhIHpvbmVzIGV4aXN0cykKICogc2V0
IG1vdG9yIHNlbnNvcnMgKGlmIHJlcXVlc3RlZCkKICogYWRkIG5vaXNlIChpZiByZXF1ZXN0ZWQp
CiAqLwoKdm9pZCBFbnZpcm9uOjpzZXRJbnB1dChpbnQgcm9ib3ROcil7CiAgaW50IGksaWksbDsK
ICBmbG9hdCAgIGdyb3VuZFZhbHVlPTAuMDsKICBmbG9hdCBwMSxwMjsKICBkb3VibGUgZGlyZWN0
aW9uOwogIGZsb2F0ICpzZW5zOwogIGZsb2F0IHJhZGl1czsKCiAgcDEgPSByb2JvdFtyb2JvdE5y
XS0+Z2V0WCgpOwogIHAyID0gcm9ib3Rbcm9ib3ROcl0tPmdldFkoKTsKICBkaXJlY3Rpb24gPSBy
b2JvdFtyb2JvdE5yXS0+ZGlyZWN0aW9uOwogIHJhZGl1cyA9IHJvYm90W3JvYm90TnJdLT5nZXRS
YWRpdXMoKTsKI2lmZGVmIEVOVklST05fREVCVUcKICBjb3V0IDw8ICJFbnZpcm9uOjpzZXRJbnB1
dCgiIDw8IHJvYm90TnIgPDwiKSIgPDwgZW5kbDsKICBjb3V0IDw8ICJ0aGUgUm9ib3QgaXMgYXQg
cG9zaXRpb24gIiA8PCBwMSA8PCAieCwgIiA8PCBwMiA8PCAieSwgaGVhZGluZyAiIDw8IGRpcmVj
dGlvbiA8PCBlbmRsOwogIGNvdXQgPDwgIiAqIFNlbnNvcnMgY2hlY2tpbmcgIiA8PCBuck9mV2Fs
bHMgPDwiIHdhbGxzIiA8PCBlbmRsOwojZW5kaWYKICAvKgogICAqIGFjdGl2YXRlIHdhbGwgc2Vu
c29ycwogICAqLwogIGZvcihpPTA7aTw4O2krKykKICAgIGlucHV0W3JvYm90TnJdW2ldID0gMC4w
OwoKICBmb3IoaT0wO2k8bnJPZldhbGxzO2krKyl7CiAgICBzZW5zPU5VTEw7CiAgICBzZW5zID0g
d2FsbFtpXS0+c2Vuc29yVmFsKHAxLHAyLChmbG9hdClkaXJlY3Rpb24scmFkaXVzKTsKICAgIGlm
KHNlbnMgIT0gTlVMTCl7CiAgICAgIGFkZFRvSW5wdXRBcnJheShyb2JvdE5yLHNlbnMpOwogICAg
fQogIH0gCiAgLy8gIHByaW50SW5wdXQoMCk7CiNpZmRlZiBFTlZJUk9OX0RFQlVHCiAgY291dCA8
PCAiICogLSBXYWxsIGNoZWNraW5nIGRvbmUiIDw8IGVuZGw7CiAgY291dCA8PCAiICogU2Vuc29y
cyBjaGVja2luZyAiIDw8IG5yT2ZPYnN0IDw8IiByb3VuZCBvYnN0YWNsZXMiIDw8IGVuZGw7CiNl
bmRpZgogIAogIC8qCiAgICogYWN0aXZhdGUgc2Vuc29ycyBmcm9tIHJvdW5kIG9ic3RhY2xlcwog
ICAqLwogIGZvcihpPTA7aTxuck9mT2JzdDtpKyspewogICAgc2Vucz1OVUxMOwogICAgc2VucyA9
IG9ic3RbaV0tPnNlbnNvclZhbChwMSxwMixkaXJlY3Rpb24scmFkaXVzKTsKICAgIGlmKHNlbnMh
PU5VTEwpewogICAgICBhZGRUb0lucHV0QXJyYXkocm9ib3ROcixzZW5zKTsKICAgIH0KICB9Cgoj
aWZkZWYgRU5WSVJPTl9ERUJVRwogIGNvdXQgPDwgIiAqIC0gUm91bmQgb2JzdGFjbGVzIGNoZWNr
aW5nIGRvbmUiIDw8IGVuZGw7CiAgY291dCA8PCAiICogU2Vuc29ycyBjaGVja2luZyAiIDw8IG5y
T2ZTT2JzdCA8PCIgc21hbGwgcm91bmQgb2JzdGFjbGVzIiA8PCBlbmRsOwojZW5kaWYKICAvKgog
ICAqIGFjdGl2YXRlIHNlbnNvcnMgZnJvbSBzbWFsbCByb3VuZCBvYnN0YWNsZXMgaWYgbm90IHRh
a2VuCiAgICovICAgCiAgZm9yKGk9MDtpPG5yT2ZTT2JzdDtpKyspewogICAgc2Vucz1OVUxMOwog
ICAgc2VucyA9IHNvYnN0W2ldLT5zZW5zb3JWYWwocDEscDIsZGlyZWN0aW9uLHJhZGl1cyk7CiAg
ICBpZihzZW5zIT1OVUxMKXsKICAgICAgYWRkVG9JbnB1dEFycmF5KHJvYm90TnIsc2Vucyk7CiAg
ICB9IAogIH0KCiNpZmRlZiBFTlZJUk9OX0RFQlVHCiAgY291dCA8PCAiICogLSBTbWFsbCByb3Vu
ZCBvYnN0YWNsZXMgY2hlY2tpbmcgZG9uZSIgPDwgZW5kbDsKICBpZihzZW5zb3JOb2lzZSA+MCAp
CiAgICBjb3V0IDw8ICIgKiBTZW5zb3JzIGFkZGluZyBub2lzZSAiIDw8IGVuZGw7CiNlbmRpZgoK
CiAgLyoKICAgKiBhZGQgbm9pc2UgdG8gaW5mcmEtcmVkIHNlbnNvcnMgaWYgcmVxdWVzdGVkCiAg
ICogaWYgb2JfdGFrZW4gPT0gMSBleHRyYSBub2lzZSBpcyBwcmVzZW50CiAgICovCiAgaWYgKHNl
bnNvck5vaXNlID4gMCl7CiAgICBmb3IoaT0wOyBpPCA4OyBpKyspewogICAgICBpZiAoZ3JpcHBl
clNlbnNvciA9PSAxIC8qICYmIHJvYm90W3JvYm90TnJdLT5ncmlwcGVyLm9iX3Rha2VuID09IDEq
LykgCglpbnB1dFtyb2JvdE5yXVtpXSArPSByYW5zKGFtb3VudE9mTm9pc2UgKyAwLjApOwogICAg
ICBlbHNlCglpbnB1dFtyb2JvdE5yXVtpXSArPSByYW5zKGFtb3VudE9mTm9pc2UpOwkKICAgIH0J
CiAgfQogIC8vcHJpbnRJbnB1dCgwKTsKCiAgZm9yKGlpPTA7aWk8ODtpaSsrKXsKICAgIGlmIChp
bnB1dFtyb2JvdE5yXVtpaV0gPiAxLjApCiAgICAgIGlucHV0W3JvYm90TnJdW2lpXSA9IDEuMDsK
ICAgIGlmKGlucHV0W3JvYm90TnJdW2lpXSA8IDAuMCApCiAgICAgIGlucHV0W3JvYm90TnJdW2lp
XSA9IDAuMDsKICB9CgoKICAvKgogICAqIGlmIHdlIGhhdmUgYSBzZW5zb3Igb2YgZW5lcmd5IHdl
IGFjdGl2YXRlIGl0CiAgICovIAogIGlmICh1c2VFbmVyZ3kgPT0gMSl7CiAgICBpZiAocm9ib3Rb
cm9ib3ROcl0tPmVuZXJneSA+IDEuMCkgCiAgICAgIGlucHV0W3JvYm90TnJdW0VuZXJneVNlbnNv
cl0gPSAxLjA7CiAgICBlbHNlCiAgICAgIGlucHV0W3JvYm90TnJdW0VuZXJneVNlbnNvcl0gPSBy
b2JvdFtyb2JvdE5yXS0+ZW5lcmd5OwogIH0gICAKICAvL3ByaW50SW5wdXQoMCk7CiAgLyoKICAg
KiBpZiB3ZSBoYXZlIGEgZ3JvdW5kIHNlbnNvciB3ZSBhY3RpdmF0ZSBpdAogICAqLyAKICBpZiAo
dXNlR3JvdW5kID09IDEpewogICAgZ3JvdW5kVmFsdWUgPSAoZmxvYXQpaW5ab25lKHJvYm90TnIp
OwogICAgaWYoZ3JvdW5kVmFsdWU8MCl7CiAgICAgIGlucHV0W3JvYm90TnJdW0dyb3VuZFNlbnNv
cl0gPSAwLjA7CiAgICB9CiAgICBlbHNlewogICAgICBpbnB1dFtyb2JvdE5yXVtHcm91bmRTZW5z
b3JdID0gKGdyb3VuZFZhbHVlKzEuMCkgLyAoZmxvYXQpbnJPZlpvbmVzOwogICAgfQogIH0gICAg
ICAgICAKCiAgLyoKICAgKiBpZiB3ZSBoYXZlIGEgY29tcGFzcyBzZW5zb3Igd2UgYWN0aXZhdGUg
aXQKICAgKi8gCiAgaWYgKHVzZUNvbXBhc3MgPT0gMSl7CiAgICBpbnB1dFtyb2JvdE5yXVtDb21w
YXNzU2Vuc29yXSA9IGRpcmVjdGlvbiAvIDM2MC4wOwogIH0gICAgICAgICAgICAgICAKICAvKgog
ICAqIGFjdGl2YXRlIGJ1bGJsaWdodCBzZW5zb3JzICAKICAgKi8KICBpZiAodXNlTGlnaHRidWxi
U2Vuc29ycyA+IDApeyAKICAgIGZvcihpPUxpZ2h0QnVsYlNlbnNvcjtpPExpZ2h0QnVsYlNlbnNv
cis4O2krKykKICAgICAgaW5wdXRbcm9ib3ROcl1baV0gPSAwLjA7CgogICAgZm9yKGk9MDtpPG5y
T2ZMaWdodHM7aSsrKXsKICAgICAgc2Vucz1OVUxMOwogICAgICBzZW5zID0gbGlnaHRbaV0tPnNl
bnNvclZhbChwMSxwMixkaXJlY3Rpb24scmFkaXVzKTsKICAgICAgaWYoc2VucyE9TlVMTCl7Cglm
b3IoaWk9TGlnaHRCdWxiU2Vuc29yLGw9MDtpaTwgTGlnaHRCdWxiU2Vuc29yICsgODsgaWkrKyxs
KyspewoJICBpbnB1dFtyb2JvdE5yXVtpaV0gKz0gc2Vuc1tsXTsKCSAgaWYgKGlucHV0W3JvYm90
TnJdW2lpXSA+IDEuMCkKCSAgICBpbnB1dFtyb2JvdE5yXVtpaV0gPSAxLjA7Cgl9CiAgICAgIH0K
ICAgIH0gCiAgICAvLyAgICBwcmludElucHV0KDApOwogICAgLyoKICAgICAqIGFkZCBub2lzZSB0
byBsaWdodCBzZW5zb3JzIGlmIHJlcXVlc3RlZAogICAgICovIAogICAgaWYgKHNlbnNvck5vaXNl
ID09IDEpeyAKICAgICAgZm9yKGk9TGlnaHRCdWxiU2Vuc29yOyBpPCBMaWdodEJ1bGJTZW5zb3Ig
KyA4OyBpKyspewoJaWYgKGlucHV0W3JvYm90TnJdW2ldID4gMC4xKQoJICBpbnB1dFtyb2JvdE5y
XVtpXSArPSByYW5zKGlucHV0W3JvYm90TnJdW2ldKTsKCWVsc2UKCSAgaW5wdXRbcm9ib3ROcl1b
aV0rPSByYW5zKDAuMSk7IAogICAgICBpZiAoaW5wdXRbcm9ib3ROcl1baV0gPCAwLjApIGlucHV0
W3JvYm90TnJdW2ldPTAuMDsKICAgICAgaWYgKGlucHV0W3JvYm90TnJdW2ldID4gMS4wKSBpbnB1
dFtyb2JvdE5yXVtpXT0xLjA7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgLyoKICAgKiBhY3RpdmF0
ZSBncmlwcGVyIHNlbnNvcgogICAqIE5vIHNpbXVsYXRpb24gb2YgcmVzaXN0YW5jZQogICAqIAog
ICAqIENvbW1lbnQgc3RvbGVuIGZyb20gTm9sZmkncyBzaW11bGF0b3IKICAgKiBzZW5zb3JlIGRp
IG9nZ2V0dG8gZGVsbGEgcGluemEKICAgKi8KICAvLyAgaWYgKGdyaXBwZXJTZW5zb3IgPiAwKXsK
ICAvLyAgaW5wdXRbcm9ib3ROcl1bR3JpcHBlclNlbnNvcl0gPSAoZmxvYXQpIHJvYm90W3JvYm90
TnJdLT5ncmlwcGVyLm9iX3Rha2VuOwogIC8vfQogIC8qIHNpbW91dHB1dCBpcyBub3QgZGVzdHJv
eWVkIHdoZW4gYWN0aXZhdGluZyBuZXR3b3JrICovCiAgLyogKi8KICBmb3IoaT0wO2kgPCBORVRX
T1JLX0lOUFVUUzsgaSsrKXsKICAgIHNpbW91dHB1dFtyb2JvdE5yXVtpXT1pbnB1dFtyb2JvdE5y
XVtpXTsKICB9CiNpZmRlZiAgRU5WSVJPTl9ERUJVRwogIHByaW50ZigiU2Vuc29ycyAiKTsKICBm
b3IoaT0wOyBpIDwgODsgaSsrKQogICAgcHJpbnRmKCItJWQgJWYgIixpLGlucHV0W3JvYm90TnJd
W2ldKTsKICBwcmludGYoIlxuIik7CiNlbmRpZiAvKiBFTlZJUk9OX0RFQlVHICovCn0KCg==


More information about the Gcc-prs mailing list