LyoKICogQ29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAogKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCiAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAogKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCiAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAogKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCgpzaGFkZXIgbWFpbgoKYXNpYyhERUZBVUxUKQoKdHlwZShDUykKCndhdmVfc2l6ZSgzMikKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCQkJCQljb250cm9sIG9uIGhvdyB0byBydW4gdGhlIHNoYWRlcgkJCQkJICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovL2FueSBoYWNrIHRoYXQgbmVlZHMgdG8gYmUgbWFkZSB0byBydW4gdGhpcyBjb2RlIGluIEVNVSAoZWl0aGVyIGJlY2FzdWUgdmFyaW91cyBFTVUgY29kZSBhcmUgbm90IHJlYWR5IG9yIG5vIGNvbXB1dGUgc2F2ZSAmIHJlc3RvcmUgaW4gRU1VIHJ1bikKdmFyIEVNVV9SVU5fSEFDSwkJCQkJPQkwCnZhciBFTVVfUlVOX0hBQ0tfUkVTVE9SRV9OT1JNQUwJCT0JMAp2YXIgRU1VX1JVTl9IQUNLX1NBVkVfTk9STUFMX0VYSVQJPQkwCnZhcglFTVVfUlVOX0hBQ0tfU0FWRV9TSU5HTEVfV0FWRQk9CTAKdmFyIEVNVV9SVU5fSEFDS19TQVZFX0ZJUlNUX1RJTUUJPSAJMAkJCQkJLy9mb3IgaW50ZXJydXB0ZWQgcmVzdG9yZSBpbiB3aGljaCB0aGUgZmlyc3Qgc2F2ZSBpcyB0aHJvdWdoIEVNVV9SVU5fSEFDSwp2YXIgU0FWRV9MRFMJCQkJCQk9IAkwCnZhciBXR19CQVNFX0FERFJfTE8JCQkJCT0gICAweDkwMDBhMDAwCnZhciBXR19CQVNFX0FERFJfSEkJCQkJCT0JMHgwCnZhciBXQVZFX1NQQUNFCQkJCQkJPQkweDkwMDAJCQkJLy9tZW1vcnkgc2l6ZSB0aGF0IGVhY2ggd2F2ZSBvY2N1cGllcyBpbiB3b3JrZ3JvdXAgc3RhdGUgbWVtLCBpbmNyZWFzZSBmcm9tIDUwMDAgdG8gOTAwMCBmb3IgbW9yZSBTR1BSIG5lZWQgdG8gYmUgc2F2ZWQKdmFyIENUWF9TQVZFX0NPTlRST0wJCQkJPQkweDAKdmFyIENUWF9SRVNUT1JFX0NPTlRST0wJCQkJPQlDVFhfU0FWRV9DT05UUk9MCnZhciBTSU1fUlVOX0hBQ0sJCQkJCT0JMAkJCQkJLy9hbnkgaGFjayB0aGF0IG5lZWRzIHRvIGJlIG1hZGUgdG8gcnVuIHRoaXMgY29kZSBpbiBTSU0gKGVpdGhlciBiZWNhc3VlIHZhcmlvdXMgUlRMIGNvZGUgYXJlIG5vdCByZWFkeSBvciBubyBjb21wdXRlIHNhdmUgJiByZXN0b3JlIGluIFJUTCBydW4pCnZhcglTR1BSX1NBVkVfVVNFX1NRQwkJCQk9CTAJCQkJCS8vdXNlIFNRQyBEJCB0byBkbyB0aGUgd3JpdGUKdmFyIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGCQk9CTAJCQkJCS8vbmVlZCB0byBjaGFuZ2UgQlVGX0RBVEFfRk9STUFUIGluIFNfU0FWRV9CVUZfUlNSQ19XT1JEM19NSVNDIGZyb20gMCB0byBCVUZfREFUQV9GT1JNQVRfMzIgaWYgc2V0IHRvIDEgKGkuZS4gMHgwMDgyN0ZBQykKdmFyIFNXSVpaTEVfRU4JCQkJCQk9CTAJCQkJCS8vd2hldGhlciB3ZSB1c2Ugc3dpenpsZWQgYnVmZmVyIGFkZHJlc3NpbmcKdmFyIFNBVkVfUkVTVE9SRV9IV0lEX0RESUQgICAgICAgICAgPSAgIDAKdmFyIFJFU1RPUkVfRERJRF9JTl9TR1BSMTggICAgICAgICAgPSAgIDAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgIAl2YXJpYWJsZXMJCQkJCQkJICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZhciBTUV9XQVZFX1NUQVRVU19JTlNUX0FUQ19TSElGVCAgPSAyMwp2YXIgU1FfV0FWRV9TVEFUVVNfSU5TVF9BVENfTUFTSyAgID0gMHgwMDgwMDAwMAp2YXIgU1FfV0FWRV9TVEFUVVNfU1BJX1BSSU9fTUFTSyAgID0gMHgwMDAwMDAwNgoKdmFyIFNRX1dBVkVfTERTX0FMTE9DX0xEU19TSVpFX1NISUZUCT0gMTIKdmFyIFNRX1dBVkVfTERTX0FMTE9DX0xEU19TSVpFX1NJWkUJCT0gOQp2YXIgU1FfV0FWRV9HUFJfQUxMT0NfVkdQUl9TSVpFX1NISUZUCT0gOAp2YXIgU1FfV0FWRV9HUFJfQUxMT0NfVkdQUl9TSVpFX1NJWkUJPSA2CnZhciBTUV9XQVZFX0dQUl9BTExPQ19TR1BSX1NJWkVfU0hJRlQJPSAyNAp2YXIgU1FfV0FWRV9HUFJfQUxMT0NfU0dQUl9TSVpFX1NJWkUJPSA0CQkJCQkJLy9GSVhNRQkgc3EuYmxrIHN0aWxsIGhhcyA0IGJpdHMgYXQgdGhpcyB0aW1lIHdoaWxlIFNRIHByb2dyYW1taW5nIGd1aWRlIGhhcyAzIGJpdHMKdmFyIFNRX1dBVkVfTERTX0FMTE9DX1ZHUFJfU0hBUkVEX1NJWkVfU0hJRlQgICAgPSAyNAp2YXIgU1FfV0FWRV9MRFNfQUxMT0NfVkdQUl9TSEFSRURfU0laRV9TSVpFICAgICA9IDQKdmFyIFNRX1dBVkVfSUJfU1RTMl9XQVZFNjRfU0hJRlQgICAgICAgID0gMTEKdmFyIFNRX1dBVkVfSUJfU1RTMl9XQVZFNjRfU0laRSAgICAgICAgID0gMQoKdmFyCVNRX1dBVkVfVFJBUFNUU19TQVZFQ1RYX01BU0sJPQkweDQwMAp2YXIgU1FfV0FWRV9UUkFQU1RTX0VYQ0VfTUFTSyAgICAgICA9ICAgMHgxRkYgICAgICAgICAgCQkJLy8gRXhjZXB0aW9uIG1hc2sKdmFyCVNRX1dBVkVfVFJBUFNUU19TQVZFQ1RYX1NISUZUCT0JMTAJCQkJCQp2YXIJU1FfV0FWRV9UUkFQU1RTX01FTV9WSU9MX01BU0sJPQkweDEwMAkJCQkJCnZhcglTUV9XQVZFX1RSQVBTVFNfTUVNX1ZJT0xfU0hJRlQJPQk4CQkKdmFyCVNRX1dBVkVfVFJBUFNUU19QUkVfU0FWRUNUWF9NQVNLIAk9CTB4M0ZGCnZhcglTUV9XQVZFX1RSQVBTVFNfUFJFX1NBVkVDVFhfU0hJRlQgCT0JMHgwCnZhcglTUV9XQVZFX1RSQVBTVFNfUFJFX1NBVkVDVFhfU0laRSAJPQkxMAp2YXIJU1FfV0FWRV9UUkFQU1RTX1BPU1RfU0FWRUNUWF9NQVNLIAk9CTB4RkZGRkY4MDAJCnZhcglTUV9XQVZFX1RSQVBTVFNfUE9TVF9TQVZFQ1RYX1NISUZUIAk9CTExCnZhcglTUV9XQVZFX1RSQVBTVFNfUE9TVF9TQVZFQ1RYX1NJWkUgCT0JMjEJCgp2YXIgU1FfV0FWRV9JQl9TVFNfUkNOVF9TSElGVAkJCT0JMTYJCQkJCS8vRklYTUUKdmFyIFNRX1dBVkVfSUJfU1RTX0ZJUlNUX1JFUExBWV9TSElGVAk9CTE1CQkJCQkvL0ZJWE1FCnZhciBTUV9XQVZFX0lCX1NUU19GSVJTVF9SRVBMQVlfU0laRSAgICA9ICAgMSAgICAgICAgICAgICAgICAgICAvL0ZJWE1FCnZhciBTUV9XQVZFX0lCX1NUU19SQ05UX1NJWkUgICAgICAgICAgICA9ICAgNiAgICAgICAgICAgICAgICAgICAvL0ZJWE1FCnZhciBTUV9XQVZFX0lCX1NUU19SQ05UX0ZJUlNUX1JFUExBWV9NQVNLX05FRwk9IDB4MDAwMDdGRkYJLy9GSVhNRQogCnZhcglTUV9CVUZfUlNSQ19XT1JEMV9BVENfU0hJRlQJCT0JMjQKdmFyCVNRX0JVRl9SU1JDX1dPUkQzX01UWVBFX1NISUZUCT0JMjcKCgovKiAgICAgIFNhdmUgICAgICAgICovCnZhcglTX1NBVkVfQlVGX1JTUkNfV09SRDFfU1RSSURFCQk9CTB4MDAwNDAwMDAgIAkJLy9zdHJpZGUgaXMgNCBieXRlcyAKdmFyCVNfU0FWRV9CVUZfUlNSQ19XT1JEM19NSVNDCQkJPSAJMHgwMDgwN0ZBQwkJCS8vU1FfU0VMX1gvWS9aL1csIEJVRl9OVU1fRk9STUFUX0ZMT0FULCAoMCBmb3IgTVVCVUYgc3RyaWRlWzE3OjE0XSB3aGVuIEFERF9USURfRU5BQkxFIGFuZCBCVUZfREFUQV9GT1JNQVRfMzIgZm9yIE1UQlVGKSwgQUREX1RJRF9FTkFCTEUJCQkKCnZhcglTX1NBVkVfU1BJX0lOSVRfQVRDX01BU0sJCQk9CTB4MDgwMDAwMDAJCQkvL2JpdFsyN106IEFUQyBiaXQKdmFyCVNfU0FWRV9TUElfSU5JVF9BVENfU0hJRlQJCQk9CTI3CnZhcglTX1NBVkVfU1BJX0lOSVRfTVRZUEVfTUFTSwkJCT0JMHg3MDAwMDAwMAkJCS8vYml0WzMwOjI4XTogTXR5cGUKdmFyCVNfU0FWRV9TUElfSU5JVF9NVFlQRV9TSElGVAkJCT0JMjgKdmFyCVNfU0FWRV9TUElfSU5JVF9GSVJTVF9XQVZFX01BU0sJCT0JMHgwNDAwMDAwMAkJCS8vYml0WzI2XTogRmlyc3RXYXZlSW5URwp2YXIJU19TQVZFX1NQSV9JTklUX0ZJUlNUX1dBVkVfU0hJRlQJPQkyNgoKdmFyIFNfU0FWRV9QQ19ISV9SQ05UX1NISUZUCQkJCT0JMjgJCQkJCS8vRklYTUUJIGNoZWNrIHdpdGggQnJpYW4gdG8gZW5zdXJlIGFsbCBmaWVsZHMgb3RoZXIgdGhhbiBQQ1s0NzowXSBjYW4gYmUgdXNlZAp2YXIgU19TQVZFX1BDX0hJX1JDTlRfTUFTSwkJCQk9ICAgMHhGMDAwMDAwMAkJCS8vRklYTUUKdmFyIFNfU0FWRV9QQ19ISV9GSVJTVF9SRVBMQVlfU0hJRlQJCT0JMjcJCQkJCS8vRklYTUUKdmFyIFNfU0FWRV9QQ19ISV9GSVJTVF9SRVBMQVlfTUFTSwkJPQkweDA4MDAwMDAwCQkJLy9GSVhNRQoKdmFyCXNfc2F2ZV9zcGlfaW5pdF9sbwkJCQk9CWV4ZWNfbG8KdmFyIHNfc2F2ZV9zcGlfaW5pdF9oaQkJCQk9CWV4ZWNfaGkKCnZhcglzX3NhdmVfcGNfbG8JCQk9CXR0bXAwCQkJLy97VFRNUDEsIFRUTVAwfSA9IHszoa9oMCxwY19yZXdpbmRbMzowXSwgSFRbMF0sdHJhcElEWzc6MF0sIFBDWzQ3OjBdfQp2YXIJc19zYXZlX3BjX2hpCQkJPQl0dG1wMQkJCQp2YXIgc19zYXZlX2V4ZWNfbG8JCQk9CXR0bXAyCnZhciBzX3NhdmVfZXhlY19oaQkJCT0gCXR0bXAzCQkJCnZhcglzX3NhdmVfc3RhdHVzCQkJPQl0dG1wNAkJCQp2YXIJc19zYXZlX3RyYXBzdHMJCQk9CXR0bXA1CQkJLy9ub3QgcmVhbGx5IHVzZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgU0FWRSByb3V0aW5lCnZhciBzX3dhdmVfc2l6ZSAgICAgICAgIAk9CXR0bXA2ICAgICAgICAgICAvL3R0bXA2IGlzIG5vdCBuZWVkZWQgbm93LCBzaW5jZSBpdCdzIG9ubHkgMzJiaXQgeG5hY2sgbWFzaywgbm93IHVzZSBpdCB0byBkZXRlcm1pbmUgd2F2ZTMyIG9yIHdhdmU2NCBpbiBFTVVfSEFDSwp2YXIgc19zYXZlX3huYWNrX21hc2sJICAgID0JdHRtcDcKdmFyCXNfc2F2ZV9idWZfcnNyYzAJCT0JdHRtcDgKdmFyCXNfc2F2ZV9idWZfcnNyYzEJCT0JdHRtcDkKdmFyCXNfc2F2ZV9idWZfcnNyYzIJCT0JdHRtcDEwCnZhcglzX3NhdmVfYnVmX3JzcmMzCQk9CXR0bXAxMQoKdmFyIHNfc2F2ZV9tZW1fb2Zmc2V0CQk9IAl0dG1wMTQKdmFyIHNfc2dwcl9zYXZlX251bSAgICAgICAgID0gICAxMDYgICAgICAgICAgICAgICAgICAgICAvL2luIGdmeDEwLCBhbGwgc2dwciBtdXN0IGJlIHNhdmVkCnZhciBzX3NhdmVfYWxsb2Nfc2l6ZQkJPQlzX3NhdmVfdHJhcHN0cwkJCS8vY29uZmxpY3QKdmFyIHNfc2F2ZV90bXAgICAgICAgICAgICAgID0gICBzX3NhdmVfYnVmX3JzcmMyICAgICAgIAkvL3NoYXJlZCB3aXRoIHNfc2F2ZV9idWZfcnNyYzIgIChjb25mbGljdDogc2hvdWxkIG5vdCB1c2UgbWVtIGFjY2VzcyB3aXRoIHNfc2F2ZV90bXAgYXQgdGhlIHNhbWUgdGltZSkKdmFyIHNfc2F2ZV9tMAkJCQk9CXR0bXAxNQkJCQkJCgovKiAgICAgIFJlc3RvcmUgICAgICovCnZhcglTX1JFU1RPUkVfQlVGX1JTUkNfV09SRDFfU1RSSURFCQkJPQlTX1NBVkVfQlVGX1JTUkNfV09SRDFfU1RSSURFIAp2YXIJU19SRVNUT1JFX0JVRl9SU1JDX1dPUkQzX01JU0MJCQk9IAlTX1NBVkVfQlVGX1JTUkNfV09SRDNfTUlTQwkJIAoKdmFyCVNfUkVTVE9SRV9TUElfSU5JVF9BVENfTUFTSwkJCSAgICA9CTB4MDgwMDAwMDAJCQkvL2JpdFsyN106IEFUQyBiaXQKdmFyCVNfUkVTVE9SRV9TUElfSU5JVF9BVENfU0hJRlQJCQk9CTI3CnZhcglTX1JFU1RPUkVfU1BJX0lOSVRfTVRZUEVfTUFTSwkJCT0JMHg3MDAwMDAwMAkJCS8vYml0WzMwOjI4XTogTXR5cGUKdmFyCVNfUkVTVE9SRV9TUElfSU5JVF9NVFlQRV9TSElGVAkJCT0JMjgKdmFyCVNfUkVTVE9SRV9TUElfSU5JVF9GSVJTVF9XQVZFX01BU0sJCT0JMHgwNDAwMDAwMAkJCS8vYml0WzI2XTogRmlyc3RXYXZlSW5URwp2YXIJU19SRVNUT1JFX1NQSV9JTklUX0ZJUlNUX1dBVkVfU0hJRlQJICAgID0JMjYKCnZhciBTX1JFU1RPUkVfUENfSElfUkNOVF9TSElGVAkJCQk9CVNfU0FWRV9QQ19ISV9SQ05UX1NISUZUCnZhciBTX1JFU1RPUkVfUENfSElfUkNOVF9NQVNLCQkJCT0gICBTX1NBVkVfUENfSElfUkNOVF9NQVNLCnZhciBTX1JFU1RPUkVfUENfSElfRklSU1RfUkVQTEFZX1NISUZUCQk9CVNfU0FWRV9QQ19ISV9GSVJTVF9SRVBMQVlfU0hJRlQKdmFyIFNfUkVTVE9SRV9QQ19ISV9GSVJTVF9SRVBMQVlfTUFTSwkJPQlTX1NBVkVfUENfSElfRklSU1RfUkVQTEFZX01BU0sKCnZhciBzX3Jlc3RvcmVfc3BpX2luaXRfbG8gICAgICAgICAgICAgICAgICAgPSAgIGV4ZWNfbG8KdmFyIHNfcmVzdG9yZV9zcGlfaW5pdF9oaSAgICAgICAgICAgICAgICAgICA9ICAgZXhlY19oaQoKdmFyIHNfcmVzdG9yZV9tZW1fb2Zmc2V0CQk9IAl0dG1wMTIKdmFyIHNfcmVzdG9yZV9hbGxvY19zaXplCQk9CXR0bXAzCnZhciBzX3Jlc3RvcmVfdG1wICAgICAgICAgICAJPSAgIHR0bXA2CnZhciBzX3Jlc3RvcmVfbWVtX29mZnNldF9zYXZlCT0gCXNfcmVzdG9yZV90bXAgCQkvL25vIGNvbmZsaWN0Cgp2YXIgc19yZXN0b3JlX20wCQkJPQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZQkvL25vIGNvbmZsaWN0CQkJCgp2YXIgc19yZXN0b3JlX21vZGUJCQk9ICAJdHRtcDEzCnZhciBzX3Jlc3RvcmVfaHdpZDEgICAgICAgICA9ICB0dG1wMgp2YXIgc19yZXN0b3JlX2RkaWQgICAgICAgICAgPSAgc19yZXN0b3JlX2h3aWQxCnZhcglzX3Jlc3RvcmVfcGNfbG8JCSAgICA9CXR0bXAwCQkJCnZhcglzX3Jlc3RvcmVfcGNfaGkJCSAgICA9CXR0bXAxCnZhciBzX3Jlc3RvcmVfZXhlY19sbwkJPQl0dG1wMTQKdmFyIHNfcmVzdG9yZV9leGVjX2hpCQk9IAl0dG1wMTUKdmFyCXNfcmVzdG9yZV9zdGF0dXMJICAgID0JdHRtcDQJCQkKdmFyCXNfcmVzdG9yZV90cmFwc3RzCSAgICA9CXR0bXA1Ci8vdmFyIHNfcmVzdG9yZV94bmFja19tYXNrX2xvCT0JeG5hY2tfbWFza19sbwovL3ZhciBzX3Jlc3RvcmVfeG5hY2tfbWFza19oaQk9CXhuYWNrX21hc2tfaGkKdmFyIHNfcmVzdG9yZV94bmFja19tYXNrICAgID0gICB0dG1wNwp2YXIJc19yZXN0b3JlX2J1Zl9yc3JjMAkJPQl0dG1wOAp2YXIJc19yZXN0b3JlX2J1Zl9yc3JjMQkJPQl0dG1wOQp2YXIJc19yZXN0b3JlX2J1Zl9yc3JjMgkJPQl0dG1wMTAKdmFyCXNfcmVzdG9yZV9idWZfcnNyYzMJCT0JdHRtcDExCnZhciBzX3Jlc3RvcmVfc2l6ZSAgICAgICAgIAk9CXR0bXAxMyAgICAgICAgICAgICAgICAgIC8vdHRtcDEzIGhhcyBubyBjb25mbGljdAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgIAl0cmFwIGhhbmRsZXIgZW50cnkgcG9pbnRzCQkJICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICBpZiAoKEVNVV9SVU5fSEFDSykgJiYgKCFFTVVfUlVOX0hBQ0tfUkVTVE9SRV9OT1JNQUwpKSAJCQkJCS8vaGFjayB0byB1c2UgdHJhcF9pZCBmb3IgZGV0ZXJtaW5pbmcgc2F2ZS9yZXN0b3JlCgkJLy9GSVhNRSBWQ0NaIHVuLWluaXQgYXNzZXJ0aW9uIHNfZ2V0cmVnX2IzMiAgCXNfc2F2ZV9zdGF0dXMsIGh3cmVnKEhXX1JFR19TVEFUVVMpCQkJLy9zYXZlIFNUQVRVUyBzaW5jZSB3ZSB3aWxsIGNoYW5nZSBTQ0MKCQlzX2FuZF9iMzIgc19zYXZlX3RtcCwgc19zYXZlX3BjX2hpLCAweGZmZmYwMDAwIAkJCQkvL2NoYW5nZSBTQ0MKICAgIAlzX2NtcF9lcV91MzIgc19zYXZlX3RtcCwgMHgwMDdlMDAwMCAgCQkJCQkJLy9TYXZlOiB0cmFwX2lkID0gMHg3ZS4gUmVzdG9yZTogdHJhcF9pZCA9IDB4N2YuICAKICAgIAlzX2NicmFuY2hfc2NjMCBMX0pVTVBfVE9fUkVTVE9SRQkJCQkJCQkvL2RvIG5vdCBuZWVkIHRvIHJlY292ZXIgU1RBVFVTIGhlcmUgIHNpbmNlIHdlIGFyZSBnb2luZyB0byBSRVNUT1JFCgkJLy9GSVhNRSAgc19zZXRyZWdfYjMyIAlod3JlZyhIV19SRUdfU1RBVFVTKSwgCXNfc2F2ZV9zdGF0dXMJCS8vbmVlZCB0byByZWNvdmVyIFNUQVRVUyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gU0FWRQkKCQlzX2JyYW5jaCBMX1NLSVBfUkVTVE9SRSAJCQkJCQkJCQkvL05PVCByZXN0b3JlLCBTQVZFIGFjdHVhbGx5CgllbHNlCQoJCXNfYnJhbmNoIExfU0tJUF9SRVNUT1JFIAkJCQkJCQkJCS8vTk9UIHJlc3RvcmUuIG1pZ2h0IGJlIGEgcmVndWxhciB0cmFwIG9yIHNhdmUKICAgIGVuZAoKTF9KVU1QX1RPX1JFU1RPUkU6CiAgICBzX2JyYW5jaCBMX1JFU1RPUkUJCQkJCQkJCQkJCQkvL3Jlc3RvcmUKCkxfU0tJUF9SRVNUT1JFOgoJCglzX2dldHJlZ19iMzIgIAlzX3NhdmVfc3RhdHVzLCBod3JlZyhIV19SRUdfU1RBVFVTKQkJCQkJCQkJLy9zYXZlIFNUQVRVUyBzaW5jZSB3ZSB3aWxsIGNoYW5nZSBTQ0MKICAgIHNfYW5kbjJfYjMyCQlzX3NhdmVfc3RhdHVzLCBzX3NhdmVfc3RhdHVzLCBTUV9XQVZFX1NUQVRVU19TUElfUFJJT19NQVNLICAgICAgLy9jaGVjayB3aGV0aGVyIHRoaXMgaXMgZm9yIHNhdmUKCXNfZ2V0cmVnX2IzMiAgCXNfc2F2ZV90cmFwc3RzLCBod3JlZyhIV19SRUdfVFJBUFNUUykgICAgCQkgCQkJCQoJc19hbmRfYjMyCQlzX3NhdmVfdHJhcHN0cywgc19zYXZlX3RyYXBzdHMsIFNRX1dBVkVfVFJBUFNUU19TQVZFQ1RYX01BU0sJLy9jaGVjayB3aGV0aGVyIHRoaXMgaXMgZm9yIHNhdmUgIAoJc19jYnJhbmNoX3NjYzEJTF9TQVZFCQkJCQkJCQkJCQkJCQkJLy90aGlzIGlzIHRoZSBvcGVyYXRpb24gZm9yIHNhdmUKCiAgICAvLyAqKioqKioqKiogICAgSGFuZGxlIG5vbi1DV1NSIHRyYXBzICAgICAgICoqKioqKioqKioqKioqKioqKioKICAgIGlmICghRU1VX1JVTl9IQUNLKQoJCXNfZ2V0cmVnX2IzMiAgICAgc19zYXZlX3RyYXBzdHMsIGh3cmVnKEhXX1JFR19UUkFQU1RTKQoJCXNfYW5kX2IzMiAgICAgICAgc19zYXZlX3RyYXBzdHMsIHNfc2F2ZV90cmFwc3RzLCBTUV9XQVZFX1RSQVBTVFNfRVhDRV9NQVNLIC8vIENoZWNrIHdoZXRoZXIgaXQgaXMgYW4gZXhjZXB0aW9uCgkJc19jYnJhbmNoX3NjYzEgIExfRVhDUF9DQVNFICAgLy8gRXhjZXB0aW9uLCBqdW1wIGJhY2sgdG8gdGhlIHNoYWRlciBwcm9ncmFtIGRpcmVjdGx5LgoJCXNfYWRkX3UzMiAgICB0dG1wMCwgdHRtcDAsIDQgICAvLyBTX1RSQVAgY2FzZSwgYWRkIDQgdG8gdHRtcDAgCgkJCgkJTF9FWENQX0NBU0U6CgkJc19hbmRfYjMyICAgIHR0bXAxLCB0dG1wMSwgMHhGRkZGCgkJc19yZmVfYjY0ICAgIFt0dG1wMCwgdHRtcDFdCgllbmQKICAgIC8vICoqKioqKioqKiAgICAgICAgRW5kIGhhbmRsaW5nIG9mIG5vbi1DV1NSIHRyYXBzICAgKioqKioqKioqKioqKioqKioqKgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgIAlzYXZlIHJvdXRpbmUJCQkJCQkgICAgICAgICAgICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkxfU0FWRToJCgkKCS8vY2hlY2sgd2hldGhlciB0aGVyZSBpcyBtZW1fdmlvbAoJc19nZXRyZWdfYjMyICAJc19zYXZlX3RyYXBzdHMsIGh3cmVnKEhXX1JFR19UUkFQU1RTKSAgICAJCSAJCQkJCglzX2FuZF9iMzIJCXNfc2F2ZV90cmFwc3RzLCBzX3NhdmVfdHJhcHN0cywgU1FfV0FWRV9UUkFQU1RTX01FTV9WSU9MX01BU0sJCQkKCXNfY2JyYW5jaF9zY2MwCUxfTk9fUENfUkVXSU5ECiAgICAKCS8vaWYgc28sIG5lZWQgcmV3aW5kIFBDIGFzc3VtaW5nIEdEUyBvcGVyYXRpb24gZ2V0cyBOQUNLZWQKCXNfbW92X2IzMiAgICAgICBzX3NhdmVfdG1wLCAwCQkJCQkJCQkJCQkJCQkJLy9jbGVhciBtZW1fdmlvbCBiaXQKCXNfc2V0cmVnX2IzMglod3JlZyhIV19SRUdfVFJBUFNUUywgU1FfV0FWRV9UUkFQU1RTX01FTV9WSU9MX1NISUZULCAxKSwgc19zYXZlX3RtcAkvL2NsZWFyIG1lbV92aW9sIGJpdCAKCXNfYW5kX2IzMiAJCXNfc2F2ZV9wY19oaSwgc19zYXZlX3BjX2hpLCAweDAwMDBmZmZmICAgIC8vcGNbNDc6MzJdCglzX3N1Yl91MzIgCQlzX3NhdmVfcGNfbG8sIHNfc2F2ZV9wY19sbywgOCAgICAgICAgICAgICAvL3BjWzMxOjBdLTgKCXNfc3ViYl91MzIgCQlzX3NhdmVfcGNfaGksIHNfc2F2ZV9wY19oaSwgMHgwCQkJICAvLyAtc2NjCgpMX05PX1BDX1JFV0lORDoKICAgIHNfbW92X2IzMiAgICAgICBzX3NhdmVfdG1wLCAwCQkJCQkJCQkJCQkJCQkJLy9jbGVhciBzYXZlQ3R4IGJpdAoJc19zZXRyZWdfYjMyCWh3cmVnKEhXX1JFR19UUkFQU1RTLCBTUV9XQVZFX1RSQVBTVFNfU0FWRUNUWF9TSElGVCwgMSksIHNfc2F2ZV90bXAJCS8vY2xlYXIgc2F2ZUN0eCBiaXQgICAKCgkvL3NfbW92X2IzMgkJc19zYXZlX3huYWNrX21hc2tfbG8sCXhuYWNrX21hc2tfbG8JCQkJCQkJCQkvL3NhdmUgWE5BQ0tfTUFTSyAgCgkvL3NfbW92X2IzMgkJc19zYXZlX3huYWNrX21hc2tfaGksCXhuYWNrX21hc2tfaGkKICAgIHNfZ2V0cmVnX2IzMglzX3NhdmVfeG5hY2tfbWFzaywgIGh3cmVnKEhXX1JFR19TSEFERVJfWE5BQ0tfTUFTSykgIAoJc19nZXRyZWdfYjMyCXNfc2F2ZV90bXAsIGh3cmVnKEhXX1JFR19JQl9TVFMsIFNRX1dBVkVfSUJfU1RTX1JDTlRfU0hJRlQsIFNRX1dBVkVfSUJfU1RTX1JDTlRfU0laRSkJCQkJCS8vc2F2ZSBSQ05UCglzX2xzaGxfYjMyCQlzX3NhdmVfdG1wLCBzX3NhdmVfdG1wLCBTX1NBVkVfUENfSElfUkNOVF9TSElGVAoJc19vcl9iMzIJCXNfc2F2ZV9wY19oaSwgc19zYXZlX3BjX2hpLCBzX3NhdmVfdG1wCglzX2dldHJlZ19iMzIJc19zYXZlX3RtcCwgaHdyZWcoSFdfUkVHX0lCX1NUUywgU1FfV0FWRV9JQl9TVFNfRklSU1RfUkVQTEFZX1NISUZULCBTUV9XQVZFX0lCX1NUU19GSVJTVF9SRVBMQVlfU0laRSkJLy9zYXZlIEZJUlNUX1JFUExBWQoJc19sc2hsX2IzMgkJc19zYXZlX3RtcCwgc19zYXZlX3RtcCwgU19TQVZFX1BDX0hJX0ZJUlNUX1JFUExBWV9TSElGVAoJc19vcl9iMzIJCXNfc2F2ZV9wY19oaSwgc19zYXZlX3BjX2hpLCBzX3NhdmVfdG1wCglzX2dldHJlZ19iMzIJc19zYXZlX3RtcCwgaHdyZWcoSFdfUkVHX0lCX1NUUykJCQkJCQkJCQkJLy9jbGVhciBSQ05UIGFuZCBGSVJTVF9SRVBMQVkgaW4gSUJfU1RTCglzX2FuZF9iMzIJCXNfc2F2ZV90bXAsIHNfc2F2ZV90bXAsIFNRX1dBVkVfSUJfU1RTX1JDTlRfRklSU1RfUkVQTEFZX01BU0tfTkVHCgoJc19zZXRyZWdfYjMyCWh3cmVnKEhXX1JFR19JQl9TVFMpLCBzX3NhdmVfdG1wCiAgICAKCS8qCQlpbmZvcm0gU1BJIHRoZSByZWFkaW5lc3MgYW5kIHdhaXQgZm9yIFNQSSdzIGdvIHNpZ25hbCAqLwoJc19tb3ZfYjMyCQlzX3NhdmVfZXhlY19sbywJZXhlY19sbwkJCQkJCQkJCQkJCQkvL3NhdmUgRVhFQyBhbmQgdXNlIEVYRUMgZm9yIHRoZSBnbyBzaWduYWwgZnJvbSBTUEkKCXNfbW92X2IzMgkJc19zYXZlX2V4ZWNfaGksCWV4ZWNfaGkKCXNfbW92X2I2NAkJZXhlYywgCTB4MAkJCQkJCQkJCQkJCQkJCQkvL2NsZWFyIEVYRUMgdG8gZ2V0IHJlYWR5IHRvIHJlY2VpdmUKCWlmIChFTVVfUlVOX0hBQ0spCgkKCWVsc2UKCQlzX3NlbmRtc2cJc2VuZG1zZyhNU0dfU0FWRVdBVkUpCQkJCQkJCQkJCQkJCS8vc2VuZCBTUEkgYSBtZXNzYWdlIGFuZCB3YWl0IGZvciBTUEkncyB3cml0ZSB0byBFWEVDICAKCWVuZAoKICBMX1NMRUVQOgkJCglzX3NsZWVwIDB4MgoJCglpZiAoRU1VX1JVTl9IQUNLKQoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQoJZWxzZQoJCXNfY2JyYW5jaF9leGVjeglMX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgllbmQKCgoJLyogICAgICBzZXR1cCBSZXNvdXJjZSBDb250YW50cyAgICAqLwoJaWYgKChFTVVfUlVOX0hBQ0spICYmICghRU1VX1JVTl9IQUNLX1NBVkVfU0lOR0xFX1dBVkUpKQkKCQkvL2NhbGN1bGF0ZSB3ZF9hZGRyIHVzaW5nIGFic29sdXRlIHRocmVhZCBpZCAKCQl2X3JlYWRsYW5lX2IzMiBzX3NhdmVfdG1wLCB2OSwgMAogICAgICAgIC8vZGV0ZXJtaW5lIGl0IGlzIHdhdmUzMiBvciB3YXZlNjQKICAgICAgICBzX2dldHJlZ19iMzIgCXNfd2F2ZV9zaXplLCBod3JlZyhIV19SRUdfSUJfU1RTMixTUV9XQVZFX0lCX1NUUzJfV0FWRTY0X1NISUZULFNRX1dBVkVfSUJfU1RTMl9XQVZFNjRfU0laRSkKICAgICAgICBzX2NtcF9lcV91MzIgICAgc193YXZlX3NpemUsIDAKICAgICAgICBzX2NicmFuY2hfc2NjMSAgTF9TQVZFX1dBVkUzMgogICAgICAgIHNfbHNocl9iMzIgc19zYXZlX3RtcCwgc19zYXZlX3RtcCwgNiAvL1NBVkUgV0FWRTY0CiAgICAgICAgc19icmFuY2ggICAgTF9TQVZFX0NPTgogICAgTF9TQVZFX1dBVkUzMjoKICAgICAgICBzX2xzaHJfYjMyIHNfc2F2ZV90bXAsIHNfc2F2ZV90bXAsIDUgLy9TQVZFIFdBVkUzMgogICAgTF9TQVZFX0NPTjoKCQlzX211bF9pMzIgc19zYXZlX3RtcCwgc19zYXZlX3RtcCwgV0FWRV9TUEFDRQoJCXNfYWRkX2kzMiBzX3NhdmVfc3BpX2luaXRfbG8sIHNfc2F2ZV90bXAsIFdHX0JBU0VfQUREUl9MTwoJCXNfbW92X2IzMiBzX3NhdmVfc3BpX2luaXRfaGksIFdHX0JBU0VfQUREUl9ISQoJCXNfYW5kX2IzMiBzX3NhdmVfc3BpX2luaXRfaGksIHNfc2F2ZV9zcGlfaW5pdF9oaSwgQ1RYX1NBVkVfQ09OVFJPTAkJCgllbHNlCgllbmQKCWlmICgoRU1VX1JVTl9IQUNLKSAmJiAoRU1VX1JVTl9IQUNLX1NBVkVfU0lOR0xFX1dBVkUpKQoJCXNfYWRkX2kzMiBzX3NhdmVfc3BpX2luaXRfbG8sIHNfc2F2ZV90bXAsIFdHX0JBU0VfQUREUl9MTwoJCXNfbW92X2IzMiBzX3NhdmVfc3BpX2luaXRfaGksIFdHX0JBU0VfQUREUl9ISQoJCXNfYW5kX2IzMiBzX3NhdmVfc3BpX2luaXRfaGksIHNfc2F2ZV9zcGlfaW5pdF9oaSwgQ1RYX1NBVkVfQ09OVFJPTAkJCgllbHNlCgllbmQKCQoJCglzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzAsIAlzX3NhdmVfc3BpX2luaXRfbG8JCQkJCQkJCQkJCQkJCS8vYmFzZV9hZGRyX2xvCglzX2FuZF9iMzIJCXNfc2F2ZV9idWZfcnNyYzEsIAlzX3NhdmVfc3BpX2luaXRfaGksIDB4MDAwMEZGRkYJCQkJCQkJCQkJCS8vYmFzZV9hZGRyX2hpCglzX29yX2IzMgkJc19zYXZlX2J1Zl9yc3JjMSwgCXNfc2F2ZV9idWZfcnNyYzEsICBTX1NBVkVfQlVGX1JTUkNfV09SRDFfU1RSSURFCiAgICBzX21vdl9iMzIgICAgICAgc19zYXZlX2J1Zl9yc3JjMiwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkvL05VTV9SRUNPUkRTIGluaXRpYWwgdmFsdWUgPSAwIChpbiBieXRlcykgYWx0aG91Z2ggbm90IG5lY2Nlc3NhcmlseSBpbml0ZWQKCXNfbW92X2IzMgkJc19zYXZlX2J1Zl9yc3JjMywgCVNfU0FWRV9CVUZfUlNSQ19XT1JEM19NSVNDCglzX2FuZF9iMzIJCXNfc2F2ZV90bXAsICAgICAgICAgc19zYXZlX3NwaV9pbml0X2hpLCBTX1NBVkVfU1BJX0lOSVRfQVRDX01BU0sJCQoJc19sc2hyX2IzMgkJc19zYXZlX3RtcCwgIAkJc19zYXZlX3RtcCwgKFNfU0FWRV9TUElfSU5JVF9BVENfU0hJRlQtU1FfQlVGX1JTUkNfV09SRDFfQVRDX1NISUZUKQkJCS8vZ2V0IEFUQyBiaXQgaW50byBwb3NpdGlvbgoJc19vcl9iMzIJCXNfc2F2ZV9idWZfcnNyYzMsIAlzX3NhdmVfYnVmX3JzcmMzLCAgc19zYXZlX3RtcAkJCQkJCQkJCQkJLy9vciBBVEMKCXNfYW5kX2IzMgkJc19zYXZlX3RtcCwgICAgICAgICBzX3NhdmVfc3BpX2luaXRfaGksIFNfU0FWRV9TUElfSU5JVF9NVFlQRV9NQVNLCQkKCXNfbHNocl9iMzIJCXNfc2F2ZV90bXAsICAJCXNfc2F2ZV90bXAsIChTX1NBVkVfU1BJX0lOSVRfTVRZUEVfU0hJRlQtU1FfQlVGX1JTUkNfV09SRDNfTVRZUEVfU0hJRlQpCQkvL2dldCBNVFlQRSBiaXRzIGludG8gcG9zaXRpb24KCXNfb3JfYjMyCQlzX3NhdmVfYnVmX3JzcmMzLCAJc19zYXZlX2J1Zl9yc3JjMywgIHNfc2F2ZV90bXAJCQkJCQkJCQkJCS8vb3IgTVRZUEUJCgkKCXNfbW92X2IzMgkJc19zYXZlX20wLAkJCW0wCQkJCQkJCQkJCQkJCQkJCQkvL3NhdmUgTTAKCQoJLyogCQlnbG9iYWwgbWVtIG9mZnNldAkJCSovCglzX21vdl9iMzIJCXNfc2F2ZV9tZW1fb2Zmc2V0LCAJMHgwCQkJCQkJCQkJCQkJCQkJCQkJLy9tZW0gb2Zmc2V0IGluaXRpYWwgdmFsdWUgPSAwCiAgICBzX2dldHJlZ19iMzIgCXNfd2F2ZV9zaXplLCBod3JlZyhIV19SRUdfSUJfU1RTMixTUV9XQVZFX0lCX1NUUzJfV0FWRTY0X1NISUZULFNRX1dBVkVfSUJfU1RTMl9XQVZFNjRfU0laRSkgLy9nZXQgd2F2ZV9zYXZlX3NpemUKICAgIHNfb3JfYjMyICAgICAgICBzX3dhdmVfc2l6ZSwgc19zYXZlX3NwaV9pbml0X2hpLCAgICBzX3dhdmVfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2hhcmUgc193YXZlX3NpemUgd2l0aCBleGVjX2hpCgogICAgLyogICAgICAJc2F2ZSBWR1BScwkgICAgKi8KCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIExfU0FWRV9WR1BSOgogIAogCXNfbW92X2IzMgkJZXhlY19sbywgMHhGRkZGRkZGRiAJCQkJCQkJCQkJCS8vbmVlZCBldmVyeSB0aHJlYWQgZnJvbSBub3cgb24KICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc193YXZlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMSAgCiAgICBzX2NicmFuY2hfc2NjMSAgTF9FTkFCTEVfU0FWRV9WR1BSX0VYRUNfSEkgICAKICAgIHNfbW92X2IzMgkJZXhlY19oaSwgMHgwMDAwMDAwMAogICAgc19icmFuY2ggICAgICAgIExfU0FWRV9WR1BSX05PUk1BTAogIExfRU5BQkxFX1NBVkVfVkdQUl9FWEVDX0hJOgoJc19tb3ZfYjMyCQlleGVjX2hpLCAweEZGRkZGRkZGCiAgTF9TQVZFX1ZHUFJfTk9STUFMOgkKCXNfZ2V0cmVnX2IzMiAJc19zYXZlX2FsbG9jX3NpemUsIGh3cmVnKEhXX1JFR19HUFJfQUxMT0MsU1FfV0FWRV9HUFJfQUxMT0NfVkdQUl9TSVpFX1NISUZULFNRX1dBVkVfR1BSX0FMTE9DX1ZHUFJfU0laRV9TSVpFKSAJCQkJCS8vdnBncl9zaXplCgkvL2ZvciB3YXZlMzIgYW5kIHdhdmU2NCwgdGhlIG51bSBvZiB2Z3ByIGZ1bmN0aW9uIGlzIHRoZSBzYW1lPwogICAgc19hZGRfdTMyIAkJc19zYXZlX2FsbG9jX3NpemUsIHNfc2F2ZV9hbGxvY19zaXplLCAxCglzX2xzaGxfYjMyIAkJc19zYXZlX2FsbG9jX3NpemUsIHNfc2F2ZV9hbGxvY19zaXplLCAyIAkJCQkJCS8vTnVtYmVyIG9mIFZHUFJzID0gKHZncHJfc2l6ZSArIDEpICogNCAgICAobm9uLXplcm8gdmFsdWUpICAgLy9GSVhNRSBmb3IgR0ZYLCB6ZXJvIGlzIHBvc3NpYmxlCiAgICAvL2RldGVybWluZSBpdCBpcyB3YXZlMzIgb3Igd2F2ZTY0CiAgICBzX2FuZF9iMzIgICAgICAgbTAsIHNfd2F2ZV9zaXplLCAxCiAgICBzX2NtcF9lcV91MzIgICAgbTAsIDEKICAgIHNfY2JyYW5jaF9zY2MxICBMX1NBVkVfVkdQUl9XQVZFNjQKCiAgICAvL3poZW54dSBhZGRlZCBpdCBmb3Igc2F2ZSB2Z3ByIGZvciB3YXZlMzIKCXNfbHNobF9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsICBzX3NhdmVfYWxsb2Nfc2l6ZSwgNwkJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzICgzMiB0aHJlYWRzKjQpCglpZiAoU1dJWlpMRV9FTikKCQlzX2FkZF91MzIJCXNfc2F2ZV9idWZfcnNyYzIsIHNfc2F2ZV9idWZfcnNyYzIsIDB4MAkJCQkJCS8vRklYTUUgbmVlZCB0byB1c2Ugc3dpenpsZSB0byBlbmFibGUgYm91bmRzIGNoZWNraW5nPwoJZWxzZQoJCXNfbW92X2IzMgkJc19zYXZlX2J1Zl9yc3JjMiwgIDB4MTAwMDAwMAkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCgkKICAgIHNfbW92X2IzMiAJCW0wLCAweDAgCQkJCQkJCQkJCQkJCQkvL1ZHUFIgaW5pdGlhbCBpbmRleCB2YWx1ZSA9MAoJLy9zX3NldF9ncHJfaWR4X29uICBtMCwgMHgxCQkJCQkJCQkJCQkJCQkvL00wWzc6MF0gPSBNMFs3OjBdIGFuZCBNMFsxNToxMl0gPSAweDEKICAgIC8vc19hZGRfdTMyCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDB4MTAwMAkJCQkJLy9hZGQgMHgxMDAwIHNpbmNlIHdlIGNvbXBhcmUgbTAgYWdhaW5zdCBpdCBsYXRlciwgZG9lc24ndCBuZWVkIHRoaXMgaW4gZ2Z4MTAKCiAgTF9TQVZFX1ZHUFJfV0FWRTMyX0xPT1A6IAkJCQkJCQkJCQkKCXZfbW92cmVsc19iMzIgCQl2MCwgdjAJCQkJCQkJCQkJCQkJCQkvL3YwID0gdlswK20wXQkKCSAgICAKICAgIGlmKFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKSAgICAgICAKCQl0YnVmZmVyX3N0b3JlX2Zvcm1hdF94IHYwLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgZm9ybWF0OkJVRl9OVU1fRk9STUFUX0ZMT0FUIGZvcm1hdDogQlVGX0RBVEFfRk9STUFUXzMyIHNsYzoxIGdsYzoxCiAgICBlbHNlCgkJYnVmZmVyX3N0b3JlX2R3b3JkIHYwLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgc2xjOjEgZ2xjOjEKCWVuZAoKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkvL25leHQgdmdwciBpbmRleAoJc19hZGRfdTMyCQlzX3NhdmVfbWVtX29mZnNldCwgc19zYXZlX21lbV9vZmZzZXQsIDEyOAkJCQkJCS8vZXZlcnkgYnVmZmVyX3N0b3JlX2R3b3JkIGRvZXMgMTI4IGJ5dGVzCglzX2NtcF9sdF91MzIgCW0wLAlzX3NhdmVfYWxsb2Nfc2l6ZSAJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19zYXZlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1NBVkVfVkdQUl9XQVZFMzJfTE9PUAkJCQkJCQkJCQkJCS8vVkdQUiBzYXZlIGlzIGNvbXBsZXRlPwogICAgc19icmFuY2ggICAgTF9TQVZFX0xEUwogICAgLy9zYXZlIHZncHIgZm9yIHdhdmUzMiBlbmRzCgogIExfU0FWRV9WR1BSX1dBVkU2NDoKCXNfbHNobF9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsICBzX3NhdmVfYWxsb2Nfc2l6ZSwgOAkJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzICg2NCB0aHJlYWRzKjQpCglpZiAoU1dJWlpMRV9FTikKCQlzX2FkZF91MzIJCXNfc2F2ZV9idWZfcnNyYzIsIHNfc2F2ZV9idWZfcnNyYzIsIDB4MAkJCQkJCS8vRklYTUUgbmVlZCB0byB1c2Ugc3dpenpsZSB0byBlbmFibGUgYm91bmRzIGNoZWNraW5nPwoJZWxzZQoJCXNfbW92X2IzMgkJc19zYXZlX2J1Zl9yc3JjMiwgIDB4MTAwMDAwMAkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCgkKICAgIHNfbW92X2IzMiAJCW0wLCAweDAgCQkJCQkJCQkJCQkJCQkvL1ZHUFIgaW5pdGlhbCBpbmRleCB2YWx1ZSA9MAoJLy9zX3NldF9ncHJfaWR4X29uICBtMCwgMHgxCQkJCQkJCQkJCQkJCQkvL00wWzc6MF0gPSBNMFs3OjBdIGFuZCBNMFsxNToxMl0gPSAweDEKICAgIC8vc19hZGRfdTMyCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDB4MTAwMAkJCQkJLy9hZGQgMHgxMDAwIHNpbmNlIHdlIGNvbXBhcmUgbTAgYWdhaW5zdCBpdCBsYXRlciwgZG9lc24ndCBuZWVkIHRoaXMgaW4gZ2Z4MTAKCiAgTF9TQVZFX1ZHUFJfV0FWRTY0X0xPT1A6IAkJCQkJCQkJCQkKCXZfbW92cmVsc19iMzIgCQl2MCwgdjAJCQkJCQkJCQkJCQkJCQkvL3YwID0gdlswK20wXQkKCSAgICAKICAgIGlmKFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKSAgICAgICAKCQl0YnVmZmVyX3N0b3JlX2Zvcm1hdF94IHYwLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgZm9ybWF0OkJVRl9OVU1fRk9STUFUX0ZMT0FUIGZvcm1hdDogQlVGX0RBVEFfRk9STUFUXzMyIHNsYzoxIGdsYzoxCiAgICBlbHNlCgkJYnVmZmVyX3N0b3JlX2R3b3JkIHYwLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgc2xjOjEgZ2xjOjEKCWVuZAoKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkvL25leHQgdmdwciBpbmRleAoJc19hZGRfdTMyCQlzX3NhdmVfbWVtX29mZnNldCwgc19zYXZlX21lbV9vZmZzZXQsIDI1NgkJCQkJCS8vZXZlcnkgYnVmZmVyX3N0b3JlX2R3b3JkIGRvZXMgMjU2IGJ5dGVzCglzX2NtcF9sdF91MzIgCW0wLAlzX3NhdmVfYWxsb2Nfc2l6ZSAJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19zYXZlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1NBVkVfVkdQUl9XQVZFNjRfTE9PUAkJCQkJCQkJCQkJCS8vVkdQUiBzYXZlIGlzIGNvbXBsZXRlPwoJLy9zX3NldF9ncHJfaWR4X29mZgogICAgLy8KICAgIC8vQmVsb3cgcGFydCB3aWxsIGJlIHRoZSBzYXZlIHNoYXJlZCB2Z3ByIHBhcnQgKG5ldyBmb3IgZ2Z4MTApCiAgICBzX2dldHJlZ19iMzIgCXNfc2F2ZV9hbGxvY19zaXplLCBod3JlZyhIV19SRUdfTERTX0FMTE9DLFNRX1dBVkVfTERTX0FMTE9DX1ZHUFJfU0hBUkVEX1NJWkVfU0hJRlQsU1FfV0FWRV9MRFNfQUxMT0NfVkdQUl9TSEFSRURfU0laRV9TSVpFKSAJCQkvL3NoYXJlZF92Z3ByX3NpemUKICAgIHNfYW5kX2IzMgkJc19zYXZlX2FsbG9jX3NpemUsIHNfc2F2ZV9hbGxvY19zaXplLCAweEZGRkZGRkZGCQkJCS8vc2hhcmVkX3ZncHJfc2l6ZSBpcyB6ZXJvPwogICAgc19jYnJhbmNoX3NjYzAJTF9TQVZFX0xEUwkJCQkJCQkJCQkJCQkgICAgLy9ubyBzaGFyZWRfdmdwciB1c2VkPyBqdW1wIHRvIExfU0FWRV9MRFMKICAgIHNfbHNobF9iMzIgCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDMgCQkJCQkJLy9OdW1iZXIgb2YgU0hBUkVEX1ZHUFJzID0gc2hhcmVkX3ZncHJfc2l6ZSAqIDggICAgKG5vbi16ZXJvIHZhbHVlKQogICAgLy9tMCBub3cgaGFzIHRoZSB2YWx1ZSBvZiBub3JtYWwgdmdwciBjb3VudCwganVzdCBhZGQgdGhlIG0wIHdpdGggc2hhcmVkX3ZncHIgY291bnQgdG8gZ2V0IHRoZSB0b3RhbCBjb3VudC4KICAgIC8vc2F2ZSBzaGFyZWRfdmdwciB3aWxsIHN0YXJ0IGZyb20gdGhlIGluZGV4IG9mIG0wCiAgICBzX2FkZF91MzIgICAgICAgc19zYXZlX2FsbG9jX3NpemUsIHNfc2F2ZV9hbGxvY19zaXplLCBtMAogICAgc19tb3ZfYjMyCQlleGVjX2xvLCAweEZGRkZGRkZGCiAgICBzX21vdl9iMzIJCWV4ZWNfaGksIDB4MDAwMDAwMDAKICAgIExfU0FWRV9TSEFSRURfVkdQUl9XQVZFNjRfTE9PUDogCQkJCQkJCQkJCQoJdl9tb3ZyZWxzX2IzMiAJCXYwLCB2MAkJCQkJCQkJCQkJCQkJCS8vdjAgPSB2WzArbTBdCQoJYnVmZmVyX3N0b3JlX2R3b3JkIHYwLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgc2xjOjEgZ2xjOjEKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkvL25leHQgdmdwciBpbmRleAoJc19hZGRfdTMyCQlzX3NhdmVfbWVtX29mZnNldCwgc19zYXZlX21lbV9vZmZzZXQsIDEyOAkJCQkJCS8vZXZlcnkgYnVmZmVyX3N0b3JlX2R3b3JkIGRvZXMgMjU2IGJ5dGVzCglzX2NtcF9sdF91MzIgCW0wLAlzX3NhdmVfYWxsb2Nfc2l6ZSAJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19zYXZlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1NBVkVfU0hBUkVEX1ZHUFJfV0FWRTY0X0xPT1AJCQkJCQkJCQkvL1NIQVJFRF9WR1BSIHNhdmUgaXMgY29tcGxldGU/CiAgICAKCS8qICAgICAgCXNhdmUgTERTCSAgICAqLwoJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgTF9TQVZFX0xEUzoKCiAgICAvL09ubHkgY2hlY2sgdGhlIGZpcnN0IHdhdmUgbmVlZCBMRFMKCS8qICAgICAgdGhlIGZpcnN0IHdhdmUgaW4gdGhlIHRocmVhZGdyb3VwICAgICovCglzX2JhcnJpZXIJCQkJCQkJCQkJCQkJCQkJCQkvL0ZJWE1FICBub3QgcGVyZm9ybWFuY2Utb3B0aW1hbCAiTERTIGlzIHVzZWQ/IHdhaXQgZm9yIG90aGVyIHdhdmVzIGluIHRoZSBzYW1lIFRHIiAKCXNfYW5kX2IzMgkJc19zYXZlX3RtcCwgc193YXZlX3NpemUsIFNfU0FWRV9TUElfSU5JVF9GSVJTVF9XQVZFX01BU0sJCQkJCQkJCS8vZXhlYyBpcyBzdGlsbCB1c2VkIGhlcmUKCXNfY2JyYW5jaF9zY2MwCUxfU0FWRV9TR1BSCgkKCXNfbW92X2IzMgkJZXhlY19sbywgMHhGRkZGRkZGRiAJCQkJCQkJCQkJCS8vbmVlZCBldmVyeSB0aHJlYWQgZnJvbSBub3cgb24KICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc193YXZlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMQogICAgc19jYnJhbmNoX3NjYzEgIExfRU5BQkxFX1NBVkVfTERTX0VYRUNfSEkgICAKICAgIHNfbW92X2IzMgkJZXhlY19oaSwgMHgwMDAwMDAwMAogICAgc19icmFuY2ggICAgICAgIExfU0FWRV9MRFNfTk9STUFMCiAgTF9FTkFCTEVfU0FWRV9MRFNfRVhFQ19ISToKCXNfbW92X2IzMgkJZXhlY19oaSwgMHhGRkZGRkZGRgogIExfU0FWRV9MRFNfTk9STUFMOgkKCXNfZ2V0cmVnX2IzMiAJc19zYXZlX2FsbG9jX3NpemUsIGh3cmVnKEhXX1JFR19MRFNfQUxMT0MsU1FfV0FWRV9MRFNfQUxMT0NfTERTX1NJWkVfU0hJRlQsU1FfV0FWRV9MRFNfQUxMT0NfTERTX1NJWkVfU0laRSkgCQkJLy9sZHNfc2l6ZQoJc19hbmRfYjMyCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDB4RkZGRkZGRkYJCQkJLy9sZHNfc2l6ZSBpcyB6ZXJvPwoJc19jYnJhbmNoX3NjYzAJTF9TQVZFX1NHUFIJCQkJCQkJCQkJCQkJCS8vbm8gbGRzIHVzZWQ/IGp1bXAgdG8gTF9TQVZFX1ZHUFIKCXNfbHNobF9iMzIgCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDYgCQkJCQkJLy9MRFMgc2l6ZSBpbiBkd29yZHMgPSBsZHNfc2l6ZSAqIDY0ZHcKCXNfbHNobF9iMzIgCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDIgCQkJCQkJLy9MRFMgc2l6ZSBpbiBieXRlcwoJc19tb3ZfYjMyCQlzX3NhdmVfYnVmX3JzcmMyLCAgc19zYXZlX2FsbG9jX3NpemUgIAkJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzCglpZiAoU1dJWlpMRV9FTikKCQlzX2FkZF91MzIJCXNfc2F2ZV9idWZfcnNyYzIsIHNfc2F2ZV9idWZfcnNyYzIsIDB4MAkJCQkJCS8vRklYTUUgbmVlZCB0byB1c2Ugc3dpenpsZSB0byBlbmFibGUgYm91bmRzIGNoZWNraW5nPwoJZWxzZQoJCXNfbW92X2IzMgkJc19zYXZlX2J1Zl9yc3JjMiwgIDB4MTAwMDAwMAkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCgogICAgLy9sb2FkIDB+NjMqNChieXRlIGFkZHJlc3MpIHRvIHZncHIgdjE1CiAgICB2X21iY250X2xvX3UzMl9iMzIgdjAsIC0xLCAwCiAgICB2X21iY250X2hpX3UzMl9iMzIgdjAsIC0xLCB2MAogICAgdl9tdWxfdTMyX3UyNCB2MCwgNCwgdjAKCiAgICBzX2FuZF9iMzIgICAgICAgbTAsIHNfd2F2ZV9zaXplLCAxCiAgICBzX2NtcF9lcV91MzIgICAgbTAsIDEKICAgIHNfbW92X2IzMiAJCW0wLCAweDAKICAgIHNfY2JyYW5jaF9zY2MxICBMX1NBVkVfTERTX0xPT1BfVzY0CgogIExfU0FWRV9MRFNfTE9PUF9XMzI6CQkJCQkJCQkJCglpZiAoU0FWRV9MRFMpCiAgICBkc19yZWFkX2IzMiB2MSwgdjAKICAgIHNfd2FpdGNudCAwCQkJCQkJCQkJCQkJCQkgICAgLy9lbnN1cmUgZGF0YSByZWFkeQogICAgYnVmZmVyX3N0b3JlX2R3b3JkIHYxLCB2MCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQgc2xjOjEgZ2xjOjEKCS8vYnVmZmVyX3N0b3JlX2xkc19kd29yZAlzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCBsZHM6MSAgICAgICAgICAgICAgIC8vc2F2ZSBsZHMgdG8gbWVtb3J5IGRvZXNuJ3QgZXhpc3QgaW4gMTAKCWVuZAoJc19hZGRfdTMyCQltMCwgbTAsIDEyOAkJCQkJCQkJCQkJCQkJCS8vZXZlcnkgYnVmZmVyX3N0b3JlX2xkcyBkb2VzIDEyOCBieXRlcwoJc19hZGRfdTMyCQlzX3NhdmVfbWVtX29mZnNldCwgc19zYXZlX21lbV9vZmZzZXQsIDEyOAkJCQkJCQkvL21lbSBvZmZzZXQgaW5jcmVhc2VkIGJ5IDEyOCBieXRlcwogICAgdl9hZGRfbmNfdTMyICAgIHYwLCB2MCwgMTI4CglzX2NtcF9sdF91MzIJbTAsIHNfc2F2ZV9hbGxvY19zaXplCQkJCQkJCQkJCQkJLy9zY2M9KG0wIDwgc19zYXZlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxICBMX1NBVkVfTERTX0xPT1BfVzMyCQkJCQkJCQkJCQkJCS8vTERTIHNhdmUgaXMgY29tcGxldGU/CiAgICBzX2JyYW5jaCAgICAgICAgTF9TQVZFX1NHUFIKCiAgTF9TQVZFX0xEU19MT09QX1c2NDoJCQkJCQkJCQkKCWlmIChTQVZFX0xEUykKICAgIGRzX3JlYWRfYjMyIHYxLCB2MAogICAgc193YWl0Y250IDAJCQkJCQkJCQkJCQkJCSAgICAvL2Vuc3VyZSBkYXRhIHJlYWR5CiAgICBidWZmZXJfc3RvcmVfZHdvcmQgdjEsIHYwLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCBzbGM6MSBnbGM6MQoJLy9idWZmZXJfc3RvcmVfbGRzX2R3b3JkCXNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0IGxkczoxICAgICAgICAgICAgICAgLy9zYXZlIGxkcyB0byBtZW1vcnkgZG9lc24ndCBleGlzdCBpbiAxMAoJZW5kCglzX2FkZF91MzIJCW0wLCBtMCwgMjU2CQkJCQkJCQkJCQkJCQkJLy9ldmVyeSBidWZmZXJfc3RvcmVfbGRzIGRvZXMgMjU2IGJ5dGVzCglzX2FkZF91MzIJCXNfc2F2ZV9tZW1fb2Zmc2V0LCBzX3NhdmVfbWVtX29mZnNldCwgMjU2CQkJCQkJCS8vbWVtIG9mZnNldCBpbmNyZWFzZWQgYnkgMjU2IGJ5dGVzCiAgICB2X2FkZF9uY191MzIgICAgdjAsIHYwLCAyNTYKCXNfY21wX2x0X3UzMgltMCwgc19zYXZlX2FsbG9jX3NpemUJCQkJCQkJCQkJCQkvL3NjYz0obTAgPCBzX3NhdmVfYWxsb2Nfc2l6ZSkgPyAxIDogMAoJc19jYnJhbmNoX3NjYzEgIExfU0FWRV9MRFNfTE9PUF9XNjQJCQkJCQkJCQkJCQkJLy9MRFMgc2F2ZSBpcyBjb21wbGV0ZT8KICAgCgkKCS8qICAgICAgCXNhdmUgU0dQUnMJICAgICovCgkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCS8vc19nZXRyZWdfYjMyIAlzX3NhdmVfYWxsb2Nfc2l6ZSwgaHdyZWcoSFdfUkVHX0dQUl9BTExPQyxTUV9XQVZFX0dQUl9BTExPQ19TR1BSX1NJWkVfU0hJRlQsU1FfV0FWRV9HUFJfQUxMT0NfU0dQUl9TSVpFX1NJWkUpIAkJCQkvL3NwZ3Jfc2l6ZQoJLy9zX2FkZF91MzIgCQlzX3NhdmVfYWxsb2Nfc2l6ZSwgc19zYXZlX2FsbG9jX3NpemUsIDEKCS8vc19sc2hsX2IzMiAJCXNfc2F2ZV9hbGxvY19zaXplLCBzX3NhdmVfYWxsb2Nfc2l6ZSwgNCAJCQkJCQkvL051bWJlciBvZiBTR1BScyA9IChzZ3ByX3NpemUgKyAxKSAqIDE2ICAgKG5vbi16ZXJvIHZhbHVlKSAKCS8vc19sc2hsX2IzMiAJCXNfc2F2ZV9hbGxvY19zaXplLCBzX3NhdmVfYWxsb2Nfc2l6ZSwgMyAJCQkJCQkvL0luIGdmeDEwLCBOdW1iZXIgb2YgU0dQUnMgPSAoc2dwcl9zaXplICsgMSkgKiA4ICAgKG5vbi16ZXJvIHZhbHVlKSAKICBMX1NBVkVfU0dQUjoKICAgIC8vbmVlZCB0byBsb29rIGF0IGl0IGlzIHdhdmUzMiBvciB3YXZlNjQKICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc193YXZlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMQogICAgc19jYnJhbmNoX3NjYzEgIExfU0FWRV9TR1BSX1ZNRU1fV0FWRTY0CiAgICBpZiAoU0dQUl9TQVZFX1VTRV9TUUMpCgkJc19sc2hsX2IzMgkJc19zYXZlX2J1Zl9yc3JjMiwJc19zZ3ByX3NhdmVfbnVtLCAyCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzCiAgICBlbHNlCiAgICAgICAgc19sc2hsX2IzMgkJc19zYXZlX2J1Zl9yc3JjMiwJc19zZ3ByX3NhdmVfbnVtLCA3CQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzICgzMiB0aHJlYWRzKQogICAgZW5kCiAgICBzX2JyYW5jaCAgICBMX1NBVkVfU0dQUl9DT05UICAgIAogIExfU0FWRV9TR1BSX1ZNRU1fV0FWRTY0OgoJaWYgKFNHUFJfU0FWRV9VU0VfU1FDKQoJCXNfbHNobF9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsCXNfc2dwcl9zYXZlX251bSwgMgkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcyAKCWVsc2UKCQlzX2xzaGxfYjMyCQlzX3NhdmVfYnVmX3JzcmMyLAlzX3NncHJfc2F2ZV9udW0sIDgJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMgKDY0IHRocmVhZHMpCgllbmQKICBMX1NBVkVfU0dQUl9DT05UOgoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3NhdmVfYnVmX3JzcmMyLCBzX3NhdmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMKCWVuZAoJCgkvL3NfbW92X2IzMiAJCW0wLCAweDAgCQkJCQkJCQkJCQkJCQkvL1NHUFIgaW5pdGlhbCBpbmRleCB2YWx1ZSA9MAkJCiAgICAvL3Nfbm9wICAgICAgICAgICAweDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYW51YWxseSBpbnNlcnRlZCB3YWl0IHN0YXRlcwoJCiAgICBzX2FuZF9iMzIgICAgICAgbTAsIHNfd2F2ZV9zaXplLCAxCiAgICBzX2NtcF9lcV91MzIgICAgbTAsIDEKICAgIAogICAgc19tb3ZfYjMyIAkJbTAsIDB4MCAJCQkJCQkJCQkJCQkJCS8vU0dQUiBpbml0aWFsIGluZGV4IHZhbHVlID0wCQkKICAgIHNfbm9wICAgICAgICAgICAweDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYW51YWxseSBpbnNlcnRlZCB3YWl0IHN0YXRlcwoKICAgIHNfY2JyYW5jaF9zY2MxICBMX1NBVkVfU0dQUl9MT09QX1dBVkU2NAoKICBMX1NBVkVfU0dQUl9MT09QX1dBVkUzMjogCQkJCQkJCQkJCQoJc19tb3ZyZWxzX2IzMiAJczAsIHMwIAkJCQkJCQkJCQkJCQkJCS8vczAgPSBzWzArbTBdCiAgICAvL3poZW54dSwgYWRkaW5nIG9uZSBtb3JlIGFyZ3VtZW50IHRvIHNhdmUgc2dwciBmdW5jdGlvbiwgdGhpcyBpcyBvbmx5IGZvciB2bWVtLCB1c2luZyBzcWMgaXMgbm90IGNoYW5nZSAgICAKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmUzMihzMCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkJCQkJLy9QVjogdGhlIGJlc3QgcGVyZm9ybWFuY2Ugc2hvdWxkIGJlIHVzaW5nIHNfYnVmZmVyX3N0b3JlX2R3b3JkeDQKCXNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkvL25leHQgc2dwciBpbmRleAoJc19jbXBfbHRfdTMyIAltMCwgc19zZ3ByX3NhdmVfbnVtIAkJCQkJCQkJCQkJLy9zY2MgPSAobTAgPCBzX3NncHJfc2F2ZV9udW0pID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1NBVkVfU0dQUl9MT09QX1dBVkUzMgkJCQkJCQkJCQkJCS8vU0dQUiBzYXZlIGlzIGNvbXBsZXRlPwogICAgc19icmFuY2ggICAgTF9TQVZFX0hXUkVHCgogIExfU0FWRV9TR1BSX0xPT1BfV0FWRTY0OiAJCQkJCQkJCQkJCglzX21vdnJlbHNfYjMyIAlzMCwgczAgCQkJCQkJCQkJCQkJCQkJLy9zMCA9IHNbMCttMF0KICAgIC8vemhlbnh1LCBhZGRpbmcgb25lIG1vcmUgYXJndW1lbnQgdG8gc2F2ZSBzZ3ByIGZ1bmN0aW9uLCB0aGlzIGlzIG9ubHkgZm9yIHZtZW0sIHVzaW5nIHNxYyBpcyBub3QgY2hhbmdlICAgIAoJd3JpdGVfc2dwcl90b19tZW1fd2F2ZTY0KHMwLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCQkJCQkvL1BWOiB0aGUgYmVzdCBwZXJmb3JtYW5jZSBzaG91bGQgYmUgdXNpbmcgc19idWZmZXJfc3RvcmVfZHdvcmR4NAoJc19hZGRfdTMyCQltMCwgbTAsIDEJCQkJCQkJCQkJCQkJCS8vbmV4dCBzZ3ByIGluZGV4CglzX2NtcF9sdF91MzIgCW0wLCBzX3NncHJfc2F2ZV9udW0gCQkJCQkJCQkJCQkvL3NjYyA9IChtMCA8IHNfc2dwcl9zYXZlX251bSkgPyAxIDogMAoJc19jYnJhbmNoX3NjYzEgCUxfU0FWRV9TR1BSX0xPT1BfV0FWRTY0CQkJCQkJCQkJCQkJLy9TR1BSIHNhdmUgaXMgY29tcGxldGU/CgoJCgkvKiAJCXNhdmUgSFcgcmVnaXN0ZXJzCSovCgkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICBMX1NBVkVfSFdSRUc6CiAgICBzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsIDB4NAkJCQkJCQkJLy9OVU1fUkVDT1JEUwlpbiBieXRlcwoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3NhdmVfYnVmX3JzcmMyLCBzX3NhdmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMKCWVuZAoKICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc193YXZlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMQogICAgc19jYnJhbmNoX3NjYzEgIExfU0FWRV9IV1JFR19XQVZFNjQKCQoJd3JpdGVfc2dwcl90b19tZW1fd2F2ZTMyKHNfc2F2ZV9tMCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkJCS8vTTAKCglpZiAoKEVNVV9SVU5fSEFDSykgJiYgKEVNVV9SVU5fSEFDS19TQVZFX0ZJUlNUX1RJTUUpKSAgICAgIAoJCXNfYWRkX3UzMiBzX3NhdmVfcGNfbG8sIHNfc2F2ZV9wY19sbywgNCAgICAgICAgICAgICAvL3BjWzMxOjBdKzQKCQlzX2FkZGNfdTMyIHNfc2F2ZV9wY19oaSwgc19zYXZlX3BjX2hpLCAweDAJCQkvL2NhcnJ5IGJpdCBvdmVyCgllbmQKCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX3BjX2xvLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCQkJLy9QQwoJd3JpdGVfc2dwcl90b19tZW1fd2F2ZTMyKHNfc2F2ZV9wY19oaSwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmUzMihzX3NhdmVfZXhlY19sbywgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkJLy9FWEVDCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX2V4ZWNfaGksIHNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQywgVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX3N0YXR1cywgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkJLy9TVEFUVVMgCgkKCS8vc19zYXZlX3RyYXBzdHMgY29uZmxpY3RzIHdpdGggc19zYXZlX2FsbG9jX3NpemUKCXNfZ2V0cmVnX2IzMiAgICBzX3NhdmVfdHJhcHN0cywgaHdyZWcoSFdfUkVHX1RSQVBTVFMpCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX3RyYXBzdHMsIHNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQywgVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpCQkJCS8vVFJBUFNUUwoJCgkvL3dyaXRlX3NncHJfdG9fbWVtX3dhdmUzMihzX3NhdmVfeG5hY2tfbWFza19sbywgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkvL1hOQUNLX01BU0tfTE8KCXdyaXRlX3NncHJfdG9fbWVtX3dhdmUzMihzX3NhdmVfeG5hY2tfbWFzaywgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkvL1hOQUNLX01BU0tfSEkKCQoJLy91c2Ugc19zYXZlX3RtcCB3b3VsZCBpbnRyb2R1Y2UgY29uZmxpY3QgaGVyZSBiZXR3ZWVuIHNfc2F2ZV90bXAgYW5kIHNfc2F2ZV9idWZfcnNyYzIKCXNfZ2V0cmVnX2IzMiAJc19zYXZlX20wLCBod3JlZyhIV19SRUdfTU9ERSkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy9NT0RFCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX20wLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQogICAgaWYoU0FWRV9SRVNUT1JFX0hXSURfRERJRCkKICAgIHNfZ2V0cmVnX2IzMiAJc19zYXZlX20wLCBod3JlZyhIV19SRUdfSFdfSUQxKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvL0hXX0lEMSwgaGFuZGxlciByZWNvcmRzIHRoZSBTRS9TQS9XR1AvU0lNRC93YXZlIG9mIHRoZSBvcmlnaW5hbCB3YXZlCiAgICB3cml0ZV9zZ3ByX3RvX21lbV93YXZlMzIoc19zYXZlX20wLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQogICAgZW5kCiAgICBzX2JyYW5jaCAgIExfU19QR01fRU5EX1NBVkVECgogIExfU0FWRV9IV1JFR19XQVZFNjQ6CiAgICB3cml0ZV9zZ3ByX3RvX21lbV93YXZlNjQoc19zYXZlX20wLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCQkJLy9NMAoKCWlmICgoRU1VX1JVTl9IQUNLKSAmJiAoRU1VX1JVTl9IQUNLX1NBVkVfRklSU1RfVElNRSkpICAgICAgCgkJc19hZGRfdTMyIHNfc2F2ZV9wY19sbywgc19zYXZlX3BjX2xvLCA0ICAgICAgICAgICAgIC8vcGNbMzE6MF0rNAoJCXNfYWRkY191MzIgc19zYXZlX3BjX2hpLCBzX3NhdmVfcGNfaGksIDB4MAkJCS8vY2FycnkgYml0IG92ZXIKCWVuZAoKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfcGNfbG8sIHNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQywgVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpCQkJCQkvL1BDCgl3cml0ZV9zZ3ByX3RvX21lbV93YXZlNjQoc19zYXZlX3BjX2hpLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQoJd3JpdGVfc2dwcl90b19tZW1fd2F2ZTY0KHNfc2F2ZV9leGVjX2xvLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCQkvL0VYRUMKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfZXhlY19oaSwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfc3RhdHVzLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCQkvL1NUQVRVUyAKCQoJLy9zX3NhdmVfdHJhcHN0cyBjb25mbGljdHMgd2l0aCBzX3NhdmVfYWxsb2Nfc2l6ZQoJc19nZXRyZWdfYjMyICAgIHNfc2F2ZV90cmFwc3RzLCBod3JlZyhIV19SRUdfVFJBUFNUUykKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfdHJhcHN0cywgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikJCQkJLy9UUkFQU1RTCgkKCS8vd3JpdGVfc2dwcl90b19tZW1fd2F2ZTY0KHNfc2F2ZV94bmFja19tYXNrX2xvLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCS8vWE5BQ0tfTUFTS19MTwoJd3JpdGVfc2dwcl90b19tZW1fd2F2ZTY0KHNfc2F2ZV94bmFja19tYXNrLCBzX3NhdmVfYnVmX3JzcmMwLCBzX3NhdmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMsIFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKQkJCS8vWE5BQ0tfTUFTS19ISQoJCgkvL3VzZSBzX3NhdmVfdG1wIHdvdWxkIGludHJvZHVjZSBjb25mbGljdCBoZXJlIGJldHdlZW4gc19zYXZlX3RtcCBhbmQgc19zYXZlX2J1Zl9yc3JjMgoJc19nZXRyZWdfYjMyIAlzX3NhdmVfbTAsIGh3cmVnKEhXX1JFR19NT0RFKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvL01PREUKCXdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfbTAsIHNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQywgVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpCgoKICAgIGlmKFNBVkVfUkVTVE9SRV9IV0lEX0RESUQpCiAgICBzX2dldHJlZ19iMzIgCXNfc2F2ZV9tMCwgaHdyZWcoSFdfUkVHX0hXX0lEMSkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLy9IV19JRDEsIGhhbmRsZXIgcmVjb3JkcyB0aGUgU0UvU0EvV0dQL1NJTUQvd2F2ZSBvZiB0aGUgb3JpZ2luYWwgd2F2ZQogICAgd3JpdGVfc2dwcl90b19tZW1fd2F2ZTY0KHNfc2F2ZV9tMCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikKCgkvKiAJCXNhdmUgRERJRAkqLwoJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgTF9TQVZFX0RESUQ6CiAgICAvL0VYRUMgaGFzIGJlZW4gc2F2ZWQsIG5vIHZlY3RvciBpbnN0IGZvbGxvd2luZwogICAgc19tb3ZfYjMyCWV4ZWNfbG8sIDB4ODAwMDAwMDAgICAgLy9TZXQgTVNCIHRvIDEuIENsZWFyZWQgd2hlbiBkcmF3IGluZGV4IGlzIHJldHVybmVkCiAgICBzX3NlbmRtc2cgc2VuZG1zZyhNU0dfR0VUX0RESUQpCgogIExfV0FJVF9ERElEX0xPT1A6ICAgIAogICAgc19ub3AJCTcJCQkvLyBzbGVlcCBhIGJpdAogICAgc19iaXRjbXAwX2IzMiBleGVjX2xvLCAzMQkvLyB0ZXN0IHRvIHNlZSBpZiBNU0IgaXMgY2xlYXJlZCwgbWVhbmluZyBkb25lCiAgICBzX2NicmFuY2hfc2NjMAlMX1dBSVRfRERJRF9MT09QCgogICAgc19tb3ZfYjMyCXNfc2F2ZV9tMCwgZXhlY19sbwoKCiAgICBzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsIDB4NAkJCQkJCQkJLy9OVU1fUkVDT1JEUwlpbiBieXRlcwoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3NhdmVfYnVmX3JzcmMyLCBzX3NhdmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfc2F2ZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMKCWVuZAogICAgc19hbmRfYjMyICAgICAgIG0wLCBzX3dhdmVfc2l6ZSwgMQogICAgc19jbXBfZXFfdTMyICAgIG0wLCAxCiAgICBzX2NicmFuY2hfc2NjMSAgTF9TQVZFX0RESURfV0FWRTY0CgogICAgd3JpdGVfc2dwcl90b19tZW1fd2F2ZTMyKHNfc2F2ZV9tMCwgc19zYXZlX2J1Zl9yc3JjMCwgc19zYXZlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDLCBVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikgCgogIExfU0FWRV9ERElEX1dBVkU2NDoKICAgIHdyaXRlX3NncHJfdG9fbWVtX3dhdmU2NChzX3NhdmVfbTAsIHNfc2F2ZV9idWZfcnNyYzAsIHNfc2F2ZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQywgVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpIAoKICAgIGVuZAogICAKICBMX1NfUEdNX0VORF9TQVZFRDoKCS8qICAgICBTX1BHTV9FTkRfU0FWRUQgICovICAgIAkJCQkJCQkvL0ZJWE1FICBncmFwaGljcyBPTkxZCglpZiAoKEVNVV9SVU5fSEFDSykgJiYgKCFFTVVfUlVOX0hBQ0tfU0FWRV9OT1JNQUxfRVhJVCkpCQoJCXNfYW5kX2IzMiBzX3NhdmVfcGNfaGksIHNfc2F2ZV9wY19oaSwgMHgwMDAwZmZmZiAgICAvL3BjWzQ3OjMyXQoJCXNfYWRkX3UzMiBzX3NhdmVfcGNfbG8sIHNfc2F2ZV9wY19sbywgNCAgICAgICAgICAgICAvL3BjWzMxOjBdKzQKCQlzX2FkZGNfdTMyIHNfc2F2ZV9wY19oaSwgc19zYXZlX3BjX2hpLCAweDAJCQkvL2NhcnJ5IGJpdCBvdmVyCgkJc19yZmVfYjY0IHNfc2F2ZV9wY19sbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmV0dXJuIHRvIHRoZSBtYWluIHNoYWRlciBwcm9ncmFtCgllbHNlCgllbmQKCgkKICAgIHNfYnJhbmNoCUxfRU5EX1BHTQoJCgoJCQkJCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICAgICAgICAgICAgICAgICAJcmVzdG9yZSByb3V0aW5lCQkJCQkJICAgICAgICAgICAgICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpMX1JFU1RPUkU6CiAgICAvKiAgICAgIFNldHVwIFJlc291cmNlIENvbnRhbnRzICAgICovCiAgICBpZiAoKEVNVV9SVU5fSEFDSykgJiYgKCFFTVVfUlVOX0hBQ0tfUkVTVE9SRV9OT1JNQUwpKQoJCS8vY2FsY3VsYXRlIHdkX2FkZHIgdXNpbmcgYWJzb2x1dGUgdGhyZWFkIGlkCgkJdl9yZWFkbGFuZV9iMzIgc19yZXN0b3JlX3RtcCwgdjksIDAKICAgICAgICAvL2RldGVybWluZSBpdCBpcyB3YXZlMzIgb3Igd2F2ZTY0CiAgICAgICAgc19nZXRyZWdfYjMyIAlzX3Jlc3RvcmVfc2l6ZSwgaHdyZWcoSFdfUkVHX0lCX1NUUzIsU1FfV0FWRV9JQl9TVFMyX1dBVkU2NF9TSElGVCxTUV9XQVZFX0lCX1NUUzJfV0FWRTY0X1NJWkUpIC8vY2hhbmdlIHRvIHR0bXAxMwogICAgICAgIHNfY21wX2VxX3UzMiAgICBzX3Jlc3RvcmVfc2l6ZSwgMAogICAgICAgIHNfY2JyYW5jaF9zY2MxICBMX1JFU1RPUkVfV0FWRTMyCiAgICAgICAgc19sc2hyX2IzMiBzX3Jlc3RvcmVfdG1wLCBzX3Jlc3RvcmVfdG1wLCA2IC8vU0FWRSBXQVZFNjQKICAgICAgICBzX2JyYW5jaCAgICBMX1JFU1RPUkVfQ09OCiAgICBMX1JFU1RPUkVfV0FWRTMyOgogICAgICAgIHNfbHNocl9iMzIgc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX3RtcCwgNSAvL1NBVkUgV0FWRTMyCiAgICBMX1JFU1RPUkVfQ09OOgoJCXNfbXVsX2kzMiBzX3Jlc3RvcmVfdG1wLCBzX3Jlc3RvcmVfdG1wLCBXQVZFX1NQQUNFCgkJc19hZGRfaTMyIHNfcmVzdG9yZV9zcGlfaW5pdF9sbywgc19yZXN0b3JlX3RtcCwgV0dfQkFTRV9BRERSX0xPCgkJc19tb3ZfYjMyIHNfcmVzdG9yZV9zcGlfaW5pdF9oaSwgV0dfQkFTRV9BRERSX0hJCgkJc19hbmRfYjMyIHNfcmVzdG9yZV9zcGlfaW5pdF9oaSwgc19yZXN0b3JlX3NwaV9pbml0X2hpLCBDVFhfUkVTVE9SRV9DT05UUk9MCQoJZWxzZQoJZW5kCgkKICAgIHNfbW92X2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMCwgCXNfcmVzdG9yZV9zcGlfaW5pdF9sbwkJCQkJCQkJCQkJCQkJCS8vYmFzZV9hZGRyX2xvCglzX2FuZF9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzEsIAlzX3Jlc3RvcmVfc3BpX2luaXRfaGksIDB4MDAwMEZGRkYJCQkJCQkJCQkJCQkvL2Jhc2VfYWRkcl9oaQoJc19vcl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzEsIAlzX3Jlc3RvcmVfYnVmX3JzcmMxLCAgU19SRVNUT1JFX0JVRl9SU1JDX1dPUkQxX1NUUklERQogICAgc19tb3ZfYjMyICAgICAgIHNfcmVzdG9yZV9idWZfcnNyYzIsICAgCTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbml0aWFsIHZhbHVlID0gMCAoaW4gYnl0ZXMpCglzX21vdl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzMsIAlTX1JFU1RPUkVfQlVGX1JTUkNfV09SRDNfTUlTQwoJc19hbmRfYjMyCQlzX3Jlc3RvcmVfdG1wLCAgICAgICAgIAlzX3Jlc3RvcmVfc3BpX2luaXRfaGksIFNfUkVTVE9SRV9TUElfSU5JVF9BVENfTUFTSwkJCglzX2xzaHJfYjMyCQlzX3Jlc3RvcmVfdG1wLCAgCQlzX3Jlc3RvcmVfdG1wLCAoU19SRVNUT1JFX1NQSV9JTklUX0FUQ19TSElGVC1TUV9CVUZfUlNSQ19XT1JEMV9BVENfU0hJRlQpCQkvL2dldCBBVEMgYml0IGludG8gcG9zaXRpb24KCXNfb3JfYjMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMzLCAJc19yZXN0b3JlX2J1Zl9yc3JjMywgIHNfcmVzdG9yZV90bXAJCQkJCQkJCQkJCQkvL29yIEFUQwoJc19hbmRfYjMyCQlzX3Jlc3RvcmVfdG1wLCAgICAgICAgIAlzX3Jlc3RvcmVfc3BpX2luaXRfaGksIFNfUkVTVE9SRV9TUElfSU5JVF9NVFlQRV9NQVNLCQkKCXNfbHNocl9iMzIJCXNfcmVzdG9yZV90bXAsICAJCXNfcmVzdG9yZV90bXAsIChTX1JFU1RPUkVfU1BJX0lOSVRfTVRZUEVfU0hJRlQtU1FfQlVGX1JTUkNfV09SRDNfTVRZUEVfU0hJRlQpCS8vZ2V0IE1UWVBFIGJpdHMgaW50byBwb3NpdGlvbgoJc19vcl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzMsIAlzX3Jlc3RvcmVfYnVmX3JzcmMzLCAgc19yZXN0b3JlX3RtcAkJCQkJCQkJCQkJCS8vb3IgTVRZUEUKICAgIC8vZGV0ZXJtaW5lIGl0IGlzIHdhdmUzMiBvciB3YXZlNjQKICAgIHNfZ2V0cmVnX2IzMiAJc19yZXN0b3JlX3NpemUsIGh3cmVnKEhXX1JFR19JQl9TVFMyLFNRX1dBVkVfSUJfU1RTMl9XQVZFNjRfU0hJRlQsU1FfV0FWRV9JQl9TVFMyX1dBVkU2NF9TSVpFKQogICAgc19vcl9iMzIgICAgICAgIHNfcmVzdG9yZV9zaXplLCBzX3Jlc3RvcmVfc3BpX2luaXRfaGksICAgIHNfcmVzdG9yZV9zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zaGFyZSBzX3dhdmVfc2l6ZSB3aXRoIGV4ZWNfaGkKCQoJLyogCQlnbG9iYWwgbWVtIG9mZnNldAkJCSovCglzX21vdl9iMzIJCXNfcmVzdG9yZV9tZW1fb2Zmc2V0LCAweDAJCQkJCQkJCS8vbWVtIG9mZnNldCBpbml0aWFsIHZhbHVlID0gMAoKICAgICAgICAvKiAgICAgIAlyZXN0b3JlIFZHUFJzCSAgICAqLwoJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgTF9SRVNUT1JFX1ZHUFI6CiAgCiAJc19tb3ZfYjMyCQlleGVjX2xvLCAweEZGRkZGRkZGIAkJCQkJCQkJCQkJCQkvL25lZWQgZXZlcnkgdGhyZWFkIGZyb20gbm93IG9uICAgLy9iZSBjb25zaXN0ZW50IHdpdGggU0FWRSBhbHRob3VnaCBjYW4gYmUgbW92ZWQgYWhlYWQKICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc19yZXN0b3JlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMQogICAgc19jYnJhbmNoX3NjYzEgIExfRU5BQkxFX1JFU1RPUkVfVkdQUl9FWEVDX0hJICAgCiAgICBzX21vdl9iMzIJCWV4ZWNfaGksIDB4MDAwMDAwMDAKICAgIHNfYnJhbmNoICAgICAgICBMX1JFU1RPUkVfVkdQUl9OT1JNQUwKICBMX0VOQUJMRV9SRVNUT1JFX1ZHUFJfRVhFQ19ISToKCXNfbW92X2IzMgkJZXhlY19oaSwgMHhGRkZGRkZGRgogIExfUkVTVE9SRV9WR1BSX05PUk1BTDoJCglzX2dldHJlZ19iMzIgCXNfcmVzdG9yZV9hbGxvY19zaXplLCBod3JlZyhIV19SRUdfR1BSX0FMTE9DLFNRX1dBVkVfR1BSX0FMTE9DX1ZHUFJfU0laRV9TSElGVCxTUV9XQVZFX0dQUl9BTExPQ19WR1BSX1NJWkVfU0laRSkgCS8vdnBncl9zaXplCglzX2FkZF91MzIgCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDEKCXNfbHNobF9iMzIgCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDIgCQkJCQkJCS8vTnVtYmVyIG9mIFZHUFJzID0gKHZncHJfc2l6ZSArIDEpICogNCAgICAobm9uLXplcm8gdmFsdWUpCiAgICAvL2RldGVybWluZSBpdCBpcyB3YXZlMzIgb3Igd2F2ZTY0CiAgICBzX2FuZF9iMzIgICAgICAgbTAsIHNfcmVzdG9yZV9zaXplLCAxCiAgICBzX2NtcF9lcV91MzIgICAgbTAsIDEKICAgIHNfY2JyYW5jaF9zY2MxICBMX1JFU1RPUkVfVkdQUl9XQVZFNjQKCiAgICBzX2xzaGxfYjMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLCAgc19yZXN0b3JlX2FsbG9jX3NpemUsIDcJCQkJCQkgICAgLy9OVU1fUkVDT1JEUyBpbiBieXRlcyAoMzIgdGhyZWFkcyo0KQoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLCBzX3Jlc3RvcmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCQoKCXNfbW92X2IzMgkJc19yZXN0b3JlX21lbV9vZmZzZXRfc2F2ZSwgc19yZXN0b3JlX21lbV9vZmZzZXQJCQkJCQkJLy8gcmVzdG9yZSBzdGFydCB3aXRoIHYxLCB2MCB3aWxsIGJlIHRoZSBsYXN0CglzX2FkZF91MzIJCXNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgMTI4CiAgICBzX21vdl9iMzIgCQltMCwgMSAJCQkJCQkJCQkJCQkJCQkJCS8vVkdQUiBpbml0aWFsIGluZGV4IHZhbHVlID0gMQoJLy9zX3NldF9ncHJfaWR4X29uICBtMCwgMHg4CQkJCQkJCQkJCQkJCQkJCS8vTTBbNzowXSA9IE0wWzc6MF0gYW5kIE0wWzE1OjEyXSA9IDB4OAogICAgLy9zX2FkZF91MzIJCXNfcmVzdG9yZV9hbGxvY19zaXplLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgMHg4MDAwCQkJCQkJLy9hZGQgMHg4MDAwIHNpbmNlIHdlIGNvbXBhcmUgbTAgYWdhaW5zdCBpdCBsYXRlciwgbWlnaHQgbm90IG5lZWQgdGhpcyBpbiBnZngxMAkKCiAgTF9SRVNUT1JFX1ZHUFJfV0FWRTMyX0xPT1A6IAkJCQkJCQkJCQkKICAgIGlmKFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKSAgICAgICAKCQl0YnVmZmVyX2xvYWRfZm9ybWF0X3ggdjAsIHYwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCBmb3JtYXQ6QlVGX05VTV9GT1JNQVRfRkxPQVQgZm9ybWF0OiBCVUZfREFUQV9GT1JNQVRfMzIgc2xjOjEgZ2xjOjEKICAgIGVsc2UKCQlidWZmZXJfbG9hZF9kd29yZCB2MCwgdjAsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0CXNsYzoxIGdsYzoxCQoJZW5kCglzX3dhaXRjbnQJCXZtY250KDApCQkJCQkJCQkJCQkJCQkJCS8vZW5zdXJlIGRhdGEgcmVhZHkKCXZfbW92cmVsZF9iMzIJCXYwLCB2MAkJCQkJCQkJCQkJCQkJCQkJLy92WzArbTBdID0gdjAKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkJCS8vbmV4dCB2Z3ByIGluZGV4CglzX2FkZF91MzIJCXNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgMTI4CQkJCQkJCS8vZXZlcnkgYnVmZmVyX2xvYWRfZHdvcmQgZG9lcyAxMjggYnl0ZXMKCXNfY21wX2x0X3UzMiAJbTAsCXNfcmVzdG9yZV9hbGxvY19zaXplIAkJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19yZXN0b3JlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1JFU1RPUkVfVkdQUl9XQVZFMzJfTE9PUAkJCQkJCQkJCQkJCQkJLy9WR1BSIHJlc3RvcmUgKGV4Y2VwdCB2MCkgaXMgY29tcGxldGU/CgkvL3Nfc2V0X2dwcl9pZHhfb2ZmCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLyogVkdQUiByZXN0b3JlIG9uIHYwICovCiAgICBpZihVU0VfTVRCVUZfSU5TVEVBRF9PRl9NVUJVRikgICAgICAgCgkJdGJ1ZmZlcl9sb2FkX2Zvcm1hdF94IHYwLCB2MCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXRfc2F2ZSBmb3JtYXQ6QlVGX05VTV9GT1JNQVRfRkxPQVQgZm9ybWF0OiBCVUZfREFUQV9GT1JNQVRfMzIgc2xjOjEgZ2xjOjEKICAgIGVsc2UKCQlidWZmZXJfbG9hZF9kd29yZCB2MCwgdjAsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0X3NhdmUJc2xjOjEgZ2xjOjEJCgllbmQKCiAgICBzX2JyYW5jaCAgICBMX1JFU1RPUkVfTERTCgogIExfUkVTVE9SRV9WR1BSX1dBVkU2NDoKICAgIHNfbHNobF9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsICBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgOAkJCQkJCSAgICAvL05VTV9SRUNPUkRTIGluIGJ5dGVzICg2NCB0aHJlYWRzKjQpCglpZiAoU1dJWlpMRV9FTikKCQlzX2FkZF91MzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsIHNfcmVzdG9yZV9idWZfcnNyYzIsIDB4MAkJCQkJCS8vRklYTUUgbmVlZCB0byB1c2Ugc3dpenpsZSB0byBlbmFibGUgYm91bmRzIGNoZWNraW5nPwoJZWxzZQoJCXNfbW92X2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwgIDB4MTAwMDAwMAkJCQkJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzCgllbmQJCgoJc19tb3ZfYjMyCQlzX3Jlc3RvcmVfbWVtX29mZnNldF9zYXZlLCBzX3Jlc3RvcmVfbWVtX29mZnNldAkJCQkJCQkvLyByZXN0b3JlIHN0YXJ0IHdpdGggdjEsIHYwIHdpbGwgYmUgdGhlIGxhc3QKCXNfYWRkX3UzMgkJc19yZXN0b3JlX21lbV9vZmZzZXQsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCAyNTYKICAgIHNfbW92X2IzMiAJCW0wLCAxIAkJCQkJCQkJCQkJCQkJCQkJLy9WR1BSIGluaXRpYWwgaW5kZXggdmFsdWUgPSAxCiAgTF9SRVNUT1JFX1ZHUFJfV0FWRTY0X0xPT1A6IAkJCQkJCQkJCQkKICAgIGlmKFVTRV9NVEJVRl9JTlNURUFEX09GX01VQlVGKSAgICAgICAKCQl0YnVmZmVyX2xvYWRfZm9ybWF0X3ggdjAsIHYwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCBmb3JtYXQ6QlVGX05VTV9GT1JNQVRfRkxPQVQgZm9ybWF0OiBCVUZfREFUQV9GT1JNQVRfMzIgc2xjOjEgZ2xjOjEKICAgIGVsc2UKCQlidWZmZXJfbG9hZF9kd29yZCB2MCwgdjAsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0CXNsYzoxIGdsYzoxCQoJZW5kCglzX3dhaXRjbnQJCXZtY250KDApCQkJCQkJCQkJCQkJCQkJCS8vZW5zdXJlIGRhdGEgcmVhZHkKCXZfbW92cmVsZF9iMzIJCXYwLCB2MAkJCQkJCQkJCQkJCQkJCQkJLy92WzArbTBdID0gdjAKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkJCS8vbmV4dCB2Z3ByIGluZGV4CglzX2FkZF91MzIJCXNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgMjU2CQkJCQkJCS8vZXZlcnkgYnVmZmVyX2xvYWRfZHdvcmQgZG9lcyAyNTYgYnl0ZXMKCXNfY21wX2x0X3UzMiAJbTAsCXNfcmVzdG9yZV9hbGxvY19zaXplIAkJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19yZXN0b3JlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1JFU1RPUkVfVkdQUl9XQVZFNjRfTE9PUAkJCQkJCQkJCQkJCQkJLy9WR1BSIHJlc3RvcmUgKGV4Y2VwdCB2MCkgaXMgY29tcGxldGU/CgkvL3Nfc2V0X2dwcl9pZHhfb2ZmCiAgICAvLwogICAgLy9CZWxvdyBwYXJ0IHdpbGwgYmUgdGhlIHJlc3RvcmUgc2hhcmVkIHZncHIgcGFydCAobmV3IGZvciBnZngxMCkKICAgIHNfZ2V0cmVnX2IzMiAJc19yZXN0b3JlX2FsbG9jX3NpemUsIGh3cmVnKEhXX1JFR19MRFNfQUxMT0MsU1FfV0FWRV9MRFNfQUxMT0NfVkdQUl9TSEFSRURfU0laRV9TSElGVCxTUV9XQVZFX0xEU19BTExPQ19WR1BSX1NIQVJFRF9TSVpFX1NJWkUpIAkJCS8vc2hhcmVkX3ZncHJfc2l6ZQogICAgc19hbmRfYjMyCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDB4RkZGRkZGRkYJCQkJLy9zaGFyZWRfdmdwcl9zaXplIGlzIHplcm8/CiAgICBzX2NicmFuY2hfc2NjMAlMX1JFU1RPUkVfVjAJCQkJCQkJCQkJCQkJICAgIC8vbm8gc2hhcmVkX3ZncHIgdXNlZD8ganVtcCB0byBMX1NBVkVfTERTCiAgICBzX2xzaGxfYjMyIAkJc19yZXN0b3JlX2FsbG9jX3NpemUsIHNfcmVzdG9yZV9hbGxvY19zaXplLCAzIAkJCQkJCS8vTnVtYmVyIG9mIFNIQVJFRF9WR1BScyA9IHNoYXJlZF92Z3ByX3NpemUgKiA4ICAgIChub24temVybyB2YWx1ZSkKICAgIC8vbTAgbm93IGhhcyB0aGUgdmFsdWUgb2Ygbm9ybWFsIHZncHIgY291bnQsIGp1c3QgYWRkIHRoZSBtMCB3aXRoIHNoYXJlZF92Z3ByIGNvdW50IHRvIGdldCB0aGUgdG90YWwgY291bnQuCiAgICAvL3Jlc3RvcmUgc2hhcmVkX3ZncHIgd2lsbCBzdGFydCBmcm9tIHRoZSBpbmRleCBvZiBtMAogICAgc19hZGRfdTMyICAgICAgIHNfcmVzdG9yZV9hbGxvY19zaXplLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgbTAKICAgIHNfbW92X2IzMgkJZXhlY19sbywgMHhGRkZGRkZGRgogICAgc19tb3ZfYjMyCQlleGVjX2hpLCAweDAwMDAwMDAwCiAgICBMX1JFU1RPUkVfU0hBUkVEX1ZHUFJfV0FWRTY0X0xPT1A6IAogICAgYnVmZmVyX2xvYWRfZHdvcmQgdjAsIHYwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldAlzbGM6MSBnbGM6MQogICAgc193YWl0Y250CQl2bWNudCgwKQkJCQkJCQkJCQkJCQkJCQkvL2Vuc3VyZSBkYXRhIHJlYWR5Cgl2X21vdnJlbGRfYjMyCQl2MCwgdjAJCQkJCQkJCQkJCQkJCQkJCS8vdlswK20wXSA9IHYwCiAgICBzX2FkZF91MzIJCW0wLCBtMCwgMQkJCQkJCQkJCQkJCQkJCQkvL25leHQgdmdwciBpbmRleAoJc19hZGRfdTMyCQlzX3Jlc3RvcmVfbWVtX29mZnNldCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIDEyOAkJCQkJCQkvL2V2ZXJ5IGJ1ZmZlcl9sb2FkX2R3b3JkIGRvZXMgMjU2IGJ5dGVzCglzX2NtcF9sdF91MzIgCW0wLAlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSAJCQkJCQkJCQkJCQkvL3NjYyA9IChtMCA8IHNfcmVzdG9yZV9hbGxvY19zaXplKSA/IDEgOiAwCglzX2NicmFuY2hfc2NjMSAJTF9SRVNUT1JFX1NIQVJFRF9WR1BSX1dBVkU2NF9MT09QCQkJCQkJCQkJCQkJCQkvL1ZHUFIgcmVzdG9yZSAoZXhjZXB0IHYwKSBpcyBjb21wbGV0ZT8KCiAgICBzX21vdl9iMzIgZXhlY19oaSwgMHhGRkZGRkZGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXN0b3JlIGJhY2sgZXhlY19oaSBiZWZvcmUgcmVzdG9yaW5nIFYwISEKCQogICAgLyogVkdQUiByZXN0b3JlIG9uIHYwICovCiAgTF9SRVNUT1JFX1YwOgogICAgaWYoVVNFX01UQlVGX0lOU1RFQURfT0ZfTVVCVUYpICAgICAgIAoJCXRidWZmZXJfbG9hZF9mb3JtYXRfeCB2MCwgdjAsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0X3NhdmUgZm9ybWF0OkJVRl9OVU1fRk9STUFUX0ZMT0FUIGZvcm1hdDogQlVGX0RBVEFfRk9STUFUXzMyIHNsYzoxIGdsYzoxCiAgICBlbHNlCgkJYnVmZmVyX2xvYWRfZHdvcmQgdjAsIHYwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldF9zYXZlCXNsYzoxIGdsYzoxCQoJZW5kCgoKICAgIC8qICAgICAgCXJlc3RvcmUgTERTCSAgICAqLwoJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgTF9SRVNUT1JFX0xEUzoKCiAgICAvL09ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3Qgd2F2ZSAgICAKCS8qICAgICAgdGhlIGZpcnN0IHdhdmUgaW4gdGhlIHRocmVhZGdyb3VwICAgICovCglzX2FuZF9iMzIJCXNfcmVzdG9yZV90bXAsIHNfcmVzdG9yZV9zaXplLCBTX1JFU1RPUkVfU1BJX0lOSVRfRklSU1RfV0FWRV9NQVNLCQkJCglzX2NicmFuY2hfc2NjMAlMX1JFU1RPUkVfU0dQUgoJCiAgICBzX21vdl9iMzIJCWV4ZWNfbG8sIDB4RkZGRkZGRkYgCQkJCQkJCQkJCQkJCS8vbmVlZCBldmVyeSB0aHJlYWQgZnJvbSBub3cgb24gICAvL2JlIGNvbnNpc3RlbnQgd2l0aCBTQVZFIGFsdGhvdWdoIGNhbiBiZSBtb3ZlZCBhaGVhZAogICAgc19hbmRfYjMyICAgICAgIG0wLCBzX3Jlc3RvcmVfc2l6ZSwgMQogICAgc19jbXBfZXFfdTMyICAgIG0wLCAxCiAgICBzX2NicmFuY2hfc2NjMSAgTF9FTkFCTEVfUkVTVE9SRV9MRFNfRVhFQ19ISSAgIAogICAgc19tb3ZfYjMyCQlleGVjX2hpLCAweDAwMDAwMDAwCiAgICBzX2JyYW5jaCAgICAgICAgTF9SRVNUT1JFX0xEU19OT1JNQUwKICBMX0VOQUJMRV9SRVNUT1JFX0xEU19FWEVDX0hJOgoJc19tb3ZfYjMyCQlleGVjX2hpLCAweEZGRkZGRkZGCiAgTF9SRVNUT1JFX0xEU19OT1JNQUw6CQoJc19nZXRyZWdfYjMyIAlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgaHdyZWcoSFdfUkVHX0xEU19BTExPQyxTUV9XQVZFX0xEU19BTExPQ19MRFNfU0laRV9TSElGVCxTUV9XQVZFX0xEU19BTExPQ19MRFNfU0laRV9TSVpFKSAJCQkJLy9sZHNfc2l6ZQoJc19hbmRfYjMyCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDB4RkZGRkZGRkYJCQkJCS8vbGRzX3NpemUgaXMgemVybz8KCXNfY2JyYW5jaF9zY2MwCUxfUkVTVE9SRV9TR1BSCQkJCQkJCQkJCQkJCQkJLy9ubyBsZHMgdXNlZD8ganVtcCB0byBMX1JFU1RPUkVfVkdQUgoJc19sc2hsX2IzMiAJCXNfcmVzdG9yZV9hbGxvY19zaXplLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgNiAJCQkJCQkJLy9MRFMgc2l6ZSBpbiBkd29yZHMgPSBsZHNfc2l6ZSAqIDY0ZHcKCXNfbHNobF9iMzIgCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDIgCQkJCQkJCS8vTERTIHNpemUgaW4gYnl0ZXMKCXNfbW92X2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwJc19yZXN0b3JlX2FsbG9jX3NpemUJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLCBzX3Jlc3RvcmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCgogICAgc19hbmRfYjMyICAgICAgIG0wLCBzX3dhdmVfc2l6ZSwgMQogICAgc19jbXBfZXFfdTMyICAgIG0wLCAxCiAgICBzX21vdl9iMzIgCQltMCwgMHgwCiAgICBzX2NicmFuY2hfc2NjMSAgTF9SRVNUT1JFX0xEU19MT09QX1c2NAoKICBMX1JFU1RPUkVfTERTX0xPT1BfVzMyOgkJCQkJCQkJCQoJaWYgKFNBVkVfTERTKQoJYnVmZmVyX2xvYWRfZHdvcmQJdjAsIHYwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCBsZHM6MQogICAgc193YWl0Y250IDAKCWVuZAogICAgc19hZGRfdTMyCQltMCwgbTAsIDEyOAkJCQkJCQkJCQkJCQkJCQkvL2V2ZXJ5IGJ1ZmZlcl9sb2FkX2R3b3JkIGRvZXMgMjU2IGJ5dGVzCglzX2FkZF91MzIJCXNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgMTI4CQkJCQkJLy9tZW0gb2Zmc2V0IGluY3JlYXNlZCBieSAyNTYgYnl0ZXMKCXNfY21wX2x0X3UzMgltMCwgc19yZXN0b3JlX2FsbG9jX3NpemUJCQkJCQkJCQkJCQkvL3NjYz0obTAgPCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSkgPyAxIDogMAoJc19jYnJhbmNoX3NjYzEgIExfUkVTVE9SRV9MRFNfTE9PUF9XMzIJCQkJCQkJCQkJCQkJCS8vTERTIHJlc3RvcmUgaXMgY29tcGxldGU/CiAgICBzX2JyYW5jaCAgICAgICAgTF9SRVNUT1JFX1NHUFIKCiAgTF9SRVNUT1JFX0xEU19MT09QX1c2NDoJCQkJCQkJCQkKCWlmIChTQVZFX0xEUykKCWJ1ZmZlcl9sb2FkX2R3b3JkCXYwLCB2MCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQgbGRzOjEKICAgIHNfd2FpdGNudCAwCgllbmQKICAgIHNfYWRkX3UzMgkJbTAsIG0wLCAyNTYJCQkJCQkJCQkJCQkJCQkJLy9ldmVyeSBidWZmZXJfbG9hZF9kd29yZCBkb2VzIDI1NiBieXRlcwoJc19hZGRfdTMyCQlzX3Jlc3RvcmVfbWVtX29mZnNldCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIDI1NgkJCQkJCQkvL21lbSBvZmZzZXQgaW5jcmVhc2VkIGJ5IDI1NiBieXRlcwoJc19jbXBfbHRfdTMyCW0wLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZQkJCQkJCQkJCQkJCS8vc2NjPShtMCA8IHNfcmVzdG9yZV9hbGxvY19zaXplKSA/IDEgOiAwCglzX2NicmFuY2hfc2NjMSAgTF9SRVNUT1JFX0xEU19MT09QX1c2NAkJCQkJCQkJCQkJCQkJLy9MRFMgcmVzdG9yZSBpcyBjb21wbGV0ZT8KCgkKICAgIC8qICAgICAgCXJlc3RvcmUgU0dQUnMJICAgICovCgkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCS8vc19nZXRyZWdfYjMyIAlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgaHdyZWcoSFdfUkVHX0dQUl9BTExPQyxTUV9XQVZFX0dQUl9BTExPQ19TR1BSX1NJWkVfU0hJRlQsU1FfV0FWRV9HUFJfQUxMT0NfU0dQUl9TSVpFX1NJWkUpIAkJCQkvL3NwZ3Jfc2l6ZQoJLy9zX2FkZF91MzIgCQlzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgc19yZXN0b3JlX2FsbG9jX3NpemUsIDEKCS8vc19sc2hsX2IzMiAJCXNfcmVzdG9yZV9hbGxvY19zaXplLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgNCAJCQkJCQkJLy9OdW1iZXIgb2YgU0dQUnMgPSAoc2dwcl9zaXplICsgMSkgKiAxNiAgIChub24temVybyB2YWx1ZSkKCS8vc19sc2hsX2IzMiAJCXNfcmVzdG9yZV9hbGxvY19zaXplLCBzX3Jlc3RvcmVfYWxsb2Nfc2l6ZSwgMyAJCQkJCQkJLy9OdW1iZXIgb2YgU0dQUnMgPSAoc2dwcl9zaXplICsgMSkgKiA4ICAgKG5vbi16ZXJvIHZhbHVlKQogIExfUkVTVE9SRV9TR1BSOgogICAgLy9uZWVkIHRvIGxvb2sgYXQgaXQgaXMgd2F2ZTMyIG9yIHdhdmU2NAogICAgc19hbmRfYjMyICAgICAgIG0wLCBzX3Jlc3RvcmVfc2l6ZSwgMQogICAgc19jbXBfZXFfdTMyICAgIG0wLCAxCiAgICBzX2NicmFuY2hfc2NjMSAgTF9SRVNUT1JFX1NHUFJfVk1FTV9XQVZFNjQKCWlmIChTR1BSX1NBVkVfVVNFX1NRQykKCQlzX2xzaGxfYjMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLAlzX3NncHJfc2F2ZV9udW0sIDIJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzIAoJZWxzZQogICAgICAgIHNfbHNobF9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsCXNfc2dwcl9zYXZlX251bSwgNwkJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMgKDMyIHRocmVhZHMpCiAgICBlbmQKICAgIHNfYnJhbmNoICAgICAgICBMX1JFU1RPUkVfU0dQUl9DT05UCiAgTF9SRVNUT1JFX1NHUFJfVk1FTV9XQVZFNjQ6CiAgICBpZiAoU0dQUl9TQVZFX1VTRV9TUUMpCgkJc19sc2hsX2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwJc19zZ3ByX3NhdmVfbnVtLCAyCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcyAKCWVsc2UKCQlzX2xzaGxfYjMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLAlzX3NncHJfc2F2ZV9udW0sIDgJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzICg2NCB0aHJlYWRzKQoJZW5kCgogIExfUkVTVE9SRV9TR1BSX0NPTlQ6CglpZiAoU1dJWlpMRV9FTikKCQlzX2FkZF91MzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsIHNfcmVzdG9yZV9idWZfcnNyYzIsIDB4MAkJCQkJCS8vRklYTUUgbmVlZCB0byB1c2Ugc3dpenpsZSB0byBlbmFibGUgYm91bmRzIGNoZWNraW5nPwoJZWxzZQoJCXNfbW92X2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwgIDB4MTAwMDAwMAkJCQkJCQkJCQkvL05VTV9SRUNPUkRTIGluIGJ5dGVzCgllbmQKCiAgICBzX2FuZF9iMzIgICAgICAgbTAsIHNfcmVzdG9yZV9zaXplLCAxCiAgICBzX2NtcF9lcV91MzIgICAgbTAsIDEKICAgIHNfY2JyYW5jaF9zY2MxICBMX1JFU1RPUkVfU0dQUl9XQVZFNjQKCiAgICByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTMyKHNfcmVzdG9yZV90bXAsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCS8vc2F2ZSBzMCB0byBzX3Jlc3RvcmVfdG1wCglzX21vdl9iMzIgCQltMCwgMHgxCgogIExfUkVTVE9SRV9TR1BSX0xPT1BfV0FWRTMyOgogICAgcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzMCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkJCQkJCQkJCQkJCS8vUFY6IGZ1cnRoZXIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgY2FuIGJlIG1hZGUKCXNfd2FpdGNudAkJbGdrbWNudCgwKQkJCQkJCQkJCQkJCQkJCQkvL2Vuc3VyZSBkYXRhIHJlYWR5CglzX21vdnJlbGRfYjMyIAlzMCwgczAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NbMCttMF0gPSBzMAogICAgc19ub3AgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhemFyZCBTQUxVIE0wPT4gU19NT1ZSRUwKCXNfYWRkX3UzMgkJbTAsIG0wLCAxCQkJCQkJCQkJCQkJCQkJCS8vbmV4dCBzZ3ByIGluZGV4CglzX2NtcF9sdF91MzIgCW0wLCBzX3NncHJfc2F2ZV9udW0JCQkJCQkJCQkJCQkvL3NjYyA9IChtMCA8IHNfcmVzdG9yZV9hbGxvY19zaXplKSA/IDEgOiAwCglzX2NicmFuY2hfc2NjMSAJTF9SRVNUT1JFX1NHUFJfTE9PUF9XQVZFMzIJCQkJCQkJCQkJCQkJCS8vU0dQUiByZXN0b3JlIChleGNlcHQgczApIGlzIGNvbXBsZXRlPwoJc19tb3ZfYjMyCQlzMCwgc19yZXN0b3JlX3RtcAkJCQkJCQkJCQkJCQkJCS8qIFNHUFIgcmVzdG9yZSBvbiBzMCAqLwogICAgc19icmFuY2ggICAgICAgIExfUkVTVE9SRV9IV1JFRwogIAogIExfUkVTVE9SRV9TR1BSX1dBVkU2NDoKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlNjQoc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJLy9zYXZlIHMwIHRvIHNfcmVzdG9yZV90bXAKCXNfbW92X2IzMiAJCW0wLCAweDEJCQkJCQkJCQkJCQkJCQkJCQkJCS8vU0dQUiBpbml0aWFsIGluZGV4IHZhbHVlID0xCS8vZ28gb24gd2l0aCB3aXRoIHMxCgkKICBMX1JFU1RPUkVfU0dQUl9MT09QX1dBVkU2NDogCQkJCQkJCQkJCQkJCQkJCQkJCQkJCglyZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHMwLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQkJCQkJCQkJCQkJCQkJLy9QVjogZnVydGhlciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBjYW4gYmUgbWFkZQoJc193YWl0Y250CQlsZ2ttY250KDApCQkJCQkJCQkJCQkJCQkJCS8vZW5zdXJlIGRhdGEgcmVhZHkKCXNfbW92cmVsZF9iMzIgCXMwLCBzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc1swK20wXSA9IHMwCiAgICBzX25vcCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF6YXJkIFNBTFUgTTA9PiBTX01PVlJFTAoJc19hZGRfdTMyCQltMCwgbTAsIDEJCQkJCQkJCQkJCQkJCQkJLy9uZXh0IHNncHIgaW5kZXgKCXNfY21wX2x0X3UzMiAJbTAsIHNfc2dwcl9zYXZlX251bQkJCQkJCQkJCQkJCS8vc2NjID0gKG0wIDwgc19yZXN0b3JlX2FsbG9jX3NpemUpID8gMSA6IDAKCXNfY2JyYW5jaF9zY2MxIAlMX1JFU1RPUkVfU0dQUl9MT09QX1dBVkU2NAkJCQkJCQkJCQkJCQkJLy9TR1BSIHJlc3RvcmUgKGV4Y2VwdCBzMCkgaXMgY29tcGxldGU/CglzX21vdl9iMzIJCXMwLCBzX3Jlc3RvcmVfdG1wCQkJCQkJCQkJCQkJCQkJLyogU0dQUiByZXN0b3JlIG9uIHMwICovCgoJCiAgICAvKiAJCXJlc3RvcmUgSFcgcmVnaXN0ZXJzCSovCgkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICBMX1JFU1RPUkVfSFdSRUc6CiAgICBzX21vdl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsIDB4NAkJCQkJCQkJCQkJCS8vTlVNX1JFQ09SRFMJaW4gYnl0ZXMKCWlmIChTV0laWkxFX0VOKQoJCXNfYWRkX3UzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwgc19yZXN0b3JlX2J1Zl9yc3JjMiwgMHgwCQkJCQkJLy9GSVhNRSBuZWVkIHRvIHVzZSBzd2l6emxlIHRvIGVuYWJsZSBib3VuZHMgY2hlY2tpbmc/CgllbHNlCgkJc19tb3ZfYjMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLCAgMHgxMDAwMDAwCQkJCQkJCQkJCS8vTlVNX1JFQ09SRFMgaW4gYnl0ZXMKCWVuZAoKICAgIHNfYW5kX2IzMiAgICAgICBtMCwgc19yZXN0b3JlX3NpemUsIDEKICAgIHNfY21wX2VxX3UzMiAgICBtMCwgMQogICAgc19jYnJhbmNoX3NjYzEgIExfUkVTVE9SRV9IV1JFR19XQVZFNjQKCiAgICByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTMyKHNfcmVzdG9yZV9tMCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkJLy9NMAoJcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzX3Jlc3RvcmVfcGNfbG8sIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9QQwoJcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzX3Jlc3RvcmVfcGNfaGksIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlMzIoc19yZXN0b3JlX2V4ZWNfbG8sIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9FWEVDCglyZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTMyKHNfcmVzdG9yZV9leGVjX2hpLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCglyZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTMyKHNfcmVzdG9yZV9zdGF0dXMsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9TVEFUVVMKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlMzIoc19yZXN0b3JlX3RyYXBzdHMsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9UUkFQU1RTCiAgICAvL3JlYWRfc2dwcl9mcm9tX21lbV93YXZlMzIoeG5hY2tfbWFza19sbywgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkJLy9YTkFDS19NQVNLX0xPCgkvL3JlYWRfc2dwcl9mcm9tX21lbV93YXZlMzIoeG5hY2tfbWFza19oaSwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkJLy9YTkFDS19NQVNLX0hJCiAgICByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTMyKHNfcmVzdG9yZV94bmFja19tYXNrLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQkJCQkvL1hOQUNLX01BU0sKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlMzIoc19yZXN0b3JlX21vZGUsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9NT0RFCiAgICBpZihTQVZFX1JFU1RPUkVfSFdJRF9ERElEKQogICAgcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzX3Jlc3RvcmVfaHdpZDEsIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJLy9IV19JRDEKICAgIGVuZAogICAgc19icmFuY2ggICAgICAgIExfUkVTVE9SRV9IV1JFR19GSU5JU0gKCiAgTF9SRVNUT1JFX0hXUkVHX1dBVkU2NDoKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlNjQoc19yZXN0b3JlX20wLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQkJCQkvL00wCglyZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHNfcmVzdG9yZV9wY19sbywgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL1BDCglyZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHNfcmVzdG9yZV9wY19oaSwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQoJcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmU2NChzX3Jlc3RvcmVfZXhlY19sbywgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL0VYRUMKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlNjQoc19yZXN0b3JlX2V4ZWNfaGksIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykKCXJlYWRfc2dwcl9mcm9tX21lbV93YXZlNjQoc19yZXN0b3JlX3N0YXR1cywgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL1NUQVRVUwoJcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmU2NChzX3Jlc3RvcmVfdHJhcHN0cywgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL1RSQVBTVFMKICAgIC8vcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmU2NCh4bmFja19tYXNrX2xvLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQkJCQkvL1hOQUNLX01BU0tfTE8KCS8vcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmU2NCh4bmFja19tYXNrX2hpLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQkJCQkvL1hOQUNLX01BU0tfSEkKICAgIHJlYWRfc2dwcl9mcm9tX21lbV93YXZlNjQoc19yZXN0b3JlX3huYWNrX21hc2ssIHNfcmVzdG9yZV9idWZfcnNyYzAsIHNfcmVzdG9yZV9tZW1fb2Zmc2V0LCBTR1BSX1NBVkVfVVNFX1NRQykJCQkJCS8vWE5BQ0tfTUFTSwoJcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmU2NChzX3Jlc3RvcmVfbW9kZSwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL01PREUKICAgIGlmKFNBVkVfUkVTVE9SRV9IV0lEX0RESUQpCiAgICByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHNfcmVzdG9yZV9od2lkMSwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkJCQkvL0hXX0lEMQogICAgZW5kCiAgTF9SRVNUT1JFX0hXUkVHX0ZJTklTSDoKCXNfd2FpdGNudAkJbGdrbWNudCgwKQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkvL2Zyb20gbm93IG9uLCBpdCBpcyBzYWZlIHRvIHJlc3RvcmUgU1RBVFVTIGFuZCBJQl9TVFMKICAKCgogICAgaWYoU0FWRV9SRVNUT1JFX0hXSURfRERJRCkKICBMX1JFU1RPUkVfRERJRDoKICAgIHNfbW92X2IzMiAgICAgIG0wLCBzX3Jlc3RvcmVfaHdpZDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZpcnR1cmUgdHRyYWNlIHN1cHBvcnQ6IFRoZSBzYXZlLWNvbnRleHQgaGFuZGxlciByZWNvcmRzIHRoZSBTRS9TQS9XR1AvU0lNRC93YXZlIG9mIHRoZSBvcmlnaW5hbCB3YXZlCiAgICBzX3R0cmFjZWRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBjYW4gb3V0cHV0IGl0IGFzIFNIQURFUl9EQVRBIHRvIHR0cmFjZSBvbiByZXN0b3JlIHRvIHByb3ZpZGUgYSBjb3JyZWxhdGlvbiBhY3Jvc3MgdGhlIHNhdmUtcmVzdG9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHNfbW92X2IzMgkJc19yZXN0b3JlX2J1Zl9yc3JjMiwgMHg0CQkJCQkJCQkJCQkJLy9OVU1fUkVDT1JEUwlpbiBieXRlcwoJaWYgKFNXSVpaTEVfRU4pCgkJc19hZGRfdTMyCQlzX3Jlc3RvcmVfYnVmX3JzcmMyLCBzX3Jlc3RvcmVfYnVmX3JzcmMyLCAweDAJCQkJCQkvL0ZJWE1FIG5lZWQgdG8gdXNlIHN3aXp6bGUgdG8gZW5hYmxlIGJvdW5kcyBjaGVja2luZz8KCWVsc2UKCQlzX21vdl9iMzIJCXNfcmVzdG9yZV9idWZfcnNyYzIsICAweDEwMDAwMDAJCQkJCQkJCQkJLy9OVU1fUkVDT1JEUyBpbiBieXRlcwoJZW5kCgogICAgc19hbmRfYjMyICAgICAgIG0wLCBzX3Jlc3RvcmVfc2l6ZSwgMQogICAgc19jbXBfZXFfdTMyICAgIG0wLCAxCiAgICBzX2NicmFuY2hfc2NjMSAgTF9SRVNUT1JFX0RESURfV0FWRTY0CgogICAgcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzX3Jlc3RvcmVfZGRpZCwgc19yZXN0b3JlX2J1Zl9yc3JjMCwgc19yZXN0b3JlX21lbV9vZmZzZXQsIFNHUFJfU0FWRV9VU0VfU1FDKQkKICAgIHNfYnJhbmNoICAgICAgICBMX1JFU1RPUkVfRERJRF9GSU5JU0gKICBMX1JFU1RPUkVfRERJRF9XQVZFNjQ6CiAgICByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHNfcmVzdG9yZV9kZGlkLCBzX3Jlc3RvcmVfYnVmX3JzcmMwLCBzX3Jlc3RvcmVfbWVtX29mZnNldCwgU0dQUl9TQVZFX1VTRV9TUUMpCQoKICBMX1JFU1RPUkVfRERJRF9GSU5JU0g6CiAgICBzX3dhaXRjbnQJCWxna21jbnQoMCkKICAgIC8vc19tb3ZfYjMyICAgICAgbTAsIHNfcmVzdG9yZV9kZGlkCiAgICAvL3NfdHRyYWNlZGF0YSAgIAogICAgaWYgKFJFU1RPUkVfRERJRF9JTl9TR1BSMTgpCiAgICAgICAgc19tb3ZfYjMyICAgczE4LCBzX3Jlc3RvcmVfZGRpZAoJZW5kCQogICAgCiAgICBlbmQgICAKCglzX2FuZF9iMzIgc19yZXN0b3JlX3BjX2hpLCBzX3Jlc3RvcmVfcGNfaGksIDB4MDAwMGZmZmYgICAgCS8vcGNbNDc6MzJdICAgICAgICAvL0RvIGl0IGhlcmUgaW4gb3JkZXIgbm90IHRvIGFmZmVjdCBTVEFUVVMKCgkvL2ZvciBub3JtYWwgc2F2ZSAmIHJlc3RvcmUsIHRoZSBzYXZlZCBQQyBwb2ludHMgdG8gdGhlIG5leHQgaW5zdCB0byBleGVjdXRlLCBubyBhZGp1c3RtZW50IG5lZWRzIHRvIGJlIG1hZGUsIG90aGVyd2lzZToKCWlmICgoRU1VX1JVTl9IQUNLKSAmJiAoIUVNVV9SVU5fSEFDS19SRVNUT1JFX05PUk1BTCkpCgkJc19hZGRfdTMyIHNfcmVzdG9yZV9wY19sbywgc19yZXN0b3JlX3BjX2xvLCA4ICAgICAgICAgICAgLy9wY1szMTowXSs4CSAgLy90d28gYmFjay10by1iYWNrIHNfdHJhcCBhcmUgdXNlZCAoZmlyc3QgZm9yIHNhdmUgYW5kIHNlY29uZCBmb3IgcmVzdG9yZSkKCQlzX2FkZGNfdTMyCXNfcmVzdG9yZV9wY19oaSwgc19yZXN0b3JlX3BjX2hpLCAweDAJCSAvL2NhcnJ5IGJpdCBvdmVyCgllbmQJCglpZiAoKEVNVV9SVU5fSEFDSykgJiYgKEVNVV9SVU5fSEFDS19SRVNUT1JFX05PUk1BTCkpCSAgICAgIAoJCXNfYWRkX3UzMiBzX3Jlc3RvcmVfcGNfbG8sIHNfcmVzdG9yZV9wY19sbywgNCAgICAgICAgICAgIC8vcGNbMzE6MF0rNCAgICAgLy8gc2F2ZSBpcyBoYWNrIHRocm91Z2ggc190cmFwIGJ1dCByZXN0b3JlIGlzIG5vcm1hbAoJCXNfYWRkY191MzIJc19yZXN0b3JlX3BjX2hpLCBzX3Jlc3RvcmVfcGNfaGksIDB4MAkJIC8vY2FycnkgYml0IG92ZXIKCWVuZAoJCglzX21vdl9iMzIgCQltMCwgCQlzX3Jlc3RvcmVfbTAKCXNfbW92X2IzMiAJCWV4ZWNfbG8sIAlzX3Jlc3RvcmVfZXhlY19sbwoJc19tb3ZfYjMyIAkJZXhlY19oaSwgCXNfcmVzdG9yZV9leGVjX2hpCgkKCXNfYW5kX2IzMgkJc19yZXN0b3JlX20wLCBTUV9XQVZFX1RSQVBTVFNfUFJFX1NBVkVDVFhfTUFTSywgc19yZXN0b3JlX3RyYXBzdHMKCXNfc2V0cmVnX2IzMglod3JlZyhIV19SRUdfVFJBUFNUUywgU1FfV0FWRV9UUkFQU1RTX1BSRV9TQVZFQ1RYX1NISUZULCBTUV9XQVZFX1RSQVBTVFNfUFJFX1NBVkVDVFhfU0laRSksIHNfcmVzdG9yZV9tMAogICAgc19zZXRyZWdfYjMyICAgIGh3cmVnKEhXX1JFR19TSEFERVJfWE5BQ0tfTUFTSyksIHNfcmVzdG9yZV94bmFja19tYXNrICAgICAgICAgLy9yZXN0b3JlIHhuYWNrX21hc2sKCXNfYW5kX2IzMgkJc19yZXN0b3JlX20wLCBTUV9XQVZFX1RSQVBTVFNfUE9TVF9TQVZFQ1RYX01BU0ssIHNfcmVzdG9yZV90cmFwc3RzCglzX2xzaHJfYjMyCQlzX3Jlc3RvcmVfbTAsIHNfcmVzdG9yZV9tMCwgU1FfV0FWRV9UUkFQU1RTX1BPU1RfU0FWRUNUWF9TSElGVAoJc19zZXRyZWdfYjMyCWh3cmVnKEhXX1JFR19UUkFQU1RTLCBTUV9XQVZFX1RSQVBTVFNfUE9TVF9TQVZFQ1RYX1NISUZULCBTUV9XQVZFX1RSQVBTVFNfUE9TVF9TQVZFQ1RYX1NJWkUpLCBzX3Jlc3RvcmVfbTAKCS8vc19zZXRyZWdfYjMyIAlod3JlZyhIV19SRUdfVFJBUFNUUyksIAlzX3Jlc3RvcmVfdHJhcHN0cyAgICAgIC8vZG9uJ3Qgb3ZlcndyaXRlIFNBVkVDVFggYml0IGFzIGl0IG1heSBiZSBzZXQgdGhyb3VnaCBleHRlcm5hbCBTQVZFQ1RYIGR1cmluZyByZXN0b3JlCglzX3NldHJlZ19iMzIgCWh3cmVnKEhXX1JFR19NT0RFKSwgCXNfcmVzdG9yZV9tb2RlCgkvL3JldXNlIHNfcmVzdG9yZV9tMCBhcyBhIHRlbXAgcmVnaXN0ZXIKCXNfYW5kX2IzMgkJc19yZXN0b3JlX20wLCBzX3Jlc3RvcmVfcGNfaGksIFNfU0FWRV9QQ19ISV9SQ05UX01BU0sKCXNfbHNocl9iMzIJCXNfcmVzdG9yZV9tMCwgc19yZXN0b3JlX20wLCBTX1NBVkVfUENfSElfUkNOVF9TSElGVAoJc19sc2hsX2IzMgkJc19yZXN0b3JlX20wLCBzX3Jlc3RvcmVfbTAsIFNRX1dBVkVfSUJfU1RTX1JDTlRfU0hJRlQKCXNfbW92X2IzMgkJc19yZXN0b3JlX3RtcCwgMHgwCQkJCQkJCQkJCQkJCQkJCQkJCQkvL0lCX1NUUyBpcyB6ZXJvCglzX29yX2IzMgkJc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX20wCglzX2FuZF9iMzIJCXNfcmVzdG9yZV9tMCwgc19yZXN0b3JlX3BjX2hpLCBTX1NBVkVfUENfSElfRklSU1RfUkVQTEFZX01BU0sKCXNfbHNocl9iMzIJCXNfcmVzdG9yZV9tMCwgc19yZXN0b3JlX20wLCBTX1NBVkVfUENfSElfRklSU1RfUkVQTEFZX1NISUZUCglzX2xzaGxfYjMyCQlzX3Jlc3RvcmVfbTAsIHNfcmVzdG9yZV9tMCwgU1FfV0FWRV9JQl9TVFNfRklSU1RfUkVQTEFZX1NISUZUCglzX29yX2IzMgkJc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX3RtcCwgc19yZXN0b3JlX20wCiAgICBzX2FuZF9iMzIgICAgICAgc19yZXN0b3JlX20wLCBzX3Jlc3RvcmVfc3RhdHVzLCBTUV9XQVZFX1NUQVRVU19JTlNUX0FUQ19NQVNLIAogICAgc19sc2hyX2IzMgkJc19yZXN0b3JlX20wLCBzX3Jlc3RvcmVfbTAsIFNRX1dBVkVfU1RBVFVTX0lOU1RfQVRDX1NISUZUCglzX3NldHJlZ19iMzIgCWh3cmVnKEhXX1JFR19JQl9TVFMpLCAJc19yZXN0b3JlX3RtcAoJc19zZXRyZWdfYjMyIAlod3JlZyhIV19SRUdfU1RBVFVTKSwgCXNfcmVzdG9yZV9zdGF0dXMKCglzX2JhcnJpZXIJCQkJCQkJCQkJCQkJLy9iYXJyaWVyIHRvIGVuc3VyZSB0aGUgcmVhZGluZXNzIG9mIExEUyBiZWZvcmUgYWNjZXNzIGF0dGVtcHMgZnJvbSBhbnkgb3RoZXIgd2F2ZSBpbiB0aGUgc2FtZSBURyAvL0ZJWE1FIG5vdCBwZXJmb3JtYW5jZS1vcHRpbWFsIGF0IHRoaXMgdGltZQoJCgkKLy8Jc19yZmVfYjY0IHNfcmVzdG9yZV9wY19sbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJLy9SZXR1cm4gdG8gdGhlIG1haW4gc2hhZGVyIHByb2dyYW0gYW5kIHJlc3VtZSBleGVjdXRpb24KICAgIHNfcmZlX2I2NCAgc19yZXN0b3JlX3BjX2xvICAgICAgICAgICAgLy8gc19yZXN0b3JlX20wWzBdIGlzIHVzZWQgdG8gc2V0IFNUQVRVUy5pbnN0X2F0YyAKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qICAgICAgICAgICAgICAgICAgICAgCXRoZSBFTkQJCQkJCQkJCSAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKTF9FTkRfUEdNOgkKCXNfZW5kcGdtCgkKZW5kCQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogICAgICAgICAgICAgICAgICAgICAJdGhlIGhlbHBlciBmdW5jdGlvbnMJCQkJCQkJICAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmZ1bmN0aW9uIHdyaXRlX3NncHJfdG9fbWVtX3dhdmUzMihzLCBzX3JzcmMsIHNfbWVtX29mZnNldCwgdXNlX3NxYywgdXNlX210YnVmKQoJaWYgKHVzZV9zcWMpCgkJc19tb3ZfYjMyIGV4ZWNfbG8sIG0wCQkJCQkvL2Fzc3VtaW5nIGV4ZWNfbG8gaXMgbm90IG5lZWRlZCBhbnltb3JlIGZyb20gdGhpcyBwb2ludCBvbgoJCXNfbW92X2IzMiBtMCwgc19tZW1fb2Zmc2V0CgkJc19idWZmZXJfc3RvcmVfZHdvcmQgcywgc19yc3JjLCBtMAkJZ2xjOjEJCgkJc19hZGRfdTMyCQlzX21lbV9vZmZzZXQsIHNfbWVtX29mZnNldCwgNAoJCXNfbW92X2IzMgltMCwgZXhlY19sbwogICAgZWxzaWYgKHVzZV9tdGJ1ZikKICAgICAgICB2X21vdl9iMzIJdjAsCXMKICAgICAgICB0YnVmZmVyX3N0b3JlX2Zvcm1hdF94IHYwLCB2MCwgc19yc3JjLCBzX21lbV9vZmZzZXQgZm9ybWF0OkJVRl9OVU1fRk9STUFUX0ZMT0FUIGZvcm1hdDogQlVGX0RBVEFfRk9STUFUXzMyIHNsYzoxIGdsYzoxCgkJc19hZGRfdTMyCQlzX21lbV9vZmZzZXQsIHNfbWVtX29mZnNldCwgMTI4CiAgICBlbHNlIAogICAgICAgIHZfbW92X2IzMgl2MCwJcwoJCWJ1ZmZlcl9zdG9yZV9kd29yZAl2MCwgdjAsIHNfcnNyYywgc19tZW1fb2Zmc2V0CXNsYzoxIGdsYzoxCiAgICAgICAgc19hZGRfdTMyCQlzX21lbV9vZmZzZXQsIHNfbWVtX29mZnNldCwgMTI4CgllbmQKZW5kCgpmdW5jdGlvbiB3cml0ZV9zZ3ByX3RvX21lbV93YXZlNjQocywgc19yc3JjLCBzX21lbV9vZmZzZXQsIHVzZV9zcWMsIHVzZV9tdGJ1ZikKCWlmICh1c2Vfc3FjKQoJCXNfbW92X2IzMiBleGVjX2xvLCBtMAkJCQkJLy9hc3N1bWluZyBleGVjX2xvIGlzIG5vdCBuZWVkZWQgYW55bW9yZSBmcm9tIHRoaXMgcG9pbnQgb24KCQlzX21vdl9iMzIgbTAsIHNfbWVtX29mZnNldAoJCXNfYnVmZmVyX3N0b3JlX2R3b3JkIHMsIHNfcnNyYywgbTAJCWdsYzoxCQoJCXNfYWRkX3UzMgkJc19tZW1fb2Zmc2V0LCBzX21lbV9vZmZzZXQsIDQKCQlzX21vdl9iMzIJbTAsIGV4ZWNfbG8KICAgIGVsc2lmICh1c2VfbXRidWYpCiAgICAgICAgdl9tb3ZfYjMyCXYwLAlzCiAgICAgICAgdGJ1ZmZlcl9zdG9yZV9mb3JtYXRfeCB2MCwgdjAsIHNfcnNyYywgc19tZW1fb2Zmc2V0IGZvcm1hdDpCVUZfTlVNX0ZPUk1BVF9GTE9BVCBmb3JtYXQ6IEJVRl9EQVRBX0ZPUk1BVF8zMiBzbGM6MSBnbGM6MQoJCXNfYWRkX3UzMgkJc19tZW1fb2Zmc2V0LCBzX21lbV9vZmZzZXQsIDI1NgogICAgZWxzZSAKICAgICAgICB2X21vdl9iMzIJdjAsCXMKCQlidWZmZXJfc3RvcmVfZHdvcmQJdjAsIHYwLCBzX3JzcmMsIHNfbWVtX29mZnNldAlzbGM6MSBnbGM6MQogICAgICAgIHNfYWRkX3UzMgkJc19tZW1fb2Zmc2V0LCBzX21lbV9vZmZzZXQsIDI1NgoJZW5kCmVuZAoKZnVuY3Rpb24gcmVhZF9zZ3ByX2Zyb21fbWVtX3dhdmUzMihzLCBzX3JzcmMsIHNfbWVtX29mZnNldCwgdXNlX3NxYykKCXNfYnVmZmVyX2xvYWRfZHdvcmQgcywgc19yc3JjLCBzX21lbV9vZmZzZXQJCWdsYzoxCglpZiAodXNlX3NxYykKCQlzX2FkZF91MzIJCXNfbWVtX29mZnNldCwgc19tZW1fb2Zmc2V0LCA0CgllbHNlCiAgICAgICAgc19hZGRfdTMyCQlzX21lbV9vZmZzZXQsIHNfbWVtX29mZnNldCwgMTI4CgllbmQKZW5kCgpmdW5jdGlvbiByZWFkX3NncHJfZnJvbV9tZW1fd2F2ZTY0KHMsIHNfcnNyYywgc19tZW1fb2Zmc2V0LCB1c2Vfc3FjKQoJc19idWZmZXJfbG9hZF9kd29yZCBzLCBzX3JzcmMsIHNfbWVtX29mZnNldAkJZ2xjOjEKCWlmICh1c2Vfc3FjKQoJCXNfYWRkX3UzMgkJc19tZW1fb2Zmc2V0LCBzX21lbV9vZmZzZXQsIDQKCWVsc2UKICAgICAgICBzX2FkZF91MzIJCXNfbWVtX29mZnNldCwgc19tZW1fb2Zmc2V0LCAyNTYKCWVuZAplbmQKCg==