Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ29weXJpZ2h0KGMpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCmNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzKHRoZSAiU29mdHdhcmUiKSwKdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgp0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKYW5kIC8gb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCmluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMClRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCk9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLApBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgoKI2luY2x1ZGUgIkludGVybmFsL0NvbW1vbi9HbW1MaWJJbmMuaCIKI2luY2x1ZGUgIkludGVybmFsL0NvbW1vbi9QbGF0Zm9ybS9HbW1HZW4xMFBsYXRmb3JtLmgiCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLyBBbGxvY2F0ZXMgVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIG5lY2Vzc2FyeSBpbmZvIGJhc2VkIG9uIHBsYXRmb3JtLgovLy8gICAgICAgICAgICAgIC0gQnVmZmVyIHR5cGUgcmVzdHJpY3Rpb25zIChFZzogWiwgQ29sb3IsIERpc3BsYXkpCi8vLyAgICAgICAgICAgICAgLSBYL1kgdGlsZSBkaW1lbnNpb25zCi8vLwovLy8gQHBhcmFtW2luXSAgUGxhdGZvcm06IENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHBsYXRmb3JtIHRvIGluaXRpYWxpemUgYW4gb2JqZWN0Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KR21tTGliOjpQbGF0Zm9ybUluZm9HZW4xMDo6UGxhdGZvcm1JbmZvR2VuMTAoUExBVEZPUk0gJlBsYXRmb3JtKQogICAgOiBQbGF0Zm9ybUluZm8oUGxhdGZvcm0pCnsKICAgIF9fR01NX0FTU0VSVFBUUihwR21tR2xvYmFsQ29udGV4dCwgVk9JRFJFVFVSTik7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIE5vbiBOYXRpdmUgRGlzcGF5IEludGVyZmFjZSBidWZmZXIgcmVzdHJpY3Rpb24uIFJlZ2lzdGVyIFJlZjogRFNQQUNOVFIsIERTUEFTVFJJREUsIERTUEFTVVJGCiAgICAvLyBDbGFtcGluZyByZXMgYmFzZWQgb24gMiBObmRpIGJ1ZmZlcnMgYW5kIEdNTV9OTkRJX1NFR01FTlRfU0laRSByZXNlcnZlZCBnZnggbWVtb3J5CiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5ObmRpLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5ObmRpLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5ObmRpLlJlbmRlclBpdGNoQWxpZ25tZW50ID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5ObmRpLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5ObmRpLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDY0MCk7CiAgICBEYXRhLk5uZGkuTWF4UGl0Y2ggICAgICAgICAgICAgPSBHTU1fQllURVMoODE5Mik7CiAgICBEYXRhLk5uZGkuTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLk5uZGkuTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDIwMCk7CiAgICBEYXRhLk5uZGkuTWluV2lkdGggICAgICAgICAgICAgPSBHTU1fUElYRUxTKDMyMCk7CiAgICBEYXRhLk5uZGkuTWluRGVwdGggICAgICAgICAgICAgPSAwOwogICAgRGF0YS5ObmRpLk1heEhlaWdodCAgICAgICAgICAgID0gR01NX0JZVEVTKDE1MzYpOwogICAgRGF0YS5ObmRpLk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0JZVEVTKDIwNDgpOwogICAgRGF0YS5ObmRpLk1heERlcHRoICAgICAgICAgICAgID0gMTsKICAgIERhdGEuTm5kaS5NYXhBcnJheVNpemUgICAgICAgICA9IDE7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIERlcHRoIEJ1ZmZlciBSZXN0cmljdGlvbi4gSW5zdCBSZWY6IDNEU1RBVEVfREVQVEhfQlVGRkVSCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5EZXB0aC5BbGlnbm1lbnQgICAgICAgICAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuRGVwdGguUGl0Y2hBbGlnbm1lbnQgICAgICAgPSBHTU1fQllURVMoNjQpOwogICAgRGF0YS5EZXB0aC5SZW5kZXJQaXRjaEFsaWdubWVudCA9IEdNTV9CWVRFUyg2NCk7CiAgICBEYXRhLkRlcHRoLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR01NX0JZVEVTKDY0KTsKICAgIERhdGEuRGVwdGguTWluUGl0Y2ggICAgICAgICAgICAgPSBHTU1fQllURVMoNjQpOwogICAgRGF0YS5EZXB0aC5NYXhQaXRjaCAgICAgICAgICAgICA9IEdNTV9LQllURSgxMjgpOyAvLyAzRFNUQVRFX0RFUFRIX0JVRkZFUiBoYXMgY29uZmxpY3RpbmcgaW5mby0tYnV0IDEyOEtCIHNob3VsZCBiZSBmaW5lLgogICAgRGF0YS5EZXB0aC5NaW5BbGxvY2F0aW9uU2l6ZSAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuRGVwdGguTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDEpOwogICAgRGF0YS5EZXB0aC5NaW5XaWR0aCAgICAgICAgICAgICA9IEdNTV9QSVhFTFMoMSk7CiAgICBEYXRhLkRlcHRoLk1pbkRlcHRoICAgICAgICAgICAgID0gMDsKICAgIERhdGEuRGVwdGguTWF4SGVpZ2h0ICAgICAgICAgICAgPSBHTU1fS0JZVEUoMTYpOwogICAgRGF0YS5EZXB0aC5NYXhXaWR0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgxNik7CiAgICBEYXRhLkRlcHRoLk1heERlcHRoICAgICAgICAgICAgID0gR01NX0tCWVRFKDIpOwogICAgRGF0YS5EZXB0aC5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9LQllURSgyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gU3RlbmNpbCBCdWZmZXIgUmVzdHJpY3Rpb24uIEluc3QgUmVmOiAzRFNUQVRFX1NURU5DSUxfQlVGRkVSCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5TdGVuY2lsLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5TdGVuY2lsLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDEyOCk7CiAgICBEYXRhLlN0ZW5jaWwuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoMTI4KTsKICAgIERhdGEuU3RlbmNpbC5Mb2NrUGl0Y2hBbGlnbm1lbnQgICA9IEdNTV9CWVRFUygxMjgpOwogICAgRGF0YS5TdGVuY2lsLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDEyOCk7CiAgICBEYXRhLlN0ZW5jaWwuTWF4UGl0Y2ggICAgICAgICAgICAgPSBHTU1fS0JZVEUoMTI4KTsgLy8gM0RTVEFURV9TVEVOQ0lMX0JVRkZFUjogMipQaXRjaCA8PSAxMjhLQiAoR01NIGNsaWVudCBhbGxvY3MgMngtd2lkdGgsIHNvIEdNTSBsaW1pdHMgdG8gdGhhdC4pCiAgICBEYXRhLlN0ZW5jaWwuTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLlN0ZW5jaWwuTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDEpOwogICAgRGF0YS5TdGVuY2lsLk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuU3RlbmNpbC5NaW5EZXB0aCAgICAgICAgICAgICA9IDA7CiAgICBEYXRhLlN0ZW5jaWwuTWF4SGVpZ2h0ICAgICAgICAgICAgPSBHTU1fS0JZVEUoMTYpOwogICAgRGF0YS5TdGVuY2lsLk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0tCWVRFKDE2KTsKICAgIERhdGEuU3RlbmNpbC5NYXhEZXB0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgyKTsKICAgIERhdGEuU3RlbmNpbC5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9LQllURSgyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gSGllcmFyY2hpY2FsIERlcHRoIEJ1ZmZlciBSZXN0cmljdGlvbi4gSW5zdCBSZWY6IDNEU1RBVEVfSElFUl9ERVBUSF9CVUZGRVIKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLkhpWi5BbGlnbm1lbnQgICAgICAgICAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuSGlaLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDEyOCk7CiAgICBEYXRhLkhpWi5SZW5kZXJQaXRjaEFsaWdubWVudCA9IEdNTV9CWVRFUygxMjgpOwogICAgRGF0YS5IaVouTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoMTI4KTsKICAgIERhdGEuSGlaLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDEyOCk7CiAgICBEYXRhLkhpWi5NYXhQaXRjaCAgICAgICAgICAgICA9IEdNTV9LQllURSgxMjgpOwogICAgRGF0YS5IaVouTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLkhpWi5NaW5IZWlnaHQgICAgICAgICAgICA9IEdNTV9TQ0FOTElORVMoMSk7CiAgICBEYXRhLkhpWi5NaW5XaWR0aCAgICAgICAgICAgICA9IEdNTV9QSVhFTFMoMSk7CiAgICBEYXRhLkhpWi5NaW5EZXB0aCAgICAgICAgICAgICA9IDA7CiAgICBEYXRhLkhpWi5NYXhIZWlnaHQgICAgICAgICAgICA9IEdNTV9LQllURSgxNik7CiAgICBEYXRhLkhpWi5NYXhXaWR0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgxNik7CiAgICBEYXRhLkhpWi5NYXhEZXB0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgyKTsKICAgIERhdGEuSGlaLk1heEFycmF5U2l6ZSAgICAgICAgID0gR01NX0tCWVRFKDIpOwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBWZXJ0ZXggUmVzdHJpY3Rpb24uIEluc3QgUmVmOiAzRFNUQVRFX1ZFUlRFWF9CVUZGRVIsIDNEU1RBVEVfSU5TVEFOQ0VfU1RFUF9SQVRFCiAgICAvLyBOb3RlOiByZXN0cmljdGlvbnMgYXJlIGV4cGFuZGVkIGhlcmUgZm9yIFVNRCBmbGV4aWJpbGl0eS4KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlZlcnRleC5BbGlnbm1lbnQgICAgICAgICAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuVmVydGV4LlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5WZXJ0ZXguTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoMSk7CiAgICBEYXRhLlZlcnRleC5SZW5kZXJQaXRjaEFsaWdubWVudCA9IEdNTV9CWVRFUygxKTsKICAgIERhdGEuVmVydGV4Lk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5WZXJ0ZXguTWF4UGl0Y2ggICAgICAgICAgICAgPSBHTU1fR0JZVEUoMik7CiAgICBEYXRhLlZlcnRleC5NaW5BbGxvY2F0aW9uU2l6ZSAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuVmVydGV4Lk1pbkhlaWdodCAgICAgICAgICAgID0gR01NX1NDQU5MSU5FUygxKTsKICAgIERhdGEuVmVydGV4Lk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuVmVydGV4Lk1pbkRlcHRoICAgICAgICAgICAgID0gMDsKICAgIERhdGEuVmVydGV4Lk1heEhlaWdodCAgICAgICAgICAgID0gR01NX01CWVRFKDEyOCk7IC8vVE9ETyhNaW5vcik6IEhvdyBkb2VzIE1lZGlhIGZhaWwgd2hlbiB3ZSBjaGFuZ2UgdGhpcyB0byAxPyEKICAgIERhdGEuVmVydGV4Lk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0dCWVRFKDIpOwogICAgRGF0YS5WZXJ0ZXguTWF4RGVwdGggICAgICAgICAgICAgPSBHTU1fS0JZVEUoMik7CiAgICBEYXRhLlZlcnRleC5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9LQllURSgyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gSW5kZXggQnVmZmVyIFJlc3RyaWN0aW9uLiBJbnN0IFJlZjogM0RTVEFURV9JTkRFWF9CVUZGRVIKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLkluZGV4ID0gRGF0YS5WZXJ0ZXg7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIExpbmVhciBCdWZmZXIgUmVzdHJpY3Rpb24uIEdlbmVyYWwgcHVycG9zZS4gRmxleGlibGUuCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5MaW5lYXIuQWxpZ25tZW50ICAgICAgICAgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLkxpbmVhci5QaXRjaEFsaWdubWVudCAgICAgICA9IEdNTV9CWVRFUygxKTsKICAgIERhdGEuTGluZWFyLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5MaW5lYXIuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoMSk7CiAgICBEYXRhLkxpbmVhci5NaW5QaXRjaCAgICAgICAgICAgICA9IEdNTV9CWVRFUygxKTsKICAgIERhdGEuTGluZWFyLk1heFBpdGNoICAgICAgICAgICAgID0gR01NX0dCWVRFKDI1Nik7CiAgICBEYXRhLkxpbmVhci5NaW5BbGxvY2F0aW9uU2l6ZSAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuTGluZWFyLk1pbkhlaWdodCAgICAgICAgICAgID0gR01NX1NDQU5MSU5FUygxKTsKICAgIERhdGEuTGluZWFyLk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuTGluZWFyLk1pbkRlcHRoICAgICAgICAgICAgID0gMDsKICAgIERhdGEuTGluZWFyLk1heEhlaWdodCAgICAgICAgICAgID0gMTsKICAgIERhdGEuTGluZWFyLk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0dCWVRFKDI1Nik7CiAgICBEYXRhLkxpbmVhci5NYXhEZXB0aCAgICAgICAgICAgICA9IDE7CiAgICBEYXRhLkxpbmVhci5NYXhBcnJheVNpemUgICAgICAgICA9IDE7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIE5vIFN1cmZhY2UgUmVzdHJpY3Rpb24uIEdlbmVyYWwgcHVycG9zZS4gRmxleGlibGUuCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLlJlbmRlclBpdGNoQWxpZ25tZW50ID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDEpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLk1heFBpdGNoICAgICAgICAgICAgID0gR01NX1RCWVRFKDEyOCk7CiAgICBEYXRhLk5vUmVzdHJpY3Rpb24uTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLk5vUmVzdHJpY3Rpb24uTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDEpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuTm9SZXN0cmljdGlvbi5NaW5EZXB0aCAgICAgICAgICAgICA9IDA7CiAgICBEYXRhLk5vUmVzdHJpY3Rpb24uTWF4SGVpZ2h0ICAgICAgICAgICAgPSBHTU1fR0JZVEUoMjU2KTsKICAgIERhdGEuTm9SZXN0cmljdGlvbi5NYXhXaWR0aCAgICAgICAgICAgICA9IEdNTV9UQllURSgxMjgpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLk1heERlcHRoICAgICAgICAgICAgID0gR01NX0tCWVRFKDIpOwogICAgRGF0YS5Ob1Jlc3RyaWN0aW9uLk1heEFycmF5U2l6ZSAgICAgICAgID0gR01NX0tCWVRFKDIpOwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBDb25zdGFudCBCdWZmZXIgUmVzdHJpY3Rpb24uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5Db25zdGFudCA9IERhdGEuTm9SZXN0cmljdGlvbjsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gRHg5IENvbnN0YW50IEJ1ZmZlciBwb29sIFJlc3RyaWN0aW9uLiBJbnN0IFJlZjogM0RTVEFURV9EWDlfQ09OU1RBTlRfQlVGRkVSX1BPT0xfQUxMT0MKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlN0YXRlRHg5Q29uc3RhbnRCdWZmZXIgICAgICAgICAgID0gRGF0YS5Ob1Jlc3RyaWN0aW9uOwogICAgRGF0YS5TdGF0ZUR4OUNvbnN0YW50QnVmZmVyLkFsaWdubWVudCA9IEdNTV9LQllURSg4KTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gTUMgQnVmZmVyIFJlc3RyaWN0aW9uCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5Nb3Rpb25Db21wICAgICAgICAgICAgICAgICAgICAgID0gRGF0YS5Ob1Jlc3RyaWN0aW9uOwogICAgRGF0YS5Nb3Rpb25Db21wLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5Nb3Rpb25Db21wLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuTW90aW9uQ29tcC5Mb2NrUGl0Y2hBbGlnbm1lbnQgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLk1vdGlvbkNvbXAuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5Nb3Rpb25Db21wLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDMyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gU3RyZWFtIEJ1ZmZlciBSZXN0cmljdGlvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuU3RyZWFtID0gRGF0YS5Ob1Jlc3RyaWN0aW9uOwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBJbnRlcmxhY2UgU2NhbiBCdWZmZXIgUmVzdHJpY3Rpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLkludGVybGFjZWRTY2FuID0gRGF0YS5Ob1Jlc3RyaWN0aW9uOwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBUZXh0IEFQSSBCdWZmZXIgUmVzdHJpY3Rpb24KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlRleHRBcGkgPSBEYXRhLk5vUmVzdHJpY3Rpb247CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFJUICYgVGV4dHVyZTJEU3VyZmFjZSByZXN0cmljdGlvbnMuIEluc3QgUmVmOiBTVVJGQUNFX1NUQVRFCiAgICAvLyBHcmVhdGVzdCBjb21tb24gcmVzdHJpY3Rpb24gc291cmNlIGNvbWVzIGZyb20gOGJwcCBSVAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5BbGlnbm1lbnQgICAgICAgICAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5QaXRjaEFsaWdubWVudCAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5UZXh0dXJlMkRTdXJmYWNlLlJlbmRlclBpdGNoQWxpZ25tZW50ID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NaW5QaXRjaCAgICAgICAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTWF4UGl0Y2ggICAgICAgICAgICAgPSAocEdtbUdsb2JhbENvbnRleHQtPkdldFdhVGFibGUoKS5XYVJlc3RyaWN0UGl0Y2gxMjhLQikgPyBHTU1fS0JZVEUoMTI4KSA6IEdNTV9LQllURSgyNTYpOwogICAgRGF0YS5UZXh0dXJlMkRTdXJmYWNlLk1pbkFsbG9jYXRpb25TaXplICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5UZXh0dXJlMkRTdXJmYWNlLk1pbkhlaWdodCAgICAgICAgICAgID0gR01NX1NDQU5MSU5FUygxKTsKICAgIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NaW5XaWR0aCAgICAgICAgICAgICA9IEdNTV9QSVhFTFMoMSk7CiAgICBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTWluRGVwdGggICAgICAgICAgICAgPSAwOwogICAgRGF0YS5UZXh0dXJlMkRTdXJmYWNlLk1heEhlaWdodCAgICAgICAgICAgID0gR01NX0tCWVRFKDE2KTsKICAgIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NYXhXaWR0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgxNik7CiAgICBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTWF4RGVwdGggICAgICAgICAgICAgPSBHTU1fRklFTERfTkE7CiAgICBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTWF4QXJyYXlTaXplICAgICAgICAgPSBHTU1fS0JZVEUoMik7CgogICAgewogICAgICAgIC8vIExpbmVhciBzdXJmYWNlcyBhY2Nlc3NlZCB3aXRoIE1lZGlhIEJsb2NrIFJlYWQvV3JpdGUgY29tbWFuZHMKICAgICAgICAvLyByZXF1aXJlIDY0LWJ5dGUtYWxpZ25lZCBwaXRjaC4gU3VjaCBjb21tYW5kcyBvbmx5IG9wZXJhdGUgb24gMkQKICAgICAgICAvLyByZXNvdXJjZXMsIHNvIHdlJ2xsIGhhbmRsZSB0aGUgcmVxdWlyZW1lbnQgaGVyZS4gVGhvdWdoIHJlcXVpcmVtZW50CiAgICAgICAgLy8gYXBwbGllcyB0byBsaW5lYXIgc3VyZmFjZXMgb25seSwgb3VyIHVwJ2luZyB0aGUgcGl0Y2ggYWxpZ25tZW50IHRvCiAgICAgICAgLy8gNjQgYnl0ZXMgaGVyZSB3b24ndCBhZmZlY3QgdGlsZWQgc3VyZmFjZXMsIHNpbmNlIHRoZWlyIHBpdGNoCiAgICAgICAgLy8gYWxpZ25tZW50IGlzIG5ldmVyIHNtYWxsZXIgdGhhbiB0aGF0LgogICAgICAgIERhdGEuVGV4dHVyZTJETGluZWFyU3VyZmFjZSAgICAgICAgICAgICAgICAgICAgICA9IERhdGEuVGV4dHVyZTJEU3VyZmFjZTsKICAgICAgICBEYXRhLlRleHR1cmUyRExpbmVhclN1cmZhY2UuUGl0Y2hBbGlnbm1lbnQgICAgICAgPSBHRlhfTUFYKEdNTV9CWVRFUyg2NCksIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5QaXRjaEFsaWdubWVudCk7CiAgICAgICAgRGF0YS5UZXh0dXJlMkRMaW5lYXJTdXJmYWNlLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR0ZYX01BWChHTU1fQllURVMoNjQpLCBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTG9ja1BpdGNoQWxpZ25tZW50KTsKICAgICAgICBEYXRhLlRleHR1cmUyRExpbmVhclN1cmZhY2UuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHRlhfTUFYKEdNTV9CWVRFUyg2NCksIERhdGEuVGV4dHVyZTJEU3VyZmFjZS5SZW5kZXJQaXRjaEFsaWdubWVudCk7CiAgICB9CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEFzeW5jRmxpcCBSZXN0cmljdGlvbi4gUmVnaXN0ZXIgUmVmOiBQUklfU1RSSURFLCBQUklfU1VSRiwgU1JDU1ogPC0tIFRPRE8oTWlub3IpOiBTUkNTWiBjb3JyZWN0IHJlZyBmb3IgVy9IIHJlcSdzPwogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5BbGlnbm1lbnQgICAgICAgICAgICA9IEdNTV9LQllURSgyNTYpOwogICAgRGF0YS5BU3luY0ZsaXBTdXJmYWNlLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDY0KTsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5SZW5kZXJQaXRjaEFsaWdubWVudCA9IEdNTV9CWVRFUyg2NCk7CiAgICBEYXRhLkFTeW5jRmxpcFN1cmZhY2UuTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoNjQpOwogICAgRGF0YS5BU3luY0ZsaXBTdXJmYWNlLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDY0KTsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5NYXhQaXRjaCAgICAgICAgICAgICA9IERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NYXhQaXRjaDsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5NaW5BbGxvY2F0aW9uU2l6ZSAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5NaW5IZWlnaHQgICAgICAgICAgICA9IEdNTV9TQ0FOTElORVMoMSk7CiAgICBEYXRhLkFTeW5jRmxpcFN1cmZhY2UuTWluV2lkdGggICAgICAgICAgICAgPSBHTU1fUElYRUxTKDEpOwogICAgRGF0YS5BU3luY0ZsaXBTdXJmYWNlLk1pbkRlcHRoICAgICAgICAgICAgID0gMDsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5NYXhIZWlnaHQgICAgICAgICAgICA9IERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NYXhIZWlnaHQ7IC8vIEJleW9uZCBERSByZXF1aXJlbWVudHMtTmVjZXNzYXJ5IGZvciBtb3NhaWMgZnJhbWVidWZmZXJzCiAgICBEYXRhLkFTeW5jRmxpcFN1cmZhY2UuTWF4V2lkdGggICAgICAgICAgICAgPSBEYXRhLlRleHR1cmUyRFN1cmZhY2UuTWF4V2lkdGg7ICAvLyBPa2F5IHNpbmNlIEdNTSBpc24ndCBhY3R1YWwgZGlzcGxheSByZXF1aXJlbWVudCBnYXRla2VlcGVyLgogICAgRGF0YS5BU3luY0ZsaXBTdXJmYWNlLk1heERlcHRoICAgICAgICAgICAgID0gMTsKICAgIERhdGEuQVN5bmNGbGlwU3VyZmFjZS5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9LQllURSgyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gSGFyZHdhcmUgTUJNIFJlc3RyaWN0aW9uLgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuSGFyZHdhcmVNQk0gPSBEYXRhLkFTeW5jRmxpcFN1cmZhY2U7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFZpZGVvIEJ1ZmZlciBSZXN0cmljdGlvbgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuVmlkZW8gPSBEYXRhLlRleHR1cmUyRExpbmVhclN1cmZhY2U7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIE92ZXJsYXkgQnVmZmVyIFJlc3RyaWN0aW9uLiBPdmVybGF5IGJ1ZmZlciByZXN0cmljdGlvbiB3aWxsIGJlIHNhbWUgYXMgQXN5bmMgZmxpcCBzdXJmYWNlIHNpbmNlIENOTCBoYXMgdW5pdmVyc2FsIHBsYW5lcy4KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLk92ZXJsYXkgPSBEYXRhLkFTeW5jRmxpcFN1cmZhY2U7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFJUICYgQ3ViZVN1cmZhY2UgcmVzdHJpY3Rpb25zLiBJbnN0IFJlZjogU1VSRkFDRV9TVEFURQogICAgLy8gR3JlYXRlc3QgY29tbW9uIHJlc3RyaWN0aW9uIHNvdXJjZSBjb21lcyBmcm9tIDhicHAgUlQKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLkN1YmVTdXJmYWNlLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5DdWJlU3VyZmFjZS5QaXRjaEFsaWdubWVudCAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLkN1YmVTdXJmYWNlLkxvY2tQaXRjaEFsaWdubWVudCAgID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuQ3ViZVN1cmZhY2UuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5DdWJlU3VyZmFjZS5NaW5QaXRjaCAgICAgICAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLkN1YmVTdXJmYWNlLk1heFBpdGNoICAgICAgICAgICAgID0gKHBHbW1HbG9iYWxDb250ZXh0LT5HZXRXYVRhYmxlKCkuV2FSZXN0cmljdFBpdGNoMTI4S0IpID8gR01NX0tCWVRFKDEyOCkgOiBHTU1fS0JZVEUoMjU2KTsKICAgIERhdGEuQ3ViZVN1cmZhY2UuTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLkN1YmVTdXJmYWNlLk1pbkhlaWdodCAgICAgICAgICAgID0gR01NX1NDQU5MSU5FUygxKTsKICAgIERhdGEuQ3ViZVN1cmZhY2UuTWluV2lkdGggICAgICAgICAgICAgPSBHTU1fUElYRUxTKDEpOwogICAgRGF0YS5DdWJlU3VyZmFjZS5NaW5EZXB0aCAgICAgICAgICAgICA9IDA7CiAgICBEYXRhLkN1YmVTdXJmYWNlLk1heEhlaWdodCAgICAgICAgICAgID0gR01NX0tCWVRFKDE2KTsKICAgIERhdGEuQ3ViZVN1cmZhY2UuTWF4V2lkdGggICAgICAgICAgICAgPSBHTU1fS0JZVEUoMTYpOwogICAgRGF0YS5DdWJlU3VyZmFjZS5NYXhEZXB0aCAgICAgICAgICAgICA9IDE7CiAgICBEYXRhLkN1YmVTdXJmYWNlLk1heEFycmF5U2l6ZSAgICAgICAgID0gR01NX0tCWVRFKDIpIC8gNjsgLy8gTWF4RWxlbWVudHMgLyBDdWJlZmFjZXMKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gUlQgJiAzRCBTdXJmYWNlIHJlc3RyaWN0aW9ucy4gSW5zdCBSZWY6IFNVUkZBQ0VfU1RBVEUKICAgIC8vIEdyZWF0ZXN0IGNvbW1vbiByZXN0cmljdGlvbiBzb3VyY2UgY29tZXMgZnJvbSA4YnBwIFJUCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5UZXh0dXJlM0RTdXJmYWNlLkFsaWdubWVudCAgICAgICAgICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5UZXh0dXJlM0RTdXJmYWNlLlBpdGNoQWxpZ25tZW50ICAgICAgID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuVGV4dHVyZTNEU3VyZmFjZS5Mb2NrUGl0Y2hBbGlnbm1lbnQgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLlRleHR1cmUzRFN1cmZhY2UuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5UZXh0dXJlM0RTdXJmYWNlLk1pblBpdGNoICAgICAgICAgICAgID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuVGV4dHVyZTNEU3VyZmFjZS5NYXhQaXRjaCAgICAgICAgICAgICA9IChwR21tR2xvYmFsQ29udGV4dC0+R2V0V2FUYWJsZSgpLldhUmVzdHJpY3RQaXRjaDEyOEtCKSA/IEdNTV9LQllURSgxMjgpIDogR01NX0tCWVRFKDI1Nik7CiAgICBEYXRhLlRleHR1cmUzRFN1cmZhY2UuTWluQWxsb2NhdGlvblNpemUgICAgPSBQQUdFX1NJWkU7CiAgICBEYXRhLlRleHR1cmUzRFN1cmZhY2UuTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDEpOwogICAgRGF0YS5UZXh0dXJlM0RTdXJmYWNlLk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuVGV4dHVyZTNEU3VyZmFjZS5NaW5EZXB0aCAgICAgICAgICAgICA9IDA7CiAgICBEYXRhLlRleHR1cmUzRFN1cmZhY2UuTWF4SGVpZ2h0ICAgICAgICAgICAgPSBHTU1fS0JZVEUoMTYpOwogICAgRGF0YS5UZXh0dXJlM0RTdXJmYWNlLk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0tCWVRFKDE2KTsKICAgIERhdGEuVGV4dHVyZTNEU3VyZmFjZS5NYXhEZXB0aCAgICAgICAgICAgICA9IEdNTV9LQllURSgyKTsKICAgIERhdGEuVGV4dHVyZTNEU3VyZmFjZS5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9GSUVMRF9OQTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gUlQgJiBCdWZmZXIgVHlwZSByZXN0cmljdGlvbnMuIEluc3QgUmVmOiBTVVJGQUNFX1NUQVRFCiAgICAvLyBHcmVhdGVzdCBjb21tb24gcmVzdHJpY3Rpb24gc291cmNlIGNvbWVzIGZyb20gOGJwcCBSVAogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuQnVmZmVyVHlwZS5BbGlnbm1lbnQgICAgICAgICAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuQnVmZmVyVHlwZS5QaXRjaEFsaWdubWVudCAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLkJ1ZmZlclR5cGUuTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5CdWZmZXJUeXBlLlJlbmRlclBpdGNoQWxpZ25tZW50ID0gR01NX0JZVEVTKDMyKTsKICAgIERhdGEuQnVmZmVyVHlwZS5NaW5QaXRjaCAgICAgICAgICAgICA9IEdNTV9CWVRFUygzMik7CiAgICBEYXRhLkJ1ZmZlclR5cGUuTWF4UGl0Y2ggICAgICAgICAgICAgPSBHTU1fR0JZVEUoMjU2KTsKICAgIERhdGEuQnVmZmVyVHlwZS5NaW5BbGxvY2F0aW9uU2l6ZSAgICA9IFBBR0VfU0laRTsKICAgIERhdGEuQnVmZmVyVHlwZS5NaW5IZWlnaHQgICAgICAgICAgICA9IEdNTV9TQ0FOTElORVMoMCk7CiAgICBEYXRhLkJ1ZmZlclR5cGUuTWluV2lkdGggICAgICAgICAgICAgPSBHTU1fUElYRUxTKDEpOwogICAgRGF0YS5CdWZmZXJUeXBlLk1pbkRlcHRoICAgICAgICAgICAgID0gMDsKICAgIERhdGEuQnVmZmVyVHlwZS5NYXhIZWlnaHQgICAgICAgICAgICA9IEdNTV9TQ0FOTElORVMoMSk7CiAgICBEYXRhLkJ1ZmZlclR5cGUuTWF4V2lkdGggICAgICAgICAgICAgPSBHTU1fR0JZVEUoMjU2KTsKICAgIERhdGEuQnVmZmVyVHlwZS5NYXhEZXB0aCAgICAgICAgICAgICA9IEdNTV9GSUVMRF9OQTsKICAgIERhdGEuQnVmZmVyVHlwZS5NYXhBcnJheVNpemUgICAgICAgICA9IEdNTV9HQllURSgyKTsKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQ3Vyc29yIHN1cmZhY2UgcmVzdHJpY2lvbi4gUmVnaXN0ZXIgUmVmOiBDVVJBQ05UUiwgQ1VSQUJBU0UKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLkN1cnNvci5BbGlnbm1lbnQgICAgICAgICAgICA9IHBHbW1HbG9iYWxDb250ZXh0LT5HZXRXYVRhYmxlKCkuV2FDdXJzb3IxNksgPyBHTU1fS0JZVEUoMTYpIDogUEFHRV9TSVpFOwogICAgRGF0YS5DdXJzb3IuUGl0Y2hBbGlnbm1lbnQgICAgICAgPSAxOwogICAgRGF0YS5DdXJzb3IuTG9ja1BpdGNoQWxpZ25tZW50ICAgPSAxOwogICAgRGF0YS5DdXJzb3IuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSAxOwogICAgRGF0YS5DdXJzb3IuTWluUGl0Y2ggICAgICAgICAgICAgPSAxOwogICAgRGF0YS5DdXJzb3IuTWF4UGl0Y2ggICAgICAgICAgICAgPSAweGZmZmZmZmZmOwogICAgRGF0YS5DdXJzb3IuTWluQWxsb2NhdGlvblNpemUgICAgPSAxOwogICAgRGF0YS5DdXJzb3IuTWluSGVpZ2h0ICAgICAgICAgICAgPSBHTU1fU0NBTkxJTkVTKDEpOwogICAgRGF0YS5DdXJzb3IuTWluV2lkdGggICAgICAgICAgICAgPSAxOwogICAgRGF0YS5DdXJzb3IuTWluRGVwdGggICAgICAgICAgICAgPSAwOwogICAgRGF0YS5DdXJzb3IuTWF4SGVpZ2h0ICAgICAgICAgICAgPSAweGZmZmZmZmZmOwogICAgRGF0YS5DdXJzb3IuTWF4V2lkdGggICAgICAgICAgICAgPSAweGZmZmZmZmZmOwogICAgRGF0YS5DdXJzb3IuTWF4RGVwdGggICAgICAgICAgICAgPSAweGZmZmZmZmZmOwogICAgRGF0YS5DdXJzb3IuTWF4QXJyYXlTaXplICAgICAgICAgPSAxOwoKICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgV2lkdGgsICAgSGVpZ2h0LCAgICBEZXB0aCwgIE10c1dpZHRoLCAgTXRzSGVpZ2h0LCBNdHNEZXB0aCAqLwogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIC8vIExlZ2FjeSBUSUxFX1gvWQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKExFR0FDWV9USUxFX1gsICAgICAgICAgICAgNTEyLCAgICAgICAgOCwgICAgICAgIDEsICAgICAgICAgMCwgICAgICAgICAwLCAgICAgICAgIDApCiAgICBTRVRfVElMRV9NT0RFX0lORk8oTEVHQUNZX1RJTEVfWSwgICAgICAgICAgICAxMjgsICAgICAgIDMyLCAgICAgICAgMSwgICAgICAgICAwLCAgICAgICAgIDAsICAgICAgICAgMCkKICAgIC8vIFlTIDFECiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18xRF8xMjhicGUsICAgICAgIDQwOTYsICAgICAgICAxLCAgICAgICAgMSwgICAgICAxMDI0LCAgICAgICAgIDEsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzFEXzY0YnBlLCAgICAgICAgODE5MiwgICAgICAgIDEsICAgICAgICAxLCAgICAgIDIwNDgsICAgICAgICAgMSwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMURfMzJicGUsICAgICAgIDE2Mzg0LCAgICAgICAgMSwgICAgICAgIDEsICAgICAgNDA5NiwgICAgICAgICAxLCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18xRF8xNmJwZSwgICAgICAgMzI3NjgsICAgICAgICAxLCAgICAgICAgMSwgICAgICA4MTkyLCAgICAgICAgIDEsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzFEXzhicGUsICAgICAgICA2NTUzNiwgICAgICAgIDEsICAgICAgICAxLCAgICAgMTYzODQsICAgICAgICAgMSwgICAgICAgICAxKQogICAgLy8gWVMgMkQKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzEyOGJwZSwgICAgICAgMTAyNCwgICAgICAgNjQsICAgICAgICAxLCAgICAgICAgMzIsICAgICAgICA2NCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfNjRicGUsICAgICAgICAxMDI0LCAgICAgICA2NCwgICAgICAgIDEsICAgICAgICA2NCwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF8zMmJwZSwgICAgICAgICA1MTIsICAgICAgMTI4LCAgICAgICAgMSwgICAgICAgIDY0LCAgICAgICAxMjgsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzE2YnBlLCAgICAgICAgIDUxMiwgICAgICAxMjgsICAgICAgICAxLCAgICAgICAxMjgsICAgICAgIDEyOCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfOGJwZSwgICAgICAgICAgMjU2LCAgICAgIDI1NiwgICAgICAgIDEsICAgICAgIDEyOCwgICAgICAgMjU2LCAgICAgICAgIDEpCiAgICAvLyBZUyAyRCAyWAogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfMlhfMTI4YnBlLCAgICAgNTEyLCAgICAgICA2NCwgICAgICAgIDEsICAgICAgICAzMiwgICAgICAgIDMyLCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF8yWF82NGJwZSwgICAgICA1MTIsICAgICAgIDY0LCAgICAgICAgMSwgICAgICAgIDY0LCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzJYXzMyYnBlLCAgICAgIDI1NiwgICAgICAxMjgsICAgICAgICAxLCAgICAgICAgNjQsICAgICAgICA2NCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfMlhfMTZicGUsICAgICAgMjU2LCAgICAgIDEyOCwgICAgICAgIDEsICAgICAgIDEyOCwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF8yWF84YnBlLCAgICAgICAxMjgsICAgICAgMjU2LCAgICAgICAgMSwgICAgICAgMTI4LCAgICAgICAxMjgsICAgICAgICAgMSkKICAgIC8vIFlTIDJEIDRYCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF80WF8xMjhicGUsICAgICA1MTIsICAgICAgIDMyLCAgICAgICAgMSwgICAgICAgIDE2LCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzRYXzY0YnBlLCAgICAgIDUxMiwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgMzIsICAgICAgICAzMiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfNFhfMzJicGUsICAgICAgMjU2LCAgICAgICA2NCwgICAgICAgIDEsICAgICAgICAzMiwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF80WF8xNmJwZSwgICAgICAyNTYsICAgICAgIDY0LCAgICAgICAgMSwgICAgICAgIDY0LCAgICAgICAgNjQsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzRYXzhicGUsICAgICAgIDEyOCwgICAgICAxMjgsICAgICAgICAxLCAgICAgICAgNjQsICAgICAgIDEyOCwgICAgICAgICAxKQogICAgLy8gWVMgMkQgOFgKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzhYXzEyOGJwZSwgICAgIDI1NiwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgMTYsICAgICAgICAxNiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfOFhfNjRicGUsICAgICAgMjU2LCAgICAgICAzMiwgICAgICAgIDEsICAgICAgICAzMiwgICAgICAgIDE2LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF84WF8zMmJwZSwgICAgICAxMjgsICAgICAgIDY0LCAgICAgICAgMSwgICAgICAgIDMyLCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzhYXzE2YnBlLCAgICAgIDEyOCwgICAgICAgNjQsICAgICAgICAxLCAgICAgICAgNjQsICAgICAgICAzMiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfOFhfOGJwZSwgICAgICAgIDY0LCAgICAgIDEyOCwgICAgICAgIDEsICAgICAgICA2NCwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICAvLyBZUyAyRCAxNlgKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzE2WF8xMjhicGUsICAgIDI1NiwgICAgICAgMTYsICAgICAgICAxLCAgICAgICAgIDgsICAgICAgICAxNiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfMTZYXzY0YnBlLCAgICAgMjU2LCAgICAgICAxNiwgICAgICAgIDEsICAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18yRF8xNlhfMzJicGUsICAgICAxMjgsICAgICAgIDMyLCAgICAgICAgMSwgICAgICAgIDE2LCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzJEXzE2WF8xNmJwZSwgICAgIDEyOCwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgMzIsICAgICAgICAzMiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfMkRfMTZYXzhicGUsICAgICAgIDY0LCAgICAgICA2NCwgICAgICAgIDEsICAgICAgICAzMiwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICAvLyBZUyAzRAogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfM0RfMTI4YnBlLCAgICAgICAgMjU2LCAgICAgICAxNiwgICAgICAgMTYsICAgICAgICAgOCwgICAgICAgIDE2LCAgICAgICAgMTYpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18zRF82NGJwZSwgICAgICAgICAyNTYsICAgICAgIDE2LCAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgMTYsICAgICAgICAxNikKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lTXzNEXzMyYnBlLCAgICAgICAgIDEyOCwgICAgICAgMzIsICAgICAgIDE2LCAgICAgICAgMTYsICAgICAgICAzMiwgICAgICAgIDE2KQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWVNfM0RfMTZicGUsICAgICAgICAgIDY0LCAgICAgICAzMiwgICAgICAgMzIsICAgICAgICAxNiwgICAgICAgIDMyLCAgICAgICAgMzIpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZU18zRF84YnBlLCAgICAgICAgICAgNjQsICAgICAgIDMyLCAgICAgICAzMiwgICAgICAgIDMyLCAgICAgICAgMzIsICAgICAgICAzMikKICAgIC8vIFlGIDFECiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8xRF8xMjhicGUsICAgICAgICAyNTYsICAgICAgICAxLCAgICAgICAgMSwgICAgICAgIDY0LCAgICAgICAgIDEsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzFEXzY0YnBlLCAgICAgICAgIDUxMiwgICAgICAgIDEsICAgICAgICAxLCAgICAgICAxMjgsICAgICAgICAgMSwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMURfMzJicGUsICAgICAgICAxMDI0LCAgICAgICAgMSwgICAgICAgIDEsICAgICAgIDI1NiwgICAgICAgICAxLCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8xRF8xNmJwZSwgICAgICAgIDIwNDgsICAgICAgICAxLCAgICAgICAgMSwgICAgICAgNTEyLCAgICAgICAgIDEsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzFEXzhicGUsICAgICAgICAgNDA5NiwgICAgICAgIDEsICAgICAgICAxLCAgICAgIDEwMjQsICAgICAgICAgMSwgICAgICAgICAxKQogICAgLy8gWUYgMkQKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzEyOGJwZSwgICAgICAgIDI1NiwgICAgICAgMTYsICAgICAgICAxLCAgICAgICAgIDgsICAgICAgICAxNiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfNjRicGUsICAgICAgICAgMjU2LCAgICAgICAxNiwgICAgICAgIDEsICAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF8zMmJwZSwgICAgICAgICAxMjgsICAgICAgIDMyLCAgICAgICAgMSwgICAgICAgIDE2LCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzE2YnBlLCAgICAgICAgIDEyOCwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgMzIsICAgICAgICAzMiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfOGJwZSwgICAgICAgICAgIDY0LCAgICAgICA2NCwgICAgICAgIDEsICAgICAgICAzMiwgICAgICAgIDY0LCAgICAgICAgIDEpCiAgICAvLyBZRiAyRCAyWAogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfMlhfMTI4YnBlLCAgICAgMTI4LCAgICAgICAxNiwgICAgICAgIDEsICAgICAgICAgNCwgICAgICAgICA4LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF8yWF82NGJwZSwgICAgICAxMjgsICAgICAgIDE2LCAgICAgICAgMSwgICAgICAgICA4LCAgICAgICAgIDgsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzJYXzMyYnBlLCAgICAgICA2NCwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgIDgsICAgICAgICAxNiwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfMlhfMTZicGUsICAgICAgIDY0LCAgICAgICAzMiwgICAgICAgIDEsICAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF8yWF84YnBlLCAgICAgICAgMzIsICAgICAgIDY0LCAgICAgICAgMSwgICAgICAgIDE2LCAgICAgICAgMzIsICAgICAgICAgMSkKICAgIC8vIFlGIDJEIDRYCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF80WF8xMjhicGUsICAgICAxMjgsICAgICAgICA4LCAgICAgICAgMSwgICAgICAgICA0LCAgICAgICAgIDQsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzRYXzY0YnBlLCAgICAgIDEyOCwgICAgICAgIDgsICAgICAgICAxLCAgICAgICAgIDgsICAgICAgICAgNCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfNFhfMzJicGUsICAgICAgIDY0LCAgICAgICAxNiwgICAgICAgIDEsICAgICAgICAgOCwgICAgICAgICA4LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF80WF8xNmJwZSwgICAgICAgNjQsICAgICAgIDE2LCAgICAgICAgMSwgICAgICAgIDE2LCAgICAgICAgIDgsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzRYXzhicGUsICAgICAgICAzMiwgICAgICAgMzIsICAgICAgICAxLCAgICAgICAgMTYsICAgICAgICAxNiwgICAgICAgICAxKQogICAgLy8gWUYgMkQgOFgKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzhYXzEyOGJwZSwgICAgICA2NCwgICAgICAgIDgsICAgICAgICAxLCAgICAgICAgIDQsICAgICAgICAgNCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfOFhfNjRicGUsICAgICAgIDY0LCAgICAgICAgOCwgICAgICAgIDEsICAgICAgICAgOCwgICAgICAgICA0LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF84WF8zMmJwZSwgICAgICAgMzIsICAgICAgIDE2LCAgICAgICAgMSwgICAgICAgICA4LCAgICAgICAgIDgsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzhYXzE2YnBlLCAgICAgICAzMiwgICAgICAgMTYsICAgICAgICAxLCAgICAgICAgMTYsICAgICAgICAgOCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfOFhfOGJwZSwgICAgICAgIDE2LCAgICAgICAzMiwgICAgICAgIDEsICAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgIDEpCiAgICAvLyBZRiAyRCAxNlgKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzE2WF8xMjhicGUsICAgICA2NCwgICAgICAgIDQsICAgICAgICAxLCAgICAgICAgIDEsICAgICAgICAgNCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfMTZYXzY0YnBlLCAgICAgIDY0LCAgICAgICAgNCwgICAgICAgIDEsICAgICAgICAgMiwgICAgICAgICA0LCAgICAgICAgIDEpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8yRF8xNlhfMzJicGUsICAgICAgMzIsICAgICAgICA4LCAgICAgICAgMSwgICAgICAgICA0LCAgICAgICAgIDQsICAgICAgICAgMSkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzJEXzE2WF8xNmJwZSwgICAgICAzMiwgICAgICAgIDgsICAgICAgICAxLCAgICAgICAgIDgsICAgICAgICAgNCwgICAgICAgICAxKQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfMkRfMTZYXzhicGUsICAgICAgIDE2LCAgICAgICAxNiwgICAgICAgIDEsICAgICAgICAgOCwgICAgICAgICA0LCAgICAgICAgIDEpCiAgICAvLyBZRiAzRAogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfM0RfMTI4YnBlLCAgICAgICAgIDY0LCAgICAgICAgOCwgICAgICAgIDgsICAgICAgICAgNCwgICAgICAgICA0LCAgICAgICAgIDgpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8zRF82NGJwZSwgICAgICAgICAgNjQsICAgICAgICA4LCAgICAgICAgOCwgICAgICAgICA4LCAgICAgICAgIDQsICAgICAgICAgOCkKICAgIFNFVF9USUxFX01PREVfSU5GTyhUSUxFX1lGXzNEXzMyYnBlLCAgICAgICAgICAzMiwgICAgICAgMTYsICAgICAgICA4LCAgICAgICAgIDgsICAgICAgICAgOCwgICAgICAgICA4KQogICAgU0VUX1RJTEVfTU9ERV9JTkZPKFRJTEVfWUZfM0RfMTZicGUsICAgICAgICAgIDE2LCAgICAgICAxNiwgICAgICAgMTYsICAgICAgICAgOCwgICAgICAgICA4LCAgICAgICAgMTYpCiAgICBTRVRfVElMRV9NT0RFX0lORk8oVElMRV9ZRl8zRF84YnBlLCAgICAgICAgICAgMTYsICAgICAgIDE2LCAgICAgICAxNiwgICAgICAgIDE2LCAgICAgICAgIDgsICAgICAgICAxNikKICAgIC8vIGNsYW5nLWZvcm1hdCBvbgoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIEZlbmNlIHBhcmFtYXRlcnMuIFJlZ2lzdGVyIFJlZjogRkVOQ0UKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIERhdGEuTnVtYmVyRmVuY2VSZWdpc3RlcnMgPSBwR21tR2xvYmFsQ29udGV4dC0+R2V0V2FUYWJsZSgpLldhMTZUaWxlRmVuY2VzT25seSA/IDE2IDogMzI7CiAgICBEYXRhLkZlbmNlTG93Qm91bmRTaGlmdCAgID0gMTI7CiAgICBEYXRhLkZlbmNlTG93Qm91bmRNYXNrICAgID0gR0ZYX01BU0soMTIsIDMxKTsKICAgIERhdGEuTWluRmVuY2VTaXplICAgICAgICAgPSBHTU1fTUJZVEUoMSk7CgogICAgRGF0YS5QYWdpbmdCdWZmZXJQcml2YXRlRGF0YVNpemUgPSBHTU1fS0JZVEUoNCk7CiAgICBEYXRhLk1heExvZCAgICAgICAgICAgICAgICAgICAgICA9IDE0OyAvLyBbMCwxNF0gLS0+IDE1IFRvdGFsCgogICAgRGF0YS5GQkNSZXF1aXJlZFN0b2xlbk1lbW9yeVNpemUgPSBHTU1fTUJZVEUoOCk7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFN1cmZhY2UgQWxpZ25tZW50IFVuaXRzCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgRGF0YS5UZXhBbGlnbi5DQ1MuQWxpZ24uV2lkdGggICAgICAgICAgICAgICAgICA9IDEyODsKICAgIERhdGEuVGV4QWxpZ24uQ0NTLkFsaWduLkhlaWdodCAgICAgICAgICAgICAgICAgPSA2NDsKICAgIERhdGEuVGV4QWxpZ24uQ0NTLk1heFBpdGNoaW5UaWxlcyAgICAgICAgICAgICAgPSA1MTI7CiAgICBEYXRhLlRleEFsaWduLkNvbXByZXNzZWQuV2lkdGggICAgICAgICAgICAgICAgID0gNDsgLy8gTm8gcmVhc29uIGZvciA+IEhBTElHTl80LgogICAgRGF0YS5UZXhBbGlnbi5Db21wcmVzc2VkLkhlaWdodCAgICAgICAgICAgICAgICA9IDQ7IC8vIE5vIHJlYXNvbiBmb3IgPiBWQUxJR05fNC4KICAgIERhdGEuVGV4QWxpZ24uQ29tcHJlc3NlZC5EZXB0aCAgICAgICAgICAgICAgICAgPSA0OyAvLyBObyByZWFzb24gZm9yID4gREFMSUdOXzQuCiAgICBEYXRhLlRleEFsaWduLkRlcHRoLldpZHRoICAgICAgICAgICAgICAgICAgICAgID0gNDsgLy8gU2VlIHVzYWdlIGZvciAxNmJwcCBIQUxJR05fOCBzcGVjaWFsLWNhc2luZy4KICAgIERhdGEuVGV4QWxpZ24uRGVwdGguSGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgPSA0OwogICAgRGF0YS5UZXhBbGlnbi5EZXB0aF9EMTZfVU5PUk1fMXhfNHhfMTZ4LldpZHRoICA9IDg7CiAgICBEYXRhLlRleEFsaWduLkRlcHRoX0QxNl9VTk9STV8xeF80eF8xNnguSGVpZ2h0ID0gRGF0YS5UZXhBbGlnbi5EZXB0aC5IZWlnaHQ7CiAgICBEYXRhLlRleEFsaWduLkRlcHRoX0QxNl9VTk9STV8yeF84eC5XaWR0aCAgICAgID0gODsKICAgIERhdGEuVGV4QWxpZ24uRGVwdGhfRDE2X1VOT1JNXzJ4Xzh4LkhlaWdodCAgICAgPSBEYXRhLlRleEFsaWduLkRlcHRoLkhlaWdodDsKICAgIERhdGEuVGV4QWxpZ24uU2VwYXJhdGVTdGVuY2lsLldpZHRoICAgICAgICAgICAgPSA4OwogICAgRGF0YS5UZXhBbGlnbi5TZXBhcmF0ZVN0ZW5jaWwuSGVpZ2h0ICAgICAgICAgICA9IDg7CiAgICBEYXRhLlRleEFsaWduLllVVjQyMi5XaWR0aCAgICAgICAgICAgICAgICAgICAgID0gNDsKICAgIERhdGEuVGV4QWxpZ24uWVVWNDIyLkhlaWdodCAgICAgICAgICAgICAgICAgICAgPSA0OwogICAgRGF0YS5UZXhBbGlnbi5BbGxPdGhlci5XaWR0aCAgICAgICAgICAgICAgICAgICA9IDE2OyAvLyBIQUxJR05fMTYgcmVxdWlyZWQgZm9yIG5vbi1NU0FBIFJUJ3MgZm9yIENDUyBGYXN0LUNsZWFyIGFuZC4uLlRCQQogICAgRGF0YS5UZXhBbGlnbi5BbGxPdGhlci5IZWlnaHQgICAgICAgICAgICAgICAgICA9IDQ7ICAvLyBWQUxJR05fNCBzaG91bGQgYmUgc3VmZmljZW50LgogICAgRGF0YS5UZXhBbGlnbi5YQWRhcHRlci5IZWlnaHQgICAgICAgICAgICAgICAgICA9IEQzREtNVF9DUk9TU19BREFQVEVSX1JFU09VUkNFX0hFSUdIVF9BTElHTk1FTlQ7CiAgICBEYXRhLlRleEFsaWduLlhBZGFwdGVyLldpZHRoICAgICAgICAgICAgICAgICAgID0gMTsgLy9taW5pbXVtIHNob3VsZCBiZSBvbmUuCgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gU1VSRkFDRV9TVEFURSBZT2Zmc2V0IEdyYW51bGFyaXR5CiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlN1cmZhY2VTdGF0ZVlPZmZzZXRHcmFudWxhcml0eSA9IDQ7CiAgICBEYXRhLlNhbXBsZXJGZXRjaEdyYW51bGFyaXR5SGVpZ2h0ICA9IDQ7CiAgICBEYXRhLlNhbXBsZXJGZXRjaEdyYW51bGFyaXR5V2lkdGggICA9IDQ7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gUmVzdHJpY3Rpb25zIGZvciBDcm9zcyBhZGFwdGVyIHJlc291cmNlCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlhBZGFwdGVyLkFsaWdubWVudCAgICAgICAgICAgID0gR01NX0tCWVRFKDY0KTsgLy82NEtCIGZvciBEWDEyL1N0ZFN3aXp6bGWXLU5vdCB3b3J0aCBzcGVjaWFsLWNhc2luZy4KICAgIERhdGEuWEFkYXB0ZXIuUGl0Y2hBbGlnbm1lbnQgICAgICAgPSBHTU1fQllURVMoRDNES01UX0NST1NTX0FEQVBURVJfUkVTT1VSQ0VfUElUQ0hfQUxJR05NRU5UKTsKICAgIERhdGEuWEFkYXB0ZXIuUmVuZGVyUGl0Y2hBbGlnbm1lbnQgPSBHTU1fQllURVMoRDNES01UX0NST1NTX0FEQVBURVJfUkVTT1VSQ0VfUElUQ0hfQUxJR05NRU5UKTsKICAgIERhdGEuWEFkYXB0ZXIuTG9ja1BpdGNoQWxpZ25tZW50ICAgPSBHTU1fQllURVMoRDNES01UX0NST1NTX0FEQVBURVJfUkVTT1VSQ0VfUElUQ0hfQUxJR05NRU5UKTsKICAgIERhdGEuWEFkYXB0ZXIuTWluUGl0Y2ggICAgICAgICAgICAgPSBHTU1fQllURVMoMzIpOwogICAgRGF0YS5YQWRhcHRlci5NYXhQaXRjaCAgICAgICAgICAgICA9IChwR21tR2xvYmFsQ29udGV4dC0+R2V0V2FUYWJsZSgpLldhUmVzdHJpY3RQaXRjaDEyOEtCKSA/IEdNTV9LQllURSgxMjgpIDogR01NX0tCWVRFKDI1Nik7CiAgICBEYXRhLlhBZGFwdGVyLk1pbkFsbG9jYXRpb25TaXplICAgID0gUEFHRV9TSVpFOwogICAgRGF0YS5YQWRhcHRlci5NaW5IZWlnaHQgICAgICAgICAgICA9IEdNTV9TQ0FOTElORVMoMSk7CiAgICBEYXRhLlhBZGFwdGVyLk1pbldpZHRoICAgICAgICAgICAgID0gR01NX1BJWEVMUygxKTsKICAgIERhdGEuWEFkYXB0ZXIuTWluRGVwdGggICAgICAgICAgICAgPSAwOwogICAgRGF0YS5YQWRhcHRlci5NYXhIZWlnaHQgICAgICAgICAgICA9IEdNTV9LQllURSgxNik7CiAgICBEYXRhLlhBZGFwdGVyLk1heFdpZHRoICAgICAgICAgICAgID0gR01NX0tCWVRFKDE2KTsKICAgIERhdGEuWEFkYXB0ZXIuTWF4RGVwdGggICAgICAgICAgICAgPSBHTU1fRklFTERfTkE7CiAgICBEYXRhLlhBZGFwdGVyLk1heEFycmF5U2l6ZSAgICAgICAgID0gR01NX0tCWVRFKDIpOwoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvL01heFNpemUgZm9yIGFueSBzdXJmYWNlIHR5cGUKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBEYXRhLlN1cmZhY2VNYXhTaXplICAgICAgICAgICAgICAgICAgICAgID0gR01NX0dCWVRFKDI1Nik7CiAgICBEYXRhLk1heEdwdVZpcnR1YWxBZGRyZXNzQml0c1BlclJlc291cmNlID0gMzg7CiAgICBEYXRhLkhpWlBpeGVsc1BlckJ5dGUgICAgICAgICAgICAgICAgICAgID0gMjsKCiAgICBEYXRhLlJlY29uTWF4SGVpZ2h0ID0gRGF0YS5UZXh0dXJlMkRTdXJmYWNlLk1heEhlaWdodDsgLy8gUmVjb25zdHJ1Y3RlZCBzdXJmYWNlcyByZXF1aXJlIG1vcmUgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgaGlnaGVyIHJlc29sdXRpb25zLgogICAgRGF0YS5SZWNvbk1heFdpZHRoICA9IERhdGEuVGV4dHVyZTJEU3VyZmFjZS5NYXhXaWR0aDsKCiAgICBEYXRhLk5vT2ZCaXRzU3VwcG9ydGVkICAgICAgICAgICAgICAgID0gMzk7CiAgICBEYXRhLkhpZ2hlc3RBY2NlcHRhYmxlUGh5c2ljYWxBZGRyZXNzID0gR0ZYX01BU0tfTEFSR0UoMCwgMzgpOwp9Cg==