LyoKICogIFRFU1QgU1VJVEUgRk9SIE1CL1dDIEZVTkNUSU9OUyBJTiBDTElCUkFSWQogKgogKgkgRklMRToJZGF0X3N3c2NhbmYuYwogKgogKgkgU1dTQ0FORjogIGludAlzd3NjYW5mIChjb25zdCB3Y2hhcl90ICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLik7CiAqLwoKCiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlICJ0c3RfdHlwZXMuaCIKI2luY2x1ZGUgInRnbl9sb2NkZWYuaCIKCgpUU1RfU1dTQ0FORiB0c3Rfc3dzY2FuZl9sb2MgW10gPQp7CiAgewogICAgeyBUc3dzY2FuZiwgVFNUX0xPQ19kZSB9LAogICAgewogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgeyB7CgkweDAwMkQsIDB4MDAzMSwJCTB4MDAzQSwJICAgLyogJWQ6IC0xICAgKi8KCTB4MDAzMiwJCQkweDAwM0EsCSAgIC8qICV1OiAgMiAgICovCgkweDAwMzMsIDB4MDAyQywgMHgwMDMzLCAweDAwM0EsCSAgIC8qICVmOiAgMy4zICovCgkweDAwRTQsCQkJMHgwMDNBLAkgICAvKiAlYzogJ+QnICAqLwoJMHgwMEM0LCAweDAwREMsIDB4MDAwMCwgMHgwMDAwLAkgICAvKiAlczogIsTcIiAqLwogICAgICB9LAoJICBMIiVkOiV1OiVmOiVjOiVzIiwgMAogICAgICB9LAoJeyAvKiBUaGUgZmllbGRzIGFyZTogZXJyX3ZhbCwgcmV0X2ZsYWcsIHJldF92YWwsCgkgICAgIHZhbF9pbnQsIHZhbF91bnMsIHZhbF9mbHQsIHZhbF9jLCB2YWxfcywgdmFsX1MuICAqLwoJICAwLDEsNSwKCSAgLTEsIDIsIDMuMywgJ+QnLCAixNwiLCB7IDB4MDAwMCwgfSwKCX0sCiAgICAgIH0sCiAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgeyB7IHsKCTB4MDBFNCwgMHgwMEM0LCAweDAwMDAJCSAgICAgICAvKiAi5MQiICovCiAgICAgIH0sCgkgIEwiJWxjIiwgJ0MnCiAgICAgIH0sCgl7IDAsMSwxLAoJICAwLDAsMCwwLCIiLCB7IDB4MDBFNCwgMHgwMDAwIH0sCgl9LAogICAgICB9LAogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgeyB7CgkweDAwRTQsIDB4MDBDNCwgMHgwMDAwCQkgICAgICAgLyogIuTEIiAqLwogICAgICB9LAoJICBMIiVscyIsICdTJwogICAgICB9LAoJeyAwLDEsMSwKCSAgMCwwLDAsMCwiIiwgeyAweDAwRTQsIDB4MDBDNCwgMHgwMDAwIH0sCgl9LAogICAgICB9LAogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIC8qIDxOT19XQUlWRVI+IHggMiAqLwogICAgICB7IHsgewoJMHgwMEU0LCAweDAwQzQsIDB4MDAwMAkJICAgICAgIC8qICLkxCIgKi8KICAgICAgfSwKCSAgTCIxJWQ6MiVkOjMlZDo0JWQ6NSVkOjYlZDo3JWQ6OCVkOjklZCIsIDAKICAgICAgfSwKI2lmZGVmIFNIT0pJX0lTX1JJR0hUCgl7IDEsRUlOVkFMLDEsV0VPRiwKCSAgMCwwLDAsMCwiIiwgeyAweDAwMDAgfSwKI2Vsc2UKCXsgMCwxLDAsCgkgIDAsMCwwLDAsIiIsIHsgMHgwMDAwIH0sCiNlbmRpZgoJfSwKICAgICAgfSwKICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICB7IC5pc19sYXN0ID0gMX0JLyogTGFzdCBlbGVtZW50LiAgKi8KICAgIH0KICB9LAogIHsKICAgIHsgVHN3c2NhbmYsIFRTVF9MT0NfZW5VUyB9LAogICAgewogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgeyB7IDB4MDAyRCwgMHgwMDMxLAkJCQkJICAgIDB4MDAzQSwKCSAgICAweDAwMzIsCQkJCQkJICAgIDB4MDAzQSwKCSAgICAweDAwMzUsIDB4MDAzNCwgMHgwMDJFLCAweDAwMzMsIDB4MDA0NSwgMHgwMDJELCAweDAwMzEsIDB4MDAzQSwKCSAgICAweDAwNDEsCQkJCQkJICAgIDB4MDAzQSwKCSAgICAweDAwNjEsIDB4MDA2MiwgMHgwMDAwLAkJCQkgICAgMHgwMDAwLAogICAgICB9LAoJICBMIiVkOiV1OiVmOiVjOiVzIiwgMAogICAgICB9LAoJeyAwLDEsNSwKCSAgLTEsIDIsIDUuNDMsICdBJywgImFiIiwgeyAweDAwMDAgfSwKCX0sCiAgICAgIH0sCiAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgLyogPE5PX1dBSVZFUj4geCAyICovCiAgICAgIHsgeyB7CgkweDAwNjMsIDB4MDA2NCwgMHgwMDAwCiAgICAgIH0sCgkgIEwiJUMiLCAnQycKICAgICAgfSwKCXsgMCwxLDEsCgkgIDAsMCwwLDAsIiIsIHsgMHgwMDYzLCAweDAwMDAgfSwKCX0sCiAgICAgIH0sCiAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDAzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgeyB7IHsKCTB4MDA2MywgMHgwMDY0LCAweDAwMDAKICAgICAgfSwKCSAgTCIlUyIsICdTJwogICAgICB9LAoJeyAwLDEsMSwKCSAgMCwwLDAsMCwiIiwgeyAweDAwNjMsIDB4MDA2NCwgMHgwMDAwIH0sCgl9LAogICAgICB9LAogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgLmlzX2xhc3QgPSAxfQkvKiBMYXN0IGVsZW1lbnQuICAqLwogICAgfQogIH0sCiAgewogICAgeyBUc3dzY2FuZiwgVFNUX0xPQ19ldWNKUCB9LAogICAgewogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgeyB7IDB4MDAyRCwgMHgwMDMxLAkgICAgMHgwMDNBLAoJICAgIDB4MDAzMiwJCSAgICAweDAwM0EsCgkgICAgMHgwMDMzLCAweDAwMkUsIDB4MDAzMywgMHgwMDNBLAoJICAgIDB4MDA2MiwJCSAgICAweDAwM0EsCgkgICAgMHgwMDYxLCAweDAwNjIsIDB4MDAwMCwgMHgwMDAwLAogICAgICB9LAoJICBMIiVkOiV1OiVmOiVjOiVzIiwgMAogICAgICB9LAoJeyAwLDEsNSwKCSAgLTEsIDIsIDMuMywgJ2InLCAiYWIiLCB7IDB4MDAwMCB9Cgl9LAogICAgICB9LAogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAwMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgeyB7CgkweDMwQTIsIDB4MzBBNCwgMHgwMDAwCiAgICAgIH0sCgkgIEwiJWxzIiwgJ1MnCiAgICAgIH0sCgl7IDAsMSwxLAoJICAwLDAsMCwwLCIiLCB7IDB4MzBBMiwgMHgzMEE0LCAweDAwMDAgfQoJfSwKICAgICAgfSwKICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICB7IHsgewoJMHgwMDMxLAkJCTB4MDAzQSwKCTB4MDAzMCwJCQkweDAwM0EsCgkweDAwMzMsIDB4MDAyRSwgMHgwMDM5LCAweDAwM0EsCgkweDAwNjEsCQkJMHgwMDNBLAoJMHgwMDYzLCAweDAwNjQsIDB4MDAwMCwgMHgwMDAwLAogICAgICB9LAoJICBMIiUyJGQ6JTEkdTolMyRmOiU0JGM6JTUkcyIsIDAKICAgICAgfSwKCXsgMCwxLDUsCgkgIDAsIDEsIDMuOSwgJ2EnLCAiY2QiLCB7IDB4MDAwMCB9Cgl9LAogICAgICB9LAojaWZkZWYgU0hPSklfSVNfUklHSFQKICAgICAgLyogWFhYIFRoaXMgdGVzdCBkb2VzIG5vdCBtYWtlIHNlbnNlLiAgVGhlIGZvcm1hdCBzdHJpbmcgaXMKCSBMIlx4MVx4Mlx4MjVceDUzIiBhbmQgaXQgaXMgc3VwcG9zZWQgdG8gbWF0Y2ggdGhlIHdvcmRzCgkgMHgzMEEyLCAweDMwQTQsIDB4MDAwMS4gICovCiAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDA0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgLyogPE5PX1dBSVZFUj4geCAyICovCiAgICAgIHsgeyB7CgkweDMwQTIsIDB4MzBBNCwgMHgwMDAxLCAweDAwMDAKICAgICAgfSwKCSAgeyAweDAwMDEsMHgwMDAyLDB4MDAyNSwweDAwNTMsMHgwMDAwIH0sICdTJwogICAgICB9LAoJeyBFSUxTRVEsMSxFT0YsCgkgIDAsMCwwLDAsIiIsIHsgMHgwMDAwIH0KCX0sCiAgICAgIH0sCiNlbmRpZgogICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgIHsgLmlzX2xhc3QgPSAxfQkvKiBMYXN0IGVsZW1lbnQuICAqLwogICAgfQogIH0sCiAgewogICAgeyBUc3dzY2FuZiwgVFNUX0xPQ19lbmQgfQogIH0KfTsK